diff --git a/.env.example b/.env.example index 369418ea13..fd2f0b1203 100644 --- a/.env.example +++ b/.env.example @@ -98,5 +98,8 @@ UNIFORM_CLIENT_AYLESBURY_VALE=👻 UNIFORM_CLIENT_CHILTERN=👻 UNIFORM_CLIENT_WYCOMBE=👻 +## Forthcoming Idox Nexus integration +IDOX_NEXUS_CLIENT=👻 + ## End-to-end test team (borrows Lambeth's details) GOV_UK_PAY_SECRET_E2E=👻 diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 2758fd20d0..f8baa88533 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -24,7 +24,7 @@ updates: - "theopensystemslab/planx" ignore: - dependency-name: "*" - update-types: ["version-update:semver-patch"] + update-types: ["version-update:semver-patch", "version-update:semver-minor"] # Hasura - package-ecosystem: "npm" @@ -38,7 +38,7 @@ updates: - "theopensystemslab/planx" ignore: - dependency-name: "*" - update-types: ["version-update:semver-patch"] + update-types: ["version-update:semver-patch", "version-update:semver-minor"] - package-ecosystem: "docker" directory: "/hasura.planx.uk" @@ -76,7 +76,7 @@ updates: - "theopensystemslab/planx" ignore: - dependency-name: "*" - update-types: ["version-update:semver-patch"] + update-types: ["version-update:semver-patch", "version-update:semver-minor"] # ShareDB - package-ecosystem: "npm" @@ -90,7 +90,7 @@ updates: - "theopensystemslab/planx" ignore: - dependency-name: "*" - update-types: ["version-update:semver-patch"] + update-types: ["version-update:semver-patch", "version-update:semver-minor"] - package-ecosystem: "docker" directory: "/sharedb.planx.uk" @@ -115,7 +115,7 @@ updates: - "theopensystemslab/planx" ignore: - dependency-name: "*" - update-types: ["version-update:semver-patch"] + update-types: ["version-update:semver-patch", "version-update:semver-minor"] - package-ecosystem: "docker" directory: "/api.planx.uk" @@ -142,7 +142,7 @@ updates: - "theopensystemslab/planx" ignore: - dependency-name: "*" - update-types: ["version-update:semver-patch"] + update-types: ["version-update:semver-patch", "version-update:semver-minor"] # Infrastructure # - package-ecosystem: "npm" 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/.github/workflows/pizza-teardown.yml b/.github/workflows/pizza-teardown.yml index 24e3de0de2..5eec564860 100644 --- a/.github/workflows/pizza-teardown.yml +++ b/.github/workflows/pizza-teardown.yml @@ -17,7 +17,7 @@ jobs: action: destroy api_key: ${{ secrets.VULTR_API_KEY }} domain: ${{ env.DOMAIN }} - os_type: ubuntu + os_type: alpine plan: vc2-1c-1gb pull_request_id: ${{ env.PULLREQUEST_ID }} region: lhr diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index 8e89d32df7..1511916bc4 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -307,7 +307,7 @@ jobs: action: create api_key: ${{ secrets.VULTR_API_KEY }} domain: ${{ env.DOMAIN }} - os_type: ubuntu + os_type: alpine plan: vc2-1c-1gb pull_request_id: ${{ env.PULLREQUEST_ID }} region: lhr @@ -324,13 +324,19 @@ jobs: password: ${{ steps.create.outputs.default_password }} command_timeout: 20m script: | - apt-get update -y - + apk update + apk add docker + addgroup root docker + rc-update add docker default + service docker start + apk add docker-cli-compose + + apk add git git clone "${{ secrets.AUTHENTICATED_REPO_URL }}" cd planx-new git fetch origin "pull/${{ env.PULLREQUEST_ID }}/head" && git checkout FETCH_HEAD - apt-get install awscli -y + apk add aws-cli export AWS_ACCESS_KEY_ID=${{ secrets.PIZZA_AWS_ACCESS_KEY_ID }} export AWS_SECRET_ACCESS_KEY=${{ secrets.PIZZA_AWS_SECRET_ACCESS_KEY }} export AWS_REGION=eu-west-2 @@ -352,15 +358,21 @@ jobs: username: root password: ${{ secrets.SSH_PASSWORD }} command_timeout: 10m + # TODO: some of below script might be superfluous for server update (rather than create) script: | - apt-get update -y + apk update + apk add docker + addgroup root docker + rc-update add docker default + service docker start + apk add docker-cli-compose git clone "${{ secrets.AUTHENTICATED_REPO_URL }}" cd planx-new git add . && git stash git fetch origin "pull/${{ env.PULLREQUEST_ID }}/head" && git checkout FETCH_HEAD - apt-get install awscli -y + apk add aws-cli export AWS_ACCESS_KEY_ID=${{ secrets.PIZZA_AWS_ACCESS_KEY_ID }} export AWS_SECRET_ACCESS_KEY=${{ secrets.PIZZA_AWS_SECRET_ACCESS_KEY }} export AWS_REGION=eu-west-2 diff --git a/.gitignore b/.gitignore index 133d7d8670..d2d8497fb8 100644 --- a/.gitignore +++ b/.gitignore @@ -24,6 +24,7 @@ api.planx.uk/tmp/ # Ignore certificate files **/*.chain **/*.cert +**/*.crt **/*.key **/*.pfx **/*.pkcs12 diff --git a/api.planx.uk/helpers.ts b/api.planx.uk/helpers.ts index 6bbcf5b71e..3433f5a9cd 100644 --- a/api.planx.uk/helpers.ts +++ b/api.planx.uk/helpers.ts @@ -6,6 +6,7 @@ import { $public, getClient } from "./client"; export interface FlowData { slug: string; + name: string; data: Flow["data"]; team_id: number; team: { slug: string }; @@ -28,6 +29,7 @@ const getFlowData = async (id: string): Promise => { flow: flows_by_pk(id: $id) { slug data + name team_id team { slug @@ -62,6 +64,7 @@ interface InsertFlow { const insertFlow = async ( teamId: number, slug: string, + name: string, flowData: Flow["data"], creatorId?: number, copiedFrom?: Flow["id"], @@ -75,6 +78,7 @@ const insertFlow = async ( mutation InsertFlow( $team_id: Int! $slug: String! + $name: String! $data: jsonb = {} $creator_id: Int $copied_from: uuid @@ -83,6 +87,7 @@ const insertFlow = async ( object: { team_id: $team_id slug: $slug + name: $name data: $data version: 1 creator_id: $creator_id @@ -96,6 +101,7 @@ const insertFlow = async ( { team_id: teamId, slug: slug, + name: name, data: flowData, creator_id: creatorId, copied_from: copiedFrom, diff --git a/api.planx.uk/lib/hasura/metadata/index.ts b/api.planx.uk/lib/hasura/metadata/index.ts index 41b2fc8d19..b6e5fb4aaa 100644 --- a/api.planx.uk/lib/hasura/metadata/index.ts +++ b/api.planx.uk/lib/hasura/metadata/index.ts @@ -12,6 +12,7 @@ interface ScheduledEvent { export interface CombinedResponse { bops?: ScheduledEventResponse; uniform?: ScheduledEventResponse; + idox?: ScheduledEventResponse; email?: ScheduledEventResponse; s3?: ScheduledEventResponse; } diff --git a/api.planx.uk/modules/admin/session/digitalPlanningData.ts b/api.planx.uk/modules/admin/session/digitalPlanningData.ts index f974839b28..1089e1aef4 100644 --- a/api.planx.uk/modules/admin/session/digitalPlanningData.ts +++ b/api.planx.uk/modules/admin/session/digitalPlanningData.ts @@ -40,9 +40,7 @@ export const getDigitalPlanningApplicationPayload = async ( return res.send(data); } catch (error) { return next({ - message: - "Failed to make Digital Planning Application payload: " + - (error as Error).message, + message: `Failed to make Digital Planning Application payload: ${error}. Stack: ${(error as Error).stack}`, }); } }; 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/copyFlow/service.ts b/api.planx.uk/modules/flows/copyFlow/service.ts index 6cf7ef8fbf..68e31f46e8 100644 --- a/api.planx.uk/modules/flows/copyFlow/service.ts +++ b/api.planx.uk/modules/flows/copyFlow/service.ts @@ -15,6 +15,7 @@ const copyFlow = async ( // Check if copied flow data should be inserted into `flows` table, or just returned for reference if (insert) { const newSlug = flow.slug + "-copy"; + const newName = flow.name + " (copy)"; const creatorId = userContext.getStore()?.user?.sub; if (!creatorId) throw Error("User details missing from request"); @@ -22,6 +23,7 @@ const copyFlow = async ( await insertFlow( flow.team_id, newSlug, + newName, uniqueFlowData, parseInt(creatorId), flowId, diff --git a/api.planx.uk/modules/flows/docs.yaml b/api.planx.uk/modules/flows/docs.yaml index 389ebf4075..d02b1290db 100644 --- a/api.planx.uk/modules/flows/docs.yaml +++ b/api.planx.uk/modules/flows/docs.yaml @@ -56,6 +56,25 @@ components: type: array items: type: string + ValidationCheck: + type: object + properties: + title: + type: string + example: File types + required: true + status: + type: string + enum: + - Pass + - Fail + - Warn + - Not applicable + example: Pass + message: + type: string + example: Your flow has valid file types + required: true responses: CopyFlow: content: @@ -124,19 +143,20 @@ components: properties: message: type: string - required: false - description: - type: string - required: false + required: true alteredNodes: oneOf: - type: array items: $ref: "#/components/schemas/Node" - type: "null" - updatedFlow: - $ref: "#/components/schemas/FlowData" + validationChecks: required: false + oneOf: + - type: array + items: + $ref: "#/components/schemas/ValidationCheck" + - type: "null" FlattenData: content: application/json: 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/flows/validate/controller.ts b/api.planx.uk/modules/flows/validate/controller.ts index 3e32ca98b8..a974a7229f 100644 --- a/api.planx.uk/modules/flows/validate/controller.ts +++ b/api.planx.uk/modules/flows/validate/controller.ts @@ -1,7 +1,7 @@ import { Node } from "@opensystemslab/planx-core/types"; import { ValidatedRequestHandler } from "../../../shared/middleware/validate"; import { z } from "zod"; -import { validateAndDiffFlow } from "./service"; +import { validateAndDiffFlow } from "./service/index"; import { ServerError } from "../../../errors"; interface ValidateAndDiffResponse { diff --git a/api.planx.uk/modules/flows/validate/helpers.ts b/api.planx.uk/modules/flows/validate/helpers.ts new file mode 100644 index 0000000000..1f50262e81 --- /dev/null +++ b/api.planx.uk/modules/flows/validate/helpers.ts @@ -0,0 +1,51 @@ +import { + ComponentType, + FlowGraph, + Node, +} from "@opensystemslab/planx-core/types"; +import { Entry } from "type-fest"; + +export const isComponentType = ( + entry: Entry, + type: ComponentType, +): entry is [string, Node] => { + const [nodeId, node] = entry; + if (nodeId === "_root") return false; + return Boolean(node?.type === type); +}; + +export const hasComponentType = ( + flowGraph: FlowGraph, + type: ComponentType, + fn?: string, +): boolean => { + const nodeIds = Object.entries(flowGraph).filter( + (entry): entry is [string, Node] => isComponentType(entry, type), + ); + if (fn) { + nodeIds + ?.filter(([_nodeId, nodeData]) => nodeData?.data?.fn === fn) + ?.map(([nodeId, _nodeData]) => nodeId); + } else { + nodeIds?.map(([nodeId, _nodeData]) => nodeId); + } + return Boolean(nodeIds?.length); +}; + +export const numberOfComponentType = ( + flowGraph: FlowGraph, + type: ComponentType, + fn?: string, +): number => { + const nodeIds = Object.entries(flowGraph).filter( + (entry): entry is [string, Node] => isComponentType(entry, type), + ); + if (fn) { + nodeIds + ?.filter(([_nodeId, nodeData]) => nodeData?.data?.fn === fn) + ?.map(([nodeId, _nodeData]) => nodeId); + } else { + nodeIds?.map(([nodeId, _nodeData]) => nodeId); + } + return nodeIds?.length; +}; diff --git a/api.planx.uk/modules/flows/validate/service.ts b/api.planx.uk/modules/flows/validate/service.ts deleted file mode 100644 index 132725e59e..0000000000 --- a/api.planx.uk/modules/flows/validate/service.ts +++ /dev/null @@ -1,232 +0,0 @@ -import * as jsondiffpatch from "jsondiffpatch"; -import { dataMerged, getMostRecentPublishedFlow } from "../../../helpers"; -import intersection from "lodash/intersection"; -import { - ComponentType, - FlowGraph, - Node, -} from "@opensystemslab/planx-core/types"; -import type { Entry } from "type-fest"; - -const validateAndDiffFlow = async (flowId: string) => { - const flattenedFlow = await dataMerged(flowId); - - const { - isValid: sectionsAreValid, - message: sectionsValidationMessage, - description: sectionsValidationDescription, - } = validateSections(flattenedFlow); - if (!sectionsAreValid) { - return { - alteredNodes: null, - message: sectionsValidationMessage, - description: sectionsValidationDescription, - }; - } - - const { - isValid: payIsValid, - message: payValidationMessage, - description: payValidationDescription, - } = validateInviteToPay(flattenedFlow); - if (!payIsValid) { - return { - alteredNodes: null, - message: payValidationMessage, - description: payValidationDescription, - }; - } - - const mostRecent = await getMostRecentPublishedFlow(flowId); - const delta = jsondiffpatch.diff(mostRecent, flattenedFlow); - - if (!delta) - return { - alteredNodes: null, - message: "No new changes to publish", - }; - - const alteredNodes = Object.keys(delta).map((key) => ({ - id: key, - ...flattenedFlow[key], - })); - - return { - alteredNodes, - message: "Changes valid", - }; -}; - -type ValidationResponse = { - isValid: boolean; - message: string; - description?: string; -}; - -const validateSections = (flowGraph: FlowGraph): ValidationResponse => { - if (getSectionNodeIds(flowGraph)?.length > 0) { - if (!sectionIsInFirstPosition(flowGraph)) { - return { - isValid: false, - message: "Cannot publish an invalid flow", - description: "When using Sections, your flow must start with a Section", - }; - } - - if (!allSectionsOnRoot(flowGraph)) { - return { - isValid: false, - message: "Cannot publish an invalid flow", - description: - "Found Sections in one or more External Portals, but Sections are only allowed in main flow", - }; - } - } - - return { - isValid: true, - message: "This flow has valid Sections or is not using Sections", - }; -}; - -const getSectionNodeIds = (flowGraph: FlowGraph): string[] => { - const sectionNodes = Object.entries(flowGraph).filter((entry) => - isComponentType(entry, ComponentType.Section), - ); - return sectionNodes.map(([nodeId, _nodeData]) => nodeId); -}; - -const sectionIsInFirstPosition = (flowGraph: FlowGraph): boolean => { - const firstNodeId = flowGraph["_root"].edges[0]; - return flowGraph[firstNodeId].type === ComponentType.Section; -}; - -const allSectionsOnRoot = (flowData: FlowGraph): boolean => { - const sectionTypeNodeIds = getSectionNodeIds(flowData); - const intersectingNodeIds = intersection( - flowData["_root"].edges, - sectionTypeNodeIds, - ); - return intersectingNodeIds.length === sectionTypeNodeIds.length; -}; - -const validateInviteToPay = (flowGraph: FlowGraph): ValidationResponse => { - const invalidResponseTemplate = { - isValid: false, - message: "Cannot publish an invalid flow", - }; - - if (inviteToPayEnabled(flowGraph)) { - if (numberOfComponentType(flowGraph, ComponentType.Pay) > 1) { - return { - ...invalidResponseTemplate, - description: - "When using Invite to Pay, your flow must have exactly ONE Pay", - }; - } - - if (!hasComponentType(flowGraph, ComponentType.Send)) { - return { - ...invalidResponseTemplate, - description: "When using Invite to Pay, your flow must have a Send", - }; - } - - if (numberOfComponentType(flowGraph, ComponentType.Send) > 1) { - return { - ...invalidResponseTemplate, - description: - "When using Invite to Pay, your flow must have exactly ONE Send. It can select many destinations", - }; - } - - if (!hasComponentType(flowGraph, ComponentType.FindProperty)) { - return { - ...invalidResponseTemplate, - description: - "When using Invite to Pay, your flow must have a FindProperty", - }; - } - - if ( - !hasComponentType( - flowGraph, - ComponentType.Checklist, - "proposal.projectType", - ) - ) { - return { - ...invalidResponseTemplate, - description: - "When using Invite to Pay, your flow must have a Checklist that sets the passport variable `proposal.projectType`", - }; - } - } - - return { - isValid: true, - message: - "This flow is valid for Invite to Pay or is not using Invite to Pay", - }; -}; - -const inviteToPayEnabled = (flowGraph: FlowGraph): boolean => { - const payNodes = Object.entries(flowGraph).filter( - (entry): entry is [string, Node] => - isComponentType(entry, ComponentType.Pay), - ); - const payNodeStatuses = payNodes.map( - ([_nodeId, node]) => node?.data?.allowInviteToPay, - ); - return ( - payNodeStatuses.length > 0 && - payNodeStatuses.every((status) => status === true) - ); -}; - -const isComponentType = ( - entry: Entry, - type: ComponentType, -): entry is [string, Node] => { - const [nodeId, node] = entry; - if (nodeId === "_root") return false; - return Boolean(node?.type === type); -}; - -const hasComponentType = ( - flowGraph: FlowGraph, - type: ComponentType, - fn?: string, -): boolean => { - const nodeIds = Object.entries(flowGraph).filter( - (entry): entry is [string, Node] => isComponentType(entry, type), - ); - if (fn) { - nodeIds - ?.filter(([_nodeId, nodeData]) => nodeData?.data?.fn === fn) - ?.map(([nodeId, _nodeData]) => nodeId); - } else { - nodeIds?.map(([nodeId, _nodeData]) => nodeId); - } - return Boolean(nodeIds?.length); -}; - -const numberOfComponentType = ( - flowGraph: FlowGraph, - type: ComponentType, - fn?: string, -): number => { - const nodeIds = Object.entries(flowGraph).filter( - (entry): entry is [string, Node] => isComponentType(entry, type), - ); - if (fn) { - nodeIds - ?.filter(([_nodeId, nodeData]) => nodeData?.data?.fn === fn) - ?.map(([nodeId, _nodeData]) => nodeId); - } else { - nodeIds?.map(([nodeId, _nodeData]) => nodeId); - } - return nodeIds?.length; -}; - -export { validateAndDiffFlow }; diff --git a/api.planx.uk/modules/flows/validate/service/fileTypes.ts b/api.planx.uk/modules/flows/validate/service/fileTypes.ts new file mode 100644 index 0000000000..cee8cfc32f --- /dev/null +++ b/api.planx.uk/modules/flows/validate/service/fileTypes.ts @@ -0,0 +1,76 @@ +import { getValidSchemaValues } from "@opensystemslab/planx-core"; +import { + ComponentType, + FlowGraph, + Node, +} from "@opensystemslab/planx-core/types"; +import countBy from "lodash/countBy"; + +import { isComponentType } from "../helpers"; +import { FlowValidationResponse } from "./index"; + +const validateFileTypes = (flowGraph: FlowGraph): FlowValidationResponse => { + // Get all passport variables set by FileUpload and/or FileUploadAndLabel + const allFileFns = [ + ...getFileUploadNodeFns(flowGraph), + ...getFileUploadAndLabelNodeFns(flowGraph), + ]; + if (allFileFns.length < 1) { + return { + title: "File types", + status: "Not applicable", + message: "Your flow is not using FileUpload or UploadAndLabel", + }; + } + + // Get all file types supported by current release of ODP Schema & compare + const validFileTypes = getValidSchemaValues("FileType"); + const invalidFileFns: string[] = []; + allFileFns.forEach((fn) => { + if (!validFileTypes?.includes(fn)) { + invalidFileFns.push(fn); + } + }); + if (invalidFileFns.length > 0) { + // Get unique fns with count of occurances + const countInvalidFileFns = countBy(invalidFileFns); + const summarisedInvalidFileFns: string[] = []; + Object.entries(countInvalidFileFns).map(([k, v]: [string, number]) => { + summarisedInvalidFileFns.push(`${k} (${v})`); + }); + return { + title: "File types", + status: "Warn", + message: `Your FileUpload or UploadAndLabel are setting data fields that are not supported by the current release of the ODP Schema: ${summarisedInvalidFileFns.join(", ")}`, + }; + } + + return { + title: "File types", + status: "Pass", + message: + "Files collected via FileUpload or UploadAndLabel are all supported by the ODP Schema", + }; +}; + +const getFileUploadNodeFns = (flowGraph: FlowGraph): string[] => { + const fileUploadNodes = Object.entries(flowGraph).filter((entry) => + isComponentType(entry, ComponentType.FileUpload), + ); + return fileUploadNodes.map(([_nodeId, node]) => node.data?.fn as string); +}; + +const getFileUploadAndLabelNodeFns = (flowGraph: FlowGraph): string[] => { + // Exclude Upload & Label nodes used in "info-only" mode with a hidden dropzone + const uploadAndLabelNodes = Object.entries(flowGraph).filter( + (entry) => + isComponentType(entry, ComponentType.FileUploadAndLabel) && + entry[1].data?.hideDropZone !== true, + ); + const uploadAndLabelFileTypes = uploadAndLabelNodes + .map(([_nodeId, node]: [string, Node]) => node.data?.fileTypes) + .flat(); + return uploadAndLabelFileTypes?.map((file: any) => file?.fn as string); +}; + +export { validateFileTypes }; diff --git a/api.planx.uk/modules/flows/validate/service/index.ts b/api.planx.uk/modules/flows/validate/service/index.ts new file mode 100644 index 0000000000..1702b3603a --- /dev/null +++ b/api.planx.uk/modules/flows/validate/service/index.ts @@ -0,0 +1,74 @@ +import { ComponentType, Edges, Node } from "@opensystemslab/planx-core/types"; +import * as jsondiffpatch from "jsondiffpatch"; + +import { dataMerged, getMostRecentPublishedFlow } from "../../../../helpers"; +import { validateFileTypes } from "./fileTypes"; +import { validateInviteToPay } from "./inviteToPay"; +import { validateSections } from "./sections"; +import { validateProjectTypes } from "./projectTypes"; + +type AlteredNode = { + id: string; + type?: ComponentType; + edges?: Edges; + data?: Node["data"]; +}; + +export type FlowValidationResponse = { + title: string; + status: "Pass" | "Fail" | "Warn" | "Not applicable"; + message: string; +}; + +interface FlowValidateAndDiffResponse { + alteredNodes: AlteredNode[] | null; + message: string; + validationChecks?: FlowValidationResponse[]; +} + +const validateAndDiffFlow = async ( + flowId: string, +): Promise => { + const flattenedFlow = await dataMerged(flowId); + const mostRecent = await getMostRecentPublishedFlow(flowId); + + const delta = jsondiffpatch.diff(mostRecent, flattenedFlow); + if (!delta) + return { + alteredNodes: null, + message: "No new changes to publish", + }; + + // Only get alteredNodes and do validationChecks if there have been changes + const alteredNodes = Object.keys(delta).map((key) => ({ + id: key, + ...flattenedFlow[key], + })); + + const validationChecks = []; + const sections = validateSections(flattenedFlow); + const inviteToPay = validateInviteToPay(flattenedFlow); + const fileTypes = validateFileTypes(flattenedFlow); + const projectTypes = validateProjectTypes(flattenedFlow); + validationChecks.push(sections, inviteToPay, fileTypes, projectTypes); + + // Arrange list of validation checks in order of status: Fail, Warn, Pass, Not applicable + const failingChecks = validationChecks.filter((v) => v.status == "Fail"); + const warningChecks = validationChecks.filter((v) => v.status === "Warn"); + const passingChecks = validationChecks.filter((v) => v.status === "Pass"); + const notApplicableChecks = validationChecks.filter( + (v) => v.status === "Not applicable", + ); + const sortedValidationChecks = failingChecks + .concat(warningChecks) + .concat(passingChecks) + .concat(notApplicableChecks); + + return { + alteredNodes, + message: "Changes queued to publish", + validationChecks: sortedValidationChecks, + }; +}; + +export { validateAndDiffFlow }; diff --git a/api.planx.uk/modules/flows/validate/service/inviteToPay.ts b/api.planx.uk/modules/flows/validate/service/inviteToPay.ts new file mode 100644 index 0000000000..61a57fe020 --- /dev/null +++ b/api.planx.uk/modules/flows/validate/service/inviteToPay.ts @@ -0,0 +1,88 @@ +import { ComponentType, FlowGraph } from "@opensystemslab/planx-core/types"; + +import { + hasComponentType, + isComponentType, + numberOfComponentType, +} from "../helpers"; +import { FlowValidationResponse } from "./index"; + +const validateInviteToPay = (flowGraph: FlowGraph): FlowValidationResponse => { + if (inviteToPayEnabled(flowGraph)) { + if (numberOfComponentType(flowGraph, ComponentType.Pay) > 1) { + return { + title: "Invite to Pay", + status: "Fail", + message: + "When using Invite to Pay, your flow must have exactly ONE Pay", + }; + } + + if (!hasComponentType(flowGraph, ComponentType.Send)) { + return { + title: "Invite to Pay", + status: "Fail", + message: "When using Invite to Pay, your flow must have a Send", + }; + } + + if (numberOfComponentType(flowGraph, ComponentType.Send) > 1) { + return { + title: "Invite to Pay", + status: "Fail", + message: + "When using Invite to Pay, your flow must have exactly ONE Send. It can select many destinations", + }; + } + + if (!hasComponentType(flowGraph, ComponentType.FindProperty)) { + return { + title: "Invite to Pay", + status: "Fail", + message: "When using Invite to Pay, your flow must have a FindProperty", + }; + } + + if ( + !hasComponentType( + flowGraph, + ComponentType.Checklist, + "proposal.projectType", + ) + ) { + return { + title: "Invite to Pay", + status: "Fail", + message: + "When using Invite to Pay, your flow must have a Checklist that sets `proposal.projectType`", + }; + } + + return { + title: "Invite to Pay", + status: "Pass", + message: "Your flow has valid Invite to Pay", + }; + } + + return { + title: "Invite to Pay", + status: "Not applicable", + message: "Your flow is not using Invite to Pay", + }; +}; + +const inviteToPayEnabled = (flowGraph: FlowGraph): boolean => { + const payNodes = Object.entries(flowGraph).filter((entry) => + isComponentType(entry, ComponentType.Pay), + ); + const payNodeStatuses = payNodes.map( + ([_nodeId, node]) => node?.data?.allowInviteToPay, + ); + return ( + payNodeStatuses.length > 0 && + payNodeStatuses.every((status) => status === true) + ); +}; + +export { validateInviteToPay }; diff --git a/api.planx.uk/modules/flows/validate/service/projectTypes.ts b/api.planx.uk/modules/flows/validate/service/projectTypes.ts new file mode 100644 index 0000000000..2c65d71fb6 --- /dev/null +++ b/api.planx.uk/modules/flows/validate/service/projectTypes.ts @@ -0,0 +1,69 @@ +import { getValidSchemaValues } from "@opensystemslab/planx-core"; +import { ComponentType, FlowGraph } from "@opensystemslab/planx-core/types"; +import countBy from "lodash/countBy"; + +import { isComponentType } from "../helpers"; +import { FlowValidationResponse } from "./index"; + +const validateProjectTypes = (flowGraph: FlowGraph): FlowValidationResponse => { + // Get all passport values set by Answers of Checklists that set fn "proposal.projectType" + const projectTypeVals = getProjectTypeVals(flowGraph); + if (projectTypeVals.length < 1) { + return { + title: "Project types", + status: "Not applicable", + message: + 'Your flow is not using Checklists which set "proposal.projectType"', + }; + } + + // Get all project types supported by current release of ODP Schema & compare + const validProjectTypes = getValidSchemaValues("ProjectType"); + const invalidProjectVals: string[] = []; + projectTypeVals.forEach((val) => { + if (!validProjectTypes?.includes(val)) { + invalidProjectVals.push(val); + } + }); + if (invalidProjectVals.length > 0) { + // Get unique fns with count of occurances + const countInvalidProjectVals = countBy(invalidProjectVals); + const summarisedInvalidProjectVals: string[] = []; + Object.entries(countInvalidProjectVals).map(([k, v]: [string, number]) => { + summarisedInvalidProjectVals.push(`${k} (${v})`); + }); + return { + title: "Project types", + status: "Warn", + message: `Your Checklists setting "proposal.projectType" include options that are not supported by the current release of the ODP Schema: ${summarisedInvalidProjectVals.join(", ")}`, + }; + } + + return { + title: "Project types", + status: "Pass", + message: + "Project types set via Checklists are all supported by the ODP Schema", + }; +}; + +const getProjectTypeVals = (flowGraph: FlowGraph): string[] => { + const projectTypeChecklistNodes = Object.entries(flowGraph).filter( + (entry) => + isComponentType(entry, ComponentType.Checklist) && + entry[1].data?.fn === "proposal.projectType", + ); + + const answerVals: string[] = []; + projectTypeChecklistNodes.map(([_nodeId, node]) => + node.edges?.map((edgeId) => { + if (typeof flowGraph[edgeId]?.data?.val === "string") { + answerVals.push(flowGraph[edgeId]?.data?.val); + } + }), + ); + + return answerVals; +}; + +export { validateProjectTypes }; diff --git a/api.planx.uk/modules/flows/validate/service/sections.ts b/api.planx.uk/modules/flows/validate/service/sections.ts new file mode 100644 index 0000000000..a955ae11ae --- /dev/null +++ b/api.planx.uk/modules/flows/validate/service/sections.ts @@ -0,0 +1,61 @@ +import { ComponentType, FlowGraph } from "@opensystemslab/planx-core/types"; +import intersection from "lodash/intersection"; + +import { isComponentType } from "../helpers"; +import { FlowValidationResponse } from "./index"; + +const validateSections = (flowGraph: FlowGraph): FlowValidationResponse => { + if (getSectionNodeIds(flowGraph)?.length > 0) { + if (!sectionIsInFirstPosition(flowGraph)) { + return { + title: "Sections", + status: "Fail", + message: "When using Sections, your flow must start with a Section", + }; + } + + if (!allSectionsOnRoot(flowGraph)) { + return { + title: "Sections", + status: "Fail", + message: + "Found Sections in one or more External Portals, but Sections are only allowed in main flow", + }; + } + + return { + title: "Sections", + status: "Pass", + message: "Your flow has valid Sections", + }; + } + + return { + title: "Sections", + status: "Not applicable", + message: "Your flow is not using Sections", + }; +}; + +const getSectionNodeIds = (flowGraph: FlowGraph): string[] => { + const sectionNodes = Object.entries(flowGraph).filter((entry) => + isComponentType(entry, ComponentType.Section), + ); + return sectionNodes.map(([nodeId, _nodeData]) => nodeId); +}; + +const sectionIsInFirstPosition = (flowGraph: FlowGraph): boolean => { + const firstNodeId = flowGraph["_root"].edges[0]; + return flowGraph[firstNodeId].type === ComponentType.Section; +}; + +const allSectionsOnRoot = (flowData: FlowGraph): boolean => { + const sectionTypeNodeIds = getSectionNodeIds(flowData); + const intersectingNodeIds = intersection( + flowData["_root"].edges, + sectionTypeNodeIds, + ); + return intersectingNodeIds.length === sectionTypeNodeIds.length; +}; + +export { validateSections }; diff --git a/api.planx.uk/modules/flows/validate/validate.test.ts b/api.planx.uk/modules/flows/validate/validate.test.ts index e3be178f10..1c2dfd09e4 100644 --- a/api.planx.uk/modules/flows/validate/validate.test.ts +++ b/api.planx.uk/modules/flows/validate/validate.test.ts @@ -107,12 +107,31 @@ describe("sections validation on diff", () => { .set(auth) .expect(200) .then((res) => { - expect(res.body).toEqual({ - alteredNodes: null, - message: "Cannot publish an invalid flow", - description: - "Found Sections in one or more External Portals, but Sections are only allowed in main flow", - }); + expect(res.body.message).toEqual("Changes queued to publish"); + expect(res.body.validationChecks).toEqual([ + { + title: "Sections", + status: "Fail", + message: + "Found Sections in one or more External Portals, but Sections are only allowed in main flow", + }, + { + title: "Invite to Pay", + status: "Not applicable", + message: "Your flow is not using Invite to Pay", + }, + { + title: "File types", + status: "Not applicable", + message: "Your flow is not using FileUpload or UploadAndLabel", + }, + { + title: "Project types", + status: "Not applicable", + message: + 'Your flow is not using Checklists which set "proposal.projectType"', + }, + ]); }); }); @@ -148,12 +167,30 @@ describe("sections validation on diff", () => { .set(auth) .expect(200) .then((res) => { - expect(res.body).toEqual({ - alteredNodes: null, - message: "Cannot publish an invalid flow", - description: - "When using Sections, your flow must start with a Section", - }); + expect(res.body.message).toEqual("Changes queued to publish"); + expect(res.body.validationChecks).toEqual([ + { + title: "Sections", + status: "Fail", + message: "When using Sections, your flow must start with a Section", + }, + { + title: "Invite to Pay", + status: "Not applicable", + message: "Your flow is not using Invite to Pay", + }, + { + title: "File types", + status: "Not applicable", + message: "Your flow is not using FileUpload or UploadAndLabel", + }, + { + title: "Project types", + status: "Not applicable", + message: + 'Your flow is not using Checklists which set "proposal.projectType"', + }, + ]); }); }); }); @@ -180,10 +217,30 @@ describe("invite to pay validation on diff", () => { .set(auth) .expect(200) .then((res) => { - expect(res.body.message).toEqual("Cannot publish an invalid flow"); - expect(res.body.description).toEqual( - "When using Invite to Pay, your flow must have a Send", - ); + expect(res.body.message).toEqual("Changes queued to publish"); + expect(res.body.validationChecks).toEqual([ + { + title: "Invite to Pay", + status: "Fail", + message: "When using Invite to Pay, your flow must have a Send", + }, + { + title: "Project types", + status: "Pass", + message: + "Project types set via Checklists are all supported by the ODP Schema", + }, + { + title: "Sections", + status: "Not applicable", + message: "Your flow is not using Sections", + }, + { + title: "File types", + status: "Not applicable", + message: "Your flow is not using FileUpload or UploadAndLabel", + }, + ]); }); }); @@ -219,10 +276,31 @@ describe("invite to pay validation on diff", () => { .set(auth) .expect(200) .then((res) => { - expect(res.body.message).toEqual("Cannot publish an invalid flow"); - expect(res.body.description).toEqual( - "When using Invite to Pay, your flow must have exactly ONE Send. It can select many destinations", - ); + expect(res.body.message).toEqual("Changes queued to publish"); + expect(res.body.validationChecks).toEqual([ + { + title: "Invite to Pay", + status: "Fail", + message: + "When using Invite to Pay, your flow must have exactly ONE Send. It can select many destinations", + }, + { + title: "Project types", + status: "Pass", + message: + "Project types set via Checklists are all supported by the ODP Schema", + }, + { + title: "Sections", + status: "Not applicable", + message: "Your flow is not using Sections", + }, + { + title: "File types", + status: "Not applicable", + message: "Your flow is not using FileUpload or UploadAndLabel", + }, + ]); }); }); @@ -254,10 +332,31 @@ describe("invite to pay validation on diff", () => { .set(auth) .expect(200) .then((res) => { - expect(res.body.message).toEqual("Cannot publish an invalid flow"); - expect(res.body.description).toEqual( - "When using Invite to Pay, your flow must have a FindProperty", - ); + expect(res.body.message).toEqual("Changes queued to publish"); + expect(res.body.validationChecks).toEqual([ + { + title: "Invite to Pay", + status: "Fail", + message: + "When using Invite to Pay, your flow must have a FindProperty", + }, + { + title: "Project types", + status: "Pass", + message: + "Project types set via Checklists are all supported by the ODP Schema", + }, + { + title: "Sections", + status: "Not applicable", + message: "Your flow is not using Sections", + }, + { + title: "File types", + status: "Not applicable", + message: "Your flow is not using FileUpload or UploadAndLabel", + }, + ]); }); }); @@ -291,10 +390,31 @@ describe("invite to pay validation on diff", () => { .set(auth) .expect(200) .then((res) => { - expect(res.body.message).toEqual("Cannot publish an invalid flow"); - expect(res.body.description).toEqual( - "When using Invite to Pay, your flow must have exactly ONE Pay", - ); + expect(res.body.message).toEqual("Changes queued to publish"); + expect(res.body.validationChecks).toEqual([ + { + title: "Invite to Pay", + status: "Fail", + message: + "When using Invite to Pay, your flow must have exactly ONE Pay", + }, + { + title: "Project types", + status: "Pass", + message: + "Project types set via Checklists are all supported by the ODP Schema", + }, + { + title: "Sections", + status: "Not applicable", + message: "Your flow is not using Sections", + }, + { + title: "File types", + status: "Not applicable", + message: "Your flow is not using FileUpload or UploadAndLabel", + }, + ]); }); }); @@ -330,10 +450,196 @@ describe("invite to pay validation on diff", () => { .set(auth) .expect(200) .then((res) => { - expect(res.body.message).toEqual("Cannot publish an invalid flow"); - expect(res.body.description).toEqual( - "When using Invite to Pay, your flow must have a Checklist that sets the passport variable `proposal.projectType`", - ); + expect(res.body.message).toEqual("Changes queued to publish"); + expect(res.body.validationChecks).toEqual([ + { + title: "Invite to Pay", + status: "Fail", + message: + "When using Invite to Pay, your flow must have a Checklist that sets `proposal.projectType`", + }, + { + title: "Sections", + status: "Not applicable", + message: "Your flow is not using Sections", + }, + { + title: "File types", + status: "Not applicable", + message: "Your flow is not using FileUpload or UploadAndLabel", + }, + { + title: "Project types", + status: "Not applicable", + message: + 'Your flow is not using Checklists which set "proposal.projectType"', + }, + ]); + }); + }); +}); + +describe("ODP Schema file type validation on diff", () => { + it("warns if any file data fields aren't supported by the ODP Schema", async () => { + const alteredFlow = { + ...mockFlowData, + fileUpload: { + type: 140, + data: { + color: "#EFEFEF", + fn: "roofPlan.existing", + title: "Roof plans", + }, + }, + fileUploadAndLabel: { + type: 145, + data: { + title: "Upload and label", + fileTypes: [ + { + name: "Site plans", + fn: "sitePlanTypo", + rule: { + condition: "AlwaysRequired", + }, + }, + { + name: "Heritage statement", + fn: "heritageStatement", + rule: { + condition: "AlwaysRequired", + }, + }, + ], + hideDropZone: false, + }, + }, + }; + + queryMock.mockQuery({ + name: "GetFlowData", + matchOnVariables: false, + data: { + flow: { + data: alteredFlow, + slug: "altered-flow-name", + team_id: 1, + team: { + slug: "testing", + }, + publishedFlows: [{ data: alteredFlow }], + }, + }, + }); + + await supertest(app) + .post("/flows/1/diff") + .set(auth) + .expect(200) + .then((res) => { + expect(res.body.message).toEqual("Changes queued to publish"); + expect(res.body.validationChecks).toEqual([ + { + title: "File types", + status: "Warn", + message: + "Your FileUpload or UploadAndLabel are setting data fields that are not supported by the current release of the ODP Schema: sitePlanTypo (1)", + }, + { + title: "Sections", + status: "Pass", + message: "Your flow has valid Sections", + }, + { + title: "Invite to Pay", + status: "Not applicable", + message: "Your flow is not using Invite to Pay", + }, + { + title: "Project types", + status: "Not applicable", + message: + 'Your flow is not using Checklists which set "proposal.projectType"', + }, + ]); + }); + }); + + it("skips validation checks for UploadAndLabel components used in info-only mode with hidden dropzone", async () => { + const alteredFlow = { + ...mockFlowData, + fileUpload: { + type: 140, + data: { + color: "#EFEFEF", + fn: "roofPlan.existing", + title: "Roof plans", + }, + }, + fileUploadAndLabelInfoOnly: { + type: 145, + data: { + title: "Prepare these documents", + fileTypes: [ + { + name: "Design and access statement", + fn: "designAndAccessTypo", + rule: { + condition: "AlwaysRequired", + }, + }, + ], + hideDropZone: true, + }, + }, + }; + + queryMock.mockQuery({ + name: "GetFlowData", + matchOnVariables: false, + data: { + flow: { + data: alteredFlow, + slug: "altered-flow-name", + team_id: 1, + team: { + slug: "testing", + }, + publishedFlows: [{ data: alteredFlow }], + }, + }, + }); + + await supertest(app) + .post("/flows/1/diff") + .set(auth) + .expect(200) + .then((res) => { + expect(res.body.message).toEqual("Changes queued to publish"); + expect(res.body.validationChecks).toEqual([ + { + title: "Sections", + status: "Pass", + message: "Your flow has valid Sections", + }, + { + title: "File types", + status: "Pass", + message: + "Files collected via FileUpload or UploadAndLabel are all supported by the ODP Schema", + }, + { + title: "Invite to Pay", + status: "Not applicable", + message: "Your flow is not using Invite to Pay", + }, + { + title: "Project types", + status: "Not applicable", + message: + 'Your flow is not using Checklists which set "proposal.projectType"', + }, + ]); }); }); }); diff --git a/api.planx.uk/modules/gis/service/digitalLand.ts b/api.planx.uk/modules/gis/service/digitalLand.ts index 6f8d968cef..9298eefd31 100644 --- a/api.planx.uk/modules/gis/service/digitalLand.ts +++ b/api.planx.uk/modules/gis/service/digitalLand.ts @@ -5,7 +5,7 @@ import type { } from "@opensystemslab/planx-core/types"; import { gql } from "graphql-request"; import fetch from "isomorphic-fetch"; -import { addDesignatedVariable } from "./helpers"; +import { addDesignatedVariable, omitGeometry } from "./helpers"; import { baseSchema } from "./local_authorities/metadata/base"; import { $api } from "../../../client"; @@ -119,14 +119,14 @@ async function go( ); // because there can be many digital land datasets per planx variable, check if this key is already in our result if (key && Object.keys(formattedResult).includes(key)) { - formattedResult[key]["data"]?.push(entity); + formattedResult[key]["data"]?.push(omitGeometry(entity)); } else { if (key) { formattedResult[key] = { fn: key, value: true, text: baseSchema[key].pos, - data: [entity], + data: [omitGeometry(entity)], category: baseSchema[key].category, }; } diff --git a/api.planx.uk/modules/pay/service/inviteToPay/createPaymentSendEvents.test.ts b/api.planx.uk/modules/pay/service/inviteToPay/createPaymentSendEvents.test.ts index 40569d86e6..2415f96bf6 100644 --- a/api.planx.uk/modules/pay/service/inviteToPay/createPaymentSendEvents.test.ts +++ b/api.planx.uk/modules/pay/service/inviteToPay/createPaymentSendEvents.test.ts @@ -34,6 +34,7 @@ describe("Create payment send events webhook", () => { flow: { id: "flow-123", slug: "apply-for-something", + name: "Apply for Something", }, }, }, 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.test.ts b/api.planx.uk/modules/pay/service/inviteToPay/sendConfirmationEmail.test.ts index b564744cfb..6150f6b4a2 100644 --- a/api.planx.uk/modules/pay/service/inviteToPay/sendConfirmationEmail.test.ts +++ b/api.planx.uk/modules/pay/service/inviteToPay/sendConfirmationEmail.test.ts @@ -31,6 +31,7 @@ describe("sendAgentAndPayeeConfirmationEmail", () => { email: agentEmail, flow: { slug: "some-flow", + name: "Some Flow", team: { notifyPersonalisation: { emailReplyToId: "123", @@ -57,36 +58,18 @@ describe("sendAgentAndPayeeConfirmationEmail", () => { ], }, }); - queryMock.mockQuery({ - name: "LookupHumanReadableProjectType", - variables: { - rawList: [ - "alter.internal", - "alter.openings.add.doors.rear", - "alter.facades.paint", - ], - }, - data: { - projectTypes: [ - { description: "internal alterations" }, - { description: "addition of doorways to the rear of the building" }, - { description: "painting of facades" }, - ], - }, - }); const expectedConfig = { personalisation: { applicantName: "xyz", payeeName: "payeeName", address: "123 PLACE", - projectType: - "Internal alterations, addition of doorways to the rear of the building, and painting of facades", + projectType: "Paint the facade and changes to internal walls or layout", emailReplyToId: "123", helpEmail: "help@email.com", helpOpeningHours: "9-5", helpPhone: "123", - serviceName: "Some flow", + serviceName: "Some Flow", }, }; await sendAgentAndPayeeConfirmationEmail("mockSessionId"); diff --git a/api.planx.uk/modules/pay/service/inviteToPay/sendConfirmationEmail.ts b/api.planx.uk/modules/pay/service/inviteToPay/sendConfirmationEmail.ts index fb69bad444..be197253be 100644 --- a/api.planx.uk/modules/pay/service/inviteToPay/sendConfirmationEmail.ts +++ b/api.planx.uk/modules/pay/service/inviteToPay/sendConfirmationEmail.ts @@ -1,14 +1,14 @@ -import { $public, $api } from "../../../../client"; -import { sendEmail } from "../../../../lib/notify"; +import { formatRawProjectTypes } from "@opensystemslab/planx-core"; import { gql } from "graphql-request"; -import { convertSlugToName } from "../../../saveAndReturn/service/utils"; +import { $api } from "../../../../client"; +import { sendEmail } from "../../../../lib/notify"; import type { AgentAndPayeeSubmissionNotifyConfig } from "../../../../types"; export async function sendAgentAndPayeeConfirmationEmail(sessionId: string) { const { personalisation, applicantEmail, payeeEmail, projectTypes } = await getDataForPayeeAndAgentEmails(sessionId); const projectType = projectTypes.length - ? await $public.formatRawProjectTypes(projectTypes) + ? formatRawProjectTypes(projectTypes) : "Project type not submitted"; const config: AgentAndPayeeSubmissionNotifyConfig = { personalisation: { @@ -47,7 +47,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( @@ -68,6 +73,7 @@ async function getDataForPayeeAndAgentEmails( email: string; flow: { slug: string; + name: string; team: { notifyPersonalisation: { emailReplyToId: string; @@ -89,7 +95,7 @@ async function getDataForPayeeAndAgentEmails( const data = response.lowcal_sessions[0]; const { emailReplyToId, helpEmail, helpOpeningHours, helpPhone } = data.flow.team.notifyPersonalisation; - const serviceName = convertSlugToName(data.flow.slug); + const serviceName = data.flow.name; const applicantEmail = data.email; const { payeeEmail, payeeName, address, projectTypes, applicantName } = data.paymentRequests[0]; diff --git a/api.planx.uk/modules/pay/service/inviteToPay/sendPaymentEmail.test.ts b/api.planx.uk/modules/pay/service/inviteToPay/sendPaymentEmail.test.ts index d836ff4c21..191dc6c522 100644 --- a/api.planx.uk/modules/pay/service/inviteToPay/sendPaymentEmail.test.ts +++ b/api.planx.uk/modules/pay/service/inviteToPay/sendPaymentEmail.test.ts @@ -6,11 +6,6 @@ import { validatePaymentRequestNotFoundQueryMock, validatePaymentRequestQueryMock, } from "../../../../tests/mocks/inviteToPayMocks"; -import { CoreDomainClient } from "@opensystemslab/planx-core"; - -jest - .spyOn(CoreDomainClient.prototype, "formatRawProjectTypes") - .mockResolvedValue("New office premises"); const TEST_PAYMENT_REQUEST_ID = "09655c28-3f34-4619-9385-cd57312acc44"; diff --git a/api.planx.uk/modules/pay/service/inviteToPay/sendPaymentEmail.ts b/api.planx.uk/modules/pay/service/inviteToPay/sendPaymentEmail.ts index 7f0899a204..acb92aa972 100644 --- a/api.planx.uk/modules/pay/service/inviteToPay/sendPaymentEmail.ts +++ b/api.planx.uk/modules/pay/service/inviteToPay/sendPaymentEmail.ts @@ -1,23 +1,22 @@ +import { formatRawProjectTypes } from "@opensystemslab/planx-core"; +import type { PaymentRequest, Team } from "@opensystemslab/planx-core/types"; import { gql } from "graphql-request"; -import { - calculateExpiryDate, - convertSlugToName, - getServiceLink, -} from "../../../saveAndReturn/service/utils"; import { Template, getClientForTemplate, sendEmail, } from "../../../../lib/notify"; import { InviteToPayNotifyConfig } from "../../../../types"; -import { Team } from "../../../../types"; -import type { PaymentRequest } from "@opensystemslab/planx-core/types"; -import { $public } from "../../../../client"; +import { + calculateExpiryDate, + getServiceLink, +} from "../../../saveAndReturn/service/utils"; interface SessionDetails { email: string; flow: { slug: string; + name: string; team: Team; }; } @@ -38,7 +37,7 @@ const sendSinglePaymentEmail = async ({ paymentRequestId, template, ); - const config = await getInviteToPayNotifyConfig(session, paymentRequest); + const config = getInviteToPayNotifyConfig(session, paymentRequest); const recipient = template.includes("-agent") ? session.email : paymentRequest.payeeEmail; @@ -69,12 +68,22 @@ const validatePaymentRequest = async ( email flow { slug + name team { id name slug domain - notifyPersonalisation: notify_personalisation + settings: team_settings { + boundaryUrl: boundary_url + boundaryBBox: boundary_bbox + homepage + helpEmail: help_email + helpPhone: help_phone + helpOpeningHours: help_opening_hours + emailReplyToId: email_reply_to_id + boundaryBBox: boundary_bbox + } } } } @@ -104,31 +113,41 @@ const validatePaymentRequest = async ( } }; -const getInviteToPayNotifyConfig = async ( +const getInviteToPayNotifyConfig = ( 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: convertSlugToName(session.flow.slug), - serviceLink: getServiceLink(session.flow.team, session.flow.slug), - expiryDate: calculateExpiryDate(paymentRequest.createdAt), - paymentLink: getPaymentLink(session, paymentRequest), - }, -}); +): InviteToPayNotifyConfig => { + 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: + 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 4adf570b9e..c1464a59c1 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,29 +8,11 @@ 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"; -const mockFormatRawProjectTypes = jest - .fn() - .mockResolvedValue(["New office premises"]); - -jest.mock("@opensystemslab/planx-core", () => { - const actualCoreDomainClient = jest.requireActual( - "@opensystemslab/planx-core", - ).CoreDomainClient; - - return { - CoreDomainClient: class extends actualCoreDomainClient { - constructor() { - super(); - this.formatRawProjectTypes = () => mockFormatRawProjectTypes(); - } - }, - }; -}); - describe("buildContentFromSessions function", () => { it("should return correctly formatted content for a single session", async () => { const sessions: PartialDeep[] = [ @@ -49,13 +31,14 @@ describe("buildContentFromSessions function", () => { created_at: "2026-05-01T01:02:03.865452+00:00", flow: { slug: "apply-for-a-lawful-development-certificate", + name: "Apply for a Lawful Development Certificate", }, }, ]; - 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 + Project type: New offices Expiry Date: 29 May 2026 Link: example.com/team/apply-for-a-lawful-development-certificate/published?sessionId=123`; expect( @@ -83,6 +66,7 @@ describe("buildContentFromSessions function", () => { created_at: "2026-05-01T01:02:03.865452+00:00", flow: { slug: "apply-for-a-lawful-development-certificate", + name: "Apply for a Lawful Development Certificate", }, }, { @@ -100,6 +84,7 @@ describe("buildContentFromSessions function", () => { created_at: "2026-05-01T01:02:03.865452+00:00", flow: { slug: "apply-for-a-lawful-development-certificate", + name: "Apply for a Lawful Development Certificate", }, }, { @@ -117,20 +102,21 @@ describe("buildContentFromSessions function", () => { created_at: "2026-05-01T01:02:03.865452+00:00", flow: { slug: "apply-for-a-lawful-development-certificate", + name: "Apply for a Lawful Development Certificate", }, }, ]; - 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 + Project type: New offices 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 + Project type: New offices 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 + Project type: New offices Expiry Date: 29 May 2026 Link: example.com/team/apply-for-a-lawful-development-certificate/published?sessionId=789`; expect( @@ -158,6 +144,7 @@ describe("buildContentFromSessions function", () => { created_at: "2026-05-01T01:02:03.865452+00:00", flow: { slug: "apply-for-a-lawful-development-certificate", + name: "Apply for a Lawful Development Certificate", }, }, { @@ -175,12 +162,13 @@ describe("buildContentFromSessions function", () => { created_at: "2022-05-01T01:02:03.865452+00:00", flow: { slug: "apply-for-a-lawful-development-certificate", + name: "Apply for a Lawful Development Certificate", }, }, ]; - 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 + Project type: New offices Expiry Date: 29 May 2026 Link: example.com/team/apply-for-a-lawful-development-certificate/published?sessionId=123`; expect( @@ -206,13 +194,14 @@ describe("buildContentFromSessions function", () => { created_at: "2026-05-01T01:02:03.865452+00:00", flow: { slug: "apply-for-a-lawful-development-certificate", + name: "Apply for a Lawful Development Certificate", }, }, ]; - 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 + Project type: New offices Expiry Date: 29 May 2026 Link: example.com/team/apply-for-a-lawful-development-certificate/published?sessionId=123`; expect( @@ -224,7 +213,6 @@ describe("buildContentFromSessions function", () => { }); it("should handle an empty project type field", async () => { - mockFormatRawProjectTypes.mockResolvedValueOnce(""); const sessions: PartialDeep[] = [ { data: { @@ -240,11 +228,12 @@ describe("buildContentFromSessions function", () => { created_at: "2026-05-01T01:02:03.865452+00:00", flow: { slug: "apply-for-a-lawful-development-certificate", + name: "Apply for a Lawful Development Certificate", }, }, ]; - 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..3c33c34e09 100644 --- a/api.planx.uk/modules/saveAndReturn/service/resumeApplication.ts +++ b/api.planx.uk/modules/saveAndReturn/service/resumeApplication.ts @@ -1,15 +1,12 @@ -import type { SiteAddress } from "@opensystemslab/planx-core/types"; +import { formatRawProjectTypes } from "@opensystemslab/planx-core"; +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 { $api } 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 +19,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 +66,16 @@ const validateRequest = async ( teams(where: { slug: { _eq: $teamSlug } }) { slug name - notifyPersonalisation: notify_personalisation + settings: team_settings { + boundaryUrl: boundary_url + boundaryBBox: boundary_bbox + homepage + helpEmail: help_email + helpPhone: help_phone + helpOpeningHours: help_opening_hours + emailReplyToId: email_reply_to_id + boundaryBBox: boundary_bbox + } domain } } @@ -98,7 +104,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, }; }; @@ -110,14 +119,15 @@ const buildContentFromSessions = async ( sessions: LowCalSession[], team: Team, ): Promise => { - const contentBuilder = async (session: LowCalSession) => { - const service = convertSlugToName(session.flow.slug); + const contentBuilder = (session: LowCalSession) => { const address: SiteAddress | undefined = session.data?.passport?.data?._address; const addressLine = address?.single_line_address || address?.title; - const projectType = await $public.formatRawProjectTypes( - session.data?.passport?.data?.["proposal.projectType"], - ); + const projectType = session.data?.passport?.data?.["proposal.projectType"] + ? formatRawProjectTypes( + session.data?.passport?.data?.["proposal.projectType"], + ) + : "Project type not submitted"; const resumeLink = getResumeLink(session, team, session.flow.slug); const expiryDate = calculateExpiryDate(session.created_at); @@ -126,7 +136,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 17da363f69..492cacf10e 100644 --- a/api.planx.uk/modules/saveAndReturn/service/utils.ts +++ b/api.planx.uk/modules/saveAndReturn/service/utils.ts @@ -1,20 +1,15 @@ -import { SiteAddress } from "@opensystemslab/planx-core/types"; -import { format, addDays } from "date-fns"; +import { formatRawProjectTypes } from "@opensystemslab/planx-core"; +import { SiteAddress, Team } from "@opensystemslab/planx-core/types"; +import { addDays, format } from "date-fns"; import { gql } from "graphql-request"; -import { LowCalSession, Team } from "../../../types"; + +import { $api } from "../../../client"; import { Template, getClientForTemplate, sendEmail } from "../../../lib/notify"; -import { $api, $public } from "../../../client"; +import { LowCalSession } from "../../../types"; 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 */ @@ -61,15 +56,12 @@ const sendSingleApplicationEmail = async ({ sessionId: string; }) => { try { - const { flowSlug, team, session } = await validateSingleSessionRequest( - email, - sessionId, - template, - ); + const { flowSlug, flowName, team, session } = + await validateSingleSessionRequest(email, sessionId, template); const config = { - personalisation: getPersonalisation(session, flowSlug, team), + personalisation: getPersonalisation(session, flowSlug, flowName, team), reference: null, - emailReplyToId: team.notifyPersonalisation.emailReplyToId, + emailReplyToId: team.settings.emailReplyToId, }; const firstSave = !session.hasUserSaved; if (firstSave && !session.submittedAt) @@ -103,10 +95,20 @@ const validateSingleSessionRequest = async ( has_user_saved flow { slug + name team { name slug - notifyPersonalisation: notify_personalisation + settings: team_settings { + boundaryUrl: boundary_url + boundaryBBox: boundary_bbox + homepage + helpEmail: help_email + helpPhone: help_phone + helpOpeningHours: help_opening_hours + emailReplyToId: email_reply_to_id + boundaryBBox: boundary_bbox + } domain } } @@ -127,8 +129,9 @@ const validateSingleSessionRequest = async ( return { flowSlug: session.flow.slug, + flowName: session.flow.name, team: session.flow.team, - session: await getSessionDetails(session), + session: getSessionDetails(session), }; } catch (error) { throw Error(`Unable to validate request. ${(error as Error).message}`); @@ -147,14 +150,11 @@ interface SessionDetails { /** * Parse session details into an object which will be read by email template */ -export const getSessionDetails = async ( - session: LowCalSession, -): Promise => { +export const getSessionDetails = (session: LowCalSession): SessionDetails => { const passportProtectTypes = session.data.passport?.data?.["proposal.projectType"]; const projectTypes = - passportProtectTypes && - (await $public.formatRawProjectTypes(passportProtectTypes)); + passportProtectTypes && formatRawProjectTypes(passportProtectTypes); const address: SiteAddress | undefined = session.data?.passport?.data?._address; const addressLine = address?.single_line_address || address?.title; @@ -175,15 +175,19 @@ export const getSessionDetails = async ( const getPersonalisation = ( session: SessionDetails, flowSlug: string, + flowName: string, team: Team, ) => { return { resumeLink: getResumeLink(session, team, flowSlug), serviceLink: getServiceLink(team, flowSlug), - serviceName: convertSlugToName(flowSlug), + 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, }; }; @@ -275,13 +279,12 @@ export const setupEmailEventTriggers = async (sessionId: string) => { }; export { - getSaveAndReturnPublicHeaders, - convertSlugToName, - getResumeLink, - sendSingleApplicationEmail, - markSessionAsSubmitted, DAYS_UNTIL_EXPIRY, REMINDER_DAYS_FROM_EXPIRY, calculateExpiryDate, + getResumeLink, + getSaveAndReturnPublicHeaders, + markSessionAsSubmitted, + sendSingleApplicationEmail, softDeleteSession, }; diff --git a/api.planx.uk/modules/send/createSendEvents/controller.ts b/api.planx.uk/modules/send/createSendEvents/controller.ts index f0ea313c39..9cfd7c892f 100644 --- a/api.planx.uk/modules/send/createSendEvents/controller.ts +++ b/api.planx.uk/modules/send/createSendEvents/controller.ts @@ -10,7 +10,7 @@ const createSendEvents: CreateSendEventsController = async ( res, next, ) => { - const { email, uniform, bops, s3 } = res.locals.parsedReq.body; + const { email, uniform, bops, s3, idox } = res.locals.parsedReq.body; const { sessionId } = res.locals.parsedReq.params; try { @@ -47,6 +47,16 @@ const createSendEvents: CreateSendEventsController = async ( combinedResponse["uniform"] = uniformEvent; } + if (idox) { + const idoxEvent = await createScheduledEvent({ + webhook: `{{HASURA_PLANX_API_URL}}/idox/${idox.localAuthority}`, + schedule_at: new Date(now.getTime() + 60 * 1000), + payload: idox.body, + comment: `idox_nexus_submission_${sessionId}`, + }); + combinedResponse["idox"] = idoxEvent; + } + if (s3) { const s3Event = await createScheduledEvent({ webhook: `{{HASURA_PLANX_API_URL}}/upload-submission/${s3.localAuthority}`, diff --git a/api.planx.uk/modules/send/createSendEvents/types.ts b/api.planx.uk/modules/send/createSendEvents/types.ts index 98b51bdf13..e5151dadb8 100644 --- a/api.planx.uk/modules/send/createSendEvents/types.ts +++ b/api.planx.uk/modules/send/createSendEvents/types.ts @@ -15,6 +15,7 @@ export const combinedEventsPayloadSchema = z.object({ bops: eventSchema.optional(), uniform: eventSchema.optional(), s3: eventSchema.optional(), + idox: eventSchema.optional(), }), params: z.object({ sessionId: z.string().uuid(), diff --git a/api.planx.uk/modules/send/email/index.test.ts b/api.planx.uk/modules/send/email/index.test.ts index a50aefe3c0..c0b2cae2f1 100644 --- a/api.planx.uk/modules/send/email/index.test.ts +++ b/api.planx.uk/modules/send/email/index.test.ts @@ -49,8 +49,8 @@ describe(`sending an application by email to a planning office`, () => { data: { teams: [ { - sendToEmail: "planners@southwark.gov.uk", - notifyPersonalisation: { emailReplyToId: "abc123" }, + sendToEmail: "planning.office.example@council.gov.uk", + settings: { emailReplyToId: "abc123" }, }, ], }, @@ -72,7 +72,7 @@ describe(`sending an application by email to a planning office`, () => { data: { session: { email: "simulate-delivered@notifications.service.gov.uk", - flow: { slug: "test-flow" }, + flow: { slug: "test-flow", name: "Test Flow" }, }, }, variables: { id: "123" }, @@ -96,7 +96,7 @@ describe(`sending an application by email to a planning office`, () => { variables: { sessionId: "123", teamSlug: "southwark", - recipient: "planning.office.example@southwark.gov.uk", + recipient: "planning.office.example@council.gov.uk", request: { personalisation: { serviceName: "Apply for something", @@ -119,7 +119,7 @@ describe(`sending an application by email to a planning office`, () => { .then((res) => { expect(res.body).toEqual({ message: `Successfully sent to email`, - inbox: "planners@southwark.gov.uk", + inbox: "planning.office.example@council.gov.uk", govuk_notify_template: "Submit", }); }); @@ -153,7 +153,7 @@ describe(`sending an application by email to a planning office`, () => { teams: [ { sendToEmail: null, - notifyPersonalisation: { emailReplyToId: "abc123" }, + settings: { emailReplyToId: "abc123" }, }, ], }, @@ -200,7 +200,7 @@ describe(`downloading application data received by email`, () => { name: "GetTeamEmailSettings", matchOnVariables: false, data: { - teams: [{ sendToEmail: "planners@southwark.gov.uk" }], + teams: [{ sendToEmail: "planning.office.example@council.gov.uk" }], }, variables: { slug: "southwark" }, }); @@ -229,7 +229,7 @@ describe(`downloading application data received by email`, () => { it("errors if email query param does not match the stored database value for this team", async () => { await supertest(app) .get( - "/download-application-files/123?email=wrong@southwark.gov.uk&localAuthority=southwark", + "/download-application-files/123?email=wrong@council.gov.uk&localAuthority=southwark", ) .expect(403) .then((res) => { @@ -251,7 +251,7 @@ describe(`downloading application data received by email`, () => { await supertest(app) .get( - "/download-application-files/456?email=planners@southwark.gov.uk&localAuthority=southwark", + "/download-application-files/456?email=planning.office.example@council.gov.uk&localAuthority=southwark", ) .expect(400) .then((res) => { @@ -264,7 +264,7 @@ describe(`downloading application data received by email`, () => { it("calls addTemplateFilesToZip()", async () => { await supertest(app) .get( - "/download-application-files/123?email=planners@southwark.gov.uk&localAuthority=southwark", + "/download-application-files/123?email=planning.office.example@council.gov.uk&localAuthority=southwark", ) .expect(200) .then((_res) => { diff --git a/api.planx.uk/modules/send/email/index.ts b/api.planx.uk/modules/send/email/index.ts index 3794eee09f..13f1066bd4 100644 --- a/api.planx.uk/modules/send/email/index.ts +++ b/api.planx.uk/modules/send/email/index.ts @@ -40,7 +40,7 @@ export async function sendToEmail( // Get the applicant email and flow slug associated with the session const { email, flow } = await getSessionEmailDetailsById(payload.sessionId); - const flowName = capitalize(flow?.slug?.replaceAll("-", " ")); + const flowName = flow.name; // Prepare email template const config: EmailSubmissionNotifyConfig = { diff --git a/api.planx.uk/modules/send/email/service.ts b/api.planx.uk/modules/send/email/service.ts index 70c4cf3131..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 + } } } `, @@ -55,6 +60,7 @@ interface GetSessionEmailDetailsById { email: string; flow: { slug: string; + name: string; }; } | null; } @@ -67,6 +73,7 @@ export async function getSessionEmailDetailsById(sessionId: string) { email flow { slug + name } } } diff --git a/api.planx.uk/modules/send/idox/nexus.test.ts b/api.planx.uk/modules/send/idox/nexus.test.ts new file mode 100644 index 0000000000..e8e2bf793e --- /dev/null +++ b/api.planx.uk/modules/send/idox/nexus.test.ts @@ -0,0 +1,24 @@ +import supertest from "supertest"; +import app from "../../../server"; + +describe(`sending an application to Idox Nexus`, () => { + it("fails without authorization header", async () => { + await supertest(app) + .post("/idox/southwark") + .send({ payload: { sessionId: "123" } }) + .expect(401); + }); + + it("errors if the payload body does not include a sessionId", async () => { + await supertest(app) + .post("/idox/southwark") + .set({ Authorization: process.env.HASURA_PLANX_API_KEY! }) + .send({ payload: { somethingElse: "123" } }) + .expect(400) + .then((res) => { + expect(res.body).toEqual({ + error: "Missing application data to send to Idox Nexus", + }); + }); + }); +}); diff --git a/api.planx.uk/modules/send/idox/nexus.ts b/api.planx.uk/modules/send/idox/nexus.ts new file mode 100644 index 0000000000..4adb6ad97f --- /dev/null +++ b/api.planx.uk/modules/send/idox/nexus.ts @@ -0,0 +1,408 @@ +import axios, { AxiosRequestConfig, isAxiosError } from "axios"; +import { NextFunction, Request, Response } from "express"; +import FormData from "form-data"; +import fs from "fs"; +import { gql } from "graphql-request"; +import jwt from "jsonwebtoken"; +import { Buffer } from "node:buffer"; +import { $api } from "../../../client"; +import { markSessionAsSubmitted } from "../../saveAndReturn/service/utils"; +import { buildSubmissionExportZip } from "../utils/exportZip"; + +interface UniformClient { + clientId: string; + clientSecret: string; +} + +interface UniformSubmissionResponse { + submissionStatus?: string; + canDownload?: boolean; + submissionId?: string; +} + +interface RawUniformAuthResponse { + access_token: string; +} + +interface UniformAuthResponse { + token: string; + organisation: string; + organisationId: string; +} + +interface UniformApplication { + id: string; + idox_submission_id: string; + submission_reference: string; + destination: string; + response: UniformSubmissionResponse; + created_at: string; +} + +interface SendToUniformPayload { + sessionId: string; +} + +export async function sendToIdoxNexus( + req: Request, + res: Response, + next: NextFunction, +) { + /** + * Submits application data to Uniform + * + * first, create a zip folder containing an XML (Idox's schema), CSV (our format), and any user-uploaded files + * then, make requests to Uniform's "Submission API" to authenticate, create a submission, and attach the zip to the submission + * finally, insert a record into uniform_applications for future auditing + */ + req.setTimeout(120 * 1000); // Temporary bump to address submission timeouts + + // `/uniform/:localAuthority` is only called via Hasura's scheduled event webhook now, so body is wrapped in a "payload" key + const payload: SendToUniformPayload = req.body.payload; + if (!payload?.sessionId) { + return next({ + status: 400, + message: "Missing application data to send to Idox Nexus", + }); + } + + // localAuthority is only parsed for audit record, not client-specific + const localAuthority = req.params.localAuthority; + const uniformClient = getUniformClient(); + + // confirm that this session has not already been successfully submitted before proceeding + const submittedApp = await checkUniformAuditTable(payload?.sessionId); + const isAlreadySubmitted = + submittedApp?.submissionStatus === "PENDING" && submittedApp?.canDownload; + if (isAlreadySubmitted) { + return res.status(200).send({ + sessionId: payload?.sessionId, + idoxSubmissionId: submittedApp?.submissionId, + message: `Skipping send, already successfully submitted`, + }); + } + + try { + // Request 1/4 - Authenticate + const { token, organisation, organisationId } = + await authenticate(uniformClient); + + // 2/4 - Create a submission + const idoxSubmissionId = await createSubmission( + token, + organisation, + organisationId, + payload.sessionId, + ); + + // 3/4 - Create & attach the zip + const zip = await buildSubmissionExportZip({ + sessionId: payload.sessionId, + onlyDigitalPlanningJSON: true, + }); + + const attachmentAdded = await attachArchive( + token, + idoxSubmissionId, + zip.filename, + ); + + // clean-up zip file + zip.remove(); + + // 4/4 - Get submission details and create audit record + const submissionDetails = await retrieveSubmission(token, idoxSubmissionId); + + const applicationAuditRecord = await createUniformApplicationAuditRecord({ + idoxSubmissionId, + submissionDetails, + payload, + localAuthority, + }); + + // Mark session as submitted so that reminder and expiry emails are not triggered + markSessionAsSubmitted(payload?.sessionId); + + return res.status(200).send({ + message: `Successfully created an Idox Nexus submission`, + zipAttached: attachmentAdded, + application: applicationAuditRecord, + }); + } catch (error) { + const errorMessage = isAxiosError(error) + ? JSON.stringify(error.response?.data) + : (error as Error).message; + return next({ + error, + message: `Failed to send to Idox Nexus (${payload.sessionId}): ${errorMessage}`, + }); + } +} + +/** + * Query the Uniform audit table to see if we already have an application for this session + */ +async function checkUniformAuditTable( + sessionId: string, +): Promise { + const application: Record<"uniform_applications", UniformApplication[]> = + await $api.client.request( + gql` + query FindApplication($submission_reference: String = "") { + uniform_applications( + where: { submission_reference: { _eq: $submission_reference } } + order_by: { created_at: desc } + ) { + response + } + } + `, + { + submission_reference: sessionId, + }, + ); + + return application?.uniform_applications[0]?.response; +} + +/** + * Logs in to the Idox Submission API using a username/password + * and returns an access token + */ +async function authenticate({ + clientId, + clientSecret, +}: UniformClient): Promise { + const authString = Buffer.from(`${clientId}:${clientSecret}`).toString( + "base64", + ); + + const authConfig: AxiosRequestConfig = { + method: "POST", + url: process.env.UNIFORM_TOKEN_URL!, + headers: { + Authorization: `Basic ${authString}`, + "Content-type": "application/x-www-form-urlencoded", + }, + data: new URLSearchParams({ + client_id: clientId, + client_secret: clientSecret, + grant_type: "client_credentials", + }), + }; + + const response = await axios.request(authConfig); + + if (!response.data.access_token) { + throw Error("Failed to authenticate to Uniform - no access token returned"); + } + + // Decode access_token to get "organisation-name" & "organisation-id" + const decodedAccessToken = jwt.decode(response.data.access_token) as any; + const organisation = decodedAccessToken?.["organisation-name"]; + const organisationId = decodedAccessToken?.["organisation-id"]; + + if (!organisation || !organisationId) { + throw Error( + "Failed to authenticate to Uniform - failed to decode organisation details from access_token", + ); + } + + const uniformAuthResponse: UniformAuthResponse = { + token: response.data.access_token, + organisation: organisation, + organisationId: organisationId, + }; + + return uniformAuthResponse; +} + +/** + * Creates a submission (submissionReference is unique value provided by RIPA & must match XML ) + * and returns a submissionId parsed from the resource link + */ +async function createSubmission( + token: string, + organisation: string, + organisationId: string, + sessionId = "TEST", +): Promise { + const createSubmissionEndpoint = `${process.env + .UNIFORM_SUBMISSION_URL!}/secure/submission`; + + const isStaging = ["mock-server", "staging"].some((hostname) => + createSubmissionEndpoint.includes(hostname), + ); + + const createSubmissionConfig: AxiosRequestConfig = { + url: createSubmissionEndpoint, + method: "POST", + headers: { + Authorization: `Bearer ${token}`, + "Content-type": "application/json", + }, + data: JSON.stringify({ + entity: "dc", + module: "dc", + organisation: organisation, + organisationId: organisationId, + submissionReference: sessionId, + description: isStaging + ? "Staging submission from PlanX" + : "Production submission from PlanX", + submissionProcessorType: "API", + }), + }; + + const response = await axios.request(createSubmissionConfig); + // successful submission returns 201 Created without body + if (response.status !== 201) + throw Error("Failed to authenticate to Idox Nexus"); + + // parse & return the submissionId + const resourceLink = response.headers.location; + const submissionId = resourceLink.split("/").pop(); + if (!submissionId) + throw Error("Authenticated to Idox Nexus, but failed to create submission"); + + return submissionId; +} + +/** + * Uploads and attaches a zip folder to an existing submission + */ +async function attachArchive( + token: string, + submissionId: string, + zipPath: string, +): Promise { + if (!fs.existsSync(zipPath)) { + console.log( + `Zip does not exist, cannot attach to idox_submission_id ${submissionId}`, + ); + return false; + } + + const attachArchiveEndpoint = `${process.env + .UNIFORM_SUBMISSION_URL!}/secure/submission/${submissionId}/archive`; + + const formData = new FormData(); + formData.append("file", fs.createReadStream(zipPath)); + + const attachArchiveConfig: AxiosRequestConfig = { + url: attachArchiveEndpoint, + method: "POST", + headers: { + Authorization: `Bearer ${token}`, + }, + data: formData, + // Restrict to 1GB + maxBodyLength: 1e9, + maxContentLength: 1e9, + }; + + const response = await axios.request(attachArchiveConfig); + // successful upload returns 204 No Content without body + const isSuccess = response.status === 204; + + // Temp additional logging to debug failures + console.log("*** Uniform attachArchive response ***"); + console.log({ status: response.status }); + console.log(JSON.stringify(response.data, null, 2)); + console.log("******"); + + return isSuccess; +} + +/** + * Gets details about an existing submission to store for auditing purposes + * since neither createSubmission nor attachArchive requests return a meaningful response body + */ +async function retrieveSubmission( + token: string, + submissionId: string, +): Promise { + const getSubmissionEndpoint = `${process.env + .UNIFORM_SUBMISSION_URL!}/secure/submission/${submissionId}`; + + const getSubmissionConfig: AxiosRequestConfig = { + url: getSubmissionEndpoint, + method: "GET", + headers: { + Authorization: `Bearer ${token}`, + }, + }; + + const response = await axios.request(getSubmissionConfig); + return response.data; +} + +/** + * Get id and secret of Idox Nexus client + */ +const getUniformClient = (): UniformClient => { + const client = process.env["IDOX_NEXUS_CLIENT"]; + + if (!client) throw Error(`Unable to find Idox Nexus client`); + + const [clientId, clientSecret] = client.split(":"); + return { clientId, clientSecret }; +}; + +const createUniformApplicationAuditRecord = async ({ + idoxSubmissionId, + payload, + localAuthority, + submissionDetails, +}: { + idoxSubmissionId: string; + payload: SendToUniformPayload; + localAuthority: string; + submissionDetails: UniformSubmissionResponse; +}): Promise => { + const xml = await $api.export.oneAppPayload(payload?.sessionId); + + const application: Record< + "insert_uniform_applications_one", + UniformApplication + > = await $api.client.request( + gql` + mutation CreateUniformApplication( + $idox_submission_id: String = "" + $submission_reference: String = "" + $destination: String = "" + $response: jsonb = "" + $payload: jsonb = "" + $xml: xml = "" + ) { + insert_uniform_applications_one( + object: { + idox_submission_id: $idox_submission_id + submission_reference: $submission_reference + destination: $destination + response: $response + payload: $payload + xml: $xml + } + ) { + id + idox_submission_id + submission_reference + destination + response + created_at + } + } + `, + { + idox_submission_id: idoxSubmissionId, + submission_reference: payload?.sessionId, + destination: localAuthority, + response: submissionDetails, + payload, + xml, + }, + ); + + return application.insert_uniform_applications_one; +}; diff --git a/api.planx.uk/modules/send/routes.ts b/api.planx.uk/modules/send/routes.ts index 37e2eb31da..5447f7ad3d 100644 --- a/api.planx.uk/modules/send/routes.ts +++ b/api.planx.uk/modules/send/routes.ts @@ -8,6 +8,7 @@ import { validate } from "../../shared/middleware/validate"; import { combinedEventsPayloadSchema } from "./createSendEvents/types"; import { downloadApplicationFiles } from "./downloadApplicationFiles"; import { sendToS3 } from "./s3"; +import { sendToIdoxNexus } from "./idox/nexus"; const router = Router(); @@ -18,6 +19,7 @@ router.post( ); router.post("/bops/:localAuthority", useHasuraAuth, sendToBOPS); router.post("/uniform/:localAuthority", useHasuraAuth, sendToUniform); +router.post("/idox/:localAuthority", useHasuraAuth, sendToIdoxNexus); router.post("/email-submission/:localAuthority", useHasuraAuth, sendToEmail); router.get("/download-application-files/:sessionId", downloadApplicationFiles); router.post("/upload-submission/:localAuthority", useHasuraAuth, sendToS3); 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/modules/send/utils/exportZip.ts b/api.planx.uk/modules/send/utils/exportZip.ts index 2d15f79c2f..98843e53f2 100644 --- a/api.planx.uk/modules/send/utils/exportZip.ts +++ b/api.planx.uk/modules/send/utils/exportZip.ts @@ -22,10 +22,12 @@ export async function buildSubmissionExportZip({ sessionId, includeOneAppXML = false, includeDigitalPlanningJSON = false, + onlyDigitalPlanningJSON = false, }: { sessionId: string; includeOneAppXML?: boolean; includeDigitalPlanningJSON?: boolean; + onlyDigitalPlanningJSON?: boolean; }): Promise { // fetch session data const sessionData = await $api.session.find(sessionId); @@ -41,7 +43,7 @@ export async function buildSubmissionExportZip({ const zip = new ExportZip(sessionId, flowSlug); // add OneApp XML to the zip - if (includeOneAppXML) { + if (includeOneAppXML && !onlyDigitalPlanningJSON) { try { const xml = await $api.export.oneAppPayload(sessionId); const xmlStream = str(xml.trim()); @@ -57,7 +59,7 @@ export async function buildSubmissionExportZip({ } // add ODP Schema JSON to the zip, skipping validation if an unsupported application type - if (includeDigitalPlanningJSON) { + if (includeDigitalPlanningJSON || onlyDigitalPlanningJSON) { try { const doValidation = isApplicationTypeSupported(passport); const schema = doValidation @@ -75,115 +77,117 @@ export async function buildSubmissionExportZip({ } } - // add remote files on S3 to the zip - const files = new Passport(passport).files; - if (files.length) { - for (const file of files) { - // Ensure unique filename by combining original filename and S3 folder name, which is a nanoid - // Uniform requires all uploaded files to be present in the zip, even if they are duplicates - // Must match unique filename in editor.planx.uk/src/@planx/components/Send/uniform/xml.ts - const uniqueFilename = decodeURIComponent( - file.url.split("/").slice(-2).join("-"), - ); - await zip.addRemoteFile({ url: file.url, name: uniqueFilename }); + if (!onlyDigitalPlanningJSON) { + // add remote user-uploaded files on S3 to the zip + const files = new Passport(passport).files; + if (files.length) { + for (const file of files) { + // Ensure unique filename by combining original filename and S3 folder name, which is a nanoid + // Uniform requires all uploaded files to be present in the zip, even if they are duplicates + // Must match unique filename in editor.planx.uk/src/@planx/components/Send/uniform/xml.ts + const uniqueFilename = decodeURIComponent( + file.url.split("/").slice(-2).join("-"), + ); + await zip.addRemoteFile({ url: file.url, name: uniqueFilename }); + } } - } - // generate csv data - const responses = await $api.export.csvData(sessionId); - const redactedResponses = await $api.export.csvDataRedacted(sessionId); - - // write csv to the zip - try { - const csvStream = stringify(responses, { - columns: ["question", "responses", "metadata"], - header: true, - }); - await zip.addStream({ - name: "application.csv", - stream: csvStream, - }); - } catch (error) { - throw new Error( - `Failed to generate CSV for ${sessionId} zip. Error - ${error}`, - ); - } + // generate csv data + const responses = await $api.export.csvData(sessionId); + const redactedResponses = await $api.export.csvDataRedacted(sessionId); - // add template files to zip - const templateNames = - await $api.getDocumentTemplateNamesForSession(sessionId); - for (const templateName of templateNames || []) { + // write csv to the zip try { - const isTemplateSupported = hasRequiredDataForTemplate({ - passport, - templateName, + const csvStream = stringify(responses, { + columns: ["question", "responses", "metadata"], + header: true, + }); + await zip.addStream({ + name: "application.csv", + stream: csvStream, }); - if (isTemplateSupported) { - const templateStream = generateDocxTemplateStream({ + } catch (error) { + throw new Error( + `Failed to generate CSV for ${sessionId} zip. Error - ${error}`, + ); + } + + // add template files to zip + const templateNames = + await $api.getDocumentTemplateNamesForSession(sessionId); + for (const templateName of templateNames || []) { + try { + const isTemplateSupported = hasRequiredDataForTemplate({ passport, templateName, }); - await zip.addStream({ - name: `${templateName}.doc`, - stream: templateStream, - }); + if (isTemplateSupported) { + const templateStream = generateDocxTemplateStream({ + passport, + templateName, + }); + await zip.addStream({ + name: `${templateName}.doc`, + stream: templateStream, + }); + } + } catch (error) { + console.log( + `Template "${templateName}" could not be generated so has been skipped. Error - ${error}`, + ); + continue; } - } catch (error) { - console.log( - `Template "${templateName}" could not be generated so has been skipped. Error - ${error}`, - ); - continue; } - } - const boundingBox = passport.data["property.boundary.site.buffered"]; - const userAction = passport.data?.["drawBoundary.action"]; - // generate and add an HTML overview document for the submission to zip - const overviewHTML = generateApplicationHTML({ - planXExportData: responses as PlanXExportData[], - boundingBox, - userAction, - }); - await zip.addFile({ - name: "Overview.htm", - buffer: Buffer.from(overviewHTML), - }); - - // generate and add an HTML overview document for the submission to zip - const redactedOverviewHTML = generateApplicationHTML({ - planXExportData: redactedResponses as PlanXExportData[], - boundingBox, - userAction, - }); - await zip.addFile({ - name: "RedactedOverview.htm", - buffer: Buffer.from(redactedOverviewHTML), - }); - - // add an optional GeoJSON file to zip - const geojson: GeoJSON.Feature | undefined = - passport?.data?.["property.boundary.site"]; - if (geojson) { - if (userAction) { - geojson["properties"] ??= {}; - geojson["properties"]["planx_user_action"] = userAction; - } - const geoBuff = Buffer.from(JSON.stringify(geojson, null, 2)); - zip.addFile({ - name: "LocationPlanGeoJSON.geojson", - buffer: geoBuff, + const boundingBox = passport.data["property.boundary.site.buffered"]; + const userAction = passport.data?.["drawBoundary.action"]; + // generate and add an HTML overview document for the submission to zip + const overviewHTML = generateApplicationHTML({ + planXExportData: responses as PlanXExportData[], + boundingBox, + userAction, + }); + await zip.addFile({ + name: "Overview.htm", + buffer: Buffer.from(overviewHTML), }); - // generate and add an HTML boundary document for the submission to zip - const boundaryHTML = generateMapHTML({ - geojson, + // generate and add an HTML overview document for the submission to zip + const redactedOverviewHTML = generateApplicationHTML({ + planXExportData: redactedResponses as PlanXExportData[], boundingBox, userAction, }); await zip.addFile({ - name: "LocationPlan.htm", - buffer: Buffer.from(boundaryHTML), + name: "RedactedOverview.htm", + buffer: Buffer.from(redactedOverviewHTML), }); + + // add an optional GeoJSON file to zip + const geojson: GeoJSON.Feature | undefined = + passport?.data?.["property.boundary.site"]; + if (geojson) { + if (userAction) { + geojson["properties"] ??= {}; + geojson["properties"]["planx_user_action"] = userAction; + } + const geoBuff = Buffer.from(JSON.stringify(geojson, null, 2)); + zip.addFile({ + name: "LocationPlanGeoJSON.geojson", + buffer: geoBuff, + }); + + // generate and add an HTML boundary document for the submission to zip + const boundaryHTML = generateMapHTML({ + geojson, + boundingBox, + userAction, + }); + await zip.addFile({ + name: "LocationPlan.htm", + buffer: Buffer.from(boundaryHTML), + }); + } } // write the zip diff --git a/api.planx.uk/modules/sendEmail/index.test.ts b/api.planx.uk/modules/sendEmail/index.test.ts index 8ae931321a..153f1632de 100644 --- a/api.planx.uk/modules/sendEmail/index.test.ts +++ b/api.planx.uk/modules/sendEmail/index.test.ts @@ -9,16 +9,11 @@ import { mockValidateSingleSessionRequest, mockValidateSingleSessionRequestMissingSession, } from "../../tests/mocks/saveAndReturnMocks"; -import { CoreDomainClient } from "@opensystemslab/planx-core"; // https://docs.notifications.service.gov.uk/node.html#email-addresses const TEST_EMAIL = "simulate-delivered@notifications.service.gov.uk"; const SAVE_ENDPOINT = "/send-email/save"; -jest - .spyOn(CoreDomainClient.prototype, "formatRawProjectTypes") - .mockResolvedValue("New office premises"); - describe("Send Email endpoint", () => { beforeEach(() => { queryMock.reset(); diff --git a/api.planx.uk/package.json b/api.planx.uk/package.json index 77b288f99e..037e410828 100644 --- a/api.planx.uk/package.json +++ b/api.planx.uk/package.json @@ -2,9 +2,10 @@ "name": "api.planx.uk", "license": "MPL-2.0", "private": true, + "packageManager": "pnpm@8.6.6", "dependencies": { "@airbrake/node": "^2.1.8", - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#550634a", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#6c2cc59", "@types/isomorphic-fetch": "^0.0.36", "adm-zip": "^0.5.10", "aws-sdk": "^2.1467.0", @@ -23,21 +24,21 @@ "express-pino-logger": "^7.0.0", "express-rate-limit": "^7.1.5", "form-data": "^4.0.0", - "graphql": "^16.8.1", + "graphql": "^16.9.0", "graphql-request": "^4.3.0", "he": "^1.2.0", "helmet": "^7.1.0", "http-proxy-middleware": "^2.0.6", "husky": "^8.0.3", "isomorphic-fetch": "^3.0.0", - "jsdom": "^23.0.1", + "jsdom": "^24.1.0", "jsondiffpatch": "^0.5.0", "jsonwebtoken": "^9.0.2", "lodash": "^4.17.21", "mime": "^3.0.0", "multer": "^1.4.5-lts.1", "nanoid": "^3.3.7", - "notifications-node-client": "^8.1.0", + "notifications-node-client": "^8.2.0", "passport": "^0.5.3", "passport-google-oauth20": "^2.0.0", "pino-noir": "^2.2.1", @@ -91,11 +92,11 @@ "@types/supertest": "^6.0.2", "@types/swagger-jsdoc": "^6.0.4", "@types/swagger-ui-express": "^4.1.6", - "@types/uuid": "^9.0.7", + "@types/uuid": "^10.0.0", "@typescript-eslint/eslint-plugin": "^5.62.0", "@typescript-eslint/parser": "^5.62.0", "dotenv": "^16.4.5", - "esbuild": "^0.21.4", + "esbuild": "^0.22.0", "esbuild-jest": "^0.5.0", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", @@ -111,8 +112,8 @@ "supertest": "^7.0.0", "ts-jest": "^29.1.1", "ts-node-dev": "^2.0.0", - "typescript": "^5.4.3", - "uuid": "^9.0.1" + "typescript": "^5.5.2", + "uuid": "^10.0.0" }, "pnpm": { "peerDependencyRules": { @@ -125,7 +126,9 @@ ] }, "overrides": { - "follow-redirects@<=1.15.5": ">=1.15.6" + "follow-redirects@<=1.15.5": ">=1.15.6", + "braces@<3.0.3": ">=3.0.3", + "ws@>=8.0.0 <8.17.1": ">=8.17.1" } } } diff --git a/api.planx.uk/pnpm-lock.yaml b/api.planx.uk/pnpm-lock.yaml index fdcf4ba37e..e40f8c91b2 100644 --- a/api.planx.uk/pnpm-lock.yaml +++ b/api.planx.uk/pnpm-lock.yaml @@ -6,14 +6,16 @@ settings: overrides: follow-redirects@<=1.15.5: '>=1.15.6' + braces@<3.0.3: '>=3.0.3' + ws@>=8.0.0 <8.17.1: '>=8.17.1' dependencies: '@airbrake/node': specifier: ^2.1.8 version: 2.1.8 '@opensystemslab/planx-core': - specifier: git+https://github.com/theopensystemslab/planx-core#550634a - version: github.com/theopensystemslab/planx-core/550634a + specifier: git+https://github.com/theopensystemslab/planx-core#6c2cc59 + version: github.com/theopensystemslab/planx-core/6c2cc59 '@types/isomorphic-fetch': specifier: ^0.0.36 version: 0.0.36 @@ -69,11 +71,11 @@ dependencies: specifier: ^4.0.0 version: 4.0.0 graphql: - specifier: ^16.8.1 - version: 16.8.1 + specifier: ^16.9.0 + version: 16.9.0 graphql-request: specifier: ^4.3.0 - version: 4.3.0(graphql@16.8.1) + version: 4.3.0(graphql@16.9.0) he: specifier: ^1.2.0 version: 1.2.0 @@ -90,8 +92,8 @@ dependencies: specifier: ^3.0.0 version: 3.0.0 jsdom: - specifier: ^23.0.1 - version: 23.0.1 + specifier: ^24.1.0 + version: 24.1.0 jsondiffpatch: specifier: ^0.5.0 version: 0.5.0 @@ -111,8 +113,8 @@ dependencies: specifier: ^3.3.7 version: 3.3.7 notifications-node-client: - specifier: ^8.1.0 - version: 8.1.0 + specifier: ^8.2.0 + version: 8.2.0 passport: specifier: ^0.5.3 version: 0.5.3 @@ -212,23 +214,23 @@ devDependencies: specifier: ^4.1.6 version: 4.1.6 '@types/uuid': - specifier: ^9.0.7 - version: 9.0.7 + specifier: ^10.0.0 + version: 10.0.0 '@typescript-eslint/eslint-plugin': specifier: ^5.62.0 - version: 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.4.3) + version: 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.5.2) '@typescript-eslint/parser': specifier: ^5.62.0 - version: 5.62.0(eslint@8.57.0)(typescript@5.4.3) + version: 5.62.0(eslint@8.57.0)(typescript@5.5.2) dotenv: specifier: ^16.4.5 version: 16.4.5 esbuild: - specifier: ^0.21.4 - version: 0.21.4 + specifier: ^0.22.0 + version: 0.22.0 esbuild-jest: specifier: ^0.5.0 - version: 0.5.0(esbuild@0.21.4) + version: 0.5.0(esbuild@0.22.0) eslint: specifier: ^8.57.0 version: 8.57.0 @@ -237,7 +239,7 @@ devDependencies: version: 9.1.0(eslint@8.57.0) eslint-plugin-jest: specifier: ^27.9.0 - version: 27.9.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.3) + version: 27.9.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.5.2) graphql-query-test-mock: specifier: ^0.12.1 version: 0.12.1(nock@13.5.4) @@ -267,16 +269,16 @@ devDependencies: version: 7.0.0 ts-jest: specifier: ^29.1.1 - version: 29.1.1(@babel/core@7.24.0)(esbuild@0.21.4)(jest@29.7.0)(typescript@5.4.3) + version: 29.1.1(@babel/core@7.24.0)(esbuild@0.22.0)(jest@29.7.0)(typescript@5.5.2) ts-node-dev: specifier: ^2.0.0 - version: 2.0.0(@types/node@18.19.13)(typescript@5.4.3) + version: 2.0.0(@types/node@18.19.13)(typescript@5.5.2) typescript: - specifier: ^5.4.3 - version: 5.4.3 + specifier: ^5.5.2 + version: 5.5.2 uuid: - specifier: ^9.0.1 - version: 9.0.1 + specifier: ^10.0.0 + version: 10.0.0 packages: @@ -313,8 +315,8 @@ packages: '@jridgewell/trace-mapping': 0.3.25 dev: true - /@apidevtools/json-schema-ref-parser@11.6.2: - resolution: {integrity: sha512-ENUdLLT04aDbbHCRwfKf8gR67AhV0CdFrOAtk+FcakBAgaq6ds3HLK9X0BCyiFUz8pK9uP+k6YZyJaGG7Mt7vQ==} + /@apidevtools/json-schema-ref-parser@11.6.4: + resolution: {integrity: sha512-9K6xOqeevacvweLGik6LnZCb1fBtCOSIWQs8d096XGeqoLKC33UVMGz9+77Gw44KvbH4pKcQPWo4ZpxkXYj05w==} engines: {node: '>= 16'} dependencies: '@jsdevtools/ono': 7.1.3 @@ -354,15 +356,15 @@ packages: z-schema: 5.0.5 dev: false - /@babel/code-frame@7.24.2: - resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} + /@babel/code-frame@7.24.7: + resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/highlight': 7.24.5 + '@babel/highlight': 7.24.7 picocolors: 1.0.1 - /@babel/compat-data@7.24.4: - resolution: {integrity: sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==} + /@babel/compat-data@7.24.7: + resolution: {integrity: sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==} engines: {node: '>=6.9.0'} dev: true @@ -371,17 +373,17 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.24.2 - '@babel/generator': 7.24.5 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.0) - '@babel/helpers': 7.24.5 - '@babel/parser': 7.24.5 - '@babel/template': 7.24.0 - '@babel/traverse': 7.24.5 - '@babel/types': 7.24.5 + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.24.7 + '@babel/helper-compilation-targets': 7.24.7 + '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.0) + '@babel/helpers': 7.24.7 + '@babel/parser': 7.24.7 + '@babel/template': 7.24.7 + '@babel/traverse': 7.24.7 + '@babel/types': 7.24.7 convert-source-map: 2.0.0 - debug: 4.3.4 + debug: 4.3.5 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -389,184 +391,194 @@ packages: - supports-color dev: true - /@babel/generator@7.24.5: - resolution: {integrity: sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==} + /@babel/generator@7.24.7: + resolution: {integrity: sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.24.7 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 - dev: true - /@babel/helper-annotate-as-pure@7.22.5: - resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} + /@babel/helper-annotate-as-pure@7.24.7: + resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.24.7 dev: true - /@babel/helper-compilation-targets@7.23.6: - resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} + /@babel/helper-compilation-targets@7.24.7: + resolution: {integrity: sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/compat-data': 7.24.4 - '@babel/helper-validator-option': 7.23.5 - browserslist: 4.23.0 + '@babel/compat-data': 7.24.7 + '@babel/helper-validator-option': 7.24.7 + browserslist: 4.23.1 lru-cache: 5.1.1 semver: 6.3.1 dev: true - /@babel/helper-create-class-features-plugin@7.24.5(@babel/core@7.24.0): - resolution: {integrity: sha512-uRc4Cv8UQWnE4NXlYTIIdM7wfFkOqlFztcC/gVXDKohKoVB3OyonfelUBaJzSwpBntZ2KYGF/9S7asCHsXwW6g==} + /@babel/helper-create-class-features-plugin@7.24.7(@babel/core@7.24.0): + resolution: {integrity: sha512-kTkaDl7c9vO80zeX1rJxnuRpEsD5tA81yh11X1gQo+PhSti3JS+7qeZo9U4RHobKRiFPKaGK3svUAeb8D0Q7eg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.24.0 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-member-expression-to-functions': 7.24.5 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.0) - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/helper-split-export-declaration': 7.24.5 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-function-name': 7.24.7 + '@babel/helper-member-expression-to-functions': 7.24.7 + '@babel/helper-optimise-call-expression': 7.24.7 + '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.0) + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/helper-split-export-declaration': 7.24.7 semver: 6.3.1 + transitivePeerDependencies: + - supports-color dev: true - /@babel/helper-environment-visitor@7.22.20: - resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} + /@babel/helper-environment-visitor@7.24.7: + resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==} engines: {node: '>=6.9.0'} - dev: true + dependencies: + '@babel/types': 7.24.7 - /@babel/helper-function-name@7.23.0: - resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} + /@babel/helper-function-name@7.24.7: + resolution: {integrity: sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.24.0 - '@babel/types': 7.24.5 - dev: true + '@babel/template': 7.24.7 + '@babel/types': 7.24.7 - /@babel/helper-hoist-variables@7.22.5: - resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} + /@babel/helper-hoist-variables@7.24.7: + resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.5 - dev: true + '@babel/types': 7.24.7 - /@babel/helper-member-expression-to-functions@7.24.5: - resolution: {integrity: sha512-4owRteeihKWKamtqg4JmWSsEZU445xpFRXPEwp44HbgbxdWlUV1b4Agg4lkA806Lil5XM/e+FJyS0vj5T6vmcA==} + /@babel/helper-member-expression-to-functions@7.24.7: + resolution: {integrity: sha512-LGeMaf5JN4hAT471eJdBs/GK1DoYIJ5GCtZN/EsL6KUiiDZOvO/eKE11AMZJa2zP4zk4qe9V2O/hxAmkRc8p6w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.5 + '@babel/traverse': 7.24.7 + '@babel/types': 7.24.7 + transitivePeerDependencies: + - supports-color dev: true - /@babel/helper-module-imports@7.24.3: - resolution: {integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==} + /@babel/helper-module-imports@7.24.7: + resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.5 + '@babel/traverse': 7.24.7 + '@babel/types': 7.24.7 + transitivePeerDependencies: + - supports-color - /@babel/helper-module-transforms@7.24.5(@babel/core@7.24.0): - resolution: {integrity: sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A==} + /@babel/helper-module-transforms@7.24.7(@babel/core@7.24.0): + resolution: {integrity: sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.24.0 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.24.3 - '@babel/helper-simple-access': 7.24.5 - '@babel/helper-split-export-declaration': 7.24.5 - '@babel/helper-validator-identifier': 7.24.5 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-module-imports': 7.24.7 + '@babel/helper-simple-access': 7.24.7 + '@babel/helper-split-export-declaration': 7.24.7 + '@babel/helper-validator-identifier': 7.24.7 + transitivePeerDependencies: + - supports-color dev: true - /@babel/helper-optimise-call-expression@7.22.5: - resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} + /@babel/helper-optimise-call-expression@7.24.7: + resolution: {integrity: sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.24.7 dev: true - /@babel/helper-plugin-utils@7.24.5: - resolution: {integrity: sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ==} + /@babel/helper-plugin-utils@7.24.7: + resolution: {integrity: sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-replace-supers@7.24.1(@babel/core@7.24.0): - resolution: {integrity: sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==} + /@babel/helper-replace-supers@7.24.7(@babel/core@7.24.0): + resolution: {integrity: sha512-qTAxxBM81VEyoAY0TtLrx1oAEJc09ZK67Q9ljQToqCnA+55eNwCORaxlKyu+rNfX86o8OXRUSNUnrtsAZXM9sg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.24.0 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-member-expression-to-functions': 7.24.5 - '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-member-expression-to-functions': 7.24.7 + '@babel/helper-optimise-call-expression': 7.24.7 + transitivePeerDependencies: + - supports-color dev: true - /@babel/helper-simple-access@7.24.5: - resolution: {integrity: sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ==} + /@babel/helper-simple-access@7.24.7: + resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.5 + '@babel/traverse': 7.24.7 + '@babel/types': 7.24.7 + transitivePeerDependencies: + - supports-color dev: true - /@babel/helper-skip-transparent-expression-wrappers@7.22.5: - resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} + /@babel/helper-skip-transparent-expression-wrappers@7.24.7: + resolution: {integrity: sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.5 + '@babel/traverse': 7.24.7 + '@babel/types': 7.24.7 + transitivePeerDependencies: + - supports-color dev: true - /@babel/helper-split-export-declaration@7.24.5: - resolution: {integrity: sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==} + /@babel/helper-split-export-declaration@7.24.7: + resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.5 - dev: true + '@babel/types': 7.24.7 - /@babel/helper-string-parser@7.24.1: - resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} + /@babel/helper-string-parser@7.24.7: + resolution: {integrity: sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==} engines: {node: '>=6.9.0'} - /@babel/helper-validator-identifier@7.24.5: - resolution: {integrity: sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==} + /@babel/helper-validator-identifier@7.24.7: + resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} engines: {node: '>=6.9.0'} - /@babel/helper-validator-option@7.23.5: - resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} + /@babel/helper-validator-option@7.24.7: + resolution: {integrity: sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==} engines: {node: '>=6.9.0'} dev: true - /@babel/helpers@7.24.5: - resolution: {integrity: sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==} + /@babel/helpers@7.24.7: + resolution: {integrity: sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.24.0 - '@babel/traverse': 7.24.5 - '@babel/types': 7.24.5 - transitivePeerDependencies: - - supports-color + '@babel/template': 7.24.7 + '@babel/types': 7.24.7 dev: true - /@babel/highlight@7.24.5: - resolution: {integrity: sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==} + /@babel/highlight@7.24.7: + resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.24.5 + '@babel/helper-validator-identifier': 7.24.7 chalk: 2.4.2 js-tokens: 4.0.0 picocolors: 1.0.1 - /@babel/parser@7.24.5: - resolution: {integrity: sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==} + /@babel/parser@7.24.7: + resolution: {integrity: sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==} engines: {node: '>=6.0.0'} - hasBin: true dependencies: - '@babel/types': 7.24.5 - dev: true + '@babel/types': 7.24.7 /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.0): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} @@ -574,7 +586,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.7 dev: true /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.24.0): @@ -583,7 +595,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.7 dev: true /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.0): @@ -592,7 +604,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.7 dev: true /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.0): @@ -601,7 +613,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.7 dev: true /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.0): @@ -610,17 +622,17 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.7 dev: true - /@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.24.0): - resolution: {integrity: sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==} + /@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.24.0): + resolution: {integrity: sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.7 dev: true /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.0): @@ -629,7 +641,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.7 dev: true /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.0): @@ -638,7 +650,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.7 dev: true /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.0): @@ -647,7 +659,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.7 dev: true /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.0): @@ -656,7 +668,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.7 dev: true /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.0): @@ -665,7 +677,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.7 dev: true /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.0): @@ -674,7 +686,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.7 dev: true /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.0): @@ -684,42 +696,46 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.7 dev: true - /@babel/plugin-syntax-typescript@7.24.1(@babel/core@7.24.0): - resolution: {integrity: sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==} + /@babel/plugin-syntax-typescript@7.24.7(@babel/core@7.24.0): + resolution: {integrity: sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.7 dev: true - /@babel/plugin-transform-modules-commonjs@7.24.1(@babel/core@7.24.0): - resolution: {integrity: sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==} + /@babel/plugin-transform-modules-commonjs@7.24.7(@babel/core@7.24.0): + resolution: {integrity: sha512-iFI8GDxtevHJ/Z22J5xQpVqFLlMNstcLXh994xifFwxxGslr2ZXXLWgtBeLctOD63UFDArdvN6Tg8RFw+aEmjQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.24.0 - '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.0) - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-simple-access': 7.24.5 + '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.0) + '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-simple-access': 7.24.7 + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-transform-typescript@7.24.5(@babel/core@7.24.0): - resolution: {integrity: sha512-E0VWu/hk83BIFUWnsKZ4D81KXjN5L3MobvevOHErASk9IPwKHOkTgvqzvNo1yP/ePJWqqK2SpUR5z+KQbl6NVw==} + /@babel/plugin-transform-typescript@7.24.7(@babel/core@7.24.0): + resolution: {integrity: sha512-iLD3UNkgx2n/HrjBesVbYX6j0yqn/sJktvbtKKgcaLIQ4bTTQ8obAypc1VpyHPD2y4Phh9zHOaAt8e/L14wCpw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.24.0 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.24.0) - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.24.0) + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.24.0) + '@babel/helper-plugin-utils': 7.24.7 + '@babel/plugin-syntax-typescript': 7.24.7(@babel/core@7.24.0) + transitivePeerDependencies: + - supports-color dev: true /@babel/preset-typescript@7.24.1(@babel/core@7.24.0): @@ -729,53 +745,53 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.0) - '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.0) - '@babel/plugin-transform-typescript': 7.24.5(@babel/core@7.24.0) + '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-validator-option': 7.24.7 + '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.24.0) + '@babel/plugin-transform-modules-commonjs': 7.24.7(@babel/core@7.24.0) + '@babel/plugin-transform-typescript': 7.24.7(@babel/core@7.24.0) + transitivePeerDependencies: + - supports-color dev: true - /@babel/runtime@7.24.5: - resolution: {integrity: sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==} + /@babel/runtime@7.24.7: + resolution: {integrity: sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.1 dev: false - /@babel/template@7.24.0: - resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} + /@babel/template@7.24.7: + resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.24.2 - '@babel/parser': 7.24.5 - '@babel/types': 7.24.5 - dev: true + '@babel/code-frame': 7.24.7 + '@babel/parser': 7.24.7 + '@babel/types': 7.24.7 - /@babel/traverse@7.24.5: - resolution: {integrity: sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==} + /@babel/traverse@7.24.7: + resolution: {integrity: sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.24.2 - '@babel/generator': 7.24.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.24.5 - '@babel/parser': 7.24.5 - '@babel/types': 7.24.5 - debug: 4.3.4 + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.24.7 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-function-name': 7.24.7 + '@babel/helper-hoist-variables': 7.24.7 + '@babel/helper-split-export-declaration': 7.24.7 + '@babel/parser': 7.24.7 + '@babel/types': 7.24.7 + debug: 4.3.5 globals: 11.12.0 transitivePeerDependencies: - supports-color - dev: true - /@babel/types@7.24.5: - resolution: {integrity: sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==} + /@babel/types@7.24.7: + resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.24.1 - '@babel/helper-validator-identifier': 7.24.5 + '@babel/helper-string-parser': 7.24.7 + '@babel/helper-validator-identifier': 7.24.7 to-fast-properties: 2.0.0 /@bcoe/v8-coverage@0.2.3: @@ -785,7 +801,6 @@ 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 @@ -801,8 +816,8 @@ packages: /@emotion/babel-plugin@11.11.0: resolution: {integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==} dependencies: - '@babel/helper-module-imports': 7.24.3 - '@babel/runtime': 7.24.5 + '@babel/helper-module-imports': 7.24.7 + '@babel/runtime': 7.24.7 '@emotion/hash': 0.9.1 '@emotion/memoize': 0.8.1 '@emotion/serialize': 1.1.4 @@ -812,6 +827,8 @@ packages: find-root: 1.1.0 source-map: 0.5.7 stylis: 4.2.0 + transitivePeerDependencies: + - supports-color dev: false /@emotion/cache@11.11.0: @@ -849,7 +866,7 @@ packages: react: optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@emotion/babel-plugin': 11.11.0 '@emotion/cache': 11.11.0 '@emotion/serialize': 1.1.4 @@ -858,6 +875,8 @@ packages: '@emotion/weak-memoize': 0.3.1 hoist-non-react-statics: 3.3.2 react: 18.3.1 + transitivePeerDependencies: + - supports-color dev: false /@emotion/serialize@1.1.4: @@ -886,7 +905,7 @@ packages: react: optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@emotion/babel-plugin': 11.11.0 '@emotion/is-prop-valid': 1.2.2 '@emotion/react': 11.11.4(react@18.3.1) @@ -894,6 +913,8 @@ packages: '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.3.1) '@emotion/utils': 1.2.1 react: 18.3.1 + transitivePeerDependencies: + - supports-color dev: false /@emotion/unitless@0.8.1: @@ -919,207 +940,216 @@ packages: resolution: {integrity: sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==} dev: false - /@esbuild/aix-ppc64@0.21.4: - resolution: {integrity: sha512-Zrm+B33R4LWPLjDEVnEqt2+SLTATlru1q/xYKVn8oVTbiRBGmK2VIMoIYGJDGyftnGaC788IuzGFAlb7IQ0Y8A==} - engines: {node: '>=12'} + /@esbuild/aix-ppc64@0.22.0: + resolution: {integrity: sha512-uvQR2crZ/zgzSHDvdygHyNI+ze9zwS8mqz0YtGXotSqvEE0UkYE9s+FZKQNTt1VtT719mfP3vHrUdCpxBNQZhQ==} + engines: {node: '>=18'} cpu: [ppc64] os: [aix] requiresBuild: true dev: true optional: true - /@esbuild/android-arm64@0.21.4: - resolution: {integrity: sha512-fYFnz+ObClJ3dNiITySBUx+oNalYUT18/AryMxfovLkYWbutXsct3Wz2ZWAcGGppp+RVVX5FiXeLYGi97umisA==} - engines: {node: '>=12'} + /@esbuild/android-arm64@0.22.0: + resolution: {integrity: sha512-UKhPb3o2gAB/bfXcl58ZXTn1q2oVu1rEu/bKrCtmm+Nj5MKUbrOwR5WAixE2v+lk0amWuwPvhnPpBRLIGiq7ig==} + engines: {node: '>=18'} cpu: [arm64] os: [android] requiresBuild: true dev: true optional: true - /@esbuild/android-arm@0.21.4: - resolution: {integrity: sha512-E7H/yTd8kGQfY4z9t3nRPk/hrhaCajfA3YSQSBrst8B+3uTcgsi8N+ZWYCaeIDsiVs6m65JPCaQN/DxBRclF3A==} - engines: {node: '>=12'} + /@esbuild/android-arm@0.22.0: + resolution: {integrity: sha512-PBnyP+r8vJE4ifxsWys9l+Mc2UY/yYZOpX82eoyGISXXb3dRr0M21v+s4fgRKWMFPMSf/iyowqPW/u7ScSUkjQ==} + engines: {node: '>=18'} cpu: [arm] os: [android] requiresBuild: true dev: true optional: true - /@esbuild/android-x64@0.21.4: - resolution: {integrity: sha512-mDqmlge3hFbEPbCWxp4fM6hqq7aZfLEHZAKGP9viq9wMUBVQx202aDIfc3l+d2cKhUJM741VrCXEzRFhPDKH3Q==} - engines: {node: '>=12'} + /@esbuild/android-x64@0.22.0: + resolution: {integrity: sha512-IjTYtvIrjhR41Ijy2dDPgYjQHWG/x/A4KXYbs1fiU3efpRdoxMChK3oEZV6GPzVEzJqxFgcuBaiX1kwEvWUxSw==} + engines: {node: '>=18'} cpu: [x64] os: [android] requiresBuild: true dev: true optional: true - /@esbuild/darwin-arm64@0.21.4: - resolution: {integrity: sha512-72eaIrDZDSiWqpmCzVaBD58c8ea8cw/U0fq/PPOTqE3c53D0xVMRt2ooIABZ6/wj99Y+h4ksT/+I+srCDLU9TA==} - engines: {node: '>=12'} + /@esbuild/darwin-arm64@0.22.0: + resolution: {integrity: sha512-mqt+Go4y9wRvEz81bhKd9RpHsQR1LwU8Xm6jZRUV/xpM7cIQFbFH6wBCLPTNsdELBvfoHeumud7X78jQQJv2TA==} + engines: {node: '>=18'} cpu: [arm64] os: [darwin] requiresBuild: true dev: true optional: true - /@esbuild/darwin-x64@0.21.4: - resolution: {integrity: sha512-uBsuwRMehGmw1JC7Vecu/upOjTsMhgahmDkWhGLWxIgUn2x/Y4tIwUZngsmVb6XyPSTXJYS4YiASKPcm9Zitag==} - engines: {node: '>=12'} + /@esbuild/darwin-x64@0.22.0: + resolution: {integrity: sha512-vTaTQ9OgYc3VTaWtOE5pSuDT6H3d/qSRFRfSBbnxFfzAvYoB3pqKXA0LEbi/oT8GUOEAutspfRMqPj2ezdFaMw==} + engines: {node: '>=18'} cpu: [x64] os: [darwin] requiresBuild: true dev: true optional: true - /@esbuild/freebsd-arm64@0.21.4: - resolution: {integrity: sha512-8JfuSC6YMSAEIZIWNL3GtdUT5NhUA/CMUCpZdDRolUXNAXEE/Vbpe6qlGLpfThtY5NwXq8Hi4nJy4YfPh+TwAg==} - engines: {node: '>=12'} + /@esbuild/freebsd-arm64@0.22.0: + resolution: {integrity: sha512-0e1ZgoobJzaGnR4reD7I9rYZ7ttqdh1KPvJWnquUoDJhL0rYwdneeLailBzd2/4g/U5p4e5TIHEWa68NF2hFpQ==} + engines: {node: '>=18'} cpu: [arm64] os: [freebsd] requiresBuild: true dev: true optional: true - /@esbuild/freebsd-x64@0.21.4: - resolution: {integrity: sha512-8d9y9eQhxv4ef7JmXny7591P/PYsDFc4+STaxC1GBv0tMyCdyWfXu2jBuqRsyhY8uL2HU8uPyscgE2KxCY9imQ==} - engines: {node: '>=12'} + /@esbuild/freebsd-x64@0.22.0: + resolution: {integrity: sha512-BFgyYwlCwRWyPQJtkzqq2p6pJbiiWgp0P9PNf7a5FQ1itKY4czPuOMAlFVItirSmEpRPCeImuwePNScZS0pL5Q==} + engines: {node: '>=18'} cpu: [x64] os: [freebsd] requiresBuild: true dev: true optional: true - /@esbuild/linux-arm64@0.21.4: - resolution: {integrity: sha512-/GLD2orjNU50v9PcxNpYZi+y8dJ7e7/LhQukN3S4jNDXCKkyyiyAz9zDw3siZ7Eh1tRcnCHAo/WcqKMzmi4eMQ==} - engines: {node: '>=12'} + /@esbuild/linux-arm64@0.22.0: + resolution: {integrity: sha512-V/K2rctCUgC0PCXpN7AqT4hoazXKgIYugFGu/myk2+pfe6jTW2guz/TBwq4cZ7ESqusR/IzkcQaBkcjquuBWsw==} + engines: {node: '>=18'} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@esbuild/linux-arm@0.21.4: - resolution: {integrity: sha512-2rqFFefpYmpMs+FWjkzSgXg5vViocqpq5a1PSRgT0AvSgxoXmGF17qfGAzKedg6wAwyM7UltrKVo9kxaJLMF/g==} - engines: {node: '>=12'} + /@esbuild/linux-arm@0.22.0: + resolution: {integrity: sha512-KEMWiA9aGuPUD4BH5yjlhElLgaRXe+Eri6gKBoDazoPBTo1BXc/e6IW5FcJO9DoL19FBeCxgONyh95hLDNepIg==} + engines: {node: '>=18'} cpu: [arm] os: [linux] requiresBuild: true dev: true optional: true - /@esbuild/linux-ia32@0.21.4: - resolution: {integrity: sha512-pNftBl7m/tFG3t2m/tSjuYeWIffzwAZT9m08+9DPLizxVOsUl8DdFzn9HvJrTQwe3wvJnwTdl92AonY36w/25g==} - engines: {node: '>=12'} + /@esbuild/linux-ia32@0.22.0: + resolution: {integrity: sha512-r2ZZqkOMOrpUhzNwxI7uLAHIDwkfeqmTnrv1cjpL/rjllPWszgqmprd/om9oviKXUBpMqHbXmppvjAYgISb26Q==} + engines: {node: '>=18'} cpu: [ia32] os: [linux] requiresBuild: true dev: true optional: true - /@esbuild/linux-loong64@0.21.4: - resolution: {integrity: sha512-cSD2gzCK5LuVX+hszzXQzlWya6c7hilO71L9h4KHwqI4qeqZ57bAtkgcC2YioXjsbfAv4lPn3qe3b00Zt+jIfQ==} - engines: {node: '>=12'} + /@esbuild/linux-loong64@0.22.0: + resolution: {integrity: sha512-qaowLrV/YOMAL2RfKQ4C/VaDzAuLDuylM2sd/LH+4OFirMl6CuDpRlCq4u49ZBaVV8pkI/Y+hTdiibvQRhojCA==} + engines: {node: '>=18'} cpu: [loong64] os: [linux] requiresBuild: true dev: true optional: true - /@esbuild/linux-mips64el@0.21.4: - resolution: {integrity: sha512-qtzAd3BJh7UdbiXCrg6npWLYU0YpufsV9XlufKhMhYMJGJCdfX/G6+PNd0+v877X1JG5VmjBLUiFB0o8EUSicA==} - engines: {node: '>=12'} + /@esbuild/linux-mips64el@0.22.0: + resolution: {integrity: sha512-hgrezzjQTRxjkQ5k08J6rtZN5PNnkWx/Rz6Kmj9gnsdCAX1I4Dn4ZPqvFRkXo55Q3pnVQJBwbdtrTO7tMGtyVA==} + engines: {node: '>=18'} cpu: [mips64el] os: [linux] requiresBuild: true dev: true optional: true - /@esbuild/linux-ppc64@0.21.4: - resolution: {integrity: sha512-yB8AYzOTaL0D5+2a4xEy7OVvbcypvDR05MsB/VVPVA7nL4hc5w5Dyd/ddnayStDgJE59fAgNEOdLhBxjfx5+dg==} - engines: {node: '>=12'} + /@esbuild/linux-ppc64@0.22.0: + resolution: {integrity: sha512-ewxg6FLLUio883XgSjfULEmDl3VPv/TYNnRprVAS3QeGFLdCYdx1tIudBcd7n9jIdk82v1Ajov4jx87qW7h9+g==} + engines: {node: '>=18'} cpu: [ppc64] os: [linux] requiresBuild: true dev: true optional: true - /@esbuild/linux-riscv64@0.21.4: - resolution: {integrity: sha512-Y5AgOuVzPjQdgU59ramLoqSSiXddu7F3F+LI5hYy/d1UHN7K5oLzYBDZe23QmQJ9PIVUXwOdKJ/jZahPdxzm9w==} - engines: {node: '>=12'} + /@esbuild/linux-riscv64@0.22.0: + resolution: {integrity: sha512-Az5XbgSJC2lE8XK8pdcutsf9RgdafWdTpUK/+6uaDdfkviw/B4JCwAfh1qVeRWwOohwdsl4ywZrWBNWxwrPLFg==} + engines: {node: '>=18'} cpu: [riscv64] os: [linux] requiresBuild: true dev: true optional: true - /@esbuild/linux-s390x@0.21.4: - resolution: {integrity: sha512-Iqc/l/FFwtt8FoTK9riYv9zQNms7B8u+vAI/rxKuN10HgQIXaPzKZc479lZ0x6+vKVQbu55GdpYpeNWzjOhgbA==} - engines: {node: '>=12'} + /@esbuild/linux-s390x@0.22.0: + resolution: {integrity: sha512-8j4a2ChT9+V34NNNY9c/gMldutaJFmfMacTPq4KfNKwv2fitBCLYjee7c+Vxaha2nUhPK7cXcZpJtJ3+Y7ZdVQ==} + engines: {node: '>=18'} cpu: [s390x] os: [linux] requiresBuild: true dev: true optional: true - /@esbuild/linux-x64@0.21.4: - resolution: {integrity: sha512-Td9jv782UMAFsuLZINfUpoF5mZIbAj+jv1YVtE58rFtfvoKRiKSkRGQfHTgKamLVT/fO7203bHa3wU122V/Bdg==} - engines: {node: '>=12'} + /@esbuild/linux-x64@0.22.0: + resolution: {integrity: sha512-JUQyOnpbAkkRFOk/AhsEemz5TfWN4FJZxVObUlnlNCbe7QBl61ZNfM4cwBXayQA6laMJMUcqLHaYQHAB6YQ95Q==} + engines: {node: '>=18'} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /@esbuild/netbsd-x64@0.21.4: - resolution: {integrity: sha512-Awn38oSXxsPMQxaV0Ipb7W/gxZtk5Tx3+W+rAPdZkyEhQ6968r9NvtkjhnhbEgWXYbgV+JEONJ6PcdBS+nlcpA==} - engines: {node: '>=12'} + /@esbuild/netbsd-x64@0.22.0: + resolution: {integrity: sha512-11PoCoHXo4HFNbLsXuMB6bpMPWGDiw7xETji6COdJss4SQZLvcgNoeSqWtATRm10Jj1uEHiaIk4N0PiN6x4Fcg==} + engines: {node: '>=18'} cpu: [x64] os: [netbsd] requiresBuild: true dev: true optional: true - /@esbuild/openbsd-x64@0.21.4: - resolution: {integrity: sha512-IsUmQeCY0aU374R82fxIPu6vkOybWIMc3hVGZ3ChRwL9hA1TwY+tS0lgFWV5+F1+1ssuvvXt3HFqe8roCip8Hg==} - engines: {node: '>=12'} + /@esbuild/openbsd-arm64@0.22.0: + resolution: {integrity: sha512-Ezlhu/YyITmXwKSB+Zu/QqD7cxrjrpiw85cc0Rbd3AWr2wsgp+dWbWOE8MqHaLW9NKMZvuL0DhbJbvzR7F6Zvg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-x64@0.22.0: + resolution: {integrity: sha512-ufjdW5tFJGUjlH9j/5cCE9lrwRffyZh+T4vYvoDKoYsC6IXbwaFeV/ENxeNXcxotF0P8CDzoICXVSbJaGBhkrw==} + engines: {node: '>=18'} cpu: [x64] os: [openbsd] requiresBuild: true dev: true optional: true - /@esbuild/sunos-x64@0.21.4: - resolution: {integrity: sha512-hsKhgZ4teLUaDA6FG/QIu2q0rI6I36tZVfM4DBZv3BG0mkMIdEnMbhc4xwLvLJSS22uWmaVkFkqWgIS0gPIm+A==} - engines: {node: '>=12'} + /@esbuild/sunos-x64@0.22.0: + resolution: {integrity: sha512-zY6ly/AoSmKnmNTowDJsK5ehra153/5ZhqxNLfq9NRsTTltetr+yHHcQ4RW7QDqw4JC8A1uC1YmeSfK9NRcK1w==} + engines: {node: '>=18'} cpu: [x64] os: [sunos] requiresBuild: true dev: true optional: true - /@esbuild/win32-arm64@0.21.4: - resolution: {integrity: sha512-UUfMgMoXPoA/bvGUNfUBFLCh0gt9dxZYIx9W4rfJr7+hKe5jxxHmfOK8YSH4qsHLLN4Ck8JZ+v7Q5fIm1huErg==} - engines: {node: '>=12'} + /@esbuild/win32-arm64@0.22.0: + resolution: {integrity: sha512-Kml5F7tv/1Maam0pbbCrvkk9vj046dPej30kFzlhXnhuCtYYBP6FGy/cLbc5yUT1lkZznGLf2OvuvmLjscO5rw==} + engines: {node: '>=18'} cpu: [arm64] os: [win32] requiresBuild: true dev: true optional: true - /@esbuild/win32-ia32@0.21.4: - resolution: {integrity: sha512-yIxbspZb5kGCAHWm8dexALQ9en1IYDfErzjSEq1KzXFniHv019VT3mNtTK7t8qdy4TwT6QYHI9sEZabONHg+aw==} - engines: {node: '>=12'} + /@esbuild/win32-ia32@0.22.0: + resolution: {integrity: sha512-IOgwn+mYTM3RrcydP4Og5IpXh+ftN8oF+HELTXSmbWBlujuci4Qa3DTeO+LEErceisI7KUSfEIiX+WOUlpELkw==} + engines: {node: '>=18'} cpu: [ia32] os: [win32] requiresBuild: true dev: true optional: true - /@esbuild/win32-x64@0.21.4: - resolution: {integrity: sha512-sywLRD3UK/qRJt0oBwdpYLBibk7KiRfbswmWRDabuncQYSlf8aLEEUor/oP6KRz8KEG+HoiVLBhPRD5JWjS8Sg==} - engines: {node: '>=12'} + /@esbuild/win32-x64@0.22.0: + resolution: {integrity: sha512-4bDHJrk2WHBXJPhy1y80X7/5b5iZTZP3LGcKIlAP1J+KqZ4zQAPMLEzftGyjjfcKbA4JDlPt/+2R/F1ZTeRgrw==} + engines: {node: '>=18'} cpu: [x64] os: [win32] requiresBuild: true @@ -1135,8 +1165,8 @@ packages: eslint: 8.57.0 eslint-visitor-keys: 3.4.3 - /@eslint-community/regexpp@4.10.0: - resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} + /@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: @@ -1144,7 +1174,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.4 + debug: 4.3.5 espree: 9.6.1 globals: 13.24.0 ignore: 5.3.1 @@ -1159,21 +1189,21 @@ packages: resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - /@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 dev: false - /@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 dev: false - /@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' @@ -1183,21 +1213,42 @@ packages: react-dom: optional: true 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==} dev: false - /@graphql-typed-document-node/core@3.2.0(graphql@16.8.1): + /@formatjs/ecma402-abstract@2.0.0: + resolution: {integrity: sha512-rRqXOqdFmk7RYvj4khklyqzcfQl9vEL/usogncBHRZfZBDOwMGuSRNFl02fu5KGHXdbinju+YXyuR+Nk8xlr/g==} + dependencies: + '@formatjs/intl-localematcher': 0.5.4 + tslib: 2.6.3 + dev: false + + /@formatjs/intl-listformat@7.5.7: + resolution: {integrity: sha512-MG2TSChQJQT9f7Rlv+eXwUFiG24mKSzmF144PLb8m8OixyXqn4+YWU+5wZracZGCgVTVmx8viCf7IH3QXoiB2g==} + dependencies: + '@formatjs/ecma402-abstract': 2.0.0 + '@formatjs/intl-localematcher': 0.5.4 + tslib: 2.6.3 + dev: false + + /@formatjs/intl-localematcher@0.5.4: + resolution: {integrity: sha512-zTwEpWOzZ2CiKcB93BLngUX59hQkuZjT2+SAQEscSm52peDW/getsawMcWF1rGRpMCX6D7nSJA3CzJ8gn13N/g==} + dependencies: + tslib: 2.6.3 + dev: false + + /@graphql-typed-document-node/core@3.2.0(graphql@16.9.0): resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - graphql: 16.8.1 + graphql: 16.9.0 dev: false /@humanwhocodes/config-array@0.11.14: @@ -1205,7 +1256,7 @@ packages: engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.4 + debug: 4.3.5 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -1372,7 +1423,7 @@ packages: glob: 7.2.3 graceful-fs: 4.2.11 istanbul-lib-coverage: 3.2.2 - istanbul-lib-instrument: 6.0.2 + istanbul-lib-instrument: 6.0.3 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 4.0.1 istanbul-reports: 3.1.7 @@ -1382,7 +1433,7 @@ packages: slash: 3.0.0 string-length: 4.0.2 strip-ansi: 6.0.1 - v8-to-istanbul: 9.2.0 + v8-to-istanbul: 9.3.0 transitivePeerDependencies: - supports-color dev: true @@ -1499,28 +1550,23 @@ packages: '@jridgewell/set-array': 1.2.1 '@jridgewell/sourcemap-codec': 1.4.15 '@jridgewell/trace-mapping': 0.3.25 - dev: true /@jridgewell/resolve-uri@3.1.2: resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - dev: true /@jridgewell/set-array@1.2.1: resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} - dev: true /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - dev: true /@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 - dev: true /@jridgewell/trace-mapping@0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} @@ -1548,10 +1594,10 @@ packages: react-dom: optional: true dependencies: - '@babel/runtime': 7.24.5 - '@floating-ui/react-dom': 2.1.0(react-dom@18.3.1)(react@18.3.1) + '@babel/runtime': 7.24.7 + '@floating-ui/react-dom': 2.1.1(react-dom@18.3.1)(react@18.3.1) '@mui/types': 7.2.14 - '@mui/utils': 5.15.14(react@18.3.1) + '@mui/utils': 5.15.20(react@18.3.1) '@popperjs/core': 2.11.8 clsx: 2.1.1 prop-types: 15.8.1 @@ -1559,12 +1605,12 @@ packages: react-dom: 18.3.1(react@18.3.1) dev: false - /@mui/core-downloads-tracker@5.15.18: - resolution: {integrity: sha512-/9pVk+Al8qxAjwFUADv4BRZgMpZM4m5E+2Q/20qhVPuIJWqKp4Ie4tGExac6zu93rgPTYVQGgu+1vjiT0E+cEw==} + /@mui/core-downloads-tracker@5.15.21: + resolution: {integrity: sha512-dp9lXBaJZzJYeJfQY3Ow4Rb49QaCEdkl2KKYscdQHQm6bMJ+l4XPY3Cd9PCeeJTsHPIDJ60lzXbeRgs6sx/rpw==} dev: false - /@mui/material@5.15.18(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-n+/dsiqux74fFfcRUJjok+ieNQ7+BEk6/OwX9cLcLvriZrZb+/7Y8+Fd2HlUUbn5N0CDurgAHm0VH1DqyJ9HAw==} + /@mui/material@5.15.21(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-nTyCcgduKwHqiuQ/B03EQUa+utSMzn2sQp0QAibsnYe4tvc3zkMbO0amKpl48vhABIY3IvT6w9615BFIgMt0YA==} engines: {node: '>=12.0.0'} peerDependencies: '@emotion/react': ^11.5.0 @@ -1584,14 +1630,14 @@ packages: react-dom: optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@emotion/react': 11.11.4(react@18.3.1) '@emotion/styled': 11.11.5(@emotion/react@11.11.4)(react@18.3.1) '@mui/base': 5.0.0-beta.40(react-dom@18.3.1)(react@18.3.1) - '@mui/core-downloads-tracker': 5.15.18 - '@mui/system': 5.15.15(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1) + '@mui/core-downloads-tracker': 5.15.21 + '@mui/system': 5.15.20(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1) '@mui/types': 7.2.14 - '@mui/utils': 5.15.14(react@18.3.1) + '@mui/utils': 5.15.20(react@18.3.1) '@types/react-transition-group': 4.4.10 clsx: 2.1.1 csstype: 3.1.3 @@ -1602,8 +1648,8 @@ packages: react-transition-group: 4.4.5(react-dom@18.3.1)(react@18.3.1) dev: false - /@mui/private-theming@5.15.14(react@18.3.1): - resolution: {integrity: sha512-UH0EiZckOWcxiXLX3Jbb0K7rC8mxTr9L9l6QhOZxYc4r8FHUkefltV9VDGLrzCaWh30SQiJvAEd7djX3XXY6Xw==} + /@mui/private-theming@5.15.20(react@18.3.1): + resolution: {integrity: sha512-BK8F94AIqSrnaPYXf2KAOjGZJgWfvqAVQ2gVR3EryvQFtuBnG6RwodxrCvd3B48VuMy6Wsk897+lQMUxJyk+6g==} engines: {node: '>=12.0.0'} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 @@ -1614,8 +1660,8 @@ packages: react: optional: true dependencies: - '@babel/runtime': 7.24.5 - '@mui/utils': 5.15.14(react@18.3.1) + '@babel/runtime': 7.24.7 + '@mui/utils': 5.15.20(react@18.3.1) prop-types: 15.8.1 react: 18.3.1 dev: false @@ -1635,7 +1681,7 @@ packages: react: optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@emotion/cache': 11.11.0 '@emotion/react': 11.11.4(react@18.3.1) '@emotion/styled': 11.11.5(@emotion/react@11.11.4)(react@18.3.1) @@ -1644,8 +1690,8 @@ packages: react: 18.3.1 dev: false - /@mui/system@5.15.15(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1): - resolution: {integrity: sha512-aulox6N1dnu5PABsfxVGOZffDVmlxPOVgj56HrUnJE8MCSh8lOvvkd47cebIVQQYAjpwieXQXiDPj5pwM40jTQ==} + /@mui/system@5.15.20(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1): + resolution: {integrity: sha512-LoMq4IlAAhxzL2VNUDBTQxAb4chnBe8JvRINVNDiMtHE2PiPOoHlhOPutSxEbaL5mkECPVWSv6p8JEV+uykwIA==} engines: {node: '>=12.0.0'} peerDependencies: '@emotion/react': ^11.5.0 @@ -1662,13 +1708,13 @@ packages: react: optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@emotion/react': 11.11.4(react@18.3.1) '@emotion/styled': 11.11.5(@emotion/react@11.11.4)(react@18.3.1) - '@mui/private-theming': 5.15.14(react@18.3.1) + '@mui/private-theming': 5.15.20(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 - '@mui/utils': 5.15.14(react@18.3.1) + '@mui/utils': 5.15.20(react@18.3.1) clsx: 2.1.1 csstype: 3.1.3 prop-types: 15.8.1 @@ -1684,8 +1730,8 @@ packages: optional: true dev: false - /@mui/utils@5.15.14(react@18.3.1): - resolution: {integrity: sha512-0lF/7Hh/ezDv5X7Pry6enMsbYyGKjADzvHyo3Qrc/SSlTsQ1VkbDMbH0m2t3OR5iIVLwMoxwM7yGd+6FCMtTFA==} + /@mui/utils@5.15.20(react@18.3.1): + resolution: {integrity: sha512-mAbYx0sovrnpAu1zHc3MDIhPqL8RPVC5W5xcO1b7PiSCJPtckIZmBkp8hefamAvUiAV8gpfMOM6Zb+eSisbI2A==} engines: {node: '>=12.0.0'} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 @@ -1696,7 +1742,7 @@ packages: react: optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@types/prop-types': 15.7.12 prop-types: 15.8.1 react: 18.3.1 @@ -1772,8 +1818,8 @@ packages: /@types/babel__core@7.20.5: resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} dependencies: - '@babel/parser': 7.24.5 - '@babel/types': 7.24.5 + '@babel/parser': 7.24.7 + '@babel/types': 7.24.7 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.6 @@ -1782,20 +1828,20 @@ packages: /@types/babel__generator@7.6.8: resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.24.7 dev: true /@types/babel__template@7.4.4: resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} dependencies: - '@babel/parser': 7.24.5 - '@babel/types': 7.24.5 + '@babel/parser': 7.24.7 + '@babel/types': 7.24.7 dev: true /@types/babel__traverse@7.20.6: resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.24.7 dev: true /@types/body-parser@1.19.5: @@ -1849,8 +1895,8 @@ packages: '@types/pino-http': 5.8.4 dev: true - /@types/express-serve-static-core@4.19.1: - resolution: {integrity: sha512-ej0phymbFLoCB26dbbq5PGScsf2JAJ4IJHjG10LalgUV36XKTmA4GdA+PVllKvRk0sEKt64X8975qFnkSi0hqA==} + /@types/express-serve-static-core@4.19.5: + resolution: {integrity: sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==} dependencies: '@types/node': 18.19.13 '@types/qs': 6.9.15 @@ -1861,14 +1907,10 @@ packages: resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} dependencies: '@types/body-parser': 1.19.5 - '@types/express-serve-static-core': 4.19.1 + '@types/express-serve-static-core': 4.19.5 '@types/qs': 6.9.15 '@types/serve-static': 1.15.7 - /@types/geojson@7946.0.14: - resolution: {integrity: sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg==} - dev: false - /@types/graceful-fs@4.1.9: resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} dependencies: @@ -1960,14 +2002,14 @@ packages: dependencies: undici-types: 5.26.5 - /@types/node@20.12.12: - resolution: {integrity: sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==} + /@types/node@20.14.9: + resolution: {integrity: sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==} dependencies: undici-types: 5.26.5 dev: false - /@types/oauth@0.9.4: - resolution: {integrity: sha512-qk9orhti499fq5XxKCCEbd0OzdPZuancneyse3KtR+vgMiHRbh+mn8M4G6t64ob/Fg+GZGpa565MF/2dKWY32A==} + /@types/oauth@0.9.5: + resolution: {integrity: sha512-+oQ3C2Zx6ambINOcdIARF5Z3Tu3x//HipE889/fqo3sgpQZbe9c6ExdQFtN6qlhpR7p83lTZfPJt0tCAW29dog==} dependencies: '@types/node': 18.19.13 dev: true @@ -1981,14 +2023,14 @@ packages: dependencies: '@types/express': 4.17.21 '@types/passport': 1.0.16 - '@types/passport-oauth2': 1.4.16 + '@types/passport-oauth2': 1.4.17 dev: true - /@types/passport-oauth2@1.4.16: - resolution: {integrity: sha512-Sdr0rpAdkiidUOtyaapGgvXyMjqYlMTFHRy7gtJtzr0/ysEIa72N3j2FSHIRc14h29g1+dzDl8IW2WT2Mu29vQ==} + /@types/passport-oauth2@1.4.17: + resolution: {integrity: sha512-ODiAHvso6JcWJ6ZkHHroVp05EHGhqQN533PtFNBkg8Fy5mERDqsr030AX81M0D69ZcaMvhF92SRckEk2B0HYYg==} dependencies: '@types/express': 4.17.21 - '@types/oauth': 0.9.4 + '@types/oauth': 0.9.5 '@types/passport': 1.0.16 dev: true @@ -2006,14 +2048,12 @@ packages: /@types/pino-pretty@5.0.0: resolution: {integrity: sha512-N1uzqSzioqz8R3AkDbSJwcfDWeI3YMPNapSQQhnB2ISU4NYgUIcAh+hYT5ygqBM+klX4htpEhXMmoJv3J7GrdA==} - deprecated: This is a stub types definition. pino-pretty provides its own type definitions, so you do not need this installed. dependencies: - pino-pretty: 11.1.0 + pino-pretty: 11.2.1 dev: true /@types/pino-std-serializers@4.0.0: resolution: {integrity: sha512-gXfUZx2xIBbFYozGms53fT0nvkacx/+62c8iTxrEqH5PkIGAQvDbXg2774VWOycMPbqn5YJBQ3BMsg4Li3dWbg==} - deprecated: This is a stub types definition. pino-std-serializers provides its own type definitions, so you do not need this installed. dependencies: pino-std-serializers: 7.0.0 dev: true @@ -2125,8 +2165,8 @@ packages: resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} dev: true - /@types/uuid@9.0.7: - resolution: {integrity: sha512-WUtIVRUZ9i5dYXefDEAI7sh9/O7jGvHg7Df/5O/gtH3Yabe5odI3UWopVR1qbPXQtvOxWu3mM4XxlYeZtMWF4g==} + /@types/uuid@10.0.0: + resolution: {integrity: sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==} dev: true /@types/yargs-parser@21.0.3: @@ -2145,7 +2185,7 @@ packages: '@types/yargs-parser': 21.0.3 dev: true - /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.4.3): + /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.5.2): resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2156,24 +2196,24 @@ packages: typescript: optional: true dependencies: - '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.3) + '@eslint-community/regexpp': 4.11.0 + '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.5.2) '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.0)(typescript@5.4.3) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.3) - debug: 4.3.4 + '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.0)(typescript@5.5.2) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.5.2) + debug: 4.3.5 eslint: 8.57.0 graphemer: 1.4.0 ignore: 5.3.1 natural-compare-lite: 1.4.0 semver: 7.6.2 - tsutils: 3.21.0(typescript@5.4.3) - typescript: 5.4.3 + tsutils: 3.21.0(typescript@5.5.2) + typescript: 5.5.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.4.3): + /@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.5.2): resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2185,10 +2225,10 @@ packages: dependencies: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.3) - debug: 4.3.4 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.2) + debug: 4.3.5 eslint: 8.57.0 - typescript: 5.4.3 + typescript: 5.5.2 transitivePeerDependencies: - supports-color dev: true @@ -2201,7 +2241,7 @@ packages: '@typescript-eslint/visitor-keys': 5.62.0 dev: true - /@typescript-eslint/type-utils@5.62.0(eslint@8.57.0)(typescript@5.4.3): + /@typescript-eslint/type-utils@5.62.0(eslint@8.57.0)(typescript@5.5.2): resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2211,12 +2251,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.3) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.3) - debug: 4.3.4 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.2) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.5.2) + debug: 4.3.5 eslint: 8.57.0 - tsutils: 3.21.0(typescript@5.4.3) - typescript: 5.4.3 + tsutils: 3.21.0(typescript@5.5.2) + typescript: 5.5.2 transitivePeerDependencies: - supports-color dev: true @@ -2226,7 +2266,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/typescript-estree@5.62.0(typescript@5.4.3): + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.5.2): resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2237,17 +2277,17 @@ packages: dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.3.4 + debug: 4.3.5 globby: 11.1.0 is-glob: 4.0.3 semver: 7.6.2 - tsutils: 3.21.0(typescript@5.4.3) - typescript: 5.4.3 + tsutils: 3.21.0(typescript@5.5.2) + typescript: 5.5.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.4.3): + /@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.5.2): resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2258,7 +2298,7 @@ packages: '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.3) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.2) eslint: 8.57.0 eslint-scope: 5.1.1 semver: 7.6.2 @@ -2293,22 +2333,23 @@ packages: negotiator: 0.6.3 dev: false - /acorn-jsx@5.3.2(acorn@8.11.3): + /acorn-jsx@5.3.2(acorn@8.12.0): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.11.3 + acorn: 8.12.0 - /acorn-walk@8.3.2: - resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} + /acorn-walk@8.3.3: + resolution: {integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==} engines: {node: '>=0.4.0'} + dependencies: + acorn: 8.12.0 dev: true - /acorn@8.11.3: - resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + /acorn@8.12.0: + resolution: {integrity: sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==} engines: {node: '>=0.4.0'} - hasBin: true /adm-zip@0.5.10: resolution: {integrity: sha512-x0HvcHqVJNTPk/Bw8JbLWlWoo6Wwnsug0fnYYro1HBrjxZ3G7/AZk7Ahv8JwDe1uIcz8eBqvu86FuF1POiG7vQ==} @@ -2319,12 +2360,12 @@ packages: resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} engines: {node: '>= 14'} dependencies: - debug: 4.3.4 + debug: 4.3.5 transitivePeerDependencies: - supports-color dev: false - /ajv-formats@2.1.1(ajv@8.13.0): + /ajv-formats@2.1.1(ajv@8.16.0): resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: ajv: ^8.0.0 @@ -2332,7 +2373,7 @@ packages: ajv: optional: true dependencies: - ajv: 8.13.0 + ajv: 8.16.0 dev: false /ajv@6.12.6: @@ -2343,8 +2384,8 @@ packages: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - /ajv@8.13.0: - resolution: {integrity: sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==} + /ajv@8.16.0: + resolution: {integrity: sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==} dependencies: fast-deep-equal: 3.1.3 json-schema-traverse: 1.0.0 @@ -2400,10 +2441,6 @@ packages: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} - /any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - dev: false - /anymatch@2.0.0: resolution: {integrity: sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==} dependencies: @@ -2443,11 +2480,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /arr-flatten@1.1.0: - resolution: {integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==} - engines: {node: '>=0.10.0'} - dev: true - /arr-union@3.1.0: resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==} engines: {node: '>=0.10.0'} @@ -2482,7 +2514,6 @@ packages: /atob@2.1.2: resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} engines: {node: '>= 4.5.0'} - hasBin: true dev: true /atomic-sleep@1.0.0: @@ -2563,7 +2594,7 @@ packages: resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} engines: {node: '>=8'} dependencies: - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.7 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-instrument: 5.2.1 @@ -2576,8 +2607,8 @@ packages: resolution: {integrity: sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==} engines: {node: '>= 10.14.2'} dependencies: - '@babel/template': 7.24.0 - '@babel/types': 7.24.5 + '@babel/template': 7.24.7 + '@babel/types': 7.24.7 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.6 dev: true @@ -2586,8 +2617,8 @@ packages: resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/template': 7.24.0 - '@babel/types': 7.24.5 + '@babel/template': 7.24.7 + '@babel/types': 7.24.7 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.6 dev: true @@ -2596,7 +2627,7 @@ packages: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} engines: {node: '>=10', npm: '>=6'} dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 cosmiconfig: 7.1.0 resolve: 1.22.8 dev: false @@ -2711,39 +2742,20 @@ packages: dependencies: balanced-match: 1.0.2 - /braces@2.3.2: - resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==} - engines: {node: '>=0.10.0'} - dependencies: - arr-flatten: 1.1.0 - array-unique: 0.3.2 - extend-shallow: 2.0.1 - fill-range: 4.0.0 - isobject: 3.0.1 - repeat-element: 1.1.4 - snapdragon: 0.8.2 - snapdragon-node: 2.1.1 - split-string: 3.1.0 - to-regex: 3.0.2 - transitivePeerDependencies: - - supports-color - dev: true - /braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} dependencies: fill-range: 7.1.1 - /browserslist@4.23.0: - resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} + /browserslist@4.23.1: + resolution: {integrity: sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true dependencies: - caniuse-lite: 1.0.30001621 - electron-to-chromium: 1.4.782 + caniuse-lite: 1.0.30001639 + electron-to-chromium: 1.4.815 node-releases: 2.0.14 - update-browserslist-db: 1.0.16(browserslist@4.23.0) + update-browserslist-db: 1.0.16(browserslist@4.23.1) dev: true /bs-logger@0.2.6: @@ -2836,8 +2848,8 @@ packages: engines: {node: '>=10'} dev: true - /caniuse-lite@1.0.30001621: - resolution: {integrity: sha512-+NLXZiviFFKX0fk8Piwv3PfLPGtRqJeq2TiNoUff/qB5KJgwecJTvCXDpmlyP/eCI/GUEmp/h/y5j0yckiiZrA==} + /caniuse-lite@1.0.30001639: + resolution: {integrity: sha512-eFHflNTBIlFwP2AIKaYuBQN/apnUoKNhBdza8ZnW/h2di4LCZ4xFqYlxUxo+LQ76KFI1PGcC1QDxMbxTZpSCAg==} dev: true /capture-exit@2.0.0: @@ -2949,8 +2961,8 @@ packages: d: 1.0.2 es5-ext: 0.10.64 es6-iterator: 2.0.3 - memoizee: 0.4.16 - timers-ext: 0.1.7 + memoizee: 0.4.17 + timers-ext: 0.1.8 dev: false /cli-cursor@4.0.0: @@ -3140,7 +3152,6 @@ packages: /copyfiles@2.4.1: resolution: {integrity: sha512-fereAvAvxDrQDOXybk3Qu3dPbOoKoysFMWtkY3mv5BsL8//OSZVL5DCLYqgRfY5cWirgRzlC+WSrxp6Bo3eNZg==} - hasBin: true dependencies: glob: 7.2.3 minimatch: 3.1.2 @@ -3177,7 +3188,6 @@ packages: /create-jest@29.7.0(@types/node@18.19.13): resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 @@ -3239,9 +3249,9 @@ packages: engines: {node: '>= 6'} dev: false - /cssstyle@3.0.0: - resolution: {integrity: sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==} - engines: {node: '>=14'} + /cssstyle@4.0.1: + resolution: {integrity: sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ==} + engines: {node: '>=18'} dependencies: rrweb-cssom: 0.6.0 dev: false @@ -3259,7 +3269,7 @@ packages: engines: {node: '>=0.12'} dependencies: es5-ext: 0.10.64 - type: 2.7.2 + type: 2.7.3 dev: false /data-uri-to-buffer@4.0.1: @@ -3322,6 +3332,18 @@ packages: optional: true dependencies: ms: 2.1.2 + dev: true + + /debug@4.3.5: + resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 /decimal.js@10.4.3: resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} @@ -3462,7 +3484,7 @@ packages: resolution: {integrity: sha512-4SbcbedPXTciySXiSnNNLuJXpvxFe5nqivbiEHXyL8P/w0wx2uW7YXNjnYgjW0e2e6vy+L/tMISU/oAiXCl57Q==} engines: {node: '>=10'} dependencies: - '@types/node': 20.12.12 + '@types/node': 20.14.9 jszip: 3.10.1 nanoid: 5.0.7 xml: 1.0.1 @@ -3472,7 +3494,7 @@ packages: /dom-helpers@5.2.1: resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 csstype: 3.1.3 dev: false @@ -3540,8 +3562,8 @@ packages: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} dev: false - /electron-to-chromium@1.4.782: - resolution: {integrity: sha512-JUfU61e8tr+i5Y1FKXcKs+Xe+rJ+CEqm4cgv1kMihPE2EvYHmYyVr3Im/+1+Z5B29Be2EEGCZCwAc6Tazdl1Yg==} + /electron-to-chromium@1.4.815: + resolution: {integrity: sha512-OvpTT2ItpOXJL7IGcYakRjHCt8L5GrrN/wHCQsRB4PQa1X9fe+X9oen245mIId7s14xvArCGSTIq644yPUKKLg==} dev: true /emittery@0.13.1: @@ -3626,48 +3648,49 @@ packages: es6-symbol: 3.1.4 dev: false - /esbuild-jest@0.5.0(esbuild@0.21.4): + /esbuild-jest@0.5.0(esbuild@0.22.0): resolution: {integrity: sha512-AMZZCdEpXfNVOIDvURlqYyHwC8qC1/BFjgsrOiSL1eyiIArVtHL8YAC83Shhn16cYYoAWEW17yZn0W/RJKJKHQ==} peerDependencies: esbuild: '>=0.8.50' dependencies: '@babel/core': 7.24.0 - '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.0) + '@babel/plugin-transform-modules-commonjs': 7.24.7(@babel/core@7.24.0) babel-jest: 26.6.3(@babel/core@7.24.0) - esbuild: 0.21.4 + esbuild: 0.22.0 transitivePeerDependencies: - supports-color dev: true - /esbuild@0.21.4: - resolution: {integrity: sha512-sFMcNNrj+Q0ZDolrp5pDhH0nRPN9hLIM3fRPwgbLYJeSHHgnXSnbV3xYgSVuOeLWH9c73VwmEverVzupIv5xuA==} - engines: {node: '>=12'} + /esbuild@0.22.0: + resolution: {integrity: sha512-zNYA6bFZsVnsU481FnGAQjLDW0Pl/8BGG7EvAp15RzUvGC+ME7hf1q7LvIfStEQBz/iEHuBJCYcOwPmNCf1Tlw==} + engines: {node: '>=18'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/aix-ppc64': 0.21.4 - '@esbuild/android-arm': 0.21.4 - '@esbuild/android-arm64': 0.21.4 - '@esbuild/android-x64': 0.21.4 - '@esbuild/darwin-arm64': 0.21.4 - '@esbuild/darwin-x64': 0.21.4 - '@esbuild/freebsd-arm64': 0.21.4 - '@esbuild/freebsd-x64': 0.21.4 - '@esbuild/linux-arm': 0.21.4 - '@esbuild/linux-arm64': 0.21.4 - '@esbuild/linux-ia32': 0.21.4 - '@esbuild/linux-loong64': 0.21.4 - '@esbuild/linux-mips64el': 0.21.4 - '@esbuild/linux-ppc64': 0.21.4 - '@esbuild/linux-riscv64': 0.21.4 - '@esbuild/linux-s390x': 0.21.4 - '@esbuild/linux-x64': 0.21.4 - '@esbuild/netbsd-x64': 0.21.4 - '@esbuild/openbsd-x64': 0.21.4 - '@esbuild/sunos-x64': 0.21.4 - '@esbuild/win32-arm64': 0.21.4 - '@esbuild/win32-ia32': 0.21.4 - '@esbuild/win32-x64': 0.21.4 + '@esbuild/aix-ppc64': 0.22.0 + '@esbuild/android-arm': 0.22.0 + '@esbuild/android-arm64': 0.22.0 + '@esbuild/android-x64': 0.22.0 + '@esbuild/darwin-arm64': 0.22.0 + '@esbuild/darwin-x64': 0.22.0 + '@esbuild/freebsd-arm64': 0.22.0 + '@esbuild/freebsd-x64': 0.22.0 + '@esbuild/linux-arm': 0.22.0 + '@esbuild/linux-arm64': 0.22.0 + '@esbuild/linux-ia32': 0.22.0 + '@esbuild/linux-loong64': 0.22.0 + '@esbuild/linux-mips64el': 0.22.0 + '@esbuild/linux-ppc64': 0.22.0 + '@esbuild/linux-riscv64': 0.22.0 + '@esbuild/linux-s390x': 0.22.0 + '@esbuild/linux-x64': 0.22.0 + '@esbuild/netbsd-x64': 0.22.0 + '@esbuild/openbsd-arm64': 0.22.0 + '@esbuild/openbsd-x64': 0.22.0 + '@esbuild/sunos-x64': 0.22.0 + '@esbuild/win32-arm64': 0.22.0 + '@esbuild/win32-ia32': 0.22.0 + '@esbuild/win32-x64': 0.22.0 dev: true /escalade@3.1.2: @@ -3700,7 +3723,7 @@ packages: eslint: 8.57.0 dev: true - /eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.3): + /eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.5.2): resolution: {integrity: sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -3713,8 +3736,8 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.4.3) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.3) + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.5.2) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.5.2) eslint: 8.57.0 jest: 29.7.0(@types/node@18.19.13) transitivePeerDependencies: @@ -3744,10 +3767,9 @@ packages: /eslint@8.57.0: resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@eslint-community/regexpp': 4.10.0 + '@eslint-community/regexpp': 4.11.0 '@eslint/eslintrc': 2.1.4 '@eslint/js': 8.57.0 '@humanwhocodes/config-array': 0.11.14 @@ -3757,7 +3779,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4 + debug: 4.3.5 doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -3794,21 +3816,20 @@ packages: d: 1.0.2 es5-ext: 0.10.64 event-emitter: 0.3.5 - type: 2.7.2 + type: 2.7.3 dev: false /espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.11.3 - acorn-jsx: 5.3.2(acorn@8.11.3) + acorn: 8.12.0 + acorn-jsx: 5.3.2(acorn@8.12.0) eslint-visitor-keys: 3.4.3 /esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} - hasBin: true dev: true /esquery@1.5.0: @@ -3968,7 +3989,6 @@ packages: /express-pino-logger@7.0.0: resolution: {integrity: sha512-g8T6nhqq9L9AuwppymXa1rm6+A7xVUfkcEodXA+d2ILsM1uyoqSn83kpXE61v6JR2eFL8n878VyFDir1w2PuPw==} - deprecated: use pino-http instead dependencies: pino-http: 6.6.0 dev: false @@ -4028,7 +4048,7 @@ packages: /ext@1.7.0: resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} dependencies: - type: 2.7.2 + type: 2.7.3 dev: false /extend-shallow@2.0.1: @@ -4144,16 +4164,6 @@ packages: debounce: 1.2.1 dev: true - /fill-range@4.0.0: - resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==} - engines: {node: '>=0.10.0'} - dependencies: - extend-shallow: 2.0.1 - is-number: 3.0.0 - repeat-string: 1.6.1 - to-regex-range: 2.1.1 - dev: true - /fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} @@ -4226,8 +4236,8 @@ packages: engines: {node: '>=0.10.0'} dev: true - /foreground-child@3.1.1: - resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} + /foreground-child@3.2.1: + resolution: {integrity: sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==} engines: {node: '>=14'} dependencies: cross-spawn: 7.0.3 @@ -4368,15 +4378,15 @@ packages: dependencies: is-glob: 4.0.3 - /glob@10.4.1: - resolution: {integrity: sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==} + /glob@10.4.2: + resolution: {integrity: sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==} engines: {node: '>=16 || 14 >=14.18'} - hasBin: true dependencies: - foreground-child: 3.1.1 - jackspeak: 3.1.2 - minimatch: 9.0.4 + foreground-child: 3.2.1 + jackspeak: 3.4.0 + minimatch: 9.0.5 minipass: 7.1.2 + package-json-from-dist: 1.0.0 path-scurry: 1.11.1 /glob@7.1.6: @@ -4392,7 +4402,6 @@ packages: /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -4404,7 +4413,6 @@ packages: /globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} - dev: true /globals@13.24.0: resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} @@ -4448,7 +4456,7 @@ packages: object-hash: 1.3.1 dev: true - /graphql-request@4.3.0(graphql@16.8.1): + /graphql-request@4.3.0(graphql@16.9.0): resolution: {integrity: sha512-2v6hQViJvSsifK606AliqiNiijb1uwWp6Re7o0RTyH+uRTv/u7Uqm2g4Fjq/LgZIzARB38RZEvVBFOQOVdlBow==} peerDependencies: graphql: 14 - 16 @@ -4456,19 +4464,19 @@ packages: cross-fetch: 3.1.8 extract-files: 9.0.0 form-data: 3.0.1 - graphql: 16.8.1 + graphql: 16.9.0 transitivePeerDependencies: - encoding dev: false - /graphql-request@6.1.0(graphql@16.8.1): + /graphql-request@6.1.0(graphql@16.9.0): resolution: {integrity: sha512-p+XPfS4q7aIpKVcgmnZKhMNqhltk20hfXtkaIkTfjjmiKMJ5xrt5c743cL03y/K7y1rg3WrIC49xGiEQ4mxdNw==} peerDependencies: graphql: 14 - 16 dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.9.0) cross-fetch: 3.1.8 - graphql: 16.8.1 + graphql: 16.9.0 transitivePeerDependencies: - encoding dev: false @@ -4480,8 +4488,8 @@ packages: iterall: 1.3.0 dev: true - /graphql@16.8.1: - resolution: {integrity: sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==} + /graphql@16.9.0: + resolution: {integrity: sha512-GGTKBX4SD7Wdb8mqeDLni2oaRGYQWjWHGKPQ24ZMnUtKfcsVoiv4uX8+LJr1K6U5VW2Lu1BwJnj7uiori0YtRw==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} dev: false @@ -4555,7 +4563,6 @@ packages: /he@1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} - hasBin: true dev: false /helmet@7.1.0: @@ -4614,7 +4621,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.1 - debug: 4.3.4 + debug: 4.3.5 transitivePeerDependencies: - supports-color dev: false @@ -4649,12 +4656,12 @@ packages: - debug dev: false - /https-proxy-agent@7.0.4: - resolution: {integrity: sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==} + /https-proxy-agent@7.0.5: + resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==} engines: {node: '>= 14'} dependencies: agent-base: 7.1.1 - debug: 4.3.4 + debug: 4.3.5 transitivePeerDependencies: - supports-color dev: false @@ -4672,7 +4679,6 @@ packages: /husky@8.0.3: resolution: {integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==} engines: {node: '>=14'} - hasBin: true dev: false /iconv-lite@0.4.24: @@ -4715,7 +4721,6 @@ 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 @@ -4727,7 +4732,6 @@ packages: /inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. dependencies: once: 1.4.0 wrappy: 1.0.2 @@ -4775,13 +4779,13 @@ packages: /is-ci@2.0.0: resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==} - hasBin: true dependencies: ci-info: 2.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 @@ -4818,7 +4822,6 @@ packages: /is-docker@2.2.1: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} - hasBin: true dev: true /is-extendable@0.1.1: @@ -4986,7 +4989,7 @@ packages: engines: {node: '>=8'} dependencies: '@babel/core': 7.24.0 - '@babel/parser': 7.24.5 + '@babel/parser': 7.24.7 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 @@ -4994,12 +4997,12 @@ packages: - supports-color dev: true - /istanbul-lib-instrument@6.0.2: - resolution: {integrity: sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==} + /istanbul-lib-instrument@6.0.3: + resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} engines: {node: '>=10'} dependencies: '@babel/core': 7.24.0 - '@babel/parser': 7.24.5 + '@babel/parser': 7.24.7 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 7.6.2 @@ -5020,7 +5023,7 @@ packages: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} dependencies: - debug: 4.3.4 + debug: 4.3.5 istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -5039,8 +5042,8 @@ packages: resolution: {integrity: sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg==} dev: true - /jackspeak@3.1.2: - resolution: {integrity: sha512-kWmLKn2tRtfYMF/BakihVVRzBKOxz4gJMiL2Rj91WnAB5TPZumSH99R/Yf1qE1u4uRimvCSJfm6hnxohXeEXjQ==} + /jackspeak@3.4.0: + resolution: {integrity: sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==} engines: {node: '>=14'} dependencies: '@isaacs/cliui': 8.0.2 @@ -5275,7 +5278,7 @@ packages: resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.24.7 '@jest/types': 29.6.3 '@types/stack-utils': 2.0.3 chalk: 4.1.2 @@ -5414,10 +5417,10 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/core': 7.24.0 - '@babel/generator': 7.24.5 - '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.0) - '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.24.0) - '@babel/types': 7.24.5 + '@babel/generator': 7.24.7 + '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.24.0) + '@babel/plugin-syntax-typescript': 7.24.7(@babel/core@7.24.0) + '@babel/types': 7.24.7 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 @@ -5550,12 +5553,11 @@ packages: /js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true dependencies: argparse: 2.0.1 - /jsdom@23.0.1: - resolution: {integrity: sha512-2i27vgvlUsGEBO9+/kJQRbtqtm+191b5zAZrU/UezVmnC2dlDAFLgDYJvAEi94T4kjsRKkezEtLQTgsNEsW2lQ==} + /jsdom@24.1.0: + resolution: {integrity: sha512-6gpM7pRXCwIOKxX47cgOyvyQDN/Eh0f1MeKySBV2xGdKtqJBLj8P25eY3EVCWo2mglDDzozR2r2MW4T+JiNUZA==} engines: {node: '>=18'} peerDependencies: canvas: ^2.11.2 @@ -5563,17 +5565,17 @@ packages: canvas: optional: true dependencies: - cssstyle: 3.0.0 + cssstyle: 4.0.1 data-urls: 5.0.0 decimal.js: 10.4.3 form-data: 4.0.0 html-encoding-sniffer: 4.0.0 http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.4 + https-proxy-agent: 7.0.5 is-potential-custom-element-name: 1.0.1 nwsapi: 2.2.10 parse5: 7.1.2 - rrweb-cssom: 0.6.0 + rrweb-cssom: 0.7.1 saxes: 6.0.0 symbol-tree: 3.2.4 tough-cookie: 4.1.4 @@ -5582,7 +5584,7 @@ packages: whatwg-encoding: 3.1.1 whatwg-mimetype: 4.0.0 whatwg-url: 14.0.0 - ws: 8.17.0 + ws: 8.17.1 xml-name-validator: 5.0.0 transitivePeerDependencies: - bufferutil @@ -5593,8 +5595,6 @@ packages: /jsesc@2.5.2: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} - hasBin: true - dev: true /json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} @@ -5602,24 +5602,23 @@ packages: /json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - /json-schema-to-typescript@14.0.4: - resolution: {integrity: sha512-covPOp3hrbD+oEcMvDxP5Rh6xNZj7lOTZkXAeQoDyu1PuEl1A6oRZ3Sy05HN11vXXmdJ6gLh5P3Qz0mgMPTzzw==} + /json-schema-to-typescript@14.1.0: + resolution: {integrity: sha512-VIeAFQkn88gFh26MSHWG4uX7TjK/arTw0NVLMZn6vX1WrSF+P6xu5MyEdovu+9PJ0uiS5gm0wzwQvYW9eSq1uw==} engines: {node: '>=16.0.0'} hasBin: true dependencies: - '@apidevtools/json-schema-ref-parser': 11.6.2 + '@apidevtools/json-schema-ref-parser': 11.6.4 '@types/json-schema': 7.0.15 '@types/lodash': 4.17.0 cli-color: 2.0.4 - glob: 10.4.1 + glob: 10.4.2 is-glob: 4.0.3 js-yaml: 4.1.0 lodash: 4.17.21 minimist: 1.2.8 mkdirp: 3.0.1 - mz: 2.7.0 node-fetch: 3.3.2 - prettier: 3.2.5 + prettier: 3.3.2 dev: false /json-schema-traverse@0.4.1: @@ -5643,13 +5642,11 @@ packages: /json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} - hasBin: true dev: true /jsondiffpatch@0.5.0: resolution: {integrity: sha512-Quz3MvAwHxVYNXsOByL7xI5EB2WYOeFswqaHIA3qOK3isRWTxiplBEocmmru6XmxDB2L7jDNYtYA4FyimoAFEw==} engines: {node: '>=8.17.0'} - hasBin: true dependencies: chalk: 3.0.0 diff-match-patch: 1.0.5 @@ -5761,7 +5758,6 @@ packages: /lint-staged@15.0.2: resolution: {integrity: sha512-vnEy7pFTHyVuDmCAIFKR5QDO8XLVlPFQQyujQ/STOxe40ICWqJ6knS2wSJ/ffX/Lw0rz83luRDh+ET7toN+rOw==} engines: {node: '>=18.12.0'} - hasBin: true dependencies: chalk: 5.3.0 commander: 11.1.0 @@ -5785,7 +5781,7 @@ packages: colorette: 2.0.20 eventemitter3: 5.0.1 log-update: 5.0.1 - rfdc: 1.3.1 + rfdc: 1.4.1 wrap-ansi: 8.1.0 dev: true @@ -5871,8 +5867,8 @@ packages: js-tokens: 4.0.0 dev: false - /lru-cache@10.2.2: - resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==} + /lru-cache@10.3.0: + resolution: {integrity: sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ==} engines: {node: 14 || >=16.14} /lru-cache@5.1.1: @@ -5916,8 +5912,8 @@ packages: object-visit: 1.0.1 dev: true - /marked@12.0.2: - resolution: {integrity: sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q==} + /marked@13.0.1: + resolution: {integrity: sha512-7kBohS6GrZKvCsNXZyVVXSW7/hGBHe49ng99YPkDCckSUrrG7MSFLCexsRxptzOmyW2eT5dySh4Md1V6my52fA==} engines: {node: '>= 18'} hasBin: true dev: false @@ -5927,9 +5923,9 @@ packages: engines: {node: '>= 0.6'} dev: false - /memoizee@0.4.16: - resolution: {integrity: sha512-eOxQqGfogqdcQ2jeyLgsTp91bFOdbjaiJ1P0ZeDt1HHT1+ektm2u+raWDytppt8SMZ1fP2sIWlTbZukHhMKhiQ==} - engines: {node: '>=.0.12'} + /memoizee@0.4.17: + resolution: {integrity: sha512-DGqD7Hjpi/1or4F/aYAspXKNm5Yili0QDAFAY4QYvpqpgiY6+1jOfqpmByzjxbWd/T9mChbCArXAbDAsTm5oXA==} + engines: {node: '>=0.12'} dependencies: d: 1.0.2 es5-ext: 0.10.64 @@ -5938,7 +5934,7 @@ packages: is-promise: 2.2.2 lru-queue: 0.1.0 next-tick: 1.1.0 - timers-ext: 0.1.7 + timers-ext: 0.1.8 dev: false /merge-descriptors@1.0.1: @@ -5964,7 +5960,7 @@ packages: dependencies: arr-diff: 4.0.0 array-unique: 0.3.2 - braces: 2.3.2 + braces: 3.0.3 define-property: 2.0.2 extend-shallow: 3.0.2 extglob: 2.0.4 @@ -6007,19 +6003,16 @@ packages: /mime@1.6.0: resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} engines: {node: '>=4'} - hasBin: true dev: false /mime@2.6.0: resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} engines: {node: '>=4.0.0'} - hasBin: true dev: true /mime@3.0.0: resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} engines: {node: '>=10.0.0'} - hasBin: true dev: false /mimic-fn@2.1.0: @@ -6037,8 +6030,8 @@ packages: dependencies: brace-expansion: 1.1.11 - /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 @@ -6060,7 +6053,6 @@ packages: /mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true dependencies: minimist: 1.2.8 dev: false @@ -6068,7 +6060,6 @@ packages: /mkdirp@1.0.4: resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} engines: {node: '>=10'} - hasBin: true /mkdirp@3.0.1: resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} @@ -6099,18 +6090,9 @@ packages: xtend: 4.0.2 dev: false - /mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - dependencies: - any-promise: 1.3.0 - object-assign: 4.1.1 - thenify-all: 1.6.0 - dev: false - /nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true dev: false /nanoid@5.0.7: @@ -6162,7 +6144,7 @@ packages: resolution: {integrity: sha512-yAyTfdeNJGGBFxWdzSKCBYxs5FxLbCg5X5Q4ets974hcQzG1+qCxvIyOo4j2Ry6MUlhWVMX4OoYDefAIIwupjw==} engines: {node: '>= 10.13'} dependencies: - debug: 4.3.4 + debug: 4.3.5 json-stringify-safe: 5.0.1 propagate: 2.0.1 transitivePeerDependencies: @@ -6172,7 +6154,6 @@ packages: /node-dev@8.0.0: resolution: {integrity: sha512-GXc0KxmBXfQxMPdymOui40yvC5W/RXFwmuUDT65wvTAO/o9wAsddYC8q4EHKxq3Qqt+uLS/g7XKdgVcsjyk9lw==} engines: {node: '>=14'} - hasBin: true dependencies: dateformat: 3.0.3 dynamic-dedupe: 0.3.0 @@ -6248,8 +6229,8 @@ packages: engines: {node: '>=0.10.0'} dev: true - /notifications-node-client@8.1.0: - resolution: {integrity: sha512-2NJqPEcvlFRxuPMMWqoVXVUDz9EWl8dQVAhnLfRdv61PaHMqIRiQTdwn2qge8sC3kAsLnJoTl0qxhwDUarkYsQ==} + /notifications-node-client@8.2.0: + resolution: {integrity: sha512-XGmW2f2CroEwIUrPaTyShpF8pLlu79rBnwWns1uPGs27LbZdzNPJF1BzPl3cG3Tsu3nVlaWeXJJYAE+ALryalA==} engines: {node: '>=14.17.3', npm: '>=6.14.13'} dependencies: axios: 1.6.8 @@ -6312,8 +6293,9 @@ packages: engines: {node: '>= 0.10.0'} dev: true - /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==} @@ -6433,6 +6415,9 @@ packages: engines: {node: '>=6'} dev: true + /package-json-from-dist@1.0.0: + resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} + /pako@1.0.11: resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} dev: false @@ -6447,7 +6432,7 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.24.7 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -6534,7 +6519,7 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} dependencies: - lru-cache: 10.2.2 + lru-cache: 10.3.0 minipass: 7.1.2 /path-to-regexp@0.1.7: @@ -6559,7 +6544,6 @@ packages: /pidtree@0.6.0: resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} engines: {node: '>=0.10'} - hasBin: true dev: true /pino-abstract-transport@0.5.0: @@ -6589,9 +6573,8 @@ packages: resolution: {integrity: sha512-qGIG4fYMqokNb5Ho21YNH9uB4NELYTb9oADiuzoL2+n1gs6QyoUKaTN+7eqT4VDC6syvcyark3YP9o2UmCk32A==} dev: false - /pino-pretty@11.1.0: - resolution: {integrity: sha512-PjBzFL7IMSl1YkS9cSVWC+4gONmW0Fi+fvUzy74zK6RJHk4RkfW+e22NydRrGEtBRa5n6/oPNLPqjUeQrzqcLQ==} - hasBin: true + /pino-pretty@11.2.1: + resolution: {integrity: sha512-O05NuD9tkRasFRWVaF/uHLOvoRDFD7tb5VMertr78rbsYFjYp48Vg3477EshVAF5eZaEw+OpDl/tu+B0R5o+7g==} dependencies: colorette: 2.0.20 dateformat: 4.6.3 @@ -6623,7 +6606,6 @@ packages: /pino@7.11.0: resolution: {integrity: sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg==} - hasBin: true dependencies: atomic-sleep: 1.0.0 fast-redact: 3.5.0 @@ -6667,11 +6649,10 @@ packages: /prettier@3.2.4: resolution: {integrity: sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ==} engines: {node: '>=14'} - hasBin: true dev: true - /prettier@3.2.5: - resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} + /prettier@3.3.2: + resolution: {integrity: sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==} engines: {node: '>=14'} hasBin: true dev: false @@ -6786,7 +6767,6 @@ packages: /querystring@0.2.0: resolution: {integrity: sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==} engines: {node: '>=0.4.x'} - deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. dev: false /querystringify@2.2.0: @@ -6846,7 +6826,7 @@ packages: react-dom: optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 @@ -6940,16 +6920,6 @@ packages: resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} dev: true - /repeat-element@1.1.4: - resolution: {integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==} - engines: {node: '>=0.10.0'} - dev: true - - /repeat-string@1.6.1: - resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} - engines: {node: '>=0.10'} - dev: true - /require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -6981,7 +6951,6 @@ 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@2.0.2: @@ -6991,9 +6960,8 @@ packages: /resolve@1.22.8: 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 @@ -7014,36 +6982,36 @@ packages: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - /rfdc@1.3.1: - resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==} + /rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} dev: true /rimraf@2.7.1: resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} - 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 /rimraf@5.0.5: resolution: {integrity: sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==} engines: {node: '>=14'} - hasBin: true dependencies: - glob: 10.4.1 + glob: 10.4.2 dev: true /rrweb-cssom@0.6.0: resolution: {integrity: sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==} dev: false + /rrweb-cssom@0.7.1: + resolution: {integrity: sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==} + dev: false + /rsvp@4.8.5: resolution: {integrity: sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==} engines: {node: 6.* || >= 7.*} @@ -7079,8 +7047,6 @@ 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 @@ -7099,8 +7065,8 @@ packages: resolution: {integrity: sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==} dev: false - /sax@1.3.0: - resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==} + /sax@1.4.1: + resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} dev: false /saxes@6.0.0: @@ -7122,18 +7088,15 @@ 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 dev: true /semver@7.6.2: resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} engines: {node: '>=10'} - hasBin: true /send@0.18.0: resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} @@ -7240,7 +7203,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==} @@ -7272,22 +7235,6 @@ packages: is-fullwidth-code-point: 4.0.0 dev: true - /snapdragon-node@2.1.1: - resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==} - engines: {node: '>=0.10.0'} - dependencies: - define-property: 1.0.0 - isobject: 3.0.1 - snapdragon-util: 3.0.1 - dev: true - - /snapdragon-util@3.0.1: - resolution: {integrity: sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==} - engines: {node: '>=0.10.0'} - dependencies: - kind-of: 3.2.2 - dev: true - /snapdragon@0.8.2: resolution: {integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==} engines: {node: '>=0.10.0'} @@ -7317,7 +7264,6 @@ packages: /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 @@ -7342,7 +7288,6 @@ 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.7: @@ -7512,7 +7457,7 @@ packages: dependencies: component-emitter: 1.3.1 cookiejar: 2.1.4 - debug: 4.3.4 + debug: 4.3.5 fast-safe-stringify: 2.1.1 form-data: 4.0.0 formidable: 3.5.1 @@ -7559,7 +7504,6 @@ packages: /swagger-jsdoc@6.2.8(openapi-types@12.1.3): resolution: {integrity: sha512-VPvil1+JRpmJ55CgAtn8DIcpBs0bL5L3q5bVQvF4tAW/k/9JYSj7dCpaYCAv5rufe0vcCbBRQXGvzpkWjvLklQ==} engines: {node: '>=12.0.0'} - hasBin: true dependencies: commander: 6.2.0 doctrine: 3.0.0 @@ -7580,8 +7524,8 @@ packages: - openapi-types dev: false - /swagger-ui-dist@5.17.12: - resolution: {integrity: sha512-gHzs6CYQjgm0rpnFJGsjvWLua6znq+nipi89RDcu0a8R8JPXuVQrybVRBoOFmZ8mVTo9uPJDWgEYqnJRl4dHCQ==} + /swagger-ui-dist@5.17.14: + resolution: {integrity: sha512-CVbSfaLpstV65OnSjbXfVd6Sta3q3F7Cj/yYuvHMp1P90LztOLs6PfUnKEVAeiIVQt9u2SaPwv0LiH/OyMjHRw==} dev: false /swagger-ui-express@5.0.0(express@4.19.2): @@ -7591,7 +7535,7 @@ packages: express: '>=4.0.0 || >=5.0.0-beta' dependencies: express: 4.19.2 - swagger-ui-dist: 5.17.12 + swagger-ui-dist: 5.17.14 dev: false /symbol-tree@3.2.4: @@ -7616,19 +7560,6 @@ packages: /text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - /thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} - dependencies: - thenify: 3.3.1 - dev: false - - /thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - dependencies: - any-promise: 1.3.0 - dev: false - /thread-stream@0.15.2: resolution: {integrity: sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA==} dependencies: @@ -7642,8 +7573,9 @@ packages: xtend: 4.0.2 dev: false - /timers-ext@0.1.7: - resolution: {integrity: sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==} + /timers-ext@0.1.8: + resolution: {integrity: sha512-wFH7+SEAcKfJpfLPkrgMPvvwnEtj8W4IurvEyrKsDleXnKLCDw71w8jltvfLa8Rm4qQxxT4jmDBYbJG/z7qoww==} + engines: {node: '>=0.12'} dependencies: es5-ext: 0.10.64 next-tick: 1.1.0 @@ -7664,14 +7596,6 @@ packages: kind-of: 3.2.2 dev: true - /to-regex-range@2.1.1: - resolution: {integrity: sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==} - engines: {node: '>=0.10.0'} - dependencies: - is-number: 3.0.0 - repeat-string: 1.6.1 - dev: true - /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -7716,10 +7640,9 @@ packages: /tree-kill@1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} - hasBin: true dev: true - /ts-jest@29.1.1(@babel/core@7.24.0)(esbuild@0.21.4)(jest@29.7.0)(typescript@5.4.3): + /ts-jest@29.1.1(@babel/core@7.24.0)(esbuild@0.22.0)(jest@29.7.0)(typescript@5.5.2): resolution: {integrity: sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -7742,7 +7665,7 @@ packages: dependencies: '@babel/core': 7.24.0 bs-logger: 0.2.6 - esbuild: 0.21.4 + esbuild: 0.22.0 fast-json-stable-stringify: 2.1.0 jest: 29.7.0(@types/node@18.19.13) jest-util: 29.7.0 @@ -7750,11 +7673,11 @@ packages: lodash.memoize: 4.1.2 make-error: 1.3.6 semver: 7.6.2 - typescript: 5.4.3 + typescript: 5.5.2 yargs-parser: 21.1.1 dev: true - /ts-node-dev@2.0.0(@types/node@18.19.13)(typescript@5.4.3): + /ts-node-dev@2.0.0(@types/node@18.19.13)(typescript@5.5.2): resolution: {integrity: sha512-ywMrhCfH6M75yftYvrvNarLEY+SUXtUvU8/0Z6llrHQVBx12GiFk5sStF8UdfE/yfzk9IAq7O5EEbTQsxlBI8w==} engines: {node: '>=0.8.0'} hasBin: true @@ -7773,16 +7696,16 @@ packages: rimraf: 2.7.1 source-map-support: 0.5.21 tree-kill: 1.2.2 - ts-node: 10.9.2(@types/node@18.19.13)(typescript@5.4.3) + ts-node: 10.9.2(@types/node@18.19.13)(typescript@5.5.2) tsconfig: 7.0.0 - typescript: 5.4.3 + typescript: 5.5.2 transitivePeerDependencies: - '@swc/core' - '@swc/wasm' - '@types/node' dev: true - /ts-node@10.9.2(@types/node@18.19.13)(typescript@5.4.3): + /ts-node@10.9.2(@types/node@18.19.13)(typescript@5.5.2): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -7802,13 +7725,13 @@ packages: '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 '@types/node': 18.19.13 - acorn: 8.11.3 - acorn-walk: 8.3.2 + acorn: 8.12.0 + acorn-walk: 8.3.3 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.4.3 + typescript: 5.5.2 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 dev: true @@ -7826,19 +7749,23 @@ packages: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: true + /tslib@2.6.3: + resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} + dev: false + /tsscmp@1.0.6: resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==} engines: {node: '>=0.6.x'} dev: false - /tsutils@3.21.0(typescript@5.4.3): + /tsutils@3.21.0(typescript@5.5.2): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 - typescript: 5.4.3 + typescript: 5.5.2 dev: true /type-check@0.4.0: @@ -7871,8 +7798,8 @@ packages: engines: {node: '>=16'} dev: false - /type-fest@4.18.2: - resolution: {integrity: sha512-+suCYpfJLAe4OXS6+PPXjW3urOS4IoP9waSiLuXfLgqZODKw/aWwASvzqE886wA0kQgGy0mIWyhd87VpqIy6Xg==} + /type-fest@4.21.0: + resolution: {integrity: sha512-ADn2w7hVPcK6w1I0uWnM//y1rLXZhzB9mr0a3OirzclKF1Wp6VzevUmzz/NRAWunOT6E8HrnpGY7xOfc6K57fA==} engines: {node: '>=16'} dev: false @@ -7884,8 +7811,8 @@ packages: mime-types: 2.1.35 dev: false - /type@2.7.2: - resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==} + /type@2.7.3: + resolution: {integrity: sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==} dev: false /typedarray-to-buffer@3.1.5: @@ -7898,8 +7825,8 @@ packages: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} dev: false - /typescript@5.4.3: - resolution: {integrity: sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==} + /typescript@5.5.2: + resolution: {integrity: sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==} engines: {node: '>=14.17'} hasBin: true dev: true @@ -7944,13 +7871,13 @@ packages: engines: {node: '>=8'} dev: false - /update-browserslist-db@1.0.16(browserslist@4.23.0): + /update-browserslist-db@1.0.16(browserslist@4.23.1): resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: - browserslist: 4.23.0 + browserslist: 4.23.1 escalade: 3.1.2 picocolors: 1.0.1 dev: true @@ -7962,7 +7889,6 @@ 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: @@ -8003,6 +7929,10 @@ packages: engines: {node: '>= 0.4.0'} dev: false + /uuid@10.0.0: + resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} + hasBin: true + /uuid@8.0.0: resolution: {integrity: sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==} hasBin: true @@ -8013,16 +7943,12 @@ packages: hasBin: true dev: true - /uuid@9.0.1: - resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} - hasBin: true - /v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} dev: true - /v8-to-istanbul@9.2.0: - resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==} + /v8-to-istanbul@9.3.0: + resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} engines: {node: '>=10.12.0'} dependencies: '@jridgewell/trace-mapping': 0.3.25 @@ -8111,7 +8037,6 @@ packages: /which@1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} - hasBin: true dependencies: isexe: 2.0.0 dev: true @@ -8119,7 +8044,6 @@ packages: /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} - hasBin: true dependencies: isexe: 2.0.0 @@ -8163,8 +8087,8 @@ packages: signal-exit: 3.0.7 dev: true - /ws@8.17.0: - resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==} + /ws@8.17.1: + resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -8180,7 +8104,7 @@ packages: resolution: {integrity: sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==} hasBin: true dependencies: - sax: 1.3.0 + sax: 1.4.1 dev: false /xml-name-validator@5.0.0: @@ -8284,7 +8208,6 @@ packages: /z-schema@5.0.5: resolution: {integrity: sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==} engines: {node: '>=8.0.0'} - hasBin: true dependencies: lodash.get: 4.4.2 lodash.isequal: 4.5.0 @@ -8301,33 +8224,34 @@ packages: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} dev: false - github.com/theopensystemslab/planx-core/550634a: - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/550634a} + github.com/theopensystemslab/planx-core/6c2cc59: + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/6c2cc59} name: '@opensystemslab/planx-core' version: 1.0.0 + prepare: true requiresBuild: true dependencies: '@emotion/react': 11.11.4(react@18.3.1) '@emotion/styled': 11.11.5(@emotion/react@11.11.4)(react@18.3.1) - '@mui/material': 5.15.18(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react-dom@18.3.1)(react@18.3.1) - '@types/geojson': 7946.0.14 - ajv: 8.13.0 - ajv-formats: 2.1.1(ajv@8.13.0) + '@formatjs/intl-listformat': 7.5.7 + '@mui/material': 5.15.21(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react-dom@18.3.1)(react@18.3.1) + ajv: 8.16.0 + ajv-formats: 2.1.1(ajv@8.16.0) cheerio: 1.0.0-rc.12 copyfiles: 2.4.1 docx: 8.5.0 eslint: 8.57.0 fast-xml-parser: 4.4.0 - graphql: 16.8.1 - graphql-request: 6.1.0(graphql@16.8.1) - json-schema-to-typescript: 14.0.4 + graphql: 16.9.0 + graphql-request: 6.1.0(graphql@16.9.0) + json-schema-to-typescript: 14.1.0 lodash: 4.17.21 - marked: 12.0.2 - prettier: 3.2.5 + marked: 13.0.1 + prettier: 3.3.2 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - type-fest: 4.18.2 - uuid: 9.0.1 + type-fest: 4.21.0 + uuid: 10.0.0 zod: 3.23.8 transitivePeerDependencies: - '@types/react' diff --git a/api.planx.uk/tests/mocks/inviteToPayData.ts b/api.planx.uk/tests/mocks/inviteToPayData.ts index 3393578236..6f0ad73dcf 100644 --- a/api.planx.uk/tests/mocks/inviteToPayData.ts +++ b/api.planx.uk/tests/mocks/inviteToPayData.ts @@ -50,6 +50,7 @@ export const validSession: Session = { flow: { id: "741a2372-b0b4-4f30-98a8-7c98c6464954", slug: "apply-for-a-lawful-development-certificate", + name: "Apply for a Lawful Development Certificate", }, }; @@ -77,11 +78,12 @@ export const validPaymentRequest = { email: "the-agent@opensystemslab.io", flow: { slug: "apply-for-a-lawful-development-certificate", + name: "Apply for a Lawful Development Certificate", team: { name: "Buckinghamshire", slug: "buckinghamshire", domain: "planningservices.buckinghamshire.gov.uk", - notifyPersonalisation: { + settings: { helpEmail: "help@council.gov.uk", helpPhone: "123", helpOpeningHours: "9a-5p", @@ -184,7 +186,7 @@ export const flowWithInviteToPay: Flow["data"] = { ChecklistOptionTwo: { data: { text: "Build new", - val: "build", + val: "new", }, type: 200, }, diff --git a/api.planx.uk/tests/mocks/inviteToPayMocks.ts b/api.planx.uk/tests/mocks/inviteToPayMocks.ts index ada75b529c..c8d073a825 100644 --- a/api.planx.uk/tests/mocks/inviteToPayMocks.ts +++ b/api.planx.uk/tests/mocks/inviteToPayMocks.ts @@ -19,6 +19,7 @@ export const validSessionQueryMock = { flow: { id: validSession.flow.id, slug: validSession.flow.slug, + name: validSession.flow.name, }, }, }, @@ -37,6 +38,7 @@ export const detailedValidSessionQueryMock = { flow: { id: validSession.flow.id, slug: validSession.flow.slug, + name: validSession.flow.name, }, }, }, diff --git a/api.planx.uk/tests/mocks/saveAndReturnMocks.ts b/api.planx.uk/tests/mocks/saveAndReturnMocks.ts index d1361d3760..0fcdc37285 100644 --- a/api.planx.uk/tests/mocks/saveAndReturnMocks.ts +++ b/api.planx.uk/tests/mocks/saveAndReturnMocks.ts @@ -1,21 +1,23 @@ 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", slug: "slug", + name: "Flow Name", team_id: mockTeam.id, data: { _root: { @@ -63,6 +65,7 @@ export const mockLowcalSession: LowCalSession = { }, flow: { slug: "apply-for-a-lawful-development-certificate", + name: "Apply for a Lawful Development Certificate", team: mockTeam, }, flow_id: mockFlow.id, diff --git a/api.planx.uk/types.ts b/api.planx.uk/types.ts index a5d5c2e5da..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 @@ -17,6 +17,7 @@ export interface Node { export interface Flow { id: string; slug: string; + name: string; data: { [key: string]: Node; }; @@ -48,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; } @@ -85,6 +72,7 @@ export interface LowCalSession { has_user_saved: boolean; flow: { slug: string; + name: string; team: Team; }; lockedAt?: string; diff --git a/doc/how-to/how-to-add-a-list-component-schema.md b/doc/how-to/how-to-add-a-list-component-schema.md new file mode 100644 index 0000000000..fc1b712f72 --- /dev/null +++ b/doc/how-to/how-to-add-a-list-component-schema.md @@ -0,0 +1,75 @@ +# How to add schemas to the List component + +## Context +The List component allows us to ask many questions on the same page, and for the user to add many responses or items to each prompt - replacing the complex & dense tables for topics like residential units found in paper application forms. + +In order to support Minor Planning Permission service development quickly, we decided that the first iterations of the List component would read from controlled schemas maintained in code, rather than allow for fully customisable, generic schemas to be written in the Editor. + +The ideal maintainers of these schemas are still the services team though, rather than developers. This doc details the process for adding new schemas or editing existing ones. + +## Process +1. **GitHub** - Navigate to `editor.planx.uk/src/@planx/components/List/schemas`. Open an existing file, or add a `.ts` file directly to this folder or a subfolder within it. Folder organisation is flexible. + +2. **GitHub** - In the `.ts` file, ensure the schema has this basic structure: +```ts +import { Schema } from "@planx/components/List/model"; + +export const YourSchemasName: Schema = { + type: "Title (singular if no max, plural if max = 1)", + fields: [ + // List of questions to ask, see possible field types below + ], + min: 1, + max: 10, // optional +} as const; +``` + +The fields of the schema can be one of 3 types: `question`, `text` or `number`. Questions will display as radio buttons when there are two options, and as select dropdowns when there are more than 2 options. + +This is the possible shape of each varity of field: +```ts +{ + type: "question", + required: true, // optional + data: { + title: "Are you planting a tree?", + fn: "passportKey", // note that dot-separation is not supported yet + options: [ + // id is internal ref, text is displayed to user, and val (optional) is recorded in passport if provided + { id: "yes", data: { text: "Yes", val: "true" } }, + { id: "no", data: { text: "No", val: "false" } }, + ], + }, +}, +{ + type: "text", + required: true, + data: { + title: "What type of tree are you planting?", + fn: "passportKey", + type: "short", // must be one of: "short", "long", "extralong", "phone", "email" + }, +}, +{ + type: "number", + required: true, + data: { + title: "How tall is the tree you are planting?", + fn: "passportKey", + units: "m", // optional + allowNegatives: false // optional + }, +}, +``` + +3. **GitHub** - When your schema is finalised, you'll want to make it selectable from within the Editor modal. Add it to the `SCHEMAS` list in `editor.planx.uk/src/@planx/components/List/Editor.tsx` to do so. + +4. **Editor** - "Update" or delete/recreate your List component to reference the new schema + +## Good-to-knows & special cases + +- When a schema sets `max: 1`, we'll hide the "+ Add another" button and index number from the title of the card. This allows the List component to essentially function like a single "Page" of questions, rather than many responses to the same prompt + +- When your schema includes a field that sets `fn: identicalUnits`, we'll automatically sum the total number of _units_ and add it to the passport as `{listFn}.total.units` + +- When your schema includes a field that sets `fn: identicalUnits` _and_ `fn: development`, we'll automatically sum all units _by their development type_. These passport variables will look like `{listFn}.total.units.{developmentType}`. Planx's Calculate component/MathJS cannot handle list iteration and grouping, so this exposes necessary complex sums that can then be further processed in the flow using Calculate later diff --git a/e2e/package.json b/e2e/package.json index c5888413e4..5bdc4466f5 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -20,6 +20,7 @@ "prettier -w ./tests" ] }, + "packageManager": "pnpm@8.6.6", "devDependencies": { "@types/node": "18.16.1", "@typescript-eslint/eslint-plugin": "^5.62.0", @@ -27,7 +28,7 @@ "eslint": "^8.57.0", "husky": "^8.0.3", "lint-staged": "^15.2.0", - "prettier": "^3.2.4", - "typescript": "^5.4.3" + "prettier": "^3.3.2", + "typescript": "^5.5.3" } } diff --git a/e2e/pnpm-lock.yaml b/e2e/pnpm-lock.yaml index ade62712c7..59aea1f411 100644 --- a/e2e/pnpm-lock.yaml +++ b/e2e/pnpm-lock.yaml @@ -10,10 +10,10 @@ devDependencies: version: 18.16.1 '@typescript-eslint/eslint-plugin': specifier: ^5.62.0 - version: 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.4.3) + version: 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.5.3) '@typescript-eslint/parser': specifier: ^5.62.0 - version: 5.62.0(eslint@8.57.0)(typescript@5.4.3) + version: 5.62.0(eslint@8.57.0)(typescript@5.5.3) eslint: specifier: ^8.57.0 version: 8.57.0 @@ -24,11 +24,11 @@ devDependencies: specifier: ^15.2.0 version: 15.2.0 prettier: - specifier: ^3.2.4 - version: 3.2.4 + specifier: ^3.3.2 + version: 3.3.2 typescript: - specifier: ^5.4.3 - version: 5.4.3 + specifier: ^5.5.3 + version: 5.5.3 packages: @@ -122,7 +122,7 @@ packages: resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} dev: true - /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.4.3): + /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.5.3): resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -134,23 +134,23 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.3) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.5.3) '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.0)(typescript@5.4.3) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.3) + '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.0)(typescript@5.5.3) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.5.3) debug: 4.3.4 eslint: 8.57.0 graphemer: 1.4.0 ignore: 5.3.1 natural-compare-lite: 1.4.0 semver: 7.6.0 - tsutils: 3.21.0(typescript@5.4.3) - typescript: 5.4.3 + tsutils: 3.21.0(typescript@5.5.3) + typescript: 5.5.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.4.3): + /@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.5.3): resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -162,10 +162,10 @@ packages: dependencies: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.3) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.3) debug: 4.3.4 eslint: 8.57.0 - typescript: 5.4.3 + typescript: 5.5.3 transitivePeerDependencies: - supports-color dev: true @@ -178,7 +178,7 @@ packages: '@typescript-eslint/visitor-keys': 5.62.0 dev: true - /@typescript-eslint/type-utils@5.62.0(eslint@8.57.0)(typescript@5.4.3): + /@typescript-eslint/type-utils@5.62.0(eslint@8.57.0)(typescript@5.5.3): resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -188,12 +188,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.3) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.3) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.3) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.5.3) debug: 4.3.4 eslint: 8.57.0 - tsutils: 3.21.0(typescript@5.4.3) - typescript: 5.4.3 + tsutils: 3.21.0(typescript@5.5.3) + typescript: 5.5.3 transitivePeerDependencies: - supports-color dev: true @@ -203,7 +203,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/typescript-estree@5.62.0(typescript@5.4.3): + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.5.3): resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -218,13 +218,13 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.6.0 - tsutils: 3.21.0(typescript@5.4.3) - typescript: 5.4.3 + tsutils: 3.21.0(typescript@5.5.3) + typescript: 5.5.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.4.3): + /@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.5.3): resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -235,7 +235,7 @@ packages: '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.3) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.3) eslint: 8.57.0 eslint-scope: 5.1.1 semver: 7.6.0 @@ -326,11 +326,11 @@ packages: concat-map: 0.0.1 dev: true - /braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + /braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} dependencies: - fill-range: 7.0.1 + fill-range: 7.1.1 dev: true /callsites@3.1.0: @@ -599,8 +599,8 @@ packages: flat-cache: 3.2.0 dev: true - /fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + /fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 @@ -888,7 +888,7 @@ packages: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} dependencies: - braces: 3.0.2 + braces: 3.0.3 picomatch: 2.3.1 dev: true @@ -1021,8 +1021,8 @@ packages: engines: {node: '>= 0.8.0'} dev: true - /prettier@3.2.4: - resolution: {integrity: sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ==} + /prettier@3.3.2: + resolution: {integrity: sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==} engines: {node: '>=14'} hasBin: true dev: true @@ -1181,14 +1181,14 @@ packages: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: true - /tsutils@3.21.0(typescript@5.4.3): + /tsutils@3.21.0(typescript@5.5.3): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 - typescript: 5.4.3 + typescript: 5.5.3 dev: true /type-check@0.4.0: @@ -1203,8 +1203,8 @@ packages: engines: {node: '>=10'} dev: true - /typescript@5.4.3: - resolution: {integrity: sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==} + /typescript@5.5.3: + resolution: {integrity: sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==} engines: {node: '>=14.17'} hasBin: true dev: true diff --git a/e2e/tests/api-driven/package.json b/e2e/tests/api-driven/package.json index 5421a8e761..949cf29c56 100644 --- a/e2e/tests/api-driven/package.json +++ b/e2e/tests/api-driven/package.json @@ -4,9 +4,10 @@ "test": "cucumber-js --tags 'not @regression'", "test:regression": "cucumber-js" }, + "packageManager": "pnpm@8.6.6", "dependencies": { "@cucumber/cucumber": "^9.3.0", - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#5710d52", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#6c2cc59", "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 3005fa893d..9db04d5c9a 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#5710d52 - version: github.com/theopensystemslab/planx-core/5710d52 + specifier: git+https://github.com/theopensystemslab/planx-core#6c2cc59 + version: github.com/theopensystemslab/planx-core/6c2cc59 axios: specifier: ^1.6.8 version: 1.6.8 @@ -49,8 +49,8 @@ devDependencies: packages: - /@apidevtools/json-schema-ref-parser@11.6.2: - resolution: {integrity: sha512-ENUdLLT04aDbbHCRwfKf8gR67AhV0CdFrOAtk+FcakBAgaq6ds3HLK9X0BCyiFUz8pK9uP+k6YZyJaGG7Mt7vQ==} + /@apidevtools/json-schema-ref-parser@11.6.4: + resolution: {integrity: sha512-9K6xOqeevacvweLGik6LnZCb1fBtCOSIWQs8d096XGeqoLKC33UVMGz9+77Gw44KvbH4pKcQPWo4ZpxkXYj05w==} engines: {node: '>= 16'} dependencies: '@jsdevtools/ono': 7.1.3 @@ -58,54 +58,131 @@ packages: js-yaml: 4.1.0 dev: false - /@babel/code-frame@7.24.2: - resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} + /@babel/code-frame@7.24.7: + resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/highlight': 7.24.5 + '@babel/highlight': 7.24.7 picocolors: 1.0.1 dev: false - /@babel/helper-module-imports@7.24.3: - resolution: {integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==} + /@babel/generator@7.24.7: + resolution: {integrity: sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.24.7 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 2.5.2 dev: false - /@babel/helper-string-parser@7.24.1: - resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} + /@babel/helper-environment-visitor@7.24.7: + resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.7 + dev: false + + /@babel/helper-function-name@7.24.7: + resolution: {integrity: sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.24.7 + '@babel/types': 7.24.7 + dev: false + + /@babel/helper-hoist-variables@7.24.7: + resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.7 + dev: false + + /@babel/helper-module-imports@7.24.7: + resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/traverse': 7.24.7 + '@babel/types': 7.24.7 + transitivePeerDependencies: + - supports-color dev: false - /@babel/helper-validator-identifier@7.24.5: - resolution: {integrity: sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==} + /@babel/helper-split-export-declaration@7.24.7: + resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.7 dev: false - /@babel/highlight@7.24.5: - resolution: {integrity: sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==} + /@babel/helper-string-parser@7.24.7: + resolution: {integrity: sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==} + engines: {node: '>=6.9.0'} + dev: false + + /@babel/helper-validator-identifier@7.24.7: + resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} + engines: {node: '>=6.9.0'} + dev: false + + /@babel/highlight@7.24.7: + resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.24.5 + '@babel/helper-validator-identifier': 7.24.7 chalk: 2.4.2 js-tokens: 4.0.0 picocolors: 1.0.1 dev: false - /@babel/runtime@7.24.5: - resolution: {integrity: sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==} + /@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 + dev: false + + /@babel/runtime@7.24.7: + resolution: {integrity: sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.1 dev: false - /@babel/types@7.24.5: - resolution: {integrity: sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==} + /@babel/template@7.24.7: + resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.24.1 - '@babel/helper-validator-identifier': 7.24.5 + '@babel/code-frame': 7.24.7 + '@babel/parser': 7.24.7 + '@babel/types': 7.24.7 + dev: false + + /@babel/traverse@7.24.7: + resolution: {integrity: sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.24.7 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-function-name': 7.24.7 + '@babel/helper-hoist-variables': 7.24.7 + '@babel/helper-split-export-declaration': 7.24.7 + '@babel/parser': 7.24.7 + '@babel/types': 7.24.7 + debug: 4.3.5(supports-color@8.1.1) + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/types@7.24.7: + resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.24.7 + '@babel/helper-validator-identifier': 7.24.7 to-fast-properties: 2.0.0 dev: false @@ -136,7 +213,6 @@ packages: /@cucumber/cucumber@9.3.0: resolution: {integrity: sha512-8QvcQVJzRra3pZpV0dITPcFuT2yYH0C1fEgzDlqe6+Zpz9k3z+ov9xUWEYgKp0VMx65JxNKAYYYWmG6cWOiYQQ==} engines: {node: 14 || 16 || >=18} - hasBin: true dependencies: '@cucumber/ci-environment': 9.2.0 '@cucumber/cucumber-expressions': 16.1.2 @@ -152,7 +228,7 @@ packages: chalk: 4.1.2 cli-table3: 0.6.3 commander: 10.0.1 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.5(supports-color@8.1.1) error-stack-parser: 2.1.4 figures: 3.2.0 glob: 7.2.3 @@ -176,7 +252,7 @@ packages: util-arity: 1.1.0 verror: 1.10.1 xmlbuilder: 15.1.1 - yaml: 2.4.2 + yaml: 2.4.5 yup: 0.32.11 dev: false @@ -197,7 +273,6 @@ packages: /@cucumber/gherkin-utils@8.0.2: resolution: {integrity: sha512-aQlziN3r3cTwprEDbLEcFoMRQajb9DTOu2OZZp5xkuNz6bjSTowSY90lHUD2pWT7jhEEckZRIREnk7MAwC2d1A==} - hasBin: true dependencies: '@cucumber/gherkin': 25.0.2 '@cucumber/messages': 19.1.4 @@ -259,8 +334,8 @@ packages: /@emotion/babel-plugin@11.11.0: resolution: {integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==} dependencies: - '@babel/helper-module-imports': 7.24.3 - '@babel/runtime': 7.24.5 + '@babel/helper-module-imports': 7.24.7 + '@babel/runtime': 7.24.7 '@emotion/hash': 0.9.1 '@emotion/memoize': 0.8.1 '@emotion/serialize': 1.1.4 @@ -270,6 +345,8 @@ packages: find-root: 1.1.0 source-map: 0.5.7 stylis: 4.2.0 + transitivePeerDependencies: + - supports-color dev: false /@emotion/cache@11.11.0: @@ -305,7 +382,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@emotion/babel-plugin': 11.11.0 '@emotion/cache': 11.11.0 '@emotion/serialize': 1.1.4 @@ -314,6 +391,8 @@ packages: '@emotion/weak-memoize': 0.3.1 hoist-non-react-statics: 3.3.2 react: 18.3.1 + transitivePeerDependencies: + - supports-color dev: false /@emotion/serialize@1.1.4: @@ -340,7 +419,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@emotion/babel-plugin': 11.11.0 '@emotion/is-prop-valid': 1.2.2 '@emotion/react': 11.11.4(react@18.3.1) @@ -348,6 +427,8 @@ packages: '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.3.1) '@emotion/utils': 1.2.1 react: 18.3.1 + transitivePeerDependencies: + - supports-color dev: false /@emotion/unitless@0.8.1: @@ -380,8 +461,8 @@ packages: eslint-visitor-keys: 3.4.3 dev: false - /@eslint-community/regexpp@4.10.0: - resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} + /@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} dev: false @@ -390,7 +471,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.5(supports-color@8.1.1) espree: 9.6.1 globals: 13.24.0 ignore: 5.3.1 @@ -407,48 +488,70 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: false - /@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 dev: false - /@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 dev: false - /@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==} dev: false - /@graphql-typed-document-node/core@3.2.0(graphql@16.8.1): + /@formatjs/ecma402-abstract@2.0.0: + resolution: {integrity: sha512-rRqXOqdFmk7RYvj4khklyqzcfQl9vEL/usogncBHRZfZBDOwMGuSRNFl02fu5KGHXdbinju+YXyuR+Nk8xlr/g==} + dependencies: + '@formatjs/intl-localematcher': 0.5.4 + tslib: 2.6.3 + dev: false + + /@formatjs/intl-listformat@7.5.7: + resolution: {integrity: sha512-MG2TSChQJQT9f7Rlv+eXwUFiG24mKSzmF144PLb8m8OixyXqn4+YWU+5wZracZGCgVTVmx8viCf7IH3QXoiB2g==} + dependencies: + '@formatjs/ecma402-abstract': 2.0.0 + '@formatjs/intl-localematcher': 0.5.4 + tslib: 2.6.3 + dev: false + + /@formatjs/intl-localematcher@0.5.4: + resolution: {integrity: sha512-zTwEpWOzZ2CiKcB93BLngUX59hQkuZjT2+SAQEscSm52peDW/getsawMcWF1rGRpMCX6D7nSJA3CzJ8gn13N/g==} + dependencies: + tslib: 2.6.3 + dev: false + + /@graphql-typed-document-node/core@3.2.0(graphql@16.9.0): resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - graphql: 16.8.1 + graphql: 16.9.0 dev: false /@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.4(supports-color@8.1.1) + debug: 4.3.5(supports-color@8.1.1) minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -461,6 +564,7 @@ packages: /@humanwhocodes/object-schema@2.0.3: resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + deprecated: Use @eslint/object-schema instead dev: false /@isaacs/cliui@8.0.2: @@ -475,14 +579,33 @@ packages: wrap-ansi-cjs: /wrap-ansi@7.0.0 dev: false + /@jridgewell/gen-mapping@0.3.5: + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.25 + dev: false + /@jridgewell/resolve-uri@3.1.2: resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - dev: true + + /@jridgewell/set-array@1.2.1: + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + dev: false /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - dev: true + + /@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 + dev: false /@jridgewell/trace-mapping@0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} @@ -506,10 +629,10 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 - '@floating-ui/react-dom': 2.1.0(react-dom@18.3.1)(react@18.3.1) + '@babel/runtime': 7.24.7 + '@floating-ui/react-dom': 2.1.1(react-dom@18.3.1)(react@18.3.1) '@mui/types': 7.2.14 - '@mui/utils': 5.15.14(react@18.3.1) + '@mui/utils': 5.15.20(react@18.3.1) '@popperjs/core': 2.11.8 clsx: 2.1.1 prop-types: 15.8.1 @@ -517,12 +640,12 @@ packages: react-dom: 18.3.1(react@18.3.1) dev: false - /@mui/core-downloads-tracker@5.15.18: - resolution: {integrity: sha512-/9pVk+Al8qxAjwFUADv4BRZgMpZM4m5E+2Q/20qhVPuIJWqKp4Ie4tGExac6zu93rgPTYVQGgu+1vjiT0E+cEw==} + /@mui/core-downloads-tracker@5.15.21: + resolution: {integrity: sha512-dp9lXBaJZzJYeJfQY3Ow4Rb49QaCEdkl2KKYscdQHQm6bMJ+l4XPY3Cd9PCeeJTsHPIDJ60lzXbeRgs6sx/rpw==} dev: false - /@mui/material@5.15.18(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-n+/dsiqux74fFfcRUJjok+ieNQ7+BEk6/OwX9cLcLvriZrZb+/7Y8+Fd2HlUUbn5N0CDurgAHm0VH1DqyJ9HAw==} + /@mui/material@5.15.21(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-nTyCcgduKwHqiuQ/B03EQUa+utSMzn2sQp0QAibsnYe4tvc3zkMbO0amKpl48vhABIY3IvT6w9615BFIgMt0YA==} engines: {node: '>=12.0.0'} peerDependencies: '@emotion/react': ^11.5.0 @@ -538,14 +661,14 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@emotion/react': 11.11.4(react@18.3.1) '@emotion/styled': 11.11.5(@emotion/react@11.11.4)(react@18.3.1) '@mui/base': 5.0.0-beta.40(react-dom@18.3.1)(react@18.3.1) - '@mui/core-downloads-tracker': 5.15.18 - '@mui/system': 5.15.15(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1) + '@mui/core-downloads-tracker': 5.15.21 + '@mui/system': 5.15.20(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1) '@mui/types': 7.2.14 - '@mui/utils': 5.15.14(react@18.3.1) + '@mui/utils': 5.15.20(react@18.3.1) '@types/react-transition-group': 4.4.10 clsx: 2.1.1 csstype: 3.1.3 @@ -556,8 +679,8 @@ packages: react-transition-group: 4.4.5(react-dom@18.3.1)(react@18.3.1) dev: false - /@mui/private-theming@5.15.14(react@18.3.1): - resolution: {integrity: sha512-UH0EiZckOWcxiXLX3Jbb0K7rC8mxTr9L9l6QhOZxYc4r8FHUkefltV9VDGLrzCaWh30SQiJvAEd7djX3XXY6Xw==} + /@mui/private-theming@5.15.20(react@18.3.1): + resolution: {integrity: sha512-BK8F94AIqSrnaPYXf2KAOjGZJgWfvqAVQ2gVR3EryvQFtuBnG6RwodxrCvd3B48VuMy6Wsk897+lQMUxJyk+6g==} engines: {node: '>=12.0.0'} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 @@ -566,8 +689,8 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 - '@mui/utils': 5.15.14(react@18.3.1) + '@babel/runtime': 7.24.7 + '@mui/utils': 5.15.20(react@18.3.1) prop-types: 15.8.1 react: 18.3.1 dev: false @@ -585,7 +708,7 @@ packages: '@emotion/styled': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@emotion/cache': 11.11.0 '@emotion/react': 11.11.4(react@18.3.1) '@emotion/styled': 11.11.5(@emotion/react@11.11.4)(react@18.3.1) @@ -594,8 +717,8 @@ packages: react: 18.3.1 dev: false - /@mui/system@5.15.15(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1): - resolution: {integrity: sha512-aulox6N1dnu5PABsfxVGOZffDVmlxPOVgj56HrUnJE8MCSh8lOvvkd47cebIVQQYAjpwieXQXiDPj5pwM40jTQ==} + /@mui/system@5.15.20(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1): + resolution: {integrity: sha512-LoMq4IlAAhxzL2VNUDBTQxAb4chnBe8JvRINVNDiMtHE2PiPOoHlhOPutSxEbaL5mkECPVWSv6p8JEV+uykwIA==} engines: {node: '>=12.0.0'} peerDependencies: '@emotion/react': ^11.5.0 @@ -610,13 +733,13 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@emotion/react': 11.11.4(react@18.3.1) '@emotion/styled': 11.11.5(@emotion/react@11.11.4)(react@18.3.1) - '@mui/private-theming': 5.15.14(react@18.3.1) + '@mui/private-theming': 5.15.20(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 - '@mui/utils': 5.15.14(react@18.3.1) + '@mui/utils': 5.15.20(react@18.3.1) clsx: 2.1.1 csstype: 3.1.3 prop-types: 15.8.1 @@ -632,8 +755,8 @@ packages: optional: true dev: false - /@mui/utils@5.15.14(react@18.3.1): - resolution: {integrity: sha512-0lF/7Hh/ezDv5X7Pry6enMsbYyGKjADzvHyo3Qrc/SSlTsQ1VkbDMbH0m2t3OR5iIVLwMoxwM7yGd+6FCMtTFA==} + /@mui/utils@5.15.20(react@18.3.1): + resolution: {integrity: sha512-mAbYx0sovrnpAu1zHc3MDIhPqL8RPVC5W5xcO1b7PiSCJPtckIZmBkp8hefamAvUiAV8gpfMOM6Zb+eSisbI2A==} engines: {node: '>=12.0.0'} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 @@ -642,7 +765,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@types/prop-types': 15.7.12 prop-types: 15.8.1 react: 18.3.1 @@ -702,10 +825,6 @@ packages: resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} dev: true - /@types/geojson@7946.0.14: - resolution: {integrity: sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg==} - dev: false - /@types/json-schema@7.0.15: resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} dev: false @@ -713,18 +832,18 @@ packages: /@types/lodash.zipobject@4.1.7: resolution: {integrity: sha512-bsFXX/ac3fFgW3l/yxwRx7NvTXryi4bMaNcsbSK2MJnTPn0nHvs7NdwfHtvOkNKxSQ0dXgnNwI5oEGLoMA1mug==} dependencies: - '@types/lodash': 4.17.4 + '@types/lodash': 4.17.6 dev: true - /@types/lodash@4.17.4: - resolution: {integrity: sha512-wYCP26ZLxaT3R39kiN2+HcJ4kTd3U1waI/cY7ivWYqFP6pW3ZNpvi6Wd6PHZx7T/t8z0vlkXMg3QYLa7DZ/IJQ==} + /@types/lodash@4.17.6: + resolution: {integrity: sha512-OpXEVoCKSS3lQqjx9GGGOapBeuW5eUboYHRlHP9urXPX25IKZ6AnP5ZRxtVf63iieUbsHxLn8NQ5Nlftc6yzAA==} /@types/node@18.16.1: resolution: {integrity: sha512-DZxSZWXxFfOlx7k7Rv4LAyiMroaxa3Ly/7OOzZO8cBNho0YzAi4qlbrx8W27JGqG57IgR/6J7r+nOJWw6kcvZA==} dev: true - /@types/node@20.12.12: - resolution: {integrity: sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==} + /@types/node@20.14.9: + resolution: {integrity: sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==} dependencies: undici-types: 5.26.5 dev: false @@ -762,25 +881,26 @@ packages: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: false - /acorn-jsx@5.3.2(acorn@8.11.3): + /acorn-jsx@5.3.2(acorn@8.12.0): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.11.3 + acorn: 8.12.0 dev: false - /acorn-walk@8.3.2: - resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} + /acorn-walk@8.3.3: + resolution: {integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==} engines: {node: '>=0.4.0'} + dependencies: + acorn: 8.12.0 dev: true - /acorn@8.11.3: - resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + /acorn@8.12.0: + resolution: {integrity: sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==} engines: {node: '>=0.4.0'} - hasBin: true - /ajv-formats@2.1.1(ajv@8.13.0): + /ajv-formats@2.1.1(ajv@8.16.0): resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: ajv: ^8.0.0 @@ -788,7 +908,7 @@ packages: ajv: optional: true dependencies: - ajv: 8.13.0 + ajv: 8.16.0 dev: false /ajv@6.12.6: @@ -800,8 +920,8 @@ packages: uri-js: 4.4.1 dev: false - /ajv@8.13.0: - resolution: {integrity: sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==} + /ajv@8.16.0: + resolution: {integrity: sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==} dependencies: fast-deep-equal: 3.1.3 json-schema-traverse: 1.0.0 @@ -886,7 +1006,7 @@ packages: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} engines: {node: '>=10', npm: '>=6'} dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 cosmiconfig: 7.1.0 resolve: 1.22.8 dev: false @@ -929,7 +1049,7 @@ packages: resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} dependencies: no-case: 3.0.4 - tslib: 2.6.2 + tslib: 2.6.3 upper-case-first: 2.0.2 dev: false @@ -985,8 +1105,8 @@ packages: d: 1.0.2 es5-ext: 0.10.64 es6-iterator: 2.0.3 - memoizee: 0.4.16 - timers-ext: 0.1.7 + memoizee: 0.4.17 + timers-ext: 0.1.8 dev: false /cli-table3@0.6.3: @@ -1139,7 +1259,7 @@ packages: engines: {node: '>=0.12'} dependencies: es5-ext: 0.10.64 - type: 2.7.2 + type: 2.7.3 dev: false /data-uri-to-buffer@4.0.1: @@ -1147,8 +1267,8 @@ packages: engines: {node: '>= 12'} dev: false - /debug@4.3.4(supports-color@8.1.1): - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + /debug@4.3.5(supports-color@8.1.1): + resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -1184,7 +1304,7 @@ packages: resolution: {integrity: sha512-4SbcbedPXTciySXiSnNNLuJXpvxFe5nqivbiEHXyL8P/w0wx2uW7YXNjnYgjW0e2e6vy+L/tMISU/oAiXCl57Q==} engines: {node: '>=10'} dependencies: - '@types/node': 20.12.12 + '@types/node': 20.14.9 jszip: 3.10.1 nanoid: 5.0.7 xml: 1.0.1 @@ -1194,7 +1314,7 @@ packages: /dom-helpers@5.2.1: resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 csstype: 3.1.3 dev: false @@ -1340,7 +1460,7 @@ packages: hasBin: true dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@eslint-community/regexpp': 4.10.0 + '@eslint-community/regexpp': 4.11.0 '@eslint/eslintrc': 2.1.4 '@eslint/js': 8.57.0 '@humanwhocodes/config-array': 0.11.14 @@ -1350,7 +1470,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.5(supports-color@8.1.1) doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -1388,15 +1508,15 @@ packages: d: 1.0.2 es5-ext: 0.10.64 event-emitter: 0.3.5 - type: 2.7.2 + type: 2.7.3 dev: false /espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.11.3 - acorn-jsx: 5.3.2(acorn@8.11.3) + acorn: 8.12.0 + acorn-jsx: 5.3.2(acorn@8.12.0) eslint-visitor-keys: 3.4.3 dev: false @@ -1434,7 +1554,7 @@ packages: /ext@1.7.0: resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} dependencies: - type: 2.7.2 + type: 2.7.3 dev: false /extsprintf@1.4.1: @@ -1524,8 +1644,8 @@ packages: optional: true dev: false - /foreground-child@3.1.1: - resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} + /foreground-child@3.2.1: + resolution: {integrity: sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==} engines: {node: '>=14'} dependencies: cross-spawn: 7.0.3 @@ -1568,15 +1688,16 @@ packages: is-glob: 4.0.3 dev: false - /glob@10.4.1: - resolution: {integrity: sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==} + /glob@10.4.2: + resolution: {integrity: sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==} engines: {node: '>=16 || 14 >=14.18'} hasBin: true dependencies: - foreground-child: 3.1.1 - jackspeak: 3.1.2 - minimatch: 9.0.4 + foreground-child: 3.2.1 + jackspeak: 3.4.0 + minimatch: 9.0.5 minipass: 7.1.2 + package-json-from-dist: 1.0.0 path-scurry: 1.11.1 dev: false @@ -1598,6 +1719,11 @@ packages: ini: 2.0.0 dev: false + /globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + dev: false + /globals@13.24.0: resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} engines: {node: '>=8'} @@ -1609,14 +1735,14 @@ packages: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} dev: false - /graphql-request@6.1.0(graphql@16.8.1): + /graphql-request@6.1.0(graphql@16.9.0): resolution: {integrity: sha512-p+XPfS4q7aIpKVcgmnZKhMNqhltk20hfXtkaIkTfjjmiKMJ5xrt5c743cL03y/K7y1rg3WrIC49xGiEQ4mxdNw==} peerDependencies: graphql: 14 - 16 dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.9.0) cross-fetch: 3.1.8 - graphql: 16.8.1 + graphql: 16.9.0 transitivePeerDependencies: - encoding dev: false @@ -1628,7 +1754,7 @@ packages: graphql: ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: graphql: 16.8.1 - tslib: 2.6.2 + tslib: 2.6.3 dev: false /graphql@16.8.1: @@ -1636,6 +1762,11 @@ packages: engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} dev: false + /graphql@16.9.0: + resolution: {integrity: sha512-GGTKBX4SD7Wdb8mqeDLni2oaRGYQWjWHGKPQ24ZMnUtKfcsVoiv4uX8+LJr1K6U5VW2Lu1BwJnj7uiori0YtRw==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + dev: false + /has-ansi@4.0.1: resolution: {integrity: sha512-Qr4RtTm30xvEdqUXbSBVWDu+PrTokJOwe/FU+VdfJPk+MXAPoeOzKpRyrDTnZIJwAkQ4oBLTU53nu0HrkF/Z2A==} engines: {node: '>=8'} @@ -1704,7 +1835,6 @@ packages: /inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. dependencies: once: 1.4.0 wrappy: 1.0.2 @@ -1723,8 +1853,9 @@ packages: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} dev: false - /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 dev: false @@ -1780,8 +1911,8 @@ packages: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: false - /jackspeak@3.1.2: - resolution: {integrity: sha512-kWmLKn2tRtfYMF/BakihVVRzBKOxz4gJMiL2Rj91WnAB5TPZumSH99R/Yf1qE1u4uRimvCSJfm6hnxohXeEXjQ==} + /jackspeak@3.4.0: + resolution: {integrity: sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==} engines: {node: '>=14'} dependencies: '@isaacs/cliui': 8.0.2 @@ -1800,6 +1931,12 @@ packages: argparse: 2.0.1 dev: false + /jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + dev: false + /json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} dev: false @@ -1808,24 +1945,23 @@ packages: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} dev: false - /json-schema-to-typescript@14.0.4: - resolution: {integrity: sha512-covPOp3hrbD+oEcMvDxP5Rh6xNZj7lOTZkXAeQoDyu1PuEl1A6oRZ3Sy05HN11vXXmdJ6gLh5P3Qz0mgMPTzzw==} + /json-schema-to-typescript@14.1.0: + resolution: {integrity: sha512-VIeAFQkn88gFh26MSHWG4uX7TjK/arTw0NVLMZn6vX1WrSF+P6xu5MyEdovu+9PJ0uiS5gm0wzwQvYW9eSq1uw==} engines: {node: '>=16.0.0'} hasBin: true dependencies: - '@apidevtools/json-schema-ref-parser': 11.6.2 + '@apidevtools/json-schema-ref-parser': 11.6.4 '@types/json-schema': 7.0.15 - '@types/lodash': 4.17.4 + '@types/lodash': 4.17.6 cli-color: 2.0.4 - glob: 10.4.1 + glob: 10.4.2 is-glob: 4.0.3 js-yaml: 4.1.0 lodash: 4.17.21 minimist: 1.2.8 mkdirp: 3.0.1 - mz: 2.7.0 node-fetch: 3.3.2 - prettier: 3.2.5 + prettier: 3.3.2 dev: false /json-schema-traverse@0.4.1: @@ -1975,11 +2111,11 @@ packages: /lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} dependencies: - tslib: 2.6.2 + tslib: 2.6.3 dev: false - /lru-cache@10.2.2: - resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==} + /lru-cache@10.3.0: + resolution: {integrity: sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ==} engines: {node: 14 || >=16.14} dev: false @@ -2005,15 +2141,15 @@ packages: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} dev: true - /marked@12.0.2: - resolution: {integrity: sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q==} + /marked@13.0.1: + resolution: {integrity: sha512-7kBohS6GrZKvCsNXZyVVXSW7/hGBHe49ng99YPkDCckSUrrG7MSFLCexsRxptzOmyW2eT5dySh4Md1V6my52fA==} engines: {node: '>= 18'} hasBin: true dev: false - /memoizee@0.4.16: - resolution: {integrity: sha512-eOxQqGfogqdcQ2jeyLgsTp91bFOdbjaiJ1P0ZeDt1HHT1+ektm2u+raWDytppt8SMZ1fP2sIWlTbZukHhMKhiQ==} - engines: {node: '>=.0.12'} + /memoizee@0.4.17: + resolution: {integrity: sha512-DGqD7Hjpi/1or4F/aYAspXKNm5Yili0QDAFAY4QYvpqpgiY6+1jOfqpmByzjxbWd/T9mChbCArXAbDAsTm5oXA==} + engines: {node: '>=0.12'} dependencies: d: 1.0.2 es5-ext: 0.10.64 @@ -2022,7 +2158,7 @@ packages: is-promise: 2.2.2 lru-queue: 0.1.0 next-tick: 1.1.0 - timers-ext: 0.1.7 + timers-ext: 0.1.8 dev: false /mime-db@1.52.0: @@ -2043,8 +2179,8 @@ packages: brace-expansion: 1.1.11 dev: false - /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 @@ -2068,7 +2204,6 @@ packages: /mkdirp@2.1.6: resolution: {integrity: sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==} engines: {node: '>=10'} - hasBin: true dev: false /mkdirp@3.0.1: @@ -2115,14 +2250,14 @@ packages: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} dependencies: lower-case: 2.0.2 - tslib: 2.6.2 + tslib: 2.6.3 dev: false /nock@13.3.1: resolution: {integrity: sha512-vHnopocZuI93p2ccivFyGuUfzjq2fxNyNurp7816mlT5V5HF4SzXu8lvLrVzBbNqzs+ODooZ6OksuSUNM7Njkw==} engines: {node: '>= 10.13'} dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.5(supports-color@8.1.1) json-stringify-safe: 5.0.1 lodash: 4.17.21 propagate: 2.0.1 @@ -2206,6 +2341,10 @@ packages: p-limit: 3.1.0 dev: false + /package-json-from-dist@1.0.0: + resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} + dev: false + /pad-right@0.2.2: resolution: {integrity: sha512-4cy8M95ioIGolCoMmm2cMntGR1lPLEbOMzOKu8bzjuJP6JpzEMQcDHmh7hHLYGgob+nKe1YHFMaG4V59HQa89g==} engines: {node: '>=0.10.0'} @@ -2228,7 +2367,7 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.24.7 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -2270,7 +2409,7 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} dependencies: - lru-cache: 10.2.2 + lru-cache: 10.3.0 minipass: 7.1.2 dev: false @@ -2288,8 +2427,8 @@ packages: engines: {node: '>= 0.8.0'} dev: false - /prettier@3.2.5: - resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} + /prettier@3.3.2: + resolution: {integrity: sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==} engines: {node: '>=14'} hasBin: true dev: false @@ -2357,7 +2496,7 @@ packages: react: '>=16.6.0' react-dom: '>=16.6.0' dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 @@ -2409,7 +2548,6 @@ packages: /regexp-tree@0.1.27: resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} - hasBin: true dev: false /repeat-string@1.6.1: @@ -2448,7 +2586,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 dev: false @@ -2460,6 +2598,7 @@ packages: /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 @@ -2479,8 +2618,8 @@ packages: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} dev: false - /sax@1.3.0: - resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==} + /sax@1.4.1: + resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} dev: false /scheduler@0.23.2: @@ -2496,7 +2635,6 @@ packages: /semver@7.5.3: resolution: {integrity: sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==} engines: {node: '>=10'} - hasBin: true dependencies: lru-cache: 6.0.0 dev: false @@ -2504,7 +2642,6 @@ packages: /semver@7.6.2: resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} engines: {node: '>=10'} - hasBin: true dev: false /setimmediate@1.0.5: @@ -2659,8 +2796,9 @@ packages: xtend: 4.0.2 dev: false - /timers-ext@0.1.7: - resolution: {integrity: sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==} + /timers-ext@0.1.8: + resolution: {integrity: sha512-wFH7+SEAcKfJpfLPkrgMPvvwnEtj8W4IurvEyrKsDleXnKLCDw71w8jltvfLa8Rm4qQxxT4jmDBYbJG/z7qoww==} + engines: {node: '>=0.12'} dependencies: es5-ext: 0.10.64 next-tick: 1.1.0 @@ -2704,8 +2842,8 @@ packages: '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 '@types/node': 18.16.1 - acorn: 8.11.3 - acorn-walk: 8.3.2 + acorn: 8.12.0 + acorn-walk: 8.3.3 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 @@ -2715,8 +2853,8 @@ packages: yn: 3.1.1 dev: true - /tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + /tslib@2.6.3: + resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} dev: false /type-check@0.4.0: @@ -2731,19 +2869,18 @@ packages: engines: {node: '>=10'} dev: false - /type-fest@4.18.2: - resolution: {integrity: sha512-+suCYpfJLAe4OXS6+PPXjW3urOS4IoP9waSiLuXfLgqZODKw/aWwASvzqE886wA0kQgGy0mIWyhd87VpqIy6Xg==} + /type-fest@4.21.0: + resolution: {integrity: sha512-ADn2w7hVPcK6w1I0uWnM//y1rLXZhzB9mr0a3OirzclKF1Wp6VzevUmzz/NRAWunOT6E8HrnpGY7xOfc6K57fA==} engines: {node: '>=16'} dev: false - /type@2.7.2: - resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==} + /type@2.7.3: + resolution: {integrity: sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==} dev: false /typescript@5.4.3: resolution: {integrity: sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==} engines: {node: '>=14.17'} - hasBin: true dev: true /undici-types@5.26.5: @@ -2758,7 +2895,7 @@ packages: /upper-case-first@2.0.2: resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==} dependencies: - tslib: 2.6.2 + tslib: 2.6.3 dev: false /uri-js@4.4.1: @@ -2775,14 +2912,13 @@ packages: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: false - /uuid@9.0.0: - resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==} + /uuid@10.0.0: + resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} hasBin: true dev: false - /uuid@9.0.1: - resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} - hasBin: true + /uuid@9.0.0: + resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==} dev: false /v8-compile-cache-lib@3.0.1: @@ -2853,7 +2989,7 @@ packages: resolution: {integrity: sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==} hasBin: true dependencies: - sax: 1.3.0 + sax: 1.4.1 dev: false /xml@1.0.1: @@ -2884,10 +3020,9 @@ packages: engines: {node: '>= 6'} dev: false - /yaml@2.4.2: - resolution: {integrity: sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA==} + /yaml@2.4.5: + resolution: {integrity: sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==} engines: {node: '>= 14'} - hasBin: true dev: false /yargs-parser@20.2.9: @@ -2922,8 +3057,8 @@ packages: resolution: {integrity: sha512-Z2Fe1bn+eLstG8DRR6FTavGD+MeAwyfmouhHsIUgaADz8jvFKbO/fXc2trJKZg+5EBjh4gGm3iU/t3onKlXHIg==} engines: {node: '>=10'} dependencies: - '@babel/runtime': 7.24.5 - '@types/lodash': 4.17.4 + '@babel/runtime': 7.24.7 + '@types/lodash': 4.17.6 lodash: 4.17.21 lodash-es: 4.17.21 nanoclone: 0.2.1 @@ -2935,8 +3070,8 @@ packages: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} dev: false - github.com/theopensystemslab/planx-core/5710d52: - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/5710d52} + github.com/theopensystemslab/planx-core/6c2cc59: + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/6c2cc59} name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true @@ -2944,25 +3079,25 @@ packages: dependencies: '@emotion/react': 11.11.4(react@18.3.1) '@emotion/styled': 11.11.5(@emotion/react@11.11.4)(react@18.3.1) - '@mui/material': 5.15.18(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react-dom@18.3.1)(react@18.3.1) - '@types/geojson': 7946.0.14 - ajv: 8.13.0 - ajv-formats: 2.1.1(ajv@8.13.0) + '@formatjs/intl-listformat': 7.5.7 + '@mui/material': 5.15.21(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react-dom@18.3.1)(react@18.3.1) + ajv: 8.16.0 + ajv-formats: 2.1.1(ajv@8.16.0) cheerio: 1.0.0-rc.12 copyfiles: 2.4.1 docx: 8.5.0 eslint: 8.57.0 fast-xml-parser: 4.4.0 - graphql: 16.8.1 - graphql-request: 6.1.0(graphql@16.8.1) - json-schema-to-typescript: 14.0.4 + graphql: 16.9.0 + graphql-request: 6.1.0(graphql@16.9.0) + json-schema-to-typescript: 14.1.0 lodash: 4.17.21 - marked: 12.0.2 - prettier: 3.2.5 + marked: 13.0.1 + prettier: 3.3.2 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - type-fest: 4.18.2 - uuid: 9.0.1 + type-fest: 4.21.0 + uuid: 10.0.0 zod: 3.23.8 transitivePeerDependencies: - '@types/react' diff --git a/e2e/tests/api-driven/src/flowStatusHistory/steps.ts b/e2e/tests/api-driven/src/flowStatusHistory/steps.ts index af93d5a3f0..798c4e9b87 100644 --- a/e2e/tests/api-driven/src/flowStatusHistory/steps.ts +++ b/e2e/tests/api-driven/src/flowStatusHistory/steps.ts @@ -19,7 +19,11 @@ Before("@flow-status-history", async function () { }); Given("a flow exists", async function () { - const flowId = await createFlow({ teamId: this.teamId, slug: "test-flow" }); + const flowId = await createFlow({ + teamId: this.teamId, + slug: "test-flow", + name: "Test Flow", + }); assert.ok(flowId, "flowId is not defined"); diff --git a/e2e/tests/api-driven/src/globalHelpers.ts b/e2e/tests/api-driven/src/globalHelpers.ts index e479549efe..88a0cafcb9 100644 --- a/e2e/tests/api-driven/src/globalHelpers.ts +++ b/e2e/tests/api-driven/src/globalHelpers.ts @@ -9,8 +9,9 @@ export function createTeam( name: "E2E Test Team", slug: "E2E", submissionEmail: TEST_EMAIL, - homepage: "planx.uk", - referenceCode: "ABCD", + settings: { + homepage: "http://www.planx.uk", + }, ...args, }), ); diff --git a/e2e/tests/api-driven/src/invite-to-pay/helpers.ts b/e2e/tests/api-driven/src/invite-to-pay/helpers.ts index 302be5dd57..d8d2db0acf 100644 --- a/e2e/tests/api-driven/src/invite-to-pay/helpers.ts +++ b/e2e/tests/api-driven/src/invite-to-pay/helpers.ts @@ -45,6 +45,7 @@ export async function buildITPFlow({ const flowId: string = await $admin.flow.create({ teamId, slug: `test-invite-to-pay-flow-with-send-to-${destination.toLowerCase()}`, + name: `Test invite to pay flow with send to ${destination}`, status: "online", data: flowGraph, }); @@ -185,7 +186,7 @@ const setupMockBopsSubmissionUrl = async (teamId: number) => { export const setup = async () => { await setUpMocks(); - const teamId = await createTeam(); + const teamId = await createTeam({ settings: { referenceCode: "ABC" } }); const userId = await createUser(); await setupMockBopsSubmissionUrl(teamId); diff --git a/e2e/tests/api-driven/src/permissions/helpers.ts b/e2e/tests/api-driven/src/permissions/helpers.ts index c191c0cfd9..521523c540 100644 --- a/e2e/tests/api-driven/src/permissions/helpers.ts +++ b/e2e/tests/api-driven/src/permissions/helpers.ts @@ -35,6 +35,7 @@ export const setup = async () => { const team1FlowId = await createFlow({ teamId: teamId1, slug: "team-1-flow", + name: "Team 1 Flow", }); const user2Id = await createUser({ @@ -44,6 +45,7 @@ export const setup = async () => { const team2FlowId = await createFlow({ teamId: teamId2, slug: "team-2-flow", + name: "Team 2 Flow", }); const world = { diff --git a/e2e/tests/api-driven/src/permissions/queries/flows.ts b/e2e/tests/api-driven/src/permissions/queries/flows.ts index 9db7a43379..fe41185c1f 100644 --- a/e2e/tests/api-driven/src/permissions/queries/flows.ts +++ b/e2e/tests/api-driven/src/permissions/queries/flows.ts @@ -3,7 +3,11 @@ import { gql } from "graphql-tag"; export const INSERT_FLOW_QUERY = gql` mutation InsertFlowE2E($team1Id: Int) { result: insert_flows( - objects: { slug: "e2e-test-flow", team_id: $team1Id } + objects: { + slug: "e2e-test-flow" + team_id: $team1Id + name: "E2E Test Flow" + } ) { returning { id @@ -16,7 +20,7 @@ export const UPDATE_FLOW_QUERY = gql` mutation UpdateFlowE2E($team1FlowId: uuid!) { result: update_flows_by_pk( pk_columns: { id: $team1FlowId } - _set: { slug: "new-slug" } + _set: { slug: "new-slug", name: "new Name" } ) { id } diff --git a/e2e/tests/api-driven/src/permissions/teamAdmin.feature b/e2e/tests/api-driven/src/permissions/teamAdmin.feature index bf4abe1e93..ff6b11e28f 100644 --- a/e2e/tests/api-driven/src/permissions/teamAdmin.feature +++ b/e2e/tests/api-driven/src/permissions/teamAdmin.feature @@ -54,5 +54,4 @@ Feature: Testing Permissions for teamEditor Role Examples: | TABLE | ACTION | - | users | select | | team_members | select | \ No newline at end of file diff --git a/e2e/tests/ui-driven/package.json b/e2e/tests/ui-driven/package.json index 7957fa2819..a8d617b2e7 100644 --- a/e2e/tests/ui-driven/package.json +++ b/e2e/tests/ui-driven/package.json @@ -8,17 +8,18 @@ "postinstall": "./install-dependencies.sh" }, "dependencies": { - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#5710d52", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#6c2cc59", "axios": "^1.6.8", "dotenv": "^16.3.1", "eslint": "^8.56.0", - "graphql": "^16.8.1", + "graphql": "^16.9.0", "graphql-request": "^6.1.0", "isomorphic-fetch": "^3.0.0", "jsonwebtoken": "^9.0.2", "serve": "^14.2.1", "uuid": "^9.0.1" }, + "packageManager": "pnpm@8.6.6", "devDependencies": { "@playwright/test": "^1.40.1", "@types/node": "18.16.1", diff --git a/e2e/tests/ui-driven/pnpm-lock.yaml b/e2e/tests/ui-driven/pnpm-lock.yaml index 551c17f74f..0b37ef581f 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#5710d52 - version: github.com/theopensystemslab/planx-core/5710d52 + specifier: git+https://github.com/theopensystemslab/planx-core#6c2cc59 + version: github.com/theopensystemslab/planx-core/6c2cc59 axios: specifier: ^1.6.8 version: 1.6.8 @@ -18,11 +18,11 @@ dependencies: specifier: ^8.56.0 version: 8.56.0 graphql: - specifier: ^16.8.1 - version: 16.8.1 + specifier: ^16.9.0 + version: 16.9.0 graphql-request: specifier: ^6.1.0 - version: 6.1.0(graphql@16.8.1) + version: 6.1.0(graphql@16.9.0) isomorphic-fetch: specifier: ^3.0.0 version: 3.0.0 @@ -49,8 +49,8 @@ devDependencies: packages: - /@apidevtools/json-schema-ref-parser@11.6.2: - resolution: {integrity: sha512-ENUdLLT04aDbbHCRwfKf8gR67AhV0CdFrOAtk+FcakBAgaq6ds3HLK9X0BCyiFUz8pK9uP+k6YZyJaGG7Mt7vQ==} + /@apidevtools/json-schema-ref-parser@11.6.4: + resolution: {integrity: sha512-9K6xOqeevacvweLGik6LnZCb1fBtCOSIWQs8d096XGeqoLKC33UVMGz9+77Gw44KvbH4pKcQPWo4ZpxkXYj05w==} engines: {node: '>= 16'} dependencies: '@jsdevtools/ono': 7.1.3 @@ -58,62 +58,139 @@ packages: js-yaml: 4.1.0 dev: false - /@babel/code-frame@7.24.2: - resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} + /@babel/code-frame@7.24.7: + resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/highlight': 7.24.5 + '@babel/highlight': 7.24.7 picocolors: 1.0.1 dev: false - /@babel/helper-module-imports@7.24.3: - resolution: {integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==} + /@babel/generator@7.24.7: + resolution: {integrity: sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.24.7 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 2.5.2 dev: false - /@babel/helper-string-parser@7.24.1: - resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} + /@babel/helper-environment-visitor@7.24.7: + resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.7 + dev: false + + /@babel/helper-function-name@7.24.7: + resolution: {integrity: sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.24.7 + '@babel/types': 7.24.7 + dev: false + + /@babel/helper-hoist-variables@7.24.7: + resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.7 + dev: false + + /@babel/helper-module-imports@7.24.7: + resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/traverse': 7.24.7 + '@babel/types': 7.24.7 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/helper-split-export-declaration@7.24.7: + resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.7 + dev: false + + /@babel/helper-string-parser@7.24.7: + resolution: {integrity: sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==} engines: {node: '>=6.9.0'} dev: false - /@babel/helper-validator-identifier@7.24.5: - resolution: {integrity: sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==} + /@babel/helper-validator-identifier@7.24.7: + resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} engines: {node: '>=6.9.0'} dev: false - /@babel/highlight@7.24.5: - resolution: {integrity: sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==} + /@babel/highlight@7.24.7: + resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.24.5 + '@babel/helper-validator-identifier': 7.24.7 chalk: 2.4.2 js-tokens: 4.0.0 picocolors: 1.0.1 dev: false - /@babel/runtime@7.24.5: - resolution: {integrity: sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==} + /@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 + dev: false + + /@babel/runtime@7.24.7: + resolution: {integrity: sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.1 dev: false - /@babel/types@7.24.5: - resolution: {integrity: sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==} + /@babel/template@7.24.7: + resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/parser': 7.24.7 + '@babel/types': 7.24.7 + dev: false + + /@babel/traverse@7.24.7: + resolution: {integrity: sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.24.7 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-function-name': 7.24.7 + '@babel/helper-hoist-variables': 7.24.7 + '@babel/helper-split-export-declaration': 7.24.7 + '@babel/parser': 7.24.7 + '@babel/types': 7.24.7 + debug: 4.3.5 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/types@7.24.7: + resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.24.1 - '@babel/helper-validator-identifier': 7.24.5 + '@babel/helper-string-parser': 7.24.7 + '@babel/helper-validator-identifier': 7.24.7 to-fast-properties: 2.0.0 dev: false /@emotion/babel-plugin@11.11.0: resolution: {integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==} dependencies: - '@babel/helper-module-imports': 7.24.3 - '@babel/runtime': 7.24.5 + '@babel/helper-module-imports': 7.24.7 + '@babel/runtime': 7.24.7 '@emotion/hash': 0.9.1 '@emotion/memoize': 0.8.1 '@emotion/serialize': 1.1.4 @@ -123,6 +200,8 @@ packages: find-root: 1.1.0 source-map: 0.5.7 stylis: 4.2.0 + transitivePeerDependencies: + - supports-color dev: false /@emotion/cache@11.11.0: @@ -158,7 +237,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@emotion/babel-plugin': 11.11.0 '@emotion/cache': 11.11.0 '@emotion/serialize': 1.1.4 @@ -167,6 +246,8 @@ packages: '@emotion/weak-memoize': 0.3.1 hoist-non-react-statics: 3.3.2 react: 18.3.1 + transitivePeerDependencies: + - supports-color dev: false /@emotion/serialize@1.1.4: @@ -193,7 +274,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@emotion/babel-plugin': 11.11.0 '@emotion/is-prop-valid': 1.2.2 '@emotion/react': 11.11.4(react@18.3.1) @@ -201,6 +282,8 @@ packages: '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.3.1) '@emotion/utils': 1.2.1 react: 18.3.1 + transitivePeerDependencies: + - supports-color dev: false /@emotion/unitless@0.8.1: @@ -242,8 +325,8 @@ packages: eslint-visitor-keys: 3.4.3 dev: false - /@eslint-community/regexpp@4.10.0: - resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} + /@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: @@ -251,7 +334,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.4 + debug: 4.3.5 espree: 9.6.1 globals: 13.24.0 ignore: 5.3.1 @@ -271,40 +354,61 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: false - /@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 dev: false - /@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 dev: false - /@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==} + dev: false + + /@formatjs/ecma402-abstract@2.0.0: + resolution: {integrity: sha512-rRqXOqdFmk7RYvj4khklyqzcfQl9vEL/usogncBHRZfZBDOwMGuSRNFl02fu5KGHXdbinju+YXyuR+Nk8xlr/g==} + dependencies: + '@formatjs/intl-localematcher': 0.5.4 + tslib: 2.6.3 + dev: false + + /@formatjs/intl-listformat@7.5.7: + resolution: {integrity: sha512-MG2TSChQJQT9f7Rlv+eXwUFiG24mKSzmF144PLb8m8OixyXqn4+YWU+5wZracZGCgVTVmx8viCf7IH3QXoiB2g==} + dependencies: + '@formatjs/ecma402-abstract': 2.0.0 + '@formatjs/intl-localematcher': 0.5.4 + tslib: 2.6.3 + dev: false + + /@formatjs/intl-localematcher@0.5.4: + resolution: {integrity: sha512-zTwEpWOzZ2CiKcB93BLngUX59hQkuZjT2+SAQEscSm52peDW/getsawMcWF1rGRpMCX6D7nSJA3CzJ8gn13N/g==} + dependencies: + tslib: 2.6.3 dev: false - /@graphql-typed-document-node/core@3.2.0(graphql@16.8.1): + /@graphql-typed-document-node/core@3.2.0(graphql@16.9.0): resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - graphql: 16.8.1 + graphql: 16.9.0 dev: false /@humanwhocodes/config-array@0.11.14: @@ -312,7 +416,7 @@ packages: engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.4 + debug: 4.3.5 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -336,6 +440,36 @@ packages: wrap-ansi-cjs: /wrap-ansi@7.0.0 dev: false + /@jridgewell/gen-mapping@0.3.5: + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.25 + dev: false + + /@jridgewell/resolve-uri@3.1.2: + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + dev: false + + /@jridgewell/set-array@1.2.1: + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + dev: false + + /@jridgewell/sourcemap-codec@1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + dev: false + + /@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 + dev: false + /@jsdevtools/ono@7.1.3: resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} dev: false @@ -351,10 +485,10 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 - '@floating-ui/react-dom': 2.1.0(react-dom@18.3.1)(react@18.3.1) + '@babel/runtime': 7.24.7 + '@floating-ui/react-dom': 2.1.1(react-dom@18.3.1)(react@18.3.1) '@mui/types': 7.2.14 - '@mui/utils': 5.15.14(react@18.3.1) + '@mui/utils': 5.15.20(react@18.3.1) '@popperjs/core': 2.11.8 clsx: 2.1.1 prop-types: 15.8.1 @@ -362,12 +496,12 @@ packages: react-dom: 18.3.1(react@18.3.1) dev: false - /@mui/core-downloads-tracker@5.15.18: - resolution: {integrity: sha512-/9pVk+Al8qxAjwFUADv4BRZgMpZM4m5E+2Q/20qhVPuIJWqKp4Ie4tGExac6zu93rgPTYVQGgu+1vjiT0E+cEw==} + /@mui/core-downloads-tracker@5.15.21: + resolution: {integrity: sha512-dp9lXBaJZzJYeJfQY3Ow4Rb49QaCEdkl2KKYscdQHQm6bMJ+l4XPY3Cd9PCeeJTsHPIDJ60lzXbeRgs6sx/rpw==} dev: false - /@mui/material@5.15.18(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-n+/dsiqux74fFfcRUJjok+ieNQ7+BEk6/OwX9cLcLvriZrZb+/7Y8+Fd2HlUUbn5N0CDurgAHm0VH1DqyJ9HAw==} + /@mui/material@5.15.21(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-nTyCcgduKwHqiuQ/B03EQUa+utSMzn2sQp0QAibsnYe4tvc3zkMbO0amKpl48vhABIY3IvT6w9615BFIgMt0YA==} engines: {node: '>=12.0.0'} peerDependencies: '@emotion/react': ^11.5.0 @@ -383,14 +517,14 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@emotion/react': 11.11.4(react@18.3.1) '@emotion/styled': 11.11.5(@emotion/react@11.11.4)(react@18.3.1) '@mui/base': 5.0.0-beta.40(react-dom@18.3.1)(react@18.3.1) - '@mui/core-downloads-tracker': 5.15.18 - '@mui/system': 5.15.15(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1) + '@mui/core-downloads-tracker': 5.15.21 + '@mui/system': 5.15.20(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1) '@mui/types': 7.2.14 - '@mui/utils': 5.15.14(react@18.3.1) + '@mui/utils': 5.15.20(react@18.3.1) '@types/react-transition-group': 4.4.10 clsx: 2.1.1 csstype: 3.1.3 @@ -401,8 +535,8 @@ packages: react-transition-group: 4.4.5(react-dom@18.3.1)(react@18.3.1) dev: false - /@mui/private-theming@5.15.14(react@18.3.1): - resolution: {integrity: sha512-UH0EiZckOWcxiXLX3Jbb0K7rC8mxTr9L9l6QhOZxYc4r8FHUkefltV9VDGLrzCaWh30SQiJvAEd7djX3XXY6Xw==} + /@mui/private-theming@5.15.20(react@18.3.1): + resolution: {integrity: sha512-BK8F94AIqSrnaPYXf2KAOjGZJgWfvqAVQ2gVR3EryvQFtuBnG6RwodxrCvd3B48VuMy6Wsk897+lQMUxJyk+6g==} engines: {node: '>=12.0.0'} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 @@ -411,8 +545,8 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 - '@mui/utils': 5.15.14(react@18.3.1) + '@babel/runtime': 7.24.7 + '@mui/utils': 5.15.20(react@18.3.1) prop-types: 15.8.1 react: 18.3.1 dev: false @@ -430,7 +564,7 @@ packages: '@emotion/styled': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@emotion/cache': 11.11.0 '@emotion/react': 11.11.4(react@18.3.1) '@emotion/styled': 11.11.5(@emotion/react@11.11.4)(react@18.3.1) @@ -439,8 +573,8 @@ packages: react: 18.3.1 dev: false - /@mui/system@5.15.15(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1): - resolution: {integrity: sha512-aulox6N1dnu5PABsfxVGOZffDVmlxPOVgj56HrUnJE8MCSh8lOvvkd47cebIVQQYAjpwieXQXiDPj5pwM40jTQ==} + /@mui/system@5.15.20(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1): + resolution: {integrity: sha512-LoMq4IlAAhxzL2VNUDBTQxAb4chnBe8JvRINVNDiMtHE2PiPOoHlhOPutSxEbaL5mkECPVWSv6p8JEV+uykwIA==} engines: {node: '>=12.0.0'} peerDependencies: '@emotion/react': ^11.5.0 @@ -455,13 +589,13 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@emotion/react': 11.11.4(react@18.3.1) '@emotion/styled': 11.11.5(@emotion/react@11.11.4)(react@18.3.1) - '@mui/private-theming': 5.15.14(react@18.3.1) + '@mui/private-theming': 5.15.20(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 - '@mui/utils': 5.15.14(react@18.3.1) + '@mui/utils': 5.15.20(react@18.3.1) clsx: 2.1.1 csstype: 3.1.3 prop-types: 15.8.1 @@ -477,8 +611,8 @@ packages: optional: true dev: false - /@mui/utils@5.15.14(react@18.3.1): - resolution: {integrity: sha512-0lF/7Hh/ezDv5X7Pry6enMsbYyGKjADzvHyo3Qrc/SSlTsQ1VkbDMbH0m2t3OR5iIVLwMoxwM7yGd+6FCMtTFA==} + /@mui/utils@5.15.20(react@18.3.1): + resolution: {integrity: sha512-mAbYx0sovrnpAu1zHc3MDIhPqL8RPVC5W5xcO1b7PiSCJPtckIZmBkp8hefamAvUiAV8gpfMOM6Zb+eSisbI2A==} engines: {node: '>=12.0.0'} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 @@ -487,7 +621,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@types/prop-types': 15.7.12 prop-types: 15.8.1 react: 18.3.1 @@ -522,7 +656,6 @@ packages: /@playwright/test@1.40.1: resolution: {integrity: sha512-EaaawMTOeEItCRvfmkI9v6rBkF1svM8wjl/YPRrg2N2Wmp+4qJYkWtJsbew1szfKKDm6fPLy4YAanBhIlf9dWw==} engines: {node: '>=16'} - hasBin: true dependencies: playwright: 1.40.1 dev: true @@ -531,24 +664,20 @@ packages: resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} dev: false - /@types/geojson@7946.0.14: - resolution: {integrity: sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg==} - dev: false - /@types/json-schema@7.0.15: resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} dev: false - /@types/lodash@4.17.4: - resolution: {integrity: sha512-wYCP26ZLxaT3R39kiN2+HcJ4kTd3U1waI/cY7ivWYqFP6pW3ZNpvi6Wd6PHZx7T/t8z0vlkXMg3QYLa7DZ/IJQ==} + /@types/lodash@4.17.6: + resolution: {integrity: sha512-OpXEVoCKSS3lQqjx9GGGOapBeuW5eUboYHRlHP9urXPX25IKZ6AnP5ZRxtVf63iieUbsHxLn8NQ5Nlftc6yzAA==} dev: false /@types/node@18.16.1: resolution: {integrity: sha512-DZxSZWXxFfOlx7k7Rv4LAyiMroaxa3Ly/7OOzZO8cBNho0YzAi4qlbrx8W27JGqG57IgR/6J7r+nOJWw6kcvZA==} dev: true - /@types/node@20.12.12: - resolution: {integrity: sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==} + /@types/node@20.14.9: + resolution: {integrity: sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==} dependencies: undici-types: 5.26.5 dev: false @@ -589,19 +718,18 @@ packages: negotiator: 0.6.3 dev: false - /acorn-jsx@5.3.2(acorn@8.11.3): + /acorn-jsx@5.3.2(acorn@8.12.0): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.11.3 + acorn: 8.12.0 - /acorn@8.11.3: - resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + /acorn@8.12.0: + resolution: {integrity: sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==} engines: {node: '>=0.4.0'} - hasBin: true - /ajv-formats@2.1.1(ajv@8.13.0): + /ajv-formats@2.1.1(ajv@8.16.0): resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: ajv: ^8.0.0 @@ -609,7 +737,7 @@ packages: ajv: optional: true dependencies: - ajv: 8.13.0 + ajv: 8.16.0 dev: false /ajv@6.12.6: @@ -629,8 +757,8 @@ packages: uri-js: 4.4.1 dev: false - /ajv@8.13.0: - resolution: {integrity: sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==} + /ajv@8.16.0: + resolution: {integrity: sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==} dependencies: fast-deep-equal: 3.1.3 json-schema-traverse: 1.0.0 @@ -671,10 +799,6 @@ packages: engines: {node: '>=12'} dev: false - /any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - dev: false - /arch@2.2.0: resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} dev: false @@ -704,7 +828,7 @@ packages: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} engines: {node: '>=10', npm: '>=6'} dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 cosmiconfig: 7.1.0 resolve: 1.22.8 dev: false @@ -824,8 +948,8 @@ packages: d: 1.0.2 es5-ext: 0.10.64 es6-iterator: 2.0.3 - memoizee: 0.4.16 - timers-ext: 0.1.7 + memoizee: 0.4.17 + timers-ext: 0.1.8 dev: false /clipboardy@3.0.0: @@ -978,7 +1102,7 @@ packages: engines: {node: '>=0.12'} dependencies: es5-ext: 0.10.64 - type: 2.7.2 + type: 2.7.3 dev: false /data-uri-to-buffer@4.0.1: @@ -997,8 +1121,8 @@ packages: ms: 2.0.0 dev: false - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + /debug@4.3.5: + resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -1031,7 +1155,7 @@ packages: resolution: {integrity: sha512-4SbcbedPXTciySXiSnNNLuJXpvxFe5nqivbiEHXyL8P/w0wx2uW7YXNjnYgjW0e2e6vy+L/tMISU/oAiXCl57Q==} engines: {node: '>=10'} dependencies: - '@types/node': 20.12.12 + '@types/node': 20.14.9 jszip: 3.10.1 nanoid: 5.0.7 xml: 1.0.1 @@ -1041,7 +1165,7 @@ packages: /dom-helpers@5.2.1: resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 csstype: 3.1.3 dev: false @@ -1183,10 +1307,9 @@ packages: /eslint@8.56.0: resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) - '@eslint-community/regexpp': 4.10.0 + '@eslint-community/regexpp': 4.11.0 '@eslint/eslintrc': 2.1.4 '@eslint/js': 8.56.0 '@humanwhocodes/config-array': 0.11.14 @@ -1196,7 +1319,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4 + debug: 4.3.5 doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -1232,7 +1355,7 @@ packages: hasBin: true dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@eslint-community/regexpp': 4.10.0 + '@eslint-community/regexpp': 4.11.0 '@eslint/eslintrc': 2.1.4 '@eslint/js': 8.57.0 '@humanwhocodes/config-array': 0.11.14 @@ -1242,7 +1365,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4 + debug: 4.3.5 doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -1280,15 +1403,15 @@ packages: d: 1.0.2 es5-ext: 0.10.64 event-emitter: 0.3.5 - type: 2.7.2 + type: 2.7.3 dev: false /espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.11.3 - acorn-jsx: 5.3.2(acorn@8.11.3) + acorn: 8.12.0 + acorn-jsx: 5.3.2(acorn@8.12.0) eslint-visitor-keys: 3.4.3 /esquery@1.5.0: @@ -1336,7 +1459,7 @@ packages: /ext@1.7.0: resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} dependencies: - type: 2.7.2 + type: 2.7.3 dev: false /fast-deep-equal@3.1.3: @@ -1412,8 +1535,8 @@ packages: optional: true dev: false - /foreground-child@3.1.1: - resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} + /foreground-child@3.2.1: + resolution: {integrity: sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==} engines: {node: '>=14'} dependencies: cross-spawn: 7.0.3 @@ -1467,20 +1590,22 @@ packages: dependencies: is-glob: 4.0.3 - /glob@10.4.1: - resolution: {integrity: sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==} + /glob@10.4.2: + resolution: {integrity: sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==} engines: {node: '>=16 || 14 >=14.18'} hasBin: true dependencies: - foreground-child: 3.1.1 - jackspeak: 3.1.2 - minimatch: 9.0.4 + foreground-child: 3.2.1 + jackspeak: 3.4.0 + minimatch: 9.0.5 minipass: 7.1.2 + package-json-from-dist: 1.0.0 path-scurry: 1.11.1 dev: false /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -1489,6 +1614,11 @@ packages: once: 1.4.0 path-is-absolute: 1.0.1 + /globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + dev: false + /globals@13.24.0: resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} engines: {node: '>=8'} @@ -1498,20 +1628,20 @@ packages: /graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - /graphql-request@6.1.0(graphql@16.8.1): + /graphql-request@6.1.0(graphql@16.9.0): resolution: {integrity: sha512-p+XPfS4q7aIpKVcgmnZKhMNqhltk20hfXtkaIkTfjjmiKMJ5xrt5c743cL03y/K7y1rg3WrIC49xGiEQ4mxdNw==} peerDependencies: graphql: 14 - 16 dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.9.0) cross-fetch: 3.1.8 - graphql: 16.8.1 + graphql: 16.9.0 transitivePeerDependencies: - encoding dev: false - /graphql@16.8.1: - resolution: {integrity: sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==} + /graphql@16.9.0: + resolution: {integrity: sha512-GGTKBX4SD7Wdb8mqeDLni2oaRGYQWjWHGKPQ24ZMnUtKfcsVoiv4uX8+LJr1K6U5VW2Lu1BwJnj7uiori0YtRw==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} dev: false @@ -1588,8 +1718,9 @@ packages: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} dev: false - /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 dev: false @@ -1597,7 +1728,6 @@ packages: /is-docker@2.2.1: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} - hasBin: true dev: false /is-extglob@2.1.1: @@ -1660,8 +1790,8 @@ packages: - encoding dev: false - /jackspeak@3.1.2: - resolution: {integrity: sha512-kWmLKn2tRtfYMF/BakihVVRzBKOxz4gJMiL2Rj91WnAB5TPZumSH99R/Yf1qE1u4uRimvCSJfm6hnxohXeEXjQ==} + /jackspeak@3.4.0: + resolution: {integrity: sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==} engines: {node: '>=14'} dependencies: '@isaacs/cliui': 8.0.2 @@ -1675,10 +1805,15 @@ packages: /js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true dependencies: argparse: 2.0.1 + /jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + dev: false + /json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} @@ -1686,24 +1821,23 @@ packages: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} dev: false - /json-schema-to-typescript@14.0.4: - resolution: {integrity: sha512-covPOp3hrbD+oEcMvDxP5Rh6xNZj7lOTZkXAeQoDyu1PuEl1A6oRZ3Sy05HN11vXXmdJ6gLh5P3Qz0mgMPTzzw==} + /json-schema-to-typescript@14.1.0: + resolution: {integrity: sha512-VIeAFQkn88gFh26MSHWG4uX7TjK/arTw0NVLMZn6vX1WrSF+P6xu5MyEdovu+9PJ0uiS5gm0wzwQvYW9eSq1uw==} engines: {node: '>=16.0.0'} hasBin: true dependencies: - '@apidevtools/json-schema-ref-parser': 11.6.2 + '@apidevtools/json-schema-ref-parser': 11.6.4 '@types/json-schema': 7.0.15 - '@types/lodash': 4.17.4 + '@types/lodash': 4.17.6 cli-color: 2.0.4 - glob: 10.4.1 + glob: 10.4.2 is-glob: 4.0.3 js-yaml: 4.1.0 lodash: 4.17.21 minimist: 1.2.8 mkdirp: 3.0.1 - mz: 2.7.0 node-fetch: 3.3.2 - prettier: 3.2.5 + prettier: 3.3.2 dev: false /json-schema-traverse@0.4.1: @@ -1826,8 +1960,8 @@ packages: js-tokens: 4.0.0 dev: false - /lru-cache@10.2.2: - resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==} + /lru-cache@10.3.0: + resolution: {integrity: sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ==} engines: {node: 14 || >=16.14} dev: false @@ -1837,15 +1971,15 @@ packages: es5-ext: 0.10.64 dev: false - /marked@12.0.2: - resolution: {integrity: sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q==} + /marked@13.0.1: + resolution: {integrity: sha512-7kBohS6GrZKvCsNXZyVVXSW7/hGBHe49ng99YPkDCckSUrrG7MSFLCexsRxptzOmyW2eT5dySh4Md1V6my52fA==} engines: {node: '>= 18'} hasBin: true dev: false - /memoizee@0.4.16: - resolution: {integrity: sha512-eOxQqGfogqdcQ2jeyLgsTp91bFOdbjaiJ1P0ZeDt1HHT1+ektm2u+raWDytppt8SMZ1fP2sIWlTbZukHhMKhiQ==} - engines: {node: '>=.0.12'} + /memoizee@0.4.17: + resolution: {integrity: sha512-DGqD7Hjpi/1or4F/aYAspXKNm5Yili0QDAFAY4QYvpqpgiY6+1jOfqpmByzjxbWd/T9mChbCArXAbDAsTm5oXA==} + engines: {node: '>=0.12'} dependencies: d: 1.0.2 es5-ext: 0.10.64 @@ -1854,7 +1988,7 @@ packages: is-promise: 2.2.2 lru-queue: 0.1.0 next-tick: 1.1.0 - timers-ext: 0.1.7 + timers-ext: 0.1.8 dev: false /merge-stream@2.0.0: @@ -1895,8 +2029,8 @@ packages: dependencies: brace-expansion: 1.1.11 - /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 @@ -1934,14 +2068,6 @@ packages: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} dev: false - /mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - dependencies: - any-promise: 1.3.0 - object-assign: 4.1.1 - thenify-all: 1.6.0 - dev: false - /nanoid@5.0.7: resolution: {integrity: sha512-oLxFY2gd2IqnjcYyOXD8XGCftpGtZP2AbHbOkthDkvRywH5ayNtPVy9YlOPcHckXzbLTCHpkb7FB+yuxKV13pQ==} engines: {node: ^18 || >=20} @@ -2051,6 +2177,10 @@ packages: dependencies: p-limit: 3.1.0 + /package-json-from-dist@1.0.0: + resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} + dev: false + /pako@1.0.11: resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} dev: false @@ -2065,7 +2195,7 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.24.7 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -2108,7 +2238,7 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} dependencies: - lru-cache: 10.2.2 + lru-cache: 10.3.0 minipass: 7.1.2 dev: false @@ -2128,13 +2258,11 @@ packages: /playwright-core@1.40.1: resolution: {integrity: sha512-+hkOycxPiV534c4HhpfX6yrlawqVUzITRKwHAmYfmsVreltEl6fAZJ3DPfLMOODw0H3s1Itd6MDCWmP1fl/QvQ==} engines: {node: '>=16'} - hasBin: true dev: true /playwright@1.40.1: resolution: {integrity: sha512-2eHI7IioIpQ0bS1Ovg/HszsN/XKNwEG1kbzSDDmADpclKc7CyqkHw7Mg2JCz/bbCxg25QUPcjksoMW7JcIFQmw==} engines: {node: '>=16'} - hasBin: true dependencies: playwright-core: 1.40.1 optionalDependencies: @@ -2145,8 +2273,8 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - /prettier@3.2.5: - resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} + /prettier@3.3.2: + resolution: {integrity: sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==} engines: {node: '>=14'} hasBin: true dev: false @@ -2185,7 +2313,6 @@ packages: /rc@1.2.8: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} - hasBin: true dependencies: deep-extend: 0.6.0 ini: 1.3.8 @@ -2217,7 +2344,7 @@ packages: react: '>=16.6.0' react-dom: '>=16.6.0' dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 @@ -2289,7 +2416,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 dev: false @@ -2300,7 +2427,6 @@ packages: /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - hasBin: true dependencies: glob: 7.2.3 @@ -2317,8 +2443,8 @@ packages: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} dev: false - /sax@1.3.0: - resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==} + /sax@1.4.1: + resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} dev: false /scheduler@0.23.2: @@ -2330,7 +2456,6 @@ packages: /semver@7.6.2: resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} engines: {node: '>=10'} - hasBin: true dev: false /serve-handler@6.1.5: @@ -2349,7 +2474,6 @@ packages: /serve@14.2.1: resolution: {integrity: sha512-48er5fzHh7GCShLnNyPBRPEjs2I6QBozeGr02gaacROiyS/8ARADlj595j39iZXAqBbJHH/ivJJyPRWY9sQWZA==} engines: {node: '>= 14'} - hasBin: true dependencies: '@zeit/schemas': 2.29.0 ajv: 8.11.0 @@ -2478,19 +2602,6 @@ packages: /text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - /thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} - dependencies: - thenify: 3.3.1 - dev: false - - /thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - dependencies: - any-promise: 1.3.0 - dev: false - /through2@2.0.5: resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} dependencies: @@ -2498,8 +2609,9 @@ packages: xtend: 4.0.2 dev: false - /timers-ext@0.1.7: - resolution: {integrity: sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==} + /timers-ext@0.1.8: + resolution: {integrity: sha512-wFH7+SEAcKfJpfLPkrgMPvvwnEtj8W4IurvEyrKsDleXnKLCDw71w8jltvfLa8Rm4qQxxT4jmDBYbJG/z7qoww==} + engines: {node: '>=0.12'} dependencies: es5-ext: 0.10.64 next-tick: 1.1.0 @@ -2514,6 +2626,10 @@ packages: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} dev: false + /tslib@2.6.3: + resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} + dev: false + /type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -2529,13 +2645,13 @@ packages: engines: {node: '>=12.20'} dev: false - /type-fest@4.18.2: - resolution: {integrity: sha512-+suCYpfJLAe4OXS6+PPXjW3urOS4IoP9waSiLuXfLgqZODKw/aWwASvzqE886wA0kQgGy0mIWyhd87VpqIy6Xg==} + /type-fest@4.21.0: + resolution: {integrity: sha512-ADn2w7hVPcK6w1I0uWnM//y1rLXZhzB9mr0a3OirzclKF1Wp6VzevUmzz/NRAWunOT6E8HrnpGY7xOfc6K57fA==} engines: {node: '>=16'} dev: false - /type@2.7.2: - resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==} + /type@2.7.3: + resolution: {integrity: sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==} dev: false /undici-types@5.26.5: @@ -2563,9 +2679,13 @@ packages: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: false + /uuid@10.0.0: + resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} + hasBin: true + dev: false + /uuid@9.0.1: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} - hasBin: true dev: false /vary@1.1.2: @@ -2596,7 +2716,6 @@ packages: /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} - hasBin: true dependencies: isexe: 2.0.0 @@ -2636,7 +2755,7 @@ packages: resolution: {integrity: sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==} hasBin: true dependencies: - sax: 1.3.0 + sax: 1.4.1 dev: false /xml@1.0.1: @@ -2684,8 +2803,8 @@ packages: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} dev: false - github.com/theopensystemslab/planx-core/5710d52: - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/5710d52} + github.com/theopensystemslab/planx-core/6c2cc59: + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/6c2cc59} name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true @@ -2693,25 +2812,25 @@ packages: dependencies: '@emotion/react': 11.11.4(react@18.3.1) '@emotion/styled': 11.11.5(@emotion/react@11.11.4)(react@18.3.1) - '@mui/material': 5.15.18(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react-dom@18.3.1)(react@18.3.1) - '@types/geojson': 7946.0.14 - ajv: 8.13.0 - ajv-formats: 2.1.1(ajv@8.13.0) + '@formatjs/intl-listformat': 7.5.7 + '@mui/material': 5.15.21(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react-dom@18.3.1)(react@18.3.1) + ajv: 8.16.0 + ajv-formats: 2.1.1(ajv@8.16.0) cheerio: 1.0.0-rc.12 copyfiles: 2.4.1 docx: 8.5.0 eslint: 8.57.0 fast-xml-parser: 4.4.0 - graphql: 16.8.1 - graphql-request: 6.1.0(graphql@16.8.1) - json-schema-to-typescript: 14.0.4 + graphql: 16.9.0 + graphql-request: 6.1.0(graphql@16.9.0) + json-schema-to-typescript: 14.1.0 lodash: 4.17.21 - marked: 12.0.2 - prettier: 3.2.5 + marked: 13.0.1 + prettier: 3.3.2 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - type-fest: 4.18.2 - uuid: 9.0.1 + type-fest: 4.21.0 + uuid: 10.0.0 zod: 3.23.8 transitivePeerDependencies: - '@types/react' diff --git a/e2e/tests/ui-driven/src/context.ts b/e2e/tests/ui-driven/src/context.ts index b9369b6e02..7f08ccf25f 100644 --- a/e2e/tests/ui-driven/src/context.ts +++ b/e2e/tests/ui-driven/src/context.ts @@ -4,6 +4,8 @@ import { sign } from "jsonwebtoken"; import { CoreDomainClient } from "@opensystemslab/planx-core"; import { GraphQLClient, gql } from "graphql-request"; +type NewTeam = Parameters[0]; + export interface Context { user: { id?: number; @@ -12,19 +14,12 @@ export interface Context { email: string; isPlatformAdmin: boolean; }; - team: { - id?: number; - name: string; - slug: string; - logo: string; - primaryColour: string; - homepage: string; - submissionEmail: string; - }; + team: { id?: number } & NewTeam; flow?: { id?: string; publishedId?: number; slug: string; + name: string; data?: object; }; sessionIds?: string[]; @@ -40,9 +35,13 @@ export const contextDefaults: Context = { team: { name: "E2E Test Team", slug: "E2E", - logo: "https://raw.githubusercontent.com/theopensystemslab/planx-team-logos/main/planx-testing.svg", - primaryColour: "#444444", - homepage: "planx.uk", + theme: { + logo: "https://raw.githubusercontent.com/theopensystemslab/planx-team-logos/main/planx-testing.svg", + primaryColour: "#444444", + }, + settings: { + homepage: "planx.uk", + }, submissionEmail: "simulate-delivered@notifications.service.gov.uk", }, }; @@ -59,19 +58,22 @@ export async function setUpTestContext( context.team.id = await $admin.team.create({ slug: context.team.slug, name: context.team.name, - homepage: context.team.homepage, submissionEmail: context.team.submissionEmail, - referenceCode: "ABCD", + settings: { + homepage: context.team.settings?.homepage, + }, }); } if ( context.flow?.slug && context.flow?.data && + context.flow?.name && context.team?.id && context.user?.id ) { context.flow.id = await $admin.flow.create({ slug: context.flow.slug, + name: context.flow.name, teamId: context.team.id, data: context.flow!.data!, status: "online", diff --git a/e2e/tests/ui-driven/src/create-flow/create-flow.spec.ts b/e2e/tests/ui-driven/src/create-flow/create-flow.spec.ts index 7d86cb19a9..d30b6f269d 100644 --- a/e2e/tests/ui-driven/src/create-flow/create-flow.spec.ts +++ b/e2e/tests/ui-driven/src/create-flow/create-flow.spec.ts @@ -47,7 +47,7 @@ test.describe("Navigation", () => { Promise.all([await page.goto("/"), await initialRequest]); - const team = page.locator("h2", { hasText: context.team.name }); + const team = page.locator("h3", { hasText: context.team.name }); let isRepeatedRequestMade = false; page.on( @@ -74,7 +74,7 @@ test.describe("Navigation", () => { }); await page.goto("/"); - const team = page.locator("h2", { hasText: context.team.name }); + const team = page.locator("h3", { hasText: context.team.name }); await team.click(); const teamSlugInHeader = page.getByRole("link", { @@ -207,9 +207,7 @@ test.describe("Navigation", () => { await page.goto(`/${context.team.slug}/${serviceProps.slug}`); // Open flow settings - // TODO: Access via sidebar when EDITOR_NAVIGATION flag is removed - page.getByLabel("Toggle Menu").click(); - page.getByText("Flow Settings").click(); + page.locator('[aria-label="Service settings"]').click(); // Toggle flow online page.getByLabel("Offline").click(); @@ -219,7 +217,7 @@ test.describe("Navigation", () => { ).toBeVisible(); // Exit back to main Editor page - page.getByRole("link", { name: "Close" }).click(); + page.locator('[aria-label="Editor"]').click(); const previewLink = page.getByRole("link", { name: "Open published service", diff --git a/e2e/tests/ui-driven/src/create-flow/helpers.ts b/e2e/tests/ui-driven/src/create-flow/helpers.ts index edaea7b683..842cf6e430 100644 --- a/e2e/tests/ui-driven/src/create-flow/helpers.ts +++ b/e2e/tests/ui-driven/src/create-flow/helpers.ts @@ -29,6 +29,6 @@ export async function getTeamPage({ teamName: string; }): Promise { const page = await getAdminPage({ browser, userId }); - await page.locator("h2", { hasText: teamName }).click(); + await page.locator("h3", { hasText: teamName }).click(); return page; } diff --git a/e2e/tests/ui-driven/src/invite-to-pay/agent.spec.ts b/e2e/tests/ui-driven/src/invite-to-pay/agent.spec.ts index a31a1cfb53..7442170cf2 100644 --- a/e2e/tests/ui-driven/src/invite-to-pay/agent.spec.ts +++ b/e2e/tests/ui-driven/src/invite-to-pay/agent.spec.ts @@ -21,6 +21,7 @@ let context: Context = { ...contextDefaults, flow: { slug: "invite-to-pay-test", + name: "Invite to pay test", data: inviteToPayFlow, }, sessionIds: [], // used to collect and clean up sessions diff --git a/e2e/tests/ui-driven/src/invite-to-pay/mocks.ts b/e2e/tests/ui-driven/src/invite-to-pay/mocks.ts index bf68efb3a3..f9f64e1956 100644 --- a/e2e/tests/ui-driven/src/invite-to-pay/mocks.ts +++ b/e2e/tests/ui-driven/src/invite-to-pay/mocks.ts @@ -14,7 +14,7 @@ export const mockPaymentRequest: Partial = { _address: { title: "123, Test Street, Testville", }, - "proposal.projectType": ["alter.decks", "alter.internal.walls"], + "proposal.projectType": ["alter.decks", "alter.internal"], }, paymentAmount: 12345, applicantName: "Mr Agent (Agency Ltd)", @@ -44,7 +44,7 @@ export const mockSessionData: Omit = { }, "property.type": ["residential.dwelling.house.semiDetached"], "property.region": ["South East"], - "proposal.projectType": ["alter.decks", "alter.internal.walls"], + "proposal.projectType": ["alter.decks", "alter.internal"], "applicant.agent.email": "testAgent@opensystemslab.com", "application.fee.payable": 123.45, "_contact.applicant.agent": { diff --git a/e2e/tests/ui-driven/src/invite-to-pay/nominee.spec.ts b/e2e/tests/ui-driven/src/invite-to-pay/nominee.spec.ts index d200fc05bb..1d2276a048 100644 --- a/e2e/tests/ui-driven/src/invite-to-pay/nominee.spec.ts +++ b/e2e/tests/ui-driven/src/invite-to-pay/nominee.spec.ts @@ -18,6 +18,7 @@ let context: Context = { ...contextDefaults, flow: { slug: "invite-to-pay-test", + name: "Invite to pay test", data: inviteToPayFlow, }, sessionIds: [], // used to collect and clean up sessions @@ -55,7 +56,7 @@ test.describe("Nominee journey @regression", async () => { await expect(page.getByText("123, Test Street, Testville")).toBeVisible(); const formattedProjectType = - "Alteration of internal walls and addition or alteration of a deck"; + "Add a verandah or deck and changes to internal walls or layout"; await expect(page.getByText(formattedProjectType)).toBeVisible(); const payButton = page.getByRole("button", { diff --git a/e2e/tests/ui-driven/src/login.spec.ts b/e2e/tests/ui-driven/src/login.spec.ts index ea7df20615..62481fc98c 100644 --- a/e2e/tests/ui-driven/src/login.spec.ts +++ b/e2e/tests/ui-driven/src/login.spec.ts @@ -37,7 +37,7 @@ test.describe("Login", () => { return response.url().includes("/graphql"); }); - const team = page.locator("h2", { hasText: context.team.name }); + const team = page.locator("h3", { hasText: context.team.name }); await expect(team).toBeVisible(); }); @@ -50,7 +50,7 @@ test.describe("Login", () => { }); await page.goto("/"); - const teamLink = page.locator("h2").filter({ hasText: context.team.name }); + const teamLink = page.locator("h3").filter({ hasText: context.team.name }); await teamLink.waitFor(); // wait for this to be visible // drop graphql requests @@ -67,7 +67,7 @@ test.describe("Login", () => { route.continue(); }); await expect( - page.locator("h1").filter({ hasText: "My services" }), + page.locator("h1").filter({ hasText: "Services" }), ).toBeVisible(); await expect(page.getByText(toastText)).toBeHidden(); }); diff --git a/e2e/tests/ui-driven/src/mocks/flows/invite-to-pay-flow.ts b/e2e/tests/ui-driven/src/mocks/flows/invite-to-pay-flow.ts index 86579512ed..2618ad7f7a 100644 --- a/e2e/tests/ui-driven/src/mocks/flows/invite-to-pay-flow.ts +++ b/e2e/tests/ui-driven/src/mocks/flows/invite-to-pay-flow.ts @@ -30,7 +30,7 @@ const flow: FlowGraph = { }, IfcqOHdMyi: { data: { - val: "alter.internal.walls", + val: "alter.internal", text: "Alter internal walls", }, type: ComponentType.Answer, diff --git a/e2e/tests/ui-driven/src/pay.spec.ts b/e2e/tests/ui-driven/src/pay.spec.ts index c5974ae55d..c630746073 100644 --- a/e2e/tests/ui-driven/src/pay.spec.ts +++ b/e2e/tests/ui-driven/src/pay.spec.ts @@ -23,6 +23,7 @@ let context: Context = { ...contextDefaults, flow: { slug: "pay-test", + name: "Pay test", data: payFlow, }, sessionIds: [], // used to collect and clean up sessions diff --git a/e2e/tests/ui-driven/src/save-and-return.spec.ts b/e2e/tests/ui-driven/src/save-and-return.spec.ts index 0188ef8624..162615bad5 100644 --- a/e2e/tests/ui-driven/src/save-and-return.spec.ts +++ b/e2e/tests/ui-driven/src/save-and-return.spec.ts @@ -24,6 +24,7 @@ test.describe("Save and return", () => { ...contextDefaults, flow: { slug: "e2e-save-and-return-test-flow", + name: "E2E Save and Return test flow", data: simpleSendFlow, }, }; diff --git a/e2e/tests/ui-driven/src/sections.spec.ts b/e2e/tests/ui-driven/src/sections.spec.ts index c9189eb6eb..2a44985e8a 100644 --- a/e2e/tests/ui-driven/src/sections.spec.ts +++ b/e2e/tests/ui-driven/src/sections.spec.ts @@ -38,6 +38,7 @@ test.describe("Section statuses", () => { ...contextDefaults, flow: { slug: "sections-test-flow", + name: "Sections test flow", data: flow, }, }; diff --git a/editor.planx.uk/package.json b/editor.planx.uk/package.json index 7ea99be389..359c449e10 100644 --- a/editor.planx.uk/package.json +++ b/editor.planx.uk/package.json @@ -12,8 +12,8 @@ "@mui/lab": "5.0.0-alpha.170", "@mui/material": "^5.15.2", "@mui/utils": "^5.15.2", - "@opensystemslab/map": "^0.8.2", - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#550634a", + "@opensystemslab/map": "^0.8.3", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#6c2cc59", "@tiptap/core": "^2.4.0", "@tiptap/extension-bold": "^2.0.3", "@tiptap/extension-bubble-menu": "^2.1.13", @@ -35,11 +35,13 @@ "@tiptap/pm": "^2.0.3", "@tiptap/react": "^2.4.0", "@tiptap/suggestion": "^2.0.3", - "@turf/area": "^6.5.0", - "@turf/buffer": "^6.5.0", - "@turf/helpers": "^6.5.0", + "@turf/area": "^7.0.0", + "@turf/bbox": "^7.0.0", + "@turf/bbox-polygon": "^7.0.0", + "@turf/buffer": "^7.0.0", + "@turf/helpers": "^7.0.0", "array-move": "^4.0.0", - "axios": "^1.6.8", + "axios": "^1.7.2", "bowser": "^2.11.0", "camelcase-keys": "^9.0.0", "classnames": "^2.3.2", @@ -75,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", @@ -87,7 +89,7 @@ "wkt": "^0.1.1", "yup": "^0.32.11", "zod": "^3.22.4", - "zustand": "^4.3.8" + "zustand": "^4.5.4" }, "devDependencies": { "@babel/core": "^7.22.5", @@ -115,6 +117,7 @@ "@testing-library/user-event": "^14.4.3", "@types/dompurify": "^3.0.5", "@types/draft-js": "^0.11.12", + "@types/geojson": "^7946.0.14", "@types/jest": "^27.5.2", "@types/jest-axe": "^3.5.9", "@types/lodash": "^4.14.202", @@ -138,7 +141,7 @@ "eslint-config-prettier": "^9.0.0", "eslint-plugin-jsx-a11y": "^6.7.1", "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-simple-import-sort": "^10.0.0", + "eslint-plugin-simple-import-sort": "^12.1.0", "eslint-plugin-testing-library": "^5.11.1", "husky": "^8.0.3", "identity-obj-proxy": "^3.0.0", @@ -151,13 +154,14 @@ "react-refresh": "^0.14.0", "sass": "^1.71.1", "sass-loader": "^13.3.2", - "storybook": "^8.1.5", + "storybook": "^8.1.10", "storybook-addon-material-ui": "^0.9.0-alpha.24", "stream-browserify": "^3.0.0", "tsconfig-paths-webpack-plugin": "^4.0.1", "typescript": "^5.4.3", "webpack": "^5.91.0" }, + "packageManager": "pnpm@8.6.6", "scripts": { "start": "craco start", "build": "CI=false && craco build", @@ -219,7 +223,9 @@ "overrides": { "nth-check@<2.0.1": ">=2.0.1", "postcss@<8.4.31": ">=8.4.31", - "follow-redirects@<1.15.4": ">=1.15.4" + "follow-redirects@<1.15.4": ">=1.15.4", + "braces@<3.0.3": ">=3.0.3", + "fast-loops@<1.1.4": ">=1.1.4" } } -} \ No newline at end of file +} diff --git a/editor.planx.uk/pnpm-lock.yaml b/editor.planx.uk/pnpm-lock.yaml index 0900ce846b..d9c7e1ada3 100644 --- a/editor.planx.uk/pnpm-lock.yaml +++ b/editor.planx.uk/pnpm-lock.yaml @@ -8,6 +8,8 @@ overrides: 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' + fast-loops@<1.1.4: '>=1.1.4' dependencies: '@airbrake/browser': @@ -38,11 +40,11 @@ dependencies: specifier: ^5.15.2 version: 5.15.2(@types/react@18.2.45)(react@18.2.0) '@opensystemslab/map': - specifier: ^0.8.2 - version: 0.8.2 + specifier: ^0.8.3 + version: 0.8.3 '@opensystemslab/planx-core': - specifier: git+https://github.com/theopensystemslab/planx-core#550634a - version: github.com/theopensystemslab/planx-core/550634a(@types/react@18.2.45) + specifier: git+https://github.com/theopensystemslab/planx-core#6c2cc59 + version: github.com/theopensystemslab/planx-core/6c2cc59(@types/react@18.2.45) '@tiptap/core': specifier: ^2.4.0 version: 2.4.0(@tiptap/pm@2.0.3) @@ -107,20 +109,26 @@ dependencies: specifier: ^2.0.3 version: 2.0.3(@tiptap/core@2.4.0)(@tiptap/pm@2.0.3) '@turf/area': - specifier: ^6.5.0 - version: 6.5.0 + specifier: ^7.0.0 + version: 7.0.0 + '@turf/bbox': + specifier: ^7.0.0 + version: 7.0.0 + '@turf/bbox-polygon': + specifier: ^7.0.0 + version: 7.0.0 '@turf/buffer': - specifier: ^6.5.0 - version: 6.5.0 + specifier: ^7.0.0 + version: 7.0.0 '@turf/helpers': - specifier: ^6.5.0 - version: 6.5.0 + specifier: ^7.0.0 + version: 7.0.0 array-move: specifier: ^4.0.0 version: 4.0.0 axios: - specifier: ^1.6.8 - version: 1.6.8 + specifier: ^1.7.2 + version: 1.7.2 bowser: specifier: ^2.11.0 version: 2.11.0 @@ -222,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.5.7)(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 @@ -263,8 +271,8 @@ dependencies: specifier: ^3.22.4 version: 3.22.4 zustand: - specifier: ^4.3.8 - version: 4.3.8(immer@9.0.21)(react@18.2.0) + specifier: ^4.5.4 + version: 4.5.4(@types/react@18.2.45)(immer@9.0.21)(react@18.2.0) devDependencies: '@babel/core': @@ -290,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.5.7)(@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) @@ -320,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.5.7)(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 @@ -335,13 +343,16 @@ 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 '@types/draft-js': specifier: ^0.11.12 version: 0.11.12 + '@types/geojson': + specifier: ^7946.0.14 + version: 7946.0.14 '@types/jest': specifier: ^27.5.2 version: 27.5.2 @@ -412,8 +423,8 @@ devDependencies: specifier: ^4.6.0 version: 4.6.0(eslint@8.44.0) eslint-plugin-simple-import-sort: - specifier: ^10.0.0 - version: 10.0.0(eslint@8.44.0) + specifier: ^12.1.0 + version: 12.1.0(eslint@8.44.0) eslint-plugin-testing-library: specifier: ^5.11.1 version: 5.11.1(eslint@8.44.0)(typescript@5.4.3) @@ -451,8 +462,8 @@ devDependencies: specifier: ^13.3.2 version: 13.3.2(sass@1.71.1)(webpack@5.91.0) storybook: - specifier: ^8.1.5 - version: 8.1.5(@babel/preset-env@7.22.6)(react-dom@18.2.0)(react@18.2.0) + specifier: ^8.1.10 + version: 8.1.10(@babel/preset-env@7.22.6)(react-dom@18.2.0)(react@18.2.0) storybook-addon-material-ui: specifier: ^0.9.0-alpha.24 version: 0.9.0-alpha.24(@material-ui/core@4.12.4)(@storybook/addons@7.6.7)(@storybook/react@7.6.7)(prop-types@15.8.1)(react-dom@18.2.0)(react@18.2.0) @@ -467,12 +478,12 @@ devDependencies: version: 5.4.3 webpack: specifier: ^5.91.0 - version: 5.91.0(@swc/core@1.5.7)(esbuild@0.21.3) + version: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) packages: - /@adobe/css-tools@4.3.3: - resolution: {integrity: sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ==} + /@adobe/css-tools@4.4.0: + resolution: {integrity: sha512-Ff9+ksdQQB3rMncgqDK78uLznstjyfIf2Arnh22pW8kBpLs6rpKDwgnZT46hin5Hl1WzazzK64DOrhSwYpS7bQ==} dev: true /@airbrake/browser@2.1.8: @@ -499,19 +510,19 @@ packages: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - /@apideck/better-ajv-errors@0.3.6(ajv@8.13.0): + /@apideck/better-ajv-errors@0.3.6(ajv@8.16.0): resolution: {integrity: sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==} engines: {node: '>=10'} peerDependencies: ajv: '>=8' dependencies: - ajv: 8.13.0 + ajv: 8.16.0 json-schema: 0.4.0 jsonpointer: 5.0.1 leven: 3.1.0 - /@apidevtools/json-schema-ref-parser@11.6.2: - resolution: {integrity: sha512-ENUdLLT04aDbbHCRwfKf8gR67AhV0CdFrOAtk+FcakBAgaq6ds3HLK9X0BCyiFUz8pK9uP+k6YZyJaGG7Mt7vQ==} + /@apidevtools/json-schema-ref-parser@11.6.4: + resolution: {integrity: sha512-9K6xOqeevacvweLGik6LnZCb1fBtCOSIWQs8d096XGeqoLKC33UVMGz9+77Gw44KvbH4pKcQPWo4ZpxkXYj05w==} engines: {node: '>= 16'} dependencies: '@jsdevtools/ono': 7.1.3 @@ -551,7 +562,7 @@ packages: subscriptions-transport-ws: 0.11.0(graphql@16.8.1) symbol-observable: 4.0.0 ts-invariant: 0.10.3 - tslib: 2.6.2 + tslib: 2.6.3 zen-observable-ts: 1.2.5 dev: false @@ -562,15 +573,15 @@ packages: default-browser-id: 3.0.0 dev: true - /@babel/code-frame@7.24.2: - resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} + /@babel/code-frame@7.24.7: + resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/highlight': 7.24.5 + '@babel/highlight': 7.24.7 picocolors: 1.0.1 - /@babel/compat-data@7.24.4: - resolution: {integrity: sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==} + /@babel/compat-data@7.24.7: + resolution: {integrity: sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==} engines: {node: '>=6.9.0'} /@babel/core@7.22.5: @@ -578,146 +589,154 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.24.2 - '@babel/generator': 7.24.5 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-module-transforms': 7.24.5(@babel/core@7.22.5) - '@babel/helpers': 7.24.5 - '@babel/parser': 7.24.5 - '@babel/template': 7.24.0 - '@babel/traverse': 7.24.5 - '@babel/types': 7.24.5 + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.24.7 + '@babel/helper-compilation-targets': 7.24.7 + '@babel/helper-module-transforms': 7.24.7(@babel/core@7.22.5) + '@babel/helpers': 7.24.7 + '@babel/parser': 7.24.7 + '@babel/template': 7.24.7 + '@babel/traverse': 7.24.7 + '@babel/types': 7.24.7 convert-source-map: 1.9.0 - debug: 4.3.4 + debug: 4.3.5 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 transitivePeerDependencies: - supports-color - /@babel/core@7.24.5: - resolution: {integrity: sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==} + /@babel/core@7.24.7: + resolution: {integrity: sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.24.2 - '@babel/generator': 7.24.5 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5) - '@babel/helpers': 7.24.5 - '@babel/parser': 7.24.5 - '@babel/template': 7.24.0 - '@babel/traverse': 7.24.5 - '@babel/types': 7.24.5 + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.24.7 + '@babel/helper-compilation-targets': 7.24.7 + '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) + '@babel/helpers': 7.24.7 + '@babel/parser': 7.24.7 + '@babel/template': 7.24.7 + '@babel/traverse': 7.24.7 + '@babel/types': 7.24.7 convert-source-map: 2.0.0 - debug: 4.3.4 + debug: 4.3.5 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 transitivePeerDependencies: - supports-color + dev: true - /@babel/eslint-parser@7.24.5(@babel/core@7.24.5)(eslint@8.44.0): - resolution: {integrity: sha512-gsUcqS/fPlgAw1kOtpss7uhY6E9SFFANQ6EFX5GTvzUwaV0+sGaZWk6xq22MOdeT9wfxyokW3ceCUvOiRtZciQ==} + /@babel/eslint-parser@7.24.7(@babel/core@7.22.5)(eslint@8.44.0): + resolution: {integrity: sha512-SO5E3bVxDuxyNxM5agFv480YA2HO6ohZbGxbazZdIk3KQOPOGVNw6q78I9/lbviIf95eq6tPozeYnJLbjnC8IA==} engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} peerDependencies: '@babel/core': ^7.11.0 eslint: ^7.5.0 || ^8.0.0 || ^9.0.0 dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.22.5 '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 eslint: 8.44.0 eslint-visitor-keys: 2.1.0 semver: 6.3.1 - /@babel/generator@7.24.5: - resolution: {integrity: sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==} + /@babel/generator@7.24.7: + resolution: {integrity: sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.24.7 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 - /@babel/helper-annotate-as-pure@7.22.5: - resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} + /@babel/helper-annotate-as-pure@7.24.7: + resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.24.7 - /@babel/helper-builder-binary-assignment-operator-visitor@7.22.15: - resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==} + /@babel/helper-builder-binary-assignment-operator-visitor@7.24.7: + resolution: {integrity: sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.5 + '@babel/traverse': 7.24.7 + '@babel/types': 7.24.7 + transitivePeerDependencies: + - supports-color - /@babel/helper-compilation-targets@7.23.6: - resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} + /@babel/helper-compilation-targets@7.24.7: + resolution: {integrity: sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/compat-data': 7.24.4 - '@babel/helper-validator-option': 7.23.5 - browserslist: 4.23.0 + '@babel/compat-data': 7.24.7 + '@babel/helper-validator-option': 7.24.7 + browserslist: 4.23.2 lru-cache: 5.1.1 semver: 6.3.1 - /@babel/helper-create-class-features-plugin@7.24.5(@babel/core@7.22.5): - resolution: {integrity: sha512-uRc4Cv8UQWnE4NXlYTIIdM7wfFkOqlFztcC/gVXDKohKoVB3OyonfelUBaJzSwpBntZ2KYGF/9S7asCHsXwW6g==} + /@babel/helper-create-class-features-plugin@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-kTkaDl7c9vO80zeX1rJxnuRpEsD5tA81yh11X1gQo+PhSti3JS+7qeZo9U4RHobKRiFPKaGK3svUAeb8D0Q7eg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-member-expression-to-functions': 7.24.5 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.24.1(@babel/core@7.22.5) - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/helper-split-export-declaration': 7.24.5 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-function-name': 7.24.7 + '@babel/helper-member-expression-to-functions': 7.24.7 + '@babel/helper-optimise-call-expression': 7.24.7 + '@babel/helper-replace-supers': 7.24.7(@babel/core@7.22.5) + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/helper-split-export-declaration': 7.24.7 semver: 6.3.1 - dev: true + transitivePeerDependencies: + - supports-color - /@babel/helper-create-class-features-plugin@7.24.5(@babel/core@7.24.5): - resolution: {integrity: sha512-uRc4Cv8UQWnE4NXlYTIIdM7wfFkOqlFztcC/gVXDKohKoVB3OyonfelUBaJzSwpBntZ2KYGF/9S7asCHsXwW6g==} + /@babel/helper-create-class-features-plugin@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-kTkaDl7c9vO80zeX1rJxnuRpEsD5tA81yh11X1gQo+PhSti3JS+7qeZo9U4RHobKRiFPKaGK3svUAeb8D0Q7eg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-member-expression-to-functions': 7.24.5 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.5) - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/helper-split-export-declaration': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-function-name': 7.24.7 + '@babel/helper-member-expression-to-functions': 7.24.7 + '@babel/helper-optimise-call-expression': 7.24.7 + '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.7) + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/helper-split-export-declaration': 7.24.7 semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true - /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.22.5): - resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} + /@babel/helper-create-regexp-features-plugin@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-03TCmXy2FtXJEZfbXDTSqq1fRJArk7lX9DOFC/47VthYcxyIOx+eXQmdo6DOQvrbpIix+KfXwvuXdFDZHxt+rA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-annotate-as-pure': 7.24.7 regexpu-core: 5.3.2 semver: 6.3.1 - dev: true - /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.24.5): - resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} + /@babel/helper-create-regexp-features-plugin@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-03TCmXy2FtXJEZfbXDTSqq1fRJArk7lX9DOFC/47VthYcxyIOx+eXQmdo6DOQvrbpIix+KfXwvuXdFDZHxt+rA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/core': 7.24.7 + '@babel/helper-annotate-as-pure': 7.24.7 regexpu-core: 5.3.2 semver: 6.3.1 + dev: true /@babel/helper-define-polyfill-provider@0.4.4(@babel/core@7.22.5): resolution: {integrity: sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA==} @@ -725,14 +744,13 @@ packages: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.24.5 - debug: 4.3.4 + '@babel/helper-compilation-targets': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + debug: 4.3.5 lodash.debounce: 4.0.8 resolve: 1.22.8 transitivePeerDependencies: - supports-color - dev: true /@babel/helper-define-polyfill-provider@0.5.0(@babel/core@7.22.5): resolution: {integrity: sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==} @@ -740,14 +758,13 @@ packages: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.24.5 - debug: 4.3.4 + '@babel/helper-compilation-targets': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + debug: 4.3.5 lodash.debounce: 4.0.8 resolve: 1.22.8 transitivePeerDependencies: - supports-color - dev: true /@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.22.5): resolution: {integrity: sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==} @@ -755,287 +772,324 @@ packages: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.24.5 - debug: 4.3.4 + '@babel/helper-compilation-targets': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + debug: 4.3.5 lodash.debounce: 4.0.8 resolve: 1.22.8 transitivePeerDependencies: - supports-color - dev: true - /@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.24.5): + /@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.24.7): resolution: {integrity: sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.24.5 - debug: 4.3.4 + '@babel/core': 7.24.7 + '@babel/helper-compilation-targets': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + debug: 4.3.5 lodash.debounce: 4.0.8 resolve: 1.22.8 transitivePeerDependencies: - supports-color + dev: true - /@babel/helper-environment-visitor@7.22.20: - resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} + /@babel/helper-environment-visitor@7.24.7: + resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.7 - /@babel/helper-function-name@7.23.0: - resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} + /@babel/helper-function-name@7.24.7: + resolution: {integrity: sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.24.0 - '@babel/types': 7.24.5 + '@babel/template': 7.24.7 + '@babel/types': 7.24.7 - /@babel/helper-hoist-variables@7.22.5: - resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} + /@babel/helper-hoist-variables@7.24.7: + resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.24.7 - /@babel/helper-member-expression-to-functions@7.24.5: - resolution: {integrity: sha512-4owRteeihKWKamtqg4JmWSsEZU445xpFRXPEwp44HbgbxdWlUV1b4Agg4lkA806Lil5XM/e+FJyS0vj5T6vmcA==} + /@babel/helper-member-expression-to-functions@7.24.7: + resolution: {integrity: sha512-LGeMaf5JN4hAT471eJdBs/GK1DoYIJ5GCtZN/EsL6KUiiDZOvO/eKE11AMZJa2zP4zk4qe9V2O/hxAmkRc8p6w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.5 + '@babel/traverse': 7.24.7 + '@babel/types': 7.24.7 + transitivePeerDependencies: + - supports-color - /@babel/helper-module-imports@7.24.3: - resolution: {integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==} + /@babel/helper-module-imports@7.24.7: + resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.5 + '@babel/traverse': 7.24.7 + '@babel/types': 7.24.7 + transitivePeerDependencies: + - supports-color - /@babel/helper-module-transforms@7.24.5(@babel/core@7.22.5): - resolution: {integrity: sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A==} + /@babel/helper-module-transforms@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.24.3 - '@babel/helper-simple-access': 7.24.5 - '@babel/helper-split-export-declaration': 7.24.5 - '@babel/helper-validator-identifier': 7.24.5 - - /@babel/helper-module-transforms@7.24.5(@babel/core@7.24.5): - resolution: {integrity: sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A==} + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-module-imports': 7.24.7 + '@babel/helper-simple-access': 7.24.7 + '@babel/helper-split-export-declaration': 7.24.7 + '@babel/helper-validator-identifier': 7.24.7 + transitivePeerDependencies: + - supports-color + + /@babel/helper-module-transforms@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.24.3 - '@babel/helper-simple-access': 7.24.5 - '@babel/helper-split-export-declaration': 7.24.5 - '@babel/helper-validator-identifier': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-module-imports': 7.24.7 + '@babel/helper-simple-access': 7.24.7 + '@babel/helper-split-export-declaration': 7.24.7 + '@babel/helper-validator-identifier': 7.24.7 + transitivePeerDependencies: + - supports-color + dev: true - /@babel/helper-optimise-call-expression@7.22.5: - resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} + /@babel/helper-optimise-call-expression@7.24.7: + resolution: {integrity: sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.24.7 - /@babel/helper-plugin-utils@7.24.5: - resolution: {integrity: sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ==} + /@babel/helper-plugin-utils@7.24.7: + resolution: {integrity: sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==} engines: {node: '>=6.9.0'} - /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.22.5): - resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} + /@babel/helper-remap-async-to-generator@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-9pKLcTlZ92hNZMQfGCHImUpDOlAgkkpqalWEeftW5FBya75k8Li2ilerxkM/uBEj01iBZXcCIB/bwvDYgWyibA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-wrap-function': 7.24.5 - dev: true + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-wrap-function': 7.24.7 + transitivePeerDependencies: + - supports-color - /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.24.5): - resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} + /@babel/helper-remap-async-to-generator@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-9pKLcTlZ92hNZMQfGCHImUpDOlAgkkpqalWEeftW5FBya75k8Li2ilerxkM/uBEj01iBZXcCIB/bwvDYgWyibA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-wrap-function': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-wrap-function': 7.24.7 + transitivePeerDependencies: + - supports-color + dev: true - /@babel/helper-replace-supers@7.24.1(@babel/core@7.22.5): - resolution: {integrity: sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==} + /@babel/helper-replace-supers@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-qTAxxBM81VEyoAY0TtLrx1oAEJc09ZK67Q9ljQToqCnA+55eNwCORaxlKyu+rNfX86o8OXRUSNUnrtsAZXM9sg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-member-expression-to-functions': 7.24.5 - '@babel/helper-optimise-call-expression': 7.22.5 - dev: true + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-member-expression-to-functions': 7.24.7 + '@babel/helper-optimise-call-expression': 7.24.7 + transitivePeerDependencies: + - supports-color - /@babel/helper-replace-supers@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==} + /@babel/helper-replace-supers@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-qTAxxBM81VEyoAY0TtLrx1oAEJc09ZK67Q9ljQToqCnA+55eNwCORaxlKyu+rNfX86o8OXRUSNUnrtsAZXM9sg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-member-expression-to-functions': 7.24.5 - '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/core': 7.24.7 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-member-expression-to-functions': 7.24.7 + '@babel/helper-optimise-call-expression': 7.24.7 + transitivePeerDependencies: + - supports-color + dev: true - /@babel/helper-simple-access@7.24.5: - resolution: {integrity: sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ==} + /@babel/helper-simple-access@7.24.7: + resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.5 + '@babel/traverse': 7.24.7 + '@babel/types': 7.24.7 + transitivePeerDependencies: + - supports-color - /@babel/helper-skip-transparent-expression-wrappers@7.22.5: - resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} + /@babel/helper-skip-transparent-expression-wrappers@7.24.7: + resolution: {integrity: sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.5 + '@babel/traverse': 7.24.7 + '@babel/types': 7.24.7 + transitivePeerDependencies: + - supports-color - /@babel/helper-split-export-declaration@7.24.5: - resolution: {integrity: sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==} + /@babel/helper-split-export-declaration@7.24.7: + resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.24.7 - /@babel/helper-string-parser@7.24.1: - resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} + /@babel/helper-string-parser@7.24.7: + resolution: {integrity: sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==} engines: {node: '>=6.9.0'} - /@babel/helper-validator-identifier@7.24.5: - resolution: {integrity: sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==} + /@babel/helper-validator-identifier@7.24.7: + resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} engines: {node: '>=6.9.0'} - /@babel/helper-validator-option@7.23.5: - resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} + /@babel/helper-validator-option@7.24.7: + resolution: {integrity: sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==} engines: {node: '>=6.9.0'} - /@babel/helper-wrap-function@7.24.5: - resolution: {integrity: sha512-/xxzuNvgRl4/HLNKvnFwdhdgN3cpLxgLROeLDl83Yx0AJ1SGvq1ak0OszTOjDfiB8Vx03eJbeDWh9r+jCCWttw==} + /@babel/helper-wrap-function@7.24.7: + resolution: {integrity: sha512-N9JIYk3TD+1vq/wn77YnJOqMtfWhNewNE+DJV4puD2X7Ew9J4JvrzrFDfTfyv5EgEXVy9/Wt8QiOErzEmv5Ifw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-function-name': 7.23.0 - '@babel/template': 7.24.0 - '@babel/types': 7.24.5 + '@babel/helper-function-name': 7.24.7 + '@babel/template': 7.24.7 + '@babel/traverse': 7.24.7 + '@babel/types': 7.24.7 + transitivePeerDependencies: + - supports-color - /@babel/helpers@7.24.5: - resolution: {integrity: sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==} + /@babel/helpers@7.24.7: + resolution: {integrity: sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.24.0 - '@babel/traverse': 7.24.5 - '@babel/types': 7.24.5 - transitivePeerDependencies: - - supports-color + '@babel/template': 7.24.7 + '@babel/types': 7.24.7 - /@babel/highlight@7.24.5: - resolution: {integrity: sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==} + /@babel/highlight@7.24.7: + resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.24.5 + '@babel/helper-validator-identifier': 7.24.7 chalk: 2.4.2 js-tokens: 4.0.0 picocolors: 1.0.1 - /@babel/parser@7.24.5: - resolution: {integrity: sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==} + /@babel/parser@7.24.7: + resolution: {integrity: sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.24.7 - /@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.5(@babel/core@7.24.5): - resolution: {integrity: sha512-LdXRi1wEMTrHVR4Zc9F8OewC3vdm5h4QB6L71zy6StmYeqGi1b3ttIO8UC+BfZKcH9jdr4aI249rBkm+3+YvHw==} + /@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-TiT1ss81W80eQsN+722OaeQMY/G4yTb4G9JrqeiDADs3N8lbPMGldWi9x8tyqCW5NLx1Jh2AvkE6r6QvEltMMQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + dev: true - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.1(@babel/core@7.22.5): - resolution: {integrity: sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg==} + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-unaQgZ/iRu/By6tsjMZzpeBZjChYfLYry6HrEXPoz3KmfF0sVBQ1l8zKMQ4xRGLWVsjuvB8nQfjNP/DcfEOCsg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 - dev: true + '@babel/helper-plugin-utils': 7.24.7 - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg==} + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-unaQgZ/iRu/By6tsjMZzpeBZjChYfLYry6HrEXPoz3KmfF0sVBQ1l8zKMQ4xRGLWVsjuvB8nQfjNP/DcfEOCsg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + dev: true - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.1(@babel/core@7.22.5): - resolution: {integrity: sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ==} + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-transform-optional-chaining': 7.24.5(@babel/core@7.22.5) - dev: true + '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/plugin-transform-optional-chaining': 7.24.7(@babel/core@7.22.5) + transitivePeerDependencies: + - supports-color - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ==} + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-transform-optional-chaining': 7.24.5(@babel/core@7.24.5) + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/plugin-transform-optional-chaining': 7.24.7(@babel/core@7.24.7) + transitivePeerDependencies: + - supports-color + dev: true - /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw==} + /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-utA4HuR6F4Vvcr+o4DnjL8fCOlgRFGbeeBEGNg3ZTrLFw6VWG5XmUrvcQ0FjIYMU2ST4XcR2Wsp7t9qOAPnxMg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + dev: true - /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.24.5): + /@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: - '@babel/core': 7.24.5 - '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.24.7 + transitivePeerDependencies: + - supports-color - /@babel/plugin-proposal-decorators@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-zPEvzFijn+hRvJuX2Vu3KbEBN39LN3f7tW3MQO2LsIs57B26KU+kUc82BdAktS1VCM6libzh45eKGI65lg0cpA==} + /@babel/plugin-proposal-decorators@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-RL9GR0pUG5Kc8BUWLNDm2T5OpYwSX15r98I0IkgmRQTXuELq/OynH8xtMTMvTJFjXbMWFVTKtYkTaYQsuAwQlQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-decorators': 7.24.1(@babel/core@7.24.5) + '@babel/core': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.24.7 + '@babel/plugin-syntax-decorators': 7.24.7(@babel/core@7.22.5) + transitivePeerDependencies: + - supports-color /@babel/plugin-proposal-logical-assignment-operators@7.20.7(@babel/core@7.22.5): resolution: {integrity: sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==} @@ -1045,54 +1099,58 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.5) dev: true - /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.24.5): + /@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: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.5) + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.5) - /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.24.5): + /@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: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.5) + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.5) - /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.24.5): + /@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: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.5) + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.5) + transitivePeerDependencies: + - supports-color - /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.24.5): + /@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: - '@babel/core': 7.24.5 - '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.24.7 + transitivePeerDependencies: + - supports-color /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.22.5): resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} @@ -1101,28 +1159,30 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - dev: true - /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.5): + /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.7): resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.24.7 + dev: true - /@babel/plugin-proposal-private-property-in-object@7.21.11(@babel/core@7.24.5): + /@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: - '@babel/core': 7.24.5 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.5) + '@babel/core': 7.22.5 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.24.7 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.5) + transitivePeerDependencies: + - supports-color /@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.22.5): resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} @@ -1132,9 +1192,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.22.5) - '@babel/helper-plugin-utils': 7.24.5 - dev: true + '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.24.7 /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.22.5): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} @@ -1142,15 +1201,16 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.7 - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.5): + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.7): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + dev: true /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.22.5): resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} @@ -1158,15 +1218,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 - - /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.24.5): - resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.7 /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.22.5): resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} @@ -1174,15 +1226,16 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.7 - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.5): + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.7): resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + dev: true /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.22.5): resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} @@ -1191,26 +1244,26 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 - dev: true + '@babel/helper-plugin-utils': 7.24.7 - /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.5): + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.7): resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + dev: true - /@babel/plugin-syntax-decorators@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-05RJdO/cCrtVWuAaSn1tS3bH8jbsJa/Y1uD186u6J4C/1mnHFxseeuWpsqr9anvo7TUulev7tm7GDwRV+VuhDw==} + /@babel/plugin-syntax-decorators@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-Ui4uLJJrRV1lb38zg1yYTmRKmiZLiftDEvZN2iq3kd9kUFU+PttmzTbAFC2ucRk/XJmtek6G23gPsuZbhrT8fQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.24.7 /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.22.5): resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} @@ -1218,16 +1271,16 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 - dev: true + '@babel/helper-plugin-utils': 7.24.7 - /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.24.5): + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.24.7): resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + dev: true /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.22.5): resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} @@ -1235,16 +1288,16 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 - dev: true + '@babel/helper-plugin-utils': 7.24.7 - /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.24.5): + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.24.7): resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + dev: true /@babel/plugin-syntax-flow@7.23.3(@babel/core@7.22.5): resolution: {integrity: sha512-YZiAIpkJAwQXBJLIQbRFayR5c+gJ35Vcz3bg954k7cd73zqjvhacJuL9RbrzPz8qPmZdgqP6EUKwy0PCNhaaPA==} @@ -1253,64 +1306,64 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.7 - /@babel/plugin-syntax-flow@7.24.1(@babel/core@7.22.5): - resolution: {integrity: sha512-sxi2kLTI5DeW5vDtMUsk4mTPwvlUDbjOnoWayhynCwrw4QXRld4QEYwqzY8JmQXaJUtgUuCIurtSRH5sn4c7mA==} + /@babel/plugin-syntax-flow@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-9G8GYT/dxn/D1IIKOUBmGX0mnmj46mGH9NnZyJLwtCpgh5f7D2VbuKodb+2s9m1Yavh1s7ASQN8lf0eqrb1LTw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 - dev: true + '@babel/helper-plugin-utils': 7.24.7 - /@babel/plugin-syntax-flow@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-sxi2kLTI5DeW5vDtMUsk4mTPwvlUDbjOnoWayhynCwrw4QXRld4QEYwqzY8JmQXaJUtgUuCIurtSRH5sn4c7mA==} + /@babel/plugin-syntax-flow@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-9G8GYT/dxn/D1IIKOUBmGX0mnmj46mGH9NnZyJLwtCpgh5f7D2VbuKodb+2s9m1Yavh1s7ASQN8lf0eqrb1LTw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + dev: true - /@babel/plugin-syntax-import-assertions@7.24.1(@babel/core@7.22.5): - resolution: {integrity: sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==} + /@babel/plugin-syntax-import-assertions@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 - dev: true + '@babel/helper-plugin-utils': 7.24.7 - /@babel/plugin-syntax-import-assertions@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==} + /@babel/plugin-syntax-import-assertions@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + dev: true - /@babel/plugin-syntax-import-attributes@7.24.1(@babel/core@7.22.5): - resolution: {integrity: sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA==} + /@babel/plugin-syntax-import-attributes@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 - dev: true + '@babel/helper-plugin-utils': 7.24.7 - /@babel/plugin-syntax-import-attributes@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA==} + /@babel/plugin-syntax-import-attributes@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + dev: true /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.22.5): resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} @@ -1318,15 +1371,16 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.7 - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.5): + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.7): resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + dev: true /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.22.5): resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} @@ -1334,33 +1388,35 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.7 - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.5): + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.7): resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + dev: true - /@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.22.5): - resolution: {integrity: sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==} + /@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.7 - /@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==} + /@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + dev: true /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.22.5): resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} @@ -1368,15 +1424,16 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.7 - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.5): + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.7): resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + dev: true /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.22.5): resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} @@ -1384,15 +1441,16 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.7 - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.5): + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.7): resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + dev: true /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.22.5): resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} @@ -1400,15 +1458,16 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.7 - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.5): + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.7): resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + dev: true /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.22.5): resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} @@ -1416,15 +1475,16 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.7 - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.5): + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.7): resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + dev: true /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.22.5): resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} @@ -1432,15 +1492,16 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.7 - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.5): + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.7): resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + dev: true /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.22.5): resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} @@ -1448,15 +1509,16 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.7 - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.5): + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.7): resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + dev: true /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.22.5): resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} @@ -1465,17 +1527,17 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 - dev: true + '@babel/helper-plugin-utils': 7.24.7 - /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.5): + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.7): resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + dev: true /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.22.5): resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} @@ -1484,35 +1546,36 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.7 - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.5): + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.7): resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + dev: true - /@babel/plugin-syntax-typescript@7.24.1(@babel/core@7.22.5): - resolution: {integrity: sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==} + /@babel/plugin-syntax-typescript@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 - dev: true + '@babel/helper-plugin-utils': 7.24.7 - /@babel/plugin-syntax-typescript@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==} + /@babel/plugin-syntax-typescript@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + dev: true /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.22.5): resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} @@ -1521,882 +1584,924 @@ packages: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.22.5) - '@babel/helper-plugin-utils': 7.24.5 - dev: true + '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.24.7 - /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.24.5): + /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.24.7): resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.7 + dev: true - /@babel/plugin-transform-arrow-functions@7.24.1(@babel/core@7.22.5): - resolution: {integrity: sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw==} + /@babel/plugin-transform-arrow-functions@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 - dev: true + '@babel/helper-plugin-utils': 7.24.7 - /@babel/plugin-transform-arrow-functions@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw==} + /@babel/plugin-transform-arrow-functions@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + dev: true - /@babel/plugin-transform-async-generator-functions@7.24.3(@babel/core@7.22.5): - resolution: {integrity: sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg==} + /@babel/plugin-transform-async-generator-functions@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-o+iF77e3u7ZS4AoAuJvapz9Fm001PuD2V3Lp6OSE4FYQke+cSewYtnek+THqGRWyQloRCyvWL1OkyfNEl9vr/g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.22.5) + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-remap-async-to-generator': 7.24.7(@babel/core@7.22.5) '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.5) - dev: true + transitivePeerDependencies: + - supports-color - /@babel/plugin-transform-async-generator-functions@7.24.3(@babel/core@7.24.5): - resolution: {integrity: sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg==} + /@babel/plugin-transform-async-generator-functions@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-o+iF77e3u7ZS4AoAuJvapz9Fm001PuD2V3Lp6OSE4FYQke+cSewYtnek+THqGRWyQloRCyvWL1OkyfNEl9vr/g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.5) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.5) + '@babel/core': 7.24.7 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-remap-async-to-generator': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.7) + transitivePeerDependencies: + - supports-color + dev: true - /@babel/plugin-transform-async-to-generator@7.24.1(@babel/core@7.22.5): - resolution: {integrity: sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw==} + /@babel/plugin-transform-async-to-generator@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-module-imports': 7.24.3 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.22.5) - dev: true + '@babel/helper-module-imports': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-remap-async-to-generator': 7.24.7(@babel/core@7.22.5) + transitivePeerDependencies: + - supports-color - /@babel/plugin-transform-async-to-generator@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw==} + /@babel/plugin-transform-async-to-generator@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-module-imports': 7.24.3 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.5) + '@babel/core': 7.24.7 + '@babel/helper-module-imports': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-remap-async-to-generator': 7.24.7(@babel/core@7.24.7) + transitivePeerDependencies: + - supports-color + dev: true - /@babel/plugin-transform-block-scoped-functions@7.24.1(@babel/core@7.22.5): - resolution: {integrity: sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg==} + /@babel/plugin-transform-block-scoped-functions@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 - dev: true + '@babel/helper-plugin-utils': 7.24.7 - /@babel/plugin-transform-block-scoped-functions@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg==} + /@babel/plugin-transform-block-scoped-functions@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + dev: true - /@babel/plugin-transform-block-scoping@7.24.5(@babel/core@7.22.5): - resolution: {integrity: sha512-sMfBc3OxghjC95BkYrYocHL3NaOplrcaunblzwXhGmlPwpmfsxr4vK+mBBt49r+S240vahmv+kUxkeKgs+haCw==} + /@babel/plugin-transform-block-scoping@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-Nd5CvgMbWc+oWzBsuaMcbwjJWAcp5qzrbg69SZdHSP7AMY0AbWFqFO0WTFCA1jxhMCwodRwvRec8k0QUbZk7RQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 - dev: true + '@babel/helper-plugin-utils': 7.24.7 - /@babel/plugin-transform-block-scoping@7.24.5(@babel/core@7.24.5): - resolution: {integrity: sha512-sMfBc3OxghjC95BkYrYocHL3NaOplrcaunblzwXhGmlPwpmfsxr4vK+mBBt49r+S240vahmv+kUxkeKgs+haCw==} + /@babel/plugin-transform-block-scoping@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-Nd5CvgMbWc+oWzBsuaMcbwjJWAcp5qzrbg69SZdHSP7AMY0AbWFqFO0WTFCA1jxhMCwodRwvRec8k0QUbZk7RQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + dev: true - /@babel/plugin-transform-class-properties@7.24.1(@babel/core@7.22.5): - resolution: {integrity: sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g==} + /@babel/plugin-transform-class-properties@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.22.5) - '@babel/helper-plugin-utils': 7.24.5 - dev: true + '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.24.7 + transitivePeerDependencies: + - supports-color - /@babel/plugin-transform-class-properties@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g==} + /@babel/plugin-transform-class-properties@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.7 + transitivePeerDependencies: + - supports-color + dev: true - /@babel/plugin-transform-class-static-block@7.24.4(@babel/core@7.22.5): - resolution: {integrity: sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg==} + /@babel/plugin-transform-class-static-block@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.22.5) - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.22.5) - dev: true + transitivePeerDependencies: + - supports-color - /@babel/plugin-transform-class-static-block@7.24.4(@babel/core@7.24.5): - resolution: {integrity: sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg==} + /@babel/plugin-transform-class-static-block@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.5) + '@babel/core': 7.24.7 + '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.7 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.7) + transitivePeerDependencies: + - supports-color + dev: true - /@babel/plugin-transform-classes@7.24.5(@babel/core@7.22.5): - resolution: {integrity: sha512-gWkLP25DFj2dwe9Ck8uwMOpko4YsqyfZJrOmqqcegeDYEbp7rmn4U6UQZNj08UF6MaX39XenSpKRCvpDRBtZ7Q==} + /@babel/plugin-transform-classes@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-CFbbBigp8ln4FU6Bpy6g7sE8B/WmCmzvivzUC6xDAdWVsjYTXijpuuGJmYkAaoWAzcItGKT3IOAbxRItZ5HTjw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-replace-supers': 7.24.1(@babel/core@7.22.5) - '@babel/helper-split-export-declaration': 7.24.5 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-compilation-targets': 7.24.7 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-function-name': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-replace-supers': 7.24.7(@babel/core@7.22.5) + '@babel/helper-split-export-declaration': 7.24.7 globals: 11.12.0 - dev: true + transitivePeerDependencies: + - supports-color - /@babel/plugin-transform-classes@7.24.5(@babel/core@7.24.5): - resolution: {integrity: sha512-gWkLP25DFj2dwe9Ck8uwMOpko4YsqyfZJrOmqqcegeDYEbp7rmn4U6UQZNj08UF6MaX39XenSpKRCvpDRBtZ7Q==} + /@babel/plugin-transform-classes@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-CFbbBigp8ln4FU6Bpy6g7sE8B/WmCmzvivzUC6xDAdWVsjYTXijpuuGJmYkAaoWAzcItGKT3IOAbxRItZ5HTjw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.5) - '@babel/helper-split-export-declaration': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-compilation-targets': 7.24.7 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-function-name': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.7) + '@babel/helper-split-export-declaration': 7.24.7 globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true - /@babel/plugin-transform-computed-properties@7.24.1(@babel/core@7.22.5): - resolution: {integrity: sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw==} + /@babel/plugin-transform-computed-properties@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/template': 7.24.0 - dev: true + '@babel/helper-plugin-utils': 7.24.7 + '@babel/template': 7.24.7 - /@babel/plugin-transform-computed-properties@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw==} + /@babel/plugin-transform-computed-properties@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/template': 7.24.0 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/template': 7.24.7 + dev: true - /@babel/plugin-transform-destructuring@7.24.5(@babel/core@7.22.5): - resolution: {integrity: sha512-SZuuLyfxvsm+Ah57I/i1HVjveBENYK9ue8MJ7qkc7ndoNjqquJiElzA7f5yaAXjyW2hKojosOTAQQRX50bPSVg==} + /@babel/plugin-transform-destructuring@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-19eJO/8kdCQ9zISOf+SEUJM/bAUIsvY3YDnXZTupUCQ8LgrWnsG/gFB9dvXqdXnRXMAM8fvt7b0CBKQHNGy1mw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 - dev: true + '@babel/helper-plugin-utils': 7.24.7 - /@babel/plugin-transform-destructuring@7.24.5(@babel/core@7.24.5): - resolution: {integrity: sha512-SZuuLyfxvsm+Ah57I/i1HVjveBENYK9ue8MJ7qkc7ndoNjqquJiElzA7f5yaAXjyW2hKojosOTAQQRX50bPSVg==} + /@babel/plugin-transform-destructuring@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-19eJO/8kdCQ9zISOf+SEUJM/bAUIsvY3YDnXZTupUCQ8LgrWnsG/gFB9dvXqdXnRXMAM8fvt7b0CBKQHNGy1mw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + dev: true - /@babel/plugin-transform-dotall-regex@7.24.1(@babel/core@7.22.5): - resolution: {integrity: sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw==} + /@babel/plugin-transform-dotall-regex@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.22.5) - '@babel/helper-plugin-utils': 7.24.5 - dev: true + '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.24.7 - /@babel/plugin-transform-dotall-regex@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw==} + /@babel/plugin-transform-dotall-regex@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.7 + dev: true - /@babel/plugin-transform-duplicate-keys@7.24.1(@babel/core@7.22.5): - resolution: {integrity: sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA==} + /@babel/plugin-transform-duplicate-keys@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 - dev: true + '@babel/helper-plugin-utils': 7.24.7 - /@babel/plugin-transform-duplicate-keys@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA==} + /@babel/plugin-transform-duplicate-keys@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + dev: true - /@babel/plugin-transform-dynamic-import@7.24.1(@babel/core@7.22.5): - resolution: {integrity: sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA==} + /@babel/plugin-transform-dynamic-import@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.5) - dev: true - /@babel/plugin-transform-dynamic-import@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA==} + /@babel/plugin-transform-dynamic-import@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.5) + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.7) + dev: true - /@babel/plugin-transform-exponentiation-operator@7.24.1(@babel/core@7.22.5): - resolution: {integrity: sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw==} + /@babel/plugin-transform-exponentiation-operator@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 - '@babel/helper-plugin-utils': 7.24.5 - dev: true + '@babel/helper-builder-binary-assignment-operator-visitor': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + transitivePeerDependencies: + - supports-color - /@babel/plugin-transform-exponentiation-operator@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw==} + /@babel/plugin-transform-exponentiation-operator@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + transitivePeerDependencies: + - supports-color + dev: true - /@babel/plugin-transform-export-namespace-from@7.24.1(@babel/core@7.22.5): - resolution: {integrity: sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ==} + /@babel/plugin-transform-export-namespace-from@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.22.5) - dev: true - /@babel/plugin-transform-export-namespace-from@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ==} + /@babel/plugin-transform-export-namespace-from@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.5) + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.7) + dev: true - /@babel/plugin-transform-flow-strip-types@7.24.1(@babel/core@7.22.5): - resolution: {integrity: sha512-iIYPIWt3dUmUKKE10s3W+jsQ3icFkw0JyRVyY1B7G4yK/nngAOHLVx8xlhA6b/Jzl/Y0nis8gjqhqKtRDQqHWQ==} + /@babel/plugin-transform-flow-strip-types@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-cjRKJ7FobOH2eakx7Ja+KpJRj8+y+/SiB3ooYm/n2UJfxu0oEaOoxOinitkJcPqv9KxS0kxTGPUaR7L2XcXDXA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-flow': 7.24.1(@babel/core@7.22.5) - dev: true + '@babel/helper-plugin-utils': 7.24.7 + '@babel/plugin-syntax-flow': 7.24.7(@babel/core@7.22.5) - /@babel/plugin-transform-flow-strip-types@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-iIYPIWt3dUmUKKE10s3W+jsQ3icFkw0JyRVyY1B7G4yK/nngAOHLVx8xlhA6b/Jzl/Y0nis8gjqhqKtRDQqHWQ==} + /@babel/plugin-transform-flow-strip-types@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-cjRKJ7FobOH2eakx7Ja+KpJRj8+y+/SiB3ooYm/n2UJfxu0oEaOoxOinitkJcPqv9KxS0kxTGPUaR7L2XcXDXA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-flow': 7.24.1(@babel/core@7.24.5) + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/plugin-syntax-flow': 7.24.7(@babel/core@7.24.7) + dev: true - /@babel/plugin-transform-for-of@7.24.1(@babel/core@7.22.5): - resolution: {integrity: sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg==} + /@babel/plugin-transform-for-of@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - dev: true + '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + transitivePeerDependencies: + - supports-color - /@babel/plugin-transform-for-of@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg==} + /@babel/plugin-transform-for-of@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + transitivePeerDependencies: + - supports-color + dev: true - /@babel/plugin-transform-function-name@7.24.1(@babel/core@7.22.5): - resolution: {integrity: sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA==} + /@babel/plugin-transform-function-name@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-U9FcnA821YoILngSmYkW6FjyQe2TyZD5pHt4EVIhmcTkrJw/3KqcrRSxuOo5tFZJi7TE19iDyI1u+weTI7bn2w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-plugin-utils': 7.24.5 - dev: true + '@babel/helper-compilation-targets': 7.24.7 + '@babel/helper-function-name': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 - /@babel/plugin-transform-function-name@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA==} + /@babel/plugin-transform-function-name@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-U9FcnA821YoILngSmYkW6FjyQe2TyZD5pHt4EVIhmcTkrJw/3KqcrRSxuOo5tFZJi7TE19iDyI1u+weTI7bn2w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-compilation-targets': 7.24.7 + '@babel/helper-function-name': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + dev: true - /@babel/plugin-transform-json-strings@7.24.1(@babel/core@7.22.5): - resolution: {integrity: sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ==} + /@babel/plugin-transform-json-strings@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.5) - dev: true - /@babel/plugin-transform-json-strings@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ==} + /@babel/plugin-transform-json-strings@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.5) + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.7) + dev: true - /@babel/plugin-transform-literals@7.24.1(@babel/core@7.22.5): - resolution: {integrity: sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g==} + /@babel/plugin-transform-literals@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-vcwCbb4HDH+hWi8Pqenwnjy+UiklO4Kt1vfspcQYFhJdpthSnW8XvWGyDZWKNVrVbVViI/S7K9PDJZiUmP2fYQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 - dev: true + '@babel/helper-plugin-utils': 7.24.7 - /@babel/plugin-transform-literals@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g==} + /@babel/plugin-transform-literals@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-vcwCbb4HDH+hWi8Pqenwnjy+UiklO4Kt1vfspcQYFhJdpthSnW8XvWGyDZWKNVrVbVViI/S7K9PDJZiUmP2fYQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + dev: true - /@babel/plugin-transform-logical-assignment-operators@7.24.1(@babel/core@7.22.5): - resolution: {integrity: sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w==} + /@babel/plugin-transform-logical-assignment-operators@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.5) - dev: true - /@babel/plugin-transform-logical-assignment-operators@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w==} + /@babel/plugin-transform-logical-assignment-operators@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.5) + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.7) + dev: true - /@babel/plugin-transform-member-expression-literals@7.24.1(@babel/core@7.22.5): - resolution: {integrity: sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg==} + /@babel/plugin-transform-member-expression-literals@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 - dev: true + '@babel/helper-plugin-utils': 7.24.7 - /@babel/plugin-transform-member-expression-literals@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg==} + /@babel/plugin-transform-member-expression-literals@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + dev: true - /@babel/plugin-transform-modules-amd@7.24.1(@babel/core@7.22.5): - resolution: {integrity: sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ==} + /@babel/plugin-transform-modules-amd@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-module-transforms': 7.24.5(@babel/core@7.22.5) - '@babel/helper-plugin-utils': 7.24.5 - dev: true + '@babel/helper-module-transforms': 7.24.7(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.24.7 + transitivePeerDependencies: + - supports-color - /@babel/plugin-transform-modules-amd@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ==} + /@babel/plugin-transform-modules-amd@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.7 + transitivePeerDependencies: + - supports-color + dev: true - /@babel/plugin-transform-modules-commonjs@7.24.1(@babel/core@7.22.5): - resolution: {integrity: sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==} + /@babel/plugin-transform-modules-commonjs@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-iFI8GDxtevHJ/Z22J5xQpVqFLlMNstcLXh994xifFwxxGslr2ZXXLWgtBeLctOD63UFDArdvN6Tg8RFw+aEmjQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-module-transforms': 7.24.5(@babel/core@7.22.5) - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-simple-access': 7.24.5 - dev: true + '@babel/helper-module-transforms': 7.24.7(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-simple-access': 7.24.7 + transitivePeerDependencies: + - supports-color - /@babel/plugin-transform-modules-commonjs@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==} + /@babel/plugin-transform-modules-commonjs@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-iFI8GDxtevHJ/Z22J5xQpVqFLlMNstcLXh994xifFwxxGslr2ZXXLWgtBeLctOD63UFDArdvN6Tg8RFw+aEmjQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-simple-access': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-simple-access': 7.24.7 + transitivePeerDependencies: + - supports-color + dev: true - /@babel/plugin-transform-modules-systemjs@7.24.1(@babel/core@7.22.5): - resolution: {integrity: sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA==} + /@babel/plugin-transform-modules-systemjs@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-GYQE0tW7YoaN13qFh3O1NCY4MPkUiAH3fiF7UcV/I3ajmDKEdG3l+UOcbAm4zUE3gnvUU+Eni7XrVKo9eO9auw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-module-transforms': 7.24.5(@babel/core@7.22.5) - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-validator-identifier': 7.24.5 - dev: true + '@babel/helper-hoist-variables': 7.24.7 + '@babel/helper-module-transforms': 7.24.7(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-validator-identifier': 7.24.7 + transitivePeerDependencies: + - supports-color - /@babel/plugin-transform-modules-systemjs@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA==} + /@babel/plugin-transform-modules-systemjs@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-GYQE0tW7YoaN13qFh3O1NCY4MPkUiAH3fiF7UcV/I3ajmDKEdG3l+UOcbAm4zUE3gnvUU+Eni7XrVKo9eO9auw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-validator-identifier': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-hoist-variables': 7.24.7 + '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-validator-identifier': 7.24.7 + transitivePeerDependencies: + - supports-color + dev: true - /@babel/plugin-transform-modules-umd@7.24.1(@babel/core@7.22.5): - resolution: {integrity: sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg==} + /@babel/plugin-transform-modules-umd@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-module-transforms': 7.24.5(@babel/core@7.22.5) - '@babel/helper-plugin-utils': 7.24.5 - dev: true + '@babel/helper-module-transforms': 7.24.7(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.24.7 + transitivePeerDependencies: + - supports-color - /@babel/plugin-transform-modules-umd@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg==} + /@babel/plugin-transform-modules-umd@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.7 + transitivePeerDependencies: + - supports-color + dev: true - /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.22.5): - resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} + /@babel/plugin-transform-named-capturing-groups-regex@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.22.5) - '@babel/helper-plugin-utils': 7.24.5 - dev: true + '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.24.7 - /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.24.5): - resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} + /@babel/plugin-transform-named-capturing-groups-regex@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.7 + dev: true - /@babel/plugin-transform-new-target@7.24.1(@babel/core@7.22.5): - resolution: {integrity: sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug==} + /@babel/plugin-transform-new-target@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 - dev: true + '@babel/helper-plugin-utils': 7.24.7 - /@babel/plugin-transform-new-target@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug==} + /@babel/plugin-transform-new-target@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + dev: true - /@babel/plugin-transform-nullish-coalescing-operator@7.24.1(@babel/core@7.22.5): - resolution: {integrity: sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw==} + /@babel/plugin-transform-nullish-coalescing-operator@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.5) - dev: true - /@babel/plugin-transform-nullish-coalescing-operator@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw==} + /@babel/plugin-transform-nullish-coalescing-operator@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.5) + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.7) + dev: true - /@babel/plugin-transform-numeric-separator@7.24.1(@babel/core@7.22.5): - resolution: {integrity: sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw==} + /@babel/plugin-transform-numeric-separator@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.5) - dev: true - /@babel/plugin-transform-numeric-separator@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw==} + /@babel/plugin-transform-numeric-separator@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.5) + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.7) + dev: true - /@babel/plugin-transform-object-rest-spread@7.24.5(@babel/core@7.22.5): - resolution: {integrity: sha512-7EauQHszLGM3ay7a161tTQH7fj+3vVM/gThlz5HpFtnygTxjrlvoeq7MPVA1Vy9Q555OB8SnAOsMkLShNkkrHA==} + /@babel/plugin-transform-object-rest-spread@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-compilation-targets': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.5) - '@babel/plugin-transform-parameters': 7.24.5(@babel/core@7.22.5) - dev: true + '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.22.5) - /@babel/plugin-transform-object-rest-spread@7.24.5(@babel/core@7.24.5): - resolution: {integrity: sha512-7EauQHszLGM3ay7a161tTQH7fj+3vVM/gThlz5HpFtnygTxjrlvoeq7MPVA1Vy9Q555OB8SnAOsMkLShNkkrHA==} + /@babel/plugin-transform-object-rest-spread@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-transform-parameters': 7.24.5(@babel/core@7.24.5) + '@babel/core': 7.24.7 + '@babel/helper-compilation-targets': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.7) + '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.24.7) + dev: true - /@babel/plugin-transform-object-super@7.24.1(@babel/core@7.22.5): - resolution: {integrity: sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ==} + /@babel/plugin-transform-object-super@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-replace-supers': 7.24.1(@babel/core@7.22.5) - dev: true + '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-replace-supers': 7.24.7(@babel/core@7.22.5) + transitivePeerDependencies: + - supports-color - /@babel/plugin-transform-object-super@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ==} + /@babel/plugin-transform-object-super@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.5) + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.7) + transitivePeerDependencies: + - supports-color + dev: true - /@babel/plugin-transform-optional-catch-binding@7.24.1(@babel/core@7.22.5): - resolution: {integrity: sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA==} + /@babel/plugin-transform-optional-catch-binding@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.5) - dev: true - /@babel/plugin-transform-optional-catch-binding@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA==} + /@babel/plugin-transform-optional-catch-binding@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.5) + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.7) + dev: true - /@babel/plugin-transform-optional-chaining@7.24.5(@babel/core@7.22.5): - resolution: {integrity: sha512-xWCkmwKT+ihmA6l7SSTpk8e4qQl/274iNbSKRRS8mpqFR32ksy36+a+LWY8OXCCEefF8WFlnOHVsaDI2231wBg==} + /@babel/plugin-transform-optional-chaining@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-tK+0N9yd4j+x/4hxF3F0e0fu/VdcxU18y5SevtyM/PCFlQvXbR0Zmlo2eBrKtVipGNFzpq56o8WsIIKcJFUCRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.5) - dev: true + transitivePeerDependencies: + - supports-color - /@babel/plugin-transform-optional-chaining@7.24.5(@babel/core@7.24.5): - resolution: {integrity: sha512-xWCkmwKT+ihmA6l7SSTpk8e4qQl/274iNbSKRRS8mpqFR32ksy36+a+LWY8OXCCEefF8WFlnOHVsaDI2231wBg==} + /@babel/plugin-transform-optional-chaining@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-tK+0N9yd4j+x/4hxF3F0e0fu/VdcxU18y5SevtyM/PCFlQvXbR0Zmlo2eBrKtVipGNFzpq56o8WsIIKcJFUCRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.5) + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.7) + transitivePeerDependencies: + - supports-color + dev: true - /@babel/plugin-transform-parameters@7.24.5(@babel/core@7.22.5): - resolution: {integrity: sha512-9Co00MqZ2aoky+4j2jhofErthm6QVLKbpQrvz20c3CH9KQCLHyNB+t2ya4/UrRpQGR+Wrwjg9foopoeSdnHOkA==} + /@babel/plugin-transform-parameters@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 - dev: true + '@babel/helper-plugin-utils': 7.24.7 - /@babel/plugin-transform-parameters@7.24.5(@babel/core@7.24.5): - resolution: {integrity: sha512-9Co00MqZ2aoky+4j2jhofErthm6QVLKbpQrvz20c3CH9KQCLHyNB+t2ya4/UrRpQGR+Wrwjg9foopoeSdnHOkA==} + /@babel/plugin-transform-parameters@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + dev: true - /@babel/plugin-transform-private-methods@7.24.1(@babel/core@7.22.5): - resolution: {integrity: sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw==} + /@babel/plugin-transform-private-methods@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.22.5) - '@babel/helper-plugin-utils': 7.24.5 - dev: true + '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.24.7 + transitivePeerDependencies: + - supports-color - /@babel/plugin-transform-private-methods@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw==} + /@babel/plugin-transform-private-methods@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.7 + transitivePeerDependencies: + - supports-color + dev: true - /@babel/plugin-transform-private-property-in-object@7.24.5(@babel/core@7.22.5): - resolution: {integrity: sha512-JM4MHZqnWR04jPMujQDTBVRnqxpLLpx2tkn7iPn+Hmsc0Gnb79yvRWOkvqFOx3Z7P7VxiRIR22c4eGSNj87OBQ==} + /@babel/plugin-transform-private-property-in-object@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.22.5) - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.5) - dev: true - - /@babel/plugin-transform-private-property-in-object@7.24.5(@babel/core@7.24.5): - resolution: {integrity: sha512-JM4MHZqnWR04jPMujQDTBVRnqxpLLpx2tkn7iPn+Hmsc0Gnb79yvRWOkvqFOx3Z7P7VxiRIR22c4eGSNj87OBQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.5 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.5) + transitivePeerDependencies: + - supports-color - /@babel/plugin-transform-property-literals@7.24.1(@babel/core@7.22.5): - resolution: {integrity: sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA==} + /@babel/plugin-transform-private-property-in-object@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.7 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.7) + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-transform-property-literals@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA==} + /@babel/plugin-transform-property-literals@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - - /@babel/plugin-transform-react-constant-elements@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-QXp1U9x0R7tkiGB0FOk8o74jhnap0FlZ5gNkRIWdG3eP+SvMFg118e1zaWewDzgABb106QSKpVsD3Wgd8t6ifA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.24.7 - /@babel/plugin-transform-react-display-name@7.24.1(@babel/core@7.22.5): - resolution: {integrity: sha512-mvoQg2f9p2qlpDQRBC7M3c3XTr0k7cp/0+kFKKO/7Gtu0LSw16eKB+Fabe2bDT/UpsyasTBBkAnbdsLrkD5XMw==} + /@babel/plugin-transform-property-literals@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 dev: true - /@babel/plugin-transform-react-display-name@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-mvoQg2f9p2qlpDQRBC7M3c3XTr0k7cp/0+kFKKO/7Gtu0LSw16eKB+Fabe2bDT/UpsyasTBBkAnbdsLrkD5XMw==} + /@babel/plugin-transform-react-constant-elements@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-7LidzZfUXyfZ8/buRW6qIIHBY8wAZ1OrY9c/wTr8YhZ6vMPo+Uc/CVFLYY1spZrEQlD4w5u8wjqk5NQ3OVqQKA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.24.7 - /@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.22.5): - resolution: {integrity: sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==} + /@babel/plugin-transform-react-display-name@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-H/Snz9PFxKsS1JLI4dJLtnJgCJRoo0AUm3chP6NYr+9En1JMKloheEiLIhlp5MDVznWo+H3AAC1Mc8lmUEpsgg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.22.5) - dev: true + '@babel/helper-plugin-utils': 7.24.7 - /@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.24.5): - resolution: {integrity: sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==} + /@babel/plugin-transform-react-jsx-development@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-QG9EnzoGn+Qar7rxuW+ZOsbWOt56FvvI93xInqsZDC5fsekx1AlIO4KIJ5M+D0p0SqSH156EpmZyXq630B8OlQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.24.5) + '@babel/core': 7.22.5 + '@babel/plugin-transform-react-jsx': 7.24.7(@babel/core@7.22.5) + transitivePeerDependencies: + - supports-color /@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.22.5): resolution: {integrity: sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==} @@ -2405,305 +2510,306 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-module-imports': 7.24.3 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.22.5) - '@babel/types': 7.24.5 - - /@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.5): - resolution: {integrity: sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.5 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-module-imports': 7.24.3 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.5) - '@babel/types': 7.24.5 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-module-imports': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.22.5) + '@babel/types': 7.24.7 + transitivePeerDependencies: + - supports-color - /@babel/plugin-transform-react-pure-annotations@7.24.1(@babel/core@7.22.5): - resolution: {integrity: sha512-+pWEAaDJvSm9aFvJNpLiM2+ktl2Sn2U5DdyiWdZBxmLc6+xGt88dvFqsHiAiDS+8WqUwbDfkKz9jRxK3M0k+kA==} + /@babel/plugin-transform-react-jsx@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-+Dj06GDZEFRYvclU6k4bme55GKBEWUmByM/eoKuqg4zTNQHiApWRhQph5fxQB2wAEFvRzL1tOEj1RJ19wJrhoA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 - dev: true + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-module-imports': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.22.5) + '@babel/types': 7.24.7 + transitivePeerDependencies: + - supports-color - /@babel/plugin-transform-react-pure-annotations@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-+pWEAaDJvSm9aFvJNpLiM2+ktl2Sn2U5DdyiWdZBxmLc6+xGt88dvFqsHiAiDS+8WqUwbDfkKz9jRxK3M0k+kA==} + /@babel/plugin-transform-react-pure-annotations@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-PLgBVk3fzbmEjBJ/u8kFzOqS9tUeDjiaWud/rRym/yjCo/M9cASPlnrd2ZmmZpQT40fOOrvR8jh+n8jikrOhNA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.22.5 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 - /@babel/plugin-transform-regenerator@7.24.1(@babel/core@7.22.5): - resolution: {integrity: sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw==} + /@babel/plugin-transform-regenerator@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.7 regenerator-transform: 0.15.2 - dev: true - /@babel/plugin-transform-regenerator@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw==} + /@babel/plugin-transform-regenerator@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 regenerator-transform: 0.15.2 + dev: true - /@babel/plugin-transform-reserved-words@7.24.1(@babel/core@7.22.5): - resolution: {integrity: sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg==} + /@babel/plugin-transform-reserved-words@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 - dev: true + '@babel/helper-plugin-utils': 7.24.7 - /@babel/plugin-transform-reserved-words@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg==} + /@babel/plugin-transform-reserved-words@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + dev: true - /@babel/plugin-transform-runtime@7.24.3(@babel/core@7.24.5): - resolution: {integrity: sha512-J0BuRPNlNqlMTRJ72eVptpt9VcInbxO6iP3jaxr+1NPhC0UkKL+6oeX6VXMEYdADnuqmMmsBspt4d5w8Y/TCbQ==} + /@babel/plugin-transform-runtime@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-YqXjrk4C+a1kZjewqt+Mmu2UuV1s07y8kqcUf4qYLnoqemhR4gRQikhdAhSVJioMjVTu6Mo6pAbaypEA3jY6fw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-module-imports': 7.24.3 - '@babel/helper-plugin-utils': 7.24.5 - babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.24.5) - babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.5) - babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.24.5) + '@babel/core': 7.22.5 + '@babel/helper-module-imports': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.22.5) + babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.22.5) + babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.22.5) semver: 6.3.1 transitivePeerDependencies: - supports-color - /@babel/plugin-transform-shorthand-properties@7.24.1(@babel/core@7.22.5): - resolution: {integrity: sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA==} + /@babel/plugin-transform-shorthand-properties@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 - dev: true + '@babel/helper-plugin-utils': 7.24.7 - /@babel/plugin-transform-shorthand-properties@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA==} + /@babel/plugin-transform-shorthand-properties@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + dev: true - /@babel/plugin-transform-spread@7.24.1(@babel/core@7.22.5): - resolution: {integrity: sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g==} + /@babel/plugin-transform-spread@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - dev: true + '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + transitivePeerDependencies: + - supports-color - /@babel/plugin-transform-spread@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g==} + /@babel/plugin-transform-spread@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + transitivePeerDependencies: + - supports-color + dev: true - /@babel/plugin-transform-sticky-regex@7.24.1(@babel/core@7.22.5): - resolution: {integrity: sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw==} + /@babel/plugin-transform-sticky-regex@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 - dev: true + '@babel/helper-plugin-utils': 7.24.7 - /@babel/plugin-transform-sticky-regex@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw==} + /@babel/plugin-transform-sticky-regex@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + dev: true - /@babel/plugin-transform-template-literals@7.24.1(@babel/core@7.22.5): - resolution: {integrity: sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g==} + /@babel/plugin-transform-template-literals@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 - dev: true + '@babel/helper-plugin-utils': 7.24.7 - /@babel/plugin-transform-template-literals@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g==} + /@babel/plugin-transform-template-literals@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + dev: true - /@babel/plugin-transform-typeof-symbol@7.24.5(@babel/core@7.22.5): - resolution: {integrity: sha512-UTGnhYVZtTAjdwOTzT+sCyXmTn8AhaxOS/MjG9REclZ6ULHWF9KoCZur0HSGU7hk8PdBFKKbYe6+gqdXWz84Jg==} + /@babel/plugin-transform-typeof-symbol@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-VtR8hDy7YLB7+Pet9IarXjg/zgCMSF+1mNS/EQEiEaUPoFXCVsHG64SIxcaaI2zJgRiv+YmgaQESUfWAdbjzgg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 - dev: true + '@babel/helper-plugin-utils': 7.24.7 - /@babel/plugin-transform-typeof-symbol@7.24.5(@babel/core@7.24.5): - resolution: {integrity: sha512-UTGnhYVZtTAjdwOTzT+sCyXmTn8AhaxOS/MjG9REclZ6ULHWF9KoCZur0HSGU7hk8PdBFKKbYe6+gqdXWz84Jg==} + /@babel/plugin-transform-typeof-symbol@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-VtR8hDy7YLB7+Pet9IarXjg/zgCMSF+1mNS/EQEiEaUPoFXCVsHG64SIxcaaI2zJgRiv+YmgaQESUfWAdbjzgg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + dev: true - /@babel/plugin-transform-typescript@7.24.5(@babel/core@7.22.5): - resolution: {integrity: sha512-E0VWu/hk83BIFUWnsKZ4D81KXjN5L3MobvevOHErASk9IPwKHOkTgvqzvNo1yP/ePJWqqK2SpUR5z+KQbl6NVw==} + /@babel/plugin-transform-typescript@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-iLD3UNkgx2n/HrjBesVbYX6j0yqn/sJktvbtKKgcaLIQ4bTTQ8obAypc1VpyHPD2y4Phh9zHOaAt8e/L14wCpw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.22.5) - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.22.5) - dev: true + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.24.7 + '@babel/plugin-syntax-typescript': 7.24.7(@babel/core@7.22.5) + transitivePeerDependencies: + - supports-color - /@babel/plugin-transform-typescript@7.24.5(@babel/core@7.24.5): - resolution: {integrity: sha512-E0VWu/hk83BIFUWnsKZ4D81KXjN5L3MobvevOHErASk9IPwKHOkTgvqzvNo1yP/ePJWqqK2SpUR5z+KQbl6NVw==} + /@babel/plugin-transform-typescript@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-iLD3UNkgx2n/HrjBesVbYX6j0yqn/sJktvbtKKgcaLIQ4bTTQ8obAypc1VpyHPD2y4Phh9zHOaAt8e/L14wCpw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.24.5) + '@babel/core': 7.24.7 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.7 + '@babel/plugin-syntax-typescript': 7.24.7(@babel/core@7.24.7) + transitivePeerDependencies: + - supports-color + dev: true - /@babel/plugin-transform-unicode-escapes@7.24.1(@babel/core@7.22.5): - resolution: {integrity: sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw==} + /@babel/plugin-transform-unicode-escapes@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 - dev: true + '@babel/helper-plugin-utils': 7.24.7 - /@babel/plugin-transform-unicode-escapes@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw==} + /@babel/plugin-transform-unicode-escapes@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + dev: true - /@babel/plugin-transform-unicode-property-regex@7.24.1(@babel/core@7.22.5): - resolution: {integrity: sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng==} + /@babel/plugin-transform-unicode-property-regex@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.22.5) - '@babel/helper-plugin-utils': 7.24.5 - dev: true + '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.24.7 - /@babel/plugin-transform-unicode-property-regex@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng==} + /@babel/plugin-transform-unicode-property-regex@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.7 + dev: true - /@babel/plugin-transform-unicode-regex@7.24.1(@babel/core@7.22.5): - resolution: {integrity: sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g==} + /@babel/plugin-transform-unicode-regex@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.22.5) - '@babel/helper-plugin-utils': 7.24.5 - dev: true + '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.24.7 - /@babel/plugin-transform-unicode-regex@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g==} + /@babel/plugin-transform-unicode-regex@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.7 + dev: true - /@babel/plugin-transform-unicode-sets-regex@7.24.1(@babel/core@7.22.5): - resolution: {integrity: sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA==} + /@babel/plugin-transform-unicode-sets-regex@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.22.5) - '@babel/helper-plugin-utils': 7.24.5 - dev: true + '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.24.7 - /@babel/plugin-transform-unicode-sets-regex@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA==} + /@babel/plugin-transform-unicode-sets-regex@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.7 + dev: true /@babel/preset-env@7.22.6(@babel/core@7.22.5): resolution: {integrity: sha512-IHr0AXHGk8oh8HYSs45Mxuv6iySUBwDTIzJSnXN7PURqHdxJVQlCoXmKJgyvSS9bcNf9NVRVE35z+LkCvGmi6w==} @@ -2711,21 +2817,21 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.24.4 + '@babel/compat-data': 7.24.7 '@babel/core': 7.22.5 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.24.1(@babel/core@7.22.5) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.1(@babel/core@7.22.5) + '@babel/helper-compilation-targets': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-validator-option': 7.24.7 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.7(@babel/core@7.22.5) '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.22.5) '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.5) '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.22.5) '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.22.5) '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.5) '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.22.5) - '@babel/plugin-syntax-import-assertions': 7.24.1(@babel/core@7.22.5) - '@babel/plugin-syntax-import-attributes': 7.24.1(@babel/core@7.22.5) + '@babel/plugin-syntax-import-assertions': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-syntax-import-attributes': 7.24.7(@babel/core@7.22.5) '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.22.5) '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.5) '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.5) @@ -2737,56 +2843,56 @@ packages: '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.5) '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.22.5) '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.22.5) - '@babel/plugin-transform-arrow-functions': 7.24.1(@babel/core@7.22.5) - '@babel/plugin-transform-async-generator-functions': 7.24.3(@babel/core@7.22.5) - '@babel/plugin-transform-async-to-generator': 7.24.1(@babel/core@7.22.5) - '@babel/plugin-transform-block-scoped-functions': 7.24.1(@babel/core@7.22.5) - '@babel/plugin-transform-block-scoping': 7.24.5(@babel/core@7.22.5) - '@babel/plugin-transform-class-properties': 7.24.1(@babel/core@7.22.5) - '@babel/plugin-transform-class-static-block': 7.24.4(@babel/core@7.22.5) - '@babel/plugin-transform-classes': 7.24.5(@babel/core@7.22.5) - '@babel/plugin-transform-computed-properties': 7.24.1(@babel/core@7.22.5) - '@babel/plugin-transform-destructuring': 7.24.5(@babel/core@7.22.5) - '@babel/plugin-transform-dotall-regex': 7.24.1(@babel/core@7.22.5) - '@babel/plugin-transform-duplicate-keys': 7.24.1(@babel/core@7.22.5) - '@babel/plugin-transform-dynamic-import': 7.24.1(@babel/core@7.22.5) - '@babel/plugin-transform-exponentiation-operator': 7.24.1(@babel/core@7.22.5) - '@babel/plugin-transform-export-namespace-from': 7.24.1(@babel/core@7.22.5) - '@babel/plugin-transform-for-of': 7.24.1(@babel/core@7.22.5) - '@babel/plugin-transform-function-name': 7.24.1(@babel/core@7.22.5) - '@babel/plugin-transform-json-strings': 7.24.1(@babel/core@7.22.5) - '@babel/plugin-transform-literals': 7.24.1(@babel/core@7.22.5) - '@babel/plugin-transform-logical-assignment-operators': 7.24.1(@babel/core@7.22.5) - '@babel/plugin-transform-member-expression-literals': 7.24.1(@babel/core@7.22.5) - '@babel/plugin-transform-modules-amd': 7.24.1(@babel/core@7.22.5) - '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.22.5) - '@babel/plugin-transform-modules-systemjs': 7.24.1(@babel/core@7.22.5) - '@babel/plugin-transform-modules-umd': 7.24.1(@babel/core@7.22.5) - '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-new-target': 7.24.1(@babel/core@7.22.5) - '@babel/plugin-transform-nullish-coalescing-operator': 7.24.1(@babel/core@7.22.5) - '@babel/plugin-transform-numeric-separator': 7.24.1(@babel/core@7.22.5) - '@babel/plugin-transform-object-rest-spread': 7.24.5(@babel/core@7.22.5) - '@babel/plugin-transform-object-super': 7.24.1(@babel/core@7.22.5) - '@babel/plugin-transform-optional-catch-binding': 7.24.1(@babel/core@7.22.5) - '@babel/plugin-transform-optional-chaining': 7.24.5(@babel/core@7.22.5) - '@babel/plugin-transform-parameters': 7.24.5(@babel/core@7.22.5) - '@babel/plugin-transform-private-methods': 7.24.1(@babel/core@7.22.5) - '@babel/plugin-transform-private-property-in-object': 7.24.5(@babel/core@7.22.5) - '@babel/plugin-transform-property-literals': 7.24.1(@babel/core@7.22.5) - '@babel/plugin-transform-regenerator': 7.24.1(@babel/core@7.22.5) - '@babel/plugin-transform-reserved-words': 7.24.1(@babel/core@7.22.5) - '@babel/plugin-transform-shorthand-properties': 7.24.1(@babel/core@7.22.5) - '@babel/plugin-transform-spread': 7.24.1(@babel/core@7.22.5) - '@babel/plugin-transform-sticky-regex': 7.24.1(@babel/core@7.22.5) - '@babel/plugin-transform-template-literals': 7.24.1(@babel/core@7.22.5) - '@babel/plugin-transform-typeof-symbol': 7.24.5(@babel/core@7.22.5) - '@babel/plugin-transform-unicode-escapes': 7.24.1(@babel/core@7.22.5) - '@babel/plugin-transform-unicode-property-regex': 7.24.1(@babel/core@7.22.5) - '@babel/plugin-transform-unicode-regex': 7.24.1(@babel/core@7.22.5) - '@babel/plugin-transform-unicode-sets-regex': 7.24.1(@babel/core@7.22.5) + '@babel/plugin-transform-arrow-functions': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-async-generator-functions': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-async-to-generator': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-block-scoped-functions': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-block-scoping': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-class-properties': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-class-static-block': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-classes': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-computed-properties': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-destructuring': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-dotall-regex': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-duplicate-keys': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-dynamic-import': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-exponentiation-operator': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-export-namespace-from': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-for-of': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-function-name': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-json-strings': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-literals': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-logical-assignment-operators': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-member-expression-literals': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-modules-amd': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-modules-commonjs': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-modules-systemjs': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-modules-umd': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-named-capturing-groups-regex': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-new-target': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-nullish-coalescing-operator': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-numeric-separator': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-object-rest-spread': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-object-super': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-optional-catch-binding': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-optional-chaining': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-private-methods': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-private-property-in-object': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-property-literals': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-regenerator': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-reserved-words': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-shorthand-properties': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-spread': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-sticky-regex': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-template-literals': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-typeof-symbol': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-unicode-escapes': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-unicode-property-regex': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-unicode-regex': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-unicode-sets-regex': 7.24.7(@babel/core@7.22.5) '@babel/preset-modules': 0.1.6(@babel/core@7.22.5) - '@babel/types': 7.24.5 + '@babel/types': 7.24.7 '@nicolo-ribaudo/semver-v6': 6.3.3 babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.22.5) babel-plugin-polyfill-corejs3: 0.8.7(@babel/core@7.22.5) @@ -2794,121 +2900,121 @@ packages: core-js-compat: 3.37.1 transitivePeerDependencies: - supports-color - dev: true - /@babel/preset-env@7.24.5(@babel/core@7.24.5): - resolution: {integrity: sha512-UGK2ifKtcC8i5AI4cH+sbLLuLc2ktYSFJgBAXorKAsHUZmrQ1q6aQ6i3BvU24wWs2AAKqQB6kq3N9V9Gw1HiMQ==} + /@babel/preset-env@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-1YZNsc+y6cTvWlDHidMBsQZrZfEFjRIo/BZCT906PMdzOyXtSLTgqGdrpcuTDCXyd11Am5uQULtDIcCfnTc8fQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.24.4 - '@babel/core': 7.24.5 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.24.5(@babel/core@7.24.5) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.5) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.5) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.5) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.5) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-syntax-import-assertions': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-syntax-import-attributes': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.5) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.5) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.5) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.5) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.5) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.24.5) - '@babel/plugin-transform-arrow-functions': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-async-generator-functions': 7.24.3(@babel/core@7.24.5) - '@babel/plugin-transform-async-to-generator': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-block-scoped-functions': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-block-scoping': 7.24.5(@babel/core@7.24.5) - '@babel/plugin-transform-class-properties': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-class-static-block': 7.24.4(@babel/core@7.24.5) - '@babel/plugin-transform-classes': 7.24.5(@babel/core@7.24.5) - '@babel/plugin-transform-computed-properties': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-destructuring': 7.24.5(@babel/core@7.24.5) - '@babel/plugin-transform-dotall-regex': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-duplicate-keys': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-dynamic-import': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-exponentiation-operator': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-export-namespace-from': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-for-of': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-function-name': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-json-strings': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-literals': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-logical-assignment-operators': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-member-expression-literals': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-modules-amd': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-modules-systemjs': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-modules-umd': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.24.5) - '@babel/plugin-transform-new-target': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-nullish-coalescing-operator': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-numeric-separator': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-object-rest-spread': 7.24.5(@babel/core@7.24.5) - '@babel/plugin-transform-object-super': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-optional-catch-binding': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-optional-chaining': 7.24.5(@babel/core@7.24.5) - '@babel/plugin-transform-parameters': 7.24.5(@babel/core@7.24.5) - '@babel/plugin-transform-private-methods': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-private-property-in-object': 7.24.5(@babel/core@7.24.5) - '@babel/plugin-transform-property-literals': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-regenerator': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-reserved-words': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-shorthand-properties': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-spread': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-sticky-regex': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-template-literals': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-typeof-symbol': 7.24.5(@babel/core@7.24.5) - '@babel/plugin-transform-unicode-escapes': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-unicode-property-regex': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-unicode-regex': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-unicode-sets-regex': 7.24.1(@babel/core@7.24.5) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.24.5) - babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.24.5) - babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.5) - babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.24.5) + '@babel/compat-data': 7.24.7 + '@babel/core': 7.24.7 + '@babel/helper-compilation-targets': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-validator-option': 7.24.7 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.7) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.7) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.7) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.7) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.7) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.7) + '@babel/plugin-syntax-import-assertions': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-syntax-import-attributes': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.7) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.7) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.7) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.7) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.7) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.7) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.7) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.7) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.7) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.7) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.24.7) + '@babel/plugin-transform-arrow-functions': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-async-generator-functions': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-async-to-generator': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-block-scoped-functions': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-block-scoping': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-class-properties': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-class-static-block': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-classes': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-computed-properties': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-destructuring': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-dotall-regex': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-duplicate-keys': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-dynamic-import': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-exponentiation-operator': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-export-namespace-from': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-for-of': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-function-name': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-json-strings': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-literals': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-logical-assignment-operators': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-member-expression-literals': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-modules-amd': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-modules-commonjs': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-modules-systemjs': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-modules-umd': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-named-capturing-groups-regex': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-new-target': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-nullish-coalescing-operator': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-numeric-separator': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-object-rest-spread': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-object-super': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-optional-catch-binding': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-optional-chaining': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-private-methods': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-private-property-in-object': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-property-literals': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-regenerator': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-reserved-words': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-shorthand-properties': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-spread': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-sticky-regex': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-template-literals': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-typeof-symbol': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-unicode-escapes': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-unicode-property-regex': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-unicode-regex': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-unicode-sets-regex': 7.24.7(@babel/core@7.24.7) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.24.7) + babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.24.7) + babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.7) + babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.24.7) core-js-compat: 3.37.1 semver: 6.3.1 transitivePeerDependencies: - supports-color + dev: true - /@babel/preset-flow@7.24.1(@babel/core@7.22.5): - resolution: {integrity: sha512-sWCV2G9pcqZf+JHyv/RyqEIpFypxdCSxWIxQjpdaQxenNog7cN1pr76hg8u0Fz8Qgg0H4ETkGcJnXL8d4j0PPA==} + /@babel/preset-flow@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-NL3Lo0NorCU607zU3NwRyJbpaB6E3t0xtd3LfAQKDfkeX4/ggcDXvkmkW42QWT5owUeW/jAe4hn+2qvkV1IbfQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-transform-flow-strip-types': 7.24.1(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-validator-option': 7.24.7 + '@babel/plugin-transform-flow-strip-types': 7.24.7(@babel/core@7.22.5) dev: true - /@babel/preset-flow@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-sWCV2G9pcqZf+JHyv/RyqEIpFypxdCSxWIxQjpdaQxenNog7cN1pr76hg8u0Fz8Qgg0H4ETkGcJnXL8d4j0PPA==} + /@babel/preset-flow@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-NL3Lo0NorCU607zU3NwRyJbpaB6E3t0xtd3LfAQKDfkeX4/ggcDXvkmkW42QWT5owUeW/jAe4hn+2qvkV1IbfQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-transform-flow-strip-types': 7.24.1(@babel/core@7.24.5) + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-validator-option': 7.24.7 + '@babel/plugin-transform-flow-strip-types': 7.24.7(@babel/core@7.24.7) dev: true /@babel/preset-modules@0.1.6(@babel/core@7.22.5): @@ -2917,22 +3023,22 @@ packages: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.22.5) - '@babel/plugin-transform-dotall-regex': 7.24.1(@babel/core@7.22.5) - '@babel/types': 7.24.5 + '@babel/plugin-transform-dotall-regex': 7.24.7(@babel/core@7.22.5) + '@babel/types': 7.24.7 esutils: 2.0.3 - dev: true - /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.24.5): + /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.24.7): resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/types': 7.24.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/types': 7.24.7 esutils: 2.0.3 + dev: true /@babel/preset-react@7.22.5(@babel/core@7.22.5): resolution: {integrity: sha512-M+Is3WikOpEJHgR385HbuCITPTaPRaNkibTEa9oiofmJvIsrceb4yp9RL9Kb+TE8LznmeyZqpP+Lopwcx59xPQ==} @@ -2941,41 +3047,30 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-transform-react-display-name': 7.24.1(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-validator-option': 7.24.7 + '@babel/plugin-transform-react-display-name': 7.24.7(@babel/core@7.22.5) '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.22.5) - '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-react-pure-annotations': 7.24.1(@babel/core@7.22.5) - dev: true - - /@babel/preset-react@7.22.5(@babel/core@7.24.5): - resolution: {integrity: sha512-M+Is3WikOpEJHgR385HbuCITPTaPRaNkibTEa9oiofmJvIsrceb4yp9RL9Kb+TE8LznmeyZqpP+Lopwcx59xPQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-transform-react-display-name': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.24.5) - '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.24.5) - '@babel/plugin-transform-react-pure-annotations': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-react-jsx-development': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-react-pure-annotations': 7.24.7(@babel/core@7.22.5) + transitivePeerDependencies: + - supports-color - /@babel/preset-react@7.24.1(@babel/core@7.22.5): - resolution: {integrity: sha512-eFa8up2/8cZXLIpkafhaADTXSnl7IsUFCYenRWrARBz0/qZwcT0RBXpys0LJU4+WfPoF2ZG6ew6s2V6izMCwRA==} + /@babel/preset-react@7.24.7(@babel/core@7.22.5): + resolution: {integrity: sha512-AAH4lEkpmzFWrGVlHaxJB7RLH21uPQ9+He+eFLWHmF9IuFQVugz8eAsamaW0DXRrTfco5zj1wWtpdcXJUOfsag==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-transform-react-display-name': 7.24.1(@babel/core@7.22.5) - '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.22.5) - '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-react-pure-annotations': 7.24.1(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-validator-option': 7.24.7 + '@babel/plugin-transform-react-display-name': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-react-jsx': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-react-jsx-development': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-react-pure-annotations': 7.24.7(@babel/core@7.22.5) + transitivePeerDependencies: + - supports-color dev: true /@babel/preset-typescript@7.23.3(@babel/core@7.22.5): @@ -2985,33 +3080,37 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.22.5) - '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.22.5) - '@babel/plugin-transform-typescript': 7.24.5(@babel/core@7.22.5) - dev: true + '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-validator-option': 7.24.7 + '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-modules-commonjs': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-typescript': 7.24.7(@babel/core@7.22.5) + transitivePeerDependencies: + - supports-color - /@babel/preset-typescript@7.23.3(@babel/core@7.24.5): + /@babel/preset-typescript@7.23.3(@babel/core@7.24.7): resolution: {integrity: sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-typescript': 7.24.5(@babel/core@7.24.5) + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-validator-option': 7.24.7 + '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-modules-commonjs': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-typescript': 7.24.7(@babel/core@7.24.7) + transitivePeerDependencies: + - supports-color + dev: true - /@babel/register@7.23.7(@babel/core@7.24.5): - resolution: {integrity: sha512-EjJeB6+kvpk+Y5DAkEAmbOBEFkh9OASx0huoEkqYTFxAZHzOAX2Oh5uwAUuL2rUddqfM0SA+KPXV2TbzoZ2kvQ==} + /@babel/register@7.24.6(@babel/core@7.24.7): + resolution: {integrity: sha512-WSuFCc2wCqMeXkz/i3yfAAsxwWflEgbVkZzivgAmXl/MxrXeoYFZOOPllbC8R8WTF7u61wSRQtDVZ1879cdu6w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.24.7 clone-deep: 4.0.1 find-cache-dir: 2.1.0 make-dir: 2.1.0 @@ -3022,43 +3121,43 @@ packages: /@babel/regjsgen@0.8.0: resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} - /@babel/runtime@7.24.5: - resolution: {integrity: sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==} + /@babel/runtime@7.24.7: + resolution: {integrity: sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.1 - /@babel/template@7.24.0: - resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} + /@babel/template@7.24.7: + resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.24.2 - '@babel/parser': 7.24.5 - '@babel/types': 7.24.5 + '@babel/code-frame': 7.24.7 + '@babel/parser': 7.24.7 + '@babel/types': 7.24.7 - /@babel/traverse@7.24.5: - resolution: {integrity: sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==} + /@babel/traverse@7.24.7: + resolution: {integrity: sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.24.2 - '@babel/generator': 7.24.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.24.5 - '@babel/parser': 7.24.5 - '@babel/types': 7.24.5 - debug: 4.3.4 + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.24.7 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-function-name': 7.24.7 + '@babel/helper-hoist-variables': 7.24.7 + '@babel/helper-split-export-declaration': 7.24.7 + '@babel/parser': 7.24.7 + '@babel/types': 7.24.7 + debug: 4.3.5 globals: 11.12.0 transitivePeerDependencies: - supports-color - /@babel/types@7.24.5: - resolution: {integrity: sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==} + /@babel/types@7.24.7: + resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.24.1 - '@babel/helper-validator-identifier': 7.24.5 + '@babel/helper-string-parser': 7.24.7 + '@babel/helper-validator-identifier': 7.24.7 to-fast-properties: 2.0.0 /@base2/pretty-print-object@1.0.1: @@ -3321,7 +3420,7 @@ packages: dev: true optional: true - /@craco/craco@7.1.0(@swc/core@1.5.7)(@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 @@ -3330,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.5.7)(@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.5.7)(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: @@ -3358,7 +3457,7 @@ packages: resolution: {integrity: sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2 dependencies: '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.1.0) postcss: 8.4.32 @@ -3368,7 +3467,7 @@ packages: resolution: {integrity: sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2 dependencies: '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.32) postcss: 8.4.32 @@ -3378,7 +3477,7 @@ packages: resolution: {integrity: sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2 dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -3387,7 +3486,7 @@ packages: resolution: {integrity: sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2 dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -3396,7 +3495,7 @@ packages: resolution: {integrity: sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2 dependencies: '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.32) postcss: 8.4.32 @@ -3406,7 +3505,7 @@ packages: resolution: {integrity: sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2 dependencies: '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.1.0) postcss: 8.4.32 @@ -3416,7 +3515,7 @@ packages: resolution: {integrity: sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2 dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -3425,7 +3524,7 @@ packages: resolution: {integrity: sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2 dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -3434,7 +3533,7 @@ packages: resolution: {integrity: sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2 dependencies: '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.32) postcss: 8.4.32 @@ -3444,7 +3543,7 @@ packages: resolution: {integrity: sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.3 dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -3453,7 +3552,7 @@ packages: resolution: {integrity: sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2 dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -3462,7 +3561,7 @@ packages: resolution: {integrity: sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2 dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -3471,7 +3570,7 @@ packages: resolution: {integrity: sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==} engines: {node: ^14 || >=16} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2 dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -3480,7 +3579,7 @@ packages: resolution: {integrity: sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2 dependencies: postcss: 8.4.32 @@ -3505,8 +3604,8 @@ packages: /@emotion/babel-plugin@11.11.0: resolution: {integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==} dependencies: - '@babel/helper-module-imports': 7.24.3 - '@babel/runtime': 7.24.5 + '@babel/helper-module-imports': 7.24.7 + '@babel/runtime': 7.24.7 '@emotion/hash': 0.9.1 '@emotion/memoize': 0.8.1 '@emotion/serialize': 1.1.4 @@ -3516,6 +3615,8 @@ packages: find-root: 1.1.0 source-map: 0.5.7 stylis: 4.2.0 + transitivePeerDependencies: + - supports-color dev: false /@emotion/cache@10.0.29: @@ -3542,13 +3643,15 @@ packages: peerDependencies: react: '>=16.3.0' dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@emotion/cache': 10.0.29 '@emotion/css': 10.0.27 '@emotion/serialize': 0.11.16 '@emotion/sheet': 0.9.4 '@emotion/utils': 0.11.3 react: 18.2.0 + transitivePeerDependencies: + - supports-color dev: true /@emotion/css@10.0.27: @@ -3557,6 +3660,8 @@ packages: '@emotion/serialize': 0.11.16 '@emotion/utils': 0.11.3 babel-plugin-emotion: 10.2.2 + transitivePeerDependencies: + - supports-color dev: true /@emotion/hash@0.8.0: @@ -3596,7 +3701,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@emotion/babel-plugin': 11.11.0 '@emotion/cache': 11.11.0 '@emotion/serialize': 1.1.4 @@ -3606,6 +3711,8 @@ packages: '@types/react': 18.2.45 hoist-non-react-statics: 3.3.2 react: 18.2.0 + transitivePeerDependencies: + - supports-color dev: false /@emotion/react@11.11.4(@types/react@18.2.45)(react@18.3.1): @@ -3617,7 +3724,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@emotion/babel-plugin': 11.11.0 '@emotion/cache': 11.11.0 '@emotion/serialize': 1.1.4 @@ -3627,6 +3734,8 @@ packages: '@types/react': 18.2.45 hoist-non-react-statics: 3.3.2 react: 18.3.1 + transitivePeerDependencies: + - supports-color dev: false /@emotion/serialize@0.11.16: @@ -3663,7 +3772,7 @@ packages: '@emotion/core': ^10.0.28 react: '>=16.3.0' dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@emotion/core': 10.3.1(react@18.2.0) '@emotion/is-prop-valid': 0.8.8 '@emotion/serialize': 0.11.16 @@ -3681,6 +3790,8 @@ packages: '@emotion/styled-base': 10.3.0(@emotion/core@10.3.1)(react@18.2.0) babel-plugin-emotion: 10.2.2 react: 18.2.0 + transitivePeerDependencies: + - supports-color dev: true /@emotion/styled@11.11.0(@emotion/react@11.11.1)(@types/react@18.2.45)(react@18.2.0): @@ -3693,7 +3804,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@emotion/babel-plugin': 11.11.0 '@emotion/is-prop-valid': 1.2.2 '@emotion/react': 11.11.1(@types/react@18.2.45)(react@18.2.0) @@ -3702,6 +3813,8 @@ packages: '@emotion/utils': 1.2.1 '@types/react': 18.2.45 react: 18.2.0 + transitivePeerDependencies: + - supports-color dev: false /@emotion/styled@11.11.5(@emotion/react@11.11.4)(@types/react@18.2.45)(react@18.3.1): @@ -3714,7 +3827,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@emotion/babel-plugin': 11.11.0 '@emotion/is-prop-valid': 1.2.2 '@emotion/react': 11.11.4(@types/react@18.2.45)(react@18.3.1) @@ -3723,6 +3836,8 @@ packages: '@emotion/utils': 1.2.1 '@types/react': 18.2.45 react: 18.3.1 + transitivePeerDependencies: + - supports-color dev: false /@emotion/stylis@0.8.5: @@ -4376,8 +4491,8 @@ packages: eslint-visitor-keys: 3.4.3 dev: false - /@eslint-community/regexpp@4.10.0: - resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} + /@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: @@ -4385,7 +4500,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.4 + debug: 4.3.5 espree: 9.6.1 globals: 13.24.0 ignore: 5.3.1 @@ -4409,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==} @@ -4463,6 +4578,27 @@ packages: react: 18.2.0 dev: true + /@formatjs/ecma402-abstract@2.0.0: + resolution: {integrity: sha512-rRqXOqdFmk7RYvj4khklyqzcfQl9vEL/usogncBHRZfZBDOwMGuSRNFl02fu5KGHXdbinju+YXyuR+Nk8xlr/g==} + dependencies: + '@formatjs/intl-localematcher': 0.5.4 + tslib: 2.6.3 + dev: false + + /@formatjs/intl-listformat@7.5.7: + resolution: {integrity: sha512-MG2TSChQJQT9f7Rlv+eXwUFiG24mKSzmF144PLb8m8OixyXqn4+YWU+5wZracZGCgVTVmx8viCf7IH3QXoiB2g==} + dependencies: + '@formatjs/ecma402-abstract': 2.0.0 + '@formatjs/intl-localematcher': 0.5.4 + tslib: 2.6.3 + dev: false + + /@formatjs/intl-localematcher@0.5.4: + resolution: {integrity: sha512-zTwEpWOzZ2CiKcB93BLngUX59hQkuZjT2+SAQEscSm52peDW/getsawMcWF1rGRpMCX6D7nSJA3CzJ8gn13N/g==} + dependencies: + tslib: 2.6.3 + dev: false + /@graphql-typed-document-node/core@3.2.0(graphql@16.8.1): resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} peerDependencies: @@ -4471,12 +4607,21 @@ packages: graphql: 16.8.1 dev: false + /@graphql-typed-document-node/core@3.2.0(graphql@16.9.0): + resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + graphql: 16.9.0 + dev: false + /@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.4 + debug: 4.3.5 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -4487,6 +4632,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==} @@ -4705,7 +4851,7 @@ packages: resolution: {integrity: sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==} engines: {node: '>= 10.14.2'} dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.22.5 '@jest/types': 26.6.2 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 @@ -4728,7 +4874,7 @@ packages: resolution: {integrity: sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.22.5 '@jest/types': 27.5.1 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 @@ -4750,7 +4896,7 @@ packages: resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.22.5 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 babel-plugin-istanbul: 6.1.1 @@ -4818,7 +4964,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: @@ -4835,20 +4981,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: @@ -4927,7 +5073,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@material-ui/styles': 4.11.5(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) '@material-ui/system': 4.12.2(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) '@material-ui/types': 5.1.0(@types/react@18.2.45) @@ -4956,7 +5102,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@emotion/hash': 0.8.0 '@material-ui/types': 5.1.0(@types/react@18.2.45) '@material-ui/utils': 4.11.3(react-dom@18.2.0)(react@18.2.0) @@ -4988,7 +5134,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@material-ui/utils': 4.11.3(react-dom@18.2.0)(react@18.2.0) '@types/react': 18.2.45 csstype: 2.6.21 @@ -5015,7 +5161,7 @@ packages: react: ^16.8.0 || ^17.0.0 react-dom: ^16.8.0 || ^17.0.0 dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 prop-types: 15.8.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -5043,8 +5189,8 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 - '@floating-ui/react-dom': 2.1.0(react-dom@18.2.0)(react@18.2.0) + '@babel/runtime': 7.24.7 + '@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 @@ -5066,8 +5212,8 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 - '@floating-ui/react-dom': 2.1.0(react-dom@18.3.1)(react@18.3.1) + '@babel/runtime': 7.24.7 + '@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 @@ -5089,10 +5235,10 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 - '@floating-ui/react-dom': 2.1.0(react-dom@18.2.0)(react@18.2.0) + '@babel/runtime': 7.24.7 + '@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.14(@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 @@ -5101,8 +5247,8 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@mui/core-downloads-tracker@5.15.18: - resolution: {integrity: sha512-/9pVk+Al8qxAjwFUADv4BRZgMpZM4m5E+2Q/20qhVPuIJWqKp4Ie4tGExac6zu93rgPTYVQGgu+1vjiT0E+cEw==} + /@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): @@ -5116,7 +5262,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@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) '@types/react': 18.2.45 react: 18.2.0 @@ -5140,14 +5286,14 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@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/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.15(@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.14(@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 @@ -5172,12 +5318,12 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@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/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.18 - '@mui/system': 5.15.15(@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 @@ -5208,12 +5354,12 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@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/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.18 - '@mui/system': 5.15.15(@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 @@ -5227,8 +5373,8 @@ packages: react-transition-group: 4.4.5(react-dom@18.3.1)(react@18.3.1) dev: false - /@mui/private-theming@5.15.14(@types/react@18.2.45)(react@18.2.0): - resolution: {integrity: sha512-UH0EiZckOWcxiXLX3Jbb0K7rC8mxTr9L9l6QhOZxYc4r8FHUkefltV9VDGLrzCaWh30SQiJvAEd7djX3XXY6Xw==} + /@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 @@ -5237,15 +5383,15 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 - '@mui/utils': 5.15.14(@types/react@18.2.45)(react@18.2.0) + '@babel/runtime': 7.24.7 + '@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.14(@types/react@18.2.45)(react@18.3.1): - resolution: {integrity: sha512-UH0EiZckOWcxiXLX3Jbb0K7rC8mxTr9L9l6QhOZxYc4r8FHUkefltV9VDGLrzCaWh30SQiJvAEd7djX3XXY6Xw==} + /@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 @@ -5254,8 +5400,8 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 - '@mui/utils': 5.15.14(@types/react@18.2.45)(react@18.3.1) + '@babel/runtime': 7.24.7 + '@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 @@ -5274,7 +5420,7 @@ packages: '@emotion/styled': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@emotion/cache': 11.11.0 '@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) @@ -5296,7 +5442,7 @@ packages: '@emotion/styled': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@emotion/cache': 11.11.0 '@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) @@ -5305,8 +5451,8 @@ packages: react: 18.3.1 dev: false - /@mui/system@5.15.15(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.45)(react@18.2.0): - resolution: {integrity: sha512-aulox6N1dnu5PABsfxVGOZffDVmlxPOVgj56HrUnJE8MCSh8lOvvkd47cebIVQQYAjpwieXQXiDPj5pwM40jTQ==} + /@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 @@ -5321,13 +5467,13 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@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.14(@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.14(@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 @@ -5335,8 +5481,8 @@ packages: react: 18.2.0 dev: false - /@mui/system@5.15.15(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(@types/react@18.2.45)(react@18.3.1): - resolution: {integrity: sha512-aulox6N1dnu5PABsfxVGOZffDVmlxPOVgj56HrUnJE8MCSh8lOvvkd47cebIVQQYAjpwieXQXiDPj5pwM40jTQ==} + /@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 @@ -5351,13 +5497,13 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@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.14(@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.14(@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 @@ -5376,8 +5522,8 @@ packages: '@types/react': 18.2.45 dev: false - /@mui/utils@5.15.14(@types/react@18.2.45)(react@18.2.0): - resolution: {integrity: sha512-0lF/7Hh/ezDv5X7Pry6enMsbYyGKjADzvHyo3Qrc/SSlTsQ1VkbDMbH0m2t3OR5iIVLwMoxwM7yGd+6FCMtTFA==} + /@mui/utils@5.15.2(@types/react@18.2.45)(react@18.2.0): + resolution: {integrity: sha512-6dGM9/guFKBlFRHA7/mbM+E7wE7CYDy9Ny4JLtD3J+NTyhi8nd8YxlzgAgTaTVqY0BpdQ2zdfB/q6+p2EdGM0w==} engines: {node: '>=12.0.0'} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 @@ -5386,7 +5532,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@types/prop-types': 15.7.12 '@types/react': 18.2.45 prop-types: 15.8.1 @@ -5394,8 +5540,8 @@ packages: react-is: 18.3.1 dev: false - /@mui/utils@5.15.14(@types/react@18.2.45)(react@18.3.1): - resolution: {integrity: sha512-0lF/7Hh/ezDv5X7Pry6enMsbYyGKjADzvHyo3Qrc/SSlTsQ1VkbDMbH0m2t3OR5iIVLwMoxwM7yGd+6FCMtTFA==} + /@mui/utils@5.15.2(@types/react@18.2.45)(react@18.3.1): + resolution: {integrity: sha512-6dGM9/guFKBlFRHA7/mbM+E7wE7CYDy9Ny4JLtD3J+NTyhi8nd8YxlzgAgTaTVqY0BpdQ2zdfB/q6+p2EdGM0w==} engines: {node: '>=12.0.0'} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 @@ -5404,7 +5550,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@types/prop-types': 15.7.12 '@types/react': 18.2.45 prop-types: 15.8.1 @@ -5412,8 +5558,8 @@ packages: react-is: 18.3.1 dev: false - /@mui/utils@5.15.2(@types/react@18.2.45)(react@18.2.0): - resolution: {integrity: sha512-6dGM9/guFKBlFRHA7/mbM+E7wE7CYDy9Ny4JLtD3J+NTyhi8nd8YxlzgAgTaTVqY0BpdQ2zdfB/q6+p2EdGM0w==} + /@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 @@ -5422,7 +5568,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@types/prop-types': 15.7.12 '@types/react': 18.2.45 prop-types: 15.8.1 @@ -5430,8 +5576,8 @@ packages: react-is: 18.3.1 dev: false - /@mui/utils@5.15.2(@types/react@18.2.45)(react@18.3.1): - resolution: {integrity: sha512-6dGM9/guFKBlFRHA7/mbM+E7wE7CYDy9Ny4JLtD3J+NTyhi8nd8YxlzgAgTaTVqY0BpdQ2zdfB/q6+p2EdGM0w==} + /@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 @@ -5440,7 +5586,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@types/prop-types': 15.7.12 '@types/react': 18.2.45 prop-types: 15.8.1 @@ -5464,7 +5610,6 @@ packages: /@nicolo-ribaudo/semver-v6@6.3.3: resolution: {integrity: sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg==} hasBin: true - dev: true /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -5488,18 +5633,18 @@ packages: resolution: {integrity: sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==} dev: true - /@opensystemslab/map@0.8.2: - resolution: {integrity: sha512-bNWGX4AlJCTVvMymubrEmkBcZIdB5nXLw4ALJlEtZvAnsSJVYlhjG6OiN4GXqRuZTBDpI/l4gu/6giaidEjdwQ==} + /@opensystemslab/map@0.8.3: + resolution: {integrity: sha512-4WS4Cow27wmffp7KLtSB/m9HtXz0UDCXJXhq9kz152ofSretWgAl7+WFbqC+CeoVx+CV7ETmbFdjoJ3yZQzJ0Q==} dependencies: '@turf/union': 6.5.0 accessible-autocomplete: 2.0.4 file-saver: 2.0.5 govuk-frontend: 5.4.0 jspdf: 2.5.1 - lit: 3.1.3 - ol: 9.2.3 - ol-ext: 4.0.18(ol@9.2.3) - ol-mapbox-style: 12.3.2(ol@9.2.3) + lit: 3.1.4 + 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 @@ -5515,8 +5660,8 @@ packages: requiresBuild: true optional: true - /@pmmmwh/react-refresh-webpack-plugin@0.5.13(react-refresh@0.11.0)(webpack-dev-server@4.15.2)(webpack@5.91.0): - resolution: {integrity: sha512-odZVYXly+JwzYri9rKqqUAk0cY6zLpv4dxoKinhoJNShV36Gpxf+CyDIILJ4tYsJ1ZxIWs233Y39iVnynvDA/g==} + /@pmmmwh/react-refresh-webpack-plugin@0.5.15(react-refresh@0.11.0)(webpack-dev-server@4.15.2)(webpack@5.91.0): + resolution: {integrity: sha512-LFWllMA55pzB9D34w/wXUCf8+c+IYKuJDgxiZ3qMhl64KRMBHYM1I3VdGaD2BV5FNPV2/S2596bppxHbv2ZydQ==} engines: {node: '>= 10.13'} peerDependencies: '@types/webpack': 4.x || 5.x @@ -5541,19 +5686,19 @@ packages: webpack-plugin-serve: optional: true dependencies: - ansi-html-community: 0.0.8 + ansi-html: 0.0.9 core-js-pure: 3.37.1 error-stack-parser: 2.1.4 html-entities: 2.5.2 loader-utils: 2.0.4 react-refresh: 0.11.0 - schema-utils: 3.3.0 + schema-utils: 4.2.0 source-map: 0.7.4 - webpack: 5.91.0(@swc/core@1.5.7)(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.13(react-refresh@0.14.0)(webpack@5.91.0): - resolution: {integrity: sha512-odZVYXly+JwzYri9rKqqUAk0cY6zLpv4dxoKinhoJNShV36Gpxf+CyDIILJ4tYsJ1ZxIWs233Y39iVnynvDA/g==} + /@pmmmwh/react-refresh-webpack-plugin@0.5.15(react-refresh@0.14.0)(webpack@5.91.0): + resolution: {integrity: sha512-LFWllMA55pzB9D34w/wXUCf8+c+IYKuJDgxiZ3qMhl64KRMBHYM1I3VdGaD2BV5FNPV2/S2596bppxHbv2ZydQ==} engines: {node: '>= 10.13'} peerDependencies: '@types/webpack': 4.x || 5.x @@ -5578,15 +5723,15 @@ packages: webpack-plugin-serve: optional: true dependencies: - ansi-html-community: 0.0.8 + ansi-html: 0.0.9 core-js-pure: 3.37.1 error-stack-parser: 2.1.4 html-entities: 2.5.2 loader-utils: 2.0.4 react-refresh: 0.14.0 - schema-utils: 3.3.0 + schema-utils: 4.2.0 source-map: 0.7.4 - webpack: 5.91.0(@swc/core@1.5.7)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) dev: true /@popperjs/core@2.11.8: @@ -5596,13 +5741,17 @@ packages: /@radix-ui/number@1.0.1: resolution: {integrity: sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg==} dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 dev: true /@radix-ui/primitive@1.0.1: resolution: {integrity: sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==} dependencies: - '@babel/runtime': 7.24.5 + '@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): @@ -5618,7 +5767,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@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) '@types/react': 18.2.45 '@types/react-dom': 18.2.18 @@ -5639,7 +5788,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@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-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) @@ -5650,6 +5799,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: @@ -5659,7 +5831,20 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 + '@types/react': 18.2.45 + 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 @@ -5673,7 +5858,20 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 + '@types/react': 18.2.45 + 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 @@ -5687,7 +5885,20 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 + '@types/react': 18.2.45 + 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 @@ -5705,7 +5916,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 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) @@ -5726,7 +5937,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@types/react': 18.2.45 react: 18.2.0 dev: true @@ -5744,7 +5955,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@radix-ui/react-compose-refs': 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) @@ -5763,12 +5974,26 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.45)(react@18.2.0) '@types/react': 18.2.45 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: @@ -5782,8 +6007,8 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.5 - '@floating-ui/react-dom': 2.1.0(react-dom@18.2.0)(react@18.2.0) + '@babel/runtime': 7.24.7 + '@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) @@ -5812,7 +6037,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@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) '@types/react': 18.2.45 '@types/react-dom': 18.2.18 @@ -5833,7 +6058,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@radix-ui/react-slot': 1.0.2(@types/react@18.2.45)(react@18.2.0) '@types/react': 18.2.45 '@types/react-dom': 18.2.18 @@ -5841,29 +6066,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.5 - '@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 @@ -5883,7 +6127,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@radix-ui/number': 1.0.1 '@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) @@ -5911,21 +6155,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.5 - '@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 @@ -5936,88 +6179,99 @@ packages: resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} peerDependencies: '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.7 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.45)(react@18.2.0) + '@types/react': 18.2.45 + react: 18.2.0 + dev: true + + /@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: - '@babel/runtime': 7.24.5 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.45)(react@18.2.0) + '@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.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-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.5 - '@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.5 - '@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.5 - '@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 @@ -6033,7 +6287,20 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 + '@types/react': 18.2.45 + 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 @@ -6047,12 +6314,26 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.45)(react@18.2.0) '@types/react': 18.2.45 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: @@ -6062,7 +6343,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.45)(react@18.2.0) '@types/react': 18.2.45 react: 18.2.0 @@ -6077,7 +6358,20 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 + '@types/react': 18.2.45 + 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 @@ -6091,7 +6385,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@types/react': 18.2.45 react: 18.2.0 dev: true @@ -6105,7 +6399,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@radix-ui/rect': 1.0.1 '@types/react': 18.2.45 react: 18.2.0 @@ -6120,7 +6414,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.45)(react@18.2.0) '@types/react': 18.2.45 react: 18.2.0 @@ -6139,7 +6433,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@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) '@types/react': 18.2.45 '@types/react-dom': 18.2.18 @@ -6150,7 +6444,7 @@ packages: /@radix-ui/rect@1.0.1: resolution: {integrity: sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==} dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 dev: true /@reach/component-component@0.1.3(prop-types@15.8.1)(react-dom@18.2.0)(react@18.2.0): @@ -6253,7 +6547,7 @@ packages: resolution: {integrity: sha512-dyHY+sMF0ihPus3O27ODd4+agdHMEmuRdyiZJ2CCWjPV5UFmn17ZbElvk6WOGVE4rdCJKZQCrPV2BcikOMLUGQ==} dev: false - /@rollup/plugin-babel@5.3.1(@babel/core@7.24.5)(rollup@2.79.1): + /@rollup/plugin-babel@5.3.1(@babel/core@7.22.5)(rollup@2.79.1): resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} engines: {node: '>= 10.0.0'} peerDependencies: @@ -6264,10 +6558,12 @@ packages: '@types/babel__core': optional: true dependencies: - '@babel/core': 7.24.5 - '@babel/helper-module-imports': 7.24.3 + '@babel/core': 7.22.5 + '@babel/helper-module-imports': 7.24.7 '@rollup/pluginutils': 3.1.0(rollup@2.79.1) rollup: 2.79.1 + transitivePeerDependencies: + - supports-color /@rollup/plugin-node-resolve@11.2.1(rollup@2.79.1): resolution: {integrity: sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==} @@ -6465,7 +6761,7 @@ packages: react: optional: true dependencies: - '@storybook/csf': 0.1.7 + '@storybook/csf': 0.1.11 '@storybook/global': 5.0.0 react: 18.2.0 ts-dedent: 2.2.0 @@ -6516,14 +6812,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.7 + '@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.14.202 + '@types/lodash': 4.17.6 color-convert: 2.0.1 dequal: 2.0.3 lodash: 4.17.21 @@ -6544,13 +6840,13 @@ packages: - supports-color dev: true - /@storybook/builder-manager@8.1.5(prettier@3.2.5): - resolution: {integrity: sha512-wDiHLV+UPaUN+765WwXkocVRB2QnJ61CjLHbpWaLiJvryFJt+JQ6nAvgSalCRnZxI046ztbS9T6okhpFI011IA==} + /@storybook/builder-manager@8.1.10(prettier@3.3.2): + resolution: {integrity: sha512-dhg54zpaglR9XKNAiwMqm5/IONMCEG/hO/iTfNHJI1rAGeWhvM71cmhF+VlKUcjpTlIfHe7J19+TL+sWQJNgtg==} dependencies: '@fal-works/esbuild-plugin-global-externals': 2.1.2 - '@storybook/core-common': 8.1.5(prettier@3.2.5) - '@storybook/manager': 8.1.5 - '@storybook/node-logger': 8.1.5 + '@storybook/core-common': 8.1.10(prettier@3.3.2) + '@storybook/manager': 8.1.10 + '@storybook/node-logger': 8.1.10 '@types/ejs': 3.1.5 '@yarnpkg/esbuild-plugin-pnp': 3.0.0-rc.15(esbuild@0.20.2) browser-assert: 1.2.1 @@ -6575,7 +6871,7 @@ packages: typescript: optional: true dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.24.7 '@storybook/channels': 7.6.7 '@storybook/client-logger': 7.6.7 '@storybook/core-common': 7.6.7 @@ -6584,15 +6880,15 @@ packages: '@storybook/node-logger': 7.6.7 '@storybook/preview': 7.6.7 '@storybook/preview-api': 7.6.7 - '@swc/core': 1.5.7 - '@types/node': 18.19.33 + '@swc/core': 1.6.13 + '@types/node': 18.19.39 '@types/semver': 7.5.8 - babel-loader: 9.1.3(@babel/core@7.24.5)(webpack@5.91.0) + 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 @@ -6602,14 +6898,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.5.7)(webpack@5.91.0) - terser-webpack-plugin: 5.3.10(@swc/core@1.5.7)(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.5.7)(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 @@ -6629,36 +6925,36 @@ 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 - /@storybook/channels@8.1.5: - resolution: {integrity: sha512-R+puP4tWYzQUbpIp8sX6U5oI+ZUevVOaFxXGaAN3PRXjIRC38oKTVWzj/G6GdziVFzN6rDn+JsYPmiRMYo1sYg==} + /@storybook/channels@8.1.10: + resolution: {integrity: sha512-CxZE4XrQoe+F+S2mo8Z9HTvFZKfKHIIiwYfoXKCryVp2U/z7ZKrely2PbfxWsrQvF3H0+oegfYYhYRHRiM21Zw==} dependencies: - '@storybook/client-logger': 8.1.5 - '@storybook/core-events': 8.1.5 + '@storybook/client-logger': 8.1.10 + '@storybook/core-events': 8.1.10 '@storybook/global': 5.0.0 telejson: 7.2.0 tiny-invariant: 1.3.3 dev: true - /@storybook/cli@8.1.5(@babel/preset-env@7.22.6)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-VEYluZEMleNEnD5wTD90KTh03pwjvQwEEmzHAJQJdLbWTAcgBxZ3Gb45nbUPauSqBL+HdJx0QXF8Ielk+iBttw==} + /@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.5 - '@babel/types': 7.24.5 + '@babel/core': 7.24.7 + '@babel/types': 7.24.7 '@ndelangen/get-tarball': 3.0.9 - '@storybook/codemod': 8.1.5 - '@storybook/core-common': 8.1.5(prettier@3.2.5) - '@storybook/core-events': 8.1.5 - '@storybook/core-server': 8.1.5(prettier@3.2.5)(react-dom@18.2.0)(react@18.2.0) - '@storybook/csf-tools': 8.1.5 - '@storybook/node-logger': 8.1.5 - '@storybook/telemetry': 8.1.5(prettier@3.2.5) - '@storybook/types': 8.1.5 + '@storybook/codemod': 8.1.10 + '@storybook/core-common': 8.1.10(prettier@3.3.2) + '@storybook/core-events': 8.1.10 + '@storybook/core-server': 8.1.10(prettier@3.3.2)(react-dom@18.2.0)(react@18.2.0) + '@storybook/csf-tools': 8.1.10 + '@storybook/node-logger': 8.1.10 + '@storybook/telemetry': 8.1.10(prettier@3.3.2) + '@storybook/types': 8.1.10 '@types/semver': 7.5.8 '@yarnpkg/fslib': 2.10.3 '@yarnpkg/libzip': 2.3.0 @@ -6672,11 +6968,11 @@ 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 - prettier: 3.2.5 + prettier: 3.3.2 prompts: 2.4.2 read-pkg-up: 7.0.1 semver: 7.6.2 @@ -6707,29 +7003,29 @@ packages: '@storybook/global': 5.0.0 dev: true - /@storybook/client-logger@8.1.5: - resolution: {integrity: sha512-zd+aENXnOHsxBATppELmhw/UywLzCxQjz/8i/xkUjeTRB4Ggp0hJlOUdJUEdIJz631ydyytfvM70ktBj9gMl1w==} + /@storybook/client-logger@8.1.10: + resolution: {integrity: sha512-sVXCOo7jnlCgRPOcMlQGODAEt6ipPj+8xGkRUws0kie77qiDld1drLSB6R380dWc9lUrbv9E1GpxCd/Y4ZzSJQ==} dependencies: '@storybook/global': 5.0.0 dev: true - /@storybook/codemod@8.1.5: - resolution: {integrity: sha512-eGoYozT2XPfsIFrzm4cJo9tRTX0yuK1y4uTYmKvnomezHu5kiY8qo2fUzQa5DHxiAzRDTpGlQTzb0PsxHOxYoA==} + /@storybook/codemod@8.1.10: + resolution: {integrity: sha512-HZ/vrseP/sHfbO2RZpImP5eeqOakJ0X31BIiD4uxDBIKGltMXhlPKHTI93O2YGR+vbB33otoTVRjE+ZpPmC6SA==} dependencies: - '@babel/core': 7.24.5 - '@babel/preset-env': 7.24.5(@babel/core@7.24.5) - '@babel/types': 7.24.5 - '@storybook/csf': 0.1.7 - '@storybook/csf-tools': 8.1.5 - '@storybook/node-logger': 8.1.5 - '@storybook/types': 8.1.5 + '@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.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 - jscodeshift: 0.15.2(@babel/preset-env@7.24.5) + globby: 14.0.2 + jscodeshift: 0.15.2(@babel/preset-env@7.24.7) lodash: 4.17.21 - prettier: 3.2.5 - recast: 0.23.7 + prettier: 3.3.2 + recast: 0.23.9 tiny-invariant: 1.3.3 transitivePeerDependencies: - supports-color @@ -6742,9 +7038,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.7 + '@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 @@ -6772,7 +7068,7 @@ packages: '@storybook/node-logger': 7.6.7 '@storybook/types': 7.6.7 '@types/find-cache-dir': 3.2.1 - '@types/node': 18.19.33 + '@types/node': 18.19.39 '@types/node-fetch': 2.6.11 '@types/pretty-hrtime': 1.0.3 chalk: 4.1.2 @@ -6782,7 +7078,7 @@ packages: find-cache-dir: 3.3.2 find-up: 5.0.0 fs-extra: 11.2.0 - glob: 10.4.1 + glob: 10.4.5 handlebars: 4.7.8 lazy-universal-dotenv: 4.0.0 node-fetch: 2.7.0 @@ -6796,18 +7092,18 @@ packages: - supports-color dev: true - /@storybook/core-common@8.1.5(prettier@3.2.5): - resolution: {integrity: sha512-1QDOT6KPZ9KV7Gs1yyqzvSwGBmNSUB33gckUldSBF4aqP+tZ7W5JIQ6/YTtp3V02sEokZGdL9Ud4LczQxTgy3A==} + /@storybook/core-common@8.1.10(prettier@3.3.2): + resolution: {integrity: sha512-+0GhgDRQwUlXu1lY77NdLnVBVycCEW0DG7eu7rvLYYkTyNRxbdl2RWsQpjr/j4sxqT6u82l9/b+RWpmsl4MgMQ==} peerDependencies: prettier: ^2 || ^3 peerDependenciesMeta: prettier: optional: true dependencies: - '@storybook/core-events': 8.1.5 - '@storybook/csf-tools': 8.1.5 - '@storybook/node-logger': 8.1.5 - '@storybook/types': 8.1.5 + '@storybook/core-events': 8.1.10 + '@storybook/csf-tools': 8.1.10 + '@storybook/node-logger': 8.1.10 + '@storybook/types': 8.1.10 '@yarnpkg/fslib': 2.10.3 '@yarnpkg/libzip': 2.3.0 chalk: 4.1.2 @@ -6819,14 +7115,14 @@ packages: find-cache-dir: 3.3.2 find-up: 5.0.0 fs-extra: 11.2.0 - glob: 10.4.1 + glob: 10.4.5 handlebars: 4.7.8 lazy-universal-dotenv: 4.0.0 node-fetch: 2.7.0 picomatch: 2.3.1 pkg-dir: 5.0.0 - prettier: 3.2.5 - prettier-fallback: /prettier@3.2.5 + prettier: 3.3.2 + prettier-fallback: /prettier@3.3.2 pretty-hrtime: 1.0.3 resolve-from: 5.0.0 semver: 7.6.2 @@ -6851,37 +7147,37 @@ packages: ts-dedent: 2.2.0 dev: true - /@storybook/core-events@8.1.5: - resolution: {integrity: sha512-fgwbrHoLtSX6kfmamTGJqD+KfuEgun8cc4mWKZK094ByaqbSjhnOyeYO1sfVk8qst7QTFlOfhLAUe4cz1z149A==} + /@storybook/core-events@8.1.10: + resolution: {integrity: sha512-aS4zsBVyJds74+rAW0IfTEjULDCQwXecVpQfv11B8/89/07s3bOPssGGoTtCTaN4pHbduywE6MxbmFvTmXOFCA==} dependencies: - '@storybook/csf': 0.1.7 + '@storybook/csf': 0.1.11 ts-dedent: 2.2.0 dev: true - /@storybook/core-server@8.1.5(prettier@3.2.5)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-y16W2sg5KIHG6qgbd+a0nBUYHAgiUpPDFF7cdcIpbeOIoqFn+6ECp93MVefukumiSj3sQiJFU/tSm2A8apGltw==} + /@storybook/core-server@8.1.10(prettier@3.3.2)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-jNL5/daNyo7Rcu+y/bOmSB1P65pmcaLwvpr31EUEIISaAqvgruaneS3GKHg2TR0wcxEoHaM4abqhW6iwkI/XYQ==} dependencies: '@aw-web-design/x-default-browser': 1.4.126 - '@babel/core': 7.24.5 - '@babel/parser': 7.24.5 + '@babel/core': 7.24.7 + '@babel/parser': 7.24.7 '@discoveryjs/json-ext': 0.5.7 - '@storybook/builder-manager': 8.1.5(prettier@3.2.5) - '@storybook/channels': 8.1.5 - '@storybook/core-common': 8.1.5(prettier@3.2.5) - '@storybook/core-events': 8.1.5 - '@storybook/csf': 0.1.7 - '@storybook/csf-tools': 8.1.5 + '@storybook/builder-manager': 8.1.10(prettier@3.3.2) + '@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.11 + '@storybook/csf-tools': 8.1.10 '@storybook/docs-mdx': 3.1.0-next.0 '@storybook/global': 5.0.0 - '@storybook/manager': 8.1.5 - '@storybook/manager-api': 8.1.5(react-dom@18.2.0)(react@18.2.0) - '@storybook/node-logger': 8.1.5 - '@storybook/preview-api': 8.1.5 - '@storybook/telemetry': 8.1.5(prettier@3.2.5) - '@storybook/types': 8.1.5 + '@storybook/manager': 8.1.10 + '@storybook/manager-api': 8.1.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/node-logger': 8.1.10 + '@storybook/preview-api': 8.1.10 + '@storybook/telemetry': 8.1.10(prettier@3.3.2) + '@storybook/types': 8.1.10 '@types/detect-port': 1.3.5 '@types/diff': 5.2.1 - '@types/node': 18.19.33 + '@types/node': 18.19.39 '@types/pretty-hrtime': 1.0.3 '@types/semver': 7.5.8 better-opn: 3.0.2 @@ -6892,8 +7188,7 @@ packages: diff: 5.2.0 express: 4.19.2 fs-extra: 11.2.0 - globby: 14.0.1 - ip: 2.0.1 + globby: 14.0.2 lodash: 4.17.21 open: 8.4.2 pretty-hrtime: 1.0.3 @@ -6906,7 +7201,7 @@ packages: util: 0.12.5 util-deprecate: 1.0.2 watchpack: 2.4.1 - ws: 8.17.0 + ws: 8.18.0 transitivePeerDependencies: - bufferutil - encoding @@ -6923,7 +7218,7 @@ packages: '@storybook/core-common': 7.6.7 '@storybook/node-logger': 7.6.7 '@storybook/types': 7.6.7 - '@types/node': 18.19.33 + '@types/node': 18.19.39 ts-dedent: 2.2.0 transitivePeerDependencies: - encoding @@ -6934,7 +7229,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 @@ -6942,37 +7237,37 @@ packages: /@storybook/csf-tools@7.6.7: resolution: {integrity: sha512-hyRbUGa2Uxvz3U09BjcOfMNf/5IYgRum1L6XszqK2O8tK9DGte1r6hArCIAcqiEmFMC40d0kalPzqu6WMNn7sg==} dependencies: - '@babel/generator': 7.24.5 - '@babel/parser': 7.24.5 - '@babel/traverse': 7.24.5 - '@babel/types': 7.24.5 - '@storybook/csf': 0.1.7 + '@babel/generator': 7.24.7 + '@babel/parser': 7.24.7 + '@babel/traverse': 7.24.7 + '@babel/types': 7.24.7 + '@storybook/csf': 0.1.11 '@storybook/types': 7.6.7 fs-extra: 11.2.0 - recast: 0.23.7 + recast: 0.23.9 ts-dedent: 2.2.0 transitivePeerDependencies: - supports-color dev: true - /@storybook/csf-tools@8.1.5: - resolution: {integrity: sha512-jOfUo0arlaG4LlsdWaRfZCS0I1FhUnkf06ThzRBrrp8mFAPtOpf9iW16J3fYMS5vAdE/v+Z1RxuTRich4/JGdQ==} + /@storybook/csf-tools@8.1.10: + resolution: {integrity: sha512-bm/J1jAJf1YaKhcXgOlsNN02sf8XvILXuVAvr9cFC3aFkxVoGbC2AKCss4cgXAd8EQxUNtyETkOcheB5mJ5IlA==} dependencies: - '@babel/generator': 7.24.5 - '@babel/parser': 7.24.5 - '@babel/traverse': 7.24.5 - '@babel/types': 7.24.5 - '@storybook/csf': 0.1.7 - '@storybook/types': 8.1.5 + '@babel/generator': 7.24.7 + '@babel/parser': 7.24.7 + '@babel/traverse': 7.24.7 + '@babel/types': 7.24.7 + '@storybook/csf': 0.1.11 + '@storybook/types': 8.1.10 fs-extra: 11.2.0 - recast: 0.23.7 + recast: 0.23.9 ts-dedent: 2.2.0 transitivePeerDependencies: - supports-color dev: true - /@storybook/csf@0.1.7: - resolution: {integrity: sha512-53JeLZBibjQxi0Ep+/AJTfxlofJlxy1jXcSKENlnKxHjWEYyHQCumMP5yTFjf7vhNnMjEpV3zx6t23ssFiGRyw==} + /@storybook/csf@0.1.11: + resolution: {integrity: sha512-dHYFQH3mA+EtnCkHXzicbLgsvzYjcDJ1JWsogbItZogkPHgSJM/Wr71uMkcvw8v9mmCyP4NpXJuu6bPoVsOnzg==} dependencies: type-fest: 2.19.0 dev: true @@ -7017,7 +7312,7 @@ packages: '@storybook/channels': 7.6.7 '@storybook/client-logger': 7.6.7 '@storybook/core-events': 7.6.7 - '@storybook/csf': 0.1.7 + '@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) @@ -7033,18 +7328,18 @@ packages: - react-dom dev: true - /@storybook/manager-api@8.1.5(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-iVP7FOKDf9L7zWCb8C2XeZjWSILS3hHeNwILvd9YSX9dg9du41kJYahsAHxDCR/jp/gv0ZM/V0vuHzi+naVPkQ==} + /@storybook/manager-api@8.1.10(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-9aZ+zoNrTo1BJskVmCKE/yqlBXmWaKVZh1W/+/xu3WL9wdm/tBlozRvQwegIZlRVvUOxtjOg28Vd2hySYL58zg==} dependencies: - '@storybook/channels': 8.1.5 - '@storybook/client-logger': 8.1.5 - '@storybook/core-events': 8.1.5 - '@storybook/csf': 0.1.7 + '@storybook/channels': 8.1.10 + '@storybook/client-logger': 8.1.10 + '@storybook/core-events': 8.1.10 + '@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.5 - '@storybook/theming': 8.1.5(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 8.1.5 + '@storybook/router': 8.1.10 + '@storybook/theming': 8.1.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 8.1.10 dequal: 2.0.3 lodash: 4.17.21 memoizerific: 1.11.3 @@ -7056,8 +7351,8 @@ packages: - react-dom dev: true - /@storybook/manager@8.1.5: - resolution: {integrity: sha512-qMYwD1cXW0hJ3pMmdMlbsqktVBlsjsqwMH5PBzAN4FoWiCQ/yHeAnDXRUgFFaLcORS72h9H/cQuJ+p//RdeURg==} + /@storybook/manager@8.1.10: + resolution: {integrity: sha512-dQmRBfT4CABIPhv0kL25qKcQk2SiU5mIZ1DuVzckIbZW+iYEOAusyJ/0HExM9leCrymaW3BgZGlHbIXL7EvZtw==} dev: true /@storybook/mdx2-csf@1.1.0: @@ -7068,8 +7363,8 @@ packages: resolution: {integrity: sha512-XLih8MxylkpZG9+8tgp8sPGc2tldlWF+DpuAkUv6J3Mc81mPyc3cQKQWZ7Hb+m1LpRGqKV4wyOQj1rC+leVMoQ==} dev: true - /@storybook/node-logger@8.1.5: - resolution: {integrity: sha512-9qwPX/uGhdHaVjeVUSwJUSbKX7g9goyhGYdKVuCEyl7vHR9Kp7Zkag2sEHmVdd9ixTea3jk2GZQEbnBDNQNGnw==} + /@storybook/node-logger@8.1.10: + resolution: {integrity: sha512-djgbAROgGAvz/gr49egBxCHn1+rui57e76qa9aOMPzEBcxsGrnnKKp0uNdiNt4M7Xv6S2QHbJ2SfOlHhWmMeaA==} dev: true /@storybook/postinstall@7.6.7: @@ -7083,13 +7378,13 @@ packages: react-scripts: '>=5.0.0' dependencies: '@babel/core': 7.22.5 - '@pmmmwh/react-refresh-webpack-plugin': 0.5.13(react-refresh@0.14.0)(webpack@5.91.0) + '@pmmmwh/react-refresh-webpack-plugin': 0.5.15(react-refresh@0.14.0)(webpack@5.91.0) '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.4.3)(webpack@5.91.0) '@storybook/types': 7.6.7 '@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.5.7)(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' @@ -7104,7 +7399,7 @@ packages: - webpack-plugin-serve dev: true - /@storybook/preset-react-webpack@7.6.7(@babel/core@7.22.5)(@swc/core@1.5.7)(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: @@ -7119,15 +7414,15 @@ packages: optional: true dependencies: '@babel/core': 7.22.5 - '@babel/preset-flow': 7.24.1(@babel/core@7.22.5) - '@babel/preset-react': 7.24.1(@babel/core@7.22.5) - '@pmmmwh/react-refresh-webpack-plugin': 0.5.13(react-refresh@0.14.0)(webpack@5.91.0) + '@babel/preset-flow': 7.24.7(@babel/core@7.22.5) + '@babel/preset-react': 7.24.7(@babel/core@7.22.5) + '@pmmmwh/react-refresh-webpack-plugin': 0.5.15(react-refresh@0.14.0)(webpack@5.91.0) '@storybook/core-webpack': 7.6.7 '@storybook/docs-tools': 7.6.7 '@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.33 + '@types/node': 18.19.39 '@types/semver': 7.5.8 babel-plugin-add-react-displayname: 0.0.5 fs-extra: 11.2.0 @@ -7138,7 +7433,7 @@ packages: react-refresh: 0.14.0 semver: 7.6.2 typescript: 5.4.3 - webpack: 5.91.0(@swc/core@1.5.7)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) transitivePeerDependencies: - '@swc/core' - '@types/webpack' @@ -7160,33 +7455,33 @@ packages: '@storybook/channels': 7.6.7 '@storybook/client-logger': 7.6.7 '@storybook/core-events': 7.6.7 - '@storybook/csf': 0.1.7 + '@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 dev: true - /@storybook/preview-api@8.1.5: - resolution: {integrity: sha512-pv0aT5WbnSYR7KWQgy3jLfuBM0ocYG6GTcmZLREW5554oiBPHhzNFv+ZrBI47RzbrbFxq1h5dj4v8lkEcKIrbA==} + /@storybook/preview-api@8.1.10: + resolution: {integrity: sha512-0Gl8WHDtp/srrA5uBYXl7YbC8kFQA7IxVmwWN7dIS7HAXu63JZ6JfxaFcfy+kCBfZSBD7spFG4J0f5JXRDYbpg==} dependencies: - '@storybook/channels': 8.1.5 - '@storybook/client-logger': 8.1.5 - '@storybook/core-events': 8.1.5 - '@storybook/csf': 0.1.7 + '@storybook/channels': 8.1.10 + '@storybook/client-logger': 8.1.10 + '@storybook/core-events': 8.1.10 + '@storybook/csf': 0.1.11 '@storybook/global': 5.0.0 - '@storybook/types': 8.1.5 + '@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 @@ -7202,15 +7497,15 @@ packages: typescript: '>= 4.x' webpack: '>= 4' dependencies: - debug: 4.3.4 + debug: 4.3.5 endent: 2.1.0 find-cache-dir: 3.3.2 flat-cache: 3.2.0 micromatch: 4.0.7 react-docgen-typescript: 2.2.2(typescript@5.4.3) - tslib: 2.6.2 + tslib: 2.6.3 typescript: 5.4.3 - webpack: 5.91.0(@swc/core@1.5.7)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) transitivePeerDependencies: - supports-color dev: true @@ -7225,7 +7520,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.5.7)(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: @@ -7241,9 +7536,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.5.7)(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.33 + '@types/node': 18.19.39 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) typescript: 5.4.3 @@ -7284,7 +7579,7 @@ packages: '@storybook/types': 7.6.7 '@types/escodegen': 0.0.6 '@types/estree': 0.0.51 - '@types/node': 18.19.33 + '@types/node': 18.19.39 acorn: 7.4.1 acorn-jsx: 5.3.2(acorn@7.4.1) acorn-walk: 7.2.0 @@ -7309,23 +7604,23 @@ 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.5: - resolution: {integrity: sha512-DCwvAswlbLhQu6REPV04XNRhtPvsrRqHjMHKzjlfs+qYJWY7Egkofy05qlegqjkMDve33czfnRGBm0C16IydkA==} + /@storybook/router@8.1.10: + resolution: {integrity: sha512-JDEgZ0vVDx0GLz+dKD+R1xqWwjqsCdA2F+s3/si7upHqkFRWU5ocextZ63oKsRnCoaeUh6OavAU4EdkrKiQtQw==} dependencies: - '@storybook/client-logger': 8.1.5 + '@storybook/client-logger': 8.1.10 memoizerific: 1.11.3 - qs: 6.12.1 + qs: 6.12.3 dev: true - /@storybook/telemetry@8.1.5(prettier@3.2.5): - resolution: {integrity: sha512-QbB1Ox7oBaCvIF2TacFjPLi1XYeHxSPeZUuFXeE+tSMdvvWZzYLnXfj/oISmV6Q+X5VZfyJVMrZ2LfeW9CuFNg==} + /@storybook/telemetry@8.1.10(prettier@3.3.2): + resolution: {integrity: sha512-pwiMWrq85D0AnaAgYNfB2w2BDgqnetQ+tXwsUAw4fUEFwA4oPU6r0uqekRbNNE6wmSSYjiiFP3JgknBFqjd2hg==} dependencies: - '@storybook/client-logger': 8.1.5 - '@storybook/core-common': 8.1.5(prettier@3.2.5) - '@storybook/csf-tools': 8.1.5 + '@storybook/client-logger': 8.1.10 + '@storybook/core-common': 8.1.10(prettier@3.3.2) + '@storybook/csf-tools': 8.1.10 chalk: 4.1.2 detect-package-manager: 2.0.1 fetch-retry: 5.0.6 @@ -7373,8 +7668,8 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true - /@storybook/theming@8.1.5(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-E4z1t49fMbVvd/t2MSL0Ecp5zbqsU/QfWBX/eorJ+m+Xc9skkwwG5qf/FnP9x4RZ9KaX8U8+862t0eafVvf4Tw==} + /@storybook/theming@8.1.10(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-W7mth4hwdTqWLneqYCyUnIEiDg4vSokoad8HEodPz6JC9XUPUX3Yi2W4W3xFvqrW4Z5RXfuJ53iG2HN+0AgaQw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta @@ -7385,7 +7680,7 @@ packages: optional: true dependencies: '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0) - '@storybook/client-logger': 8.1.5 + '@storybook/client-logger': 8.1.10 '@storybook/global': 5.0.0 memoizerific: 1.11.3 react: 18.2.0 @@ -7401,10 +7696,10 @@ packages: file-system-cache: 2.3.0 dev: true - /@storybook/types@8.1.5: - resolution: {integrity: sha512-/PfAZh1xtXN2MvAZZKpiL/nPkC3bZj8BQ7P7z5a/aQarP+y7qdXuoitYQ6oOH3rkaiYywmkWzA/y4iW70KXLKg==} + /@storybook/types@8.1.10: + resolution: {integrity: sha512-UJ97iqI+0Mk13I6ayd3TaBfSFBkWnEauwTnFMQe1dN/L3wTh8laOBaLa0Vr3utRSnt2b5hpcw/nq7azB/Gx4Yw==} dependencies: - '@storybook/channels': 8.1.5 + '@storybook/channels': 8.1.10 '@types/express': 4.17.21 file-system-cache: 2.3.0 dev: true @@ -7476,13 +7771,13 @@ packages: resolution: {integrity: sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==} engines: {node: '>=10'} dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.24.7 /@svgr/plugin-jsx@5.5.0: resolution: {integrity: sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==} engines: {node: '>=10'} dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.22.5 '@svgr/babel-preset': 5.5.0 '@svgr/hast-util-to-babel-ast': 5.5.0 svg-parser: 2.0.4 @@ -7501,10 +7796,10 @@ packages: resolution: {integrity: sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==} engines: {node: '>=10'} dependencies: - '@babel/core': 7.24.5 - '@babel/plugin-transform-react-constant-elements': 7.24.1(@babel/core@7.24.5) - '@babel/preset-env': 7.24.5(@babel/core@7.24.5) - '@babel/preset-react': 7.22.5(@babel/core@7.24.5) + '@babel/core': 7.22.5 + '@babel/plugin-transform-react-constant-elements': 7.24.7(@babel/core@7.22.5) + '@babel/preset-env': 7.22.6(@babel/core@7.22.5) + '@babel/preset-react': 7.22.5(@babel/core@7.22.5) '@svgr/core': 5.5.0 '@svgr/plugin-jsx': 5.5.0 '@svgr/plugin-svgo': 5.5.0 @@ -7512,124 +7807,124 @@ packages: transitivePeerDependencies: - supports-color - /@swc/core-darwin-arm64@1.5.7: - resolution: {integrity: sha512-bZLVHPTpH3h6yhwVl395k0Mtx8v6CGhq5r4KQdAoPbADU974Mauz1b6ViHAJ74O0IVE5vyy7tD3OpkQxL/vMDQ==} + /@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.5.7: - resolution: {integrity: sha512-RpUyu2GsviwTc2qVajPL0l8nf2vKj5wzO3WkLSHAHEJbiUZk83NJrZd1RVbEknIMO7+Uyjh54hEh8R26jSByaw==} + /@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.5.7: - resolution: {integrity: sha512-cTZWTnCXLABOuvWiv6nQQM0hP6ZWEkzdgDvztgHI/+u/MvtzJBN5lBQ2lue/9sSFYLMqzqff5EHKlFtrJCA9dQ==} + /@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.5.7: - resolution: {integrity: sha512-hoeTJFBiE/IJP30Be7djWF8Q5KVgkbDtjySmvYLg9P94bHg9TJPSQoC72tXx/oXOgXvElDe/GMybru0UxhKx4g==} + /@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.5.7: - resolution: {integrity: sha512-+NDhK+IFTiVK1/o7EXdCeF2hEzCiaRSrb9zD7X2Z7inwWlxAntcSuzZW7Y6BRqGQH89KA91qYgwbnjgTQ22PiQ==} + /@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.5.7: - resolution: {integrity: sha512-25GXpJmeFxKB+7pbY7YQLhWWjkYlR+kHz5I3j9WRl3Lp4v4UD67OGXwPe+DIcHqcouA1fhLhsgHJWtsaNOMBNg==} + /@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.5.7: - resolution: {integrity: sha512-0VN9Y5EAPBESmSPPsCJzplZHV26akC0sIgd3Hc/7S/1GkSMoeuVL+V9vt+F/cCuzr4VidzSkqftdP3qEIsXSpg==} + /@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.5.7: - resolution: {integrity: sha512-RtoNnstBwy5VloNCvmvYNApkTmuCe4sNcoYWpmY7C1+bPR+6SOo8im1G6/FpNem8AR5fcZCmXHWQ+EUmRWJyuA==} + /@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.5.7: - resolution: {integrity: sha512-Xm0TfvcmmspvQg1s4+USL3x8D+YPAfX2JHygvxAnCJ0EHun8cm2zvfNBcsTlnwYb0ybFWXXY129aq1wgFC9TpQ==} + /@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.5.7: - resolution: {integrity: sha512-tp43WfJLCsKLQKBmjmY/0vv1slVywR5Q4qKjF5OIY8QijaEW7/8VwPyUyVoJZEnDgv9jKtUTG5PzqtIYPZGnyg==} + /@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.5.7: - resolution: {integrity: sha512-U4qJRBefIJNJDRCCiVtkfa/hpiZ7w0R6kASea+/KLp+vkus3zcLSB8Ub8SvKgTIxjWpwsKcZlPf5nrv4ls46SQ==} + /@swc/core@1.6.13: + resolution: {integrity: sha512-eailUYex6fkfaQTev4Oa3mwn0/e3mQU4H8y1WPuImYQESOQDtVrowwUGDSc19evpBbHpKtwM+hw8nLlhIsF+Tw==} engines: {node: '>=10'} requiresBuild: true peerDependencies: - '@swc/helpers': ^0.5.0 + '@swc/helpers': '*' peerDependenciesMeta: '@swc/helpers': optional: true dependencies: '@swc/counter': 0.1.3 - '@swc/types': 0.1.7 + '@swc/types': 0.1.9 optionalDependencies: - '@swc/core-darwin-arm64': 1.5.7 - '@swc/core-darwin-x64': 1.5.7 - '@swc/core-linux-arm-gnueabihf': 1.5.7 - '@swc/core-linux-arm64-gnu': 1.5.7 - '@swc/core-linux-arm64-musl': 1.5.7 - '@swc/core-linux-x64-gnu': 1.5.7 - '@swc/core-linux-x64-musl': 1.5.7 - '@swc/core-win32-arm64-msvc': 1.5.7 - '@swc/core-win32-ia32-msvc': 1.5.7 - '@swc/core-win32-x64-msvc': 1.5.7 + '@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.7: - resolution: {integrity: sha512-scHWahbHF0eyj3JsxG9CFJgFdFNaVQCNAimBlT6PzS3n/HptxqREjsm4OH6AN3lYcffZYSPxXW8ua2BEHp0lJQ==} + /@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.2 - '@babel/runtime': 7.24.5 + '@babel/code-frame': 7.24.7 + '@babel/runtime': 7.24.7 '@types/aria-query': 5.0.4 aria-query: 5.3.0 chalk: 4.1.2 @@ -7642,8 +7937,8 @@ packages: resolution: {integrity: sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==} engines: {node: '>=14'} dependencies: - '@babel/code-frame': 7.24.2 - '@babel/runtime': 7.24.5 + '@babel/code-frame': 7.24.7 + '@babel/runtime': 7.24.7 '@types/aria-query': 5.0.4 aria-query: 5.1.3 chalk: 4.1.2 @@ -7656,8 +7951,8 @@ packages: resolution: {integrity: sha512-N5ixQ2qKpi5OLYfwQmUb/5mSV9LneAcaUfp32pn4yCnpb8r/Yz0pXFPck21dIicKmi+ta5WRAknkZCfA8refMA==} engines: {node: '>=8', npm: '>=6', yarn: '>=1'} dependencies: - '@adobe/css-tools': 4.3.3 - '@babel/runtime': 7.24.5 + '@adobe/css-tools': 4.4.0 + '@babel/runtime': 7.24.7 '@types/testing-library__jest-dom': 5.14.9 aria-query: 5.3.0 chalk: 3.0.0 @@ -7674,20 +7969,20 @@ packages: react: ^18.0.0 react-dom: ^18.0.0 dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@testing-library/dom': 9.3.4 '@types/react-dom': 18.2.18 react: 18.2.0 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): @@ -7893,19 +8188,19 @@ 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.0 + prosemirror-model: 1.21.3 prosemirror-schema-basic: 1.2.2 - prosemirror-schema-list: 1.3.0 + 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.0)(prosemirror-state@1.4.3)(prosemirror-view@1.33.6) + 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.6 + prosemirror-view: 1.33.8 dev: false /@tiptap/react@2.4.0(@tiptap/core@2.4.0)(@tiptap/pm@2.0.3)(react-dom@18.2.0)(react@18.2.0): @@ -7958,67 +8253,92 @@ packages: resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} dev: true - /@turf/area@6.5.0: - resolution: {integrity: sha512-xCZdiuojokLbQ+29qR6qoMD89hv+JAgWjLrwSEWL+3JV8IXKeNFl6XkEJz9HGkVpnXvQKJoRz4/liT+8ZZ5Jyg==} + /@turf/area@7.0.0: + resolution: {integrity: sha512-Q/P6OGV8dJJs1BiraKFNBjtsMbz7B52mLCtgKh3syzujSREMx52RlsiOBQp8GujFMMiau+Mt25XKbVwtjHVi8Q==} dependencies: - '@turf/helpers': 6.5.0 - '@turf/meta': 6.5.0 + '@turf/helpers': 7.0.0 + '@turf/meta': 7.0.0 + tslib: 2.6.3 dev: false - /@turf/bbox@6.5.0: - resolution: {integrity: sha512-RBbLaao5hXTYyyg577iuMtDB8ehxMlUqHEJiMs8jT1GHkFhr6sYre3lmLsPeYEi/ZKj5TP5tt7fkzNdJ4GIVyw==} + /@turf/bbox-polygon@7.0.0: + resolution: {integrity: sha512-RMBADOr0zOhVhTidKXCAx1TLTzgBvZwQKI6KJ1FgoCPH7GMZZnMXGMvOtdQLdsplS4Zs6+NoVtaK2x0+EXdYJQ==} dependencies: - '@turf/helpers': 6.5.0 - '@turf/meta': 6.5.0 + '@turf/helpers': 7.0.0 + tslib: 2.6.3 dev: false - /@turf/buffer@6.5.0: - resolution: {integrity: sha512-qeX4N6+PPWbKqp1AVkBVWFerGjMYMUyencwfnkCesoznU6qvfugFHNAngNqIBVnJjZ5n8IFyOf+akcxnrt9sNg==} + /@turf/bbox@7.0.0: + resolution: {integrity: sha512-IyXG5HAsn6IZLdAtQo7aWYccjU5WsV+uzIzhGaXrh/qTVylSYmRiWgLdiekHZVED9nv9r7D/EJUMOT4zyA6POA==} dependencies: - '@turf/bbox': 6.5.0 - '@turf/center': 6.5.0 - '@turf/helpers': 6.5.0 - '@turf/meta': 6.5.0 - '@turf/projection': 6.5.0 + '@turf/helpers': 7.0.0 + '@turf/meta': 7.0.0 + tslib: 2.6.3 + dev: false + + /@turf/buffer@7.0.0: + resolution: {integrity: sha512-viw3XjTtYVtkq5DkRDBQjXoi5QeEMhe4JHWXIfHMHs4o5F9B+lZ8+TtXWo18X5aAXknv6ib1z2syoaQdBpb5Xw==} + dependencies: + '@turf/bbox': 7.0.0 + '@turf/center': 7.0.0 + '@turf/helpers': 7.0.0 + '@turf/jsts': 2.7.1 + '@turf/meta': 7.0.0 + '@turf/projection': 7.0.0 d3-geo: 1.7.1 - turf-jsts: 1.2.3 dev: false - /@turf/center@6.5.0: - resolution: {integrity: sha512-T8KtMTfSATWcAX088rEDKjyvQCBkUsLnK/Txb6/8WUXIeOZyHu42G7MkdkHRoHtwieLdduDdmPLFyTdG5/e7ZQ==} + /@turf/center@7.0.0: + resolution: {integrity: sha512-5RZia9uuWxz2oCyd1vsNkBeraBNdwCsIo4UGRQdyswBeLFVbRwIUa7M7+2z2D7B1YIgovuLIRVfk6FeWUQXDtQ==} dependencies: - '@turf/bbox': 6.5.0 - '@turf/helpers': 6.5.0 + '@turf/bbox': 7.0.0 + '@turf/helpers': 7.0.0 + tslib: 2.6.3 dev: false - /@turf/clone@6.5.0: - resolution: {integrity: sha512-mzVtTFj/QycXOn6ig+annKrM6ZlimreKYz6f/GSERytOpgzodbQyOgkfwru100O1KQhhjSudKK4DsQ0oyi9cTw==} + /@turf/clone@7.0.0: + resolution: {integrity: sha512-bQBx/wbQoGNtZzuHetLt44NMqOCnjSXcvTWm+LJ7YTmwrqZVAjISDhFxgawY/L+G3p+ya5WoxQwZWak80uYg3A==} dependencies: - '@turf/helpers': 6.5.0 + '@turf/helpers': 7.0.0 + tslib: 2.6.3 dev: false /@turf/helpers@6.5.0: resolution: {integrity: sha512-VbI1dV5bLFzohYYdgqwikdMVpe7pJ9X3E+dlr425wa2/sMJqYDhTO++ec38/pcPvPE6oD9WEEeU3Xu3gza+VPw==} dev: false + /@turf/helpers@7.0.0: + resolution: {integrity: sha512-vwZvxRuyjGpGXvhXSbT9mX6FK92dBMLWbMbDJ/MXQUPx17ReVPFc+6N6IcxAzZfkiCnqy7vpuq0c+/TTrQxIiA==} + dependencies: + deep-equal: 2.2.3 + tslib: 2.6.3 + dev: false + /@turf/invariant@6.5.0: resolution: {integrity: sha512-Wv8PRNCtPD31UVbdJE/KVAWKe7l6US+lJItRR/HOEW3eh+U/JwRCSUl/KZ7bmjM/C+zLNoreM2TU6OoLACs4eg==} dependencies: '@turf/helpers': 6.5.0 dev: false - /@turf/meta@6.5.0: - resolution: {integrity: sha512-RrArvtsV0vdsCBegoBtOalgdSOfkBrTJ07VkpiCnq/491W67hnMWmDu7e6Ztw0C3WldRYTXkg3SumfdzZxLBHA==} + /@turf/jsts@2.7.1: + resolution: {integrity: sha512-+nwOKme/aUprsxnLSfr2LylV6eL6T1Tuln+4Hl92uwZ8FrmjDRCH5Bi1LJNVfWCiYgk8+5K+t2zDphWNTsIFDA==} dependencies: - '@turf/helpers': 6.5.0 + jsts: 2.7.1 dev: false - /@turf/projection@6.5.0: - resolution: {integrity: sha512-/Pgh9mDvQWWu8HRxqpM+tKz8OzgauV+DiOcr3FCjD6ubDnrrmMJlsf6fFJmggw93mtVPrZRL6yyi9aYCQBOIvg==} + /@turf/meta@7.0.0: + resolution: {integrity: sha512-cEXr13uFwhXq5mFBy0IK1U/QepE5qgk3zXpBYsla3lYV7cB83Vh+NNUR+r0/w/QoJqest1TG4H20F9tGYWPi/g==} dependencies: - '@turf/clone': 6.5.0 - '@turf/helpers': 6.5.0 - '@turf/meta': 6.5.0 + '@turf/helpers': 7.0.0 + dev: false + + /@turf/projection@7.0.0: + resolution: {integrity: sha512-EoPbZPZSDv0AJMfYhqnS455CVMYwPU78kHyQHeOnMR1Tc5z+TiImvyq55umhfecgpETzuDsjFkmeQ2phDKTmbA==} + dependencies: + '@turf/clone': 7.0.0 + '@turf/helpers': 7.0.0 + '@turf/meta': 7.0.0 + tslib: 2.6.3 dev: false /@turf/union@6.5.0: @@ -8036,8 +8356,8 @@ packages: /@types/babel__core@7.20.5: resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} dependencies: - '@babel/parser': 7.24.5 - '@babel/types': 7.24.5 + '@babel/parser': 7.24.7 + '@babel/types': 7.24.7 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.6 @@ -8045,18 +8365,18 @@ packages: /@types/babel__generator@7.6.8: resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.24.7 /@types/babel__template@7.4.4: resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} dependencies: - '@babel/parser': 7.24.5 - '@babel/types': 7.24.5 + '@babel/parser': 7.24.7 + '@babel/types': 7.24.7 /@types/babel__traverse@7.20.6: resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.24.7 /@types/body-parser@1.19.5: resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} @@ -8076,7 +8396,7 @@ packages: /@types/connect-history-api-fallback@1.5.4: resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} dependencies: - '@types/express-serve-static-core': 4.19.1 + '@types/express-serve-static-core': 4.19.5 '@types/node': 17.0.45 /@types/connect@3.4.38: @@ -8129,8 +8449,8 @@ packages: resolution: {integrity: sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg==} dev: true - /@types/emscripten@1.39.12: - resolution: {integrity: sha512-AQImDBgudQfMqUBfrjZYilRxoHDzTBp+ejh+g1fY67eSMalwIKtBXofjpyI0JBgNpHGzxeGAR2QDya0wxW9zbA==} + /@types/emscripten@1.39.13: + resolution: {integrity: sha512-cFq+fO/isvhvmuP/+Sl4K4jtU6E23DoivtbO4r50e3odaxAiVdbfSYRDdJ4gCdxx+3aRjhphS5ZMwIH4hFy/Cw==} dev: true /@types/escodegen@0.0.6: @@ -8159,8 +8479,8 @@ packages: /@types/estree@1.0.5: resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - /@types/express-serve-static-core@4.19.1: - resolution: {integrity: sha512-ej0phymbFLoCB26dbbq5PGScsf2JAJ4IJHjG10LalgUV36XKTmA4GdA+PVllKvRk0sEKt64X8975qFnkSi0hqA==} + /@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 @@ -8171,7 +8491,7 @@ packages: resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} dependencies: '@types/body-parser': 1.19.5 - '@types/express-serve-static-core': 4.19.1 + '@types/express-serve-static-core': 4.19.5 '@types/qs': 6.9.15 '@types/serve-static': 1.15.7 @@ -8181,7 +8501,7 @@ packages: /@types/geojson@7946.0.14: resolution: {integrity: sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg==} - dev: false + dev: true /@types/graceful-fs@4.1.9: resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} @@ -8256,9 +8576,8 @@ packages: /@types/lodash@4.14.202: resolution: {integrity: sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==} - /@types/lodash@4.17.4: - resolution: {integrity: sha512-wYCP26ZLxaT3R39kiN2+HcJ4kTd3U1waI/cY7ivWYqFP6pW3ZNpvi6Wd6PHZx7T/t8z0vlkXMg3QYLa7DZ/IJQ==} - dev: false + /@types/lodash@4.17.6: + resolution: {integrity: sha512-OpXEVoCKSS3lQqjx9GGGOapBeuW5eUboYHRlHP9urXPX25IKZ6AnP5ZRxtVf63iieUbsHxLn8NQ5Nlftc6yzAA==} /@types/mdast@3.0.15: resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} @@ -8292,14 +8611,14 @@ packages: /@types/node@17.0.45: resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} - /@types/node@18.19.33: - resolution: {integrity: sha512-NR9+KrpSajr2qBVp/Yt5TU/rp+b5Mayi3+OlMlcg2cVCfRmcG5PWZ7S4+MG9PZ5gWBoc9Pd0BKSRViuBCRPu0A==} + /@types/node@18.19.39: + resolution: {integrity: sha512-nPwTRDKUctxw3di5b4TfT3I0sWDiWoPQCZjXhvdkINntwr8lcoVCKsTgnXeRubKIlfnV+eN/HYk6Jb40tbcEAQ==} dependencies: undici-types: 5.26.5 dev: true - /@types/node@20.12.12: - resolution: {integrity: sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==} + /@types/node@20.14.10: + resolution: {integrity: sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==} dependencies: undici-types: 5.26.5 dev: false @@ -8333,7 +8652,6 @@ packages: /@types/raf@3.4.3: resolution: {integrity: sha512-c4YAvMedbPZ5tEyxzQdMoOhhJ4RD3rngZIdwC2/qDN3d7JpEhB6fiBRKVY1lg5B7Wk+uPBjn5f39j1/2MY1oOw==} - requiresBuild: true dev: false optional: true @@ -8510,12 +8828,12 @@ packages: typescript: optional: true dependencies: - '@eslint-community/regexpp': 4.10.0 + '@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) '@typescript-eslint/utils': 5.62.0(eslint@8.44.0)(typescript@5.4.3) - debug: 4.3.4 + debug: 4.3.5 eslint: 8.44.0 graphemer: 1.4.0 ignore: 5.3.1 @@ -8551,7 +8869,7 @@ packages: '@typescript-eslint/scope-manager': 5.58.0 '@typescript-eslint/types': 5.58.0 '@typescript-eslint/typescript-estree': 5.58.0(typescript@5.4.3) - debug: 4.3.4 + debug: 4.3.5 eslint: 8.44.0 typescript: 5.4.3 transitivePeerDependencies: @@ -8583,7 +8901,7 @@ packages: dependencies: '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.3) '@typescript-eslint/utils': 5.62.0(eslint@8.44.0)(typescript@5.4.3) - debug: 4.3.4 + debug: 4.3.5 eslint: 8.44.0 tsutils: 3.21.0(typescript@5.4.3) typescript: 5.4.3 @@ -8609,7 +8927,7 @@ packages: dependencies: '@typescript-eslint/types': 5.58.0 '@typescript-eslint/visitor-keys': 5.58.0 - debug: 4.3.4 + debug: 4.3.5 globby: 11.1.0 is-glob: 4.0.3 semver: 7.6.2 @@ -8629,7 +8947,7 @@ packages: dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.3.4 + debug: 4.3.5 globby: 11.1.0 is-glob: 4.0.3 semver: 7.6.2 @@ -8798,35 +9116,35 @@ packages: resolution: {integrity: sha512-bXuaUNLVVkD20wcGBWRyo7j9N3TxePEWFZj2Y+r9OoUzfqmavM84+mFykRicNsBqatba5JLay1t48wxaXaWnlA==} engines: {node: '>=8'} dependencies: - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@wry/context@0.7.4: resolution: {integrity: sha512-jmT7Sb4ZQWI5iyu3lobQxICu2nC/vbUhP0vIdd6tHC9PTfenmRmuIFqktc6GH9cgi+ZHnsLWPvfSvc4DrYmKiQ==} engines: {node: '>=8'} dependencies: - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@wry/equality@0.5.7: resolution: {integrity: sha512-BRFORjsTuQv5gxcXsuDXx6oGRhuVsEGwZy6LOzRRfgu+eSfxbhUQ9L9YtSEIuIjY/o7g3iWFjrc5eSY1GXP2Dw==} engines: {node: '>=8'} dependencies: - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@wry/trie@0.4.3: resolution: {integrity: sha512-I6bHwH0fSf6RqQcnnXLJKhkSXG45MFral3GxPaY4uAl0LYDZM+YDVDAiU9bYwjTuysy1S0IeecWtmq1SZA3M1w==} engines: {node: '>=8'} dependencies: - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@wry/trie@0.5.0: resolution: {integrity: sha512-FNoYzHawTMk/6KMQoEG5O4PuioX19UbwdQKF44yw0nLfOypfQdjtfZzo/UIJWAJ23sNIFbD1Ug9lbaDGMwbqQA==} engines: {node: '>=8'} dependencies: - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@xobotyi/scrollbar-width@1.9.5: @@ -8846,7 +9164,7 @@ packages: esbuild: '>=0.10.0' dependencies: esbuild: 0.20.2 - tslib: 2.6.2 + tslib: 2.6.3 dev: true /@yarnpkg/fslib@2.10.3: @@ -8861,7 +9179,7 @@ packages: resolution: {integrity: sha512-6xm38yGVIa6mKm/DUCF2zFFJhERh/QWp1ufm4cNUvxsONBmfPg8uZ9pZBdOmF6qFGr/HlT6ABBkCSx/dlEtvWg==} engines: {node: '>=12 <14 || 14.2 - 14.9 || >14.10.0'} dependencies: - '@types/emscripten': 1.39.12 + '@types/emscripten': 1.39.13 tslib: 1.14.1 dev: true @@ -8893,12 +9211,12 @@ packages: acorn: 7.4.1 acorn-walk: 7.2.0 - /acorn-import-assertions@1.9.0(acorn@8.11.3): + /acorn-import-assertions@1.9.0(acorn@8.12.1): resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} peerDependencies: acorn: ^8 dependencies: - acorn: 8.11.3 + acorn: 8.12.1 /acorn-jsx@5.3.2(acorn@7.4.1): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} @@ -8908,20 +9226,22 @@ packages: acorn: 7.4.1 dev: true - /acorn-jsx@5.3.2(acorn@8.11.3): + /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.11.3 + acorn: 8.12.1 /acorn-walk@7.2.0: resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} engines: {node: '>=0.4.0'} - /acorn-walk@8.3.2: - resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} + /acorn-walk@8.3.3: + resolution: {integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==} engines: {node: '>=0.4.0'} + dependencies: + acorn: 8.12.1 dev: true /acorn@7.4.1: @@ -8929,8 +9249,8 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - /acorn@8.11.3: - resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + /acorn@8.12.1: + resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} engines: {node: '>=0.4.0'} hasBin: true @@ -8949,7 +9269,7 @@ packages: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} dependencies: - debug: 4.3.4 + debug: 4.3.5 transitivePeerDependencies: - supports-color @@ -8961,7 +9281,7 @@ packages: indent-string: 4.0.0 dev: true - /ajv-formats@2.1.1(ajv@8.13.0): + /ajv-formats@2.1.1(ajv@8.16.0): resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: ajv: ^8.0.0 @@ -8969,7 +9289,7 @@ packages: ajv: optional: true dependencies: - ajv: 8.13.0 + ajv: 8.16.0 /ajv-keywords@3.5.2(ajv@6.12.6): resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} @@ -8978,12 +9298,12 @@ packages: dependencies: ajv: 6.12.6 - /ajv-keywords@5.1.0(ajv@8.13.0): + /ajv-keywords@5.1.0(ajv@8.16.0): resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} peerDependencies: ajv: ^8.8.2 dependencies: - ajv: 8.13.0 + ajv: 8.16.0 fast-deep-equal: 3.1.3 /ajv@6.12.6: @@ -8994,8 +9314,8 @@ packages: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - /ajv@8.13.0: - resolution: {integrity: sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==} + /ajv@8.16.0: + resolution: {integrity: sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==} dependencies: fast-deep-equal: 3.1.3 json-schema-traverse: 1.0.0 @@ -9013,6 +9333,11 @@ packages: 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==} engines: {node: '>=8'} @@ -9083,7 +9408,7 @@ packages: resolution: {integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==} engines: {node: '>=10'} dependencies: - tslib: 2.6.2 + tslib: 2.6.3 dev: true /aria-query@5.1.3: @@ -9102,11 +9427,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /arr-flatten@1.1.0: - resolution: {integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==} - engines: {node: '>=0.10.0'} - dev: true - /arr-union@3.1.0: resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==} engines: {node: '>=0.10.0'} @@ -9207,8 +9527,9 @@ packages: es-abstract: 1.23.3 es-shim-unscopables: 1.0.2 - /array.prototype.tosorted@1.1.3: - resolution: {integrity: sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==} + /array.prototype.tosorted@1.1.4: + resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 @@ -9258,7 +9579,7 @@ packages: resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} engines: {node: '>=4'} dependencies: - tslib: 2.6.2 + tslib: 2.6.3 dev: true /astral-regex@2.0.0: @@ -9297,10 +9618,10 @@ packages: engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.1.0 dependencies: - browserslist: 4.23.0 - caniuse-lite: 1.0.30001621 + browserslist: 4.23.2 + caniuse-lite: 1.0.30001641 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.1 @@ -9327,8 +9648,8 @@ packages: resolution: {integrity: sha512-QbUdXJVTpvUTHU7871ppZkdOLBeGUKBQWHkHrvN2V9IQWGMt61zf3B45BtzjxEJzYuj0JBjBZP/hmYS/R9pmAw==} engines: {node: '>=4'} - /axios@1.6.8: - resolution: {integrity: sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==} + /axios@1.7.2: + resolution: {integrity: sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==} dependencies: follow-redirects: 1.15.6 form-data: 4.0.0 @@ -9337,17 +9658,16 @@ 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.5): + /babel-core@7.0.0-bridge.0(@babel/core@7.24.7): resolution: {integrity: sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.24.7 dev: true /babel-jest@26.6.3(@babel/core@7.22.5): @@ -9387,24 +9707,6 @@ packages: transitivePeerDependencies: - supports-color - /babel-jest@27.5.1(@babel/core@7.24.5): - resolution: {integrity: sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - peerDependencies: - '@babel/core': ^7.8.0 - dependencies: - '@babel/core': 7.24.5 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 - '@types/babel__core': 7.20.5 - babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 27.5.1(@babel/core@7.24.5) - chalk: 4.1.2 - graceful-fs: 4.2.11 - slash: 3.0.0 - transitivePeerDependencies: - - supports-color - /babel-loader@8.3.0(@babel/core@7.22.5)(webpack@5.91.0): resolution: {integrity: sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==} engines: {node: '>= 8.9'} @@ -9417,19 +9719,19 @@ packages: loader-utils: 2.0.4 make-dir: 3.1.0 schema-utils: 2.7.1 - webpack: 5.91.0(@swc/core@1.5.7)(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.5)(webpack@5.91.0): + /babel-loader@9.1.3(@babel/core@7.24.7)(webpack@5.91.0): resolution: {integrity: sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==} engines: {node: '>= 14.15.0'} peerDependencies: '@babel/core': ^7.12.0 webpack: '>=5' dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.24.7 find-cache-dir: 4.0.0 schema-utils: 4.2.0 - webpack: 5.91.0(@swc/core@1.5.7)(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: @@ -9439,7 +9741,7 @@ packages: /babel-plugin-emotion@10.2.2: resolution: {integrity: sha512-SMSkGoqTbTyUTDeuVuPIWifPdUGkTk1Kf9BWRiXIOIcuyMfsdp2EjeiiFvOzX8NOBvEh/ypKYvUh2rkgAJMCLA==} dependencies: - '@babel/helper-module-imports': 7.24.3 + '@babel/helper-module-imports': 7.24.7 '@emotion/hash': 0.8.0 '@emotion/memoize': 0.7.4 '@emotion/serialize': 0.11.16 @@ -9449,13 +9751,15 @@ packages: escape-string-regexp: 1.0.5 find-root: 1.1.0 source-map: 0.5.7 + transitivePeerDependencies: + - supports-color dev: true /babel-plugin-istanbul@6.1.1: resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} engines: {node: '>=8'} dependencies: - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.7 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-instrument: 5.2.1 @@ -9467,8 +9771,8 @@ packages: resolution: {integrity: sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==} engines: {node: '>= 10.14.2'} dependencies: - '@babel/template': 7.24.0 - '@babel/types': 7.24.5 + '@babel/template': 7.24.7 + '@babel/types': 7.24.7 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.6 dev: true @@ -9477,15 +9781,15 @@ packages: resolution: {integrity: sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@babel/template': 7.24.0 - '@babel/types': 7.24.5 + '@babel/template': 7.24.7 + '@babel/types': 7.24.7 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.6 /babel-plugin-macros@2.8.0: resolution: {integrity: sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==} dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 cosmiconfig: 6.0.0 resolve: 1.22.8 dev: true @@ -9494,7 +9798,7 @@ packages: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} engines: {node: '>=10', npm: '>=6'} dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 cosmiconfig: 7.1.0 resolve: 1.22.8 @@ -9510,36 +9814,48 @@ packages: peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/compat-data': 7.24.4 + '@babel/compat-data': 7.24.7 '@babel/core': 7.22.5 '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.22.5) semver: 6.3.1 transitivePeerDependencies: - supports-color - dev: true - /babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.24.5): + /babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.24.7): resolution: {integrity: sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/compat-data': 7.24.4 - '@babel/core': 7.24.5 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.5) + '@babel/compat-data': 7.24.7 + '@babel/core': 7.24.7 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.7) semver: 6.3.1 transitivePeerDependencies: - supports-color + dev: true + + /babel-plugin-polyfill-corejs3@0.10.4(@babel/core@7.22.5): + resolution: {integrity: sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.22.5) + core-js-compat: 3.37.1 + transitivePeerDependencies: + - supports-color - /babel-plugin-polyfill-corejs3@0.10.4(@babel/core@7.24.5): + /babel-plugin-polyfill-corejs3@0.10.4(@babel/core@7.24.7): resolution: {integrity: sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.5) + '@babel/core': 7.24.7 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.7) core-js-compat: 3.37.1 transitivePeerDependencies: - supports-color + dev: true /babel-plugin-polyfill-corejs3@0.8.7(@babel/core@7.22.5): resolution: {integrity: sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA==} @@ -9551,7 +9867,6 @@ packages: core-js-compat: 3.37.1 transitivePeerDependencies: - supports-color - dev: true /babel-plugin-polyfill-regenerator@0.5.5(@babel/core@7.22.5): resolution: {integrity: sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==} @@ -9562,17 +9877,27 @@ packages: '@babel/helper-define-polyfill-provider': 0.5.0(@babel/core@7.22.5) transitivePeerDependencies: - supports-color - dev: true - /babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.24.5): + /babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.22.5): + resolution: {integrity: sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.22.5) + transitivePeerDependencies: + - supports-color + + /babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.24.7): resolution: {integrity: sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.5) + '@babel/core': 7.24.7 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.7) transitivePeerDependencies: - supports-color + dev: true /babel-plugin-syntax-jsx@6.18.0: resolution: {integrity: sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw==} @@ -9600,25 +9925,6 @@ packages: '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.5) '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.22.5) - /babel-preset-current-node-syntax@1.0.1(@babel/core@7.24.5): - resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.24.5 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.5) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.5) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.5) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.5) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.5) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.5) - /babel-preset-jest@26.6.2(@babel/core@7.22.5): resolution: {integrity: sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==} engines: {node: '>= 10.14.2'} @@ -9640,34 +9946,24 @@ packages: babel-plugin-jest-hoist: 27.5.1 babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.5) - /babel-preset-jest@27.5.1(@babel/core@7.24.5): - resolution: {integrity: sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.24.5 - babel-plugin-jest-hoist: 27.5.1 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.5) - /babel-preset-react-app@10.0.1: resolution: {integrity: sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==} dependencies: - '@babel/core': 7.24.5 - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.24.5) - '@babel/plugin-proposal-decorators': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.24.5) - '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.24.5) - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.24.5) - '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.24.5) - '@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.24.5) - '@babel/plugin-transform-flow-strip-types': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-react-display-name': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-runtime': 7.24.3(@babel/core@7.24.5) - '@babel/preset-env': 7.24.5(@babel/core@7.24.5) - '@babel/preset-react': 7.22.5(@babel/core@7.24.5) - '@babel/preset-typescript': 7.23.3(@babel/core@7.24.5) - '@babel/runtime': 7.24.5 + '@babel/core': 7.22.5 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-proposal-decorators': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.22.5) + '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.22.5) + '@babel/plugin-transform-flow-strip-types': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-react-display-name': 7.24.7(@babel/core@7.22.5) + '@babel/plugin-transform-runtime': 7.24.7(@babel/core@7.22.5) + '@babel/preset-env': 7.22.6(@babel/core@7.22.5) + '@babel/preset-react': 7.22.5(@babel/core@7.22.5) + '@babel/preset-typescript': 7.23.3(@babel/core@7.22.5) + '@babel/runtime': 7.24.7 babel-plugin-macros: 3.1.0 babel-plugin-transform-react-remove-prop-types: 0.4.24 transitivePeerDependencies: @@ -9698,7 +9994,6 @@ packages: /base64-arraybuffer@1.0.2: resolution: {integrity: sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==} engines: {node: '>= 0.6.0'} - requiresBuild: true dev: false optional: true @@ -9816,24 +10111,6 @@ packages: dependencies: balanced-match: 1.0.2 - /braces@2.3.2: - resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==} - engines: {node: '>=0.10.0'} - dependencies: - arr-flatten: 1.1.0 - array-unique: 0.3.2 - extend-shallow: 2.0.1 - fill-range: 4.0.0 - isobject: 3.0.1 - repeat-element: 1.1.4 - snapdragon: 0.8.2 - snapdragon-node: 2.1.1 - split-string: 3.1.0 - to-regex: 3.0.2 - transitivePeerDependencies: - - supports-color - dev: true - /braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} @@ -9853,15 +10130,15 @@ packages: pako: 0.2.9 dev: true - /browserslist@4.23.0: - resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} + /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.30001621 - electron-to-chromium: 1.4.782 + 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.0) + update-browserslist-db: 1.1.0(browserslist@4.23.2) /bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} @@ -9929,7 +10206,7 @@ packages: resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} dependencies: pascal-case: 3.1.2 - tslib: 2.6.2 + tslib: 2.6.3 /camelcase-css@2.0.1: resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} @@ -9942,7 +10219,7 @@ packages: camelcase: 8.0.0 map-obj: 5.0.0 quick-lru: 6.1.2 - type-fest: 4.18.2 + type-fest: 4.21.0 dev: false /camelcase@5.3.1: @@ -9961,20 +10238,20 @@ packages: /caniuse-api@3.0.0: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} dependencies: - browserslist: 4.23.0 - caniuse-lite: 1.0.30001621 + browserslist: 4.23.2 + caniuse-lite: 1.0.30001641 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 - /caniuse-lite@1.0.30001621: - resolution: {integrity: sha512-+NLXZiviFFKX0fk8Piwv3PfLPGtRqJeq2TiNoUff/qB5KJgwecJTvCXDpmlyP/eCI/GUEmp/h/y5j0yckiiZrA==} + /caniuse-lite@1.0.30001641: + resolution: {integrity: sha512-Phv5thgl67bHYo1TtMY/MurjkHhV4EDaCosezRXgZ8jzA/Ub+wjxAvbGvjoFENStinwi5kCyOYV3mi5tOGykwA==} /canvg@3.0.10: resolution: {integrity: sha512-qwR2FRNO9NlzTeKIPIKpnTY6fqwuYSequ8Ru8c0YkYU7U0oW+hLUvWadLvAu1Rl72OMNiFhoLu4f8eUjQ7l/+Q==} engines: {node: '>=10.0.0'} requiresBuild: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@types/raf': 3.4.3 core-js: 3.31.0 raf: 3.4.1 @@ -10086,8 +10363,8 @@ packages: engines: {node: '>=10'} dev: true - /chrome-trace-event@1.0.3: - resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} + /chrome-trace-event@1.0.4: + resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} engines: {node: '>=6.0'} /ci-info@2.0.0: @@ -10139,8 +10416,8 @@ packages: d: 1.0.2 es5-ext: 0.10.64 es6-iterator: 2.0.3 - memoizee: 0.4.16 - timers-ext: 0.1.7 + memoizee: 0.4.17 + timers-ext: 0.1.8 dev: false /cli-cursor@3.1.0: @@ -10400,6 +10677,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: @@ -10438,6 +10719,7 @@ packages: /convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + dev: true /cookie-signature@1.0.6: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} @@ -10473,7 +10755,7 @@ packages: /core-js-compat@3.37.1: resolution: {integrity: sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==} dependencies: - browserslist: 4.23.0 + browserslist: 4.23.2 /core-js-pure@3.37.1: resolution: {integrity: sha512-J/r5JTHSmzTxbiYYrzXg9w1VpqrYt+gexenBE9pugeyhwPZTAEJddyiReJWsLO6uNQ8xJZFbod6XC7KKwatCiA==} @@ -10492,7 +10774,7 @@ packages: /core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - /cosmiconfig-typescript-loader@1.0.9(@swc/core@1.5.7)(@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: @@ -10502,7 +10784,7 @@ packages: dependencies: '@types/node': 17.0.45 cosmiconfig: 7.1.0 - ts-node: 10.9.2(@swc/core@1.5.7)(@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' @@ -10535,10 +10817,10 @@ packages: '@craco/craco': ^7.0.0 react-scripts: ^5.0.0 dependencies: - '@craco/craco': 7.1.0(@swc/core@1.5.7)(@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.1.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.5.7)(esbuild@0.21.3)(eslint@8.44.0)(react@18.2.0)(sass@1.71.1)(typescript@5.4.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.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 @@ -10594,7 +10876,7 @@ packages: engines: {node: ^12 || ^14 || >=16} hasBin: true peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.4 dependencies: postcss: 8.4.32 postcss-selector-parser: 6.1.0 @@ -10613,7 +10895,7 @@ packages: resolution: {integrity: sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==} engines: {node: ^10 || ^12 || >=14} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.0.9 dependencies: postcss: 8.4.32 @@ -10622,7 +10904,7 @@ packages: engines: {node: ^12 || ^14 || >=16} hasBin: true peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.4 dependencies: postcss: 8.4.32 postcss-selector-parser: 6.1.0 @@ -10630,12 +10912,11 @@ packages: /css-in-js-utils@3.1.0: resolution: {integrity: sha512-fJAcud6B3rRu+KHYk+Bwf+WFL2MDCJJ1XG9x137tJQ0xYxor7XziQtuGFbWNdqrvF4Tk26O3H73nfVqXt/fW1A==} dependencies: - hyphenate-style-name: 1.0.5 + hyphenate-style-name: 1.1.0 dev: false /css-line-break@2.1.0: resolution: {integrity: sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==} - requiresBuild: true dependencies: utrie: 1.0.2 dev: false @@ -10653,15 +10934,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.5.7)(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==} @@ -10689,14 +10970,14 @@ packages: schema-utils: 4.2.0 serialize-javascript: 6.0.2 source-map: 0.6.1 - webpack: 5.91.0(@swc/core@1.5.7)(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==} engines: {node: ^12 || ^14 || >=16} hasBin: true peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.4 dependencies: postcss: 8.4.32 @@ -10747,7 +11028,7 @@ packages: /css-vendor@2.0.8: resolution: {integrity: sha512-x9Aq0XTInxrkuFeHKbYC7zWY8ai7qJ04Kxd9MnvbC1uO5DagxoHQjm4JvG+vCdXOoFtCjbL2XSZfxmoYa9uQVQ==} dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 is-in-browser: 1.1.3 dev: true @@ -10779,7 +11060,7 @@ packages: resolution: {integrity: sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2.15 dependencies: css-declaration-sorter: 6.4.1(postcss@8.4.32) cssnano-utils: 3.1.0(postcss@8.4.32) @@ -10816,7 +11097,7 @@ packages: resolution: {integrity: sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2.15 dependencies: postcss: 8.4.32 @@ -10824,7 +11105,7 @@ packages: resolution: {integrity: sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2.15 dependencies: cssnano-preset-default: 5.2.14(postcss@8.4.32) lilconfig: 2.1.0 @@ -10871,7 +11152,7 @@ packages: engines: {node: '>=0.12'} dependencies: es5-ext: 0.10.64 - type: 2.7.2 + type: 2.7.3 dev: false /damerau-levenshtein@1.0.8: @@ -10918,7 +11199,7 @@ packages: resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} engines: {node: '>=0.11'} dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 dev: false /debug@2.6.9: @@ -10941,8 +11222,8 @@ packages: dependencies: ms: 2.1.3 - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + /debug@4.3.5: + resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -10991,7 +11272,6 @@ packages: which-boxed-primitive: 1.0.2 which-collection: 1.0.2 which-typed-array: 1.1.15 - dev: true /deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} @@ -11130,7 +11410,7 @@ packages: hasBin: true dependencies: address: 1.2.2 - debug: 4.3.4 + debug: 4.3.5 transitivePeerDependencies: - supports-color dev: true @@ -11195,7 +11475,7 @@ packages: resolution: {integrity: sha512-4SbcbedPXTciySXiSnNNLuJXpvxFe5nqivbiEHXyL8P/w0wx2uW7YXNjnYgjW0e2e6vy+L/tMISU/oAiXCl57Q==} engines: {node: '>=10'} dependencies: - '@types/node': 20.12.12 + '@types/node': 20.14.10 jszip: 3.10.1 nanoid: 5.0.7 xml: 1.0.1 @@ -11214,7 +11494,7 @@ packages: /dom-helpers@5.2.1: resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 csstype: 3.1.3 /dom-serializer@0.2.2: @@ -11274,8 +11554,8 @@ packages: domelementtype: 2.3.0 dev: false - /dompurify@2.5.4: - resolution: {integrity: sha512-l5NNozANzaLPPe0XaAwvg3uZcHtDBnziX/HjsY1UcDj1MxTK8Dd0Kv096jyPK5HRzs/XM5IMj20dW8Fk+HnbUA==} + /dompurify@2.5.6: + resolution: {integrity: sha512-zUTaUBO8pY4+iJMPE1B9XlO2tXVYIcEA4SNGtvDELzTSCQO7RzH+j7S180BmhmJId78lqGU2z19vgVx2Sxs/PQ==} requiresBuild: true dev: false optional: true @@ -11309,7 +11589,7 @@ packages: resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} dependencies: no-case: 3.0.4 - tslib: 2.6.2 + tslib: 2.6.3 /dotenv-expand@10.0.0: resolution: {integrity: sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==} @@ -11367,8 +11647,8 @@ packages: dependencies: jake: 10.9.1 - /electron-to-chromium@1.4.782: - resolution: {integrity: sha512-JUfU61e8tr+i5Y1FKXcKs+Xe+rJ+CEqm4cgv1kMihPE2EvYHmYyVr3Im/+1+Z5B29Be2EEGCZCwAc6Tazdl1Yg==} + /electron-to-chromium@1.4.823: + resolution: {integrity: sha512-4h+oPeAiGQOHFyUJOqpoEcPj/xxlicxBzOErVeYVMMmAiXUXsGpsFd0QXBMaUUbnD8hhSfLf9uw+MlsoIA7j5w==} /emittery@0.10.2: resolution: {integrity: sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==} @@ -11406,8 +11686,8 @@ packages: objectorarray: 1.0.5 dev: true - /enhanced-resolve@5.16.1: - resolution: {integrity: sha512-4U5pNsuDl0EhuZpq46M5xPslstkviJuhrdobaRDBk2Jy2KO37FDAJl4lb2KlNabxT0m4MTK2UHNrsAcphE8nyw==} + /enhanced-resolve@5.17.0: + resolution: {integrity: sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==} engines: {node: '>=10.13.0'} dependencies: graceful-fs: 4.2.11 @@ -11476,7 +11756,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 @@ -11517,7 +11797,6 @@ packages: is-string: 1.0.7 isarray: 2.0.5 stop-iteration-iterator: 1.0.0 - dev: true /es-iterator-helpers@1.0.19: resolution: {integrity: sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==} @@ -11538,8 +11817,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==} @@ -11610,22 +11889,22 @@ packages: esbuild: '>=0.8.50' dependencies: '@babel/core': 7.22.5 - '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.22.5) + '@babel/plugin-transform-modules-commonjs': 7.24.7(@babel/core@7.22.5) babel-jest: 26.6.3(@babel/core@7.22.5) esbuild: 0.21.3 transitivePeerDependencies: - supports-color dev: true - /esbuild-loader@4.1.0(webpack@5.91.0): - resolution: {integrity: sha512-543TtIvqbqouEMlOHg4xKoDQkmdImlwIpyAIgpUtDPvMuklU/c2k+Qt2O3VeDBgAwozxmlEbjOzV+F8CZ0g+Bw==} + /esbuild-loader@4.2.0(webpack@5.91.0): + resolution: {integrity: sha512-BhwHchuDknxIa69AqOPeZh2fIFqj2AzZKC1E3RBRvXSuyk5drsqMrwsgYZJufX41yrauLYjDM3KBmruoGl1NWQ==} peerDependencies: webpack: ^4.40.0 || ^5.0.0 dependencies: - esbuild: 0.20.2 + esbuild: 0.21.3 get-tsconfig: 4.7.5 loader-utils: 2.0.4 - webpack: 5.91.0(@swc/core@1.5.7)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) webpack-sources: 1.4.3 dev: true @@ -11638,7 +11917,7 @@ packages: peerDependencies: esbuild: '>=0.12 <1' dependencies: - debug: 4.3.4 + debug: 4.3.5 esbuild: 0.18.20 transitivePeerDependencies: - supports-color @@ -11649,7 +11928,7 @@ packages: peerDependencies: esbuild: '>=0.12 <1' dependencies: - debug: 4.3.4 + debug: 4.3.5 esbuild: 0.20.2 transitivePeerDependencies: - supports-color @@ -11811,8 +12090,8 @@ packages: typescript: optional: true dependencies: - '@babel/core': 7.24.5 - '@babel/eslint-parser': 7.24.5(@babel/core@7.24.5)(eslint@8.44.0) + '@babel/core': 7.22.5 + '@babel/eslint-parser': 7.24.7(@babel/core@7.22.5)(eslint@8.44.0) '@rushstack/eslint-patch': 1.10.3 '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.58.0)(eslint@8.44.0)(typescript@5.4.3) '@typescript-eslint/parser': 5.58.0(eslint@8.44.0)(typescript@5.4.3) @@ -11823,7 +12102,7 @@ packages: eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.58.0)(eslint@8.44.0) eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.44.0)(jest@27.5.1)(typescript@5.4.3) eslint-plugin-jsx-a11y: 6.7.1(eslint@8.44.0) - eslint-plugin-react: 7.34.1(eslint@8.44.0) + eslint-plugin-react: 7.34.3(eslint@8.44.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.44.0) eslint-plugin-testing-library: 5.11.1(eslint@8.44.0)(typescript@5.4.3) typescript: 5.4.3 @@ -11839,7 +12118,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 @@ -11907,7 +12186,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 @@ -11947,13 +12226,13 @@ packages: peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 aria-query: 5.3.0 array-includes: 3.1.8 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 @@ -11973,8 +12252,8 @@ packages: dependencies: eslint: 8.44.0 - /eslint-plugin-react@7.34.1(eslint@8.44.0): - resolution: {integrity: sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==} + /eslint-plugin-react@7.34.3(eslint@8.44.0): + resolution: {integrity: sha512-aoW4MV891jkUulwDApQbPYTVZmeuSyFrudpbTAQuj5Fv8VL+o6df2xIGpw8B0hPjAaih1/Fb0om9grCdyFYemA==} engines: {node: '>=4'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 @@ -11983,7 +12262,7 @@ packages: array.prototype.findlast: 1.2.5 array.prototype.flatmap: 1.3.2 array.prototype.toreversed: 1.1.2 - array.prototype.tosorted: 1.1.3 + array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.0.19 eslint: 8.44.0 @@ -11999,8 +12278,8 @@ packages: semver: 6.3.1 string.prototype.matchall: 4.0.11 - /eslint-plugin-simple-import-sort@10.0.0(eslint@8.44.0): - resolution: {integrity: sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw==} + /eslint-plugin-simple-import-sort@12.1.0(eslint@8.44.0): + resolution: {integrity: sha512-Y2fqAfC11TcG/WP3TrI1Gi3p3nc8XJyEOJYHyEPEGI/UAgNx6akxxlX74p7SbAQdLcgASKhj8M0GKvH3vq/+ig==} peerDependencies: eslint: '>=5.0.0' dependencies: @@ -12054,7 +12333,7 @@ packages: micromatch: 4.0.7 normalize-path: 3.0.0 schema-utils: 4.2.0 - webpack: 5.91.0(@swc/core@1.5.7)(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==} @@ -12062,7 +12341,7 @@ packages: hasBin: true dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.44.0) - '@eslint-community/regexpp': 4.10.0 + '@eslint-community/regexpp': 4.11.0 '@eslint/eslintrc': 2.1.4 '@eslint/js': 8.44.0 '@humanwhocodes/config-array': 0.11.14 @@ -12071,13 +12350,13 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4 + debug: 4.3.5 doctrine: 3.0.0 escape-string-regexp: 4.0.0 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 @@ -12109,7 +12388,7 @@ packages: hasBin: true dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@eslint-community/regexpp': 4.10.0 + '@eslint-community/regexpp': 4.11.0 '@eslint/eslintrc': 2.1.4 '@eslint/js': 8.57.0 '@humanwhocodes/config-array': 0.11.14 @@ -12119,13 +12398,13 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4 + debug: 4.3.5 doctrine: 3.0.0 escape-string-regexp: 4.0.0 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 @@ -12157,15 +12436,15 @@ packages: d: 1.0.2 es5-ext: 0.10.64 event-emitter: 0.3.5 - type: 2.7.2 + type: 2.7.3 dev: false /espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.11.3 - acorn-jsx: 5.3.2(acorn@8.11.3) + acorn: 8.12.1 + acorn-jsx: 5.3.2(acorn@8.12.1) eslint-visitor-keys: 3.4.3 /esprima@1.2.2: @@ -12178,8 +12457,8 @@ packages: 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 @@ -12357,7 +12636,7 @@ packages: /ext@1.7.0: resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} dependencies: - type: 2.7.2 + type: 2.7.3 dev: false /extend-shallow@2.0.1: @@ -12421,10 +12700,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 @@ -12477,7 +12752,7 @@ packages: object-assign: 4.1.1 promise: 7.3.1 setimmediate: 1.0.5 - ua-parser-js: 1.0.37 + ua-parser-js: 1.0.38 transitivePeerDependencies: - encoding dev: true @@ -12512,7 +12787,7 @@ packages: dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.91.0(@swc/core@1.5.7)(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==} @@ -12522,7 +12797,7 @@ packages: resolution: {integrity: sha512-QlZ5yJC0VxHxQQsQhXvBaC7VRJ2uaxTf+Tfpu4Z/OcVQJVpZO+DGU0rkoVW5ce2SccxugvpBJoMvUs59iILYdw==} engines: {node: '>= 12'} dependencies: - tslib: 2.6.2 + tslib: 2.6.3 dev: false /file-system-cache@2.3.0: @@ -12541,16 +12816,6 @@ packages: resolution: {integrity: sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==} engines: {node: '>= 0.4.0'} - /fill-range@4.0.0: - resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==} - engines: {node: '>=0.10.0'} - dependencies: - extend-shallow: 2.0.1 - is-number: 3.0.0 - repeat-string: 1.6.1 - to-regex-range: 2.1.1 - dev: true - /fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} @@ -12643,8 +12908,8 @@ packages: /flatted@3.3.1: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} - /flow-parser@0.236.0: - resolution: {integrity: sha512-0OEk9Gr+Yj7wjDW2KgaNYUypKau71jAfFyeLQF5iVtxqc6uJHag/MT7pmaEApf4qM7u86DkBcd4ualddYMfbLw==} + /flow-parser@0.239.1: + resolution: {integrity: sha512-topOrETNxJ6T2gAnQiWqAlzGPj8uI2wtmNOlDIMNB+qyvGJZ6R++STbUOTAYmvPhOMz2gXnXPH0hOvURYmrBow==} engines: {node: '>=0.4.0'} dev: true @@ -12679,8 +12944,8 @@ packages: engines: {node: '>=0.10.0'} dev: true - /foreground-child@3.1.1: - resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} + /foreground-child@3.2.1: + resolution: {integrity: sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==} engines: {node: '>=14'} dependencies: cross-spawn: 7.0.3 @@ -12700,7 +12965,7 @@ packages: vue-template-compiler: optional: true dependencies: - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.24.7 '@types/json-schema': 7.0.15 chalk: 4.1.2 chokidar: 3.6.0 @@ -12715,7 +12980,7 @@ packages: semver: 7.6.2 tapable: 1.1.3 typescript: 5.4.3 - webpack: 5.91.0(@swc/core@1.5.7)(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==} @@ -12724,7 +12989,7 @@ packages: typescript: '>3.6.0' webpack: ^5.11.0 dependencies: - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.24.7 chalk: 4.1.2 chokidar: 3.6.0 cosmiconfig: 7.1.0 @@ -12737,7 +13002,7 @@ packages: semver: 7.6.2 tapable: 2.2.1 typescript: 5.4.3 - webpack: 5.91.0(@swc/core@1.5.7)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) dev: true /form-data@2.5.1: @@ -12785,7 +13050,7 @@ packages: react: 18.2.0 react-fast-compare: 2.0.4 tiny-warning: 1.0.3 - tslib: 2.6.2 + tslib: 2.6.3 dev: false /forwarded@0.2.0: @@ -12894,7 +13159,7 @@ packages: parse-headers: 2.0.5 quick-lru: 6.1.2 web-worker: 1.3.0 - xml-utils: 1.8.0 + xml-utils: 1.10.1 zstddec: 0.1.0 dev: false @@ -12972,7 +13237,7 @@ packages: 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 @@ -12997,15 +13262,15 @@ packages: /glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - /glob@10.4.1: - resolution: {integrity: sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==} - engines: {node: '>=16 || 14 >=14.18'} + /glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true dependencies: - foreground-child: 3.1.1 - jackspeak: 3.1.2 - minimatch: 9.0.4 + foreground-child: 3.2.1 + jackspeak: 3.4.3 + minimatch: 9.0.5 minipass: 7.1.2 + package-json-from-dist: 1.0.0 path-scurry: 1.11.1 /glob@7.2.3: @@ -13068,8 +13333,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 @@ -13096,14 +13361,14 @@ packages: /graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - /graphql-request@6.1.0(graphql@16.8.1): + /graphql-request@6.1.0(graphql@16.9.0): resolution: {integrity: sha512-p+XPfS4q7aIpKVcgmnZKhMNqhltk20hfXtkaIkTfjjmiKMJ5xrt5c743cL03y/K7y1rg3WrIC49xGiEQ4mxdNw==} peerDependencies: graphql: 14 - 16 dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.9.0) cross-fetch: 3.1.8 - graphql: 16.8.1 + graphql: 16.9.0 transitivePeerDependencies: - encoding dev: false @@ -13115,7 +13380,7 @@ packages: graphql: ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: graphql: 16.8.1 - tslib: 2.6.2 + tslib: 2.6.3 dev: false /graphql@16.8.1: @@ -13123,6 +13388,11 @@ packages: engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} dev: false + /graphql@16.9.0: + resolution: {integrity: sha512-GGTKBX4SD7Wdb8mqeDLni2oaRGYQWjWHGKPQ24ZMnUtKfcsVoiv4uX8+LJr1K6U5VW2Lu1BwJnj7uiori0YtRw==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + dev: false + /gunzip-maybe@1.4.2: resolution: {integrity: sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==} hasBin: true @@ -13154,7 +13424,7 @@ packages: source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: 3.17.4 + uglify-js: 3.18.0 dev: true /harmony-reflect@1.6.2: @@ -13250,7 +13520,7 @@ packages: /history@4.10.1: resolution: {integrity: sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==} dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 loose-envify: 1.4.0 resolve-pathname: 3.0.0 tiny-invariant: 1.3.3 @@ -13310,7 +13580,7 @@ packages: he: 1.2.0 param-case: 3.0.4 relateurl: 0.2.7 - terser: 5.31.0 + terser: 5.31.2 /html-tags@3.3.1: resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} @@ -13334,7 +13604,7 @@ packages: lodash: 4.17.21 pretty-error: 4.0.0 tapable: 2.2.1 - webpack: 5.91.0(@swc/core@1.5.7)(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==} @@ -13405,7 +13675,7 @@ packages: dependencies: '@tootallnate/once': 1.1.2 agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.3.5 transitivePeerDependencies: - supports-color @@ -13442,7 +13712,7 @@ packages: engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.3.5 transitivePeerDependencies: - supports-color @@ -13466,8 +13736,8 @@ packages: hasBin: true dev: true - /hyphenate-style-name@1.0.5: - resolution: {integrity: sha512-fedL7PRwmeVkgyhu9hLeTBaI6wcGk7JGJswdaRsa5aUbkXI1kr1xZwTPBtaYPpwf56878iDek6VbVnuWMebJmw==} + /hyphenate-style-name@1.1.0: + resolution: {integrity: sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw==} /iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} @@ -13481,13 +13751,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.4.31' + postcss: ^8.1.0 dependencies: - postcss: 8.4.38 + postcss: 8.4.39 /idb@7.1.1: resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} @@ -13564,11 +13834,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: @@ -13584,10 +13853,6 @@ packages: dependencies: loose-envify: 1.4.0 - /ip@2.0.1: - resolution: {integrity: sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==} - dev: true - /ipaddr.js@1.9.1: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} @@ -13614,7 +13879,6 @@ packages: dependencies: call-bind: 1.0.7 has-tostringtag: 1.0.2 - dev: true /is-array-buffer@3.0.4: resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} @@ -13685,8 +13949,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 @@ -14006,8 +14271,8 @@ packages: resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} dependencies: - '@babel/core': 7.24.5 - '@babel/parser': 7.24.5 + '@babel/core': 7.22.5 + '@babel/parser': 7.24.7 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 @@ -14026,7 +14291,7 @@ packages: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} dependencies: - debug: 4.3.4 + debug: 4.3.5 istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -14052,9 +14317,8 @@ packages: reflect.getprototypeof: 1.0.6 set-function-name: 2.0.2 - /jackspeak@3.1.2: - resolution: {integrity: sha512-kWmLKn2tRtfYMF/BakihVVRzBKOxz4gJMiL2Rj91WnAB5TPZumSH99R/Yf1qE1u4uRimvCSJfm6hnxohXeEXjQ==} - engines: {node: '>=14'} + /jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} dependencies: '@isaacs/cliui': 8.0.2 optionalDependencies: @@ -14156,10 +14420,10 @@ packages: ts-node: optional: true dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.22.5 '@jest/test-sequencer': 27.5.1 '@jest/types': 27.5.1 - babel-jest: 27.5.1(@babel/core@7.24.5) + babel-jest: 27.5.1(@babel/core@7.22.5) chalk: 4.1.2 ci-info: 3.9.0 deepmerge: 4.3.1 @@ -14378,7 +14642,7 @@ packages: resolution: {integrity: sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.24.7 '@jest/types': 27.5.1 '@types/stack-utils': 2.0.3 chalk: 4.1.2 @@ -14392,7 +14656,7 @@ packages: resolution: {integrity: sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.24.7 '@jest/types': 28.1.3 '@types/stack-utils': 2.0.3 chalk: 4.1.2 @@ -14542,16 +14806,16 @@ packages: resolution: {integrity: sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@babel/core': 7.24.5 - '@babel/generator': 7.24.5 - '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.24.5) - '@babel/traverse': 7.24.5 - '@babel/types': 7.24.5 + '@babel/core': 7.22.5 + '@babel/generator': 7.24.7 + '@babel/plugin-syntax-typescript': 7.24.7(@babel/core@7.22.5) + '@babel/traverse': 7.24.7 + '@babel/types': 7.24.7 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 '@types/babel__traverse': 7.20.6 '@types/prettier': 2.7.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.5) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.5) chalk: 4.1.2 expect: 27.5.1 graceful-fs: 4.2.11 @@ -14718,8 +14982,8 @@ packages: - ts-node - utf-8-validate - /jiti@1.21.0: - resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} + /jiti@1.21.6: + resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} hasBin: true /js-beautify@1.15.1: @@ -14729,7 +14993,7 @@ packages: dependencies: config-chain: 1.1.13 editorconfig: 1.0.4 - glob: 10.4.1 + glob: 10.4.5 js-cookie: 3.0.5 nopt: 7.2.1 dev: true @@ -14767,32 +15031,32 @@ packages: '@babel/preset-env': optional: true dependencies: - '@babel/core': 7.24.5 - '@babel/parser': 7.24.5 - '@babel/plugin-transform-class-properties': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-nullish-coalescing-operator': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-optional-chaining': 7.24.5(@babel/core@7.24.5) - '@babel/plugin-transform-private-methods': 7.24.1(@babel/core@7.24.5) + '@babel/core': 7.24.7 + '@babel/parser': 7.24.7 + '@babel/plugin-transform-class-properties': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-modules-commonjs': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-nullish-coalescing-operator': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-optional-chaining': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-private-methods': 7.24.7(@babel/core@7.24.7) '@babel/preset-env': 7.22.6(@babel/core@7.22.5) - '@babel/preset-flow': 7.24.1(@babel/core@7.24.5) - '@babel/preset-typescript': 7.23.3(@babel/core@7.24.5) - '@babel/register': 7.23.7(@babel/core@7.24.5) - babel-core: 7.0.0-bridge.0(@babel/core@7.24.5) + '@babel/preset-flow': 7.24.7(@babel/core@7.24.7) + '@babel/preset-typescript': 7.23.3(@babel/core@7.24.7) + '@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.236.0 + flow-parser: 0.239.1 graceful-fs: 4.2.11 micromatch: 4.0.7 neo-async: 2.6.2 node-dir: 0.1.17 - recast: 0.23.7 + recast: 0.23.9 temp: 0.8.4 write-file-atomic: 2.4.3 transitivePeerDependencies: - supports-color dev: true - /jscodeshift@0.15.2(@babel/preset-env@7.24.5): + /jscodeshift@0.15.2(@babel/preset-env@7.24.7): resolution: {integrity: sha512-FquR7Okgmc4Sd0aEDwqho3rEiKR3BdvuG9jfdHjLJ6JQoWSMpavug3AoIfnfWhxFlf+5pzQh8qjqz0DWFrNQzA==} hasBin: true peerDependencies: @@ -14801,25 +15065,25 @@ packages: '@babel/preset-env': optional: true dependencies: - '@babel/core': 7.24.5 - '@babel/parser': 7.24.5 - '@babel/plugin-transform-class-properties': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-nullish-coalescing-operator': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-optional-chaining': 7.24.5(@babel/core@7.24.5) - '@babel/plugin-transform-private-methods': 7.24.1(@babel/core@7.24.5) - '@babel/preset-env': 7.24.5(@babel/core@7.24.5) - '@babel/preset-flow': 7.24.1(@babel/core@7.24.5) - '@babel/preset-typescript': 7.23.3(@babel/core@7.24.5) - '@babel/register': 7.23.7(@babel/core@7.24.5) - babel-core: 7.0.0-bridge.0(@babel/core@7.24.5) + '@babel/core': 7.24.7 + '@babel/parser': 7.24.7 + '@babel/plugin-transform-class-properties': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-modules-commonjs': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-nullish-coalescing-operator': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-optional-chaining': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-private-methods': 7.24.7(@babel/core@7.24.7) + '@babel/preset-env': 7.24.7(@babel/core@7.24.7) + '@babel/preset-flow': 7.24.7(@babel/core@7.24.7) + '@babel/preset-typescript': 7.23.3(@babel/core@7.24.7) + '@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.236.0 + flow-parser: 0.239.1 graceful-fs: 4.2.11 micromatch: 4.0.7 neo-async: 2.6.2 node-dir: 0.1.17 - recast: 0.23.7 + recast: 0.23.9 temp: 0.8.4 write-file-atomic: 2.4.3 transitivePeerDependencies: @@ -14836,7 +15100,7 @@ packages: optional: true dependencies: abab: 2.0.6 - acorn: 8.11.3 + acorn: 8.12.1 acorn-globals: 6.0.0 cssom: 0.4.4 cssstyle: 2.3.0 @@ -14860,7 +15124,7 @@ packages: whatwg-encoding: 1.0.5 whatwg-mimetype: 2.3.0 whatwg-url: 8.7.0 - ws: 7.5.9 + ws: 7.5.10 xml-name-validator: 3.0.0 transitivePeerDependencies: - bufferutil @@ -14882,24 +15146,23 @@ packages: /json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - /json-schema-to-typescript@14.0.4: - resolution: {integrity: sha512-covPOp3hrbD+oEcMvDxP5Rh6xNZj7lOTZkXAeQoDyu1PuEl1A6oRZ3Sy05HN11vXXmdJ6gLh5P3Qz0mgMPTzzw==} + /json-schema-to-typescript@14.1.0: + resolution: {integrity: sha512-VIeAFQkn88gFh26MSHWG4uX7TjK/arTw0NVLMZn6vX1WrSF+P6xu5MyEdovu+9PJ0uiS5gm0wzwQvYW9eSq1uw==} engines: {node: '>=16.0.0'} hasBin: true dependencies: - '@apidevtools/json-schema-ref-parser': 11.6.2 + '@apidevtools/json-schema-ref-parser': 11.6.4 '@types/json-schema': 7.0.15 - '@types/lodash': 4.17.4 + '@types/lodash': 4.17.6 cli-color: 2.0.4 - glob: 10.4.1 + glob: 10.4.5 is-glob: 4.0.3 js-yaml: 4.1.0 lodash: 4.17.21 minimist: 1.2.8 mkdirp: 3.0.1 - mz: 2.7.0 node-fetch: 3.3.2 - prettier: 3.2.5 + prettier: 3.3.2 dev: false /json-schema-traverse@0.4.1: @@ -14950,43 +15213,43 @@ packages: /jspdf@2.5.1: resolution: {integrity: sha512-hXObxz7ZqoyhxET78+XR34Xu2qFGrJJ2I2bE5w4SM8eFaFEkW2xcGRVUss360fYelwRSid/jT078kbNvmoW0QA==} dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 atob: 2.1.2 btoa: 1.2.1 fflate: 0.4.8 optionalDependencies: canvg: 3.0.10 core-js: 3.31.0 - dompurify: 2.5.4 + dompurify: 2.5.6 html2canvas: 1.4.1 dev: false /jss-plugin-camel-case@10.10.0: resolution: {integrity: sha512-z+HETfj5IYgFxh1wJnUAU8jByI48ED+v0fuTuhKrPR+pRBYS2EDwbusU8aFOpCdYhtRc9zhN+PJ7iNE8pAWyPw==} dependencies: - '@babel/runtime': 7.24.5 - hyphenate-style-name: 1.0.5 + '@babel/runtime': 7.24.7 + hyphenate-style-name: 1.1.0 jss: 10.10.0 dev: true /jss-plugin-default-unit@10.10.0: resolution: {integrity: sha512-SvpajxIECi4JDUbGLefvNckmI+c2VWmP43qnEy/0eiwzRUsafg5DVSIWSzZe4d2vFX1u9nRDP46WCFV/PXVBGQ==} dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 jss: 10.10.0 dev: true /jss-plugin-global@10.10.0: resolution: {integrity: sha512-icXEYbMufiNuWfuazLeN+BNJO16Ge88OcXU5ZDC2vLqElmMybA31Wi7lZ3lf+vgufRocvPj8443irhYRgWxP+A==} dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 jss: 10.10.0 dev: true /jss-plugin-nested@10.10.0: resolution: {integrity: sha512-9R4JHxxGgiZhurDo3q7LdIiDEgtA1bTGzAbhSPyIOWb7ZubrjQe8acwhEQ6OEKydzpl8XHMtTnEwHXCARLYqYA==} dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 jss: 10.10.0 tiny-warning: 1.0.3 dev: true @@ -14994,14 +15257,14 @@ packages: /jss-plugin-props-sort@10.10.0: resolution: {integrity: sha512-5VNJvQJbnq/vRfje6uZLe/FyaOpzP/IH1LP+0fr88QamVrGJa0hpRRyAa0ea4U/3LcorJfBFVyC4yN2QC73lJg==} dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 jss: 10.10.0 dev: true /jss-plugin-rule-value-function@10.10.0: resolution: {integrity: sha512-uEFJFgaCtkXeIPgki8ICw3Y7VMkL9GEan6SqmT9tqpwM+/t+hxfMUdU4wQ0MtOiMNWhwnckBV0IebrKcZM9C0g==} dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 jss: 10.10.0 tiny-warning: 1.0.3 dev: true @@ -15009,7 +15272,7 @@ packages: /jss-plugin-vendor-prefixer@10.10.0: resolution: {integrity: sha512-UY/41WumgjW8r1qMCO8l1ARg7NHnfRVWRhZ2E2m0DMYsr2DD91qIXLyNhiX83hHswR7Wm4D+oDYNC1zWCJWtqg==} dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 css-vendor: 2.0.8 jss: 10.10.0 dev: true @@ -15017,12 +15280,17 @@ packages: /jss@10.10.0: resolution: {integrity: sha512-cqsOTS7jqPsPMjtKYDUpdFC0AbhYFLTcuGRqymgmdJIeQ8cH7+AgX7YSgQy79wXloZq2VvATYxUOUQEvS1V/Zw==} dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 csstype: 3.1.3 is-in-browser: 1.1.3 tiny-warning: 1.0.3 dev: true + /jsts@2.7.1: + resolution: {integrity: sha512-x2wSZHEBK20CY+Wy+BPE7MrFQHW6sIsdaGUMEqmGAio+3gFzQaBYPwLRonUfQf9Ak8pBieqj9tUofX1+WtAEIg==} + engines: {node: '>= 12'} + dev: false + /jsx-ast-utils@3.3.5: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} @@ -15085,8 +15353,8 @@ packages: dependencies: language-subtag-registry: 0.3.23 - /launch-editor@2.6.1: - resolution: {integrity: sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==} + /launch-editor@2.8.0: + resolution: {integrity: sha512-vJranOAJrI/llyWGRQqiDM+adrw+k83fvmmx3+nV47g3+36xM15jE+zyZ6Ffel02+xSvuM0b2GDRosXZkbb6wA==} dependencies: picocolors: 1.0.1 shell-quote: 1.8.1 @@ -15132,8 +15400,8 @@ packages: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} - /lilconfig@3.1.1: - resolution: {integrity: sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==} + /lilconfig@3.1.2: + resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} engines: {node: '>=14'} /lines-and-columns@1.2.4: @@ -15157,16 +15425,16 @@ packages: chalk: 5.2.0 cli-truncate: 3.1.0 commander: 10.0.1 - debug: 4.3.4 + debug: 4.3.5 execa: 7.2.0 lilconfig: 2.1.0 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.2 + yaml: 2.4.5 transitivePeerDependencies: - enquirer - supports-color @@ -15185,32 +15453,32 @@ packages: colorette: 2.0.20 log-update: 4.0.0 p-map: 4.0.0 - rfdc: 1.3.1 + rfdc: 1.4.1 rxjs: 7.8.1 through: 2.3.8 wrap-ansi: 7.0.0 dev: true - /lit-element@4.0.5: - resolution: {integrity: sha512-iTWskWZEtn9SyEf4aBG6rKT8GABZMrTWop1+jopsEOgEcugcXJGKuX5bEbkq9qfzY+XB4MAgCaSPwnNpdsNQ3Q==} + /lit-element@4.0.6: + resolution: {integrity: sha512-U4sdJ3CSQip7sLGZ/uJskO5hGiqtlpxndsLr6mt3IQIjheg93UKYeGQjWMRql1s/cXNOaRrCzC2FQwjIwSUqkg==} dependencies: '@lit-labs/ssr-dom-shim': 1.2.0 '@lit/reactive-element': 2.0.4 - lit-html: 3.1.3 + lit-html: 3.1.4 dev: false - /lit-html@3.1.3: - resolution: {integrity: sha512-FwIbqDD8O/8lM4vUZ4KvQZjPPNx7V1VhT7vmRB8RBAO0AU6wuTVdoXiu2CivVjEGdugvcbPNBLtPE1y0ifplHA==} + /lit-html@3.1.4: + resolution: {integrity: sha512-yKKO2uVv7zYFHlWMfZmqc+4hkmSbFp8jgjdZY9vvR9jr4J8fH6FUMXhr+ljfELgmjpvlF7Z1SJ5n5/Jeqtc9YA==} dependencies: '@types/trusted-types': 2.0.7 dev: false - /lit@3.1.3: - resolution: {integrity: sha512-l4slfspEsnCcHVRTvaP7YnkTZEZggNFywLEIhQaGhYDczG+tu/vlgm/KaWIEjIp+ZyV20r2JnZctMb8LeLCG7Q==} + /lit@3.1.4: + resolution: {integrity: sha512-q6qKnKXHy2g1kjBaNfcoLlgbI3+aSOZ9Q4tiGa9bGYXq5RBXxkVTqTIVmP2VWMp29L4GyvCFm8ZQ2o56eUAMyA==} dependencies: '@lit/reactive-element': 2.0.4 - lit-element: 4.0.5 - lit-html: 3.1.3 + lit-element: 4.0.6 + lit-html: 3.1.4 dev: false /loader-runner@4.3.0: @@ -15225,8 +15493,8 @@ packages: emojis-list: 3.0.0 json5: 2.2.3 - /loader-utils@3.2.1: - resolution: {integrity: sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==} + /loader-utils@3.3.1: + resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==} engines: {node: '>= 12.13.0'} /locate-path@3.0.0: @@ -15311,11 +15579,10 @@ packages: /lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} dependencies: - tslib: 2.6.2 + 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==} @@ -15341,7 +15608,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: @@ -15419,8 +15686,8 @@ packages: react: 18.2.0 dev: true - /marked@12.0.2: - resolution: {integrity: sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q==} + /marked@13.0.2: + resolution: {integrity: sha512-J6CPjP8pS5sgrRqxVRvkCIkZ6MFdRIjDkwUwgJ9nL2fbmM6qGQeB2C16hi8Cc9BOzj6xXzy0jyi0iPIfnMHYzA==} engines: {node: '>= 18'} hasBin: true dev: false @@ -15433,7 +15700,7 @@ packages: engines: {node: '>= 14'} hasBin: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 complex.js: 2.1.1 decimal.js: 10.4.3 escape-latex: 1.2.0 @@ -15441,7 +15708,7 @@ packages: javascript-natural-sort: 0.7.1 seedrandom: 3.0.5 tiny-emitter: 2.1.0 - typed-function: 4.1.1 + typed-function: 4.2.1 dev: false /mdast-util-definitions@4.0.0: @@ -15524,9 +15791,9 @@ packages: resolution: {integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==} dev: false - /memoizee@0.4.16: - resolution: {integrity: sha512-eOxQqGfogqdcQ2jeyLgsTp91bFOdbjaiJ1P0ZeDt1HHT1+ektm2u+raWDytppt8SMZ1fP2sIWlTbZukHhMKhiQ==} - engines: {node: '>=.0.12'} + /memoizee@0.4.17: + resolution: {integrity: sha512-DGqD7Hjpi/1or4F/aYAspXKNm5Yili0QDAFAY4QYvpqpgiY6+1jOfqpmByzjxbWd/T9mChbCArXAbDAsTm5oXA==} + engines: {node: '>=0.12'} dependencies: d: 1.0.2 es5-ext: 0.10.64 @@ -15535,7 +15802,7 @@ packages: is-promise: 2.2.2 lru-queue: 0.1.0 next-tick: 1.1.0 - timers-ext: 0.1.7 + timers-ext: 0.1.8 dev: false /memoizerific@1.11.3: @@ -15717,7 +15984,7 @@ packages: resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==} dependencies: '@types/debug': 4.1.12 - debug: 4.3.4 + debug: 4.3.5 decode-named-character-reference: 1.0.2 micromark-core-commonmark: 1.1.0 micromark-factory-space: 1.1.0 @@ -15743,7 +16010,7 @@ packages: dependencies: arr-diff: 4.0.0 array-unique: 0.3.2 - braces: 2.3.2 + braces: 3.0.3 define-property: 2.0.2 extend-shallow: 3.0.2 extglob: 2.0.4 @@ -15808,7 +16075,7 @@ packages: dependencies: schema-utils: 4.2.0 tapable: 2.2.1 - webpack: 5.91.0(@swc/core@1.5.7)(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==} @@ -15831,8 +16098,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 @@ -15893,6 +16160,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'} @@ -15927,11 +16203,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 @@ -16023,7 +16299,7 @@ packages: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} dependencies: lower-case: 2.0.2 - tslib: 2.6.2 + tslib: 2.6.3 /node-abort-controller@3.1.1: resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==} @@ -16146,8 +16422,8 @@ 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: @@ -16155,6 +16431,7 @@ packages: consola: 3.2.3 execa: 8.0.1 pathe: 1.1.2 + pkg-types: 1.1.3 ufo: 1.5.3 dev: true @@ -16175,8 +16452,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==} @@ -16184,7 +16462,6 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - dev: true /object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} @@ -16277,26 +16554,26 @@ packages: resolution: {integrity: sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw==} dev: true - /ol-ext@4.0.18(ol@9.2.3): - 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.3 + ol: 9.2.4 dev: false - /ol-mapbox-style@12.3.2(ol@9.2.3): - resolution: {integrity: sha512-Qw9I6+WHz9zBsLNm8zWWb707Y/hXrQP1fcwK86pxcX/FklwyDxAhfJAdTkINHncZ331CBEWcqvi2tzoN23dgwg==} + /ol-mapbox-style@12.3.4(ol@9.2.4): + resolution: {integrity: sha512-TxGJZw4hmvc6n5dHSyAE8ZpgALJ6hVG5Q9yl0j2Q1KmLS9iq4wMpb383TAitWiG86SvJV4oDkWMGkyyMLfVyew==} peerDependencies: ol: '*' dependencies: '@mapbox/mapbox-gl-style-spec': 13.28.0 mapbox-to-css-font: 2.4.4 - ol: 9.2.3 + ol: 9.2.4 dev: false - /ol@9.2.3: - resolution: {integrity: sha512-zxCgrVUU9DWZZSa7eW2ukU6gp1ugX0K5bF+Gwuh/RKa2sQLdwOrIRjLt4NYAdM7jpHOdW1FaT68E8tosE/DC1g==} + /ol@9.2.4: + resolution: {integrity: sha512-bsbu4ObaAlbELMIZWnYEvX4Z9jO+OyCBshtODhDKmqYTPEfnKOX3RieCr97tpJkqWTZvyV4tS9UQDvHoCdxS+A==} dependencies: color-rgba: 3.0.0 color-space: 2.0.1 @@ -16348,7 +16625,7 @@ packages: '@wry/caches': 1.0.1 '@wry/context': 0.7.4 '@wry/trie': 0.4.3 - tslib: 2.6.2 + tslib: 2.6.3 dev: false /optionator@0.8.3: @@ -16417,7 +16694,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: @@ -16463,6 +16740,9 @@ packages: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} + /package-json-from-dist@1.0.0: + resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} + /pako@0.2.9: resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} dev: true @@ -16479,7 +16759,7 @@ packages: resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} dependencies: dot-case: 3.0.4 - tslib: 2.6.2 + tslib: 2.6.3 /parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} @@ -16495,7 +16775,7 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.24.7 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -16524,7 +16804,7 @@ packages: resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} dependencies: no-case: 3.0.4 - tslib: 2.6.2 + tslib: 2.6.3 /pascalcase@0.1.1: resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==} @@ -16573,7 +16853,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: @@ -16664,6 +16944,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'} @@ -16683,7 +16971,7 @@ packages: resolution: {integrity: sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==} engines: {node: '>=10'} dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 dev: true /polygon-clipping@0.15.7: @@ -16715,25 +17003,25 @@ packages: resolution: {integrity: sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2 dependencies: postcss: 8.4.32 postcss-selector-parser: 6.1.0 - /postcss-browser-comments@4.0.0(browserslist@4.23.0)(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.4.31' + postcss: '>=8' dependencies: - browserslist: 4.23.0 + browserslist: 4.23.2 postcss: 8.4.32 /postcss-calc@8.2.4(postcss@8.4.32): resolution: {integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2.2 dependencies: postcss: 8.4.32 postcss-selector-parser: 6.1.0 @@ -16743,7 +17031,7 @@ packages: resolution: {integrity: sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==} engines: {node: '>=7.6.0'} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.4.6 dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -16752,7 +17040,7 @@ packages: resolution: {integrity: sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2 dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -16761,7 +17049,7 @@ packages: resolution: {integrity: sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.4 dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -16770,7 +17058,7 @@ packages: resolution: {integrity: sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2 dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -16779,9 +17067,9 @@ packages: resolution: {integrity: sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2.15 dependencies: - browserslist: 4.23.0 + browserslist: 4.23.2 caniuse-api: 3.0.0 colord: 2.9.3 postcss: 8.4.32 @@ -16791,9 +17079,9 @@ packages: resolution: {integrity: sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2.15 dependencies: - browserslist: 4.23.0 + browserslist: 4.23.2 postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -16801,7 +17089,7 @@ packages: resolution: {integrity: sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.3 dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -16810,7 +17098,7 @@ packages: resolution: {integrity: sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2 dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -16819,7 +17107,7 @@ packages: resolution: {integrity: sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.3 dependencies: postcss: 8.4.32 postcss-selector-parser: 6.1.0 @@ -16828,7 +17116,7 @@ packages: resolution: {integrity: sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2 dependencies: postcss: 8.4.32 postcss-selector-parser: 6.1.0 @@ -16837,7 +17125,7 @@ packages: resolution: {integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2.15 dependencies: postcss: 8.4.32 @@ -16845,7 +17133,7 @@ packages: resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2.15 dependencies: postcss: 8.4.32 @@ -16853,7 +17141,7 @@ packages: resolution: {integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2.15 dependencies: postcss: 8.4.32 @@ -16861,7 +17149,7 @@ packages: resolution: {integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2.15 dependencies: postcss: 8.4.32 @@ -16869,7 +17157,7 @@ packages: resolution: {integrity: sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2 dependencies: '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.32) postcss: 8.4.32 @@ -16879,7 +17167,7 @@ packages: resolution: {integrity: sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.4 dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -16887,7 +17175,7 @@ packages: /postcss-flexbugs-fixes@5.0.2(postcss@8.4.32): resolution: {integrity: sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.1.4 dependencies: postcss: 8.4.32 @@ -16895,7 +17183,7 @@ packages: resolution: {integrity: sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.4 dependencies: postcss: 8.4.32 postcss-selector-parser: 6.1.0 @@ -16904,7 +17192,7 @@ packages: resolution: {integrity: sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.4 dependencies: postcss: 8.4.32 postcss-selector-parser: 6.1.0 @@ -16912,7 +17200,7 @@ packages: /postcss-font-variant@5.0.0(postcss@8.4.32): resolution: {integrity: sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.1.0 dependencies: postcss: 8.4.32 @@ -16920,7 +17208,7 @@ packages: resolution: {integrity: sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2 dependencies: postcss: 8.4.32 @@ -16928,7 +17216,7 @@ packages: resolution: {integrity: sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2 dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -16937,7 +17225,7 @@ packages: resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} engines: {node: '>=14.0.0'} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.0.0 dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -16947,7 +17235,7 @@ packages: /postcss-initial@4.0.1(postcss@8.4.32): resolution: {integrity: sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.0.0 dependencies: postcss: 8.4.32 @@ -16955,7 +17243,7 @@ packages: resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} engines: {node: ^12 || ^14 || >= 16} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.4.21 dependencies: camelcase-css: 2.0.1 postcss: 8.4.32 @@ -16964,7 +17252,7 @@ packages: resolution: {integrity: sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2 dependencies: '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.32) postcss: 8.4.32 @@ -16974,7 +17262,7 @@ packages: resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} engines: {node: '>= 14'} peerDependencies: - postcss: '>=8.4.31' + postcss: '>=8.0.9' ts-node: '>=9.0.0' peerDependenciesMeta: postcss: @@ -16982,28 +17270,28 @@ packages: ts-node: optional: true dependencies: - lilconfig: 3.1.1 + lilconfig: 3.1.2 postcss: 8.4.32 - yaml: 2.4.2 + yaml: 2.4.5 /postcss-loader@6.2.1(postcss@8.4.32)(webpack@5.91.0): resolution: {integrity: sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==} engines: {node: '>= 12.13.0'} peerDependencies: - postcss: '>=8.4.31' + postcss: ^7.0.0 || ^8.0.1 webpack: ^5.0.0 dependencies: cosmiconfig: 7.1.0 klona: 2.0.6 postcss: 8.4.32 semver: 7.6.2 - webpack: 5.91.0(@swc/core@1.5.7)(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==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.4 dependencies: postcss: 8.4.32 @@ -17011,7 +17299,7 @@ packages: resolution: {integrity: sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==} engines: {node: '>=10.0.0'} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.1.0 dependencies: postcss: 8.4.32 @@ -17019,7 +17307,7 @@ packages: resolution: {integrity: sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2.15 dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -17029,9 +17317,9 @@ packages: resolution: {integrity: sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2.15 dependencies: - browserslist: 4.23.0 + browserslist: 4.23.2 caniuse-api: 3.0.0 cssnano-utils: 3.1.0(postcss@8.4.32) postcss: 8.4.32 @@ -17041,7 +17329,7 @@ packages: resolution: {integrity: sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2.15 dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -17050,7 +17338,7 @@ packages: resolution: {integrity: sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2.15 dependencies: colord: 2.9.3 cssnano-utils: 3.1.0(postcss@8.4.32) @@ -17061,9 +17349,9 @@ packages: resolution: {integrity: sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2.15 dependencies: - browserslist: 4.23.0 + browserslist: 4.23.2 cssnano-utils: 3.1.0(postcss@8.4.32) postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -17072,53 +17360,53 @@ packages: resolution: {integrity: sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2.15 dependencies: 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.4.31' + 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.4.31' + 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.4.31' + 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.4.31' + 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==} engines: {node: '>=12.0'} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2.14 dependencies: postcss: 8.4.32 postcss-selector-parser: 6.1.0 @@ -17127,7 +17415,7 @@ packages: resolution: {integrity: sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2 dependencies: '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.1.0) postcss: 8.4.32 @@ -17137,7 +17425,7 @@ packages: resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2.15 dependencies: postcss: 8.4.32 @@ -17145,7 +17433,7 @@ packages: resolution: {integrity: sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2.15 dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -17154,7 +17442,7 @@ packages: resolution: {integrity: sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2.15 dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -17163,7 +17451,7 @@ packages: resolution: {integrity: sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2.15 dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -17172,7 +17460,7 @@ packages: resolution: {integrity: sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2.15 dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -17181,7 +17469,7 @@ packages: resolution: {integrity: sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2.15 dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -17190,9 +17478,9 @@ packages: resolution: {integrity: sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2.15 dependencies: - browserslist: 4.23.0 + browserslist: 4.23.2 postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -17200,7 +17488,7 @@ packages: resolution: {integrity: sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2.15 dependencies: normalize-url: 6.1.0 postcss: 8.4.32 @@ -17210,29 +17498,29 @@ packages: resolution: {integrity: sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2.15 dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 - /postcss-normalize@10.0.1(browserslist@4.23.0)(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: browserslist: '>= 4' - postcss: '>=8.4.31' + postcss: '>= 8' dependencies: '@csstools/normalize.css': 12.1.1 - browserslist: 4.23.0 + browserslist: 4.23.2 postcss: 8.4.32 - postcss-browser-comments: 4.0.0(browserslist@4.23.0)(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): resolution: {integrity: sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2 dependencies: postcss: 8.4.32 @@ -17240,7 +17528,7 @@ packages: resolution: {integrity: sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2.15 dependencies: cssnano-utils: 3.1.0(postcss@8.4.32) postcss: 8.4.32 @@ -17250,7 +17538,7 @@ packages: resolution: {integrity: sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2 dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -17258,7 +17546,7 @@ packages: /postcss-page-break@3.0.4(postcss@8.4.32): resolution: {integrity: sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8 dependencies: postcss: 8.4.32 @@ -17266,7 +17554,7 @@ packages: resolution: {integrity: sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2 dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -17275,7 +17563,7 @@ packages: resolution: {integrity: sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2 dependencies: '@csstools/postcss-cascade-layers': 1.1.1(postcss@8.4.32) '@csstools/postcss-color-function': 1.1.1(postcss@8.4.32) @@ -17292,7 +17580,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.0 + 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) @@ -17332,7 +17620,7 @@ packages: resolution: {integrity: sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2 dependencies: postcss: 8.4.32 postcss-selector-parser: 6.1.0 @@ -17341,9 +17629,9 @@ packages: resolution: {integrity: sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2.15 dependencies: - browserslist: 4.23.0 + browserslist: 4.23.2 caniuse-api: 3.0.0 postcss: 8.4.32 @@ -17351,7 +17639,7 @@ packages: resolution: {integrity: sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2.15 dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -17359,7 +17647,7 @@ packages: /postcss-replace-overflow-wrap@4.0.0(postcss@8.4.32): resolution: {integrity: sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.0.3 dependencies: postcss: 8.4.32 @@ -17367,7 +17655,7 @@ packages: resolution: {integrity: sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2 dependencies: postcss: 8.4.32 postcss-selector-parser: 6.1.0 @@ -17383,7 +17671,7 @@ packages: resolution: {integrity: sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2.15 dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -17393,7 +17681,7 @@ packages: resolution: {integrity: sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2.15 dependencies: postcss: 8.4.32 postcss-selector-parser: 6.1.0 @@ -17409,8 +17697,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 @@ -17436,8 +17724,8 @@ packages: hasBin: true dev: true - /prettier@3.2.5: - resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} + /prettier@3.3.2: + resolution: {integrity: sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==} engines: {node: '>=14'} hasBin: true @@ -17549,7 +17837,7 @@ packages: /prosemirror-commands@1.5.2: resolution: {integrity: sha512-hgLcPaakxH8tu6YvVAaILV2tXYsW3rAdDR8WNkeKGcgeMVQg3/TMhPdVoh7iAmfgVjZGtcOSjKiQaoeKjzd2mQ==} dependencies: - prosemirror-model: 1.21.0 + prosemirror-model: 1.21.3 prosemirror-state: 1.4.3 prosemirror-transform: 1.9.0 dev: false @@ -17559,24 +17847,24 @@ packages: dependencies: prosemirror-state: 1.4.3 prosemirror-transform: 1.9.0 - prosemirror-view: 1.33.6 + prosemirror-view: 1.33.8 dev: false /prosemirror-gapcursor@1.3.2: resolution: {integrity: sha512-wtjswVBd2vaQRrnYZaBCbyDqr232Ed4p2QPtRIUK5FuqHYKGWkEwl08oQM4Tw7DOR0FsasARV5uJFvMZWxdNxQ==} dependencies: prosemirror-keymap: 1.2.2 - prosemirror-model: 1.21.0 + prosemirror-model: 1.21.3 prosemirror-state: 1.4.3 - prosemirror-view: 1.33.6 + 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 - prosemirror-view: 1.33.6 + prosemirror-view: 1.33.8 rope-sequence: 1.3.4 dev: false @@ -17598,7 +17886,7 @@ packages: resolution: {integrity: sha512-UziddX3ZYSYibgx8042hfGKmukq5Aljp2qoBiJRejD/8MH70siQNz5RB1TrdTPheqLMy4aCe4GYNF10/3lQS5g==} dependencies: markdown-it: 14.1.0 - prosemirror-model: 1.21.0 + prosemirror-model: 1.21.3 dev: false /prosemirror-menu@1.2.4: @@ -17606,12 +17894,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.0: - resolution: {integrity: sha512-zLpS1mVCZLA7VTp82P+BfMiYVPcX1/z0Mf3gsjKZtzMWubwn2pN7CceMV0DycjlgE5JeXPR7UF4hJPbBV98oWA==} + /prosemirror-model@1.21.3: + resolution: {integrity: sha512-nt2Xs/RNGepD9hrrkzXvtCm1mpGJoQfFSPktGa0BF/aav6XsnmVGZ9sTXNWRLupAz5SCLa3EyKlFeK7zJWROKg==} dependencies: orderedmap: 2.1.1 dev: false @@ -17619,13 +17907,13 @@ packages: /prosemirror-schema-basic@1.2.2: resolution: {integrity: sha512-/dT4JFEGyO7QnNTe9UaKUhjDXbTNkiWTq/N4VpKaF79bBjSExVV2NXmJpcM7z/gD7mbqNjxbmWW5nf1iNSSGnw==} dependencies: - prosemirror-model: 1.21.0 + prosemirror-model: 1.21.3 dev: false - /prosemirror-schema-list@1.3.0: - resolution: {integrity: sha512-Hz/7gM4skaaYfRPNgr421CU4GSwotmEwBVvJh5ltGiffUJwm7C8GfN/Bc6DR1EKEp5pDKhODmdXXyi9uIsZl5A==} + /prosemirror-schema-list@1.4.0: + resolution: {integrity: sha512-nZOIq/AkBSzCENxUyLm5ltWE53e2PLk65ghMN8qLQptOmDVixZlPqtMeQdiNw0odL9vNpalEjl3upgRkuJ/Jyw==} dependencies: - prosemirror-model: 1.21.0 + prosemirror-model: 1.21.3 prosemirror-state: 1.4.3 prosemirror-transform: 1.9.0 dev: false @@ -17633,22 +17921,22 @@ packages: /prosemirror-state@1.4.3: resolution: {integrity: sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q==} dependencies: - prosemirror-model: 1.21.0 + prosemirror-model: 1.21.3 prosemirror-transform: 1.9.0 - prosemirror-view: 1.33.6 + prosemirror-view: 1.33.8 dev: false /prosemirror-tables@1.3.7: resolution: {integrity: sha512-oEwX1wrziuxMtwFvdDWSFHVUWrFJWt929kVVfHvtTi8yvw+5ppxjXZkMG/fuTdFo+3DXyIPSKfid+Be1npKXDA==} dependencies: prosemirror-keymap: 1.2.2 - prosemirror-model: 1.21.0 + prosemirror-model: 1.21.3 prosemirror-state: 1.4.3 prosemirror-transform: 1.9.0 - prosemirror-view: 1.33.6 + prosemirror-view: 1.33.8 dev: false - /prosemirror-trailing-node@2.0.8(prosemirror-model@1.21.0)(prosemirror-state@1.4.3)(prosemirror-view@1.33.6): + /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 @@ -17657,21 +17945,21 @@ packages: dependencies: '@remirror/core-constants': 2.0.2 escape-string-regexp: 4.0.0 - prosemirror-model: 1.21.0 + prosemirror-model: 1.21.3 prosemirror-state: 1.4.3 - prosemirror-view: 1.33.6 + prosemirror-view: 1.33.8 dev: false /prosemirror-transform@1.9.0: resolution: {integrity: sha512-5UXkr1LIRx3jmpXXNKDhv8OyAOeLTGuXNwdVfg8x27uASna/wQkr9p6fD3eupGOi4PLJfbezxTyi/7fSJypXHg==} dependencies: - prosemirror-model: 1.21.0 + prosemirror-model: 1.21.3 dev: false - /prosemirror-view@1.33.6: - resolution: {integrity: sha512-zRLUNgLIQfd8IfGprsXxWTjdA8xEAFJe8cDNrOptj6Mop9sj+BMeVbJvceyAYCm5G2dOdT2prctH7K9dfnpIMw==} + /prosemirror-view@1.33.8: + resolution: {integrity: sha512-4PhMr/ufz2cdvFgpUAnZfs+0xij3RsFysreeG9V/utpwX7AJtYCDVyuRxzWoMJIEf4C7wVihuBNMPpFLPCiLQw==} dependencies: - prosemirror-model: 1.21.0 + prosemirror-model: 1.21.3 prosemirror-state: 1.4.3 prosemirror-transform: 1.9.0 dev: false @@ -17740,6 +18028,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==} @@ -17747,8 +18039,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 @@ -17831,7 +18123,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.5.7)(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 @@ -17850,7 +18142,7 @@ packages: react: ^16.8.5 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.5 || ^17.0.0 || ^18.0.0 dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 css-box-model: 1.2.1 memoize-one: 5.2.1 raf-schd: 4.0.3 @@ -17897,9 +18189,9 @@ packages: typescript: optional: true dependencies: - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.24.7 address: 1.2.2 - browserslist: 4.23.0 + browserslist: 4.23.2 chalk: 4.1.2 cross-spawn: 7.0.3 detect-port-alt: 1.1.6 @@ -17912,7 +18204,7 @@ packages: gzip-size: 6.0.0 immer: 9.0.21 is-root: 2.1.0 - loader-utils: 3.2.1 + loader-utils: 3.3.1 open: 8.4.2 pkg-up: 3.1.0 prompts: 2.4.2 @@ -17922,7 +18214,7 @@ packages: strip-ansi: 6.0.1 text-table: 0.2.0 typescript: 5.4.3 - webpack: 5.91.0(@swc/core@1.5.7)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) transitivePeerDependencies: - eslint - supports-color @@ -17971,9 +18263,9 @@ packages: resolution: {integrity: sha512-i8aF1nyKInZnANZ4uZrH49qn1paRgBZ7wZiCNBMnenlPzEv0mRl+ShpTVEI6wZNl8sSc79xZkivtgLKQArcanQ==} engines: {node: '>=16.14.0'} dependencies: - '@babel/core': 7.24.5 - '@babel/traverse': 7.24.5 - '@babel/types': 7.24.5 + '@babel/core': 7.22.5 + '@babel/traverse': 7.24.7 + '@babel/types': 7.24.7 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.6 '@types/doctrine': 0.0.9 @@ -18035,7 +18327,7 @@ packages: peerDependencies: react: '>=16.13.1' dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 react: 18.2.0 dev: false @@ -18056,7 +18348,7 @@ packages: react: ^16.6.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.6.0 || ^17.0.0 || ^18.0.0 dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 invariant: 2.2.4 prop-types: 15.8.1 react: 18.2.0 @@ -18168,7 +18460,7 @@ packages: react-native: optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@types/react-redux': 7.1.33 hoist-non-react-statics: 3.3.2 loose-envify: 1.4.0 @@ -18200,7 +18492,7 @@ packages: '@types/react': 18.2.45 react: 18.2.0 react-style-singleton: 2.2.1(@types/react@18.2.45)(react@18.2.0) - tslib: 2.6.2 + tslib: 2.6.3 dev: true /react-remove-scroll@2.5.5(@types/react@18.2.45)(react@18.2.0): @@ -18217,12 +18509,12 @@ packages: react: 18.2.0 react-remove-scroll-bar: 2.3.6(@types/react@18.2.45)(react@18.2.0) react-style-singleton: 2.2.1(@types/react@18.2.45)(react@18.2.0) - tslib: 2.6.2 + tslib: 2.6.3 use-callback-ref: 1.3.2(@types/react@18.2.45)(react@18.2.0) 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.5.7)(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 @@ -18235,14 +18527,14 @@ packages: optional: true dependencies: '@babel/core': 7.22.5 - '@pmmmwh/react-refresh-webpack-plugin': 0.5.13(react-refresh@0.11.0)(webpack-dev-server@4.15.2)(webpack@5.91.0) + '@pmmmwh/react-refresh-webpack-plugin': 0.5.15(react-refresh@0.11.0)(webpack-dev-server@4.15.2)(webpack@5.91.0) '@svgr/webpack': 5.5.0 babel-jest: 27.5.1(@babel/core@7.22.5) babel-loader: 8.3.0(@babel/core@7.22.5)(webpack@5.91.0) 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.0 + 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) @@ -18263,7 +18555,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.0)(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 @@ -18276,10 +18568,10 @@ packages: semver: 7.6.2 source-map-loader: 3.0.2(webpack@5.91.0) style-loader: 3.3.4(webpack@5.91.0) - tailwindcss: 3.4.3 - terser-webpack-plugin: 5.3.10(@swc/core@1.5.7)(esbuild@0.21.3)(webpack@5.91.0) + tailwindcss: 3.4.4 + 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.5.7)(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) @@ -18333,7 +18625,7 @@ packages: get-nonce: 1.0.1 invariant: 2.2.4 react: 18.2.0 - tslib: 2.6.2 + tslib: 2.6.3 dev: true /react-textarea-autosize@6.1.0(react@18.2.0): @@ -18362,7 +18654,7 @@ packages: react: '>=16.6.0' react-dom: '>=16.6.0' dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 @@ -18375,7 +18667,7 @@ packages: react: '>=16.6.0' react-dom: '>=16.6.0' dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 @@ -18383,18 +18675,18 @@ packages: react-dom: 18.3.1(react@18.3.1) dev: false - /react-universal-interface@0.6.2(react@18.2.0)(tslib@2.6.2): + /react-universal-interface@0.6.2(react@18.2.0)(tslib@2.6.3): resolution: {integrity: sha512-dg8yXdcQmvgR13RIlZbTRQOoUrDciFVoSBZILwjE2LFISxZZ8loVJKAkuzswl5js8BHda79bIb2b84ehU8IjXw==} peerDependencies: react: '*' tslib: '*' dependencies: react: 18.2.0 - tslib: 2.6.2 + 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: '*' @@ -18408,13 +18700,13 @@ packages: nano-css: 5.6.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-universal-interface: 0.6.2(react@18.2.0)(tslib@2.6.2) + react-universal-interface: 0.6.2(react@18.2.0)(tslib@2.6.3) resize-observer-polyfill: 1.5.1 screenfull: 5.2.0 set-harmonic-interval: 1.0.1 throttle-debounce: 3.0.1 ts-easing: 0.2.0 - tslib: 2.6.2 + tslib: 2.6.3 dev: false /react@18.2.0: @@ -18496,15 +18788,15 @@ packages: dependencies: picomatch: 2.3.1 - /recast@0.23.7: - resolution: {integrity: sha512-MpQlLZVpqbbxYcqEjwpRWo88sGvjOYoXptySz710RuddNMHx+wPkoNX6YyLZJlXAh5VZr1qmPrTwcTuFMh0Lag==} + /recast@0.23.9: + resolution: {integrity: sha512-Hx/BGIbwj+Des3+xy5uAtAbdCyqK9y9wbBcDFDYanLS9JnMqf7OeF87HQwUimE87OEc72mr6tkKUKMBBL+hF9Q==} engines: {node: '>= 4'} dependencies: ast-types: 0.16.1 esprima: 4.0.1 source-map: 0.6.1 tiny-invariant: 1.3.3 - tslib: 2.6.2 + tslib: 2.6.3 dev: true /reconnecting-websocket@4.4.0: @@ -18528,7 +18820,7 @@ packages: /redux@4.2.1: resolution: {integrity: sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==} dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 dev: false /reflect.getprototypeof@1.0.6: @@ -18565,7 +18857,7 @@ packages: /regenerator-transform@0.15.2: resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 /regex-not@1.0.2: resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==} @@ -18658,16 +18950,6 @@ packages: lodash: 4.17.21 strip-ansi: 6.0.1 - /repeat-element@1.1.4: - resolution: {integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==} - engines: {node: '>=0.10.0'} - dev: true - - /repeat-string@1.6.1: - resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} - engines: {node: '>=0.10'} - dev: true - /require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -18742,7 +19024,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 @@ -18750,7 +19032,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 @@ -18780,8 +19062,8 @@ packages: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - /rfdc@1.3.1: - resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==} + /rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} dev: true /rgb-hex@3.0.0: @@ -18800,7 +19082,6 @@ packages: /rgbcolor@1.0.1: resolution: {integrity: sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw==} engines: {node: '>= 0.8.15'} - requiresBuild: true dev: false optional: true @@ -18829,11 +19110,11 @@ packages: peerDependencies: rollup: ^2.0.0 dependencies: - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.24.7 jest-worker: 26.6.2 rollup: 2.79.1 serialize-javascript: 4.0.0 - terser: 5.31.0 + terser: 5.31.2 /rollup@2.79.1: resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} @@ -18854,7 +19135,7 @@ packages: /rtl-css-js@1.16.1: resolution: {integrity: sha512-lRQgou1mu19e+Ya0LsTvKrVJ5TYUbqCVPAiImX3UfLTenarvPUl1QFdvu5Z3PYmHT9RCcwIfbjRQBntExyj3Zg==} dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 dev: false /run-parallel@1.2.0: @@ -18869,7 +19150,7 @@ packages: /rxjs@7.8.1: resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} dependencies: - tslib: 2.6.2 + tslib: 2.6.3 /sade@1.8.1: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} @@ -18954,7 +19235,7 @@ packages: klona: 2.0.6 neo-async: 2.6.2 sass: 1.71.1 - webpack: 5.91.0(@swc/core@1.5.7)(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==} @@ -18977,7 +19258,7 @@ packages: dependencies: neo-async: 2.6.2 sass: 1.71.1 - webpack: 5.91.0(@swc/core@1.5.7)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) dev: true /sass@1.71.1: @@ -18992,8 +19273,8 @@ packages: /sax@1.2.4: resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} - /sax@1.3.0: - resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==} + /sax@1.4.1: + resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} dev: false /saxes@5.0.1: @@ -19036,9 +19317,9 @@ packages: engines: {node: '>= 12.13.0'} dependencies: '@types/json-schema': 7.0.15 - ajv: 8.13.0 - ajv-formats: 2.1.1(ajv@8.13.0) - ajv-keywords: 5.1.0(ajv@8.13.0) + ajv: 8.16.0 + ajv-formats: 2.1.1(ajv@8.16.0) + ajv-keywords: 5.1.0(ajv@8.16.0) /screenfull@5.2.0: resolution: {integrity: sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==} @@ -19231,7 +19512,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==} @@ -19288,22 +19569,6 @@ packages: is-fullwidth-code-point: 4.0.0 dev: true - /snapdragon-node@2.1.1: - resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==} - engines: {node: '>=0.10.0'} - dependencies: - define-property: 1.0.0 - isobject: 3.0.1 - snapdragon-util: 3.0.1 - dev: true - - /snapdragon-util@3.0.1: - resolution: {integrity: sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==} - engines: {node: '>=0.10.0'} - dependencies: - kind-of: 3.2.2 - dev: true - /snapdragon@0.8.2: resolution: {integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==} engines: {node: '>=0.10.0'} @@ -19361,7 +19626,7 @@ packages: abab: 2.0.6 iconv-lite: 0.6.3 source-map-js: 1.2.0 - webpack: 5.91.0(@swc/core@1.5.7)(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==} @@ -19445,7 +19710,7 @@ packages: /spdy-transport@3.0.0: resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} dependencies: - debug: 4.3.4 + debug: 4.3.5 detect-node: 2.1.0 hpack.js: 2.1.6 obuf: 1.1.2 @@ -19458,7 +19723,7 @@ packages: resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} engines: {node: '>=6.0.0'} dependencies: - debug: 4.3.4 + debug: 4.3.5 handle-thing: 2.0.1 http-deceiver: 1.2.7 select-hose: 2.0.0 @@ -19499,7 +19764,6 @@ packages: /stackblur-canvas@2.7.0: resolution: {integrity: sha512-yf7OENo23AGJhBriGx0QivY5JP6Y1HbrrDI6WLt6C5auYZXlQrheoY8hD4ibekFKz1HOfE48Ww8kMWMnJD/zcQ==} engines: {node: '>=0.1.14'} - requiresBuild: true dev: false optional: true @@ -19547,7 +19811,6 @@ packages: engines: {node: '>= 0.4'} dependencies: internal-slot: 1.0.7 - dev: true /store2@2.14.3: resolution: {integrity: sha512-4QcZ+yx7nzEFiV4BMLnr/pRa5HYzNITX2ri0Zh6sT9EyQHbBHacC6YigllUPU9X3D0f/22QCgfokpKs52YRrUg==} @@ -19575,13 +19838,15 @@ packages: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-inspector: 2.3.1(react@18.2.0) + transitivePeerDependencies: + - supports-color dev: true - /storybook@8.1.5(@babel/preset-env@7.22.6)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-v4o8AfTvxWpdGa9Pa9x8EAmqbN5yJc+2fW8b6ZaCsDOTh2t5Y3EUHbIzdtvX+1Gb6ALsOs5e2Q9GlCAzjz+WNQ==} + /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.5(@babel/preset-env@7.22.6)(react-dom@18.2.0)(react@18.2.0) + '@storybook/cli': 8.1.10(@babel/preset-env@7.22.6)(react-dom@18.2.0)(react@18.2.0) transitivePeerDependencies: - '@babel/preset-env' - bufferutil @@ -19770,7 +20035,7 @@ packages: peerDependencies: webpack: ^5.0.0 dependencies: - webpack: 5.91.0(@swc/core@1.5.7)(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==} @@ -19786,9 +20051,9 @@ packages: resolution: {integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.2.15 dependencies: - browserslist: 4.23.0 + browserslist: 4.23.2 postcss: 8.4.32 postcss-selector-parser: 6.1.0 @@ -19811,7 +20076,7 @@ packages: graphql: 16.8.1 iterall: 1.3.0 symbol-observable: 1.2.0 - ws: 7.5.9 + ws: 7.5.10 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -19824,7 +20089,7 @@ packages: dependencies: '@jridgewell/gen-mapping': 0.3.5 commander: 4.1.1 - glob: 10.4.1 + glob: 10.4.5 lines-and-columns: 1.2.4 mz: 2.7.0 pirates: 4.0.6 @@ -19865,7 +20130,6 @@ packages: /svg-pathdata@6.0.3: resolution: {integrity: sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==} engines: {node: '>=12.0.0'} - requiresBuild: true dev: false optional: true @@ -19902,15 +20166,15 @@ packages: picocolors: 1.0.1 stable: 0.1.8 - /swc-loader@0.2.6(@swc/core@1.5.7)(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.5.7 + '@swc/core': 1.6.13 '@swc/counter': 0.1.3 - webpack: 5.91.0(@swc/core@1.5.7)(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): @@ -19940,8 +20204,8 @@ packages: resolution: {integrity: sha512-AsS729u2RHUfEra9xJrE39peJcc2stq2+poBXX8bcM08Y6g9j/i/PUzwNQqkaJde7Ntg1TO7bSREbR5sdosQ+g==} dev: true - /tailwindcss@3.4.3: - resolution: {integrity: sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==} + /tailwindcss@3.4.4: + resolution: {integrity: sha512-ZoyXOdJjISB7/BcLTR6SEsLgKtDStYyYZVLsUtWChO4Ps20CBad7lfJKVDiejocV4ME1hLmyY0WJE3hSDcmQ2A==} engines: {node: '>=14.0.0'} hasBin: true dependencies: @@ -19953,7 +20217,7 @@ packages: fast-glob: 3.3.2 glob-parent: 6.0.2 is-glob: 4.0.3 - jiti: 1.21.0 + jiti: 1.21.6 lilconfig: 2.1.0 micromatch: 4.0.7 normalize-path: 3.0.0 @@ -20064,7 +20328,7 @@ packages: ansi-escapes: 4.3.2 supports-hyperlinks: 2.3.0 - /terser-webpack-plugin@5.3.10(@swc/core@1.5.7)(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: @@ -20081,21 +20345,21 @@ packages: optional: true dependencies: '@jridgewell/trace-mapping': 0.3.25 - '@swc/core': 1.5.7 + '@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.0 - webpack: 5.91.0(@swc/core@1.5.7)(esbuild@0.21.3) + terser: 5.31.2 + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) - /terser@5.31.0: - resolution: {integrity: sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg==} + /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.11.3 + acorn: 8.12.1 commander: 2.20.3 source-map-support: 0.5.21 @@ -20109,7 +20373,6 @@ packages: /text-segmentation@1.0.3: resolution: {integrity: sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==} - requiresBuild: true dependencies: utrie: 1.0.2 dev: false @@ -20150,8 +20413,9 @@ packages: /thunky@1.1.0: resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} - /timers-ext@0.1.7: - resolution: {integrity: sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==} + /timers-ext@0.1.8: + resolution: {integrity: sha512-wFH7+SEAcKfJpfLPkrgMPvvwnEtj8W4IurvEyrKsDleXnKLCDw71w8jltvfLa8Rm4qQxxT4jmDBYbJG/z7qoww==} + engines: {node: '>=0.12'} dependencies: es5-ext: 0.10.64 next-tick: 1.1.0 @@ -20190,14 +20454,6 @@ packages: kind-of: 3.2.2 dev: true - /to-regex-range@2.1.1: - resolution: {integrity: sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==} - engines: {node: '>=0.10.0'} - dependencies: - is-number: 3.0.0 - repeat-string: 1.6.1 - dev: true - /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -20280,10 +20536,10 @@ packages: resolution: {integrity: sha512-uivwYcQaxAucv1CzRp2n/QdYPo4ILf9VXgH19zEIjFx2EJufV16P0JtJVpYHy89DItG6Kwj2oIUjrcK5au+4tQ==} engines: {node: '>=8'} dependencies: - tslib: 2.6.2 + tslib: 2.6.3 dev: false - /ts-node@10.9.2(@swc/core@1.5.7)(@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: @@ -20298,14 +20554,14 @@ packages: optional: true dependencies: '@cspotcode/source-map-support': 0.8.1 - '@swc/core': 1.5.7 + '@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.11.3 - acorn-walk: 8.3.2 + acorn: 8.12.1 + acorn-walk: 8.3.3 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 @@ -20336,7 +20592,7 @@ packages: engines: {node: '>=10.13.0'} dependencies: chalk: 4.1.2 - enhanced-resolve: 5.16.1 + enhanced-resolve: 5.17.0 tsconfig-paths: 4.2.0 dev: true @@ -20360,8 +20616,8 @@ packages: /tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - /tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + /tslib@2.6.3: + resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} /tsutils@3.21.0(typescript@5.4.3): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} @@ -20372,10 +20628,6 @@ packages: tslib: 1.14.1 typescript: 5.4.3 - /turf-jsts@1.2.3: - resolution: {integrity: sha512-Ja03QIJlPuHt4IQ2FfGex4F4JAr8m3jpaHbFbQrgwr7s7L6U8ocrHiF3J1+wf9jzhGKxvDeaCAnGDot8OjGFyA==} - dev: false - /type-check@0.3.2: resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} engines: {node: '>= 0.8.0'} @@ -20424,8 +20676,8 @@ packages: engines: {node: '>=12.20'} dev: true - /type-fest@4.18.2: - resolution: {integrity: sha512-+suCYpfJLAe4OXS6+PPXjW3urOS4IoP9waSiLuXfLgqZODKw/aWwASvzqE886wA0kQgGy0mIWyhd87VpqIy6Xg==} + /type-fest@4.21.0: + resolution: {integrity: sha512-ADn2w7hVPcK6w1I0uWnM//y1rLXZhzB9mr0a3OirzclKF1Wp6VzevUmzz/NRAWunOT6E8HrnpGY7xOfc6K57fA==} engines: {node: '>=16'} dev: false @@ -20436,8 +20688,8 @@ packages: media-typer: 0.3.0 mime-types: 2.1.35 - /type@2.7.2: - resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==} + /type@2.7.3: + resolution: {integrity: sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==} dev: false /typed-array-buffer@1.0.2: @@ -20480,9 +20732,9 @@ packages: is-typed-array: 1.1.13 possible-typed-array-names: 1.0.0 - /typed-function@4.1.1: - resolution: {integrity: sha512-Pq1DVubcvibmm8bYcMowjVnnMwPVMeh0DIdA8ad8NZY2sJgapANJmiigSUwlt+EgXxpfIv8MWrQXTIzkfYZLYQ==} - engines: {node: '>= 14'} + /typed-function@4.2.1: + resolution: {integrity: sha512-EGjWssW7Tsk4DGfE+5yluuljS1OGYWiI1J6e8puZz9nTMM51Oug8CD5Zo4gWMsOhq5BI+1bF+rWTm4Vbj3ivRA==} + engines: {node: '>= 18'} dev: false /typedarray-to-buffer@3.1.5: @@ -20495,8 +20747,8 @@ packages: engines: {node: '>=14.17'} hasBin: true - /ua-parser-js@1.0.37: - resolution: {integrity: sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ==} + /ua-parser-js@1.0.38: + resolution: {integrity: sha512-Aq5ppTOfvrCMgAPneW1HfWj66Xi7XL+/mIy996R1/CLS/rcyJQm6QZdsKrUeivDFQ+Oc9Wyuwor8Ze8peEoUoQ==} dev: true /uc.micro@2.1.0: @@ -20507,8 +20759,8 @@ packages: resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==} dev: true - /uglify-js@3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + /uglify-js@3.18.0: + resolution: {integrity: sha512-SyVVbcNBCk0dzr9XL/R/ySrmYf0s372K6/hFklzgcp2lBFyXtw4I7BOdDjlLhE1aVqaI/SHWXWmYdlZxuyF38A==} engines: {node: '>=0.8.0'} hasBin: true requiresBuild: true @@ -20656,14 +20908,14 @@ 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.11.3 + acorn: 8.12.1 chokidar: 3.6.0 webpack-sources: 3.2.3 - webpack-virtual-modules: 0.6.1 + webpack-virtual-modules: 0.6.2 dev: true /unquote@1.1.1: @@ -20685,13 +20937,13 @@ packages: resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} engines: {node: '>=4'} - /update-browserslist-db@1.0.16(browserslist@4.23.0): - 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.0 + browserslist: 4.23.2 escalade: 3.1.2 picocolors: 1.0.1 @@ -20715,7 +20967,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): @@ -20730,7 +20982,7 @@ packages: dependencies: '@types/react': 18.2.45 react: 18.2.0 - tslib: 2.6.2 + tslib: 2.6.3 dev: true /use-memo-one@1.1.3(react@18.2.0): @@ -20765,7 +21017,7 @@ packages: '@types/react': 18.2.45 detect-node-es: 1.1.0 react: 18.2.0 - tslib: 2.6.2 + tslib: 2.6.3 dev: true /use-sync-external-store@1.2.0(react@18.2.0): @@ -20819,12 +21071,16 @@ packages: /utrie@1.0.2: resolution: {integrity: sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==} - requiresBuild: true dependencies: base64-arraybuffer: 1.0.2 dev: false optional: true + /uuid@10.0.0: + resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} + hasBin: true + dev: false + /uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true @@ -20959,7 +21215,7 @@ packages: mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.2.0 - webpack: 5.91.0(@swc/core@1.5.7)(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==} @@ -20975,7 +21231,7 @@ packages: mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.2.0 - webpack: 5.91.0(@swc/core@1.5.7)(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): @@ -21010,7 +21266,7 @@ packages: html-entities: 2.5.2 http-proxy-middleware: 2.0.6(@types/express@4.17.21) ipaddr.js: 2.2.0 - launch-editor: 2.6.1 + launch-editor: 2.8.0 open: 8.4.2 p-retry: 4.6.2 rimraf: 3.0.2 @@ -21019,9 +21275,9 @@ packages: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack: 5.91.0(@swc/core@1.5.7)(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.0 + ws: 8.18.0 transitivePeerDependencies: - bufferutil - debug @@ -21043,7 +21299,7 @@ packages: webpack: ^4.44.2 || ^5.47.0 dependencies: tapable: 2.2.1 - webpack: 5.91.0(@swc/core@1.5.7)(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: @@ -21076,11 +21332,11 @@ packages: resolution: {integrity: sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==} dev: true - /webpack-virtual-modules@0.6.1: - resolution: {integrity: sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==} + /webpack-virtual-modules@0.6.2: + resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} dev: true - /webpack@5.91.0(@swc/core@1.5.7)(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 @@ -21095,12 +21351,12 @@ packages: '@webassemblyjs/ast': 1.12.1 '@webassemblyjs/wasm-edit': 1.12.1 '@webassemblyjs/wasm-parser': 1.12.1 - acorn: 8.11.3 - acorn-import-assertions: 1.9.0(acorn@8.11.3) - browserslist: 4.23.0 - chrome-trace-event: 1.0.3 - enhanced-resolve: 5.16.1 - es-module-lexer: 1.5.3 + 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.4 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 @@ -21111,7 +21367,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.5.7)(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: @@ -21256,15 +21512,15 @@ packages: resolution: {integrity: sha512-Tjf+gBwOTuGyZwMz2Nk/B13Fuyeo0Q84W++bebbVsfr9iLkDSo6j6PST8tET9HYA58mlRXwlMGpyWO8ETJiXdQ==} engines: {node: '>=10.0.0'} dependencies: - '@apideck/better-ajv-errors': 0.3.6(ajv@8.13.0) - '@babel/core': 7.24.5 - '@babel/preset-env': 7.24.5(@babel/core@7.24.5) - '@babel/runtime': 7.24.5 - '@rollup/plugin-babel': 5.3.1(@babel/core@7.24.5)(rollup@2.79.1) + '@apideck/better-ajv-errors': 0.3.6(ajv@8.16.0) + '@babel/core': 7.22.5 + '@babel/preset-env': 7.22.6(@babel/core@7.22.5) + '@babel/runtime': 7.24.7 + '@rollup/plugin-babel': 5.3.1(@babel/core@7.22.5)(rollup@2.79.1) '@rollup/plugin-node-resolve': 11.2.1(rollup@2.79.1) '@rollup/plugin-replace': 2.4.2(rollup@2.79.1) '@surma/rollup-plugin-off-main-thread': 2.2.3 - ajv: 8.13.0 + ajv: 8.16.0 common-tags: 1.8.2 fast-json-stable-stringify: 2.1.0 fs-extra: 9.1.0 @@ -21375,7 +21631,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.5.7)(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: @@ -21440,8 +21696,8 @@ packages: signal-exit: 3.0.7 dev: true - /ws@7.5.9: - resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} + /ws@7.5.10: + resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} engines: {node: '>=8.3.0'} peerDependencies: bufferutil: ^4.0.1 @@ -21452,8 +21708,8 @@ packages: utf-8-validate: optional: true - /ws@8.17.0: - resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==} + /ws@8.18.0: + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -21468,14 +21724,14 @@ packages: resolution: {integrity: sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==} hasBin: true dependencies: - sax: 1.3.0 + sax: 1.4.1 dev: false /xml-name-validator@3.0.0: resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} - /xml-utils@1.8.0: - resolution: {integrity: sha512-1TY5yLw8DApowZAUsWCniNr8HH6Ebt6O7UQvmIwziGKwUNsQx6e+4NkfOvCfnqmYIcPjCeoI6dh1JenPJ9a1hQ==} + /xml-utils@1.10.1: + resolution: {integrity: sha512-Dn6vJ1Z9v1tepSjvnCpwk5QqwIPcEFKdgnjqfYOABv1ngSofuAhtlugcUC3ehS1OHdgDWSG6C5mvj+Qm15udTQ==} dev: false /xml@1.0.1: @@ -21504,8 +21760,8 @@ packages: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} - /yaml@2.4.2: - resolution: {integrity: sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA==} + /yaml@2.4.5: + resolution: {integrity: sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==} engines: {node: '>= 14'} hasBin: true @@ -21534,8 +21790,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 @@ -21543,7 +21799,7 @@ packages: resolution: {integrity: sha512-Z2Fe1bn+eLstG8DRR6FTavGD+MeAwyfmouhHsIUgaADz8jvFKbO/fXc2trJKZg+5EBjh4gGm3iU/t3onKlXHIg==} engines: {node: '>=10'} dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@types/lodash': 4.14.202 lodash: 4.17.21 lodash-es: 4.17.21 @@ -21581,51 +21837,56 @@ packages: resolution: {integrity: sha512-w2NTI8+3l3eeltKAdK8QpiLo/flRAr2p8AGeakfMZOXBxOg9HIu4LVDxBi81sYgVhFhdJjv1OrB5ssI8uFPoLg==} dev: false - /zustand@4.3.8(immer@9.0.21)(react@18.2.0): - resolution: {integrity: sha512-4h28KCkHg5ii/wcFFJ5Fp+k1J3gJoasaIbppdgZFO4BPJnsNxL0mQXBSFgOgAdCdBj35aDTPvdAJReTMntFPGg==} + /zustand@4.5.4(@types/react@18.2.45)(immer@9.0.21)(react@18.2.0): + resolution: {integrity: sha512-/BPMyLKJPtFEvVL0E9E9BTUM63MNyhPGlvxk1XjrfWTUlV+BR8jufjsovHzrtR6YNcBEcL7cMHovL1n9xHawEg==} engines: {node: '>=12.7.0'} peerDependencies: - immer: '>=9.0' + '@types/react': '>=16.8' + immer: '>=9.0.6' react: '>=16.8' peerDependenciesMeta: + '@types/react': + optional: true immer: optional: true react: optional: true dependencies: + '@types/react': 18.2.45 immer: 9.0.21 react: 18.2.0 use-sync-external-store: 1.2.0(react@18.2.0) dev: false - github.com/theopensystemslab/planx-core/550634a(@types/react@18.2.45): - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/550634a} - id: github.com/theopensystemslab/planx-core/550634a + github.com/theopensystemslab/planx-core/6c2cc59(@types/react@18.2.45): + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/6c2cc59} + id: github.com/theopensystemslab/planx-core/6c2cc59 name: '@opensystemslab/planx-core' version: 1.0.0 + prepare: true requiresBuild: true dependencies: '@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) + '@formatjs/intl-listformat': 7.5.7 '@mui/material': 5.15.2(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(@types/react@18.2.45)(react-dom@18.3.1)(react@18.3.1) - '@types/geojson': 7946.0.14 - ajv: 8.13.0 - ajv-formats: 2.1.1(ajv@8.13.0) + ajv: 8.16.0 + ajv-formats: 2.1.1(ajv@8.16.0) cheerio: 1.0.0-rc.12 copyfiles: 2.4.1 docx: 8.5.0 eslint: 8.57.0 fast-xml-parser: 4.4.0 - graphql: 16.8.1 - graphql-request: 6.1.0(graphql@16.8.1) - json-schema-to-typescript: 14.0.4 + graphql: 16.9.0 + graphql-request: 6.1.0(graphql@16.9.0) + json-schema-to-typescript: 14.1.0 lodash: 4.17.21 - marked: 12.0.2 - prettier: 3.2.5 + marked: 13.0.2 + prettier: 3.3.2 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - type-fest: 4.18.2 - uuid: 9.0.1 + type-fest: 4.21.0 + uuid: 10.0.0 zod: 3.23.8 transitivePeerDependencies: - '@types/react' diff --git a/editor.planx.uk/src/@planx/components/Calculate/Editor.tsx b/editor.planx.uk/src/@planx/components/Calculate/Editor.tsx index 6ae015aaa1..cc8665849d 100644 --- a/editor.planx.uk/src/@planx/components/Calculate/Editor.tsx +++ b/editor.planx.uk/src/@planx/components/Calculate/Editor.tsx @@ -1,4 +1,6 @@ +import FormControlLabel from "@mui/material/FormControlLabel"; import { styled } from "@mui/material/styles"; +import Switch from "@mui/material/Switch"; import Typography from "@mui/material/Typography"; import { ComponentType as TYPES } from "@opensystemslab/planx-core/types"; import { @@ -12,7 +14,6 @@ import React from "react"; import InputGroup from "ui/editor/InputGroup"; import ModalSection from "ui/editor/ModalSection"; import ModalSectionContent from "ui/editor/ModalSectionContent"; -import OptionButton from "ui/editor/OptionButton"; import Input from "ui/shared/Input"; import InputRow from "ui/shared/InputRow"; @@ -100,17 +101,22 @@ export default function Component(props: Props) { onChange={formik.handleChange} /> - { - formik.setFieldValue( - "formatOutputForAutomations", - !formik.values.formatOutputForAutomations, - ); - }} - > - Format the output to automate a future Question or Checklist only - + + + formik.setFieldValue( + "formatOutputForAutomations", + !formik.values.formatOutputForAutomations, + ) + } + /> + } + label="Format the output to automate a future Question or Checklist only" + /> + diff --git a/editor.planx.uk/src/@planx/components/Calculate/logic.test.ts b/editor.planx.uk/src/@planx/components/Calculate/logic.test.ts index 6d27065ed8..2dde552b55 100644 --- a/editor.planx.uk/src/@planx/components/Calculate/logic.test.ts +++ b/editor.planx.uk/src/@planx/components/Calculate/logic.test.ts @@ -1,7 +1,7 @@ import { ComponentType as TYPES } from "@opensystemslab/planx-core/types"; -import { Store, vanillaStore } from "pages/FlowEditor/lib/store"; +import { Store, useStore } from "pages/FlowEditor/lib/store"; -const { getState, setState } = vanillaStore; +const { getState, setState } = useStore; const { upcomingCardIds, resetPreview, record } = getState(); // Helper method diff --git a/editor.planx.uk/src/@planx/components/Checklist/Editor.tsx b/editor.planx.uk/src/@planx/components/Checklist/Editor.tsx index 0e4c24a94b..8c9133f0d9 100644 --- a/editor.planx.uk/src/@planx/components/Checklist/Editor.tsx +++ b/editor.planx.uk/src/@planx/components/Checklist/Editor.tsx @@ -1,7 +1,9 @@ import Delete from "@mui/icons-material/Delete"; import Box from "@mui/material/Box"; import Button from "@mui/material/Button"; +import FormControlLabel from "@mui/material/FormControlLabel"; import IconButton from "@mui/material/IconButton"; +import Switch from "@mui/material/Switch"; import { ComponentType as TYPES } from "@opensystemslab/planx-core/types"; import { useFormik } from "formik"; import adjust from "ramda/src/adjust"; @@ -14,7 +16,6 @@ import InputGroup from "ui/editor/InputGroup"; import ListManager from "ui/editor/ListManager"; import ModalSection from "ui/editor/ModalSection"; import ModalSectionContent from "ui/editor/ModalSectionContent"; -import OptionButton from "ui/editor/OptionButton"; import RichTextInput from "ui/editor/RichTextInput"; import SimpleMenu from "ui/editor/SimpleMenu"; import Input from "ui/shared/Input"; @@ -393,29 +394,41 @@ export const ChecklistComponent: React.FC = (props) => { onChange={formik.handleChange} /> - { - formik.setValues({ - ...formik.values, - ...toggleExpandableChecklist({ - options: formik.values.options, - groupedOptions: formik.values.groupedOptions, - }), - }); - }} - > - Expandable - - - { - formik.setFieldValue("allRequired", !formik.values.allRequired); - }} - > - All required - + + + formik.setValues({ + ...formik.values, + ...toggleExpandableChecklist({ + options: formik.values.options, + groupedOptions: formik.values.groupedOptions, + }), + }) + } + /> + } + label="Expandable" + /> + + + + formik.setFieldValue( + "allRequired", + !formik.values.allRequired, + ) + } + /> + } + label="All required" + /> + diff --git a/editor.planx.uk/src/@planx/components/Checklist/Public.test.tsx b/editor.planx.uk/src/@planx/components/Checklist/Public.test.tsx index cfb9391893..525d8feb7d 100644 --- a/editor.planx.uk/src/@planx/components/Checklist/Public.test.tsx +++ b/editor.planx.uk/src/@planx/components/Checklist/Public.test.tsx @@ -173,6 +173,7 @@ describe("Checklist Component - Grouped Layout", () => { answers: ["S1_Option1", "S3_Option1"], }); }); + it("should not have any accessibility violations", async () => { const { container } = setup( { const results = await axe(container); expect(results).toHaveNoViolations(); }); + it("should be navigable by keyboard", async () => { const handleSubmit = jest.fn(); @@ -218,13 +220,11 @@ describe("Checklist Component - Grouped Layout", () => { expect(screen.getByTestId("S2_Option1")).toHaveFocus(); // Select option using keyboard await user.keyboard("[Space]"); - expect(screen.getByTestId("S2_Option1")).toBeChecked(); // Tab to Section 2, Option 2 await user.tab(); expect(screen.getByTestId("S2_Option2")).toHaveFocus(); // Select option using keyboard await user.keyboard("[Space]"); - expect(screen.getByTestId("S2_Option2")).toBeChecked(); // Tab to Section 3, and navigate through to "Continue" without selecting anything await user.tab(); expect(section3Button).toHaveFocus(); @@ -279,6 +279,7 @@ describe("Checklist Component - Basic & Images Layout", () => { answers: ["flat_id", "house_id", "spaceship_id"], }); }); + it(`recovers checkboxes state when clicking the back button (${ChecklistLayout[type]} layout)`, async () => { const handleSubmit = jest.fn(); diff --git a/editor.planx.uk/src/@planx/components/Checklist/Public.tsx b/editor.planx.uk/src/@planx/components/Checklist/Public.tsx index 11e5c86ecf..6383d8abcd 100644 --- a/editor.planx.uk/src/@planx/components/Checklist/Public.tsx +++ b/editor.planx.uk/src/@planx/components/Checklist/Public.tsx @@ -1,19 +1,23 @@ import Box from "@mui/material/Box"; import Grid from "@mui/material/Grid"; import { visuallyHidden } from "@mui/utils"; -import type { Checklist, Group } from "@planx/components/Checklist/model"; +import { + type Checklist, + checklistValidationSchema, + getFlatOptions, + type Group, +} from "@planx/components/Checklist/model"; import ImageButton from "@planx/components/shared/Buttons/ImageButton"; import Card from "@planx/components/shared/Preview/Card"; import CardHeader from "@planx/components/shared/Preview/CardHeader"; import { getIn, useFormik } from "formik"; import React, { useState } from "react"; -import InputLegend from "ui/editor/InputLegend"; import { ExpandableList, ExpandableListItem } from "ui/public/ExpandableList"; import FormWrapper from "ui/public/FormWrapper"; import FullWidthWrapper from "ui/public/FullWidthWrapper"; import ChecklistItem from "ui/shared/ChecklistItem"; import ErrorWrapper from "ui/shared/ErrorWrapper"; -import { array, object } from "yup"; +import { object } from "yup"; import { Option } from "../shared"; import type { PublicProps } from "../ui"; @@ -32,36 +36,21 @@ function toggleInArray(value: T, arr: Array): Array { : [...arr, value]; } -function getFlatOptions({ - options, - groupedOptions, -}: { - options: Checklist["options"]; - groupedOptions: Checklist["groupedOptions"]; -}) { - if (options) { - return options; - } - if (groupedOptions) { - return groupedOptions.flatMap((group) => group.children); - } - return []; -} +const ChecklistComponent: React.FC = (props) => { + const { + description = "", + groupedOptions, + handleSubmit, + howMeasured, + info, + options, + policyRef, + text, + img, + previouslySubmittedData, + id, + } = props; -const ChecklistComponent: React.FC = ({ - allRequired, - description = "", - groupedOptions, - handleSubmit, - howMeasured, - info, - options, - policyRef, - text, - img, - previouslySubmittedData, - id, -}) => { const formik = useFormik<{ checked: Array }>({ initialValues: { checked: previouslySubmittedData?.answers || [], @@ -72,27 +61,7 @@ const ChecklistComponent: React.FC = ({ validateOnBlur: false, validateOnChange: false, validationSchema: object({ - checked: array() - .required() - .test({ - name: "atLeastOneChecked", - message: "Select at least one option", - test: (checked?: Array) => { - return Boolean(checked && checked.length > 0); - }, - }) - .test({ - name: "notAllChecked", - message: "All options must be checked", - test: (checked?: Array) => { - if (!allRequired) { - return true; - } - const flatOptions = getFlatOptions({ options, groupedOptions }); - const allChecked = checked && checked.length === flatOptions.length; - return Boolean(allChecked); - }, - }), + checked: checklistValidationSchema(props), }), }); diff --git a/editor.planx.uk/src/@planx/components/Checklist/model.ts b/editor.planx.uk/src/@planx/components/Checklist/model.ts index 210fa82cee..7287fe9364 100644 --- a/editor.planx.uk/src/@planx/components/Checklist/model.ts +++ b/editor.planx.uk/src/@planx/components/Checklist/model.ts @@ -1,3 +1,5 @@ +import { array } from "yup"; + import { MoreInformation, Option } from "../shared"; export interface Group { @@ -23,7 +25,7 @@ interface ChecklistExpandableProps { export const toggleExpandableChecklist = ( checklist: ChecklistExpandableProps, ): ChecklistExpandableProps => { - if (checklist.options) { + if (checklist.options !== undefined && checklist.options.length > 0) { return { ...checklist, groupedOptions: [ @@ -34,13 +36,68 @@ export const toggleExpandableChecklist = ( ], options: undefined, }; - } - if (checklist.groupedOptions) { + } else if ( + checklist.groupedOptions !== undefined && + checklist.groupedOptions.length > 0 + ) { return { ...checklist, options: checklist.groupedOptions.flatMap((opt) => opt.children), groupedOptions: undefined, }; + } else { + return { + ...checklist, + options: checklist.options || [], + groupedOptions: checklist.groupedOptions || [ + { + title: "Section 1", + children: [], + }, + ], + }; } - return checklist; }; + +export const getFlatOptions = ({ + options, + groupedOptions, +}: { + options: Checklist["options"]; + groupedOptions: Checklist["groupedOptions"]; +}) => { + if (options) { + return options; + } + if (groupedOptions) { + return groupedOptions.flatMap((group) => group.children); + } + return []; +}; + +export const checklistValidationSchema = ({ + allRequired, + options, + groupedOptions, +}: Checklist) => + array() + .required() + .test({ + name: "atLeastOneChecked", + message: "Select at least one option", + test: (checked?: Array) => { + return Boolean(checked && checked.length > 0); + }, + }) + .test({ + name: "notAllChecked", + message: "All options must be checked", + test: (checked?: Array) => { + if (!allRequired) { + return true; + } + const flatOptions = getFlatOptions({ options, groupedOptions }); + const allChecked = checked && checked.length === flatOptions.length; + return Boolean(allChecked); + }, + }); diff --git a/editor.planx.uk/src/@planx/components/DateInput/model.test.ts b/editor.planx.uk/src/@planx/components/DateInput/model.test.ts index 03d7b20439..7d73193590 100644 --- a/editor.planx.uk/src/@planx/components/DateInput/model.test.ts +++ b/editor.planx.uk/src/@planx/components/DateInput/model.test.ts @@ -47,7 +47,10 @@ describe("dateSchema", () => { expect(await dateSchema().isValid("2021-23-03")).toBe(false); }); - const validate = async (date?: string) => await dateSchema().validate(date).catch((err) => err.errors); + const validate = async (date?: string) => + await dateSchema() + .validate(date) + .catch((err) => err.errors); it("throws an error for an undefined value (empty form)", async () => { const errors = await validate(undefined); @@ -58,12 +61,12 @@ describe("dateSchema", () => { const errors = await validate("ab-cd-efgh"); expect(errors[0]).toMatch(/Date must include a day/); }); - + it("throws an error for a missing day", async () => { const errors = await validate("2024-12-"); expect(errors[0]).toMatch(/Date must include a day/); }); - + it("throws an error for a missing month", async () => { const errors = await validate("2024--25"); expect(errors[0]).toMatch(/Date must include a month/); @@ -112,7 +115,7 @@ describe("dateRangeSchema", () => { "1980-06-15", ), ).toBe(false); - }) + }); }); test("padding on input", () => { @@ -145,4 +148,4 @@ test("padding on blur", () => { // Leaves single 0 alone expect(paddedDate("2021-0-2", "blur")).toBe("2021-0-02"); expect(paddedDate("2021-10-0", "blur")).toBe("2021-10-0"); -}); \ No newline at end of file +}); diff --git a/editor.planx.uk/src/@planx/components/DateInput/model.ts b/editor.planx.uk/src/@planx/components/DateInput/model.ts index 4b6ee7b2b5..f661f803e3 100644 --- a/editor.planx.uk/src/@planx/components/DateInput/model.ts +++ b/editor.planx.uk/src/@planx/components/DateInput/model.ts @@ -60,47 +60,33 @@ const displayDate = (date: string): string | undefined => { }; export const parseDate = (date?: string) => { - const [year, month, day] = date?.split("-").map((val) => parseInt(val) || undefined) || []; + const [year, month, day] = + date?.split("-").map((val) => parseInt(val) || undefined) || []; return { year, month, day }; -} +}; export const dateSchema = () => { return string() - .test( - "missing day", - "Date must include a day", - (date?: string) => { - const { day } = parseDate(date); - return day !== undefined; - }) - .test( - "missing month", - "Date must include a month", - (date?: string) => { - const { month } = parseDate(date); - return month !== undefined; - }) - .test( - "missing year", - "Date must include a year", - (date?: string) => { - const { year } = parseDate(date); - return year !== undefined; - }) - .test( - "invalid day", - "Day must be valid", - (date?: string) => { - const { day } = parseDate(date); - return Boolean(day && day <= 31) - }) - .test( - "invalid month", - "Month must be valid", - (date?: string) => { - const { month } = parseDate(date); - return Boolean(month && month <= 12); - }) + .test("missing day", "Date must include a day", (date?: string) => { + const { day } = parseDate(date); + return day !== undefined; + }) + .test("missing month", "Date must include a month", (date?: string) => { + const { month } = parseDate(date); + return month !== undefined; + }) + .test("missing year", "Date must include a year", (date?: string) => { + const { year } = parseDate(date); + return year !== undefined; + }) + .test("invalid day", "Day must be valid", (date?: string) => { + const { day } = parseDate(date); + return Boolean(day && day <= 31); + }) + .test("invalid month", "Month must be valid", (date?: string) => { + const { month } = parseDate(date); + return Boolean(month && month <= 12); + }) .test( "valid", "Enter a valid date in DD.MM.YYYY format", @@ -115,24 +101,26 @@ export const dateRangeSchema: (params: { min?: string; max?: string; }) => SchemaOf = (params) => - dateSchema() - .required("Enter a valid date in DD.MM.YYYY format") - .test({ - name: "too soon", - message: `Enter a date later than ${params.min && displayDate(params.min) - }`, - test: (date: string | undefined) => { - return Boolean(date && !(params.min && date < params.min)); - }, - }) - .test({ - name: "too late", - message: `Enter a date earlier than ${params.max && displayDate(params.max) - }`, - test: (date: string | undefined) => { - return Boolean(date && !(params.max && date > params.max)); - }, - }); + dateSchema() + .required("Enter a valid date in DD.MM.YYYY format") + .test({ + name: "too soon", + message: `Enter a date later than ${ + params.min && displayDate(params.min) + }`, + test: (date: string | undefined) => { + return Boolean(date && !(params.min && date < params.min)); + }, + }) + .test({ + name: "too late", + message: `Enter a date earlier than ${ + params.max && displayDate(params.max) + }`, + test: (date: string | undefined) => { + return Boolean(date && !(params.max && date > params.max)); + }, + }); export const parseDateInput = ( data: Record | undefined, diff --git a/editor.planx.uk/src/@planx/components/DrawBoundary/Editor.tsx b/editor.planx.uk/src/@planx/components/DrawBoundary/Editor.tsx index b85054d325..38492b893c 100644 --- a/editor.planx.uk/src/@planx/components/DrawBoundary/Editor.tsx +++ b/editor.planx.uk/src/@planx/components/DrawBoundary/Editor.tsx @@ -1,3 +1,5 @@ +import FormControlLabel from "@mui/material/FormControlLabel"; +import Switch from "@mui/material/Switch"; import { ComponentType as TYPES } from "@opensystemslab/planx-core/types"; import { EditorProps, @@ -10,7 +12,6 @@ import React from "react"; import InputGroup from "ui/editor/InputGroup"; import ModalSection from "ui/editor/ModalSection"; import ModalSectionContent from "ui/editor/ModalSectionContent"; -import OptionButton from "ui/editor/OptionButton"; import RichTextInput from "ui/editor/RichTextInput"; import Input from "ui/shared/Input"; import InputRow from "ui/shared/InputRow"; @@ -100,17 +101,22 @@ function DrawBoundaryComponent(props: Props) { onChange={formik.handleChange} /> - { - formik.setFieldValue( - "hideFileUpload", - !formik.values.hideFileUpload, - ); - }} - > - Hide file upload and allow user to continue without data - + + + formik.setFieldValue( + "hideFileUpload", + !formik.values.hideFileUpload, + ) + } + /> + } + label="Hide file upload and allow user to continue without data" + /> + ; global.URL.createObjectURL = jest.fn(); -const { getState, setState } = vanillaStore; +const { getState, setState } = useStore; test("recovers previously submitted files when clicking the back button", async () => { const handleSubmit = jest.fn(); diff --git a/editor.planx.uk/src/@planx/components/DrawBoundary/Public/index.tsx b/editor.planx.uk/src/@planx/components/DrawBoundary/Public/index.tsx index e5086f1d17..cfe8dfc3c0 100644 --- a/editor.planx.uk/src/@planx/components/DrawBoundary/Public/index.tsx +++ b/editor.planx.uk/src/@planx/components/DrawBoundary/Public/index.tsx @@ -14,7 +14,8 @@ import { PrivateFileUpload } from "@planx/components/shared/PrivateFileUpload/Pr import { squareMetresToHectares } from "@planx/components/shared/utils"; import type { PublicProps } from "@planx/components/ui"; import buffer from "@turf/buffer"; -import { type Feature, point } from "@turf/helpers"; +import { point } from "@turf/helpers"; +import { Feature } from "geojson"; import { Store, useStore } from "pages/FlowEditor/lib/store"; import React, { useEffect, useRef, useState } from "react"; import { FONT_WEIGHT_SEMI_BOLD } from "theme"; diff --git a/editor.planx.uk/src/@planx/components/FileUpload/Public.tsx b/editor.planx.uk/src/@planx/components/FileUpload/Public.tsx index e821865e94..fbe600753c 100644 --- a/editor.planx.uk/src/@planx/components/FileUpload/Public.tsx +++ b/editor.planx.uk/src/@planx/components/FileUpload/Public.tsx @@ -42,6 +42,17 @@ const slotsSchema = array() !slots.some((slot) => slot.status === "uploading"), ); }, + }) + .test({ + name: "errorStatus", + message: "Remove files which failed to upload", + test: (slots?: Array) => { + return Boolean( + slots && + slots.length > 0 && + !slots.some((slot) => slot.status === "error"), + ); + }, }); const FileUpload: React.FC = (props) => { diff --git a/editor.planx.uk/src/@planx/components/FileUploadAndLabel/Editor.test.tsx b/editor.planx.uk/src/@planx/components/FileUploadAndLabel/Editor.test.tsx index 1c3b97a4cd..7e75a02126 100644 --- a/editor.planx.uk/src/@planx/components/FileUploadAndLabel/Editor.test.tsx +++ b/editor.planx.uk/src/@planx/components/FileUploadAndLabel/Editor.test.tsx @@ -1,5 +1,5 @@ import { screen } from "@testing-library/react"; -import { vanillaStore } from "pages/FlowEditor/lib/store"; +import { useStore } from "pages/FlowEditor/lib/store"; import React from "react"; import { DndProvider } from "react-dnd"; import { HTML5Backend } from "react-dnd-html5-backend"; @@ -7,7 +7,7 @@ import { setup } from "testUtils"; import FileUploadAndLabelComponent from "./Editor"; -const { getState } = vanillaStore; +const { getState } = useStore; describe("FileUploadAndLabel - Editor Modal", () => { // TODO correctly mock an authenticated Platform Admin user so 'add new' button is enabled in final test diff --git a/editor.planx.uk/src/@planx/components/FileUploadAndLabel/Editor.tsx b/editor.planx.uk/src/@planx/components/FileUploadAndLabel/Editor.tsx index 6f4c3f8a01..6c93ce179d 100644 --- a/editor.planx.uk/src/@planx/components/FileUploadAndLabel/Editor.tsx +++ b/editor.planx.uk/src/@planx/components/FileUploadAndLabel/Editor.tsx @@ -1,8 +1,10 @@ import RuleIcon from "@mui/icons-material/Rule"; import Box from "@mui/material/Box"; import Divider from "@mui/material/Divider"; +import FormControlLabel from "@mui/material/FormControlLabel"; import MenuItem from "@mui/material/MenuItem"; import { styled } from "@mui/material/styles"; +import Switch from "@mui/material/Switch"; import Typography from "@mui/material/Typography"; import { ComponentType as TYPES } from "@opensystemslab/planx-core/types"; import { @@ -21,7 +23,6 @@ import ListManager, { import ModalSection from "ui/editor/ModalSection"; import ModalSectionContent from "ui/editor/ModalSectionContent"; import { ModalSubtitle } from "ui/editor/ModalSubtitle"; -import OptionButton from "ui/editor/OptionButton"; import RichTextInput from "ui/editor/RichTextInput"; import SelectInput from "ui/editor/SelectInput"; import Input from "ui/shared/Input"; @@ -91,14 +92,22 @@ function FileUploadAndLabelComponent(props: Props) { onChange={formik.handleChange} /> - { - formik.setFieldValue("hideDropZone", !formik.values.hideDropZone); - }} - > - Hide the drop zone and show files list for information only - + + + formik.setFieldValue( + "hideDropZone", + !formik.values.hideDropZone, + ) + } + /> + } + label="Hide the drop zone and show files list for information only" + /> + diff --git a/editor.planx.uk/src/@planx/components/FileUploadAndLabel/Public.test.tsx b/editor.planx.uk/src/@planx/components/FileUploadAndLabel/Public.test.tsx index a8a8435fd8..7011823847 100644 --- a/editor.planx.uk/src/@planx/components/FileUploadAndLabel/Public.test.tsx +++ b/editor.planx.uk/src/@planx/components/FileUploadAndLabel/Public.test.tsx @@ -1,7 +1,7 @@ import { act, screen, waitFor, within } from "@testing-library/react"; import { UserEvent } from "@testing-library/user-event/dist/types/setup/setup"; import axios from "axios"; -import { vanillaStore } from "pages/FlowEditor/lib/store"; +import { useStore } from "pages/FlowEditor/lib/store"; import { FullStore } from "pages/FlowEditor/lib/store"; import React from "react"; import { axe, setup } from "testUtils"; @@ -11,7 +11,7 @@ import { mockFileTypes, mockFileTypesUniqueKeys } from "./mocks"; import { PASSPORT_REQUESTED_FILES_KEY } from "./model"; import FileUploadAndLabelComponent from "./Public"; -const { getState, setState } = vanillaStore; +const { getState, setState } = useStore; let initialState: FullStore; jest.mock("axios"); diff --git a/editor.planx.uk/src/@planx/components/FileUploadAndLabel/Public.tsx b/editor.planx.uk/src/@planx/components/FileUploadAndLabel/Public.tsx index 2233382ef2..6efbb1e2e0 100644 --- a/editor.planx.uk/src/@planx/components/FileUploadAndLabel/Public.tsx +++ b/editor.planx.uk/src/@planx/components/FileUploadAndLabel/Public.tsx @@ -148,6 +148,7 @@ function Component(props: Props) { break; } case "allRequiredFilesUploaded": + case "errorStatus": setFileListError(err?.message); break; } @@ -188,10 +189,6 @@ function Component(props: Props) { return ( slot.url && slot.status === "success") - } > diff --git a/editor.planx.uk/src/@planx/components/FileUploadAndLabel/schema.ts b/editor.planx.uk/src/@planx/components/FileUploadAndLabel/schema.ts index 42d242f883..25d82a238b 100644 --- a/editor.planx.uk/src/@planx/components/FileUploadAndLabel/schema.ts +++ b/editor.planx.uk/src/@planx/components/FileUploadAndLabel/schema.ts @@ -91,10 +91,21 @@ export const slotsSchema = array() name: "nonUploading", message: "Please wait for upload to complete", test: (slots?: Array) => { - const isEveryUploadComplete = Boolean( - slots?.every((slot) => slot.status === "success"), + const isAnyUploadInProgress = Boolean( + slots?.some((slot) => slot.status === "uploading"), + ); + return !isAnyUploadInProgress; + }, + }) + .test({ + name: "errorStatus", + message: "Remove files which failed to upload", + test: (slots?: Array) => { + return Boolean( + slots && + slots.length > 0 && + !slots.some((slot) => slot.status === "error"), ); - return isEveryUploadComplete; }, }); diff --git a/editor.planx.uk/src/@planx/components/FindProperty/Editor.tsx b/editor.planx.uk/src/@planx/components/FindProperty/Editor.tsx index f38fe8c7f8..6430de1285 100644 --- a/editor.planx.uk/src/@planx/components/FindProperty/Editor.tsx +++ b/editor.planx.uk/src/@planx/components/FindProperty/Editor.tsx @@ -1,3 +1,5 @@ +import FormControlLabel from "@mui/material/FormControlLabel"; +import Switch from "@mui/material/Switch"; import { ComponentType as TYPES } from "@opensystemslab/planx-core/types"; import { EditorProps, @@ -10,7 +12,6 @@ import React from "react"; import InputGroup from "ui/editor/InputGroup"; import ModalSection from "ui/editor/ModalSection"; import ModalSectionContent from "ui/editor/ModalSectionContent"; -import OptionButton from "ui/editor/OptionButton"; import RichTextInput from "ui/editor/RichTextInput"; import Input from "ui/shared/Input"; import InputRow from "ui/shared/InputRow"; @@ -60,17 +61,20 @@ function FindPropertyComponent(props: Props) { - { - formik.setFieldValue( - "allowNewAddresses", - !formik.values.allowNewAddresses, - ); - }} - > - Allow users to plot new addresses without a UPRN - + + formik.setFieldValue( + "allowNewAddresses", + !formik.values.allowNewAddresses, + ) + } + /> + } + label="Allow users to plot new addresses without a UPRN" + /> {formik.values.allowNewAddresses ? ( <> 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 1ad63c2512..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.boundaryBBox, + state.teamSettings.boundaryBBox, ]); useEffect(() => { diff --git a/editor.planx.uk/src/@planx/components/FindProperty/Public/Public.test.tsx b/editor.planx.uk/src/@planx/components/FindProperty/Public/Public.test.tsx index 7e5dee7686..baac38d734 100644 --- a/editor.planx.uk/src/@planx/components/FindProperty/Public/Public.test.tsx +++ b/editor.planx.uk/src/@planx/components/FindProperty/Public/Public.test.tsx @@ -34,8 +34,8 @@ const osAddressProps = { "property.type": ["residential.HMO.parent"], "property.localAuthorityDistrict": ["Southwark"], "property.region": ["London"], - "property.boundary.title.area": 1234.98, - "property.boundary.title.area.hectares": 0.123498, + "property.boundary.title.area": 1232.22, + "property.boundary.title.area.hectares": 0.123222, "property.boundary.title": { geometry: { type: "MultiPolygon", @@ -83,8 +83,8 @@ const proposedAddressProps = { }, "property.localAuthorityDistrict": ["Southwark"], "property.region": ["London"], - "property.boundary.title.area": 1234.98, - "property.boundary.title.area.hectares": 0.123498, + "property.boundary.title.area": 1232.22, + "property.boundary.title.area.hectares": 0.123222, "property.boundary.title": { geometry: { type: "MultiPolygon", diff --git a/editor.planx.uk/src/@planx/components/FindProperty/Public/index.tsx b/editor.planx.uk/src/@planx/components/FindProperty/Public/index.tsx index 3f91883a05..d3828330cf 100644 --- a/editor.planx.uk/src/@planx/components/FindProperty/Public/index.tsx +++ b/editor.planx.uk/src/@planx/components/FindProperty/Public/index.tsx @@ -8,8 +8,8 @@ import CardHeader from "@planx/components/shared/Preview/CardHeader"; import { squareMetresToHectares } from "@planx/components/shared/utils"; import { PublicProps } from "@planx/components/ui"; import area from "@turf/area"; -import { Feature } from "@turf/helpers"; import DelayedLoadingIndicator from "components/DelayedLoadingIndicator"; +import { Feature } from "geojson"; import { Store } from "pages/FlowEditor/lib/store"; import React, { useEffect, useState } from "react"; import useSWR from "swr"; diff --git a/editor.planx.uk/src/@planx/components/List/Editor.tsx b/editor.planx.uk/src/@planx/components/List/Editor.tsx index d2975e52ed..bad6870d6f 100644 --- a/editor.planx.uk/src/@planx/components/List/Editor.tsx +++ b/editor.planx.uk/src/@planx/components/List/Editor.tsx @@ -13,14 +13,53 @@ import InputRowLabel from "ui/shared/InputRowLabel"; import { EditorProps, ICONS, InternalNotes, MoreInformation } from "../ui"; import { List, parseContent } from "./model"; -import { Zoo } from "./schemas/Zoo"; +import { ProposedAdvertisements } from "./schemas/Adverts"; +import { NonResidentialFloorspace } from "./schemas/Floorspace"; +import { BuildingDetailsGLA } from "./schemas/GLA/BuildingDetails"; +import { CommunalSpaceGLA } from "./schemas/GLA/CommunalSpace"; +import { ExistingAndProposedUsesGLA } from "./schemas/GLA/ExistingAndProposedUses"; +import { OpenSpaceGLA } from "./schemas/GLA/OpenSpace"; +import { ProtectedSpaceGLA } from "./schemas/GLA/ProtectedSpace"; +import { MaterialDetails } from "./schemas/Materials"; +import { ResidentialUnitsExisting } from "./schemas/ResidentialUnits/Existing"; +import { ResidentialUnitsGLANew } from "./schemas/ResidentialUnits/GLA/New"; +import { ResidentialUnitsGLARebuilt } from "./schemas/ResidentialUnits/GLA/Rebuilt"; +import { ResidentialUnitsGLARemoved } from "./schemas/ResidentialUnits/GLA/Removed"; +import { ResidentialUnitsGLARetained } from "./schemas/ResidentialUnits/GLA/Retained"; +import { ResidentialUnitsProposed } from "./schemas/ResidentialUnits/Proposed"; type Props = EditorProps; export const SCHEMAS = [ - { name: "Zoo", schema: Zoo }, - // TODO: Residential units - // TODO: Residential units (GLA) + { name: "Residential units - Existing", schema: ResidentialUnitsExisting }, + { name: "Residential units - Proposed", schema: ResidentialUnitsProposed }, + { + name: "Residential units (GLA) - New", + schema: ResidentialUnitsGLANew, + }, + { + name: "Residential units (GLA) - Rebuilt", + schema: ResidentialUnitsGLARebuilt, + }, + { + name: "Residential units (GLA) - Removed", + schema: ResidentialUnitsGLARemoved, + }, + { + name: "Residential units (GLA) - Retained", + schema: ResidentialUnitsGLARetained, + }, + { name: "Non-residential floorspace", schema: NonResidentialFloorspace }, + { + name: "Existing and proposed uses (GLA)", + schema: ExistingAndProposedUsesGLA, + }, + { name: "Material details", schema: MaterialDetails }, + { name: "Building details (GLA)", schema: BuildingDetailsGLA }, + { name: "Communal spaces (GLA)", schema: CommunalSpaceGLA }, + { name: "Protected spaces (GLA)", schema: ProtectedSpaceGLA }, + { name: "Open spaces (GLA)", schema: OpenSpaceGLA }, + { name: "Proposed advertisements", schema: ProposedAdvertisements }, ]; function ListComponent(props: Props) { @@ -45,6 +84,7 @@ function ListComponent(props: Props) { value={formik.values.title} placeholder="Title" onChange={formik.handleChange} + required /> @@ -62,6 +102,7 @@ function ListComponent(props: Props) { value={formik.values.fn} placeholder="Data Field" onChange={formik.handleChange} + required /> diff --git a/editor.planx.uk/src/@planx/components/List/Public/Context.tsx b/editor.planx.uk/src/@planx/components/List/Public/Context.tsx index 1f940805fb..8d7f033828 100644 --- a/editor.planx.uk/src/@planx/components/List/Public/Context.tsx +++ b/editor.planx.uk/src/@planx/components/List/Public/Context.tsx @@ -1,73 +1,232 @@ -import React, { createContext, ReactNode, useContext, useState } from "react"; +import { + getPreviouslySubmittedData, + makeData, +} from "@planx/components/shared/utils"; +import { PublicProps } from "@planx/components/ui"; +import { FormikProps, useFormik } from "formik"; +import React, { + createContext, + PropsWithChildren, + useContext, + useState, +} from "react"; -import { generateNewItem, Schema, UserData } from "../model"; +import { + generateInitialValues, + generateValidationSchema, + List, + Schema, + UserData, + UserResponse, +} from "../model"; +import { + flatten, + sumIdenticalUnits, + sumIdenticalUnitsByDevelopmentType, +} from "../utils"; interface ListContextValue { schema: Schema; - activeIndex: number | undefined; - userData: UserData; + activeIndex: number; addNewItem: () => void; - saveItem: (index: number, updatedItem: UserData[0]) => void; + saveItem: () => Promise; removeItem: (index: number) => void; editItem: (index: number) => void; cancelEditItem: () => void; + formik: FormikProps; + validateAndSubmitForm: () => void; + listProps: PublicProps; + /** + * @deprecated + * @description + * Hide features if the schema is temporarily mocking a "Page" component + * @todo + * Refactor and allow a single-item "Page" component to properly manage this + */ + isPageComponent: boolean; + errors: { + addItem: boolean; + unsavedItem: boolean; + min: boolean; + max: boolean; + }; } -interface ListProviderProps { - children: ReactNode; - schema: Schema; -} +type ListProviderProps = PropsWithChildren>; const ListContext = createContext(undefined); -export const ListProvider: React.FC = ({ - children, - schema, -}) => { - const [activeIndex, setActiveIndex] = useState(0); - const [userData, setUserData] = useState( - schema.min === 0 ? [] : [generateNewItem(schema)], +export const ListProvider: React.FC = (props) => { + const { schema, children, handleSubmit } = props; + + const [activeIndex, setActiveIndex] = useState( + props.previouslySubmittedData ? -1 : 0, ); - const addNewItem = () => { - setUserData([...userData, generateNewItem(schema)]); - setActiveIndex((prev) => (prev === undefined ? 0 : prev + 1)); + const [activeItemInitialState, setActiveItemInitialState] = useState< + UserResponse | undefined + >(undefined); + + const [addItemError, setAddItemError] = useState(false); + const [unsavedItemError, setUnsavedItemError] = useState(false); + const [minError, setMinError] = useState(false); + const [maxError, setMaxError] = useState(false); + + const resetErrors = () => { + setMinError(false); + setMaxError(false); + setUnsavedItemError(false); }; - const saveItem = (index: number, updatedItem: UserData[0]) => { - setUserData((prev) => - prev.map((item, i) => (i === index ? updatedItem : item)), - ); + const addNewItem = async () => { + resetErrors(); + + // Do not allow a new item to be added if there's still an active item + if (activeIndex !== -1) return setAddItemError(true); + + // Do not allow new item to be added if it will exceed max + if (schema.max && formik.values.userData.length === schema.max) { + return setMaxError(true); + } + + // Add new item, and set to active + setAddItemError(false); + formik.values.userData.push(generateInitialValues(schema)); + setActiveIndex(formik.values.userData.length - 1); }; - const editItem = (index: number) => setActiveIndex(index); + const saveItem = async () => { + resetErrors(); + + const errors = await formik.validateForm(); + const isValid = !errors.userData?.length; + if (isValid) { + exitEditMode(); + setAddItemError(false); + } + }; const removeItem = (index: number) => { + resetErrors(); + + // If item is before currently active card, retain active card if (activeIndex && index < activeIndex) { - // If item is before currently active card, retain active card - setActiveIndex((prev) => (prev === undefined ? 0 : prev - 1)); - } else if (index === activeIndex || index === 0) { - // If item is currently in Edit mode, exit Edit mode - cancelEditItem(); + setActiveIndex((prev) => (prev === -1 ? 0 : prev - 1)); } // Remove item from userData - setUserData((prev) => prev.filter((_, i) => i !== index)); + formik.setFieldValue( + "userData", + formik.values.userData.filter((_, i) => i !== index), + ); }; - const cancelEditItem = () => setActiveIndex(undefined); + const validateAndSubmitForm = () => { + // Do not allow submissions with an unsaved item + if (activeIndex !== -1) return setUnsavedItemError(true); + + // Manually validate minimum number of items + if (formik.values.userData.length < schema.min) { + return setMinError(true); + } + + formik.handleSubmit(); + }; + + const cancelEditItem = () => { + activeItemInitialState + ? resetItemToPreviousState() + : removeItem(activeIndex); + + setActiveItemInitialState(undefined); + + exitEditMode(); + }; + + const editItem = (index: number) => { + setActiveItemInitialState(formik.values.userData[index]); + setActiveIndex(index); + }; + + const getInitialValues = () => { + const previousValues = getPreviouslySubmittedData(props); + if (previousValues) return previousValues; + + return schema.min ? [generateInitialValues(schema)] : []; + }; + + const exitEditMode = () => setActiveIndex(-1); + + const resetItemToPreviousState = () => + formik.setFieldValue(`userData[${activeIndex}]`, activeItemInitialState); + + const isPageComponent = schema.max === 1; + + const formik = useFormik({ + initialValues: { + userData: getInitialValues(), + }, + onSubmit: (values) => { + // defaultPassportData (array) is used when coming "back" + const defaultPassportData = makeData(props, values.userData)?.["data"]; + + // flattenedPassportData makes individual list items compatible with Calculate components + const flattenedPassportData = flatten(defaultPassportData, { depth: 2 }); + + // basic example of general summary stats we can add onSubmit: + // 1. count of items/responses + // 2. if the schema includes a field that sets fn = "identicalUnits", sum of total units + // 3. if the schema includes a field that sets fn = "development" & fn = "identicalUnits", sum of total units by development "val" + const totalUnits = sumIdenticalUnits(props.fn, defaultPassportData); + const totalUnitsByDevelopmentType = sumIdenticalUnitsByDevelopmentType( + props.fn, + defaultPassportData, + ); + + const summaries = { + [`${props.fn}.total.listItems`]: + defaultPassportData[`${props.fn}`].length, + ...(totalUnits > 0 && { + [`${props.fn}.total.units`]: totalUnits, + }), + ...(totalUnits > 0 && + Object.keys(totalUnitsByDevelopmentType).length > 0 && + totalUnitsByDevelopmentType), + }; + + handleSubmit?.({ + data: { + ...defaultPassportData, + ...flattenedPassportData, + ...summaries, + }, + }); + }, + validateOnBlur: false, + validateOnChange: false, + validationSchema: generateValidationSchema(schema), + }); return ( {children} diff --git a/editor.planx.uk/src/@planx/components/List/Public/Fields.tsx b/editor.planx.uk/src/@planx/components/List/Public/Fields.tsx index 59150f431b..961e219c8c 100644 --- a/editor.planx.uk/src/@planx/components/List/Public/Fields.tsx +++ b/editor.planx.uk/src/@planx/components/List/Public/Fields.tsx @@ -1,137 +1,227 @@ import Box from "@mui/material/Box"; import FormControl from "@mui/material/FormControl"; import FormLabel from "@mui/material/FormLabel"; +import Grid from "@mui/material/Grid"; import MenuItem from "@mui/material/MenuItem"; import RadioGroup from "@mui/material/RadioGroup"; +import { visuallyHidden } from "@mui/utils"; +import { getIn } from "formik"; +import { get } from "lodash"; import React from "react"; import SelectInput from "ui/editor/SelectInput"; import InputLabel from "ui/public/InputLabel"; +import ChecklistItem from "ui/shared/ChecklistItem"; +import ErrorWrapper from "ui/shared/ErrorWrapper"; import Input from "ui/shared/Input"; import InputRowLabel from "ui/shared/InputRowLabel"; -import { DESCRIPTION_TEXT } from "../../shared/constants"; +import { DESCRIPTION_TEXT, ERROR_MESSAGE } from "../../shared/constants"; import BasicRadio from "../../shared/Radio/BasicRadio"; -import type { NumberField, QuestionField, TextField } from "../model"; +import type { + ChecklistField, + NumberField, + QuestionField, + TextField, +} from "../model"; +import { useListContext } from "./Context"; type Props = T & { id: string }; -export const TextFieldInput: React.FC> = ({ - id, - data, - required, -}) => ( - - { - if (type === "email") return "email"; - else if (type === "phone") return "tel"; - return "text"; - })(data.type)} - multiline={data.type && ["long", "extraLong"].includes(data.type)} - bordered - id={id} - rows={ - data.type && ["long", "extraLong"].includes(data.type) ? 5 : undefined - } - name="text" - required={required} - inputProps={{ - "aria-describedby": [ - data.description ? DESCRIPTION_TEXT : "", - // TODO: When handling errors, revisit this - // formik.errors.text ? `${ERROR_MESSAGE}-${inputFieldId}` : "", - ] - .filter(Boolean) - .join(" "), - }} - /> - -); +export const TextFieldInput: React.FC> = ({ id, data }) => { + const { formik, activeIndex } = useListContext(); -export const NumberFieldInput: React.FC> = ({ - id, - data, - required, -}) => ( - - + return ( + { + if (type === "email") return "email"; + else if (type === "phone") return "tel"; + return "text"; + })(data.type)} + multiline={data.type && ["long", "extraLong"].includes(data.type)} bordered - name="value" - type="number" - // value={formik.values.value} - // onChange={formik.handleChange} - // errorMessage={formik.errors.value as string} + value={formik.values.userData[activeIndex][data.fn]} + onChange={formik.handleChange} + errorMessage={get(formik.errors, ["userData", activeIndex, data.fn])} + id={id} + rows={ + data.type && ["long", "extraLong"].includes(data.type) ? 5 : undefined + } + name={`userData[${activeIndex}]['${data.fn}']`} + required inputProps={{ "aria-describedby": [ data.description ? DESCRIPTION_TEXT : "", - // formik.errors.value ? `${ERROR_MESSAGE}-${props.id}` : "", + get(formik.errors, ["userData", activeIndex, data.fn]) + ? `${ERROR_MESSAGE}-${id}` + : "", ] .filter(Boolean) .join(" "), }} - id={id} /> - {data.units && {data.units}} - - -); + + ); +}; -export const RadioFieldInput: React.FC> = ({ +export const NumberFieldInput: React.FC> = ({ id, data, -}) => ( - - ({ - color: theme.palette.text.primary, - "&.Mui-focused": { - color: theme.palette.text.primary, - }, - })} - > - {data.title} - - {/* */} - - {data.options.map(({ id, data }) => ( - { + const { formik, activeIndex } = useListContext(); + + return ( + + + console.log("change radio")} /> - ))} - - {/* */} - -); + {data.units && {data.units}} + + + ); +}; -export const SelectFieldInput: React.FC> = ({ - id, - data, - required, -}) => ( - - - {data.options.map((option) => ( - - {option.data.text} - - ))} - - -); +export const RadioFieldInput: React.FC> = (props) => { + const { formik, activeIndex } = useListContext(); + const { id, data } = props; + + return ( + + ({ + color: theme.palette.text.primary, + "&.Mui-focused": { + color: theme.palette.text.primary, + }, + })} + > + {data.title} + + + + {data.options.map(({ id, data }) => ( + + ))} + + + + ); +}; + +export const SelectFieldInput: React.FC> = (props) => { + const { formik, activeIndex } = useListContext(); + const { id, data } = props; + + return ( + + + + {data.options.map((option) => ( + + {option.data.text} + + ))} + + + + ); +}; + +export const ChecklistFieldInput: React.FC> = (props) => { + const { formik, activeIndex } = useListContext(); + const { + id, + data: { options, title, fn }, + } = props; + + const changeCheckbox = + (id: string) => + async ( + _checked: React.MouseEvent | undefined, + ) => { + let newCheckedIds; + + if (formik.values.userData[activeIndex][fn].includes(id)) { + newCheckedIds = ( + formik.values.userData[activeIndex][fn] as string[] + ).filter((x) => x !== id); + } else { + newCheckedIds = [...formik.values.userData[activeIndex][fn], id]; + } + + await formik.setFieldValue( + `userData[${activeIndex}]['${fn}']`, + newCheckedIds, + ); + }; + + return ( + + + + {title} + {options.map((option) => ( + + ))} + + + + ); +}; diff --git a/editor.planx.uk/src/@planx/components/List/Public/index.test.tsx b/editor.planx.uk/src/@planx/components/List/Public/index.test.tsx index 16d17c1452..444148bedc 100644 --- a/editor.planx.uk/src/@planx/components/List/Public/index.test.tsx +++ b/editor.planx.uk/src/@planx/components/List/Public/index.test.tsx @@ -1,22 +1,23 @@ -import { within } from "@testing-library/react"; +import { screen, within } from "@testing-library/react"; +import { UserEvent } from "@testing-library/user-event/dist/types/setup/setup"; import { cloneDeep, merge } from "lodash"; import React from "react"; import { axe, setup } from "testUtils"; -import ListComponent, { Props } from "../Public"; -import { Zoo } from "../schemas/Zoo"; +import ListComponent from "../Public"; +import { + mockUnitsPayload, + mockUnitsProps, +} from "../schemas/mocks/GenericUnits"; +import { mockMaxOneProps } from "../schemas/mocks/MaxOne"; +import { mockZooPayload, mockZooProps } from "../schemas/mocks/Zoo"; -const mockProps: Props = { - fn: "mock", - schema: Zoo, - schemaName: "Zoo", - title: "Mock Title", - description: "Mock description", -}; +jest.setTimeout(20_000); +Element.prototype.scrollIntoView = jest.fn(); describe("Basic UI", () => { it("renders correctly", () => { - const { getByText } = setup(); + const { getByText } = setup(); expect(getByText(/Mock Title/)).toBeInTheDocument(); expect(getByText(/Mock description/)).toBeInTheDocument(); @@ -24,7 +25,7 @@ describe("Basic UI", () => { it("parses provided schema to render expected form", async () => { const { getByLabelText, getByText, user, getByRole, queryAllByRole } = - setup(); + setup(); // Text inputs are generated from schema... const textInput = getByLabelText(/What's their name?/) as HTMLInputElement; @@ -90,20 +91,18 @@ describe("Basic UI", () => { }); it("should not have any accessibility violations", async () => { - const { container } = setup(); + const { container } = setup(); const results = await axe(container); expect(results).toHaveNoViolations(); }); }); -describe("Navigating back", () => { - test.todo("it pre-populates list correctly"); -}); - describe("Building a list", () => { it("does not display a default item if the schema has no required minimum", () => { - const mockWithMinZero = merge(cloneDeep(mockProps), { schema: { min: 0 } }); - const { queryByRole, getByRole } = setup( + const mockWithMinZero = merge(cloneDeep(mockZooProps), { + schema: { min: 0 }, + }); + const { queryByRole, getByTestId } = setup( , ); @@ -115,16 +114,14 @@ describe("Building a list", () => { expect(activeListHeading).toBeNull(); // Button is present allow additional items to be added - const addItemButton = getByRole("button", { - name: /Add a new animal type/, - }); + const addItemButton = getByTestId("list-add-button"); expect(addItemButton).toBeInTheDocument(); expect(addItemButton).not.toBeDisabled(); }); it("displays a default item if the schema has a required minimum", () => { const { getByRole, queryByLabelText } = setup( - , + , ); // Card present... @@ -140,25 +137,34 @@ describe("Building a list", () => { expect(inputField).not.toBeDisabled(); }); - test("Adding an item", async () => { - const { getAllByRole, getByRole, user } = setup( - , + it("hides the index number in the card header and the 'add another' button if the schema has a max of 1", () => { + const { getAllByTestId, queryByTestId } = setup( + , ); - let cards = getAllByRole("heading", { level: 2 }).map((el) => - el.closest("div"), + const cards = getAllByTestId(/list-card/); + expect(cards).toHaveLength(1); + expect(cards[0]).toHaveTextContent("Parking spaces"); + + const addItemButton = queryByTestId("list-add-button"); + expect(addItemButton).not.toBeInTheDocument(); + }); + + test("Adding an item", async () => { + const { getAllByTestId, getByTestId, user } = setup( + , ); + + let cards = getAllByTestId(/list-card/); expect(cards).toHaveLength(1); - const addItemButton = getByRole("button", { - name: /Add a new animal type/, - }); + await fillInResponse(user); + + const addItemButton = getByTestId("list-add-button"); await user.click(addItemButton); // Item successfully added - cards = getAllByRole("heading", { level: 2 }).map((el) => - el.closest("div"), - ); + cards = getAllByTestId(/list-card/); expect(cards).toHaveLength(2); // Old item is inactive @@ -177,40 +183,25 @@ describe("Building a list", () => { test("Editing an item", async () => { // Setup three cards - const { getAllByRole, getByRole, user, findByLabelText } = setup( - , + const { getAllByTestId, getByTestId, user } = setup( + , ); - const addItemButton = getByRole("button", { - name: /Add a new animal type/, - }); + await fillInResponse(user); + + const addItemButton = getByTestId("list-add-button"); + await user.click(addItemButton); + await fillInResponse(user); + await user.click(addItemButton); + await fillInResponse(user); - let cards = getAllByRole("heading", { level: 2 }).map((el) => - el.closest("div"), - ); + const cards = getAllByTestId(/list-card/); expect(cards).toHaveLength(3); let [firstCard, secondCard, thirdCard] = cards; - // Final card is currently active - expect(thirdCard).not.toBeNull(); - expect( - within(thirdCard!).getByLabelText(/What's their name?/), - ).toBeInTheDocument(); - - // Hitting "cancel" takes us out of Edit mode - const thirdCardCancelButton = within(thirdCard!).getByRole("button", { - name: /Cancel/, - }); - await user.click(thirdCardCancelButton); - - cards = getAllByRole("heading", { level: 2 }).map((el) => - el.closest("div"), - ); - [firstCard, secondCard, thirdCard] = cards; - // No cards currently active expect( within(firstCard!).queryByLabelText(/What's their name?/), @@ -233,10 +224,7 @@ describe("Building a list", () => { }); await user.click(secondCardEditButton); - cards = getAllByRole("heading", { level: 2 }).map((el) => - el.closest("div"), - ); - [firstCard, secondCard, thirdCard] = cards; + [firstCard, secondCard, thirdCard] = getAllByTestId(/list-card/); // Second card now editable expect( @@ -246,44 +234,39 @@ describe("Building a list", () => { test("Removing an item when all cards are inactive", async () => { // Setup three cards - const { getAllByRole, getByRole, user, getByLabelText, queryAllByRole } = - setup(); + const { + getByTestId, + getAllByTestId, + user, + getByLabelText, + queryAllByTestId, + } = setup(); + + await fillInResponse(user); + + const addItemButton = getByTestId("list-add-button"); - const addItemButton = getByRole("button", { - name: /Add a new animal type/, - }); await user.click(addItemButton); + await fillInResponse(user); + await user.click(addItemButton); + await fillInResponse(user); - let cards = getAllByRole("heading", { level: 2 }).map((el) => - el.closest("div"), - ); + let cards = getAllByTestId(/list-card/); expect(cards).toHaveLength(3); let [firstCard, secondCard, thirdCard] = cards; - const thirdCardCancelButton = within(thirdCard!).getByRole("button", { - name: /Cancel/, - }); - await user.click(thirdCardCancelButton); - - [firstCard, secondCard, thirdCard] = getAllByRole("heading", { - level: 2, - }).map((el) => el.closest("div")); - // Remove third card const thirdCardRemoveButton = within(thirdCard!).getByRole("button", { name: /Remove/, }); + await user.click(thirdCardRemoveButton); - cards = getAllByRole("heading", { level: 2 }).map((el) => - el.closest("div"), - ); + cards = getAllByTestId(/list-card/); expect(cards).toHaveLength(2); - [firstCard, secondCard] = getAllByRole("heading", { level: 2 }).map((el) => - el.closest("div"), - ); + [firstCard, secondCard, thirdCard] = getAllByTestId(/list-card/); // Previous items remain inactive expect( @@ -298,14 +281,10 @@ describe("Building a list", () => { name: /Remove/, }); await user.click(secondCardRemoveButton); - cards = getAllByRole("heading", { level: 2 }).map((el) => - el.closest("div"), - ); + cards = getAllByTestId(/list-card/); expect(cards).toHaveLength(1); - [firstCard] = getAllByRole("heading", { level: 2 }).map((el) => - el.closest("div"), - ); + [firstCard] = getAllByTestId(/list-card/); // Previous items remain inactive expect( @@ -317,9 +296,7 @@ describe("Building a list", () => { name: /Remove/, }); await user.click(firstCardRemoveButton); - cards = queryAllByRole("heading", { level: 2 }).map((el) => - el.closest("div"), - ); + cards = queryAllByTestId(/list-card/); expect(cards).toHaveLength(0); // Add item back @@ -332,17 +309,17 @@ describe("Building a list", () => { test("Removing an item when another card is active", async () => { // Setup two cards - const { getAllByRole, getByRole, user, getByLabelText, queryAllByRole } = - setup(); + const { getAllByTestId, getByTestId, user } = setup( + , + ); + + await fillInResponse(user); + + const addItemButton = getByTestId("list-add-button"); - const addItemButton = getByRole("button", { - name: /Add a new animal type/, - }); await user.click(addItemButton); - const [firstCard, secondCard] = getAllByRole("heading", { level: 2 }).map( - (el) => el.closest("div"), - ); + const [firstCard, secondCard] = getAllByTestId(/list-card/); // Second card is active expect( @@ -354,9 +331,7 @@ describe("Building a list", () => { name: /Remove/, }); await user.click(firstCardRemoveButton); - const cards = getAllByRole("heading", { level: 2 }).map((el) => - el.closest("div"), - ); + const cards = getAllByTestId(/list-card/); expect(cards).toHaveLength(1); // First card is active @@ -364,15 +339,377 @@ describe("Building a list", () => { within(cards[0]!).getByLabelText(/What's their name?/), ).toBeInTheDocument(); }); + + test("Cancelling an invalid (new) item removes it", async () => { + const { getAllByTestId, getByText, user, queryAllByTestId } = setup( + , + ); + + let cards = getAllByTestId(/list-card/); + expect(cards).toHaveLength(1); + + const cancelButton = getByText(/Cancel/, { selector: "button" }); + await user.click(cancelButton); + + cards = queryAllByTestId(/list-card/); + expect(cards).toHaveLength(0); + }); + + test("Cancelling a valid (existing) item resets previous state", async () => { + const { getByLabelText, getByText, user, queryByText } = setup( + , + ); + + await fillInResponse(user); + + expect(getByText("richard.parker@pi.com")).toBeInTheDocument(); + + const editButton = getByText(/Edit/, { selector: "button" }); + await user.click(editButton); + + const emailInput = getByLabelText(/email/); + await user.type(emailInput, "my.new.email@test.com"); + + const cancelButton = getByText(/Cancel/, { selector: "button" }); + await user.click(cancelButton); + + expect(queryByText("my.new.email@test.com")).not.toBeInTheDocument(); + expect(getByText("richard.parker@pi.com")).toBeInTheDocument(); + }); }); describe("Form validation and error handling", () => { - test.todo("Text field"); - test.todo("Number field"); - test.todo("Question field - select"); - test.todo("Question field - radio"); + test("form validation is triggered when saving an item", async () => { + const { user, getByRole, getAllByTestId } = setup( + , + ); + + let errorMessages = getAllByTestId(/error-message-input/); + + // Each field has an ErrorWrapper + expect(errorMessages).toHaveLength(mockZooProps.schema.fields.length); + + // All are empty initially + errorMessages.forEach((message) => { + expect(message).toBeEmptyDOMElement(); + }); + + await user.click(getByRole("button", { name: /Save/ })); + + // Error wrappers persist + errorMessages = getAllByTestId(/error-message-input/); + expect(errorMessages).toHaveLength(mockZooProps.schema.fields.length); + + // Each field is in an error state + errorMessages.forEach((message) => { + expect(message).not.toBeEmptyDOMElement(); + }); + }); + + /** + * These tests are not exhaustive tests of validation schemas, these can be tested in their respective model.test.ts files + * We are testing that the validation schemas are correctly "wired up" to out List component fields + */ + describe("existing validation schemas are correctly referenced", () => { + test("text fields", async () => { + const { user, getByRole, getByTestId } = setup( + , + ); + + const nameInput = screen.getByLabelText(/name/); + await user.type( + nameInput, + "This is a long string of text over one hundred and twenty characters, which should trigger the 'short' text validation warning", + ); + await user.click(getByRole("button", { name: /Save/ })); + + const nameInputErrorMessage = getByTestId( + /error-message-input-text-name/, + ); + + expect(nameInputErrorMessage).toHaveTextContent( + /Your answer must be 120 characters or fewer/, + ); + }); + + test("number fields", async () => { + const { user, getByRole, getByTestId } = setup( + , + ); + + const ageInput = screen.getByLabelText(/old/); + await user.type(ageInput, "-35"); + await user.click(getByRole("button", { name: /Save/ })); + + const ageInputErrorMessage = getByTestId( + /error-message-input-number-age/, + ); + + expect(ageInputErrorMessage).toHaveTextContent(/Enter a positive number/); + }); + + test("question fields", async () => { + const { user, getByRole, getByTestId } = setup( + , + ); + + await user.click(getByRole("button", { name: /Save/ })); + + const sizeInputErrorMessage = getByTestId( + /error-message-input-question-size/, + ); + + expect(sizeInputErrorMessage).toHaveTextContent( + /Select your answer before continuing/, + ); + }); + + test("radio fields", async () => { + const { user, getByRole, getByTestId } = setup( + , + ); + + await user.click(getByRole("button", { name: /Save/ })); + + const cuteInputErrorMessage = getByTestId( + /error-message-input-question-cute/, + ); + + expect(cuteInputErrorMessage).toHaveTextContent( + /Select your answer before continuing/, + ); + }); + + test("checklist fields", async () => { + const { user, getByRole, getByTestId } = setup( + , + ); + + await user.click(getByRole("button", { name: /Save/ })); + + const foodInputErrorMessage = getByTestId( + /error-message-input-checklist-food/, + ); + + expect(foodInputErrorMessage).toHaveTextContent( + /Select at least one option/, + ); + }); + }); + + test("an error displays if the minimum number of items is not met", async () => { + const { user, getByRole, getByTestId, getByText } = setup( + , + ); + + const minNumberOfItems = mockZooProps.schema.min; + expect(minNumberOfItems).toEqual(1); + + await user.click(getByRole("button", { name: /Cancel/ })); + await user.click(getByTestId("continue-button")); + + const minItemsErrorMessage = getByText( + `You must provide at least ${minNumberOfItems} response(s)`, + ); + expect(minItemsErrorMessage).toBeVisible(); + }); + + test("an error displays if the maximum number of items is exceeded", async () => { + const { user, getAllByTestId, getByTestId, getByText } = setup( + , + ); + const addItemButton = getByTestId(/list-add-button/); + + const maxNumberOfItems = mockZooProps.schema.max; + expect(maxNumberOfItems).toEqual(3); + + // Complete three items + await fillInResponse(user); + await user.click(addItemButton); + await fillInResponse(user); + await user.click(addItemButton); + await fillInResponse(user); + + const cards = getAllByTestId(/list-card/); + expect(cards).toHaveLength(3); + + // Try to add a fourth + await user.click(getByTestId(/list-add-button/)); + + const maxItemsErrorMessage = getByText( + `You can provide at most ${maxNumberOfItems} response(s)`, + ); + expect(maxItemsErrorMessage).toBeVisible(); + }); + + test("an error displays if you add a new item, without saving the active item", async () => { + const { user, getByTestId, getByText, getByLabelText } = setup( + , + ); + // Start filling out item + const nameInput = getByLabelText(/name/); + await user.type(nameInput, "Richard Parker"); + + const emailInput = getByLabelText(/email/); + await user.type(emailInput, "richard.parker@pi.com"); + + // Try to add a new item + await user.click(getByTestId(/list-add-button/)); + + const activeItemErrorMessage = getByText( + /Please save all responses before adding another/, + ); + expect(activeItemErrorMessage).toBeVisible(); + }); + + test("an error displays if you continue, without saving the active item", async () => { + const { user, getByTestId, getByText, getByLabelText } = setup( + , + ); + // Start filling out item + const nameInput = getByLabelText(/name/); + await user.type(nameInput, "Richard Parker"); + + const emailInput = getByLabelText(/email/); + await user.type(emailInput, "richard.parker@pi.com"); + + // Try to continue + await user.click(getByTestId(/continue-button/)); + + const unsavedItemErrorMessage = getByText( + /Please save in order to continue/, + ); + expect(unsavedItemErrorMessage).toBeVisible(); + }); }); describe("Payload generation", () => { - it.todo("generates a valid payload on submission"); + it("generates a valid payload on submission (Zoo)", async () => { + const handleSubmit = jest.fn(); + const { getByTestId, user } = setup( + , + ); + const addItemButton = getByTestId("list-add-button"); + + await fillInResponse(user); + + await user.click(addItemButton); + await fillInResponse(user); + + await user.click(screen.getByTestId("continue-button")); + + expect(handleSubmit).toHaveBeenCalled(); + expect(handleSubmit.mock.calls[0][0]).toMatchObject(mockZooPayload); + }); + + it("generates a valid payload with summary stats on submission (Units)", async () => { + const handleSubmit = jest.fn(); + const { getByTestId, user, getByRole, getAllByRole, getByLabelText } = + setup(); + + const addItemButton = getByTestId("list-add-button"); + + // Response 1 + let saveButton = getByRole("button", { name: /Save/ }); + let developmentSelect = getByRole("combobox"); + let gardenYesRadio = getAllByRole("radio")[0]; + let gardenNoRadio = getAllByRole("radio")[1]; + let unitsNumberInput = getByLabelText(/identical units/); + + await user.click(developmentSelect); + await user.click(getByRole("option", { name: /New build/ })); + await user.click(gardenYesRadio); + await user.type(unitsNumberInput, "1"); + await user.click(saveButton); + + // Response 2 + await user.click(addItemButton); + + saveButton = getByRole("button", { name: /Save/ }); + developmentSelect = getByRole("combobox"); + gardenYesRadio = getAllByRole("radio")[0]; + gardenNoRadio = getAllByRole("radio")[1]; + unitsNumberInput = getByLabelText(/identical units/); + + await user.click(developmentSelect); + await user.click(getByRole("option", { name: /New build/ })); + await user.click(gardenNoRadio); + await user.type(unitsNumberInput, "2"); + await user.click(saveButton); + + // Response 3 + await user.click(addItemButton); + + saveButton = getByRole("button", { name: /Save/ }); + developmentSelect = getByRole("combobox"); + gardenYesRadio = getAllByRole("radio")[0]; + gardenNoRadio = getAllByRole("radio")[1]; + unitsNumberInput = getByLabelText(/identical units/); + + await user.click(developmentSelect); + await user.click(getByRole("option", { name: /Change of use to a home/ })); + await user.click(gardenNoRadio); + await user.type(unitsNumberInput, "2"); + await user.click(saveButton); + + await user.click(getByTestId("continue-button")); + + expect(handleSubmit).toHaveBeenCalled(); + const output = handleSubmit.mock.calls[0][0]; + expect(output).toMatchObject(mockUnitsPayload); + }); }); + +describe("Navigating back", () => { + test("it pre-populates list correctly", async () => { + const { getAllByText, queryByLabelText, getAllByTestId } = setup( + , + ); + + const cards = getAllByTestId(/list-card/); + + // Two cards + expect(cards).toHaveLength(2); + + // Both inactive + expect(queryByLabelText(/What's their name?/)).toBeNull(); + expect(getAllByText(/What's their name?/)).toHaveLength(2); + + // With the correct previous data + expect(getAllByText(/Richard Parker/)).toHaveLength(2); + }); +}); + +/** + * Helper function to fill out a list item form + */ +const fillInResponse = async (user: UserEvent) => { + const nameInput = screen.getByLabelText(/name/); + await user.type(nameInput, "Richard Parker"); + + const emailInput = screen.getByLabelText(/email/); + await user.type(emailInput, "richard.parker@pi.com"); + + const ageInput = screen.getByLabelText(/old/); + await user.type(ageInput, "10"); + + const sizeSelect = screen.getByRole("combobox"); + await user.click(sizeSelect); + await user.click(screen.getByRole("option", { name: /Medium/ })); + + const cuteRadio = screen.getAllByRole("radio")[0]; + await user.click(cuteRadio); + + const eatCheckboxes = screen.getAllByRole("checkbox"); + await user.click(eatCheckboxes[0]); + await user.click(eatCheckboxes[1]); + await user.click(eatCheckboxes[2]); + + const saveButton = screen.getByRole("button", { + name: /Save/, + }); + await user.click(saveButton); +}; diff --git a/editor.planx.uk/src/@planx/components/List/Public/index.tsx b/editor.planx.uk/src/@planx/components/List/Public/index.tsx index c1af007c9d..52ae77b23e 100644 --- a/editor.planx.uk/src/@planx/components/List/Public/index.tsx +++ b/editor.planx.uk/src/@planx/components/List/Public/index.tsx @@ -9,15 +9,18 @@ import TableCell from "@mui/material/TableCell"; import TableRow from "@mui/material/TableRow"; import Typography from "@mui/material/Typography"; import { PublicProps } from "@planx/components/ui"; -import React from "react"; +import React, { useEffect, useRef } from "react"; import { FONT_WEIGHT_SEMI_BOLD } from "theme"; +import ErrorWrapper from "ui/shared/ErrorWrapper"; import InputRow from "ui/shared/InputRow"; import Card from "../../shared/Preview/Card"; import CardHeader from "../../shared/Preview/CardHeader"; import type { Field, List } from "../model"; +import { formatSchemaDisplayValue } from "../utils"; import { ListProvider, useListContext } from "./Context"; import { + ChecklistFieldInput, NumberFieldInput, RadioFieldInput, SelectFieldInput, @@ -44,8 +47,8 @@ const CardButton = styled(Button)(({ theme }) => ({ /** * Controller to return correct user input for field in schema */ -const InputField: React.FC = (props) => { - const inputFieldId = `input-${props.type}-${props.index}`; +const InputField: React.FC = (props) => { + const inputFieldId = `input-${props.type}-${props.data.fn}`; switch (props.type) { case "text": @@ -57,67 +60,88 @@ const InputField: React.FC = (props) => { return ; } return ; + case "checklist": + return ; } }; const ActiveListCard: React.FC<{ index: number; -}> = ({ index }) => { - const { schema, saveItem, cancelEditItem } = useListContext(); +}> = ({ index: i }) => { + const { schema, saveItem, cancelEditItem, errors, isPageComponent } = + useListContext(); + + const ref = useRef(null); + useEffect(() => { + if (ref.current) { + ref.current.scrollIntoView({ behavior: "smooth" }); + } + }, []); return ( - // TODO: This should be a HTML form - - - {schema.type} {index + 1} - - {schema.fields.map((field, i) => ( - - - - ))} - - - - - + + + + {schema.type} + {!isPageComponent && ` ${i + 1}`} + + {schema.fields.map((field, i) => ( + + + + ))} + + + {!isPageComponent && } + + + ); }; const InactiveListCard: React.FC<{ index: number; -}> = ({ index }) => { - const { schema, userData, removeItem, editItem } = useListContext(); +}> = ({ index: i }) => { + const { schema, formik, removeItem, editItem, isPageComponent } = + useListContext(); return ( - + - {schema.type} {index + 1} + {schema.type} + {!isPageComponent && ` ${i + 1}`} - {schema.fields.map((field, i) => ( - + {schema.fields.map((field, j) => ( + {field.data.title} - {userData[index][i]?.val} + + {formatSchemaDisplayValue( + formik.values.userData[i][field.data.fn], + schema.fields[j], + )} + ))}
- removeItem(index)}> + removeItem(i)}> Remove - editItem(index)}> + editItem(i)}> {/* TODO: Is primary colour really right here? */} Edit @@ -127,11 +151,30 @@ const InactiveListCard: React.FC<{ ); }; -const Root = ({ title, description, info, policyRef, howMeasured }: Props) => { - const { userData, activeIndex, schema, addNewItem } = useListContext(); +const Root = () => { + const { + formik, + validateAndSubmitForm, + activeIndex, + schema, + addNewItem, + errors, + listProps, + } = useListContext(); + + const { title, description, info, policyRef, howMeasured } = listProps; + + const rootError: string = + (errors.min && `You must provide at least ${schema.min} response(s)`) || + (errors.max && `You can provide at most ${schema.max} response(s)`) || + ""; + + // Hide the "+ Add another" button if the schema has a max length of 1, unless the only item has been cancelled/removed (userData = []) + const shouldShowAddAnotherButton = + schema.max !== 1 || formik.values.userData.length < 1; return ( - console.log({ userData })} isValid> + { policyRef={policyRef} howMeasured={howMeasured} /> - {userData.map((_, i) => - i === activeIndex ? ( - - ) : ( - - ), - )} - + + <> + {formik.values.userData.map((_, i) => + i === activeIndex ? ( + + ) : ( + + ), + )} + {shouldShowAddAnotherButton && ( + + + + )} + + ); }; function ListComponent(props: Props) { - // TODO: Validate min / max - // TODO: Validate user input against schema fields, track errors - // TODO: On submit generate a payload - return ( - - + + ); } diff --git a/editor.planx.uk/src/@planx/components/List/model.ts b/editor.planx.uk/src/@planx/components/List/model.ts index 415411758b..759aae527b 100644 --- a/editor.planx.uk/src/@planx/components/List/model.ts +++ b/editor.planx.uk/src/@planx/components/List/model.ts @@ -1,10 +1,18 @@ -import { NumberInput } from "../NumberInput/model"; +import { cloneDeep } from "lodash"; +import { array, BaseSchema, object, ObjectSchema, string } from "yup"; + +import { checklistValidationSchema } from "../Checklist/model"; +import { NumberInput, numberInputValidationSchema } from "../NumberInput/model"; import { MoreInformation, Option, parseMoreInformation } from "../shared"; -import { TextInput } from "../TextInput/model"; +import { + TextInput, + userDataSchema as textInputValidationSchema, +} from "../TextInput/model"; import { SCHEMAS } from "./Editor"; /** - * Simplified custom QuestionInput as existing model is too complex for our needs currently + * Simplified custom QuestionInput + * Existing model is too complex for our needs currently * If adding more properties here, check if re-using existing model could be an option */ interface QuestionInput { @@ -13,28 +21,45 @@ interface QuestionInput { options: Option[]; } -// TODO: Add summary fields for inactive view? +interface ChecklistInput { + title: string; + description?: string; + options: Option[]; +} + +/** + * As above, we need a simplified validation schema for QuestionsInputs + */ +const questionInputValidationSchema = (data: QuestionInput) => + string() + .oneOf(data.options.map((option) => option.data.val || option.data.text)) + .required("Select your answer before continuing"); + export type TextField = { type: "text"; - required?: boolean; data: TextInput & { fn: string }; }; + export type NumberField = { type: "number"; - required?: boolean; data: NumberInput & { fn: string }; }; + export type QuestionField = { type: "question"; - required?: boolean; data: QuestionInput & { fn: string }; }; +export type ChecklistField = { + type: "checklist"; + required?: true; + data: ChecklistInput & { fn: string }; +}; /** * Represents the input types available in the List component * Existing models are used to allow to us to re-use existing components, maintaining consistend UX/UI */ -export type Field = TextField | NumberField | QuestionField; +export type Field = TextField | NumberField | QuestionField | ChecklistField; /** * Models the form displayed to the user @@ -46,6 +71,10 @@ export interface Schema { max?: number; } +export type UserResponse = Record; + +export type UserData = { userData: UserResponse[] }; + export interface List extends MoreInformation { fn: string; title: string; @@ -55,28 +84,66 @@ export interface List extends MoreInformation { } export const parseContent = (data: Record | undefined): List => ({ - fn: data?.fn || "", + fn: data?.fn, title: data?.title, description: data?.description, schemaName: data?.schemaName || SCHEMAS[0].name, - schema: data?.schema || SCHEMAS[0].schema, + schema: cloneDeep(data?.schema) || SCHEMAS[0].schema, ...parseMoreInformation(data), }); -interface Response { - type: Field["type"]; - val: string; - fn: string; -} +/** + * For each field in schema, return a map of Yup validation schema + * Matches both the field type and data + */ +const generateValidationSchemaForFields = ( + fields: Field[], +): ObjectSchema> => { + const fieldSchemas: { [key: string]: BaseSchema } = {}; + + fields.forEach(({ data, type }) => { + switch (type) { + case "text": + fieldSchemas[data.fn] = textInputValidationSchema(data); + break; + case "number": + fieldSchemas[data.fn] = numberInputValidationSchema(data); + break; + case "question": + fieldSchemas[data.fn] = questionInputValidationSchema(data); + break; + case "checklist": + fieldSchemas[data.fn] = checklistValidationSchema(data); + break; + } + }); -export type UserData = Response[][]; + const validationSchema = object().shape(fieldSchemas); -export const generateNewItem = (schema: Schema): Response[] => { - const item = schema.fields.map((field) => ({ - type: field.type, - val: "", - fn: field.data.fn, - })); + return validationSchema; +}; + +/** + * Generate a Yup validation schema which matches the incoming generic Schema + */ +export const generateValidationSchema = (schema: Schema) => { + const fieldvalidationSchema = generateValidationSchemaForFields( + schema.fields, + ); + + const validationSchema = object().shape({ + userData: array().of(fieldvalidationSchema), + }); + + return validationSchema; +}; - return item; +export const generateInitialValues = (schema: Schema): UserResponse => { + const initialValues: UserResponse = {}; + schema.fields.forEach((field) => { + field.type === "checklist" + ? (initialValues[field.data.fn] = []) + : (initialValues[field.data.fn] = ""); + }); + return initialValues; }; diff --git a/editor.planx.uk/src/@planx/components/List/schemas/Adverts.ts b/editor.planx.uk/src/@planx/components/List/schemas/Adverts.ts new file mode 100644 index 0000000000..3a2e9461d3 --- /dev/null +++ b/editor.planx.uk/src/@planx/components/List/schemas/Adverts.ts @@ -0,0 +1,41 @@ +import { Schema } from "@planx/components/List/model"; + +export const ProposedAdvertisements: Schema = { + type: "Proposed advertisements", + fields: [ + { + type: "number", + data: { + title: "How many fascia signs are you applying for?", + fn: "fascia", + allowNegatives: false, + }, + }, + { + type: "number", + data: { + title: "How many projecting or hanging signs are you applying for?", + fn: "projecting", + allowNegatives: false, + }, + }, + { + type: "number", + data: { + title: "How many hoardings are you applying for?", + fn: "hoarding", + allowNegatives: false, + }, + }, + { + type: "number", + data: { + title: "How many other advertisements are you applying for?", + fn: "other", + allowNegatives: false, + }, + }, + ], + min: 1, + max: 1, +} as const; diff --git a/editor.planx.uk/src/@planx/components/List/schemas/Floorspace.ts b/editor.planx.uk/src/@planx/components/List/schemas/Floorspace.ts new file mode 100644 index 0000000000..f8476d0e3f --- /dev/null +++ b/editor.planx.uk/src/@planx/components/List/schemas/Floorspace.ts @@ -0,0 +1,206 @@ +import { Schema } from "@planx/components/List/model"; + +export const NonResidentialFloorspace: Schema = { + type: "Non-residential floorspace", + fields: [ + { + type: "question", + data: { + title: "Use class or type", + fn: "useClass", + options: [ + { id: "bTwo", data: { text: "B2 - General industry", val: "bTwo" } }, + { + id: "bEight", + data: { text: "B8 - Storage and distribution", val: "bEight" }, + }, + { id: "cOne", data: { text: "C1 - Hotels", val: "cOne" } }, + { + id: "cTwo", + data: { text: "C2 - Residential institutions", val: "cTwo" }, + }, + { + id: "cTwoA", + data: { + text: "C2a - Secure residential institutions", + val: "cTwoA", + }, + }, + { + id: "eAShops", + data: { + text: "E(a) - Retail (other than hot food): Shops", + val: "eAShops", + }, + }, + { + id: "eANetTradeableArea", + data: { + text: "E(a) - Retail (other than hot food): Net tradeable area", + val: "eANetTradeableArea", + }, + }, + { + id: "eB", + data: { + text: "E(b) - Sale of food and drink (mostly consumed on the premises)", + val: "eB", + }, + }, + { + id: "eCI", + data: { text: "E(c)(i) - Financial services", val: "eCI" }, + }, + { + id: "eCII", + data: { + text: "E(c)(ii) - Professional services (other than health or medical)", + val: "eCII", + }, + }, + { + id: "eCIII", + data: { text: "E(c)(iii) - Any other service", val: "eCIII" }, + }, + { + id: "eD", + data: { + text: "E(d) - Indoor sports, recreation or fitness", + val: "eD", + }, + }, + { + id: "eF", + data: { text: "E(f) - Creche or day nursery", val: "eF" }, + }, + { + id: "eGI", + data: { + text: "E(g)(i) - Office (to carry out operational or administrative functions)", + val: "eGI", + }, + }, + { + id: "eGII", + data: { + text: "E(g)(ii) - Research and development of products or processes", + val: "eGII", + }, + }, + { + id: "eGIII", + data: { + text: "E(g)(iii) - Any industrial process (can be carried out within a residential area)", + val: "eGIII", + }, + }, + { + id: "fOneA", + data: { + text: "F1(a) - Education", + val: "fOneA", + }, + }, + { + id: "fOneB", + data: { + text: "F1(b) - Display works of art", + val: "fOneB", + }, + }, + { + id: "fOneC", + data: { + text: "F1(c) - Museum", + val: "fOneC", + }, + }, + { + id: "fOneD", + data: { + text: "F1(d) - Public library", + val: "fOneD", + }, + }, + { + id: "fOneE", + data: { + text: "F1(e) - Public hall or exhibition hall", + val: "fOneE", + }, + }, + { + id: "fOneF", + data: { + text: "F1(f) - Public worship or religious instruction", + val: "fOneF", + }, + }, + { + id: "fOneG", + data: { + text: "F1(g) - Law court", + val: "fOneG", + }, + }, + { + id: "fTwoA", + data: { + text: "F2(a) - Shop selling essential goods (not over 280sqm and no other such facility in 1000m radius)", + val: "fTwoA", + }, + }, + { + id: "fTwoB", + data: { + text: "F2(b) - Hall or meeting place for local community (principal use)", + val: "fTwoB", + }, + }, + { + id: "fTwoC", + data: { text: "F2(c) - Outdoor sport or recreation", val: "fTwoC" }, + }, + { + id: "fTwoD", + data: { + text: "F2(d) - Indoor or outdoor swimming pool or skating rink", + val: "fTwoD", + }, + }, + { id: "other", data: { text: "Other", val: "other" } }, + ], + }, + }, + { + type: "number", + data: { + title: "What is the existing gross internal floor area?", + units: "m²", + fn: "area.existing", + allowNegatives: false, + }, + }, + { + type: "number", + data: { + title: + "What is the gross internal floor area to be lost by change of use or demolition?", + units: "m²", + fn: "area.loss", + allowNegatives: false, + }, + }, + { + type: "number", + data: { + title: + "What is the total gross internal floor area proposed (including change of use)?", + units: "m²", + fn: "area.proposed", + allowNegatives: false, + }, + }, + ], + min: 1, +} as const; diff --git a/editor.planx.uk/src/@planx/components/List/schemas/GLA/BuildingDetails.ts b/editor.planx.uk/src/@planx/components/List/schemas/GLA/BuildingDetails.ts new file mode 100644 index 0000000000..76844adf59 --- /dev/null +++ b/editor.planx.uk/src/@planx/components/List/schemas/GLA/BuildingDetails.ts @@ -0,0 +1,34 @@ +import { Schema } from "@planx/components/List/model"; +import { TextInputType } from "@planx/components/TextInput/model"; + +export const BuildingDetailsGLA: Schema = { + type: "Building detail", + fields: [ + { + type: "text", + data: { + title: "Building reference", + fn: "reference", + type: TextInputType.Short, + }, + }, + { + type: "number", + data: { + title: "What is the maximum height of the building?", + units: "m", + fn: "height", + allowNegatives: false, + }, + }, + { + type: "number", + data: { + title: "How many storeys does the building have?", + fn: "storeys", + allowNegatives: false, + }, + }, + ], + min: 1, +} as const; diff --git a/editor.planx.uk/src/@planx/components/List/schemas/GLA/CommunalSpace.ts b/editor.planx.uk/src/@planx/components/List/schemas/GLA/CommunalSpace.ts new file mode 100644 index 0000000000..e942a3b989 --- /dev/null +++ b/editor.planx.uk/src/@planx/components/List/schemas/GLA/CommunalSpace.ts @@ -0,0 +1,36 @@ +import { Schema } from "@planx/components/List/model"; + +export const CommunalSpaceGLA: Schema = { + type: "Unit of communal space", + fields: [ + { + type: "question", + data: { + title: "Is this unit of communal space lost or gained?", + fn: "development", + options: [ + { id: "gain", data: { text: "Gained", val: "gain" } }, + { id: "loss", data: { text: "Lost", val: "loss" } }, + ], + }, + }, + { + type: "number", + data: { + title: "What is the Gross Internal Floor Area (GIA) of this unit?", + units: "m²", + fn: "area", + allowNegatives: false, + }, + }, + { + type: "number", + data: { + title: "How many identical units does the description above apply to?", + fn: "identicalUnits", + allowNegatives: false, + }, + }, + ], + min: 1, +} as const; diff --git a/editor.planx.uk/src/@planx/components/List/schemas/GLA/ExistingAndProposedUses.ts b/editor.planx.uk/src/@planx/components/List/schemas/GLA/ExistingAndProposedUses.ts new file mode 100644 index 0000000000..d7077f7e54 --- /dev/null +++ b/editor.planx.uk/src/@planx/components/List/schemas/GLA/ExistingAndProposedUses.ts @@ -0,0 +1,86 @@ +import { Schema } from "@planx/components/List/model"; + +export const ExistingAndProposedUsesGLA: Schema = { + type: "Existing and proposed uses", + fields: [ + { + type: "question", + data: { + title: "What is the use class?", + fn: "useClass", + options: [ + { id: "bTwo", data: { text: "B2 - General industry", val: "bTwo" } }, + { + id: "bEight", + data: { text: "B8 - Storage and distribution", val: "bEight" }, + }, + { id: "cOne", data: { text: "C1 - Hotels", val: "cOne" } }, + { + id: "cTwo", + data: { text: "C2 - Residential institutions", val: "cTwo" }, + }, + { + id: "cTwoA", + data: { + text: "C2a - Secure residential institutions", + val: "cTwoA", + }, + }, + { + id: "cThree", + data: { text: "C3 - Dwellinghouses", val: "cThree" }, + }, + { + id: "cFour", + data: { text: "C4 - Houses in multiple occupation", val: "cFour" }, + }, + { + id: "e", + data: { text: "E - Commercial, business and service", val: "e" }, + }, + { + id: "fOne", + data: { + text: "F1 - Learning and non-residential institutions", + val: "fOne", + }, + }, + { + id: "fTwo", + data: { text: "F2 - Local community uses", val: "fTwo" }, + }, + { id: "SG", data: { text: "Sui generis", val: "SG" } }, + { id: "unknown", data: { text: "Unknown", val: "unknown" } }, + ], + }, + }, + { + type: "number", + data: { + title: "What is the existing gross internal floor area?", + units: "m²", + fn: "area.existing", + allowNegatives: false, + }, + }, + { + type: "number", + data: { + title: "What is the gross internal floor area lost?", + units: "m²", + fn: "area.loss", + allowNegatives: false, + }, + }, + { + type: "number", + data: { + title: "What is the gross internal floor area gained?", + units: "m²", + fn: "area.gain", + allowNegatives: false, + }, + }, + ], + min: 1, +} as const; diff --git a/editor.planx.uk/src/@planx/components/List/schemas/GLA/OpenSpace.ts b/editor.planx.uk/src/@planx/components/List/schemas/GLA/OpenSpace.ts new file mode 100644 index 0000000000..9e167b256a --- /dev/null +++ b/editor.planx.uk/src/@planx/components/List/schemas/GLA/OpenSpace.ts @@ -0,0 +1,147 @@ +import { Schema } from "@planx/components/List/model"; +import { TextInputType } from "@planx/components/TextInput/model"; + +export const OpenSpaceGLA: Schema = { + type: "Open space details", + fields: [ + { + type: "question", + data: { + title: "What is the project's impact on this open space?", + fn: "development", + options: [ + { id: "loss", data: { text: "Loss", val: "loss" } }, + { id: "gain", data: { text: "Gain", val: "gain" } }, + { + id: "changeOfUse", + data: { text: "Change of use", val: "changeOfUse" }, + }, + ], + }, + }, + { + type: "question", + data: { + title: "What best describes the type of this open space?", + fn: "type", + options: [ + { id: "park", data: { text: "Parks and gardens", val: "park" } }, + { + id: "natural", + data: { text: "Natural and semi-natural", val: "natural" }, + }, + { + id: "greenCorridor", + data: { text: "Green corridors", val: "greenCorridor" }, + }, + { + id: "sport", + data: { text: "Outdoor sports facilities", val: "sport" }, + }, + { id: "amenity", data: { text: "Amenity", val: "amenity" } }, + { + id: "children", + data: { + text: "Provision for children and young people", + val: "children", + }, + }, + { + id: "allotment", + data: { + text: "Allotments, community gardens and city farms", + val: "allotment", + }, + }, + { + id: "burial", + data: { + text: "Cemeteries, churchyards and other burial grounds", + val: "burial", + }, + }, + { + id: "fringe", + data: { text: "Countryside in urban fringe areas", val: "fringe" }, + }, + { id: "civic", data: { text: "Civic spaces", val: "civic" } }, + { + id: "brownfield", + data: { text: "Brownfield land", val: "brownfield" }, + }, + { + id: "nonResidential", + data: { + text: "Non-residential institution grounds or garden", + val: "nonResidential", + }, + }, + { + id: "residential", + data: { text: "Residential garden", val: "residential" }, + }, + ], + }, + }, + { + type: "question", + data: { + title: "What best describes the designation of this open space?", + fn: "designation", + options: [ + { id: "greenBelt", data: { text: "Green Belt", val: "greenBelt" } }, + { + id: "metropolitan", + data: { text: "Metropolitan Open Land", val: "metropolitan" }, + }, + { id: "local", data: { text: "Local Open Spaces", val: "local" } }, + { id: "other", data: { text: "Other designation", val: "other" } }, + { id: "none", data: { text: "Not designated", val: "none" } }, + ], + }, + }, + { + type: "text", + data: { + title: "Describe the open space", + fn: "description", + type: TextInputType.Long, + }, + }, + { + type: "question", + data: { + title: "What is the access to this open space?", + fn: "access", + options: [ + { id: "restricted", data: { text: "Restricted", val: "restricted" } }, + { + id: "unrestricted", + data: { text: "Unrestricted", val: "unrestricted" }, + }, + ], + }, + }, + { + type: "number", + data: { + title: "What is the area of this open space?", + units: "ha", + fn: "area", + allowNegatives: false, + }, + }, + { + type: "question", + data: { + title: "Do the changes to this open space involve a land swap?", + fn: "swap", + options: [ + { id: "true", data: { text: "Yes", val: "true" } }, + { id: "false", data: { text: "No", val: "false" } }, + ], + }, + }, + ], + min: 1, +} as const; diff --git a/editor.planx.uk/src/@planx/components/List/schemas/GLA/ProtectedSpace.ts b/editor.planx.uk/src/@planx/components/List/schemas/GLA/ProtectedSpace.ts new file mode 100644 index 0000000000..8118290c96 --- /dev/null +++ b/editor.planx.uk/src/@planx/components/List/schemas/GLA/ProtectedSpace.ts @@ -0,0 +1,98 @@ +import { Schema } from "@planx/components/List/model"; +import { TextInputType } from "@planx/components/TextInput/model"; + +export const ProtectedSpaceGLA: Schema = { + type: "Protected space details", + fields: [ + { + type: "question", + data: { + title: "What is the project's impact on this protected space?", + fn: "development", + options: [ + { id: "loss", data: { text: "Loss", val: "loss" } }, + { id: "gain", data: { text: "Gain", val: "gain" } }, + { + id: "changeOfUse", + data: { text: "Change of use", val: "changeOfUse" }, + }, + ], + }, + }, + { + type: "question", + data: { + title: "What best describes the designation of this protected space?", + fn: "designation", + options: [ + { + id: "SSSI", + data: { text: "Sites of Special Scientific Interest", val: "SSSI" }, + }, + { + id: "localReserve", + data: { text: "Local Nature Reserve", val: "localReserve" }, + }, + { + id: "metropolitan", + data: { + text: "Site of Metropolitan Importance", + val: "metropolitan", + }, + }, + { + id: "boroughGradeOne", + data: { + text: "Site of Borough Grade 1 Importance", + val: "boroughGradeOne", + }, + }, + { + id: "boroughGradeTwo", + data: { + text: "Site of Borough Grade 2 Importance", + val: "boroughGradeTwo", + }, + }, + { + id: "local", + data: { text: "Site of Local Importance", val: "local" }, + }, + { id: "none", data: { text: "Not designated", val: "none" } }, + ], + }, + }, + { + type: "text", + data: { + title: "Describe the protected space", + fn: "description", + type: TextInputType.Long, + }, + }, + { + type: "question", + data: { + title: "What is the access to this open space?", + fn: "access", + options: [ + { id: "restricted", data: { text: "Restricted", val: "restricted" } }, + { + id: "unrestricted", + data: { text: "Unrestricted", val: "unrestricted" }, + }, + ], + }, + }, + { + type: "number", + data: { + title: "What is the area of this open space?", + units: "ha", + fn: "area", + allowNegatives: false, + }, + }, + ], + min: 1, +} as const; diff --git a/editor.planx.uk/src/@planx/components/List/schemas/Materials.ts b/editor.planx.uk/src/@planx/components/List/schemas/Materials.ts new file mode 100644 index 0000000000..414f693644 --- /dev/null +++ b/editor.planx.uk/src/@planx/components/List/schemas/Materials.ts @@ -0,0 +1,66 @@ +import { Schema } from "@planx/components/List/model"; +import { TextInputType } from "@planx/components/TextInput/model"; + +export const MaterialDetails: Schema = { + type: "Material", + fields: [ + { + type: "question", + data: { + title: "Type", + fn: "type", + options: [ + { id: "wall", data: { text: "External walls", val: "wall" } }, + { + id: "window", + data: { text: "Windows", val: "window" }, + }, + { id: "door", data: { text: "Doors", val: "door" } }, + { + id: "roof", + data: { text: "Roof", val: "roof" }, + }, + { + id: "boundary", + data: { + text: "Fences, walls and gates", + val: "boundary", + }, + }, + { + id: "surface", + data: { + text: "External ground materials for access and parking", + val: "surface", + }, + }, + { + id: "lighting", + data: { text: "Lighting", val: "lighting" }, + }, + { + id: "other", + data: { text: "Others", val: "other" }, + }, + ], + }, + }, + { + type: "text", + data: { + title: "Existing material description", + fn: "existing", + type: TextInputType.Short, + }, + }, + { + type: "text", + data: { + title: "Proposed material description", + fn: "proposed", + type: TextInputType.Short, + }, + }, + ], + min: 1, +} as const; diff --git a/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/Existing.ts b/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/Existing.ts new file mode 100644 index 0000000000..f7f7c5ac86 --- /dev/null +++ b/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/Existing.ts @@ -0,0 +1,72 @@ +import { Schema } from "../../model"; + +export const ResidentialUnitsExisting: Schema = { + type: "Existing residential unit", + fields: [ + { + type: "question", + data: { + title: "What best describes the tenure of this unit?", + fn: "tenure", + options: [ + { id: "MH", data: { text: "Market housing", val: "MH" } }, + { + id: "SAIR", + data: { text: "Social, affordable or interim rent", val: "SAIR" }, + }, + { + id: "AHO", + data: { text: "Affordable home ownership", val: "AHO" }, + }, + { id: "SH", data: { text: "Starter homes", val: "SH" } }, + { + id: "selfCustomBuild", + data: { + text: "Self-build and custom build", + val: "selfCustomBuild", + }, + }, + { id: "other", data: { text: "Other", val: "other" } }, + ], + }, + }, + { + type: "question", + data: { + title: "What best describes the type of this unit?", + fn: "type", + options: [ + { id: "house", data: { text: "House", val: "house" } }, + { + id: "flat", + data: { text: "Flat, apartment or maisonette", val: "flat" }, + }, + { + id: "sheltered", + data: { text: "Sheltered housing", val: "sheltered" }, + }, + { id: "studio", data: { text: "Studio or bedsit", val: "studio" } }, + { id: "cluster", data: { text: "Cluster flat", val: "cluster" } }, + { id: "other", data: { text: "Other", val: "other" } }, + ], + }, + }, + { + type: "number", + data: { + title: "How many bedrooms does this unit have?", + fn: "bedrooms", + allowNegatives: false, + }, + }, + { + type: "number", + data: { + title: "How many identical units does the description above apply to?", + fn: "identicalUnits", + allowNegatives: false, + }, + }, + ], + min: 1, +} as const; diff --git a/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/GLA/New.ts b/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/GLA/New.ts new file mode 100644 index 0000000000..1c1e5d203d --- /dev/null +++ b/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/GLA/New.ts @@ -0,0 +1,236 @@ +import { Schema } from "@planx/components/List/model"; + +export const ResidentialUnitsGLANew: Schema = { + type: "New residential unit", + fields: [ + { + type: "question", + data: { + title: "What development does this unit result from?", + fn: "development", + options: [ + { id: "newBuild", data: { text: "New build", val: "newBuild" } }, + { + id: "changeOfUseFrom", + data: { + text: "Change of use of existing single home", + val: "changeOfUseFrom", + }, + }, + { + id: "changeOfUseTo", + data: { text: "Change of use to a home", val: "changeOfUseTo" }, + }, + ], + }, + }, + { + type: "number", + data: { + title: "What is the number of habitable rooms of this unit?", + fn: "habitable", + allowNegatives: false, + }, + }, + { + type: "number", + data: { + title: "What is the number of bedrooms of this unit?", + fn: "bedrooms", + allowNegatives: false, + }, + }, + { + type: "question", + data: { + title: "Which best describes the tenure of this unit?", + fn: "tenure", + options: [ + { id: "LAR", data: { text: "London Affordable Rent", val: "LAR" } }, + { + id: "AR", + data: { + text: "Affordable rent (not at LAR benchmark rents)", + val: "AR", + }, + }, + { id: "SR", data: { text: "Social rent", val: "SR" } }, + { id: "LRR", data: { text: "London Living Rent", val: "LRR" } }, + { + id: "sharedEquity", + data: { text: "Shared equity", val: "sharedEquity" }, + }, + { id: "LSO", data: { text: "London Shared Ownership", val: "LSO" } }, + { id: "DMS", data: { text: "Discount market sale", val: "DMS" } }, + { id: "DMR", data: { text: "Discount market rent", val: "DMR" } }, + { + id: "DMRLLR", + data: { + text: "Discount market rent (charged at London Living Rents)", + val: "DMRLLR", + }, + }, + { + id: "marketForRent", + data: { text: "Market for rent", val: "marketForRent" }, + }, + { id: "SH", data: { text: "Starter homes", val: "SH" } }, + { + id: "selfCustomBuild", + data: { + text: "Self-build and custom build", + val: "selfCustomBuild", + }, + }, + { + id: "marketForSale", + data: { text: "Market for sale", val: "marketForSale" }, + }, + { id: "other", data: { text: "Other", val: "other" } }, + ], + }, + }, + { + type: "checklist", + data: { + title: "Is this unit compliant with any of the following?", + fn: "compliance", + options: [ + { + id: "m42", + data: { text: "Part M4(2) of the Building Regulations 2010" }, + }, + { + id: "m432a", + data: { text: "Part M4(3)(2a) of the Building Regulations 2010" }, + }, + { + id: "m432b", + data: { text: "Part M4(3)(2b) of the Building Regulations 2010" }, + }, + { id: "none", data: { text: "None of these" } }, + ], + }, + }, + { + type: "question", + data: { + title: "What best describes the type of this unit?", + fn: "type", + options: [ + { id: "terraced", data: { text: "Terraced home", val: "terraced" } }, + { + id: "semiDetached", + data: { text: "Semi detached home", val: "semiDetached" }, + }, + { id: "detached", data: { text: "Detached home", val: "detached" } }, + { + id: "flat", + data: { text: "Flat/apartment or maisonette", val: "flat" }, + }, + { id: "LW", data: { text: "Live/work unit", val: "LW" } }, + { id: "cluster", data: { text: "Cluster flat", val: "cluster" } }, + { id: "studio", data: { text: "Studio or bedsit", val: "studio" } }, + { id: "coLiving", data: { text: "Co living unit", val: "coLiving" } }, + { id: "hostel", data: { text: "Hostel room", val: "hostel" } }, + { id: "HMO", data: { text: "HMO", val: "HMO" } }, + { + id: "student", + data: { text: "Student accommodation", val: "student" }, + }, + { id: "other", data: { text: "Other", val: "other" } }, + ], + }, + }, + { + type: "question", + data: { + title: "What best describes the provider of this unit?", + fn: "provider", + options: [ + { id: "private", data: { text: "Private", val: "private" } }, + { + id: "privateRented", + data: { text: "Private rented sector", val: "privateRented" }, + }, + { id: "HA", data: { text: "Housing association", val: "HA" } }, + { id: "LA", data: { text: "Local authority", val: "LA" } }, + { + id: "publicAuthority", + data: { text: "Other public authority", val: "publicAuthority" }, + }, + { + id: "councilDelivery", + data: { text: "Council delivery company", val: "councilDelivery" }, + }, + { + id: "councilBuildToRent", + data: { + text: "Council delivered build to rent", + val: "councilBuildToRent", + }, + }, + { + id: "affordableHousing", + data: { + text: "Other affordable housing provider", + val: "affordableHousing", + }, + }, + { id: "selfBuild", data: { text: "Self-build", val: "selfBuild" } }, + ], + }, + }, + { + type: "question", + data: { + title: "Is this unit built on garden land?", + fn: "garden", + options: [ + { id: "true", data: { text: "Yes", val: "true" } }, + { id: "false", data: { text: "No", val: "false" } }, + ], + }, + }, + { + type: "number", + data: { + title: "What is the Gross Internal Floor Area (GIA) of this unit?", + units: "m²", + fn: "area", + allowNegatives: false, + }, + }, + { + type: "question", + data: { + title: "Will this unit provide sheltered accommodation?", + fn: "sheltered", + options: [ + { id: "true", data: { text: "Yes", val: "true" } }, + { id: "false", data: { text: "No", val: "false" } }, + ], + }, + }, + { + type: "question", + data: { + title: "Is this unit specifically designed for older people?", + fn: "olderPersons", + options: [ + { id: "true", data: { text: "Yes", val: "true" } }, + { id: "false", data: { text: "No", val: "false" } }, + ], + }, + }, + { + type: "number", + data: { + title: "How many identical units does the description above apply to?", + fn: "identicalUnits", + allowNegatives: false, + }, + }, + ], + min: 1, +} as const; diff --git a/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/GLA/Rebuilt.ts b/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/GLA/Rebuilt.ts new file mode 100644 index 0000000000..b108866be2 --- /dev/null +++ b/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/GLA/Rebuilt.ts @@ -0,0 +1,236 @@ +import { Schema } from "@planx/components/List/model"; + +export const ResidentialUnitsGLARebuilt: Schema = { + type: "Rebuilt residential unit", + fields: [ + { + type: "question", + data: { + title: "What development does this unit result from?", + fn: "development", + options: [ + { id: "newBuild", data: { text: "New build", val: "newBuild" } }, + { + id: "changeOfUseFrom", + data: { + text: "Change of use of existing single home", + val: "changeOfUseFrom", + }, + }, + { + id: "changeOfUseTo", + data: { text: "Change of use to a home", val: "changeOfUseTo" }, + }, + ], + }, + }, + { + type: "number", + data: { + title: "What is the number of habitable rooms of this unit?", + fn: "habitable", + allowNegatives: false, + }, + }, + { + type: "number", + data: { + title: "What is the number of bedrooms of this unit?", + fn: "bedrooms", + allowNegatives: false, + }, + }, + { + type: "question", + data: { + title: "Which best describes the tenure of this unit?", + fn: "tenure", + options: [ + { id: "LAR", data: { text: "London Affordable Rent", val: "LAR" } }, + { + id: "AR", + data: { + text: "Affordable rent (not at LAR benchmark rents)", + val: "AR", + }, + }, + { id: "SR", data: { text: "Social rent", val: "SR" } }, + { id: "LRR", data: { text: "London Living Rent", val: "LRR" } }, + { + id: "sharedEquity", + data: { text: "Shared equity", val: "sharedEquity" }, + }, + { id: "LSO", data: { text: "London Shared Ownership", val: "LSO" } }, + { id: "DMS", data: { text: "Discount market sale", val: "DMS" } }, + { id: "DMR", data: { text: "Discount market rent", val: "DMR" } }, + { + id: "DMRLLR", + data: { + text: "Discount market rent (charged at London Living Rents)", + val: "DMRLLR", + }, + }, + { + id: "marketForRent", + data: { text: "Market for rent", val: "marketForRent" }, + }, + { id: "SH", data: { text: "Starter homes", val: "SH" } }, + { + id: "selfCustomBuild", + data: { + text: "Self-build and custom build", + val: "selfCustomBuild", + }, + }, + { + id: "marketForSale", + data: { text: "Market for sale", val: "marketForSale" }, + }, + { id: "other", data: { text: "Other", val: "other" } }, + ], + }, + }, + { + type: "checklist", + data: { + title: "Is this unit compliant with any of the following?", + fn: "compliance", + options: [ + { + id: "m42", + data: { text: "Part M4(2) of the Building Regulations 2010" }, + }, + { + id: "m432a", + data: { text: "Part M4(3)(2a) of the Building Regulations 2010" }, + }, + { + id: "m432b", + data: { text: "Part M4(3)(2b) of the Building Regulations 2010" }, + }, + { id: "none", data: { text: "None of these" } }, + ], + }, + }, + { + type: "question", + data: { + title: "What best describes the type of this unit?", + fn: "type", + options: [ + { id: "terraced", data: { text: "Terraced home", val: "terraced" } }, + { + id: "semiDetached", + data: { text: "Semi detached home", val: "semiDetached" }, + }, + { id: "detached", data: { text: "Detached home", val: "detached" } }, + { + id: "flat", + data: { text: "Flat/apartment or maisonette", val: "flat" }, + }, + { id: "LW", data: { text: "Live/work unit", val: "LW" } }, + { id: "cluster", data: { text: "Cluster flat", val: "cluster" } }, + { id: "studio", data: { text: "Studio or bedsit", val: "studio" } }, + { id: "coLiving", data: { text: "Co living unit", val: "coLiving" } }, + { id: "hostel", data: { text: "Hostel room", val: "hostel" } }, + { id: "HMO", data: { text: "HMO", val: "HMO" } }, + { + id: "student", + data: { text: "Student accommodation", val: "student" }, + }, + { id: "other", data: { text: "Other", val: "other" } }, + ], + }, + }, + { + type: "question", + data: { + title: "What best describes the provider of this unit?", + fn: "provider", + options: [ + { id: "private", data: { text: "Private", val: "private" } }, + { + id: "privateRented", + data: { text: "Private rented sector", val: "privateRented" }, + }, + { id: "HA", data: { text: "Housing association", val: "HA" } }, + { id: "LA", data: { text: "Local authority", val: "LA" } }, + { + id: "publicAuthority", + data: { text: "Other public authority", val: "publicAuthority" }, + }, + { + id: "councilDelivery", + data: { text: "Council delivery company", val: "councilDelivery" }, + }, + { + id: "councilBuildToRent", + data: { + text: "Council delivered build to rent", + val: "councilBuildToRent", + }, + }, + { + id: "affordableHousing", + data: { + text: "Other affordable housing provider", + val: "affordableHousing", + }, + }, + { id: "selfBuild", data: { text: "Self-build", val: "selfBuild" } }, + ], + }, + }, + { + type: "question", + data: { + title: "Is this unit built on garden land?", + fn: "garden", + options: [ + { id: "true", data: { text: "Yes", val: "true" } }, + { id: "false", data: { text: "No", val: "false" } }, + ], + }, + }, + { + type: "number", + data: { + title: "What is the Gross Internal Floor Area (GIA) of this unit?", + units: "m²", + fn: "area", + allowNegatives: false, + }, + }, + { + type: "question", + data: { + title: "Will this unit provide sheltered accommodation?", + fn: "sheltered", + options: [ + { id: "true", data: { text: "Yes", val: "true" } }, + { id: "false", data: { text: "No", val: "false" } }, + ], + }, + }, + { + type: "question", + data: { + title: "Is this unit specifically designed for older people?", + fn: "olderPersons", + options: [ + { id: "true", data: { text: "Yes", val: "true" } }, + { id: "false", data: { text: "No", val: "false" } }, + ], + }, + }, + { + type: "number", + data: { + title: "How many identical units does the description above apply to?", + fn: "identicalUnits", + allowNegatives: false, + }, + }, + ], + min: 1, +} as const; diff --git a/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/GLA/Removed.ts b/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/GLA/Removed.ts new file mode 100644 index 0000000000..b5fde1a983 --- /dev/null +++ b/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/GLA/Removed.ts @@ -0,0 +1,204 @@ +import { Schema } from "@planx/components/List/model"; + +export const ResidentialUnitsGLARemoved: Schema = { + type: "Removed residential unit", + fields: [ + { + type: "number", + data: { + title: "What is the number of habitable rooms of this unit?", + fn: "habitable", + allowNegatives: false, + }, + }, + { + type: "number", + data: { + title: "What is the number of bedrooms of this unit?", + fn: "bedrooms", + allowNegatives: false, + }, + }, + { + type: "question", + data: { + title: "Which best describes the tenure of this unit?", + fn: "tenure", + options: [ + { id: "LAR", data: { text: "London Affordable Rent", val: "LAR" } }, + { + id: "AR", + data: { + text: "Affordable rent (not at LAR benchmark rents)", + val: "AR", + }, + }, + { id: "SR", data: { text: "Social rent", val: "SR" } }, + { id: "LRR", data: { text: "London Living Rent", val: "LRR" } }, + { + id: "sharedEquity", + data: { text: "Shared equity", val: "sharedEquity" }, + }, + { id: "LSO", data: { text: "London Shared Ownership", val: "LSO" } }, + { id: "DMS", data: { text: "Discount market sale", val: "DMS" } }, + { id: "DMR", data: { text: "Discount market rent", val: "DMR" } }, + { + id: "DMRLLR", + data: { + text: "Discount market rent (charged at London Living Rents)", + val: "DMRLLR", + }, + }, + { + id: "marketForRent", + data: { text: "Market for rent", val: "marketForRent" }, + }, + { id: "SH", data: { text: "Starter homes", val: "SH" } }, + { + id: "selfCustomBuild", + data: { + text: "Self-build and custom build", + val: "selfCustomBuild", + }, + }, + { + id: "marketForSale", + data: { text: "Market for sale", val: "marketForSale" }, + }, + { id: "other", data: { text: "Other", val: "other" } }, + ], + }, + }, + { + type: "checklist", + data: { + title: "Is this unit compliant with any of the following?", + fn: "compliance", + options: [ + { + id: "m42", + data: { text: "Part M4(2) of the Building Regulations 2010" }, + }, + { + id: "m432a", + data: { text: "Part M4(3)(2a) of the Building Regulations 2010" }, + }, + { + id: "m432b", + data: { text: "Part M4(3)(2b) of the Building Regulations 2010" }, + }, + { id: "none", data: { text: "None of these" } }, + ], + }, + }, + { + type: "question", + data: { + title: "What best describes the type of this unit?", + fn: "type", + options: [ + { id: "terraced", data: { text: "Terraced home", val: "terraced" } }, + { + id: "semiDetached", + data: { text: "Semi detached home", val: "semiDetached" }, + }, + { id: "detached", data: { text: "Detached home", val: "detached" } }, + { + id: "flat", + data: { text: "Flat/apartment or maisonette", val: "flat" }, + }, + { id: "LW", data: { text: "Live/work unit", val: "LW" } }, + { id: "cluster", data: { text: "Cluster flat", val: "cluster" } }, + { id: "studio", data: { text: "Studio or bedsit", val: "studio" } }, + { id: "coLiving", data: { text: "Co living unit", val: "coLiving" } }, + { id: "hostel", data: { text: "Hostel room", val: "hostel" } }, + { id: "HMO", data: { text: "HMO", val: "HMO" } }, + { + id: "student", + data: { text: "Student accommodation", val: "student" }, + }, + { id: "other", data: { text: "Other", val: "other" } }, + ], + }, + }, + { + type: "question", + data: { + title: "What best describes the provider of this unit?", + fn: "provider", + options: [ + { id: "private", data: { text: "Private", val: "private" } }, + { + id: "privateRented", + data: { text: "Private rented sector", val: "privateRented" }, + }, + { id: "HA", data: { text: "Housing association", val: "HA" } }, + { id: "LA", data: { text: "Local authority", val: "LA" } }, + { + id: "publicAuthority", + data: { text: "Other public authority", val: "publicAuthority" }, + }, + { + id: "councilDelivery", + data: { text: "Council delivery company", val: "councilDelivery" }, + }, + { + id: "councilBuildToRent", + data: { + text: "Council delivered build to rent", + val: "councilBuildToRent", + }, + }, + { + id: "affordableHousing", + data: { + text: "Other affordable housing provider", + val: "affordableHousing", + }, + }, + { id: "selfBuild", data: { text: "Self-build", val: "selfBuild" } }, + ], + }, + }, + { + type: "number", + data: { + title: "What is the Gross Internal Floor Area (GIA) of this unit?", + units: "m²", + fn: "area", + allowNegatives: false, + }, + }, + { + type: "question", + data: { + title: "Will this unit provide sheltered accommodation?", + fn: "sheltered", + options: [ + { id: "true", data: { text: "Yes", val: "true" } }, + { id: "false", data: { text: "No", val: "false" } }, + ], + }, + }, + { + type: "question", + data: { + title: "Is this unit specifically designed for older people?", + fn: "olderPersons", + options: [ + { id: "true", data: { text: "Yes", val: "true" } }, + { id: "false", data: { text: "No", val: "false" } }, + ], + }, + }, + { + type: "number", + data: { + title: "How many identical units does the description above apply to?", + fn: "identicalUnits", + allowNegatives: false, + }, + }, + ], + min: 1, +} as const; diff --git a/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/GLA/Retained.ts b/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/GLA/Retained.ts new file mode 100644 index 0000000000..e45bd3a153 --- /dev/null +++ b/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/GLA/Retained.ts @@ -0,0 +1,104 @@ +import { Schema } from "@planx/components/List/model"; + +export const ResidentialUnitsGLARetained: Schema = { + type: "Retained residential unit", + fields: [ + { + type: "number", + data: { + title: "What is the number of bedrooms of this unit?", + fn: "bedrooms", + allowNegatives: false, + }, + }, + { + type: "question", + data: { + title: "Which best describes the tenure of this unit?", + fn: "tenure", + options: [ + { id: "LAR", data: { text: "London Affordable Rent", val: "LAR" } }, + { + id: "AR", + data: { + text: "Affordable rent (not at LAR benchmark rents)", + val: "AR", + }, + }, + { id: "SR", data: { text: "Social rent", val: "SR" } }, + { id: "LRR", data: { text: "London Living Rent", val: "LRR" } }, + { + id: "sharedEquity", + data: { text: "Shared equity", val: "sharedEquity" }, + }, + { id: "LSO", data: { text: "London Shared Ownership", val: "LSO" } }, + { id: "DMS", data: { text: "Discount market sale", val: "DMS" } }, + { id: "DMR", data: { text: "Discount market rent", val: "DMR" } }, + { + id: "DMRLLR", + data: { + text: "Discount market rent (charged at London Living Rents)", + val: "DMRLLR", + }, + }, + { + id: "marketForRent", + data: { text: "Market for rent", val: "marketForRent" }, + }, + { id: "SH", data: { text: "Starter homes", val: "SH" } }, + { + id: "selfCustomBuild", + data: { + text: "Self-build and custom build", + val: "selfCustomBuild", + }, + }, + { + id: "marketForSale", + data: { text: "Market for sale", val: "marketForSale" }, + }, + { id: "other", data: { text: "Other", val: "other" } }, + ], + }, + }, + { + type: "question", + data: { + title: "What best describes the type of this unit?", + fn: "type", + options: [ + { id: "terraced", data: { text: "Terraced home", val: "terraced" } }, + { + id: "semiDetached", + data: { text: "Semi detached home", val: "semiDetached" }, + }, + { id: "detached", data: { text: "Detached home", val: "detached" } }, + { + id: "flat", + data: { text: "Flat/apartment or maisonette", val: "flat" }, + }, + { id: "LW", data: { text: "Live/work unit", val: "LW" } }, + { id: "cluster", data: { text: "Cluster flat", val: "cluster" } }, + { id: "studio", data: { text: "Studio or bedsit", val: "studio" } }, + { id: "coLiving", data: { text: "Co living unit", val: "coLiving" } }, + { id: "hostel", data: { text: "Hostel room", val: "hostel" } }, + { id: "HMO", data: { text: "HMO", val: "HMO" } }, + { + id: "student", + data: { text: "Student accommodation", val: "student" }, + }, + { id: "other", data: { text: "Other", val: "other" } }, + ], + }, + }, + { + type: "number", + data: { + title: "How many identical units does the description above apply to?", + fn: "identicalUnits", + allowNegatives: false, + }, + }, + ], + min: 1, +} as const; diff --git a/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/Proposed.ts b/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/Proposed.ts new file mode 100644 index 0000000000..ea99c599b0 --- /dev/null +++ b/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/Proposed.ts @@ -0,0 +1,93 @@ +import { Schema } from "../../model"; + +export const ResidentialUnitsProposed: Schema = { + type: "Proposed residential unit", + fields: [ + { + type: "question", + data: { + title: "What development does this unit result from?", + fn: "development", + options: [ + { id: "newBuild", data: { text: "New build", val: "newBuild" } }, + { + id: "changeOfUseFrom", + data: { + text: "Change of use of existing single home", + val: "changeOfUseFrom", + }, + }, + { + id: "changeOfUseTo", + data: { text: "Change of use to a home", val: "changeOfUseTo" }, + }, + ], + }, + }, + { + type: "question", + data: { + title: "What best describes the tenure of this unit?", + fn: "tenure", + options: [ + { id: "MH", data: { text: "Market housing", val: "MH" } }, + { + id: "SAIR", + data: { text: "Social, affordable or interim rent", val: "SAIR" }, + }, + { + id: "AHO", + data: { text: "Affordable home ownership", val: "AHO" }, + }, + { id: "SH", data: { text: "Starter homes", val: "SH" } }, + { + id: "selfCustomBuild", + data: { + text: "Self-build and custom build", + val: "selfCustomBuild", + }, + }, + { id: "other", data: { text: "Other", val: "other" } }, + ], + }, + }, + { + type: "question", + data: { + title: "What best describes the type of this unit?", + fn: "type", + options: [ + { id: "house", data: { text: "House", val: "house" } }, + { + id: "flat", + data: { text: "Flat, apartment or maisonette", val: "flat" }, + }, + { + id: "sheltered", + data: { text: "Sheltered housing", val: "sheltered" }, + }, + { id: "studio", data: { text: "Studio or bedsit", val: "studio" } }, + { id: "cluster", data: { text: "Cluster flat", val: "cluster" } }, + { id: "other", data: { text: "Other", val: "other" } }, + ], + }, + }, + { + type: "number", + data: { + title: "How many bedrooms will this unit have?", + fn: "bedrooms", + allowNegatives: false, + }, + }, + { + type: "number", + data: { + title: "How many identical units will the description above apply to?", + fn: "identicalUnits", + allowNegatives: false, + }, + }, + ], + min: 1, +} as const; diff --git a/editor.planx.uk/src/@planx/components/List/schemas/Zoo.ts b/editor.planx.uk/src/@planx/components/List/schemas/Zoo.ts deleted file mode 100644 index 655512f182..0000000000 --- a/editor.planx.uk/src/@planx/components/List/schemas/Zoo.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { TextInputType } from "@planx/components/TextInput/model"; - -import { Schema } from "../model"; - -/** - * Temp simple example to build out UI - * Can be re-used as mock for testing - */ -export const Zoo: Schema = { - type: "Animal", - fields: [ - // Text - short - { - type: "text", - data: { - title: "What's their name?", - description: "Please make it cute", - fn: "name", - type: TextInputType.Short, - }, - }, - // Text - email - { - type: "text", - data: { - title: "What's their email address?", - fn: "email", - type: TextInputType.Email, - }, - }, - // Number - { - type: "number", - data: { - title: "How old are they?", - fn: "age", - units: "years old", - allowNegatives: false, - }, - }, - // Question - multiple options - { - type: "question", - data: { - title: "What size are they?", - fn: "size", - options: [ - { id: "small", data: { text: "Small" } }, - { id: "medium", data: { text: "Medium" } }, - { id: "large", data: { text: "Large" } }, - ], - }, - }, - // Question - only two options - { - type: "question", - data: { - title: "How cute are they?", - fn: "cuteness", - options: [ - { id: "very", data: { text: "Very" } }, - { id: "super", data: { text: "Super" } }, - ], - }, - }, - ], - min: 1, - max: 10, -} as const; diff --git a/editor.planx.uk/src/@planx/components/List/schemas/mocks/GenericUnits.ts b/editor.planx.uk/src/@planx/components/List/schemas/mocks/GenericUnits.ts new file mode 100644 index 0000000000..344851ab8c --- /dev/null +++ b/editor.planx.uk/src/@planx/components/List/schemas/mocks/GenericUnits.ts @@ -0,0 +1,95 @@ +import { Schema } from "@planx/components/List/model"; + +import { Props } from "../../Public"; + +export const GenericUnitsTest: Schema = { + type: "Unit", + fields: [ + // fn = "development" triggers summary stat and options set "val" + { + type: "question", + data: { + title: "What development does this unit result from?", + fn: "development", + options: [ + { id: "newBuild", data: { text: "New build", val: "newBuild" } }, + { + id: "changeOfUseFrom", + data: { + text: "Change of use of existing single home", + val: "changeOfUseFrom", + }, + }, + { + id: "changeOfUseTo", + data: { text: "Change of use to a home", val: "changeOfUseTo" }, + }, + ], + }, + }, + // options set "text" only + { + type: "question", + data: { + title: "Is this unit built on garden land?", + fn: "garden", + options: [ + { id: "true", data: { text: "Yes" } }, + { id: "false", data: { text: "No" } }, + ], + }, + }, + // fn = "identicalUnits" triggers summary stat + { + type: "number", + data: { + title: "How many identical units does the description above apply to?", + fn: "identicalUnits", + allowNegatives: false, + }, + }, + ], + min: 1, +} as const; + +export const mockUnitsProps: Props = { + fn: "proposal.units.residential", + schema: GenericUnitsTest, + schemaName: "Generic residential units", + title: "Describe residential units", +}; + +export const mockUnitsPayload = { + data: { + "proposal.units.residential": [ + { + development: "newBuild", + garden: "Yes", + identicalUnits: 1, + }, + { + development: "newBuild", + garden: "No", + identicalUnits: 2, + }, + { + development: "changeOfUseTo", + garden: "No", + identicalUnits: 2, + }, + ], + "proposal.units.residential.one.development": "newBuild", + "proposal.units.residential.one.garden": "Yes", + "proposal.units.residential.one.identicalUnits": 1, + "proposal.units.residential.two.development": "newBuild", + "proposal.units.residential.two.garden": "No", + "proposal.units.residential.two.identicalUnits": 2, + "proposal.units.residential.three.development": "changeOfUseTo", + "proposal.units.residential.three.garden": "No", + "proposal.units.residential.three.identicalUnits": 2, + "proposal.units.residential.total.listItems": 3, + "proposal.units.residential.total.units": 5, + "proposal.units.residential.total.units.development.newBuild": 3, + "proposal.units.residential.total.units.development.changeOfUseTo": 2, + }, +}; diff --git a/editor.planx.uk/src/@planx/components/List/schemas/mocks/MaxOne.ts b/editor.planx.uk/src/@planx/components/List/schemas/mocks/MaxOne.ts new file mode 100644 index 0000000000..bdbddaef59 --- /dev/null +++ b/editor.planx.uk/src/@planx/components/List/schemas/mocks/MaxOne.ts @@ -0,0 +1,58 @@ +import { Schema } from "@planx/components/List/model"; + +import { Props } from "../../Public"; + +export const MaxOneTest: Schema = { + type: "Parking spaces", + fields: [ + { + type: "number", + data: { + title: "How many parking spaces for cars?", + fn: "cars", + allowNegatives: false, + }, + }, + { + type: "number", + data: { + title: "How many parking spaces for bicycles?", + fn: "bikes", + allowNegatives: false, + }, + }, + { + type: "number", + data: { + title: "How many parking spaces for caravans?", + fn: "caravans", + allowNegatives: false, + }, + }, + ], + min: 1, + max: 1, +} as const; + +export const mockMaxOneProps: Props = { + fn: "proposal.parking", + schema: MaxOneTest, + schemaName: "Parking spaces", + title: "Describe parking spaces", +}; + +export const mockMaxOnePayload = { + data: { + "proposal.parking": [ + { + cars: 2, + bicycles: 4, + caravans: 0, + }, + ], + "proposal.parking.one.cars": 2, + "proposal.parking.one.bicycles": 4, + "proposal.parking.one.caravans": 0, + "proposal.parking.total.listItems": 1, + }, +}; diff --git a/editor.planx.uk/src/@planx/components/List/schemas/mocks/Zoo.ts b/editor.planx.uk/src/@planx/components/List/schemas/mocks/Zoo.ts new file mode 100644 index 0000000000..59394a6f31 --- /dev/null +++ b/editor.planx.uk/src/@planx/components/List/schemas/mocks/Zoo.ts @@ -0,0 +1,124 @@ +import { TextInputType } from "@planx/components/TextInput/model"; + +import { Schema } from "../../model"; +import { Props } from "../../Public"; + +export const Zoo: Schema = { + type: "Animal", + fields: [ + // Text - short + { + type: "text", + data: { + title: "What's their name?", + description: "Please make it cute", + fn: "name", + type: TextInputType.Short, + }, + }, + // Text - email + { + type: "text", + data: { + title: "What's their email address?", + fn: "email.address", + type: TextInputType.Email, + }, + }, + // Number + { + type: "number", + data: { + title: "How old are they?", + fn: "age", + units: "years old", + allowNegatives: false, + }, + }, + // Question - multiple options + { + type: "question", + data: { + title: "What size are they?", + fn: "size", + options: [ + { id: "small", data: { text: "Small" } }, + { id: "medium", data: { text: "Medium" } }, + { id: "large", data: { text: "Large" } }, + ], + }, + }, + // Question - only two options + { + type: "question", + data: { + title: "How cute are they?", + fn: "cuteness.amount", + options: [ + { id: "very", data: { text: "Very" } }, + { id: "super", data: { text: "Super" } }, + ], + }, + }, + // Checklist + { + type: "checklist", + data: { + title: "What do they eat?", + fn: "food", + options: [ + { id: "meat", data: { text: "Meat" } }, + { id: "leaves", data: { text: "Leaves" } }, + { id: "bamboo", data: { text: "Bamboo" } }, + { id: "fruit", data: { text: "fruit" } }, + ], + }, + }, + ], + min: 1, + max: 3, +} as const; + +export const mockZooProps: Props = { + fn: "mockFn", + schema: Zoo, + schemaName: "Zoo", + title: "Mock Title", + description: "Mock description", +}; + +export const mockZooPayload = { + data: { + mockFn: [ + { + age: 10, + "cuteness.amount": "Very", + "email.address": "richard.parker@pi.com", + name: "Richard Parker", + size: "Medium", + food: ["meat", "leaves", "bamboo"], + }, + { + age: 10, + "cuteness.amount": "Very", + "email.address": "richard.parker@pi.com", + name: "Richard Parker", + size: "Medium", + food: ["meat", "leaves", "bamboo"], + }, + ], + "mockFn.one.age": 10, + "mockFn.one.cuteness.amount": "Very", + "mockFn.one.email.address": "richard.parker@pi.com", + "mockFn.one.name": "Richard Parker", + "mockFn.one.size": "Medium", + "mockFn.one.food": ["meat", "leaves", "bamboo"], + "mockFn.two.age": 10, + "mockFn.two.cuteness.amount": "Very", + "mockFn.two.email.address": "richard.parker@pi.com", + "mockFn.two.name": "Richard Parker", + "mockFn.two.size": "Medium", + "mockFn.two.food": ["meat", "leaves", "bamboo"], + "mockFn.total.listItems": 2, + }, +}; diff --git a/editor.planx.uk/src/@planx/components/List/utils.test.ts b/editor.planx.uk/src/@planx/components/List/utils.test.ts new file mode 100644 index 0000000000..72e8996e19 --- /dev/null +++ b/editor.planx.uk/src/@planx/components/List/utils.test.ts @@ -0,0 +1,81 @@ +import { UserResponse } from "./model"; +import { + flatten, + sumIdenticalUnits, + sumIdenticalUnitsByDevelopmentType, +} from "./utils"; + +describe("passport data shape", () => { + it("flattens list items", async () => { + const defaultPassportData = { + mockFn: [ + { + age: 10, + "cuteness.amount": "Very", + "email.address": "richard.parker@pi.com", + name: "Richard Parker", + size: "Medium", + food: ["bamboo", "leaves"], + }, + { + age: 10, + "cuteness.amount": "Very", + "email.address": "richard.parker@pi.com", + name: "Richard Parker", + size: "Medium", + food: ["meat", "bamboo", "leaves"], + }, + ], + }; + + expect(flatten(defaultPassportData, { depth: 2 })).toEqual({ + "mockFn.one.age": 10, + "mockFn.one.cuteness.amount": "Very", + "mockFn.one.email.address": "richard.parker@pi.com", + "mockFn.one.name": "Richard Parker", + "mockFn.one.size": "Medium", + "mockFn.one.food": ["bamboo", "leaves"], + "mockFn.two.age": 10, + "mockFn.two.cuteness.amount": "Very", + "mockFn.two.email.address": "richard.parker@pi.com", + "mockFn.two.name": "Richard Parker", + "mockFn.two.size": "Medium", + "mockFn.two.food": ["meat", "bamboo", "leaves"], + }); + }); + + it("adds summary stats when applicable fields are set", async () => { + const defaultPassportData = { + "proposal.units.residential": [ + { + development: "newBuild", + garden: "Yes", + identicalUnits: 1, + }, + { + development: "newBuild", + garden: "No", + identicalUnits: 2, + }, + { + development: "changeOfUseTo", + garden: "No", + identicalUnits: 2, + }, + ], + } as unknown as Record; + + expect( + sumIdenticalUnits("proposal.units.residential", defaultPassportData), + ).toEqual(5); + expect( + sumIdenticalUnitsByDevelopmentType( + "proposal.units.residential", + defaultPassportData, + ), + ).toEqual({ + "proposal.units.residential.total.units.development.newBuild": 3, + "proposal.units.residential.total.units.development.changeOfUseTo": 2, + }); + }); +}); diff --git a/editor.planx.uk/src/@planx/components/List/utils.tsx b/editor.planx.uk/src/@planx/components/List/utils.tsx new file mode 100644 index 0000000000..2f1bf744cf --- /dev/null +++ b/editor.planx.uk/src/@planx/components/List/utils.tsx @@ -0,0 +1,205 @@ +import { styled } from "@mui/material/styles"; +import React from "react"; +import { optional } from "zod"; + +import { Field, UserResponse } from "./model"; + +const List = styled("ul")(() => ({ + listStylePosition: "inside", + padding: 0, + margin: 0, +})); + +/** + * In the case of "question" and "checklist" fields, ensure the displayed value reflects option "text", rather than "val" as recorded in passport + * @param value - the `val` or `text` of an Option defined in the schema's fields + * @param field - the Field object + * @returns string | React.JSX.Element - the `text` for the given value `val`, or the original value + */ +export function formatSchemaDisplayValue( + value: string | string[], + field: Field, +) { + switch (field.type) { + case "number": + return field.data.units ? `${value} ${field.data.units}` : value; + case "text": + return value; + case "checklist": { + const matchingOptions = field.data.options.filter((option) => + (value as string[]).includes(option.id), + ); + return ( + + {matchingOptions.map((option) => ( +
  • {option.data.text}
  • + ))} +
    + ); + } + case "question": { + const matchingOption = field.data.options.find( + (option) => option.data.val === value, + ); + return matchingOption?.data.text; + } + } +} + +/** + * If the schema includes a field that sets fn = "identicalUnits", sum of total units + * @param fn - passport key of current List + * @param passportData - default passport data format for the List + * @returns - sum of all units, or 0 if field not set + */ +export function sumIdenticalUnits( + fn: string, + passportData: Record, +): number { + let sum = 0; + passportData[`${fn}`].map((item) => { + if (!Array.isArray(item?.identicalUnits)) { + sum += parseInt(item?.identicalUnits); + } + }); + return sum; +} + +/** + * If the schema includes fields that set fn = "development" and fn = "identicalUnits", sum of total units by development option "val" + * @param fn - passport key of current List + * @param passportData - default passport data format for the List + * @returns - sum of all units by development type, or empty object if fields not set + */ +export function sumIdenticalUnitsByDevelopmentType( + fn: string, + passportData: Record, +): Record { + // Sum identical units by development type (@todo read all possible option `val` from Schema in future) + const baseSums: Record = { + changeOfUse: 0, + changeOfUseFrom: 0, + changeOfUseTo: 0, + conversion: 0, + gain: 0, + extension: 0, + loss: 0, + newBuild: 0, + notKnown: 0, + }; + passportData[`${fn}`].map((item) => { + if (!Array.isArray(item?.identicalUnits)) { + baseSums[`${item?.development}`] += parseInt(item?.identicalUnits); + } + }); + + // Format property names for passport, and filter out any entries with default sum = 0 + const formattedSums: Record = {}; + Object.entries(baseSums).forEach(([k, v]) => { + if (v > 0) { + formattedSums[`${fn}.total.units.development.${k}`] = v; + } + }); + + return formattedSums; +} + +interface FlattenOptions { + depth?: number; + path?: string | null; + separator?: string; +} + +/** + * Flattens nested object so we can output passport variables like `{listFn}.{itemIndexAsText}.{fieldFn}` + * Adapted from https://gist.github.com/penguinboy/762197 + */ +export function flatten>( + object: T, + { depth = Infinity, path = null, separator = "." }: FlattenOptions = {}, +): T { + return Object.keys(object).reduce((acc: T, key: string): T => { + const value = object[key]; + + // If the key is a whole number, convert to text before setting newPath + // eg because Calculate/MathJS cannot automate passport variables with number segments + if (/^-?\d+$/.test(key)) { + key = convertNumberToText(parseInt(key) + 1); + } + + const newPath = [path, key].filter(Boolean).join(separator); + + const isObject = [ + typeof value === "object", + value !== null, + !(Array.isArray(value) && value.length === 0), + ].every(Boolean); + + return isObject && depth > 0 + ? { + ...acc, + ...flatten(value, { depth: depth - 1, path: newPath, separator }), + } + : { ...acc, [newPath]: value }; + }, {} as T); +} + +const ones = [ + "", + "one", + "two", + "three", + "four", + "five", + "six", + "seven", + "eight", + "nine", +]; +const tens = [ + "", + "", + "twenty", + "thirty", + "forty", + "fifty", + "sixty", + "seventy", + "eighty", + "ninety", +]; +const teens = [ + "ten", + "eleven", + "twelve", + "thirteen", + "fourteen", + "fifteen", + "sixteen", + "seventeen", + "eighteen", + "nineteen", +]; + +function convertTens(num: number): string { + if (num < 10) { + return ones[num]; + } else if (num >= 10 && num < 20) { + return teens[num - 10]; + } else { + // format as compound string - eg "thirtyfour" instead of "thirty four" + return tens[Math.floor(num / 10)] + ones[num % 10]; + } +} + +/** + * Convert a whole number up to 99 to a spelled-out word (eg 34 => 'thirtyfour') + * Adapted from https://stackoverflow.com/questions/5529934/javascript-numbers-to-words + */ +function convertNumberToText(num: number): string { + if (num == 0) { + return "zero"; + } else { + return convertTens(num); + } +} diff --git a/editor.planx.uk/src/@planx/components/Notice/Editor.tsx b/editor.planx.uk/src/@planx/components/Notice/Editor.tsx index b8a8d3ee2e..233c7e6c4a 100644 --- a/editor.planx.uk/src/@planx/components/Notice/Editor.tsx +++ b/editor.planx.uk/src/@planx/components/Notice/Editor.tsx @@ -1,3 +1,5 @@ +import FormControlLabel from "@mui/material/FormControlLabel"; +import Switch from "@mui/material/Switch"; import { ComponentType as TYPES } from "@opensystemslab/planx-core/types"; import type { Notice } from "@planx/components/Notice/model"; import { parseNotice } from "@planx/components/Notice/model"; @@ -7,7 +9,6 @@ import React from "react"; import ColorPicker from "ui/editor/ColorPicker"; import ModalSection from "ui/editor/ModalSection"; import ModalSectionContent from "ui/editor/ModalSectionContent"; -import OptionButton from "ui/editor/OptionButton"; import RichTextInput from "ui/editor/RichTextInput"; import Input from "ui/shared/Input"; import InputRow from "ui/shared/InputRow"; @@ -63,17 +64,22 @@ const NoticeEditor: React.FC = (props) => { }); }} /> - { - props.onChange({ - ...props.value, - resetButton: !props.value.resetButton, - }); - }} - > - Reset - + + + props.onChange({ + ...props.value, + resetButton: !props.value.resetButton, + }) + } + /> + } + label="Reset to start of service" + /> +
    - { - formik.setFieldValue( - "allowNegatives", - !formik.values.allowNegatives, - ); - }} - > - Allow negative numbers to be input - + + formik.setFieldValue( + "allowNegatives", + !formik.values.allowNegatives, + ) + } + /> + } + label="Allow negative numbers to be input" + /> diff --git a/editor.planx.uk/src/@planx/components/NumberInput/Public.test.tsx b/editor.planx.uk/src/@planx/components/NumberInput/Public.test.tsx index 016150cc80..9756edf100 100644 --- a/editor.planx.uk/src/@planx/components/NumberInput/Public.test.tsx +++ b/editor.planx.uk/src/@planx/components/NumberInput/Public.test.tsx @@ -39,12 +39,21 @@ test("requires a positive number to be input by default", async () => { const handleSubmit = jest.fn(); const { user } = setup( - , + , ); - expect(screen.getByRole("heading")).toHaveTextContent("How many doors are you adding?"); + expect(screen.getByRole("heading")).toHaveTextContent( + "How many doors are you adding?", + ); - await user.type(screen.getByLabelText("How many doors are you adding?"), "-1"); + await user.type( + screen.getByLabelText("How many doors are you adding?"), + "-1", + ); await user.click(screen.getByTestId("continue-button")); expect(screen.getByText("Enter a positive number")).toBeInTheDocument(); @@ -55,10 +64,17 @@ test("allows negative numbers to be input when toggled on by editor", async () = const handleSubmit = jest.fn(); const { user } = setup( - , + , ); - expect(screen.getByRole("heading")).toHaveTextContent("What's the temperature?"); + expect(screen.getByRole("heading")).toHaveTextContent( + "What's the temperature?", + ); await user.type(screen.getByLabelText("What's the temperature?"), "-10"); await user.click(screen.getByTestId("continue-button")); diff --git a/editor.planx.uk/src/@planx/components/NumberInput/Public.tsx b/editor.planx.uk/src/@planx/components/NumberInput/Public.tsx index 25700a4219..a75a65e04d 100644 --- a/editor.planx.uk/src/@planx/components/NumberInput/Public.tsx +++ b/editor.planx.uk/src/@planx/components/NumberInput/Public.tsx @@ -8,12 +8,11 @@ import InputLabel from "ui/public/InputLabel"; import Input from "ui/shared/Input"; import InputRow from "ui/shared/InputRow"; import InputRowLabel from "ui/shared/InputRowLabel"; -import { object, string } from "yup"; import { DESCRIPTION_TEXT, ERROR_MESSAGE } from "../shared/constants"; import { getPreviouslySubmittedData, makeData } from "../shared/utils"; import type { NumberInput } from "./model"; -import { parseNumber } from "./model"; +import { parseNumber, validationSchema } from "./model"; export type Props = PublicProps; @@ -32,29 +31,7 @@ export default function NumberInputComponent(props: Props): FCReturn { }, validateOnBlur: false, validateOnChange: false, - validationSchema: object({ - value: string() - .required("Enter your answer before continuing") - .test({ - name: "not a number", - message: (() => { - if (!props.allowNegatives) { - return "Enter a positive number"; - } - - return "Enter a number"; - })(), - test: (value: string | undefined) => { - if (!value) { - return false; - } - if (!props.allowNegatives && value.startsWith("-")) { - return false; - } - return value === "0" ? true : Boolean(parseNumber(value)); - }, - }), - }), + validationSchema: validationSchema(props), }); const inputRef = useRef(null); diff --git a/editor.planx.uk/src/@planx/components/NumberInput/model.ts b/editor.planx.uk/src/@planx/components/NumberInput/model.ts index 2fab6964b7..c0e78b9614 100644 --- a/editor.planx.uk/src/@planx/components/NumberInput/model.ts +++ b/editor.planx.uk/src/@planx/components/NumberInput/model.ts @@ -1,3 +1,5 @@ +import { object, string } from "yup"; + import { MoreInformation, parseMoreInformation } from "../shared"; export interface NumberInput extends MoreInformation { @@ -28,3 +30,31 @@ export const parseNumberInput = ( allowNegatives: data?.allowNegatives || false, ...parseMoreInformation(data), }); + +export const numberInputValidationSchema = (input: NumberInput) => + string() + .required("Enter your answer before continuing") + .test({ + name: "not a number", + message: (() => { + if (!input.allowNegatives) { + return "Enter a positive number"; + } + + return "Enter a number"; + })(), + test: (value: string | undefined) => { + if (!value) { + return false; + } + if (!input.allowNegatives && value.startsWith("-")) { + return false; + } + return value === "0" ? true : Boolean(parseNumber(value)); + }, + }); + +export const validationSchema = (input: NumberInput) => + object({ + value: numberInputValidationSchema(input), + }); diff --git a/editor.planx.uk/src/@planx/components/Pay/Editor.test.tsx b/editor.planx.uk/src/@planx/components/Pay/Editor.test.tsx index 3357aee964..6f3c1d4086 100644 --- a/editor.planx.uk/src/@planx/components/Pay/Editor.test.tsx +++ b/editor.planx.uk/src/@planx/components/Pay/Editor.test.tsx @@ -1,7 +1,7 @@ import { User } from "@opensystemslab/planx-core/types"; import { fireEvent, waitFor } from "@testing-library/react"; import { toggleFeatureFlag } from "lib/featureFlags"; -import { FullStore, vanillaStore } from "pages/FlowEditor/lib/store"; +import { FullStore, useStore } from "pages/FlowEditor/lib/store"; import React from "react"; import { DndProvider } from "react-dnd"; import { HTML5Backend } from "react-dnd-html5-backend"; @@ -35,7 +35,7 @@ describe("Pay component - Editor Modal", () => { jest.setTimeout(20000); // Set up mock state with platformAdmin user so all Editor features are enabled - const { getState, setState } = vanillaStore; + const { getState, setState } = useStore; const mockUser: User = { id: 123, email: "b.baggins@shire.com", diff --git a/editor.planx.uk/src/@planx/components/Pay/Editor.tsx b/editor.planx.uk/src/@planx/components/Pay/Editor.tsx index 528756c6d2..f85e8e96dc 100644 --- a/editor.planx.uk/src/@planx/components/Pay/Editor.tsx +++ b/editor.planx.uk/src/@planx/components/Pay/Editor.tsx @@ -1,6 +1,8 @@ import DataObjectIcon from "@mui/icons-material/DataObject"; import Box from "@mui/material/Box"; +import FormControlLabel from "@mui/material/FormControlLabel"; import Link from "@mui/material/Link"; +import Switch from "@mui/material/Switch"; import Typography from "@mui/material/Typography"; import { ComponentType as TYPES, @@ -26,7 +28,6 @@ import ListManager, { } from "ui/editor/ListManager"; import ModalSection from "ui/editor/ModalSection"; import ModalSectionContent from "ui/editor/ModalSectionContent"; -import OptionButton from "ui/editor/OptionButton"; import RichTextInput from "ui/editor/RichTextInput"; import ErrorWrapper from "ui/shared/ErrorWrapper"; import Input from "ui/shared/Input"; @@ -137,7 +138,6 @@ export type Props = EditorProps; const Component: React.FC = (props: Props) => { const [flowName] = useStore((store) => [store.flowName]); - const initialValues: Pay = { title: props.node?.data?.title || "Pay for your application", bannerTitle: @@ -262,16 +262,18 @@ const Component: React.FC = (props: Props) => { onChange={handleChange} /> + + setFieldValue("hidePay", !values.hidePay)} + /> + } + label="Hide the pay buttons and show fee for information only" + /> + - { - setFieldValue("hidePay", !values.hidePay); - }} - style={{ width: "100%" }} - > - Hide the pay buttons and show fee for information only - = (props: Props) => { - { - setFieldValue("allowInviteToPay", !values.allowInviteToPay); - }} - style={{ width: "100%" }} - > - Allow applicants to invite someone else to pay - + + + setFieldValue( + "allowInviteToPay", + !values.allowInviteToPay, + ) + } + /> + } + label="Allow applicants to invite someone else to pay" + /> + {values.allowInviteToPay ? ( <> diff --git a/editor.planx.uk/src/@planx/components/Pay/Public/Confirm.tsx b/editor.planx.uk/src/@planx/components/Pay/Public/Confirm.tsx index 0fa56f8332..cbacc3b80e 100644 --- a/editor.planx.uk/src/@planx/components/Pay/Public/Confirm.tsx +++ b/editor.planx.uk/src/@planx/components/Pay/Public/Confirm.tsx @@ -11,6 +11,7 @@ import React, { useState } from "react"; import { ApplicationPath } from "types"; import Banner from "ui/public/Banner"; import FormWrapper from "ui/public/FormWrapper"; +import ErrorSummary from "ui/shared/ErrorSummary"; import ReactMarkdownOrHtml from "ui/shared/ReactMarkdownOrHtml"; import { formattedPriceWithCurrencySymbol } from "../model"; @@ -52,12 +53,6 @@ const PayText = styled(Box)(({ theme }) => ({ }, })); -const ErrorSummary = styled(Box)(({ theme }) => ({ - marginTop: theme.spacing(1), - padding: theme.spacing(3), - border: `5px solid ${theme.palette.error.main}`, -})); - const PayBody: React.FC = (props) => { const path = useStore((state) => state.path); const isSaveReturn = path === ApplicationPath.SaveAndReturn; @@ -66,30 +61,21 @@ const PayBody: React.FC = (props) => { if (props.error.startsWith(PAY_API_ERROR_UNSUPPORTED_TEAM)) { return ( - - - {props.error} - - - Click continue to skip payment and proceed with your application - for testing. - - + ); } else { return ( - - - {props.error} - - - This error has been logged and our team will see it soon. You can - safely close this tab and try resuming again soon by returning to - this URL. - - + ); } diff --git a/editor.planx.uk/src/@planx/components/Pay/Public/Pay.test.tsx b/editor.planx.uk/src/@planx/components/Pay/Public/Pay.test.tsx index 4eca867eac..9baed31d53 100644 --- a/editor.planx.uk/src/@planx/components/Pay/Public/Pay.test.tsx +++ b/editor.planx.uk/src/@planx/components/Pay/Public/Pay.test.tsx @@ -1,7 +1,7 @@ import { PaymentStatus } from "@opensystemslab/planx-core/types"; import { ComponentType as TYPES } from "@opensystemslab/planx-core/types"; import { screen } from "@testing-library/react"; -import { FullStore, Store, vanillaStore } from "pages/FlowEditor/lib/store"; +import { FullStore, Store, useStore } from "pages/FlowEditor/lib/store"; import React from "react"; import { act } from "react-dom/test-utils"; import * as ReactNavi from "react-navi"; @@ -11,7 +11,7 @@ import { ApplicationPath, Breadcrumbs } from "types"; import Confirm, { Props } from "./Confirm"; import Pay from "./Pay"; -const { getState, setState } = vanillaStore; +const { getState, setState } = useStore; let initialState: FullStore; @@ -194,7 +194,7 @@ describe("Confirm component without inviteToPay", () => { expect(screen.getByRole("heading", { level: 2 })).toHaveTextContent( "The fee is", ); - expect(screen.getByRole("heading", { level: 3 })).toHaveTextContent( + expect(screen.getByRole("heading", { level: 4 })).toHaveTextContent( errorMessage, ); diff --git a/editor.planx.uk/src/@planx/components/PlanningConstraints/List.tsx b/editor.planx.uk/src/@planx/components/PlanningConstraints/List.tsx index 76ca06b20a..085c03265e 100644 --- a/editor.planx.uk/src/@planx/components/PlanningConstraints/List.tsx +++ b/editor.planx.uk/src/@planx/components/PlanningConstraints/List.tsx @@ -88,7 +88,7 @@ export default function ConstraintsList({ {Object.keys(groupedConstraints).map( (category: string, index: number) => ( - <> + ))} - + ), )} @@ -170,7 +170,7 @@ function ConstraintListItem({ children, ...props }: ConstraintListItemProps) { expandIcon={} sx={{ pr: 1.5, background: `rgba(255, 255, 255, 0.8)` }} > - + {children} diff --git a/editor.planx.uk/src/@planx/components/PropertyInformation/Editor.tsx b/editor.planx.uk/src/@planx/components/PropertyInformation/Editor.tsx index 98c5a24d45..c3faea4bbb 100644 --- a/editor.planx.uk/src/@planx/components/PropertyInformation/Editor.tsx +++ b/editor.planx.uk/src/@planx/components/PropertyInformation/Editor.tsx @@ -1,3 +1,5 @@ +import FormControlLabel from "@mui/material/FormControlLabel"; +import Switch from "@mui/material/Switch"; import { ComponentType as TYPES } from "@opensystemslab/planx-core/types"; import { EditorProps, @@ -9,7 +11,6 @@ import { useFormik } from "formik"; import React from "react"; import ModalSection from "ui/editor/ModalSection"; import ModalSectionContent from "ui/editor/ModalSectionContent"; -import OptionButton from "ui/editor/OptionButton"; import RichTextInput from "ui/editor/RichTextInput"; import Input from "ui/shared/Input"; import InputRow from "ui/shared/InputRow"; @@ -55,17 +56,22 @@ function PropertyInformationComponent(props: Props) { onChange={formik.handleChange} /> - { - formik.setFieldValue( - "showPropertyTypeOverride", - !formik.values.showPropertyTypeOverride, - ); - }} - > - Show users a "change" link to override the property type - + + + formik.setFieldValue( + "showPropertyTypeOverride", + !formik.values.showPropertyTypeOverride, + ) + } + /> + } + label="Show users a 'change' link to override the property type" + /> + { getState().resetPreview(); diff --git a/editor.planx.uk/src/@planx/components/Review/Public/Public.test.tsx b/editor.planx.uk/src/@planx/components/Review/Public/Public.test.tsx index beb16b0701..afc6b37639 100644 --- a/editor.planx.uk/src/@planx/components/Review/Public/Public.test.tsx +++ b/editor.planx.uk/src/@planx/components/Review/Public/Public.test.tsx @@ -1,5 +1,5 @@ import { act, screen, waitFor, within } from "@testing-library/react"; -import { FullStore, vanillaStore } from "pages/FlowEditor/lib/store"; +import { FullStore, useStore } from "pages/FlowEditor/lib/store"; import React from "react"; import { axe, setup } from "testUtils"; @@ -25,7 +25,7 @@ import { import { mockedBreadcrumbs, mockedFlow, mockedPassport } from "./mocks/simple"; import Review from "./Presentational"; -const { getState, setState } = vanillaStore; +const { getState, setState } = useStore; let initialState: FullStore; diff --git a/editor.planx.uk/src/@planx/components/Section/Public.tsx b/editor.planx.uk/src/@planx/components/Section/Public.tsx index 2b7831c3db..eab14c9496 100644 --- a/editor.planx.uk/src/@planx/components/Section/Public.tsx +++ b/editor.planx.uk/src/@planx/components/Section/Public.tsx @@ -33,7 +33,7 @@ export default function Component(props: Props) { state.breadcrumbs, state.cachedBreadcrumbs, state.changeAnswer, - state.currentCard(), + state.currentCard, state.currentSectionIndex, state.flow, state.flowName, diff --git a/editor.planx.uk/src/@planx/components/Send/Editor.tsx b/editor.planx.uk/src/@planx/components/Send/Editor.tsx index 9e1816982b..c7ca991d52 100644 --- a/editor.planx.uk/src/@planx/components/Send/Editor.tsx +++ b/editor.planx.uk/src/@planx/components/Send/Editor.tsx @@ -55,13 +55,17 @@ const SendComponent: React.FC = (props) => { value: Destination.Email, label: "Email to planning office", }, + { + value: Destination.S3, + label: "Upload to AWS S3 bucket", + }, ]; - // Show S3 option on staging only + // Show Nexus option on staging only if (process.env.REACT_APP_ENV !== "production") { options.push({ - value: Destination.S3, - label: "Upload to AWS S3 bucket", + value: Destination.Idox, + label: "Idox Nexus (testing only)", }); } diff --git a/editor.planx.uk/src/@planx/components/Send/Public.tsx b/editor.planx.uk/src/@planx/components/Send/Public.tsx index 8b8be0b35f..863f9a3341 100644 --- a/editor.planx.uk/src/@planx/components/Send/Public.tsx +++ b/editor.planx.uk/src/@planx/components/Send/Public.tsx @@ -96,6 +96,16 @@ const CreateSendEvents: React.FC = ({ ); } + if ( + destinations.includes(Destination.Idox) && + isReady && + props.handleSubmit + ) { + props.handleSubmit( + makeData(props, request.value.idox?.event_id, "idoxSendEventId"), + ); + } + if ( destinations.includes(Destination.Email) && isReady && diff --git a/editor.planx.uk/src/@planx/components/Send/model.ts b/editor.planx.uk/src/@planx/components/Send/model.ts index d5f9fd5a16..cd1082b4a5 100644 --- a/editor.planx.uk/src/@planx/components/Send/model.ts +++ b/editor.planx.uk/src/@planx/components/Send/model.ts @@ -4,6 +4,7 @@ import { MoreInformation, parseMoreInformation } from "../shared"; export enum Destination { BOPS = "bops", Uniform = "uniform", + Idox = "idox", Email = "email", S3 = "s3", } @@ -79,6 +80,13 @@ export function getCombinedEventsPayload({ }; } + if (destinations.includes(Destination.Idox)) { + combinedEventsPayload[Destination.Idox] = { + localAuthority: teamSlug, + body: { sessionId }, + }; + } + if (destinations.includes(Destination.S3)) { combinedEventsPayload[Destination.S3] = { localAuthority: teamSlug, diff --git a/editor.planx.uk/src/@planx/components/SetValue/Editor.tsx b/editor.planx.uk/src/@planx/components/SetValue/Editor.tsx index 30ffe0264a..b36c1e37f0 100644 --- a/editor.planx.uk/src/@planx/components/SetValue/Editor.tsx +++ b/editor.planx.uk/src/@planx/components/SetValue/Editor.tsx @@ -1,5 +1,8 @@ +import FormControl from "@mui/material/FormControl"; +import RadioGroup from "@mui/material/RadioGroup"; import Typography from "@mui/material/Typography"; import { ComponentType as TYPES } from "@opensystemslab/planx-core/types"; +import BasicRadio from "@planx/components/shared/Radio/BasicRadio"; import { EditorProps, InternalNotes } from "@planx/components/ui"; import { useFormik } from "formik"; import React from "react"; @@ -7,7 +10,6 @@ import ModalSection from "ui/editor/ModalSection"; import ModalSectionContent from "ui/editor/ModalSectionContent"; import Input from "ui/shared/Input"; import InputRow from "ui/shared/InputRow"; -import Radio from "ui/shared/Radio"; import { parseSetValue, SetValue } from "./model"; @@ -84,6 +86,11 @@ function SetValueComponent(props: Props) { }, }); + const handleRadioChange = (event: React.SyntheticEvent) => { + const target = event.target as HTMLInputElement; + formik.setFieldValue("operation", target.value); + }; + return (