From 46de65e69660f4d8d7460f6101ebc6b88c26cd65 Mon Sep 17 00:00:00 2001 From: Ian Jones <51156018+ianjon3s@users.noreply.github.com> Date: Tue, 4 Jun 2024 09:57:22 +0100 Subject: [PATCH 001/150] feat: Styled feedback table (#3208) --- .../components/Flow/FeedbackPage.tsx | 275 +++++++++++++++++- editor.planx.uk/src/routes/feedback.tsx | 2 + 2 files changed, 262 insertions(+), 15 deletions(-) diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Flow/FeedbackPage.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Flow/FeedbackPage.tsx index 59a2788649..625cc0656b 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Flow/FeedbackPage.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Flow/FeedbackPage.tsx @@ -1,22 +1,66 @@ +import CancelIcon from "@mui/icons-material/Cancel"; +import CheckCircleIcon from "@mui/icons-material/CheckCircle"; +import KeyboardArrowDown from "@mui/icons-material/KeyboardArrowDown"; +import KeyboardArrowUp from "@mui/icons-material/KeyboardArrowUp"; +import LightbulbIcon from "@mui/icons-material/Lightbulb"; +import MoreHorizIcon from "@mui/icons-material/MoreHoriz"; +import RuleIcon from "@mui/icons-material/Rule"; +import WarningIcon from "@mui/icons-material/Warning"; import Box from "@mui/material/Box"; -import Button from "@mui/material/Button"; +import Collapse from "@mui/material/Collapse"; +import Container from "@mui/material/Container"; +import IconButton from "@mui/material/IconButton"; +import { styled } from "@mui/material/styles"; +import Table from "@mui/material/Table"; +import TableBody from "@mui/material/TableBody"; +import TableCell from "@mui/material/TableCell"; +import TableContainer from "@mui/material/TableContainer"; +import TableHead from "@mui/material/TableHead"; +import TableRow from "@mui/material/TableRow"; +import Typography from "@mui/material/Typography"; +import { SummaryListTable } from "@planx/components/shared/Preview/SummaryList"; +import { format } from "date-fns"; import gql from "graphql-tag"; import { client } from "lib/graphql"; -import React from "react"; +import React, { useState } from "react"; import { Feedback } from "routes/feedback"; +import EditorRow from "ui/editor/EditorRow"; +import ReactMarkdownOrHtml from "ui/shared/ReactMarkdownOrHtml"; interface Props { feedback: Feedback[]; } +const Feed = styled(TableContainer)(() => ({ + maxHeight: "60vh", + overflow: "auto", + display: "flex", + flexDirection: "column-reverse", + readingOrder: "flex-visual", +})); + +const DetailedFeedback = styled(Box)(({ theme }) => ({ + fontSize: "1em", + margin: 1, + maxWidth: "100%", + padding: theme.spacing(2, 1), +})); + +const StyledSummaryListTable = styled(SummaryListTable)(() => ({ + "& p": { + margin: 0, + }, +})); + const GET_FEEDBACK_BY_ID_QUERY = gql` query GetFeedbackById($feedbackId: Int!) { feedback: feedback_summary(where: { feedback_id: { _eq: $feedbackId } }) { address createdAt: created_at - device + platform: device(path: "platform.type") + browser: device(path: "browser.name") feedbackId: feedback_id - feedbackType: feedback_type + type: feedback_type helpDefinition: help_definition helpSources: help_sources helpText: help_text @@ -46,20 +90,221 @@ const getDetailedFeedback = async (feedbackId: number) => { query: GET_FEEDBACK_BY_ID_QUERY, variables: { feedbackId }, }); - console.log(detailedFeedback); + + const combinedHelpText = [ + detailedFeedback.helpText, + detailedFeedback.helpDefinition, + detailedFeedback.helpSources, + ] + .filter(Boolean) + .join(" ") + .trim(); + const truncatedHelpText = + combinedHelpText.length > 65 + ? `${combinedHelpText.slice(0, 65)}...` + : combinedHelpText; + + return { + combinedHelp: truncatedHelpText, + ...detailedFeedback, + where: `${detailedFeedback.nodeType} — ${detailedFeedback.nodeTitle}`, + browserPlatform: `${detailedFeedback.browser} / ${detailedFeedback.platform}`, + }; +}; + +type FeedbackType = + | "issue" + | "idea" + | "comment" + | "inaccuracy" + | "helpful" + | "unhelpful"; + +const feedbackTypeIcon = (type: FeedbackType) => { + switch (type) { + case "issue": + return { icon: , title: "Issue" }; + case "idea": + return { icon: , title: "Idea" }; + case "comment": + return { icon: , title: "Comment" }; + case "helpful": + return { + icon: , + title: "Helpful (help text)", + }; + case "unhelpful": + return { + icon: , + title: "Unhelpful (help text)", + }; + default: + return { icon: , title: "inaccuracy" }; + } }; export const FeedbackPage: React.FC = ({ feedback }) => { + const displayFeedbackItems = [ + "userComment", + "address", + "projectType", + "where", + "browserPlatform", + ]; + + return ( + + + + + Feedback log + + + Feedback from users about this service. + + + + + + + *": { borderBottomColor: "black !important" } }} + > + + Type + + + Date + + + Comment + + + + + + {feedback.map((item) => ( + + ))} + +
+
+
+
+
+ ); +}; + +interface CollapsibleRowProps extends Feedback { + displayFeedbackItems: string[]; +} + +const CollapsibleRow: React.FC = (item) => { + const [open, setOpen] = useState(false); + const [detailedFeedback, setDetailedFeedback] = useState< + Record | undefined + >(undefined); + const { icon, title } = feedbackTypeIcon(item.type); + + const toggleDetailedFeedback = async () => { + setOpen(!open); + if (!open && !detailedFeedback) { + const fetchedData = await getDetailedFeedback(item.id); + setDetailedFeedback(fetchedData); + } + }; + + const commentSummary = item.userComment + ? item.userComment.length > 50 + ? `${item.userComment.slice(0, 50)}...` + : item.userComment + : "No comment"; + + const filteredFeedbackItems = (() => { + switch (item.type) { + case "issue": + return ["userContext", ...item.displayFeedbackItems]; + case "helpful": + case "unhelpful": + return ["combinedHelp", ...item.displayFeedbackItems]; + default: + return item.displayFeedbackItems; + } + })(); + + const labelMap: Record = { + userComment: item.type === "issue" ? "What went wrong?" : "User comment", + address: "Property address", + projectType: "Project type", + where: "Where", + browserPlatform: "Browser / device", + combinedHelp: "Help text (more information)", + userContext: "What were you doing?", + }; + + const renderContent = (key: string, value: any) => { + if (key === "combinedHelp" && value) { + return ; + } + return {String(value)}; + }; + return ( - - {feedback.map((item) => ( - - {JSON.stringify(item, null, 4)} - - - ))} - + + + + + {icon} {title} + + + + {format(new Date(item.createdAt), "dd/MM/yy hh:mm:ss")} + + {commentSummary} + + + {open ? : } + + + + theme.palette.background.paper }}> + + + `1px solid ${theme.palette.border.light}`, + padding: (theme) => theme.spacing(0, 1.5), + }} + > + + + {detailedFeedback && + filteredFeedbackItems + .filter((key) => detailedFeedback[key] !== null) + .map((key, index) => ( + + {labelMap[key]} + + {renderContent(key, detailedFeedback[key])} + + + ))} + + + + + + ); }; diff --git a/editor.planx.uk/src/routes/feedback.tsx b/editor.planx.uk/src/routes/feedback.tsx index 078223a994..c744505f73 100644 --- a/editor.planx.uk/src/routes/feedback.tsx +++ b/editor.planx.uk/src/routes/feedback.tsx @@ -20,6 +20,7 @@ export interface Feedback { userComment: string | null; userContext: string | null; createdAt: string; + address: string | null; } const feedbackRoutes = compose( @@ -56,6 +57,7 @@ const feedbackRoutes = compose( userComment: user_comment userContext: user_context createdAt: created_at + address } } `, From b6deccb803070ae0bd1b9c4f6c6b00d2828a6971 Mon Sep 17 00:00:00 2001 From: Jessica McInchak Date: Tue, 4 Jun 2024 11:50:25 +0200 Subject: [PATCH 002/150] fix: remove "real" council email extensions in tests (#3240) --- api.planx.uk/modules/send/email/index.test.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/api.planx.uk/modules/send/email/index.test.ts b/api.planx.uk/modules/send/email/index.test.ts index a50aefe3c0..537c7b69b2 100644 --- a/api.planx.uk/modules/send/email/index.test.ts +++ b/api.planx.uk/modules/send/email/index.test.ts @@ -49,7 +49,7 @@ describe(`sending an application by email to a planning office`, () => { data: { teams: [ { - sendToEmail: "planners@southwark.gov.uk", + sendToEmail: "planning.office.example@council.gov.uk", notifyPersonalisation: { emailReplyToId: "abc123" }, }, ], @@ -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", }); }); @@ -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) => { From 8ce0d2a5e1347e928b2ff5ee72f412e01b35a2f1 Mon Sep 17 00:00:00 2001 From: Jessica McInchak Date: Tue, 4 Jun 2024 13:18:07 +0200 Subject: [PATCH 003/150] chore: bump planx-core (#3243) --- api.planx.uk/package.json | 2 +- api.planx.uk/pnpm-lock.yaml | 47 +++--- e2e/tests/api-driven/package.json | 2 +- e2e/tests/api-driven/pnpm-lock.yaml | 47 +++--- e2e/tests/ui-driven/package.json | 2 +- e2e/tests/ui-driven/pnpm-lock.yaml | 46 +++--- editor.planx.uk/package.json | 2 +- editor.planx.uk/pnpm-lock.yaml | 247 ++++++++++++++++------------ 8 files changed, 223 insertions(+), 172 deletions(-) diff --git a/api.planx.uk/package.json b/api.planx.uk/package.json index 77b288f99e..8d783e2732 100644 --- a/api.planx.uk/package.json +++ b/api.planx.uk/package.json @@ -4,7 +4,7 @@ "private": true, "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#61750f0", "@types/isomorphic-fetch": "^0.0.36", "adm-zip": "^0.5.10", "aws-sdk": "^2.1467.0", diff --git a/api.planx.uk/pnpm-lock.yaml b/api.planx.uk/pnpm-lock.yaml index fdcf4ba37e..af28e4ecd6 100644 --- a/api.planx.uk/pnpm-lock.yaml +++ b/api.planx.uk/pnpm-lock.yaml @@ -12,8 +12,8 @@ dependencies: 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#61750f0 + version: github.com/theopensystemslab/planx-core/61750f0 '@types/isomorphic-fetch': specifier: ^0.0.36 version: 0.0.36 @@ -2324,7 +2324,7 @@ packages: - supports-color dev: false - /ajv-formats@2.1.1(ajv@8.13.0): + /ajv-formats@2.1.1(ajv@8.15.0): resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: ajv: ^8.0.0 @@ -2332,7 +2332,7 @@ packages: ajv: optional: true dependencies: - ajv: 8.13.0 + ajv: 8.15.0 dev: false /ajv@6.12.6: @@ -2343,13 +2343,13 @@ 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.15.0: + resolution: {integrity: sha512-15BTtQUOsSrmHCy+B4VnAiJAJxJ8IFgu6fcjFQF3jQYZ78nLSQthlFg4ehp+NLIyfvFgOlxNsjKIEhydtFPVHQ==} dependencies: fast-deep-equal: 3.1.3 + fast-uri: 2.3.0 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - uri-js: 4.4.1 dev: false /ansi-escapes@4.3.2: @@ -4100,6 +4100,10 @@ packages: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} dev: true + /fast-uri@2.3.0: + resolution: {integrity: sha512-eel5UKGn369gGEWOqBShmFJWfq/xSJvsgDzgLYC845GneayWvXBf0lJCBn5qTABfewy1ZDPoaR5OZCP+kssfuw==} + dev: false + /fast-url-parser@1.1.3: resolution: {integrity: sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==} dependencies: @@ -5602,8 +5606,8 @@ 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.0.5: + resolution: {integrity: sha512-JmHsbgY0KKo8Pw0HRXpGzAlZYxlu+M5kFhSzhNkUSrVJ4sCXPdAGIdSpzva5ev2/Kybz10S6AfnNdF4o3Pzt3A==} engines: {node: '>=16.0.0'} hasBin: true dependencies: @@ -5619,7 +5623,7 @@ packages: mkdirp: 3.0.1 mz: 2.7.0 node-fetch: 3.3.2 - prettier: 3.2.5 + prettier: 3.3.0 dev: false /json-schema-traverse@0.4.1: @@ -6670,8 +6674,8 @@ packages: hasBin: true dev: true - /prettier@3.2.5: - resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} + /prettier@3.3.0: + resolution: {integrity: sha512-J9odKxERhCQ10OC2yb93583f6UnYutOeiV5i0zEDS7UGTdUt0u+y8erxl3lBKvwo/JHyyoEdXjwp4dke9oyZ/g==} engines: {node: '>=14'} hasBin: true dev: false @@ -7871,8 +7875,8 @@ packages: engines: {node: '>=16'} dev: false - /type-fest@4.18.2: - resolution: {integrity: sha512-+suCYpfJLAe4OXS6+PPXjW3urOS4IoP9waSiLuXfLgqZODKw/aWwASvzqE886wA0kQgGy0mIWyhd87VpqIy6Xg==} + /type-fest@4.18.3: + resolution: {integrity: sha512-Q08/0IrpvM+NMY9PA2rti9Jb+JejTddwmwmVQGskAlhtcrw1wsRzoR6ode6mR+OAabNa75w/dxedSUY2mlphaQ==} engines: {node: '>=16'} dev: false @@ -8301,18 +8305,19 @@ 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/61750f0: + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/61750f0} 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) + ajv: 8.15.0 + ajv-formats: 2.1.1(ajv@8.15.0) cheerio: 1.0.0-rc.12 copyfiles: 2.4.1 docx: 8.5.0 @@ -8320,13 +8325,13 @@ packages: 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 + json-schema-to-typescript: 14.0.5 lodash: 4.17.21 marked: 12.0.2 - prettier: 3.2.5 + prettier: 3.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - type-fest: 4.18.2 + type-fest: 4.18.3 uuid: 9.0.1 zod: 3.23.8 transitivePeerDependencies: diff --git a/e2e/tests/api-driven/package.json b/e2e/tests/api-driven/package.json index 5421a8e761..ceba8adae6 100644 --- a/e2e/tests/api-driven/package.json +++ b/e2e/tests/api-driven/package.json @@ -6,7 +6,7 @@ }, "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#61750f0", "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..ddb65ef06d 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#61750f0 + version: github.com/theopensystemslab/planx-core/61750f0 axios: specifier: ^1.6.8 version: 1.6.8 @@ -780,7 +780,7 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - /ajv-formats@2.1.1(ajv@8.13.0): + /ajv-formats@2.1.1(ajv@8.15.0): resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: ajv: ^8.0.0 @@ -788,7 +788,7 @@ packages: ajv: optional: true dependencies: - ajv: 8.13.0 + ajv: 8.15.0 dev: false /ajv@6.12.6: @@ -800,13 +800,13 @@ packages: uri-js: 4.4.1 dev: false - /ajv@8.13.0: - resolution: {integrity: sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==} + /ajv@8.15.0: + resolution: {integrity: sha512-15BTtQUOsSrmHCy+B4VnAiJAJxJ8IFgu6fcjFQF3jQYZ78nLSQthlFg4ehp+NLIyfvFgOlxNsjKIEhydtFPVHQ==} dependencies: fast-deep-equal: 3.1.3 + fast-uri: 2.3.0 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - uri-js: 4.4.1 dev: false /ansi-regex@4.1.1: @@ -1454,6 +1454,10 @@ packages: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} dev: false + /fast-uri@2.3.0: + resolution: {integrity: sha512-eel5UKGn369gGEWOqBShmFJWfq/xSJvsgDzgLYC845GneayWvXBf0lJCBn5qTABfewy1ZDPoaR5OZCP+kssfuw==} + dev: false + /fast-xml-parser@4.4.0: resolution: {integrity: sha512-kLY3jFlwIYwBNDojclKsNAC12sfD6NwW74QB2CoNGPvtVxjliYehVunB3HYyNi+n4Tt1dAcgwYvmKF/Z18flqg==} hasBin: true @@ -1808,8 +1812,8 @@ 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.0.5: + resolution: {integrity: sha512-JmHsbgY0KKo8Pw0HRXpGzAlZYxlu+M5kFhSzhNkUSrVJ4sCXPdAGIdSpzva5ev2/Kybz10S6AfnNdF4o3Pzt3A==} engines: {node: '>=16.0.0'} hasBin: true dependencies: @@ -1825,7 +1829,7 @@ packages: mkdirp: 3.0.1 mz: 2.7.0 node-fetch: 3.3.2 - prettier: 3.2.5 + prettier: 3.3.0 dev: false /json-schema-traverse@0.4.1: @@ -2288,8 +2292,8 @@ packages: engines: {node: '>= 0.8.0'} dev: false - /prettier@3.2.5: - resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} + /prettier@3.3.0: + resolution: {integrity: sha512-J9odKxERhCQ10OC2yb93583f6UnYutOeiV5i0zEDS7UGTdUt0u+y8erxl3lBKvwo/JHyyoEdXjwp4dke9oyZ/g==} engines: {node: '>=14'} hasBin: true dev: false @@ -2460,6 +2464,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 @@ -2731,8 +2736,8 @@ packages: engines: {node: '>=10'} dev: false - /type-fest@4.18.2: - resolution: {integrity: sha512-+suCYpfJLAe4OXS6+PPXjW3urOS4IoP9waSiLuXfLgqZODKw/aWwASvzqE886wA0kQgGy0mIWyhd87VpqIy6Xg==} + /type-fest@4.18.3: + resolution: {integrity: sha512-Q08/0IrpvM+NMY9PA2rti9Jb+JejTddwmwmVQGskAlhtcrw1wsRzoR6ode6mR+OAabNa75w/dxedSUY2mlphaQ==} engines: {node: '>=16'} dev: false @@ -2935,8 +2940,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/61750f0: + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/61750f0} name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true @@ -2946,8 +2951,8 @@ packages: '@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) + ajv: 8.15.0 + ajv-formats: 2.1.1(ajv@8.15.0) cheerio: 1.0.0-rc.12 copyfiles: 2.4.1 docx: 8.5.0 @@ -2955,13 +2960,13 @@ packages: 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 + json-schema-to-typescript: 14.0.5 lodash: 4.17.21 marked: 12.0.2 - prettier: 3.2.5 + prettier: 3.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - type-fest: 4.18.2 + type-fest: 4.18.3 uuid: 9.0.1 zod: 3.23.8 transitivePeerDependencies: diff --git a/e2e/tests/ui-driven/package.json b/e2e/tests/ui-driven/package.json index 7957fa2819..49757ae8cc 100644 --- a/e2e/tests/ui-driven/package.json +++ b/e2e/tests/ui-driven/package.json @@ -8,7 +8,7 @@ "postinstall": "./install-dependencies.sh" }, "dependencies": { - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#5710d52", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#61750f0", "axios": "^1.6.8", "dotenv": "^16.3.1", "eslint": "^8.56.0", diff --git a/e2e/tests/ui-driven/pnpm-lock.yaml b/e2e/tests/ui-driven/pnpm-lock.yaml index 551c17f74f..062f7f44a8 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#61750f0 + version: github.com/theopensystemslab/planx-core/61750f0 axios: specifier: ^1.6.8 version: 1.6.8 @@ -601,7 +601,7 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - /ajv-formats@2.1.1(ajv@8.13.0): + /ajv-formats@2.1.1(ajv@8.15.0): resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: ajv: ^8.0.0 @@ -609,7 +609,7 @@ packages: ajv: optional: true dependencies: - ajv: 8.13.0 + ajv: 8.15.0 dev: false /ajv@6.12.6: @@ -629,13 +629,13 @@ packages: uri-js: 4.4.1 dev: false - /ajv@8.13.0: - resolution: {integrity: sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==} + /ajv@8.15.0: + resolution: {integrity: sha512-15BTtQUOsSrmHCy+B4VnAiJAJxJ8IFgu6fcjFQF3jQYZ78nLSQthlFg4ehp+NLIyfvFgOlxNsjKIEhydtFPVHQ==} dependencies: fast-deep-equal: 3.1.3 + fast-uri: 2.3.0 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - uri-js: 4.4.1 dev: false /ansi-align@3.0.1: @@ -1348,6 +1348,10 @@ packages: /fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + /fast-uri@2.3.0: + resolution: {integrity: sha512-eel5UKGn369gGEWOqBShmFJWfq/xSJvsgDzgLYC845GneayWvXBf0lJCBn5qTABfewy1ZDPoaR5OZCP+kssfuw==} + dev: false + /fast-url-parser@1.1.3: resolution: {integrity: sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==} dependencies: @@ -1686,8 +1690,8 @@ 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.0.5: + resolution: {integrity: sha512-JmHsbgY0KKo8Pw0HRXpGzAlZYxlu+M5kFhSzhNkUSrVJ4sCXPdAGIdSpzva5ev2/Kybz10S6AfnNdF4o3Pzt3A==} engines: {node: '>=16.0.0'} hasBin: true dependencies: @@ -1703,7 +1707,7 @@ packages: mkdirp: 3.0.1 mz: 2.7.0 node-fetch: 3.3.2 - prettier: 3.2.5 + prettier: 3.3.0 dev: false /json-schema-traverse@0.4.1: @@ -2145,8 +2149,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.0: + resolution: {integrity: sha512-J9odKxERhCQ10OC2yb93583f6UnYutOeiV5i0zEDS7UGTdUt0u+y8erxl3lBKvwo/JHyyoEdXjwp4dke9oyZ/g==} engines: {node: '>=14'} hasBin: true dev: false @@ -2529,8 +2533,8 @@ packages: engines: {node: '>=12.20'} dev: false - /type-fest@4.18.2: - resolution: {integrity: sha512-+suCYpfJLAe4OXS6+PPXjW3urOS4IoP9waSiLuXfLgqZODKw/aWwASvzqE886wA0kQgGy0mIWyhd87VpqIy6Xg==} + /type-fest@4.18.3: + resolution: {integrity: sha512-Q08/0IrpvM+NMY9PA2rti9Jb+JejTddwmwmVQGskAlhtcrw1wsRzoR6ode6mR+OAabNa75w/dxedSUY2mlphaQ==} engines: {node: '>=16'} dev: false @@ -2684,8 +2688,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/61750f0: + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/61750f0} name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true @@ -2695,8 +2699,8 @@ packages: '@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) + ajv: 8.15.0 + ajv-formats: 2.1.1(ajv@8.15.0) cheerio: 1.0.0-rc.12 copyfiles: 2.4.1 docx: 8.5.0 @@ -2704,13 +2708,13 @@ packages: 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 + json-schema-to-typescript: 14.0.5 lodash: 4.17.21 marked: 12.0.2 - prettier: 3.2.5 + prettier: 3.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - type-fest: 4.18.2 + type-fest: 4.18.3 uuid: 9.0.1 zod: 3.23.8 transitivePeerDependencies: diff --git a/editor.planx.uk/package.json b/editor.planx.uk/package.json index 7ea99be389..1122a7ee84 100644 --- a/editor.planx.uk/package.json +++ b/editor.planx.uk/package.json @@ -13,7 +13,7 @@ "@mui/material": "^5.15.2", "@mui/utils": "^5.15.2", "@opensystemslab/map": "^0.8.2", - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#550634a", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#61750f0", "@tiptap/core": "^2.4.0", "@tiptap/extension-bold": "^2.0.3", "@tiptap/extension-bubble-menu": "^2.1.13", diff --git a/editor.planx.uk/pnpm-lock.yaml b/editor.planx.uk/pnpm-lock.yaml index 0900ce846b..abf0a52cb6 100644 --- a/editor.planx.uk/pnpm-lock.yaml +++ b/editor.planx.uk/pnpm-lock.yaml @@ -41,8 +41,8 @@ dependencies: specifier: ^0.8.2 version: 0.8.2 '@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#61750f0 + version: github.com/theopensystemslab/planx-core/61750f0(@types/react@18.2.45) '@tiptap/core': specifier: ^2.4.0 version: 2.4.0(@tiptap/pm@2.0.3) @@ -3358,7 +3358,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 +3368,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 +3378,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 +3387,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 +3396,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 +3406,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 +3416,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 +3425,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 +3434,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 +3444,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 +3453,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 +3462,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 +3471,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 +3480,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 @@ -8971,6 +8971,17 @@ packages: dependencies: ajv: 8.13.0 + /ajv-formats@2.1.1(ajv@8.15.0): + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + dependencies: + ajv: 8.15.0 + dev: false + /ajv-keywords@3.5.2(ajv@6.12.6): resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} peerDependencies: @@ -9002,6 +9013,15 @@ packages: require-from-string: 2.0.2 uri-js: 4.4.1 + /ajv@8.15.0: + resolution: {integrity: sha512-15BTtQUOsSrmHCy+B4VnAiJAJxJ8IFgu6fcjFQF3jQYZ78nLSQthlFg4ehp+NLIyfvFgOlxNsjKIEhydtFPVHQ==} + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 2.3.0 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + dev: false + /ansi-escapes@4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} @@ -9297,7 +9317,7 @@ 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 @@ -10594,7 +10614,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 +10633,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 +10642,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 @@ -10696,7 +10716,7 @@ packages: engines: {node: ^12 || ^14 || >=16} hasBin: true peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.4 dependencies: postcss: 8.4.32 @@ -10779,7 +10799,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 +10836,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 +10844,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 @@ -12429,6 +12449,10 @@ packages: resolution: {integrity: sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw==} dev: false + /fast-uri@2.3.0: + resolution: {integrity: sha512-eel5UKGn369gGEWOqBShmFJWfq/xSJvsgDzgLYC845GneayWvXBf0lJCBn5qTABfewy1ZDPoaR5OZCP+kssfuw==} + dev: false + /fast-xml-parser@4.4.0: resolution: {integrity: sha512-kLY3jFlwIYwBNDojclKsNAC12sfD6NwW74QB2CoNGPvtVxjliYehVunB3HYyNi+n4Tt1dAcgwYvmKF/Z18flqg==} hasBin: true @@ -13485,7 +13509,7 @@ packages: resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.1.0 dependencies: postcss: 8.4.38 @@ -14882,8 +14906,8 @@ 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.0.5: + resolution: {integrity: sha512-JmHsbgY0KKo8Pw0HRXpGzAlZYxlu+M5kFhSzhNkUSrVJ4sCXPdAGIdSpzva5ev2/Kybz10S6AfnNdF4o3Pzt3A==} engines: {node: '>=16.0.0'} hasBin: true dependencies: @@ -14899,7 +14923,7 @@ packages: mkdirp: 3.0.1 mz: 2.7.0 node-fetch: 3.3.2 - prettier: 3.2.5 + prettier: 3.3.0 dev: false /json-schema-traverse@0.4.1: @@ -16715,7 +16739,7 @@ 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 @@ -16725,7 +16749,7 @@ packages: engines: {node: '>=8'} peerDependencies: browserslist: '>=4' - postcss: '>=8.4.31' + postcss: '>=8' dependencies: browserslist: 4.23.0 postcss: 8.4.32 @@ -16733,7 +16757,7 @@ packages: /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 +16767,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 +16776,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 +16785,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 +16794,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,7 +16803,7 @@ 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 caniuse-api: 3.0.0 @@ -16791,7 +16815,7 @@ 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 postcss: 8.4.32 @@ -16801,7 +16825,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 +16834,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 +16843,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 +16852,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 +16861,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 +16869,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 +16877,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 +16885,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 +16893,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 +16903,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 +16911,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 +16919,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 +16928,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 +16936,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 +16944,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 +16952,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 +16961,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 +16971,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 +16979,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 +16988,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 +16998,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: @@ -16990,7 +17014,7 @@ packages: 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 @@ -17003,7 +17027,7 @@ packages: 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 +17035,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 +17043,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,7 +17053,7 @@ 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 caniuse-api: 3.0.0 @@ -17041,7 +17065,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 +17074,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,7 +17085,7 @@ 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 cssnano-utils: 3.1.0(postcss@8.4.32) @@ -17072,7 +17096,7 @@ 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 @@ -17081,7 +17105,7 @@ packages: 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 @@ -17089,7 +17113,7 @@ packages: 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 @@ -17100,7 +17124,7 @@ packages: 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-selector-parser: 6.1.0 @@ -17109,7 +17133,7 @@ packages: 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 @@ -17118,7 +17142,7 @@ packages: 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 +17151,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 +17161,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 +17169,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 +17178,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 +17187,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 +17196,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 +17205,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,7 +17214,7 @@ 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 postcss: 8.4.32 @@ -17200,7 +17224,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,7 +17234,7 @@ 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 @@ -17220,7 +17244,7 @@ packages: engines: {node: '>= 12'} peerDependencies: browserslist: '>= 4' - postcss: '>=8.4.31' + postcss: '>= 8' dependencies: '@csstools/normalize.css': 12.1.1 browserslist: 4.23.0 @@ -17232,7 +17256,7 @@ packages: 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 +17264,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 +17274,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 +17282,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 +17290,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 +17299,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) @@ -17332,7 +17356,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,7 +17365,7 @@ 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 caniuse-api: 3.0.0 @@ -17351,7 +17375,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 +17383,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 +17391,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 +17407,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 +17417,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 @@ -17440,6 +17464,13 @@ packages: resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} engines: {node: '>=14'} hasBin: true + dev: true + + /prettier@3.3.0: + resolution: {integrity: sha512-J9odKxERhCQ10OC2yb93583f6UnYutOeiV5i0zEDS7UGTdUt0u+y8erxl3lBKvwo/JHyyoEdXjwp4dke9oyZ/g==} + engines: {node: '>=14'} + hasBin: true + dev: false /pretty-bytes@5.6.0: resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} @@ -19786,7 +19817,7 @@ 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 postcss: 8.4.32 @@ -20429,6 +20460,11 @@ packages: engines: {node: '>=16'} dev: false + /type-fest@4.18.3: + resolution: {integrity: sha512-Q08/0IrpvM+NMY9PA2rti9Jb+JejTddwmwmVQGskAlhtcrw1wsRzoR6ode6mR+OAabNa75w/dxedSUY2mlphaQ==} + engines: {node: '>=16'} + dev: false + /type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} @@ -21598,19 +21634,20 @@ packages: 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/61750f0(@types/react@18.2.45): + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/61750f0} + id: github.com/theopensystemslab/planx-core/61750f0 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) '@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.15.0 + ajv-formats: 2.1.1(ajv@8.15.0) cheerio: 1.0.0-rc.12 copyfiles: 2.4.1 docx: 8.5.0 @@ -21618,13 +21655,13 @@ packages: 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 + json-schema-to-typescript: 14.0.5 lodash: 4.17.21 marked: 12.0.2 - prettier: 3.2.5 + prettier: 3.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - type-fest: 4.18.2 + type-fest: 4.18.3 uuid: 9.0.1 zod: 3.23.8 transitivePeerDependencies: From 2deecd4b95589c76da90c6fff45a83d4fb825c5b Mon Sep 17 00:00:00 2001 From: Ian Jones <51156018+ianjon3s@users.noreply.github.com> Date: Tue, 4 Jun 2024 12:18:18 +0100 Subject: [PATCH 004/150] feat: Add feedback to menu (#3242) --- editor.planx.uk/src/components/Header.tsx | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/editor.planx.uk/src/components/Header.tsx b/editor.planx.uk/src/components/Header.tsx index f3aebd2141..00f9fc66ed 100644 --- a/editor.planx.uk/src/components/Header.tsx +++ b/editor.planx.uk/src/components/Header.tsx @@ -554,13 +554,22 @@ const EditorToolbar: React.FC<{ {/* Only show flow settings link if inside a flow route */} {isFlowSettingsVisible && ( - - navigate([rootFlowPath(true), "settings"].join("/")) - } - > - Flow Settings - + <> + + navigate([rootFlowPath(true), "settings"].join("/")) + } + > + Flow Settings + + + navigate([rootFlowPath(true), "feedback"].join("/")) + } + > + Feedback + + )} {/* Only show global settings & admin panel links from top-level view */} From e775650f2adaadb03158083846a0454aba32d8a0 Mon Sep 17 00:00:00 2001 From: Jessica McInchak Date: Tue, 4 Jun 2024 14:58:44 +0200 Subject: [PATCH 005/150] chore: bump planx-core (again) (#3245) --- api.planx.uk/package.json | 2 +- api.planx.uk/pnpm-lock.yaml | 8 +-- e2e/tests/api-driven/package.json | 2 +- e2e/tests/api-driven/pnpm-lock.yaml | 8 +-- e2e/tests/ui-driven/package.json | 2 +- e2e/tests/ui-driven/pnpm-lock.yaml | 8 +-- editor.planx.uk/package.json | 2 +- editor.planx.uk/pnpm-lock.yaml | 80 +++++++++++------------------ 8 files changed, 45 insertions(+), 67 deletions(-) diff --git a/api.planx.uk/package.json b/api.planx.uk/package.json index 8d783e2732..38ec0ab6de 100644 --- a/api.planx.uk/package.json +++ b/api.planx.uk/package.json @@ -4,7 +4,7 @@ "private": true, "dependencies": { "@airbrake/node": "^2.1.8", - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#61750f0", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#60b2ec7", "@types/isomorphic-fetch": "^0.0.36", "adm-zip": "^0.5.10", "aws-sdk": "^2.1467.0", diff --git a/api.planx.uk/pnpm-lock.yaml b/api.planx.uk/pnpm-lock.yaml index af28e4ecd6..a8075ddd34 100644 --- a/api.planx.uk/pnpm-lock.yaml +++ b/api.planx.uk/pnpm-lock.yaml @@ -12,8 +12,8 @@ dependencies: specifier: ^2.1.8 version: 2.1.8 '@opensystemslab/planx-core': - specifier: git+https://github.com/theopensystemslab/planx-core#61750f0 - version: github.com/theopensystemslab/planx-core/61750f0 + specifier: git+https://github.com/theopensystemslab/planx-core#60b2ec7 + version: github.com/theopensystemslab/planx-core/60b2ec7 '@types/isomorphic-fetch': specifier: ^0.0.36 version: 0.0.36 @@ -8305,8 +8305,8 @@ packages: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} dev: false - github.com/theopensystemslab/planx-core/61750f0: - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/61750f0} + github.com/theopensystemslab/planx-core/60b2ec7: + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/60b2ec7} name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true diff --git a/e2e/tests/api-driven/package.json b/e2e/tests/api-driven/package.json index ceba8adae6..c0ae3c9cb8 100644 --- a/e2e/tests/api-driven/package.json +++ b/e2e/tests/api-driven/package.json @@ -6,7 +6,7 @@ }, "dependencies": { "@cucumber/cucumber": "^9.3.0", - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#61750f0", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#60b2ec7", "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 ddb65ef06d..a8a93d3757 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#61750f0 - version: github.com/theopensystemslab/planx-core/61750f0 + specifier: git+https://github.com/theopensystemslab/planx-core#60b2ec7 + version: github.com/theopensystemslab/planx-core/60b2ec7 axios: specifier: ^1.6.8 version: 1.6.8 @@ -2940,8 +2940,8 @@ packages: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} dev: false - github.com/theopensystemslab/planx-core/61750f0: - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/61750f0} + github.com/theopensystemslab/planx-core/60b2ec7: + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/60b2ec7} name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true diff --git a/e2e/tests/ui-driven/package.json b/e2e/tests/ui-driven/package.json index 49757ae8cc..4b957fec96 100644 --- a/e2e/tests/ui-driven/package.json +++ b/e2e/tests/ui-driven/package.json @@ -8,7 +8,7 @@ "postinstall": "./install-dependencies.sh" }, "dependencies": { - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#61750f0", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#60b2ec7", "axios": "^1.6.8", "dotenv": "^16.3.1", "eslint": "^8.56.0", diff --git a/e2e/tests/ui-driven/pnpm-lock.yaml b/e2e/tests/ui-driven/pnpm-lock.yaml index 062f7f44a8..5bd1562a0c 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#61750f0 - version: github.com/theopensystemslab/planx-core/61750f0 + specifier: git+https://github.com/theopensystemslab/planx-core#60b2ec7 + version: github.com/theopensystemslab/planx-core/60b2ec7 axios: specifier: ^1.6.8 version: 1.6.8 @@ -2688,8 +2688,8 @@ packages: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} dev: false - github.com/theopensystemslab/planx-core/61750f0: - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/61750f0} + github.com/theopensystemslab/planx-core/60b2ec7: + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/60b2ec7} name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true diff --git a/editor.planx.uk/package.json b/editor.planx.uk/package.json index 1122a7ee84..89af7f88c9 100644 --- a/editor.planx.uk/package.json +++ b/editor.planx.uk/package.json @@ -13,7 +13,7 @@ "@mui/material": "^5.15.2", "@mui/utils": "^5.15.2", "@opensystemslab/map": "^0.8.2", - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#61750f0", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#60b2ec7", "@tiptap/core": "^2.4.0", "@tiptap/extension-bold": "^2.0.3", "@tiptap/extension-bubble-menu": "^2.1.13", diff --git a/editor.planx.uk/pnpm-lock.yaml b/editor.planx.uk/pnpm-lock.yaml index abf0a52cb6..0bb19dc6ca 100644 --- a/editor.planx.uk/pnpm-lock.yaml +++ b/editor.planx.uk/pnpm-lock.yaml @@ -41,8 +41,8 @@ dependencies: specifier: ^0.8.2 version: 0.8.2 '@opensystemslab/planx-core': - specifier: git+https://github.com/theopensystemslab/planx-core#61750f0 - version: github.com/theopensystemslab/planx-core/61750f0(@types/react@18.2.45) + specifier: git+https://github.com/theopensystemslab/planx-core#60b2ec7 + version: github.com/theopensystemslab/planx-core/60b2ec7(@types/react@18.2.45) '@tiptap/core': specifier: ^2.4.0 version: 2.4.0(@tiptap/pm@2.0.3) @@ -499,13 +499,13 @@ 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.15.0): resolution: {integrity: sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==} engines: {node: '>=10'} peerDependencies: ajv: '>=8' dependencies: - ajv: 8.13.0 + ajv: 8.15.0 json-schema: 0.4.0 jsonpointer: 5.0.1 leven: 3.1.0 @@ -6544,11 +6544,11 @@ packages: - supports-color dev: true - /@storybook/builder-manager@8.1.5(prettier@3.2.5): + /@storybook/builder-manager@8.1.5(prettier@3.3.0): resolution: {integrity: sha512-wDiHLV+UPaUN+765WwXkocVRB2QnJ61CjLHbpWaLiJvryFJt+JQ6nAvgSalCRnZxI046ztbS9T6okhpFI011IA==} dependencies: '@fal-works/esbuild-plugin-global-externals': 2.1.2 - '@storybook/core-common': 8.1.5(prettier@3.2.5) + '@storybook/core-common': 8.1.5(prettier@3.3.0) '@storybook/manager': 8.1.5 '@storybook/node-logger': 8.1.5 '@types/ejs': 3.1.5 @@ -6652,12 +6652,12 @@ packages: '@babel/types': 7.24.5 '@ndelangen/get-tarball': 3.0.9 '@storybook/codemod': 8.1.5 - '@storybook/core-common': 8.1.5(prettier@3.2.5) + '@storybook/core-common': 8.1.5(prettier@3.3.0) '@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/core-server': 8.1.5(prettier@3.3.0)(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/telemetry': 8.1.5(prettier@3.3.0) '@storybook/types': 8.1.5 '@types/semver': 7.5.8 '@yarnpkg/fslib': 2.10.3 @@ -6728,7 +6728,7 @@ packages: globby: 14.0.1 jscodeshift: 0.15.2(@babel/preset-env@7.24.5) lodash: 4.17.21 - prettier: 3.2.5 + prettier: 3.3.0 recast: 0.23.7 tiny-invariant: 1.3.3 transitivePeerDependencies: @@ -6796,7 +6796,7 @@ packages: - supports-color dev: true - /@storybook/core-common@8.1.5(prettier@3.2.5): + /@storybook/core-common@8.1.5(prettier@3.3.0): resolution: {integrity: sha512-1QDOT6KPZ9KV7Gs1yyqzvSwGBmNSUB33gckUldSBF4aqP+tZ7W5JIQ6/YTtp3V02sEokZGdL9Ud4LczQxTgy3A==} peerDependencies: prettier: ^2 || ^3 @@ -6825,8 +6825,8 @@ packages: 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.0 + prettier-fallback: /prettier@3.3.0 pretty-hrtime: 1.0.3 resolve-from: 5.0.0 semver: 7.6.2 @@ -6858,16 +6858,16 @@ packages: 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): + /@storybook/core-server@8.1.5(prettier@3.3.0)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-y16W2sg5KIHG6qgbd+a0nBUYHAgiUpPDFF7cdcIpbeOIoqFn+6ECp93MVefukumiSj3sQiJFU/tSm2A8apGltw==} dependencies: '@aw-web-design/x-default-browser': 1.4.126 '@babel/core': 7.24.5 '@babel/parser': 7.24.5 '@discoveryjs/json-ext': 0.5.7 - '@storybook/builder-manager': 8.1.5(prettier@3.2.5) + '@storybook/builder-manager': 8.1.5(prettier@3.3.0) '@storybook/channels': 8.1.5 - '@storybook/core-common': 8.1.5(prettier@3.2.5) + '@storybook/core-common': 8.1.5(prettier@3.3.0) '@storybook/core-events': 8.1.5 '@storybook/csf': 0.1.7 '@storybook/csf-tools': 8.1.5 @@ -6877,7 +6877,7 @@ packages: '@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/telemetry': 8.1.5(prettier@3.3.0) '@storybook/types': 8.1.5 '@types/detect-port': 1.3.5 '@types/diff': 5.2.1 @@ -7320,11 +7320,11 @@ packages: qs: 6.12.1 dev: true - /@storybook/telemetry@8.1.5(prettier@3.2.5): + /@storybook/telemetry@8.1.5(prettier@3.3.0): resolution: {integrity: sha512-QbB1Ox7oBaCvIF2TacFjPLi1XYeHxSPeZUuFXeE+tSMdvvWZzYLnXfj/oISmV6Q+X5VZfyJVMrZ2LfeW9CuFNg==} dependencies: '@storybook/client-logger': 8.1.5 - '@storybook/core-common': 8.1.5(prettier@3.2.5) + '@storybook/core-common': 8.1.5(prettier@3.3.0) '@storybook/csf-tools': 8.1.5 chalk: 4.1.2 detect-package-manager: 2.0.1 @@ -8961,16 +8961,6 @@ packages: indent-string: 4.0.0 dev: true - /ajv-formats@2.1.1(ajv@8.13.0): - resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true - dependencies: - ajv: 8.13.0 - /ajv-formats@2.1.1(ajv@8.15.0): resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: @@ -8980,7 +8970,6 @@ packages: optional: true dependencies: ajv: 8.15.0 - dev: false /ajv-keywords@3.5.2(ajv@6.12.6): resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} @@ -8989,12 +8978,12 @@ packages: dependencies: ajv: 6.12.6 - /ajv-keywords@5.1.0(ajv@8.13.0): + /ajv-keywords@5.1.0(ajv@8.15.0): resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} peerDependencies: ajv: ^8.8.2 dependencies: - ajv: 8.13.0 + ajv: 8.15.0 fast-deep-equal: 3.1.3 /ajv@6.12.6: @@ -9005,14 +8994,6 @@ packages: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - /ajv@8.13.0: - resolution: {integrity: sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==} - dependencies: - fast-deep-equal: 3.1.3 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - uri-js: 4.4.1 - /ajv@8.15.0: resolution: {integrity: sha512-15BTtQUOsSrmHCy+B4VnAiJAJxJ8IFgu6fcjFQF3jQYZ78nLSQthlFg4ehp+NLIyfvFgOlxNsjKIEhydtFPVHQ==} dependencies: @@ -9020,7 +9001,6 @@ packages: fast-uri: 2.3.0 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - dev: false /ansi-escapes@4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} @@ -12451,7 +12431,6 @@ packages: /fast-uri@2.3.0: resolution: {integrity: sha512-eel5UKGn369gGEWOqBShmFJWfq/xSJvsgDzgLYC845GneayWvXBf0lJCBn5qTABfewy1ZDPoaR5OZCP+kssfuw==} - dev: false /fast-xml-parser@4.4.0: resolution: {integrity: sha512-kLY3jFlwIYwBNDojclKsNAC12sfD6NwW74QB2CoNGPvtVxjliYehVunB3HYyNi+n4Tt1dAcgwYvmKF/Z18flqg==} @@ -17470,7 +17449,6 @@ packages: resolution: {integrity: sha512-J9odKxERhCQ10OC2yb93583f6UnYutOeiV5i0zEDS7UGTdUt0u+y8erxl3lBKvwo/JHyyoEdXjwp4dke9oyZ/g==} engines: {node: '>=14'} hasBin: true - dev: false /pretty-bytes@5.6.0: resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} @@ -19067,9 +19045,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.15.0 + ajv-formats: 2.1.1(ajv@8.15.0) + ajv-keywords: 5.1.0(ajv@8.15.0) /screenfull@5.2.0: resolution: {integrity: sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==} @@ -21292,7 +21270,7 @@ 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) + '@apideck/better-ajv-errors': 0.3.6(ajv@8.15.0) '@babel/core': 7.24.5 '@babel/preset-env': 7.24.5(@babel/core@7.24.5) '@babel/runtime': 7.24.5 @@ -21300,7 +21278,7 @@ packages: '@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.15.0 common-tags: 1.8.2 fast-json-stable-stringify: 2.1.0 fs-extra: 9.1.0 @@ -21634,9 +21612,9 @@ packages: use-sync-external-store: 1.2.0(react@18.2.0) dev: false - github.com/theopensystemslab/planx-core/61750f0(@types/react@18.2.45): - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/61750f0} - id: github.com/theopensystemslab/planx-core/61750f0 + github.com/theopensystemslab/planx-core/60b2ec7(@types/react@18.2.45): + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/60b2ec7} + id: github.com/theopensystemslab/planx-core/60b2ec7 name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true From 032999702109288297e1b93e0e77e7ea6679f1c9 Mon Sep 17 00:00:00 2001 From: Jessica McInchak Date: Wed, 5 Jun 2024 17:28:29 +0200 Subject: [PATCH 006/150] fix: list of flows should display and be sorted by most recent operations, not `flows.updated_at` (#3241) --- .../FlowEditor/components/Sidebar/index.tsx | 9 ++---- .../src/pages/FlowEditor/lib/store/editor.ts | 14 ++++---- editor.planx.uk/src/pages/FlowEditor/utils.ts | 5 ++- editor.planx.uk/src/pages/Team.tsx | 32 +++++++++++-------- 4 files changed, 31 insertions(+), 29 deletions(-) diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Sidebar/index.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Sidebar/index.tsx index 378f411aa6..978dbed22d 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Sidebar/index.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Sidebar/index.tsx @@ -25,12 +25,12 @@ import Tooltip from "@mui/material/Tooltip"; import Typography from "@mui/material/Typography"; import { ComponentType as TYPES } from "@opensystemslab/planx-core/types"; import { AxiosError } from "axios"; -import formatDistanceToNow from "date-fns/formatDistanceToNow"; import React, { useState } from "react"; import { useAsync } from "react-use"; import Caret from "ui/icons/Caret"; import Input from "ui/shared/Input"; +import { formatLastPublishMessage } from "pages/FlowEditor/utils"; import Questions from "../../../Preview/Questions"; import { useStore } from "../../lib/store"; import EditHistory from "./EditHistory"; @@ -124,9 +124,6 @@ const StyledTab = styled(Tab)(({ theme }) => ({ }, })) as typeof Tab; -const formatLastPublish = (date: string, user: string) => - `Last published ${formatDistanceToNow(new Date(date))} ago by ${user}`; - const DebugConsole = () => { const [passport, breadcrumbs, flowId, cachedBreadcrumbs] = useStore( (state) => [ @@ -203,7 +200,7 @@ const AlteredNestedFlowListItem = (props: Portal) => { const _nestedFlowLastPublishedRequest = useAsync(async () => { const user = await lastPublisher(flowId); - setNestedFlowLastPublishedTitle(formatLastPublish(publishedAt, user)); + setNestedFlowLastPublishedTitle(formatLastPublishMessage(publishedAt, user)); }); return ( @@ -402,7 +399,7 @@ const Sidebar: React.FC<{ const date = await lastPublished(flowId); const user = await lastPublisher(flowId); - setLastPublishedTitle(formatLastPublish(date, user)); + setLastPublishedTitle(formatLastPublishMessage(date, user)); }); const _validateAndDiffRequest = useAsync(async () => { diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/store/editor.ts b/editor.planx.uk/src/pages/FlowEditor/lib/store/editor.ts index e24638d7b8..21ac46dc07 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/store/editor.ts +++ b/editor.planx.uk/src/pages/FlowEditor/lib/store/editor.ts @@ -272,17 +272,15 @@ export const editorStore: StateCreator< const { data } = await client.query({ query: gql` query GetFlow($teamId: Int!) { - flows( - order_by: { updated_at: desc } - where: { team: { id: { _eq: $teamId } } } - ) { + flows(where: { team: { id: { _eq: $teamId } } }) { id slug - updated_at - operations(limit: 1, order_by: { id: desc }) { + updatedAt: updated_at + operations(limit: 1, order_by: { created_at: desc }) { + createdAt: created_at actor { - first_name - last_name + firstName: first_name + lastName: last_name } } } diff --git a/editor.planx.uk/src/pages/FlowEditor/utils.ts b/editor.planx.uk/src/pages/FlowEditor/utils.ts index b79faf3be0..19873545a2 100644 --- a/editor.planx.uk/src/pages/FlowEditor/utils.ts +++ b/editor.planx.uk/src/pages/FlowEditor/utils.ts @@ -17,4 +17,7 @@ export const formatLastEditMessage = ( const name = `${actor.firstName} ${actor.lastName}`; return `Last edited ${formatLastEditDate(date)} by ${name}`; -}; \ No newline at end of file +}; + +export const formatLastPublishMessage = (date: string, user: string): string => + `Last published ${formatLastEditDate(date)} ago by ${user}`; diff --git a/editor.planx.uk/src/pages/Team.tsx b/editor.planx.uk/src/pages/Team.tsx index 7bd90a1776..ff905889e7 100644 --- a/editor.planx.uk/src/pages/Team.tsx +++ b/editor.planx.uk/src/pages/Team.tsx @@ -12,7 +12,7 @@ import DialogContentText from "@mui/material/DialogContentText"; import DialogTitle from "@mui/material/DialogTitle"; import { styled } from "@mui/material/styles"; import Typography from "@mui/material/Typography"; -import formatDistanceToNow from "date-fns/formatDistanceToNow"; +import orderBy from "lodash/orderBy"; import React, { useCallback, useEffect, useState } from "react"; import { Link, useNavigation } from "react-navi"; import { FONT_WEIGHT_SEMI_BOLD } from "theme"; @@ -21,6 +21,7 @@ import { slugify } from "utils"; import { client } from "../lib/graphql"; import SimpleMenu from "../ui/editor/SimpleMenu"; import { useStore } from "./FlowEditor/lib/store"; +import { formatLastEditMessage } from "./FlowEditor/utils"; const Root = styled(Box)(({ theme }) => ({ backgroundColor: theme.palette.background.dark, @@ -75,17 +76,6 @@ const LinkSubText = styled(Box)(() => ({ }, })); -const flowInfoHelper = (time: any, operations: any[] = []) => { - let str = `Edited ${formatDistanceToNow(new Date(time))} ago`; - // there will always be an user attached to every sharedb - // operation soon, so the if statement won't be necessary - if (operations[0]?.actor) { - const { first_name, last_name } = operations[0].actor; - str += ` by ${first_name} ${last_name}`; - } - return str; -}; - const Confirm = ({ title, content, @@ -206,7 +196,10 @@ const FlowItem: React.FC = ({ {flow.slug} - {flowInfoHelper(flow.updated_at, flow.operations)} + {formatLastEditMessage( + flow.operations[0].createdAt, + flow.operations[0]?.actor, + )} {useStore.getState().canUserEditTeam(teamSlug) && ( @@ -286,17 +279,28 @@ const Team: React.FC = () => { const { id: teamId, slug } = useStore((state) => state.getTeam()); const [flows, setFlows] = useState(null); const navigation = useNavigation(); + const fetchFlows = useCallback(() => { useStore .getState() .getFlows(teamId) .then((res: { flows: any[] }) => { - setFlows(res.flows); + // Copy the array and sort by most recently edited desc using last associated operation.createdAt, not flow.updatedAt + const sortedFlows = res.flows + .slice() + .sort((a, b) => + b.operations[0]["createdAt"].localeCompare( + a.operations[0]["createdAt"], + ), + ); + setFlows(sortedFlows); }); }, [teamId, setFlows]); + useEffect(() => { fetchFlows(); }, [fetchFlows]); + return ( From dede8654e664094817c366c34c6ea14b58ce62c4 Mon Sep 17 00:00:00 2001 From: Jessica McInchak Date: Wed, 5 Jun 2024 22:28:58 +0200 Subject: [PATCH 007/150] fix: use `toSorted()` to copy & sort instead of `slice().sort()` (#3247) --- editor.planx.uk/src/pages/Team.tsx | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/editor.planx.uk/src/pages/Team.tsx b/editor.planx.uk/src/pages/Team.tsx index ff905889e7..0de4b82836 100644 --- a/editor.planx.uk/src/pages/Team.tsx +++ b/editor.planx.uk/src/pages/Team.tsx @@ -286,13 +286,11 @@ const Team: React.FC = () => { .getFlows(teamId) .then((res: { flows: any[] }) => { // Copy the array and sort by most recently edited desc using last associated operation.createdAt, not flow.updatedAt - const sortedFlows = res.flows - .slice() - .sort((a, b) => - b.operations[0]["createdAt"].localeCompare( - a.operations[0]["createdAt"], - ), - ); + const sortedFlows = res.flows.toSorted((a, b) => + b.operations[0]["createdAt"].localeCompare( + a.operations[0]["createdAt"], + ), + ); setFlows(sortedFlows); }); }, [teamId, setFlows]); From 9f0f1f6d073731aee7daf7637420781d98ec8a66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Thu, 6 Jun 2024 08:43:33 +0100 Subject: [PATCH 008/150] feat: List component - form validation and values (#3217) Co-authored-by: Jessica McInchak Co-authored-by: Ian Jones --- .../src/@planx/components/List/Editor.tsx | 5 +- .../@planx/components/List/Public/Context.tsx | 145 ++++++++-- .../@planx/components/List/Public/Fields.tsx | 254 +++++++++++------- .../components/List/Public/index.test.tsx | 246 ++++++++++------- .../@planx/components/List/Public/index.tsx | 137 ++++++---- .../src/@planx/components/List/model.ts | 85 ++++-- .../List/schemas/ResidentialUnits.ts | 73 +++++ .../@planx/components/NumberInput/Public.tsx | 27 +- .../@planx/components/NumberInput/model.ts | 30 +++ .../@planx/components/TextInput/Public.tsx | 2 +- .../src/@planx/components/TextInput/model.ts | 2 +- editor.planx.uk/src/theme.ts | 2 +- 12 files changed, 690 insertions(+), 318 deletions(-) create mode 100644 editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits.ts diff --git a/editor.planx.uk/src/@planx/components/List/Editor.tsx b/editor.planx.uk/src/@planx/components/List/Editor.tsx index d2975e52ed..bd1f6340f8 100644 --- a/editor.planx.uk/src/@planx/components/List/Editor.tsx +++ b/editor.planx.uk/src/@planx/components/List/Editor.tsx @@ -13,13 +13,14 @@ import InputRowLabel from "ui/shared/InputRowLabel"; import { EditorProps, ICONS, InternalNotes, MoreInformation } from "../ui"; import { List, parseContent } from "./model"; +import { ResidentialUnits } from "./schemas/ResidentialUnits"; import { Zoo } from "./schemas/Zoo"; type Props = EditorProps; export const SCHEMAS = [ - { name: "Zoo", schema: Zoo }, - // TODO: Residential units + { name: "Residential Units (alpha)", schema: ResidentialUnits }, + { name: "Zoo (test)", schema: Zoo }, // TODO: Residential units (GLA) ]; 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..e71a7b1363 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,162 @@ -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, +} from "../model"; 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; + 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 [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); + + // 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) { + setActiveIndex(-1); + setAddItemError(false); + } + }; const removeItem = (index: number) => { + resetErrors(); + if (activeIndex && index < activeIndex) { // If item is before currently active card, retain active card - setActiveIndex((prev) => (prev === undefined ? 0 : prev - 1)); + setActiveIndex((prev) => (prev === -1 ? 0 : prev - 1)); } else if (index === activeIndex || index === 0) { // If item is currently in Edit mode, exit Edit mode cancelEditItem(); } // Remove item from userData - setUserData((prev) => prev.filter((_, i) => i !== index)); + formik.setFieldValue( + "userData", + formik.values.userData.filter((_, i) => i !== index), + ); + }; + + const validateAndSubmitForm = () => { + // Do not allow submissions with an unsaved item + if (activeIndex !== -1) return setUnsavedItemError(true); + + // Manually validate min/max + if (formik.values.userData.length < schema.min) { + return setMinError(true); + } + if (schema.max && formik.values.userData.length > schema.max) { + return setMaxError(true); + } + formik.handleSubmit(); + }; + + const cancelEditItem = () => setActiveIndex(-1); + + const editItem = (index: number) => setActiveIndex(index); + + const getInitialValues = () => { + const previousValues = getPreviouslySubmittedData(props); + if (previousValues) return previousValues; + + return schema.min ? [generateInitialValues(schema)] : []; }; - const cancelEditItem = () => setActiveIndex(undefined); + const formik = useFormik({ + initialValues: { + userData: getInitialValues(), + }, + onSubmit: (values) => { + handleSubmit?.(makeData(props, values.userData)); + }, + 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..36d0812e05 100644 --- a/editor.planx.uk/src/@planx/components/List/Public/Fields.tsx +++ b/editor.planx.uk/src/@planx/components/List/Public/Fields.tsx @@ -3,15 +3,19 @@ import FormControl from "@mui/material/FormControl"; import FormLabel from "@mui/material/FormLabel"; import MenuItem from "@mui/material/MenuItem"; import RadioGroup from "@mui/material/RadioGroup"; +import { Option } from "@planx/components/shared"; +import { getIn } from "formik"; import React from "react"; import SelectInput from "ui/editor/SelectInput"; import InputLabel from "ui/public/InputLabel"; +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 { useListContext } from "./Context"; type Props = T & { id: string }; @@ -19,119 +23,179 @@ 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(" "), - }} - /> - -); +}) => { + 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={getIn( + formik.errors, + `userData[${activeIndex}][${data.fn}]`, + )} + id={id} + rows={ + data.type && ["long", "extraLong"].includes(data.type) ? 5 : undefined + } + name={`userData[${activeIndex}][${data.fn}]`} + required={required} inputProps={{ "aria-describedby": [ data.description ? DESCRIPTION_TEXT : "", - // formik.errors.value ? `${ERROR_MESSAGE}-${props.id}` : "", + getIn(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} - - {/* */} - { + const { formik, activeIndex } = useListContext(); + + return ( + - {data.options.map(({ id, data }) => ( - + console.log("change radio")} /> - ))} - - {/* */} - -); + {data.units && {data.units}} + + + ); +}; -export const SelectFieldInput: React.FC> = ({ +export const RadioFieldInput: React.FC> = ({ id, data, required, -}) => ( - - { + const { formik, activeIndex } = useListContext(); + + return ( + + ({ + color: theme.palette.text.primary, + "&.Mui-focused": { + color: theme.palette.text.primary, + }, + })} + > + {required === false ? data.title + " (optional)" : data.title} + + + + {data.options.map(({ id, data }) => ( + + ))} + + + + ); +}; + +export const SelectFieldInput: React.FC> = (props) => { + const { formik, activeIndex } = useListContext(); + const { id, data, required } = props; + + const isDisabled = (option: Option) => { + if (!props.unique) return false; + + const existingValues = formik.values.userData + .map((response) => response[data.fn]) + .filter((value) => value === option.data.text); + + return existingValues.includes(option.data.text); + }; + + return ( + - {data.options.map((option) => ( - - {option.data.text} - - ))} - - -); + + + {data.options.map((option) => ( + + {option.data.text} + + ))} + + + + ); +}; 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..ee9178be5c 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,4 +1,5 @@ -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"; @@ -7,13 +8,36 @@ import ListComponent, { Props } from "../Public"; import { Zoo } from "../schemas/Zoo"; const mockProps: Props = { - fn: "mock", + fn: "mockFn", schema: Zoo, schemaName: "Zoo", title: "Mock Title", description: "Mock description", }; +const mockPayload = { + data: { + mockFn: [ + { + age: 10, + cuteness: "Very", + email: "richard.parker@pi.com", + name: "Richard Parker", + size: "Medium", + }, + { + age: 10, + cuteness: "Very", + email: "richard.parker@pi.com", + name: "Richard Parker", + size: "Medium", + }, + ], + }, +}; + +jest.setTimeout(20_000); + describe("Basic UI", () => { it("renders correctly", () => { const { getByText } = setup(); @@ -96,14 +120,10 @@ describe("Basic UI", () => { }); }); -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 { queryByRole, getByTestId } = setup( , ); @@ -115,9 +135,7 @@ 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(); }); @@ -141,24 +159,20 @@ describe("Building a list", () => { }); test("Adding an item", async () => { - const { getAllByRole, getByRole, user } = setup( + const { getAllByTestId, getByTestId, user } = setup( , ); - let cards = getAllByRole("heading", { level: 2 }).map((el) => - el.closest("div"), - ); + 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 +191,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 +232,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 +242,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 +289,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 +304,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 +317,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 +339,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 @@ -367,12 +350,83 @@ describe("Building a list", () => { }); 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.todo("form validation is triggered when saving an item"); + test.todo("text fields use existing validation schemas"); + test.todo("number fields use existing validation schemas"); + test.todo("question fields use validation schema"); + test.todo("unique constraints are enforced on question where this is set"); + test.todo("an error displays if the minimum number of items is not met"); + test.todo("an error displays if the maximum number of items is exceeded"); + test.todo( + "an error displays if you add a new item, without saving the active item", + ); + test.todo( + "an error displays if you continue, without saving the active item", + ); }); describe("Payload generation", () => { - it.todo("generates a valid payload on submission"); + it("generates a valid payload on submission", 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(mockPayload); + }); }); + +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 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..99b8cfc99c 100644 --- a/editor.planx.uk/src/@planx/components/List/Public/index.tsx +++ b/editor.planx.uk/src/@planx/components/List/Public/index.tsx @@ -11,6 +11,7 @@ import Typography from "@mui/material/Typography"; import { PublicProps } from "@planx/components/ui"; import React 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"; @@ -44,8 +45,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": @@ -63,61 +64,64 @@ const InputField: React.FC = (props) => { const ActiveListCard: React.FC<{ index: number; }> = ({ index }) => { - const { schema, saveItem, cancelEditItem } = useListContext(); + const { schema, saveItem, cancelEditItem, errors } = useListContext(); return ( - // TODO: This should be a HTML form - - - {schema.type} {index + 1} - - {schema.fields.map((field, i) => ( - - - - ))} - - - - - + + + + {schema.type} {index + 1} + + {schema.fields.map((field, i) => ( + + + + ))} + + + + + + ); }; const InactiveListCard: React.FC<{ index: number; -}> = ({ index }) => { - const { schema, userData, removeItem, editItem } = useListContext(); +}> = ({ index: i }) => { + const { schema, formik, removeItem, editItem } = useListContext(); return ( - + - {schema.type} {index + 1} + {schema.type} {i + 1} - {schema.fields.map((field, i) => ( - + {schema.fields.map((field, j) => ( + {field.data.title} - {userData[index][i]?.val} + {formik.values.userData[i][field.data.fn]} ))}
- removeItem(index)}> + removeItem(i)}> Remove - editItem(index)}> + editItem(i)}> {/* TODO: Is primary colour really right here? */} Edit @@ -127,11 +131,26 @@ 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)`) || + ""; return ( - console.log({ userData })} isValid> + { policyRef={policyRef} howMeasured={howMeasured} /> - {userData.map((_, i) => - i === activeIndex ? ( - - ) : ( - - ), - )} - + + <> + {formik.values.userData.map((_, i) => + i === activeIndex ? ( + + ) : ( + + ), + )} + + + + + ); }; 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..f2734ccbe0 100644 --- a/editor.planx.uk/src/@planx/components/List/model.ts +++ b/editor.planx.uk/src/@planx/components/List/model.ts @@ -1,10 +1,17 @@ -import { NumberInput } from "../NumberInput/model"; +import { cloneDeep } from "lodash"; +import { array, BaseSchema, object, ObjectSchema, string } from "yup"; + +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,6 +20,14 @@ interface QuestionInput { options: Option[]; } +/** + * As above, we need a simplified validation schema for QuestionsInputs + */ +const questionInputValidationSchema = (data: QuestionInput) => + string() + .oneOf(data.options.map((option) => option.data.text)) + .required("Select your answer before continuing"); + // TODO: Add summary fields for inactive view? export type TextField = { type: "text"; @@ -27,6 +42,7 @@ export type NumberField = { export type QuestionField = { type: "question"; required?: boolean; + unique?: boolean; data: QuestionInput & { fn: string }; }; @@ -46,6 +62,10 @@ export interface Schema { max?: number; } +type UserResponse = Record; + +export type UserData = { userData: UserResponse[] }; + export interface List extends MoreInformation { fn: string; title: string; @@ -59,24 +79,55 @@ export const parseContent = (data: Record | undefined): List => ({ 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; + } + }); -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) => (initialValues[field.data.fn] = "")); + return initialValues; }; diff --git a/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits.ts b/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits.ts new file mode 100644 index 0000000000..27268f8d46 --- /dev/null +++ b/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits.ts @@ -0,0 +1,73 @@ +import { Schema } from "../model"; + +export const ResidentialUnits: Schema = { + type: "Residential Units", + fields: [ + { + type: "question", + data: { + title: "What type of change are you making?", + fn: "changeType", + options: [ + { id: "proposed", data: { text: "Proposed" } }, + { id: "existing", data: { text: "Existing" } }, + ], + }, + }, + { + type: "question", + unique: true, + data: { + title: "What is the tenure type?", + fn: "tenureType", + options: [ + { id: "marketHousing", data: { text: "Market housing" } }, + { + id: "socialAffordableRent", + data: { text: "Social and affordable rent" }, + }, + { + id: "affordableHomeOwnership", + data: { text: "Affordable home ownership" }, + }, + { id: "starterHome", data: { text: "Starter homes" } }, + { id: "selfBuild", data: { text: "Self build" } }, + ], + }, + }, + { + type: "question", + data: { + title: "What is the unit type?", + fn: "unitType", + options: [ + { id: "houses", data: { text: "Houses" } }, + { id: "flats", data: { text: "Flats" } }, + { id: "bedsits", data: { text: "Bedsits" } }, + { id: "starterHome", data: { text: "Starter homes" } }, + { id: "shelteredHousing", data: { text: "Sheltered housing" } }, + { id: "clusteredFlats", data: { text: "Clustered flats" } }, + { id: "other", data: { text: "Other" } }, + ], + }, + }, + { + type: "number", + data: { + title: "How many bedrooms are there?", + fn: "numberBedrooms", + allowNegatives: false, + }, + }, + { + type: "number", + data: { + title: + "How many residential units does the description above apply to?", + fn: "numberIdenticalUnits", + allowNegatives: false, + }, + }, + ], + min: 1, +} as const; 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/TextInput/Public.tsx b/editor.planx.uk/src/@planx/components/TextInput/Public.tsx index 6bf7ac1080..c23de13a14 100644 --- a/editor.planx.uk/src/@planx/components/TextInput/Public.tsx +++ b/editor.planx.uk/src/@planx/components/TextInput/Public.tsx @@ -27,7 +27,7 @@ const TextInputComponent: React.FC = (props) => { validateOnBlur: false, validateOnChange: false, validationSchema: object({ - text: userDataSchema(props.type), + text: userDataSchema(props), }), }); diff --git a/editor.planx.uk/src/@planx/components/TextInput/model.ts b/editor.planx.uk/src/@planx/components/TextInput/model.ts index 64a67e2376..4d913f659f 100644 --- a/editor.planx.uk/src/@planx/components/TextInput/model.ts +++ b/editor.planx.uk/src/@planx/components/TextInput/model.ts @@ -16,7 +16,7 @@ export const emailRegex = // eslint-disable-next-line /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; -export const userDataSchema = (type?: TextInputType): SchemaOf => +export const userDataSchema = ({ type }: TextInput): SchemaOf => string() .required("Enter your answer before continuing") .test({ diff --git a/editor.planx.uk/src/theme.ts b/editor.planx.uk/src/theme.ts index 69dbb6c177..f94145a3b8 100644 --- a/editor.planx.uk/src/theme.ts +++ b/editor.planx.uk/src/theme.ts @@ -457,7 +457,7 @@ const getThemeOptions = ({ color: palette.text.primary, border: "2px solid currentcolor", borderRadius: "50%", - background: "rgba(0,0,0,0)", + backgroundColor: "#FFF", }, "&::after": { // Styles for radio icon dot From 300de777580b867791fa308aba52172e86f96add Mon Sep 17 00:00:00 2001 From: Jessica McInchak Date: Thu, 6 Jun 2024 10:00:13 +0200 Subject: [PATCH 009/150] feat: add flattened passport structure for List items that is compatible with Calculate (#3249) --- .../@planx/components/List/Public/Context.tsx | 20 ++++- .../components/List/Public/index.test.tsx | 12 +++ .../src/@planx/components/List/utils.ts | 87 +++++++++++++++++++ 3 files changed, 118 insertions(+), 1 deletion(-) create mode 100644 editor.planx.uk/src/@planx/components/List/utils.ts 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 e71a7b1363..6bdb461dd8 100644 --- a/editor.planx.uk/src/@planx/components/List/Public/Context.tsx +++ b/editor.planx.uk/src/@planx/components/List/Public/Context.tsx @@ -18,6 +18,7 @@ import { Schema, UserData, } from "../model"; +import { flatten } from "../utils"; interface ListContextValue { schema: Schema; @@ -131,7 +132,24 @@ export const ListProvider: React.FC = (props) => { userData: getInitialValues(), }, onSubmit: (values) => { - handleSubmit?.(makeData(props, values.userData)); + // defaultPassportData 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); + + // basic example of general summary stats we can add onSubmit + const summaries = { + [`${props.fn}.count`]: defaultPassportData[`${props.fn}`].length, + }; + + handleSubmit?.({ + data: { + ...defaultPassportData, + ...flattenedPassportData, + ...summaries, + }, + }); }, validateOnBlur: false, validateOnChange: false, 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 ee9178be5c..83073e6250 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 @@ -33,6 +33,17 @@ const mockPayload = { size: "Medium", }, ], + "mockFn.one.age": 10, + "mockFn.one.cuteness": "Very", + "mockFn.one.email": "richard.parker@pi.com", + "mockFn.one.name": "Richard Parker", + "mockFn.one.size": "Medium", + "mockFn.two.age": 10, + "mockFn.two.cuteness": "Very", + "mockFn.two.email": "richard.parker@pi.com", + "mockFn.two.name": "Richard Parker", + "mockFn.two.size": "Medium", + "mockFn.count": 2, }, }; @@ -355,6 +366,7 @@ describe("Form validation and error handling", () => { test.todo("number fields use existing validation schemas"); test.todo("question fields use validation schema"); test.todo("unique constraints are enforced on question where this is set"); + test.todo("optional fields can be empty when saving an item"); test.todo("an error displays if the minimum number of items is not met"); test.todo("an error displays if the maximum number of items is exceeded"); test.todo( diff --git a/editor.planx.uk/src/@planx/components/List/utils.ts b/editor.planx.uk/src/@planx/components/List/utils.ts new file mode 100644 index 0000000000..231f676f76 --- /dev/null +++ b/editor.planx.uk/src/@planx/components/List/utils.ts @@ -0,0 +1,87 @@ +// 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, + path: string | null = null, + separator = ".", +): 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 + ? { ...acc, ...flatten(value, newPath, separator) } + : { ...acc, [newPath]: value }; + }, {} as T); +} + +// 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 +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]; + } +} + +function convertNumberToText(num: number): string { + if (num == 0) { + return "zero"; + } else { + return convertTens(num); + } +} From 94220d6ecee693188468713d35c411386ecf7b64 Mon Sep 17 00:00:00 2001 From: Jessica McInchak Date: Thu, 6 Jun 2024 21:45:04 +0200 Subject: [PATCH 010/150] chore: split residential unit List component schemas into six options (#3250) --- .../@planx/components/Checklist/Public.tsx | 1 - .../src/@planx/components/List/Editor.tsx | 24 +- .../@planx/components/List/Public/Context.tsx | 10 +- .../@planx/components/List/Public/Fields.tsx | 7 +- .../components/List/Public/index.test.tsx | 2 +- .../@planx/components/List/Public/index.tsx | 4 +- .../List/schemas/ResidentialUnits.ts | 73 ------ .../List/schemas/ResidentialUnits/Existing.ts | 72 ++++++ .../List/schemas/ResidentialUnits/GLA/New.ts | 211 ++++++++++++++++++ .../schemas/ResidentialUnits/GLA/Rebuilt.ts | 211 ++++++++++++++++++ .../schemas/ResidentialUnits/GLA/Removed.ts | 200 +++++++++++++++++ .../schemas/ResidentialUnits/GLA/Retained.ts | 200 +++++++++++++++++ .../List/schemas/ResidentialUnits/Proposed.ts | 72 ++++++ .../components/Flow/components/Node.tsx | 2 +- 14 files changed, 1002 insertions(+), 87 deletions(-) delete mode 100644 editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits.ts create mode 100644 editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/Existing.ts create mode 100644 editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/GLA/New.ts create mode 100644 editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/GLA/Rebuilt.ts create mode 100644 editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/GLA/Removed.ts create mode 100644 editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/GLA/Retained.ts create mode 100644 editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/Proposed.ts diff --git a/editor.planx.uk/src/@planx/components/Checklist/Public.tsx b/editor.planx.uk/src/@planx/components/Checklist/Public.tsx index 11e5c86ecf..768bc86f73 100644 --- a/editor.planx.uk/src/@planx/components/Checklist/Public.tsx +++ b/editor.planx.uk/src/@planx/components/Checklist/Public.tsx @@ -7,7 +7,6 @@ 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"; diff --git a/editor.planx.uk/src/@planx/components/List/Editor.tsx b/editor.planx.uk/src/@planx/components/List/Editor.tsx index bd1f6340f8..b7c4019628 100644 --- a/editor.planx.uk/src/@planx/components/List/Editor.tsx +++ b/editor.planx.uk/src/@planx/components/List/Editor.tsx @@ -13,15 +13,33 @@ import InputRowLabel from "ui/shared/InputRowLabel"; import { EditorProps, ICONS, InternalNotes, MoreInformation } from "../ui"; import { List, parseContent } from "./model"; -import { ResidentialUnits } from "./schemas/ResidentialUnits"; +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"; import { Zoo } from "./schemas/Zoo"; type Props = EditorProps; export const SCHEMAS = [ - { name: "Residential Units (alpha)", schema: ResidentialUnits }, + { 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: "Residentail units (GLA) - Removed", + schema: ResidentialUnitsGLARemoved, + }, + { + name: "Residential units (GLA) - Retained", + schema: ResidentialUnitsGLARetained, + }, { name: "Zoo (test)", schema: Zoo }, - // TODO: Residential units (GLA) ]; function ListComponent(props: Props) { 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 6bdb461dd8..8ea9e68ddf 100644 --- a/editor.planx.uk/src/@planx/components/List/Public/Context.tsx +++ b/editor.planx.uk/src/@planx/components/List/Public/Context.tsx @@ -139,8 +139,16 @@ export const ListProvider: React.FC = (props) => { const flattenedPassportData = flatten(defaultPassportData); // basic example of general summary stats we can add onSubmit + let sumIdenticalUnits = 0; + defaultPassportData[`${props.fn}`].map( + (item) => (sumIdenticalUnits += parseInt(item?.identicalUnits)), + ); const summaries = { - [`${props.fn}.count`]: defaultPassportData[`${props.fn}`].length, + [`${props.fn}.total.listItems`]: + defaultPassportData[`${props.fn}`].length, + ...(sumIdenticalUnits > 0 && { + [`${props.fn}.total.units`]: sumIdenticalUnits, + }), }; handleSubmit?.({ 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 36d0812e05..de3ee22acd 100644 --- a/editor.planx.uk/src/@planx/components/List/Public/Fields.tsx +++ b/editor.planx.uk/src/@planx/components/List/Public/Fields.tsx @@ -108,12 +108,9 @@ export const NumberFieldInput: React.FC> = ({ ); }; -export const RadioFieldInput: React.FC> = ({ - id, - data, - required, -}) => { +export const RadioFieldInput: React.FC> = (props) => { const { formik, activeIndex } = useListContext(); + const { id, data, required } = props; return ( 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 83073e6250..ee007bca9d 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 @@ -43,7 +43,7 @@ const mockPayload = { "mockFn.two.email": "richard.parker@pi.com", "mockFn.two.name": "Richard Parker", "mockFn.two.size": "Medium", - "mockFn.count": 2, + "mockFn.total.listItems": 2, }, }; 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 99b8cfc99c..39ebbd2389 100644 --- a/editor.planx.uk/src/@planx/components/List/Public/index.tsx +++ b/editor.planx.uk/src/@planx/components/List/Public/index.tsx @@ -170,7 +170,7 @@ const Root = () => { @@ -181,7 +181,7 @@ const Root = () => { sx={{ width: "100%" }} data-testid="list-add-button" > - + Add a new {schema.type.toLowerCase()} description + + Add another {schema.type.toLowerCase()} description diff --git a/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits.ts b/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits.ts deleted file mode 100644 index 27268f8d46..0000000000 --- a/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits.ts +++ /dev/null @@ -1,73 +0,0 @@ -import { Schema } from "../model"; - -export const ResidentialUnits: Schema = { - type: "Residential Units", - fields: [ - { - type: "question", - data: { - title: "What type of change are you making?", - fn: "changeType", - options: [ - { id: "proposed", data: { text: "Proposed" } }, - { id: "existing", data: { text: "Existing" } }, - ], - }, - }, - { - type: "question", - unique: true, - data: { - title: "What is the tenure type?", - fn: "tenureType", - options: [ - { id: "marketHousing", data: { text: "Market housing" } }, - { - id: "socialAffordableRent", - data: { text: "Social and affordable rent" }, - }, - { - id: "affordableHomeOwnership", - data: { text: "Affordable home ownership" }, - }, - { id: "starterHome", data: { text: "Starter homes" } }, - { id: "selfBuild", data: { text: "Self build" } }, - ], - }, - }, - { - type: "question", - data: { - title: "What is the unit type?", - fn: "unitType", - options: [ - { id: "houses", data: { text: "Houses" } }, - { id: "flats", data: { text: "Flats" } }, - { id: "bedsits", data: { text: "Bedsits" } }, - { id: "starterHome", data: { text: "Starter homes" } }, - { id: "shelteredHousing", data: { text: "Sheltered housing" } }, - { id: "clusteredFlats", data: { text: "Clustered flats" } }, - { id: "other", data: { text: "Other" } }, - ], - }, - }, - { - type: "number", - data: { - title: "How many bedrooms are there?", - fn: "numberBedrooms", - allowNegatives: false, - }, - }, - { - type: "number", - data: { - title: - "How many residential units does the description above apply to?", - fn: "numberIdenticalUnits", - allowNegatives: false, - }, - }, - ], - 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..bb662e6135 --- /dev/null +++ b/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/GLA/New.ts @@ -0,0 +1,211 @@ +import { Schema } from "@planx/components/List/model"; + +export const ResidentialUnitsGLANew: Schema = { + type: "New built 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" } }, + { + id: "AR", + data: { text: "Affordable rent (not at LAR benchmark rents)" }, + }, + { id: "SR", data: { text: "Social rent" } }, + { id: "LRR", data: { text: "London Living Rent" } }, + { id: "sharedEquity", data: { text: "Shared equity" } }, + { id: "LSO", data: { text: "London Shared Ownership" } }, + { id: "DMS", data: { text: "Discount market sale" } }, + { id: "DMR", data: { text: "Discount market rent" } }, + { + id: "DMRLLR", + data: { + text: "Discount market rent (charged at London Living Rents)", + }, + }, + { id: "marketForRent", data: { text: "Market for rent" } }, + { id: "SH", data: { text: "Starter homes" } }, + { + id: "selfCustomBuild", + data: { text: "Self-build and custom build" }, + }, + { id: "marketForSale", data: { text: "Market for sale" } }, + { id: "other", data: { text: "Other" } }, + ], + }, + }, + // { + // type: "checklist", // @todo + // 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: + "Is this unit compliant with Part M4(2) of the Building Regulations 2010?", + fn: "complianceM42", // compliance.m42 + options: [ + { id: "true", data: { text: "Yes" } }, + { id: "false", data: { text: "No" } }, + ], + }, + }, + { + type: "question", + data: { + title: + "Is this unit compliant with Part M4(3)(2a) of the Building Regulations 2010?", + fn: "complianceM432a", // compliance.m432a + options: [ + { id: "true", data: { text: "Yes" } }, + { id: "false", data: { text: "No" } }, + ], + }, + }, + { + type: "question", + data: { + title: + "Is this unit compliant with Part M4(3)(2b) of the Building Regulations 2010?", + fn: "complianceM432b", // compliance.m432b + options: [ + { id: "true", data: { text: "Yes" } }, + { id: "false", data: { text: "No" } }, + ], + }, + }, + { + type: "question", + data: { + title: "What best describes the type of this unit?", + fn: "type", + options: [ + { id: "terraced", data: { text: "Terraced home" } }, + { id: "semiDetached", data: { text: "Semi detached home" } }, + { id: "detached", data: { text: "Detached home" } }, + { id: "flat", data: { text: "Flat/apartment or maisonette" } }, + { id: "LW", data: { text: "Live/work unit" } }, + { id: "cluster", data: { text: "Cluster flat" } }, + { id: "studio", data: { text: "Studio or bedsit" } }, + { id: "coLiving", data: { text: "Co living unit" } }, + { id: "hostel", data: { text: "Hostel room" } }, + { id: "HMO", data: { text: "HMO" } }, + { id: "student", data: { text: "Student accomodation" } }, + { id: "other", data: { text: "Other" } }, + ], + }, + }, + { + type: "question", + data: { + title: "What best describes the provider of this unit?", + fn: "provider", + options: [ + { id: "private", data: { text: "Private" } }, + { id: "privateRented", data: { text: "Private rented sector" } }, + { id: "HA", data: { text: "Housing association" } }, + { id: "LA", data: { text: "Local authority" } }, + { id: "publicAuthority", data: { text: "Other public authority" } }, + { id: "councilDelivery", data: { text: "Council delivery company" } }, + { + id: "councilBuildToRent", + data: { text: "Council delivered build to rent" }, + }, + { + id: "affordableHousing", + data: { text: "Other affordable housing provider" }, + }, + { id: "selfBuild", data: { text: "Self-build" } }, + ], + }, + }, + { + type: "question", + data: { + title: "Is this unit built on garden land?", + fn: "garden", + options: [ + { id: "true", data: { text: "Yes" } }, + { id: "false", data: { text: "No" } }, + ], + }, + }, + { + 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" } }, + { id: "false", data: { text: "No" } }, + ], + }, + }, + { + type: "question", + data: { + title: "Is this unit specifically designed for older people?", + fn: "olderPersons", + options: [ + { id: "true", data: { text: "Yes" } }, + { id: "false", data: { text: "No" } }, + ], + }, + }, + { + 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..8535119b8e --- /dev/null +++ b/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/GLA/Rebuilt.ts @@ -0,0 +1,211 @@ +import { Schema } from "@planx/components/List/model"; + +export const ResidentialUnitsGLARebuilt: Schema = { + type: "Rebuilt 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" } }, + { + id: "AR", + data: { text: "Affordable rent (not at LAR benchmark rents)" }, + }, + { id: "SR", data: { text: "Social rent" } }, + { id: "LRR", data: { text: "London Living Rent" } }, + { id: "sharedEquity", data: { text: "Shared equity" } }, + { id: "LSO", data: { text: "London Shared Ownership" } }, + { id: "DMS", data: { text: "Discount market sale" } }, + { id: "DMR", data: { text: "Discount market rent" } }, + { + id: "DMRLLR", + data: { + text: "Discount market rent (charged at London Living Rents)", + }, + }, + { id: "marketForRent", data: { text: "Market for rent" } }, + { id: "SH", data: { text: "Starter homes" } }, + { + id: "selfCustomBuild", + data: { text: "Self-build and custom build" }, + }, + { id: "marketForSale", data: { text: "Market for sale" } }, + { id: "other", data: { text: "Other" } }, + ], + }, + }, + // { + // type: "checklist", // @todo + // 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: + "Is this unit compliant with Part M4(2) of the Building Regulations 2010?", + fn: "complianceM42", // compliance.m42 + options: [ + { id: "true", data: { text: "Yes" } }, + { id: "false", data: { text: "No" } }, + ], + }, + }, + { + type: "question", + data: { + title: + "Is this unit compliant with Part M4(3)(2a) of the Building Regulations 2010?", + fn: "complianceM432a", // compliance.m432a + options: [ + { id: "true", data: { text: "Yes" } }, + { id: "false", data: { text: "No" } }, + ], + }, + }, + { + type: "question", + data: { + title: + "Is this unit compliant with Part M4(3)(2b) of the Building Regulations 2010?", + fn: "complianceM432b", // compliance.m432b + options: [ + { id: "true", data: { text: "Yes" } }, + { id: "false", data: { text: "No" } }, + ], + }, + }, + { + type: "question", + data: { + title: "What best describes the type of this unit?", + fn: "type", + options: [ + { id: "terraced", data: { text: "Terraced home" } }, + { id: "semiDetached", data: { text: "Semi detached home" } }, + { id: "detached", data: { text: "Detached home" } }, + { id: "flat", data: { text: "Flat/apartment or maisonette" } }, + { id: "LW", data: { text: "Live/work unit" } }, + { id: "cluster", data: { text: "Cluster flat" } }, + { id: "studio", data: { text: "Studio or bedsit" } }, + { id: "coLiving", data: { text: "Co living unit" } }, + { id: "hostel", data: { text: "Hostel room" } }, + { id: "HMO", data: { text: "HMO" } }, + { id: "student", data: { text: "Student accomodation" } }, + { id: "other", data: { text: "Other" } }, + ], + }, + }, + { + type: "question", + data: { + title: "What best describes the provider of this unit?", + fn: "provider", + options: [ + { id: "private", data: { text: "Private" } }, + { id: "privateRented", data: { text: "Private rented sector" } }, + { id: "HA", data: { text: "Housing association" } }, + { id: "LA", data: { text: "Local authority" } }, + { id: "publicAuthority", data: { text: "Other public authority" } }, + { id: "councilDelivery", data: { text: "Council delivery company" } }, + { + id: "councilBuildToRent", + data: { text: "Council delivered build to rent" }, + }, + { + id: "affordableHousing", + data: { text: "Other affordable housing provider" }, + }, + { id: "selfBuild", data: { text: "Self-build" } }, + ], + }, + }, + { + type: "question", + data: { + title: "Is this unit built on garden land?", + fn: "garden", + options: [ + { id: "true", data: { text: "Yes" } }, + { id: "false", data: { text: "No" } }, + ], + }, + }, + { + 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" } }, + { id: "false", data: { text: "No" } }, + ], + }, + }, + { + type: "question", + data: { + title: "Is this unit specifically designed for older people?", + fn: "olderPersons", + options: [ + { id: "true", data: { text: "Yes" } }, + { id: "false", data: { text: "No" } }, + ], + }, + }, + { + 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..bd618a4c6d --- /dev/null +++ b/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/GLA/Removed.ts @@ -0,0 +1,200 @@ +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" } }, + { + id: "AR", + data: { text: "Affordable rent (not at LAR benchmark rents)" }, + }, + { id: "SR", data: { text: "Social rent" } }, + { id: "LRR", data: { text: "London Living Rent" } }, + { id: "sharedEquity", data: { text: "Shared equity" } }, + { id: "LSO", data: { text: "London Shared Ownership" } }, + { id: "DMS", data: { text: "Discount market sale" } }, + { id: "DMR", data: { text: "Discount market rent" } }, + { + id: "DMRLLR", + data: { + text: "Discount market rent (charged at London Living Rents)", + }, + }, + { id: "marketForRent", data: { text: "Market for rent" } }, + { id: "SH", data: { text: "Starter homes" } }, + { + id: "selfCustomBuild", + data: { text: "Self-build and custom build" }, + }, + { id: "marketForSale", data: { text: "Market for sale" } }, + { id: "other", data: { text: "Other" } }, + ], + }, + }, + // { + // type: "checklist", // @todo + // 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: + "Is this unit compliant with Part M4(2) of the Building Regulations 2010?", + fn: "complianceM42", // compliance.m42 + options: [ + { id: "true", data: { text: "Yes" } }, + { id: "false", data: { text: "No" } }, + ], + }, + }, + { + type: "question", + data: { + title: + "Is this unit compliant with Part M4(3)(2a) of the Building Regulations 2010?", + fn: "complianceM432a", // compliance.m432a + options: [ + { id: "true", data: { text: "Yes" } }, + { id: "false", data: { text: "No" } }, + ], + }, + }, + { + type: "question", + data: { + title: + "Is this unit compliant with Part M4(3)(2b) of the Building Regulations 2010?", + fn: "complianceM432b", // compliance.m432b + options: [ + { id: "true", data: { text: "Yes" } }, + { id: "false", data: { text: "No" } }, + ], + }, + }, + { + type: "question", + data: { + title: "What best describes the type of this unit?", + fn: "type", + options: [ + { id: "terraced", data: { text: "Terraced home" } }, + { id: "semiDetached", data: { text: "Semi detached home" } }, + { id: "detached", data: { text: "Detached home" } }, + { id: "flat", data: { text: "Flat/apartment or maisonette" } }, + { id: "LW", data: { text: "Live/work unit" } }, + { id: "cluster", data: { text: "Cluster flat" } }, + { id: "studio", data: { text: "Studio or bedsit" } }, + { id: "coLiving", data: { text: "Co living unit" } }, + { id: "hostel", data: { text: "Hostel room" } }, + { id: "HMO", data: { text: "HMO" } }, + { id: "student", data: { text: "Student accomodation" } }, + { id: "other", data: { text: "Other" } }, + ], + }, + }, + { + type: "question", + data: { + title: "What best describes the provider of this unit?", + fn: "provider", + options: [ + { id: "private", data: { text: "Private" } }, + { id: "privateRented", data: { text: "Private rented sector" } }, + { id: "HA", data: { text: "Housing association" } }, + { id: "LA", data: { text: "Local authority" } }, + { id: "publicAuthority", data: { text: "Other public authority" } }, + { id: "councilDelivery", data: { text: "Council delivery company" } }, + { + id: "councilBuildToRent", + data: { text: "Council delivered build to rent" }, + }, + { + id: "affordableHousing", + data: { text: "Other affordable housing provider" }, + }, + { id: "selfBuild", data: { text: "Self-build" } }, + ], + }, + }, + { + 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" } }, + { id: "false", data: { text: "No" } }, + ], + }, + }, + { + type: "question", + data: { + title: "Is this unit specifically designed for older people?", + fn: "olderPersons", + options: [ + { id: "true", data: { text: "Yes" } }, + { id: "false", data: { text: "No" } }, + ], + }, + }, + { + 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..28d3edb867 --- /dev/null +++ b/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/GLA/Retained.ts @@ -0,0 +1,200 @@ +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 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" } }, + { + id: "AR", + data: { text: "Affordable rent (not at LAR benchmark rents)" }, + }, + { id: "SR", data: { text: "Social rent" } }, + { id: "LRR", data: { text: "London Living Rent" } }, + { id: "sharedEquity", data: { text: "Shared equity" } }, + { id: "LSO", data: { text: "London Shared Ownership" } }, + { id: "DMS", data: { text: "Discount market sale" } }, + { id: "DMR", data: { text: "Discount market rent" } }, + { + id: "DMRLLR", + data: { + text: "Discount market rent (charged at London Living Rents)", + }, + }, + { id: "marketForRent", data: { text: "Market for rent" } }, + { id: "SH", data: { text: "Starter homes" } }, + { + id: "selfCustomBuild", + data: { text: "Self-build and custom build" }, + }, + { id: "marketForSale", data: { text: "Market for sale" } }, + { id: "other", data: { text: "Other" } }, + ], + }, + }, + // { + // type: "checklist", // @todo + // 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: + "Is this unit compliant with Part M4(2) of the Building Regulations 2010?", + fn: "complianceM42", // compliance.m42 + options: [ + { id: "true", data: { text: "Yes" } }, + { id: "false", data: { text: "No" } }, + ], + }, + }, + { + type: "question", + data: { + title: + "Is this unit compliant with Part M4(3)(2a) of the Building Regulations 2010?", + fn: "complianceM432a", // compliance.m432a + options: [ + { id: "true", data: { text: "Yes" } }, + { id: "false", data: { text: "No" } }, + ], + }, + }, + { + type: "question", + data: { + title: + "Is this unit compliant with Part M4(3)(2b) of the Building Regulations 2010?", + fn: "complianceM432b", // compliance.m432b + options: [ + { id: "true", data: { text: "Yes" } }, + { id: "false", data: { text: "No" } }, + ], + }, + }, + { + type: "question", + data: { + title: "What best describes the type of this unit?", + fn: "type", + options: [ + { id: "terraced", data: { text: "Terraced home" } }, + { id: "semiDetached", data: { text: "Semi detached home" } }, + { id: "detached", data: { text: "Detached home" } }, + { id: "flat", data: { text: "Flat/apartment or maisonette" } }, + { id: "LW", data: { text: "Live/work unit" } }, + { id: "cluster", data: { text: "Cluster flat" } }, + { id: "studio", data: { text: "Studio or bedsit" } }, + { id: "coLiving", data: { text: "Co living unit" } }, + { id: "hostel", data: { text: "Hostel room" } }, + { id: "HMO", data: { text: "HMO" } }, + { id: "student", data: { text: "Student accomodation" } }, + { id: "other", data: { text: "Other" } }, + ], + }, + }, + { + type: "question", + data: { + title: "What best describes the provider of this unit?", + fn: "provider", + options: [ + { id: "private", data: { text: "Private" } }, + { id: "privateRented", data: { text: "Private rented sector" } }, + { id: "HA", data: { text: "Housing association" } }, + { id: "LA", data: { text: "Local authority" } }, + { id: "publicAuthority", data: { text: "Other public authority" } }, + { id: "councilDelivery", data: { text: "Council delivery company" } }, + { + id: "councilBuildToRent", + data: { text: "Council delivered build to rent" }, + }, + { + id: "affordableHousing", + data: { text: "Other affordable housing provider" }, + }, + { id: "selfBuild", data: { text: "Self-build" } }, + ], + }, + }, + { + 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" } }, + { id: "false", data: { text: "No" } }, + ], + }, + }, + { + type: "question", + data: { + title: "Is this unit specifically designed for older people?", + fn: "olderPersons", + options: [ + { id: "true", data: { text: "Yes" } }, + { id: "false", data: { text: "No" } }, + ], + }, + }, + { + 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..9e713d03d4 --- /dev/null +++ b/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/Proposed.ts @@ -0,0 +1,72 @@ +import { Schema } from "../../model"; + +export const ResidentialUnitsProposed: Schema = { + type: "Proposed 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 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/pages/FlowEditor/components/Flow/components/Node.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Flow/components/Node.tsx index d5deb6cdff..e7600a7cc1 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Flow/components/Node.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Flow/components/Node.tsx @@ -65,7 +65,7 @@ const Node: React.FC = (props) => { case TYPES.FindProperty: return ; case TYPES.List: - return ; + return ; case TYPES.NextSteps: return ; case TYPES.Notice: From 06f43346405615c496f0e27975aaec6fb19dd713 Mon Sep 17 00:00:00 2001 From: Jessica McInchak Date: Fri, 7 Jun 2024 13:30:33 +0200 Subject: [PATCH 011/150] chore: bump planx-core (#3252) --- api.planx.uk/package.json | 2 +- api.planx.uk/pnpm-lock.yaml | 8 ++++---- e2e/tests/api-driven/package.json | 2 +- e2e/tests/api-driven/pnpm-lock.yaml | 8 ++++---- e2e/tests/ui-driven/package.json | 2 +- e2e/tests/ui-driven/pnpm-lock.yaml | 8 ++++---- editor.planx.uk/package.json | 2 +- editor.planx.uk/pnpm-lock.yaml | 21 +++++++-------------- 8 files changed, 23 insertions(+), 30 deletions(-) diff --git a/api.planx.uk/package.json b/api.planx.uk/package.json index 38ec0ab6de..a2e5d0b35a 100644 --- a/api.planx.uk/package.json +++ b/api.planx.uk/package.json @@ -4,7 +4,7 @@ "private": true, "dependencies": { "@airbrake/node": "^2.1.8", - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#60b2ec7", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#9bebbd9", "@types/isomorphic-fetch": "^0.0.36", "adm-zip": "^0.5.10", "aws-sdk": "^2.1467.0", diff --git a/api.planx.uk/pnpm-lock.yaml b/api.planx.uk/pnpm-lock.yaml index a8075ddd34..89ec048f12 100644 --- a/api.planx.uk/pnpm-lock.yaml +++ b/api.planx.uk/pnpm-lock.yaml @@ -12,8 +12,8 @@ dependencies: specifier: ^2.1.8 version: 2.1.8 '@opensystemslab/planx-core': - specifier: git+https://github.com/theopensystemslab/planx-core#60b2ec7 - version: github.com/theopensystemslab/planx-core/60b2ec7 + specifier: git+https://github.com/theopensystemslab/planx-core#9bebbd9 + version: github.com/theopensystemslab/planx-core/9bebbd9 '@types/isomorphic-fetch': specifier: ^0.0.36 version: 0.0.36 @@ -8305,8 +8305,8 @@ packages: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} dev: false - github.com/theopensystemslab/planx-core/60b2ec7: - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/60b2ec7} + github.com/theopensystemslab/planx-core/9bebbd9: + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/9bebbd9} name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true diff --git a/e2e/tests/api-driven/package.json b/e2e/tests/api-driven/package.json index c0ae3c9cb8..cc5fd48c02 100644 --- a/e2e/tests/api-driven/package.json +++ b/e2e/tests/api-driven/package.json @@ -6,7 +6,7 @@ }, "dependencies": { "@cucumber/cucumber": "^9.3.0", - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#60b2ec7", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#9bebbd9", "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 a8a93d3757..6725026776 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#60b2ec7 - version: github.com/theopensystemslab/planx-core/60b2ec7 + specifier: git+https://github.com/theopensystemslab/planx-core#9bebbd9 + version: github.com/theopensystemslab/planx-core/9bebbd9 axios: specifier: ^1.6.8 version: 1.6.8 @@ -2940,8 +2940,8 @@ packages: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} dev: false - github.com/theopensystemslab/planx-core/60b2ec7: - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/60b2ec7} + github.com/theopensystemslab/planx-core/9bebbd9: + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/9bebbd9} name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true diff --git a/e2e/tests/ui-driven/package.json b/e2e/tests/ui-driven/package.json index 4b957fec96..142ebda58e 100644 --- a/e2e/tests/ui-driven/package.json +++ b/e2e/tests/ui-driven/package.json @@ -8,7 +8,7 @@ "postinstall": "./install-dependencies.sh" }, "dependencies": { - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#60b2ec7", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#9bebbd9", "axios": "^1.6.8", "dotenv": "^16.3.1", "eslint": "^8.56.0", diff --git a/e2e/tests/ui-driven/pnpm-lock.yaml b/e2e/tests/ui-driven/pnpm-lock.yaml index 5bd1562a0c..f7521951db 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#60b2ec7 - version: github.com/theopensystemslab/planx-core/60b2ec7 + specifier: git+https://github.com/theopensystemslab/planx-core#9bebbd9 + version: github.com/theopensystemslab/planx-core/9bebbd9 axios: specifier: ^1.6.8 version: 1.6.8 @@ -2688,8 +2688,8 @@ packages: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} dev: false - github.com/theopensystemslab/planx-core/60b2ec7: - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/60b2ec7} + github.com/theopensystemslab/planx-core/9bebbd9: + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/9bebbd9} name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true diff --git a/editor.planx.uk/package.json b/editor.planx.uk/package.json index 89af7f88c9..489774a832 100644 --- a/editor.planx.uk/package.json +++ b/editor.planx.uk/package.json @@ -13,7 +13,7 @@ "@mui/material": "^5.15.2", "@mui/utils": "^5.15.2", "@opensystemslab/map": "^0.8.2", - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#60b2ec7", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#9bebbd9", "@tiptap/core": "^2.4.0", "@tiptap/extension-bold": "^2.0.3", "@tiptap/extension-bubble-menu": "^2.1.13", diff --git a/editor.planx.uk/pnpm-lock.yaml b/editor.planx.uk/pnpm-lock.yaml index 0bb19dc6ca..03374bfb2c 100644 --- a/editor.planx.uk/pnpm-lock.yaml +++ b/editor.planx.uk/pnpm-lock.yaml @@ -41,8 +41,8 @@ dependencies: specifier: ^0.8.2 version: 0.8.2 '@opensystemslab/planx-core': - specifier: git+https://github.com/theopensystemslab/planx-core#60b2ec7 - version: github.com/theopensystemslab/planx-core/60b2ec7(@types/react@18.2.45) + specifier: git+https://github.com/theopensystemslab/planx-core#9bebbd9 + version: github.com/theopensystemslab/planx-core/9bebbd9(@types/react@18.2.45) '@tiptap/core': specifier: ^2.4.0 version: 2.4.0(@tiptap/pm@2.0.3) @@ -6523,7 +6523,7 @@ packages: '@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.4 color-convert: 2.0.1 dequal: 2.0.3 lodash: 4.17.21 @@ -6676,7 +6676,7 @@ packages: 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.0 prompts: 2.4.2 read-pkg-up: 7.0.1 semver: 7.6.2 @@ -8258,7 +8258,6 @@ packages: /@types/lodash@4.17.4: resolution: {integrity: sha512-wYCP26ZLxaT3R39kiN2+HcJ4kTd3U1waI/cY7ivWYqFP6pW3ZNpvi6Wd6PHZx7T/t8z0vlkXMg3QYLa7DZ/IJQ==} - dev: false /@types/mdast@3.0.15: resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} @@ -17439,12 +17438,6 @@ packages: hasBin: true dev: true - /prettier@3.2.5: - resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} - engines: {node: '>=14'} - hasBin: true - dev: true - /prettier@3.3.0: resolution: {integrity: sha512-J9odKxERhCQ10OC2yb93583f6UnYutOeiV5i0zEDS7UGTdUt0u+y8erxl3lBKvwo/JHyyoEdXjwp4dke9oyZ/g==} engines: {node: '>=14'} @@ -21612,9 +21605,9 @@ packages: use-sync-external-store: 1.2.0(react@18.2.0) dev: false - github.com/theopensystemslab/planx-core/60b2ec7(@types/react@18.2.45): - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/60b2ec7} - id: github.com/theopensystemslab/planx-core/60b2ec7 + github.com/theopensystemslab/planx-core/9bebbd9(@types/react@18.2.45): + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/9bebbd9} + id: github.com/theopensystemslab/planx-core/9bebbd9 name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true From c88c7695e1a2291aadda1c3656b028d9fd4dacf4 Mon Sep 17 00:00:00 2001 From: Jessica McInchak Date: Fri, 7 Jun 2024 14:46:03 +0200 Subject: [PATCH 012/150] feat: basic summary of List component on Review page (#3253) --- .../src/@planx/components/List/Editor.tsx | 2 ++ .../@planx/components/List/Public/Context.tsx | 4 +++- .../@planx/components/List/Public/index.tsx | 2 +- .../src/@planx/components/List/model.ts | 2 +- .../components/shared/Preview/SummaryList.tsx | 21 ++++++++++++++++++- 5 files changed, 27 insertions(+), 4 deletions(-) diff --git a/editor.planx.uk/src/@planx/components/List/Editor.tsx b/editor.planx.uk/src/@planx/components/List/Editor.tsx index b7c4019628..46873233b1 100644 --- a/editor.planx.uk/src/@planx/components/List/Editor.tsx +++ b/editor.planx.uk/src/@planx/components/List/Editor.tsx @@ -64,6 +64,7 @@ function ListComponent(props: Props) { value={formik.values.title} placeholder="Title" onChange={formik.handleChange} + required /> @@ -81,6 +82,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 8ea9e68ddf..7269691949 100644 --- a/editor.planx.uk/src/@planx/components/List/Public/Context.tsx +++ b/editor.planx.uk/src/@planx/components/List/Public/Context.tsx @@ -138,7 +138,9 @@ export const ListProvider: React.FC = (props) => { // flattenedPassportData makes individual list items compatible with Calculate components const flattenedPassportData = flatten(defaultPassportData); - // basic example of general summary stats we can add onSubmit + // 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 let sumIdenticalUnits = 0; defaultPassportData[`${props.fn}`].map( (item) => (sumIdenticalUnits += parseInt(item?.identicalUnits)), 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 39ebbd2389..d935a367d0 100644 --- a/editor.planx.uk/src/@planx/components/List/Public/index.tsx +++ b/editor.planx.uk/src/@planx/components/List/Public/index.tsx @@ -181,7 +181,7 @@ const Root = () => { sx={{ width: "100%" }} data-testid="list-add-button" > - + Add another {schema.type.toLowerCase()} description + + Add another {schema.type.toLowerCase()} diff --git a/editor.planx.uk/src/@planx/components/List/model.ts b/editor.planx.uk/src/@planx/components/List/model.ts index f2734ccbe0..2f1568e2ed 100644 --- a/editor.planx.uk/src/@planx/components/List/model.ts +++ b/editor.planx.uk/src/@planx/components/List/model.ts @@ -75,7 +75,7 @@ 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, diff --git a/editor.planx.uk/src/@planx/components/shared/Preview/SummaryList.tsx b/editor.planx.uk/src/@planx/components/shared/Preview/SummaryList.tsx index 0c0d7ee4f4..48c4255933 100644 --- a/editor.planx.uk/src/@planx/components/shared/Preview/SummaryList.tsx +++ b/editor.planx.uk/src/@planx/components/shared/Preview/SummaryList.tsx @@ -100,7 +100,7 @@ const presentationalComponents: { [TYPES.Flow]: undefined, [TYPES.InternalPortal]: undefined, [TYPES.FileUploadAndLabel]: FileUploadAndLabel, - [TYPES.List]: undefined, + [TYPES.List]: List, [TYPES.Notice]: undefined, [TYPES.NextSteps]: undefined, [TYPES.NumberInput]: NumberInput, @@ -337,6 +337,25 @@ interface ComponentProps { nodeId: Store.nodeId; } +function List(props: ComponentProps) { + // `...total.units` is only set when the schema includes a field with fn = `identicalUnits` + const totalUnits = props.passport.data?.[`${props.node.data.fn}.total.units`]; + // `...total.listItems` is always set for any schema + const totalListItems = + props.passport.data?.[`${props.node.data.fn}.total.listItems`]; + + const summary = totalUnits + ? `${totalUnits} ${totalUnits > 1 ? `units` : `unit`} total` + : `${totalListItems} ${totalListItems > 1 ? `items` : `item`} total`; + + return ( + <> + {props.node.data.title} + {summary} + + ); +} + function Question(props: ComponentProps) { return ( <> From 2baefc5a8b44aaeb84f8378d55a17fc548d40bf0 Mon Sep 17 00:00:00 2001 From: augustlindemer <118665588+augustlindemer@users.noreply.github.com> Date: Mon, 10 Jun 2024 09:18:25 +0100 Subject: [PATCH 013/150] Update Rebuilt.ts (#3255) --- .../List/schemas/ResidentialUnits/GLA/Rebuilt.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) 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 index 8535119b8e..9e6a7ad669 100644 --- 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 @@ -3,6 +3,18 @@ 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: { From d8f349d957149276febcd18a0760f4b52376a6e6 Mon Sep 17 00:00:00 2001 From: augustlindemer <118665588+augustlindemer@users.noreply.github.com> Date: Mon, 10 Jun 2024 09:19:28 +0100 Subject: [PATCH 014/150] Update Retained.ts (#3256) --- .../schemas/ResidentialUnits/GLA/Retained.ts | 121 ------------------ 1 file changed, 121 deletions(-) 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 index 28d3edb867..871aa45029 100644 --- 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 @@ -3,14 +3,6 @@ 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 habitable rooms of this unit?", - fn: "habitable", - allowNegatives: false, - }, - }, { type: "number", data: { @@ -53,64 +45,6 @@ export const ResidentialUnitsGLARetained: Schema = { ], }, }, - // { - // type: "checklist", // @todo - // 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: - "Is this unit compliant with Part M4(2) of the Building Regulations 2010?", - fn: "complianceM42", // compliance.m42 - options: [ - { id: "true", data: { text: "Yes" } }, - { id: "false", data: { text: "No" } }, - ], - }, - }, - { - type: "question", - data: { - title: - "Is this unit compliant with Part M4(3)(2a) of the Building Regulations 2010?", - fn: "complianceM432a", // compliance.m432a - options: [ - { id: "true", data: { text: "Yes" } }, - { id: "false", data: { text: "No" } }, - ], - }, - }, - { - type: "question", - data: { - title: - "Is this unit compliant with Part M4(3)(2b) of the Building Regulations 2010?", - fn: "complianceM432b", // compliance.m432b - options: [ - { id: "true", data: { text: "Yes" } }, - { id: "false", data: { text: "No" } }, - ], - }, - }, { type: "question", data: { @@ -132,61 +66,6 @@ export const ResidentialUnitsGLARetained: Schema = { ], }, }, - { - type: "question", - data: { - title: "What best describes the provider of this unit?", - fn: "provider", - options: [ - { id: "private", data: { text: "Private" } }, - { id: "privateRented", data: { text: "Private rented sector" } }, - { id: "HA", data: { text: "Housing association" } }, - { id: "LA", data: { text: "Local authority" } }, - { id: "publicAuthority", data: { text: "Other public authority" } }, - { id: "councilDelivery", data: { text: "Council delivery company" } }, - { - id: "councilBuildToRent", - data: { text: "Council delivered build to rent" }, - }, - { - id: "affordableHousing", - data: { text: "Other affordable housing provider" }, - }, - { id: "selfBuild", data: { text: "Self-build" } }, - ], - }, - }, - { - 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" } }, - { id: "false", data: { text: "No" } }, - ], - }, - }, - { - type: "question", - data: { - title: "Is this unit specifically designed for older people?", - fn: "olderPersons", - options: [ - { id: "true", data: { text: "Yes" } }, - { id: "false", data: { text: "No" } }, - ], - }, - }, { type: "number", data: { From c1c403af45ac82d49bf98ae7133a3be0aa5aa87a Mon Sep 17 00:00:00 2001 From: augustlindemer <118665588+augustlindemer@users.noreply.github.com> Date: Mon, 10 Jun 2024 09:20:50 +0100 Subject: [PATCH 015/150] Update Proposed.ts (#3257) --- .../List/schemas/ResidentialUnits/Proposed.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) 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 index 9e713d03d4..77b533791d 100644 --- a/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/Proposed.ts +++ b/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/Proposed.ts @@ -3,6 +3,18 @@ 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: { From 4ec33b012c0d89380a7da7012f7e7164deff4a32 Mon Sep 17 00:00:00 2001 From: augustlindemer <118665588+augustlindemer@users.noreply.github.com> Date: Mon, 10 Jun 2024 09:21:44 +0100 Subject: [PATCH 016/150] Update New.ts (#3258) --- .../List/schemas/ResidentialUnits/GLA/New.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) 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 index bb662e6135..f72d707a49 100644 --- 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 @@ -3,6 +3,18 @@ import { Schema } from "@planx/components/List/model"; export const ResidentialUnitsGLANew: Schema = { type: "New built 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: { From 17a35c6508c8c7d44e5ca08d921fc777a2439d3f Mon Sep 17 00:00:00 2001 From: augustlindemer <118665588+augustlindemer@users.noreply.github.com> Date: Tue, 11 Jun 2024 09:02:30 +0100 Subject: [PATCH 017/150] feat: Add Proposed Advertisements to List component and schema (#3262) --- .../src/@planx/components/List/Editor.tsx | 2 + .../@planx/components/List/schemas/Adverts.ts | 41 +++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 editor.planx.uk/src/@planx/components/List/schemas/Adverts.ts diff --git a/editor.planx.uk/src/@planx/components/List/Editor.tsx b/editor.planx.uk/src/@planx/components/List/Editor.tsx index 46873233b1..8f96df6187 100644 --- a/editor.planx.uk/src/@planx/components/List/Editor.tsx +++ b/editor.planx.uk/src/@planx/components/List/Editor.tsx @@ -20,6 +20,7 @@ import { ResidentialUnitsGLARemoved } from "./schemas/ResidentialUnits/GLA/Remov import { ResidentialUnitsGLARetained } from "./schemas/ResidentialUnits/GLA/Retained"; import { ResidentialUnitsProposed } from "./schemas/ResidentialUnits/Proposed"; import { Zoo } from "./schemas/Zoo"; +import { ProposedAdvertisements } from "./schemas/Adverts"; type Props = EditorProps; @@ -40,6 +41,7 @@ export const SCHEMAS = [ schema: ResidentialUnitsGLARetained, }, { name: "Zoo (test)", schema: Zoo }, + { name: "Proposed advertisements", schema: ProposedAdvertisements }, ]; function ListComponent(props: Props) { 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; From 5929a122882e7b33cf6eb715fad34cb6841c205f Mon Sep 17 00:00:00 2001 From: Jessica McInchak Date: Tue, 11 Jun 2024 11:45:01 +0200 Subject: [PATCH 018/150] fix: List should record `val`, not `text`, in passport and calculate total units by development type when applicable (#3263) --- .../@planx/components/List/Public/Context.tsx | 24 ++- .../@planx/components/List/Public/Fields.tsx | 10 +- .../components/List/Public/index.test.tsx | 95 +++++++++++- .../@planx/components/List/Public/index.tsx | 8 +- .../src/@planx/components/List/model.ts | 4 +- .../List/schemas/GenericUnitsTest.ts | 51 ++++++ .../List/schemas/ResidentialUnits/GLA/New.ts | 145 ++++++++++++------ .../schemas/ResidentialUnits/GLA/Rebuilt.ts | 145 ++++++++++++------ .../schemas/ResidentialUnits/GLA/Removed.ts | 128 ++++++++++------ .../schemas/ResidentialUnits/GLA/Retained.ts | 75 ++++++--- .../src/@planx/components/List/utils.test.ts | 77 ++++++++++ .../src/@planx/components/List/utils.ts | 82 +++++++++- 12 files changed, 660 insertions(+), 184 deletions(-) create mode 100644 editor.planx.uk/src/@planx/components/List/schemas/GenericUnitsTest.ts create mode 100644 editor.planx.uk/src/@planx/components/List/utils.test.ts 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 7269691949..68920e56b2 100644 --- a/editor.planx.uk/src/@planx/components/List/Public/Context.tsx +++ b/editor.planx.uk/src/@planx/components/List/Public/Context.tsx @@ -18,7 +18,11 @@ import { Schema, UserData, } from "../model"; -import { flatten } from "../utils"; +import { + flatten, + sumIdenticalUnits, + sumIdenticalUnitsByDevelopmentType, +} from "../utils"; interface ListContextValue { schema: Schema; @@ -132,7 +136,7 @@ export const ListProvider: React.FC = (props) => { userData: getInitialValues(), }, onSubmit: (values) => { - // defaultPassportData is used when coming "back" + // defaultPassportData (array) is used when coming "back" const defaultPassportData = makeData(props, values.userData)?.["data"]; // flattenedPassportData makes individual list items compatible with Calculate components @@ -141,16 +145,22 @@ export const ListProvider: React.FC = (props) => { // 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 - let sumIdenticalUnits = 0; - defaultPassportData[`${props.fn}`].map( - (item) => (sumIdenticalUnits += parseInt(item?.identicalUnits)), + // 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, - ...(sumIdenticalUnits > 0 && { - [`${props.fn}.total.units`]: sumIdenticalUnits, + ...(totalUnits > 0 && { + [`${props.fn}.total.units`]: totalUnits, }), + ...(totalUnits > 0 && + Object.keys(totalUnitsByDevelopmentType).length > 0 && + totalUnitsByDevelopmentType), }; handleSubmit?.({ 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 de3ee22acd..be39313c42 100644 --- a/editor.planx.uk/src/@planx/components/List/Public/Fields.tsx +++ b/editor.planx.uk/src/@planx/components/List/Public/Fields.tsx @@ -139,7 +139,7 @@ export const RadioFieldInput: React.FC> = (props) => { {data.options.map(({ id, data }) => ( @@ -159,9 +159,11 @@ export const SelectFieldInput: React.FC> = (props) => { const existingValues = formik.values.userData .map((response) => response[data.fn]) - .filter((value) => value === option.data.text); + .filter( + (value) => value === option.data.val || value === option.data.text, + ); - return existingValues.includes(option.data.text); + return existingValues.includes(option.data.val || option.data.text); }; return ( @@ -185,7 +187,7 @@ export const SelectFieldInput: React.FC> = (props) => { {data.options.map((option) => ( {option.data.text} 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 ee007bca9d..2f72a1e8f9 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 @@ -4,8 +4,15 @@ import { cloneDeep, merge } from "lodash"; import React from "react"; import { axe, setup } from "testUtils"; +import { UserResponse } from "../model"; import ListComponent, { Props } from "../Public"; +import { GenericUnitsTest } from "../schemas/GenericUnitsTest"; import { Zoo } from "../schemas/Zoo"; +import { + flatten, + sumIdenticalUnits, + sumIdenticalUnitsByDevelopmentType, +} from "../utils"; const mockProps: Props = { fn: "mockFn", @@ -47,6 +54,48 @@ const mockPayload = { }, }; +const mockPropsUnits: Props = { + fn: "proposal.units.residential", + schema: GenericUnitsTest, + schemaName: "Generic residential units", + title: "Describe residential units", +}; + +const mockPayloadUnits = { + 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.newBuid": 3, + "proposal.units.residential.total.units.changeOfUseTo": 2, + }, +}; + jest.setTimeout(20_000); describe("Basic UI", () => { @@ -378,7 +427,7 @@ describe("Form validation and error handling", () => { }); describe("Payload generation", () => { - it("generates a valid payload on submission", async () => { + it("generates a valid payload on submission (Zoo)", async () => { const handleSubmit = jest.fn(); const { getByTestId, user } = setup( , @@ -395,6 +444,50 @@ describe("Payload generation", () => { expect(handleSubmit).toHaveBeenCalled(); expect(handleSubmit.mock.calls[0][0]).toMatchObject(mockPayload); }); + + it.skip("generates a valid payload with summary stats on submission (Units)", async () => { + const handleSubmit = jest.fn(); + const { getByTestId, user } = setup( + , + ); + + const saveButton = screen.getByRole("button", { name: /Save/ }); + const addItemButton = getByTestId("list-add-button"); + const developmentSelect = screen.getByRole("combobox"); + const gardenYesRadio = screen.getAllByRole("radio")[0]; + const gardenNoRadio = screen.getAllByRole("radio")[1]; + const unitsNumberInput = screen.getByLabelText(/identical units/); + + // Response 1 + await user.click(developmentSelect); + await user.click(screen.getByRole("option", { name: /New build/ })); + await user.click(gardenYesRadio); + await user.type(unitsNumberInput, "1"); + await user.click(saveButton); + + // Response 2 + await user.click(addItemButton); + await user.click(developmentSelect); + await user.click(screen.getByRole("option", { name: /New build/ })); + await user.click(gardenNoRadio); + await user.type(unitsNumberInput, "2"); + await user.click(saveButton); + + // Response 3 + await user.click(addItemButton); + await user.click(developmentSelect); + await user.click( + screen.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(screen.getByTestId("continue-button")); + + expect(handleSubmit).toHaveBeenCalled(); + expect(handleSubmit.mock.calls[0][0]).toMatchObject(mockPayloadUnits); + }); }); describe("Navigating back", () => { 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 d935a367d0..6466cfa70a 100644 --- a/editor.planx.uk/src/@planx/components/List/Public/index.tsx +++ b/editor.planx.uk/src/@planx/components/List/Public/index.tsx @@ -17,6 +17,7 @@ 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 { NumberFieldInput, @@ -111,7 +112,12 @@ const InactiveListCard: React.FC<{ {field.data.title} - {formik.values.userData[i][field.data.fn]} + + {formatSchemaDisplayValue( + formik.values.userData[i][field.data.fn], + schema, + )} + ))} diff --git a/editor.planx.uk/src/@planx/components/List/model.ts b/editor.planx.uk/src/@planx/components/List/model.ts index 2f1568e2ed..89ad950cfc 100644 --- a/editor.planx.uk/src/@planx/components/List/model.ts +++ b/editor.planx.uk/src/@planx/components/List/model.ts @@ -25,7 +25,7 @@ interface QuestionInput { */ const questionInputValidationSchema = (data: QuestionInput) => string() - .oneOf(data.options.map((option) => option.data.text)) + .oneOf(data.options.map((option) => option.data.val || option.data.text)) .required("Select your answer before continuing"); // TODO: Add summary fields for inactive view? @@ -62,7 +62,7 @@ export interface Schema { max?: number; } -type UserResponse = Record; +export type UserResponse = Record; export type UserData = { userData: UserResponse[] }; diff --git a/editor.planx.uk/src/@planx/components/List/schemas/GenericUnitsTest.ts b/editor.planx.uk/src/@planx/components/List/schemas/GenericUnitsTest.ts new file mode 100644 index 0000000000..f8f7d45076 --- /dev/null +++ b/editor.planx.uk/src/@planx/components/List/schemas/GenericUnitsTest.ts @@ -0,0 +1,51 @@ +import { Schema } from "@planx/components/List/model"; + +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; 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 index f72d707a49..88f92a1aee 100644 --- 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 @@ -10,8 +10,17 @@ export const ResidentialUnitsGLANew: Schema = { 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" } }, + { + 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" }, + }, ], }, }, @@ -37,31 +46,47 @@ export const ResidentialUnitsGLANew: Schema = { title: "Which best describes the tenure of this unit?", fn: "tenure", options: [ - { id: "LAR", data: { text: "London Affordable Rent" } }, + { id: "LAR", data: { text: "London Affordable Rent", val: "LAR" } }, { id: "AR", - data: { text: "Affordable rent (not at LAR benchmark rents)" }, + data: { + text: "Affordable rent (not at LAR benchmark rents)", + val: "AR", + }, }, - { id: "SR", data: { text: "Social rent" } }, - { id: "LRR", data: { text: "London Living Rent" } }, - { id: "sharedEquity", data: { text: "Shared equity" } }, - { id: "LSO", data: { text: "London Shared Ownership" } }, - { id: "DMS", data: { text: "Discount market sale" } }, - { id: "DMR", data: { text: "Discount market rent" } }, + { 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" } }, - { id: "SH", data: { text: "Starter homes" } }, + { + 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" }, + data: { + text: "Self-build and custom build", + val: "selfCustomBuild", + }, + }, + { + id: "marketForSale", + data: { text: "Market for sale", val: "marketForSale" }, }, - { id: "marketForSale", data: { text: "Market for sale" } }, - { id: "other", data: { text: "Other" } }, + { id: "other", data: { text: "Other", val: "other" } }, ], }, }, @@ -94,8 +119,8 @@ export const ResidentialUnitsGLANew: Schema = { "Is this unit compliant with Part M4(2) of the Building Regulations 2010?", fn: "complianceM42", // compliance.m42 options: [ - { id: "true", data: { text: "Yes" } }, - { id: "false", data: { text: "No" } }, + { id: "true", data: { text: "Yes", val: "true" } }, + { id: "false", data: { text: "No", val: "false" } }, ], }, }, @@ -106,8 +131,8 @@ export const ResidentialUnitsGLANew: Schema = { "Is this unit compliant with Part M4(3)(2a) of the Building Regulations 2010?", fn: "complianceM432a", // compliance.m432a options: [ - { id: "true", data: { text: "Yes" } }, - { id: "false", data: { text: "No" } }, + { id: "true", data: { text: "Yes", val: "true" } }, + { id: "false", data: { text: "No", val: "false" } }, ], }, }, @@ -118,8 +143,8 @@ export const ResidentialUnitsGLANew: Schema = { "Is this unit compliant with Part M4(3)(2b) of the Building Regulations 2010?", fn: "complianceM432b", // compliance.m432b options: [ - { id: "true", data: { text: "Yes" } }, - { id: "false", data: { text: "No" } }, + { id: "true", data: { text: "Yes", val: "true" } }, + { id: "false", data: { text: "No", val: "false" } }, ], }, }, @@ -129,18 +154,27 @@ export const ResidentialUnitsGLANew: Schema = { title: "What best describes the type of this unit?", fn: "type", options: [ - { id: "terraced", data: { text: "Terraced home" } }, - { id: "semiDetached", data: { text: "Semi detached home" } }, - { id: "detached", data: { text: "Detached home" } }, - { id: "flat", data: { text: "Flat/apartment or maisonette" } }, - { id: "LW", data: { text: "Live/work unit" } }, - { id: "cluster", data: { text: "Cluster flat" } }, - { id: "studio", data: { text: "Studio or bedsit" } }, - { id: "coLiving", data: { text: "Co living unit" } }, - { id: "hostel", data: { text: "Hostel room" } }, - { id: "HMO", data: { text: "HMO" } }, - { id: "student", data: { text: "Student accomodation" } }, - { id: "other", data: { text: "Other" } }, + { 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 accomodation", val: "student" }, + }, + { id: "other", data: { text: "Other", val: "other" } }, ], }, }, @@ -150,21 +184,36 @@ export const ResidentialUnitsGLANew: Schema = { title: "What best describes the provider of this unit?", fn: "provider", options: [ - { id: "private", data: { text: "Private" } }, - { id: "privateRented", data: { text: "Private rented sector" } }, - { id: "HA", data: { text: "Housing association" } }, - { id: "LA", data: { text: "Local authority" } }, - { id: "publicAuthority", data: { text: "Other public authority" } }, - { id: "councilDelivery", data: { text: "Council delivery company" } }, + { 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" }, + data: { + text: "Council delivered build to rent", + val: "councilBuildToRent", + }, }, { id: "affordableHousing", - data: { text: "Other affordable housing provider" }, + data: { + text: "Other affordable housing provider", + val: "affordableHousing", + }, }, - { id: "selfBuild", data: { text: "Self-build" } }, + { id: "selfBuild", data: { text: "Self-build", val: "selfBuild" } }, ], }, }, @@ -174,8 +223,8 @@ export const ResidentialUnitsGLANew: Schema = { title: "Is this unit built on garden land?", fn: "garden", options: [ - { id: "true", data: { text: "Yes" } }, - { id: "false", data: { text: "No" } }, + { id: "true", data: { text: "Yes", val: "true" } }, + { id: "false", data: { text: "No", val: "false" } }, ], }, }, @@ -194,8 +243,8 @@ export const ResidentialUnitsGLANew: Schema = { title: "Will this unit provide sheltered accommodation?", fn: "sheltered", options: [ - { id: "true", data: { text: "Yes" } }, - { id: "false", data: { text: "No" } }, + { id: "true", data: { text: "Yes", val: "true" } }, + { id: "false", data: { text: "No", val: "false" } }, ], }, }, @@ -205,8 +254,8 @@ export const ResidentialUnitsGLANew: Schema = { title: "Is this unit specifically designed for older people?", fn: "olderPersons", options: [ - { id: "true", data: { text: "Yes" } }, - { id: "false", data: { text: "No" } }, + { id: "true", data: { text: "Yes", val: "true" } }, + { id: "false", data: { text: "No", val: "false" } }, ], }, }, 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 index 9e6a7ad669..485d0aa04e 100644 --- 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 @@ -10,8 +10,17 @@ export const ResidentialUnitsGLARebuilt: Schema = { 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" } }, + { + 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" }, + }, ], }, }, @@ -37,31 +46,47 @@ export const ResidentialUnitsGLARebuilt: Schema = { title: "Which best describes the tenure of this unit?", fn: "tenure", options: [ - { id: "LAR", data: { text: "London Affordable Rent" } }, + { id: "LAR", data: { text: "London Affordable Rent", val: "LAR" } }, { id: "AR", - data: { text: "Affordable rent (not at LAR benchmark rents)" }, + data: { + text: "Affordable rent (not at LAR benchmark rents)", + val: "AR", + }, }, - { id: "SR", data: { text: "Social rent" } }, - { id: "LRR", data: { text: "London Living Rent" } }, - { id: "sharedEquity", data: { text: "Shared equity" } }, - { id: "LSO", data: { text: "London Shared Ownership" } }, - { id: "DMS", data: { text: "Discount market sale" } }, - { id: "DMR", data: { text: "Discount market rent" } }, + { 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" } }, - { id: "SH", data: { text: "Starter homes" } }, + { + 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" }, + data: { + text: "Self-build and custom build", + val: "selfCustomBuild", + }, + }, + { + id: "marketForSale", + data: { text: "Market for sale", val: "marketForSale" }, }, - { id: "marketForSale", data: { text: "Market for sale" } }, - { id: "other", data: { text: "Other" } }, + { id: "other", data: { text: "Other", val: "other" } }, ], }, }, @@ -94,8 +119,8 @@ export const ResidentialUnitsGLARebuilt: Schema = { "Is this unit compliant with Part M4(2) of the Building Regulations 2010?", fn: "complianceM42", // compliance.m42 options: [ - { id: "true", data: { text: "Yes" } }, - { id: "false", data: { text: "No" } }, + { id: "true", data: { text: "Yes", val: "true" } }, + { id: "false", data: { text: "No", val: "false" } }, ], }, }, @@ -106,8 +131,8 @@ export const ResidentialUnitsGLARebuilt: Schema = { "Is this unit compliant with Part M4(3)(2a) of the Building Regulations 2010?", fn: "complianceM432a", // compliance.m432a options: [ - { id: "true", data: { text: "Yes" } }, - { id: "false", data: { text: "No" } }, + { id: "true", data: { text: "Yes", val: "true" } }, + { id: "false", data: { text: "No", val: "false" } }, ], }, }, @@ -118,8 +143,8 @@ export const ResidentialUnitsGLARebuilt: Schema = { "Is this unit compliant with Part M4(3)(2b) of the Building Regulations 2010?", fn: "complianceM432b", // compliance.m432b options: [ - { id: "true", data: { text: "Yes" } }, - { id: "false", data: { text: "No" } }, + { id: "true", data: { text: "Yes", val: "true" } }, + { id: "false", data: { text: "No", val: "false" } }, ], }, }, @@ -129,18 +154,27 @@ export const ResidentialUnitsGLARebuilt: Schema = { title: "What best describes the type of this unit?", fn: "type", options: [ - { id: "terraced", data: { text: "Terraced home" } }, - { id: "semiDetached", data: { text: "Semi detached home" } }, - { id: "detached", data: { text: "Detached home" } }, - { id: "flat", data: { text: "Flat/apartment or maisonette" } }, - { id: "LW", data: { text: "Live/work unit" } }, - { id: "cluster", data: { text: "Cluster flat" } }, - { id: "studio", data: { text: "Studio or bedsit" } }, - { id: "coLiving", data: { text: "Co living unit" } }, - { id: "hostel", data: { text: "Hostel room" } }, - { id: "HMO", data: { text: "HMO" } }, - { id: "student", data: { text: "Student accomodation" } }, - { id: "other", data: { text: "Other" } }, + { 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 accomodation", val: "student" }, + }, + { id: "other", data: { text: "Other", val: "other" } }, ], }, }, @@ -150,21 +184,36 @@ export const ResidentialUnitsGLARebuilt: Schema = { title: "What best describes the provider of this unit?", fn: "provider", options: [ - { id: "private", data: { text: "Private" } }, - { id: "privateRented", data: { text: "Private rented sector" } }, - { id: "HA", data: { text: "Housing association" } }, - { id: "LA", data: { text: "Local authority" } }, - { id: "publicAuthority", data: { text: "Other public authority" } }, - { id: "councilDelivery", data: { text: "Council delivery company" } }, + { 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" }, + data: { + text: "Council delivered build to rent", + val: "councilBuildToRent", + }, }, { id: "affordableHousing", - data: { text: "Other affordable housing provider" }, + data: { + text: "Other affordable housing provider", + val: "affordableHousing", + }, }, - { id: "selfBuild", data: { text: "Self-build" } }, + { id: "selfBuild", data: { text: "Self-build", val: "selfBuild" } }, ], }, }, @@ -174,8 +223,8 @@ export const ResidentialUnitsGLARebuilt: Schema = { title: "Is this unit built on garden land?", fn: "garden", options: [ - { id: "true", data: { text: "Yes" } }, - { id: "false", data: { text: "No" } }, + { id: "true", data: { text: "Yes", val: "true" } }, + { id: "false", data: { text: "No", val: "false" } }, ], }, }, @@ -194,8 +243,8 @@ export const ResidentialUnitsGLARebuilt: Schema = { title: "Will this unit provide sheltered accommodation?", fn: "sheltered", options: [ - { id: "true", data: { text: "Yes" } }, - { id: "false", data: { text: "No" } }, + { id: "true", data: { text: "Yes", val: "true" } }, + { id: "false", data: { text: "No", val: "false" } }, ], }, }, @@ -205,8 +254,8 @@ export const ResidentialUnitsGLARebuilt: Schema = { title: "Is this unit specifically designed for older people?", fn: "olderPersons", options: [ - { id: "true", data: { text: "Yes" } }, - { id: "false", data: { text: "No" } }, + { id: "true", data: { text: "Yes", val: "true" } }, + { id: "false", data: { text: "No", val: "false" } }, ], }, }, 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 index bd618a4c6d..ee7027875c 100644 --- 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 @@ -25,31 +25,47 @@ export const ResidentialUnitsGLARemoved: Schema = { title: "Which best describes the tenure of this unit?", fn: "tenure", options: [ - { id: "LAR", data: { text: "London Affordable Rent" } }, + { id: "LAR", data: { text: "London Affordable Rent", val: "LAR" } }, { id: "AR", - data: { text: "Affordable rent (not at LAR benchmark rents)" }, + 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: "SR", data: { text: "Social rent" } }, - { id: "LRR", data: { text: "London Living Rent" } }, - { id: "sharedEquity", data: { text: "Shared equity" } }, - { id: "LSO", data: { text: "London Shared Ownership" } }, - { id: "DMS", data: { text: "Discount market sale" } }, - { id: "DMR", data: { text: "Discount market rent" } }, + { 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" } }, - { id: "SH", data: { text: "Starter homes" } }, + { + 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" }, + data: { + text: "Self-build and custom build", + val: "selfCustomBuild", + }, + }, + { + id: "marketForSale", + data: { text: "Market for sale", val: "marketForSale" }, }, - { id: "marketForSale", data: { text: "Market for sale" } }, - { id: "other", data: { text: "Other" } }, + { id: "other", data: { text: "Other", val: "other" } }, ], }, }, @@ -82,8 +98,8 @@ export const ResidentialUnitsGLARemoved: Schema = { "Is this unit compliant with Part M4(2) of the Building Regulations 2010?", fn: "complianceM42", // compliance.m42 options: [ - { id: "true", data: { text: "Yes" } }, - { id: "false", data: { text: "No" } }, + { id: "true", data: { text: "Yes", val: "true" } }, + { id: "false", data: { text: "No", val: "false" } }, ], }, }, @@ -94,8 +110,8 @@ export const ResidentialUnitsGLARemoved: Schema = { "Is this unit compliant with Part M4(3)(2a) of the Building Regulations 2010?", fn: "complianceM432a", // compliance.m432a options: [ - { id: "true", data: { text: "Yes" } }, - { id: "false", data: { text: "No" } }, + { id: "true", data: { text: "Yes", val: "true" } }, + { id: "false", data: { text: "No", val: "false" } }, ], }, }, @@ -106,8 +122,8 @@ export const ResidentialUnitsGLARemoved: Schema = { "Is this unit compliant with Part M4(3)(2b) of the Building Regulations 2010?", fn: "complianceM432b", // compliance.m432b options: [ - { id: "true", data: { text: "Yes" } }, - { id: "false", data: { text: "No" } }, + { id: "true", data: { text: "Yes", val: "true" } }, + { id: "false", data: { text: "No", val: "false" } }, ], }, }, @@ -117,18 +133,27 @@ export const ResidentialUnitsGLARemoved: Schema = { title: "What best describes the type of this unit?", fn: "type", options: [ - { id: "terraced", data: { text: "Terraced home" } }, - { id: "semiDetached", data: { text: "Semi detached home" } }, - { id: "detached", data: { text: "Detached home" } }, - { id: "flat", data: { text: "Flat/apartment or maisonette" } }, - { id: "LW", data: { text: "Live/work unit" } }, - { id: "cluster", data: { text: "Cluster flat" } }, - { id: "studio", data: { text: "Studio or bedsit" } }, - { id: "coLiving", data: { text: "Co living unit" } }, - { id: "hostel", data: { text: "Hostel room" } }, - { id: "HMO", data: { text: "HMO" } }, - { id: "student", data: { text: "Student accomodation" } }, - { id: "other", data: { text: "Other" } }, + { 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 accomodation", val: "student" }, + }, + { id: "other", data: { text: "Other", val: "other" } }, ], }, }, @@ -138,21 +163,36 @@ export const ResidentialUnitsGLARemoved: Schema = { title: "What best describes the provider of this unit?", fn: "provider", options: [ - { id: "private", data: { text: "Private" } }, - { id: "privateRented", data: { text: "Private rented sector" } }, - { id: "HA", data: { text: "Housing association" } }, - { id: "LA", data: { text: "Local authority" } }, - { id: "publicAuthority", data: { text: "Other public authority" } }, - { id: "councilDelivery", data: { text: "Council delivery company" } }, + { 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" }, + data: { + text: "Council delivered build to rent", + val: "councilBuildToRent", + }, }, { id: "affordableHousing", - data: { text: "Other affordable housing provider" }, + data: { + text: "Other affordable housing provider", + val: "affordableHousing", + }, }, - { id: "selfBuild", data: { text: "Self-build" } }, + { id: "selfBuild", data: { text: "Self-build", val: "selfBuild" } }, ], }, }, @@ -171,8 +211,8 @@ export const ResidentialUnitsGLARemoved: Schema = { title: "Will this unit provide sheltered accommodation?", fn: "sheltered", options: [ - { id: "true", data: { text: "Yes" } }, - { id: "false", data: { text: "No" } }, + { id: "true", data: { text: "Yes", val: "true" } }, + { id: "false", data: { text: "No", val: "false" } }, ], }, }, @@ -182,8 +222,8 @@ export const ResidentialUnitsGLARemoved: Schema = { title: "Is this unit specifically designed for older people?", fn: "olderPersons", options: [ - { id: "true", data: { text: "Yes" } }, - { id: "false", data: { text: "No" } }, + { id: "true", data: { text: "Yes", val: "true" } }, + { id: "false", data: { text: "No", val: "false" } }, ], }, }, 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 index 871aa45029..70c4bbfbe8 100644 --- 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 @@ -17,31 +17,47 @@ export const ResidentialUnitsGLARetained: Schema = { title: "Which best describes the tenure of this unit?", fn: "tenure", options: [ - { id: "LAR", data: { text: "London Affordable Rent" } }, + { id: "LAR", data: { text: "London Affordable Rent", val: "LAR" } }, { id: "AR", - data: { text: "Affordable rent (not at LAR benchmark rents)" }, + 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: "SR", data: { text: "Social rent" } }, - { id: "LRR", data: { text: "London Living Rent" } }, - { id: "sharedEquity", data: { text: "Shared equity" } }, - { id: "LSO", data: { text: "London Shared Ownership" } }, - { id: "DMS", data: { text: "Discount market sale" } }, - { id: "DMR", data: { text: "Discount market rent" } }, + { 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" } }, - { id: "SH", data: { text: "Starter homes" } }, + { + 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" }, + data: { + text: "Self-build and custom build", + val: "selfCustomBuild", + }, }, - { id: "marketForSale", data: { text: "Market for sale" } }, - { id: "other", data: { text: "Other" } }, + { + id: "marketForSale", + data: { text: "Market for sale", val: "marketForSale" }, + }, + { id: "other", data: { text: "Other", val: "other" } }, ], }, }, @@ -51,18 +67,27 @@ export const ResidentialUnitsGLARetained: Schema = { title: "What best describes the type of this unit?", fn: "type", options: [ - { id: "terraced", data: { text: "Terraced home" } }, - { id: "semiDetached", data: { text: "Semi detached home" } }, - { id: "detached", data: { text: "Detached home" } }, - { id: "flat", data: { text: "Flat/apartment or maisonette" } }, - { id: "LW", data: { text: "Live/work unit" } }, - { id: "cluster", data: { text: "Cluster flat" } }, - { id: "studio", data: { text: "Studio or bedsit" } }, - { id: "coLiving", data: { text: "Co living unit" } }, - { id: "hostel", data: { text: "Hostel room" } }, - { id: "HMO", data: { text: "HMO" } }, - { id: "student", data: { text: "Student accomodation" } }, - { id: "other", data: { text: "Other" } }, + { 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 accomodation", val: "student" }, + }, + { id: "other", data: { text: "Other", val: "other" } }, ], }, }, 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..5fdb8abc68 --- /dev/null +++ b/editor.planx.uk/src/@planx/components/List/utils.test.ts @@ -0,0 +1,77 @@ +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: "Very", + email: "richard.parker@pi.com", + name: "Richard Parker", + size: "Medium", + }, + { + age: 10, + cuteness: "Very", + email: "richard.parker@pi.com", + name: "Richard Parker", + size: "Medium", + }, + ], + }; + + expect(flatten(defaultPassportData)).toEqual({ + "mockFn.one.age": 10, + "mockFn.one.cuteness": "Very", + "mockFn.one.email": "richard.parker@pi.com", + "mockFn.one.name": "Richard Parker", + "mockFn.one.size": "Medium", + "mockFn.two.age": 10, + "mockFn.two.cuteness": "Very", + "mockFn.two.email": "richard.parker@pi.com", + "mockFn.two.name": "Richard Parker", + "mockFn.two.size": "Medium", + }); + }); + + 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.ts b/editor.planx.uk/src/@planx/components/List/utils.ts index 231f676f76..b5c8226afa 100644 --- a/editor.planx.uk/src/@planx/components/List/utils.ts +++ b/editor.planx.uk/src/@planx/components/List/utils.ts @@ -1,5 +1,77 @@ -// Flattens nested object so we can output passport variables like `{listFn}.{itemIndexAsText}.{fieldFn}` -// Adapted from https://gist.github.com/penguinboy/762197 +import { QuestionField, Schema, UserResponse } from "./model"; + +/** + * In the case of "question" 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 schema - the Schema object + * @returns string - the `text` for the given value `val`, or the original value + */ +export function formatSchemaDisplayValue(value: string, schema: Schema) { + const questionFields = schema.fields.filter( + (field) => field.type === "question", + ) as QuestionField[]; + const matchingField = questionFields?.find((field) => + field.data.options.some((option) => option.data.val === value), + ); + const matchingOption = matchingField?.data.options.find( + (option) => option.data.val === value, + ); + + // If we found a "val" match, return its text, else just return the value as passed in + return matchingOption?.data?.text || value; +} + +/** + * 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) => (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 (read option `val` from Schema in future?) + const baseSums: Record = { + newBuild: 0, + changeOfUseFrom: 0, + changeOfUseTo: 0, + }; + passportData[`${fn}`].map( + (item) => + (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; +} + +/** + * 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, path: string | null = null, @@ -28,8 +100,6 @@ export function flatten>( }, {} as T); } -// 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 const ones = [ "", "one", @@ -78,6 +148,10 @@ function convertTens(num: number): string { } } +/** + * 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"; From 0d0bc43c676ed99339f3e769c1f342f1a069374c Mon Sep 17 00:00:00 2001 From: Ian Jones <51156018+ianjon3s@users.noreply.github.com> Date: Tue, 11 Jun 2024 10:50:15 +0100 Subject: [PATCH 019/150] refactor: Standardise error summary (#3259) --- .../@planx/components/Pay/Public/Confirm.tsx | 36 +++------- .../@planx/components/Pay/Public/Pay.test.tsx | 2 +- .../components/Flow/FeedbackPage.tsx | 67 +++++++++++-------- .../Settings/Submissions/EventsLog.tsx | 21 ++---- .../src/ui/shared/ErrorSummary.stories.tsx | 36 ++++++++++ .../src/ui/shared/ErrorSummary.tsx | 36 ++++++++++ 6 files changed, 128 insertions(+), 70 deletions(-) create mode 100644 editor.planx.uk/src/ui/shared/ErrorSummary.stories.tsx create mode 100644 editor.planx.uk/src/ui/shared/ErrorSummary.tsx 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..cece85b320 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 @@ -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/pages/FlowEditor/components/Flow/FeedbackPage.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Flow/FeedbackPage.tsx index 625cc0656b..3b8cfd7d3d 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Flow/FeedbackPage.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Flow/FeedbackPage.tsx @@ -25,6 +25,7 @@ import { client } from "lib/graphql"; import React, { useState } from "react"; import { Feedback } from "routes/feedback"; import EditorRow from "ui/editor/EditorRow"; +import ErrorSummary from "ui/shared/ErrorSummary"; import ReactMarkdownOrHtml from "ui/shared/ReactMarkdownOrHtml"; interface Props { @@ -164,35 +165,43 @@ export const FeedbackPage: React.FC = ({ feedback }) => { - - - - *": { borderBottomColor: "black !important" } }} - > - - Type - - - Date - - - Comment - - - - - - {feedback.map((item) => ( - - ))} - -
-
+ {feedback.length === 0 ? ( + + ) : ( + + + + *": { borderBottomColor: "black !important" } }} + > + + Type + + + Date + + + Comment + + + + + + {feedback.map((item) => ( + + ))} + +
+
+ )}
diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/Submissions/EventsLog.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/Submissions/EventsLog.tsx index 4943bf092c..4de7b76aac 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/Submissions/EventsLog.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/Submissions/EventsLog.tsx @@ -18,15 +18,10 @@ import DelayedLoadingIndicator from "components/DelayedLoadingIndicator"; import ErrorFallback from "components/ErrorFallback"; import { format } from "date-fns"; import React, { useState } from "react"; +import ErrorSummary from "ui/shared/ErrorSummary"; import { GetSubmissionsResponse, Submission } from "."; -const ErrorSummary = styled(Box)(({ theme }) => ({ - marginTop: theme.spacing(1), - padding: theme.spacing(3), - border: `5px solid ${theme.palette.error.main}`, -})); - const Response = styled(Box)(() => ({ fontSize: "1em", margin: 1, @@ -59,16 +54,12 @@ const EventsLog: React.FC = ({ if (error) return ; if (submissions.length === 0) return ( - - - {`No payments or submissions found for this service`} - - - {`If you're looking for events before January 1, 2024, please contact a PlanX developer.`} - - + ); - return ( diff --git a/editor.planx.uk/src/ui/shared/ErrorSummary.stories.tsx b/editor.planx.uk/src/ui/shared/ErrorSummary.stories.tsx new file mode 100644 index 0000000000..d6c05924a3 --- /dev/null +++ b/editor.planx.uk/src/ui/shared/ErrorSummary.stories.tsx @@ -0,0 +1,36 @@ +import { Meta, StoryObj } from "@storybook/react"; + +import ErrorSummary from "../shared/ErrorSummary"; + +const meta = { + title: "Design System/Molecules/ErrorSummary", + component: ErrorSummary, +} satisfies Meta; + +type Story = StoryObj; + +export default meta; + +export const Error = { + args: { + heading: "Application error", + message: "Summary of error message.", + format: "error", + }, +} satisfies Story; + +export const Warning = { + args: { + heading: "Application warning", + message: "Summary of warning message.", + format: "warning", + }, +} satisfies Story; + +export const Info = { + args: { + heading: "Application info", + message: "Summary of information message.", + format: "info", + }, +} satisfies Story; diff --git a/editor.planx.uk/src/ui/shared/ErrorSummary.tsx b/editor.planx.uk/src/ui/shared/ErrorSummary.tsx new file mode 100644 index 0000000000..15613cb84f --- /dev/null +++ b/editor.planx.uk/src/ui/shared/ErrorSummary.tsx @@ -0,0 +1,36 @@ +import Box from "@mui/material/Box"; +import { styled } from "@mui/material/styles"; +import Typography from "@mui/material/Typography"; +import React from "react"; + +interface Props { + heading?: string; + message?: string; + format?: "error" | "warning" | "info"; +} + +const Root = styled(Box, { + shouldForwardProp: (prop) => prop !== "format", +})(({ theme, format }) => ({ + padding: theme.spacing(3), + border: `5px solid ${theme.palette.error.main}`, + ...(format === "warning" && { + borderColor: theme.palette.warning.main, + }), + ...(format === "info" && { + borderColor: theme.palette.border.light, + }), +})); + +function ErrorSummary(props: Props) { + return ( + + + {props.heading} + + {props.message} + + ); +} + +export default ErrorSummary; From 85af90a6d60747aa2e72604c9b2ffda8e4bd7e25 Mon Sep 17 00:00:00 2001 From: augustlindemer <118665588+augustlindemer@users.noreply.github.com> Date: Tue, 11 Jun 2024 17:20:04 +0100 Subject: [PATCH 020/150] feat: Add new GLA schemas (#3267) --- .../src/@planx/components/List/Editor.tsx | 48 ++-- .../List/schemas/GLA/BuildingDetails.ts | 34 +++ .../List/schemas/GLA/CommunalSpace.ts | 36 +++ .../schemas/GLA/ExistingAndProposedUses.ts | 56 +++++ .../components/List/schemas/GLA/OpenSpace.ts | 96 ++++++++ .../List/schemas/GLA/ProtectedSpace.ts | 65 +++++ .../schemas/ResidentialUnits/GLA/Gained.ts | 225 ++++++++++++++++++ .../List/schemas/ResidentialUnits/GLA/Lost.ts | 200 ++++++++++++++++ 8 files changed, 743 insertions(+), 17 deletions(-) create mode 100644 editor.planx.uk/src/@planx/components/List/schemas/GLA/BuildingDetails.ts create mode 100644 editor.planx.uk/src/@planx/components/List/schemas/GLA/CommunalSpace.ts create mode 100644 editor.planx.uk/src/@planx/components/List/schemas/GLA/ExistingAndProposedUses.ts create mode 100644 editor.planx.uk/src/@planx/components/List/schemas/GLA/OpenSpace.ts create mode 100644 editor.planx.uk/src/@planx/components/List/schemas/GLA/ProtectedSpace.ts create mode 100644 editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/GLA/Gained.ts create mode 100644 editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/GLA/Lost.ts diff --git a/editor.planx.uk/src/@planx/components/List/Editor.tsx b/editor.planx.uk/src/@planx/components/List/Editor.tsx index 8f96df6187..0901d78732 100644 --- a/editor.planx.uk/src/@planx/components/List/Editor.tsx +++ b/editor.planx.uk/src/@planx/components/List/Editor.tsx @@ -14,11 +14,18 @@ import InputRowLabel from "ui/shared/InputRowLabel"; import { EditorProps, ICONS, InternalNotes, MoreInformation } from "../ui"; import { List, parseContent } from "./model"; 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"; +// 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 { ResidentialUnitsGLAGained } from "./schemas/ResidentialUnits/GLA/Gained"; +import { ResidentialUnitsGLALost } from "./schemas/ResidentialUnits/GLA/Lost"; +import { ExistingAndProposedUsesGLA } from "./schemas/GLA/ExistingAndProposedUses"; +import { CommunalSpaceGLA } from "./schemas/GLA/CommunalSpace"; +import { BuildingDetailsGLA } from "./schemas/GLA/BuildingDetails"; +import { ProtectedSpaceGLA } from "./schemas/GLA/ProtectedSpace"; +import { OpenSpaceGLA } from "./schemas/GLA/OpenSpace"; import { Zoo } from "./schemas/Zoo"; import { ProposedAdvertisements } from "./schemas/Adverts"; @@ -27,19 +34,26 @@ type Props = EditorProps; export const SCHEMAS = [ { 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: "Residentail units (GLA) - Removed", - schema: ResidentialUnitsGLARemoved, - }, - { - name: "Residential units (GLA) - Retained", - schema: ResidentialUnitsGLARetained, - }, + { name: "Residential units (GLA) - Gained", schema: ResidentialUnitsGLAGained }, + { name: "Residential units (GLA) - Lost", schema: ResidentialUnitsGLALost }, + { name: "Existing and proposed uses (GLA)", schema: ExistingAndProposedUsesGLA }, + { name: "Communal spaces (GLA)", schema: CommunalSpaceGLA }, + { name: "Building details (GLA)", schema: BuildingDetailsGLA }, + { name: "Protected spaces (GLA)", schema: ProtectedSpaceGLA }, + { name: "Open spaces (GLA)", schema: OpenSpaceGLA }, +// { name: "Residential units (GLA) - New", schema: ResidentialUnitsGLANew }, +// { +// name: "Residential units (GLA) - Rebuilt", +// schema: ResidentialUnitsGLARebuilt, +// }, +// { +// name: "Residentail units (GLA) - Removed", +// schema: ResidentialUnitsGLARemoved, +// }, +// { +// name: "Residential units (GLA) - Retained", +// schema: ResidentialUnitsGLARetained, +// }, { name: "Zoo (test)", schema: Zoo }, { name: "Proposed advertisements", schema: ProposedAdvertisements }, ]; 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..d77ac140b3 --- /dev/null +++ b/editor.planx.uk/src/@planx/components/List/schemas/GLA/BuildingDetails.ts @@ -0,0 +1,34 @@ +import { TextInputType } from "@planx/components/TextInput/model"; +import { Schema } from "@planx/components/List/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..417fe6b65a --- /dev/null +++ b/editor.planx.uk/src/@planx/components/List/schemas/GLA/ExistingAndProposedUses.ts @@ -0,0 +1,56 @@ +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: "areaExisting", // area.existing + allowNegatives: false, + }, + }, + { + type: "number", + data: { + title: "What is the gross internal floor area lost?", + units: "m²", + fn: "areaLoss", // area.loss + allowNegatives: false, + }, + }, + { + type: "number", + data: { + title: "What is the gross internal floor area gained?", + units: "m²", + fn: "areaGain", // 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..7bf23705dc --- /dev/null +++ b/editor.planx.uk/src/@planx/components/List/schemas/GLA/OpenSpace.ts @@ -0,0 +1,96 @@ +import { TextInputType } from "@planx/components/TextInput/model"; +import { Schema } from "@planx/components/List/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..5bb608bb75 --- /dev/null +++ b/editor.planx.uk/src/@planx/components/List/schemas/GLA/ProtectedSpace.ts @@ -0,0 +1,65 @@ +import { TextInputType } from "@planx/components/TextInput/model"; +import { Schema } from "@planx/components/List/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/ResidentialUnits/GLA/Gained.ts b/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/GLA/Gained.ts new file mode 100644 index 0000000000..2ec4565243 --- /dev/null +++ b/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/GLA/Gained.ts @@ -0,0 +1,225 @@ +import { Schema } from "@planx/components/List/model"; + +export const ResidentialUnitsGLAGained: Schema = { + type: "Gained 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: "conversion", data: { text: "Conversion", val: "conversion" } }, + { id: "changeOfUse", data: { text: "Change of use", val: "changeOfUse" } }, + { id: "extension", data: { text: "Extension", val: "extension" } }, + { id: "notKnown", data: { text: "Not known", val: "notKnown" } }, + ], + }, + }, + { + 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" } }, + { + id: "AR", + data: { text: "Affordable rent (not at LAR benchmark rents)" }, + }, + { id: "SR", data: { text: "Social rent" } }, + { id: "LRR", data: { text: "London Living Rent" } }, + { id: "sharedEquity", data: { text: "Shared equity" } }, + { id: "LSO", data: { text: "London Shared Ownership" } }, + { id: "DMS", data: { text: "Discount market sale" } }, + { id: "DMR", data: { text: "Discount market rent" } }, + { + id: "DMRLLR", + data: { + text: "Discount market rent (charged at London Living Rents)", + }, + }, + { id: "marketForRent", data: { text: "Market for rent" } }, + { id: "SH", data: { text: "Starter homes" } }, + { + id: "selfCustomBuild", + data: { text: "Self-build and custom build" }, + }, + { id: "marketForSale", data: { text: "Market for sale" } }, + { id: "other", data: { text: "Other" } }, + ], + }, + }, + // { + // type: "checklist", // @todo + // 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: + "Is this unit compliant with Part M4(2) of the Building Regulations 2010?", + fn: "complianceM42", // compliance.m42 + options: [ + { id: "true", data: { text: "Yes" } }, + { id: "false", data: { text: "No" } }, + ], + }, + }, + { + type: "question", + data: { + title: + "Is this unit compliant with Part M4(3)(2a) of the Building Regulations 2010?", + fn: "complianceM432a", // compliance.m432a + options: [ + { id: "true", data: { text: "Yes" } }, + { id: "false", data: { text: "No" } }, + ], + }, + }, + { + type: "question", + data: { + title: + "Is this unit compliant with Part M4(3)(2b) of the Building Regulations 2010?", + fn: "complianceM432b", // compliance.m432b + options: [ + { id: "true", data: { text: "Yes" } }, + { id: "false", data: { text: "No" } }, + ], + }, + }, + { + type: "question", + data: { + title: "What best describes the type of this unit?", + fn: "type", + options: [ + { id: "terraced", data: { text: "Terraced home" } }, + { id: "semiDetached", data: { text: "Semi detached home" } }, + { id: "detached", data: { text: "Detached home" } }, + { id: "flat", data: { text: "Flat/apartment or maisonette" } }, + { id: "LW", data: { text: "Live/work unit" } }, + { id: "cluster", data: { text: "Cluster flat" } }, + { id: "studio", data: { text: "Studio or bedsit" } }, + { id: "coLiving", data: { text: "Co living unit" } }, + { id: "hostel", data: { text: "Hostel room" } }, + { id: "HMO", data: { text: "HMO" } }, + { id: "student", data: { text: "Student accomodation" } }, + { id: "other", data: { text: "Other" } }, + ], + }, + }, + { + type: "question", + data: { + title: "What best describes the provider of this unit?", + fn: "provider", + options: [ + { id: "private", data: { text: "Private" } }, + { id: "privateRented", data: { text: "Private rented sector" } }, + { id: "HA", data: { text: "Housing association" } }, + { id: "LA", data: { text: "Local authority" } }, + { id: "publicAuthority", data: { text: "Other public authority" } }, + { id: "councilDelivery", data: { text: "Council delivery company" } }, + { + id: "councilBuildToRent", + data: { text: "Council delivered build to rent" }, + }, + { + id: "affordableHousing", + data: { text: "Other affordable housing provider" }, + }, + { id: "selfBuild", data: { text: "Self-build" } }, + ], + }, + }, + { + type: "question", + data: { + title: "Is this unit built on garden land?", + fn: "garden", + options: [ + { id: "true", data: { text: "Yes" } }, + { id: "false", data: { text: "No" } }, + ], + }, + }, + { + 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" } }, + { id: "false", data: { text: "No" } }, + ], + }, + }, + { + type: "question", + data: { + title: "Is this unit specifically designed for older people?", + fn: "olderPersons", + options: [ + { id: "true", data: { text: "Yes" } }, + { id: "false", data: { text: "No" } }, + ], + }, + }, + { + 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/Lost.ts b/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/GLA/Lost.ts new file mode 100644 index 0000000000..d55013cb58 --- /dev/null +++ b/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/GLA/Lost.ts @@ -0,0 +1,200 @@ +import { Schema } from "@planx/components/List/model"; + +export const ResidentialUnitsGLALost: Schema = { + type: "Lost or replaced 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" } }, + { + id: "AR", + data: { text: "Affordable rent (not at LAR benchmark rents)" }, + }, + { id: "SR", data: { text: "Social rent" } }, + { id: "LRR", data: { text: "London Living Rent" } }, + { id: "sharedEquity", data: { text: "Shared equity" } }, + { id: "LSO", data: { text: "London Shared Ownership" } }, + { id: "DMS", data: { text: "Discount market sale" } }, + { id: "DMR", data: { text: "Discount market rent" } }, + { + id: "DMRLLR", + data: { + text: "Discount market rent (charged at London Living Rents)", + }, + }, + { id: "marketForRent", data: { text: "Market for rent" } }, + { id: "SH", data: { text: "Starter homes" } }, + { + id: "selfCustomBuild", + data: { text: "Self-build and custom build" }, + }, + { id: "marketForSale", data: { text: "Market for sale" } }, + { id: "other", data: { text: "Other" } }, + ], + }, + }, + // { + // type: "checklist", // @todo + // 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: + "Is this unit compliant with Part M4(2) of the Building Regulations 2010?", + fn: "complianceM42", // compliance.m42 + options: [ + { id: "true", data: { text: "Yes" } }, + { id: "false", data: { text: "No" } }, + ], + }, + }, + { + type: "question", + data: { + title: + "Is this unit compliant with Part M4(3)(2a) of the Building Regulations 2010?", + fn: "complianceM432a", // compliance.m432a + options: [ + { id: "true", data: { text: "Yes" } }, + { id: "false", data: { text: "No" } }, + ], + }, + }, + { + type: "question", + data: { + title: + "Is this unit compliant with Part M4(3)(2b) of the Building Regulations 2010?", + fn: "complianceM432b", // compliance.m432b + options: [ + { id: "true", data: { text: "Yes" } }, + { id: "false", data: { text: "No" } }, + ], + }, + }, + { + type: "question", + data: { + title: "What best describes the type of this unit?", + fn: "type", + options: [ + { id: "terraced", data: { text: "Terraced home" } }, + { id: "semiDetached", data: { text: "Semi detached home" } }, + { id: "detached", data: { text: "Detached home" } }, + { id: "flat", data: { text: "Flat/apartment or maisonette" } }, + { id: "LW", data: { text: "Live/work unit" } }, + { id: "cluster", data: { text: "Cluster flat" } }, + { id: "studio", data: { text: "Studio or bedsit" } }, + { id: "coLiving", data: { text: "Co living unit" } }, + { id: "hostel", data: { text: "Hostel room" } }, + { id: "HMO", data: { text: "HMO" } }, + { id: "student", data: { text: "Student accomodation" } }, + { id: "other", data: { text: "Other" } }, + ], + }, + }, + { + type: "question", + data: { + title: "What best describes the provider of this unit?", + fn: "provider", + options: [ + { id: "private", data: { text: "Private" } }, + { id: "privateRented", data: { text: "Private rented sector" } }, + { id: "HA", data: { text: "Housing association" } }, + { id: "LA", data: { text: "Local authority" } }, + { id: "publicAuthority", data: { text: "Other public authority" } }, + { id: "councilDelivery", data: { text: "Council delivery company" } }, + { + id: "councilBuildToRent", + data: { text: "Council delivered build to rent" }, + }, + { + id: "affordableHousing", + data: { text: "Other affordable housing provider" }, + }, + { id: "selfBuild", data: { text: "Self-build" } }, + ], + }, + }, + { + 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" } }, + { id: "false", data: { text: "No" } }, + ], + }, + }, + { + type: "question", + data: { + title: "Is this unit specifically designed for older people?", + fn: "olderPersons", + options: [ + { id: "true", data: { text: "Yes" } }, + { id: "false", data: { text: "No" } }, + ], + }, + }, + { + type: "number", + data: { + title: "How many identical units does the description above apply to?", + fn: "identicalUnits", + allowNegatives: false, + }, + }, + ], + min: 1, +} as const; From f93601432534565368fd88a6d93299d47f97dcb4 Mon Sep 17 00:00:00 2001 From: Jessica McInchak Date: Wed, 12 Jun 2024 09:15:44 +0200 Subject: [PATCH 021/150] feat: when List schema sets `max: 1`, don't display add another button or index in card header (#3265) --- .../src/@planx/components/List/Editor.tsx | 47 +++--- .../components/List/Public/index.test.tsx | 144 +++++------------- .../@planx/components/List/Public/index.tsx | 54 ++++--- .../List/schemas/GLA/BuildingDetails.ts | 2 +- .../schemas/GLA/ExistingAndProposedUses.ts | 46 +++++- .../components/List/schemas/GLA/OpenSpace.ts | 79 ++++++++-- .../List/schemas/GLA/ProtectedSpace.ts | 51 +++++-- .../List/schemas/GenericUnitsTest.ts | 51 ------- .../schemas/ResidentialUnits/GLA/Gained.ts | 7 +- .../List/schemas/Tests/GenericUnits.ts | 95 ++++++++++++ .../components/List/schemas/Tests/MaxOne.ts | 58 +++++++ .../List/schemas/{ => Tests}/Zoo.ts | 43 +++++- .../src/@planx/components/List/utils.ts | 10 +- 13 files changed, 445 insertions(+), 242 deletions(-) delete mode 100644 editor.planx.uk/src/@planx/components/List/schemas/GenericUnitsTest.ts create mode 100644 editor.planx.uk/src/@planx/components/List/schemas/Tests/GenericUnits.ts create mode 100644 editor.planx.uk/src/@planx/components/List/schemas/Tests/MaxOne.ts rename editor.planx.uk/src/@planx/components/List/schemas/{ => Tests}/Zoo.ts (58%) diff --git a/editor.planx.uk/src/@planx/components/List/Editor.tsx b/editor.planx.uk/src/@planx/components/List/Editor.tsx index 0901d78732..c55f3c50d7 100644 --- a/editor.planx.uk/src/@planx/components/List/Editor.tsx +++ b/editor.planx.uk/src/@planx/components/List/Editor.tsx @@ -13,49 +13,38 @@ import InputRowLabel from "ui/shared/InputRowLabel"; import { EditorProps, ICONS, InternalNotes, MoreInformation } from "../ui"; import { List, parseContent } from "./model"; +import { ProposedAdvertisements } from "./schemas/Adverts"; +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 { ResidentialUnitsExisting } from "./schemas/ResidentialUnits/Existing"; -import { ResidentialUnitsProposed } from "./schemas/ResidentialUnits/Proposed"; -// 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 { ResidentialUnitsGLAGained } from "./schemas/ResidentialUnits/GLA/Gained"; import { ResidentialUnitsGLALost } from "./schemas/ResidentialUnits/GLA/Lost"; -import { ExistingAndProposedUsesGLA } from "./schemas/GLA/ExistingAndProposedUses"; -import { CommunalSpaceGLA } from "./schemas/GLA/CommunalSpace"; -import { BuildingDetailsGLA } from "./schemas/GLA/BuildingDetails"; -import { ProtectedSpaceGLA } from "./schemas/GLA/ProtectedSpace"; -import { OpenSpaceGLA } from "./schemas/GLA/OpenSpace"; -import { Zoo } from "./schemas/Zoo"; -import { ProposedAdvertisements } from "./schemas/Adverts"; +import { ResidentialUnitsProposed } from "./schemas/ResidentialUnits/Proposed"; +import { Zoo } from "./schemas/Tests/Zoo"; type Props = EditorProps; export const SCHEMAS = [ { name: "Residential units - Existing", schema: ResidentialUnitsExisting }, { name: "Residential units - Proposed", schema: ResidentialUnitsProposed }, - { name: "Residential units (GLA) - Gained", schema: ResidentialUnitsGLAGained }, + { + name: "Residential units (GLA) - Gained", + schema: ResidentialUnitsGLAGained, + }, { name: "Residential units (GLA) - Lost", schema: ResidentialUnitsGLALost }, - { name: "Existing and proposed uses (GLA)", schema: ExistingAndProposedUsesGLA }, - { name: "Communal spaces (GLA)", schema: CommunalSpaceGLA }, + { + name: "Existing and proposed uses (GLA)", + schema: ExistingAndProposedUsesGLA, + }, { 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: "Residential units (GLA) - New", schema: ResidentialUnitsGLANew }, -// { -// name: "Residential units (GLA) - Rebuilt", -// schema: ResidentialUnitsGLARebuilt, -// }, -// { -// name: "Residentail units (GLA) - Removed", -// schema: ResidentialUnitsGLARemoved, -// }, -// { -// name: "Residential units (GLA) - Retained", -// schema: ResidentialUnitsGLARetained, -// }, - { name: "Zoo (test)", schema: Zoo }, { name: "Proposed advertisements", schema: ProposedAdvertisements }, + { name: "(Test only) Zoo", schema: Zoo }, ]; function ListComponent(props: Props) { 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 2f72a1e8f9..ddb2f88b0f 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,106 +1,22 @@ -import { screen, within } from "@testing-library/react"; +import { getByText, 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 { UserResponse } from "../model"; -import ListComponent, { Props } from "../Public"; -import { GenericUnitsTest } from "../schemas/GenericUnitsTest"; -import { Zoo } from "../schemas/Zoo"; +import ListComponent from "../Public"; import { - flatten, - sumIdenticalUnits, - sumIdenticalUnitsByDevelopmentType, -} from "../utils"; - -const mockProps: Props = { - fn: "mockFn", - schema: Zoo, - schemaName: "Zoo", - title: "Mock Title", - description: "Mock description", -}; - -const mockPayload = { - data: { - mockFn: [ - { - age: 10, - cuteness: "Very", - email: "richard.parker@pi.com", - name: "Richard Parker", - size: "Medium", - }, - { - age: 10, - cuteness: "Very", - email: "richard.parker@pi.com", - name: "Richard Parker", - size: "Medium", - }, - ], - "mockFn.one.age": 10, - "mockFn.one.cuteness": "Very", - "mockFn.one.email": "richard.parker@pi.com", - "mockFn.one.name": "Richard Parker", - "mockFn.one.size": "Medium", - "mockFn.two.age": 10, - "mockFn.two.cuteness": "Very", - "mockFn.two.email": "richard.parker@pi.com", - "mockFn.two.name": "Richard Parker", - "mockFn.two.size": "Medium", - "mockFn.total.listItems": 2, - }, -}; - -const mockPropsUnits: Props = { - fn: "proposal.units.residential", - schema: GenericUnitsTest, - schemaName: "Generic residential units", - title: "Describe residential units", -}; - -const mockPayloadUnits = { - 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.newBuid": 3, - "proposal.units.residential.total.units.changeOfUseTo": 2, - }, -}; + mockUnitsPayload, + mockUnitsProps, +} from "../schemas/Tests/GenericUnits"; +import { mockMaxOneProps } from "../schemas/Tests/MaxOne"; +import { mockZooPayload, mockZooProps } from "../schemas/Tests/Zoo"; jest.setTimeout(20_000); describe("Basic UI", () => { it("renders correctly", () => { - const { getByText } = setup(); + const { getByText } = setup(); expect(getByText(/Mock Title/)).toBeInTheDocument(); expect(getByText(/Mock description/)).toBeInTheDocument(); @@ -108,7 +24,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; @@ -174,7 +90,7 @@ 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(); }); @@ -182,7 +98,9 @@ describe("Basic UI", () => { 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 mockWithMinZero = merge(cloneDeep(mockZooProps), { + schema: { min: 0 }, + }); const { queryByRole, getByTestId } = setup( , ); @@ -202,7 +120,7 @@ describe("Building a list", () => { it("displays a default item if the schema has a required minimum", () => { const { getByRole, queryByLabelText } = setup( - , + , ); // Card present... @@ -218,9 +136,22 @@ describe("Building a list", () => { expect(inputField).not.toBeDisabled(); }); + 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( + , + ); + + 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/); @@ -252,7 +183,7 @@ describe("Building a list", () => { test("Editing an item", async () => { // Setup three cards const { getAllByTestId, getByTestId, user } = setup( - , + , ); await fillInResponse(user); @@ -308,7 +239,7 @@ describe("Building a list", () => { user, getByLabelText, queryAllByTestId, - } = setup(); + } = setup(); await fillInResponse(user); @@ -378,7 +309,7 @@ describe("Building a list", () => { test("Removing an item when another card is active", async () => { // Setup two cards const { getAllByTestId, getByTestId, user } = setup( - , + , ); await fillInResponse(user); @@ -430,7 +361,7 @@ describe("Payload generation", () => { it("generates a valid payload on submission (Zoo)", async () => { const handleSubmit = jest.fn(); const { getByTestId, user } = setup( - , + , ); const addItemButton = getByTestId("list-add-button"); @@ -442,13 +373,13 @@ describe("Payload generation", () => { await user.click(screen.getByTestId("continue-button")); expect(handleSubmit).toHaveBeenCalled(); - expect(handleSubmit.mock.calls[0][0]).toMatchObject(mockPayload); + expect(handleSubmit.mock.calls[0][0]).toMatchObject(mockZooPayload); }); it.skip("generates a valid payload with summary stats on submission (Units)", async () => { const handleSubmit = jest.fn(); const { getByTestId, user } = setup( - , + , ); const saveButton = screen.getByRole("button", { name: /Save/ }); @@ -486,14 +417,17 @@ describe("Payload generation", () => { await user.click(screen.getByTestId("continue-button")); expect(handleSubmit).toHaveBeenCalled(); - expect(handleSubmit.mock.calls[0][0]).toMatchObject(mockPayloadUnits); + expect(handleSubmit.mock.calls[0][0]).toMatchObject(mockUnitsPayload); }); }); describe("Navigating back", () => { test("it pre-populates list correctly", async () => { const { getAllByText, queryByLabelText, getAllByTestId } = setup( - , + , ); const cards = getAllByTestId(/list-card/); 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 6466cfa70a..50d49140cb 100644 --- a/editor.planx.uk/src/@planx/components/List/Public/index.tsx +++ b/editor.planx.uk/src/@planx/components/List/Public/index.tsx @@ -64,16 +64,20 @@ const InputField: React.FC = (props) => { const ActiveListCard: React.FC<{ index: number; -}> = ({ index }) => { +}> = ({ index: i }) => { const { schema, saveItem, cancelEditItem, errors } = useListContext(); + // Hide the index number in the card title if the schema has a max length of 1 + const shouldShowIndexTitle = schema.max !== 1; + return ( - + - {schema.type} {index + 1} + {schema.type} + {shouldShowIndexTitle && ` ${i + 1}`} {schema.fields.map((field, i) => ( @@ -100,10 +104,14 @@ const InactiveListCard: React.FC<{ }> = ({ index: i }) => { const { schema, formik, removeItem, editItem } = useListContext(); + // Hide the index number in the card title if the schema has a max length of 1 + const shouldShowIndexTitle = schema.max !== 1; + return ( - {schema.type} {i + 1} + {schema.type} + {shouldShowIndexTitle && ` ${i + 1}`}
@@ -155,6 +163,10 @@ const Root = () => { (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 ( { ), )} - - - + + + )} 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 index d77ac140b3..76844adf59 100644 --- a/editor.planx.uk/src/@planx/components/List/schemas/GLA/BuildingDetails.ts +++ b/editor.planx.uk/src/@planx/components/List/schemas/GLA/BuildingDetails.ts @@ -1,5 +1,5 @@ -import { TextInputType } from "@planx/components/TextInput/model"; import { Schema } from "@planx/components/List/model"; +import { TextInputType } from "@planx/components/TextInput/model"; export const BuildingDetailsGLA: Schema = { type: "Building detail", 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 index 417fe6b65a..7a7cc91985 100644 --- a/editor.planx.uk/src/@planx/components/List/schemas/GLA/ExistingAndProposedUses.ts +++ b/editor.planx.uk/src/@planx/components/List/schemas/GLA/ExistingAndProposedUses.ts @@ -10,15 +10,45 @@ export const ExistingAndProposedUsesGLA: Schema = { fn: "useClass", options: [ { id: "bTwo", data: { text: "B2 - General industry", val: "bTwo" } }, - { id: "bEight", data: { text: "B8 - Storage and distribution", val: "bEight" } }, + { + 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: "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" } }, ], 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 index 7bf23705dc..9e167b256a 100644 --- a/editor.planx.uk/src/@planx/components/List/schemas/GLA/OpenSpace.ts +++ b/editor.planx.uk/src/@planx/components/List/schemas/GLA/OpenSpace.ts @@ -1,5 +1,5 @@ -import { TextInputType } from "@planx/components/TextInput/model"; import { Schema } from "@planx/components/List/model"; +import { TextInputType } from "@planx/components/TextInput/model"; export const OpenSpaceGLA: Schema = { type: "Open space details", @@ -12,7 +12,10 @@ export const OpenSpaceGLA: Schema = { options: [ { id: "loss", data: { text: "Loss", val: "loss" } }, { id: "gain", data: { text: "Gain", val: "gain" } }, - { id: "changeOfUse", data: { text: "Change of use", val: "changeOfUse" } }, + { + id: "changeOfUse", + data: { text: "Change of use", val: "changeOfUse" }, + }, ], }, }, @@ -23,18 +26,60 @@ export const OpenSpaceGLA: Schema = { 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: "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: "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" } }, + { + 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" }, + }, ], }, }, @@ -45,7 +90,10 @@ export const OpenSpaceGLA: Schema = { fn: "designation", options: [ { id: "greenBelt", data: { text: "Green Belt", val: "greenBelt" } }, - { id: "metropolitan", data: { text: "Metropolitan Open Land", val: "metropolitan" } }, + { + 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" } }, @@ -67,7 +115,10 @@ export const OpenSpaceGLA: Schema = { fn: "access", options: [ { id: "restricted", data: { text: "Restricted", val: "restricted" } }, - { id: "unrestricted", data: { text: "Unrestricted", val: "unrestricted" } }, + { + id: "unrestricted", + data: { text: "Unrestricted", val: "unrestricted" }, + }, ], }, }, 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 index 5bb608bb75..8118290c96 100644 --- a/editor.planx.uk/src/@planx/components/List/schemas/GLA/ProtectedSpace.ts +++ b/editor.planx.uk/src/@planx/components/List/schemas/GLA/ProtectedSpace.ts @@ -1,5 +1,5 @@ -import { TextInputType } from "@planx/components/TextInput/model"; import { Schema } from "@planx/components/List/model"; +import { TextInputType } from "@planx/components/TextInput/model"; export const ProtectedSpaceGLA: Schema = { type: "Protected space details", @@ -12,7 +12,10 @@ export const ProtectedSpaceGLA: Schema = { options: [ { id: "loss", data: { text: "Loss", val: "loss" } }, { id: "gain", data: { text: "Gain", val: "gain" } }, - { id: "changeOfUse", data: { text: "Change of use", val: "changeOfUse" } }, + { + id: "changeOfUse", + data: { text: "Change of use", val: "changeOfUse" }, + }, ], }, }, @@ -22,12 +25,39 @@ export const ProtectedSpaceGLA: Schema = { 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: "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" } }, ], }, @@ -47,7 +77,10 @@ export const ProtectedSpaceGLA: Schema = { fn: "access", options: [ { id: "restricted", data: { text: "Restricted", val: "restricted" } }, - { id: "unrestricted", data: { text: "Unrestricted", val: "unrestricted" } }, + { + id: "unrestricted", + data: { text: "Unrestricted", val: "unrestricted" }, + }, ], }, }, diff --git a/editor.planx.uk/src/@planx/components/List/schemas/GenericUnitsTest.ts b/editor.planx.uk/src/@planx/components/List/schemas/GenericUnitsTest.ts deleted file mode 100644 index f8f7d45076..0000000000 --- a/editor.planx.uk/src/@planx/components/List/schemas/GenericUnitsTest.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { Schema } from "@planx/components/List/model"; - -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; diff --git a/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/GLA/Gained.ts b/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/GLA/Gained.ts index 2ec4565243..8382dacfb2 100644 --- a/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/GLA/Gained.ts +++ b/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/GLA/Gained.ts @@ -11,9 +11,12 @@ export const ResidentialUnitsGLAGained: Schema = { options: [ { id: "newBuild", data: { text: "New build", val: "newBuild" } }, { id: "conversion", data: { text: "Conversion", val: "conversion" } }, - { id: "changeOfUse", data: { text: "Change of use", val: "changeOfUse" } }, + { + id: "changeOfUse", + data: { text: "Change of use", val: "changeOfUse" }, + }, { id: "extension", data: { text: "Extension", val: "extension" } }, - { id: "notKnown", data: { text: "Not known", val: "notKnown" } }, + { id: "notKnown", data: { text: "Not known", val: "notKnown" } }, ], }, }, diff --git a/editor.planx.uk/src/@planx/components/List/schemas/Tests/GenericUnits.ts b/editor.planx.uk/src/@planx/components/List/schemas/Tests/GenericUnits.ts new file mode 100644 index 0000000000..808da9a921 --- /dev/null +++ b/editor.planx.uk/src/@planx/components/List/schemas/Tests/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.newBuid": 3, + "proposal.units.residential.total.units.changeOfUseTo": 2, + }, +}; diff --git a/editor.planx.uk/src/@planx/components/List/schemas/Tests/MaxOne.ts b/editor.planx.uk/src/@planx/components/List/schemas/Tests/MaxOne.ts new file mode 100644 index 0000000000..bdbddaef59 --- /dev/null +++ b/editor.planx.uk/src/@planx/components/List/schemas/Tests/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/Zoo.ts b/editor.planx.uk/src/@planx/components/List/schemas/Tests/Zoo.ts similarity index 58% rename from editor.planx.uk/src/@planx/components/List/schemas/Zoo.ts rename to editor.planx.uk/src/@planx/components/List/schemas/Tests/Zoo.ts index 655512f182..6debeddea7 100644 --- a/editor.planx.uk/src/@planx/components/List/schemas/Zoo.ts +++ b/editor.planx.uk/src/@planx/components/List/schemas/Tests/Zoo.ts @@ -1,6 +1,7 @@ import { TextInputType } from "@planx/components/TextInput/model"; -import { Schema } from "../model"; +import { Schema } from "../../model"; +import { Props } from "../../Public"; /** * Temp simple example to build out UI @@ -67,3 +68,43 @@ export const Zoo: Schema = { min: 1, max: 10, } 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: "Very", + email: "richard.parker@pi.com", + name: "Richard Parker", + size: "Medium", + }, + { + age: 10, + cuteness: "Very", + email: "richard.parker@pi.com", + name: "Richard Parker", + size: "Medium", + }, + ], + "mockFn.one.age": 10, + "mockFn.one.cuteness": "Very", + "mockFn.one.email": "richard.parker@pi.com", + "mockFn.one.name": "Richard Parker", + "mockFn.one.size": "Medium", + "mockFn.two.age": 10, + "mockFn.two.cuteness": "Very", + "mockFn.two.email": "richard.parker@pi.com", + "mockFn.two.name": "Richard Parker", + "mockFn.two.size": "Medium", + "mockFn.total.listItems": 2, + }, +}; diff --git a/editor.planx.uk/src/@planx/components/List/utils.ts b/editor.planx.uk/src/@planx/components/List/utils.ts index b5c8226afa..0e0d0dcdc3 100644 --- a/editor.planx.uk/src/@planx/components/List/utils.ts +++ b/editor.planx.uk/src/@planx/components/List/utils.ts @@ -46,11 +46,17 @@ export function sumIdenticalUnitsByDevelopmentType( fn: string, passportData: Record, ): Record { - // Sum identical units by development type (read option `val` from Schema in future?) + // Sum identical units by development type (@todo read all possible option `val` from Schema in future) const baseSums: Record = { - newBuild: 0, + changeOfUse: 0, changeOfUseFrom: 0, changeOfUseTo: 0, + conversion: 0, + gain: 0, + extension: 0, + loss: 0, + newBuild: 0, + notKnown: 0, }; passportData[`${fn}`].map( (item) => From 518014f4e68bd0a685b6f9db07963b68a6648a1f Mon Sep 17 00:00:00 2001 From: Rory Doak <138574807+RODO94@users.noreply.github.com> Date: Thu, 13 Jun 2024 09:22:11 +0100 Subject: [PATCH 022/150] draft: Adding Flow Name to Editor Files (#3246) Co-authored-by: Rory Doak Co-authored-by: Jessica McInchak --- api.planx.uk/helpers.ts | 6 +++ .../modules/flows/copyFlow/service.ts | 2 + api.planx.uk/package.json | 2 +- api.planx.uk/pnpm-lock.yaml | 40 +++++++-------- e2e/tests/api-driven/package.json | 2 +- e2e/tests/api-driven/pnpm-lock.yaml | 40 +++++++-------- .../api-driven/src/flowStatusHistory/steps.ts | 6 ++- .../api-driven/src/invite-to-pay/helpers.ts | 1 + .../api-driven/src/permissions/helpers.ts | 2 + .../src/permissions/queries/flows.ts | 2 +- e2e/tests/ui-driven/package.json | 2 +- e2e/tests/ui-driven/pnpm-lock.yaml | 40 +++++++-------- e2e/tests/ui-driven/src/context.ts | 3 ++ .../ui-driven/src/invite-to-pay/agent.spec.ts | 1 + .../src/invite-to-pay/nominee.spec.ts | 1 + e2e/tests/ui-driven/src/pay.spec.ts | 1 + .../ui-driven/src/save-and-return.spec.ts | 1 + e2e/tests/ui-driven/src/sections.spec.ts | 1 + editor.planx.uk/package.json | 4 +- editor.planx.uk/pnpm-lock.yaml | 51 ++++++++++++++----- .../src/@planx/components/List/Editor.tsx | 1 + .../src/@planx/components/Pay/Editor.tsx | 1 - .../src/pages/FlowEditor/lib/store/editor.ts | 22 ++++++-- .../src/pages/FlowEditor/lib/store/shared.ts | 18 +++---- editor.planx.uk/src/pages/Team.tsx | 15 +++--- editor.planx.uk/src/routes/team.tsx | 14 ++++- editor.planx.uk/src/routes/views/draft.tsx | 4 +- editor.planx.uk/src/routes/views/preview.tsx | 8 ++- .../src/routes/views/published.tsx | 2 + .../src/routes/views/standalone.tsx | 9 ++-- editor.planx.uk/src/types.ts | 1 + 31 files changed, 187 insertions(+), 116 deletions(-) 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/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/package.json b/api.planx.uk/package.json index a2e5d0b35a..d089ee7276 100644 --- a/api.planx.uk/package.json +++ b/api.planx.uk/package.json @@ -4,7 +4,7 @@ "private": true, "dependencies": { "@airbrake/node": "^2.1.8", - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#9bebbd9", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#5b8c840", "@types/isomorphic-fetch": "^0.0.36", "adm-zip": "^0.5.10", "aws-sdk": "^2.1467.0", diff --git a/api.planx.uk/pnpm-lock.yaml b/api.planx.uk/pnpm-lock.yaml index 89ec048f12..91194d1167 100644 --- a/api.planx.uk/pnpm-lock.yaml +++ b/api.planx.uk/pnpm-lock.yaml @@ -12,8 +12,8 @@ dependencies: specifier: ^2.1.8 version: 2.1.8 '@opensystemslab/planx-core': - specifier: git+https://github.com/theopensystemslab/planx-core#9bebbd9 - version: github.com/theopensystemslab/planx-core/9bebbd9 + specifier: git+https://github.com/theopensystemslab/planx-core#5b8c840 + version: github.com/theopensystemslab/planx-core/5b8c840 '@types/isomorphic-fetch': specifier: ^0.0.36 version: 0.0.36 @@ -2324,7 +2324,7 @@ packages: - supports-color dev: false - /ajv-formats@2.1.1(ajv@8.15.0): + /ajv-formats@2.1.1(ajv@8.16.0): resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: ajv: ^8.0.0 @@ -2332,7 +2332,7 @@ packages: ajv: optional: true dependencies: - ajv: 8.15.0 + ajv: 8.16.0 dev: false /ajv@6.12.6: @@ -2343,13 +2343,13 @@ packages: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - /ajv@8.15.0: - resolution: {integrity: sha512-15BTtQUOsSrmHCy+B4VnAiJAJxJ8IFgu6fcjFQF3jQYZ78nLSQthlFg4ehp+NLIyfvFgOlxNsjKIEhydtFPVHQ==} + /ajv@8.16.0: + resolution: {integrity: sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==} dependencies: fast-deep-equal: 3.1.3 - fast-uri: 2.3.0 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 + uri-js: 4.4.1 dev: false /ansi-escapes@4.3.2: @@ -4100,10 +4100,6 @@ packages: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} dev: true - /fast-uri@2.3.0: - resolution: {integrity: sha512-eel5UKGn369gGEWOqBShmFJWfq/xSJvsgDzgLYC845GneayWvXBf0lJCBn5qTABfewy1ZDPoaR5OZCP+kssfuw==} - dev: false - /fast-url-parser@1.1.3: resolution: {integrity: sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==} dependencies: @@ -5623,7 +5619,7 @@ packages: mkdirp: 3.0.1 mz: 2.7.0 node-fetch: 3.3.2 - prettier: 3.3.0 + prettier: 3.3.1 dev: false /json-schema-traverse@0.4.1: @@ -6674,8 +6670,8 @@ packages: hasBin: true dev: true - /prettier@3.3.0: - resolution: {integrity: sha512-J9odKxERhCQ10OC2yb93583f6UnYutOeiV5i0zEDS7UGTdUt0u+y8erxl3lBKvwo/JHyyoEdXjwp4dke9oyZ/g==} + /prettier@3.3.1: + resolution: {integrity: sha512-7CAwy5dRsxs8PHXT3twixW9/OEll8MLE0VRPCJyl7CkS6VHGPSlsVaWTiASPTyGyYRyApxlaWTzwUxVNrhcwDg==} engines: {node: '>=14'} hasBin: true dev: false @@ -7875,8 +7871,8 @@ packages: engines: {node: '>=16'} dev: false - /type-fest@4.18.3: - resolution: {integrity: sha512-Q08/0IrpvM+NMY9PA2rti9Jb+JejTddwmwmVQGskAlhtcrw1wsRzoR6ode6mR+OAabNa75w/dxedSUY2mlphaQ==} + /type-fest@4.20.0: + resolution: {integrity: sha512-MBh+PHUHHisjXf4tlx0CFWoMdjx8zCMLJHOjnV1prABYZFHqtFOyauCIK2/7w4oIfwkF8iNhLtnJEfVY2vn3iw==} engines: {node: '>=16'} dev: false @@ -8305,8 +8301,8 @@ packages: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} dev: false - github.com/theopensystemslab/planx-core/9bebbd9: - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/9bebbd9} + github.com/theopensystemslab/planx-core/5b8c840: + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/5b8c840} name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true @@ -8316,8 +8312,8 @@ packages: '@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.15.0 - ajv-formats: 2.1.1(ajv@8.15.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 @@ -8328,10 +8324,10 @@ packages: json-schema-to-typescript: 14.0.5 lodash: 4.17.21 marked: 12.0.2 - prettier: 3.3.0 + prettier: 3.3.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - type-fest: 4.18.3 + type-fest: 4.20.0 uuid: 9.0.1 zod: 3.23.8 transitivePeerDependencies: diff --git a/e2e/tests/api-driven/package.json b/e2e/tests/api-driven/package.json index cc5fd48c02..92eaafff95 100644 --- a/e2e/tests/api-driven/package.json +++ b/e2e/tests/api-driven/package.json @@ -6,7 +6,7 @@ }, "dependencies": { "@cucumber/cucumber": "^9.3.0", - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#9bebbd9", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#5b8c840", "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 6725026776..7e5cbd89a9 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#9bebbd9 - version: github.com/theopensystemslab/planx-core/9bebbd9 + specifier: git+https://github.com/theopensystemslab/planx-core#5b8c840 + version: github.com/theopensystemslab/planx-core/5b8c840 axios: specifier: ^1.6.8 version: 1.6.8 @@ -780,7 +780,7 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - /ajv-formats@2.1.1(ajv@8.15.0): + /ajv-formats@2.1.1(ajv@8.16.0): resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: ajv: ^8.0.0 @@ -788,7 +788,7 @@ packages: ajv: optional: true dependencies: - ajv: 8.15.0 + ajv: 8.16.0 dev: false /ajv@6.12.6: @@ -800,13 +800,13 @@ packages: uri-js: 4.4.1 dev: false - /ajv@8.15.0: - resolution: {integrity: sha512-15BTtQUOsSrmHCy+B4VnAiJAJxJ8IFgu6fcjFQF3jQYZ78nLSQthlFg4ehp+NLIyfvFgOlxNsjKIEhydtFPVHQ==} + /ajv@8.16.0: + resolution: {integrity: sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==} dependencies: fast-deep-equal: 3.1.3 - fast-uri: 2.3.0 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 + uri-js: 4.4.1 dev: false /ansi-regex@4.1.1: @@ -1454,10 +1454,6 @@ packages: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} dev: false - /fast-uri@2.3.0: - resolution: {integrity: sha512-eel5UKGn369gGEWOqBShmFJWfq/xSJvsgDzgLYC845GneayWvXBf0lJCBn5qTABfewy1ZDPoaR5OZCP+kssfuw==} - dev: false - /fast-xml-parser@4.4.0: resolution: {integrity: sha512-kLY3jFlwIYwBNDojclKsNAC12sfD6NwW74QB2CoNGPvtVxjliYehVunB3HYyNi+n4Tt1dAcgwYvmKF/Z18flqg==} hasBin: true @@ -1829,7 +1825,7 @@ packages: mkdirp: 3.0.1 mz: 2.7.0 node-fetch: 3.3.2 - prettier: 3.3.0 + prettier: 3.3.1 dev: false /json-schema-traverse@0.4.1: @@ -2292,8 +2288,8 @@ packages: engines: {node: '>= 0.8.0'} dev: false - /prettier@3.3.0: - resolution: {integrity: sha512-J9odKxERhCQ10OC2yb93583f6UnYutOeiV5i0zEDS7UGTdUt0u+y8erxl3lBKvwo/JHyyoEdXjwp4dke9oyZ/g==} + /prettier@3.3.1: + resolution: {integrity: sha512-7CAwy5dRsxs8PHXT3twixW9/OEll8MLE0VRPCJyl7CkS6VHGPSlsVaWTiASPTyGyYRyApxlaWTzwUxVNrhcwDg==} engines: {node: '>=14'} hasBin: true dev: false @@ -2736,8 +2732,8 @@ packages: engines: {node: '>=10'} dev: false - /type-fest@4.18.3: - resolution: {integrity: sha512-Q08/0IrpvM+NMY9PA2rti9Jb+JejTddwmwmVQGskAlhtcrw1wsRzoR6ode6mR+OAabNa75w/dxedSUY2mlphaQ==} + /type-fest@4.20.0: + resolution: {integrity: sha512-MBh+PHUHHisjXf4tlx0CFWoMdjx8zCMLJHOjnV1prABYZFHqtFOyauCIK2/7w4oIfwkF8iNhLtnJEfVY2vn3iw==} engines: {node: '>=16'} dev: false @@ -2940,8 +2936,8 @@ packages: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} dev: false - github.com/theopensystemslab/planx-core/9bebbd9: - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/9bebbd9} + github.com/theopensystemslab/planx-core/5b8c840: + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/5b8c840} name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true @@ -2951,8 +2947,8 @@ packages: '@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.15.0 - ajv-formats: 2.1.1(ajv@8.15.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 @@ -2963,10 +2959,10 @@ packages: json-schema-to-typescript: 14.0.5 lodash: 4.17.21 marked: 12.0.2 - prettier: 3.3.0 + prettier: 3.3.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - type-fest: 4.18.3 + type-fest: 4.20.0 uuid: 9.0.1 zod: 3.23.8 transitivePeerDependencies: 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/invite-to-pay/helpers.ts b/e2e/tests/api-driven/src/invite-to-pay/helpers.ts index 302be5dd57..4a856b1b77 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, }); 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..4f2215939b 100644 --- a/e2e/tests/api-driven/src/permissions/queries/flows.ts +++ b/e2e/tests/api-driven/src/permissions/queries/flows.ts @@ -16,7 +16,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/ui-driven/package.json b/e2e/tests/ui-driven/package.json index 142ebda58e..30cf3a65b1 100644 --- a/e2e/tests/ui-driven/package.json +++ b/e2e/tests/ui-driven/package.json @@ -8,7 +8,7 @@ "postinstall": "./install-dependencies.sh" }, "dependencies": { - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#9bebbd9", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#5b8c840", "axios": "^1.6.8", "dotenv": "^16.3.1", "eslint": "^8.56.0", diff --git a/e2e/tests/ui-driven/pnpm-lock.yaml b/e2e/tests/ui-driven/pnpm-lock.yaml index f7521951db..23b37e734a 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#9bebbd9 - version: github.com/theopensystemslab/planx-core/9bebbd9 + specifier: git+https://github.com/theopensystemslab/planx-core#5b8c840 + version: github.com/theopensystemslab/planx-core/5b8c840 axios: specifier: ^1.6.8 version: 1.6.8 @@ -601,7 +601,7 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - /ajv-formats@2.1.1(ajv@8.15.0): + /ajv-formats@2.1.1(ajv@8.16.0): resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: ajv: ^8.0.0 @@ -609,7 +609,7 @@ packages: ajv: optional: true dependencies: - ajv: 8.15.0 + ajv: 8.16.0 dev: false /ajv@6.12.6: @@ -629,13 +629,13 @@ packages: uri-js: 4.4.1 dev: false - /ajv@8.15.0: - resolution: {integrity: sha512-15BTtQUOsSrmHCy+B4VnAiJAJxJ8IFgu6fcjFQF3jQYZ78nLSQthlFg4ehp+NLIyfvFgOlxNsjKIEhydtFPVHQ==} + /ajv@8.16.0: + resolution: {integrity: sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==} dependencies: fast-deep-equal: 3.1.3 - fast-uri: 2.3.0 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 + uri-js: 4.4.1 dev: false /ansi-align@3.0.1: @@ -1348,10 +1348,6 @@ packages: /fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - /fast-uri@2.3.0: - resolution: {integrity: sha512-eel5UKGn369gGEWOqBShmFJWfq/xSJvsgDzgLYC845GneayWvXBf0lJCBn5qTABfewy1ZDPoaR5OZCP+kssfuw==} - dev: false - /fast-url-parser@1.1.3: resolution: {integrity: sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==} dependencies: @@ -1707,7 +1703,7 @@ packages: mkdirp: 3.0.1 mz: 2.7.0 node-fetch: 3.3.2 - prettier: 3.3.0 + prettier: 3.3.1 dev: false /json-schema-traverse@0.4.1: @@ -2149,8 +2145,8 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - /prettier@3.3.0: - resolution: {integrity: sha512-J9odKxERhCQ10OC2yb93583f6UnYutOeiV5i0zEDS7UGTdUt0u+y8erxl3lBKvwo/JHyyoEdXjwp4dke9oyZ/g==} + /prettier@3.3.1: + resolution: {integrity: sha512-7CAwy5dRsxs8PHXT3twixW9/OEll8MLE0VRPCJyl7CkS6VHGPSlsVaWTiASPTyGyYRyApxlaWTzwUxVNrhcwDg==} engines: {node: '>=14'} hasBin: true dev: false @@ -2533,8 +2529,8 @@ packages: engines: {node: '>=12.20'} dev: false - /type-fest@4.18.3: - resolution: {integrity: sha512-Q08/0IrpvM+NMY9PA2rti9Jb+JejTddwmwmVQGskAlhtcrw1wsRzoR6ode6mR+OAabNa75w/dxedSUY2mlphaQ==} + /type-fest@4.20.0: + resolution: {integrity: sha512-MBh+PHUHHisjXf4tlx0CFWoMdjx8zCMLJHOjnV1prABYZFHqtFOyauCIK2/7w4oIfwkF8iNhLtnJEfVY2vn3iw==} engines: {node: '>=16'} dev: false @@ -2688,8 +2684,8 @@ packages: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} dev: false - github.com/theopensystemslab/planx-core/9bebbd9: - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/9bebbd9} + github.com/theopensystemslab/planx-core/5b8c840: + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/5b8c840} name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true @@ -2699,8 +2695,8 @@ packages: '@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.15.0 - ajv-formats: 2.1.1(ajv@8.15.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 @@ -2711,10 +2707,10 @@ packages: json-schema-to-typescript: 14.0.5 lodash: 4.17.21 marked: 12.0.2 - prettier: 3.3.0 + prettier: 3.3.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - type-fest: 4.18.3 + type-fest: 4.20.0 uuid: 9.0.1 zod: 3.23.8 transitivePeerDependencies: diff --git a/e2e/tests/ui-driven/src/context.ts b/e2e/tests/ui-driven/src/context.ts index b9369b6e02..f2ccb89479 100644 --- a/e2e/tests/ui-driven/src/context.ts +++ b/e2e/tests/ui-driven/src/context.ts @@ -25,6 +25,7 @@ export interface Context { id?: string; publishedId?: number; slug: string; + name: string; data?: object; }; sessionIds?: string[]; @@ -67,11 +68,13 @@ export async function setUpTestContext( 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/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/nominee.spec.ts b/e2e/tests/ui-driven/src/invite-to-pay/nominee.spec.ts index d200fc05bb..db126996e9 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 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 489774a832..38c0449911 100644 --- a/editor.planx.uk/package.json +++ b/editor.planx.uk/package.json @@ -13,7 +13,7 @@ "@mui/material": "^5.15.2", "@mui/utils": "^5.15.2", "@opensystemslab/map": "^0.8.2", - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#9bebbd9", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#5b8c840", "@tiptap/core": "^2.4.0", "@tiptap/extension-bold": "^2.0.3", "@tiptap/extension-bubble-menu": "^2.1.13", @@ -222,4 +222,4 @@ "follow-redirects@<1.15.4": ">=1.15.4" } } -} \ No newline at end of file +} diff --git a/editor.planx.uk/pnpm-lock.yaml b/editor.planx.uk/pnpm-lock.yaml index 03374bfb2c..0c82366c43 100644 --- a/editor.planx.uk/pnpm-lock.yaml +++ b/editor.planx.uk/pnpm-lock.yaml @@ -41,8 +41,8 @@ dependencies: specifier: ^0.8.2 version: 0.8.2 '@opensystemslab/planx-core': - specifier: git+https://github.com/theopensystemslab/planx-core#9bebbd9 - version: github.com/theopensystemslab/planx-core/9bebbd9(@types/react@18.2.45) + specifier: git+https://github.com/theopensystemslab/planx-core#5b8c840 + version: github.com/theopensystemslab/planx-core/5b8c840(@types/react@18.2.45) '@tiptap/core': specifier: ^2.4.0 version: 2.4.0(@tiptap/pm@2.0.3) @@ -8970,6 +8970,17 @@ packages: dependencies: ajv: 8.15.0 + /ajv-formats@2.1.1(ajv@8.16.0): + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + dependencies: + ajv: 8.16.0 + dev: false + /ajv-keywords@3.5.2(ajv@6.12.6): resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} peerDependencies: @@ -9001,6 +9012,15 @@ packages: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 + /ajv@8.16.0: + resolution: {integrity: sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==} + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + dev: false + /ansi-escapes@4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} @@ -14901,7 +14921,7 @@ packages: mkdirp: 3.0.1 mz: 2.7.0 node-fetch: 3.3.2 - prettier: 3.3.0 + prettier: 3.3.1 dev: false /json-schema-traverse@0.4.1: @@ -17442,6 +17462,13 @@ packages: resolution: {integrity: sha512-J9odKxERhCQ10OC2yb93583f6UnYutOeiV5i0zEDS7UGTdUt0u+y8erxl3lBKvwo/JHyyoEdXjwp4dke9oyZ/g==} engines: {node: '>=14'} hasBin: true + dev: true + + /prettier@3.3.1: + resolution: {integrity: sha512-7CAwy5dRsxs8PHXT3twixW9/OEll8MLE0VRPCJyl7CkS6VHGPSlsVaWTiASPTyGyYRyApxlaWTzwUxVNrhcwDg==} + engines: {node: '>=14'} + hasBin: true + dev: false /pretty-bytes@5.6.0: resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} @@ -20431,8 +20458,8 @@ packages: engines: {node: '>=16'} dev: false - /type-fest@4.18.3: - resolution: {integrity: sha512-Q08/0IrpvM+NMY9PA2rti9Jb+JejTddwmwmVQGskAlhtcrw1wsRzoR6ode6mR+OAabNa75w/dxedSUY2mlphaQ==} + /type-fest@4.20.0: + resolution: {integrity: sha512-MBh+PHUHHisjXf4tlx0CFWoMdjx8zCMLJHOjnV1prABYZFHqtFOyauCIK2/7w4oIfwkF8iNhLtnJEfVY2vn3iw==} engines: {node: '>=16'} dev: false @@ -21605,9 +21632,9 @@ packages: use-sync-external-store: 1.2.0(react@18.2.0) dev: false - github.com/theopensystemslab/planx-core/9bebbd9(@types/react@18.2.45): - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/9bebbd9} - id: github.com/theopensystemslab/planx-core/9bebbd9 + github.com/theopensystemslab/planx-core/5b8c840(@types/react@18.2.45): + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/5b8c840} + id: github.com/theopensystemslab/planx-core/5b8c840 name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true @@ -21617,8 +21644,8 @@ packages: '@emotion/styled': 11.11.5(@emotion/react@11.11.4)(@types/react@18.2.45)(react@18.3.1) '@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.15.0 - ajv-formats: 2.1.1(ajv@8.15.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 @@ -21629,10 +21656,10 @@ packages: json-schema-to-typescript: 14.0.5 lodash: 4.17.21 marked: 12.0.2 - prettier: 3.3.0 + prettier: 3.3.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - type-fest: 4.18.3 + type-fest: 4.20.0 uuid: 9.0.1 zod: 3.23.8 transitivePeerDependencies: diff --git a/editor.planx.uk/src/@planx/components/List/Editor.tsx b/editor.planx.uk/src/@planx/components/List/Editor.tsx index c55f3c50d7..df383537d2 100644 --- a/editor.planx.uk/src/@planx/components/List/Editor.tsx +++ b/editor.planx.uk/src/@planx/components/List/Editor.tsx @@ -14,6 +14,7 @@ import InputRowLabel from "ui/shared/InputRowLabel"; import { EditorProps, ICONS, InternalNotes, MoreInformation } from "../ui"; import { List, parseContent } from "./model"; import { ProposedAdvertisements } from "./schemas/Adverts"; + import { BuildingDetailsGLA } from "./schemas/GLA/BuildingDetails"; import { CommunalSpaceGLA } from "./schemas/GLA/CommunalSpace"; import { ExistingAndProposedUsesGLA } from "./schemas/GLA/ExistingAndProposedUses"; diff --git a/editor.planx.uk/src/@planx/components/Pay/Editor.tsx b/editor.planx.uk/src/@planx/components/Pay/Editor.tsx index 528756c6d2..423d37a44e 100644 --- a/editor.planx.uk/src/@planx/components/Pay/Editor.tsx +++ b/editor.planx.uk/src/@planx/components/Pay/Editor.tsx @@ -137,7 +137,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: diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/store/editor.ts b/editor.planx.uk/src/pages/FlowEditor/lib/store/editor.ts index 21ac46dc07..a3b24ef3e3 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/store/editor.ts +++ b/editor.planx.uk/src/pages/FlowEditor/lib/store/editor.ts @@ -73,7 +73,7 @@ export interface EditorStore extends Store.Store { connectTo: (id: Store.nodeId) => void; copyFlow: (flowId: string) => Promise; copyNode: (id: Store.nodeId) => void; - createFlow: (teamId: any, newSlug: any) => Promise; + createFlow: (teamId: any, newSlug: any, newName: string) => Promise; deleteFlow: (teamId: number, flowSlug: string) => Promise; validateAndDiffFlow: (flowId: string) => Promise; getFlows: (teamId: number) => Promise; @@ -139,7 +139,12 @@ export const editorStore: StateCreator< const cloneStateFromShareDb = () => { const flow = JSON.parse(JSON.stringify(doc.data)); - get().setFlow({ id, flow, flowSlug: get().flowSlug }); + get().setFlow({ + id, + flow, + flowSlug: get().flowSlug, + flowName: get().flowName, + }); }; // set state from initial load @@ -186,12 +191,17 @@ export const editorStore: StateCreator< localStorage.setItem("clipboard", id); }, - createFlow: async (teamId, newSlug) => { + createFlow: async (teamId, newSlug, newName) => { let response = (await client.mutate({ mutation: gql` - mutation CreateFlow($data: jsonb, $slug: String, $teamId: Int) { + mutation CreateFlow( + $data: jsonb + $slug: String + $teamId: Int + $name: String + ) { insert_flows_one( - object: { slug: $slug, team_id: $teamId, version: 1 } + object: { slug: $slug, team_id: $teamId, version: 1, name: $name } ) { id data @@ -199,6 +209,7 @@ export const editorStore: StateCreator< } `, variables: { + name: newName, slug: newSlug, teamId, }, @@ -274,6 +285,7 @@ export const editorStore: StateCreator< query GetFlow($teamId: Int!) { flows(where: { team: { id: { _eq: $teamId } } }) { id + name slug updatedAt: updated_at operations(limit: 1, order_by: { created_at: desc }) { diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/store/shared.ts b/editor.planx.uk/src/pages/FlowEditor/lib/store/shared.ts index 3b4381a463..ff71086a35 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/store/shared.ts +++ b/editor.planx.uk/src/pages/FlowEditor/lib/store/shared.ts @@ -24,18 +24,20 @@ export interface SharedStore extends Store.Store { id, flow, flowSlug, + flowName, flowStatus, }: { - id: string; - flow: Store.flow; - flowSlug: string; + id?: string; + flow?: Store.flow; + flowSlug?: string; + flowName?: string; flowStatus?: FlowStatus; }) => void; wasVisited: (id: Store.nodeId) => boolean; previewEnvironment: PreviewEnvironment; setPreviewEnvironment: (previewEnvironment: PreviewEnvironment) => void; setFlowSlug: (flowSlug: string) => void; - setFlowNameFromSlug: (flowSlug: string) => void; + setFlowName: (flowName: string) => void; $public: (auth?: Auth) => CoreDomainClient; $client: CoreDomainClient; } @@ -91,9 +93,8 @@ export const sharedStore: StateCreator< removeSessionIdSearchParam(); }, - setFlow({ id, flow, flowSlug, flowStatus }) { - this.setFlowNameFromSlug(flowSlug); - set({ id, flow, flowSlug, flowStatus }); + setFlow({ id, flow, flowSlug, flowName, flowStatus }) { + set({ id, flow, flowSlug, flowName, flowStatus }); get().initNavigationStore(); }, @@ -110,8 +111,7 @@ export const sharedStore: StateCreator< set({ flowSlug }); }, - setFlowNameFromSlug(flowSlug) { - const flowName = capitalize(flowSlug.replaceAll?.("-", " ")); + setFlowName(flowName) { set({ flowName }); }, diff --git a/editor.planx.uk/src/pages/Team.tsx b/editor.planx.uk/src/pages/Team.tsx index 0de4b82836..d530c235f8 100644 --- a/editor.planx.uk/src/pages/Team.tsx +++ b/editor.planx.uk/src/pages/Team.tsx @@ -193,7 +193,7 @@ const FlowItem: React.FC = ({ - {flow.slug} + {flow.name} {formatLastEditMessage( @@ -207,21 +207,23 @@ const FlowItem: React.FC = ({ items={[ { onClick: async () => { - const newSlug = prompt("New name", flow.slug); - if (newSlug && slugify(newSlug) !== flow.slug) { + const newName = prompt("New name", flow.name); + if (newName && newName !== flow.name) { + const newSlug = slugify(newName); await client.mutate({ mutation: gql` mutation UpdateFlowSlug( $teamId: Int $slug: String $newSlug: String + $newName: String ) { update_flows( where: { team: { id: { _eq: $teamId } } slug: { _eq: $slug } } - _set: { slug: $newSlug } + _set: { slug: $newSlug, name: $newName } ) { affected_rows } @@ -230,7 +232,8 @@ const FlowItem: React.FC = ({ variables: { teamId: teamId, slug: flow.slug, - newSlug: slugify(newSlug), + newSlug: newSlug, + newName: newName, }, }); @@ -328,7 +331,7 @@ const Team: React.FC = () => { const newFlowSlug = slugify(newFlowName); useStore .getState() - .createFlow(teamId, newFlowSlug) + .createFlow(teamId, newFlowSlug, newFlowName) .then((newId: string) => { navigation.navigate(`/${slug}/${newId}`); }); diff --git a/editor.planx.uk/src/routes/team.tsx b/editor.planx.uk/src/routes/team.tsx index 60e68060f2..2d956b14a6 100644 --- a/editor.planx.uk/src/routes/team.tsx +++ b/editor.planx.uk/src/routes/team.tsx @@ -1,5 +1,15 @@ +import { FlowGraph } from "@opensystemslab/planx-core/types"; +import axios from "axios"; import gql from "graphql-tag"; -import { compose, lazy, mount, route, withData, withView } from "navi"; +import { + compose, + lazy, + mount, + NotFoundError, + route, + withData, + withView, +} from "navi"; import React from "react"; import { client } from "../lib/graphql"; @@ -50,6 +60,7 @@ const routes = compose( } ) { id + name } } `, @@ -65,6 +76,7 @@ const routes = compose( }); } + useStore.getState().setFlowName(flow.name); useStore.getState().setFlowSlug(slug); await useStore.getState().connectTo(flow.id); } diff --git a/editor.planx.uk/src/routes/views/draft.tsx b/editor.planx.uk/src/routes/views/draft.tsx index d5b85c679c..5860824a5f 100644 --- a/editor.planx.uk/src/routes/views/draft.tsx +++ b/editor.planx.uk/src/routes/views/draft.tsx @@ -32,8 +32,7 @@ export const draftView = async (req: NaviRequest) => { const flowData = await fetchDraftFlattenedFlowData(flow.id); const state = useStore.getState(); - state.setFlow({ id: flow.id, flow: flowData, flowSlug }); - state.setFlowNameFromSlug(flowSlug); + state.setFlow({ id: flow.id, flow: flowData, flowSlug, flowName: flow.name }); state.setGlobalSettings(data.globalSettings[0]); state.setFlowSettings(flow.settings); state.setTeam(flow.team); @@ -80,6 +79,7 @@ const fetchSettingsForDraftView = async ( } settings slug + name } globalSettings: global_settings { footerContent: footer_content diff --git a/editor.planx.uk/src/routes/views/preview.tsx b/editor.planx.uk/src/routes/views/preview.tsx index 0cedf9545a..49346eb542 100644 --- a/editor.planx.uk/src/routes/views/preview.tsx +++ b/editor.planx.uk/src/routes/views/preview.tsx @@ -28,8 +28,12 @@ export const previewView = async (req: NaviRequest) => { const flowData = await fetchFlattenedFlowData(flow.id); const state = useStore.getState(); - state.setFlow({ id: flow.id, flow: flowData, flowSlug }); - state.setFlowNameFromSlug(flowSlug); + state.setFlow({ + id: flow.id, + flow: flowData, + flowSlug, + flowName: flow.name, + }); state.setGlobalSettings(data.globalSettings[0]); state.setFlowSettings(flow.settings); state.setTeam(flow.team); diff --git a/editor.planx.uk/src/routes/views/published.tsx b/editor.planx.uk/src/routes/views/published.tsx index 5f2b26e470..9570675577 100644 --- a/editor.planx.uk/src/routes/views/published.tsx +++ b/editor.planx.uk/src/routes/views/published.tsx @@ -49,6 +49,7 @@ export const publishedView = async (req: NaviRequest) => { flow: publishedFlow, flowSlug, flowStatus: flow.status, + flowName: flow.name, }); state.setGlobalSettings(data.globalSettings[0]); state.setFlowSettings(flow.settings); @@ -84,6 +85,7 @@ export const fetchSettingsForPublishedView = async ( } ) { id + name team { theme { primaryColour: primary_colour diff --git a/editor.planx.uk/src/routes/views/standalone.tsx b/editor.planx.uk/src/routes/views/standalone.tsx index 75d17bdcdb..5212c41b38 100644 --- a/editor.planx.uk/src/routes/views/standalone.tsx +++ b/editor.planx.uk/src/routes/views/standalone.tsx @@ -11,7 +11,7 @@ import { Flow, GlobalSettings } from "types"; import { getTeamFromDomain } from "../utils"; interface StandaloneViewData { - flows: Pick[]; + flows: Pick[]; globalSettings: GlobalSettings[]; } @@ -24,14 +24,12 @@ const standaloneView = async (req: NaviRequest) => { const teamSlug = req.params.team || (await getTeamFromDomain(window.location.hostname)); const data = await fetchDataForStandaloneView(flowSlug, teamSlug); - const { - flows: [{ team, settings: flowSettings }], + flows: [{ name, team, settings: flowSettings }], globalSettings, } = data; - const state = useStore.getState(); - state.setFlowNameFromSlug(flowSlug); + state.setFlowName(data.flows[0].name); state.setGlobalSettings(globalSettings[0]); state.setFlowSettings(flowSettings); state.setTeam(team); @@ -61,6 +59,7 @@ const fetchDataForStandaloneView = async ( } ) { id + name team { theme { primaryColour: primary_colour diff --git a/editor.planx.uk/src/types.ts b/editor.planx.uk/src/types.ts index ccb534ba1e..9a129e442e 100644 --- a/editor.planx.uk/src/types.ts +++ b/editor.planx.uk/src/types.ts @@ -17,6 +17,7 @@ export type FormikHookReturn = ReturnType; export interface Flow { id: string; slug: string; + name: string; team: Team; settings?: FlowSettings; status?: FlowStatus; From 5db7b2e878dd8a5bc5c8e3dafadd990b72dfa953 Mon Sep 17 00:00:00 2001 From: Jessica McInchak Date: Thu, 13 Jun 2024 11:01:32 +0200 Subject: [PATCH 023/150] chore: drop "LIST_COMPONENT" feature flag (#3269) --- editor.planx.uk/src/lib/featureFlags.ts | 5 +---- .../src/pages/FlowEditor/components/forms/FormModal.tsx | 4 +--- editor.planx.uk/src/pages/Preview/Node.tsx | 2 +- 3 files changed, 3 insertions(+), 8 deletions(-) diff --git a/editor.planx.uk/src/lib/featureFlags.ts b/editor.planx.uk/src/lib/featureFlags.ts index a6a4304ce6..022965a276 100644 --- a/editor.planx.uk/src/lib/featureFlags.ts +++ b/editor.planx.uk/src/lib/featureFlags.ts @@ -1,8 +1,5 @@ // add/edit/remove feature flags in array below -const AVAILABLE_FEATURE_FLAGS = [ - "EDITOR_NAVIGATION", - "LIST_COMPONENT", -] as const; +const AVAILABLE_FEATURE_FLAGS = ["EDITOR_NAVIGATION"] as const; type FeatureFlag = (typeof AVAILABLE_FEATURE_FLAGS)[number]; diff --git a/editor.planx.uk/src/pages/FlowEditor/components/forms/FormModal.tsx b/editor.planx.uk/src/pages/FlowEditor/components/forms/FormModal.tsx index fb12ce623b..1aae0ee578 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/forms/FormModal.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/forms/FormModal.tsx @@ -61,9 +61,7 @@ const NodeTypeSelect: React.FC<{ - {hasFeatureFlag("LIST_COMPONENT") && ( - - )} + diff --git a/editor.planx.uk/src/pages/Preview/Node.tsx b/editor.planx.uk/src/pages/Preview/Node.tsx index eb6ace5e29..827b2633b5 100644 --- a/editor.planx.uk/src/pages/Preview/Node.tsx +++ b/editor.planx.uk/src/pages/Preview/Node.tsx @@ -170,7 +170,7 @@ const Node: React.FC = (props: Props) => { return ; case TYPES.List: - return hasFeatureFlag("LIST_COMPONENT") ? : null; + return ; case TYPES.NextSteps: return ; From 33ae5fa6c3c313f967a549ab72bc261ed847b7d4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 Jun 2024 11:56:05 +0200 Subject: [PATCH 024/150] [skip pizza] bump braces from 3.0.2 to 3.0.3 in /e2e (#3271) --- e2e/pnpm-lock.yaml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/e2e/pnpm-lock.yaml b/e2e/pnpm-lock.yaml index ade62712c7..c367e2a3d4 100644 --- a/e2e/pnpm-lock.yaml +++ b/e2e/pnpm-lock.yaml @@ -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 From 9aa1302f06e743d5b9f22576073178e6204ad622 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 Jun 2024 11:56:48 +0200 Subject: [PATCH 025/150] [skip pizza] bump braces from 3.0.2 to 3.0.3 in /hasura.planx.uk/tests (#3272) --- hasura.planx.uk/tests/pnpm-lock.yaml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/hasura.planx.uk/tests/pnpm-lock.yaml b/hasura.planx.uk/tests/pnpm-lock.yaml index 0376ee2a93..527e5eceec 100644 --- a/hasura.planx.uk/tests/pnpm-lock.yaml +++ b/hasura.planx.uk/tests/pnpm-lock.yaml @@ -912,11 +912,11 @@ packages: concat-map: 0.0.1 dev: false - /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: false /browserslist@4.21.9: @@ -1201,8 +1201,8 @@ packages: bser: 2.1.1 dev: false - /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 @@ -1947,7 +1947,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: false From 9b96564c2d27b946e053c4406f3829f9a489b226 Mon Sep 17 00:00:00 2001 From: Ian Jones <51156018+ianjon3s@users.noreply.github.com> Date: Thu, 13 Jun 2024 12:54:31 +0100 Subject: [PATCH 026/150] feat: Update editor radio buttons to compact radios (#3266) --- .../src/@planx/components/SetValue/Editor.tsx | 30 ++++++--- .../@planx/components/TextInput/Editor.tsx | 63 ++++++++++--------- .../components/shared/Radio/BasicRadio.tsx | 8 ++- editor.planx.uk/src/theme.ts | 24 ++++++- editor.planx.uk/src/themeOverrides.d.ts | 14 +++++ .../src/ui/shared/Radio.stories.tsx | 27 -------- editor.planx.uk/src/ui/shared/Radio.tsx | 28 --------- 7 files changed, 96 insertions(+), 98 deletions(-) delete mode 100644 editor.planx.uk/src/ui/shared/Radio.stories.tsx delete mode 100644 editor.planx.uk/src/ui/shared/Radio.tsx diff --git a/editor.planx.uk/src/@planx/components/SetValue/Editor.tsx b/editor.planx.uk/src/@planx/components/SetValue/Editor.tsx index 30ffe0264a..69e6de5c4d 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 ( @@ -113,13 +120,20 @@ function SetValueComponent(props: Props) { - { - formik.setFieldValue("operation", newOperation); - }} - /> + + + {options.map((option) => ( + + ))} + + = (props) => { }, validate: () => {}, }); + + const handleRadioChange = (event: React.SyntheticEvent) => { + const target = event.target as HTMLInputElement; + formik.setFieldValue("type", target.value); + }; + return ( @@ -62,36 +70,29 @@ const TextInputComponent: React.FC = (props) => { onChange={formik.handleChange} /> - - { - formik.setFieldValue("type", newType); - }} - /> - + + + + + {[ + { id: "default", title: "Default" }, + { id: "short", title: "Short (max 120 characters)" }, + { id: "long", title: "Long (max 250 characters)" }, + { id: "extraLong", title: "Extra long (max 500 characters)" }, + { id: "email", title: "Email" }, + { id: "phone", title: "Phone" }, + ].map((type) => ( + + ))} + + = ({ id, onChange, title }) => ( +const BasicRadio: React.FC = ({ id, onChange, title, variant = "default" }) => ( } + control={} label={title} - sx={{ pb: 1 }} + sx={variant === "default" ? { pb: 1 } : {}} /> ); diff --git a/editor.planx.uk/src/theme.ts b/editor.planx.uk/src/theme.ts index f94145a3b8..36cc1de503 100644 --- a/editor.planx.uk/src/theme.ts +++ b/editor.planx.uk/src/theme.ts @@ -486,7 +486,29 @@ const getThemeOptions = ({ }, }, }, - }, + variants: [ + { + props: { variant: "compact" }, + style: { + "& label": { paddingBottom: "200px", }, + "&.MuiRadio-root": { + width: "40px", + height: "40px", + margin: "0 0 0 0.25em", + }, + "&.MuiRadio-root::before": { + top: "8px", + left: "8px", + width: "24px", + height: "24px", + }, + "&.MuiRadio-root::after": { + borderWidth: "6px", + }, + }, + }, + ], + }, }, }; diff --git a/editor.planx.uk/src/themeOverrides.d.ts b/editor.planx.uk/src/themeOverrides.d.ts index a23b94e5a1..39704669b5 100644 --- a/editor.planx.uk/src/themeOverrides.d.ts +++ b/editor.planx.uk/src/themeOverrides.d.ts @@ -1,6 +1,8 @@ import "@mui/material/Chip"; // eslint-disable-next-line no-restricted-imports import "@mui/material/styles/createPalette"; +import { RadioProps } from "@mui/material/Radio"; + declare module "@mui/material/Chip" { interface ChipPropsVariantOverrides { @@ -77,3 +79,15 @@ declare module "@mui/material/Button" { prompt: true; } } + +// Append our custom variants to MUI Radio +declare module "@mui/material/Radio" { + interface RadioPropsVariantOverrides { + compact: true; + } +} +declare module "@mui/material" { + interface RadioProps { + variant?: keyof RadioPropsVariantOverrides; + } +} diff --git a/editor.planx.uk/src/ui/shared/Radio.stories.tsx b/editor.planx.uk/src/ui/shared/Radio.stories.tsx deleted file mode 100644 index 72b3c18d07..0000000000 --- a/editor.planx.uk/src/ui/shared/Radio.stories.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import { Meta, StoryObj } from "@storybook/react"; -import Radio from "ui/shared/Radio"; - -const meta = { - title: "Design System/Atoms/Form Elements/Radio", - component: Radio, -} satisfies Meta; - -type Story = StoryObj; - -export default meta; - -export const Basic = { - args: { - value: "option-a", - options: [ - { - label: "Option A", - value: "option-a", - }, - { - label: "Option B", - value: "option-b", - }, - ], - }, -} satisfies Story; diff --git a/editor.planx.uk/src/ui/shared/Radio.tsx b/editor.planx.uk/src/ui/shared/Radio.tsx deleted file mode 100644 index 5514739ef4..0000000000 --- a/editor.planx.uk/src/ui/shared/Radio.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import Box from "@mui/material/Box"; -import React from "react"; - -import OptionButton from "../editor/OptionButton"; - -interface RadioProps { - value?: T; - options: Array<{ label: string; value: T }>; - onChange: (newValue: T) => void; -} - -export default function Radio(props: RadioProps) { - return ( - - {props.options.map((option, index) => ( - { - props.onChange(option.value); - }} - > - {option.label} - - ))} - - ); -} From 6d71eef3e6e964ee0e48a2917468e78d09564162 Mon Sep 17 00:00:00 2001 From: Ian Jones <51156018+ianjon3s@users.noreply.github.com> Date: Thu, 13 Jun 2024 17:48:15 +0100 Subject: [PATCH 027/150] feat: Improve visibilty of on/off toggle (#3274) --- .../components/Settings/ServiceSettings.tsx | 1 + editor.planx.uk/src/theme.ts | 60 +++++++++++++++++++ 2 files changed, 61 insertions(+) diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/ServiceSettings.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/ServiceSettings.tsx index d56abc8aa1..2b0c905d0e 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/ServiceSettings.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/ServiceSettings.tsx @@ -244,6 +244,7 @@ const ServiceSettings: React.FC = () => { Date: Fri, 14 Jun 2024 10:34:29 +0100 Subject: [PATCH 028/150] refactor: Remove last edited banner from editor (#3277) --- .../src/pages/FlowEditor/index.tsx | 84 ------------------- 1 file changed, 84 deletions(-) diff --git a/editor.planx.uk/src/pages/FlowEditor/index.tsx b/editor.planx.uk/src/pages/FlowEditor/index.tsx index 937c5561a4..5d3aa6cdfa 100644 --- a/editor.planx.uk/src/pages/FlowEditor/index.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/index.tsx @@ -1,23 +1,15 @@ import "./components/Settings"; import "./floweditor.scss"; -import { gql, useSubscription } from "@apollo/client"; -import EditNoteIcon from "@mui/icons-material/EditNote"; import Box from "@mui/material/Box"; -import Link from "@mui/material/Link"; import { styled } from "@mui/material/styles"; -import Typography from "@mui/material/Typography"; import React, { useRef } from "react"; -import { FONT_WEIGHT_SEMI_BOLD } from "theme"; -import { Operation } from "types"; import { rootFlowPath } from "../../routes/utils"; import Flow from "./components/Flow"; import Sidebar from "./components/Sidebar"; import { useStore } from "./lib/store"; import useScrollControlsAndRememberPosition from "./lib/useScrollControlsAndRememberPosition"; -import { formatLastEditMessage } from "./utils"; - const EditorContainer = styled(Box)(() => ({ display: "flex", alignItems: "stretch", @@ -25,81 +17,6 @@ const EditorContainer = styled(Box)(() => ({ flexGrow: 1, })); -export const LastEdited = () => { - const [flowId] = useStore((state) => [state.id]); - - const { data, loading, error } = useSubscription<{ operations: Operation[] }>( - gql` - subscription GetMostRecentOperation($flow_id: uuid = "") { - operations( - limit: 1 - where: { flow_id: { _eq: $flow_id } } - order_by: { created_at: desc } - ) { - id - createdAt: created_at - actor { - firstName: first_name - lastName: last_name - } - } - } - `, - { - variables: { - flow_id: flowId, - }, - }, - ); - - if (error) { - console.log(error.message); - return null; - } - - // Handle missing operations (e.g. non-production data) - if (data && !data.operations[0].actor) return null; - - let message: string; - if (loading || !data) { - message = "Loading..."; - } else { - const { - operations: [operation], - } = data; - message = formatLastEditMessage(operation?.createdAt, operation?.actor); - } - - return ( - ({ - backgroundColor: theme.palette.grey[200], - borderBottom: `1px solid ${theme.palette.border.main}`, - padding: theme.spacing(0.5, 1), - paddingLeft: theme.spacing(2), - display: "flex", - alignItems: "center", - [theme.breakpoints.up("md")]: { - paddingLeft: theme.spacing(2), - }, - })} - > - - {message} - - - View edit history - - - ); -}; - const FlowEditor: React.FC = ({ flow, breadcrumbs }) => { const scrollContainerRef = useRef(null); useScrollControlsAndRememberPosition(scrollContainerRef); @@ -115,7 +32,6 @@ const FlowEditor: React.FC = ({ flow, breadcrumbs }) => { overflowX: "auto", }} > - From beb8fd54d07346d8d455003d87f7b1ba0a6767bc Mon Sep 17 00:00:00 2001 From: Rory Doak <138574807+RODO94@users.noreply.github.com> Date: Fri, 14 Jun 2024 11:16:00 +0100 Subject: [PATCH 029/150] feat: Updating Email Templates with Flow Name (#3273) --- .../createPaymentSendEvents.test.ts | 1 + .../inviteToPay/sendConfirmationEmail.test.ts | 3 +- .../inviteToPay/sendConfirmationEmail.ts | 3 +- .../service/inviteToPay/sendPaymentEmail.ts | 4 +- .../service/resumeApplication.test.ts | 8 ++++ .../modules/saveAndReturn/service/utils.ts | 14 +++---- api.planx.uk/modules/send/email/index.test.ts | 2 +- api.planx.uk/modules/send/email/index.ts | 2 +- api.planx.uk/modules/send/email/service.ts | 2 + api.planx.uk/package.json | 2 +- api.planx.uk/pnpm-lock.yaml | 8 ++-- api.planx.uk/tests/mocks/inviteToPayData.ts | 2 + api.planx.uk/tests/mocks/inviteToPayMocks.ts | 2 + .../tests/mocks/saveAndReturnMocks.ts | 2 + api.planx.uk/types.ts | 2 + e2e/tests/api-driven/package.json | 2 +- e2e/tests/api-driven/pnpm-lock.yaml | 10 +++-- e2e/tests/ui-driven/package.json | 2 +- e2e/tests/ui-driven/pnpm-lock.yaml | 8 ++-- editor.planx.uk/package.json | 2 +- editor.planx.uk/pnpm-lock.yaml | 39 +++++++++---------- 21 files changed, 72 insertions(+), 48 deletions(-) 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/sendConfirmationEmail.test.ts b/api.planx.uk/modules/pay/service/inviteToPay/sendConfirmationEmail.test.ts index b564744cfb..7739adbd9c 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", @@ -86,7 +87,7 @@ describe("sendAgentAndPayeeConfirmationEmail", () => { 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..8e3801ec99 100644 --- a/api.planx.uk/modules/pay/service/inviteToPay/sendConfirmationEmail.ts +++ b/api.planx.uk/modules/pay/service/inviteToPay/sendConfirmationEmail.ts @@ -68,6 +68,7 @@ async function getDataForPayeeAndAgentEmails( email: string; flow: { slug: string; + name: string; team: { notifyPersonalisation: { emailReplyToId: string; @@ -89,7 +90,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.ts b/api.planx.uk/modules/pay/service/inviteToPay/sendPaymentEmail.ts index 7f0899a204..18293e7d02 100644 --- a/api.planx.uk/modules/pay/service/inviteToPay/sendPaymentEmail.ts +++ b/api.planx.uk/modules/pay/service/inviteToPay/sendPaymentEmail.ts @@ -18,6 +18,7 @@ interface SessionDetails { email: string; flow: { slug: string; + name: string; team: Team; }; } @@ -69,6 +70,7 @@ const validatePaymentRequest = async ( email flow { slug + name team { id name @@ -123,7 +125,7 @@ const getInviteToPayNotifyConfig = async ( (await $public.formatRawProjectTypes( paymentRequest.sessionPreviewData?.["proposal.projectType"] as string[], )) || "Project type not submitted", - serviceName: convertSlugToName(session.flow.slug), + serviceName: session.flow.name, serviceLink: getServiceLink(session.flow.team, session.flow.slug), expiryDate: calculateExpiryDate(paymentRequest.createdAt), paymentLink: getPaymentLink(session, paymentRequest), diff --git a/api.planx.uk/modules/saveAndReturn/service/resumeApplication.test.ts b/api.planx.uk/modules/saveAndReturn/service/resumeApplication.test.ts index 4adf570b9e..18d935ca83 100644 --- a/api.planx.uk/modules/saveAndReturn/service/resumeApplication.test.ts +++ b/api.planx.uk/modules/saveAndReturn/service/resumeApplication.test.ts @@ -49,6 +49,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", }, }, ]; @@ -83,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", }, }, { @@ -100,6 +102,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,6 +120,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", }, }, ]; @@ -158,6 +162,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,6 +180,7 @@ 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", }, }, ]; @@ -206,6 +212,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", }, }, ]; @@ -240,6 +247,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", }, }, ]; diff --git a/api.planx.uk/modules/saveAndReturn/service/utils.ts b/api.planx.uk/modules/saveAndReturn/service/utils.ts index 17da363f69..6184b068c3 100644 --- a/api.planx.uk/modules/saveAndReturn/service/utils.ts +++ b/api.planx.uk/modules/saveAndReturn/service/utils.ts @@ -61,13 +61,10 @@ 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, }; @@ -103,6 +100,7 @@ const validateSingleSessionRequest = async ( has_user_saved flow { slug + name team { name slug @@ -127,6 +125,7 @@ const validateSingleSessionRequest = async ( return { flowSlug: session.flow.slug, + flowName: session.flow.name, team: session.flow.team, session: await getSessionDetails(session), }; @@ -175,12 +174,13 @@ 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, diff --git a/api.planx.uk/modules/send/email/index.test.ts b/api.planx.uk/modules/send/email/index.test.ts index 537c7b69b2..ff6c89e263 100644 --- a/api.planx.uk/modules/send/email/index.test.ts +++ b/api.planx.uk/modules/send/email/index.test.ts @@ -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" }, 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..7ba6e6ffb6 100644 --- a/api.planx.uk/modules/send/email/service.ts +++ b/api.planx.uk/modules/send/email/service.ts @@ -55,6 +55,7 @@ interface GetSessionEmailDetailsById { email: string; flow: { slug: string; + name: string; }; } | null; } @@ -67,6 +68,7 @@ export async function getSessionEmailDetailsById(sessionId: string) { email flow { slug + name } } } diff --git a/api.planx.uk/package.json b/api.planx.uk/package.json index d089ee7276..dcf6f12345 100644 --- a/api.planx.uk/package.json +++ b/api.planx.uk/package.json @@ -4,7 +4,7 @@ "private": true, "dependencies": { "@airbrake/node": "^2.1.8", - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#5b8c840", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#ccca2ac", "@types/isomorphic-fetch": "^0.0.36", "adm-zip": "^0.5.10", "aws-sdk": "^2.1467.0", diff --git a/api.planx.uk/pnpm-lock.yaml b/api.planx.uk/pnpm-lock.yaml index 91194d1167..9ea6cbbcd4 100644 --- a/api.planx.uk/pnpm-lock.yaml +++ b/api.planx.uk/pnpm-lock.yaml @@ -12,8 +12,8 @@ dependencies: specifier: ^2.1.8 version: 2.1.8 '@opensystemslab/planx-core': - specifier: git+https://github.com/theopensystemslab/planx-core#5b8c840 - version: github.com/theopensystemslab/planx-core/5b8c840 + specifier: git+https://github.com/theopensystemslab/planx-core#ccca2ac + version: github.com/theopensystemslab/planx-core/ccca2ac '@types/isomorphic-fetch': specifier: ^0.0.36 version: 0.0.36 @@ -8301,8 +8301,8 @@ packages: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} dev: false - github.com/theopensystemslab/planx-core/5b8c840: - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/5b8c840} + github.com/theopensystemslab/planx-core/ccca2ac: + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/ccca2ac} name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true diff --git a/api.planx.uk/tests/mocks/inviteToPayData.ts b/api.planx.uk/tests/mocks/inviteToPayData.ts index 3393578236..9b00a4c9e1 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,6 +78,7 @@ 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", 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..12415a5222 100644 --- a/api.planx.uk/tests/mocks/saveAndReturnMocks.ts +++ b/api.planx.uk/tests/mocks/saveAndReturnMocks.ts @@ -16,6 +16,7 @@ export const mockTeam = { export const mockFlow: Flow = { id: "dcfd4f07-76da-4b67-9822-2aca92b27551", slug: "slug", + name: "Flow Name", team_id: mockTeam.id, data: { _root: { @@ -63,6 +64,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..aa38f936db 100644 --- a/api.planx.uk/types.ts +++ b/api.planx.uk/types.ts @@ -17,6 +17,7 @@ export interface Node { export interface Flow { id: string; slug: string; + name: string; data: { [key: string]: Node; }; @@ -85,6 +86,7 @@ export interface LowCalSession { has_user_saved: boolean; flow: { slug: string; + name: string; team: Team; }; lockedAt?: string; diff --git a/e2e/tests/api-driven/package.json b/e2e/tests/api-driven/package.json index 92eaafff95..45a707d37a 100644 --- a/e2e/tests/api-driven/package.json +++ b/e2e/tests/api-driven/package.json @@ -6,7 +6,7 @@ }, "dependencies": { "@cucumber/cucumber": "^9.3.0", - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#5b8c840", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#ccca2ac", "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 7e5cbd89a9..62c398b969 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#5b8c840 - version: github.com/theopensystemslab/planx-core/5b8c840 + specifier: git+https://github.com/theopensystemslab/planx-core#ccca2ac + version: github.com/theopensystemslab/planx-core/ccca2ac axios: specifier: ^1.6.8 version: 1.6.8 @@ -446,6 +446,7 @@ packages: /@humanwhocodes/config-array@0.11.14: resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead dependencies: '@humanwhocodes/object-schema': 2.0.3 debug: 4.3.4(supports-color@8.1.1) @@ -461,6 +462,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: @@ -2936,8 +2938,8 @@ packages: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} dev: false - github.com/theopensystemslab/planx-core/5b8c840: - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/5b8c840} + github.com/theopensystemslab/planx-core/ccca2ac: + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/ccca2ac} name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true diff --git a/e2e/tests/ui-driven/package.json b/e2e/tests/ui-driven/package.json index 30cf3a65b1..ff08bc350a 100644 --- a/e2e/tests/ui-driven/package.json +++ b/e2e/tests/ui-driven/package.json @@ -8,7 +8,7 @@ "postinstall": "./install-dependencies.sh" }, "dependencies": { - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#5b8c840", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#ccca2ac", "axios": "^1.6.8", "dotenv": "^16.3.1", "eslint": "^8.56.0", diff --git a/e2e/tests/ui-driven/pnpm-lock.yaml b/e2e/tests/ui-driven/pnpm-lock.yaml index 23b37e734a..0368341d33 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#5b8c840 - version: github.com/theopensystemslab/planx-core/5b8c840 + specifier: git+https://github.com/theopensystemslab/planx-core#ccca2ac + version: github.com/theopensystemslab/planx-core/ccca2ac axios: specifier: ^1.6.8 version: 1.6.8 @@ -2684,8 +2684,8 @@ packages: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} dev: false - github.com/theopensystemslab/planx-core/5b8c840: - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/5b8c840} + github.com/theopensystemslab/planx-core/ccca2ac: + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/ccca2ac} name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true diff --git a/editor.planx.uk/package.json b/editor.planx.uk/package.json index 38c0449911..0c61ef5fe1 100644 --- a/editor.planx.uk/package.json +++ b/editor.planx.uk/package.json @@ -13,7 +13,7 @@ "@mui/material": "^5.15.2", "@mui/utils": "^5.15.2", "@opensystemslab/map": "^0.8.2", - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#5b8c840", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#ccca2ac", "@tiptap/core": "^2.4.0", "@tiptap/extension-bold": "^2.0.3", "@tiptap/extension-bubble-menu": "^2.1.13", diff --git a/editor.planx.uk/pnpm-lock.yaml b/editor.planx.uk/pnpm-lock.yaml index 0c82366c43..aea76e1662 100644 --- a/editor.planx.uk/pnpm-lock.yaml +++ b/editor.planx.uk/pnpm-lock.yaml @@ -41,8 +41,8 @@ dependencies: specifier: ^0.8.2 version: 0.8.2 '@opensystemslab/planx-core': - specifier: git+https://github.com/theopensystemslab/planx-core#5b8c840 - version: github.com/theopensystemslab/planx-core/5b8c840(@types/react@18.2.45) + specifier: git+https://github.com/theopensystemslab/planx-core#ccca2ac + version: github.com/theopensystemslab/planx-core/ccca2ac(@types/react@18.2.45) '@tiptap/core': specifier: ^2.4.0 version: 2.4.0(@tiptap/pm@2.0.3) @@ -6544,11 +6544,11 @@ packages: - supports-color dev: true - /@storybook/builder-manager@8.1.5(prettier@3.3.0): + /@storybook/builder-manager@8.1.5(prettier@3.3.1): resolution: {integrity: sha512-wDiHLV+UPaUN+765WwXkocVRB2QnJ61CjLHbpWaLiJvryFJt+JQ6nAvgSalCRnZxI046ztbS9T6okhpFI011IA==} dependencies: '@fal-works/esbuild-plugin-global-externals': 2.1.2 - '@storybook/core-common': 8.1.5(prettier@3.3.0) + '@storybook/core-common': 8.1.5(prettier@3.3.1) '@storybook/manager': 8.1.5 '@storybook/node-logger': 8.1.5 '@types/ejs': 3.1.5 @@ -6652,12 +6652,12 @@ packages: '@babel/types': 7.24.5 '@ndelangen/get-tarball': 3.0.9 '@storybook/codemod': 8.1.5 - '@storybook/core-common': 8.1.5(prettier@3.3.0) + '@storybook/core-common': 8.1.5(prettier@3.3.1) '@storybook/core-events': 8.1.5 - '@storybook/core-server': 8.1.5(prettier@3.3.0)(react-dom@18.2.0)(react@18.2.0) + '@storybook/core-server': 8.1.5(prettier@3.3.1)(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.3.0) + '@storybook/telemetry': 8.1.5(prettier@3.3.1) '@storybook/types': 8.1.5 '@types/semver': 7.5.8 '@yarnpkg/fslib': 2.10.3 @@ -6796,7 +6796,7 @@ packages: - supports-color dev: true - /@storybook/core-common@8.1.5(prettier@3.3.0): + /@storybook/core-common@8.1.5(prettier@3.3.1): resolution: {integrity: sha512-1QDOT6KPZ9KV7Gs1yyqzvSwGBmNSUB33gckUldSBF4aqP+tZ7W5JIQ6/YTtp3V02sEokZGdL9Ud4LczQxTgy3A==} peerDependencies: prettier: ^2 || ^3 @@ -6825,8 +6825,8 @@ packages: node-fetch: 2.7.0 picomatch: 2.3.1 pkg-dir: 5.0.0 - prettier: 3.3.0 - prettier-fallback: /prettier@3.3.0 + prettier: 3.3.1 + prettier-fallback: /prettier@3.3.1 pretty-hrtime: 1.0.3 resolve-from: 5.0.0 semver: 7.6.2 @@ -6858,16 +6858,16 @@ packages: ts-dedent: 2.2.0 dev: true - /@storybook/core-server@8.1.5(prettier@3.3.0)(react-dom@18.2.0)(react@18.2.0): + /@storybook/core-server@8.1.5(prettier@3.3.1)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-y16W2sg5KIHG6qgbd+a0nBUYHAgiUpPDFF7cdcIpbeOIoqFn+6ECp93MVefukumiSj3sQiJFU/tSm2A8apGltw==} dependencies: '@aw-web-design/x-default-browser': 1.4.126 '@babel/core': 7.24.5 '@babel/parser': 7.24.5 '@discoveryjs/json-ext': 0.5.7 - '@storybook/builder-manager': 8.1.5(prettier@3.3.0) + '@storybook/builder-manager': 8.1.5(prettier@3.3.1) '@storybook/channels': 8.1.5 - '@storybook/core-common': 8.1.5(prettier@3.3.0) + '@storybook/core-common': 8.1.5(prettier@3.3.1) '@storybook/core-events': 8.1.5 '@storybook/csf': 0.1.7 '@storybook/csf-tools': 8.1.5 @@ -6877,7 +6877,7 @@ packages: '@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.3.0) + '@storybook/telemetry': 8.1.5(prettier@3.3.1) '@storybook/types': 8.1.5 '@types/detect-port': 1.3.5 '@types/diff': 5.2.1 @@ -7320,11 +7320,11 @@ packages: qs: 6.12.1 dev: true - /@storybook/telemetry@8.1.5(prettier@3.3.0): + /@storybook/telemetry@8.1.5(prettier@3.3.1): resolution: {integrity: sha512-QbB1Ox7oBaCvIF2TacFjPLi1XYeHxSPeZUuFXeE+tSMdvvWZzYLnXfj/oISmV6Q+X5VZfyJVMrZ2LfeW9CuFNg==} dependencies: '@storybook/client-logger': 8.1.5 - '@storybook/core-common': 8.1.5(prettier@3.3.0) + '@storybook/core-common': 8.1.5(prettier@3.3.1) '@storybook/csf-tools': 8.1.5 chalk: 4.1.2 detect-package-manager: 2.0.1 @@ -17468,7 +17468,6 @@ packages: resolution: {integrity: sha512-7CAwy5dRsxs8PHXT3twixW9/OEll8MLE0VRPCJyl7CkS6VHGPSlsVaWTiASPTyGyYRyApxlaWTzwUxVNrhcwDg==} engines: {node: '>=14'} hasBin: true - dev: false /pretty-bytes@5.6.0: resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} @@ -21632,9 +21631,9 @@ packages: use-sync-external-store: 1.2.0(react@18.2.0) dev: false - github.com/theopensystemslab/planx-core/5b8c840(@types/react@18.2.45): - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/5b8c840} - id: github.com/theopensystemslab/planx-core/5b8c840 + github.com/theopensystemslab/planx-core/ccca2ac(@types/react@18.2.45): + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/ccca2ac} + id: github.com/theopensystemslab/planx-core/ccca2ac name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true From 87de06d74af6f8dfc8b5e9ab4354d93f1d837139 Mon Sep 17 00:00:00 2001 From: Jessica McInchak Date: Fri, 14 Jun 2024 16:19:49 +0200 Subject: [PATCH 030/150] docs: how to add List component schemas (#3279) --- .../how-to-add-a-list-component-schema.md | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 doc/how-to/how-to-add-a-list-component-schema.md 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 From 8e303fec62213f0d0c691006ea2f102790ac962c Mon Sep 17 00:00:00 2001 From: Jessica McInchak Date: Mon, 17 Jun 2024 17:27:56 +0200 Subject: [PATCH 031/150] feat: display existing validation checks in publish dialog (#3276) --- .../modules/flows/validate/helpers.ts | 51 +++ .../modules/flows/validate/service.ts | 199 +++++----- .../modules/flows/validate/validate.test.ts | 128 +++++-- .../components/Sidebar/PublishDialog.tsx | 262 +++++++++++++ .../FlowEditor/components/Sidebar/index.tsx | 346 ++++-------------- editor.planx.uk/src/pages/FlowEditor/utils.ts | 2 +- 6 files changed, 572 insertions(+), 416 deletions(-) create mode 100644 api.planx.uk/modules/flows/validate/helpers.ts create mode 100644 editor.planx.uk/src/pages/FlowEditor/components/Sidebar/PublishDialog.tsx 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 index 132725e59e..6b4dc388c4 100644 --- a/api.planx.uk/modules/flows/validate/service.ts +++ b/api.planx.uk/modules/flows/validate/service.ts @@ -1,91 +1,108 @@ -import * as jsondiffpatch from "jsondiffpatch"; -import { dataMerged, getMostRecentPublishedFlow } from "../../../helpers"; -import intersection from "lodash/intersection"; import { ComponentType, + Edges, FlowGraph, Node, } from "@opensystemslab/planx-core/types"; -import type { Entry } from "type-fest"; +import * as jsondiffpatch from "jsondiffpatch"; +import intersection from "lodash/intersection"; -const validateAndDiffFlow = async (flowId: string) => { - const flattenedFlow = await dataMerged(flowId); +import { dataMerged, getMostRecentPublishedFlow } from "../../../helpers"; +import { + hasComponentType, + isComponentType, + numberOfComponentType, +} from "./helpers"; + +type AlteredNode = { + id: string; + type?: ComponentType; + edges?: Edges; + data?: Node["data"]; +}; - const { - isValid: sectionsAreValid, - message: sectionsValidationMessage, - description: sectionsValidationDescription, - } = validateSections(flattenedFlow); - if (!sectionsAreValid) { - return { - alteredNodes: null, - message: sectionsValidationMessage, - description: sectionsValidationDescription, - }; - } +type ValidationResponse = { + title: string; + status: "Pass" | "Fail" | "Not applicable"; + message: string; +}; - const { - isValid: payIsValid, - message: payValidationMessage, - description: payValidationDescription, - } = validateInviteToPay(flattenedFlow); - if (!payIsValid) { - return { - alteredNodes: null, - message: payValidationMessage, - description: payValidationDescription, - }; - } +interface ValidateAndDiffResponse { + alteredNodes: AlteredNode[] | null; + message: string; + validationChecks?: ValidationResponse[]; +} +const validateAndDiffFlow = async ( + flowId: string, +): Promise => { + const flattenedFlow = await dataMerged(flowId); const mostRecent = await getMostRecentPublishedFlow(flowId); - const delta = jsondiffpatch.diff(mostRecent, flattenedFlow); + 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); + validationChecks.push(sections, inviteToPay); + + // Sort validation checks by status: Fail, Pass, Not applicable + const applicableChecks = validationChecks + .filter((v) => v.status !== "Not applicable") + .sort((a, b) => a.status.localeCompare(b.status)); + const notApplicableChecks = validationChecks.filter( + (v) => v.status === "Not applicable", + ); + const sortedValidationChecks = applicableChecks.concat(notApplicableChecks); + return { alteredNodes, - message: "Changes valid", + message: "Changes queued to publish", + validationChecks: sortedValidationChecks, }; }; -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", + title: "Sections", + status: "Fail", + message: "When using Sections, your flow must start with a Section", }; } if (!allSectionsOnRoot(flowGraph)) { return { - isValid: false, - message: "Cannot publish an invalid flow", - description: + 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 { - isValid: true, - message: "This flow has valid Sections or is not using Sections", + title: "Sections", + status: "Not applicable", + message: "Your flow is not using Sections", }; }; @@ -111,40 +128,38 @@ const allSectionsOnRoot = (flowData: FlowGraph): boolean => { }; 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: + 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 { - ...invalidResponseTemplate, - description: "When using Invite to Pay, your flow must have a Send", + 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 { - ...invalidResponseTemplate, - description: + 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 { - ...invalidResponseTemplate, - description: - "When using Invite to Pay, your flow must have a FindProperty", + title: "Invite to Pay", + status: "Fail", + message: "When using Invite to Pay, your flow must have a FindProperty", }; } @@ -156,17 +171,24 @@ const validateInviteToPay = (flowGraph: FlowGraph): ValidationResponse => { ) ) { return { - ...invalidResponseTemplate, - description: - "When using Invite to Pay, your flow must have a Checklist that sets the passport variable `proposal.projectType`", + 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 { - isValid: true, - message: - "This flow is valid for Invite to Pay or is not using Invite to Pay", + title: "Invite to Pay", + status: "Not applicable", + message: "Your flow is not using Invite to Pay", }; }; @@ -184,49 +206,4 @@ const inviteToPayEnabled = (flowGraph: FlowGraph): boolean => { ); }; -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/validate.test.ts b/api.planx.uk/modules/flows/validate/validate.test.ts index e3be178f10..f17a73052d 100644 --- a/api.planx.uk/modules/flows/validate/validate.test.ts +++ b/api.planx.uk/modules/flows/validate/validate.test.ts @@ -107,12 +107,20 @@ 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", + }, + ]); }); }); @@ -148,12 +156,19 @@ 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", + }, + ]); }); }); }); @@ -180,10 +195,19 @@ 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: "Sections", + status: "Not applicable", + message: "Your flow is not using Sections", + }, + ]); }); }); @@ -219,10 +243,20 @@ 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: "Sections", + status: "Not applicable", + message: "Your flow is not using Sections", + }, + ]); }); }); @@ -254,10 +288,20 @@ 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: "Sections", + status: "Not applicable", + message: "Your flow is not using Sections", + }, + ]); }); }); @@ -291,10 +335,20 @@ 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: "Sections", + status: "Not applicable", + message: "Your flow is not using Sections", + }, + ]); }); }); @@ -330,10 +384,20 @@ 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", + }, + ]); }); }); }); diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Sidebar/PublishDialog.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Sidebar/PublishDialog.tsx new file mode 100644 index 0000000000..da3cd924cb --- /dev/null +++ b/editor.planx.uk/src/pages/FlowEditor/components/Sidebar/PublishDialog.tsx @@ -0,0 +1,262 @@ +import Close from "@mui/icons-material/Close"; +import Done from "@mui/icons-material/Done"; +import NotInterested from "@mui/icons-material/NotInterested"; +import Box from "@mui/material/Box"; +import Button from "@mui/material/Button"; +import Collapse from "@mui/material/Collapse"; +import Divider from "@mui/material/Divider"; +import Link from "@mui/material/Link"; +import List from "@mui/material/List"; +import ListItem from "@mui/material/ListItem"; +import ListItemIcon from "@mui/material/ListItemIcon"; +import ListItemText from "@mui/material/ListItemText"; +import Typography from "@mui/material/Typography"; +import { ComponentType as TYPES } from "@opensystemslab/planx-core/types"; +import React, { useState } from "react"; +import { useAsync } from "react-use"; +import Caret from "ui/icons/Caret"; + +import { formatLastPublishMessage } from "pages/FlowEditor/utils"; +import { useStore } from "../../lib/store"; + +export interface AlteredNode { + id: string; + type: TYPES; + data?: any; +} + +const AlteredNodeListItem = (props: { node: AlteredNode }) => { + const { node } = props; + let text, data; + + if (node.id === "_root") { + text = "Changed _root service by adding, deleting or re-ordering nodes"; + } else if (node.id === "0") { + text = `The entire _root service will be published for the first time`; + } else if (node.id && Object.keys(node).length === 1) { + text = `Deleted node ${node.id}`; + } else if (node.type && node.data) { + text = `Added/edited ${TYPES[node.type]}`; + data = JSON.stringify(node.data, null, 2); + } else { + text = `Added/edited ${TYPES[node.type]}`; + } + + return ( +
  • + {text} + {data &&
    {data}
    } +
  • + ); +}; + +interface Portal { + text: string; + flowId: string; + publishedFlowId: number; + summary: string; + publishedBy: number; + publishedAt: string; +} + +const AlteredNestedFlowListItem = (props: Portal) => { + const { text, flowId, publishedFlowId, summary, publishedAt } = props; + + const [nestedFlowLastPublishedTitle, setNestedFlowLastPublishedTitle] = + useState(); + const lastPublisher = useStore((state) => state.lastPublisher); + + const _nestedFlowLastPublishedRequest = useAsync(async () => { + const user = await lastPublisher(flowId); + setNestedFlowLastPublishedTitle(formatLastPublishMessage(publishedAt, user)); + }); + + return ( + + + {text} + + ) : ( + {text} + ) + } + secondary={ + <> + + {nestedFlowLastPublishedTitle} + + {summary && ( + + {summary} + + )} + + } + /> + + ); +}; + +interface AlteredNodesSummary { + title: string; + portals: Portal[]; + updated: number; + deleted: number; +} + +export const AlteredNodesSummaryContent = (props: { + alteredNodes: AlteredNode[]; + lastPublishedTitle: string; +}) => { + const { alteredNodes, lastPublishedTitle } = props; + const [expandNodes, setExpandNodes] = useState(false); + + const changeSummary: AlteredNodesSummary = { + title: lastPublishedTitle, + portals: [], + updated: 0, + deleted: 0, + }; + + alteredNodes.map((node) => { + if (node.id === "0") { + changeSummary["title"] = + "You are publishing the main service for the first time."; + } else if (node.id && Object.keys(node).length === 1) { + changeSummary["deleted"] += 1; + } else if (node.type === TYPES.InternalPortal) { + if (node.data?.text?.includes("/")) { + changeSummary["portals"].push({ ...node.data, flowId: node.id }); + } + } else if (node.type) { + changeSummary["updated"] += 1; + } + + return changeSummary; + }); + + return ( + + + {`Changes`} + + {changeSummary["title"] && ( + + {changeSummary["title"]} + + )} + {(changeSummary["updated"] > 0 || changeSummary["deleted"] > 0) && ( + + + + {`${changeSummary["updated"]} nodes have been updated or added`} + + + {`${changeSummary["deleted"]} nodes have been deleted`} + + + + + {`See detailed changelog `} + + + + +
      + {alteredNodes.map((node) => ( + + ))} +
    +
    +
    +
    +
    + )} + + {changeSummary["portals"].length > 0 && ( + <> + + {`This includes recently published changes in the following nested services:`} + + {changeSummary["portals"].map((portal) => ( + + ))} + + + + + )} +
    + ); +}; + +export interface ValidationCheck { + title: string; + status: "Pass" | "Fail" | "Not applicable"; + message: string; +} + +export const ValidationChecks = (props: { + validationChecks: ValidationCheck[] +}) => { + const { validationChecks } = props; + + const Icon: Record = { + "Pass": , + "Fail": , + "Not applicable": + }; + + return ( + + + Validation checks + + + {validationChecks.map((check, i) => ( + + theme.spacing(3) }}> + {Icon[check.status]} + + {check.title}} + secondary={{check.message}} + /> + + ))} + + + + ); +} diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Sidebar/index.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Sidebar/index.tsx index 978dbed22d..346ce7146e 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Sidebar/index.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Sidebar/index.tsx @@ -7,33 +7,27 @@ import SignalCellularAltIcon from "@mui/icons-material/SignalCellularAlt"; import Badge from "@mui/material/Badge"; import Box from "@mui/material/Box"; import Button from "@mui/material/Button"; -import Collapse from "@mui/material/Collapse"; import Container from "@mui/material/Container"; import Dialog from "@mui/material/Dialog"; import DialogActions from "@mui/material/DialogActions"; import DialogContent from "@mui/material/DialogContent"; import DialogTitle from "@mui/material/DialogTitle"; -import Divider from "@mui/material/Divider"; import Link from "@mui/material/Link"; -import List from "@mui/material/List"; -import ListItem from "@mui/material/ListItem"; -import ListItemText from "@mui/material/ListItemText"; -import { styled } from "@mui/material/styles"; import Tab, { tabClasses } from "@mui/material/Tab"; import Tabs from "@mui/material/Tabs"; import Tooltip from "@mui/material/Tooltip"; import Typography from "@mui/material/Typography"; -import { ComponentType as TYPES } from "@opensystemslab/planx-core/types"; +import { styled } from "@mui/material/styles"; import { AxiosError } from "axios"; import React, { useState } from "react"; import { useAsync } from "react-use"; -import Caret from "ui/icons/Caret"; import Input from "ui/shared/Input"; import { formatLastPublishMessage } from "pages/FlowEditor/utils"; import Questions from "../../../Preview/Questions"; import { useStore } from "../../lib/store"; import EditHistory from "./EditHistory"; +import { AlteredNode, AlteredNodesSummaryContent, ValidationCheck, ValidationChecks } from "./PublishDialog"; type SidebarTabs = "PreviewBrowser" | "History"; @@ -151,211 +145,6 @@ const DebugConsole = () => { ); }; -interface AlteredNode { - id: string; - type: TYPES; - data?: any; -} - -const AlteredNodeListItem = (props: { node: AlteredNode }) => { - const { node } = props; - let text, data; - - if (node.id === "_root") { - text = "Changed _root service by adding, deleting or re-ordering nodes"; - } else if (node.id === "0") { - text = `The entire _root service will be published for the first time`; - } else if (node.id && Object.keys(node).length === 1) { - text = `Deleted node ${node.id}`; - } else if (node.type && node.data) { - text = `Added/edited ${TYPES[node.type]}`; - data = JSON.stringify(node.data, null, 2); - } else { - text = `Added/edited ${TYPES[node.type]}`; - } - - return ( -
  • - {text} - {data &&
    {data}
    } -
  • - ); -}; - -interface Portal { - text: string; - flowId: string; - publishedFlowId: number; - summary: string; - publishedBy: number; - publishedAt: string; -} - -const AlteredNestedFlowListItem = (props: Portal) => { - const { text, flowId, publishedFlowId, summary, publishedAt } = props; - - const [nestedFlowLastPublishedTitle, setNestedFlowLastPublishedTitle] = - useState(); - const lastPublisher = useStore((state) => state.lastPublisher); - - const _nestedFlowLastPublishedRequest = useAsync(async () => { - const user = await lastPublisher(flowId); - setNestedFlowLastPublishedTitle(formatLastPublishMessage(publishedAt, user)); - }); - - return ( - - - {text} - - ) : ( - {text} - ) - } - secondary={ - <> - - {nestedFlowLastPublishedTitle} - - {summary && ( - - {summary} - - )} - - } - /> - - ); -}; - -interface AlteredNodesSummary { - title: string; - portals: Portal[]; - updated: number; - deleted: number; -} - -const AlteredNodesSummaryContent = (props: { - alteredNodes: AlteredNode[]; - url: string; -}) => { - const { alteredNodes, url } = props; - const [expandNodes, setExpandNodes] = useState(false); - - const changeSummary: AlteredNodesSummary = { - title: "", - portals: [], - updated: 0, - deleted: 0, - }; - - alteredNodes.map((node) => { - if (node.id === "0") { - changeSummary["title"] = - "You are publishing the main service for the first time."; - } else if (node.id && Object.keys(node).length === 1) { - changeSummary["deleted"] += 1; - } else if (node.type === TYPES.InternalPortal) { - if (node.data?.text?.includes("/")) { - changeSummary["portals"].push({ ...node.data, flowId: node.id }); - } - } else if (node.type) { - changeSummary["updated"] += 1; - } - - return changeSummary; - }); - - return ( - - {changeSummary["title"] && ( - - {changeSummary["title"]} - - )} - {(changeSummary["updated"] > 0 || changeSummary["deleted"] > 0) && ( - -
      -
    • - {`${changeSummary["updated"]} nodes have been updated or added`} -
    • -
    • - {`${changeSummary["deleted"]} nodes have been deleted`} -
    • -
    - - - {`See detailed changelog `} - - - - -
      - {alteredNodes.map((node) => ( - - ))} -
    -
    -
    -
    -
    - )} - - {changeSummary["portals"].length > 0 && ( - - {`This includes recently published changes in the following nested services:`} - - {changeSummary["portals"].map((portal) => ( - - ))} - - - )} - - - - {`Preview these content changes in-service before publishing `} - - {`here (opens in a new tab).`} - - - -
    - ); -}; - const Sidebar: React.FC<{ url: string; }> = React.memo((props) => { @@ -385,7 +174,7 @@ const Sidebar: React.FC<{ const [lastPublishedTitle, setLastPublishedTitle] = useState( "This flow is not published yet", ); - const [validationMessage, setValidationMessage] = useState(); + const [validationChecks, setValidationChecks] = useState([]); const [alteredNodes, setAlteredNodes] = useState(); const [dialogOpen, setDialogOpen] = useState(false); const [summary, setSummary] = useState(); @@ -395,6 +184,56 @@ const Sidebar: React.FC<{ setActiveTab(newValue); }; + const handleCheckForChangesToPublish = async () => { + try { + setLastPublishedTitle("Checking for changes..."); + const alteredFlow = await validateAndDiffFlow(flowId); + setAlteredNodes( + alteredFlow?.data.alteredNodes + ? alteredFlow.data.alteredNodes + : [], + ); + setLastPublishedTitle( + alteredFlow?.data.alteredNodes + ? `Found changes to ${alteredFlow.data.alteredNodes.length} nodes` + : alteredFlow?.data.message, + ); + setValidationChecks(alteredFlow?.data?.validationChecks); + setDialogOpen(true); + } catch (error) { + setLastPublishedTitle( + "Error checking for changes to publish", + ); + + if (error instanceof AxiosError) { + alert(error.response?.data?.error); + } else { + alert( + `Error checking for changes to publish. Confirm that your graph does not have any corrupted nodes and that all external portals are valid. \n${error}`, + ); + } + } + }; + + const handlePublish = async () => { + try { + setDialogOpen(false); + setLastPublishedTitle("Publishing changes..."); + const { alteredNodes, message } = await publishFlow( + flowId, + summary, + ); + setLastPublishedTitle( + alteredNodes + ? `Successfully published changes to ${alteredNodes.length} nodes` + : `${message}` || "No new changes to publish", + ); + } catch (error) { + setLastPublishedTitle("Error trying to publish"); + alert(error); + } + }; + const _lastPublishedRequest = useAsync(async () => { const date = await lastPublished(flowId); const user = await lastPublisher(flowId); @@ -521,36 +360,7 @@ const Sidebar: React.FC<{ variant="contained" color="primary" disabled={!useStore.getState().canUserEditTeam(teamSlug)} - onClick={async () => { - try { - setLastPublishedTitle("Checking for changes..."); - const alteredFlow = await validateAndDiffFlow(flowId); - setAlteredNodes( - alteredFlow?.data.alteredNodes - ? alteredFlow.data.alteredNodes - : [], - ); - setLastPublishedTitle( - alteredFlow?.data.alteredNodes - ? `Found changes to ${alteredFlow.data.alteredNodes.length} node(s)` - : alteredFlow?.data.message, - ); - setValidationMessage(alteredFlow?.data.description); - setDialogOpen(true); - } catch (error) { - setLastPublishedTitle( - "Error checking for changes to publish", - ); - - if (error instanceof AxiosError) { - alert(error.response?.data?.error); - } else { - alert( - `Error checking for changes to publish. Confirm that your graph does not have any corrupted nodes and that all external portals are valid. \n${error}`, - ); - } - } - }} + onClick={handleCheckForChangesToPublish} > CHECK FOR CHANGES TO PUBLISH @@ -560,17 +370,26 @@ const Sidebar: React.FC<{ onClose={() => setDialogOpen(false)} aria-labelledby="alert-dialog-title" aria-describedby="alert-dialog-description" + maxWidth="md" > - - {lastPublishedTitle} + + {`Check for changes to publish`} {alteredNodes?.length ? ( <> + + + + {`Preview these content changes in-service before publishing `} + + {`here (opens in a new tab).`} + + + setSummary(e.target.value)} /> - ) : validationMessage ? ( - validationMessage ) : ( - lastPublishedTitle + + {`No new changes to publish`} + )} - + diff --git a/editor.planx.uk/src/pages/FlowEditor/utils.ts b/editor.planx.uk/src/pages/FlowEditor/utils.ts index 19873545a2..ed3c5d0688 100644 --- a/editor.planx.uk/src/pages/FlowEditor/utils.ts +++ b/editor.planx.uk/src/pages/FlowEditor/utils.ts @@ -20,4 +20,4 @@ export const formatLastEditMessage = ( }; export const formatLastPublishMessage = (date: string, user: string): string => - `Last published ${formatLastEditDate(date)} ago by ${user}`; + `Last published ${formatLastEditDate(date)} by ${user}`; From 7d71297098fa893287a65193d886da0f43600a70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Tue, 18 Jun 2024 12:31:40 +0100 Subject: [PATCH 032/150] chore: Remove test 'Zoo' schema from Editor modal (#3283) --- editor.planx.uk/src/@planx/components/List/Editor.tsx | 3 --- 1 file changed, 3 deletions(-) diff --git a/editor.planx.uk/src/@planx/components/List/Editor.tsx b/editor.planx.uk/src/@planx/components/List/Editor.tsx index df383537d2..99b4dfa899 100644 --- a/editor.planx.uk/src/@planx/components/List/Editor.tsx +++ b/editor.planx.uk/src/@planx/components/List/Editor.tsx @@ -14,7 +14,6 @@ import InputRowLabel from "ui/shared/InputRowLabel"; import { EditorProps, ICONS, InternalNotes, MoreInformation } from "../ui"; import { List, parseContent } from "./model"; import { ProposedAdvertisements } from "./schemas/Adverts"; - import { BuildingDetailsGLA } from "./schemas/GLA/BuildingDetails"; import { CommunalSpaceGLA } from "./schemas/GLA/CommunalSpace"; import { ExistingAndProposedUsesGLA } from "./schemas/GLA/ExistingAndProposedUses"; @@ -24,7 +23,6 @@ import { ResidentialUnitsExisting } from "./schemas/ResidentialUnits/Existing"; import { ResidentialUnitsGLAGained } from "./schemas/ResidentialUnits/GLA/Gained"; import { ResidentialUnitsGLALost } from "./schemas/ResidentialUnits/GLA/Lost"; import { ResidentialUnitsProposed } from "./schemas/ResidentialUnits/Proposed"; -import { Zoo } from "./schemas/Tests/Zoo"; type Props = EditorProps; @@ -45,7 +43,6 @@ export const SCHEMAS = [ { name: "Protected spaces (GLA)", schema: ProtectedSpaceGLA }, { name: "Open spaces (GLA)", schema: OpenSpaceGLA }, { name: "Proposed advertisements", schema: ProposedAdvertisements }, - { name: "(Test only) Zoo", schema: Zoo }, ]; function ListComponent(props: Props) { From e3fb93e0decec1493d424e79a797a70793f83b5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Tue, 18 Jun 2024 12:31:53 +0100 Subject: [PATCH 033/150] fix: Allow dot notation of `fn` values in List component schemas (#3282) --- .../src/@planx/components/List/Editor.tsx | 1 + .../@planx/components/List/Public/Fields.tsx | 8 ++++---- .../components/List/Public/index.test.tsx | 8 ++++---- .../schemas/GLA/ExistingAndProposedUses.ts | 6 +++--- .../schemas/ResidentialUnits/GLA/Gained.ts | 8 ++++---- .../List/schemas/ResidentialUnits/GLA/Lost.ts | 8 ++++---- .../List/schemas/ResidentialUnits/GLA/New.ts | 8 ++++---- .../schemas/ResidentialUnits/GLA/Rebuilt.ts | 8 ++++---- .../schemas/ResidentialUnits/GLA/Removed.ts | 8 ++++---- .../schemas/ResidentialUnits/GLA/Retained.ts | 2 +- .../schemas/{Tests => mocks}/GenericUnits.ts | 0 .../List/schemas/{Tests => mocks}/MaxOne.ts | 0 .../List/schemas/{Tests => mocks}/Zoo.ts | 20 +++++++++---------- .../src/@planx/components/List/utils.test.ts | 16 +++++++-------- 14 files changed, 51 insertions(+), 50 deletions(-) rename editor.planx.uk/src/@planx/components/List/schemas/{Tests => mocks}/GenericUnits.ts (100%) rename editor.planx.uk/src/@planx/components/List/schemas/{Tests => mocks}/MaxOne.ts (100%) rename editor.planx.uk/src/@planx/components/List/schemas/{Tests => mocks}/Zoo.ts (83%) diff --git a/editor.planx.uk/src/@planx/components/List/Editor.tsx b/editor.planx.uk/src/@planx/components/List/Editor.tsx index 99b4dfa899..0d6ce1454f 100644 --- a/editor.planx.uk/src/@planx/components/List/Editor.tsx +++ b/editor.planx.uk/src/@planx/components/List/Editor.tsx @@ -19,6 +19,7 @@ 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 { Zoo } from "./schemas/mocks/Zoo"; import { ResidentialUnitsExisting } from "./schemas/ResidentialUnits/Existing"; import { ResidentialUnitsGLAGained } from "./schemas/ResidentialUnits/GLA/Gained"; import { ResidentialUnitsGLALost } from "./schemas/ResidentialUnits/GLA/Lost"; 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 be39313c42..17b3de56f3 100644 --- a/editor.planx.uk/src/@planx/components/List/Public/Fields.tsx +++ b/editor.planx.uk/src/@planx/components/List/Public/Fields.tsx @@ -49,7 +49,7 @@ export const TextFieldInput: React.FC> = ({ rows={ data.type && ["long", "extraLong"].includes(data.type) ? 5 : undefined } - name={`userData[${activeIndex}][${data.fn}]`} + name={`userData[${activeIndex}]['${data.fn}']`} required={required} inputProps={{ "aria-describedby": [ @@ -82,7 +82,7 @@ export const NumberFieldInput: React.FC> = ({ > = (props) => { > @@ -182,7 +182,7 @@ export const SelectFieldInput: React.FC> = (props) => { labelId={`select-label-${id}`} value={formik.values.userData[activeIndex][data.fn]} onChange={formik.handleChange} - name={`userData[${activeIndex}][${data.fn}]`} + name={`userData[${activeIndex}]['${data.fn}']`} > {data.options.map((option) => ( { mockFn: [ { age: 10, - cuteness: "Very", - email: "richard.parker@pi.com", + "cuteness.amount": "Very", + "email.address": "richard.parker@pi.com", name: "Richard Parker", size: "Medium", }, { age: 10, - cuteness: "Very", - email: "richard.parker@pi.com", + "cuteness.amount": "Very", + "email.address": "richard.parker@pi.com", name: "Richard Parker", size: "Medium", }, @@ -28,13 +28,13 @@ describe("passport data shape", () => { expect(flatten(defaultPassportData)).toEqual({ "mockFn.one.age": 10, - "mockFn.one.cuteness": "Very", - "mockFn.one.email": "richard.parker@pi.com", + "mockFn.one.cuteness.amount": "Very", + "mockFn.one.email.address": "richard.parker@pi.com", "mockFn.one.name": "Richard Parker", "mockFn.one.size": "Medium", "mockFn.two.age": 10, - "mockFn.two.cuteness": "Very", - "mockFn.two.email": "richard.parker@pi.com", + "mockFn.two.cuteness.amount": "Very", + "mockFn.two.email.address": "richard.parker@pi.com", "mockFn.two.name": "Richard Parker", "mockFn.two.size": "Medium", }); From 604cd371f2012335c0dad232d841f10e7bb0ce76 Mon Sep 17 00:00:00 2001 From: Ian Jones <51156018+ianjon3s@users.noreply.github.com> Date: Tue, 18 Jun 2024 13:20:21 +0100 Subject: [PATCH 034/150] refactor: Reduce height of MUI switch (#3285) --- editor.planx.uk/src/theme.ts | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/editor.planx.uk/src/theme.ts b/editor.planx.uk/src/theme.ts index b6ef7ee8dc..53dcfd39f7 100644 --- a/editor.planx.uk/src/theme.ts +++ b/editor.planx.uk/src/theme.ts @@ -433,10 +433,11 @@ const getThemeOptions = ({ MuiSwitch: { styleOverrides: { root: { - width: "80px", - height: "48px", + width: "76px", + height: "44px", padding: "8px", left: "-8px", + marginRight: "-4px", "& .MuiSwitch-switchBase": { padding: "11px", borderRadius: "50%", @@ -447,8 +448,8 @@ const getThemeOptions = ({ }, "& .MuiSwitch-thumb": { background: palette.common.white, - width: "26px", - height: "26px", + width: "22px", + height: "22px", }, "& .MuiSwitch-track": { background: palette.background.dark, @@ -550,7 +551,7 @@ const getThemeOptions = ({ { props: { variant: "compact" }, style: { - "& label": { paddingBottom: "200px", }, + "& label": { paddingBottom: "200px" }, "&.MuiRadio-root": { width: "40px", height: "40px", @@ -568,7 +569,7 @@ const getThemeOptions = ({ }, }, ], - }, + }, }, }; From 1b59cca87e26439e9b64605963ad5973cd715fcc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Tue, 18 Jun 2024 16:02:43 +0100 Subject: [PATCH 035/150] fix: Trim URLs to avoid sanitation errors (#3286) --- editor.planx.uk/src/ui/editor/RichTextInput.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/editor.planx.uk/src/ui/editor/RichTextInput.tsx b/editor.planx.uk/src/ui/editor/RichTextInput.tsx index b5587c845b..c455cad5c4 100644 --- a/editor.planx.uk/src/ui/editor/RichTextInput.tsx +++ b/editor.planx.uk/src/ui/editor/RichTextInput.tsx @@ -281,11 +281,12 @@ const initialUrlValue = "https://"; // Makes sure that if the user pastes a full URL into the input, the pre-populated `https://` is removed // e.g. https://https://something.com -> https://something.com +// Also trim whitespace from links which flag sanitation errors const trimUrlValue = (url: string) => { if (url.startsWith(`${initialUrlValue}${initialUrlValue}`)) { return url.slice(initialUrlValue.length); } - return url; + return url.trim(); }; const getContentHierarchyError = (doc: JSONContent): string | null => { From b1e067276e701cf4cb0f313383616db82ac6b586 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Wed, 19 Jun 2024 11:00:31 +0100 Subject: [PATCH 036/150] chore: Bump Hasura Fargate task CPU and memory (production) (#3288) --- infrastructure/application/Pulumi.production.yaml | 2 ++ infrastructure/application/Pulumi.staging.yaml | 2 ++ infrastructure/application/services/hasura.ts | 5 +++-- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/infrastructure/application/Pulumi.production.yaml b/infrastructure/application/Pulumi.production.yaml index ef34071a3d..199fd0a32d 100644 --- a/infrastructure/application/Pulumi.production.yaml +++ b/infrastructure/application/Pulumi.production.yaml @@ -21,6 +21,8 @@ config: secure: AAABADo05EPv/HWj7Rkf19nBeTcPJd4pEcRi2/uhyB3agraFODpLvNMx2bXfISf5pZ4HA41GYCE4f7OLcJN6hIV6ZMWUlEriPzvkoUAixbLlz1LIERiyk73R8E4F2bV65/9aFqi4l7caLS5c8iDJrE+JAvu2i7oS application:hasura-admin-secret: secure: AAABAHfDtVpAD8w32yINWTjgvuRQixWXYFf3/rEcyh59/pRSz+J4ZYCXNq5jqBiIXM2emB+7zOY= + application:hasura-cpu: "512" + application:hasura-memory: "2048" application:hasura-planx-api-key: secure: AAABAExsXFL7HabeK0Z1oSUJzI2NqVqEmKJ1ojYXyX4Hi8Sbt1Ht9QJc/Yn3cPBAB2r32HKa4HtqqLmfGjS+04lFB/I= application:jwt-secret: diff --git a/infrastructure/application/Pulumi.staging.yaml b/infrastructure/application/Pulumi.staging.yaml index 47ce774321..6b5703d6b0 100644 --- a/infrastructure/application/Pulumi.staging.yaml +++ b/infrastructure/application/Pulumi.staging.yaml @@ -22,6 +22,8 @@ config: secure: AAABACgwjEmlLmE19ofRO8e/JpD8sHDV2lcDmSXbU/Mw8ZRh5gTgll8DZ3BVjpDWfQfIecBAIf2TFgeo9CsBSLjfaRJ7eJyKDSWm7i8LlMC2JN/PN+Ig8oeI0H0oLkqJIziNKKjx+e97zDiXO9LZ1CVzrywR application:hasura-admin-secret: secure: AAABAHsoh7ZNkr6ep3xXsUZpp/JIjshBX+tJ0KOFgGnJ4wxR0oIcB6VewVDuwSyFJRVix72YahM= + application:hasura-cpu: "256" + application:hasura-memory: "1024" application:hasura-planx-api-key: secure: AAABANHLs3ItPxkteh0chwMP2bKuHO3ovuRLi4FsIrCqerzXVIaTLFDqNR+4KBTeMPz4cnF5tCTwsrJv9GruZdXU+lg= application:jwt-secret: diff --git a/infrastructure/application/services/hasura.ts b/infrastructure/application/services/hasura.ts index 5150500116..d6f9696753 100644 --- a/infrastructure/application/services/hasura.ts +++ b/infrastructure/application/services/hasura.ts @@ -68,7 +68,8 @@ export const createHasuraService = async ({ }, hasura: { image: repo.buildAndPushImage("../../hasura.planx.uk"), - memory: 1024 /*MB*/, + cpu: config.requireNumber("hasura-cpu"), + memory: config.requireNumber("hasura-memory"), environment: [ { name: "HASURA_GRAPHQL_ENABLE_CONSOLE", value: "true" }, { @@ -106,7 +107,7 @@ export const createHasuraService = async ({ }, ], }, - } + }, }, desiredCount: 1, }); From 520a3609343c4c78ef5eee9ab774b8439402e12b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 19 Jun 2024 11:01:17 +0100 Subject: [PATCH 037/150] chore(deps): bump ws from 8.17.0 to 8.17.1 in /api.planx.uk (#3292) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- api.planx.uk/pnpm-lock.yaml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/api.planx.uk/pnpm-lock.yaml b/api.planx.uk/pnpm-lock.yaml index 9ea6cbbcd4..7ff3ce8c9a 100644 --- a/api.planx.uk/pnpm-lock.yaml +++ b/api.planx.uk/pnpm-lock.yaml @@ -5582,7 +5582,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 @@ -8163,8 +8163,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 @@ -8305,7 +8305,6 @@ packages: resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/ccca2ac} name: '@opensystemslab/planx-core' version: 1.0.0 - prepare: true requiresBuild: true dependencies: '@emotion/react': 11.11.4(react@18.3.1) From 3bcc329703c4a596e6bad5f13240dc040fcb24f0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 19 Jun 2024 11:01:37 +0100 Subject: [PATCH 038/150] chore(deps): bump ws from 8.17.0 to 8.17.1 in /sharedb.planx.uk (#3291) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- sharedb.planx.uk/package.json | 2 +- sharedb.planx.uk/pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/sharedb.planx.uk/package.json b/sharedb.planx.uk/package.json index 038733e17c..bbbf9a5532 100644 --- a/sharedb.planx.uk/package.json +++ b/sharedb.planx.uk/package.json @@ -9,7 +9,7 @@ "jsonwebtoken": "^8.5.1", "pg": "^8.11.3", "sharedb": "^4.1.1", - "ws": "^8.17.0" + "ws": "^8.17.1" }, "scripts": { "dev": "node-dev server.js", diff --git a/sharedb.planx.uk/pnpm-lock.yaml b/sharedb.planx.uk/pnpm-lock.yaml index 6dda1dbe37..60db207a2a 100644 --- a/sharedb.planx.uk/pnpm-lock.yaml +++ b/sharedb.planx.uk/pnpm-lock.yaml @@ -29,8 +29,8 @@ dependencies: specifier: ^4.1.1 version: 4.1.1 ws: - specifier: ^8.17.0 - version: 8.17.0 + specifier: ^8.17.1 + version: 8.17.1 devDependencies: node-dev: @@ -277,7 +277,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 @@ -636,8 +636,8 @@ packages: isexe: 2.0.0 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 From 191ca05970c7499b9627387175568164ace2c87e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 19 Jun 2024 12:03:14 +0100 Subject: [PATCH 039/150] chore(deps): bump ws from 7.5.9 to 7.5.10 in /editor.planx.uk (#3290) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- editor.planx.uk/pnpm-lock.yaml | 193 ++++++++++++++++----------------- 1 file changed, 96 insertions(+), 97 deletions(-) diff --git a/editor.planx.uk/pnpm-lock.yaml b/editor.planx.uk/pnpm-lock.yaml index aea76e1662..b807633bb1 100644 --- a/editor.planx.uk/pnpm-lock.yaml +++ b/editor.planx.uk/pnpm-lock.yaml @@ -3358,7 +3358,7 @@ packages: resolution: {integrity: sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: ^8.2 + postcss: '>=8.4.31' dependencies: '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.1.0) postcss: 8.4.32 @@ -3368,7 +3368,7 @@ packages: resolution: {integrity: sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: ^8.2 + postcss: '>=8.4.31' dependencies: '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.32) postcss: 8.4.32 @@ -3378,7 +3378,7 @@ packages: resolution: {integrity: sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: ^8.2 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -3387,7 +3387,7 @@ packages: resolution: {integrity: sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: ^8.2 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -3396,7 +3396,7 @@ packages: resolution: {integrity: sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: ^8.2 + postcss: '>=8.4.31' dependencies: '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.32) postcss: 8.4.32 @@ -3406,7 +3406,7 @@ packages: resolution: {integrity: sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: ^8.2 + postcss: '>=8.4.31' dependencies: '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.1.0) postcss: 8.4.32 @@ -3416,7 +3416,7 @@ packages: resolution: {integrity: sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: ^8.2 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -3425,7 +3425,7 @@ packages: resolution: {integrity: sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: ^8.2 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -3434,7 +3434,7 @@ packages: resolution: {integrity: sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: ^8.2 + postcss: '>=8.4.31' dependencies: '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.32) postcss: 8.4.32 @@ -3444,7 +3444,7 @@ packages: resolution: {integrity: sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: ^8.3 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -3453,7 +3453,7 @@ packages: resolution: {integrity: sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: ^8.2 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -3462,7 +3462,7 @@ packages: resolution: {integrity: sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: ^8.2 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -3471,7 +3471,7 @@ packages: resolution: {integrity: sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==} engines: {node: ^14 || >=16} peerDependencies: - postcss: ^8.2 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -3480,7 +3480,7 @@ packages: resolution: {integrity: sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: ^8.2 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 @@ -9316,7 +9316,7 @@ packages: engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: - postcss: ^8.1.0 + postcss: '>=8.4.31' dependencies: browserslist: 4.23.0 caniuse-lite: 1.0.30001621 @@ -10613,7 +10613,7 @@ packages: engines: {node: ^12 || ^14 || >=16} hasBin: true peerDependencies: - postcss: ^8.4 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 postcss-selector-parser: 6.1.0 @@ -10632,7 +10632,7 @@ packages: resolution: {integrity: sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==} engines: {node: ^10 || ^12 || >=14} peerDependencies: - postcss: ^8.0.9 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 @@ -10641,7 +10641,7 @@ packages: engines: {node: ^12 || ^14 || >=16} hasBin: true peerDependencies: - postcss: ^8.4 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 postcss-selector-parser: 6.1.0 @@ -10715,7 +10715,7 @@ packages: engines: {node: ^12 || ^14 || >=16} hasBin: true peerDependencies: - postcss: ^8.4 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 @@ -10798,7 +10798,7 @@ packages: resolution: {integrity: sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: ^8.2.15 + postcss: '>=8.4.31' dependencies: css-declaration-sorter: 6.4.1(postcss@8.4.32) cssnano-utils: 3.1.0(postcss@8.4.32) @@ -10835,7 +10835,7 @@ packages: resolution: {integrity: sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: ^8.2.15 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 @@ -10843,7 +10843,7 @@ packages: resolution: {integrity: sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: ^8.2.15 + postcss: '>=8.4.31' dependencies: cssnano-preset-default: 5.2.14(postcss@8.4.32) lilconfig: 2.1.0 @@ -13507,7 +13507,7 @@ packages: resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: - postcss: ^8.1.0 + postcss: '>=8.4.31' dependencies: postcss: 8.4.38 @@ -14882,7 +14882,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 @@ -16737,7 +16737,7 @@ packages: resolution: {integrity: sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: ^8.2 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 postcss-selector-parser: 6.1.0 @@ -16747,7 +16747,7 @@ packages: engines: {node: '>=8'} peerDependencies: browserslist: '>=4' - postcss: '>=8' + postcss: '>=8.4.31' dependencies: browserslist: 4.23.0 postcss: 8.4.32 @@ -16755,7 +16755,7 @@ packages: /postcss-calc@8.2.4(postcss@8.4.32): resolution: {integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==} peerDependencies: - postcss: ^8.2.2 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 postcss-selector-parser: 6.1.0 @@ -16765,7 +16765,7 @@ packages: resolution: {integrity: sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==} engines: {node: '>=7.6.0'} peerDependencies: - postcss: ^8.4.6 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -16774,7 +16774,7 @@ packages: resolution: {integrity: sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: ^8.2 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -16783,7 +16783,7 @@ packages: resolution: {integrity: sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: ^8.4 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -16792,7 +16792,7 @@ packages: resolution: {integrity: sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: ^8.2 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -16801,7 +16801,7 @@ packages: resolution: {integrity: sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: ^8.2.15 + postcss: '>=8.4.31' dependencies: browserslist: 4.23.0 caniuse-api: 3.0.0 @@ -16813,7 +16813,7 @@ packages: resolution: {integrity: sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: ^8.2.15 + postcss: '>=8.4.31' dependencies: browserslist: 4.23.0 postcss: 8.4.32 @@ -16823,7 +16823,7 @@ packages: resolution: {integrity: sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: ^8.3 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -16832,7 +16832,7 @@ packages: resolution: {integrity: sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: ^8.2 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -16841,7 +16841,7 @@ packages: resolution: {integrity: sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: ^8.3 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 postcss-selector-parser: 6.1.0 @@ -16850,7 +16850,7 @@ packages: resolution: {integrity: sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: ^8.2 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 postcss-selector-parser: 6.1.0 @@ -16859,7 +16859,7 @@ packages: resolution: {integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: ^8.2.15 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 @@ -16867,7 +16867,7 @@ packages: resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: ^8.2.15 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 @@ -16875,7 +16875,7 @@ packages: resolution: {integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: ^8.2.15 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 @@ -16883,7 +16883,7 @@ packages: resolution: {integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: ^8.2.15 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 @@ -16891,7 +16891,7 @@ packages: resolution: {integrity: sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: ^8.2 + postcss: '>=8.4.31' dependencies: '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.32) postcss: 8.4.32 @@ -16901,7 +16901,7 @@ packages: resolution: {integrity: sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: ^8.4 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -16909,7 +16909,7 @@ packages: /postcss-flexbugs-fixes@5.0.2(postcss@8.4.32): resolution: {integrity: sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==} peerDependencies: - postcss: ^8.1.4 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 @@ -16917,7 +16917,7 @@ packages: resolution: {integrity: sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: ^8.4 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 postcss-selector-parser: 6.1.0 @@ -16926,7 +16926,7 @@ packages: resolution: {integrity: sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: ^8.4 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 postcss-selector-parser: 6.1.0 @@ -16934,7 +16934,7 @@ packages: /postcss-font-variant@5.0.0(postcss@8.4.32): resolution: {integrity: sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==} peerDependencies: - postcss: ^8.1.0 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 @@ -16942,7 +16942,7 @@ packages: resolution: {integrity: sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: ^8.2 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 @@ -16950,7 +16950,7 @@ packages: resolution: {integrity: sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: ^8.2 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -16959,7 +16959,7 @@ packages: resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} engines: {node: '>=14.0.0'} peerDependencies: - postcss: ^8.0.0 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -16969,7 +16969,7 @@ packages: /postcss-initial@4.0.1(postcss@8.4.32): resolution: {integrity: sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==} peerDependencies: - postcss: ^8.0.0 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 @@ -16977,7 +16977,7 @@ packages: resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} engines: {node: ^12 || ^14 || >= 16} peerDependencies: - postcss: ^8.4.21 + postcss: '>=8.4.31' dependencies: camelcase-css: 2.0.1 postcss: 8.4.32 @@ -16986,7 +16986,7 @@ packages: resolution: {integrity: sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: ^8.2 + postcss: '>=8.4.31' dependencies: '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.32) postcss: 8.4.32 @@ -16996,7 +16996,7 @@ packages: resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} engines: {node: '>= 14'} peerDependencies: - postcss: '>=8.0.9' + postcss: '>=8.4.31' ts-node: '>=9.0.0' peerDependenciesMeta: postcss: @@ -17012,7 +17012,7 @@ packages: resolution: {integrity: sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==} engines: {node: '>= 12.13.0'} peerDependencies: - postcss: ^7.0.0 || ^8.0.1 + postcss: '>=8.4.31' webpack: ^5.0.0 dependencies: cosmiconfig: 7.1.0 @@ -17025,7 +17025,7 @@ packages: resolution: {integrity: sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: ^8.4 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 @@ -17033,7 +17033,7 @@ packages: resolution: {integrity: sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==} engines: {node: '>=10.0.0'} peerDependencies: - postcss: ^8.1.0 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 @@ -17041,7 +17041,7 @@ packages: resolution: {integrity: sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: ^8.2.15 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -17051,7 +17051,7 @@ packages: resolution: {integrity: sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: ^8.2.15 + postcss: '>=8.4.31' dependencies: browserslist: 4.23.0 caniuse-api: 3.0.0 @@ -17063,7 +17063,7 @@ packages: resolution: {integrity: sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: ^8.2.15 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -17072,7 +17072,7 @@ packages: resolution: {integrity: sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: ^8.2.15 + postcss: '>=8.4.31' dependencies: colord: 2.9.3 cssnano-utils: 3.1.0(postcss@8.4.32) @@ -17083,7 +17083,7 @@ packages: resolution: {integrity: sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: ^8.2.15 + postcss: '>=8.4.31' dependencies: browserslist: 4.23.0 cssnano-utils: 3.1.0(postcss@8.4.32) @@ -17094,7 +17094,7 @@ packages: resolution: {integrity: sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: ^8.2.15 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 postcss-selector-parser: 6.1.0 @@ -17103,7 +17103,7 @@ packages: resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: - postcss: ^8.1.0 + postcss: '>=8.4.31' dependencies: postcss: 8.4.38 @@ -17111,7 +17111,7 @@ packages: resolution: {integrity: sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: - postcss: ^8.1.0 + postcss: '>=8.4.31' dependencies: icss-utils: 5.1.0(postcss@8.4.38) postcss: 8.4.38 @@ -17122,7 +17122,7 @@ packages: resolution: {integrity: sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: - postcss: ^8.1.0 + postcss: '>=8.4.31' dependencies: postcss: 8.4.38 postcss-selector-parser: 6.1.0 @@ -17131,7 +17131,7 @@ packages: resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: - postcss: ^8.1.0 + postcss: '>=8.4.31' dependencies: icss-utils: 5.1.0(postcss@8.4.38) postcss: 8.4.38 @@ -17140,7 +17140,7 @@ packages: resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} engines: {node: '>=12.0'} peerDependencies: - postcss: ^8.2.14 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 postcss-selector-parser: 6.1.0 @@ -17149,7 +17149,7 @@ packages: resolution: {integrity: sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: ^8.2 + postcss: '>=8.4.31' dependencies: '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.1.0) postcss: 8.4.32 @@ -17159,7 +17159,7 @@ packages: resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: ^8.2.15 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 @@ -17167,7 +17167,7 @@ packages: resolution: {integrity: sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: ^8.2.15 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -17176,7 +17176,7 @@ packages: resolution: {integrity: sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: ^8.2.15 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -17185,7 +17185,7 @@ packages: resolution: {integrity: sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: ^8.2.15 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -17194,7 +17194,7 @@ packages: resolution: {integrity: sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: ^8.2.15 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -17203,7 +17203,7 @@ packages: resolution: {integrity: sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: ^8.2.15 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -17212,7 +17212,7 @@ packages: resolution: {integrity: sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: ^8.2.15 + postcss: '>=8.4.31' dependencies: browserslist: 4.23.0 postcss: 8.4.32 @@ -17222,7 +17222,7 @@ packages: resolution: {integrity: sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: ^8.2.15 + postcss: '>=8.4.31' dependencies: normalize-url: 6.1.0 postcss: 8.4.32 @@ -17232,7 +17232,7 @@ packages: resolution: {integrity: sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: ^8.2.15 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -17242,7 +17242,7 @@ packages: engines: {node: '>= 12'} peerDependencies: browserslist: '>= 4' - postcss: '>= 8' + postcss: '>=8.4.31' dependencies: '@csstools/normalize.css': 12.1.1 browserslist: 4.23.0 @@ -17254,7 +17254,7 @@ packages: resolution: {integrity: sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: ^8.2 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 @@ -17262,7 +17262,7 @@ packages: resolution: {integrity: sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: ^8.2.15 + postcss: '>=8.4.31' dependencies: cssnano-utils: 3.1.0(postcss@8.4.32) postcss: 8.4.32 @@ -17272,7 +17272,7 @@ packages: resolution: {integrity: sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: ^8.2 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -17280,7 +17280,7 @@ packages: /postcss-page-break@3.0.4(postcss@8.4.32): resolution: {integrity: sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==} peerDependencies: - postcss: ^8 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 @@ -17288,7 +17288,7 @@ packages: resolution: {integrity: sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: ^8.2 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -17297,7 +17297,7 @@ packages: resolution: {integrity: sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: ^8.2 + postcss: '>=8.4.31' dependencies: '@csstools/postcss-cascade-layers': 1.1.1(postcss@8.4.32) '@csstools/postcss-color-function': 1.1.1(postcss@8.4.32) @@ -17354,7 +17354,7 @@ packages: resolution: {integrity: sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: ^8.2 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 postcss-selector-parser: 6.1.0 @@ -17363,7 +17363,7 @@ packages: resolution: {integrity: sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: ^8.2.15 + postcss: '>=8.4.31' dependencies: browserslist: 4.23.0 caniuse-api: 3.0.0 @@ -17373,7 +17373,7 @@ packages: resolution: {integrity: sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: ^8.2.15 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -17381,7 +17381,7 @@ packages: /postcss-replace-overflow-wrap@4.0.0(postcss@8.4.32): resolution: {integrity: sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==} peerDependencies: - postcss: ^8.0.3 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 @@ -17389,7 +17389,7 @@ packages: resolution: {integrity: sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==} engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: ^8.2 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 postcss-selector-parser: 6.1.0 @@ -17405,7 +17405,7 @@ packages: resolution: {integrity: sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: ^8.2.15 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -17415,7 +17415,7 @@ packages: resolution: {integrity: sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: ^8.2.15 + postcss: '>=8.4.31' dependencies: postcss: 8.4.32 postcss-selector-parser: 6.1.0 @@ -19814,7 +19814,7 @@ packages: resolution: {integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: ^8.2.15 + postcss: '>=8.4.31' dependencies: browserslist: 4.23.0 postcss: 8.4.32 @@ -19839,7 +19839,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 @@ -21473,8 +21473,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 @@ -21636,7 +21636,6 @@ packages: id: github.com/theopensystemslab/planx-core/ccca2ac 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) From 995dd5c42780e0a8a9449151dbdd7149d114c81e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Wed, 19 Jun 2024 12:03:33 +0100 Subject: [PATCH 040/150] chore: Make `flow.name` column required (#3284) --- e2e/tests/api-driven/src/permissions/queries/flows.ts | 6 +++++- .../down.sql | 1 + .../up.sql | 1 + hasura.planx.uk/tests/portals.test.js | 6 +++--- hasura.planx.uk/tests/sessions.test.js | 5 ++++- sharedb.planx.uk/sharedb-postgresql.js | 6 +++--- 6 files changed, 17 insertions(+), 8 deletions(-) create mode 100644 hasura.planx.uk/migrations/1718705200477_alter_table_public_flows_alter_column_name/down.sql create mode 100644 hasura.planx.uk/migrations/1718705200477_alter_table_public_flows_alter_column_name/up.sql diff --git a/e2e/tests/api-driven/src/permissions/queries/flows.ts b/e2e/tests/api-driven/src/permissions/queries/flows.ts index 4f2215939b..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 diff --git a/hasura.planx.uk/migrations/1718705200477_alter_table_public_flows_alter_column_name/down.sql b/hasura.planx.uk/migrations/1718705200477_alter_table_public_flows_alter_column_name/down.sql new file mode 100644 index 0000000000..cd25037e38 --- /dev/null +++ b/hasura.planx.uk/migrations/1718705200477_alter_table_public_flows_alter_column_name/down.sql @@ -0,0 +1 @@ +alter table "public"."flows" alter column "name" drop not null; diff --git a/hasura.planx.uk/migrations/1718705200477_alter_table_public_flows_alter_column_name/up.sql b/hasura.planx.uk/migrations/1718705200477_alter_table_public_flows_alter_column_name/up.sql new file mode 100644 index 0000000000..c9fc8c5e59 --- /dev/null +++ b/hasura.planx.uk/migrations/1718705200477_alter_table_public_flows_alter_column_name/up.sql @@ -0,0 +1 @@ +alter table "public"."flows" alter column "name" set not null; diff --git a/hasura.planx.uk/tests/portals.test.js b/hasura.planx.uk/tests/portals.test.js index 6511576507..7d34edc4f2 100644 --- a/hasura.planx.uk/tests/portals.test.js +++ b/hasura.planx.uk/tests/portals.test.js @@ -9,9 +9,9 @@ describe("portals", () => { let res = await gqlAdmin(` mutation { insert_flows(objects: [ - {slug: "TEST_root"}, - {slug: "TEST_portal"}, - {slug: "TEST_subportal"} + {slug: "TEST_root", name: "Test root"}, + {slug: "TEST_portal", name: "Test portal"}, + {slug: "TEST_subportal", name: "Test subportal"} ]) { returning { id diff --git a/hasura.planx.uk/tests/sessions.test.js b/hasura.planx.uk/tests/sessions.test.js index 83f91797f1..54c7a615a2 100644 --- a/hasura.planx.uk/tests/sessions.test.js +++ b/hasura.planx.uk/tests/sessions.test.js @@ -80,13 +80,15 @@ describe("sessions", () => { `mutation InsertFlow( $data: jsonb!, $slug: String!, + $name: String!, $teamId: Int!, ) { insert_flows_one( object: { data: $data slug: $slug - team_id: $teamId, + name: $name + team_id: $teamId version: 1 } ) { @@ -97,6 +99,7 @@ describe("sessions", () => { data: { x: 1 }, slug: "flow1", teamId: teamId, + name: "flow 1", } ); flowId = res2.data.insert_flows_one.id; diff --git a/sharedb.planx.uk/sharedb-postgresql.js b/sharedb.planx.uk/sharedb-postgresql.js index fbabf13bc2..236950302a 100644 --- a/sharedb.planx.uk/sharedb-postgresql.js +++ b/sharedb.planx.uk/sharedb-postgresql.js @@ -81,8 +81,8 @@ PostgresDB.prototype.commit = function ( client.query("BEGIN", (err) => { client.query( - "INSERT INTO flows (id, slug) VALUES ($1, $2) ON CONFLICT DO NOTHING", - [id, id], + "INSERT INTO flows (id, slug, name) VALUES ($1, $2, $3) ON CONFLICT DO NOTHING", + [id, id, id], (err, _res) => { if (err) { rollback(client, done); @@ -156,7 +156,7 @@ PostgresDB.prototype.commit = function ( }; // Get the named document from the database. The callback is called with (err, -// snapshot). A snapshot with a version of zero is returned if the docuemnt +// snapshot). A snapshot with a version of zero is returned if the document // has never been created in the database. PostgresDB.prototype.getSnapshot = function ( _collection, From 5f6e33c465138d8c137e5b38f169abaf9650f877 Mon Sep 17 00:00:00 2001 From: Ian Jones <51156018+ianjon3s@users.noreply.github.com> Date: Wed, 19 Jun 2024 13:00:44 +0100 Subject: [PATCH 041/150] chore: Replace OptionButton with Switch (#3287) --- .../@planx/components/Calculate/Editor.tsx | 30 +++++---- .../@planx/components/Checklist/Editor.tsx | 61 +++++++++++-------- .../src/@planx/components/Checklist/model.ts | 20 ++++-- .../@planx/components/DrawBoundary/Editor.tsx | 30 +++++---- .../components/FileUploadAndLabel/Editor.tsx | 27 +++++--- .../@planx/components/FindProperty/Editor.tsx | 28 +++++---- .../src/@planx/components/Notice/Editor.tsx | 30 +++++---- .../@planx/components/NumberInput/Editor.tsx | 28 +++++---- .../src/@planx/components/Pay/Editor.tsx | 48 +++++++++------ .../components/PropertyInformation/Editor.tsx | 30 +++++---- .../src/ui/editor/OptionButton.stories.tsx | 18 ------ .../src/ui/editor/OptionButton.tsx | 52 ---------------- 12 files changed, 204 insertions(+), 198 deletions(-) delete mode 100644 editor.planx.uk/src/ui/editor/OptionButton.stories.tsx delete mode 100644 editor.planx.uk/src/ui/editor/OptionButton.tsx 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/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/model.ts b/editor.planx.uk/src/@planx/components/Checklist/model.ts index 210fa82cee..843be32901 100644 --- a/editor.planx.uk/src/@planx/components/Checklist/model.ts +++ b/editor.planx.uk/src/@planx/components/Checklist/model.ts @@ -23,7 +23,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 +34,25 @@ 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; }; 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" + /> + - { - 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/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/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/Pay/Editor.tsx b/editor.planx.uk/src/@planx/components/Pay/Editor.tsx index 423d37a44e..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"; @@ -261,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/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" + /> + ; - -type Story = StoryObj; - -export default meta; - -export const Basic = { - args: { - selected: false, - backgroundColor: "#F9F8F8", - }, -} satisfies Story; diff --git a/editor.planx.uk/src/ui/editor/OptionButton.tsx b/editor.planx.uk/src/ui/editor/OptionButton.tsx deleted file mode 100644 index adb45a07e3..0000000000 --- a/editor.planx.uk/src/ui/editor/OptionButton.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import ButtonBase, { ButtonBaseProps } from "@mui/material/ButtonBase"; -import { styled } from "@mui/material/styles"; -import React from "react"; - -interface Props extends ButtonBaseProps { - selected?: boolean; - backgroundColor?: string; -} - -const Root = styled(ButtonBase, { - shouldForwardProp: (prop) => - !["selected", "backgroundColor"].includes(prop.toString()), -})(({ theme, selected, backgroundColor }) => ({ - height: 50, - padding: theme.spacing(0, 3, 0, 5), - marginBottom: theme.spacing(0.5), - fontSize: 15, - position: "relative", - fontFamily: "inherit", - display: "block", - width: "auto", - minWidth: 200, - textAlign: "left", - border: `1px solid ${theme.palette.border.light}`, - backgroundColor: theme.palette.common.white, - "&::before": { - content: "''", - position: "absolute", - height: 12, - width: 12, - left: 18, - top: 18, - borderRadius: "50%", - backgroundColor: theme.palette.grey[400], - ...(selected && { - color: "#fff", - backgroundColor: backgroundColor || theme.palette.success.main, - }), - }, - ...(!selected && { - "&:hover": { - backgroundColor: "rgba(0,0,0,0.1)", - }, - }), - ...(selected && { - backgroundColor: theme.palette.grey[200], - }), -})); - -export default function OptionButton(props: Props): FCReturn { - return {props.children}; -} From 5a84997cef4064d165f3026a769338fbebb7da31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Wed, 19 Jun 2024 13:02:48 +0100 Subject: [PATCH 042/150] fix: CVE-2024-29415 (#3293) --- editor.planx.uk/package.json | 2 +- editor.planx.uk/pnpm-lock.yaml | 414 +++++++++++++++------------------ 2 files changed, 191 insertions(+), 225 deletions(-) diff --git a/editor.planx.uk/package.json b/editor.planx.uk/package.json index 0c61ef5fe1..8241715246 100644 --- a/editor.planx.uk/package.json +++ b/editor.planx.uk/package.json @@ -151,7 +151,7 @@ "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", diff --git a/editor.planx.uk/pnpm-lock.yaml b/editor.planx.uk/pnpm-lock.yaml index b807633bb1..cdb4c9c19f 100644 --- a/editor.planx.uk/pnpm-lock.yaml +++ b/editor.planx.uk/pnpm-lock.yaml @@ -451,8 +451,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) @@ -499,13 +499,13 @@ packages: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - /@apideck/better-ajv-errors@0.3.6(ajv@8.15.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.15.0 + ajv: 8.16.0 json-schema: 0.4.0 jsonpointer: 5.0.1 leven: 3.1.0 @@ -3358,7 +3358,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 +3368,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 +3378,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 +3387,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 +3396,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 +3406,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 +3416,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 +3425,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 +3434,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 +3444,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 +3453,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 +3462,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 +3471,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 +3480,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 @@ -6544,13 +6544,13 @@ packages: - supports-color dev: true - /@storybook/builder-manager@8.1.5(prettier@3.3.1): - resolution: {integrity: sha512-wDiHLV+UPaUN+765WwXkocVRB2QnJ61CjLHbpWaLiJvryFJt+JQ6nAvgSalCRnZxI046ztbS9T6okhpFI011IA==} + /@storybook/builder-manager@8.1.10(prettier@3.3.1): + 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.3.1) - '@storybook/manager': 8.1.5 - '@storybook/node-logger': 8.1.5 + '@storybook/core-common': 8.1.10(prettier@3.3.1) + '@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 @@ -6634,31 +6634,31 @@ packages: 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 '@ndelangen/get-tarball': 3.0.9 - '@storybook/codemod': 8.1.5 - '@storybook/core-common': 8.1.5(prettier@3.3.1) - '@storybook/core-events': 8.1.5 - '@storybook/core-server': 8.1.5(prettier@3.3.1)(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.3.1) - '@storybook/types': 8.1.5 + '@storybook/codemod': 8.1.10 + '@storybook/core-common': 8.1.10(prettier@3.3.1) + '@storybook/core-events': 8.1.10 + '@storybook/core-server': 8.1.10(prettier@3.3.1)(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.1) + '@storybook/types': 8.1.10 '@types/semver': 7.5.8 '@yarnpkg/fslib': 2.10.3 '@yarnpkg/libzip': 2.3.0 @@ -6676,7 +6676,7 @@ packages: jscodeshift: 0.15.2(@babel/preset-env@7.22.6) leven: 3.1.0 ora: 5.4.1 - prettier: 3.3.0 + prettier: 3.3.1 prompts: 2.4.2 read-pkg-up: 7.0.1 semver: 7.6.2 @@ -6707,28 +6707,28 @@ 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 + '@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) lodash: 4.17.21 - prettier: 3.3.0 + prettier: 3.3.1 recast: 0.23.7 tiny-invariant: 1.3.3 transitivePeerDependencies: @@ -6796,18 +6796,18 @@ packages: - supports-color dev: true - /@storybook/core-common@8.1.5(prettier@3.3.1): - resolution: {integrity: sha512-1QDOT6KPZ9KV7Gs1yyqzvSwGBmNSUB33gckUldSBF4aqP+tZ7W5JIQ6/YTtp3V02sEokZGdL9Ud4LczQxTgy3A==} + /@storybook/core-common@8.1.10(prettier@3.3.1): + 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 @@ -6851,34 +6851,34 @@ 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 ts-dedent: 2.2.0 dev: true - /@storybook/core-server@8.1.5(prettier@3.3.1)(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.1)(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 '@discoveryjs/json-ext': 0.5.7 - '@storybook/builder-manager': 8.1.5(prettier@3.3.1) - '@storybook/channels': 8.1.5 - '@storybook/core-common': 8.1.5(prettier@3.3.1) - '@storybook/core-events': 8.1.5 + '@storybook/builder-manager': 8.1.10(prettier@3.3.1) + '@storybook/channels': 8.1.10 + '@storybook/core-common': 8.1.10(prettier@3.3.1) + '@storybook/core-events': 8.1.10 '@storybook/csf': 0.1.7 - '@storybook/csf-tools': 8.1.5 + '@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.3.1) - '@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.1) + '@storybook/types': 8.1.10 '@types/detect-port': 1.3.5 '@types/diff': 5.2.1 '@types/node': 18.19.33 @@ -6893,7 +6893,6 @@ packages: express: 4.19.2 fs-extra: 11.2.0 globby: 14.0.1 - ip: 2.0.1 lodash: 4.17.21 open: 8.4.2 pretty-hrtime: 1.0.3 @@ -6955,15 +6954,15 @@ packages: - 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 + '@storybook/types': 8.1.10 fs-extra: 11.2.0 recast: 0.23.7 ts-dedent: 2.2.0 @@ -7033,18 +7032,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/channels': 8.1.10 + '@storybook/client-logger': 8.1.10 + '@storybook/core-events': 8.1.10 '@storybook/csf': 0.1.7 '@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 +7055,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 +7067,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: @@ -7173,15 +7172,15 @@ packages: 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/channels': 8.1.10 + '@storybook/client-logger': 8.1.10 + '@storybook/core-events': 8.1.10 '@storybook/csf': 0.1.7 '@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 @@ -7312,20 +7311,20 @@ packages: qs: 6.12.1 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 dev: true - /@storybook/telemetry@8.1.5(prettier@3.3.1): - resolution: {integrity: sha512-QbB1Ox7oBaCvIF2TacFjPLi1XYeHxSPeZUuFXeE+tSMdvvWZzYLnXfj/oISmV6Q+X5VZfyJVMrZ2LfeW9CuFNg==} + /@storybook/telemetry@8.1.10(prettier@3.3.1): + resolution: {integrity: sha512-pwiMWrq85D0AnaAgYNfB2w2BDgqnetQ+tXwsUAw4fUEFwA4oPU6r0uqekRbNNE6wmSSYjiiFP3JgknBFqjd2hg==} dependencies: - '@storybook/client-logger': 8.1.5 - '@storybook/core-common': 8.1.5(prettier@3.3.1) - '@storybook/csf-tools': 8.1.5 + '@storybook/client-logger': 8.1.10 + '@storybook/core-common': 8.1.10(prettier@3.3.1) + '@storybook/csf-tools': 8.1.10 chalk: 4.1.2 detect-package-manager: 2.0.1 fetch-retry: 5.0.6 @@ -7373,8 +7372,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 +7384,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 +7400,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 @@ -8960,16 +8959,6 @@ packages: indent-string: 4.0.0 dev: true - /ajv-formats@2.1.1(ajv@8.15.0): - resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true - dependencies: - ajv: 8.15.0 - /ajv-formats@2.1.1(ajv@8.16.0): resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: @@ -8979,7 +8968,6 @@ packages: optional: true dependencies: ajv: 8.16.0 - dev: false /ajv-keywords@3.5.2(ajv@6.12.6): resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} @@ -8988,12 +8976,12 @@ packages: dependencies: ajv: 6.12.6 - /ajv-keywords@5.1.0(ajv@8.15.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.15.0 + ajv: 8.16.0 fast-deep-equal: 3.1.3 /ajv@6.12.6: @@ -9004,14 +8992,6 @@ packages: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - /ajv@8.15.0: - resolution: {integrity: sha512-15BTtQUOsSrmHCy+B4VnAiJAJxJ8IFgu6fcjFQF3jQYZ78nLSQthlFg4ehp+NLIyfvFgOlxNsjKIEhydtFPVHQ==} - dependencies: - fast-deep-equal: 3.1.3 - fast-uri: 2.3.0 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - /ajv@8.16.0: resolution: {integrity: sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==} dependencies: @@ -9019,7 +8999,6 @@ packages: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 uri-js: 4.4.1 - dev: false /ansi-escapes@4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} @@ -9316,7 +9295,7 @@ 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 @@ -10613,7 +10592,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 @@ -10632,7 +10611,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 @@ -10641,7 +10620,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 @@ -10715,7 +10694,7 @@ packages: engines: {node: ^12 || ^14 || >=16} hasBin: true peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.4 dependencies: postcss: 8.4.32 @@ -10798,7 +10777,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) @@ -10835,7 +10814,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 @@ -10843,7 +10822,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 @@ -12448,9 +12427,6 @@ packages: resolution: {integrity: sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw==} dev: false - /fast-uri@2.3.0: - resolution: {integrity: sha512-eel5UKGn369gGEWOqBShmFJWfq/xSJvsgDzgLYC845GneayWvXBf0lJCBn5qTABfewy1ZDPoaR5OZCP+kssfuw==} - /fast-xml-parser@4.4.0: resolution: {integrity: sha512-kLY3jFlwIYwBNDojclKsNAC12sfD6NwW74QB2CoNGPvtVxjliYehVunB3HYyNi+n4Tt1dAcgwYvmKF/Z18flqg==} hasBin: true @@ -13507,7 +13483,7 @@ packages: resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: - postcss: '>=8.4.31' + postcss: ^8.1.0 dependencies: postcss: 8.4.38 @@ -13606,10 +13582,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'} @@ -16737,7 +16709,7 @@ 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 @@ -16747,7 +16719,7 @@ packages: engines: {node: '>=8'} peerDependencies: browserslist: '>=4' - postcss: '>=8.4.31' + postcss: '>=8' dependencies: browserslist: 4.23.0 postcss: 8.4.32 @@ -16755,7 +16727,7 @@ packages: /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 @@ -16765,7 +16737,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 @@ -16774,7 +16746,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 @@ -16783,7 +16755,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 @@ -16792,7 +16764,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 @@ -16801,7 +16773,7 @@ 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 caniuse-api: 3.0.0 @@ -16813,7 +16785,7 @@ 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 postcss: 8.4.32 @@ -16823,7 +16795,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 @@ -16832,7 +16804,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 @@ -16841,7 +16813,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 @@ -16850,7 +16822,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 @@ -16859,7 +16831,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 @@ -16867,7 +16839,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 @@ -16875,7 +16847,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 @@ -16883,7 +16855,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 @@ -16891,7 +16863,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 @@ -16901,7 +16873,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 @@ -16909,7 +16881,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 @@ -16917,7 +16889,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 @@ -16926,7 +16898,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 @@ -16934,7 +16906,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 @@ -16942,7 +16914,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 @@ -16950,7 +16922,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 @@ -16959,7 +16931,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 @@ -16969,7 +16941,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 @@ -16977,7 +16949,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 @@ -16986,7 +16958,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 @@ -16996,7 +16968,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: @@ -17012,7 +16984,7 @@ packages: 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 @@ -17025,7 +16997,7 @@ packages: 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 @@ -17033,7 +17005,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 @@ -17041,7 +17013,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 @@ -17051,7 +17023,7 @@ 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 caniuse-api: 3.0.0 @@ -17063,7 +17035,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 @@ -17072,7 +17044,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) @@ -17083,7 +17055,7 @@ 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 cssnano-utils: 3.1.0(postcss@8.4.32) @@ -17094,7 +17066,7 @@ 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 @@ -17103,7 +17075,7 @@ packages: 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 @@ -17111,7 +17083,7 @@ packages: 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 @@ -17122,7 +17094,7 @@ packages: 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-selector-parser: 6.1.0 @@ -17131,7 +17103,7 @@ packages: 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 @@ -17140,7 +17112,7 @@ packages: 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 @@ -17149,7 +17121,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 @@ -17159,7 +17131,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 @@ -17167,7 +17139,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 @@ -17176,7 +17148,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 @@ -17185,7 +17157,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 @@ -17194,7 +17166,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 @@ -17203,7 +17175,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 @@ -17212,7 +17184,7 @@ 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 postcss: 8.4.32 @@ -17222,7 +17194,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 @@ -17232,7 +17204,7 @@ 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 @@ -17242,7 +17214,7 @@ packages: engines: {node: '>= 12'} peerDependencies: browserslist: '>= 4' - postcss: '>=8.4.31' + postcss: '>= 8' dependencies: '@csstools/normalize.css': 12.1.1 browserslist: 4.23.0 @@ -17254,7 +17226,7 @@ packages: 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 @@ -17262,7 +17234,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 @@ -17272,7 +17244,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 @@ -17280,7 +17252,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 @@ -17288,7 +17260,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 @@ -17297,7 +17269,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) @@ -17354,7 +17326,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 @@ -17363,7 +17335,7 @@ 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 caniuse-api: 3.0.0 @@ -17373,7 +17345,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 @@ -17381,7 +17353,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 @@ -17389,7 +17361,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 @@ -17405,7 +17377,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 @@ -17415,7 +17387,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 @@ -17458,12 +17430,6 @@ packages: hasBin: true dev: true - /prettier@3.3.0: - resolution: {integrity: sha512-J9odKxERhCQ10OC2yb93583f6UnYutOeiV5i0zEDS7UGTdUt0u+y8erxl3lBKvwo/JHyyoEdXjwp4dke9oyZ/g==} - engines: {node: '>=14'} - hasBin: true - dev: true - /prettier@3.3.1: resolution: {integrity: sha512-7CAwy5dRsxs8PHXT3twixW9/OEll8MLE0VRPCJyl7CkS6VHGPSlsVaWTiASPTyGyYRyApxlaWTzwUxVNrhcwDg==} engines: {node: '>=14'} @@ -19064,9 +19030,9 @@ packages: engines: {node: '>= 12.13.0'} dependencies: '@types/json-schema': 7.0.15 - ajv: 8.15.0 - ajv-formats: 2.1.1(ajv@8.15.0) - ajv-keywords: 5.1.0(ajv@8.15.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==} @@ -19605,11 +19571,11 @@ packages: react-inspector: 2.3.1(react@18.2.0) 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 @@ -19814,7 +19780,7 @@ 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 postcss: 8.4.32 @@ -21289,7 +21255,7 @@ packages: resolution: {integrity: sha512-Tjf+gBwOTuGyZwMz2Nk/B13Fuyeo0Q84W++bebbVsfr9iLkDSo6j6PST8tET9HYA58mlRXwlMGpyWO8ETJiXdQ==} engines: {node: '>=10.0.0'} dependencies: - '@apideck/better-ajv-errors': 0.3.6(ajv@8.15.0) + '@apideck/better-ajv-errors': 0.3.6(ajv@8.16.0) '@babel/core': 7.24.5 '@babel/preset-env': 7.24.5(@babel/core@7.24.5) '@babel/runtime': 7.24.5 @@ -21297,7 +21263,7 @@ packages: '@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.15.0 + ajv: 8.16.0 common-tags: 1.8.2 fast-json-stable-stringify: 2.1.0 fs-extra: 9.1.0 From 3289f6ad4914d63cf2829188ec42022bacb787f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Wed, 19 Jun 2024 13:03:09 +0100 Subject: [PATCH 043/150] fix: CVE-2024-37168 (#3295) --- infrastructure/application/package.json | 3 +- infrastructure/application/pnpm-lock.yaml | 201 +++++++++++---------- infrastructure/certificates/package.json | 3 +- infrastructure/certificates/pnpm-lock.yaml | 51 +++--- infrastructure/data/package.json | 3 +- infrastructure/data/pnpm-lock.yaml | 199 ++++++++++---------- infrastructure/networking/package.json | 3 +- infrastructure/networking/pnpm-lock.yaml | 199 ++++++++++---------- 8 files changed, 340 insertions(+), 322 deletions(-) diff --git a/infrastructure/application/package.json b/infrastructure/application/package.json index acf5364be9..9847b6ec4e 100644 --- a/infrastructure/application/package.json +++ b/infrastructure/application/package.json @@ -21,7 +21,8 @@ }, "pnpm": { "overrides": { - "protobufjs@>=7.0.0 <7.2.5": ">=7.2.5" + "protobufjs@>=7.0.0 <7.2.5": ">=7.2.5", + "@grpc/grpc-js@>=1.10.0 <1.10.9": ">=1.10.9" } } } diff --git a/infrastructure/application/pnpm-lock.yaml b/infrastructure/application/pnpm-lock.yaml index f11c8bcdd3..5e236d2bab 100644 --- a/infrastructure/application/pnpm-lock.yaml +++ b/infrastructure/application/pnpm-lock.yaml @@ -6,6 +6,7 @@ settings: overrides: protobufjs@>=7.0.0 <7.2.5: '>=7.2.5' + '@grpc/grpc-js@>=1.10.0 <1.10.9': '>=1.10.9' dependencies: '@nodelib/fs.walk': @@ -52,22 +53,22 @@ devDependencies: packages: - /@grpc/grpc-js@1.10.6: - resolution: {integrity: sha512-xP58G7wDQ4TCmN/cMUHh00DS7SRDv/+lC+xFLrTkMIN8h55X5NhZMLYbvy7dSELP15qlI6hPhNCRWVMtZMwqLA==} + /@grpc/grpc-js@1.10.9: + resolution: {integrity: sha512-5tcgUctCG0qoNyfChZifz2tJqbRbXVO9J7X6duFcOjY3HUNCxg5D0ZCK7EP9vIcZ0zRpLU9bWkyCqVCLZ46IbQ==} engines: {node: '>=12.10.0'} dependencies: - '@grpc/proto-loader': 0.7.12 + '@grpc/proto-loader': 0.7.13 '@js-sdsl/ordered-map': 4.4.2 dev: false - /@grpc/proto-loader@0.7.12: - resolution: {integrity: sha512-DCVwMxqYzpUCiDMl7hQ384FqP4T3DbNpXU8pt681l3UWCip1WUiD5JrkImUwCB9a7f2cq4CUTmi5r/xIMRPY1Q==} + /@grpc/proto-loader@0.7.13: + resolution: {integrity: sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==} engines: {node: '>=6'} hasBin: true dependencies: lodash.camelcase: 4.3.0 long: 5.2.3 - protobufjs: 7.2.6 + protobufjs: 7.3.2 yargs: 17.7.2 dev: false @@ -106,135 +107,135 @@ packages: engines: {node: '>=14'} deprecated: Please use @opentelemetry/api >= 1.3.0 dependencies: - '@opentelemetry/api': 1.8.0 + '@opentelemetry/api': 1.9.0 dev: false - /@opentelemetry/api@1.8.0: - resolution: {integrity: sha512-I/s6F7yKUDdtMsoBWXJe8Qz40Tui5vsuKCWJEWVL+5q9sSWRzzx6v2KeNsOBEwd94j0eWkpWCH4yB6rZg9Mf0w==} + /@opentelemetry/api@1.9.0: + resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} engines: {node: '>=8.0.0'} dev: false - /@opentelemetry/context-async-hooks@1.23.0(@opentelemetry/api@1.8.0): - resolution: {integrity: sha512-wazGJZDRevibOJ+VgyrT+9+8sybZAxpZx2G7vy30OAtk92OpZCg7HgNxT11NUx0VBDWcRx1dOatMYGOVplQ7QA==} + /@opentelemetry/context-async-hooks@1.25.0(@opentelemetry/api@1.9.0): + resolution: {integrity: sha512-sBW313mnMyFg0cp/40BRzrZBWG+581s2j5gIsa5fgGadswyILk4mNFATsqrCOpAx945RDuZ2B7ThQLgor9OpfA==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.9.0' + '@opentelemetry/api': '>=1.0.0 <1.10.0' dependencies: - '@opentelemetry/api': 1.8.0 + '@opentelemetry/api': 1.9.0 dev: false - /@opentelemetry/core@1.23.0(@opentelemetry/api@1.8.0): - resolution: {integrity: sha512-hdQ/a9TMzMQF/BO8Cz1juA43/L5YGtCSiKoOHmrTEf7VMDAZgy8ucpWx3eQTnQ3gBloRcWtzvcrMZABC3PTSKQ==} + /@opentelemetry/core@1.25.0(@opentelemetry/api@1.9.0): + resolution: {integrity: sha512-n0B3s8rrqGrasTgNkXLKXzN0fXo+6IYP7M5b7AMsrZM33f/y6DS6kJ0Btd7SespASWq8bgL3taLo0oe0vB52IQ==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.9.0' + '@opentelemetry/api': '>=1.0.0 <1.10.0' dependencies: - '@opentelemetry/api': 1.8.0 - '@opentelemetry/semantic-conventions': 1.23.0 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/semantic-conventions': 1.25.0 dev: false - /@opentelemetry/exporter-zipkin@1.23.0(@opentelemetry/api@1.8.0): - resolution: {integrity: sha512-2LOGvNUGONuIcWhynFaJorVyqv03uZkURScciLmOxvBf2lWTNPEj77br1dCpShIWBM+YlrH7Tc+JXAs+GC7DqA==} + /@opentelemetry/exporter-zipkin@1.25.0(@opentelemetry/api@1.9.0): + resolution: {integrity: sha512-nnhY0e5DHg8BfUSNCQZoGZnGeqz+zMTeEUOh1dfgtaXmF99uM0QPuTa1i2lH+eZqebP8w1WDWZlewu9FUlHqIg==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.0.0 dependencies: - '@opentelemetry/api': 1.8.0 - '@opentelemetry/core': 1.23.0(@opentelemetry/api@1.8.0) - '@opentelemetry/resources': 1.23.0(@opentelemetry/api@1.8.0) - '@opentelemetry/sdk-trace-base': 1.23.0(@opentelemetry/api@1.8.0) - '@opentelemetry/semantic-conventions': 1.23.0 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.25.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.25.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.25.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.25.0 dev: false - /@opentelemetry/instrumentation-grpc@0.32.0(@opentelemetry/api@1.8.0): + /@opentelemetry/instrumentation-grpc@0.32.0(@opentelemetry/api@1.9.0): resolution: {integrity: sha512-Az6wdkPx/Mi26lT9LKFV6GhCA9prwQFPz5eCNSExTnSP49YhQ7XCjzPd2POPeLKt84ICitrBMdE1mj0zbPdLAQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.0.0 dependencies: - '@opentelemetry/api': 1.8.0 + '@opentelemetry/api': 1.9.0 '@opentelemetry/api-metrics': 0.32.0 - '@opentelemetry/instrumentation': 0.32.0(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation': 0.32.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.6.0 transitivePeerDependencies: - supports-color dev: false - /@opentelemetry/instrumentation@0.32.0(@opentelemetry/api@1.8.0): + /@opentelemetry/instrumentation@0.32.0(@opentelemetry/api@1.9.0): resolution: {integrity: sha512-y6ADjHpkUz/v1nkyyYjsQa/zorhX+0qVGpFvXMcbjU4sHnBnC02c6wcc93sIgZfiQClIWo45TGku1KQxJ5UUbQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.0.0 dependencies: - '@opentelemetry/api': 1.8.0 + '@opentelemetry/api': 1.9.0 '@opentelemetry/api-metrics': 0.32.0 require-in-the-middle: 5.2.0 - semver: 7.6.0 + semver: 7.6.2 shimmer: 1.2.1 transitivePeerDependencies: - supports-color dev: false - /@opentelemetry/propagator-b3@1.23.0(@opentelemetry/api@1.8.0): - resolution: {integrity: sha512-cZ6rl8y2bdxYQ4e+zP2CQ+QmuPebaLBLO1skjFpj3eEu7zar+6hBzUP3llMOUupkQeQSwXz+4c8dZ26OhYfG/g==} + /@opentelemetry/propagator-b3@1.25.0(@opentelemetry/api@1.9.0): + resolution: {integrity: sha512-/A+1Tbnf0uwnP51OkoaQlrb9YILdHsoqIISna1MNXpZRzf42xm6LVLb49i+m/zlJoW1e8P4ekcrditR5pfmwog==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.9.0' + '@opentelemetry/api': '>=1.0.0 <1.10.0' dependencies: - '@opentelemetry/api': 1.8.0 - '@opentelemetry/core': 1.23.0(@opentelemetry/api@1.8.0) + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.25.0(@opentelemetry/api@1.9.0) dev: false - /@opentelemetry/propagator-jaeger@1.23.0(@opentelemetry/api@1.8.0): - resolution: {integrity: sha512-6iArixfgIl3ZgzeltQ5jyiKbjZygM+MbM84pXi1HL0Qs4x4Ck5rM6wEtjhZffFnlDMWEkEqrnM0xF6bTfbiMAQ==} + /@opentelemetry/propagator-jaeger@1.25.0(@opentelemetry/api@1.9.0): + resolution: {integrity: sha512-uwA5xqaPISXeX+YutqbjmzENnCGCvrIXlqIXP5gRoA5N6S3W28p+ExL77TugMKHN5gXklapF67jDfz7lq5ETzQ==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.9.0' + '@opentelemetry/api': '>=1.0.0 <1.10.0' dependencies: - '@opentelemetry/api': 1.8.0 - '@opentelemetry/core': 1.23.0(@opentelemetry/api@1.8.0) + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.25.0(@opentelemetry/api@1.9.0) dev: false - /@opentelemetry/resources@1.23.0(@opentelemetry/api@1.8.0): - resolution: {integrity: sha512-iPRLfVfcEQynYGo7e4Di+ti+YQTAY0h5mQEUJcHlU9JOqpb4x965O6PZ+wMcwYVY63G96KtdS86YCM1BF1vQZg==} + /@opentelemetry/resources@1.25.0(@opentelemetry/api@1.9.0): + resolution: {integrity: sha512-iHjydPMYJ+Li1auveJCq2rp5U2h6Mhq8BidiyE0jfVlDTFyR1ny8AfJHfmFzJ/RAM8vT8L7T21kcmGybxZC7lQ==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.9.0' + '@opentelemetry/api': '>=1.0.0 <1.10.0' dependencies: - '@opentelemetry/api': 1.8.0 - '@opentelemetry/core': 1.23.0(@opentelemetry/api@1.8.0) - '@opentelemetry/semantic-conventions': 1.23.0 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.25.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.25.0 dev: false - /@opentelemetry/sdk-trace-base@1.23.0(@opentelemetry/api@1.8.0): - resolution: {integrity: sha512-PzBmZM8hBomUqvCddF/5Olyyviayka44O5nDWq673np3ctnvwMOvNrsUORZjKja1zJbwEuD9niAGbnVrz3jwRQ==} + /@opentelemetry/sdk-trace-base@1.25.0(@opentelemetry/api@1.9.0): + resolution: {integrity: sha512-6+g2fiRQUG39guCsKVeY8ToeuUf3YUnPkN6DXRA1qDmFLprlLvZm9cS6+chgbW70cZJ406FTtSCDnJwxDC5sGQ==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.9.0' + '@opentelemetry/api': '>=1.0.0 <1.10.0' dependencies: - '@opentelemetry/api': 1.8.0 - '@opentelemetry/core': 1.23.0(@opentelemetry/api@1.8.0) - '@opentelemetry/resources': 1.23.0(@opentelemetry/api@1.8.0) - '@opentelemetry/semantic-conventions': 1.23.0 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.25.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.25.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.25.0 dev: false - /@opentelemetry/sdk-trace-node@1.23.0(@opentelemetry/api@1.8.0): - resolution: {integrity: sha512-dwnin5Go2r6VzJZkVc9JBPupssWp7j2EFto+S7qRkwQ00WDykWeq3x2Skk7I1Jr448FeBSvGCQVPgV5e6s6O3w==} + /@opentelemetry/sdk-trace-node@1.25.0(@opentelemetry/api@1.9.0): + resolution: {integrity: sha512-sYdZmNCkqthPpjwCxAJk5aQNLxCOQjT1u3JMGvO6rb3Ic8uFdnzXavP13Md9uYPcZBo+KxetyDhCf0x8wJGRng==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.9.0' + '@opentelemetry/api': '>=1.0.0 <1.10.0' dependencies: - '@opentelemetry/api': 1.8.0 - '@opentelemetry/context-async-hooks': 1.23.0(@opentelemetry/api@1.8.0) - '@opentelemetry/core': 1.23.0(@opentelemetry/api@1.8.0) - '@opentelemetry/propagator-b3': 1.23.0(@opentelemetry/api@1.8.0) - '@opentelemetry/propagator-jaeger': 1.23.0(@opentelemetry/api@1.8.0) - '@opentelemetry/sdk-trace-base': 1.23.0(@opentelemetry/api@1.8.0) - semver: 7.6.0 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/context-async-hooks': 1.25.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.25.0(@opentelemetry/api@1.9.0) + '@opentelemetry/propagator-b3': 1.25.0(@opentelemetry/api@1.9.0) + '@opentelemetry/propagator-jaeger': 1.25.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.25.0(@opentelemetry/api@1.9.0) + semver: 7.6.2 dev: false - /@opentelemetry/semantic-conventions@1.23.0: - resolution: {integrity: sha512-MiqFvfOzfR31t8cc74CTP1OZfz7MbqpAnLCra8NqQoaHJX6ncIRTdYOQYBDQ2uFISDq0WY8Y9dDTWvsgzzBYRg==} + /@opentelemetry/semantic-conventions@1.25.0: + resolution: {integrity: sha512-M+kkXKRAIAiAP6qYyesfrC5TOmDpDVtsxuGfPcqd9B/iBrac+E14jYwrgm0yZBUIbIP2OnqC3j+UgkXLm1vxUQ==} engines: {node: '>=14'} dev: false @@ -291,7 +292,7 @@ packages: requiresBuild: true dependencies: '@pulumi/pulumi': 3.75.0 - aws-sdk: 2.1597.0 + aws-sdk: 2.1644.0 builtin-modules: 3.0.0 mime: 2.6.0 read-package-tree: 5.3.1 @@ -309,7 +310,7 @@ packages: '@pulumi/aws': 5.42.0 '@pulumi/docker': 3.2.0 '@pulumi/pulumi': 3.75.0 - '@types/aws-lambda': 8.10.137 + '@types/aws-lambda': 8.10.140 mime: 2.6.0 transitivePeerDependencies: - supports-color @@ -347,16 +348,16 @@ packages: resolution: {integrity: sha512-gtraq2JsCWIpMyohWluXGvxPzOnbqqPCVMtE96SPiKaevaBXdfx4PI/Yli29d3KK/thigvb3RrJ9e7X6q6DGew==} engines: {node: '>=8.13.0 || >=10.10.0'} dependencies: - '@grpc/grpc-js': 1.10.6 + '@grpc/grpc-js': 1.10.9 '@logdna/tail-file': 2.2.0 - '@opentelemetry/api': 1.8.0 - '@opentelemetry/exporter-zipkin': 1.23.0(@opentelemetry/api@1.8.0) - '@opentelemetry/instrumentation': 0.32.0(@opentelemetry/api@1.8.0) - '@opentelemetry/instrumentation-grpc': 0.32.0(@opentelemetry/api@1.8.0) - '@opentelemetry/resources': 1.23.0(@opentelemetry/api@1.8.0) - '@opentelemetry/sdk-trace-base': 1.23.0(@opentelemetry/api@1.8.0) - '@opentelemetry/sdk-trace-node': 1.23.0(@opentelemetry/api@1.8.0) - '@opentelemetry/semantic-conventions': 1.23.0 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/exporter-zipkin': 1.25.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.32.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-grpc': 0.32.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.25.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.25.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-node': 1.25.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.25.0 '@pulumi/query': 0.3.0 execa: 5.1.1 google-protobuf: 3.21.2 @@ -367,7 +368,7 @@ packages: pkg-dir: 7.0.0 read-package-tree: 5.3.1 require-from-string: 2.0.2 - semver: 7.6.0 + semver: 7.6.2 source-map-support: 0.5.21 ts-node: 7.0.1 typescript: 3.8.3 @@ -389,8 +390,8 @@ packages: - supports-color dev: false - /@types/aws-lambda@8.10.137: - resolution: {integrity: sha512-YNFwzVarXAOXkjuFxONyDw1vgRNzyH8AuyN19s0bM+ChSu/bzxb5XPxYFLXoqoM+tvgzwR3k7fXcEOW125yJxg==} + /@types/aws-lambda@8.10.140: + resolution: {integrity: sha512-4Dh3dk2TUcbdfHrX0Al90mNGJDvA9NBiTQPzbrjGi/dLxzKCGOYgT8YQ47jUKNFALkAJAadifq0pzyjIUlhVhg==} dev: false /@types/mime@2.0.3: @@ -473,8 +474,8 @@ packages: possible-typed-array-names: 1.0.0 dev: false - /aws-sdk@2.1597.0: - resolution: {integrity: sha512-YvApP9p5a5TD870mvQRrcUyJz3nKFrtlnDLaA4yrmAaidMDGzdNJ+AZlW0+onRCB4llzKD4Hos56zea0ulR+zQ==} + /aws-sdk@2.1644.0: + resolution: {integrity: sha512-9DkVmQWrL766uxeag6wLbXNahwodrIvxZlh1JZ6bzMoNXLCx38GhQfdtLhCoqK7+k0c5QIzHhjPqyqwPM4ohJw==} engines: {node: '>= 10.0.0'} requiresBuild: true dependencies: @@ -593,8 +594,8 @@ packages: is-data-view: 1.0.1 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: '*' @@ -663,7 +664,7 @@ packages: function.prototype.name: 1.1.6 get-intrinsic: 1.2.4 get-symbol-description: 1.0.2 - globalthis: 1.0.3 + globalthis: 1.0.4 gopd: 1.0.1 has-property-descriptors: 1.0.2 has-proto: 1.0.3 @@ -842,6 +843,7 @@ 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 @@ -851,11 +853,12 @@ packages: path-is-absolute: 1.0.1 dev: false - /globalthis@1.0.3: - resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + /globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} dependencies: define-properties: 1.2.1 + gopd: 1.0.1 dev: false /google-protobuf@3.21.2: @@ -928,6 +931,7 @@ 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 @@ -1193,7 +1197,7 @@ packages: dependencies: hosted-git-info: 4.1.0 is-core-module: 2.13.1 - semver: 7.6.0 + semver: 7.6.2 validate-npm-package-license: 3.0.4 dev: false @@ -1298,8 +1302,8 @@ packages: engines: {node: '>= 0.4'} dev: false - /protobufjs@7.2.6: - resolution: {integrity: sha512-dgJaEDDL6x8ASUZ1YqWciTRrdOuYNzoOf27oHNfdyvKqHr5i0FV7FSLU+aIeFjyFgVxrpTOtQUi0BLLBymZaBw==} + /protobufjs@7.3.2: + resolution: {integrity: sha512-RXyHaACeqXeqAKGLDl68rQKbmObRsTIn4TYVUUug1KfS47YWCo5MacGITEryugIgZqORCvJWEk4l449POg5Txg==} engines: {node: '>=12.0.0'} requiresBuild: true dependencies: @@ -1337,6 +1341,7 @@ packages: /read-package-json@2.1.2: resolution: {integrity: sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA==} + deprecated: This package is no longer supported. Please use @npmcli/package-json instead. dependencies: glob: 7.2.3 json-parse-even-better-errors: 2.3.1 @@ -1387,7 +1392,7 @@ packages: resolution: {integrity: sha512-efCx3b+0Z69/LGJmm9Yvi4cqEdxnoGnxYxGxBghkkTTFeXRtTCmmhO0AnAfHz59k957uTSuy8WaHqOs8wbYUWg==} engines: {node: '>=6'} dependencies: - debug: 4.3.4 + debug: 4.3.5 module-details-from-path: 1.0.3 resolve: 1.22.8 transitivePeerDependencies: @@ -1442,12 +1447,10 @@ packages: hasBin: true dev: false - /semver@7.6.0: - resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} + /semver@7.6.2: + resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} engines: {node: '>=10'} hasBin: true - dependencies: - lru-cache: 6.0.0 dev: false /set-function-length@1.2.2: @@ -1518,7 +1521,7 @@ packages: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} dependencies: spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.17 + spdx-license-ids: 3.0.18 dev: false /spdx-exceptions@2.5.0: @@ -1529,11 +1532,11 @@ packages: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} dependencies: spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.17 + spdx-license-ids: 3.0.18 dev: false - /spdx-license-ids@3.0.17: - resolution: {integrity: sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==} + /spdx-license-ids@3.0.18: + resolution: {integrity: sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==} dev: false /sprintf-js@1.0.3: diff --git a/infrastructure/certificates/package.json b/infrastructure/certificates/package.json index 91c3d40f8f..09511d2a7d 100644 --- a/infrastructure/certificates/package.json +++ b/infrastructure/certificates/package.json @@ -13,7 +13,8 @@ "pnpm": { "overrides": { "protobufjs": ">=7.2.4", - "protobufjs@>=7.0.0 <7.2.5": ">=7.2.5" + "protobufjs@>=7.0.0 <7.2.5": ">=7.2.5", + "@grpc/grpc-js@>=1.10.0 <1.10.9": ">=1.10.9" } } } diff --git a/infrastructure/certificates/pnpm-lock.yaml b/infrastructure/certificates/pnpm-lock.yaml index 12ae64b4d9..f778369177 100644 --- a/infrastructure/certificates/pnpm-lock.yaml +++ b/infrastructure/certificates/pnpm-lock.yaml @@ -7,6 +7,7 @@ settings: overrides: protobufjs: '>=7.2.4' protobufjs@>=7.0.0 <7.2.5: '>=7.2.5' + '@grpc/grpc-js@>=1.10.0 <1.10.9': '>=1.10.9' dependencies: '@pulumi/aws': @@ -35,22 +36,22 @@ devDependencies: packages: - /@grpc/grpc-js@1.10.6: - resolution: {integrity: sha512-xP58G7wDQ4TCmN/cMUHh00DS7SRDv/+lC+xFLrTkMIN8h55X5NhZMLYbvy7dSELP15qlI6hPhNCRWVMtZMwqLA==} + /@grpc/grpc-js@1.10.9: + resolution: {integrity: sha512-5tcgUctCG0qoNyfChZifz2tJqbRbXVO9J7X6duFcOjY3HUNCxg5D0ZCK7EP9vIcZ0zRpLU9bWkyCqVCLZ46IbQ==} engines: {node: '>=12.10.0'} dependencies: - '@grpc/proto-loader': 0.7.12 + '@grpc/proto-loader': 0.7.13 '@js-sdsl/ordered-map': 4.4.2 dev: false - /@grpc/proto-loader@0.7.12: - resolution: {integrity: sha512-DCVwMxqYzpUCiDMl7hQ384FqP4T3DbNpXU8pt681l3UWCip1WUiD5JrkImUwCB9a7f2cq4CUTmi5r/xIMRPY1Q==} + /@grpc/proto-loader@0.7.13: + resolution: {integrity: sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==} engines: {node: '>=6'} hasBin: true dependencies: lodash.camelcase: 4.3.0 long: 5.2.3 - protobufjs: 7.2.6 + protobufjs: 7.3.2 yargs: 17.7.2 dev: false @@ -111,7 +112,7 @@ packages: requiresBuild: true dependencies: '@pulumi/pulumi': 3.0.0 - aws-sdk: 2.1597.0 + aws-sdk: 2.1644.0 builtin-modules: 3.0.0 mime: 2.6.0 read-package-tree: 5.3.1 @@ -127,7 +128,7 @@ packages: '@pulumi/aws': 4.0.0 '@pulumi/docker': 3.6.1 '@pulumi/pulumi': 3.0.0 - '@types/aws-lambda': 8.10.137 + '@types/aws-lambda': 8.10.140 mime: 2.6.0 dev: false @@ -150,14 +151,14 @@ packages: resolution: {integrity: sha512-s9pwbdFrMU8vt4F5aIf8cpnDmHSM5Pn5V2Y7T7m0R14pfxTjCqt5ZAuEdKys0SgL+DxDp5L4Kz/53SXC6MFEEw==} engines: {node: '>=8.13.0 || >=10.10.0'} dependencies: - '@grpc/grpc-js': 1.10.6 + '@grpc/grpc-js': 1.10.9 '@logdna/tail-file': 2.2.0 '@pulumi/query': 0.3.0 google-protobuf: 3.21.2 js-yaml: 3.14.1 minimist: 1.2.8 normalize-package-data: 2.5.0 - protobufjs: 7.2.6 + protobufjs: 7.3.2 read-package-tree: 5.3.1 require-from-string: 2.0.2 semver: 6.3.1 @@ -172,8 +173,8 @@ packages: resolution: {integrity: sha512-xfo+yLRM2zVjVEA4p23IjQWzyWl1ZhWOGobsBqRpIarzLvwNH/RAGaoehdxlhx4X92302DrpdIFgTICMN4P38w==} dev: false - /@types/aws-lambda@8.10.137: - resolution: {integrity: sha512-YNFwzVarXAOXkjuFxONyDw1vgRNzyH8AuyN19s0bM+ChSu/bzxb5XPxYFLXoqoM+tvgzwR3k7fXcEOW125yJxg==} + /@types/aws-lambda@8.10.140: + resolution: {integrity: sha512-4Dh3dk2TUcbdfHrX0Al90mNGJDvA9NBiTQPzbrjGi/dLxzKCGOYgT8YQ47jUKNFALkAJAadifq0pzyjIUlhVhg==} dev: false /@types/node@14.14.41: @@ -252,8 +253,8 @@ packages: possible-typed-array-names: 1.0.0 dev: false - /aws-sdk@2.1597.0: - resolution: {integrity: sha512-YvApP9p5a5TD870mvQRrcUyJz3nKFrtlnDLaA4yrmAaidMDGzdNJ+AZlW0+onRCB4llzKD4Hos56zea0ulR+zQ==} + /aws-sdk@2.1644.0: + resolution: {integrity: sha512-9DkVmQWrL766uxeag6wLbXNahwodrIvxZlh1JZ6bzMoNXLCx38GhQfdtLhCoqK7+k0c5QIzHhjPqyqwPM4ohJw==} engines: {node: '>= 10.0.0'} requiresBuild: true dependencies: @@ -421,7 +422,7 @@ packages: function.prototype.name: 1.1.6 get-intrinsic: 1.2.4 get-symbol-description: 1.0.2 - globalthis: 1.0.3 + globalthis: 1.0.4 gopd: 1.0.1 has-property-descriptors: 1.0.2 has-proto: 1.0.3 @@ -566,6 +567,7 @@ 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 @@ -575,11 +577,12 @@ packages: path-is-absolute: 1.0.1 dev: false - /globalthis@1.0.3: - resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + /globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} dependencies: define-properties: 1.2.1 + gopd: 1.0.1 dev: false /google-protobuf@3.21.2: @@ -640,6 +643,7 @@ 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 @@ -904,8 +908,8 @@ packages: engines: {node: '>= 0.4'} dev: false - /protobufjs@7.2.6: - resolution: {integrity: sha512-dgJaEDDL6x8ASUZ1YqWciTRrdOuYNzoOf27oHNfdyvKqHr5i0FV7FSLU+aIeFjyFgVxrpTOtQUi0BLLBymZaBw==} + /protobufjs@7.3.2: + resolution: {integrity: sha512-RXyHaACeqXeqAKGLDl68rQKbmObRsTIn4TYVUUug1KfS47YWCo5MacGITEryugIgZqORCvJWEk4l449POg5Txg==} engines: {node: '>=12.0.0'} requiresBuild: true dependencies: @@ -939,6 +943,7 @@ packages: /read-package-json@2.1.2: resolution: {integrity: sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA==} + deprecated: This package is no longer supported. Please use @npmcli/package-json instead. dependencies: glob: 7.2.3 json-parse-even-better-errors: 2.3.1 @@ -1099,7 +1104,7 @@ packages: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} dependencies: spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.17 + spdx-license-ids: 3.0.18 dev: false /spdx-exceptions@2.5.0: @@ -1110,11 +1115,11 @@ packages: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} dependencies: spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.17 + spdx-license-ids: 3.0.18 dev: false - /spdx-license-ids@3.0.17: - resolution: {integrity: sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==} + /spdx-license-ids@3.0.18: + resolution: {integrity: sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==} dev: false /split2@3.2.2: diff --git a/infrastructure/data/package.json b/infrastructure/data/package.json index ca42fbf15d..ddb789481e 100644 --- a/infrastructure/data/package.json +++ b/infrastructure/data/package.json @@ -9,7 +9,8 @@ }, "pnpm": { "overrides": { - "protobufjs@>=7.0.0 <7.2.5": ">=7.2.5" + "protobufjs@>=7.0.0 <7.2.5": ">=7.2.5", + "@grpc/grpc-js@>=1.10.0 <1.10.9": ">=1.10.9" } } } diff --git a/infrastructure/data/pnpm-lock.yaml b/infrastructure/data/pnpm-lock.yaml index c058cbd09b..3a4e684bc7 100644 --- a/infrastructure/data/pnpm-lock.yaml +++ b/infrastructure/data/pnpm-lock.yaml @@ -6,6 +6,7 @@ settings: overrides: protobufjs@>=7.0.0 <7.2.5: '>=7.2.5' + '@grpc/grpc-js@>=1.10.0 <1.10.9': '>=1.10.9' dependencies: '@pulumi/aws': @@ -25,22 +26,22 @@ devDependencies: packages: - /@grpc/grpc-js@1.10.6: - resolution: {integrity: sha512-xP58G7wDQ4TCmN/cMUHh00DS7SRDv/+lC+xFLrTkMIN8h55X5NhZMLYbvy7dSELP15qlI6hPhNCRWVMtZMwqLA==} + /@grpc/grpc-js@1.10.9: + resolution: {integrity: sha512-5tcgUctCG0qoNyfChZifz2tJqbRbXVO9J7X6duFcOjY3HUNCxg5D0ZCK7EP9vIcZ0zRpLU9bWkyCqVCLZ46IbQ==} engines: {node: '>=12.10.0'} dependencies: - '@grpc/proto-loader': 0.7.12 + '@grpc/proto-loader': 0.7.13 '@js-sdsl/ordered-map': 4.4.2 dev: false - /@grpc/proto-loader@0.7.12: - resolution: {integrity: sha512-DCVwMxqYzpUCiDMl7hQ384FqP4T3DbNpXU8pt681l3UWCip1WUiD5JrkImUwCB9a7f2cq4CUTmi5r/xIMRPY1Q==} + /@grpc/proto-loader@0.7.13: + resolution: {integrity: sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==} engines: {node: '>=6'} hasBin: true dependencies: lodash.camelcase: 4.3.0 long: 5.2.3 - protobufjs: 7.2.6 + protobufjs: 7.3.2 yargs: 17.7.2 dev: false @@ -58,135 +59,135 @@ packages: engines: {node: '>=14'} deprecated: Please use @opentelemetry/api >= 1.3.0 dependencies: - '@opentelemetry/api': 1.8.0 + '@opentelemetry/api': 1.9.0 dev: false - /@opentelemetry/api@1.8.0: - resolution: {integrity: sha512-I/s6F7yKUDdtMsoBWXJe8Qz40Tui5vsuKCWJEWVL+5q9sSWRzzx6v2KeNsOBEwd94j0eWkpWCH4yB6rZg9Mf0w==} + /@opentelemetry/api@1.9.0: + resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} engines: {node: '>=8.0.0'} dev: false - /@opentelemetry/context-async-hooks@1.23.0(@opentelemetry/api@1.8.0): - resolution: {integrity: sha512-wazGJZDRevibOJ+VgyrT+9+8sybZAxpZx2G7vy30OAtk92OpZCg7HgNxT11NUx0VBDWcRx1dOatMYGOVplQ7QA==} + /@opentelemetry/context-async-hooks@1.25.0(@opentelemetry/api@1.9.0): + resolution: {integrity: sha512-sBW313mnMyFg0cp/40BRzrZBWG+581s2j5gIsa5fgGadswyILk4mNFATsqrCOpAx945RDuZ2B7ThQLgor9OpfA==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.9.0' + '@opentelemetry/api': '>=1.0.0 <1.10.0' dependencies: - '@opentelemetry/api': 1.8.0 + '@opentelemetry/api': 1.9.0 dev: false - /@opentelemetry/core@1.23.0(@opentelemetry/api@1.8.0): - resolution: {integrity: sha512-hdQ/a9TMzMQF/BO8Cz1juA43/L5YGtCSiKoOHmrTEf7VMDAZgy8ucpWx3eQTnQ3gBloRcWtzvcrMZABC3PTSKQ==} + /@opentelemetry/core@1.25.0(@opentelemetry/api@1.9.0): + resolution: {integrity: sha512-n0B3s8rrqGrasTgNkXLKXzN0fXo+6IYP7M5b7AMsrZM33f/y6DS6kJ0Btd7SespASWq8bgL3taLo0oe0vB52IQ==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.9.0' + '@opentelemetry/api': '>=1.0.0 <1.10.0' dependencies: - '@opentelemetry/api': 1.8.0 - '@opentelemetry/semantic-conventions': 1.23.0 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/semantic-conventions': 1.25.0 dev: false - /@opentelemetry/exporter-zipkin@1.23.0(@opentelemetry/api@1.8.0): - resolution: {integrity: sha512-2LOGvNUGONuIcWhynFaJorVyqv03uZkURScciLmOxvBf2lWTNPEj77br1dCpShIWBM+YlrH7Tc+JXAs+GC7DqA==} + /@opentelemetry/exporter-zipkin@1.25.0(@opentelemetry/api@1.9.0): + resolution: {integrity: sha512-nnhY0e5DHg8BfUSNCQZoGZnGeqz+zMTeEUOh1dfgtaXmF99uM0QPuTa1i2lH+eZqebP8w1WDWZlewu9FUlHqIg==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.0.0 dependencies: - '@opentelemetry/api': 1.8.0 - '@opentelemetry/core': 1.23.0(@opentelemetry/api@1.8.0) - '@opentelemetry/resources': 1.23.0(@opentelemetry/api@1.8.0) - '@opentelemetry/sdk-trace-base': 1.23.0(@opentelemetry/api@1.8.0) - '@opentelemetry/semantic-conventions': 1.23.0 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.25.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.25.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.25.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.25.0 dev: false - /@opentelemetry/instrumentation-grpc@0.32.0(@opentelemetry/api@1.8.0): + /@opentelemetry/instrumentation-grpc@0.32.0(@opentelemetry/api@1.9.0): resolution: {integrity: sha512-Az6wdkPx/Mi26lT9LKFV6GhCA9prwQFPz5eCNSExTnSP49YhQ7XCjzPd2POPeLKt84ICitrBMdE1mj0zbPdLAQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.0.0 dependencies: - '@opentelemetry/api': 1.8.0 + '@opentelemetry/api': 1.9.0 '@opentelemetry/api-metrics': 0.32.0 - '@opentelemetry/instrumentation': 0.32.0(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation': 0.32.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.6.0 transitivePeerDependencies: - supports-color dev: false - /@opentelemetry/instrumentation@0.32.0(@opentelemetry/api@1.8.0): + /@opentelemetry/instrumentation@0.32.0(@opentelemetry/api@1.9.0): resolution: {integrity: sha512-y6ADjHpkUz/v1nkyyYjsQa/zorhX+0qVGpFvXMcbjU4sHnBnC02c6wcc93sIgZfiQClIWo45TGku1KQxJ5UUbQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.0.0 dependencies: - '@opentelemetry/api': 1.8.0 + '@opentelemetry/api': 1.9.0 '@opentelemetry/api-metrics': 0.32.0 require-in-the-middle: 5.2.0 - semver: 7.6.0 + semver: 7.6.2 shimmer: 1.2.1 transitivePeerDependencies: - supports-color dev: false - /@opentelemetry/propagator-b3@1.23.0(@opentelemetry/api@1.8.0): - resolution: {integrity: sha512-cZ6rl8y2bdxYQ4e+zP2CQ+QmuPebaLBLO1skjFpj3eEu7zar+6hBzUP3llMOUupkQeQSwXz+4c8dZ26OhYfG/g==} + /@opentelemetry/propagator-b3@1.25.0(@opentelemetry/api@1.9.0): + resolution: {integrity: sha512-/A+1Tbnf0uwnP51OkoaQlrb9YILdHsoqIISna1MNXpZRzf42xm6LVLb49i+m/zlJoW1e8P4ekcrditR5pfmwog==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.9.0' + '@opentelemetry/api': '>=1.0.0 <1.10.0' dependencies: - '@opentelemetry/api': 1.8.0 - '@opentelemetry/core': 1.23.0(@opentelemetry/api@1.8.0) + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.25.0(@opentelemetry/api@1.9.0) dev: false - /@opentelemetry/propagator-jaeger@1.23.0(@opentelemetry/api@1.8.0): - resolution: {integrity: sha512-6iArixfgIl3ZgzeltQ5jyiKbjZygM+MbM84pXi1HL0Qs4x4Ck5rM6wEtjhZffFnlDMWEkEqrnM0xF6bTfbiMAQ==} + /@opentelemetry/propagator-jaeger@1.25.0(@opentelemetry/api@1.9.0): + resolution: {integrity: sha512-uwA5xqaPISXeX+YutqbjmzENnCGCvrIXlqIXP5gRoA5N6S3W28p+ExL77TugMKHN5gXklapF67jDfz7lq5ETzQ==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.9.0' + '@opentelemetry/api': '>=1.0.0 <1.10.0' dependencies: - '@opentelemetry/api': 1.8.0 - '@opentelemetry/core': 1.23.0(@opentelemetry/api@1.8.0) + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.25.0(@opentelemetry/api@1.9.0) dev: false - /@opentelemetry/resources@1.23.0(@opentelemetry/api@1.8.0): - resolution: {integrity: sha512-iPRLfVfcEQynYGo7e4Di+ti+YQTAY0h5mQEUJcHlU9JOqpb4x965O6PZ+wMcwYVY63G96KtdS86YCM1BF1vQZg==} + /@opentelemetry/resources@1.25.0(@opentelemetry/api@1.9.0): + resolution: {integrity: sha512-iHjydPMYJ+Li1auveJCq2rp5U2h6Mhq8BidiyE0jfVlDTFyR1ny8AfJHfmFzJ/RAM8vT8L7T21kcmGybxZC7lQ==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.9.0' + '@opentelemetry/api': '>=1.0.0 <1.10.0' dependencies: - '@opentelemetry/api': 1.8.0 - '@opentelemetry/core': 1.23.0(@opentelemetry/api@1.8.0) - '@opentelemetry/semantic-conventions': 1.23.0 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.25.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.25.0 dev: false - /@opentelemetry/sdk-trace-base@1.23.0(@opentelemetry/api@1.8.0): - resolution: {integrity: sha512-PzBmZM8hBomUqvCddF/5Olyyviayka44O5nDWq673np3ctnvwMOvNrsUORZjKja1zJbwEuD9niAGbnVrz3jwRQ==} + /@opentelemetry/sdk-trace-base@1.25.0(@opentelemetry/api@1.9.0): + resolution: {integrity: sha512-6+g2fiRQUG39guCsKVeY8ToeuUf3YUnPkN6DXRA1qDmFLprlLvZm9cS6+chgbW70cZJ406FTtSCDnJwxDC5sGQ==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.9.0' + '@opentelemetry/api': '>=1.0.0 <1.10.0' dependencies: - '@opentelemetry/api': 1.8.0 - '@opentelemetry/core': 1.23.0(@opentelemetry/api@1.8.0) - '@opentelemetry/resources': 1.23.0(@opentelemetry/api@1.8.0) - '@opentelemetry/semantic-conventions': 1.23.0 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.25.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.25.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.25.0 dev: false - /@opentelemetry/sdk-trace-node@1.23.0(@opentelemetry/api@1.8.0): - resolution: {integrity: sha512-dwnin5Go2r6VzJZkVc9JBPupssWp7j2EFto+S7qRkwQ00WDykWeq3x2Skk7I1Jr448FeBSvGCQVPgV5e6s6O3w==} + /@opentelemetry/sdk-trace-node@1.25.0(@opentelemetry/api@1.9.0): + resolution: {integrity: sha512-sYdZmNCkqthPpjwCxAJk5aQNLxCOQjT1u3JMGvO6rb3Ic8uFdnzXavP13Md9uYPcZBo+KxetyDhCf0x8wJGRng==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.9.0' + '@opentelemetry/api': '>=1.0.0 <1.10.0' dependencies: - '@opentelemetry/api': 1.8.0 - '@opentelemetry/context-async-hooks': 1.23.0(@opentelemetry/api@1.8.0) - '@opentelemetry/core': 1.23.0(@opentelemetry/api@1.8.0) - '@opentelemetry/propagator-b3': 1.23.0(@opentelemetry/api@1.8.0) - '@opentelemetry/propagator-jaeger': 1.23.0(@opentelemetry/api@1.8.0) - '@opentelemetry/sdk-trace-base': 1.23.0(@opentelemetry/api@1.8.0) - semver: 7.6.0 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/context-async-hooks': 1.25.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.25.0(@opentelemetry/api@1.9.0) + '@opentelemetry/propagator-b3': 1.25.0(@opentelemetry/api@1.9.0) + '@opentelemetry/propagator-jaeger': 1.25.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.25.0(@opentelemetry/api@1.9.0) + semver: 7.6.2 dev: false - /@opentelemetry/semantic-conventions@1.23.0: - resolution: {integrity: sha512-MiqFvfOzfR31t8cc74CTP1OZfz7MbqpAnLCra8NqQoaHJX6ncIRTdYOQYBDQ2uFISDq0WY8Y9dDTWvsgzzBYRg==} + /@opentelemetry/semantic-conventions@1.25.0: + resolution: {integrity: sha512-M+kkXKRAIAiAP6qYyesfrC5TOmDpDVtsxuGfPcqd9B/iBrac+E14jYwrgm0yZBUIbIP2OnqC3j+UgkXLm1vxUQ==} engines: {node: '>=14'} dev: false @@ -243,7 +244,7 @@ packages: requiresBuild: true dependencies: '@pulumi/pulumi': 3.74.0 - aws-sdk: 2.1597.0 + aws-sdk: 2.1644.0 builtin-modules: 3.0.0 mime: 2.6.0 read-package-tree: 5.3.1 @@ -261,7 +262,7 @@ packages: '@pulumi/aws': 4.0.0 '@pulumi/docker': 3.6.1 '@pulumi/pulumi': 3.74.0 - '@types/aws-lambda': 8.10.137 + '@types/aws-lambda': 8.10.140 mime: 2.6.0 transitivePeerDependencies: - supports-color @@ -281,15 +282,15 @@ packages: resolution: {integrity: sha512-VKHCH84aiD6FTosr/SmRnp/te1JvpunpPToIG69IlTDMAiDFeRFu/mXUenc1uicWyxG/pKav72f+eKGNdyZqjg==} engines: {node: '>=8.13.0 || >=10.10.0'} dependencies: - '@grpc/grpc-js': 1.10.6 + '@grpc/grpc-js': 1.10.9 '@logdna/tail-file': 2.2.0 - '@opentelemetry/api': 1.8.0 - '@opentelemetry/exporter-zipkin': 1.23.0(@opentelemetry/api@1.8.0) - '@opentelemetry/instrumentation-grpc': 0.32.0(@opentelemetry/api@1.8.0) - '@opentelemetry/resources': 1.23.0(@opentelemetry/api@1.8.0) - '@opentelemetry/sdk-trace-base': 1.23.0(@opentelemetry/api@1.8.0) - '@opentelemetry/sdk-trace-node': 1.23.0(@opentelemetry/api@1.8.0) - '@opentelemetry/semantic-conventions': 1.23.0 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/exporter-zipkin': 1.25.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-grpc': 0.32.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.25.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.25.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-node': 1.25.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.25.0 '@pulumi/query': 0.3.0 execa: 5.1.1 google-protobuf: 3.21.2 @@ -300,7 +301,7 @@ packages: pkg-dir: 7.0.0 read-package-tree: 5.3.1 require-from-string: 2.0.2 - semver: 7.6.0 + semver: 7.6.2 source-map-support: 0.5.21 ts-node: 7.0.1 typescript: 3.8.3 @@ -313,8 +314,8 @@ packages: resolution: {integrity: sha512-xfo+yLRM2zVjVEA4p23IjQWzyWl1ZhWOGobsBqRpIarzLvwNH/RAGaoehdxlhx4X92302DrpdIFgTICMN4P38w==} dev: false - /@types/aws-lambda@8.10.137: - resolution: {integrity: sha512-YNFwzVarXAOXkjuFxONyDw1vgRNzyH8AuyN19s0bM+ChSu/bzxb5XPxYFLXoqoM+tvgzwR3k7fXcEOW125yJxg==} + /@types/aws-lambda@8.10.140: + resolution: {integrity: sha512-4Dh3dk2TUcbdfHrX0Al90mNGJDvA9NBiTQPzbrjGi/dLxzKCGOYgT8YQ47jUKNFALkAJAadifq0pzyjIUlhVhg==} dev: false /@types/node@14.14.41: @@ -389,8 +390,8 @@ packages: possible-typed-array-names: 1.0.0 dev: false - /aws-sdk@2.1597.0: - resolution: {integrity: sha512-YvApP9p5a5TD870mvQRrcUyJz3nKFrtlnDLaA4yrmAaidMDGzdNJ+AZlW0+onRCB4llzKD4Hos56zea0ulR+zQ==} + /aws-sdk@2.1644.0: + resolution: {integrity: sha512-9DkVmQWrL766uxeag6wLbXNahwodrIvxZlh1JZ6bzMoNXLCx38GhQfdtLhCoqK7+k0c5QIzHhjPqyqwPM4ohJw==} engines: {node: '>= 10.0.0'} requiresBuild: true dependencies: @@ -509,8 +510,8 @@ packages: is-data-view: 1.0.1 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: '*' @@ -579,7 +580,7 @@ packages: function.prototype.name: 1.1.6 get-intrinsic: 1.2.4 get-symbol-description: 1.0.2 - globalthis: 1.0.3 + globalthis: 1.0.4 gopd: 1.0.1 has-property-descriptors: 1.0.2 has-proto: 1.0.3 @@ -752,6 +753,7 @@ 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 @@ -761,11 +763,12 @@ packages: path-is-absolute: 1.0.1 dev: false - /globalthis@1.0.3: - resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + /globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} dependencies: define-properties: 1.2.1 + gopd: 1.0.1 dev: false /google-protobuf@3.21.2: @@ -838,6 +841,7 @@ 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 @@ -1097,7 +1101,7 @@ packages: dependencies: hosted-git-info: 4.1.0 is-core-module: 2.13.1 - semver: 7.6.0 + semver: 7.6.2 validate-npm-package-license: 3.0.4 dev: false @@ -1202,8 +1206,8 @@ packages: engines: {node: '>= 0.4'} dev: false - /protobufjs@7.2.6: - resolution: {integrity: sha512-dgJaEDDL6x8ASUZ1YqWciTRrdOuYNzoOf27oHNfdyvKqHr5i0FV7FSLU+aIeFjyFgVxrpTOtQUi0BLLBymZaBw==} + /protobufjs@7.3.2: + resolution: {integrity: sha512-RXyHaACeqXeqAKGLDl68rQKbmObRsTIn4TYVUUug1KfS47YWCo5MacGITEryugIgZqORCvJWEk4l449POg5Txg==} engines: {node: '>=12.0.0'} requiresBuild: true dependencies: @@ -1233,6 +1237,7 @@ packages: /read-package-json@2.1.2: resolution: {integrity: sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA==} + deprecated: This package is no longer supported. Please use @npmcli/package-json instead. dependencies: glob: 7.2.3 json-parse-even-better-errors: 2.3.1 @@ -1283,7 +1288,7 @@ packages: resolution: {integrity: sha512-efCx3b+0Z69/LGJmm9Yvi4cqEdxnoGnxYxGxBghkkTTFeXRtTCmmhO0AnAfHz59k957uTSuy8WaHqOs8wbYUWg==} engines: {node: '>=6'} dependencies: - debug: 4.3.4 + debug: 4.3.5 module-details-from-path: 1.0.3 resolve: 1.22.8 transitivePeerDependencies: @@ -1327,12 +1332,10 @@ packages: hasBin: true dev: false - /semver@7.6.0: - resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} + /semver@7.6.2: + resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} engines: {node: '>=10'} hasBin: true - dependencies: - lru-cache: 6.0.0 dev: false /set-function-length@1.2.2: @@ -1403,7 +1406,7 @@ packages: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} dependencies: spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.17 + spdx-license-ids: 3.0.18 dev: false /spdx-exceptions@2.5.0: @@ -1414,11 +1417,11 @@ packages: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} dependencies: spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.17 + spdx-license-ids: 3.0.18 dev: false - /spdx-license-ids@3.0.17: - resolution: {integrity: sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==} + /spdx-license-ids@3.0.18: + resolution: {integrity: sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==} dev: false /sprintf-js@1.0.3: diff --git a/infrastructure/networking/package.json b/infrastructure/networking/package.json index ca42fbf15d..ddb789481e 100644 --- a/infrastructure/networking/package.json +++ b/infrastructure/networking/package.json @@ -9,7 +9,8 @@ }, "pnpm": { "overrides": { - "protobufjs@>=7.0.0 <7.2.5": ">=7.2.5" + "protobufjs@>=7.0.0 <7.2.5": ">=7.2.5", + "@grpc/grpc-js@>=1.10.0 <1.10.9": ">=1.10.9" } } } diff --git a/infrastructure/networking/pnpm-lock.yaml b/infrastructure/networking/pnpm-lock.yaml index c058cbd09b..3a4e684bc7 100644 --- a/infrastructure/networking/pnpm-lock.yaml +++ b/infrastructure/networking/pnpm-lock.yaml @@ -6,6 +6,7 @@ settings: overrides: protobufjs@>=7.0.0 <7.2.5: '>=7.2.5' + '@grpc/grpc-js@>=1.10.0 <1.10.9': '>=1.10.9' dependencies: '@pulumi/aws': @@ -25,22 +26,22 @@ devDependencies: packages: - /@grpc/grpc-js@1.10.6: - resolution: {integrity: sha512-xP58G7wDQ4TCmN/cMUHh00DS7SRDv/+lC+xFLrTkMIN8h55X5NhZMLYbvy7dSELP15qlI6hPhNCRWVMtZMwqLA==} + /@grpc/grpc-js@1.10.9: + resolution: {integrity: sha512-5tcgUctCG0qoNyfChZifz2tJqbRbXVO9J7X6duFcOjY3HUNCxg5D0ZCK7EP9vIcZ0zRpLU9bWkyCqVCLZ46IbQ==} engines: {node: '>=12.10.0'} dependencies: - '@grpc/proto-loader': 0.7.12 + '@grpc/proto-loader': 0.7.13 '@js-sdsl/ordered-map': 4.4.2 dev: false - /@grpc/proto-loader@0.7.12: - resolution: {integrity: sha512-DCVwMxqYzpUCiDMl7hQ384FqP4T3DbNpXU8pt681l3UWCip1WUiD5JrkImUwCB9a7f2cq4CUTmi5r/xIMRPY1Q==} + /@grpc/proto-loader@0.7.13: + resolution: {integrity: sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==} engines: {node: '>=6'} hasBin: true dependencies: lodash.camelcase: 4.3.0 long: 5.2.3 - protobufjs: 7.2.6 + protobufjs: 7.3.2 yargs: 17.7.2 dev: false @@ -58,135 +59,135 @@ packages: engines: {node: '>=14'} deprecated: Please use @opentelemetry/api >= 1.3.0 dependencies: - '@opentelemetry/api': 1.8.0 + '@opentelemetry/api': 1.9.0 dev: false - /@opentelemetry/api@1.8.0: - resolution: {integrity: sha512-I/s6F7yKUDdtMsoBWXJe8Qz40Tui5vsuKCWJEWVL+5q9sSWRzzx6v2KeNsOBEwd94j0eWkpWCH4yB6rZg9Mf0w==} + /@opentelemetry/api@1.9.0: + resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} engines: {node: '>=8.0.0'} dev: false - /@opentelemetry/context-async-hooks@1.23.0(@opentelemetry/api@1.8.0): - resolution: {integrity: sha512-wazGJZDRevibOJ+VgyrT+9+8sybZAxpZx2G7vy30OAtk92OpZCg7HgNxT11NUx0VBDWcRx1dOatMYGOVplQ7QA==} + /@opentelemetry/context-async-hooks@1.25.0(@opentelemetry/api@1.9.0): + resolution: {integrity: sha512-sBW313mnMyFg0cp/40BRzrZBWG+581s2j5gIsa5fgGadswyILk4mNFATsqrCOpAx945RDuZ2B7ThQLgor9OpfA==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.9.0' + '@opentelemetry/api': '>=1.0.0 <1.10.0' dependencies: - '@opentelemetry/api': 1.8.0 + '@opentelemetry/api': 1.9.0 dev: false - /@opentelemetry/core@1.23.0(@opentelemetry/api@1.8.0): - resolution: {integrity: sha512-hdQ/a9TMzMQF/BO8Cz1juA43/L5YGtCSiKoOHmrTEf7VMDAZgy8ucpWx3eQTnQ3gBloRcWtzvcrMZABC3PTSKQ==} + /@opentelemetry/core@1.25.0(@opentelemetry/api@1.9.0): + resolution: {integrity: sha512-n0B3s8rrqGrasTgNkXLKXzN0fXo+6IYP7M5b7AMsrZM33f/y6DS6kJ0Btd7SespASWq8bgL3taLo0oe0vB52IQ==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.9.0' + '@opentelemetry/api': '>=1.0.0 <1.10.0' dependencies: - '@opentelemetry/api': 1.8.0 - '@opentelemetry/semantic-conventions': 1.23.0 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/semantic-conventions': 1.25.0 dev: false - /@opentelemetry/exporter-zipkin@1.23.0(@opentelemetry/api@1.8.0): - resolution: {integrity: sha512-2LOGvNUGONuIcWhynFaJorVyqv03uZkURScciLmOxvBf2lWTNPEj77br1dCpShIWBM+YlrH7Tc+JXAs+GC7DqA==} + /@opentelemetry/exporter-zipkin@1.25.0(@opentelemetry/api@1.9.0): + resolution: {integrity: sha512-nnhY0e5DHg8BfUSNCQZoGZnGeqz+zMTeEUOh1dfgtaXmF99uM0QPuTa1i2lH+eZqebP8w1WDWZlewu9FUlHqIg==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.0.0 dependencies: - '@opentelemetry/api': 1.8.0 - '@opentelemetry/core': 1.23.0(@opentelemetry/api@1.8.0) - '@opentelemetry/resources': 1.23.0(@opentelemetry/api@1.8.0) - '@opentelemetry/sdk-trace-base': 1.23.0(@opentelemetry/api@1.8.0) - '@opentelemetry/semantic-conventions': 1.23.0 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.25.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.25.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.25.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.25.0 dev: false - /@opentelemetry/instrumentation-grpc@0.32.0(@opentelemetry/api@1.8.0): + /@opentelemetry/instrumentation-grpc@0.32.0(@opentelemetry/api@1.9.0): resolution: {integrity: sha512-Az6wdkPx/Mi26lT9LKFV6GhCA9prwQFPz5eCNSExTnSP49YhQ7XCjzPd2POPeLKt84ICitrBMdE1mj0zbPdLAQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.0.0 dependencies: - '@opentelemetry/api': 1.8.0 + '@opentelemetry/api': 1.9.0 '@opentelemetry/api-metrics': 0.32.0 - '@opentelemetry/instrumentation': 0.32.0(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation': 0.32.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.6.0 transitivePeerDependencies: - supports-color dev: false - /@opentelemetry/instrumentation@0.32.0(@opentelemetry/api@1.8.0): + /@opentelemetry/instrumentation@0.32.0(@opentelemetry/api@1.9.0): resolution: {integrity: sha512-y6ADjHpkUz/v1nkyyYjsQa/zorhX+0qVGpFvXMcbjU4sHnBnC02c6wcc93sIgZfiQClIWo45TGku1KQxJ5UUbQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.0.0 dependencies: - '@opentelemetry/api': 1.8.0 + '@opentelemetry/api': 1.9.0 '@opentelemetry/api-metrics': 0.32.0 require-in-the-middle: 5.2.0 - semver: 7.6.0 + semver: 7.6.2 shimmer: 1.2.1 transitivePeerDependencies: - supports-color dev: false - /@opentelemetry/propagator-b3@1.23.0(@opentelemetry/api@1.8.0): - resolution: {integrity: sha512-cZ6rl8y2bdxYQ4e+zP2CQ+QmuPebaLBLO1skjFpj3eEu7zar+6hBzUP3llMOUupkQeQSwXz+4c8dZ26OhYfG/g==} + /@opentelemetry/propagator-b3@1.25.0(@opentelemetry/api@1.9.0): + resolution: {integrity: sha512-/A+1Tbnf0uwnP51OkoaQlrb9YILdHsoqIISna1MNXpZRzf42xm6LVLb49i+m/zlJoW1e8P4ekcrditR5pfmwog==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.9.0' + '@opentelemetry/api': '>=1.0.0 <1.10.0' dependencies: - '@opentelemetry/api': 1.8.0 - '@opentelemetry/core': 1.23.0(@opentelemetry/api@1.8.0) + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.25.0(@opentelemetry/api@1.9.0) dev: false - /@opentelemetry/propagator-jaeger@1.23.0(@opentelemetry/api@1.8.0): - resolution: {integrity: sha512-6iArixfgIl3ZgzeltQ5jyiKbjZygM+MbM84pXi1HL0Qs4x4Ck5rM6wEtjhZffFnlDMWEkEqrnM0xF6bTfbiMAQ==} + /@opentelemetry/propagator-jaeger@1.25.0(@opentelemetry/api@1.9.0): + resolution: {integrity: sha512-uwA5xqaPISXeX+YutqbjmzENnCGCvrIXlqIXP5gRoA5N6S3W28p+ExL77TugMKHN5gXklapF67jDfz7lq5ETzQ==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.9.0' + '@opentelemetry/api': '>=1.0.0 <1.10.0' dependencies: - '@opentelemetry/api': 1.8.0 - '@opentelemetry/core': 1.23.0(@opentelemetry/api@1.8.0) + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.25.0(@opentelemetry/api@1.9.0) dev: false - /@opentelemetry/resources@1.23.0(@opentelemetry/api@1.8.0): - resolution: {integrity: sha512-iPRLfVfcEQynYGo7e4Di+ti+YQTAY0h5mQEUJcHlU9JOqpb4x965O6PZ+wMcwYVY63G96KtdS86YCM1BF1vQZg==} + /@opentelemetry/resources@1.25.0(@opentelemetry/api@1.9.0): + resolution: {integrity: sha512-iHjydPMYJ+Li1auveJCq2rp5U2h6Mhq8BidiyE0jfVlDTFyR1ny8AfJHfmFzJ/RAM8vT8L7T21kcmGybxZC7lQ==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.9.0' + '@opentelemetry/api': '>=1.0.0 <1.10.0' dependencies: - '@opentelemetry/api': 1.8.0 - '@opentelemetry/core': 1.23.0(@opentelemetry/api@1.8.0) - '@opentelemetry/semantic-conventions': 1.23.0 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.25.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.25.0 dev: false - /@opentelemetry/sdk-trace-base@1.23.0(@opentelemetry/api@1.8.0): - resolution: {integrity: sha512-PzBmZM8hBomUqvCddF/5Olyyviayka44O5nDWq673np3ctnvwMOvNrsUORZjKja1zJbwEuD9niAGbnVrz3jwRQ==} + /@opentelemetry/sdk-trace-base@1.25.0(@opentelemetry/api@1.9.0): + resolution: {integrity: sha512-6+g2fiRQUG39guCsKVeY8ToeuUf3YUnPkN6DXRA1qDmFLprlLvZm9cS6+chgbW70cZJ406FTtSCDnJwxDC5sGQ==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.9.0' + '@opentelemetry/api': '>=1.0.0 <1.10.0' dependencies: - '@opentelemetry/api': 1.8.0 - '@opentelemetry/core': 1.23.0(@opentelemetry/api@1.8.0) - '@opentelemetry/resources': 1.23.0(@opentelemetry/api@1.8.0) - '@opentelemetry/semantic-conventions': 1.23.0 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.25.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.25.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.25.0 dev: false - /@opentelemetry/sdk-trace-node@1.23.0(@opentelemetry/api@1.8.0): - resolution: {integrity: sha512-dwnin5Go2r6VzJZkVc9JBPupssWp7j2EFto+S7qRkwQ00WDykWeq3x2Skk7I1Jr448FeBSvGCQVPgV5e6s6O3w==} + /@opentelemetry/sdk-trace-node@1.25.0(@opentelemetry/api@1.9.0): + resolution: {integrity: sha512-sYdZmNCkqthPpjwCxAJk5aQNLxCOQjT1u3JMGvO6rb3Ic8uFdnzXavP13Md9uYPcZBo+KxetyDhCf0x8wJGRng==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.9.0' + '@opentelemetry/api': '>=1.0.0 <1.10.0' dependencies: - '@opentelemetry/api': 1.8.0 - '@opentelemetry/context-async-hooks': 1.23.0(@opentelemetry/api@1.8.0) - '@opentelemetry/core': 1.23.0(@opentelemetry/api@1.8.0) - '@opentelemetry/propagator-b3': 1.23.0(@opentelemetry/api@1.8.0) - '@opentelemetry/propagator-jaeger': 1.23.0(@opentelemetry/api@1.8.0) - '@opentelemetry/sdk-trace-base': 1.23.0(@opentelemetry/api@1.8.0) - semver: 7.6.0 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/context-async-hooks': 1.25.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.25.0(@opentelemetry/api@1.9.0) + '@opentelemetry/propagator-b3': 1.25.0(@opentelemetry/api@1.9.0) + '@opentelemetry/propagator-jaeger': 1.25.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.25.0(@opentelemetry/api@1.9.0) + semver: 7.6.2 dev: false - /@opentelemetry/semantic-conventions@1.23.0: - resolution: {integrity: sha512-MiqFvfOzfR31t8cc74CTP1OZfz7MbqpAnLCra8NqQoaHJX6ncIRTdYOQYBDQ2uFISDq0WY8Y9dDTWvsgzzBYRg==} + /@opentelemetry/semantic-conventions@1.25.0: + resolution: {integrity: sha512-M+kkXKRAIAiAP6qYyesfrC5TOmDpDVtsxuGfPcqd9B/iBrac+E14jYwrgm0yZBUIbIP2OnqC3j+UgkXLm1vxUQ==} engines: {node: '>=14'} dev: false @@ -243,7 +244,7 @@ packages: requiresBuild: true dependencies: '@pulumi/pulumi': 3.74.0 - aws-sdk: 2.1597.0 + aws-sdk: 2.1644.0 builtin-modules: 3.0.0 mime: 2.6.0 read-package-tree: 5.3.1 @@ -261,7 +262,7 @@ packages: '@pulumi/aws': 4.0.0 '@pulumi/docker': 3.6.1 '@pulumi/pulumi': 3.74.0 - '@types/aws-lambda': 8.10.137 + '@types/aws-lambda': 8.10.140 mime: 2.6.0 transitivePeerDependencies: - supports-color @@ -281,15 +282,15 @@ packages: resolution: {integrity: sha512-VKHCH84aiD6FTosr/SmRnp/te1JvpunpPToIG69IlTDMAiDFeRFu/mXUenc1uicWyxG/pKav72f+eKGNdyZqjg==} engines: {node: '>=8.13.0 || >=10.10.0'} dependencies: - '@grpc/grpc-js': 1.10.6 + '@grpc/grpc-js': 1.10.9 '@logdna/tail-file': 2.2.0 - '@opentelemetry/api': 1.8.0 - '@opentelemetry/exporter-zipkin': 1.23.0(@opentelemetry/api@1.8.0) - '@opentelemetry/instrumentation-grpc': 0.32.0(@opentelemetry/api@1.8.0) - '@opentelemetry/resources': 1.23.0(@opentelemetry/api@1.8.0) - '@opentelemetry/sdk-trace-base': 1.23.0(@opentelemetry/api@1.8.0) - '@opentelemetry/sdk-trace-node': 1.23.0(@opentelemetry/api@1.8.0) - '@opentelemetry/semantic-conventions': 1.23.0 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/exporter-zipkin': 1.25.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-grpc': 0.32.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.25.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.25.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-node': 1.25.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.25.0 '@pulumi/query': 0.3.0 execa: 5.1.1 google-protobuf: 3.21.2 @@ -300,7 +301,7 @@ packages: pkg-dir: 7.0.0 read-package-tree: 5.3.1 require-from-string: 2.0.2 - semver: 7.6.0 + semver: 7.6.2 source-map-support: 0.5.21 ts-node: 7.0.1 typescript: 3.8.3 @@ -313,8 +314,8 @@ packages: resolution: {integrity: sha512-xfo+yLRM2zVjVEA4p23IjQWzyWl1ZhWOGobsBqRpIarzLvwNH/RAGaoehdxlhx4X92302DrpdIFgTICMN4P38w==} dev: false - /@types/aws-lambda@8.10.137: - resolution: {integrity: sha512-YNFwzVarXAOXkjuFxONyDw1vgRNzyH8AuyN19s0bM+ChSu/bzxb5XPxYFLXoqoM+tvgzwR3k7fXcEOW125yJxg==} + /@types/aws-lambda@8.10.140: + resolution: {integrity: sha512-4Dh3dk2TUcbdfHrX0Al90mNGJDvA9NBiTQPzbrjGi/dLxzKCGOYgT8YQ47jUKNFALkAJAadifq0pzyjIUlhVhg==} dev: false /@types/node@14.14.41: @@ -389,8 +390,8 @@ packages: possible-typed-array-names: 1.0.0 dev: false - /aws-sdk@2.1597.0: - resolution: {integrity: sha512-YvApP9p5a5TD870mvQRrcUyJz3nKFrtlnDLaA4yrmAaidMDGzdNJ+AZlW0+onRCB4llzKD4Hos56zea0ulR+zQ==} + /aws-sdk@2.1644.0: + resolution: {integrity: sha512-9DkVmQWrL766uxeag6wLbXNahwodrIvxZlh1JZ6bzMoNXLCx38GhQfdtLhCoqK7+k0c5QIzHhjPqyqwPM4ohJw==} engines: {node: '>= 10.0.0'} requiresBuild: true dependencies: @@ -509,8 +510,8 @@ packages: is-data-view: 1.0.1 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: '*' @@ -579,7 +580,7 @@ packages: function.prototype.name: 1.1.6 get-intrinsic: 1.2.4 get-symbol-description: 1.0.2 - globalthis: 1.0.3 + globalthis: 1.0.4 gopd: 1.0.1 has-property-descriptors: 1.0.2 has-proto: 1.0.3 @@ -752,6 +753,7 @@ 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 @@ -761,11 +763,12 @@ packages: path-is-absolute: 1.0.1 dev: false - /globalthis@1.0.3: - resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + /globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} dependencies: define-properties: 1.2.1 + gopd: 1.0.1 dev: false /google-protobuf@3.21.2: @@ -838,6 +841,7 @@ 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 @@ -1097,7 +1101,7 @@ packages: dependencies: hosted-git-info: 4.1.0 is-core-module: 2.13.1 - semver: 7.6.0 + semver: 7.6.2 validate-npm-package-license: 3.0.4 dev: false @@ -1202,8 +1206,8 @@ packages: engines: {node: '>= 0.4'} dev: false - /protobufjs@7.2.6: - resolution: {integrity: sha512-dgJaEDDL6x8ASUZ1YqWciTRrdOuYNzoOf27oHNfdyvKqHr5i0FV7FSLU+aIeFjyFgVxrpTOtQUi0BLLBymZaBw==} + /protobufjs@7.3.2: + resolution: {integrity: sha512-RXyHaACeqXeqAKGLDl68rQKbmObRsTIn4TYVUUug1KfS47YWCo5MacGITEryugIgZqORCvJWEk4l449POg5Txg==} engines: {node: '>=12.0.0'} requiresBuild: true dependencies: @@ -1233,6 +1237,7 @@ packages: /read-package-json@2.1.2: resolution: {integrity: sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA==} + deprecated: This package is no longer supported. Please use @npmcli/package-json instead. dependencies: glob: 7.2.3 json-parse-even-better-errors: 2.3.1 @@ -1283,7 +1288,7 @@ packages: resolution: {integrity: sha512-efCx3b+0Z69/LGJmm9Yvi4cqEdxnoGnxYxGxBghkkTTFeXRtTCmmhO0AnAfHz59k957uTSuy8WaHqOs8wbYUWg==} engines: {node: '>=6'} dependencies: - debug: 4.3.4 + debug: 4.3.5 module-details-from-path: 1.0.3 resolve: 1.22.8 transitivePeerDependencies: @@ -1327,12 +1332,10 @@ packages: hasBin: true dev: false - /semver@7.6.0: - resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} + /semver@7.6.2: + resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} engines: {node: '>=10'} hasBin: true - dependencies: - lru-cache: 6.0.0 dev: false /set-function-length@1.2.2: @@ -1403,7 +1406,7 @@ packages: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} dependencies: spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.17 + spdx-license-ids: 3.0.18 dev: false /spdx-exceptions@2.5.0: @@ -1414,11 +1417,11 @@ packages: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} dependencies: spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.17 + spdx-license-ids: 3.0.18 dev: false - /spdx-license-ids@3.0.17: - resolution: {integrity: sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==} + /spdx-license-ids@3.0.18: + resolution: {integrity: sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==} dev: false /sprintf-js@1.0.3: From c75c87d5cf590e77b9f993fc4d250a776387a579 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Wed, 19 Jun 2024 13:03:51 +0100 Subject: [PATCH 044/150] fix: CVE-2024-4068 (#3294) --- api.planx.uk/package.json | 3 +- api.planx.uk/pnpm-lock.yaml | 94 ++++++---------------------------- editor.planx.uk/package.json | 3 +- editor.planx.uk/pnpm-lock.yaml | 70 +------------------------ 4 files changed, 21 insertions(+), 149 deletions(-) diff --git a/api.planx.uk/package.json b/api.planx.uk/package.json index dcf6f12345..b08ad2c506 100644 --- a/api.planx.uk/package.json +++ b/api.planx.uk/package.json @@ -125,7 +125,8 @@ ] }, "overrides": { - "follow-redirects@<=1.15.5": ">=1.15.6" + "follow-redirects@<=1.15.5": ">=1.15.6", + "braces@<3.0.3": ">=3.0.3" } } } diff --git a/api.planx.uk/pnpm-lock.yaml b/api.planx.uk/pnpm-lock.yaml index 7ff3ce8c9a..7b094e68b0 100644 --- a/api.planx.uk/pnpm-lock.yaml +++ b/api.planx.uk/pnpm-lock.yaml @@ -6,6 +6,7 @@ settings: overrides: follow-redirects@<=1.15.5: '>=1.15.6' + braces@<3.0.3: '>=3.0.3' dependencies: '@airbrake/node': @@ -1203,6 +1204,7 @@ packages: /@humanwhocodes/config-array@0.11.14: resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead dependencies: '@humanwhocodes/object-schema': 2.0.3 debug: 4.3.4 @@ -1216,6 +1218,7 @@ packages: /@humanwhocodes/object-schema@2.0.3: resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + deprecated: Use @eslint/object-schema instead /@isaacs/cliui@8.0.2: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} @@ -2443,11 +2446,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'} @@ -2711,24 +2709,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'} @@ -4144,16 +4124,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'} @@ -4392,7 +4362,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 @@ -5582,7 +5551,7 @@ packages: whatwg-encoding: 3.1.1 whatwg-mimetype: 4.0.0 whatwg-url: 14.0.0 - ws: 8.17.1 + ws: 8.17.0 xml-name-validator: 5.0.0 transitivePeerDependencies: - bufferutil @@ -5619,7 +5588,7 @@ packages: mkdirp: 3.0.1 mz: 2.7.0 node-fetch: 3.3.2 - prettier: 3.3.1 + prettier: 3.3.2 dev: false /json-schema-traverse@0.4.1: @@ -5964,7 +5933,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 @@ -6670,8 +6639,8 @@ packages: hasBin: true dev: true - /prettier@3.3.1: - resolution: {integrity: sha512-7CAwy5dRsxs8PHXT3twixW9/OEll8MLE0VRPCJyl7CkS6VHGPSlsVaWTiASPTyGyYRyApxlaWTzwUxVNrhcwDg==} + /prettier@3.3.2: + resolution: {integrity: sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==} engines: {node: '>=14'} hasBin: true dev: false @@ -6940,16 +6909,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'} @@ -7272,22 +7231,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'} @@ -7664,14 +7607,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'} @@ -7871,8 +7806,8 @@ packages: engines: {node: '>=16'} dev: false - /type-fest@4.20.0: - resolution: {integrity: sha512-MBh+PHUHHisjXf4tlx0CFWoMdjx8zCMLJHOjnV1prABYZFHqtFOyauCIK2/7w4oIfwkF8iNhLtnJEfVY2vn3iw==} + /type-fest@4.20.1: + resolution: {integrity: sha512-R6wDsVsoS9xYOpy8vgeBlqpdOyzJ12HNfQhC/aAKWM3YoCV9TtunJzh/QpkMgeDhkoynDcw5f1y+qF9yc/HHyg==} engines: {node: '>=16'} dev: false @@ -8163,8 +8098,8 @@ packages: signal-exit: 3.0.7 dev: true - /ws@8.17.1: - resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} + /ws@8.17.0: + resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -8305,6 +8240,7 @@ packages: resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/ccca2ac} name: '@opensystemslab/planx-core' version: 1.0.0 + prepare: true requiresBuild: true dependencies: '@emotion/react': 11.11.4(react@18.3.1) @@ -8323,10 +8259,10 @@ packages: json-schema-to-typescript: 14.0.5 lodash: 4.17.21 marked: 12.0.2 - prettier: 3.3.1 + prettier: 3.3.2 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - type-fest: 4.20.0 + type-fest: 4.20.1 uuid: 9.0.1 zod: 3.23.8 transitivePeerDependencies: diff --git a/editor.planx.uk/package.json b/editor.planx.uk/package.json index 8241715246..9fac48b122 100644 --- a/editor.planx.uk/package.json +++ b/editor.planx.uk/package.json @@ -219,7 +219,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" + "follow-redirects@<1.15.4": ">=1.15.4", + "braces@<3.0.3": ">=3.0.3" } } } diff --git a/editor.planx.uk/pnpm-lock.yaml b/editor.planx.uk/pnpm-lock.yaml index cdb4c9c19f..8a3306041a 100644 --- a/editor.planx.uk/pnpm-lock.yaml +++ b/editor.planx.uk/pnpm-lock.yaml @@ -8,6 +8,7 @@ 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' dependencies: '@airbrake/browser': @@ -9100,11 +9101,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'} @@ -9814,24 +9810,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'} @@ -12539,16 +12517,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'} @@ -15737,7 +15705,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 @@ -18652,16 +18620,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'} @@ -19282,22 +19240,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'} @@ -20184,14 +20126,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'} From 2e2e15a1106694862f42cd9bdb5a8251573340ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Wed, 19 Jun 2024 13:41:18 +0100 Subject: [PATCH 045/150] fix(editor): CVE-2024-37890 (#3296) --- editor.planx.uk/pnpm-lock.yaml | 3948 ++++++++++++++++---------------- 1 file changed, 2027 insertions(+), 1921 deletions(-) diff --git a/editor.planx.uk/pnpm-lock.yaml b/editor.planx.uk/pnpm-lock.yaml index 8a3306041a..f826773d6c 100644 --- a/editor.planx.uk/pnpm-lock.yaml +++ b/editor.planx.uk/pnpm-lock.yaml @@ -223,7 +223,7 @@ 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.3)(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) @@ -291,7 +291,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.3)(@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) @@ -321,7 +321,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.3)(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 @@ -468,12 +468,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.3)(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: @@ -511,8 +511,8 @@ packages: 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 @@ -552,7 +552,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 @@ -563,15 +563,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: @@ -579,146 +579,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.1 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==} @@ -726,14 +734,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==} @@ -741,14 +748,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==} @@ -756,287 +762,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==} @@ -1046,54 +1089,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==} @@ -1102,28 +1149,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==} @@ -1133,9 +1182,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==} @@ -1143,15 +1191,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==} @@ -1159,15 +1208,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==} @@ -1175,15 +1216,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==} @@ -1192,26 +1234,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==} @@ -1219,16 +1261,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==} @@ -1236,16 +1278,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==} @@ -1254,64 +1296,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==} @@ -1319,15 +1361,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==} @@ -1335,33 +1378,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==} @@ -1369,15 +1414,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==} @@ -1385,15 +1431,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==} @@ -1401,15 +1448,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==} @@ -1417,15 +1465,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==} @@ -1433,15 +1482,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==} @@ -1449,15 +1499,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==} @@ -1466,17 +1517,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==} @@ -1485,35 +1536,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==} @@ -1522,882 +1574,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==} @@ -2406,305 +2500,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==} @@ -2712,21 +2807,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) @@ -2738,56 +2833,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) @@ -2795,121 +2890,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): @@ -2918,22 +3013,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==} @@ -2942,41 +3037,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): @@ -2986,33 +3070,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 @@ -3023,43 +3111,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: @@ -3322,7 +3410,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.3)(@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 @@ -3331,10 +3419,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.3)(@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.3)(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: @@ -3506,8 +3594,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 @@ -3517,6 +3605,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: @@ -3543,13 +3633,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: @@ -3558,6 +3650,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: @@ -3597,7 +3691,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 @@ -3607,6 +3701,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): @@ -3618,7 +3714,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 @@ -3628,6 +3724,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: @@ -3664,7 +3762,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 @@ -3682,6 +3780,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): @@ -3694,7 +3794,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) @@ -3703,6 +3803,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): @@ -3715,7 +3817,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) @@ -3724,6 +3826,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: @@ -4377,8 +4481,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.10.1: + resolution: {integrity: sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} /@eslint/eslintrc@2.1.4: @@ -4386,7 +4490,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 @@ -4475,9 +4579,10 @@ packages: /@humanwhocodes/config-array@0.11.14: resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead dependencies: '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.4 + debug: 4.3.5 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -4488,6 +4593,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==} @@ -4706,7 +4812,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 @@ -4729,7 +4835,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 @@ -4751,7 +4857,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 @@ -4928,7 +5034,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) @@ -4957,7 +5063,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) @@ -4989,7 +5095,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 @@ -5016,7 +5122,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) @@ -5044,7 +5150,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@floating-ui/react-dom': 2.1.0(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) @@ -5067,7 +5173,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@floating-ui/react-dom': 2.1.0(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) @@ -5090,10 +5196,10 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@floating-ui/react-dom': 2.1.0(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.15.20(@types/react@18.2.45)(react@18.2.0) '@popperjs/core': 2.11.8 '@types/react': 18.2.45 clsx: 2.1.1 @@ -5102,8 +5208,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.15.20: + resolution: {integrity: sha512-DoL2ppgldL16utL8nNyj/P12f8mCNdx/Hb/AJnX9rLY4b52hCMIx1kH83pbXQ6uMy6n54M3StmEbvSGoj2OFuA==} dev: false /@mui/icons-material@5.15.2(@mui/material@5.15.2)(@types/react@18.2.45)(react@18.2.0): @@ -5117,7 +5223,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 @@ -5141,14 +5247,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.15.20(@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.15.20(@types/react@18.2.45)(react@18.2.0) '@types/react': 18.2.45 clsx: 2.1.1 prop-types: 15.8.1 @@ -5173,12 +5279,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.15.20 + '@mui/system': 5.15.20(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.45)(react@18.2.0) '@mui/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 @@ -5209,12 +5315,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.15.20 + '@mui/system': 5.15.20(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(@types/react@18.2.45)(react@18.3.1) '@mui/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 @@ -5228,8 +5334,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.15.20(@types/react@18.2.45)(react@18.2.0): + resolution: {integrity: sha512-BK8F94AIqSrnaPYXf2KAOjGZJgWfvqAVQ2gVR3EryvQFtuBnG6RwodxrCvd3B48VuMy6Wsk897+lQMUxJyk+6g==} engines: {node: '>=12.0.0'} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 @@ -5238,15 +5344,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.15.20(@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.15.20(@types/react@18.2.45)(react@18.3.1): + resolution: {integrity: sha512-BK8F94AIqSrnaPYXf2KAOjGZJgWfvqAVQ2gVR3EryvQFtuBnG6RwodxrCvd3B48VuMy6Wsk897+lQMUxJyk+6g==} engines: {node: '>=12.0.0'} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 @@ -5255,8 +5361,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.15.20(@types/react@18.2.45)(react@18.3.1) '@types/react': 18.2.45 prop-types: 15.8.1 react: 18.3.1 @@ -5275,7 +5381,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) @@ -5297,7 +5403,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) @@ -5306,8 +5412,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.15.20(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.45)(react@18.2.0): + resolution: {integrity: sha512-LoMq4IlAAhxzL2VNUDBTQxAb4chnBe8JvRINVNDiMtHE2PiPOoHlhOPutSxEbaL5mkECPVWSv6p8JEV+uykwIA==} engines: {node: '>=12.0.0'} peerDependencies: '@emotion/react': ^11.5.0 @@ -5322,13 +5428,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.15.20(@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.15.20(@types/react@18.2.45)(react@18.2.0) '@types/react': 18.2.45 clsx: 2.1.1 csstype: 3.1.3 @@ -5336,8 +5442,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.15.20(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(@types/react@18.2.45)(react@18.3.1): + resolution: {integrity: sha512-LoMq4IlAAhxzL2VNUDBTQxAb4chnBe8JvRINVNDiMtHE2PiPOoHlhOPutSxEbaL5mkECPVWSv6p8JEV+uykwIA==} engines: {node: '>=12.0.0'} peerDependencies: '@emotion/react': ^11.5.0 @@ -5352,13 +5458,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.15.20(@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.15.20(@types/react@18.2.45)(react@18.3.1) '@types/react': 18.2.45 clsx: 2.1.1 csstype: 3.1.3 @@ -5377,8 +5483,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 @@ -5387,7 +5493,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 @@ -5395,8 +5501,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 @@ -5405,7 +5511,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 @@ -5413,8 +5519,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.15.20(@types/react@18.2.45)(react@18.2.0): + resolution: {integrity: sha512-mAbYx0sovrnpAu1zHc3MDIhPqL8RPVC5W5xcO1b7PiSCJPtckIZmBkp8hefamAvUiAV8gpfMOM6Zb+eSisbI2A==} engines: {node: '>=12.0.0'} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 @@ -5423,7 +5529,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 @@ -5431,8 +5537,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.15.20(@types/react@18.2.45)(react@18.3.1): + resolution: {integrity: sha512-mAbYx0sovrnpAu1zHc3MDIhPqL8RPVC5W5xcO1b7PiSCJPtckIZmBkp8hefamAvUiAV8gpfMOM6Zb+eSisbI2A==} engines: {node: '>=12.0.0'} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 @@ -5441,7 +5547,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 @@ -5465,7 +5571,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==} @@ -5497,10 +5602,10 @@ packages: 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.18(ol@9.2.4) + ol-mapbox-style: 12.3.3(ol@9.2.4) postcode: 5.1.0 proj4: 2.11.0 rambda: 8.6.0 @@ -5516,8 +5621,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 @@ -5542,19 +5647,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.3)(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 @@ -5579,15 +5684,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.3)(esbuild@0.21.3) dev: true /@popperjs/core@2.11.8: @@ -5597,13 +5702,13 @@ 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/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): @@ -5619,7 +5724,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 @@ -5640,7 +5745,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) @@ -5660,7 +5765,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 @@ -5674,7 +5779,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 @@ -5688,7 +5793,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 @@ -5706,7 +5811,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) @@ -5727,7 +5832,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 @@ -5745,7 +5850,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) @@ -5764,7 +5869,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 @@ -5783,7 +5888,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@floating-ui/react-dom': 2.1.0(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) @@ -5813,7 +5918,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 @@ -5834,7 +5939,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 @@ -5855,7 +5960,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-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) @@ -5884,7 +5989,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) @@ -5925,7 +6030,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 @@ -5942,7 +6047,7 @@ packages: '@types/react': 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) '@types/react': 18.2.45 react: 18.2.0 @@ -5961,7 +6066,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-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) @@ -5988,7 +6093,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-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) @@ -6011,7 +6116,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-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) @@ -6034,7 +6139,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 @@ -6048,7 +6153,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 @@ -6063,7 +6168,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 @@ -6078,7 +6183,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 @@ -6092,7 +6197,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 @@ -6106,7 +6211,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 @@ -6121,7 +6226,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 @@ -6140,7 +6245,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 @@ -6151,7 +6256,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): @@ -6254,7 +6359,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: @@ -6265,10 +6370,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==} @@ -6466,7 +6573,7 @@ packages: react: optional: true dependencies: - '@storybook/csf': 0.1.7 + '@storybook/csf': 0.1.8 '@storybook/global': 5.0.0 react: 18.2.0 ts-dedent: 2.2.0 @@ -6517,14 +6624,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.8 '@storybook/docs-tools': 7.6.7 '@storybook/global': 5.0.0 '@storybook/manager-api': 7.6.7(react-dom@18.2.0)(react@18.2.0) '@storybook/preview-api': 7.6.7 '@storybook/theming': 7.6.7(react-dom@18.2.0)(react@18.2.0) '@storybook/types': 7.6.7 - '@types/lodash': 4.17.4 + '@types/lodash': 4.14.202 color-convert: 2.0.1 dequal: 2.0.3 lodash: 4.17.21 @@ -6545,11 +6652,11 @@ packages: - supports-color dev: true - /@storybook/builder-manager@8.1.10(prettier@3.3.1): + /@storybook/builder-manager@8.1.10(prettier@3.0.0): 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.10(prettier@3.3.1) + '@storybook/core-common': 8.1.10(prettier@3.0.0) '@storybook/manager': 8.1.10 '@storybook/node-logger': 8.1.10 '@types/ejs': 3.1.5 @@ -6576,7 +6683,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 @@ -6585,10 +6692,10 @@ 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.3 + '@types/node': 18.19.36 '@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 @@ -6603,14 +6710,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.3)(webpack@5.91.0) + terser-webpack-plugin: 5.3.10(@swc/core@1.6.3)(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.3)(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 @@ -6649,16 +6756,16 @@ packages: 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.10 - '@storybook/core-common': 8.1.10(prettier@3.3.1) + '@storybook/core-common': 8.1.10(prettier@3.0.0) '@storybook/core-events': 8.1.10 - '@storybook/core-server': 8.1.10(prettier@3.3.1)(react-dom@18.2.0)(react@18.2.0) + '@storybook/core-server': 8.1.10(prettier@3.0.0)(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.1) + '@storybook/telemetry': 8.1.10(prettier@3.0.0) '@storybook/types': 8.1.10 '@types/semver': 7.5.8 '@yarnpkg/fslib': 2.10.3 @@ -6677,7 +6784,7 @@ packages: jscodeshift: 0.15.2(@babel/preset-env@7.22.6) leven: 3.1.0 ora: 5.4.1 - prettier: 3.3.1 + prettier: 3.3.2 prompts: 2.4.2 read-pkg-up: 7.0.1 semver: 7.6.2 @@ -6717,20 +6824,20 @@ packages: /@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 + '@babel/core': 7.24.7 + '@babel/preset-env': 7.24.7(@babel/core@7.24.7) + '@babel/types': 7.24.7 + '@storybook/csf': 0.1.8 '@storybook/csf-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) + jscodeshift: 0.15.2(@babel/preset-env@7.24.7) lodash: 4.17.21 - prettier: 3.3.1 - recast: 0.23.7 + prettier: 3.3.2 + recast: 0.23.9 tiny-invariant: 1.3.3 transitivePeerDependencies: - supports-color @@ -6745,7 +6852,7 @@ packages: '@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) '@storybook/client-logger': 7.6.7 - '@storybook/csf': 0.1.7 + '@storybook/csf': 0.1.8 '@storybook/global': 5.0.0 '@storybook/theming': 7.6.7(react-dom@18.2.0)(react@18.2.0) '@storybook/types': 7.6.7 @@ -6773,7 +6880,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.36 '@types/node-fetch': 2.6.11 '@types/pretty-hrtime': 1.0.3 chalk: 4.1.2 @@ -6783,7 +6890,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.2 handlebars: 4.7.8 lazy-universal-dotenv: 4.0.0 node-fetch: 2.7.0 @@ -6797,7 +6904,7 @@ packages: - supports-color dev: true - /@storybook/core-common@8.1.10(prettier@3.3.1): + /@storybook/core-common@8.1.10(prettier@3.0.0): resolution: {integrity: sha512-+0GhgDRQwUlXu1lY77NdLnVBVycCEW0DG7eu7rvLYYkTyNRxbdl2RWsQpjr/j4sxqT6u82l9/b+RWpmsl4MgMQ==} peerDependencies: prettier: ^2 || ^3 @@ -6820,14 +6927,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.2 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.3.1 - prettier-fallback: /prettier@3.3.1 + prettier: 3.0.0 + prettier-fallback: /prettier@3.0.0 pretty-hrtime: 1.0.3 resolve-from: 5.0.0 semver: 7.6.2 @@ -6855,22 +6962,22 @@ packages: /@storybook/core-events@8.1.10: resolution: {integrity: sha512-aS4zsBVyJds74+rAW0IfTEjULDCQwXecVpQfv11B8/89/07s3bOPssGGoTtCTaN4pHbduywE6MxbmFvTmXOFCA==} dependencies: - '@storybook/csf': 0.1.7 + '@storybook/csf': 0.1.8 ts-dedent: 2.2.0 dev: true - /@storybook/core-server@8.1.10(prettier@3.3.1)(react-dom@18.2.0)(react@18.2.0): + /@storybook/core-server@8.1.10(prettier@3.0.0)(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.10(prettier@3.3.1) + '@storybook/builder-manager': 8.1.10(prettier@3.0.0) '@storybook/channels': 8.1.10 - '@storybook/core-common': 8.1.10(prettier@3.3.1) + '@storybook/core-common': 8.1.10(prettier@3.0.0) '@storybook/core-events': 8.1.10 - '@storybook/csf': 0.1.7 + '@storybook/csf': 0.1.8 '@storybook/csf-tools': 8.1.10 '@storybook/docs-mdx': 3.1.0-next.0 '@storybook/global': 5.0.0 @@ -6878,11 +6985,11 @@ packages: '@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.1) + '@storybook/telemetry': 8.1.10(prettier@3.0.0) '@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.36 '@types/pretty-hrtime': 1.0.3 '@types/semver': 7.5.8 better-opn: 3.0.2 @@ -6906,7 +7013,7 @@ packages: util: 0.12.5 util-deprecate: 1.0.2 watchpack: 2.4.1 - ws: 8.17.0 + ws: 8.17.1 transitivePeerDependencies: - bufferutil - encoding @@ -6923,7 +7030,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.36 ts-dedent: 2.2.0 transitivePeerDependencies: - encoding @@ -6942,14 +7049,14 @@ 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.8 '@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 @@ -6958,21 +7065,21 @@ packages: /@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 + '@babel/generator': 7.24.7 + '@babel/parser': 7.24.7 + '@babel/traverse': 7.24.7 + '@babel/types': 7.24.7 + '@storybook/csf': 0.1.8 '@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.8: + resolution: {integrity: sha512-Ntab9o7LjBCbFIao5l42itFiaSh/Qu+l16l/r/9qmV9LnYZkO+JQ7tzhdlwpgJfhs+B5xeejpdAtftDRyXNajw==} dependencies: type-fest: 2.19.0 dev: true @@ -7017,7 +7124,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.8 '@storybook/global': 5.0.0 '@storybook/router': 7.6.7 '@storybook/theming': 7.6.7(react-dom@18.2.0)(react@18.2.0) @@ -7039,7 +7146,7 @@ packages: '@storybook/channels': 8.1.10 '@storybook/client-logger': 8.1.10 '@storybook/core-events': 8.1.10 - '@storybook/csf': 0.1.7 + '@storybook/csf': 0.1.8 '@storybook/global': 5.0.0 '@storybook/icons': 1.2.9(react-dom@18.2.0)(react@18.2.0) '@storybook/router': 8.1.10 @@ -7083,13 +7190,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.3)(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 +7211,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.3)(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 +7226,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.36 '@types/semver': 7.5.8 babel-plugin-add-react-displayname: 0.0.5 fs-extra: 11.2.0 @@ -7138,7 +7245,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.3)(esbuild@0.21.3) transitivePeerDependencies: - '@swc/core' - '@types/webpack' @@ -7160,7 +7267,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.8 '@storybook/global': 5.0.0 '@storybook/types': 7.6.7 '@types/qs': 6.9.15 @@ -7179,7 +7286,7 @@ packages: '@storybook/channels': 8.1.10 '@storybook/client-logger': 8.1.10 '@storybook/core-events': 8.1.10 - '@storybook/csf': 0.1.7 + '@storybook/csf': 0.1.8 '@storybook/global': 5.0.0 '@storybook/types': 8.1.10 '@types/qs': 6.9.15 @@ -7202,15 +7309,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.3)(esbuild@0.21.3) transitivePeerDependencies: - supports-color dev: true @@ -7225,7 +7332,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.3)(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 +7348,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.3)(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.36 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) typescript: 5.4.3 @@ -7284,7 +7391,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.36 acorn: 7.4.1 acorn-jsx: 5.3.2(acorn@7.4.1) acorn-walk: 7.2.0 @@ -7320,11 +7427,11 @@ packages: qs: 6.12.1 dev: true - /@storybook/telemetry@8.1.10(prettier@3.3.1): + /@storybook/telemetry@8.1.10(prettier@3.0.0): resolution: {integrity: sha512-pwiMWrq85D0AnaAgYNfB2w2BDgqnetQ+tXwsUAw4fUEFwA4oPU6r0uqekRbNNE6wmSSYjiiFP3JgknBFqjd2hg==} dependencies: '@storybook/client-logger': 8.1.10 - '@storybook/core-common': 8.1.10(prettier@3.3.1) + '@storybook/core-common': 8.1.10(prettier@3.0.0) '@storybook/csf-tools': 8.1.10 chalk: 4.1.2 detect-package-manager: 2.0.1 @@ -7476,13 +7583,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 +7608,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,115 +7619,115 @@ packages: transitivePeerDependencies: - supports-color - /@swc/core-darwin-arm64@1.5.7: - resolution: {integrity: sha512-bZLVHPTpH3h6yhwVl395k0Mtx8v6CGhq5r4KQdAoPbADU974Mauz1b6ViHAJ74O0IVE5vyy7tD3OpkQxL/vMDQ==} + /@swc/core-darwin-arm64@1.6.3: + resolution: {integrity: sha512-3r7cJf1BcE30iyF1rnOSKrEzIR+cqnyYSZvivrm62TZdXVsIjfXe1xulsKGxZgNeLY5erIu7ukvMvBvPhnQvqA==} 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.3: + resolution: {integrity: sha512-8GLZ23IgVpF5xh2SbS5ZW/12/EEBuRU1hFOLB5rKERJU0y1RJ6YhDMf/FuOWhfHQcFM7TeedBwHIzaF+tdKKlw==} 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.3: + resolution: {integrity: sha512-VQ/bduX7WhLOlGbJLMG7UH0LBehjjx43R4yuk55rjjJLqpvX5fQzMsWhQdIZ5vsc+4ORzdgtEAlpumTv6bsD1A==} 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.3: + resolution: {integrity: sha512-jHIQ/PCwtdDBIF/BiC5DochswuCAIW/T5skJ+eDMbta7+QtEnZCXTZWpT5ORoEY/gtsE2fjpOA4TS6fBBvXqUw==} 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.3: + resolution: {integrity: sha512-gA6velEUD27Dwu0BlR9hCcFzkWq2YL2pDAU5qbgeuGhaMiUCBssfqTQB+2ctEnV+AZx+hSMJOHvtA+uFZjfRrw==} 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.3: + resolution: {integrity: sha512-fy4qoBDr5I8r+ZNCZxs/oZcmu4j/8mtSud6Ka102DaSxEjNg0vfIdo9ITsVIPsofhUTmDKjQsPB2O7YUlJAioQ==} 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.3: + resolution: {integrity: sha512-c/twcMbq/Gpq47G+b3kWgoaCujpXO11aRgJx6am+CprvP4uNeBHEpQkxD+DQmdWFHisZd0i9GB8NG3e7L9Rz9Q==} 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.3: + resolution: {integrity: sha512-y6RxMtX45acReQmzkxcEfJscfBXce6QjuNgWQHHs9exA592BZzmolDUwgmAyjyvopz1lWX+KdymdZFKvuDSx4w==} 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.3: + resolution: {integrity: sha512-41h7z3xgukl1HDDwhquaeOPSP1OWeHl+mWKnJVmmwd3ui/oowUDCO856qa6JagBgPSnAGfyXwv6vthuXwyCcWA==} 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.3: + resolution: {integrity: sha512-//bnwo9b8Vp1ED06eXCHyGZ5xIpdkQgg2fuFDdtd1FITl7r5bdQh2ryRzPiKiGwgXZwZQitUshI4JeEX9IuW+Q==} 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.3: + resolution: {integrity: sha512-mZpei+LqE+AL+nwgERMQey9EJA9/yhHTN6nwbobH5GnSij/lhfTdGfAb1iumOrroqEcXbHUaK//7wOw7DjBGdA==} 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.8 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.3 + '@swc/core-darwin-x64': 1.6.3 + '@swc/core-linux-arm-gnueabihf': 1.6.3 + '@swc/core-linux-arm64-gnu': 1.6.3 + '@swc/core-linux-arm64-musl': 1.6.3 + '@swc/core-linux-x64-gnu': 1.6.3 + '@swc/core-linux-x64-musl': 1.6.3 + '@swc/core-win32-arm64-msvc': 1.6.3 + '@swc/core-win32-ia32-msvc': 1.6.3 + '@swc/core-win32-x64-msvc': 1.6.3 /@swc/counter@0.1.3: resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - /@swc/types@0.1.7: - resolution: {integrity: sha512-scHWahbHF0eyj3JsxG9CFJgFdFNaVQCNAimBlT6PzS3n/HptxqREjsm4OH6AN3lYcffZYSPxXW8ua2BEHp0lJQ==} + /@swc/types@0.1.8: + resolution: {integrity: sha512-RNFA3+7OJFNYY78x0FYwi1Ow+iF1eF5WvmfY1nXPOEH4R2p/D4Cr1vzje7dNAI2aLFqpv8Wyz4oKSWqIZArpQA==} dependencies: '@swc/counter': 0.1.3 @@ -7628,8 +7735,8 @@ packages: resolution: {integrity: sha512-wdsYKy5zupPyLCW2Je5DLHSxSfbIp6h80WoHOQc+RPtmPGA52O9x5MJEkv92Sjonpq+poOAtUKhh1kBGAXBrNA==} 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 @@ -7638,12 +7745,26 @@ packages: pretty-format: 27.5.1 dev: true + /@testing-library/dom@8.20.1: + resolution: {integrity: sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==} + engines: {node: '>=12'} + dependencies: + '@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 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + pretty-format: 27.5.1 + dev: true + /@testing-library/dom@9.3.4: 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 +7777,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,8 +7795,8 @@ packages: react: ^18.0.0 react-dom: ^18.0.0 dependencies: - '@babel/runtime': 7.24.5 - '@testing-library/dom': 9.3.4 + '@babel/runtime': 7.24.7 + '@testing-library/dom': 8.20.1 '@types/react-dom': 18.2.18 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -7898,14 +8019,14 @@ packages: prosemirror-keymap: 1.2.2 prosemirror-markdown: 1.13.0 prosemirror-menu: 1.2.4 - prosemirror-model: 1.21.0 + prosemirror-model: 1.21.1 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.1)(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): @@ -8036,8 +8157,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 +8166,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 +8197,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.3 '@types/node': 17.0.45 /@types/connect@3.4.38: @@ -8129,8 +8250,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 +8280,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.3: + resolution: {integrity: sha512-KOzM7MhcBFlmnlr/fzISFF5vGWVSvN6fTd4T+ExOt08bA/dA5kpSzY52nMsI1KDFmUREpJelPYyuslLRSjjgCg==} dependencies: '@types/node': 17.0.45 '@types/qs': 6.9.15 @@ -8171,7 +8292,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.3 '@types/qs': 6.9.15 '@types/serve-static': 1.15.7 @@ -8256,8 +8377,9 @@ packages: /@types/lodash@4.14.202: resolution: {integrity: sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==} - /@types/lodash@4.17.4: - resolution: {integrity: sha512-wYCP26ZLxaT3R39kiN2+HcJ4kTd3U1waI/cY7ivWYqFP6pW3ZNpvi6Wd6PHZx7T/t8z0vlkXMg3QYLa7DZ/IJQ==} + /@types/lodash@4.17.5: + resolution: {integrity: sha512-MBIOHVZqVqgfro1euRDWX7OO0fBVUUMrN6Pwm8LQsz8cWhEpihlvR70ENj3f40j58TNxZaWv2ndSkInykNBBJw==} + dev: false /@types/mdast@3.0.15: resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} @@ -8291,14 +8413,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.36: + resolution: {integrity: sha512-tX1BNmYSWEvViftB26VLNxT6mEr37M7+ldUtq7rlKnv4/2fKYsJIOmqJAjT6h1DNuwQjIKgw3VJ/Dtw3yiTIQw==} dependencies: undici-types: 5.26.5 dev: true - /@types/node@20.12.12: - resolution: {integrity: sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==} + /@types/node@20.14.5: + resolution: {integrity: sha512-aoRR+fJkZT2l0aGOJhuA8frnCSoNX6W7U2mpNq63+BxBIj5BQFt8rHy627kijCmm63ijdSdwvGgpUsU6MBsZZA==} dependencies: undici-types: 5.26.5 dev: false @@ -8332,7 +8454,6 @@ packages: /@types/raf@3.4.3: resolution: {integrity: sha512-c4YAvMedbPZ5tEyxzQdMoOhhJ4RD3rngZIdwC2/qDN3d7JpEhB6fiBRKVY1lg5B7Wk+uPBjn5f39j1/2MY1oOw==} - requiresBuild: true dev: false optional: true @@ -8509,12 +8630,12 @@ packages: typescript: optional: true dependencies: - '@eslint-community/regexpp': 4.10.0 + '@eslint-community/regexpp': 4.10.1 '@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 @@ -8550,7 +8671,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: @@ -8582,7 +8703,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 @@ -8608,7 +8729,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 @@ -8628,7 +8749,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 @@ -8797,35 +8918,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: @@ -8845,7 +8966,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: @@ -8860,7 +8981,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 @@ -8892,12 +9013,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.0): resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} peerDependencies: acorn: ^8 dependencies: - acorn: 8.11.3 + acorn: 8.12.0 /acorn-jsx@5.3.2(acorn@7.4.1): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} @@ -8907,20 +9028,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.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@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.0 dev: true /acorn@7.4.1: @@ -8928,8 +9051,8 @@ packages: engines: {node: '>=0.4.0'} hasBin: 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 @@ -8948,7 +9071,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 @@ -9012,6 +9135,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'} @@ -9082,7 +9210,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: @@ -9201,8 +9329,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 @@ -9252,7 +9381,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: @@ -9293,8 +9422,8 @@ packages: peerDependencies: postcss: ^8.1.0 dependencies: - browserslist: 4.23.0 - caniuse-lite: 1.0.30001621 + browserslist: 4.23.1 + caniuse-lite: 1.0.30001636 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.1 @@ -9336,12 +9465,12 @@ packages: dependencies: dequal: 2.0.3 - /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): @@ -9381,24 +9510,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'} @@ -9411,19 +9522,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.3)(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.3)(esbuild@0.21.3) dev: true /babel-plugin-add-react-displayname@0.0.5: @@ -9433,7 +9544,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 @@ -9443,13 +9554,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 @@ -9461,8 +9574,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 @@ -9471,15 +9584,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 @@ -9488,7 +9601,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 @@ -9504,36 +9617,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==} @@ -9545,7 +9670,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==} @@ -9556,17 +9680,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==} @@ -9594,25 +9728,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'} @@ -9634,34 +9749,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: @@ -9692,7 +9797,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 @@ -9829,15 +9933,15 @@ packages: pako: 0.2.9 dev: true - /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.30001636 + electron-to-chromium: 1.4.806 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) /bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} @@ -9905,7 +10009,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==} @@ -9918,7 +10022,7 @@ packages: camelcase: 8.0.0 map-obj: 5.0.0 quick-lru: 6.1.2 - type-fest: 4.18.2 + type-fest: 4.20.1 dev: false /camelcase@5.3.1: @@ -9937,20 +10041,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.1 + caniuse-lite: 1.0.30001636 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.30001636: + resolution: {integrity: sha512-bMg2vmr8XBsbL6Lr0UHXy/21m84FTxDLWn2FSqMd5PrlbMxwJlQnC2YWYxVgp66PZE+BBNF2jYQUBKCo1FDeZg==} /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 @@ -10062,8 +10166,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: @@ -10115,8 +10219,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: @@ -10414,6 +10518,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==} @@ -10449,7 +10554,7 @@ packages: /core-js-compat@3.37.1: resolution: {integrity: sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==} dependencies: - browserslist: 4.23.0 + browserslist: 4.23.1 /core-js-pure@3.37.1: resolution: {integrity: sha512-J/r5JTHSmzTxbiYYrzXg9w1VpqrYt+gexenBE9pugeyhwPZTAEJddyiReJWsLO6uNQ8xJZFbod6XC7KKwatCiA==} @@ -10468,7 +10573,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.3)(@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: @@ -10478,7 +10583,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.3)(@types/node@17.0.45)(typescript@5.4.3) typescript: 5.4.3 transitivePeerDependencies: - '@swc/core' @@ -10511,10 +10616,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.3)(@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.3)(esbuild@0.21.3)(eslint@8.44.0)(react@18.2.0)(sass@1.71.1)(typescript@5.4.3) transitivePeerDependencies: - esbuild - supports-color @@ -10606,12 +10711,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 @@ -10637,7 +10741,7 @@ packages: postcss-modules-values: 4.0.0(postcss@8.4.38) 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.3)(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==} @@ -10665,7 +10769,7 @@ 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.3)(esbuild@0.21.3) /css-prefers-color-scheme@6.0.3(postcss@8.4.32): resolution: {integrity: sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==} @@ -10723,7 +10827,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 @@ -10847,7 +10951,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: @@ -10894,7 +10998,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: @@ -10917,8 +11021,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: '*' @@ -11106,7 +11210,7 @@ packages: hasBin: true dependencies: address: 1.2.2 - debug: 4.3.4 + debug: 4.3.5 transitivePeerDependencies: - supports-color dev: true @@ -11171,7 +11275,7 @@ packages: resolution: {integrity: sha512-4SbcbedPXTciySXiSnNNLuJXpvxFe5nqivbiEHXyL8P/w0wx2uW7YXNjnYgjW0e2e6vy+L/tMISU/oAiXCl57Q==} engines: {node: '>=10'} dependencies: - '@types/node': 20.12.12 + '@types/node': 20.14.5 jszip: 3.10.1 nanoid: 5.0.7 xml: 1.0.1 @@ -11190,7 +11294,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: @@ -11250,8 +11354,8 @@ packages: domelementtype: 2.3.0 dev: false - /dompurify@2.5.4: - resolution: {integrity: sha512-l5NNozANzaLPPe0XaAwvg3uZcHtDBnziX/HjsY1UcDj1MxTK8Dd0Kv096jyPK5HRzs/XM5IMj20dW8Fk+HnbUA==} + /dompurify@2.5.5: + resolution: {integrity: sha512-FgbqnEPiv5Vdtwt6Mxl7XSylttCC03cqP5ldNT2z+Kj0nLxPHJH4+1Cyf5Jasxhw93Rl4Oo11qRoUV72fmya2Q==} requiresBuild: true dev: false optional: true @@ -11285,7 +11389,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==} @@ -11343,8 +11447,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.806: + resolution: {integrity: sha512-nkoEX2QIB8kwCOtvtgwhXWy2IHVcOLQZu9Qo36uaGB835mdX/h8uLRlosL6QIhLVUnAiicXRW00PwaPZC74Nrg==} /emittery@0.10.2: resolution: {integrity: sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==} @@ -11382,8 +11486,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 @@ -11586,22 +11690,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.3)(esbuild@0.21.3) webpack-sources: 1.4.3 dev: true @@ -11614,7 +11718,7 @@ packages: peerDependencies: esbuild: '>=0.12 <1' dependencies: - debug: 4.3.4 + debug: 4.3.5 esbuild: 0.18.20 transitivePeerDependencies: - supports-color @@ -11625,7 +11729,7 @@ packages: peerDependencies: esbuild: '>=0.12 <1' dependencies: - debug: 4.3.4 + debug: 4.3.5 esbuild: 0.20.2 transitivePeerDependencies: - supports-color @@ -11787,8 +11891,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) @@ -11799,7 +11903,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 @@ -11923,7 +12027,7 @@ 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 @@ -11949,8 +12053,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 @@ -11959,7 +12063,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 @@ -12030,7 +12134,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.3)(esbuild@0.21.3) /eslint@8.44.0: resolution: {integrity: sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A==} @@ -12038,7 +12142,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.10.1 '@eslint/eslintrc': 2.1.4 '@eslint/js': 8.44.0 '@humanwhocodes/config-array': 0.11.14 @@ -12047,7 +12151,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 @@ -12085,7 +12189,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.10.1 '@eslint/eslintrc': 2.1.4 '@eslint/js': 8.57.0 '@humanwhocodes/config-array': 0.11.14 @@ -12095,7 +12199,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 @@ -12133,15 +12237,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 /esprima@1.2.2: @@ -12333,7 +12437,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: @@ -12453,7 +12557,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 @@ -12488,7 +12592,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.3)(esbuild@0.21.3) /file-saver@2.0.5: resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} @@ -12498,7 +12602,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: @@ -12609,8 +12713,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.238.0: + resolution: {integrity: sha512-VE7XSv1epljsIN2YeBnxCmGJihpNIAnLLu/pPOdA+Gkso7qDltJwUi6vfHjgxdBbjSdAuPGnhuOHJUQG+yYwIg==} engines: {node: '>=0.4.0'} dev: true @@ -12645,8 +12749,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 @@ -12666,7 +12770,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 @@ -12681,7 +12785,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.3)(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==} @@ -12690,7 +12794,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 @@ -12703,7 +12807,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.3)(esbuild@0.21.3) dev: true /form-data@2.5.1: @@ -12751,7 +12855,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: @@ -12860,7 +12964,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 @@ -12963,15 +13067,16 @@ packages: /glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - /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 + foreground-child: 3.2.1 + jackspeak: 3.4.0 minimatch: 9.0.4 minipass: 7.1.2 + package-json-from-dist: 1.0.0 path-scurry: 1.11.1 /glob@7.2.3: @@ -13081,7 +13186,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: @@ -13120,7 +13225,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: @@ -13216,7 +13321,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 @@ -13276,7 +13381,7 @@ packages: he: 1.2.0 param-case: 3.0.4 relateurl: 0.2.7 - terser: 5.31.0 + terser: 5.31.1 /html-tags@3.3.1: resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} @@ -13300,7 +13405,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.3)(esbuild@0.21.3) /html2canvas@1.4.1: resolution: {integrity: sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==} @@ -13371,7 +13476,7 @@ packages: dependencies: '@tootallnate/once': 1.1.2 agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.3.5 transitivePeerDependencies: - supports-color @@ -13408,7 +13513,7 @@ packages: engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.3.5 transitivePeerDependencies: - supports-color @@ -13432,8 +13537,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==} @@ -13968,8 +14073,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 @@ -13988,7 +14093,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: @@ -14014,8 +14119,8 @@ packages: reflect.getprototypeof: 1.0.6 set-function-name: 2.0.2 - /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 @@ -14118,10 +14223,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 @@ -14340,7 +14445,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 @@ -14354,7 +14459,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 @@ -14504,16 +14609,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 @@ -14680,8 +14785,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: @@ -14691,7 +14796,7 @@ packages: dependencies: config-chain: 1.1.13 editorconfig: 1.0.4 - glob: 10.4.1 + glob: 10.4.2 js-cookie: 3.0.5 nopt: 7.2.1 dev: true @@ -14729,32 +14834,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.238.0 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: @@ -14763,25 +14868,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.238.0 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: @@ -14798,7 +14903,7 @@ packages: optional: true dependencies: abab: 2.0.6 - acorn: 8.11.3 + acorn: 8.12.0 acorn-globals: 6.0.0 cssom: 0.4.4 cssstyle: 2.3.0 @@ -14849,11 +14954,11 @@ packages: 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.5 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 @@ -14861,7 +14966,7 @@ packages: mkdirp: 3.0.1 mz: 2.7.0 node-fetch: 3.3.2 - prettier: 3.3.1 + prettier: 3.3.2 dev: false /json-schema-traverse@0.4.1: @@ -14912,43 +15017,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.5 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 @@ -14956,14 +15061,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 @@ -14971,7 +15076,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 @@ -14979,7 +15084,7 @@ 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 @@ -15047,8 +15152,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 @@ -15094,8 +15199,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: @@ -15119,7 +15224,7 @@ 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 @@ -15128,7 +15233,7 @@ packages: object-inspect: 1.13.1 pidtree: 0.6.0 string-argv: 0.3.2 - yaml: 2.4.2 + yaml: 2.4.5 transitivePeerDependencies: - enquirer - supports-color @@ -15147,32 +15252,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: @@ -15187,8 +15292,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: @@ -15273,7 +15378,7 @@ 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==} @@ -15395,7 +15500,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 @@ -15403,7 +15508,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: @@ -15486,9 +15591,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 @@ -15497,7 +15602,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: @@ -15679,7 +15784,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 @@ -15770,7 +15875,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.3)(esbuild@0.21.3) /minimalistic-assert@1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} @@ -15985,7 +16090,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==} @@ -16239,26 +16344,26 @@ packages: resolution: {integrity: sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw==} dev: true - /ol-ext@4.0.18(ol@9.2.3): + /ol-ext@4.0.18(ol@9.2.4): resolution: {integrity: sha512-zzeTAoCg9IocaM7LlXiLNnVCgVmfxxLzlDTWvYn3Y2gFxtICHSfRrIQl/8vumgBjftBksVl1Fds8P5uFReTmew==} 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.3(ol@9.2.4): + resolution: {integrity: sha512-Wyb1vSxTl/c09S9yC/Dcr7XWQf5u19/9BriqOiDJRgbjLTAbrWXW8l+5N9E/I0fV2gcTQDE+7iFtvVOvXcTmMA==} 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 @@ -16310,7 +16415,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: @@ -16425,6 +16530,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 @@ -16441,7 +16549,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==} @@ -16457,7 +16565,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 @@ -16486,7 +16594,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==} @@ -16645,7 +16753,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: @@ -16682,14 +16790,14 @@ packages: 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.1)(postcss@8.4.32): resolution: {integrity: sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==} engines: {node: '>=8'} peerDependencies: browserslist: '>=4' postcss: '>=8' dependencies: - browserslist: 4.23.0 + browserslist: 4.23.1 postcss: 8.4.32 /postcss-calc@8.2.4(postcss@8.4.32): @@ -16743,7 +16851,7 @@ packages: peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.23.0 + browserslist: 4.23.1 caniuse-api: 3.0.0 colord: 2.9.3 postcss: 8.4.32 @@ -16755,7 +16863,7 @@ packages: peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.23.0 + browserslist: 4.23.1 postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -16944,9 +17052,9 @@ 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==} @@ -16959,7 +17067,7 @@ packages: 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.3)(esbuild@0.21.3) /postcss-logical@5.0.4(postcss@8.4.32): resolution: {integrity: sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==} @@ -16993,7 +17101,7 @@ packages: peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.23.0 + browserslist: 4.23.1 caniuse-api: 3.0.0 cssnano-utils: 3.1.0(postcss@8.4.32) postcss: 8.4.32 @@ -17025,7 +17133,7 @@ packages: peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.23.0 + browserslist: 4.23.1 cssnano-utils: 3.1.0(postcss@8.4.32) postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -17154,7 +17262,7 @@ packages: peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.23.0 + browserslist: 4.23.1 postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -17177,7 +17285,7 @@ packages: 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.1)(postcss@8.4.32): resolution: {integrity: sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==} engines: {node: '>= 12'} peerDependencies: @@ -17185,9 +17293,9 @@ packages: postcss: '>= 8' dependencies: '@csstools/normalize.css': 12.1.1 - browserslist: 4.23.0 + browserslist: 4.23.1 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.1)(postcss@8.4.32) sanitize.css: 13.0.0 /postcss-opacity-percentage@1.1.3(postcss@8.4.32): @@ -17254,7 +17362,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.1 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) @@ -17305,7 +17413,7 @@ packages: peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.23.0 + browserslist: 4.23.1 caniuse-api: 3.0.0 postcss: 8.4.32 @@ -17398,8 +17506,8 @@ packages: hasBin: true dev: true - /prettier@3.3.1: - resolution: {integrity: sha512-7CAwy5dRsxs8PHXT3twixW9/OEll8MLE0VRPCJyl7CkS6VHGPSlsVaWTiASPTyGyYRyApxlaWTzwUxVNrhcwDg==} + /prettier@3.3.2: + resolution: {integrity: sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==} engines: {node: '>=14'} hasBin: true @@ -17511,7 +17619,7 @@ packages: /prosemirror-commands@1.5.2: resolution: {integrity: sha512-hgLcPaakxH8tu6YvVAaILV2tXYsW3rAdDR8WNkeKGcgeMVQg3/TMhPdVoh7iAmfgVjZGtcOSjKiQaoeKjzd2mQ==} dependencies: - prosemirror-model: 1.21.0 + prosemirror-model: 1.21.1 prosemirror-state: 1.4.3 prosemirror-transform: 1.9.0 dev: false @@ -17521,16 +17629,16 @@ 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.1 prosemirror-state: 1.4.3 - prosemirror-view: 1.33.6 + prosemirror-view: 1.33.8 dev: false /prosemirror-history@1.4.0: @@ -17538,7 +17646,7 @@ packages: 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 @@ -17560,7 +17668,7 @@ packages: resolution: {integrity: sha512-UziddX3ZYSYibgx8042hfGKmukq5Aljp2qoBiJRejD/8MH70siQNz5RB1TrdTPheqLMy4aCe4GYNF10/3lQS5g==} dependencies: markdown-it: 14.1.0 - prosemirror-model: 1.21.0 + prosemirror-model: 1.21.1 dev: false /prosemirror-menu@1.2.4: @@ -17572,8 +17680,8 @@ packages: prosemirror-state: 1.4.3 dev: false - /prosemirror-model@1.21.0: - resolution: {integrity: sha512-zLpS1mVCZLA7VTp82P+BfMiYVPcX1/z0Mf3gsjKZtzMWubwn2pN7CceMV0DycjlgE5JeXPR7UF4hJPbBV98oWA==} + /prosemirror-model@1.21.1: + resolution: {integrity: sha512-IVBAuMqOfltTr7yPypwpfdGT+6rGAteVOw2FO6GEvCGGa1ZwxLseqC1Eax/EChDvG/xGquB2d/hLdgh3THpsYg==} dependencies: orderedmap: 2.1.1 dev: false @@ -17581,13 +17689,13 @@ packages: /prosemirror-schema-basic@1.2.2: resolution: {integrity: sha512-/dT4JFEGyO7QnNTe9UaKUhjDXbTNkiWTq/N4VpKaF79bBjSExVV2NXmJpcM7z/gD7mbqNjxbmWW5nf1iNSSGnw==} dependencies: - prosemirror-model: 1.21.0 + prosemirror-model: 1.21.1 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.1 prosemirror-state: 1.4.3 prosemirror-transform: 1.9.0 dev: false @@ -17595,22 +17703,22 @@ packages: /prosemirror-state@1.4.3: resolution: {integrity: sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q==} dependencies: - prosemirror-model: 1.21.0 + prosemirror-model: 1.21.1 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.1 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.1)(prosemirror-state@1.4.3)(prosemirror-view@1.33.8): resolution: {integrity: sha512-ujRYhSuhQb1Jsarh1IHqb2KoSnRiD7wAMDGucP35DN7j5af6X7B18PfdPIrbwsPTqIAj0fyOvxbuPsWhNvylmA==} peerDependencies: prosemirror-model: ^1.19.0 @@ -17619,21 +17727,21 @@ packages: dependencies: '@remirror/core-constants': 2.0.2 escape-string-regexp: 4.0.0 - prosemirror-model: 1.21.0 + prosemirror-model: 1.21.1 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.1 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.1 prosemirror-state: 1.4.3 prosemirror-transform: 1.9.0 dev: false @@ -17702,6 +17810,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==} @@ -17793,7 +17905,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.3)(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 @@ -17812,7 +17924,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 @@ -17859,9 +17971,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.1 chalk: 4.1.2 cross-spawn: 7.0.3 detect-port-alt: 1.1.6 @@ -17874,7 +17986,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 @@ -17884,7 +17996,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.3)(esbuild@0.21.3) transitivePeerDependencies: - eslint - supports-color @@ -17933,9 +18045,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 @@ -17997,7 +18109,7 @@ packages: peerDependencies: react: '>=16.13.1' dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 react: 18.2.0 dev: false @@ -18018,7 +18130,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 @@ -18130,7 +18242,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 @@ -18162,7 +18274,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): @@ -18179,12 +18291,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.3)(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 @@ -18197,14 +18309,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.1 camelcase: 6.3.0 case-sensitive-paths-webpack-plugin: 2.4.0 css-loader: 6.10.0(webpack@5.91.0) @@ -18225,7 +18337,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.1)(postcss@8.4.32) postcss-preset-env: 7.8.3(postcss@8.4.32) prompts: 2.4.2 react: 18.2.0 @@ -18238,10 +18350,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.3)(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.3)(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) @@ -18295,7 +18407,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): @@ -18324,7 +18436,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 @@ -18337,7 +18449,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 @@ -18345,14 +18457,14 @@ 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): @@ -18370,13 +18482,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: @@ -18458,15 +18570,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: @@ -18490,7 +18602,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: @@ -18527,7 +18639,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==} @@ -18732,8 +18844,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: @@ -18752,7 +18864,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 @@ -18781,11 +18892,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.1 /rollup@2.79.1: resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} @@ -18806,7 +18917,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: @@ -18821,7 +18932,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==} @@ -18906,7 +19017,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.3)(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==} @@ -18929,7 +19040,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.3)(esbuild@0.21.3) dev: true /sass@1.71.1: @@ -18944,8 +19055,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: @@ -19297,7 +19408,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.3)(esbuild@0.21.3) /source-map-resolve@0.5.3: resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==} @@ -19381,7 +19492,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 @@ -19394,7 +19505,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 @@ -19435,7 +19546,6 @@ packages: /stackblur-canvas@2.7.0: resolution: {integrity: sha512-yf7OENo23AGJhBriGx0QivY5JP6Y1HbrrDI6WLt6C5auYZXlQrheoY8hD4ibekFKz1HOfE48Ww8kMWMnJD/zcQ==} engines: {node: '>=0.1.14'} - requiresBuild: true dev: false optional: true @@ -19511,6 +19621,8 @@ 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.10(@babel/preset-env@7.22.6)(react-dom@18.2.0)(react@18.2.0): @@ -19706,7 +19818,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.3)(esbuild@0.21.3) /style-mod@4.1.2: resolution: {integrity: sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==} @@ -19724,7 +19836,7 @@ packages: peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.23.0 + browserslist: 4.23.1 postcss: 8.4.32 postcss-selector-parser: 6.1.0 @@ -19760,7 +19872,7 @@ packages: dependencies: '@jridgewell/gen-mapping': 0.3.5 commander: 4.1.1 - glob: 10.4.1 + glob: 10.4.2 lines-and-columns: 1.2.4 mz: 2.7.0 pirates: 4.0.6 @@ -19801,7 +19913,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 @@ -19838,15 +19949,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.3)(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.3 '@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.3)(esbuild@0.21.3) dev: true /swr@2.2.4(react@18.2.0): @@ -19876,8 +19987,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: @@ -19889,7 +20000,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 @@ -20000,7 +20111,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.3)(esbuild@0.21.3)(webpack@5.91.0): resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -20017,21 +20128,21 @@ packages: optional: true dependencies: '@jridgewell/trace-mapping': 0.3.25 - '@swc/core': 1.5.7 + '@swc/core': 1.6.3 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.1 + webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) - /terser@5.31.0: - resolution: {integrity: sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg==} + /terser@5.31.1: + resolution: {integrity: sha512-37upzU1+viGvuFtBo9NPufCb9dwM0+l9hMxYyWfBA+fbwrPqNJAhbZ6W47bBFnZHKHTUBnMvi87434qq+qnxOg==} engines: {node: '>=10'} hasBin: true dependencies: '@jridgewell/source-map': 0.3.6 - acorn: 8.11.3 + acorn: 8.12.0 commander: 2.20.3 source-map-support: 0.5.21 @@ -20045,7 +20156,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 @@ -20086,8 +20196,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 @@ -20208,10 +20319,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.3)(@types/node@17.0.45)(typescript@5.4.3): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -20226,14 +20337,14 @@ packages: optional: true dependencies: '@cspotcode/source-map-support': 0.8.1 - '@swc/core': 1.5.7 + '@swc/core': 1.6.3 '@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.0 + acorn-walk: 8.3.3 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 @@ -20264,7 +20375,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 @@ -20288,8 +20399,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==} @@ -20352,13 +20463,8 @@ packages: engines: {node: '>=12.20'} dev: true - /type-fest@4.18.2: - resolution: {integrity: sha512-+suCYpfJLAe4OXS6+PPXjW3urOS4IoP9waSiLuXfLgqZODKw/aWwASvzqE886wA0kQgGy0mIWyhd87VpqIy6Xg==} - engines: {node: '>=16'} - dev: false - - /type-fest@4.20.0: - resolution: {integrity: sha512-MBh+PHUHHisjXf4tlx0CFWoMdjx8zCMLJHOjnV1prABYZFHqtFOyauCIK2/7w4oIfwkF8iNhLtnJEfVY2vn3iw==} + /type-fest@4.20.1: + resolution: {integrity: sha512-R6wDsVsoS9xYOpy8vgeBlqpdOyzJ12HNfQhC/aAKWM3YoCV9TtunJzh/QpkMgeDhkoynDcw5f1y+qF9yc/HHyg==} engines: {node: '>=16'} dev: false @@ -20369,8 +20475,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: @@ -20413,9 +20519,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: @@ -20428,8 +20534,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: @@ -20440,8 +20546,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 @@ -20593,10 +20699,10 @@ packages: resolution: {integrity: sha512-d6Mhq8RJeGA8UfKCu54Um4lFA0eSaRa3XxdAJg8tIdxbu1ubW0hBCZUL7yI2uGyYCRndvbK8FLHzqy2XKfeMsg==} engines: {node: '>=14.0.0'} dependencies: - acorn: 8.11.3 + acorn: 8.12.0 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: @@ -20618,13 +20724,13 @@ packages: resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} engines: {node: '>=4'} - /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 @@ -20663,7 +20769,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): @@ -20698,7 +20804,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): @@ -20752,7 +20858,6 @@ packages: /utrie@1.0.2: resolution: {integrity: sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==} - requiresBuild: true dependencies: base64-arraybuffer: 1.0.2 dev: false @@ -20892,7 +20997,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.3)(esbuild@0.21.3) /webpack-dev-middleware@6.1.3(webpack@5.91.0): resolution: {integrity: sha512-A4ChP0Qj8oGociTs6UdlRUGANIGrCDL3y+pmQMc+dSsraXHCatFpmMey4mYELA+juqwUqwQsUgJJISXl1KWmiw==} @@ -20908,7 +21013,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.3)(esbuild@0.21.3) dev: true /webpack-dev-server@4.15.2(webpack@5.91.0): @@ -20943,7 +21048,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 @@ -20952,9 +21057,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.3)(esbuild@0.21.3) webpack-dev-middleware: 5.3.4(webpack@5.91.0) - ws: 8.17.0 + ws: 8.17.1 transitivePeerDependencies: - bufferutil - debug @@ -20976,7 +21081,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.3)(esbuild@0.21.3) webpack-sources: 2.3.1 /webpack-merge@5.10.0: @@ -21009,11 +21114,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.3)(esbuild@0.21.3): resolution: {integrity: sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==} engines: {node: '>=10.13.0'} hasBin: true @@ -21028,11 +21133,11 @@ 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 + acorn: 8.12.0 + acorn-import-assertions: 1.9.0(acorn@8.12.0) + browserslist: 4.23.1 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.17.0 es-module-lexer: 1.5.3 eslint-scope: 5.1.1 events: 3.3.0 @@ -21044,7 +21149,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.3)(esbuild@0.21.3)(webpack@5.91.0) watchpack: 2.4.1 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -21190,10 +21295,10 @@ packages: engines: {node: '>=10.0.0'} dependencies: '@apideck/better-ajv-errors': 0.3.6(ajv@8.16.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) + '@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 @@ -21308,7 +21413,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.3)(esbuild@0.21.3) webpack-sources: 1.4.3 workbox-build: 6.6.0 transitivePeerDependencies: @@ -21385,8 +21490,8 @@ packages: utf-8-validate: optional: 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 @@ -21401,14 +21506,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: @@ -21437,8 +21542,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 @@ -21476,7 +21581,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 @@ -21536,6 +21641,7 @@ packages: id: github.com/theopensystemslab/planx-core/ccca2ac 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) @@ -21554,10 +21660,10 @@ packages: json-schema-to-typescript: 14.0.5 lodash: 4.17.21 marked: 12.0.2 - prettier: 3.3.1 + prettier: 3.3.2 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - type-fest: 4.20.0 + type-fest: 4.20.1 uuid: 9.0.1 zod: 3.23.8 transitivePeerDependencies: From ce69e5a1ab3a540fdc32f6bf5c79ab7bf4410013 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Wed, 19 Jun 2024 13:53:08 +0100 Subject: [PATCH 046/150] fix(api): CVE-2024-37890 (#3298) --- api.planx.uk/package.json | 5 +- api.planx.uk/pnpm-lock.yaml | 678 +++++++++++++++++++----------------- 2 files changed, 362 insertions(+), 321 deletions(-) diff --git a/api.planx.uk/package.json b/api.planx.uk/package.json index b08ad2c506..cba612e645 100644 --- a/api.planx.uk/package.json +++ b/api.planx.uk/package.json @@ -30,7 +30,7 @@ "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", @@ -126,7 +126,8 @@ }, "overrides": { "follow-redirects@<=1.15.5": ">=1.15.6", - "braces@<3.0.3": ">=3.0.3" + "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 7b094e68b0..3a52421e30 100644 --- a/api.planx.uk/pnpm-lock.yaml +++ b/api.planx.uk/pnpm-lock.yaml @@ -7,6 +7,7 @@ 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': @@ -91,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 @@ -314,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 @@ -355,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 @@ -372,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 @@ -390,184 +391,195 @@ 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==} @@ -575,7 +587,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): @@ -584,7 +596,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): @@ -593,7 +605,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): @@ -602,7 +614,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): @@ -611,17 +623,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): @@ -630,7 +642,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): @@ -639,7 +651,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): @@ -648,7 +660,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): @@ -657,7 +669,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): @@ -666,7 +678,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): @@ -675,7 +687,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): @@ -685,42 +697,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): @@ -730,53 +746,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: @@ -802,8 +818,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 @@ -813,6 +829,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: @@ -850,7 +868,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 @@ -859,6 +877,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: @@ -887,7 +907,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) @@ -895,6 +915,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: @@ -1136,8 +1158,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.10.1: + resolution: {integrity: sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} /@eslint/eslintrc@2.1.4: @@ -1145,7 +1167,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 @@ -1207,7 +1229,7 @@ packages: 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 @@ -1502,28 +1524,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==} @@ -1551,10 +1568,10 @@ packages: react-dom: optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@floating-ui/react-dom': 2.1.0(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 @@ -1562,12 +1579,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.20: + resolution: {integrity: sha512-DoL2ppgldL16utL8nNyj/P12f8mCNdx/Hb/AJnX9rLY4b52hCMIx1kH83pbXQ6uMy6n54M3StmEbvSGoj2OFuA==} 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.20(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-tVq3l4qoXx/NxUgIx/x3lZiPn/5xDbdTE8VrLczNpfblLYZzlrbxA7kb9mI8NoBF6+w9WE9IrxWnKK5KlPI2bg==} engines: {node: '>=12.0.0'} peerDependencies: '@emotion/react': ^11.5.0 @@ -1587,14 +1604,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.20 + '@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 @@ -1605,8 +1622,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 @@ -1617,8 +1634,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 @@ -1638,7 +1655,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) @@ -1647,8 +1664,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 @@ -1665,13 +1682,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 @@ -1687,8 +1704,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 @@ -1699,7 +1716,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 @@ -1775,8 +1792,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 @@ -1785,20 +1802,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: @@ -1852,8 +1869,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.3: + resolution: {integrity: sha512-KOzM7MhcBFlmnlr/fzISFF5vGWVSvN6fTd4T+ExOt08bA/dA5kpSzY52nMsI1KDFmUREpJelPYyuslLRSjjgCg==} dependencies: '@types/node': 18.19.13 '@types/qs': 6.9.15 @@ -1864,7 +1881,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.3 '@types/qs': 6.9.15 '@types/serve-static': 1.15.7 @@ -1963,14 +1980,14 @@ packages: dependencies: undici-types: 5.26.5 - /@types/node@20.12.12: - resolution: {integrity: sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==} + /@types/node@20.14.5: + resolution: {integrity: sha512-aoRR+fJkZT2l0aGOJhuA8frnCSoNX6W7U2mpNq63+BxBIj5BQFt8rHy627kijCmm63ijdSdwvGgpUsU6MBsZZA==} 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 @@ -1984,14 +2001,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 @@ -2011,7 +2028,7 @@ packages: 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: @@ -2159,12 +2176,12 @@ packages: typescript: optional: true dependencies: - '@eslint-community/regexpp': 4.10.0 + '@eslint-community/regexpp': 4.10.1 '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.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) - debug: 4.3.4 + debug: 4.3.5 eslint: 8.57.0 graphemer: 1.4.0 ignore: 5.3.1 @@ -2189,7 +2206,7 @@ packages: '@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 + debug: 4.3.5 eslint: 8.57.0 typescript: 5.4.3 transitivePeerDependencies: @@ -2216,7 +2233,7 @@ packages: 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 + debug: 4.3.5 eslint: 8.57.0 tsutils: 3.21.0(typescript@5.4.3) typescript: 5.4.3 @@ -2240,7 +2257,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 @@ -2296,20 +2313,22 @@ 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 @@ -2322,7 +2341,7 @@ packages: resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} engines: {node: '>= 14'} dependencies: - debug: 4.3.4 + debug: 4.3.5 transitivePeerDependencies: - supports-color dev: false @@ -2561,7 +2580,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 @@ -2574,8 +2593,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 @@ -2584,8 +2603,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 @@ -2594,7 +2613,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 @@ -2715,15 +2734,15 @@ packages: 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.30001636 + electron-to-chromium: 1.4.806 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: @@ -2816,8 +2835,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.30001636: + resolution: {integrity: sha512-bMg2vmr8XBsbL6Lr0UHXy/21m84FTxDLWn2FSqMd5PrlbMxwJlQnC2YWYxVgp66PZE+BBNF2jYQUBKCo1FDeZg==} dev: true /capture-exit@2.0.0: @@ -2929,8 +2948,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: @@ -3219,9 +3238,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 @@ -3239,7 +3258,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: @@ -3302,6 +3321,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==} @@ -3442,7 +3473,7 @@ packages: resolution: {integrity: sha512-4SbcbedPXTciySXiSnNNLuJXpvxFe5nqivbiEHXyL8P/w0wx2uW7YXNjnYgjW0e2e6vy+L/tMISU/oAiXCl57Q==} engines: {node: '>=10'} dependencies: - '@types/node': 20.12.12 + '@types/node': 20.14.5 jszip: 3.10.1 nanoid: 5.0.7 xml: 1.0.1 @@ -3452,7 +3483,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 @@ -3520,8 +3551,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.806: + resolution: {integrity: sha512-nkoEX2QIB8kwCOtvtgwhXWy2IHVcOLQZu9Qo36uaGB835mdX/h8uLRlosL6QIhLVUnAiicXRW00PwaPZC74Nrg==} dev: true /emittery@0.13.1: @@ -3612,7 +3643,7 @@ packages: 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 transitivePeerDependencies: @@ -3727,7 +3758,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.10.1 '@eslint/eslintrc': 2.1.4 '@eslint/js': 8.57.0 '@humanwhocodes/config-array': 0.11.14 @@ -3737,7 +3768,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 @@ -3774,15 +3805,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 /esprima@4.0.1: @@ -4008,7 +4039,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: @@ -4196,8 +4227,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 @@ -4338,19 +4369,21 @@ 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 + foreground-child: 3.2.1 + jackspeak: 3.4.0 minimatch: 9.0.4 minipass: 7.1.2 + package-json-from-dist: 1.0.0 path-scurry: 1.11.1 /glob@7.1.6: resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} + deprecated: Glob versions prior to v9 are no longer supported dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -4362,6 +4395,7 @@ 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 @@ -4373,7 +4407,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==} @@ -4583,7 +4616,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.1 - debug: 4.3.4 + debug: 4.3.5 transitivePeerDependencies: - supports-color dev: false @@ -4623,7 +4656,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.1 - debug: 4.3.4 + debug: 4.3.5 transitivePeerDependencies: - supports-color dev: false @@ -4955,7 +4988,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 @@ -4968,7 +5001,7 @@ packages: 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 @@ -4989,7 +5022,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: @@ -5008,8 +5041,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 @@ -5244,7 +5277,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 @@ -5383,10 +5416,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 @@ -5523,8 +5556,8 @@ packages: 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 @@ -5532,7 +5565,7 @@ 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 @@ -5542,7 +5575,7 @@ packages: 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 @@ -5551,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 @@ -5563,7 +5596,6 @@ packages: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} hasBin: true - dev: true /json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} @@ -5576,11 +5608,11 @@ packages: 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 @@ -5623,7 +5655,6 @@ packages: chalk: 3.0.0 diff-match-patch: 1.0.5 dev: false - bundledDependencies: [] /jsonwebtoken@9.0.2: resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} @@ -5754,7 +5785,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 @@ -5896,9 +5927,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 @@ -5907,7 +5938,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: @@ -6131,7 +6162,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: @@ -6402,6 +6433,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 @@ -6416,7 +6450,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 @@ -6558,8 +6592,8 @@ packages: resolution: {integrity: sha512-qGIG4fYMqokNb5Ho21YNH9uB4NELYTb9oADiuzoL2+n1gs6QyoUKaTN+7eqT4VDC6syvcyark3YP9o2UmCk32A==} dev: false - /pino-pretty@11.1.0: - resolution: {integrity: sha512-PjBzFL7IMSl1YkS9cSVWC+4gONmW0Fi+fvUzy74zK6RJHk4RkfW+e22NydRrGEtBRa5n6/oPNLPqjUeQrzqcLQ==} + /pino-pretty@11.2.1: + resolution: {integrity: sha512-O05NuD9tkRasFRWVaF/uHLOvoRDFD7tb5VMertr78rbsYFjYp48Vg3477EshVAF5eZaEw+OpDl/tu+B0R5o+7g==} hasBin: true dependencies: colorette: 2.0.20 @@ -6815,7 +6849,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 @@ -6973,12 +7007,13 @@ 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==} + deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true dependencies: glob: 7.2.3 @@ -6996,13 +7031,17 @@ packages: 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.*} @@ -7058,8 +7097,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: @@ -7455,7 +7494,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 @@ -7523,8 +7562,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): @@ -7534,7 +7573,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: @@ -7585,8 +7624,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 @@ -7737,8 +7777,8 @@ 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 @@ -7819,8 +7859,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: @@ -7879,13 +7919,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 @@ -8098,8 +8138,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 @@ -8115,7 +8155,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: @@ -8245,7 +8285,7 @@ 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) + '@mui/material': 5.15.20(@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.16.0 ajv-formats: 2.1.1(ajv@8.16.0) From b5493f182fe9208984066c6c8fc7571b9247fb3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Wed, 19 Jun 2024 13:53:29 +0100 Subject: [PATCH 047/150] chore: Bump extra long text input limit to 750 characters (#3299) --- editor.planx.uk/src/@planx/components/TextInput/Editor.tsx | 2 +- .../src/@planx/components/TextInput/TextInput.stories.tsx | 2 +- editor.planx.uk/src/@planx/components/TextInput/model.ts | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/editor.planx.uk/src/@planx/components/TextInput/Editor.tsx b/editor.planx.uk/src/@planx/components/TextInput/Editor.tsx index 605e538acf..4f0eb7f051 100644 --- a/editor.planx.uk/src/@planx/components/TextInput/Editor.tsx +++ b/editor.planx.uk/src/@planx/components/TextInput/Editor.tsx @@ -78,7 +78,7 @@ const TextInputComponent: React.FC = (props) => { { id: "default", title: "Default" }, { id: "short", title: "Short (max 120 characters)" }, { id: "long", title: "Long (max 250 characters)" }, - { id: "extraLong", title: "Extra long (max 500 characters)" }, + { id: "extraLong", title: "Extra long (max 750 characters)" }, { id: "email", title: "Email" }, { id: "phone", title: "Phone" }, ].map((type) => ( diff --git a/editor.planx.uk/src/@planx/components/TextInput/TextInput.stories.tsx b/editor.planx.uk/src/@planx/components/TextInput/TextInput.stories.tsx index 6d1f59567a..489ce86507 100644 --- a/editor.planx.uk/src/@planx/components/TextInput/TextInput.stories.tsx +++ b/editor.planx.uk/src/@planx/components/TextInput/TextInput.stories.tsx @@ -42,7 +42,7 @@ export const EmptyFormLongText: StoryObj = { export const EmptyFormExtraLongText: StoryObj = { args: { title: "Describe your project", - description: "Be as descriptive as you can. You have 500 characters.", + description: "Be as descriptive as you can. You have 750 characters.", type: TextInputType.ExtraLong, }, }; diff --git a/editor.planx.uk/src/@planx/components/TextInput/model.ts b/editor.planx.uk/src/@planx/components/TextInput/model.ts index 4d913f659f..f378c22fd6 100644 --- a/editor.planx.uk/src/@planx/components/TextInput/model.ts +++ b/editor.planx.uk/src/@planx/components/TextInput/model.ts @@ -32,7 +32,7 @@ export const userDataSchema = ({ type }: TextInput): SchemaOf => return "Your answer must be 250 characters or fewer."; } if (type === TextInputType.ExtraLong) { - return "Your answer must be 500 characters or fewer."; + return "Your answer must be 750 characters or fewer."; } if (type === TextInputType.Email) { return "Enter an email address in the correct format, like name@example.com"; @@ -52,7 +52,7 @@ export const userDataSchema = ({ type }: TextInput): SchemaOf => return Boolean(value && value.length <= 250); } if (type === TextInputType.ExtraLong) { - return Boolean(value && value.length <= 500); + return Boolean(value && value.length <= 750); } if (type === TextInputType.Email) { return Boolean(value && emailRegex.test(value)); From 1b2e1e2129c2ee263b15f086ecc7fa76cba41bba Mon Sep 17 00:00:00 2001 From: Rory Doak <138574807+RODO94@users.noreply.github.com> Date: Thu, 20 Jun 2024 11:57:58 +0100 Subject: [PATCH 048/150] feat: adding new "team_settings" table to Hasura (#3289) --- hasura.planx.uk/metadata/tables.yaml | 116 ++++++++++++++++++ .../down.sql | 1 + .../up.sql | 26 ++++ .../down.sql | 1 + .../up.sql | 15 +++ 5 files changed, 159 insertions(+) create mode 100644 hasura.planx.uk/migrations/1718719894002_create_table_public_team_settings/down.sql create mode 100644 hasura.planx.uk/migrations/1718719894002_create_table_public_team_settings/up.sql create mode 100644 hasura.planx.uk/migrations/1718728257637_populate_team_settings_table/down.sql create mode 100644 hasura.planx.uk/migrations/1718728257637_populate_team_settings_table/up.sql diff --git a/hasura.planx.uk/metadata/tables.yaml b/hasura.planx.uk/metadata/tables.yaml index cd5f0e6376..d96ec6375d 100644 --- a/hasura.planx.uk/metadata/tables.yaml +++ b/hasura.planx.uk/metadata/tables.yaml @@ -1649,6 +1649,122 @@ - role: platformAdmin permission: filter: {} +- table: + name: team_settings + schema: public + object_relationships: + - name: team + using: + foreign_key_constraint_on: team_id + select_permissions: + - role: api + permission: + columns: + - has_planning_data + - id + - team_id + - boundary_json + - boundary_url + - email_reply_to_id + - external_planning_site_name + - external_planning_site_url + - help_email + - help_opening_hours + - help_phone + - homepage + - reference_code + filter: {} + comment: "" + - role: platformAdmin + permission: + columns: + - has_planning_data + - id + - team_id + - boundary_json + - boundary_url + - email_reply_to_id + - external_planning_site_name + - external_planning_site_url + - help_email + - help_opening_hours + - help_phone + - homepage + - reference_code + filter: {} + comment: "" + - role: public + permission: + columns: + - boundary_json + - boundary_url + - external_planning_site_name + - external_planning_site_url + - has_planning_data + - homepage + - id + - reference_code + - team_id + filter: {} + comment: "" + - role: teamEditor + permission: + columns: + - has_planning_data + - id + - team_id + - boundary_json + - boundary_url + - email_reply_to_id + - external_planning_site_name + - external_planning_site_url + - help_email + - help_opening_hours + - help_phone + - homepage + - reference_code + filter: {} + comment: "" + update_permissions: + - role: platformAdmin + permission: + columns: + - boundary_url + - email_reply_to_id + - external_planning_site_name + - external_planning_site_url + - has_planning_data + - help_email + - help_opening_hours + - help_phone + - homepage + - reference_code + filter: {} + check: null + comment: "" + - role: teamEditor + permission: + columns: + - boundary_url + - email_reply_to_id + - external_planning_site_name + - external_planning_site_url + - has_planning_data + - help_email + - help_opening_hours + - help_phone + - homepage + - reference_code + filter: + team: + members: + _and: + - user_id: + _eq: x-hasura-user-id + - role: + _eq: teamEditor + check: null + comment: "" - table: name: team_themes schema: public diff --git a/hasura.planx.uk/migrations/1718719894002_create_table_public_team_settings/down.sql b/hasura.planx.uk/migrations/1718719894002_create_table_public_team_settings/down.sql new file mode 100644 index 0000000000..29fc26cbc2 --- /dev/null +++ b/hasura.planx.uk/migrations/1718719894002_create_table_public_team_settings/down.sql @@ -0,0 +1 @@ +DROP TABLE "public"."team_settings"; diff --git a/hasura.planx.uk/migrations/1718719894002_create_table_public_team_settings/up.sql b/hasura.planx.uk/migrations/1718719894002_create_table_public_team_settings/up.sql new file mode 100644 index 0000000000..50faf5931a --- /dev/null +++ b/hasura.planx.uk/migrations/1718719894002_create_table_public_team_settings/up.sql @@ -0,0 +1,26 @@ +CREATE TABLE "public"."team_settings" ("id" serial NOT NULL, +"team_id" integer NOT NULL, +"reference_code" text, +"homepage" text, +"help_email" text NOT NULL DEFAULT 'example@council.gov.uk', +"help_phone" text NOT NULL DEFAULT '(01234) 567890', +"help_opening_hours" text NOT NULL DEFAULT 'Monday - Friday, 9am - 5pm', +"email_reply_to_id" text NOT NULL DEFAULT '727d48fa-cb8a-42f9-b8b2-55032f3bb451', +"has_planning_data" boolean NOT NULL DEFAULT False, +"external_planning_site_url" text DEFAULT 'https://www.planningportal.co.uk/', +"external_planning_site_name" text DEFAULT 'Planning Portal', +"boundary_url" text, +"boundary_json" jsonb NOT NULL DEFAULT '{"type": "Feature", "geometry": {"type": "Polygon", "coordinates": [[[1.9134116, 49.528423], [1.9134116, 61.331151], [1.9134116, 61.331151], [-10.76418, 61.331151], [-10.76418, 49.528423]]]}, "properties": {}}'::jsonb, +PRIMARY KEY ("id") , +FOREIGN KEY ("team_id") REFERENCES "public"."teams"("id") ON UPDATE cascade ON DELETE cascade, +UNIQUE ("id"), UNIQUE ("team_id"), UNIQUE ("reference_code")); +COMMENT ON TABLE "public"."team_settings" IS E'Global settings for boundary and contact details'; + +comment on column "public"."team_settings"."reference_code" is E'Team name in three letter short form'; +comment on column "public"."team_settings"."team_id" is E'Linked ID to Teams table'; +comment on column "public"."team_settings"."help_phone" is E'For use in gov notify emails'; +comment on column "public"."team_settings"."help_email" is E'For use in gov notify emails'; +comment on column "public"."team_settings"."help_opening_hours" is E'For use in gov notify emails'; +comment on column "public"."team_settings"."email_reply_to_id" is E'Generate by gov notify and relates to the "reply to" address in notifications'; +comment on column "public"."team_settings"."boundary_url" is E'User entered boundary linked to https://www.planning.data.gov.uk/'; +comment on column "public"."team_settings"."boundary_json" is E'Long form boundary geojson - used to compute boundary_bbox'; diff --git a/hasura.planx.uk/migrations/1718728257637_populate_team_settings_table/down.sql b/hasura.planx.uk/migrations/1718728257637_populate_team_settings_table/down.sql new file mode 100644 index 0000000000..62c33be674 --- /dev/null +++ b/hasura.planx.uk/migrations/1718728257637_populate_team_settings_table/down.sql @@ -0,0 +1 @@ +TRUNCATE TABLE "public"."team_settings"; \ No newline at end of file diff --git a/hasura.planx.uk/migrations/1718728257637_populate_team_settings_table/up.sql b/hasura.planx.uk/migrations/1718728257637_populate_team_settings_table/up.sql new file mode 100644 index 0000000000..fb867822dd --- /dev/null +++ b/hasura.planx.uk/migrations/1718728257637_populate_team_settings_table/up.sql @@ -0,0 +1,15 @@ +INSERT INTO team_settings (team_id, reference_code, homepage, help_email, help_phone,help_opening_hours ,email_reply_to_id,has_planning_data , external_planning_site_url,external_planning_site_name,boundary_url,boundary_json) +SELECT +id as team_id, +reference_code, +settings ->> 'homepage' as homepage, +COALESCE(notify_personalisation ->> 'helpEmail', 'example@council.co.uk') as help_email, +COALESCE(notify_personalisation ->> 'helpPhone', '(01234) 567890') as help_phone, +COALESCE(notify_personalisation ->> 'helpOpeningHours', 'Monday - Friday, 9am - 5pm') as help_opening_hours, +COALESCE(notify_personalisation ->> 'emailReplyToId', '727d48fa-cb8a-42f9-b8b2-55032f3bb451') as email_reply_to_id, +CAST(COALESCE(settings ->> 'hasPlanningData', 'false' ) as boolean) as has_planning_data, +COALESCE(settings #>> '{externalPlanningSite,url}', 'https://www.planningportal.co.uk/' ) as external_planning_site_url, +COALESCE(settings #>> '{externalPlanningSite,name}', 'Planning Portal') as external_planning_site_name, +settings ->> 'boundary' as boundary_url, +boundary as boundary_json +FROM teams; From dd70f913f2f2c676f1c97f638a6bc4a343fd70d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Thu, 20 Jun 2024 14:39:56 +0100 Subject: [PATCH 049/150] fix: Maintain redirect on login (#3302) --- editor.planx.uk/src/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/editor.planx.uk/src/index.tsx b/editor.planx.uk/src/index.tsx index 8dc76d99d6..9e178d4167 100644 --- a/editor.planx.uk/src/index.tsx +++ b/editor.planx.uk/src/index.tsx @@ -48,7 +48,7 @@ const hasJWT = (): boolean | void => { // Remove JWT from URL, and re-run this function setCookie("jwt", jwtSearchParams); setCookie("auth", { loggedIn: true }); - window.location.href = "/"; + window.history.go(-1); }; const Layout: React.FC<{ From 3e062835ded33c380f374467c82a04dee2bb70d2 Mon Sep 17 00:00:00 2001 From: Ian Jones <51156018+ianjon3s@users.noreply.github.com> Date: Thu, 20 Jun 2024 14:53:11 +0100 Subject: [PATCH 050/150] feat: Updated editor header styles (#3301) --- editor.planx.uk/src/components/Header.tsx | 59 ++++++++++++----------- 1 file changed, 31 insertions(+), 28 deletions(-) diff --git a/editor.planx.uk/src/components/Header.tsx b/editor.planx.uk/src/components/Header.tsx index 00f9fc66ed..fefadf8f55 100644 --- a/editor.planx.uk/src/components/Header.tsx +++ b/editor.planx.uk/src/components/Header.tsx @@ -19,7 +19,6 @@ import { styled, Theme } from "@mui/material/styles"; import MuiToolbar from "@mui/material/Toolbar"; import Typography from "@mui/material/Typography"; import useMediaQuery from "@mui/material/useMediaQuery"; -import { visuallyHidden } from "@mui/utils"; import { ComponentType as TYPES } from "@opensystemslab/planx-core/types"; import { clearLocalFlow } from "lib/local"; import { capitalize } from "lodash"; @@ -48,8 +47,8 @@ import TestEnvironmentBanner from "./TestEnvironmentBanner"; export const HEADER_HEIGHT = 74; -const Root = styled(AppBar)(() => ({ - color: "#fff", +const Root = styled(AppBar)(({ theme }) => ({ + color: theme.palette.common.white, })); const BreadcrumbsRoot = styled(Box)(() => ({ @@ -60,6 +59,12 @@ const BreadcrumbsRoot = styled(Box)(() => ({ alignItems: "center", })); +const BreadcrumbsLink = styled(Link)(({ theme }) => ({ + color: theme.palette.common.white, + textDecoration: "none", + borderBottom: "1px solid currentColor", +})) as typeof Link; + const StyledToolbar = styled(MuiToolbar)(() => ({ height: HEADER_HEIGHT, })); @@ -103,7 +108,7 @@ const StyledPopover = styled(Popover)(({ theme }) => ({ const StyledPaper = styled(Paper)(({ theme }) => ({ backgroundColor: theme.palette.background.dark, - color: "#fff", + color: theme.palette.common.white, borderRadius: 0, boxShadow: "none", minWidth: 180, @@ -131,7 +136,7 @@ const SkipLink = styled("a")(({ theme }) => ({ width: "100vw", height: HEADER_HEIGHT / 2, backgroundColor: theme.palette.background.dark, - color: "#fff", + color: theme.palette.common.white, textDecoration: "underline", padding: theme.spacing(1), paddingLeft: theme.spacing(3), @@ -203,33 +208,25 @@ const Breadcrumbs: React.FC = () => { return ( - Plan✕ - + {team.slug && ( <> {" / "} - {team.slug} - + )} {route.data.flow && ( @@ -467,26 +464,32 @@ const EditorToolbar: React.FC<{ )} - + + {user.firstName[0]} {user.lastName[0]} - - + + Menu + From fd6112e21c4e1bbfe1557ef1d8de863a4e3af812 Mon Sep 17 00:00:00 2001 From: Ian Jones <51156018+ianjon3s@users.noreply.github.com> Date: Thu, 20 Jun 2024 17:20:21 +0100 Subject: [PATCH 051/150] fix: Image upload stretch and design settings (#3306) --- .../Settings/DesignSettings/index.tsx | 2 ++ editor.planx.uk/src/ui/editor/ImgInput.tsx | 24 +++++++++++++------ 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/index.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/index.tsx index 4432b3d39c..8c3bd88565 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/index.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/index.tsx @@ -22,6 +22,8 @@ export const DesignPreview = styled(Box)(({ theme }) => ({ border: `2px solid ${theme.palette.border.input}`, padding: theme.spacing(2), boxShadow: "4px 4px 0px rgba(150, 150, 150, 0.5)", + display: "flex", + justifyContent: "center", })); export const EXAMPLE_COLOUR = "#007078"; diff --git a/editor.planx.uk/src/ui/editor/ImgInput.tsx b/editor.planx.uk/src/ui/editor/ImgInput.tsx index 6134c3b829..90d3216d9c 100644 --- a/editor.planx.uk/src/ui/editor/ImgInput.tsx +++ b/editor.planx.uk/src/ui/editor/ImgInput.tsx @@ -27,6 +27,14 @@ const StyledIconButton = styled(IconButton)(({ theme }) => ({ marginLeft: theme.spacing(0.5), })); +const ImageWrapper = styled(Box)(() => ({ + width: 50, + height: 50, + display: "flex", + justifyContent: "center", + alignItems: "center", +})); + /** Uploads an image and returns corresponding URL */ export default function ImgInput({ img, @@ -86,13 +94,15 @@ export default function ImgInput({ Remove - embedded img + + embedded img + ) : ( From 0cb8424e4ed5cfd998ec43fbc765563915f18b1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Thu, 20 Jun 2024 17:29:06 +0100 Subject: [PATCH 052/150] chore: Make `SettingsForm` shared and generic (#3308) --- .../Settings/DesignSettings/ButtonForm.tsx | 5 +- .../Settings/DesignSettings/FaviconForm.tsx | 5 +- .../Settings/DesignSettings/TextLinkForm.tsx | 5 +- .../DesignSettings/ThemeAndLogoForm.tsx | 5 +- .../Settings/DesignSettings/index.tsx | 62 +----------------- .../Settings/shared/SettingsForm.tsx | 65 +++++++++++++++++++ 6 files changed, 78 insertions(+), 69 deletions(-) create mode 100644 editor.planx.uk/src/pages/FlowEditor/components/Settings/shared/SettingsForm.tsx diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/ButtonForm.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/ButtonForm.tsx index 763d5b815b..e4f4adc681 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/ButtonForm.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/ButtonForm.tsx @@ -11,7 +11,8 @@ import InputDescription from "ui/editor/InputDescription"; import InputRow from "ui/shared/InputRow"; import InputRowItem from "ui/shared/InputRowItem"; -import { DesignPreview, FormProps, SettingsForm } from "."; +import { DesignPreview, FormProps } from "."; +import { SettingsForm } from "../shared/SettingsForm"; export const ButtonForm: React.FC = ({ formikConfig, @@ -33,7 +34,7 @@ export const ButtonForm: React.FC = ({ }); return ( - formik={formik} legend="Button colour" description={ diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/FaviconForm.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/FaviconForm.tsx index a037686bc3..3a7fa0f608 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/FaviconForm.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/FaviconForm.tsx @@ -10,7 +10,8 @@ import InputRow from "ui/shared/InputRow"; import InputRowItem from "ui/shared/InputRowItem"; import InputRowLabel from "ui/shared/InputRowLabel"; -import { FormProps, SettingsForm } from "."; +import { FormProps } from "."; +import { SettingsForm } from "../shared/SettingsForm"; export const FaviconForm: React.FC = ({ formikConfig, @@ -36,7 +37,7 @@ export const FaviconForm: React.FC = ({ : formik.setFieldValue("favicon", null); return ( - formik={formik} legend="Favicon" description={ diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/TextLinkForm.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/TextLinkForm.tsx index a9891cff38..98c0fea0e6 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/TextLinkForm.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/TextLinkForm.tsx @@ -9,7 +9,8 @@ import InputDescription from "ui/editor/InputDescription"; import InputRow from "ui/shared/InputRow"; import InputRowItem from "ui/shared/InputRowItem"; -import { DesignPreview, FormProps, SettingsForm } from "."; +import { DesignPreview, FormProps } from "."; +import { SettingsForm } from "../shared/SettingsForm"; export const TextLinkForm: React.FC = ({ formikConfig, @@ -43,7 +44,7 @@ export const TextLinkForm: React.FC = ({ }); return ( - formik={formik} legend="Text link colour" description={ diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/ThemeAndLogoForm.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/ThemeAndLogoForm.tsx index b87fe60999..afc872074f 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/ThemeAndLogoForm.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/ThemeAndLogoForm.tsx @@ -12,7 +12,8 @@ import InputRow from "ui/shared/InputRow"; import InputRowItem from "ui/shared/InputRowItem"; import InputRowLabel from "ui/shared/InputRowLabel"; -import { DesignPreview, FormProps, SettingsForm } from "."; +import { DesignPreview, FormProps } from "."; +import { SettingsForm } from "../shared/SettingsForm"; export const ThemeAndLogoForm: React.FC = ({ formikConfig, @@ -54,7 +55,7 @@ export const ThemeAndLogoForm: React.FC = ({ : formik.setFieldValue("logo", null); return ( - formik={formik} legend="Theme colour & logo" description={ diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/index.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/index.tsx index 8c3bd88565..b791d4f2d3 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/index.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/index.tsx @@ -1,17 +1,13 @@ import Alert from "@mui/material/Alert"; import Box from "@mui/material/Box"; -import Button from "@mui/material/Button"; import Snackbar from "@mui/material/Snackbar"; import { styled } from "@mui/material/styles"; import Typography from "@mui/material/Typography"; import { TeamTheme } from "@opensystemslab/planx-core/types"; -import { FormikConfig, FormikProps } from "formik"; +import { FormikConfig } from "formik"; import { useStore } from "pages/FlowEditor/lib/store"; import React, { useEffect, useState } from "react"; import EditorRow from "ui/editor/EditorRow"; -import InputGroup from "ui/editor/InputGroup"; -import InputLegend from "ui/editor/InputLegend"; -import ErrorWrapper from "ui/shared/ErrorWrapper"; import { ButtonForm } from "./ButtonForm"; import { FaviconForm } from "./FaviconForm"; @@ -28,67 +24,11 @@ export const DesignPreview = styled(Box)(({ theme }) => ({ export const EXAMPLE_COLOUR = "#007078"; -type SettingsFormProps = { - legend: string; - description: React.ReactElement; - input: React.ReactElement; - formik: FormikProps; - preview?: React.ReactElement; -}; - export interface FormProps { formikConfig: FormikConfig; onSuccess: () => void; } -export const SettingsForm: React.FC = ({ - formik, - legend, - description, - input, - preview, -}) => { - return ( - - - - {legend} - {description} - {input} - - {preview && ( - - - Preview: - - {preview} - - )} - - - - - - - - - ); -}; - const DesignSettings: React.FC = () => { const [formikConfig, setFormikConfig] = useState< FormikConfig | undefined diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/shared/SettingsForm.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/shared/SettingsForm.tsx new file mode 100644 index 0000000000..99e001d097 --- /dev/null +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/shared/SettingsForm.tsx @@ -0,0 +1,65 @@ +import Box from "@mui/material/Box"; +import Button from "@mui/material/Button"; +import Typography from "@mui/material/Typography"; +import { FormikProps } from "formik"; +import React from "react"; +import EditorRow from "ui/editor/EditorRow"; +import InputGroup from "ui/editor/InputGroup"; +import InputLegend from "ui/editor/InputLegend"; +import ErrorWrapper from "ui/shared/ErrorWrapper"; + +type SettingsFormProps = { + legend: string; + description: React.ReactElement; + input: React.ReactElement; + formik: FormikProps; + preview?: React.ReactElement; +}; + +export const SettingsForm = ({ + formik, + legend, + description, + input, + preview, +}: SettingsFormProps) => { + return ( + +
    + + {legend} + {description} + {input} + + {preview && ( + + + Preview: + + {preview} + + )} + + + + + + + +
    + ); +}; \ No newline at end of file From e8e5f9297c63d750c8ba6e5ed9241d1c3ee02f6a Mon Sep 17 00:00:00 2001 From: augustlindemer <118665588+augustlindemer@users.noreply.github.com> Date: Thu, 20 Jun 2024 17:32:31 +0100 Subject: [PATCH 053/150] feat: Add non-residential floorspace to list component and schema (#3309) --- .../src/@planx/components/List/Editor.tsx | 2 + .../components/List/schemas/Floorspace.ts | 171 ++++++++++++++++++ 2 files changed, 173 insertions(+) create mode 100644 editor.planx.uk/src/@planx/components/List/schemas/Floorspace.ts diff --git a/editor.planx.uk/src/@planx/components/List/Editor.tsx b/editor.planx.uk/src/@planx/components/List/Editor.tsx index 0d6ce1454f..b62e8daa30 100644 --- a/editor.planx.uk/src/@planx/components/List/Editor.tsx +++ b/editor.planx.uk/src/@planx/components/List/Editor.tsx @@ -24,6 +24,7 @@ import { ResidentialUnitsExisting } from "./schemas/ResidentialUnits/Existing"; import { ResidentialUnitsGLAGained } from "./schemas/ResidentialUnits/GLA/Gained"; import { ResidentialUnitsGLALost } from "./schemas/ResidentialUnits/GLA/Lost"; import { ResidentialUnitsProposed } from "./schemas/ResidentialUnits/Proposed"; +import { NonResidentialFloorspace } from "./schemas/Floorspace"; type Props = EditorProps; @@ -35,6 +36,7 @@ export const SCHEMAS = [ schema: ResidentialUnitsGLAGained, }, { name: "Residential units (GLA) - Lost", schema: ResidentialUnitsGLALost }, + { name: "Non-residential floorspace", schema: NonResidentialFloorspace }, { name: "Existing and proposed uses (GLA)", schema: ExistingAndProposedUsesGLA, 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..e0329432c3 --- /dev/null +++ b/editor.planx.uk/src/@planx/components/List/schemas/Floorspace.ts @@ -0,0 +1,171 @@ +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; From ad816b927645e9033fcb6ea269b3cf41cc3d1efa Mon Sep 17 00:00:00 2001 From: Ian Jones <51156018+ianjon3s@users.noreply.github.com> Date: Fri, 21 Jun 2024 12:13:44 +0100 Subject: [PATCH 054/150] feat: Updated editor teams and team selection pages (#3303) --- .../ui-driven/src/create-flow/helpers.ts | 2 +- e2e/tests/ui-driven/src/login.spec.ts | 6 +- editor.planx.uk/src/pages/Team.tsx | 179 +++++++++--------- editor.planx.uk/src/pages/Teams.tsx | 118 ++++++++---- editor.planx.uk/src/routes/authenticated.tsx | 6 +- editor.planx.uk/src/ui/editor/Dashboard.tsx | 22 +++ 6 files changed, 203 insertions(+), 130 deletions(-) create mode 100644 editor.planx.uk/src/ui/editor/Dashboard.tsx 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/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/editor.planx.uk/src/pages/Team.tsx b/editor.planx.uk/src/pages/Team.tsx index d530c235f8..fc6ee62a4c 100644 --- a/editor.planx.uk/src/pages/Team.tsx +++ b/editor.planx.uk/src/pages/Team.tsx @@ -1,10 +1,11 @@ import { gql } from "@apollo/client"; -import Add from "@mui/icons-material/Add"; +import AddCircleOutlineIcon from "@mui/icons-material/AddCircleOutline"; import Edit from "@mui/icons-material/Edit"; import Visibility from "@mui/icons-material/Visibility"; import Box from "@mui/material/Box"; import Button from "@mui/material/Button"; import ButtonBase from "@mui/material/ButtonBase"; +import Container from "@mui/material/Container"; import Dialog from "@mui/material/Dialog"; import DialogActions from "@mui/material/DialogActions"; import DialogContent from "@mui/material/DialogContent"; @@ -12,10 +13,11 @@ import DialogContentText from "@mui/material/DialogContentText"; import DialogTitle from "@mui/material/DialogTitle"; import { styled } from "@mui/material/styles"; import Typography from "@mui/material/Typography"; -import orderBy from "lodash/orderBy"; import React, { useCallback, useEffect, useState } from "react"; import { Link, useNavigation } from "react-navi"; import { FONT_WEIGHT_SEMI_BOLD } from "theme"; +import { borderedFocusStyle } from "theme"; +import Dashboard from "ui/editor/Dashboard"; import { slugify } from "utils"; import { client } from "../lib/graphql"; @@ -24,21 +26,11 @@ import { useStore } from "./FlowEditor/lib/store"; import { formatLastEditMessage } from "./FlowEditor/utils"; const Root = styled(Box)(({ theme }) => ({ - backgroundColor: theme.palette.background.dark, - color: "#fff", + backgroundColor: theme.palette.background.default, width: "100%", - flex: 1, - justifyContent: "flex-start", - alignItems: "center", -})); - -const Dashboard = styled(Box)(({ theme }) => ({ - backgroundColor: theme.palette.background.dark, - color: "#fff", - width: "100%", - maxWidth: 600, - margin: "auto", - padding: theme.spacing(8, 0, 4, 0), + display: "flex", + alignItems: "flex-start", + flexGrow: 1, })); const DashboardList = styled("ul")(({ theme }) => ({ @@ -50,7 +42,13 @@ const DashboardList = styled("ul")(({ theme }) => ({ const DashboardListItem = styled("li")(({ theme }) => ({ listStyle: "none", position: "relative", - padding: theme.spacing(2.5, 2), + color: theme.palette.common.white, + margin: theme.spacing(1, 0), + background: theme.palette.text.primary, + display: "flex", + justifyContent: "space-between", + alignItems: "stretch", + borderRadius: "2px", })); const DashboardLink = styled(Link)(({ theme }) => ({ @@ -59,21 +57,23 @@ const DashboardLink = styled(Link)(({ theme }) => ({ textDecoration: "none", color: "currentColor", fontWeight: FONT_WEIGHT_SEMI_BOLD, - marginBottom: theme.spacing(1.5), - marginTop: 0, + padding: theme.spacing(2), + margin: 0, + width: "100%", + "&:focus-within": { + ...borderedFocusStyle, + }, })); const StyledSimpleMenu = styled(SimpleMenu)(({ theme }) => ({ - position: "absolute", - top: theme.spacing(2), - right: theme.spacing(1), + display: "flex", + borderLeft: `1px solid ${theme.palette.border.main}`, })); -const LinkSubText = styled(Box)(() => ({ - color: "#aaa", - "& a": { - color: "#fff", - }, +const LinkSubText = styled(Box)(({ theme }) => ({ + color: theme.palette.grey[400], + fontWeight: "normal", + paddingTop: "0.5em", })); const Confirm = ({ @@ -113,13 +113,12 @@ const Confirm = ({ ); const AddButtonRoot = styled(ButtonBase)(({ theme }) => ({ - width: "100%", - padding: theme.spacing(4), fontSize: 20, - backgroundColor: "rgba(255,255,255,0.25)", - display: "block", + display: "flex", + alignItems: "center", textAlign: "left", - marginTop: theme.spacing(2), + color: theme.palette.primary.main, + fontWeight: FONT_WEIGHT_SEMI_BOLD, })); function AddButton({ @@ -131,7 +130,7 @@ function AddButton({ }): FCReturn { return ( - {children} + {children} ); } @@ -191,17 +190,17 @@ const FlowItem: React.FC = ({ /> )} - - + + {flow.name} - + {formatLastEditMessage( flow.operations[0].createdAt, flow.operations[0]?.actor, )} - + {useStore.getState().canUserEditTeam(teamSlug) && ( { return ( - - - My services - - {useStore.getState().canUserEditTeam(slug) ? ( - - ) : ( - - )} - - {useStore.getState().canUserEditTeam(slug) && ( - { - const newFlowName = prompt("Service name"); - if (newFlowName) { - const newFlowSlug = slugify(newFlowName); - useStore - .getState() - .createFlow(teamId, newFlowSlug, newFlowName) - .then((newId: string) => { - navigation.navigate(`/${slug}/${newId}`); - }); - } + + - Add a new service - - )} - {flows && ( - - {flows.map((flow: any) => ( - { - fetchFlows(); + + + Services + + {useStore.getState().canUserEditTeam(slug) ? ( + + ) : ( + + )} + + {useStore.getState().canUserEditTeam(slug) && ( + { + const newFlowName = prompt("Service name"); + if (newFlowName) { + const newFlowSlug = slugify(newFlowName); + useStore + .getState() + .createFlow(teamId, newFlowSlug, newFlowName) + .then((newId: string) => { + navigation.navigate(`/${slug}/${newId}`); + }); + } }} - /> - ))} - - )} + > + Add a new service + + )} +
    + {flows && ( + + {flows.map((flow: any) => ( + { + fetchFlows(); + }} + /> + ))} + + )} + ); diff --git a/editor.planx.uk/src/pages/Teams.tsx b/editor.planx.uk/src/pages/Teams.tsx index ea11e0d1b1..f8208dd2c9 100644 --- a/editor.planx.uk/src/pages/Teams.tsx +++ b/editor.planx.uk/src/pages/Teams.tsx @@ -1,71 +1,109 @@ -import Edit from "@mui/icons-material/Edit"; -import Visibility from "@mui/icons-material/Visibility"; import Box from "@mui/material/Box"; import Card from "@mui/material/Card"; +import Container from "@mui/material/Container"; import { styled } from "@mui/material/styles"; import Typography from "@mui/material/Typography"; import { Team } from "@opensystemslab/planx-core/types"; import React from "react"; import { Link } from "react-navi"; +import { borderedFocusStyle } from "theme"; +import Dashboard from "ui/editor/Dashboard"; import { useStore } from "./FlowEditor/lib/store"; +interface TeamTheme { + slug: string; + primaryColour: string; +} + interface Props { teams: Array; + teamTheme: Array; } -const Root = styled(Box)(({ theme }) => ({ - backgroundColor: theme.palette.background.dark, - color: "#fff", +export const Root = styled(Box)(({ theme }) => ({ + backgroundColor: theme.palette.background.default, width: "100%", - flex: 1, + display: "flex", + alignItems: "flex-start", + flexGrow: 1, +})); + +const StyledLink = styled(Link)(() => ({ + textDecoration: "none", + "&:focus-within > div": { + ...borderedFocusStyle, + }, +})); + +const TeamCard = styled(Card)(({ theme }) => ({ + display: "flex", justifyContent: "flex-start", alignItems: "center", + marginBottom: theme.spacing(2), + color: theme.palette.text.primary, + outline: `1px solid ${theme.palette.border.light}`, + outlineOffset: "-1px", + borderRadius: "1px", })); -const Dashboard = styled(Box)(({ theme }) => ({ - backgroundColor: theme.palette.background.dark, - color: "#fff", - width: "100%", - maxWidth: 600, - margin: "auto", - padding: theme.spacing(8, 0, 4, 0), +const TeamColourBand = styled(Box)(({ theme }) => ({ + display: "flex", + alignSelf: "stretch", + width: theme.spacing(1.5), + zIndex: 1, })); -const StyledLink = styled(Link)(() => ({ - textDecoration: "none", -})); +const Teams: React.FC = ({ teams, teamTheme }) => { + const canUserEditTeam = useStore.getState().canUserEditTeam; + + const editableTeams: Team[] = []; + const viewOnlyTeams: Team[] = []; -const Teams: React.FC = ({ teams }) => { + teams.forEach((team) => + canUserEditTeam(team.slug) + ? editableTeams.push(team) + : viewOnlyTeams.push(team), + ); + + const renderTeams = (teamsToRender: Array) => + teamsToRender.map((team) => { + return ( + + + + + {team.name} + + + + ); + }); return ( - - + + Select a team - - {teams.map(({ name, slug }) => ( - - - - {name} + {editableTeams.length > 0 && ( + <> + + My teams + + {renderTeams(editableTeams)} + + )} + + {viewOnlyTeams.length > 0 && ( + <> + + Other teams (view only) - {useStore.getState().canUserEditTeam(slug) ? ( - - ) : ( - - )} - - - ))} + {renderTeams(viewOnlyTeams)} + + )} + ); diff --git a/editor.planx.uk/src/routes/authenticated.tsx b/editor.planx.uk/src/routes/authenticated.tsx index 659b907d79..b6a4745a52 100644 --- a/editor.planx.uk/src/routes/authenticated.tsx +++ b/editor.planx.uk/src/routes/authenticated.tsx @@ -30,6 +30,10 @@ const editorRoutes = compose( id name slug + theme { + primaryColour: primary_colour + logo + } } } `, @@ -39,7 +43,7 @@ const editorRoutes = compose( return { title: makeTitle("Teams"), - view: , + view: , }; }), diff --git a/editor.planx.uk/src/ui/editor/Dashboard.tsx b/editor.planx.uk/src/ui/editor/Dashboard.tsx new file mode 100644 index 0000000000..a18472da46 --- /dev/null +++ b/editor.planx.uk/src/ui/editor/Dashboard.tsx @@ -0,0 +1,22 @@ +import Box from "@mui/material/Box"; +import { containerClasses } from "@mui/material/Container"; +import { styled } from "@mui/material/styles"; +import { HEADER_HEIGHT } from "components/Header"; +import React, { PropsWithChildren } from "react"; + +const Root = styled(Box)(({ theme }) => ({ + backgroundColor: theme.palette.background.default, + color: theme.palette.text.primary, + display: "flex", + flexDirection: "row", + width: "100%", + minHeight: `calc(100vh - ${HEADER_HEIGHT}px)`, + [`& > .${containerClasses.root}`]: { + paddingTop: theme.spacing(6), + paddingBottom: theme.spacing(6), + }, +})); + +export default function Dashboard(props: PropsWithChildren) { + return {props.children}; +} From 81ba8f92b37bfd639dfbd11a91bfcbd6abd72938 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Mon, 24 Jun 2024 11:49:06 +0100 Subject: [PATCH 055/150] test: Update regression tests for new Team page layout (#3312) --- e2e/tests/ui-driven/src/create-flow/create-flow.spec.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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..3948a7338f 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", { From 8ede6d0b350fca99f794395835cf90dbb2d2128c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Tue, 25 Jun 2024 10:10:14 +0100 Subject: [PATCH 056/150] fix: Update "cancel" functionality for List component (#3311) --- .../@planx/components/List/Public/Context.tsx | 44 ++++++++++++++++--- .../components/List/Public/index.test.tsx | 39 +++++++++++++++- .../@planx/components/List/Public/index.tsx | 16 +++---- 3 files changed, 80 insertions(+), 19 deletions(-) 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 68920e56b2..99af3801fb 100644 --- a/editor.planx.uk/src/@planx/components/List/Public/Context.tsx +++ b/editor.planx.uk/src/@planx/components/List/Public/Context.tsx @@ -17,6 +17,7 @@ import { List, Schema, UserData, + UserResponse, } from "../model"; import { flatten, @@ -35,6 +36,14 @@ interface ListContextValue { 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; @@ -54,6 +63,8 @@ export const ListProvider: React.FC = (props) => { props.previouslySubmittedData ? -1 : 0, ); + const [activeItemInitialState, setActiveItemInitialState] = useState(undefined); + const [addItemError, setAddItemError] = useState(false); const [unsavedItemError, setUnsavedItemError] = useState(false); const [minError, setMinError] = useState(false); @@ -83,7 +94,7 @@ export const ListProvider: React.FC = (props) => { const errors = await formik.validateForm(); const isValid = !errors.userData?.length; if (isValid) { - setActiveIndex(-1); + exitEditMode(); setAddItemError(false); } }; @@ -91,12 +102,9 @@ export const ListProvider: React.FC = (props) => { 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 === -1 ? 0 : prev - 1)); - } else if (index === activeIndex || index === 0) { - // If item is currently in Edit mode, exit Edit mode - cancelEditItem(); } // Remove item from userData @@ -120,9 +128,20 @@ export const ListProvider: React.FC = (props) => { formik.handleSubmit(); }; - const cancelEditItem = () => setActiveIndex(-1); + const cancelEditItem = () => { + activeItemInitialState + ? resetItemToPreviousState() + : removeItem(activeIndex); + + setActiveItemInitialState(undefined); + + exitEditMode(); + } - const editItem = (index: number) => setActiveIndex(index); + const editItem = (index: number) => { + setActiveItemInitialState(formik.values.userData[index]); + setActiveIndex(index); + } const getInitialValues = () => { const previousValues = getPreviouslySubmittedData(props); @@ -131,6 +150,16 @@ export const ListProvider: React.FC = (props) => { 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(), @@ -189,6 +218,7 @@ export const ListProvider: React.FC = (props) => { cancelEditItem, formik, validateAndSubmitForm, + isPageComponent, errors: { addItem: addItemError, unsavedItem: unsavedItemError, 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 ce4cfad6b8..1f25e0eb34 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 @@ -338,8 +338,45 @@ 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("form validation is triggered when saving an item"); test.todo("text fields use existing validation schemas"); 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 50d49140cb..1afd2c3ecd 100644 --- a/editor.planx.uk/src/@planx/components/List/Public/index.tsx +++ b/editor.planx.uk/src/@planx/components/List/Public/index.tsx @@ -65,10 +65,7 @@ const InputField: React.FC = (props) => { const ActiveListCard: React.FC<{ index: number; }> = ({ index: i }) => { - const { schema, saveItem, cancelEditItem, errors } = useListContext(); - - // Hide the index number in the card title if the schema has a max length of 1 - const shouldShowIndexTitle = schema.max !== 1; + const { schema, saveItem, cancelEditItem, errors, isPageComponent } = useListContext(); return ( {schema.type} - {shouldShowIndexTitle && ` ${i + 1}`} + {!isPageComponent && ` ${i + 1}`} {schema.fields.map((field, i) => ( @@ -92,7 +89,7 @@ const ActiveListCard: React.FC<{ > Save - + {!isPageComponent && } @@ -102,16 +99,13 @@ const ActiveListCard: React.FC<{ const InactiveListCard: React.FC<{ index: number; }> = ({ index: i }) => { - const { schema, formik, removeItem, editItem } = useListContext(); - - // Hide the index number in the card title if the schema has a max length of 1 - const shouldShowIndexTitle = schema.max !== 1; + const { schema, formik, removeItem, editItem, isPageComponent } = useListContext(); return ( {schema.type} - {shouldShowIndexTitle && ` ${i + 1}`} + {!isPageComponent && ` ${i + 1}`}
    From 9020589ea48c4eed55bbd3f8238d3b7d1217e906 Mon Sep 17 00:00:00 2001 From: Rory Doak <138574807+RODO94@users.noreply.github.com> Date: Tue, 25 Jun 2024 10:14:08 +0100 Subject: [PATCH 057/150] feat: Team Settings Editor Form UI Changes (#3305) --- .../Settings/GeneralSettings/BoundaryForm.tsx | 59 ++++++++++ .../Settings/GeneralSettings/ContactForm.tsx | 95 ++++++++++++++++ .../Settings/GeneralSettings/index.tsx | 103 ++++++++++++++++++ .../Settings/shared/SettingsForm.tsx | 2 +- editor.planx.uk/src/routes/teamSettings.tsx | 7 ++ 5 files changed, 265 insertions(+), 1 deletion(-) create mode 100644 editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/BoundaryForm.tsx create mode 100644 editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/ContactForm.tsx create mode 100644 editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/index.tsx diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/BoundaryForm.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/BoundaryForm.tsx new file mode 100644 index 0000000000..e8a249ad6f --- /dev/null +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/BoundaryForm.tsx @@ -0,0 +1,59 @@ +import { useFormik } from "formik"; +import React, { ChangeEvent } from "react"; +import InputDescription from "ui/editor/InputDescription"; +import Input from "ui/shared/Input"; +import InputRow from "ui/shared/InputRow"; +import InputRowLabel from "ui/shared/InputRowLabel"; + +import { SettingsForm } from "../shared/SettingsForm"; +import { FormProps } from "."; + +export default function BoundaryForm({ formikConfig, onSuccess }: FormProps) { + const formik = useFormik({ + ...formikConfig, + onSubmit(values, { resetForm }) { + onSuccess(); + resetForm({ values }); + }, + }); + + return ( + + The boundary URL is used to retrieve the outer boundary of your + council area. This can then help users define whether they are within + your council area. +
    +
    + The boundary should be given as a link from:{" "} + + https://www.planning.data.gov.uk/ + + + } + input={ + <> + + + Boundary URL + ) => { + formik.setFieldValue("boundaryUrl", ev.target.value); + }} + /> + + + + } + /> + ); +} diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/ContactForm.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/ContactForm.tsx new file mode 100644 index 0000000000..24075a8168 --- /dev/null +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/ContactForm.tsx @@ -0,0 +1,95 @@ +import { useFormik } from "formik"; +import React, { ChangeEvent } from "react"; +import InputDescription from "ui/editor/InputDescription"; +import Input from "ui/shared/Input"; +import InputRow from "ui/shared/InputRow"; +import InputRowLabel from "ui/shared/InputRowLabel"; +import * as Yup from "yup"; + +import { SettingsForm } from "../shared/SettingsForm"; +import { FormProps } from "."; + +export default function ContactForm({ formikConfig, onSuccess }: FormProps) { + const formSchema = Yup.object().shape({ + helpEmail: Yup.string() + .email("Please enter valid email") + .required("Help Email is required"), + helpPhone: Yup.string().required("Help Phone is required"), + helpOpeningHours: Yup.string(), + homepage: Yup.string().url("Please enter a valid URL for the homepage"), + }); + + const formik = useFormik({ + ...formikConfig, + validationSchema: formSchema, + onSubmit(values, { resetForm }) { + onSuccess(); + resetForm({ values }); + }, + }); + + const onChangeFn = (type: string, event: ChangeEvent) => + formik.setFieldValue(type, event.target.value); + + return ( + + Details to help direct different messages, feedback, and enquiries + from users. + + } + input={ + <> + + + Homepage URL + { + onChangeFn("homepage", event); + }} + /> + + + + + Contact email address + { + onChangeFn("helpEmail", event); + }} + /> + + + + + Phone number + { + onChangeFn("helpPhone", event); + }} + /> + + + + + Opening hours + { + onChangeFn("helpOpeningHours", event); + }} + /> + + + + } + /> + ); +} diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/index.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/index.tsx new file mode 100644 index 0000000000..7ce9edd670 --- /dev/null +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/index.tsx @@ -0,0 +1,103 @@ +import Alert from "@mui/material/Alert"; +import Box from "@mui/material/Box"; +import Snackbar from "@mui/material/Snackbar"; +import Typography from "@mui/material/Typography"; +import { FormikConfig } from "formik"; +import React, { useEffect, useState } from "react"; +import EditorRow from "ui/editor/EditorRow"; + +import BoundaryForm from "./BoundaryForm"; +import ContactForm from "./ContactForm"; + +export interface GeneralSettings { + boundaryUrl: string; + helpEmail: string; + helpPhone: string; + helpOpeningHours: string; + homepage: string; + isPlanningDataCollected: boolean; + portalName: string; + portalUrl: string; +} + +export interface FormProps { + formikConfig: FormikConfig; + onSuccess: () => void; +} + +const GeneralSettings: React.FC = () => { + const [formikConfig, setFormikConfig] = useState< + FormikConfig | undefined + >(undefined); + + const initialValues = { + boundaryUrl: "", + helpEmail: "", + helpPhone: "", + helpOpeningHours: "", + homepage: "", + isPlanningDataCollected: true, + portalName: "", + portalUrl: "", + }; + + useEffect(() => { + const fetchTeam = async () => { + try { + setFormikConfig({ + initialValues: initialValues, + onSubmit: () => {}, + validateOnBlur: false, + validateOnChange: false, + enableReinitialize: true, + }); + } catch (error) { + console.error("Error fetching team:", error); + } + }; + + fetchTeam(); + }, []); + + const [open, setOpen] = useState(false); + const [updateMessage, setUpdateMessage] = useState("Setting Updated"); + + const handleClose = ( + _event?: React.SyntheticEvent | Event, + reason?: string, + ) => { + if (reason === "clickaway") { + return; + } + + setOpen(false); + }; + + const onSuccess = () => setOpen(true); + + return ( + + + + General + + + Important links and settings for how your users connect with you + + + {formikConfig && ( + <> + + + + )} + + + {updateMessage} + + + + ); +}; + +export default GeneralSettings; diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/shared/SettingsForm.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/shared/SettingsForm.tsx index 99e001d097..3bb553695e 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/shared/SettingsForm.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/shared/SettingsForm.tsx @@ -62,4 +62,4 @@ export const SettingsForm = ({ ); -}; \ No newline at end of file +}; diff --git a/editor.planx.uk/src/routes/teamSettings.tsx b/editor.planx.uk/src/routes/teamSettings.tsx index a21bd4e25a..587160a6ea 100644 --- a/editor.planx.uk/src/routes/teamSettings.tsx +++ b/editor.planx.uk/src/routes/teamSettings.tsx @@ -8,6 +8,7 @@ import { withData, } from "navi"; import DesignSettings from "pages/FlowEditor/components/Settings/DesignSettings"; +import GeneralSettings from "pages/FlowEditor/components/Settings/GeneralSettings"; import TeamSettings from "pages/FlowEditor/components/Settings/TeamSettings"; import { useStore } from "pages/FlowEditor/lib/store"; import React from "react"; @@ -24,6 +25,7 @@ const teamSettingsRoutes = compose( "/": redirect("./team"), "/:tab": map(async (req) => { const isAuthorised = useStore.getState().canUserEditTeam(req.params.team); + if (!isAuthorised) throw new NotFoundError( `User does not have access to ${req.originalUrl}`, @@ -45,6 +47,11 @@ const teamSettingsRoutes = compose( route: "design", Component: DesignSettings, }, + { + name: "General", + route: "general", + Component: GeneralSettings, + }, ]} /> ), From 2991b92b6e4a9ed37cbb697397ea262da533cf0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Tue, 25 Jun 2024 11:11:01 +0100 Subject: [PATCH 058/150] chore: Run `pnpm lint:fix` in Editor (#3313) --- .../@planx/components/DateInput/model.test.ts | 13 +- .../src/@planx/components/DateInput/model.ts | 98 +++++------ .../src/@planx/components/List/Editor.tsx | 2 +- .../@planx/components/List/Public/Context.tsx | 19 +-- .../components/List/Public/index.test.tsx | 4 +- .../@planx/components/List/Public/index.tsx | 6 +- .../components/List/schemas/Floorspace.ts | 61 +++++-- .../List/schemas/ResidentialUnits/Proposed.ts | 13 +- .../components/NumberInput/Public.test.tsx | 26 ++- .../@planx/components/SetValue/utils.test.ts | 160 ++++++++++-------- .../src/@planx/components/SetValue/utils.ts | 1 + .../@planx/components/shared/Buttons/Tag.tsx | 4 +- .../components/shared/Radio/BasicRadio.tsx | 7 +- .../components/AnalyticsDisabledBanner.tsx | 4 +- .../Feedback/FeedbackForm.stories.tsx | 2 +- editor.planx.uk/src/lib/feedback.ts | 2 +- .../Settings/DesignSettings/ButtonForm.tsx | 2 +- .../Settings/DesignSettings/FaviconForm.tsx | 2 +- .../Settings/DesignSettings/TextLinkForm.tsx | 2 +- .../DesignSettings/ThemeAndLogoForm.tsx | 2 +- .../components/Sidebar/EditHistory.tsx | 2 +- .../components/Sidebar/PublishDialog.tsx | 55 ++++-- .../FlowEditor/components/Sidebar/index.tsx | 43 +++-- .../src/pages/FlowEditor/lib/store/preview.ts | 4 +- editor.planx.uk/src/pages/FlowEditor/utils.ts | 2 +- .../src/pages/PlatformAdminPanel.tsx | 10 +- .../src/pages/layout/PublicLayout.tsx | 8 +- editor.planx.uk/src/themeOverrides.d.ts | 2 +- editor.planx.uk/src/ui/shared/Checkbox.tsx | 9 +- 29 files changed, 343 insertions(+), 222 deletions(-) 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/List/Editor.tsx b/editor.planx.uk/src/@planx/components/List/Editor.tsx index b62e8daa30..6b85d49b87 100644 --- a/editor.planx.uk/src/@planx/components/List/Editor.tsx +++ b/editor.planx.uk/src/@planx/components/List/Editor.tsx @@ -14,6 +14,7 @@ import InputRowLabel from "ui/shared/InputRowLabel"; import { EditorProps, ICONS, InternalNotes, MoreInformation } from "../ui"; import { List, parseContent } from "./model"; 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"; @@ -24,7 +25,6 @@ import { ResidentialUnitsExisting } from "./schemas/ResidentialUnits/Existing"; import { ResidentialUnitsGLAGained } from "./schemas/ResidentialUnits/GLA/Gained"; import { ResidentialUnitsGLALost } from "./schemas/ResidentialUnits/GLA/Lost"; import { ResidentialUnitsProposed } from "./schemas/ResidentialUnits/Proposed"; -import { NonResidentialFloorspace } from "./schemas/Floorspace"; type Props = EditorProps; 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 99af3801fb..e9c22cee1a 100644 --- a/editor.planx.uk/src/@planx/components/List/Public/Context.tsx +++ b/editor.planx.uk/src/@planx/components/List/Public/Context.tsx @@ -63,7 +63,9 @@ export const ListProvider: React.FC = (props) => { props.previouslySubmittedData ? -1 : 0, ); - const [activeItemInitialState, setActiveItemInitialState] = useState(undefined); + const [activeItemInitialState, setActiveItemInitialState] = useState< + UserResponse | undefined + >(undefined); const [addItemError, setAddItemError] = useState(false); const [unsavedItemError, setUnsavedItemError] = useState(false); @@ -132,16 +134,16 @@ export const ListProvider: React.FC = (props) => { activeItemInitialState ? resetItemToPreviousState() : removeItem(activeIndex); - + setActiveItemInitialState(undefined); exitEditMode(); - } + }; const editItem = (index: number) => { setActiveItemInitialState(formik.values.userData[index]); setActiveIndex(index); - } + }; const getInitialValues = () => { const previousValues = getPreviouslySubmittedData(props); @@ -151,12 +153,9 @@ export const ListProvider: React.FC = (props) => { }; const exitEditMode = () => setActiveIndex(-1); - - const resetItemToPreviousState = () => - formik.setFieldValue( - `userData[${activeIndex}]`, - activeItemInitialState - ) + + const resetItemToPreviousState = () => + formik.setFieldValue(`userData[${activeIndex}]`, activeItemInitialState); const isPageComponent = schema.max === 1; 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 1f25e0eb34..aa47784682 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 @@ -348,7 +348,7 @@ describe("Building a list", () => { expect(cards).toHaveLength(1); const cancelButton = getByText(/Cancel/, { selector: "button" }); - await user.click(cancelButton) + await user.click(cancelButton); cards = queryAllByTestId(/list-card/); expect(cards).toHaveLength(0); @@ -376,7 +376,7 @@ describe("Building a list", () => { expect(getByText("richard.parker@pi.com")).toBeInTheDocument(); }); }); - + describe("Form validation and error handling", () => { test.todo("form validation is triggered when saving an item"); test.todo("text fields use existing validation schemas"); 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 1afd2c3ecd..44117493dc 100644 --- a/editor.planx.uk/src/@planx/components/List/Public/index.tsx +++ b/editor.planx.uk/src/@planx/components/List/Public/index.tsx @@ -65,7 +65,8 @@ const InputField: React.FC = (props) => { const ActiveListCard: React.FC<{ index: number; }> = ({ index: i }) => { - const { schema, saveItem, cancelEditItem, errors, isPageComponent } = useListContext(); + const { schema, saveItem, cancelEditItem, errors, isPageComponent } = + useListContext(); return ( = ({ index: i }) => { - const { schema, formik, removeItem, editItem, isPageComponent } = useListContext(); + const { schema, formik, removeItem, editItem, isPageComponent } = + useListContext(); return ( diff --git a/editor.planx.uk/src/@planx/components/List/schemas/Floorspace.ts b/editor.planx.uk/src/@planx/components/List/schemas/Floorspace.ts index e0329432c3..f8476d0e3f 100644 --- a/editor.planx.uk/src/@planx/components/List/schemas/Floorspace.ts +++ b/editor.planx.uk/src/@planx/components/List/schemas/Floorspace.ts @@ -28,15 +28,24 @@ export const NonResidentialFloorspace: Schema = { }, { id: "eAShops", - data: { text: "E(a) - Retail (other than hot food): Shops", val: "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" }, + 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" }, + data: { + text: "E(b) - Sale of food and drink (mostly consumed on the premises)", + val: "eB", + }, }, { id: "eCI", @@ -44,7 +53,10 @@ export const NonResidentialFloorspace: Schema = { }, { id: "eCII", - data: { text: "E(c)(ii) - Professional services (other than health or medical)", val: "eCII" }, + data: { + text: "E(c)(ii) - Professional services (other than health or medical)", + val: "eCII", + }, }, { id: "eCIII", @@ -52,7 +64,10 @@ export const NonResidentialFloorspace: Schema = { }, { id: "eD", - data: { text: "E(d) - Indoor sports, recreation or fitness", val: "eD" }, + data: { + text: "E(d) - Indoor sports, recreation or fitness", + val: "eD", + }, }, { id: "eF", @@ -60,15 +75,24 @@ export const NonResidentialFloorspace: Schema = { }, { id: "eGI", - data: { text: "E(g)(i) - Office (to carry out operational or administrative functions)", val: "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" }, + 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" }, + data: { + text: "E(g)(iii) - Any industrial process (can be carried out within a residential area)", + val: "eGIII", + }, }, { id: "fOneA", @@ -121,11 +145,17 @@ export const NonResidentialFloorspace: Schema = { }, { id: "fTwoA", - data: { text: "F2(a) - Shop selling essential goods (not over 280sqm and no other such facility in 1000m radius)", val: "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" }, + data: { + text: "F2(b) - Hall or meeting place for local community (principal use)", + val: "fTwoB", + }, }, { id: "fTwoC", @@ -133,7 +163,10 @@ export const NonResidentialFloorspace: Schema = { }, { id: "fTwoD", - data: { text: "F2(d) - Indoor or outdoor swimming pool or skating rink", val: "fTwoD" }, + data: { + text: "F2(d) - Indoor or outdoor swimming pool or skating rink", + val: "fTwoD", + }, }, { id: "other", data: { text: "Other", val: "other" } }, ], @@ -151,7 +184,8 @@ export const NonResidentialFloorspace: Schema = { { type: "number", data: { - title: "What is the gross internal floor area to be lost by change of use or demolition?", + title: + "What is the gross internal floor area to be lost by change of use or demolition?", units: "m²", fn: "area.loss", allowNegatives: false, @@ -160,7 +194,8 @@ export const NonResidentialFloorspace: Schema = { { type: "number", data: { - title: "What is the total gross internal floor area proposed (including change of use)?", + title: + "What is the total gross internal floor area proposed (including change of use)?", units: "m²", fn: "area.proposed", allowNegatives: false, 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 index 77b533791d..ea99c599b0 100644 --- a/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/Proposed.ts +++ b/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/Proposed.ts @@ -10,8 +10,17 @@ export const ResidentialUnitsProposed: Schema = { 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" } }, + { + 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" }, + }, ], }, }, 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/SetValue/utils.test.ts b/editor.planx.uk/src/@planx/components/SetValue/utils.test.ts index c556459134..9fb490626d 100644 --- a/editor.planx.uk/src/@planx/components/SetValue/utils.test.ts +++ b/editor.planx.uk/src/@planx/components/SetValue/utils.test.ts @@ -1,7 +1,7 @@ -import { SetValue } from "./model"; -import { handleSetValue } from "./utils"; import { Store } from "pages/FlowEditor/lib/store"; +import { SetValue } from "./model"; +import { handleSetValue } from "./utils"; describe("calculateNewValues() helper function", () => { describe('"replace" operation', () => { @@ -12,26 +12,29 @@ describe("calculateNewValues() helper function", () => { { previous: ["lion"], expected: ["lion"] }, { previous: ["bear", "dog", "monkey"], expected: ["lion"] }, { previous: ["bear", "dog", "lion"], expected: ["lion"] }, - ])('input of $previous sets passport value to be $expected', ({ previous, expected }) => { - const mockKey = "myAnimals"; - const mockSetValue: SetValue = { - operation: "replace", - fn: mockKey, - val: "lion", - }; - const mockPassport: Store.passport = { - data: { mockNode: mockSetValue, [mockKey]: previous }, - }; + ])( + "input of $previous sets passport value to be $expected", + ({ previous, expected }) => { + const mockKey = "myAnimals"; + const mockSetValue: SetValue = { + operation: "replace", + fn: mockKey, + val: "lion", + }; + const mockPassport: Store.passport = { + data: { mockNode: mockSetValue, [mockKey]: previous }, + }; - const updatedPassport = handleSetValue({ - nodeData: mockSetValue, - previousValues: previous, - passport: mockPassport, - }); + const updatedPassport = handleSetValue({ + nodeData: mockSetValue, + previousValues: previous, + passport: mockPassport, + }); - const actual = updatedPassport.data?.[mockKey]; - expect(actual).toEqual(expected); - }); + const actual = updatedPassport.data?.[mockKey]; + expect(actual).toEqual(expected); + }, + ); }); describe('"append" operation', () => { @@ -45,26 +48,29 @@ describe("calculateNewValues() helper function", () => { expected: ["bear", "dog", "monkey", "lion"], }, { previous: ["bear", "dog", "lion"], expected: ["bear", "dog", "lion"] }, - ])('input of $previous sets passport value to be $expected', ({ previous, expected }) => { - const mockKey = "myAnimals"; - const mockSetValue: SetValue = { - operation: "append", - fn: mockKey, - val: "lion", - }; - const mockPassport: Store.passport = { - data: { mockNode: mockSetValue, [mockKey]: previous }, - }; + ])( + "input of $previous sets passport value to be $expected", + ({ previous, expected }) => { + const mockKey = "myAnimals"; + const mockSetValue: SetValue = { + operation: "append", + fn: mockKey, + val: "lion", + }; + const mockPassport: Store.passport = { + data: { mockNode: mockSetValue, [mockKey]: previous }, + }; - const updatedPassport = handleSetValue({ - nodeData: mockSetValue, - previousValues: previous, - passport: mockPassport, - }); + const updatedPassport = handleSetValue({ + nodeData: mockSetValue, + previousValues: previous, + passport: mockPassport, + }); - const actual = updatedPassport.data?.[mockKey]; - expect(actual).toEqual(expected); - }); + const actual = updatedPassport.data?.[mockKey]; + expect(actual).toEqual(expected); + }, + ); }); describe('"removeOne" operation', () => { @@ -78,26 +84,29 @@ describe("calculateNewValues() helper function", () => { expected: ["bear", "dog", "monkey"], }, { previous: ["bear", "dog", "lion"], expected: ["bear", "dog"] }, - ])('input of $previous sets passport value to be $expected', ({ previous, expected }) => { - const mockKey = "myAnimals"; - const mockSetValue: SetValue = { - operation: "removeOne", - fn: mockKey, - val: "lion", - }; - const mockPassport: Store.passport = { - data: { mockNode: mockSetValue, [mockKey]: previous }, - }; + ])( + "input of $previous sets passport value to be $expected", + ({ previous, expected }) => { + const mockKey = "myAnimals"; + const mockSetValue: SetValue = { + operation: "removeOne", + fn: mockKey, + val: "lion", + }; + const mockPassport: Store.passport = { + data: { mockNode: mockSetValue, [mockKey]: previous }, + }; - const updatedPassport = handleSetValue({ - nodeData: mockSetValue, - previousValues: previous, - passport: mockPassport, - }); + const updatedPassport = handleSetValue({ + nodeData: mockSetValue, + previousValues: previous, + passport: mockPassport, + }); - const actual = updatedPassport.data?.[mockKey]; - expect(actual).toEqual(expected); - }); + const actual = updatedPassport.data?.[mockKey]; + expect(actual).toEqual(expected); + }, + ); }); describe('"removeAll" operation', () => { @@ -111,25 +120,28 @@ describe("calculateNewValues() helper function", () => { expected: undefined, }, { previous: ["bear", "dog", "lion"], expected: undefined }, - ])('input of $previous sets passport value to be $expected', ({ previous, expected }) => { - const mockKey = "myAnimals"; - const mockSetValue: SetValue = { - operation: "removeAll", - fn: mockKey, - val: "lion", - }; - const mockPassport: Store.passport = { - data: { mockNode: mockSetValue, [mockKey]: previous }, - }; + ])( + "input of $previous sets passport value to be $expected", + ({ previous, expected }) => { + const mockKey = "myAnimals"; + const mockSetValue: SetValue = { + operation: "removeAll", + fn: mockKey, + val: "lion", + }; + const mockPassport: Store.passport = { + data: { mockNode: mockSetValue, [mockKey]: previous }, + }; - const updatedPassport = handleSetValue({ - nodeData: mockSetValue, - previousValues: previous, - passport: mockPassport, - }); + const updatedPassport = handleSetValue({ + nodeData: mockSetValue, + previousValues: previous, + passport: mockPassport, + }); - const actual = updatedPassport.data?.[mockKey]; - expect(actual).toEqual(expected); - }); + const actual = updatedPassport.data?.[mockKey]; + expect(actual).toEqual(expected); + }, + ); }); }); diff --git a/editor.planx.uk/src/@planx/components/SetValue/utils.ts b/editor.planx.uk/src/@planx/components/SetValue/utils.ts index be6756dff3..46df9c9431 100644 --- a/editor.planx.uk/src/@planx/components/SetValue/utils.ts +++ b/editor.planx.uk/src/@planx/components/SetValue/utils.ts @@ -1,4 +1,5 @@ import { Store } from "pages/FlowEditor/lib/store"; + import { SetValue } from "./model"; type PreviousValues = string | string[] | undefined; diff --git a/editor.planx.uk/src/@planx/components/shared/Buttons/Tag.tsx b/editor.planx.uk/src/@planx/components/shared/Buttons/Tag.tsx index effbd45a40..c1740b7783 100644 --- a/editor.planx.uk/src/@planx/components/shared/Buttons/Tag.tsx +++ b/editor.planx.uk/src/@planx/components/shared/Buttons/Tag.tsx @@ -67,7 +67,9 @@ export default function Tag(props: Props): FCReturn { id={id} tagType={tagType} > - The status of this section of the application is: + + The status of this section of the application is: + {children} ); diff --git a/editor.planx.uk/src/@planx/components/shared/Radio/BasicRadio.tsx b/editor.planx.uk/src/@planx/components/shared/Radio/BasicRadio.tsx index da3e7e2aa2..55a9a7606b 100644 --- a/editor.planx.uk/src/@planx/components/shared/Radio/BasicRadio.tsx +++ b/editor.planx.uk/src/@planx/components/shared/Radio/BasicRadio.tsx @@ -12,7 +12,12 @@ export interface Props { value?: string; } -const BasicRadio: React.FC = ({ id, onChange, title, variant = "default" }) => ( +const BasicRadio: React.FC = ({ + id, + onChange, + title, + variant = "default", +}) => ( { diff --git a/editor.planx.uk/src/components/Feedback/FeedbackForm.stories.tsx b/editor.planx.uk/src/components/Feedback/FeedbackForm.stories.tsx index 2d60bd235e..4582ce7235 100644 --- a/editor.planx.uk/src/components/Feedback/FeedbackForm.stories.tsx +++ b/editor.planx.uk/src/components/Feedback/FeedbackForm.stories.tsx @@ -59,4 +59,4 @@ export const MissingInputForm: Story = { const submitButton = canvas.getByRole("button", { name: "Send feedback" }); await userEvent.click(submitButton); }, -}; \ No newline at end of file +}; diff --git a/editor.planx.uk/src/lib/feedback.ts b/editor.planx.uk/src/lib/feedback.ts index f3b8b3f7a0..fec8766746 100644 --- a/editor.planx.uk/src/lib/feedback.ts +++ b/editor.planx.uk/src/lib/feedback.ts @@ -41,7 +41,7 @@ export async function getInternalFeedbackMetadata(): Promise { nodeType: node?.type ? TYPES[node.type] : null, device: Bowser.parse(window.navigator.userAgent), userData: userData, - nodeData: node?.data + nodeData: node?.data, }; return metadata; diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/ButtonForm.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/ButtonForm.tsx index e4f4adc681..bab3a5c61a 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/ButtonForm.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/ButtonForm.tsx @@ -11,8 +11,8 @@ import InputDescription from "ui/editor/InputDescription"; import InputRow from "ui/shared/InputRow"; import InputRowItem from "ui/shared/InputRowItem"; -import { DesignPreview, FormProps } from "."; import { SettingsForm } from "../shared/SettingsForm"; +import { DesignPreview, FormProps } from "."; export const ButtonForm: React.FC = ({ formikConfig, diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/FaviconForm.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/FaviconForm.tsx index 3a7fa0f608..14a5386a88 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/FaviconForm.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/FaviconForm.tsx @@ -10,8 +10,8 @@ import InputRow from "ui/shared/InputRow"; import InputRowItem from "ui/shared/InputRowItem"; import InputRowLabel from "ui/shared/InputRowLabel"; -import { FormProps } from "."; import { SettingsForm } from "../shared/SettingsForm"; +import { FormProps } from "."; export const FaviconForm: React.FC = ({ formikConfig, diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/TextLinkForm.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/TextLinkForm.tsx index 98c0fea0e6..4b341a74b4 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/TextLinkForm.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/TextLinkForm.tsx @@ -9,8 +9,8 @@ import InputDescription from "ui/editor/InputDescription"; import InputRow from "ui/shared/InputRow"; import InputRowItem from "ui/shared/InputRowItem"; -import { DesignPreview, FormProps } from "."; import { SettingsForm } from "../shared/SettingsForm"; +import { DesignPreview, FormProps } from "."; export const TextLinkForm: React.FC = ({ formikConfig, diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/ThemeAndLogoForm.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/ThemeAndLogoForm.tsx index afc872074f..af5c9e8da4 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/ThemeAndLogoForm.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/ThemeAndLogoForm.tsx @@ -12,8 +12,8 @@ import InputRow from "ui/shared/InputRow"; import InputRowItem from "ui/shared/InputRowItem"; import InputRowLabel from "ui/shared/InputRowLabel"; -import { DesignPreview, FormProps } from "."; import { SettingsForm } from "../shared/SettingsForm"; +import { DesignPreview, FormProps } from "."; export const ThemeAndLogoForm: React.FC = ({ formikConfig, diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Sidebar/EditHistory.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Sidebar/EditHistory.tsx index b174681364..c92b60b6b6 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Sidebar/EditHistory.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Sidebar/EditHistory.tsx @@ -18,9 +18,9 @@ import { OT } from "@planx/graph/types"; import DelayedLoadingIndicator from "components/DelayedLoadingIndicator"; import React, { useState } from "react"; import { FONT_WEIGHT_SEMI_BOLD } from "theme"; +import { Operation } from "types"; import { useStore } from "../../lib/store"; -import { Operation } from "types"; import { formatLastEditDate } from "../../utils"; const TooltipWrap = styled(({ className, ...props }: TooltipProps) => ( diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Sidebar/PublishDialog.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Sidebar/PublishDialog.tsx index da3cd924cb..cb33d3ba3c 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Sidebar/PublishDialog.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Sidebar/PublishDialog.tsx @@ -12,11 +12,11 @@ import ListItemIcon from "@mui/material/ListItemIcon"; import ListItemText from "@mui/material/ListItemText"; import Typography from "@mui/material/Typography"; import { ComponentType as TYPES } from "@opensystemslab/planx-core/types"; +import { formatLastPublishMessage } from "pages/FlowEditor/utils"; import React, { useState } from "react"; import { useAsync } from "react-use"; import Caret from "ui/icons/Caret"; -import { formatLastPublishMessage } from "pages/FlowEditor/utils"; import { useStore } from "../../lib/store"; export interface AlteredNode { @@ -68,7 +68,9 @@ const AlteredNestedFlowListItem = (props: Portal) => { const _nestedFlowLastPublishedRequest = useAsync(async () => { const user = await lastPublisher(flowId); - setNestedFlowLastPublishedTitle(formatLastPublishMessage(publishedAt, user)); + setNestedFlowLastPublishedTitle( + formatLastPublishMessage(publishedAt, user), + ); }); return ( @@ -148,17 +150,23 @@ export const AlteredNodesSummaryContent = (props: { {`Changes`} {changeSummary["title"] && ( - - {changeSummary["title"]} - + {changeSummary["title"]} )} {(changeSummary["updated"] > 0 || changeSummary["deleted"] > 0) && ( - + {`${changeSummary["updated"]} nodes have been updated or added`} - + {`${changeSummary["deleted"]} nodes have been deleted`} @@ -228,14 +236,14 @@ export interface ValidationCheck { } export const ValidationChecks = (props: { - validationChecks: ValidationCheck[] + validationChecks: ValidationCheck[]; }) => { const { validationChecks } = props; const Icon: Record = { - "Pass": , - "Fail": , - "Not applicable": + Pass: , + Fail: , + "Not applicable": , }; return ( @@ -250,8 +258,27 @@ export const ValidationChecks = (props: { {Icon[check.status]} {check.title}} - secondary={{check.message}} + primary={ + + {check.title} + + } + secondary={ + + {check.message} + + } /> ))} @@ -259,4 +286,4 @@ export const ValidationChecks = (props: { ); -} +}; diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Sidebar/index.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Sidebar/index.tsx index 346ce7146e..1b42dd65b0 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Sidebar/index.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Sidebar/index.tsx @@ -13,21 +13,26 @@ import DialogActions from "@mui/material/DialogActions"; import DialogContent from "@mui/material/DialogContent"; import DialogTitle from "@mui/material/DialogTitle"; import Link from "@mui/material/Link"; +import { styled } from "@mui/material/styles"; import Tab, { tabClasses } from "@mui/material/Tab"; import Tabs from "@mui/material/Tabs"; import Tooltip from "@mui/material/Tooltip"; import Typography from "@mui/material/Typography"; -import { styled } from "@mui/material/styles"; import { AxiosError } from "axios"; +import { formatLastPublishMessage } from "pages/FlowEditor/utils"; import React, { useState } from "react"; import { useAsync } from "react-use"; import Input from "ui/shared/Input"; -import { formatLastPublishMessage } from "pages/FlowEditor/utils"; import Questions from "../../../Preview/Questions"; import { useStore } from "../../lib/store"; import EditHistory from "./EditHistory"; -import { AlteredNode, AlteredNodesSummaryContent, ValidationCheck, ValidationChecks } from "./PublishDialog"; +import { + AlteredNode, + AlteredNodesSummaryContent, + ValidationCheck, + ValidationChecks, +} from "./PublishDialog"; type SidebarTabs = "PreviewBrowser" | "History"; @@ -174,7 +179,9 @@ const Sidebar: React.FC<{ const [lastPublishedTitle, setLastPublishedTitle] = useState( "This flow is not published yet", ); - const [validationChecks, setValidationChecks] = useState([]); + const [validationChecks, setValidationChecks] = useState( + [], + ); const [alteredNodes, setAlteredNodes] = useState(); const [dialogOpen, setDialogOpen] = useState(false); const [summary, setSummary] = useState(); @@ -189,9 +196,7 @@ const Sidebar: React.FC<{ setLastPublishedTitle("Checking for changes..."); const alteredFlow = await validateAndDiffFlow(flowId); setAlteredNodes( - alteredFlow?.data.alteredNodes - ? alteredFlow.data.alteredNodes - : [], + alteredFlow?.data.alteredNodes ? alteredFlow.data.alteredNodes : [], ); setLastPublishedTitle( alteredFlow?.data.alteredNodes @@ -201,9 +206,7 @@ const Sidebar: React.FC<{ setValidationChecks(alteredFlow?.data?.validationChecks); setDialogOpen(true); } catch (error) { - setLastPublishedTitle( - "Error checking for changes to publish", - ); + setLastPublishedTitle("Error checking for changes to publish"); if (error instanceof AxiosError) { alert(error.response?.data?.error); @@ -219,10 +222,7 @@ const Sidebar: React.FC<{ try { setDialogOpen(false); setLastPublishedTitle("Publishing changes..."); - const { alteredNodes, message } = await publishFlow( - flowId, - summary, - ); + const { alteredNodes, message } = await publishFlow(flowId, summary); setLastPublishedTitle( alteredNodes ? `Successfully published changes to ${alteredNodes.length} nodes` @@ -379,13 +379,17 @@ const Sidebar: React.FC<{ {alteredNodes?.length ? ( <> {`Preview these content changes in-service before publishing `} - + {`here (opens in a new tab).`} @@ -413,7 +417,12 @@ const Sidebar: React.FC<{ color="primary" variant="contained" onClick={handlePublish} - disabled={!alteredNodes || alteredNodes.length === 0 || validationChecks.filter((v) => v.status === "Fail").length > 0} + disabled={ + !alteredNodes || + alteredNodes.length === 0 || + validationChecks.filter((v) => v.status === "Fail").length > + 0 + } > PUBLISH diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/store/preview.ts b/editor.planx.uk/src/pages/FlowEditor/lib/store/preview.ts index 97f437e533..be77eeeb9b 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/store/preview.ts +++ b/editor.planx.uk/src/pages/FlowEditor/lib/store/preview.ts @@ -11,6 +11,7 @@ import { import { ComponentType as TYPES } from "@opensystemslab/planx-core/types"; import { FileList } from "@planx/components/FileUploadAndLabel/model"; import { SetValue } from "@planx/components/SetValue/model"; +import { handleSetValue } from "@planx/components/SetValue/utils"; import { sortIdsDepthFirst } from "@planx/graph"; import { logger } from "airbrake"; import { objectWithoutNullishValues } from "lib/objectHelpers"; @@ -29,7 +30,6 @@ import { ApplicationPath } from "./../../../../types"; import type { Store } from "."; import { NavigationStore } from "./navigation"; import type { SharedStore } from "./shared"; -import { handleSetValue } from "@planx/components/SetValue/utils"; const SUPPORTED_DECISION_TYPES = [TYPES.Checklist, TYPES.Question]; let memoizedPreviousCardId: string | undefined = undefined; @@ -902,4 +902,4 @@ export const removeNodesDependentOnPassport = ( return acc; }, [] as string[]); return { removedNodeIds, breadcrumbsWithoutPassportData: newBreadcrumbs }; -}; \ No newline at end of file +}; diff --git a/editor.planx.uk/src/pages/FlowEditor/utils.ts b/editor.planx.uk/src/pages/FlowEditor/utils.ts index ed3c5d0688..a9f28b54ee 100644 --- a/editor.planx.uk/src/pages/FlowEditor/utils.ts +++ b/editor.planx.uk/src/pages/FlowEditor/utils.ts @@ -9,7 +9,7 @@ export const formatLastEditDate = (date: string): string => { export const formatLastEditMessage = ( date: string, - actor?: { firstName: string; lastName: string } + actor?: { firstName: string; lastName: string }, ): string => { if (!actor) { return `Last edited ${formatLastEditDate(date)}`; diff --git a/editor.planx.uk/src/pages/PlatformAdminPanel.tsx b/editor.planx.uk/src/pages/PlatformAdminPanel.tsx index 30fcd5456b..540fc44abe 100644 --- a/editor.planx.uk/src/pages/PlatformAdminPanel.tsx +++ b/editor.planx.uk/src/pages/PlatformAdminPanel.tsx @@ -58,7 +58,7 @@ const TeamData: React.FC = ({ data }) => { const a4Endpoint = `${process.env.REACT_APP_API_URL}/gis/${data.slug}/article4-schema`; const fetcher = (url: string) => fetch(url).then((r) => r.json()); const { data: a4Check, isValidating } = useSWR( - () => data.slug ? a4Endpoint : null, + () => (data.slug ? a4Endpoint : null), fetcher, ); @@ -123,7 +123,13 @@ const TeamData: React.FC = ({ data }) => { <> {"Article 4s (API)"} - {!isValidating && a4Check?.status ? : } + + {!isValidating && a4Check?.status ? ( + + ) : ( + + )} + <> {"Reference code"} diff --git a/editor.planx.uk/src/pages/layout/PublicLayout.tsx b/editor.planx.uk/src/pages/layout/PublicLayout.tsx index bb854c417e..e3c63cd5fb 100644 --- a/editor.planx.uk/src/pages/layout/PublicLayout.tsx +++ b/editor.planx.uk/src/pages/layout/PublicLayout.tsx @@ -52,10 +52,10 @@ const PublicFooter: React.FC = () => { const globalFooterItems = globalSettings?.footerContent ? Object.entries(globalSettings?.footerContent).map(([slug, item]) => ({ - title: item.heading, - content: item.content, - href: makeHref(slug), - })) + title: item.heading, + content: item.content, + href: makeHref(slug), + })) : []; const footerItems = [...flowSettingsContent, ...globalFooterItems].filter( diff --git a/editor.planx.uk/src/themeOverrides.d.ts b/editor.planx.uk/src/themeOverrides.d.ts index 39704669b5..37b3bbbea0 100644 --- a/editor.planx.uk/src/themeOverrides.d.ts +++ b/editor.planx.uk/src/themeOverrides.d.ts @@ -1,8 +1,8 @@ import "@mui/material/Chip"; // eslint-disable-next-line no-restricted-imports import "@mui/material/styles/createPalette"; -import { RadioProps } from "@mui/material/Radio"; +import { RadioProps } from "@mui/material/Radio"; declare module "@mui/material/Chip" { interface ChipPropsVariantOverrides { diff --git a/editor.planx.uk/src/ui/shared/Checkbox.tsx b/editor.planx.uk/src/ui/shared/Checkbox.tsx index 297c1115d9..c3ba044fb5 100644 --- a/editor.planx.uk/src/ui/shared/Checkbox.tsx +++ b/editor.planx.uk/src/ui/shared/Checkbox.tsx @@ -47,10 +47,15 @@ export interface Props { id?: string; checked: boolean; onChange?: (event?: React.MouseEvent) => void; - inputProps?: React.InputHTMLAttributes + inputProps?: React.InputHTMLAttributes; } -export default function Checkbox({ id, checked, onChange, inputProps }: Props): FCReturn { +export default function Checkbox({ + id, + checked, + onChange, + inputProps, +}: Props): FCReturn { return ( onChange && onChange()}> Date: Tue, 25 Jun 2024 11:23:34 +0100 Subject: [PATCH 059/150] chore: Remove ``has_planning_data`` from team_settings table (#3314) --- .../Settings/GeneralSettings/index.tsx | 6 ------ hasura.planx.uk/metadata/tables.yaml | 18 ++++++------------ .../down.sql | 4 ++++ .../up.sql | 1 + 4 files changed, 11 insertions(+), 18 deletions(-) create mode 100644 hasura.planx.uk/migrations/1719307850258_alter_table_public_team_settings_drop_column_has_planning_data/down.sql create mode 100644 hasura.planx.uk/migrations/1719307850258_alter_table_public_team_settings_drop_column_has_planning_data/up.sql diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/index.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/index.tsx index 7ce9edd670..4f4ee0195f 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/index.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/index.tsx @@ -15,9 +15,6 @@ export interface GeneralSettings { helpPhone: string; helpOpeningHours: string; homepage: string; - isPlanningDataCollected: boolean; - portalName: string; - portalUrl: string; } export interface FormProps { @@ -36,9 +33,6 @@ const GeneralSettings: React.FC = () => { helpPhone: "", helpOpeningHours: "", homepage: "", - isPlanningDataCollected: true, - portalName: "", - portalUrl: "", }; useEffect(() => { diff --git a/hasura.planx.uk/metadata/tables.yaml b/hasura.planx.uk/metadata/tables.yaml index d96ec6375d..e920555a75 100644 --- a/hasura.planx.uk/metadata/tables.yaml +++ b/hasura.planx.uk/metadata/tables.yaml @@ -1660,9 +1660,6 @@ - role: api permission: columns: - - has_planning_data - - id - - team_id - boundary_json - boundary_url - email_reply_to_id @@ -1672,15 +1669,14 @@ - help_opening_hours - help_phone - homepage + - id - reference_code + - team_id filter: {} comment: "" - role: platformAdmin permission: columns: - - has_planning_data - - id - - team_id - boundary_json - boundary_url - email_reply_to_id @@ -1690,7 +1686,9 @@ - help_opening_hours - help_phone - homepage + - id - reference_code + - team_id filter: {} comment: "" - role: public @@ -1700,7 +1698,6 @@ - boundary_url - external_planning_site_name - external_planning_site_url - - has_planning_data - homepage - id - reference_code @@ -1710,9 +1707,6 @@ - role: teamEditor permission: columns: - - has_planning_data - - id - - team_id - boundary_json - boundary_url - email_reply_to_id @@ -1722,7 +1716,9 @@ - help_opening_hours - help_phone - homepage + - id - reference_code + - team_id filter: {} comment: "" update_permissions: @@ -1733,7 +1729,6 @@ - email_reply_to_id - external_planning_site_name - external_planning_site_url - - has_planning_data - help_email - help_opening_hours - help_phone @@ -1749,7 +1744,6 @@ - email_reply_to_id - external_planning_site_name - external_planning_site_url - - has_planning_data - help_email - help_opening_hours - help_phone diff --git a/hasura.planx.uk/migrations/1719307850258_alter_table_public_team_settings_drop_column_has_planning_data/down.sql b/hasura.planx.uk/migrations/1719307850258_alter_table_public_team_settings_drop_column_has_planning_data/down.sql new file mode 100644 index 0000000000..0fc61106ff --- /dev/null +++ b/hasura.planx.uk/migrations/1719307850258_alter_table_public_team_settings_drop_column_has_planning_data/down.sql @@ -0,0 +1,4 @@ +alter table "public"."team_settings" add column "has_planning_data" bool; +comment on column "public"."team_settings"."has_planning_data" is E'Global settings for boundary and contact details'; +alter table "public"."team_settings" alter column "has_planning_data" set default false; +alter table "public"."team_settings" alter column "has_planning_data" drop not null; diff --git a/hasura.planx.uk/migrations/1719307850258_alter_table_public_team_settings_drop_column_has_planning_data/up.sql b/hasura.planx.uk/migrations/1719307850258_alter_table_public_team_settings_drop_column_has_planning_data/up.sql new file mode 100644 index 0000000000..e24d901a31 --- /dev/null +++ b/hasura.planx.uk/migrations/1719307850258_alter_table_public_team_settings_drop_column_has_planning_data/up.sql @@ -0,0 +1 @@ +alter table "public"."team_settings" drop column "has_planning_data" cascade; From 579be6e2a3a084b0c2ffaa764ba6f4189cb4ec90 Mon Sep 17 00:00:00 2001 From: Rory Doak <138574807+RODO94@users.noreply.github.com> Date: Tue, 25 Jun 2024 14:17:49 +0100 Subject: [PATCH 060/150] refactor: [skip pizza] commenting out general settings tab (#3318) --- editor.planx.uk/src/routes/teamSettings.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/editor.planx.uk/src/routes/teamSettings.tsx b/editor.planx.uk/src/routes/teamSettings.tsx index 587160a6ea..c03254a546 100644 --- a/editor.planx.uk/src/routes/teamSettings.tsx +++ b/editor.planx.uk/src/routes/teamSettings.tsx @@ -47,11 +47,11 @@ const teamSettingsRoutes = compose( route: "design", Component: DesignSettings, }, - { + /* { name: "General", route: "general", Component: GeneralSettings, - }, + },*/ ]} /> ), From be6a176da39bff13cef8164b9b4468f75e0417b3 Mon Sep 17 00:00:00 2001 From: Rory Doak <138574807+RODO94@users.noreply.github.com> Date: Wed, 26 Jun 2024 09:35:16 +0100 Subject: [PATCH 061/150] feat: add scripts for pulling ``team_settings`` data from production (#3315) --- hasura.planx.uk/metadata/tables.yaml | 7 ++ scripts/seed-database/container.sh | 1 + scripts/seed-database/write/main.sql | 1 + scripts/seed-database/write/team_settings.sql | 65 +++++++++++++++++++ 4 files changed, 74 insertions(+) create mode 100644 scripts/seed-database/write/team_settings.sql diff --git a/hasura.planx.uk/metadata/tables.yaml b/hasura.planx.uk/metadata/tables.yaml index e920555a75..bc532a857d 100644 --- a/hasura.planx.uk/metadata/tables.yaml +++ b/hasura.planx.uk/metadata/tables.yaml @@ -1856,6 +1856,13 @@ table: name: team_integrations schema: public + - name: team_settings + using: + foreign_key_constraint_on: + column: team_id + table: + name: team_settings + schema: public - name: theme using: foreign_key_constraint_on: diff --git a/scripts/seed-database/container.sh b/scripts/seed-database/container.sh index a4c369f8cd..03390220ad 100755 --- a/scripts/seed-database/container.sh +++ b/scripts/seed-database/container.sh @@ -26,6 +26,7 @@ tables=( flow_document_templates team_members team_themes + team_settings # Optional tables # Please comment in if working on a feature and you require example data locally # You will need to manually grant select permissions to the github_actions on production, and update main.sql diff --git a/scripts/seed-database/write/main.sql b/scripts/seed-database/write/main.sql index 4a75095dfd..a3c284c12f 100644 --- a/scripts/seed-database/write/main.sql +++ b/scripts/seed-database/write/main.sql @@ -7,6 +7,7 @@ \include write/team_members.sql \include write/team_integrations.sql \include write/team_themes.sql +\include write/team_settings.sql -- Optional tables -- \include write/feedback.sql \ No newline at end of file diff --git a/scripts/seed-database/write/team_settings.sql b/scripts/seed-database/write/team_settings.sql new file mode 100644 index 0000000000..1278dac0aa --- /dev/null +++ b/scripts/seed-database/write/team_settings.sql @@ -0,0 +1,65 @@ +-- insert teams_settings overwriting conflicts +CREATE TEMPORARY TABLE sync_team_settings ( + id integer, + team_id integer, + reference_code text, + homepage text, + help_email text, + help_phone text, + help_opening_hours text, + email_reply_to_id text, + external_planning_site_url text, + external_planning_site_name text, + boundary_url text, + boundary_json jsonb +); + +\copy sync_team_settings FROM '/tmp/team_settings.csv' WITH (FORMAT csv, DELIMITER ';'); + +INSERT INTO + team_settings ( + id, + team_id, + reference_code, + homepage, + help_email, + help_phone, + help_opening_hours, + email_reply_to_id, + external_planning_site_url, + external_planning_site_name, + boundary_url, + boundary_json + ) +SELECT + id, + team_id, + reference_code, + homepage, + help_email, + help_phone, + help_opening_hours, + email_reply_to_id, + external_planning_site_url, + external_planning_site_name, + boundary_url, + boundary_json +FROM + sync_team_settings ON CONFLICT (id) DO +UPDATE +SET + team_id = EXCLUDED.team_id, + reference_code = EXCLUDED.reference_code, + homepage = EXCLUDED.homepage, + help_email = EXCLUDED.help_email, + help_phone = EXCLUDED.help_phone, + help_opening_hours = EXCLUDED.help_opening_hours, + email_reply_to_id = EXCLUDED.email_reply_to_id, + external_planning_site_url = EXCLUDED.external_planning_site_url, + external_planning_site_name = EXCLUDED.external_planning_site_name, + boundary_url = EXCLUDED.boundary_url, + boundary_json = EXCLUDED.boundary_json; +SELECT + setval('team_settings_id_seq', max(id)) +FROM + team_settings; \ No newline at end of file From 36016b9a96bf50a2fed2c7d42f58a01da6fc5223 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Wed, 26 Jun 2024 11:30:43 +0100 Subject: [PATCH 062/150] feat: Scroll active list item into view (#3320) --- .../@planx/components/List/Public/index.test.tsx | 1 + .../src/@planx/components/List/Public/index.tsx | 13 ++++++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) 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 aa47784682..2d4ce28ced 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 @@ -13,6 +13,7 @@ import { mockMaxOneProps } from "../schemas/mocks/MaxOne"; import { mockZooPayload, mockZooProps } from "../schemas/mocks/Zoo"; jest.setTimeout(20_000); +Element.prototype.scrollIntoView = jest.fn(); describe("Basic UI", () => { it("renders correctly", () => { 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 44117493dc..66efdcd9d9 100644 --- a/editor.planx.uk/src/@planx/components/List/Public/index.tsx +++ b/editor.planx.uk/src/@planx/components/List/Public/index.tsx @@ -9,7 +9,7 @@ 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"; @@ -67,12 +67,19 @@ const ActiveListCard: React.FC<{ }> = ({ index: i }) => { const { schema, saveItem, cancelEditItem, errors, isPageComponent } = useListContext(); - + + const ref = useRef(null); + useEffect(() => { + if (ref.current) { + ref.current.scrollIntoView({ behavior: "smooth" }) + } + }, []); + return ( - + {schema.type} {!isPageComponent && ` ${i + 1}`} From 582e066c61a4f78a55fc7d012e1399e0a7e496b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Wed, 26 Jun 2024 11:31:11 +0100 Subject: [PATCH 063/150] fix: Prevent event bubbling on click of checkbox (#3316) --- .../src/@planx/components/Checklist/Public.test.tsx | 5 +++-- editor.planx.uk/src/ui/shared/Checkbox.tsx | 8 ++++++-- 2 files changed, 9 insertions(+), 4 deletions(-) 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/ui/shared/Checkbox.tsx b/editor.planx.uk/src/ui/shared/Checkbox.tsx index c3ba044fb5..5637178092 100644 --- a/editor.planx.uk/src/ui/shared/Checkbox.tsx +++ b/editor.planx.uk/src/ui/shared/Checkbox.tsx @@ -56,14 +56,18 @@ export default function Checkbox({ onChange, inputProps, }: Props): FCReturn { + const handleChange = (e: React.MouseEvent) => { + e.preventDefault() + onChange && onChange(); + } + return ( - onChange && onChange()}> + onChange && onChange()} {...inputProps} /> From fb336c2119fad79b57744f2ad812e97120288cb0 Mon Sep 17 00:00:00 2001 From: Ian Jones <51156018+ianjon3s@users.noreply.github.com> Date: Wed, 26 Jun 2024 12:02:57 +0100 Subject: [PATCH 064/150] fix: List component radio remove extra margin (#3322) --- editor.planx.uk/src/@planx/components/List/Public/Fields.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 17b3de56f3..41d579db57 100644 --- a/editor.planx.uk/src/@planx/components/List/Public/Fields.tsx +++ b/editor.planx.uk/src/@planx/components/List/Public/Fields.tsx @@ -133,7 +133,7 @@ export const RadioFieldInput: React.FC> = (props) => { {data.options.map(({ id, data }) => ( From 367c3fc9768da9d57d0d898244b84145eff472ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Wed, 26 Jun 2024 12:04:49 +0100 Subject: [PATCH 065/150] test: Fix skipped List component test (#3321) --- .../components/List/Public/index.test.tsx | 42 ++++++++++++------- .../List/schemas/mocks/GenericUnits.ts | 4 +- 2 files changed, 30 insertions(+), 16 deletions(-) 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 2d4ce28ced..77219cf89a 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 @@ -414,48 +414,62 @@ describe("Payload generation", () => { expect(handleSubmit.mock.calls[0][0]).toMatchObject(mockZooPayload); }); - it.skip("generates a valid payload with summary stats on submission (Units)", async () => { + it("generates a valid payload with summary stats on submission (Units)", async () => { const handleSubmit = jest.fn(); - const { getByTestId, user } = setup( + const { getByTestId, user, getByRole, getAllByRole, getByLabelText } = setup( , ); - const saveButton = screen.getByRole("button", { name: /Save/ }); const addItemButton = getByTestId("list-add-button"); - const developmentSelect = screen.getByRole("combobox"); - const gardenYesRadio = screen.getAllByRole("radio")[0]; - const gardenNoRadio = screen.getAllByRole("radio")[1]; - const unitsNumberInput = screen.getByLabelText(/identical units/); // 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(screen.getByRole("option", { name: /New build/ })); + 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(screen.getByRole("option", { name: /New build/ })); + 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( - screen.getByRole("option", { name: /Change of use to a home/ }), - ); + 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(screen.getByTestId("continue-button")); + await user.click(getByTestId("continue-button")); expect(handleSubmit).toHaveBeenCalled(); - expect(handleSubmit.mock.calls[0][0]).toMatchObject(mockUnitsPayload); + const output = handleSubmit.mock.calls[0][0] + expect(output).toMatchObject(mockUnitsPayload); }); }); 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 index 808da9a921..344851ab8c 100644 --- a/editor.planx.uk/src/@planx/components/List/schemas/mocks/GenericUnits.ts +++ b/editor.planx.uk/src/@planx/components/List/schemas/mocks/GenericUnits.ts @@ -89,7 +89,7 @@ export const mockUnitsPayload = { "proposal.units.residential.three.identicalUnits": 2, "proposal.units.residential.total.listItems": 3, "proposal.units.residential.total.units": 5, - "proposal.units.residential.total.units.newBuid": 3, - "proposal.units.residential.total.units.changeOfUseTo": 2, + "proposal.units.residential.total.units.development.newBuild": 3, + "proposal.units.residential.total.units.development.changeOfUseTo": 2, }, }; From 420c59ca6d16a7488558283c2983fce4cdfc175e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Thu, 27 Jun 2024 08:52:38 +0100 Subject: [PATCH 066/150] chore: Log full error when building digital planning application (#3325) --- api.planx.uk/modules/admin/session/digitalPlanningData.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/api.planx.uk/modules/admin/session/digitalPlanningData.ts b/api.planx.uk/modules/admin/session/digitalPlanningData.ts index f974839b28..211644e62b 100644 --- a/api.planx.uk/modules/admin/session/digitalPlanningData.ts +++ b/api.planx.uk/modules/admin/session/digitalPlanningData.ts @@ -40,9 +40,8 @@ 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: + ${JSON.stringify(error as Error, null, 2)}.`, }); } }; From fa61ca27f9255fde69c11b2692cd16bdc2ef56ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Thu, 27 Jun 2024 10:46:43 +0100 Subject: [PATCH 067/150] fix: Log raw error without `JSON.stringify()` (#3327) --- api.planx.uk/modules/admin/session/digitalPlanningData.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/api.planx.uk/modules/admin/session/digitalPlanningData.ts b/api.planx.uk/modules/admin/session/digitalPlanningData.ts index 211644e62b..5ad773a9fa 100644 --- a/api.planx.uk/modules/admin/session/digitalPlanningData.ts +++ b/api.planx.uk/modules/admin/session/digitalPlanningData.ts @@ -40,8 +40,7 @@ export const getDigitalPlanningApplicationPayload = async ( return res.send(data); } catch (error) { return next({ - message: `Failed to make Digital Planning Application payload: - ${JSON.stringify(error as Error, null, 2)}.`, + message: `Failed to make Digital Planning Application payload: ${error}`, }); } }; From 91784c2ac4d3bda48a4616d86d41f384a33863d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Thu, 27 Jun 2024 11:58:12 +0100 Subject: [PATCH 068/150] fix: Log error stack explicitly on DPA failures (#3328) --- api.planx.uk/modules/admin/session/digitalPlanningData.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api.planx.uk/modules/admin/session/digitalPlanningData.ts b/api.planx.uk/modules/admin/session/digitalPlanningData.ts index 5ad773a9fa..1089e1aef4 100644 --- a/api.planx.uk/modules/admin/session/digitalPlanningData.ts +++ b/api.planx.uk/modules/admin/session/digitalPlanningData.ts @@ -40,7 +40,7 @@ export const getDigitalPlanningApplicationPayload = async ( return res.send(data); } catch (error) { return next({ - message: `Failed to make Digital Planning Application payload: ${error}`, + message: `Failed to make Digital Planning Application payload: ${error}. Stack: ${(error as Error).stack}`, }); } }; From b58431a597490ef5879d92f18b7ea4230c9d7d23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Thu, 27 Jun 2024 17:27:39 +0100 Subject: [PATCH 069/150] chore: Bump planx-core (#3329) --- api.planx.uk/package.json | 2 +- api.planx.uk/pnpm-lock.yaml | 42 +++++++++----- e2e/tests/api-driven/package.json | 2 +- e2e/tests/api-driven/pnpm-lock.yaml | 57 +++++++++--------- e2e/tests/ui-driven/package.json | 2 +- e2e/tests/ui-driven/pnpm-lock.yaml | 64 ++++++++++++++------ editor.planx.uk/package.json | 2 +- editor.planx.uk/pnpm-lock.yaml | 90 +++++++++++++++-------------- 8 files changed, 156 insertions(+), 105 deletions(-) diff --git a/api.planx.uk/package.json b/api.planx.uk/package.json index cba612e645..6d22514c38 100644 --- a/api.planx.uk/package.json +++ b/api.planx.uk/package.json @@ -4,7 +4,7 @@ "private": true, "dependencies": { "@airbrake/node": "^2.1.8", - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#ccca2ac", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#db69b87", "@types/isomorphic-fetch": "^0.0.36", "adm-zip": "^0.5.10", "aws-sdk": "^2.1467.0", diff --git a/api.planx.uk/pnpm-lock.yaml b/api.planx.uk/pnpm-lock.yaml index 3a52421e30..bf8e45241a 100644 --- a/api.planx.uk/pnpm-lock.yaml +++ b/api.planx.uk/pnpm-lock.yaml @@ -14,8 +14,8 @@ dependencies: specifier: ^2.1.8 version: 2.1.8 '@opensystemslab/planx-core': - specifier: git+https://github.com/theopensystemslab/planx-core#ccca2ac - version: github.com/theopensystemslab/planx-core/ccca2ac + specifier: git+https://github.com/theopensystemslab/planx-core#db69b87 + version: github.com/theopensystemslab/planx-core/db69b87 '@types/isomorphic-fetch': specifier: ^0.0.36 version: 0.0.36 @@ -1215,12 +1215,12 @@ packages: resolution: {integrity: sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==} 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: @@ -4463,14 +4463,14 @@ packages: - 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 @@ -4487,6 +4487,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 + /growly@1.3.0: resolution: {integrity: sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==} dev: true @@ -5655,6 +5660,7 @@ packages: chalk: 3.0.0 diff-match-patch: 1.0.5 dev: false + bundledDependencies: [] /jsonwebtoken@9.0.2: resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} @@ -5916,8 +5922,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 @@ -7978,6 +7984,11 @@ packages: engines: {node: '>= 0.4.0'} dev: false + /uuid@10.0.0: + resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} + hasBin: true + dev: false + /uuid@8.0.0: resolution: {integrity: sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==} hasBin: true @@ -7991,6 +8002,7 @@ packages: /uuid@9.0.1: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true + dev: true /v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} @@ -8276,8 +8288,8 @@ packages: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} dev: false - github.com/theopensystemslab/planx-core/ccca2ac: - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/ccca2ac} + github.com/theopensystemslab/planx-core/db69b87: + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/db69b87} name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true @@ -8294,16 +8306,16 @@ packages: 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) + graphql: 16.9.0 + graphql-request: 6.1.0(graphql@16.9.0) json-schema-to-typescript: 14.0.5 lodash: 4.17.21 - marked: 12.0.2 + marked: 13.0.1 prettier: 3.3.2 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) type-fest: 4.20.1 - uuid: 9.0.1 + uuid: 10.0.0 zod: 3.23.8 transitivePeerDependencies: - '@types/react' diff --git a/e2e/tests/api-driven/package.json b/e2e/tests/api-driven/package.json index 45a707d37a..182998d643 100644 --- a/e2e/tests/api-driven/package.json +++ b/e2e/tests/api-driven/package.json @@ -6,7 +6,7 @@ }, "dependencies": { "@cucumber/cucumber": "^9.3.0", - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#ccca2ac", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#db69b87", "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 62c398b969..f8932507e3 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#ccca2ac - version: github.com/theopensystemslab/planx-core/ccca2ac + specifier: git+https://github.com/theopensystemslab/planx-core#db69b87 + version: github.com/theopensystemslab/planx-core/db69b87 axios: specifier: ^1.6.8 version: 1.6.8 @@ -435,12 +435,12 @@ packages: resolution: {integrity: sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==} 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: @@ -1611,14 +1611,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 @@ -1638,6 +1638,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'} @@ -1827,7 +1832,7 @@ packages: mkdirp: 3.0.1 mz: 2.7.0 node-fetch: 3.3.2 - prettier: 3.3.1 + prettier: 3.3.2 dev: false /json-schema-traverse@0.4.1: @@ -2007,8 +2012,8 @@ 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 @@ -2290,8 +2295,8 @@ packages: engines: {node: '>= 0.8.0'} dev: false - /prettier@3.3.1: - resolution: {integrity: sha512-7CAwy5dRsxs8PHXT3twixW9/OEll8MLE0VRPCJyl7CkS6VHGPSlsVaWTiASPTyGyYRyApxlaWTzwUxVNrhcwDg==} + /prettier@3.3.2: + resolution: {integrity: sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==} engines: {node: '>=14'} hasBin: true dev: false @@ -2734,8 +2739,8 @@ packages: engines: {node: '>=10'} dev: false - /type-fest@4.20.0: - resolution: {integrity: sha512-MBh+PHUHHisjXf4tlx0CFWoMdjx8zCMLJHOjnV1prABYZFHqtFOyauCIK2/7w4oIfwkF8iNhLtnJEfVY2vn3iw==} + /type-fest@4.20.1: + resolution: {integrity: sha512-R6wDsVsoS9xYOpy8vgeBlqpdOyzJ12HNfQhC/aAKWM3YoCV9TtunJzh/QpkMgeDhkoynDcw5f1y+qF9yc/HHyg==} engines: {node: '>=16'} dev: false @@ -2778,13 +2783,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==} + /uuid@9.0.0: + resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==} hasBin: true dev: false @@ -2938,8 +2943,8 @@ packages: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} dev: false - github.com/theopensystemslab/planx-core/ccca2ac: - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/ccca2ac} + github.com/theopensystemslab/planx-core/db69b87: + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/db69b87} name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true @@ -2956,16 +2961,16 @@ packages: 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) + graphql: 16.9.0 + graphql-request: 6.1.0(graphql@16.9.0) json-schema-to-typescript: 14.0.5 lodash: 4.17.21 - marked: 12.0.2 - prettier: 3.3.1 + marked: 13.0.1 + prettier: 3.3.2 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - type-fest: 4.20.0 - uuid: 9.0.1 + type-fest: 4.20.1 + uuid: 10.0.0 zod: 3.23.8 transitivePeerDependencies: - '@types/react' diff --git a/e2e/tests/ui-driven/package.json b/e2e/tests/ui-driven/package.json index ff08bc350a..e7bbd7563a 100644 --- a/e2e/tests/ui-driven/package.json +++ b/e2e/tests/ui-driven/package.json @@ -8,7 +8,7 @@ "postinstall": "./install-dependencies.sh" }, "dependencies": { - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#ccca2ac", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#db69b87", "axios": "^1.6.8", "dotenv": "^16.3.1", "eslint": "^8.56.0", diff --git a/e2e/tests/ui-driven/pnpm-lock.yaml b/e2e/tests/ui-driven/pnpm-lock.yaml index 0368341d33..fa32bed152 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#ccca2ac - version: github.com/theopensystemslab/planx-core/ccca2ac + specifier: git+https://github.com/theopensystemslab/planx-core#db69b87 + version: github.com/theopensystemslab/planx-core/db69b87 axios: specifier: ^1.6.8 version: 1.6.8 @@ -307,6 +307,14 @@ 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'} @@ -1510,11 +1518,28 @@ packages: - encoding dev: false + /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.9.0) + cross-fetch: 3.1.8 + graphql: 16.9.0 + transitivePeerDependencies: + - encoding + dev: false + /graphql@16.8.1: resolution: {integrity: sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==} 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-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} @@ -1703,7 +1728,7 @@ packages: mkdirp: 3.0.1 mz: 2.7.0 node-fetch: 3.3.2 - prettier: 3.3.1 + prettier: 3.3.2 dev: false /json-schema-traverse@0.4.1: @@ -1837,8 +1862,8 @@ 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 @@ -2145,8 +2170,8 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - /prettier@3.3.1: - resolution: {integrity: sha512-7CAwy5dRsxs8PHXT3twixW9/OEll8MLE0VRPCJyl7CkS6VHGPSlsVaWTiASPTyGyYRyApxlaWTzwUxVNrhcwDg==} + /prettier@3.3.2: + resolution: {integrity: sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==} engines: {node: '>=14'} hasBin: true dev: false @@ -2529,8 +2554,8 @@ packages: engines: {node: '>=12.20'} dev: false - /type-fest@4.20.0: - resolution: {integrity: sha512-MBh+PHUHHisjXf4tlx0CFWoMdjx8zCMLJHOjnV1prABYZFHqtFOyauCIK2/7w4oIfwkF8iNhLtnJEfVY2vn3iw==} + /type-fest@4.20.1: + resolution: {integrity: sha512-R6wDsVsoS9xYOpy8vgeBlqpdOyzJ12HNfQhC/aAKWM3YoCV9TtunJzh/QpkMgeDhkoynDcw5f1y+qF9yc/HHyg==} engines: {node: '>=16'} dev: false @@ -2563,6 +2588,11 @@ 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 @@ -2684,8 +2714,8 @@ packages: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} dev: false - github.com/theopensystemslab/planx-core/ccca2ac: - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/ccca2ac} + github.com/theopensystemslab/planx-core/db69b87: + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/db69b87} name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true @@ -2702,16 +2732,16 @@ packages: 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) + graphql: 16.9.0 + graphql-request: 6.1.0(graphql@16.9.0) json-schema-to-typescript: 14.0.5 lodash: 4.17.21 - marked: 12.0.2 - prettier: 3.3.1 + marked: 13.0.1 + prettier: 3.3.2 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - type-fest: 4.20.0 - uuid: 9.0.1 + type-fest: 4.20.1 + uuid: 10.0.0 zod: 3.23.8 transitivePeerDependencies: - '@types/react' diff --git a/editor.planx.uk/package.json b/editor.planx.uk/package.json index 9fac48b122..06710a7fe1 100644 --- a/editor.planx.uk/package.json +++ b/editor.planx.uk/package.json @@ -13,7 +13,7 @@ "@mui/material": "^5.15.2", "@mui/utils": "^5.15.2", "@opensystemslab/map": "^0.8.2", - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#ccca2ac", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#db69b87", "@tiptap/core": "^2.4.0", "@tiptap/extension-bold": "^2.0.3", "@tiptap/extension-bubble-menu": "^2.1.13", diff --git a/editor.planx.uk/pnpm-lock.yaml b/editor.planx.uk/pnpm-lock.yaml index f826773d6c..85bffcd85b 100644 --- a/editor.planx.uk/pnpm-lock.yaml +++ b/editor.planx.uk/pnpm-lock.yaml @@ -42,8 +42,8 @@ dependencies: specifier: ^0.8.2 version: 0.8.2 '@opensystemslab/planx-core': - specifier: git+https://github.com/theopensystemslab/planx-core#ccca2ac - version: github.com/theopensystemslab/planx-core/ccca2ac(@types/react@18.2.45) + specifier: git+https://github.com/theopensystemslab/planx-core#db69b87 + version: github.com/theopensystemslab/planx-core/db69b87(@types/react@18.2.45) '@tiptap/core': specifier: ^2.4.0 version: 2.4.0(@tiptap/pm@2.0.3) @@ -4576,6 +4576,14 @@ 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'} @@ -6652,11 +6660,11 @@ packages: - supports-color dev: true - /@storybook/builder-manager@8.1.10(prettier@3.0.0): + /@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.10(prettier@3.0.0) + '@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 @@ -6760,12 +6768,12 @@ packages: '@babel/types': 7.24.7 '@ndelangen/get-tarball': 3.0.9 '@storybook/codemod': 8.1.10 - '@storybook/core-common': 8.1.10(prettier@3.0.0) + '@storybook/core-common': 8.1.10(prettier@3.3.2) '@storybook/core-events': 8.1.10 - '@storybook/core-server': 8.1.10(prettier@3.0.0)(react-dom@18.2.0)(react@18.2.0) + '@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.0.0) + '@storybook/telemetry': 8.1.10(prettier@3.3.2) '@storybook/types': 8.1.10 '@types/semver': 7.5.8 '@yarnpkg/fslib': 2.10.3 @@ -6904,7 +6912,7 @@ packages: - supports-color dev: true - /@storybook/core-common@8.1.10(prettier@3.0.0): + /@storybook/core-common@8.1.10(prettier@3.3.2): resolution: {integrity: sha512-+0GhgDRQwUlXu1lY77NdLnVBVycCEW0DG7eu7rvLYYkTyNRxbdl2RWsQpjr/j4sxqT6u82l9/b+RWpmsl4MgMQ==} peerDependencies: prettier: ^2 || ^3 @@ -6933,8 +6941,8 @@ packages: node-fetch: 2.7.0 picomatch: 2.3.1 pkg-dir: 5.0.0 - prettier: 3.0.0 - prettier-fallback: /prettier@3.0.0 + prettier: 3.3.2 + prettier-fallback: /prettier@3.3.2 pretty-hrtime: 1.0.3 resolve-from: 5.0.0 semver: 7.6.2 @@ -6966,16 +6974,16 @@ packages: ts-dedent: 2.2.0 dev: true - /@storybook/core-server@8.1.10(prettier@3.0.0)(react-dom@18.2.0)(react@18.2.0): + /@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.7 '@babel/parser': 7.24.7 '@discoveryjs/json-ext': 0.5.7 - '@storybook/builder-manager': 8.1.10(prettier@3.0.0) + '@storybook/builder-manager': 8.1.10(prettier@3.3.2) '@storybook/channels': 8.1.10 - '@storybook/core-common': 8.1.10(prettier@3.0.0) + '@storybook/core-common': 8.1.10(prettier@3.3.2) '@storybook/core-events': 8.1.10 '@storybook/csf': 0.1.8 '@storybook/csf-tools': 8.1.10 @@ -6985,7 +6993,7 @@ packages: '@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.0.0) + '@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 @@ -7427,11 +7435,11 @@ packages: qs: 6.12.1 dev: true - /@storybook/telemetry@8.1.10(prettier@3.0.0): + /@storybook/telemetry@8.1.10(prettier@3.3.2): resolution: {integrity: sha512-pwiMWrq85D0AnaAgYNfB2w2BDgqnetQ+tXwsUAw4fUEFwA4oPU6r0uqekRbNNE6wmSSYjiiFP3JgknBFqjd2hg==} dependencies: '@storybook/client-logger': 8.1.10 - '@storybook/core-common': 8.1.10(prettier@3.0.0) + '@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 @@ -7745,20 +7753,6 @@ packages: pretty-format: 27.5.1 dev: true - /@testing-library/dom@8.20.1: - resolution: {integrity: sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==} - engines: {node: '>=12'} - dependencies: - '@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 - dom-accessibility-api: 0.5.16 - lz-string: 1.5.0 - pretty-format: 27.5.1 - dev: true - /@testing-library/dom@9.3.4: resolution: {integrity: sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==} engines: {node: '>=14'} @@ -7796,7 +7790,7 @@ packages: react-dom: ^18.0.0 dependencies: '@babel/runtime': 7.24.7 - '@testing-library/dom': 8.20.1 + '@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) @@ -13167,14 +13161,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 @@ -13194,6 +13188,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 @@ -15486,8 +15485,8 @@ packages: react: 18.2.0 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 @@ -20863,6 +20862,11 @@ packages: 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 @@ -21636,9 +21640,9 @@ packages: use-sync-external-store: 1.2.0(react@18.2.0) dev: false - github.com/theopensystemslab/planx-core/ccca2ac(@types/react@18.2.45): - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/ccca2ac} - id: github.com/theopensystemslab/planx-core/ccca2ac + github.com/theopensystemslab/planx-core/db69b87(@types/react@18.2.45): + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/db69b87} + id: github.com/theopensystemslab/planx-core/db69b87 name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true @@ -21655,16 +21659,16 @@ packages: 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) + graphql: 16.9.0 + graphql-request: 6.1.0(graphql@16.9.0) json-schema-to-typescript: 14.0.5 lodash: 4.17.21 - marked: 12.0.2 + marked: 13.0.1 prettier: 3.3.2 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) type-fest: 4.20.1 - uuid: 9.0.1 + uuid: 10.0.0 zod: 3.23.8 transitivePeerDependencies: - '@types/react' From 90b09f96c69563a70c3bc2f187f420daba2a82f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Fri, 28 Jun 2024 09:52:49 +0100 Subject: [PATCH 070/150] feat: Remove optional/required distinction in List schema (#3332) --- .../@planx/components/List/Public/Fields.tsx | 20 +++++++++---------- .../components/List/Public/index.test.tsx | 1 - .../src/@planx/components/List/model.ts | 6 ++---- 3 files changed, 11 insertions(+), 16 deletions(-) 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 41d579db57..6c99ce5613 100644 --- a/editor.planx.uk/src/@planx/components/List/Public/Fields.tsx +++ b/editor.planx.uk/src/@planx/components/List/Public/Fields.tsx @@ -22,13 +22,12 @@ type Props = T & { id: string }; export const TextFieldInput: React.FC> = ({ id, data, - required, }) => { const { formik, activeIndex } = useListContext(); return ( > = ({ data.type && ["long", "extraLong"].includes(data.type) ? 5 : undefined } name={`userData[${activeIndex}]['${data.fn}']`} - required={required} + required inputProps={{ "aria-describedby": [ data.description ? DESCRIPTION_TEXT : "", @@ -69,18 +68,17 @@ export const TextFieldInput: React.FC> = ({ export const NumberFieldInput: React.FC> = ({ id, data, - required, }) => { const { formik, activeIndex } = useListContext(); return ( > = ({ export const RadioFieldInput: React.FC> = (props) => { const { formik, activeIndex } = useListContext(); - const { id, data, required } = props; + const { id, data } = props; return ( @@ -124,7 +122,7 @@ export const RadioFieldInput: React.FC> = (props) => { }, })} > - {required === false ? data.title + " (optional)" : data.title} + {data.title} > = (props) => { export const SelectFieldInput: React.FC> = (props) => { const { formik, activeIndex } = useListContext(); - const { id, data, required } = props; + const { id, data } = props; const isDisabled = (option: Option) => { if (!props.unique) return false; @@ -168,7 +166,7 @@ export const SelectFieldInput: React.FC> = (props) => { return ( > = (props) => { > { test.todo("number fields use existing validation schemas"); test.todo("question fields use validation schema"); test.todo("unique constraints are enforced on question where this is set"); - test.todo("optional fields can be empty when saving an item"); test.todo("an error displays if the minimum number of items is not met"); test.todo("an error displays if the maximum number of items is exceeded"); test.todo( diff --git a/editor.planx.uk/src/@planx/components/List/model.ts b/editor.planx.uk/src/@planx/components/List/model.ts index 89ad950cfc..e4d887ff0a 100644 --- a/editor.planx.uk/src/@planx/components/List/model.ts +++ b/editor.planx.uk/src/@planx/components/List/model.ts @@ -28,20 +28,18 @@ const questionInputValidationSchema = (data: QuestionInput) => .oneOf(data.options.map((option) => option.data.val || option.data.text)) .required("Select your answer before continuing"); -// TODO: Add summary fields for inactive view? 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; unique?: boolean; data: QuestionInput & { fn: string }; }; From f7410aa2643c87c04c18becdfa6420373e12a732 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Fri, 28 Jun 2024 11:12:32 +0100 Subject: [PATCH 071/150] fix: Trim all form values on node creation (#3330) --- .../@planx/components/shared/index.test.ts | 20 +++++++++++++++++++ .../src/@planx/components/shared/index.ts | 3 +++ .../FlowEditor/components/forms/FormModal.tsx | 1 - 3 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 editor.planx.uk/src/@planx/components/shared/index.test.ts diff --git a/editor.planx.uk/src/@planx/components/shared/index.test.ts b/editor.planx.uk/src/@planx/components/shared/index.test.ts new file mode 100644 index 0000000000..81056be44f --- /dev/null +++ b/editor.planx.uk/src/@planx/components/shared/index.test.ts @@ -0,0 +1,20 @@ +import { parseFormValues } from "."; + +describe("parseFormValues util", () => { + it("trims nested strings", () => { + const input = { + type: 100, + data: { + description: "description ", + fn: "my.data.field ", + img: "", + text: "Question ", + }, + }; + const output = parseFormValues(Object.entries(input)); + + expect(output.data.fn).toEqual("my.data.field"); + expect(output.data.text).toEqual("Question"); + expect(output.data.description).toEqual("description"); + }) +}); \ No newline at end of file diff --git a/editor.planx.uk/src/@planx/components/shared/index.ts b/editor.planx.uk/src/@planx/components/shared/index.ts index 364bc753bd..c89b7f1df7 100644 --- a/editor.planx.uk/src/@planx/components/shared/index.ts +++ b/editor.planx.uk/src/@planx/components/shared/index.ts @@ -44,6 +44,9 @@ export const parseFormValues = (ob: any, defaultValues = {}) => .map((o) => parseFormValues(Object.entries(o))) // don't store options with no values .filter((o) => Object.keys(o).length > 0); + } else if (v && typeof v === "object") { + // if it's a nested object + acc[k] = parseFormValues(Object.entries(v)); } else { // it's a number or boolean etc acc[k] = v; diff --git a/editor.planx.uk/src/pages/FlowEditor/components/forms/FormModal.tsx b/editor.planx.uk/src/pages/FlowEditor/components/forms/FormModal.tsx index 1aae0ee578..c147014784 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/forms/FormModal.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/forms/FormModal.tsx @@ -10,7 +10,6 @@ import { styled } from "@mui/material/styles"; import { ComponentType as TYPES } from "@opensystemslab/planx-core/types"; import { parseFormValues } from "@planx/components/shared"; import ErrorFallback from "components/ErrorFallback"; -import { hasFeatureFlag } from "lib/featureFlags"; import React from "react"; import { ErrorBoundary } from "react-error-boundary"; import { useNavigation } from "react-navi"; From e873e11022cfb73822d30fa155cdb9a01dc226d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Fri, 28 Jun 2024 11:27:14 +0100 Subject: [PATCH 072/150] feat: Remove 'unique' property from List schema (`QuestionField`) (#3331) --- .../src/@planx/components/List/Public/Fields.tsx | 13 ------------- .../@planx/components/List/Public/index.test.tsx | 1 - editor.planx.uk/src/@planx/components/List/model.ts | 1 - 3 files changed, 15 deletions(-) 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 6c99ce5613..eeb79a1d84 100644 --- a/editor.planx.uk/src/@planx/components/List/Public/Fields.tsx +++ b/editor.planx.uk/src/@planx/components/List/Public/Fields.tsx @@ -152,18 +152,6 @@ export const SelectFieldInput: React.FC> = (props) => { const { formik, activeIndex } = useListContext(); const { id, data } = props; - const isDisabled = (option: Option) => { - if (!props.unique) return false; - - const existingValues = formik.values.userData - .map((response) => response[data.fn]) - .filter( - (value) => value === option.data.val || value === option.data.text, - ); - - return existingValues.includes(option.data.val || option.data.text); - }; - return ( > = (props) => { {option.data.text} 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 f112e3d39a..a769a82c3f 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 @@ -383,7 +383,6 @@ describe("Form validation and error handling", () => { test.todo("text fields use existing validation schemas"); test.todo("number fields use existing validation schemas"); test.todo("question fields use validation schema"); - test.todo("unique constraints are enforced on question where this is set"); test.todo("an error displays if the minimum number of items is not met"); test.todo("an error displays if the maximum number of items is exceeded"); test.todo( diff --git a/editor.planx.uk/src/@planx/components/List/model.ts b/editor.planx.uk/src/@planx/components/List/model.ts index e4d887ff0a..65adc60975 100644 --- a/editor.planx.uk/src/@planx/components/List/model.ts +++ b/editor.planx.uk/src/@planx/components/List/model.ts @@ -40,7 +40,6 @@ export type NumberField = { export type QuestionField = { type: "question"; - unique?: boolean; data: QuestionInput & { fn: string }; }; From 766e7b2c1ee0ea1f50d04ea51e5d0f1e323a5c3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Fri, 28 Jun 2024 11:42:56 +0100 Subject: [PATCH 073/150] test: Outstanding List component validation tests (#3323) --- .../@planx/components/List/Public/Context.tsx | 11 +- .../@planx/components/List/Public/Fields.tsx | 18 +- .../components/List/Public/index.test.tsx | 157 ++++++++++++++++-- .../components/List/schemas/mocks/Zoo.ts | 2 +- 4 files changed, 164 insertions(+), 24 deletions(-) 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 e9c22cee1a..bca7c02f9e 100644 --- a/editor.planx.uk/src/@planx/components/List/Public/Context.tsx +++ b/editor.planx.uk/src/@planx/components/List/Public/Context.tsx @@ -84,6 +84,11 @@ export const ListProvider: React.FC = (props) => { // 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)); @@ -120,13 +125,11 @@ export const ListProvider: React.FC = (props) => { // Do not allow submissions with an unsaved item if (activeIndex !== -1) return setUnsavedItemError(true); - // Manually validate min/max + // Manually validate minimum number of items if (formik.values.userData.length < schema.min) { return setMinError(true); } - if (schema.max && formik.values.userData.length > schema.max) { - return setMaxError(true); - } + formik.handleSubmit(); }; 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 eeb79a1d84..a5313d3cfb 100644 --- a/editor.planx.uk/src/@planx/components/List/Public/Fields.tsx +++ b/editor.planx.uk/src/@planx/components/List/Public/Fields.tsx @@ -4,7 +4,6 @@ import FormLabel from "@mui/material/FormLabel"; import MenuItem from "@mui/material/MenuItem"; import RadioGroup from "@mui/material/RadioGroup"; import { Option } from "@planx/components/shared"; -import { getIn } from "formik"; import React from "react"; import SelectInput from "ui/editor/SelectInput"; import InputLabel from "ui/public/InputLabel"; @@ -16,6 +15,7 @@ import { DESCRIPTION_TEXT, ERROR_MESSAGE } from "../../shared/constants"; import BasicRadio from "../../shared/Radio/BasicRadio"; import type { NumberField, QuestionField, TextField } from "../model"; import { useListContext } from "./Context"; +import { get } from "lodash"; type Props = T & { id: string }; @@ -40,9 +40,9 @@ export const TextFieldInput: React.FC> = ({ bordered value={formik.values.userData[activeIndex][data.fn]} onChange={formik.handleChange} - errorMessage={getIn( + errorMessage={get( formik.errors, - `userData[${activeIndex}][${data.fn}]`, + ["userData", activeIndex, data.fn], )} id={id} rows={ @@ -53,7 +53,7 @@ export const TextFieldInput: React.FC> = ({ inputProps={{ "aria-describedby": [ data.description ? DESCRIPTION_TEXT : "", - getIn(formik.errors, `userData[${activeIndex}][${data.fn}]`) + get(formik.errors, ["userData", activeIndex, data.fn]) ? `${ERROR_MESSAGE}-${id}` : "", ] @@ -84,14 +84,14 @@ export const NumberFieldInput: React.FC> = ({ type="number" value={formik.values.userData[activeIndex][data.fn]} onChange={formik.handleChange} - errorMessage={getIn( + errorMessage={get( formik.errors, - `userData[${activeIndex}][${data.fn}]`, + ["userData", activeIndex, data.fn], )} inputProps={{ "aria-describedby": [ data.description ? DESCRIPTION_TEXT : "", - getIn(formik.errors, `userData[${activeIndex}][${data.fn}]`) + get(formik.errors, ["userData", activeIndex, data.fn]) ? `${ERROR_MESSAGE}-${id}` : "", ] @@ -126,7 +126,7 @@ export const RadioFieldInput: React.FC> = (props) => { > = (props) => { > { }); describe("Form validation and error handling", () => { - test.todo("form validation is triggered when saving an item"); - test.todo("text fields use existing validation schemas"); - test.todo("number fields use existing validation schemas"); - test.todo("question fields use validation schema"); - test.todo("an error displays if the minimum number of items is not met"); - test.todo("an error displays if the maximum number of items is exceeded"); - test.todo( - "an error displays if you add a new item, without saving the active item", + 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.todo("checklist fields") + }); + + 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.todo( - "an error displays if you continue, without saving the active item", + + 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(); + } ); }); 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 index dcd948d5d5..fe94d763e4 100644 --- a/editor.planx.uk/src/@planx/components/List/schemas/mocks/Zoo.ts +++ b/editor.planx.uk/src/@planx/components/List/schemas/mocks/Zoo.ts @@ -66,7 +66,7 @@ export const Zoo: Schema = { }, ], min: 1, - max: 10, + max: 3, } as const; export const mockZooProps: Props = { From 50c8b1a6fcb051c193f2c42389aaa0a7e3680e32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Fri, 28 Jun 2024 13:05:37 +0100 Subject: [PATCH 074/150] chore: Bump Hasura fargate CPU and memory (staging) (#3335) --- infrastructure/application/Pulumi.staging.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/infrastructure/application/Pulumi.staging.yaml b/infrastructure/application/Pulumi.staging.yaml index 6b5703d6b0..7927a328cc 100644 --- a/infrastructure/application/Pulumi.staging.yaml +++ b/infrastructure/application/Pulumi.staging.yaml @@ -22,8 +22,8 @@ config: secure: AAABACgwjEmlLmE19ofRO8e/JpD8sHDV2lcDmSXbU/Mw8ZRh5gTgll8DZ3BVjpDWfQfIecBAIf2TFgeo9CsBSLjfaRJ7eJyKDSWm7i8LlMC2JN/PN+Ig8oeI0H0oLkqJIziNKKjx+e97zDiXO9LZ1CVzrywR application:hasura-admin-secret: secure: AAABAHsoh7ZNkr6ep3xXsUZpp/JIjshBX+tJ0KOFgGnJ4wxR0oIcB6VewVDuwSyFJRVix72YahM= - application:hasura-cpu: "256" - application:hasura-memory: "1024" + application:hasura-cpu: "512" + application:hasura-memory: "2048" application:hasura-planx-api-key: secure: AAABANHLs3ItPxkteh0chwMP2bKuHO3ovuRLi4FsIrCqerzXVIaTLFDqNR+4KBTeMPz4cnF5tCTwsrJv9GruZdXU+lg= application:jwt-secret: From afda8e6e5a20827f8ba78e8582e999e4cb6b7b96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Fri, 28 Jun 2024 13:05:54 +0100 Subject: [PATCH 075/150] fix: Make `val` optional in SetValue component (#3333) --- .../src/@planx/components/SetValue/Editor.tsx | 26 ++++++++++--------- .../src/@planx/components/SetValue/model.ts | 14 ++++++++-- .../src/@planx/components/SetValue/utils.ts | 15 +++++------ 3 files changed, 32 insertions(+), 23 deletions(-) diff --git a/editor.planx.uk/src/@planx/components/SetValue/Editor.tsx b/editor.planx.uk/src/@planx/components/SetValue/Editor.tsx index 69e6de5c4d..f3926067ee 100644 --- a/editor.planx.uk/src/@planx/components/SetValue/Editor.tsx +++ b/editor.planx.uk/src/@planx/components/SetValue/Editor.tsx @@ -106,18 +106,20 @@ function SetValueComponent(props: Props) { /> - - - - - + {formik.values.operation !== "removeAll" && + + + + + + } diff --git a/editor.planx.uk/src/@planx/components/SetValue/model.ts b/editor.planx.uk/src/@planx/components/SetValue/model.ts index 4433ce54e4..70b7575e1d 100644 --- a/editor.planx.uk/src/@planx/components/SetValue/model.ts +++ b/editor.planx.uk/src/@planx/components/SetValue/model.ts @@ -1,11 +1,21 @@ import { MoreInformation, parseMoreInformation } from "../shared"; -export interface SetValue extends MoreInformation { +export interface BaseSetValue extends MoreInformation { fn: string; +} + +interface SetValueWithVal extends BaseSetValue { val: string; - operation: "replace" | "append" | "removeOne" | "removeAll"; + operation: "replace" | "append" | "removeOne"; } +interface SetValueWithoutVal extends BaseSetValue { + val?: string; + operation: "removeAll"; +} + +export type SetValue = SetValueWithVal | SetValueWithoutVal; + export const parseSetValue = ( data: Record | undefined, ): SetValue => ({ diff --git a/editor.planx.uk/src/@planx/components/SetValue/utils.ts b/editor.planx.uk/src/@planx/components/SetValue/utils.ts index 46df9c9431..46530bfbcd 100644 --- a/editor.planx.uk/src/@planx/components/SetValue/utils.ts +++ b/editor.planx.uk/src/@planx/components/SetValue/utils.ts @@ -15,7 +15,7 @@ type HandleSetValue = (params: { * Called by computePassport() */ export const handleSetValue: HandleSetValue = ({ - nodeData: { operation, fn, val: current }, + nodeData, previousValues, passport, }) => { @@ -31,31 +31,28 @@ export const handleSetValue: HandleSetValue = ({ const previous = formatPreviousValues(previousValues); const newValues = calculateNewValues({ - operation, + nodeData, previous, - current, }); if (newValues) { - passport.data![fn] = newValues; + passport.data![nodeData.fn] = newValues; // Operation has cleared passport value - if (!newValues.length) delete passport.data![fn]; + if (!newValues.length) delete passport.data![nodeData.fn]; } return passport; }; type CalculateNewValues = (params: { - operation: SetValue["operation"]; + nodeData: SetValue; previous: string[]; - current: string; }) => string | string[] | undefined; const calculateNewValues: CalculateNewValues = ({ - operation, + nodeData: { operation, val: current }, previous, - current, }) => { switch (operation) { case "replace": From b07f862ec2ef3a08f855dd461a5c351d91bc4a69 Mon Sep 17 00:00:00 2001 From: Ian Jones <51156018+ianjon3s@users.noreply.github.com> Date: Fri, 28 Jun 2024 13:47:29 +0100 Subject: [PATCH 076/150] refactor: Editor forms tidy up and unify (#3324) --- editor.planx.uk/src/@planx/components/ui.tsx | 52 +++--- .../components/Flow/FeedbackPage.tsx | 10 +- .../Settings/DataManagerSettings.tsx | 10 +- .../Settings/DesignSettings/ButtonForm.tsx | 9 +- .../Settings/DesignSettings/FaviconForm.tsx | 9 +- .../Settings/DesignSettings/TextLinkForm.tsx | 9 +- .../DesignSettings/ThemeAndLogoForm.tsx | 9 +- .../Settings/DesignSettings/index.tsx | 6 +- .../Settings/GeneralSettings/BoundaryForm.tsx | 60 +++---- .../Settings/GeneralSettings/ContactForm.tsx | 90 +++++----- .../Settings/GeneralSettings/index.tsx | 6 +- .../components/Settings/ServiceFlags.tsx | 10 +- .../components/Settings/ServiceSettings.tsx | 54 +++--- .../components/Settings/Submissions/index.tsx | 10 +- .../components/Settings/TeamSettings.tsx | 20 +-- .../Settings/shared/SettingsForm.tsx | 9 +- .../components/Team/TeamMembers.tsx | 14 +- editor.planx.uk/src/pages/GlobalSettings.tsx | 168 +++++++++++------- editor.planx.uk/src/routes/teamSettings.tsx | 10 +- editor.planx.uk/src/ui/editor/InputLabel.tsx | 31 ++++ editor.planx.uk/src/ui/editor/InputLegend.tsx | 1 + ...escription.tsx => SettingsDescription.tsx} | 17 +- .../{EditorRow.tsx => SettingsSection.tsx} | 7 +- 23 files changed, 343 insertions(+), 278 deletions(-) create mode 100644 editor.planx.uk/src/ui/editor/InputLabel.tsx rename editor.planx.uk/src/ui/editor/{InputDescription.tsx => SettingsDescription.tsx} (52%) rename editor.planx.uk/src/ui/editor/{EditorRow.tsx => SettingsSection.tsx} (87%) diff --git a/editor.planx.uk/src/@planx/components/ui.tsx b/editor.planx.uk/src/@planx/components/ui.tsx index f19148de9e..4d7130dd99 100644 --- a/editor.planx.uk/src/@planx/components/ui.tsx +++ b/editor.planx.uk/src/@planx/components/ui.tsx @@ -31,6 +31,7 @@ import type { handleSubmit } from "pages/Preview/Node"; import React, { ChangeEvent } from "react"; import ImgInput from "ui/editor/ImgInput"; import InputGroup from "ui/editor/InputGroup"; +import InputLabel from "ui/editor/InputLabel"; import ModalSection from "ui/editor/ModalSection"; import ModalSectionContent from "ui/editor/ModalSectionContent"; import RichTextInput from "ui/editor/RichTextInput"; @@ -109,46 +110,41 @@ export const MoreInformation = ({ return ( - - + + - - - - + + - - - - - - { - changeField({ - target: { name: "definitionImg", value: newUrl }, - }); - }} /> - + + + + + { + changeField({ + target: { name: "definitionImg", value: newUrl }, + }); + }} + /> + + diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Flow/FeedbackPage.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Flow/FeedbackPage.tsx index 3b8cfd7d3d..04c7307dcf 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Flow/FeedbackPage.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Flow/FeedbackPage.tsx @@ -24,7 +24,7 @@ import gql from "graphql-tag"; import { client } from "lib/graphql"; import React, { useState } from "react"; import { Feedback } from "routes/feedback"; -import EditorRow from "ui/editor/EditorRow"; +import SettingsSection from "ui/editor/SettingsSection"; import ErrorSummary from "ui/shared/ErrorSummary"; import ReactMarkdownOrHtml from "ui/shared/ReactMarkdownOrHtml"; @@ -156,15 +156,15 @@ export const FeedbackPage: React.FC = ({ feedback }) => { return ( - + Feedback log Feedback from users about this service. - - + + {feedback.length === 0 ? ( = ({ feedback }) => {
    )} - + ); diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/DataManagerSettings.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/DataManagerSettings.tsx index 0654dfd70f..431ba6cb61 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/DataManagerSettings.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/DataManagerSettings.tsx @@ -1,13 +1,13 @@ import Box from "@mui/material/Box"; import Typography from "@mui/material/Typography"; import React from "react"; -import EditorRow from "ui/editor/EditorRow"; import { FeaturePlaceholder } from "ui/editor/FeaturePlaceholder"; +import SettingsSection from "ui/editor/SettingsSection"; const DataManagerSettings: React.FC = () => { return ( - + Data Manager @@ -15,10 +15,10 @@ const DataManagerSettings: React.FC = () => { Manage the data that your service uses and makes available via its API. - - + + - + ); }; diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/ButtonForm.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/ButtonForm.tsx index bab3a5c61a..464cf9a215 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/ButtonForm.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/ButtonForm.tsx @@ -7,7 +7,6 @@ import { useStore } from "pages/FlowEditor/lib/store"; import React from "react"; import { getContrastTextColor } from "styleUtils"; import ColorPicker from "ui/editor/ColorPicker"; -import InputDescription from "ui/editor/InputDescription"; import InputRow from "ui/shared/InputRow"; import InputRowItem from "ui/shared/InputRowItem"; @@ -39,12 +38,12 @@ export const ButtonForm: React.FC = ({ legend="Button colour" description={ <> - +

    The button background colour should be either a dark or light colour. The text will be programmatically selected to contrast with the selected colour (being either black or white). - - +

    +

    = ({ > See our guide for setting button colours - +

    } input={ diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/FaviconForm.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/FaviconForm.tsx index 14a5386a88..aeb4ed8571 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/FaviconForm.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/FaviconForm.tsx @@ -5,7 +5,6 @@ import { useFormik } from "formik"; import { useStore } from "pages/FlowEditor/lib/store"; import React from "react"; import ImgInput from "ui/editor/ImgInput"; -import InputDescription from "ui/editor/InputDescription"; import InputRow from "ui/shared/InputRow"; import InputRowItem from "ui/shared/InputRowItem"; import InputRowLabel from "ui/shared/InputRowLabel"; @@ -42,11 +41,11 @@ export const FaviconForm: React.FC = ({ legend="Favicon" description={ <> - +

    Set the favicon to be used in the browser tab. The favicon should be 32x32px and in .ico or .png format. - - +

    +

    = ({ > See our guide for favicons - +

    } input={ diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/TextLinkForm.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/TextLinkForm.tsx index 4b341a74b4..6064cbac15 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/TextLinkForm.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/TextLinkForm.tsx @@ -5,7 +5,6 @@ import { useFormik } from "formik"; import { useStore } from "pages/FlowEditor/lib/store"; import React from "react"; import ColorPicker from "ui/editor/ColorPicker"; -import InputDescription from "ui/editor/InputDescription"; import InputRow from "ui/shared/InputRow"; import InputRowItem from "ui/shared/InputRowItem"; @@ -49,11 +48,11 @@ export const TextLinkForm: React.FC = ({ legend="Text link colour" description={ <> - +

    The text link colour should be a dark colour that contrasts with white ("#ffffff"). - - +

    +

    = ({ > See our guide for setting text link colours - +

    } input={ diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/ThemeAndLogoForm.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/ThemeAndLogoForm.tsx index af5c9e8da4..2ab48b447b 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/ThemeAndLogoForm.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/ThemeAndLogoForm.tsx @@ -7,7 +7,6 @@ import { useStore } from "pages/FlowEditor/lib/store"; import React from "react"; import ColorPicker from "ui/editor/ColorPicker"; import ImgInput from "ui/editor/ImgInput"; -import InputDescription from "ui/editor/InputDescription"; import InputRow from "ui/shared/InputRow"; import InputRowItem from "ui/shared/InputRowItem"; import InputRowLabel from "ui/shared/InputRowLabel"; @@ -60,13 +59,13 @@ export const ThemeAndLogoForm: React.FC = ({ legend="Theme colour & logo" description={ <> - +

    The theme colour and logo, are used in the header of the service. The theme colour should be a dark colour that contrasts with white ("#ffffff"). The logo should contrast with a dark background colour (your theme colour) and have a transparent background. - - +

    +

    = ({ > See our guide for setting theme colours and logos - +

    } input={ diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/index.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/index.tsx index b791d4f2d3..a5071ba261 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/index.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/index.tsx @@ -7,7 +7,7 @@ import { TeamTheme } from "@opensystemslab/planx-core/types"; import { FormikConfig } from "formik"; import { useStore } from "pages/FlowEditor/lib/store"; import React, { useEffect, useState } from "react"; -import EditorRow from "ui/editor/EditorRow"; +import SettingsSection from "ui/editor/SettingsSection"; import { ButtonForm } from "./ButtonForm"; import { FaviconForm } from "./FaviconForm"; @@ -76,14 +76,14 @@ const DesignSettings: React.FC = () => { return ( - + Design How your service appears to public users. - + {formikConfig && ( <> diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/BoundaryForm.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/BoundaryForm.tsx index e8a249ad6f..dbd93e3f0b 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/BoundaryForm.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/BoundaryForm.tsx @@ -1,9 +1,7 @@ import { useFormik } from "formik"; import React, { ChangeEvent } from "react"; -import InputDescription from "ui/editor/InputDescription"; +import InputLabel from "ui/editor/InputLabel"; import Input from "ui/shared/Input"; -import InputRow from "ui/shared/InputRow"; -import InputRowLabel from "ui/shared/InputRowLabel"; import { SettingsForm } from "../shared/SettingsForm"; import { FormProps } from "."; @@ -22,38 +20,36 @@ export default function BoundaryForm({ formikConfig, onSuccess }: FormProps) { formik={formik} legend="Boundary" description={ - - The boundary URL is used to retrieve the outer boundary of your - council area. This can then help users define whether they are within - your council area. -
    -
    - The boundary should be given as a link from:{" "} - - https://www.planning.data.gov.uk/ - -
    - } - input={ <> - - - Boundary URL - ) => { - formik.setFieldValue("boundaryUrl", ev.target.value); - }} - /> - - +

    + The boundary URL is used to retrieve the outer boundary of your + council area. This can then help users define whether they are + within your council area. +

    +

    + The boundary should be given as a link from:{" "} + + https://www.planning.data.gov.uk/ + +

    } + input={ + + ) => { + formik.setFieldValue("boundaryUrl", ev.target.value); + }} + id="boundaryUrl" + /> + + } /> ); } diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/ContactForm.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/ContactForm.tsx index 24075a8168..5b8c8c4047 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/ContactForm.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/ContactForm.tsx @@ -1,9 +1,7 @@ import { useFormik } from "formik"; import React, { ChangeEvent } from "react"; -import InputDescription from "ui/editor/InputDescription"; +import InputLabel from "ui/editor/InputLabel"; import Input from "ui/shared/Input"; -import InputRow from "ui/shared/InputRow"; -import InputRowLabel from "ui/shared/InputRowLabel"; import * as Yup from "yup"; import { SettingsForm } from "../shared/SettingsForm"; @@ -36,58 +34,50 @@ export default function ContactForm({ formikConfig, onSuccess }: FormProps) { legend="Contact Information" formik={formik} description={ - + <> Details to help direct different messages, feedback, and enquiries from users. - + } input={ <> - - - Homepage URL - { - onChangeFn("homepage", event); - }} - /> - - - - - Contact email address - { - onChangeFn("helpEmail", event); - }} - /> - - - - - Phone number - { - onChangeFn("helpPhone", event); - }} - /> - - - - - Opening hours - { - onChangeFn("helpOpeningHours", event); - }} - /> - - + + { + onChangeFn("homepage", event); + }} + id="homepageUrl" + /> + + + { + onChangeFn("helpEmail", event); + }} + id="helpEmail" + /> + + + { + onChangeFn("helpPhone", event); + }} + id="helpPhone" + /> + + + { + onChangeFn("helpOpeningHours", event); + }} + id="helpOpeningHours" + /> + } /> diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/index.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/index.tsx index 4f4ee0195f..a2fec53d73 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/index.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/index.tsx @@ -4,7 +4,7 @@ import Snackbar from "@mui/material/Snackbar"; import Typography from "@mui/material/Typography"; import { FormikConfig } from "formik"; import React, { useEffect, useState } from "react"; -import EditorRow from "ui/editor/EditorRow"; +import SettingsSection from "ui/editor/SettingsSection"; import BoundaryForm from "./BoundaryForm"; import ContactForm from "./ContactForm"; @@ -71,14 +71,14 @@ const GeneralSettings: React.FC = () => { return ( - + General Important links and settings for how your users connect with you - + {formikConfig && ( <> diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/ServiceFlags.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/ServiceFlags.tsx index a2a8a59fd9..12954c5d67 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/ServiceFlags.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/ServiceFlags.tsx @@ -1,13 +1,13 @@ import Box from "@mui/material/Box"; import Typography from "@mui/material/Typography"; import React from "react"; -import EditorRow from "ui/editor/EditorRow"; import { FeaturePlaceholder } from "ui/editor/FeaturePlaceholder"; +import SettingsSection from "ui/editor/SettingsSection"; const ServiceFlags: React.FC = () => { return ( - + Service flags @@ -15,10 +15,10 @@ const ServiceFlags: React.FC = () => { Manage the flag sets that this service uses. Flags at the top of a set override flags below. - - + + - + ); }; diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/ServiceSettings.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/ServiceSettings.tsx index 2b0c905d0e..06abc3430d 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/ServiceSettings.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/ServiceSettings.tsx @@ -11,10 +11,11 @@ import { FlowStatus } from "@opensystemslab/planx-core/types"; import { useFormik } from "formik"; import React, { useState } from "react"; import { FONT_WEIGHT_BOLD } from "theme"; -import EditorRow from "ui/editor/EditorRow"; import InputGroup from "ui/editor/InputGroup"; import InputLegend from "ui/editor/InputLegend"; import RichTextInput from "ui/editor/RichTextInput"; +import SettingsDescription from "ui/editor/SettingsDescription"; +import SettingsSection from "ui/editor/SettingsSection"; import Input, { Props as InputProps } from "ui/shared/Input"; import InputRow from "ui/shared/InputRow"; import InputRowItem from "ui/shared/InputRowItem"; @@ -39,14 +40,16 @@ const TextInput: React.FC<{ }) => { return ( - + {title} - - {description && {description}} + + {description && ( + {description} + )} @@ -142,15 +145,15 @@ const ServiceSettings: React.FC = () => { return ( - + Elements Manage the features that users will be able to see. - - + + { onChange: elementsForm.handleChange, }} /> - - + + Footer Links @@ -219,8 +222,8 @@ const ServiceSettings: React.FC = () => { /> - - + + - + - + Status Manage the status of your service. - - + + { /> } /> - - Toggle your service between "offline" and "online". - - - A service must be online to be accessed by the public, and to enable - analytics gathering. - - - Offline services can still be edited and published as normal. - + +

    Toggle your service between "offline" and "online".

    +

    + A service must be online to be accessed by the public, and to + enable analytics gathering. +

    +

    Offline services can still be edited and published as normal.

    +
    -
    +
    { return ( - + Submissions Feed of payment and submission events for this service - - + + - + ); diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/TeamSettings.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/TeamSettings.tsx index 33d51b9777..9d590cfbcf 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/TeamSettings.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/TeamSettings.tsx @@ -1,35 +1,35 @@ import Box from "@mui/material/Box"; import Typography from "@mui/material/Typography"; import React from "react"; -import EditorRow from "ui/editor/EditorRow"; import { FeaturePlaceholder } from "ui/editor/FeaturePlaceholder"; +import SettingsSection from "ui/editor/SettingsSection"; const Team: React.FC = () => { return ( - + Team Manage who has permission to edit this service. - - + + - -
    - + +
    + Sharing Allow other teams on Plan✕ to find and use your service pattern. -
    - + + - +
    ); }; diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/shared/SettingsForm.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/shared/SettingsForm.tsx index 3bb553695e..aefab091a4 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/shared/SettingsForm.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/shared/SettingsForm.tsx @@ -3,9 +3,10 @@ import Button from "@mui/material/Button"; import Typography from "@mui/material/Typography"; import { FormikProps } from "formik"; import React from "react"; -import EditorRow from "ui/editor/EditorRow"; import InputGroup from "ui/editor/InputGroup"; import InputLegend from "ui/editor/InputLegend"; +import SettingsDescription from "ui/editor/SettingsDescription"; +import SettingsSection from "ui/editor/SettingsSection"; import ErrorWrapper from "ui/shared/ErrorWrapper"; type SettingsFormProps = { @@ -24,11 +25,11 @@ export const SettingsForm = ({ preview, }: SettingsFormProps) => { return ( - +
    {legend} - {description} + {description} {input} {preview && ( @@ -60,6 +61,6 @@ export const SettingsForm = ({ -
    + ); }; diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Team/TeamMembers.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Team/TeamMembers.tsx index f1fe300a82..445a094839 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Team/TeamMembers.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Team/TeamMembers.tsx @@ -13,7 +13,7 @@ import Typography from "@mui/material/Typography"; import { Role, User } from "@opensystemslab/planx-core/types"; import React from "react"; import { FONT_WEIGHT_SEMI_BOLD } from "theme"; -import EditorRow from "ui/editor/EditorRow"; +import SettingsSection from "ui/editor/SettingsSection"; const StyledAvatar = styled(Avatar)(({ theme }) => ({ background: theme.palette.background.dark, @@ -129,7 +129,7 @@ export const TeamMembers: React.FC = ({ teamMembersByRole }) => { return ( - + Team editors @@ -137,8 +137,8 @@ export const TeamMembers: React.FC = ({ teamMembersByRole }) => { Editors have access to edit your services. - - + + Admins @@ -146,9 +146,9 @@ export const TeamMembers: React.FC = ({ teamMembersByRole }) => { Admins have editor access across all teams. - + {archivedMembers.length > 0 && ( - + Archived team editors @@ -157,7 +157,7 @@ export const TeamMembers: React.FC = ({ teamMembersByRole }) => { be part of the edit history of your services. - + )} diff --git a/editor.planx.uk/src/pages/GlobalSettings.tsx b/editor.planx.uk/src/pages/GlobalSettings.tsx index 2e81623fe3..5b44b151b9 100644 --- a/editor.planx.uk/src/pages/GlobalSettings.tsx +++ b/editor.planx.uk/src/pages/GlobalSettings.tsx @@ -1,12 +1,20 @@ +import Alert from "@mui/material/Alert"; import Box from "@mui/material/Box"; import Button from "@mui/material/Button"; +import Container from "@mui/material/Container"; +import Snackbar from "@mui/material/Snackbar"; import Typography from "@mui/material/Typography"; import { useFormik } from "formik"; import { useStore } from "pages/FlowEditor/lib/store"; -import React from "react"; +import React, { useState } from "react"; import type { TextContent } from "types"; +import Dashboard from "ui/editor/Dashboard"; +import InputGroup from "ui/editor/InputGroup"; +import InputLegend from "ui/editor/InputLegend"; import ListManager from "ui/editor/ListManager"; import RichTextInput from "ui/editor/RichTextInput"; +import SettingsDescription from "ui/editor/SettingsDescription"; +import SettingsSection from "ui/editor/SettingsSection"; import Input from "ui/shared/Input"; import InputRow from "ui/shared/InputRow"; import InputRowItem from "ui/shared/InputRowItem"; @@ -18,6 +26,8 @@ function Component() { state.updateGlobalSettings, ]); + const [isAlertOpen, setIsAlertOpen] = useState(false); + const formik = useFormik({ initialValues: { footerContent: @@ -40,43 +50,73 @@ function Component() { ); updateGlobalSettings(formatted); + setIsAlertOpen(true); }, }); + const handleClose = ( + _event?: React.SyntheticEvent | Event, + reason?: string, + ) => { + if (reason === "clickaway") { + return; + } + + setIsAlertOpen(false); + }; + return ( -
    - - Global Settings - - + + + + - Footer Elements + Global Settings - - Manage the content that will appear in the footer - - - { - formik.setFieldValue("footerContent", newOptions); - }} - newValue={() => - ({ - heading: "", - content: "", - show: true, - }) as TextContent - } - Editor={ContentEditor} - /> - - - - -
    + + + + Footer Elements + +

    Manage the content that will appear in the footer.

    +

    + The heading will appear as a footer link which will open a + content page. +

    +
    + + { + formik.setFieldValue("footerContent", newOptions); + }} + newValue={() => + ({ + heading: "", + content: "", + show: true, + }) as TextContent + } + Editor={ContentEditor} + /> + +
    + +
    + + + + + Footer settings updated successfully + + +
    ); } @@ -86,39 +126,37 @@ function ContentEditor(props: { }) { return ( - - - - { - props.onChange({ - ...props.value, - heading: ev.target.value, - }); - }} - /> - - - - - { - props.onChange({ - ...props.value, - content: ev.target.value, - }); - }} - /> - - - + + + { + props.onChange({ + ...props.value, + heading: ev.target.value, + }); + }} + /> + + + + + { + props.onChange({ + ...props.value, + content: ev.target.value, + }); + }} + /> + + ); } diff --git a/editor.planx.uk/src/routes/teamSettings.tsx b/editor.planx.uk/src/routes/teamSettings.tsx index c03254a546..27fcb11715 100644 --- a/editor.planx.uk/src/routes/teamSettings.tsx +++ b/editor.planx.uk/src/routes/teamSettings.tsx @@ -47,11 +47,11 @@ const teamSettingsRoutes = compose( route: "design", Component: DesignSettings, }, - /* { - name: "General", - route: "general", - Component: GeneralSettings, - },*/ + // { + // name: "General", + // route: "general", + // Component: GeneralSettings, + // }, ]} /> ), diff --git a/editor.planx.uk/src/ui/editor/InputLabel.tsx b/editor.planx.uk/src/ui/editor/InputLabel.tsx new file mode 100644 index 0000000000..a1d57d8948 --- /dev/null +++ b/editor.planx.uk/src/ui/editor/InputLabel.tsx @@ -0,0 +1,31 @@ +import { styled } from "@mui/material/styles"; +import Typography from "@mui/material/Typography"; +import { visuallyHidden } from "@mui/utils"; +import React, { PropsWithChildren } from "react"; + +const Root = styled("label")(() => ({ + display: "block", + width: "100%", +})); + +export default function InputLabel( + props: PropsWithChildren<{ + label: string; + hidden?: boolean; + htmlFor?: string; + id?: string; + }>, +) { + return ( + + + {props.label} + + {props.children} + + ); +} diff --git a/editor.planx.uk/src/ui/editor/InputLegend.tsx b/editor.planx.uk/src/ui/editor/InputLegend.tsx index 2f9c7094a2..764a27f0f3 100644 --- a/editor.planx.uk/src/ui/editor/InputLegend.tsx +++ b/editor.planx.uk/src/ui/editor/InputLegend.tsx @@ -5,6 +5,7 @@ import React, { ReactNode } from "react"; const Legend = styled(Typography)(() => ({ display: "block", width: "100%", + padding: 0, })) as typeof Typography; export default function InputLegend({ children }: { children: ReactNode }) { diff --git a/editor.planx.uk/src/ui/editor/InputDescription.tsx b/editor.planx.uk/src/ui/editor/SettingsDescription.tsx similarity index 52% rename from editor.planx.uk/src/ui/editor/InputDescription.tsx rename to editor.planx.uk/src/ui/editor/SettingsDescription.tsx index d6f4d1cbe1..2d1f541375 100644 --- a/editor.planx.uk/src/ui/editor/InputDescription.tsx +++ b/editor.planx.uk/src/ui/editor/SettingsDescription.tsx @@ -6,12 +6,25 @@ const Description = styled(Typography)(({ theme }) => ({ width: "100%", textAlign: "left", color: theme.palette.text.secondary, + paddingBottom: theme.spacing(1), + paddingTop: theme.spacing(0.5), + "& p, & a": { + fontSize: "inherit", + margin: 0, + }, + "& p + p": { + marginTop: "1em", + }, })) as typeof Typography; -export default function InputDescription({ +export default function SettingsDescription({ children, }: { children: ReactNode; }) { - return {children}; + return ( + + {children} + + ); } diff --git a/editor.planx.uk/src/ui/editor/EditorRow.tsx b/editor.planx.uk/src/ui/editor/SettingsSection.tsx similarity index 87% rename from editor.planx.uk/src/ui/editor/EditorRow.tsx rename to editor.planx.uk/src/ui/editor/SettingsSection.tsx index f489337596..30db4412d4 100644 --- a/editor.planx.uk/src/ui/editor/EditorRow.tsx +++ b/editor.planx.uk/src/ui/editor/SettingsSection.tsx @@ -12,9 +12,10 @@ const Root = styled(Box, { })(({ background, theme }) => ({ display: "block", width: "100%", - padding: theme.spacing(2.5, 0), + marginTop: theme.spacing(2), + paddingBottom: theme.spacing(1), "&:first-of-type": { - paddingTop: 0, + marginTop: 0, }, "& > * + *, & > form > * + *": { ...contentFlowSpacing(theme), @@ -27,7 +28,7 @@ const Root = styled(Box, { }), })); -export default function EditorRow({ +export default function SettingsSection({ children, background, }: { From 764a9dc4f37c290ebc4d4b53e16d2f509dcf1d2d Mon Sep 17 00:00:00 2001 From: Jessica McInchak Date: Fri, 28 Jun 2024 15:09:55 +0200 Subject: [PATCH 077/150] chore: bump planx-core and @opensystemslab/map (#3337) --- api.planx.uk/package.json | 2 +- api.planx.uk/pnpm-lock.yaml | 8 ++++---- e2e/tests/api-driven/package.json | 2 +- e2e/tests/api-driven/pnpm-lock.yaml | 10 +++++----- e2e/tests/ui-driven/package.json | 2 +- e2e/tests/ui-driven/pnpm-lock.yaml | 9 +++++---- editor.planx.uk/package.json | 4 ++-- editor.planx.uk/pnpm-lock.yaml | 21 ++++++++++----------- 8 files changed, 29 insertions(+), 29 deletions(-) diff --git a/api.planx.uk/package.json b/api.planx.uk/package.json index 6d22514c38..9c4026248f 100644 --- a/api.planx.uk/package.json +++ b/api.planx.uk/package.json @@ -4,7 +4,7 @@ "private": true, "dependencies": { "@airbrake/node": "^2.1.8", - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#db69b87", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#c17c3e3", "@types/isomorphic-fetch": "^0.0.36", "adm-zip": "^0.5.10", "aws-sdk": "^2.1467.0", diff --git a/api.planx.uk/pnpm-lock.yaml b/api.planx.uk/pnpm-lock.yaml index bf8e45241a..26275f0cba 100644 --- a/api.planx.uk/pnpm-lock.yaml +++ b/api.planx.uk/pnpm-lock.yaml @@ -14,8 +14,8 @@ dependencies: specifier: ^2.1.8 version: 2.1.8 '@opensystemslab/planx-core': - specifier: git+https://github.com/theopensystemslab/planx-core#db69b87 - version: github.com/theopensystemslab/planx-core/db69b87 + specifier: git+https://github.com/theopensystemslab/planx-core#c17c3e3 + version: github.com/theopensystemslab/planx-core/c17c3e3 '@types/isomorphic-fetch': specifier: ^0.0.36 version: 0.0.36 @@ -8288,8 +8288,8 @@ packages: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} dev: false - github.com/theopensystemslab/planx-core/db69b87: - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/db69b87} + github.com/theopensystemslab/planx-core/c17c3e3: + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/c17c3e3} name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true diff --git a/e2e/tests/api-driven/package.json b/e2e/tests/api-driven/package.json index 182998d643..afc731f23f 100644 --- a/e2e/tests/api-driven/package.json +++ b/e2e/tests/api-driven/package.json @@ -6,7 +6,7 @@ }, "dependencies": { "@cucumber/cucumber": "^9.3.0", - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#db69b87", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#c17c3e3", "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 f8932507e3..1944283c1a 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#db69b87 - version: github.com/theopensystemslab/planx-core/db69b87 + specifier: git+https://github.com/theopensystemslab/planx-core#c17c3e3 + version: github.com/theopensystemslab/planx-core/c17c3e3 axios: specifier: ^1.6.8 version: 1.6.8 @@ -1057,7 +1057,7 @@ packages: dev: false /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} dev: false /convert-source-map@1.9.0: @@ -2943,8 +2943,8 @@ packages: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} dev: false - github.com/theopensystemslab/planx-core/db69b87: - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/db69b87} + github.com/theopensystemslab/planx-core/c17c3e3: + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/c17c3e3} name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true diff --git a/e2e/tests/ui-driven/package.json b/e2e/tests/ui-driven/package.json index e7bbd7563a..ceb31105be 100644 --- a/e2e/tests/ui-driven/package.json +++ b/e2e/tests/ui-driven/package.json @@ -8,7 +8,7 @@ "postinstall": "./install-dependencies.sh" }, "dependencies": { - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#db69b87", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#c17c3e3", "axios": "^1.6.8", "dotenv": "^16.3.1", "eslint": "^8.56.0", diff --git a/e2e/tests/ui-driven/pnpm-lock.yaml b/e2e/tests/ui-driven/pnpm-lock.yaml index fa32bed152..beef4b255e 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#db69b87 - version: github.com/theopensystemslab/planx-core/db69b87 + specifier: git+https://github.com/theopensystemslab/planx-core#c17c3e3 + version: github.com/theopensystemslab/planx-core/c17c3e3 axios: specifier: ^1.6.8 version: 1.6.8 @@ -1489,6 +1489,7 @@ 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 @@ -2714,8 +2715,8 @@ packages: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} dev: false - github.com/theopensystemslab/planx-core/db69b87: - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/db69b87} + github.com/theopensystemslab/planx-core/c17c3e3: + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/c17c3e3} name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true diff --git a/editor.planx.uk/package.json b/editor.planx.uk/package.json index 06710a7fe1..1614c2dad4 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#db69b87", + "@opensystemslab/map": "^0.8.3", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#c17c3e3", "@tiptap/core": "^2.4.0", "@tiptap/extension-bold": "^2.0.3", "@tiptap/extension-bubble-menu": "^2.1.13", diff --git a/editor.planx.uk/pnpm-lock.yaml b/editor.planx.uk/pnpm-lock.yaml index 85bffcd85b..66b4096d65 100644 --- a/editor.planx.uk/pnpm-lock.yaml +++ b/editor.planx.uk/pnpm-lock.yaml @@ -39,11 +39,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#db69b87 - version: github.com/theopensystemslab/planx-core/db69b87(@types/react@18.2.45) + specifier: git+https://github.com/theopensystemslab/planx-core#c17c3e3 + version: github.com/theopensystemslab/planx-core/c17c3e3(@types/react@18.2.45) '@tiptap/core': specifier: ^2.4.0 version: 2.4.0(@tiptap/pm@2.0.3) @@ -5602,8 +5602,8 @@ 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 @@ -6639,7 +6639,7 @@ packages: '@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.5 color-convert: 2.0.1 dequal: 2.0.3 lodash: 4.17.21 @@ -8373,7 +8373,6 @@ packages: /@types/lodash@4.17.5: resolution: {integrity: sha512-MBIOHVZqVqgfro1euRDWX7OO0fBVUUMrN6Pwm8LQsz8cWhEpihlvR70ENj3f40j58TNxZaWv2ndSkInykNBBJw==} - dev: false /@types/mdast@3.0.15: resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} @@ -21640,9 +21639,9 @@ packages: use-sync-external-store: 1.2.0(react@18.2.0) dev: false - github.com/theopensystemslab/planx-core/db69b87(@types/react@18.2.45): - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/db69b87} - id: github.com/theopensystemslab/planx-core/db69b87 + github.com/theopensystemslab/planx-core/c17c3e3(@types/react@18.2.45): + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/c17c3e3} + id: github.com/theopensystemslab/planx-core/c17c3e3 name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true From fba15e7e2b2a377e6de510a91205f4432e0ea454 Mon Sep 17 00:00:00 2001 From: Jessica McInchak Date: Fri, 28 Jun 2024 16:24:10 +0200 Subject: [PATCH 078/150] feat: stub out editor & API endpoint and send events for Idox Nexus (#3281) --- .env.example | 3 + api.planx.uk/lib/hasura/metadata/index.ts | 1 + .../send/createSendEvents/controller.ts | 12 +- .../modules/send/createSendEvents/types.ts | 1 + api.planx.uk/modules/send/idox/nexus.test.ts | 24 ++ api.planx.uk/modules/send/idox/nexus.ts | 408 ++++++++++++++++++ api.planx.uk/modules/send/routes.ts | 2 + api.planx.uk/modules/send/utils/exportZip.ts | 190 ++++---- .../src/@planx/components/Send/Editor.tsx | 7 +- .../src/@planx/components/Send/Public.tsx | 10 + .../src/@planx/components/Send/model.ts | 8 + 11 files changed, 571 insertions(+), 95 deletions(-) create mode 100644 api.planx.uk/modules/send/idox/nexus.test.ts create mode 100644 api.planx.uk/modules/send/idox/nexus.ts 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/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/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/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/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/editor.planx.uk/src/@planx/components/Send/Editor.tsx b/editor.planx.uk/src/@planx/components/Send/Editor.tsx index 9e1816982b..bfc3f208ca 100644 --- a/editor.planx.uk/src/@planx/components/Send/Editor.tsx +++ b/editor.planx.uk/src/@planx/components/Send/Editor.tsx @@ -57,12 +57,17 @@ const SendComponent: React.FC = (props) => { }, ]; - // Show S3 option on staging only + // Show S3 & Nexus options on staging only if (process.env.REACT_APP_ENV !== "production") { options.push({ value: Destination.S3, label: "Upload to AWS S3 bucket", }); + + options.push({ + value: Destination.Idox, + label: "Idox Nexus", + }); } const changeCheckbox = diff --git a/editor.planx.uk/src/@planx/components/Send/Public.tsx b/editor.planx.uk/src/@planx/components/Send/Public.tsx index 8b8be0b35f..f6c1b872bf 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, From 720f1d875578e3932674d147853e6fd392fdba67 Mon Sep 17 00:00:00 2001 From: Jessica McInchak Date: Fri, 28 Jun 2024 17:37:30 +0200 Subject: [PATCH 079/150] chore: bump planx-core (#3340) --- api.planx.uk/package.json | 2 +- api.planx.uk/pnpm-lock.yaml | 8 ++++---- e2e/tests/api-driven/package.json | 2 +- e2e/tests/api-driven/pnpm-lock.yaml | 8 ++++---- e2e/tests/ui-driven/package.json | 2 +- e2e/tests/ui-driven/pnpm-lock.yaml | 8 ++++---- editor.planx.uk/package.json | 2 +- editor.planx.uk/pnpm-lock.yaml | 12 ++++++------ 8 files changed, 22 insertions(+), 22 deletions(-) diff --git a/api.planx.uk/package.json b/api.planx.uk/package.json index 9c4026248f..ab680ac837 100644 --- a/api.planx.uk/package.json +++ b/api.planx.uk/package.json @@ -4,7 +4,7 @@ "private": true, "dependencies": { "@airbrake/node": "^2.1.8", - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#c17c3e3", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#b975cf9", "@types/isomorphic-fetch": "^0.0.36", "adm-zip": "^0.5.10", "aws-sdk": "^2.1467.0", diff --git a/api.planx.uk/pnpm-lock.yaml b/api.planx.uk/pnpm-lock.yaml index 26275f0cba..09c13e9457 100644 --- a/api.planx.uk/pnpm-lock.yaml +++ b/api.planx.uk/pnpm-lock.yaml @@ -14,8 +14,8 @@ dependencies: specifier: ^2.1.8 version: 2.1.8 '@opensystemslab/planx-core': - specifier: git+https://github.com/theopensystemslab/planx-core#c17c3e3 - version: github.com/theopensystemslab/planx-core/c17c3e3 + specifier: git+https://github.com/theopensystemslab/planx-core#b975cf9 + version: github.com/theopensystemslab/planx-core/b975cf9 '@types/isomorphic-fetch': specifier: ^0.0.36 version: 0.0.36 @@ -8288,8 +8288,8 @@ packages: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} dev: false - github.com/theopensystemslab/planx-core/c17c3e3: - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/c17c3e3} + github.com/theopensystemslab/planx-core/b975cf9: + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/b975cf9} name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true diff --git a/e2e/tests/api-driven/package.json b/e2e/tests/api-driven/package.json index afc731f23f..3fb3256b3e 100644 --- a/e2e/tests/api-driven/package.json +++ b/e2e/tests/api-driven/package.json @@ -6,7 +6,7 @@ }, "dependencies": { "@cucumber/cucumber": "^9.3.0", - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#c17c3e3", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#b975cf9", "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 1944283c1a..118c25b018 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#c17c3e3 - version: github.com/theopensystemslab/planx-core/c17c3e3 + specifier: git+https://github.com/theopensystemslab/planx-core#b975cf9 + version: github.com/theopensystemslab/planx-core/b975cf9 axios: specifier: ^1.6.8 version: 1.6.8 @@ -2943,8 +2943,8 @@ packages: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} dev: false - github.com/theopensystemslab/planx-core/c17c3e3: - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/c17c3e3} + github.com/theopensystemslab/planx-core/b975cf9: + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/b975cf9} name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true diff --git a/e2e/tests/ui-driven/package.json b/e2e/tests/ui-driven/package.json index ceb31105be..99eada8d2b 100644 --- a/e2e/tests/ui-driven/package.json +++ b/e2e/tests/ui-driven/package.json @@ -8,7 +8,7 @@ "postinstall": "./install-dependencies.sh" }, "dependencies": { - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#c17c3e3", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#b975cf9", "axios": "^1.6.8", "dotenv": "^16.3.1", "eslint": "^8.56.0", diff --git a/e2e/tests/ui-driven/pnpm-lock.yaml b/e2e/tests/ui-driven/pnpm-lock.yaml index beef4b255e..c0ee351d54 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#c17c3e3 - version: github.com/theopensystemslab/planx-core/c17c3e3 + specifier: git+https://github.com/theopensystemslab/planx-core#b975cf9 + version: github.com/theopensystemslab/planx-core/b975cf9 axios: specifier: ^1.6.8 version: 1.6.8 @@ -2715,8 +2715,8 @@ packages: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} dev: false - github.com/theopensystemslab/planx-core/c17c3e3: - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/c17c3e3} + github.com/theopensystemslab/planx-core/b975cf9: + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/b975cf9} name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true diff --git a/editor.planx.uk/package.json b/editor.planx.uk/package.json index 1614c2dad4..f96b12fb79 100644 --- a/editor.planx.uk/package.json +++ b/editor.planx.uk/package.json @@ -13,7 +13,7 @@ "@mui/material": "^5.15.2", "@mui/utils": "^5.15.2", "@opensystemslab/map": "^0.8.3", - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#c17c3e3", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#b975cf9", "@tiptap/core": "^2.4.0", "@tiptap/extension-bold": "^2.0.3", "@tiptap/extension-bubble-menu": "^2.1.13", diff --git a/editor.planx.uk/pnpm-lock.yaml b/editor.planx.uk/pnpm-lock.yaml index 66b4096d65..e2772eb954 100644 --- a/editor.planx.uk/pnpm-lock.yaml +++ b/editor.planx.uk/pnpm-lock.yaml @@ -42,8 +42,8 @@ dependencies: specifier: ^0.8.3 version: 0.8.3 '@opensystemslab/planx-core': - specifier: git+https://github.com/theopensystemslab/planx-core#c17c3e3 - version: github.com/theopensystemslab/planx-core/c17c3e3(@types/react@18.2.45) + specifier: git+https://github.com/theopensystemslab/planx-core#b975cf9 + version: github.com/theopensystemslab/planx-core/b975cf9(@types/react@18.2.45) '@tiptap/core': specifier: ^2.4.0 version: 2.4.0(@tiptap/pm@2.0.3) @@ -10471,7 +10471,7 @@ packages: dev: false /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} /config-chain@1.1.13: resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} @@ -21639,9 +21639,9 @@ packages: use-sync-external-store: 1.2.0(react@18.2.0) dev: false - github.com/theopensystemslab/planx-core/c17c3e3(@types/react@18.2.45): - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/c17c3e3} - id: github.com/theopensystemslab/planx-core/c17c3e3 + github.com/theopensystemslab/planx-core/b975cf9(@types/react@18.2.45): + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/b975cf9} + id: github.com/theopensystemslab/planx-core/b975cf9 name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true From a062ff7b15d060979eda9a78ee61157b1bd54a06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Fri, 28 Jun 2024 17:20:41 +0100 Subject: [PATCH 080/150] Revert "fix: Trim all form values on node creation" (#3339) --- .../@planx/components/shared/index.test.ts | 20 ------------------- .../src/@planx/components/shared/index.ts | 3 --- .../FlowEditor/components/forms/FormModal.tsx | 1 + 3 files changed, 1 insertion(+), 23 deletions(-) delete mode 100644 editor.planx.uk/src/@planx/components/shared/index.test.ts diff --git a/editor.planx.uk/src/@planx/components/shared/index.test.ts b/editor.planx.uk/src/@planx/components/shared/index.test.ts deleted file mode 100644 index 81056be44f..0000000000 --- a/editor.planx.uk/src/@planx/components/shared/index.test.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { parseFormValues } from "."; - -describe("parseFormValues util", () => { - it("trims nested strings", () => { - const input = { - type: 100, - data: { - description: "description ", - fn: "my.data.field ", - img: "", - text: "Question ", - }, - }; - const output = parseFormValues(Object.entries(input)); - - expect(output.data.fn).toEqual("my.data.field"); - expect(output.data.text).toEqual("Question"); - expect(output.data.description).toEqual("description"); - }) -}); \ No newline at end of file diff --git a/editor.planx.uk/src/@planx/components/shared/index.ts b/editor.planx.uk/src/@planx/components/shared/index.ts index c89b7f1df7..364bc753bd 100644 --- a/editor.planx.uk/src/@planx/components/shared/index.ts +++ b/editor.planx.uk/src/@planx/components/shared/index.ts @@ -44,9 +44,6 @@ export const parseFormValues = (ob: any, defaultValues = {}) => .map((o) => parseFormValues(Object.entries(o))) // don't store options with no values .filter((o) => Object.keys(o).length > 0); - } else if (v && typeof v === "object") { - // if it's a nested object - acc[k] = parseFormValues(Object.entries(v)); } else { // it's a number or boolean etc acc[k] = v; diff --git a/editor.planx.uk/src/pages/FlowEditor/components/forms/FormModal.tsx b/editor.planx.uk/src/pages/FlowEditor/components/forms/FormModal.tsx index c147014784..1aae0ee578 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/forms/FormModal.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/forms/FormModal.tsx @@ -10,6 +10,7 @@ import { styled } from "@mui/material/styles"; import { ComponentType as TYPES } from "@opensystemslab/planx-core/types"; import { parseFormValues } from "@planx/components/shared"; import ErrorFallback from "components/ErrorFallback"; +import { hasFeatureFlag } from "lib/featureFlags"; import React from "react"; import { ErrorBoundary } from "react-error-boundary"; import { useNavigation } from "react-navi"; From 2a095c06d6e8c595ab4d116769deffda53b6db7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Mon, 1 Jul 2024 10:20:35 +0100 Subject: [PATCH 081/150] feat: `ChecklistFieldInput` for List component (#3304) --- .../@planx/components/Checklist/Public.tsx | 74 +++++----------- .../src/@planx/components/Checklist/model.ts | 45 ++++++++++ .../src/@planx/components/List/Editor.tsx | 16 +++- .../@planx/components/List/Public/Context.tsx | 2 +- .../@planx/components/List/Public/Fields.tsx | 64 +++++++++++++- .../components/List/Public/index.test.tsx | 15 +++- .../@planx/components/List/Public/index.tsx | 5 +- .../src/@planx/components/List/model.ts | 25 +++++- .../schemas/ResidentialUnits/GLA/Gained.ts | 68 ++++----------- .../List/schemas/ResidentialUnits/GLA/Lost.ts | 68 ++++----------- .../List/schemas/ResidentialUnits/GLA/New.ts | 68 ++++----------- .../schemas/ResidentialUnits/GLA/Rebuilt.ts | 68 ++++----------- .../schemas/ResidentialUnits/GLA/Removed.ts | 68 ++++----------- .../components/List/schemas/mocks/Zoo.ts | 22 ++++- .../src/@planx/components/List/utils.test.ts | 6 +- .../components/List/{utils.ts => utils.tsx} | 87 +++++++++++++------ editor.planx.uk/src/ui/shared/Checkbox.tsx | 2 +- 17 files changed, 349 insertions(+), 354 deletions(-) rename editor.planx.uk/src/@planx/components/List/{utils.ts => utils.tsx} (65%) diff --git a/editor.planx.uk/src/@planx/components/Checklist/Public.tsx b/editor.planx.uk/src/@planx/components/Checklist/Public.tsx index 768bc86f73..6383d8abcd 100644 --- a/editor.planx.uk/src/@planx/components/Checklist/Public.tsx +++ b/editor.planx.uk/src/@planx/components/Checklist/Public.tsx @@ -1,7 +1,12 @@ 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"; @@ -12,7 +17,7 @@ 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"; @@ -31,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 || [], @@ -71,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 843be32901..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 { @@ -56,3 +58,46 @@ export const toggleExpandableChecklist = ( }; } }; + +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/List/Editor.tsx b/editor.planx.uk/src/@planx/components/List/Editor.tsx index 6b85d49b87..bfa3e99ae8 100644 --- a/editor.planx.uk/src/@planx/components/List/Editor.tsx +++ b/editor.planx.uk/src/@planx/components/List/Editor.tsx @@ -20,10 +20,12 @@ 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 { Zoo } from "./schemas/mocks/Zoo"; import { ResidentialUnitsExisting } from "./schemas/ResidentialUnits/Existing"; import { ResidentialUnitsGLAGained } from "./schemas/ResidentialUnits/GLA/Gained"; import { ResidentialUnitsGLALost } from "./schemas/ResidentialUnits/GLA/Lost"; +import { ResidentialUnitsGLANew } from "./schemas/ResidentialUnits/GLA/New"; +import { ResidentialUnitsGLARebuilt } from "./schemas/ResidentialUnits/GLA/Rebuilt"; +import { ResidentialUnitsGLARemoved } from "./schemas/ResidentialUnits/GLA/Removed"; import { ResidentialUnitsProposed } from "./schemas/ResidentialUnits/Proposed"; type Props = EditorProps; @@ -36,6 +38,18 @@ export const SCHEMAS = [ schema: ResidentialUnitsGLAGained, }, { name: "Residential units (GLA) - Lost", schema: ResidentialUnitsGLALost }, + { + name: "Residential units (GLA) - New", + schema: ResidentialUnitsGLANew, + }, + { + name: "Residential units (GLA) - Rebuilt", + schema: ResidentialUnitsGLARebuilt, + }, + { + name: "Residential units (GLA) - Removed", + schema: ResidentialUnitsGLARemoved, + }, { name: "Non-residential floorspace", schema: NonResidentialFloorspace }, { name: "Existing and proposed uses (GLA)", 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 bca7c02f9e..38bb5b1ec4 100644 --- a/editor.planx.uk/src/@planx/components/List/Public/Context.tsx +++ b/editor.planx.uk/src/@planx/components/List/Public/Context.tsx @@ -171,7 +171,7 @@ export const ListProvider: React.FC = (props) => { const defaultPassportData = makeData(props, values.userData)?.["data"]; // flattenedPassportData makes individual list items compatible with Calculate components - const flattenedPassportData = flatten(defaultPassportData); + const flattenedPassportData = flatten(defaultPassportData, { depth: 2 }); // basic example of general summary stats we can add onSubmit: // 1. count of items/responses 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 a5313d3cfb..8fad6c35db 100644 --- a/editor.planx.uk/src/@planx/components/List/Public/Fields.tsx +++ b/editor.planx.uk/src/@planx/components/List/Public/Fields.tsx @@ -1,19 +1,27 @@ 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 { Option } from "@planx/components/shared"; +import { visuallyHidden } from "@mui/utils"; +import { getIn } from "formik"; 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, 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"; import { get } from "lodash"; @@ -183,3 +191,55 @@ export const SelectFieldInput: React.FC> = (props) => { ); }; + +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 5bdaa44f8b..b2c2d6ec73 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 @@ -453,7 +453,15 @@ describe("Form validation and error handling", () => { expect(cuteInputErrorMessage).toHaveTextContent(/Select your answer before continuing/); }); - test.todo("checklist fields") + 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 () => { @@ -651,6 +659,11 @@ const fillInResponse = async (user: UserEvent) => { 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/, }); 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 66efdcd9d9..c0d3136c29 100644 --- a/editor.planx.uk/src/@planx/components/List/Public/index.tsx +++ b/editor.planx.uk/src/@planx/components/List/Public/index.tsx @@ -20,6 +20,7 @@ import type { Field, List } from "../model"; import { formatSchemaDisplayValue } from "../utils"; import { ListProvider, useListContext } from "./Context"; import { + ChecklistFieldInput, NumberFieldInput, RadioFieldInput, SelectFieldInput, @@ -59,6 +60,8 @@ const InputField: React.FC = (props) => { return ; } return ; + case "checklist": + return ; } }; @@ -126,7 +129,7 @@ const InactiveListCard: React.FC<{ {formatSchemaDisplayValue( formik.values.userData[i][field.data.fn], - schema, + schema.fields[j], )} diff --git a/editor.planx.uk/src/@planx/components/List/model.ts b/editor.planx.uk/src/@planx/components/List/model.ts index 65adc60975..759aae527b 100644 --- a/editor.planx.uk/src/@planx/components/List/model.ts +++ b/editor.planx.uk/src/@planx/components/List/model.ts @@ -1,6 +1,7 @@ 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 { @@ -20,6 +21,12 @@ interface QuestionInput { options: Option[]; } +interface ChecklistInput { + title: string; + description?: string; + options: Option[]; +} + /** * As above, we need a simplified validation schema for QuestionsInputs */ @@ -42,12 +49,17 @@ export type QuestionField = { type: "question"; 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 @@ -59,7 +71,7 @@ export interface Schema { max?: number; } -export type UserResponse = Record; +export type UserResponse = Record; export type UserData = { userData: UserResponse[] }; @@ -100,6 +112,9 @@ const generateValidationSchemaForFields = ( case "question": fieldSchemas[data.fn] = questionInputValidationSchema(data); break; + case "checklist": + fieldSchemas[data.fn] = checklistValidationSchema(data); + break; } }); @@ -125,6 +140,10 @@ export const generateValidationSchema = (schema: Schema) => { export const generateInitialValues = (schema: Schema): UserResponse => { const initialValues: UserResponse = {}; - schema.fields.forEach((field) => (initialValues[field.data.fn] = "")); + 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/ResidentialUnits/GLA/Gained.ts b/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/GLA/Gained.ts index b08d3bbc6f..f403091c5c 100644 --- a/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/GLA/Gained.ts +++ b/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/GLA/Gained.ts @@ -70,61 +70,25 @@ export const ResidentialUnitsGLAGained: Schema = { ], }, }, - // { - // type: "checklist", // @todo - // 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: - "Is this unit compliant with Part M4(2) of the Building Regulations 2010?", - fn: "compliance.m42", - options: [ - { id: "true", data: { text: "Yes" } }, - { id: "false", data: { text: "No" } }, - ], - }, - }, - { - type: "question", + type: "checklist", data: { - title: - "Is this unit compliant with Part M4(3)(2a) of the Building Regulations 2010?", - fn: "compliance.m432a", + title: "Is this unit compliant with any of the following?", + fn: "compliance", options: [ - { id: "true", data: { text: "Yes" } }, - { id: "false", data: { text: "No" } }, - ], - }, - }, - { - type: "question", - data: { - title: - "Is this unit compliant with Part M4(3)(2b) of the Building Regulations 2010?", - fn: "compliance.m432b", - options: [ - { id: "true", data: { text: "Yes" } }, - { id: "false", data: { text: "No" } }, + { + 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" } }, ], }, }, diff --git a/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/GLA/Lost.ts b/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/GLA/Lost.ts index 5c4d126916..bed690a2e7 100644 --- a/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/GLA/Lost.ts +++ b/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/GLA/Lost.ts @@ -53,61 +53,25 @@ export const ResidentialUnitsGLALost: Schema = { ], }, }, - // { - // type: "checklist", // @todo - // 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: - "Is this unit compliant with Part M4(2) of the Building Regulations 2010?", - fn: "compliance.m42", - options: [ - { id: "true", data: { text: "Yes" } }, - { id: "false", data: { text: "No" } }, - ], - }, - }, - { - type: "question", + type: "checklist", data: { - title: - "Is this unit compliant with Part M4(3)(2a) of the Building Regulations 2010?", - fn: "compliance.m432a", + title: "Is this unit compliant with any of the following?", + fn: "compliance", options: [ - { id: "true", data: { text: "Yes" } }, - { id: "false", data: { text: "No" } }, - ], - }, - }, - { - type: "question", - data: { - title: - "Is this unit compliant with Part M4(3)(2b) of the Building Regulations 2010?", - fn: "compliance.m432b", - options: [ - { id: "true", data: { text: "Yes" } }, - { id: "false", data: { text: "No" } }, + { + 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" } }, ], }, }, 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 index 67a67ff4d0..fe8f9a2a78 100644 --- 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 @@ -90,61 +90,25 @@ export const ResidentialUnitsGLANew: Schema = { ], }, }, - // { - // type: "checklist", // @todo - // 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: - "Is this unit compliant with Part M4(2) of the Building Regulations 2010?", - fn: "compliance.m42", - options: [ - { id: "true", data: { text: "Yes", val: "true" } }, - { id: "false", data: { text: "No", val: "false" } }, - ], - }, - }, - { - type: "question", + type: "checklist", data: { - title: - "Is this unit compliant with Part M4(3)(2a) of the Building Regulations 2010?", - fn: "compliance.m432a", + title: "Is this unit compliant with any of the following?", + fn: "compliance", options: [ - { id: "true", data: { text: "Yes", val: "true" } }, - { id: "false", data: { text: "No", val: "false" } }, - ], - }, - }, - { - type: "question", - data: { - title: - "Is this unit compliant with Part M4(3)(2b) of the Building Regulations 2010?", - fn: "compliance.m432b", - options: [ - { id: "true", data: { text: "Yes", val: "true" } }, - { id: "false", data: { text: "No", val: "false" } }, + { + 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" } }, ], }, }, 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 index 31953e66b6..b108866be2 100644 --- 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 @@ -90,61 +90,25 @@ export const ResidentialUnitsGLARebuilt: Schema = { ], }, }, - // { - // type: "checklist", // @todo - // 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: - "Is this unit compliant with Part M4(2) of the Building Regulations 2010?", - fn: "compliance.m42", - options: [ - { id: "true", data: { text: "Yes", val: "true" } }, - { id: "false", data: { text: "No", val: "false" } }, - ], - }, - }, - { - type: "question", + type: "checklist", data: { - title: - "Is this unit compliant with Part M4(3)(2a) of the Building Regulations 2010?", - fn: "compliance.m432a", + title: "Is this unit compliant with any of the following?", + fn: "compliance", options: [ - { id: "true", data: { text: "Yes", val: "true" } }, - { id: "false", data: { text: "No", val: "false" } }, - ], - }, - }, - { - type: "question", - data: { - title: - "Is this unit compliant with Part M4(3)(2b) of the Building Regulations 2010?", - fn: "compliance.m432b", - options: [ - { id: "true", data: { text: "Yes", val: "true" } }, - { id: "false", data: { text: "No", val: "false" } }, + { + 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" } }, ], }, }, 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 index 4c5d4ecd94..b5fde1a983 100644 --- 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 @@ -69,61 +69,25 @@ export const ResidentialUnitsGLARemoved: Schema = { ], }, }, - // { - // type: "checklist", // @todo - // 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: - "Is this unit compliant with Part M4(2) of the Building Regulations 2010?", - fn: "compliance.m42", - options: [ - { id: "true", data: { text: "Yes", val: "true" } }, - { id: "false", data: { text: "No", val: "false" } }, - ], - }, - }, - { - type: "question", + type: "checklist", data: { - title: - "Is this unit compliant with Part M4(3)(2a) of the Building Regulations 2010?", - fn: "compliance.m432a", + title: "Is this unit compliant with any of the following?", + fn: "compliance", options: [ - { id: "true", data: { text: "Yes", val: "true" } }, - { id: "false", data: { text: "No", val: "false" } }, - ], - }, - }, - { - type: "question", - data: { - title: - "Is this unit compliant with Part M4(3)(2b) of the Building Regulations 2010?", - fn: "compliance.m432b", - options: [ - { id: "true", data: { text: "Yes", val: "true" } }, - { id: "false", data: { text: "No", val: "false" } }, + { + 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" } }, ], }, }, 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 index fe94d763e4..59394a6f31 100644 --- a/editor.planx.uk/src/@planx/components/List/schemas/mocks/Zoo.ts +++ b/editor.planx.uk/src/@planx/components/List/schemas/mocks/Zoo.ts @@ -3,10 +3,6 @@ import { TextInputType } from "@planx/components/TextInput/model"; import { Schema } from "../../model"; import { Props } from "../../Public"; -/** - * Temp simple example to build out UI - * Can be re-used as mock for testing - */ export const Zoo: Schema = { type: "Animal", fields: [ @@ -64,6 +60,20 @@ export const Zoo: Schema = { ], }, }, + // 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, @@ -86,6 +96,7 @@ export const mockZooPayload = { "email.address": "richard.parker@pi.com", name: "Richard Parker", size: "Medium", + food: ["meat", "leaves", "bamboo"], }, { age: 10, @@ -93,6 +104,7 @@ export const mockZooPayload = { "email.address": "richard.parker@pi.com", name: "Richard Parker", size: "Medium", + food: ["meat", "leaves", "bamboo"], }, ], "mockFn.one.age": 10, @@ -100,11 +112,13 @@ export const mockZooPayload = { "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 index c34dbf20d8..72e8996e19 100644 --- a/editor.planx.uk/src/@planx/components/List/utils.test.ts +++ b/editor.planx.uk/src/@planx/components/List/utils.test.ts @@ -15,6 +15,7 @@ describe("passport data shape", () => { "email.address": "richard.parker@pi.com", name: "Richard Parker", size: "Medium", + food: ["bamboo", "leaves"], }, { age: 10, @@ -22,21 +23,24 @@ describe("passport data shape", () => { "email.address": "richard.parker@pi.com", name: "Richard Parker", size: "Medium", + food: ["meat", "bamboo", "leaves"], }, ], }; - expect(flatten(defaultPassportData)).toEqual({ + 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"], }); }); diff --git a/editor.planx.uk/src/@planx/components/List/utils.ts b/editor.planx.uk/src/@planx/components/List/utils.tsx similarity index 65% rename from editor.planx.uk/src/@planx/components/List/utils.ts rename to editor.planx.uk/src/@planx/components/List/utils.tsx index 0e0d0dcdc3..7b26eee627 100644 --- a/editor.planx.uk/src/@planx/components/List/utils.ts +++ b/editor.planx.uk/src/@planx/components/List/utils.tsx @@ -1,24 +1,47 @@ -import { QuestionField, Schema, UserResponse } from "./model"; +import React from "react"; + +import { Field, UserResponse } from "./model"; +import { styled } from "@mui/material/styles"; + +const List = styled("ul")(() => ({ + listStylePosition: "inside", + padding: 0, + margin: 0, +})) /** - * In the case of "question" fields, ensure the displayed value reflects option "text", rather than "val" as recorded in passport + * 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 schema - the Schema object - * @returns string - the `text` for the given value `val`, or the original value + * @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, schema: Schema) { - const questionFields = schema.fields.filter( - (field) => field.type === "question", - ) as QuestionField[]; - const matchingField = questionFields?.find((field) => - field.data.options.some((option) => option.data.val === value), - ); - const matchingOption = matchingField?.data.options.find( - (option) => option.data.val === value, - ); - - // If we found a "val" match, return its text, else just return the value as passed in - return matchingOption?.data?.text || value; +export function formatSchemaDisplayValue( + value: string | string[], + field: Field, +) { + switch (field.type) { + case "number": + 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; + } + } } /** @@ -32,7 +55,11 @@ export function sumIdenticalUnits( passportData: Record, ): number { let sum = 0; - passportData[`${fn}`].map((item) => (sum += parseInt(item?.identicalUnits))); + passportData[`${fn}`].map((item) => { + if (!Array.isArray(item?.identicalUnits)) { + sum += parseInt(item?.identicalUnits); + } + }); return sum; } @@ -58,10 +85,11 @@ export function sumIdenticalUnitsByDevelopmentType( newBuild: 0, notKnown: 0, }; - passportData[`${fn}`].map( - (item) => - (baseSums[`${item?.development}`] += parseInt(item?.identicalUnits)), - ); + 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 = {}; @@ -74,14 +102,19 @@ export function sumIdenticalUnitsByDevelopmentType( 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, - path: string | null = null, - separator = ".", + object: T, + { depth = Infinity, path = null, separator = ".", }: FlattenOptions = {} ): T { return Object.keys(object).reduce((acc: T, key: string): T => { const value = object[key]; @@ -100,8 +133,8 @@ export function flatten>( !(Array.isArray(value) && value.length === 0), ].every(Boolean); - return isObject - ? { ...acc, ...flatten(value, newPath, separator) } + return (isObject && depth > 0) + ? { ...acc, ...flatten(value, { depth: depth - 1, path: newPath, separator }) } : { ...acc, [newPath]: value }; }, {} as T); } diff --git a/editor.planx.uk/src/ui/shared/Checkbox.tsx b/editor.planx.uk/src/ui/shared/Checkbox.tsx index 5637178092..37969b1e90 100644 --- a/editor.planx.uk/src/ui/shared/Checkbox.tsx +++ b/editor.planx.uk/src/ui/shared/Checkbox.tsx @@ -11,7 +11,7 @@ const Root = styled(Box)(({ theme }) => ({ height: 40, borderColor: theme.palette.text.primary, border: "2px solid", - background: "transparent", + backgroundColor: theme.palette.common.white, "&:focus-within": borderedFocusStyle, })); From af3659e74a12cf1a9149450dd07641de9943a294 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Mon, 1 Jul 2024 15:06:23 +0100 Subject: [PATCH 082/150] fix: Broken lockfiles (#3355) --- api.planx.uk/pnpm-lock.yaml | 147 ++--- e2e/tests/api-driven/pnpm-lock.yaml | 416 ++++++++----- e2e/tests/ui-driven/pnpm-lock.yaml | 412 ++++++++----- editor.planx.uk/pnpm-lock.yaml | 844 ++++++++++++++++---------- hasura.planx.uk/tests/pnpm-lock.yaml | 868 ++++++++++++--------------- 5 files changed, 1508 insertions(+), 1179 deletions(-) diff --git a/api.planx.uk/pnpm-lock.yaml b/api.planx.uk/pnpm-lock.yaml index 09c13e9457..bc32cd21ed 100644 --- a/api.planx.uk/pnpm-lock.yaml +++ b/api.planx.uk/pnpm-lock.yaml @@ -1158,8 +1158,8 @@ packages: eslint: 8.57.0 eslint-visitor-keys: 3.4.3 - /@eslint-community/regexpp@4.10.1: - resolution: {integrity: sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==} + /@eslint-community/regexpp@4.11.0: + resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} /@eslint/eslintrc@2.1.4: @@ -1182,21 +1182,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' @@ -1206,13 +1206,13 @@ 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.9.0): @@ -1397,7 +1397,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 @@ -1407,7 +1407,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 @@ -1569,7 +1569,7 @@ packages: optional: true dependencies: '@babel/runtime': 7.24.7 - '@floating-ui/react-dom': 2.1.0(react-dom@18.3.1)(react@18.3.1) + '@floating-ui/react-dom': 2.1.1(react-dom@18.3.1)(react@18.3.1) '@mui/types': 7.2.14 '@mui/utils': 5.15.20(react@18.3.1) '@popperjs/core': 2.11.8 @@ -1579,12 +1579,12 @@ packages: react-dom: 18.3.1(react@18.3.1) dev: false - /@mui/core-downloads-tracker@5.15.20: - resolution: {integrity: sha512-DoL2ppgldL16utL8nNyj/P12f8mCNdx/Hb/AJnX9rLY4b52hCMIx1kH83pbXQ6uMy6n54M3StmEbvSGoj2OFuA==} + /@mui/core-downloads-tracker@5.15.21: + resolution: {integrity: sha512-dp9lXBaJZzJYeJfQY3Ow4Rb49QaCEdkl2KKYscdQHQm6bMJ+l4XPY3Cd9PCeeJTsHPIDJ60lzXbeRgs6sx/rpw==} dev: false - /@mui/material@5.15.20(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-tVq3l4qoXx/NxUgIx/x3lZiPn/5xDbdTE8VrLczNpfblLYZzlrbxA7kb9mI8NoBF6+w9WE9IrxWnKK5KlPI2bg==} + /@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 @@ -1608,7 +1608,7 @@ packages: '@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.20 + '@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.20(react@18.3.1) @@ -1869,8 +1869,8 @@ packages: '@types/pino-http': 5.8.4 dev: true - /@types/express-serve-static-core@4.19.3: - resolution: {integrity: sha512-KOzM7MhcBFlmnlr/fzISFF5vGWVSvN6fTd4T+ExOt08bA/dA5kpSzY52nMsI1KDFmUREpJelPYyuslLRSjjgCg==} + /@types/express-serve-static-core@4.19.5: + resolution: {integrity: sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==} dependencies: '@types/node': 18.19.13 '@types/qs': 6.9.15 @@ -1881,7 +1881,7 @@ packages: resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} dependencies: '@types/body-parser': 1.19.5 - '@types/express-serve-static-core': 4.19.3 + '@types/express-serve-static-core': 4.19.5 '@types/qs': 6.9.15 '@types/serve-static': 1.15.7 @@ -1980,8 +1980,8 @@ packages: dependencies: undici-types: 5.26.5 - /@types/node@20.14.5: - resolution: {integrity: sha512-aoRR+fJkZT2l0aGOJhuA8frnCSoNX6W7U2mpNq63+BxBIj5BQFt8rHy627kijCmm63ijdSdwvGgpUsU6MBsZZA==} + /@types/node@20.14.9: + resolution: {integrity: sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==} dependencies: undici-types: 5.26.5 dev: false @@ -2176,7 +2176,7 @@ packages: typescript: optional: true dependencies: - '@eslint-community/regexpp': 4.10.1 + '@eslint-community/regexpp': 4.11.0 '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.3) '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.0)(typescript@5.4.3) @@ -2422,10 +2422,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: @@ -2739,8 +2735,8 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001636 - electron-to-chromium: 1.4.806 + caniuse-lite: 1.0.30001639 + electron-to-chromium: 1.4.815 node-releases: 2.0.14 update-browserslist-db: 1.0.16(browserslist@4.23.1) dev: true @@ -2835,8 +2831,8 @@ packages: engines: {node: '>=10'} dev: true - /caniuse-lite@1.0.30001636: - resolution: {integrity: sha512-bMg2vmr8XBsbL6Lr0UHXy/21m84FTxDLWn2FSqMd5PrlbMxwJlQnC2YWYxVgp66PZE+BBNF2jYQUBKCo1FDeZg==} + /caniuse-lite@1.0.30001639: + resolution: {integrity: sha512-eFHflNTBIlFwP2AIKaYuBQN/apnUoKNhBdza8ZnW/h2di4LCZ4xFqYlxUxo+LQ76KFI1PGcC1QDxMbxTZpSCAg==} dev: true /capture-exit@2.0.0: @@ -3473,7 +3469,7 @@ packages: resolution: {integrity: sha512-4SbcbedPXTciySXiSnNNLuJXpvxFe5nqivbiEHXyL8P/w0wx2uW7YXNjnYgjW0e2e6vy+L/tMISU/oAiXCl57Q==} engines: {node: '>=10'} dependencies: - '@types/node': 20.14.5 + '@types/node': 20.14.9 jszip: 3.10.1 nanoid: 5.0.7 xml: 1.0.1 @@ -3551,8 +3547,8 @@ packages: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} dev: false - /electron-to-chromium@1.4.806: - resolution: {integrity: sha512-nkoEX2QIB8kwCOtvtgwhXWy2IHVcOLQZu9Qo36uaGB835mdX/h8uLRlosL6QIhLVUnAiicXRW00PwaPZC74Nrg==} + /electron-to-chromium@1.4.815: + resolution: {integrity: sha512-OvpTT2ItpOXJL7IGcYakRjHCt8L5GrrN/wHCQsRB4PQa1X9fe+X9oen245mIId7s14xvArCGSTIq644yPUKKLg==} dev: true /emittery@0.13.1: @@ -3758,7 +3754,7 @@ packages: hasBin: true dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@eslint-community/regexpp': 4.10.1 + '@eslint-community/regexpp': 4.11.0 '@eslint/eslintrc': 2.1.4 '@eslint/js': 8.57.0 '@humanwhocodes/config-array': 0.11.14 @@ -4376,7 +4372,7 @@ packages: dependencies: foreground-child: 3.2.1 jackspeak: 3.4.0 - minimatch: 9.0.4 + minimatch: 9.0.5 minipass: 7.1.2 package-json-from-dist: 1.0.0 path-scurry: 1.11.1 @@ -4656,8 +4652,8 @@ 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 @@ -4787,8 +4783,9 @@ packages: 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 @@ -5001,8 +4998,8 @@ 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 @@ -5576,7 +5573,7 @@ packages: 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 @@ -5608,8 +5605,8 @@ packages: /json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - /json-schema-to-typescript@14.0.5: - resolution: {integrity: sha512-JmHsbgY0KKo8Pw0HRXpGzAlZYxlu+M5kFhSzhNkUSrVJ4sCXPdAGIdSpzva5ev2/Kybz10S6AfnNdF4o3Pzt3A==} + /json-schema-to-typescript@14.1.0: + resolution: {integrity: sha512-VIeAFQkn88gFh26MSHWG4uX7TjK/arTw0NVLMZn6vX1WrSF+P6xu5MyEdovu+9PJ0uiS5gm0wzwQvYW9eSq1uw==} engines: {node: '>=16.0.0'} hasBin: true dependencies: @@ -5623,7 +5620,6 @@ packages: lodash: 4.17.21 minimist: 1.2.8 mkdirp: 3.0.1 - mz: 2.7.0 node-fetch: 3.3.2 prettier: 3.3.2 dev: false @@ -5660,7 +5656,6 @@ packages: chalk: 3.0.0 diff-match-patch: 1.0.5 dev: false - bundledDependencies: [] /jsonwebtoken@9.0.2: resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} @@ -5877,8 +5872,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: @@ -6043,8 +6038,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 @@ -6105,14 +6100,6 @@ 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} @@ -6318,8 +6305,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==} @@ -6543,7 +6531,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: @@ -6992,7 +6980,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 @@ -7244,7 +7232,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==} @@ -7604,19 +7592,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: @@ -8008,8 +7983,8 @@ packages: 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 @@ -8297,7 +8272,7 @@ 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.20(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react-dom@18.3.1)(react@18.3.1) + '@mui/material': 5.15.21(@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.16.0 ajv-formats: 2.1.1(ajv@8.16.0) @@ -8308,7 +8283,7 @@ packages: fast-xml-parser: 4.4.0 graphql: 16.9.0 graphql-request: 6.1.0(graphql@16.9.0) - json-schema-to-typescript: 14.0.5 + json-schema-to-typescript: 14.1.0 lodash: 4.17.21 marked: 13.0.1 prettier: 3.3.2 diff --git a/e2e/tests/api-driven/pnpm-lock.yaml b/e2e/tests/api-driven/pnpm-lock.yaml index 118c25b018..c2d0779c7a 100644 --- a/e2e/tests/api-driven/pnpm-lock.yaml +++ b/e2e/tests/api-driven/pnpm-lock.yaml @@ -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-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-validator-identifier@7.24.5: - resolution: {integrity: sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==} + /@babel/helper-string-parser@7.24.7: + resolution: {integrity: sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==} engines: {node: '>=6.9.0'} dev: false - /@babel/highlight@7.24.5: - resolution: {integrity: sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==} + /@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/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.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 @@ -152,7 +229,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 +253,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 @@ -259,8 +336,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 +347,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 +384,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 +393,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 +421,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 +429,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 +463,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 +473,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,32 +490,32 @@ 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.9.0): @@ -449,7 +532,7 @@ packages: 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 @@ -477,14 +560,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==} @@ -508,10 +610,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 @@ -519,12 +621,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 @@ -540,14 +642,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 @@ -558,8 +660,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 @@ -568,8 +670,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 @@ -587,7 +689,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) @@ -596,8 +698,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 @@ -612,13 +714,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 @@ -634,8 +736,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 @@ -644,7 +746,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 @@ -715,18 +817,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 @@ -764,21 +866,23 @@ 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 @@ -888,7 +992,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 @@ -931,7 +1035,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 @@ -987,8 +1091,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: @@ -1057,7 +1161,7 @@ packages: dev: false /concat-map@0.0.1: - resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: false /convert-source-map@1.9.0: @@ -1141,7 +1245,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: @@ -1149,8 +1253,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: '*' @@ -1186,7 +1290,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 @@ -1196,7 +1300,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 @@ -1342,7 +1446,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 @@ -1352,7 +1456,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 @@ -1390,15 +1494,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 @@ -1436,7 +1540,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: @@ -1526,8 +1630,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 @@ -1570,20 +1674,22 @@ 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 /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 @@ -1600,6 +1706,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'} @@ -1630,7 +1741,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: @@ -1730,8 +1841,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 @@ -1787,8 +1899,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 @@ -1807,6 +1919,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 @@ -1815,22 +1933,21 @@ packages: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} dev: false - /json-schema-to-typescript@14.0.5: - resolution: {integrity: sha512-JmHsbgY0KKo8Pw0HRXpGzAlZYxlu+M5kFhSzhNkUSrVJ4sCXPdAGIdSpzva5ev2/Kybz10S6AfnNdF4o3Pzt3A==} + /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.3.2 dev: false @@ -1982,11 +2099,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 @@ -2018,9 +2135,9 @@ packages: 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 @@ -2029,7 +2146,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: @@ -2050,8 +2167,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 @@ -2122,14 +2239,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 @@ -2213,6 +2330,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'} @@ -2235,7 +2356,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 @@ -2277,7 +2398,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 @@ -2364,7 +2485,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 @@ -2455,7 +2576,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 @@ -2487,8 +2608,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: @@ -2667,8 +2788,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 @@ -2712,8 +2834,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 @@ -2723,8 +2845,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: @@ -2744,8 +2866,8 @@ packages: 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: @@ -2766,7 +2888,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: @@ -2861,7 +2983,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: @@ -2892,8 +3014,8 @@ 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 @@ -2930,8 +3052,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 @@ -2952,7 +3074,7 @@ 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) + '@mui/material': 5.15.21(@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.16.0 ajv-formats: 2.1.1(ajv@8.16.0) @@ -2963,7 +3085,7 @@ packages: fast-xml-parser: 4.4.0 graphql: 16.9.0 graphql-request: 6.1.0(graphql@16.9.0) - json-schema-to-typescript: 14.0.5 + json-schema-to-typescript: 14.1.0 lodash: 4.17.21 marked: 13.0.1 prettier: 3.3.2 diff --git a/e2e/tests/ui-driven/pnpm-lock.yaml b/e2e/tests/ui-driven/pnpm-lock.yaml index c0ee351d54..32d3fa41e6 100644 --- a/e2e/tests/ui-driven/pnpm-lock.yaml +++ b/e2e/tests/ui-driven/pnpm-lock.yaml @@ -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-validator-identifier@7.24.5: - resolution: {integrity: sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==} + /@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/highlight@7.24.5: - resolution: {integrity: sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==} + /@babel/helper-module-imports@7.24.7: + resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.24.5 + '@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.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.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/helper-string-parser': 7.24.1 - '@babel/helper-validator-identifier': 7.24.5 + '@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.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,32 +354,32 @@ 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): @@ -318,9 +401,10 @@ packages: /@humanwhocodes/config-array@0.11.14: resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead dependencies: '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.4 + debug: 4.3.5 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -331,6 +415,7 @@ packages: /@humanwhocodes/object-schema@2.0.3: resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + deprecated: Use @eslint/object-schema instead /@isaacs/cliui@8.0.2: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} @@ -344,6 +429,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 @@ -359,10 +474,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 @@ -370,12 +485,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 @@ -391,14 +506,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 @@ -409,8 +524,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 @@ -419,8 +534,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 @@ -438,7 +553,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) @@ -447,8 +562,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 @@ -463,13 +578,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 @@ -485,8 +600,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 @@ -495,7 +610,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 @@ -547,16 +662,16 @@ packages: 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 @@ -597,15 +712,15 @@ 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 @@ -679,10 +794,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 @@ -712,7 +823,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 @@ -832,8 +943,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: @@ -986,7 +1097,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: @@ -1005,8 +1116,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: '*' @@ -1039,7 +1150,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 @@ -1049,7 +1160,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 @@ -1194,7 +1305,7 @@ packages: 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 @@ -1204,7 +1315,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 @@ -1240,7 +1351,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 @@ -1250,7 +1361,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 @@ -1288,15 +1399,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: @@ -1344,7 +1455,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: @@ -1420,8 +1531,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 @@ -1475,15 +1586,16 @@ 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 @@ -1498,6 +1610,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'} @@ -1614,8 +1731,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 @@ -1686,8 +1804,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 @@ -1705,6 +1823,12 @@ packages: 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==} @@ -1712,22 +1836,21 @@ packages: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} dev: false - /json-schema-to-typescript@14.0.5: - resolution: {integrity: sha512-JmHsbgY0KKo8Pw0HRXpGzAlZYxlu+M5kFhSzhNkUSrVJ4sCXPdAGIdSpzva5ev2/Kybz10S6AfnNdF4o3Pzt3A==} + /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.3.2 dev: false @@ -1852,8 +1975,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 @@ -1869,9 +1992,9 @@ packages: 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 @@ -1880,7 +2003,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: @@ -1921,8 +2044,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 @@ -1960,14 +2083,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} @@ -2077,6 +2192,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 @@ -2091,7 +2210,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 @@ -2134,7 +2253,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 @@ -2243,7 +2362,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 @@ -2315,7 +2434,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 @@ -2326,6 +2445,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 @@ -2343,8 +2463,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: @@ -2504,19 +2624,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: @@ -2524,8 +2631,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 @@ -2560,8 +2668,8 @@ packages: 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: @@ -2667,7 +2775,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: @@ -2724,7 +2832,7 @@ 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) + '@mui/material': 5.15.21(@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.16.0 ajv-formats: 2.1.1(ajv@8.16.0) @@ -2735,7 +2843,7 @@ packages: fast-xml-parser: 4.4.0 graphql: 16.9.0 graphql-request: 6.1.0(graphql@16.9.0) - json-schema-to-typescript: 14.0.5 + json-schema-to-typescript: 14.1.0 lodash: 4.17.21 marked: 13.0.1 prettier: 3.3.2 diff --git a/editor.planx.uk/pnpm-lock.yaml b/editor.planx.uk/pnpm-lock.yaml index e2772eb954..a3af39f28f 100644 --- a/editor.planx.uk/pnpm-lock.yaml +++ b/editor.planx.uk/pnpm-lock.yaml @@ -223,7 +223,7 @@ dependencies: version: 0.15.0(navi@0.15.0)(react-dom@18.2.0)(react-navi@0.15.0)(react@18.2.0) react-scripts: specifier: ^5.0.1 - version: 5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(@swc/core@1.6.3)(esbuild@0.21.3)(eslint@8.44.0)(react@18.2.0)(sass@1.71.1)(typescript@5.4.3) + version: 5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(@swc/core@1.6.6)(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) @@ -291,7 +291,7 @@ devDependencies: version: 7.23.3(@babel/core@7.22.5) '@craco/craco': specifier: ^7.1.0 - version: 7.1.0(@swc/core@1.6.3)(@types/node@17.0.45)(postcss@8.4.32)(react-scripts@5.0.1)(typescript@5.4.3) + version: 7.1.0(@swc/core@1.6.6)(@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) @@ -321,7 +321,7 @@ devDependencies: version: 7.6.7(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.3) '@storybook/react-webpack5': specifier: ^7.6.7 - version: 7.6.7(@babel/core@7.22.5)(@swc/core@1.6.3)(esbuild@0.21.3)(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.3) + version: 7.6.7(@babel/core@7.22.5)(@swc/core@1.6.6)(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 @@ -336,7 +336,7 @@ devDependencies: version: 14.2.1(react-dom@18.2.0)(react@18.2.0) '@testing-library/user-event': specifier: ^14.4.3 - version: 14.4.3(@testing-library/dom@10.1.0) + version: 14.4.3(@testing-library/dom@10.2.0) '@types/dompurify': specifier: ^3.0.5 version: 3.0.5 @@ -468,7 +468,7 @@ devDependencies: version: 5.4.3 webpack: specifier: ^5.91.0 - version: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + version: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) packages: @@ -3410,7 +3410,7 @@ packages: dev: true optional: true - /@craco/craco@7.1.0(@swc/core@1.6.3)(@types/node@17.0.45)(postcss@8.4.32)(react-scripts@5.0.1)(typescript@5.4.3): + /@craco/craco@7.1.0(@swc/core@1.6.6)(@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 @@ -3419,10 +3419,10 @@ packages: dependencies: autoprefixer: 10.4.16(postcss@8.4.32) cosmiconfig: 7.1.0 - cosmiconfig-typescript-loader: 1.0.9(@swc/core@1.6.3)(@types/node@17.0.45)(cosmiconfig@7.1.0)(typescript@5.4.3) + cosmiconfig-typescript-loader: 1.0.9(@swc/core@1.6.6)(@types/node@17.0.45)(cosmiconfig@7.1.0)(typescript@5.4.3) cross-spawn: 7.0.3 lodash: 4.17.21 - react-scripts: 5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(@swc/core@1.6.3)(esbuild@0.21.3)(eslint@8.44.0)(react@18.2.0)(sass@1.71.1)(typescript@5.4.3) + react-scripts: 5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(@swc/core@1.6.6)(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: @@ -4481,8 +4481,8 @@ packages: eslint-visitor-keys: 3.4.3 dev: false - /@eslint-community/regexpp@4.10.1: - resolution: {integrity: sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==} + /@eslint-community/regexpp@4.11.0: + resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} /@eslint/eslintrc@2.1.4: @@ -4514,40 +4514,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==} @@ -5159,7 +5159,7 @@ packages: optional: true dependencies: '@babel/runtime': 7.24.7 - '@floating-ui/react-dom': 2.1.0(react-dom@18.2.0)(react@18.2.0) + '@floating-ui/react-dom': 2.1.1(react-dom@18.2.0)(react@18.2.0) '@mui/types': 7.2.14(@types/react@18.2.45) '@mui/utils': 5.15.2(@types/react@18.2.45)(react@18.2.0) '@popperjs/core': 2.11.8 @@ -5182,7 +5182,7 @@ packages: optional: true dependencies: '@babel/runtime': 7.24.7 - '@floating-ui/react-dom': 2.1.0(react-dom@18.3.1)(react@18.3.1) + '@floating-ui/react-dom': 2.1.1(react-dom@18.3.1)(react@18.3.1) '@mui/types': 7.2.14(@types/react@18.2.45) '@mui/utils': 5.15.2(@types/react@18.2.45)(react@18.3.1) '@popperjs/core': 2.11.8 @@ -5205,7 +5205,7 @@ packages: optional: true dependencies: '@babel/runtime': 7.24.7 - '@floating-ui/react-dom': 2.1.0(react-dom@18.2.0)(react@18.2.0) + '@floating-ui/react-dom': 2.1.1(react-dom@18.2.0)(react@18.2.0) '@mui/types': 7.2.14(@types/react@18.2.45) '@mui/utils': 5.15.20(@types/react@18.2.45)(react@18.2.0) '@popperjs/core': 2.11.8 @@ -5216,8 +5216,8 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@mui/core-downloads-tracker@5.15.20: - resolution: {integrity: sha512-DoL2ppgldL16utL8nNyj/P12f8mCNdx/Hb/AJnX9rLY4b52hCMIx1kH83pbXQ6uMy6n54M3StmEbvSGoj2OFuA==} + /@mui/core-downloads-tracker@5.15.21: + resolution: {integrity: sha512-dp9lXBaJZzJYeJfQY3Ow4Rb49QaCEdkl2KKYscdQHQm6bMJ+l4XPY3Cd9PCeeJTsHPIDJ60lzXbeRgs6sx/rpw==} dev: false /@mui/icons-material@5.15.2(@mui/material@5.15.2)(@types/react@18.2.45)(react@18.2.0): @@ -5291,7 +5291,7 @@ packages: '@emotion/react': 11.11.1(@types/react@18.2.45)(react@18.2.0) '@emotion/styled': 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.45)(react@18.2.0) '@mui/base': 5.0.0-beta.29(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) - '@mui/core-downloads-tracker': 5.15.20 + '@mui/core-downloads-tracker': 5.15.21 '@mui/system': 5.15.20(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.45)(react@18.2.0) '@mui/types': 7.2.14(@types/react@18.2.45) '@mui/utils': 5.15.2(@types/react@18.2.45)(react@18.2.0) @@ -5327,7 +5327,7 @@ packages: '@emotion/react': 11.11.4(@types/react@18.2.45)(react@18.3.1) '@emotion/styled': 11.11.5(@emotion/react@11.11.4)(@types/react@18.2.45)(react@18.3.1) '@mui/base': 5.0.0-beta.29(@types/react@18.2.45)(react-dom@18.3.1)(react@18.3.1) - '@mui/core-downloads-tracker': 5.15.20 + '@mui/core-downloads-tracker': 5.15.21 '@mui/system': 5.15.20(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(@types/react@18.2.45)(react@18.3.1) '@mui/types': 7.2.14(@types/react@18.2.45) '@mui/utils': 5.15.2(@types/react@18.2.45)(react@18.3.1) @@ -5613,7 +5613,7 @@ packages: lit: 3.1.4 ol: 9.2.4 ol-ext: 4.0.18(ol@9.2.4) - ol-mapbox-style: 12.3.3(ol@9.2.4) + ol-mapbox-style: 12.3.4(ol@9.2.4) postcode: 5.1.0 proj4: 2.11.0 rambda: 8.6.0 @@ -5663,7 +5663,7 @@ packages: react-refresh: 0.11.0 schema-utils: 4.2.0 source-map: 0.7.4 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) webpack-dev-server: 4.15.2(webpack@5.91.0) /@pmmmwh/react-refresh-webpack-plugin@0.5.15(react-refresh@0.14.0)(webpack@5.91.0): @@ -5700,7 +5700,7 @@ packages: react-refresh: 0.14.0 schema-utils: 4.2.0 source-map: 0.7.4 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) dev: true /@popperjs/core@2.11.8: @@ -5719,6 +5719,10 @@ packages: '@babel/runtime': 7.24.7 dev: true + /@radix-ui/primitive@1.1.0: + resolution: {integrity: sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==} + dev: true + /@radix-ui/react-arrow@1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==} peerDependencies: @@ -5764,6 +5768,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: @@ -5778,6 +5805,19 @@ packages: react: 18.2.0 dev: true + /@radix-ui/react-compose-refs@1.1.0(@types/react@18.2.45)(react@18.2.0): + resolution: {integrity: sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.45 + react: 18.2.0 + dev: true + /@radix-ui/react-context@1.0.1(@types/react@18.2.45)(react@18.2.0): resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} peerDependencies: @@ -5792,6 +5832,19 @@ packages: react: 18.2.0 dev: true + /@radix-ui/react-context@1.1.0(@types/react@18.2.45)(react@18.2.0): + resolution: {integrity: sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.45 + react: 18.2.0 + dev: true + /@radix-ui/react-direction@1.0.1(@types/react@18.2.45)(react@18.2.0): resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} peerDependencies: @@ -5806,6 +5859,19 @@ packages: react: 18.2.0 dev: true + /@radix-ui/react-direction@1.1.0(@types/react@18.2.45)(react@18.2.0): + resolution: {integrity: sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.45 + react: 18.2.0 + dev: true + /@radix-ui/react-dismissable-layer@1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg==} peerDependencies: @@ -5883,6 +5949,20 @@ packages: react: 18.2.0 dev: true + /@radix-ui/react-id@1.1.0(@types/react@18.2.45)(react@18.2.0): + resolution: {integrity: sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.2.45)(react@18.2.0) + '@types/react': 18.2.45 + react: 18.2.0 + dev: true + /@radix-ui/react-popper@1.1.2(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-1CnGGfFi/bbqtJZZ0P/NQY20xdG3E0LALJaLUEoKwPLwl6PPPfbeiCqMVQnhoFRAxjJj4RpBRJzDmUgsex2tSg==} peerDependencies: @@ -5897,7 +5977,7 @@ packages: optional: true dependencies: '@babel/runtime': 7.24.7 - '@floating-ui/react-dom': 2.1.0(react-dom@18.2.0)(react@18.2.0) + '@floating-ui/react-dom': 2.1.1(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.45)(react@18.2.0) '@radix-ui/react-context': 1.0.1(@types/react@18.2.45)(react@18.2.0) @@ -5955,29 +6035,48 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true - /@radix-ui/react-roving-focus@1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==} + /@radix-ui/react-primitive@2.0.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.7 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.45)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.45)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.2.45)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.2.45)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.45)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.45)(react@18.2.0) + '@radix-ui/react-slot': 1.1.0(@types/react@18.2.45)(react@18.2.0) + '@types/react': 18.2.45 + '@types/react-dom': 18.2.18 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: true + + /@radix-ui/react-roving-focus@1.1.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-EA6AMGeq9AEeQDeSH0aZgG198qkfHSbvWTf1HvoDmOB5bBG/qTxjYMWUKMnYiV6J/iP/J8MEFSuB2zRU2n7ODA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.2.45)(react@18.2.0) + '@radix-ui/react-context': 1.1.0(@types/react@18.2.45)(react@18.2.0) + '@radix-ui/react-direction': 1.1.0(@types/react@18.2.45)(react@18.2.0) + '@radix-ui/react-id': 1.1.0(@types/react@18.2.45)(react@18.2.0) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.2.45)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.2.45)(react@18.2.0) '@types/react': 18.2.45 '@types/react-dom': 18.2.18 react: 18.2.0 @@ -6025,21 +6124,20 @@ packages: react-remove-scroll: 2.5.5(@types/react@18.2.45)(react@18.2.0) dev: true - /@radix-ui/react-separator@1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-itYmTy/kokS21aiV5+Z56MZB54KrhPgn6eHDKkFeOLR34HMN2s8PaN47qZZAGnvupcjxHaFZnW4pQEh0BvvVuw==} + /@radix-ui/react-separator@1.1.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-3uBAs+egzvJBDZAzvb/n4NxxOYpnspmWxO2u5NbZ8Y6FM/NdrGSF9bop3Cf6F6C71z1rTSn8KV0Fo2ZVd79lGA==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.7 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) '@types/react': 18.2.45 '@types/react-dom': 18.2.18 react: 18.2.0 @@ -6061,77 +6159,88 @@ packages: react: 18.2.0 dev: true - /@radix-ui/react-toggle-group@1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-Uaj/M/cMyiyT9Bx6fOZO0SAG4Cls0GptBWiBmBxofmDbNVnYYoyRWj/2M/6VCi/7qcXFWnHhRUfdfZFvvkuu8A==} + /@radix-ui/react-slot@1.1.0(@types/react@18.2.45)(react@18.2.0): + resolution: {integrity: sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.2.45)(react@18.2.0) + '@types/react': 18.2.45 + react: 18.2.0 + dev: true + + /@radix-ui/react-toggle-group@1.1.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-PpTJV68dZU2oqqgq75Uzto5o/XfOVgkrJ9rulVmfTKxWp3HfUjHE6CP/WLRR4AzPX9HWxw7vFow2me85Yu+Naw==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.7 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-context': 1.0.1(@types/react@18.2.45)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.2.45)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-toggle': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.45)(react@18.2.0) + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-context': 1.1.0(@types/react@18.2.45)(react@18.2.0) + '@radix-ui/react-direction': 1.1.0(@types/react@18.2.45)(react@18.2.0) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-roving-focus': 1.1.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-toggle': 1.1.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.2.45)(react@18.2.0) '@types/react': 18.2.45 '@types/react-dom': 18.2.18 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: true - /@radix-ui/react-toggle@1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-Pkqg3+Bc98ftZGsl60CLANXQBBQ4W3mTFS9EJvNxKMZ7magklKV69/id1mlAlOFDDfHvlCms0fx8fA4CMKDJHg==} + /@radix-ui/react-toggle@1.1.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-gwoxaKZ0oJ4vIgzsfESBuSgJNdc0rv12VhHgcqN0TEJmmZixXG/2XpsLK8kzNWYcnaoRIEEQc0bEi3dIvdUpjw==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.7 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.45)(react@18.2.0) + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.2.45)(react@18.2.0) '@types/react': 18.2.45 '@types/react-dom': 18.2.18 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: true - /@radix-ui/react-toolbar@1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-tBgmM/O7a07xbaEkYJWYTXkIdU/1pW4/KZORR43toC/4XWyBCURK0ei9kMUdp+gTPPKBgYLxXmRSH1EVcIDp8Q==} + /@radix-ui/react-toolbar@1.1.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-ZUKknxhMTL/4hPh+4DuaTot9aO7UD6Kupj4gqXCsBTayX1pD1L+0C2/2VZKXb4tIifQklZ3pf2hG9T+ns+FclQ==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.7 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-context': 1.0.1(@types/react@18.2.45)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.2.45)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-separator': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-toggle-group': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-context': 1.1.0(@types/react@18.2.45)(react@18.2.0) + '@radix-ui/react-direction': 1.1.0(@types/react@18.2.45)(react@18.2.0) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-roving-focus': 1.1.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-separator': 1.1.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-toggle-group': 1.1.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) '@types/react': 18.2.45 '@types/react-dom': 18.2.18 react: 18.2.0 @@ -6152,6 +6261,19 @@ packages: react: 18.2.0 dev: true + /@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.2.45)(react@18.2.0): + resolution: {integrity: sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.45 + react: 18.2.0 + dev: true + /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.2.45)(react@18.2.0): resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} peerDependencies: @@ -6167,6 +6289,20 @@ packages: react: 18.2.0 dev: true + /@radix-ui/react-use-controllable-state@1.1.0(@types/react@18.2.45)(react@18.2.0): + resolution: {integrity: sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.2.45)(react@18.2.0) + '@types/react': 18.2.45 + react: 18.2.0 + dev: true + /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.2.45)(react@18.2.0): resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} peerDependencies: @@ -6196,6 +6332,19 @@ packages: react: 18.2.0 dev: true + /@radix-ui/react-use-layout-effect@1.1.0(@types/react@18.2.45)(react@18.2.0): + resolution: {integrity: sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.45 + react: 18.2.0 + dev: true + /@radix-ui/react-use-previous@1.0.1(@types/react@18.2.45)(react@18.2.0): resolution: {integrity: sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==} peerDependencies: @@ -6581,7 +6730,7 @@ packages: react: optional: true dependencies: - '@storybook/csf': 0.1.8 + '@storybook/csf': 0.1.9 '@storybook/global': 5.0.0 react: 18.2.0 ts-dedent: 2.2.0 @@ -6632,14 +6781,14 @@ packages: '@storybook/client-logger': 7.6.7 '@storybook/components': 7.6.7(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) '@storybook/core-events': 7.6.7 - '@storybook/csf': 0.1.8 + '@storybook/csf': 0.1.9 '@storybook/docs-tools': 7.6.7 '@storybook/global': 5.0.0 '@storybook/manager-api': 7.6.7(react-dom@18.2.0)(react@18.2.0) '@storybook/preview-api': 7.6.7 '@storybook/theming': 7.6.7(react-dom@18.2.0)(react@18.2.0) '@storybook/types': 7.6.7 - '@types/lodash': 4.17.5 + '@types/lodash': 4.14.202 color-convert: 2.0.1 dequal: 2.0.3 lodash: 4.17.21 @@ -6660,11 +6809,11 @@ packages: - supports-color dev: true - /@storybook/builder-manager@8.1.10(prettier@3.3.2): + /@storybook/builder-manager@8.1.10(prettier@3.0.0): 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.10(prettier@3.3.2) + '@storybook/core-common': 8.1.10(prettier@3.0.0) '@storybook/manager': 8.1.10 '@storybook/node-logger': 8.1.10 '@types/ejs': 3.1.5 @@ -6700,15 +6849,15 @@ packages: '@storybook/node-logger': 7.6.7 '@storybook/preview': 7.6.7 '@storybook/preview-api': 7.6.7 - '@swc/core': 1.6.3 - '@types/node': 18.19.36 + '@swc/core': 1.6.6 + '@types/node': 18.19.39 '@types/semver': 7.5.8 babel-loader: 9.1.3(@babel/core@7.24.7)(webpack@5.91.0) browser-assert: 1.2.1 case-sensitive-paths-webpack-plugin: 2.4.0 constants-browserify: 1.0.0 css-loader: 6.10.0(webpack@5.91.0) - es-module-lexer: 1.5.3 + es-module-lexer: 1.5.4 express: 4.19.2 fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.4.3)(webpack@5.91.0) fs-extra: 11.2.0 @@ -6718,14 +6867,14 @@ packages: process: 0.11.10 semver: 7.6.2 style-loader: 3.3.4(webpack@5.91.0) - swc-loader: 0.2.6(@swc/core@1.6.3)(webpack@5.91.0) - terser-webpack-plugin: 5.3.10(@swc/core@1.6.3)(esbuild@0.21.3)(webpack@5.91.0) + swc-loader: 0.2.6(@swc/core@1.6.6)(webpack@5.91.0) + terser-webpack-plugin: 5.3.10(@swc/core@1.6.6)(esbuild@0.21.3)(webpack@5.91.0) ts-dedent: 2.2.0 typescript: 5.4.3 url: 0.11.3 util: 0.12.5 util-deprecate: 1.0.2 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.6)(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 @@ -6768,12 +6917,12 @@ packages: '@babel/types': 7.24.7 '@ndelangen/get-tarball': 3.0.9 '@storybook/codemod': 8.1.10 - '@storybook/core-common': 8.1.10(prettier@3.3.2) + '@storybook/core-common': 8.1.10(prettier@3.0.0) '@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/core-server': 8.1.10(prettier@3.0.0)(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/telemetry': 8.1.10(prettier@3.0.0) '@storybook/types': 8.1.10 '@types/semver': 7.5.8 '@yarnpkg/fslib': 2.10.3 @@ -6788,7 +6937,7 @@ packages: fs-extra: 11.2.0 get-npm-tarball-url: 2.1.0 giget: 1.2.3 - globby: 14.0.1 + globby: 14.0.2 jscodeshift: 0.15.2(@babel/preset-env@7.22.6) leven: 3.1.0 ora: 5.4.1 @@ -6835,13 +6984,13 @@ packages: '@babel/core': 7.24.7 '@babel/preset-env': 7.24.7(@babel/core@7.24.7) '@babel/types': 7.24.7 - '@storybook/csf': 0.1.8 + '@storybook/csf': 0.1.9 '@storybook/csf-tools': 8.1.10 '@storybook/node-logger': 8.1.10 '@storybook/types': 8.1.10 '@types/cross-spawn': 6.0.6 cross-spawn: 7.0.3 - globby: 14.0.1 + globby: 14.0.2 jscodeshift: 0.15.2(@babel/preset-env@7.24.7) lodash: 4.17.21 prettier: 3.3.2 @@ -6858,9 +7007,9 @@ packages: react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: '@radix-ui/react-select': 1.2.2(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-toolbar': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-toolbar': 1.1.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) '@storybook/client-logger': 7.6.7 - '@storybook/csf': 0.1.8 + '@storybook/csf': 0.1.9 '@storybook/global': 5.0.0 '@storybook/theming': 7.6.7(react-dom@18.2.0)(react@18.2.0) '@storybook/types': 7.6.7 @@ -6888,7 +7037,7 @@ packages: '@storybook/node-logger': 7.6.7 '@storybook/types': 7.6.7 '@types/find-cache-dir': 3.2.1 - '@types/node': 18.19.36 + '@types/node': 18.19.39 '@types/node-fetch': 2.6.11 '@types/pretty-hrtime': 1.0.3 chalk: 4.1.2 @@ -6912,7 +7061,7 @@ packages: - supports-color dev: true - /@storybook/core-common@8.1.10(prettier@3.3.2): + /@storybook/core-common@8.1.10(prettier@3.0.0): resolution: {integrity: sha512-+0GhgDRQwUlXu1lY77NdLnVBVycCEW0DG7eu7rvLYYkTyNRxbdl2RWsQpjr/j4sxqT6u82l9/b+RWpmsl4MgMQ==} peerDependencies: prettier: ^2 || ^3 @@ -6941,8 +7090,8 @@ packages: node-fetch: 2.7.0 picomatch: 2.3.1 pkg-dir: 5.0.0 - prettier: 3.3.2 - prettier-fallback: /prettier@3.3.2 + prettier: 3.0.0 + prettier-fallback: /prettier@3.0.0 pretty-hrtime: 1.0.3 resolve-from: 5.0.0 semver: 7.6.2 @@ -6970,22 +7119,22 @@ packages: /@storybook/core-events@8.1.10: resolution: {integrity: sha512-aS4zsBVyJds74+rAW0IfTEjULDCQwXecVpQfv11B8/89/07s3bOPssGGoTtCTaN4pHbduywE6MxbmFvTmXOFCA==} dependencies: - '@storybook/csf': 0.1.8 + '@storybook/csf': 0.1.9 ts-dedent: 2.2.0 dev: true - /@storybook/core-server@8.1.10(prettier@3.3.2)(react-dom@18.2.0)(react@18.2.0): + /@storybook/core-server@8.1.10(prettier@3.0.0)(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.7 '@babel/parser': 7.24.7 '@discoveryjs/json-ext': 0.5.7 - '@storybook/builder-manager': 8.1.10(prettier@3.3.2) + '@storybook/builder-manager': 8.1.10(prettier@3.0.0) '@storybook/channels': 8.1.10 - '@storybook/core-common': 8.1.10(prettier@3.3.2) + '@storybook/core-common': 8.1.10(prettier@3.0.0) '@storybook/core-events': 8.1.10 - '@storybook/csf': 0.1.8 + '@storybook/csf': 0.1.9 '@storybook/csf-tools': 8.1.10 '@storybook/docs-mdx': 3.1.0-next.0 '@storybook/global': 5.0.0 @@ -6993,11 +7142,11 @@ packages: '@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/telemetry': 8.1.10(prettier@3.0.0) '@storybook/types': 8.1.10 '@types/detect-port': 1.3.5 '@types/diff': 5.2.1 - '@types/node': 18.19.36 + '@types/node': 18.19.39 '@types/pretty-hrtime': 1.0.3 '@types/semver': 7.5.8 better-opn: 3.0.2 @@ -7008,7 +7157,7 @@ packages: diff: 5.2.0 express: 4.19.2 fs-extra: 11.2.0 - globby: 14.0.1 + globby: 14.0.2 lodash: 4.17.21 open: 8.4.2 pretty-hrtime: 1.0.3 @@ -7038,7 +7187,7 @@ packages: '@storybook/core-common': 7.6.7 '@storybook/node-logger': 7.6.7 '@storybook/types': 7.6.7 - '@types/node': 18.19.36 + '@types/node': 18.19.39 ts-dedent: 2.2.0 transitivePeerDependencies: - encoding @@ -7049,7 +7198,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 @@ -7061,7 +7210,7 @@ packages: '@babel/parser': 7.24.7 '@babel/traverse': 7.24.7 '@babel/types': 7.24.7 - '@storybook/csf': 0.1.8 + '@storybook/csf': 0.1.9 '@storybook/types': 7.6.7 fs-extra: 11.2.0 recast: 0.23.9 @@ -7077,7 +7226,7 @@ packages: '@babel/parser': 7.24.7 '@babel/traverse': 7.24.7 '@babel/types': 7.24.7 - '@storybook/csf': 0.1.8 + '@storybook/csf': 0.1.9 '@storybook/types': 8.1.10 fs-extra: 11.2.0 recast: 0.23.9 @@ -7086,8 +7235,8 @@ packages: - supports-color dev: true - /@storybook/csf@0.1.8: - resolution: {integrity: sha512-Ntab9o7LjBCbFIao5l42itFiaSh/Qu+l16l/r/9qmV9LnYZkO+JQ7tzhdlwpgJfhs+B5xeejpdAtftDRyXNajw==} + /@storybook/csf@0.1.9: + resolution: {integrity: sha512-JlZ6v/iFn+iKohKGpYXnMeNeTiiAMeFoDhYnPLIC8GnyyIWqEI9wJYrOK9i9rxlJ8NZAH/ojGC/u/xVC41qSgQ==} dependencies: type-fest: 2.19.0 dev: true @@ -7132,7 +7281,7 @@ packages: '@storybook/channels': 7.6.7 '@storybook/client-logger': 7.6.7 '@storybook/core-events': 7.6.7 - '@storybook/csf': 0.1.8 + '@storybook/csf': 0.1.9 '@storybook/global': 5.0.0 '@storybook/router': 7.6.7 '@storybook/theming': 7.6.7(react-dom@18.2.0)(react@18.2.0) @@ -7154,7 +7303,7 @@ packages: '@storybook/channels': 8.1.10 '@storybook/client-logger': 8.1.10 '@storybook/core-events': 8.1.10 - '@storybook/csf': 0.1.8 + '@storybook/csf': 0.1.9 '@storybook/global': 5.0.0 '@storybook/icons': 1.2.9(react-dom@18.2.0)(react@18.2.0) '@storybook/router': 8.1.10 @@ -7204,7 +7353,7 @@ packages: '@types/babel__core': 7.20.5 '@types/semver': 7.5.8 pnp-webpack-plugin: 1.7.0(typescript@5.4.3) - react-scripts: 5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(@swc/core@1.6.3)(esbuild@0.21.3)(eslint@8.44.0)(react@18.2.0)(sass@1.71.1)(typescript@5.4.3) + react-scripts: 5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(@swc/core@1.6.6)(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' @@ -7219,7 +7368,7 @@ packages: - webpack-plugin-serve dev: true - /@storybook/preset-react-webpack@7.6.7(@babel/core@7.22.5)(@swc/core@1.6.3)(esbuild@0.21.3)(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.3): + /@storybook/preset-react-webpack@7.6.7(@babel/core@7.22.5)(@swc/core@1.6.6)(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: @@ -7242,7 +7391,7 @@ packages: '@storybook/node-logger': 7.6.7 '@storybook/react': 7.6.7(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.3) '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.4.3)(webpack@5.91.0) - '@types/node': 18.19.36 + '@types/node': 18.19.39 '@types/semver': 7.5.8 babel-plugin-add-react-displayname: 0.0.5 fs-extra: 11.2.0 @@ -7253,7 +7402,7 @@ packages: react-refresh: 0.14.0 semver: 7.6.2 typescript: 5.4.3 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) transitivePeerDependencies: - '@swc/core' - '@types/webpack' @@ -7275,7 +7424,7 @@ packages: '@storybook/channels': 7.6.7 '@storybook/client-logger': 7.6.7 '@storybook/core-events': 7.6.7 - '@storybook/csf': 0.1.8 + '@storybook/csf': 0.1.9 '@storybook/global': 5.0.0 '@storybook/types': 7.6.7 '@types/qs': 6.9.15 @@ -7294,7 +7443,7 @@ packages: '@storybook/channels': 8.1.10 '@storybook/client-logger': 8.1.10 '@storybook/core-events': 8.1.10 - '@storybook/csf': 0.1.8 + '@storybook/csf': 0.1.9 '@storybook/global': 5.0.0 '@storybook/types': 8.1.10 '@types/qs': 6.9.15 @@ -7325,7 +7474,7 @@ packages: react-docgen-typescript: 2.2.2(typescript@5.4.3) tslib: 2.6.3 typescript: 5.4.3 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) transitivePeerDependencies: - supports-color dev: true @@ -7340,7 +7489,7 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true - /@storybook/react-webpack5@7.6.7(@babel/core@7.22.5)(@swc/core@1.6.3)(esbuild@0.21.3)(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.3): + /@storybook/react-webpack5@7.6.7(@babel/core@7.22.5)(@swc/core@1.6.6)(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: @@ -7356,9 +7505,9 @@ packages: dependencies: '@babel/core': 7.22.5 '@storybook/builder-webpack5': 7.6.7(esbuild@0.21.3)(typescript@5.4.3) - '@storybook/preset-react-webpack': 7.6.7(@babel/core@7.22.5)(@swc/core@1.6.3)(esbuild@0.21.3)(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.3) + '@storybook/preset-react-webpack': 7.6.7(@babel/core@7.22.5)(@swc/core@1.6.6)(esbuild@0.21.3)(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.3) '@storybook/react': 7.6.7(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.3) - '@types/node': 18.19.36 + '@types/node': 18.19.39 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) typescript: 5.4.3 @@ -7399,7 +7548,7 @@ packages: '@storybook/types': 7.6.7 '@types/escodegen': 0.0.6 '@types/estree': 0.0.51 - '@types/node': 18.19.36 + '@types/node': 18.19.39 acorn: 7.4.1 acorn-jsx: 5.3.2(acorn@7.4.1) acorn-walk: 7.2.0 @@ -7435,11 +7584,11 @@ packages: qs: 6.12.1 dev: true - /@storybook/telemetry@8.1.10(prettier@3.3.2): + /@storybook/telemetry@8.1.10(prettier@3.0.0): resolution: {integrity: sha512-pwiMWrq85D0AnaAgYNfB2w2BDgqnetQ+tXwsUAw4fUEFwA4oPU6r0uqekRbNNE6wmSSYjiiFP3JgknBFqjd2hg==} dependencies: '@storybook/client-logger': 8.1.10 - '@storybook/core-common': 8.1.10(prettier@3.3.2) + '@storybook/core-common': 8.1.10(prettier@3.0.0) '@storybook/csf-tools': 8.1.10 chalk: 4.1.2 detect-package-manager: 2.0.1 @@ -7627,88 +7776,88 @@ packages: transitivePeerDependencies: - supports-color - /@swc/core-darwin-arm64@1.6.3: - resolution: {integrity: sha512-3r7cJf1BcE30iyF1rnOSKrEzIR+cqnyYSZvivrm62TZdXVsIjfXe1xulsKGxZgNeLY5erIu7ukvMvBvPhnQvqA==} + /@swc/core-darwin-arm64@1.6.6: + resolution: {integrity: sha512-5DA8NUGECcbcK1YLKJwNDKqdtTYDVnkfDU1WvQSXq/rU+bjYCLtn5gCe8/yzL7ISXA6rwqPU1RDejhbNt4ARLQ==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] requiresBuild: true optional: true - /@swc/core-darwin-x64@1.6.3: - resolution: {integrity: sha512-8GLZ23IgVpF5xh2SbS5ZW/12/EEBuRU1hFOLB5rKERJU0y1RJ6YhDMf/FuOWhfHQcFM7TeedBwHIzaF+tdKKlw==} + /@swc/core-darwin-x64@1.6.6: + resolution: {integrity: sha512-2nbh/RHpweNRsJiYDFk1KcX7UtaKgzzTNUjwtvK5cp0wWrpbXmPvdlWOx3yzwoiSASDFx78242JHHXCIOlEdsw==} engines: {node: '>=10'} cpu: [x64] os: [darwin] requiresBuild: true optional: true - /@swc/core-linux-arm-gnueabihf@1.6.3: - resolution: {integrity: sha512-VQ/bduX7WhLOlGbJLMG7UH0LBehjjx43R4yuk55rjjJLqpvX5fQzMsWhQdIZ5vsc+4ORzdgtEAlpumTv6bsD1A==} + /@swc/core-linux-arm-gnueabihf@1.6.6: + resolution: {integrity: sha512-YgytuyUfR7b0z0SRHKV+ylr83HmgnROgeT7xryEkth6JGpAEHooCspQ4RrWTU8+WKJ7aXiZlGXPgybQ4TiS+TA==} engines: {node: '>=10'} cpu: [arm] os: [linux] requiresBuild: true optional: true - /@swc/core-linux-arm64-gnu@1.6.3: - resolution: {integrity: sha512-jHIQ/PCwtdDBIF/BiC5DochswuCAIW/T5skJ+eDMbta7+QtEnZCXTZWpT5ORoEY/gtsE2fjpOA4TS6fBBvXqUw==} + /@swc/core-linux-arm64-gnu@1.6.6: + resolution: {integrity: sha512-yGwx9fddzEE0iURqRVwKBQ4IwRHE6hNhl15WliHpi/PcYhzmYkUIpcbRXjr0dssubXAVPVnx6+jZVDSbutvnfg==} engines: {node: '>=10'} cpu: [arm64] os: [linux] requiresBuild: true optional: true - /@swc/core-linux-arm64-musl@1.6.3: - resolution: {integrity: sha512-gA6velEUD27Dwu0BlR9hCcFzkWq2YL2pDAU5qbgeuGhaMiUCBssfqTQB+2ctEnV+AZx+hSMJOHvtA+uFZjfRrw==} + /@swc/core-linux-arm64-musl@1.6.6: + resolution: {integrity: sha512-a6fMbqzSAsS5KCxFJyg1mD5kwN3ZFO8qQLyJ75R/htZP/eCt05jrhmOI7h2n+1HjiG332jLnZ9S8lkVE5O8Nqw==} engines: {node: '>=10'} cpu: [arm64] os: [linux] requiresBuild: true optional: true - /@swc/core-linux-x64-gnu@1.6.3: - resolution: {integrity: sha512-fy4qoBDr5I8r+ZNCZxs/oZcmu4j/8mtSud6Ka102DaSxEjNg0vfIdo9ITsVIPsofhUTmDKjQsPB2O7YUlJAioQ==} + /@swc/core-linux-x64-gnu@1.6.6: + resolution: {integrity: sha512-hRGsUKNzzZle28YF0dYIpN0bt9PceR9LaVBq7x8+l9TAaDLFbgksSxcnU/ubTtsy+WsYSYGn+A83w3xWC0O8CQ==} engines: {node: '>=10'} cpu: [x64] os: [linux] requiresBuild: true optional: true - /@swc/core-linux-x64-musl@1.6.3: - resolution: {integrity: sha512-c/twcMbq/Gpq47G+b3kWgoaCujpXO11aRgJx6am+CprvP4uNeBHEpQkxD+DQmdWFHisZd0i9GB8NG3e7L9Rz9Q==} + /@swc/core-linux-x64-musl@1.6.6: + resolution: {integrity: sha512-NokIUtFxJDVv3LzGeEtYMTV3j2dnGKLac59luTeq36DQLZdJQawQIdTbzzWl2jE7lxxTZme+dhsVOH9LxE3ceg==} engines: {node: '>=10'} cpu: [x64] os: [linux] requiresBuild: true optional: true - /@swc/core-win32-arm64-msvc@1.6.3: - resolution: {integrity: sha512-y6RxMtX45acReQmzkxcEfJscfBXce6QjuNgWQHHs9exA592BZzmolDUwgmAyjyvopz1lWX+KdymdZFKvuDSx4w==} + /@swc/core-win32-arm64-msvc@1.6.6: + resolution: {integrity: sha512-lzYdI4qb4k1dFG26yv+9Jaq/bUMAhgs/2JsrLncGjLof86+uj74wKYCQnbzKAsq2hDtS5DqnHnl+//J+miZfGA==} engines: {node: '>=10'} cpu: [arm64] os: [win32] requiresBuild: true optional: true - /@swc/core-win32-ia32-msvc@1.6.3: - resolution: {integrity: sha512-41h7z3xgukl1HDDwhquaeOPSP1OWeHl+mWKnJVmmwd3ui/oowUDCO856qa6JagBgPSnAGfyXwv6vthuXwyCcWA==} + /@swc/core-win32-ia32-msvc@1.6.6: + resolution: {integrity: sha512-bvl7FMaXIJQ76WZU0ER4+RyfKIMGb6S2MgRkBhJOOp0i7VFx4WLOnrmMzaeoPJaJSkityVKAftfNh7NBzTIydQ==} engines: {node: '>=10'} cpu: [ia32] os: [win32] requiresBuild: true optional: true - /@swc/core-win32-x64-msvc@1.6.3: - resolution: {integrity: sha512-//bnwo9b8Vp1ED06eXCHyGZ5xIpdkQgg2fuFDdtd1FITl7r5bdQh2ryRzPiKiGwgXZwZQitUshI4JeEX9IuW+Q==} + /@swc/core-win32-x64-msvc@1.6.6: + resolution: {integrity: sha512-WAP0JoCTfgeYKgOeYJoJV4ZS0sQUmU3OwvXa2dYYtMLF7zsNqOiW4niU7QlThBHgUv/qNZm2p6ITEgh3w1cltw==} engines: {node: '>=10'} cpu: [x64] os: [win32] requiresBuild: true optional: true - /@swc/core@1.6.3: - resolution: {integrity: sha512-mZpei+LqE+AL+nwgERMQey9EJA9/yhHTN6nwbobH5GnSij/lhfTdGfAb1iumOrroqEcXbHUaK//7wOw7DjBGdA==} + /@swc/core@1.6.6: + resolution: {integrity: sha512-sHfmIUPUXNrQTwFMVCY5V5Ena2GTOeaWjS2GFUpjLhAgVfP90OP67DWow7+cYrfFtqBdILHuWnjkTcd0+uPKlg==} engines: {node: '>=10'} requiresBuild: true peerDependencies: @@ -7718,29 +7867,29 @@ packages: optional: true dependencies: '@swc/counter': 0.1.3 - '@swc/types': 0.1.8 + '@swc/types': 0.1.9 optionalDependencies: - '@swc/core-darwin-arm64': 1.6.3 - '@swc/core-darwin-x64': 1.6.3 - '@swc/core-linux-arm-gnueabihf': 1.6.3 - '@swc/core-linux-arm64-gnu': 1.6.3 - '@swc/core-linux-arm64-musl': 1.6.3 - '@swc/core-linux-x64-gnu': 1.6.3 - '@swc/core-linux-x64-musl': 1.6.3 - '@swc/core-win32-arm64-msvc': 1.6.3 - '@swc/core-win32-ia32-msvc': 1.6.3 - '@swc/core-win32-x64-msvc': 1.6.3 + '@swc/core-darwin-arm64': 1.6.6 + '@swc/core-darwin-x64': 1.6.6 + '@swc/core-linux-arm-gnueabihf': 1.6.6 + '@swc/core-linux-arm64-gnu': 1.6.6 + '@swc/core-linux-arm64-musl': 1.6.6 + '@swc/core-linux-x64-gnu': 1.6.6 + '@swc/core-linux-x64-musl': 1.6.6 + '@swc/core-win32-arm64-msvc': 1.6.6 + '@swc/core-win32-ia32-msvc': 1.6.6 + '@swc/core-win32-x64-msvc': 1.6.6 /@swc/counter@0.1.3: resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - /@swc/types@0.1.8: - resolution: {integrity: sha512-RNFA3+7OJFNYY78x0FYwi1Ow+iF1eF5WvmfY1nXPOEH4R2p/D4Cr1vzje7dNAI2aLFqpv8Wyz4oKSWqIZArpQA==} + /@swc/types@0.1.9: + resolution: {integrity: sha512-qKnCno++jzcJ4lM4NTfYifm1EFSCeIfKiAHAfkENZAV5Kl9PjJIyd2yeeVv6c/2CckuLyv2NmRC5pv6pm2WQBg==} dependencies: '@swc/counter': 0.1.3 - /@testing-library/dom@10.1.0: - resolution: {integrity: sha512-wdsYKy5zupPyLCW2Je5DLHSxSfbIp6h80WoHOQc+RPtmPGA52O9x5MJEkv92Sjonpq+poOAtUKhh1kBGAXBrNA==} + /@testing-library/dom@10.2.0: + resolution: {integrity: sha512-CytIvb6tVOADRngTHGWNxH8LPgO/3hi/BdCEHOf7Qd2GvZVClhVP0Wo/QHzWhpki49Bk0b4VT6xpt3fx8HTSIw==} engines: {node: '>=18'} dependencies: '@babel/code-frame': 7.24.7 @@ -7753,6 +7902,20 @@ packages: pretty-format: 27.5.1 dev: true + /@testing-library/dom@8.20.1: + resolution: {integrity: sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==} + engines: {node: '>=12'} + dependencies: + '@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 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + pretty-format: 27.5.1 + dev: true + /@testing-library/dom@9.3.4: resolution: {integrity: sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==} engines: {node: '>=14'} @@ -7790,19 +7953,19 @@ packages: react-dom: ^18.0.0 dependencies: '@babel/runtime': 7.24.7 - '@testing-library/dom': 9.3.4 + '@testing-library/dom': 8.20.1 '@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.2.0): 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.2.0 dev: true /@testing-library/user-event@14.4.3(@testing-library/dom@9.3.4): @@ -8013,12 +8176,12 @@ packages: prosemirror-keymap: 1.2.2 prosemirror-markdown: 1.13.0 prosemirror-menu: 1.2.4 - prosemirror-model: 1.21.1 + prosemirror-model: 1.21.3 prosemirror-schema-basic: 1.2.2 prosemirror-schema-list: 1.4.0 prosemirror-state: 1.4.3 prosemirror-tables: 1.3.7 - prosemirror-trailing-node: 2.0.8(prosemirror-model@1.21.1)(prosemirror-state@1.4.3)(prosemirror-view@1.33.8) + prosemirror-trailing-node: 2.0.8(prosemirror-model@1.21.3)(prosemirror-state@1.4.3)(prosemirror-view@1.33.8) prosemirror-transform: 1.9.0 prosemirror-view: 1.33.8 dev: false @@ -8191,7 +8354,7 @@ packages: /@types/connect-history-api-fallback@1.5.4: resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} dependencies: - '@types/express-serve-static-core': 4.19.3 + '@types/express-serve-static-core': 4.19.5 '@types/node': 17.0.45 /@types/connect@3.4.38: @@ -8274,8 +8437,8 @@ packages: /@types/estree@1.0.5: resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - /@types/express-serve-static-core@4.19.3: - resolution: {integrity: sha512-KOzM7MhcBFlmnlr/fzISFF5vGWVSvN6fTd4T+ExOt08bA/dA5kpSzY52nMsI1KDFmUREpJelPYyuslLRSjjgCg==} + /@types/express-serve-static-core@4.19.5: + resolution: {integrity: sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==} dependencies: '@types/node': 17.0.45 '@types/qs': 6.9.15 @@ -8286,7 +8449,7 @@ packages: resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} dependencies: '@types/body-parser': 1.19.5 - '@types/express-serve-static-core': 4.19.3 + '@types/express-serve-static-core': 4.19.5 '@types/qs': 6.9.15 '@types/serve-static': 1.15.7 @@ -8371,8 +8534,9 @@ packages: /@types/lodash@4.14.202: resolution: {integrity: sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==} - /@types/lodash@4.17.5: - resolution: {integrity: sha512-MBIOHVZqVqgfro1euRDWX7OO0fBVUUMrN6Pwm8LQsz8cWhEpihlvR70ENj3f40j58TNxZaWv2ndSkInykNBBJw==} + /@types/lodash@4.17.6: + resolution: {integrity: sha512-OpXEVoCKSS3lQqjx9GGGOapBeuW5eUboYHRlHP9urXPX25IKZ6AnP5ZRxtVf63iieUbsHxLn8NQ5Nlftc6yzAA==} + dev: false /@types/mdast@3.0.15: resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} @@ -8406,14 +8570,14 @@ packages: /@types/node@17.0.45: resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} - /@types/node@18.19.36: - resolution: {integrity: sha512-tX1BNmYSWEvViftB26VLNxT6mEr37M7+ldUtq7rlKnv4/2fKYsJIOmqJAjT6h1DNuwQjIKgw3VJ/Dtw3yiTIQw==} + /@types/node@18.19.39: + resolution: {integrity: sha512-nPwTRDKUctxw3di5b4TfT3I0sWDiWoPQCZjXhvdkINntwr8lcoVCKsTgnXeRubKIlfnV+eN/HYk6Jb40tbcEAQ==} dependencies: undici-types: 5.26.5 dev: true - /@types/node@20.14.5: - resolution: {integrity: sha512-aoRR+fJkZT2l0aGOJhuA8frnCSoNX6W7U2mpNq63+BxBIj5BQFt8rHy627kijCmm63ijdSdwvGgpUsU6MBsZZA==} + /@types/node@20.14.9: + resolution: {integrity: sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==} dependencies: undici-types: 5.26.5 dev: false @@ -8623,7 +8787,7 @@ packages: typescript: optional: true dependencies: - '@eslint-community/regexpp': 4.10.1 + '@eslint-community/regexpp': 4.11.0 '@typescript-eslint/parser': 5.58.0(eslint@8.44.0)(typescript@5.4.3) '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/type-utils': 5.62.0(eslint@8.44.0)(typescript@5.4.3) @@ -9416,7 +9580,7 @@ packages: postcss: ^8.1.0 dependencies: browserslist: 4.23.1 - caniuse-lite: 1.0.30001636 + caniuse-lite: 1.0.30001639 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.1 @@ -9453,10 +9617,11 @@ packages: - debug dev: false - /axobject-query@3.2.1: - resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} + /axobject-query@3.2.2: + resolution: {integrity: sha512-QtQGAQJfHXiTrtRH8Q1gkarFLs56fDmfiMCptvRbo/AEQIImrW6u7EcUAOfkHHNE9dqZKH3227iRKRSp0KtfTw==} + engines: {node: '>= 0.4'} dependencies: - dequal: 2.0.3 + deep-equal-json: 1.0.0 /babel-core@7.0.0-bridge.0(@babel/core@7.24.7): resolution: {integrity: sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==} @@ -9515,7 +9680,7 @@ packages: loader-utils: 2.0.4 make-dir: 3.1.0 schema-utils: 2.7.1 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) /babel-loader@9.1.3(@babel/core@7.24.7)(webpack@5.91.0): resolution: {integrity: sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==} @@ -9527,7 +9692,7 @@ packages: '@babel/core': 7.24.7 find-cache-dir: 4.0.0 schema-utils: 4.2.0 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) dev: true /babel-plugin-add-react-displayname@0.0.5: @@ -9931,8 +10096,8 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001636 - electron-to-chromium: 1.4.806 + caniuse-lite: 1.0.30001639 + electron-to-chromium: 1.4.815 node-releases: 2.0.14 update-browserslist-db: 1.0.16(browserslist@4.23.1) @@ -10035,12 +10200,12 @@ packages: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} dependencies: browserslist: 4.23.1 - caniuse-lite: 1.0.30001636 + caniuse-lite: 1.0.30001639 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 - /caniuse-lite@1.0.30001636: - resolution: {integrity: sha512-bMg2vmr8XBsbL6Lr0UHXy/21m84FTxDLWn2FSqMd5PrlbMxwJlQnC2YWYxVgp66PZE+BBNF2jYQUBKCo1FDeZg==} + /caniuse-lite@1.0.30001639: + resolution: {integrity: sha512-eFHflNTBIlFwP2AIKaYuBQN/apnUoKNhBdza8ZnW/h2di4LCZ4xFqYlxUxo+LQ76KFI1PGcC1QDxMbxTZpSCAg==} /canvg@3.0.10: resolution: {integrity: sha512-qwR2FRNO9NlzTeKIPIKpnTY6fqwuYSequ8Ru8c0YkYU7U0oW+hLUvWadLvAu1Rl72OMNiFhoLu4f8eUjQ7l/+Q==} @@ -10471,7 +10636,11 @@ packages: dev: false /concat-map@0.0.1: - resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} + 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==} @@ -10566,7 +10735,7 @@ packages: /core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - /cosmiconfig-typescript-loader@1.0.9(@swc/core@1.6.3)(@types/node@17.0.45)(cosmiconfig@7.1.0)(typescript@5.4.3): + /cosmiconfig-typescript-loader@1.0.9(@swc/core@1.6.6)(@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: @@ -10576,7 +10745,7 @@ packages: dependencies: '@types/node': 17.0.45 cosmiconfig: 7.1.0 - ts-node: 10.9.2(@swc/core@1.6.3)(@types/node@17.0.45)(typescript@5.4.3) + ts-node: 10.9.2(@swc/core@1.6.6)(@types/node@17.0.45)(typescript@5.4.3) typescript: 5.4.3 transitivePeerDependencies: - '@swc/core' @@ -10609,10 +10778,10 @@ packages: '@craco/craco': ^7.0.0 react-scripts: ^5.0.0 dependencies: - '@craco/craco': 7.1.0(@swc/core@1.6.3)(@types/node@17.0.45)(postcss@8.4.32)(react-scripts@5.0.1)(typescript@5.4.3) + '@craco/craco': 7.1.0(@swc/core@1.6.6)(@types/node@17.0.45)(postcss@8.4.32)(react-scripts@5.0.1)(typescript@5.4.3) esbuild-jest: 0.5.0(esbuild@0.21.3) esbuild-loader: 4.2.0(webpack@5.91.0) - react-scripts: 5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(@swc/core@1.6.3)(esbuild@0.21.3)(eslint@8.44.0)(react@18.2.0)(sass@1.71.1)(typescript@5.4.3) + react-scripts: 5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(@swc/core@1.6.6)(esbuild@0.21.3)(eslint@8.44.0)(react@18.2.0)(sass@1.71.1)(typescript@5.4.3) transitivePeerDependencies: - esbuild - supports-color @@ -10726,15 +10895,15 @@ packages: webpack: optional: true dependencies: - icss-utils: 5.1.0(postcss@8.4.38) - postcss: 8.4.38 - postcss-modules-extract-imports: 3.1.0(postcss@8.4.38) - postcss-modules-local-by-default: 4.0.5(postcss@8.4.38) - postcss-modules-scope: 3.2.0(postcss@8.4.38) - postcss-modules-values: 4.0.0(postcss@8.4.38) + icss-utils: 5.1.0(postcss@8.4.39) + postcss: 8.4.39 + postcss-modules-extract-imports: 3.1.0(postcss@8.4.39) + postcss-modules-local-by-default: 4.0.5(postcss@8.4.39) + postcss-modules-scope: 3.2.0(postcss@8.4.39) + postcss-modules-values: 4.0.0(postcss@8.4.39) postcss-value-parser: 4.2.0 semver: 7.6.2 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.6)(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==} @@ -10762,7 +10931,7 @@ packages: schema-utils: 4.2.0 serialize-javascript: 6.0.2 source-map: 0.6.1 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) /css-prefers-color-scheme@6.0.3(postcss@8.4.32): resolution: {integrity: sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==} @@ -11042,6 +11211,15 @@ packages: /dedent@0.7.0: resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} + /deep-equal-json@1.0.0: + resolution: {integrity: sha512-x11iOxzQuLWG1faqBf8PYn3xSxkK41Wg38lUbch9f+nVmBeuI53PPXeRIDdHsW2/dP2GGKL9p8cLCahHToE7CA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + isarray: 2.0.5 + object-is: 1.1.6 + object-keys: 1.1.1 + /deep-equal@2.2.3: resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==} engines: {node: '>= 0.4'} @@ -11268,7 +11446,7 @@ packages: resolution: {integrity: sha512-4SbcbedPXTciySXiSnNNLuJXpvxFe5nqivbiEHXyL8P/w0wx2uW7YXNjnYgjW0e2e6vy+L/tMISU/oAiXCl57Q==} engines: {node: '>=10'} dependencies: - '@types/node': 20.14.5 + '@types/node': 20.14.9 jszip: 3.10.1 nanoid: 5.0.7 xml: 1.0.1 @@ -11440,8 +11618,8 @@ packages: dependencies: jake: 10.9.1 - /electron-to-chromium@1.4.806: - resolution: {integrity: sha512-nkoEX2QIB8kwCOtvtgwhXWy2IHVcOLQZu9Qo36uaGB835mdX/h8uLRlosL6QIhLVUnAiicXRW00PwaPZC74Nrg==} + /electron-to-chromium@1.4.815: + resolution: {integrity: sha512-OvpTT2ItpOXJL7IGcYakRjHCt8L5GrrN/wHCQsRB4PQa1X9fe+X9oen245mIId7s14xvArCGSTIq644yPUKKLg==} /emittery@0.10.2: resolution: {integrity: sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==} @@ -11549,7 +11727,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 @@ -11611,8 +11789,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==} @@ -11698,7 +11876,7 @@ packages: esbuild: 0.21.3 get-tsconfig: 4.7.5 loader-utils: 2.0.4 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) webpack-sources: 1.4.3 dev: true @@ -11912,7 +12090,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 @@ -11980,7 +12158,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 @@ -12026,7 +12204,7 @@ packages: array.prototype.flatmap: 1.3.2 ast-types-flow: 0.0.7 axe-core: 4.9.1 - axobject-query: 3.2.1 + axobject-query: 3.2.2 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 eslint: 8.44.0 @@ -12127,7 +12305,7 @@ packages: micromatch: 4.0.7 normalize-path: 3.0.0 schema-utils: 4.2.0 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) /eslint@8.44.0: resolution: {integrity: sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A==} @@ -12135,7 +12313,7 @@ packages: hasBin: true dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.44.0) - '@eslint-community/regexpp': 4.10.1 + '@eslint-community/regexpp': 4.11.0 '@eslint/eslintrc': 2.1.4 '@eslint/js': 8.44.0 '@humanwhocodes/config-array': 0.11.14 @@ -12182,7 +12360,7 @@ packages: hasBin: true dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@eslint-community/regexpp': 4.10.1 + '@eslint-community/regexpp': 4.11.0 '@eslint/eslintrc': 2.1.4 '@eslint/js': 8.57.0 '@humanwhocodes/config-array': 0.11.14 @@ -12585,7 +12763,7 @@ packages: dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) /file-saver@2.0.5: resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} @@ -12706,8 +12884,8 @@ packages: /flatted@3.3.1: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} - /flow-parser@0.238.0: - resolution: {integrity: sha512-VE7XSv1epljsIN2YeBnxCmGJihpNIAnLLu/pPOdA+Gkso7qDltJwUi6vfHjgxdBbjSdAuPGnhuOHJUQG+yYwIg==} + /flow-parser@0.238.3: + resolution: {integrity: sha512-hNUhucq8V6KWSX1skXUS3vnDmrRNuKWzDvEVK5b+n97uMF32zj2y8pmcLDQEqlY5u926B0GYGWT/3XhwDJfLOQ==} engines: {node: '>=0.4.0'} dev: true @@ -12778,7 +12956,7 @@ packages: semver: 7.6.2 tapable: 1.1.3 typescript: 5.4.3 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.6)(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==} @@ -12800,7 +12978,7 @@ packages: semver: 7.6.2 tapable: 2.2.1 typescript: 5.4.3 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) dev: true /form-data@2.5.1: @@ -13035,7 +13213,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 @@ -13067,7 +13245,7 @@ packages: dependencies: foreground-child: 3.2.1 jackspeak: 3.4.0 - minimatch: 9.0.4 + minimatch: 9.0.5 minipass: 7.1.2 package-json-from-dist: 1.0.0 path-scurry: 1.11.1 @@ -13132,8 +13310,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 @@ -13403,7 +13581,7 @@ packages: lodash: 4.17.21 pretty-error: 4.0.0 tapable: 2.2.1 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) /html2canvas@1.4.1: resolution: {integrity: sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==} @@ -13550,13 +13728,13 @@ packages: dependencies: safer-buffer: 2.1.2 - /icss-utils@5.1.0(postcss@8.4.38): + /icss-utils@5.1.0(postcss@8.4.39): resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.38 + postcss: 8.4.39 /idb@7.1.1: resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} @@ -13750,8 +13928,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 @@ -14845,7 +15024,7 @@ packages: '@babel/register': 7.24.6(@babel/core@7.24.7) babel-core: 7.0.0-bridge.0(@babel/core@7.24.7) chalk: 4.1.2 - flow-parser: 0.238.0 + flow-parser: 0.238.3 graceful-fs: 4.2.11 micromatch: 4.0.7 neo-async: 2.6.2 @@ -14879,7 +15058,7 @@ packages: '@babel/register': 7.24.6(@babel/core@7.24.7) babel-core: 7.0.0-bridge.0(@babel/core@7.24.7) chalk: 4.1.2 - flow-parser: 0.238.0 + flow-parser: 0.238.3 graceful-fs: 4.2.11 micromatch: 4.0.7 neo-async: 2.6.2 @@ -14947,14 +15126,14 @@ packages: /json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - /json-schema-to-typescript@14.0.5: - resolution: {integrity: sha512-JmHsbgY0KKo8Pw0HRXpGzAlZYxlu+M5kFhSzhNkUSrVJ4sCXPdAGIdSpzva5ev2/Kybz10S6AfnNdF4o3Pzt3A==} + /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.4 '@types/json-schema': 7.0.15 - '@types/lodash': 4.17.5 + '@types/lodash': 4.17.6 cli-color: 2.0.4 glob: 10.4.2 is-glob: 4.0.3 @@ -14962,7 +15141,6 @@ packages: lodash: 4.17.21 minimist: 1.2.8 mkdirp: 3.0.1 - mz: 2.7.0 node-fetch: 3.3.2 prettier: 3.3.2 dev: false @@ -15228,7 +15406,7 @@ packages: listr2: 5.0.8 micromatch: 4.0.7 normalize-path: 3.0.0 - object-inspect: 1.13.1 + object-inspect: 1.13.2 pidtree: 0.6.0 string-argv: 0.3.2 yaml: 2.4.5 @@ -15378,8 +15556,8 @@ packages: dependencies: tslib: 2.6.3 - /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: @@ -15873,7 +16051,7 @@ packages: dependencies: schema-utils: 4.2.0 tapable: 2.2.1 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) /minimalistic-assert@1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} @@ -15896,8 +16074,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 @@ -15958,6 +16136,15 @@ packages: hasBin: true dev: false + /mlly@1.7.1: + resolution: {integrity: sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==} + dependencies: + acorn: 8.12.0 + pathe: 1.1.2 + pkg-types: 1.1.2 + ufo: 1.5.3 + dev: true + /mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} @@ -16211,8 +16398,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: @@ -16220,6 +16407,7 @@ packages: consola: 3.2.3 execa: 8.0.1 pathe: 1.1.2 + pkg-types: 1.1.2 ufo: 1.5.3 dev: true @@ -16240,8 +16428,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==} @@ -16249,7 +16438,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==} @@ -16350,8 +16538,8 @@ packages: ol: 9.2.4 dev: false - /ol-mapbox-style@12.3.3(ol@9.2.4): - resolution: {integrity: sha512-Wyb1vSxTl/c09S9yC/Dcr7XWQf5u19/9BriqOiDJRgbjLTAbrWXW8l+5N9E/I0fV2gcTQDE+7iFtvVOvXcTmMA==} + /ol-mapbox-style@12.3.4(ol@9.2.4): + resolution: {integrity: sha512-TxGJZw4hmvc6n5dHSyAE8ZpgALJ6hVG5Q9yl0j2Q1KmLS9iq4wMpb383TAitWiG86SvJV4oDkWMGkyyMLfVyew==} peerDependencies: ol: '*' dependencies: @@ -16482,7 +16670,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: @@ -16641,7 +16829,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: @@ -16732,6 +16920,14 @@ packages: find-up: 6.3.0 dev: true + /pkg-types@1.1.2: + resolution: {integrity: sha512-VEGf1he2DR5yowYRl0XJhWJq5ktm9gYIsH+y8sNJpHlxch7JPDaufgrsl4vYjd9hMUY8QVjoNncKbow9I7exyA==} + 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'} @@ -17065,7 +17261,7 @@ packages: klona: 2.0.6 postcss: 8.4.32 semver: 7.6.2 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) /postcss-logical@5.0.4(postcss@8.4.32): resolution: {integrity: sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==} @@ -17145,42 +17341,42 @@ packages: postcss: 8.4.32 postcss-selector-parser: 6.1.0 - /postcss-modules-extract-imports@3.1.0(postcss@8.4.38): + /postcss-modules-extract-imports@3.1.0(postcss@8.4.39): resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.38 + postcss: 8.4.39 - /postcss-modules-local-by-default@4.0.5(postcss@8.4.38): + /postcss-modules-local-by-default@4.0.5(postcss@8.4.39): resolution: {integrity: sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - icss-utils: 5.1.0(postcss@8.4.38) - postcss: 8.4.38 + icss-utils: 5.1.0(postcss@8.4.39) + postcss: 8.4.39 postcss-selector-parser: 6.1.0 postcss-value-parser: 4.2.0 - /postcss-modules-scope@3.2.0(postcss@8.4.38): + /postcss-modules-scope@3.2.0(postcss@8.4.39): resolution: {integrity: sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.38 + postcss: 8.4.39 postcss-selector-parser: 6.1.0 - /postcss-modules-values@4.0.0(postcss@8.4.38): + /postcss-modules-values@4.0.0(postcss@8.4.39): resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - icss-utils: 5.1.0(postcss@8.4.38) - postcss: 8.4.38 + icss-utils: 5.1.0(postcss@8.4.39) + postcss: 8.4.39 /postcss-nested@6.0.1(postcss@8.4.32): resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} @@ -17477,8 +17673,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 @@ -17617,7 +17813,7 @@ packages: /prosemirror-commands@1.5.2: resolution: {integrity: sha512-hgLcPaakxH8tu6YvVAaILV2tXYsW3rAdDR8WNkeKGcgeMVQg3/TMhPdVoh7iAmfgVjZGtcOSjKiQaoeKjzd2mQ==} dependencies: - prosemirror-model: 1.21.1 + prosemirror-model: 1.21.3 prosemirror-state: 1.4.3 prosemirror-transform: 1.9.0 dev: false @@ -17634,7 +17830,7 @@ packages: resolution: {integrity: sha512-wtjswVBd2vaQRrnYZaBCbyDqr232Ed4p2QPtRIUK5FuqHYKGWkEwl08oQM4Tw7DOR0FsasARV5uJFvMZWxdNxQ==} dependencies: prosemirror-keymap: 1.2.2 - prosemirror-model: 1.21.1 + prosemirror-model: 1.21.3 prosemirror-state: 1.4.3 prosemirror-view: 1.33.8 dev: false @@ -17666,7 +17862,7 @@ packages: resolution: {integrity: sha512-UziddX3ZYSYibgx8042hfGKmukq5Aljp2qoBiJRejD/8MH70siQNz5RB1TrdTPheqLMy4aCe4GYNF10/3lQS5g==} dependencies: markdown-it: 14.1.0 - prosemirror-model: 1.21.1 + prosemirror-model: 1.21.3 dev: false /prosemirror-menu@1.2.4: @@ -17678,8 +17874,8 @@ packages: prosemirror-state: 1.4.3 dev: false - /prosemirror-model@1.21.1: - resolution: {integrity: sha512-IVBAuMqOfltTr7yPypwpfdGT+6rGAteVOw2FO6GEvCGGa1ZwxLseqC1Eax/EChDvG/xGquB2d/hLdgh3THpsYg==} + /prosemirror-model@1.21.3: + resolution: {integrity: sha512-nt2Xs/RNGepD9hrrkzXvtCm1mpGJoQfFSPktGa0BF/aav6XsnmVGZ9sTXNWRLupAz5SCLa3EyKlFeK7zJWROKg==} dependencies: orderedmap: 2.1.1 dev: false @@ -17687,13 +17883,13 @@ packages: /prosemirror-schema-basic@1.2.2: resolution: {integrity: sha512-/dT4JFEGyO7QnNTe9UaKUhjDXbTNkiWTq/N4VpKaF79bBjSExVV2NXmJpcM7z/gD7mbqNjxbmWW5nf1iNSSGnw==} dependencies: - prosemirror-model: 1.21.1 + prosemirror-model: 1.21.3 dev: false /prosemirror-schema-list@1.4.0: resolution: {integrity: sha512-nZOIq/AkBSzCENxUyLm5ltWE53e2PLk65ghMN8qLQptOmDVixZlPqtMeQdiNw0odL9vNpalEjl3upgRkuJ/Jyw==} dependencies: - prosemirror-model: 1.21.1 + prosemirror-model: 1.21.3 prosemirror-state: 1.4.3 prosemirror-transform: 1.9.0 dev: false @@ -17701,7 +17897,7 @@ packages: /prosemirror-state@1.4.3: resolution: {integrity: sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q==} dependencies: - prosemirror-model: 1.21.1 + prosemirror-model: 1.21.3 prosemirror-transform: 1.9.0 prosemirror-view: 1.33.8 dev: false @@ -17710,13 +17906,13 @@ packages: resolution: {integrity: sha512-oEwX1wrziuxMtwFvdDWSFHVUWrFJWt929kVVfHvtTi8yvw+5ppxjXZkMG/fuTdFo+3DXyIPSKfid+Be1npKXDA==} dependencies: prosemirror-keymap: 1.2.2 - prosemirror-model: 1.21.1 + prosemirror-model: 1.21.3 prosemirror-state: 1.4.3 prosemirror-transform: 1.9.0 prosemirror-view: 1.33.8 dev: false - /prosemirror-trailing-node@2.0.8(prosemirror-model@1.21.1)(prosemirror-state@1.4.3)(prosemirror-view@1.33.8): + /prosemirror-trailing-node@2.0.8(prosemirror-model@1.21.3)(prosemirror-state@1.4.3)(prosemirror-view@1.33.8): resolution: {integrity: sha512-ujRYhSuhQb1Jsarh1IHqb2KoSnRiD7wAMDGucP35DN7j5af6X7B18PfdPIrbwsPTqIAj0fyOvxbuPsWhNvylmA==} peerDependencies: prosemirror-model: ^1.19.0 @@ -17725,7 +17921,7 @@ packages: dependencies: '@remirror/core-constants': 2.0.2 escape-string-regexp: 4.0.0 - prosemirror-model: 1.21.1 + prosemirror-model: 1.21.3 prosemirror-state: 1.4.3 prosemirror-view: 1.33.8 dev: false @@ -17733,13 +17929,13 @@ packages: /prosemirror-transform@1.9.0: resolution: {integrity: sha512-5UXkr1LIRx3jmpXXNKDhv8OyAOeLTGuXNwdVfg8x27uASna/wQkr9p6fD3eupGOi4PLJfbezxTyi/7fSJypXHg==} dependencies: - prosemirror-model: 1.21.1 + prosemirror-model: 1.21.3 dev: false /prosemirror-view@1.33.8: resolution: {integrity: sha512-4PhMr/ufz2cdvFgpUAnZfs+0xij3RsFysreeG9V/utpwX7AJtYCDVyuRxzWoMJIEf4C7wVihuBNMPpFLPCiLQw==} dependencies: - prosemirror-model: 1.21.1 + prosemirror-model: 1.21.3 prosemirror-state: 1.4.3 prosemirror-transform: 1.9.0 dev: false @@ -17903,7 +18099,7 @@ packages: peerDependencies: react-scripts: '>=2.1.3' dependencies: - react-scripts: 5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(@swc/core@1.6.3)(esbuild@0.21.3)(eslint@8.44.0)(react@18.2.0)(sass@1.71.1)(typescript@5.4.3) + react-scripts: 5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(@swc/core@1.6.6)(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 @@ -17994,7 +18190,7 @@ packages: strip-ansi: 6.0.1 text-table: 0.2.0 typescript: 5.4.3 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) transitivePeerDependencies: - eslint - supports-color @@ -18294,7 +18490,7 @@ packages: use-sidecar: 1.1.2(@types/react@18.2.45)(react@18.2.0) dev: true - /react-scripts@5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(@swc/core@1.6.3)(esbuild@0.21.3)(eslint@8.44.0)(react@18.2.0)(sass@1.71.1)(typescript@5.4.3): + /react-scripts@5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(@swc/core@1.6.6)(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 @@ -18349,9 +18545,9 @@ packages: source-map-loader: 3.0.2(webpack@5.91.0) style-loader: 3.3.4(webpack@5.91.0) tailwindcss: 3.4.4 - terser-webpack-plugin: 5.3.10(@swc/core@1.6.3)(esbuild@0.21.3)(webpack@5.91.0) + terser-webpack-plugin: 5.3.10(@swc/core@1.6.6)(esbuild@0.21.3)(webpack@5.91.0) typescript: 5.4.3 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.6)(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) @@ -18804,7 +19000,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 @@ -18812,7 +19008,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 @@ -19015,7 +19211,7 @@ packages: klona: 2.0.6 neo-async: 2.6.2 sass: 1.71.1 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.6)(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==} @@ -19038,7 +19234,7 @@ packages: dependencies: neo-async: 2.6.2 sass: 1.71.1 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) dev: true /sass@1.71.1: @@ -19292,7 +19488,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==} @@ -19406,7 +19602,7 @@ packages: abab: 2.0.6 iconv-lite: 0.6.3 source-map-js: 1.2.0 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) /source-map-resolve@0.5.3: resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==} @@ -19816,7 +20012,7 @@ packages: peerDependencies: webpack: ^5.0.0 dependencies: - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) /style-mod@4.1.2: resolution: {integrity: sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==} @@ -19947,15 +20143,15 @@ packages: picocolors: 1.0.1 stable: 0.1.8 - /swc-loader@0.2.6(@swc/core@1.6.3)(webpack@5.91.0): + /swc-loader@0.2.6(@swc/core@1.6.6)(webpack@5.91.0): resolution: {integrity: sha512-9Zi9UP2YmDpgmQVbyOPJClY0dwf58JDyDMQ7uRc4krmc72twNI2fvlBWHLqVekBpPc7h5NJkGVT1zNDxFrqhvg==} peerDependencies: '@swc/core': ^1.2.147 webpack: '>=2' dependencies: - '@swc/core': 1.6.3 + '@swc/core': 1.6.6 '@swc/counter': 0.1.3 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) dev: true /swr@2.2.4(react@18.2.0): @@ -20109,7 +20305,7 @@ packages: ansi-escapes: 4.3.2 supports-hyperlinks: 2.3.0 - /terser-webpack-plugin@5.3.10(@swc/core@1.6.3)(esbuild@0.21.3)(webpack@5.91.0): + /terser-webpack-plugin@5.3.10(@swc/core@1.6.6)(esbuild@0.21.3)(webpack@5.91.0): resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -20126,13 +20322,13 @@ packages: optional: true dependencies: '@jridgewell/trace-mapping': 0.3.25 - '@swc/core': 1.6.3 + '@swc/core': 1.6.6 esbuild: 0.21.3 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.31.1 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) /terser@5.31.1: resolution: {integrity: sha512-37upzU1+viGvuFtBo9NPufCb9dwM0+l9hMxYyWfBA+fbwrPqNJAhbZ6W47bBFnZHKHTUBnMvi87434qq+qnxOg==} @@ -20320,7 +20516,7 @@ packages: tslib: 2.6.3 dev: false - /ts-node@10.9.2(@swc/core@1.6.3)(@types/node@17.0.45)(typescript@5.4.3): + /ts-node@10.9.2(@swc/core@1.6.6)(@types/node@17.0.45)(typescript@5.4.3): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -20335,7 +20531,7 @@ packages: optional: true dependencies: '@cspotcode/source-map-support': 0.8.1 - '@swc/core': 1.6.3 + '@swc/core': 1.6.6 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 @@ -20693,8 +20889,8 @@ packages: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} - /unplugin@1.10.1: - resolution: {integrity: sha512-d6Mhq8RJeGA8UfKCu54Um4lFA0eSaRa3XxdAJg8tIdxbu1ubW0hBCZUL7yI2uGyYCRndvbK8FLHzqy2XKfeMsg==} + /unplugin@1.11.0: + resolution: {integrity: sha512-3r7VWZ/webh0SGgJScpWl2/MRCZK5d3ZYFcNaeci/GQ7Teop7zf0Nl2pUuz7G21BwPd9pcUPOC5KmJ2L3WgC5g==} engines: {node: '>=14.0.0'} dependencies: acorn: 8.12.0 @@ -21000,7 +21196,7 @@ packages: mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.2.0 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) /webpack-dev-middleware@6.1.3(webpack@5.91.0): resolution: {integrity: sha512-A4ChP0Qj8oGociTs6UdlRUGANIGrCDL3y+pmQMc+dSsraXHCatFpmMey4mYELA+juqwUqwQsUgJJISXl1KWmiw==} @@ -21016,7 +21212,7 @@ packages: mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.2.0 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) dev: true /webpack-dev-server@4.15.2(webpack@5.91.0): @@ -21060,7 +21256,7 @@ packages: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) webpack-dev-middleware: 5.3.4(webpack@5.91.0) ws: 8.17.1 transitivePeerDependencies: @@ -21084,7 +21280,7 @@ packages: webpack: ^4.44.2 || ^5.47.0 dependencies: tapable: 2.2.1 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) webpack-sources: 2.3.1 /webpack-merge@5.10.0: @@ -21121,7 +21317,7 @@ packages: resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} dev: true - /webpack@5.91.0(@swc/core@1.6.3)(esbuild@0.21.3): + /webpack@5.91.0(@swc/core@1.6.6)(esbuild@0.21.3): resolution: {integrity: sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==} engines: {node: '>=10.13.0'} hasBin: true @@ -21141,7 +21337,7 @@ packages: browserslist: 4.23.1 chrome-trace-event: 1.0.4 enhanced-resolve: 5.17.0 - es-module-lexer: 1.5.3 + es-module-lexer: 1.5.4 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 @@ -21152,7 +21348,7 @@ packages: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(@swc/core@1.6.3)(esbuild@0.21.3)(webpack@5.91.0) + terser-webpack-plugin: 5.3.10(@swc/core@1.6.6)(esbuild@0.21.3)(webpack@5.91.0) watchpack: 2.4.1 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -21416,7 +21612,7 @@ packages: fast-json-stable-stringify: 2.1.0 pretty-bytes: 5.6.0 upath: 1.2.0 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) webpack-sources: 1.4.3 workbox-build: 6.6.0 transitivePeerDependencies: @@ -21575,8 +21771,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 @@ -21660,7 +21856,7 @@ packages: fast-xml-parser: 4.4.0 graphql: 16.9.0 graphql-request: 6.1.0(graphql@16.9.0) - json-schema-to-typescript: 14.0.5 + json-schema-to-typescript: 14.1.0 lodash: 4.17.21 marked: 13.0.1 prettier: 3.3.2 diff --git a/hasura.planx.uk/tests/pnpm-lock.yaml b/hasura.planx.uk/tests/pnpm-lock.yaml index 527e5eceec..89746e8022 100644 --- a/hasura.planx.uk/tests/pnpm-lock.yaml +++ b/hasura.planx.uk/tests/pnpm-lock.yaml @@ -26,403 +26,344 @@ dependencies: packages: - /@ampproject/remapping@2.2.1: - resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + /@ampproject/remapping@2.3.0: + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 dev: false - /@babel/code-frame@7.22.13: - resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} + /@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.22.20 - chalk: 2.4.2 - dev: false - - /@babel/code-frame@7.22.5: - resolution: {integrity: sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': 7.22.5 + '@babel/highlight': 7.24.7 + picocolors: 1.0.1 dev: false - /@babel/compat-data@7.22.6: - resolution: {integrity: sha512-29tfsWTq2Ftu7MXmimyC0C5FDZv5DYxOZkh3XD3+QW4V/BYuv/LyEsjj3c0hqedEaDt6DBfDvexMKU8YevdqFg==} + /@babel/compat-data@7.24.7: + resolution: {integrity: sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==} engines: {node: '>=6.9.0'} dev: false - /@babel/core@7.22.8: - resolution: {integrity: sha512-75+KxFB4CZqYRXjx4NlR4J7yGvKumBuZTmV4NV6v09dVXXkuYVYLT68N6HCzLvfJ+fWCxQsntNzKwwIXL4bHnw==} + /@babel/core@7.24.7: + resolution: {integrity: sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==} engines: {node: '>=6.9.0'} dependencies: - '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.22.5 - '@babel/generator': 7.22.7 - '@babel/helper-compilation-targets': 7.22.6(@babel/core@7.22.8) - '@babel/helper-module-transforms': 7.22.5 - '@babel/helpers': 7.22.6 - '@babel/parser': 7.22.7 - '@babel/template': 7.22.5 - '@babel/traverse': 7.23.2 - '@babel/types': 7.22.5 - '@nicolo-ribaudo/semver-v6': 6.3.3 - convert-source-map: 1.9.0 - debug: 4.3.4 + '@ampproject/remapping': 2.3.0 + '@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.5 gensync: 1.0.0-beta.2 json5: 2.2.3 + semver: 7.6.2 transitivePeerDependencies: - supports-color dev: false - /@babel/generator@7.22.7: - resolution: {integrity: sha512-p+jPjMG+SI8yvIaxGgeW24u7q9+5+TGpZh8/CuB7RhBKd7RCy8FayNEFNNKrNK/eUcY/4ExQqLmyrvBXKsIcwQ==} + /@babel/generator@7.24.7: + resolution: {integrity: sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.5 - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.18 + '@babel/types': 7.24.7 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 dev: false - /@babel/generator@7.23.0: - resolution: {integrity: sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==} + /@babel/helper-compilation-targets@7.24.7: + resolution: {integrity: sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.0 - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.18 - jsesc: 2.5.2 - dev: false - - /@babel/helper-compilation-targets@7.22.6(@babel/core@7.22.8): - resolution: {integrity: sha512-534sYEqWD9VfUm3IPn2SLcH4Q3P86XL+QvqdC7ZsFrzyyPF3T4XGiVghF6PTYNdWg6pXuoqXxNQAhbYeEInTzA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/compat-data': 7.22.6 - '@babel/core': 7.22.8 - '@babel/helper-validator-option': 7.22.5 - '@nicolo-ribaudo/semver-v6': 6.3.3 - browserslist: 4.21.9 + '@babel/compat-data': 7.24.7 + '@babel/helper-validator-option': 7.24.7 + browserslist: 4.23.1 lru-cache: 5.1.1 + semver: 7.6.2 dev: false - /@babel/helper-environment-visitor@7.22.20: - resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} - engines: {node: '>=6.9.0'} - dev: false - - /@babel/helper-environment-visitor@7.22.5: - resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==} + /@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.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.22.15 - '@babel/types': 7.23.0 + '@babel/template': 7.24.7 + '@babel/types': 7.24.7 dev: false - /@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.23.0 + '@babel/types': 7.24.7 dev: false - /@babel/helper-module-imports@7.22.5: - resolution: {integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==} + /@babel/helper-module-imports@7.24.7: + resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.5 + '@babel/traverse': 7.24.7 + '@babel/types': 7.24.7 + transitivePeerDependencies: + - supports-color dev: false - /@babel/helper-module-transforms@7.22.5: - resolution: {integrity: sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==} + /@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/helper-environment-visitor': 7.22.5 - '@babel/helper-module-imports': 7.22.5 - '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/helper-validator-identifier': 7.22.5 - '@babel/template': 7.22.5 - '@babel/traverse': 7.23.2 - '@babel/types': 7.22.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: false - /@babel/helper-plugin-utils@7.22.5: - resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} + /@babel/helper-plugin-utils@7.24.7: + resolution: {integrity: sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==} engines: {node: '>=6.9.0'} dev: false - /@babel/helper-simple-access@7.22.5: - resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} + /@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.22.5 + '@babel/traverse': 7.24.7 + '@babel/types': 7.24.7 + transitivePeerDependencies: + - supports-color dev: false - /@babel/helper-split-export-declaration@7.22.6: - resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + /@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.23.0 - dev: false - - /@babel/helper-string-parser@7.22.5: - resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} - engines: {node: '>=6.9.0'} - dev: false - - /@babel/helper-validator-identifier@7.22.20: - resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} - engines: {node: '>=6.9.0'} + '@babel/types': 7.24.7 dev: false - /@babel/helper-validator-identifier@7.22.5: - resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==} + /@babel/helper-string-parser@7.24.7: + resolution: {integrity: sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==} engines: {node: '>=6.9.0'} dev: false - /@babel/helper-validator-option@7.22.5: - resolution: {integrity: sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==} + /@babel/helper-validator-identifier@7.24.7: + resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} engines: {node: '>=6.9.0'} dev: false - /@babel/helpers@7.22.6: - resolution: {integrity: sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==} + /@babel/helper-validator-option@7.24.7: + resolution: {integrity: sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.22.5 - '@babel/traverse': 7.23.2 - '@babel/types': 7.22.5 - transitivePeerDependencies: - - supports-color dev: false - /@babel/highlight@7.22.20: - resolution: {integrity: sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==} + /@babel/helpers@7.24.7: + resolution: {integrity: sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.22.20 - chalk: 2.4.2 - js-tokens: 4.0.0 + '@babel/template': 7.24.7 + '@babel/types': 7.24.7 dev: false - /@babel/highlight@7.22.5: - resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==} + /@babel/highlight@7.24.7: + resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.22.5 + '@babel/helper-validator-identifier': 7.24.7 chalk: 2.4.2 js-tokens: 4.0.0 + picocolors: 1.0.1 dev: false - /@babel/parser@7.22.7: - resolution: {integrity: sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==} - engines: {node: '>=6.0.0'} - hasBin: true - dependencies: - '@babel/types': 7.22.5 - dev: false - - /@babel/parser@7.23.0: - resolution: {integrity: sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==} + /@babel/parser@7.24.7: + resolution: {integrity: sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.23.0 + '@babel/types': 7.24.7 dev: false - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.22.8): + /@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.22.8 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.22.8): + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.24.7): resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.8 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.22.8): + /@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.22.8 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.22.8): + /@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.22.8 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.22.8): + /@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.22.8 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.22.8): - resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==} + /@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.22.8 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.22.8): + /@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.22.8 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.22.8): + /@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.22.8 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.22.8): + /@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.22.8 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.22.8): + /@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.22.8 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.22.8): + /@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.22.8 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.22.8): + /@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.22.8 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.22.8): + /@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.22.8 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.22.8): - resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==} + /@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.22.8 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/template@7.22.15: - resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.22.13 - '@babel/parser': 7.23.0 - '@babel/types': 7.23.0 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/template@7.22.5: - resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==} + /@babel/template@7.24.7: + resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.22.5 - '@babel/parser': 7.22.7 - '@babel/types': 7.22.5 + '@babel/code-frame': 7.24.7 + '@babel/parser': 7.24.7 + '@babel/types': 7.24.7 dev: false - /@babel/traverse@7.23.2: - resolution: {integrity: sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==} + /@babel/traverse@7.24.7: + resolution: {integrity: sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.22.13 - '@babel/generator': 7.23.0 - '@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.22.6 - '@babel/parser': 7.23.0 - '@babel/types': 7.23.0 - 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: false - /@babel/types@7.22.5: - resolution: {integrity: sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==} + /@babel/types@7.24.7: + resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.22.5 - '@babel/helper-validator-identifier': 7.22.5 - to-fast-properties: 2.0.0 - dev: false - - /@babel/types@7.23.0: - resolution: {integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-string-parser': 7.22.5 - '@babel/helper-validator-identifier': 7.22.20 + '@babel/helper-string-parser': 7.24.7 + '@babel/helper-validator-identifier': 7.24.7 to-fast-properties: 2.0.0 dev: false @@ -451,7 +392,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.4.0 + '@types/node': 20.14.9 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 @@ -472,14 +413,14 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.4.0 + '@types/node': 20.14.9 ansi-escapes: 4.3.2 chalk: 4.1.2 - ci-info: 3.8.0 + ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.4.0) + jest-config: 29.7.0(@types/node@20.14.9) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -491,7 +432,7 @@ packages: jest-util: 29.7.0 jest-validate: 29.7.0 jest-watcher: 29.7.0 - micromatch: 4.0.5 + micromatch: 4.0.7 pretty-format: 29.7.0 slash: 3.0.0 strip-ansi: 6.0.1 @@ -507,7 +448,7 @@ packages: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.4.0 + '@types/node': 20.14.9 jest-mock: 29.7.0 dev: false @@ -534,7 +475,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.4.0 + '@types/node': 20.14.9 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -566,25 +507,25 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.18 - '@types/node': 20.4.0 + '@jridgewell/trace-mapping': 0.3.25 + '@types/node': 20.14.9 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 glob: 7.2.3 graceful-fs: 4.2.11 - istanbul-lib-coverage: 3.2.0 - istanbul-lib-instrument: 6.0.0 - istanbul-lib-report: 3.0.0 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-instrument: 6.0.3 + istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.5 + istanbul-reports: 3.1.7 jest-message-util: 29.7.0 jest-util: 29.7.0 jest-worker: 29.7.0 slash: 3.0.0 string-length: 4.0.2 strip-ansi: 6.0.1 - v8-to-istanbul: 9.1.0 + v8-to-istanbul: 9.3.0 transitivePeerDependencies: - supports-color dev: false @@ -600,7 +541,7 @@ packages: resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/trace-mapping': 0.3.25 callsites: 3.1.0 graceful-fs: 4.2.11 dev: false @@ -611,7 +552,7 @@ packages: dependencies: '@jest/console': 29.7.0 '@jest/types': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.4 + '@types/istanbul-lib-coverage': 2.0.6 collect-v8-coverage: 1.0.2 dev: false @@ -629,9 +570,9 @@ packages: resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.22.8 + '@babel/core': 7.24.7 '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/trace-mapping': 0.3.25 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 convert-source-map: 2.0.0 @@ -640,7 +581,7 @@ packages: jest-haste-map: 29.7.0 jest-regex-util: 29.6.3 jest-util: 29.7.0 - micromatch: 4.0.5 + micromatch: 4.0.7 pirates: 4.0.6 slash: 3.0.0 write-file-atomic: 4.0.2 @@ -653,58 +594,49 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/schemas': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.4 - '@types/istanbul-reports': 3.0.1 - '@types/node': 20.4.0 - '@types/yargs': 17.0.24 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 20.14.9 + '@types/yargs': 17.0.32 chalk: 4.1.2 dev: false - /@jridgewell/gen-mapping@0.3.3: - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + /@jridgewell/gen-mapping@0.3.5: + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/set-array': 1.1.2 + '@jridgewell/set-array': 1.2.1 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/trace-mapping': 0.3.25 dev: false - /@jridgewell/resolve-uri@3.1.0: - resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} + /@jridgewell/resolve-uri@3.1.2: + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} dev: false - /@jridgewell/set-array@1.1.2: - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + /@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.14: - resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} - dev: false - /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} dev: false - /@jridgewell/trace-mapping@0.3.18: - resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} + /@jridgewell/trace-mapping@0.3.25: + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} dependencies: - '@jridgewell/resolve-uri': 3.1.0 - '@jridgewell/sourcemap-codec': 1.4.14 - dev: false - - /@nicolo-ribaudo/semver-v6@6.3.3: - resolution: {integrity: sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg==} - hasBin: true + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 dev: false /@sinclair/typebox@0.27.8: resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} dev: false - /@sinonjs/commons@3.0.0: - resolution: {integrity: sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==} + /@sinonjs/commons@3.0.1: + resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} dependencies: type-detect: 4.0.8 dev: false @@ -712,76 +644,78 @@ packages: /@sinonjs/fake-timers@10.3.0: resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} dependencies: - '@sinonjs/commons': 3.0.0 + '@sinonjs/commons': 3.0.1 dev: false - /@types/babel__core@7.20.1: - resolution: {integrity: sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==} + /@types/babel__core@7.20.5: + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} dependencies: - '@babel/parser': 7.22.7 - '@babel/types': 7.22.5 - '@types/babel__generator': 7.6.4 - '@types/babel__template': 7.4.1 - '@types/babel__traverse': 7.20.1 + '@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 dev: false - /@types/babel__generator@7.6.4: - resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} + /@types/babel__generator@7.6.8: + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} dependencies: - '@babel/types': 7.22.5 + '@babel/types': 7.24.7 dev: false - /@types/babel__template@7.4.1: - resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} + /@types/babel__template@7.4.4: + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} dependencies: - '@babel/parser': 7.22.7 - '@babel/types': 7.22.5 + '@babel/parser': 7.24.7 + '@babel/types': 7.24.7 dev: false - /@types/babel__traverse@7.20.1: - resolution: {integrity: sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==} + /@types/babel__traverse@7.20.6: + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} dependencies: - '@babel/types': 7.22.5 + '@babel/types': 7.24.7 dev: false - /@types/graceful-fs@4.1.6: - resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} + /@types/graceful-fs@4.1.9: + resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} dependencies: - '@types/node': 20.4.0 + '@types/node': 20.14.9 dev: false - /@types/istanbul-lib-coverage@2.0.4: - resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} + /@types/istanbul-lib-coverage@2.0.6: + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} dev: false - /@types/istanbul-lib-report@3.0.0: - resolution: {integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==} + /@types/istanbul-lib-report@3.0.3: + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} dependencies: - '@types/istanbul-lib-coverage': 2.0.4 + '@types/istanbul-lib-coverage': 2.0.6 dev: false - /@types/istanbul-reports@3.0.1: - resolution: {integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==} + /@types/istanbul-reports@3.0.4: + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} dependencies: - '@types/istanbul-lib-report': 3.0.0 + '@types/istanbul-lib-report': 3.0.3 dev: false - /@types/node@20.4.0: - resolution: {integrity: sha512-jfT7iTf/4kOQ9S7CHV9BIyRaQqHu67mOjsIQBC3BKZvzvUB6zLxEwJ6sBE3ozcvP8kF6Uk5PXN0Q+c0dfhGX0g==} + /@types/node@20.14.9: + resolution: {integrity: sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==} + dependencies: + undici-types: 5.26.5 dev: false - /@types/stack-utils@2.0.1: - resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} + /@types/stack-utils@2.0.3: + resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} dev: false - /@types/yargs-parser@21.0.0: - resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} + /@types/yargs-parser@21.0.3: + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} dev: false - /@types/yargs@17.0.24: - resolution: {integrity: sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==} + /@types/yargs@17.0.32: + resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} dependencies: - '@types/yargs-parser': 21.0.0 + '@types/yargs-parser': 21.0.3 dev: false /ansi-escapes@4.3.2: @@ -829,17 +763,17 @@ packages: sprintf-js: 1.0.3 dev: false - /babel-jest@29.7.0(@babel/core@7.22.8): + /babel-jest@29.7.0(@babel/core@7.24.7): resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.8.0 dependencies: - '@babel/core': 7.22.8 + '@babel/core': 7.24.7 '@jest/transform': 29.7.0 - '@types/babel__core': 7.20.1 + '@types/babel__core': 7.20.5 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.22.8) + babel-preset-jest: 29.6.3(@babel/core@7.24.7) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 @@ -851,7 +785,7 @@ packages: resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} engines: {node: '>=8'} dependencies: - '@babel/helper-plugin-utils': 7.22.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 @@ -864,41 +798,41 @@ packages: resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/template': 7.22.5 - '@babel/types': 7.22.5 - '@types/babel__core': 7.20.1 - '@types/babel__traverse': 7.20.1 + '@babel/template': 7.24.7 + '@babel/types': 7.24.7 + '@types/babel__core': 7.20.5 + '@types/babel__traverse': 7.20.6 dev: false - /babel-preset-current-node-syntax@1.0.1(@babel/core@7.22.8): + /babel-preset-current-node-syntax@1.0.1(@babel/core@7.24.7): resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.22.8 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.8) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.22.8) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.22.8) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.22.8) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.8) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.8) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.8) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.8) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.8) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.8) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.8) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.22.8) - dev: false - - /babel-preset-jest@29.6.3(@babel/core@7.22.8): + '@babel/core': 7.24.7 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.7) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.24.7) + '@babel/plugin-syntax-class-properties': 7.12.13(@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-top-level-await': 7.14.5(@babel/core@7.24.7) + dev: false + + /babel-preset-jest@29.6.3(@babel/core@7.24.7): resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.22.8 + '@babel/core': 7.24.7 babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.8) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.7) dev: false /balanced-match@1.0.2: @@ -919,15 +853,15 @@ packages: fill-range: 7.1.1 dev: false - /browserslist@4.21.9: - resolution: {integrity: sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==} + /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.30001512 - electron-to-chromium: 1.4.451 - node-releases: 2.0.12 - update-browserslist-db: 1.0.11(browserslist@4.21.9) + 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.1) dev: false /bser@2.1.1: @@ -959,8 +893,8 @@ packages: engines: {node: '>=10'} dev: false - /caniuse-lite@1.0.30001512: - resolution: {integrity: sha512-2S9nK0G/mE+jasCUsMPlARhRCts1ebcp2Ji8Y8PWi4NDE1iRdLCnEPHkEfeBrGC45L4isBx5ur3IQ6yTE2mRZw==} + /caniuse-lite@1.0.30001639: + resolution: {integrity: sha512-eFHflNTBIlFwP2AIKaYuBQN/apnUoKNhBdza8ZnW/h2di4LCZ4xFqYlxUxo+LQ76KFI1PGcC1QDxMbxTZpSCAg==} dev: false /chalk@2.4.2: @@ -985,13 +919,13 @@ packages: engines: {node: '>=10'} dev: false - /ci-info@3.8.0: - resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} + /ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} dev: false - /cjs-module-lexer@1.2.3: - resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} + /cjs-module-lexer@1.3.1: + resolution: {integrity: sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==} dev: false /cliui@8.0.1: @@ -1037,10 +971,6 @@ packages: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: false - /convert-source-map@1.9.0: - resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} - dev: false - /convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} dev: false @@ -1054,7 +984,7 @@ packages: chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.4.0) + jest-config: 29.7.0(@types/node@20.14.9) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -1073,8 +1003,8 @@ packages: which: 2.0.2 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: '*' @@ -1085,8 +1015,8 @@ packages: ms: 2.1.2 dev: false - /dedent@1.3.0: - resolution: {integrity: sha512-7glNLfvdsMzZm3FpRY1CHuI2lbYDR+71YmrhmTZjYFD5pfT0ACgnGRdrrC9Mk2uICnzkcdelCx5at787UDGOvg==} + /dedent@1.5.3: + resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} peerDependencies: babel-plugin-macros: ^3.1.0 peerDependenciesMeta: @@ -1120,8 +1050,8 @@ packages: safe-buffer: 5.2.1 dev: false - /electron-to-chromium@1.4.451: - resolution: {integrity: sha512-YYbXHIBxAHe3KWvGOJOuWa6f3tgow44rBW+QAuwVp2DvGqNZeE//K2MowNdWS7XE8li5cgQDrX1LdBr41LufkA==} + /electron-to-chromium@1.4.815: + resolution: {integrity: sha512-OvpTT2ItpOXJL7IGcYakRjHCt8L5GrrN/wHCQsRB4PQa1X9fe+X9oen245mIId7s14xvArCGSTIq644yPUKKLg==} dev: false /emittery@0.13.1: @@ -1139,8 +1069,8 @@ packages: is-arrayish: 0.2.1 dev: false - /escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + /escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} dev: false @@ -1220,16 +1150,16 @@ packages: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} dev: false - /fsevents@2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] requiresBuild: true dev: false optional: true - /function-bind@1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} dev: false /gensync@1.0.0-beta.2: @@ -1254,6 +1184,7 @@ 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 @@ -1282,11 +1213,11 @@ packages: engines: {node: '>=8'} dev: false - /has@1.0.3: - resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} - engines: {node: '>= 0.4.0'} + /hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} dependencies: - function-bind: 1.1.1 + function-bind: 1.1.2 dev: false /html-escaper@2.0.2: @@ -1314,6 +1245,7 @@ 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 @@ -1327,10 +1259,11 @@ packages: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} dev: false - /is-core-module@2.12.1: - resolution: {integrity: sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==} + /is-core-module@2.14.0: + resolution: {integrity: sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==} + engines: {node: '>= 0.4'} dependencies: - has: 1.0.3 + hasown: 2.0.2 dev: false /is-fullwidth-code-point@3.0.0: @@ -1360,14 +1293,14 @@ packages: /isomorphic-fetch@3.0.0: resolution: {integrity: sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==} dependencies: - node-fetch: 2.6.12 - whatwg-fetch: 3.6.2 + node-fetch: 2.7.0 + whatwg-fetch: 3.6.20 transitivePeerDependencies: - encoding dev: false - /istanbul-lib-coverage@3.2.0: - resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} + /istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} engines: {node: '>=8'} dev: false @@ -1375,34 +1308,34 @@ packages: resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} dependencies: - '@babel/core': 7.22.8 - '@babel/parser': 7.22.7 + '@babel/core': 7.24.7 + '@babel/parser': 7.24.7 '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.0 - semver: 7.5.4 + istanbul-lib-coverage: 3.2.2 + semver: 7.6.2 transitivePeerDependencies: - supports-color dev: false - /istanbul-lib-instrument@6.0.0: - resolution: {integrity: sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw==} + /istanbul-lib-instrument@6.0.3: + resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} engines: {node: '>=10'} dependencies: - '@babel/core': 7.22.8 - '@babel/parser': 7.22.7 + '@babel/core': 7.24.7 + '@babel/parser': 7.24.7 '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.0 - semver: 7.5.4 + istanbul-lib-coverage: 3.2.2 + semver: 7.6.2 transitivePeerDependencies: - supports-color dev: false - /istanbul-lib-report@3.0.0: - resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} - engines: {node: '>=8'} + /istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} dependencies: - istanbul-lib-coverage: 3.2.0 - make-dir: 3.1.0 + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 supports-color: 7.2.0 dev: false @@ -1410,19 +1343,19 @@ packages: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} dependencies: - debug: 4.3.4 - istanbul-lib-coverage: 3.2.0 + debug: 4.3.5 + istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: - supports-color dev: false - /istanbul-reports@3.1.5: - resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==} + /istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} engines: {node: '>=8'} dependencies: html-escaper: 2.0.2 - istanbul-lib-report: 3.0.0 + istanbul-lib-report: 3.0.1 dev: false /jest-changed-files@29.7.0: @@ -1442,10 +1375,10 @@ packages: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.4.0 + '@types/node': 20.14.9 chalk: 4.1.2 co: 4.6.0 - dedent: 1.3.0 + dedent: 1.5.3 is-generator-fn: 2.1.0 jest-each: 29.7.0 jest-matcher-utils: 29.7.0 @@ -1455,7 +1388,7 @@ packages: jest-util: 29.7.0 p-limit: 3.1.0 pretty-format: 29.7.0 - pure-rand: 6.0.2 + pure-rand: 6.1.0 slash: 3.0.0 stack-utils: 2.0.6 transitivePeerDependencies: @@ -1480,7 +1413,7 @@ packages: create-jest: 29.7.0 exit: 0.1.2 import-local: 3.1.0 - jest-config: 29.7.0(@types/node@20.4.0) + jest-config: 29.7.0(@types/node@20.14.9) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -1491,7 +1424,7 @@ packages: - ts-node dev: false - /jest-config@29.7.0(@types/node@20.4.0): + /jest-config@29.7.0(@types/node@20.14.9): resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -1503,13 +1436,13 @@ packages: ts-node: optional: true dependencies: - '@babel/core': 7.22.8 + '@babel/core': 7.24.7 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.4.0 - babel-jest: 29.7.0(@babel/core@7.22.8) + '@types/node': 20.14.9 + babel-jest: 29.7.0(@babel/core@7.24.7) chalk: 4.1.2 - ci-info: 3.8.0 + ci-info: 3.9.0 deepmerge: 4.3.1 glob: 7.2.3 graceful-fs: 4.2.11 @@ -1521,7 +1454,7 @@ packages: jest-runner: 29.7.0 jest-util: 29.7.0 jest-validate: 29.7.0 - micromatch: 4.0.5 + micromatch: 4.0.7 parse-json: 5.2.0 pretty-format: 29.7.0 slash: 3.0.0 @@ -1566,7 +1499,7 @@ packages: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.4.0 + '@types/node': 20.14.9 jest-mock: 29.7.0 jest-util: 29.7.0 dev: false @@ -1581,18 +1514,18 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/graceful-fs': 4.1.6 - '@types/node': 20.4.0 + '@types/graceful-fs': 4.1.9 + '@types/node': 20.14.9 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 jest-regex-util: 29.6.3 jest-util: 29.7.0 jest-worker: 29.7.0 - micromatch: 4.0.5 + micromatch: 4.0.7 walker: 1.0.8 optionalDependencies: - fsevents: 2.3.2 + fsevents: 2.3.3 dev: false /jest-leak-detector@29.7.0: @@ -1617,12 +1550,12 @@ 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.22.5 + '@babel/code-frame': 7.24.7 '@jest/types': 29.6.3 - '@types/stack-utils': 2.0.1 + '@types/stack-utils': 2.0.3 chalk: 4.1.2 graceful-fs: 4.2.11 - micromatch: 4.0.5 + micromatch: 4.0.7 pretty-format: 29.7.0 slash: 3.0.0 stack-utils: 2.0.6 @@ -1633,7 +1566,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.4.0 + '@types/node': 20.14.9 jest-util: 29.7.0 dev: false @@ -1674,7 +1607,7 @@ packages: jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) jest-util: 29.7.0 jest-validate: 29.7.0 - resolve: 1.22.2 + resolve: 1.22.8 resolve.exports: 2.0.2 slash: 3.0.0 dev: false @@ -1688,7 +1621,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.4.0 + '@types/node': 20.14.9 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -1719,9 +1652,9 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.4.0 + '@types/node': 20.14.9 chalk: 4.1.2 - cjs-module-lexer: 1.2.3 + cjs-module-lexer: 1.3.1 collect-v8-coverage: 1.0.2 glob: 7.2.3 graceful-fs: 4.2.11 @@ -1742,15 +1675,15 @@ packages: resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.22.8 - '@babel/generator': 7.22.7 - '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.8) - '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.22.8) - '@babel/types': 7.22.5 + '@babel/core': 7.24.7 + '@babel/generator': 7.24.7 + '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-syntax-typescript': 7.24.7(@babel/core@7.24.7) + '@babel/types': 7.24.7 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.8) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.7) chalk: 4.1.2 expect: 29.7.0 graceful-fs: 4.2.11 @@ -1761,7 +1694,7 @@ packages: jest-util: 29.7.0 natural-compare: 1.4.0 pretty-format: 29.7.0 - semver: 7.5.4 + semver: 7.6.2 transitivePeerDependencies: - supports-color dev: false @@ -1771,9 +1704,9 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.4.0 + '@types/node': 20.14.9 chalk: 4.1.2 - ci-info: 3.8.0 + ci-info: 3.9.0 graceful-fs: 4.2.11 picomatch: 2.3.1 dev: false @@ -1796,7 +1729,7 @@ packages: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.4.0 + '@types/node': 20.14.9 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -1808,7 +1741,7 @@ packages: resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 20.4.0 + '@types/node': 20.14.9 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -1869,8 +1802,8 @@ packages: dependencies: jws: 3.2.2 lodash: 4.17.21 - ms: 2.1.2 - semver: 7.5.4 + ms: 2.1.3 + semver: 7.6.2 dev: false /jwa@1.4.1: @@ -1919,18 +1852,11 @@ packages: yallist: 3.1.1 dev: false - /lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + /make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} dependencies: - yallist: 4.0.0 - dev: false - - /make-dir@3.1.0: - resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} - engines: {node: '>=8'} - dependencies: - semver: 7.5.4 + semver: 7.6.2 dev: false /makeerror@1.0.12: @@ -1943,8 +1869,8 @@ packages: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} dev: false - /micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + /micromatch@4.0.7: + resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} engines: {node: '>=8.6'} dependencies: braces: 3.0.3 @@ -1966,12 +1892,16 @@ packages: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} dev: false + /ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + dev: false + /natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: false - /node-fetch@2.6.12: - resolution: {integrity: sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==} + /node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} engines: {node: 4.x || >=6.0.0} peerDependencies: encoding: ^0.1.0 @@ -1986,8 +1916,8 @@ packages: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} dev: false - /node-releases@2.0.12: - resolution: {integrity: sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==} + /node-releases@2.0.14: + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} dev: false /normalize-path@3.0.0: @@ -2045,7 +1975,7 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.22.5 + '@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 @@ -2070,8 +2000,8 @@ packages: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} dev: false - /picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + /picocolors@1.0.1: + resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} dev: false /picomatch@2.3.1: @@ -2097,7 +2027,7 @@ packages: dependencies: '@jest/schemas': 29.6.3 ansi-styles: 5.2.0 - react-is: 18.2.0 + react-is: 18.3.1 dev: false /prompts@2.4.2: @@ -2108,12 +2038,12 @@ packages: sisteransi: 1.0.5 dev: false - /pure-rand@6.0.2: - resolution: {integrity: sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==} + /pure-rand@6.1.0: + resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} dev: false - /react-is@18.2.0: - resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} + /react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} dev: false /require-directory@2.1.1: @@ -2138,11 +2068,11 @@ packages: engines: {node: '>=10'} dev: false - /resolve@1.22.2: - resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} + /resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true dependencies: - is-core-module: 2.12.1 + is-core-module: 2.14.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 dev: false @@ -2151,12 +2081,10 @@ packages: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} dev: false - /semver@7.5.4: - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + /semver@7.6.2: + resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} engines: {node: '>=10'} hasBin: true - dependencies: - lru-cache: 6.0.0 dev: false /shebang-command@2.0.0: @@ -2311,15 +2239,19 @@ packages: engines: {node: '>=10'} dev: false - /update-browserslist-db@1.0.11(browserslist@4.21.9): - resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} + /undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + dev: false + + /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.21.9 - escalade: 3.1.1 - picocolors: 1.0.0 + browserslist: 4.23.1 + escalade: 3.1.2 + picocolors: 1.0.1 dev: false /uuid@9.0.0: @@ -2327,13 +2259,13 @@ packages: hasBin: true dev: false - /v8-to-istanbul@9.1.0: - resolution: {integrity: sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==} + /v8-to-istanbul@9.3.0: + resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} engines: {node: '>=10.12.0'} dependencies: - '@jridgewell/trace-mapping': 0.3.18 - '@types/istanbul-lib-coverage': 2.0.4 - convert-source-map: 1.9.0 + '@jridgewell/trace-mapping': 0.3.25 + '@types/istanbul-lib-coverage': 2.0.6 + convert-source-map: 2.0.0 dev: false /walker@1.0.8: @@ -2346,8 +2278,8 @@ packages: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} dev: false - /whatwg-fetch@3.6.2: - resolution: {integrity: sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==} + /whatwg-fetch@3.6.20: + resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==} dev: false /whatwg-url@5.0.0: @@ -2395,10 +2327,6 @@ packages: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} dev: false - /yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: false - /yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} @@ -2409,7 +2337,7 @@ packages: engines: {node: '>=12'} dependencies: cliui: 8.0.1 - escalade: 3.1.1 + escalade: 3.1.2 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 From 0f05cc9e26ab96af05ff8ae3f0c5c610399ceaf1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Mon, 1 Jul 2024 16:11:29 +0100 Subject: [PATCH 083/150] chore: Fix broken lockfiles (#3358) --- api.planx.uk/pnpm-lock.yaml | 75 +--------- e2e/tests/api-driven/pnpm-lock.yaml | 15 -- e2e/tests/ui-driven/pnpm-lock.yaml | 19 --- editor.planx.uk/pnpm-lock.yaml | 196 ++------------------------- hasura.planx.uk/tests/pnpm-lock.yaml | 17 --- 5 files changed, 16 insertions(+), 306 deletions(-) diff --git a/api.planx.uk/pnpm-lock.yaml b/api.planx.uk/pnpm-lock.yaml index bc32cd21ed..89a9ab3e88 100644 --- a/api.planx.uk/pnpm-lock.yaml +++ b/api.planx.uk/pnpm-lock.yaml @@ -577,7 +577,6 @@ packages: /@babel/parser@7.24.7: resolution: {integrity: sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==} engines: {node: '>=6.0.0'} - hasBin: true dependencies: '@babel/types': 7.24.7 @@ -802,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 @@ -1226,7 +1224,6 @@ packages: /@humanwhocodes/config-array@0.11.14: resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead dependencies: '@humanwhocodes/object-schema': 2.0.3 debug: 4.3.5 @@ -1240,7 +1237,6 @@ packages: /@humanwhocodes/object-schema@2.0.3: resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} - deprecated: Use @eslint/object-schema instead /@isaacs/cliui@8.0.2: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} @@ -2026,14 +2022,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.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 @@ -2330,7 +2324,6 @@ packages: /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==} @@ -2495,7 +2488,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: @@ -2733,7 +2725,6 @@ packages: /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.30001639 electron-to-chromium: 1.4.815 @@ -3135,7 +3126,6 @@ packages: /copyfiles@2.4.1: resolution: {integrity: sha512-fereAvAvxDrQDOXybk3Qu3dPbOoKoysFMWtkY3mv5BsL8//OSZVL5DCLYqgRfY5cWirgRzlC+WSrxp6Bo3eNZg==} - hasBin: true dependencies: glob: 7.2.3 minimatch: 3.1.2 @@ -3172,7 +3162,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 @@ -3649,7 +3638,6 @@ packages: /esbuild@0.21.4: resolution: {integrity: sha512-sFMcNNrj+Q0ZDolrp5pDhH0nRPN9hLIM3fRPwgbLYJeSHHgnXSnbV3xYgSVuOeLWH9c73VwmEverVzupIv5xuA==} engines: {node: '>=12'} - hasBin: true requiresBuild: true optionalDependencies: '@esbuild/aix-ppc64': 0.21.4 @@ -3700,7 +3688,6 @@ packages: /eslint-config-prettier@9.1.0(eslint@8.57.0): resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} - hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: @@ -3751,7 +3738,6 @@ 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.11.0 @@ -3815,7 +3801,6 @@ packages: /esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} - hasBin: true dev: true /esquery@1.5.0: @@ -3975,7 +3960,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 @@ -4368,7 +4352,6 @@ packages: /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.2.1 jackspeak: 3.4.0 @@ -4379,7 +4362,6 @@ packages: /glob@7.1.6: resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} - deprecated: Glob versions prior to v9 are no longer supported dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -4391,7 +4373,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 @@ -4558,7 +4539,6 @@ packages: /he@1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} - hasBin: true dev: false /helmet@7.1.0: @@ -4675,7 +4655,6 @@ packages: /husky@8.0.3: resolution: {integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==} engines: {node: '>=14'} - hasBin: true dev: false /iconv-lite@0.4.24: @@ -4718,7 +4697,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 @@ -4730,7 +4708,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 @@ -4778,7 +4755,6 @@ packages: /is-ci@2.0.0: resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==} - hasBin: true dependencies: ci-info: 2.0.0 dev: true @@ -4822,7 +4798,6 @@ packages: /is-docker@2.2.1: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} - hasBin: true dev: true /is-extendable@0.1.1: @@ -5092,7 +5067,6 @@ packages: /jest-cli@29.7.0(@types/node@18.19.13): resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -5513,7 +5487,6 @@ packages: /jest@29.7.0(@types/node@18.19.13): resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -5546,7 +5519,6 @@ packages: /js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true dependencies: argparse: 1.0.10 esprima: 4.0.1 @@ -5554,7 +5526,6 @@ packages: /js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true dependencies: argparse: 2.0.1 @@ -5597,7 +5568,6 @@ packages: /jsesc@2.5.2: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} - hasBin: true /json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} @@ -5645,17 +5615,16 @@ 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 dev: false + bundledDependencies: [] /jsonwebtoken@9.0.2: resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} @@ -5762,7 +5731,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 @@ -6008,19 +5976,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: @@ -6061,7 +6026,6 @@ packages: /mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true dependencies: minimist: 1.2.8 dev: false @@ -6069,7 +6033,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==} @@ -6103,7 +6066,6 @@ packages: /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: @@ -6165,7 +6127,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 @@ -6556,7 +6517,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: @@ -6588,7 +6548,6 @@ packages: /pino-pretty@11.2.1: resolution: {integrity: sha512-O05NuD9tkRasFRWVaF/uHLOvoRDFD7tb5VMertr78rbsYFjYp48Vg3477EshVAF5eZaEw+OpDl/tu+B0R5o+7g==} - hasBin: true dependencies: colorette: 2.0.20 dateformat: 4.6.3 @@ -6620,7 +6579,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 @@ -6664,7 +6622,6 @@ packages: /prettier@3.2.4: resolution: {integrity: sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ==} engines: {node: '>=14'} - hasBin: true dev: true /prettier@3.3.2: @@ -6783,7 +6740,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: @@ -6968,7 +6924,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: @@ -6978,7 +6933,6 @@ packages: /resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true dependencies: is-core-module: 2.14.0 path-parse: 1.0.7 @@ -7007,23 +6961,18 @@ packages: /rimraf@2.7.1: resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true dependencies: glob: 7.2.3 dev: true /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true dependencies: glob: 7.2.3 /rimraf@5.0.5: resolution: {integrity: sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==} engines: {node: '>=14'} - hasBin: true dependencies: glob: 10.4.2 dev: true @@ -7071,8 +7020,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 @@ -7114,18 +7061,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==} @@ -7293,7 +7237,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 @@ -7318,7 +7261,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: @@ -7535,7 +7477,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 @@ -7672,13 +7613,11 @@ 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): resolution: {integrity: sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true peerDependencies: '@babel/core': '>=7.0.0-beta.0 <8' '@jest/types': ^29.0.0 @@ -7713,7 +7652,6 @@ packages: /ts-node-dev@2.0.0(@types/node@18.19.13)(typescript@5.4.3): resolution: {integrity: sha512-ywMrhCfH6M75yftYvrvNarLEY+SUXtUvU8/0Z6llrHQVBx12GiFk5sStF8UdfE/yfzk9IAq7O5EEbTQsxlBI8w==} engines: {node: '>=0.8.0'} - hasBin: true peerDependencies: node-notifier: '*' typescript: '*' @@ -7740,7 +7678,6 @@ packages: /ts-node@10.9.2(@types/node@18.19.13)(typescript@5.4.3): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} - hasBin: true peerDependencies: '@swc/core': '>=1.2.50' '@swc/wasm': '>=1.2.50' @@ -7857,7 +7794,6 @@ packages: /typescript@5.4.3: resolution: {integrity: sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==} engines: {node: '>=14.17'} - hasBin: true dev: true /uid2@0.0.4: @@ -7902,7 +7838,6 @@ packages: /update-browserslist-db@1.0.16(browserslist@4.23.1): resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==} - hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: @@ -7918,7 +7853,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: @@ -7966,17 +7900,14 @@ packages: /uuid@8.0.0: resolution: {integrity: sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==} - hasBin: true dev: false /uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true dev: true /uuid@9.0.1: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} - hasBin: true dev: true /v8-compile-cache-lib@3.0.1: @@ -8073,7 +8004,6 @@ packages: /which@1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} - hasBin: true dependencies: isexe: 2.0.0 dev: true @@ -8081,7 +8011,6 @@ packages: /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} - hasBin: true dependencies: isexe: 2.0.0 @@ -8246,7 +8175,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 @@ -8267,7 +8195,6 @@ packages: resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/b975cf9} name: '@opensystemslab/planx-core' version: 1.0.0 - prepare: true requiresBuild: true dependencies: '@emotion/react': 11.11.4(react@18.3.1) diff --git a/e2e/tests/api-driven/pnpm-lock.yaml b/e2e/tests/api-driven/pnpm-lock.yaml index c2d0779c7a..cf097777b1 100644 --- a/e2e/tests/api-driven/pnpm-lock.yaml +++ b/e2e/tests/api-driven/pnpm-lock.yaml @@ -213,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 @@ -259,7 +258,6 @@ packages: /@cucumber/gherkin-streams@5.0.1(@cucumber/gherkin@26.2.0)(@cucumber/message-streams@4.0.1)(@cucumber/messages@22.0.0): resolution: {integrity: sha512-/7VkIE/ASxIP/jd4Crlp4JHXqdNFxPGQokqWqsaCCiqBiu5qHoKMxcWNlp9njVL/n9yN4S08OmY3ZR8uC5x74Q==} - hasBin: true peerDependencies: '@cucumber/gherkin': '>=22.0.0' '@cucumber/message-streams': '>=4.0.0' @@ -274,7 +272,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 @@ -884,7 +881,6 @@ packages: /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.16.0): resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} @@ -1689,7 +1685,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 @@ -1822,7 +1817,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 @@ -2192,7 +2186,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: @@ -2537,7 +2530,6 @@ packages: /regexp-tree@0.1.27: resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} - hasBin: true dev: false /repeat-string@1.6.1: @@ -2625,7 +2617,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 @@ -2633,7 +2624,6 @@ packages: /semver@7.6.2: resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} engines: {node: '>=10'} - hasBin: true dev: false /setimmediate@1.0.5: @@ -2816,7 +2806,6 @@ packages: /ts-node@10.9.1(@types/node@18.16.1)(typescript@5.4.3): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} - hasBin: true peerDependencies: '@swc/core': '>=1.2.50' '@swc/wasm': '>=1.2.50' @@ -2873,7 +2862,6 @@ packages: /typescript@5.4.3: resolution: {integrity: sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==} engines: {node: '>=14.17'} - hasBin: true dev: true /undici-types@5.26.5: @@ -2912,7 +2900,6 @@ packages: /uuid@9.0.0: resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==} - hasBin: true dev: false /v8-compile-cache-lib@3.0.1: @@ -3017,7 +3004,6 @@ packages: /yaml@2.4.5: resolution: {integrity: sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==} engines: {node: '>= 14'} - hasBin: true dev: false /yargs-parser@20.2.9: @@ -3069,7 +3055,6 @@ packages: resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/b975cf9} name: '@opensystemslab/planx-core' version: 1.0.0 - prepare: true requiresBuild: true dependencies: '@emotion/react': 11.11.4(react@18.3.1) diff --git a/e2e/tests/ui-driven/pnpm-lock.yaml b/e2e/tests/ui-driven/pnpm-lock.yaml index 32d3fa41e6..e20757a273 100644 --- a/e2e/tests/ui-driven/pnpm-lock.yaml +++ b/e2e/tests/ui-driven/pnpm-lock.yaml @@ -401,7 +401,6 @@ packages: /@humanwhocodes/config-array@0.11.14: resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead dependencies: '@humanwhocodes/object-schema': 2.0.3 debug: 4.3.5 @@ -415,7 +414,6 @@ packages: /@humanwhocodes/object-schema@2.0.3: resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} - deprecated: Use @eslint/object-schema instead /@isaacs/cliui@8.0.2: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} @@ -645,7 +643,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 @@ -722,7 +719,6 @@ packages: /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.16.0): resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} @@ -1302,7 +1298,6 @@ 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.11.0 @@ -1601,7 +1596,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 @@ -1715,7 +1709,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 @@ -1741,7 +1734,6 @@ packages: /is-docker@2.2.1: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} - hasBin: true dev: false /is-extglob@2.1.1: @@ -1819,7 +1811,6 @@ packages: /js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true dependencies: argparse: 2.0.1 @@ -2273,13 +2264,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: @@ -2330,7 +2319,6 @@ packages: /rc@1.2.8: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} - hasBin: true dependencies: deep-extend: 0.6.0 ini: 1.3.8 @@ -2445,8 +2433,6 @@ 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 @@ -2476,7 +2462,6 @@ packages: /semver@7.6.2: resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} engines: {node: '>=10'} - hasBin: true dev: false /serve-handler@6.1.5: @@ -2495,7 +2480,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 @@ -2704,7 +2688,6 @@ packages: /uuid@9.0.1: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} - hasBin: true dev: false /vary@1.1.2: @@ -2735,7 +2718,6 @@ packages: /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} - hasBin: true dependencies: isexe: 2.0.0 @@ -2827,7 +2809,6 @@ packages: resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/b975cf9} name: '@opensystemslab/planx-core' version: 1.0.0 - prepare: true requiresBuild: true dependencies: '@emotion/react': 11.11.4(react@18.3.1) diff --git a/editor.planx.uk/pnpm-lock.yaml b/editor.planx.uk/pnpm-lock.yaml index a3af39f28f..3569f494b1 100644 --- a/editor.planx.uk/pnpm-lock.yaml +++ b/editor.planx.uk/pnpm-lock.yaml @@ -558,7 +558,6 @@ packages: /@aw-web-design/x-default-browser@1.4.126: resolution: {integrity: sha512-Xk1sIhyNC/esHGGVjL/niHLowM0csl/kFO5uawBy4IrWwy0o1G8LGt3jP6nmWGz+USxeeqbihAmp/oVZju6wug==} - hasBin: true dependencies: default-browser-id: 3.0.0 dev: true @@ -983,7 +982,6 @@ packages: /@babel/parser@7.24.7: resolution: {integrity: sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==} engines: {node: '>=6.0.0'} - hasBin: true dependencies: '@babel/types': 7.24.7 @@ -1058,7 +1056,6 @@ packages: /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.22.5): resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -1084,7 +1081,6 @@ packages: /@babel/plugin-proposal-logical-assignment-operators@7.20.7(@babel/core@7.22.5): resolution: {integrity: sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==} engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-logical-assignment-operators instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -1096,7 +1092,6 @@ packages: /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.22.5): resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -1107,7 +1102,6 @@ packages: /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.22.5): resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -1118,7 +1112,6 @@ packages: /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.22.5): resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -1132,7 +1125,6 @@ packages: /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.22.5): resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -1162,7 +1154,6 @@ packages: /@babel/plugin-proposal-private-property-in-object@7.21.11(@babel/core@7.22.5): resolution: {integrity: sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==} engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -1177,7 +1168,6 @@ packages: /@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.22.5): resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} engines: {node: '>=4'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-unicode-property-regex instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -3160,7 +3150,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 @@ -3179,7 +3168,6 @@ packages: /@codemirror/basic-setup@0.19.3: resolution: {integrity: sha512-2hfO+QDk/HTpQzeYk1NyL1G9D5L7Sj78dtaQP8xBU42DKU9+OBPF5MdjLYnxP0jKzm6IfQfsLd89fnqW3rBVfQ==} - deprecated: In version 6.0, this package has been renamed to just 'codemirror' dependencies: '@codemirror/autocomplete': 0.19.15 '@codemirror/closebrackets': 0.19.2 @@ -3200,7 +3188,6 @@ packages: /@codemirror/closebrackets@0.19.2: resolution: {integrity: sha512-ClMPzPcPP0eQiDcVjtVPl6OLxgdtZSYDazsvT0AKl70V1OJva0eHgl4/6kCW3RZ0pb2n34i9nJz4eXCmK+TYDA==} - deprecated: As of 0.20.0, this package has been merged into @codemirror/autocomplete dependencies: '@codemirror/language': 0.19.10 '@codemirror/rangeset': 0.19.9 @@ -3222,7 +3209,6 @@ packages: /@codemirror/comment@0.19.1: resolution: {integrity: sha512-uGKteBuVWAC6fW+Yt8u27DOnXMT/xV4Ekk2Z5mRsiADCZDqYvryrJd6PLL5+8t64BVyocwQwNfz1UswYS2CtFQ==} - deprecated: As of 0.20.0, this package has been merged into @codemirror/commands dependencies: '@codemirror/state': 0.19.9 '@codemirror/text': 0.19.6 @@ -3231,7 +3217,6 @@ packages: /@codemirror/fold@0.19.4: resolution: {integrity: sha512-0SNSkRSOa6gymD6GauHa3sxiysjPhUC0SRVyTlvL52o0gz9GHdc8kNqNQskm3fBtGGOiSriGwF/kAsajRiGhVw==} - deprecated: As of 0.20.0, this package has been merged into @codemirror/language dependencies: '@codemirror/gutter': 0.19.9 '@codemirror/language': 0.19.10 @@ -3242,7 +3227,6 @@ packages: /@codemirror/gutter@0.19.9: resolution: {integrity: sha512-PFrtmilahin1g6uL27aG5tM/rqR9DZzZYZsIrCXA5Uc2OFTFqx4owuhoU9hqfYxHp5ovfvBwQ+txFzqS4vog6Q==} - deprecated: As of 0.20.0, this package has been merged into @codemirror/view dependencies: '@codemirror/rangeset': 0.19.9 '@codemirror/state': 0.19.9 @@ -3251,7 +3235,6 @@ packages: /@codemirror/highlight@0.19.8: resolution: {integrity: sha512-v/lzuHjrYR8MN2mEJcUD6fHSTXXli9C1XGYpr+ElV6fLBIUhMTNKR3qThp611xuWfXfwDxeL7ppcbkM/MzPV3A==} - deprecated: As of 0.20.0, this package has been split between @lezer/highlight and @codemirror/language dependencies: '@codemirror/language': 0.19.10 '@codemirror/rangeset': 0.19.9 @@ -3263,7 +3246,6 @@ packages: /@codemirror/history@0.19.2: resolution: {integrity: sha512-unhP4t3N2smzmHoo/Yio6ueWi+il8gm9VKrvi6wlcdGH5fOfVDNkmjHQ495SiR+EdOG35+3iNebSPYww0vN7ow==} - deprecated: As of 0.20.0, this package has been merged into @codemirror/commands dependencies: '@codemirror/state': 0.19.9 '@codemirror/view': 0.19.48 @@ -3311,7 +3293,6 @@ packages: /@codemirror/matchbrackets@0.19.4: resolution: {integrity: sha512-VFkaOKPNudAA5sGP1zikRHCEKU0hjYmkKpr04pybUpQvfTvNJXlReCyP0rvH/1iEwAGPL990ZTT+QrLdu4MeEA==} - deprecated: As of 0.20.0, this package has been merged into @codemirror/language dependencies: '@codemirror/language': 0.19.10 '@codemirror/state': 0.19.9 @@ -3321,7 +3302,6 @@ packages: /@codemirror/panel@0.19.1: resolution: {integrity: sha512-sYeOCMA3KRYxZYJYn5PNlt9yNsjy3zTNTrbYSfVgjgL9QomIVgOJWPO5hZ2sTN8lufO6lw0vTBsIPL9MSidmBg==} - deprecated: As of 0.20.0, this package has been merged into @codemirror/view dependencies: '@codemirror/state': 0.19.9 '@codemirror/view': 0.19.48 @@ -3329,14 +3309,12 @@ packages: /@codemirror/rangeset@0.19.9: resolution: {integrity: sha512-V8YUuOvK+ew87Xem+71nKcqu1SXd5QROMRLMS/ljT5/3MCxtgrRie1Cvild0G/Z2f1fpWxzX78V0U4jjXBorBQ==} - deprecated: As of 0.20.0, this package has been merged into @codemirror/state dependencies: '@codemirror/state': 0.19.9 dev: true /@codemirror/rectangular-selection@0.19.2: resolution: {integrity: sha512-AXK/p5eGwFJ9GJcLfntqN4dgY+XiIF7eHfXNQJX5HhQLSped2wJE6WuC1rMEaOlcpOqlb9mrNi/ZdUjSIj9mbA==} - deprecated: As of 0.20.0, this package has been merged into @codemirror/view dependencies: '@codemirror/state': 0.19.9 '@codemirror/text': 0.19.6 @@ -3362,7 +3340,6 @@ packages: /@codemirror/stream-parser@0.19.9: resolution: {integrity: sha512-WTmkEFSRCetpk8xIOvV2yyXdZs3DgYckM0IP7eFi4ewlxWnJO/H4BeJZLs4wQaydWsAqTQoDyIwNH1BCzK5LUQ==} - deprecated: As of 0.20.0, this package has been merged into @codemirror/language dependencies: '@codemirror/highlight': 0.19.8 '@codemirror/language': 0.19.10 @@ -3374,7 +3351,6 @@ packages: /@codemirror/text@0.19.6: resolution: {integrity: sha512-T9jnREMIygx+TPC1bOuepz18maGq/92q2a+n4qTqObKwvNMg+8cMTslb8yxeEDEq7S3kpgGWxgO1UWbQRij0dA==} - deprecated: As of 0.20.0, this package has been merged into @codemirror/state dev: true /@codemirror/theme-one-dark@0.19.0: @@ -3387,7 +3363,6 @@ packages: /@codemirror/tooltip@0.19.16: resolution: {integrity: sha512-zxKDHryUV5/RS45AQL+wOeN+i7/l81wK56OMnUPoTSzCWNITfxHn7BToDsjtrRKbzHqUxKYmBnn/4hPjpZ4WJQ==} - deprecated: As of 0.20.0, this package has been merged into @codemirror/view dependencies: '@codemirror/state': 0.19.9 '@codemirror/view': 0.19.48 @@ -3413,7 +3388,6 @@ packages: /@craco/craco@7.1.0(@swc/core@1.6.6)(@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 peerDependencies: react-scripts: ^5.0.0 dependencies: @@ -4587,7 +4561,6 @@ packages: /@humanwhocodes/config-array@0.11.14: resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead dependencies: '@humanwhocodes/object-schema': 2.0.3 debug: 4.3.5 @@ -4601,7 +4574,6 @@ 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==} @@ -5010,7 +4982,6 @@ packages: /@mapbox/mapbox-gl-style-spec@13.28.0: resolution: {integrity: sha512-B8xM7Fp1nh5kejfIl4SWeY0gtIeewbuRencqO3cJDrCHZpaPg7uY+V8abuR+esMeuOjRl5cLhVTP40v+1ywxbg==} - hasBin: true dependencies: '@mapbox/jsonlint-lines-primitives': 2.0.2 '@mapbox/point-geometry': 0.1.0 @@ -5578,7 +5549,6 @@ packages: /@nicolo-ribaudo/semver-v6@6.3.3: resolution: {integrity: sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg==} - hasBin: true /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -6809,11 +6779,11 @@ packages: - supports-color dev: true - /@storybook/builder-manager@8.1.10(prettier@3.0.0): + /@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.10(prettier@3.0.0) + '@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 @@ -6911,18 +6881,17 @@ packages: /@storybook/cli@8.1.10(@babel/preset-env@7.22.6)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-7Fm2Qgk33sHayZ0QABqwe1Jto4yyVRVW6kTrSeP5IuLh+mn244RgxBvWtGCyL1EcWDFI7PYUFa0HxgTCq7C+OA==} - hasBin: true dependencies: '@babel/core': 7.24.7 '@babel/types': 7.24.7 '@ndelangen/get-tarball': 3.0.9 '@storybook/codemod': 8.1.10 - '@storybook/core-common': 8.1.10(prettier@3.0.0) + '@storybook/core-common': 8.1.10(prettier@3.3.2) '@storybook/core-events': 8.1.10 - '@storybook/core-server': 8.1.10(prettier@3.0.0)(react-dom@18.2.0)(react@18.2.0) + '@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.0.0) + '@storybook/telemetry': 8.1.10(prettier@3.3.2) '@storybook/types': 8.1.10 '@types/semver': 7.5.8 '@yarnpkg/fslib': 2.10.3 @@ -7061,7 +7030,7 @@ packages: - supports-color dev: true - /@storybook/core-common@8.1.10(prettier@3.0.0): + /@storybook/core-common@8.1.10(prettier@3.3.2): resolution: {integrity: sha512-+0GhgDRQwUlXu1lY77NdLnVBVycCEW0DG7eu7rvLYYkTyNRxbdl2RWsQpjr/j4sxqT6u82l9/b+RWpmsl4MgMQ==} peerDependencies: prettier: ^2 || ^3 @@ -7090,8 +7059,8 @@ packages: node-fetch: 2.7.0 picomatch: 2.3.1 pkg-dir: 5.0.0 - prettier: 3.0.0 - prettier-fallback: /prettier@3.0.0 + prettier: 3.3.2 + prettier-fallback: /prettier@3.3.2 pretty-hrtime: 1.0.3 resolve-from: 5.0.0 semver: 7.6.2 @@ -7123,16 +7092,16 @@ packages: ts-dedent: 2.2.0 dev: true - /@storybook/core-server@8.1.10(prettier@3.0.0)(react-dom@18.2.0)(react@18.2.0): + /@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.7 '@babel/parser': 7.24.7 '@discoveryjs/json-ext': 0.5.7 - '@storybook/builder-manager': 8.1.10(prettier@3.0.0) + '@storybook/builder-manager': 8.1.10(prettier@3.3.2) '@storybook/channels': 8.1.10 - '@storybook/core-common': 8.1.10(prettier@3.0.0) + '@storybook/core-common': 8.1.10(prettier@3.3.2) '@storybook/core-events': 8.1.10 '@storybook/csf': 0.1.9 '@storybook/csf-tools': 8.1.10 @@ -7142,7 +7111,7 @@ packages: '@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.0.0) + '@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 @@ -7584,11 +7553,11 @@ packages: qs: 6.12.1 dev: true - /@storybook/telemetry@8.1.10(prettier@3.0.0): + /@storybook/telemetry@8.1.10(prettier@3.3.2): resolution: {integrity: sha512-pwiMWrq85D0AnaAgYNfB2w2BDgqnetQ+tXwsUAw4fUEFwA4oPU6r0uqekRbNNE6wmSSYjiiFP3JgknBFqjd2hg==} dependencies: '@storybook/client-logger': 8.1.10 - '@storybook/core-common': 8.1.10(prettier@3.0.0) + '@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 @@ -7902,20 +7871,6 @@ packages: pretty-format: 27.5.1 dev: true - /@testing-library/dom@8.20.1: - resolution: {integrity: sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==} - engines: {node: '>=12'} - dependencies: - '@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 - dom-accessibility-api: 0.5.16 - lz-string: 1.5.0 - pretty-format: 27.5.1 - dev: true - /@testing-library/dom@9.3.4: resolution: {integrity: sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==} engines: {node: '>=14'} @@ -7953,7 +7908,7 @@ packages: react-dom: ^18.0.0 dependencies: '@babel/runtime': 7.24.7 - '@testing-library/dom': 8.20.1 + '@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) @@ -9144,7 +9099,6 @@ packages: /abab@2.0.6: resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} - deprecated: Use your platform's native atob() and btoa() methods instead /abbrev@2.0.0: resolution: {integrity: sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==} @@ -9206,12 +9160,10 @@ packages: /acorn@7.4.1: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} engines: {node: '>=0.4.0'} - hasBin: true /acorn@8.12.0: resolution: {integrity: sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==} engines: {node: '>=0.4.0'} - hasBin: true /address@1.2.2: resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} @@ -9290,12 +9242,10 @@ packages: /ansi-html-community@0.0.8: resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} engines: {'0': node >= 0.8.0} - hasBin: true /ansi-html@0.0.9: resolution: {integrity: sha512-ozbS3LuenHVxNRh/wdnN16QapUHzauqSomAl1jwwJRRsGwFwtj644lIhxfWu0Fy0acCij2+AEgHvjscq3dlVXg==} engines: {'0': node >= 0.8.0} - hasBin: true /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} @@ -9565,7 +9515,6 @@ packages: /atob@2.1.2: resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} engines: {node: '>= 4.5.0'} - hasBin: true /attr-accept@2.2.2: resolution: {integrity: sha512-7prDjvt9HmqiZ0cl5CRjtS84sEyhsHP2coDkaZKRKVfCDo9s7iw7ChVmar78Gu9pC4SoR/28wFu/G5JJhTnqEg==} @@ -9575,7 +9524,6 @@ packages: /autoprefixer@10.4.16(postcss@8.4.32): resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==} engines: {node: ^10 || ^12 || >=14} - hasBin: true peerDependencies: postcss: ^8.1.0 dependencies: @@ -10094,7 +10042,6 @@ packages: /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.30001639 electron-to-chromium: 1.4.815 @@ -10109,7 +10056,6 @@ packages: /btoa@1.2.1: resolution: {integrity: sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==} engines: {node: '>= 0.4.0'} - hasBin: true dev: false /buffer-from@1.1.2: @@ -10724,7 +10670,6 @@ packages: /core-js@2.6.12: resolution: {integrity: sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==} - deprecated: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js. requiresBuild: true dev: true @@ -10835,7 +10780,6 @@ packages: /css-blank-pseudo@3.0.3(postcss@8.4.32): resolution: {integrity: sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==} engines: {node: ^12 || ^14 || >=16} - hasBin: true peerDependencies: postcss: ^8.4 dependencies: @@ -10863,7 +10807,6 @@ packages: /css-has-pseudo@3.0.4(postcss@8.4.32): resolution: {integrity: sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==} engines: {node: ^12 || ^14 || >=16} - hasBin: true peerDependencies: postcss: ^8.4 dependencies: @@ -10936,7 +10879,6 @@ packages: /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 dependencies: @@ -11015,7 +10957,6 @@ packages: /cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} - hasBin: true /cssnano-preset-default@5.2.14(postcss@8.4.32): resolution: {integrity: sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==} @@ -11368,7 +11309,6 @@ packages: /detect-port-alt@1.1.6: resolution: {integrity: sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==} engines: {node: '>= 4.2.1'} - hasBin: true dependencies: address: 1.2.2 debug: 2.6.9 @@ -11378,7 +11318,6 @@ packages: /detect-port@1.6.1: resolution: {integrity: sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q==} engines: {node: '>= 4.0.0'} - hasBin: true dependencies: address: 1.2.2 debug: 4.3.5 @@ -11502,7 +11441,6 @@ packages: /domexception@2.0.1: resolution: {integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==} engines: {node: '>=8'} - deprecated: Use your platform's native DOMException instead dependencies: webidl-conversions: 5.0.0 @@ -11600,7 +11538,6 @@ packages: /editorconfig@1.0.4: resolution: {integrity: sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==} engines: {node: '>=14'} - hasBin: true dependencies: '@one-ini/wasm': 0.1.1 commander: 10.0.1 @@ -11614,7 +11551,6 @@ packages: /ejs@3.1.10: resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} engines: {node: '>=0.10.0'} - hasBin: true dependencies: jake: 10.9.1 @@ -11679,7 +11615,6 @@ packages: /envinfo@7.13.0: resolution: {integrity: sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==} engines: {node: '>=4'} - hasBin: true dev: true /error-ex@1.3.2: @@ -11909,7 +11844,6 @@ packages: /esbuild@0.18.20: resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} engines: {node: '>=12'} - hasBin: true requiresBuild: true optionalDependencies: '@esbuild/android-arm': 0.18.20 @@ -11939,7 +11873,6 @@ packages: /esbuild@0.20.2: resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} engines: {node: '>=12'} - hasBin: true requiresBuild: true optionalDependencies: '@esbuild/aix-ppc64': 0.20.2 @@ -11970,7 +11903,6 @@ packages: /esbuild@0.21.3: resolution: {integrity: sha512-Kgq0/ZsAPzKrbOjCQcjoSmPoWhlcVnGAUo7jvaLHoxW1Drto0KGkR1xBNg2Cp43b9ImvxmPEJZ9xkfcnqPsfBw==} engines: {node: '>=12'} - hasBin: true requiresBuild: true optionalDependencies: '@esbuild/aix-ppc64': 0.21.3 @@ -12023,7 +11955,6 @@ packages: /escodegen@1.14.3: resolution: {integrity: sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==} engines: {node: '>=4.0'} - hasBin: true dependencies: esprima: 4.0.1 estraverse: 4.3.0 @@ -12035,7 +11966,6 @@ packages: /escodegen@2.1.0: resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} engines: {node: '>=6.0'} - hasBin: true dependencies: esprima: 4.0.1 estraverse: 5.3.0 @@ -12045,7 +11975,6 @@ packages: /eslint-config-prettier@9.0.0(eslint@8.44.0): resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==} - hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: @@ -12310,7 +12239,6 @@ packages: /eslint@8.44.0: resolution: {integrity: sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.44.0) '@eslint-community/regexpp': 4.11.0 @@ -12422,12 +12350,10 @@ packages: /esprima@1.2.2: resolution: {integrity: sha512-+JpPZam9w5DuJ3Q67SqsMGtiHKENSMRVoxvArfJZK01/BfLEObtZ6orJa/MtoGNR/rfMgp5837T41PAmTwAv/A==} engines: {node: '>=0.4.0'} - hasBin: true /esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} - hasBin: true /esquery@1.5.0: resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} @@ -12878,7 +12804,6 @@ packages: /flat@5.0.2: resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} - hasBin: true dev: true /flatted@3.3.1: @@ -13207,7 +13132,6 @@ packages: /giget@1.2.3: resolution: {integrity: sha512-8EHPljDvs7qKykr6uw8b+lqLiUc/vUg+KVTI0uND4s63TdsZM2Xus3mflvF0DDG9SiM4RlCkFGL+7aAjRmV7KA==} - hasBin: true dependencies: citty: 0.1.6 consola: 3.2.3 @@ -13241,7 +13165,6 @@ packages: /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.2.1 jackspeak: 3.4.0 @@ -13252,7 +13175,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 @@ -13372,7 +13294,6 @@ packages: /gunzip-maybe@1.4.2: resolution: {integrity: sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==} - hasBin: true dependencies: browserify-zlib: 0.1.4 is-deflate: 1.0.0 @@ -13394,7 +13315,6 @@ packages: /handlebars@4.7.8: resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} engines: {node: '>=0.4.7'} - hasBin: true dependencies: minimist: 1.2.8 neo-async: 2.6.2 @@ -13488,7 +13408,6 @@ packages: /he@1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} - hasBin: true /hex-color-regex@1.1.0: resolution: {integrity: sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==} @@ -13549,7 +13468,6 @@ packages: /html-minifier-terser@6.1.0: resolution: {integrity: sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==} engines: {node: '>=12'} - hasBin: true dependencies: camel-case: 4.1.2 clean-css: 5.3.3 @@ -13710,7 +13628,6 @@ packages: /husky@8.0.3: resolution: {integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==} engines: {node: '>=14'} - hasBin: true dev: true /hyphenate-style-name@1.1.0: @@ -13777,7 +13694,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 @@ -13793,7 +13709,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 @@ -13912,7 +13827,6 @@ packages: /is-ci@2.0.0: resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==} - hasBin: true dependencies: ci-info: 2.0.0 dev: true @@ -13976,7 +13890,6 @@ packages: /is-docker@2.2.1: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} - hasBin: true /is-dom@1.1.0: resolution: {integrity: sha512-u82f6mvhYxRPKpw8V1N0W8ce1xXwOrQtgGcxl6UCL5zBmZu3is/18K0rR7uFCnMDuAsS/3W54mGL4vsaFUQlEQ==} @@ -14307,7 +14220,6 @@ packages: /jake@10.9.1: resolution: {integrity: sha512-61btcOHNnLnsOdtLgA5efqQWjnSi/vow5HbI7HMdKKWqvrKR1bLK3BPlJn9gcSaP2ewuamUSMB5XEy76KUIS2w==} engines: {node: '>=10'} - hasBin: true dependencies: async: 3.2.5 chalk: 4.1.2 @@ -14365,7 +14277,6 @@ packages: /jest-cli@27.5.1: resolution: {integrity: sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - hasBin: true peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -14945,7 +14856,6 @@ packages: /jest@27.5.1: resolution: {integrity: sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - hasBin: true peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -14964,12 +14874,10 @@ packages: /jiti@1.21.6: resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} - hasBin: true /js-beautify@1.15.1: resolution: {integrity: sha512-ESjNzSlt/sWE8sciZH8kBF8BPlwXPwhR6pWKAw8bw4Bwj+iZcnKW6ONWUutJ7eObuBZQpiIb8S7OYspWrKt7rA==} engines: {node: '>=14'} - hasBin: true dependencies: config-chain: 1.1.13 editorconfig: 1.0.4 @@ -14991,20 +14899,17 @@ packages: /js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true dependencies: argparse: 1.0.10 esprima: 4.0.1 /js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true dependencies: argparse: 2.0.1 /jscodeshift@0.15.2(@babel/preset-env@7.22.6): resolution: {integrity: sha512-FquR7Okgmc4Sd0aEDwqho3rEiKR3BdvuG9jfdHjLJ6JQoWSMpavug3AoIfnfWhxFlf+5pzQh8qjqz0DWFrNQzA==} - hasBin: true peerDependencies: '@babel/preset-env': ^7.1.6 peerDependenciesMeta: @@ -15038,7 +14943,6 @@ packages: /jscodeshift@0.15.2(@babel/preset-env@7.24.7): resolution: {integrity: sha512-FquR7Okgmc4Sd0aEDwqho3rEiKR3BdvuG9jfdHjLJ6JQoWSMpavug3AoIfnfWhxFlf+5pzQh8qjqz0DWFrNQzA==} - hasBin: true peerDependencies: '@babel/preset-env': ^7.1.6 peerDependenciesMeta: @@ -15113,12 +15017,10 @@ packages: /jsesc@0.5.0: resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} - hasBin: true /jsesc@2.5.2: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} - hasBin: true /json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} @@ -15163,14 +15065,12 @@ packages: /json5@1.0.2: resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true dependencies: minimist: 1.2.8 /json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} - hasBin: true /jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} @@ -15395,7 +15295,6 @@ packages: /lint-staged@13.2.3: resolution: {integrity: sha512-zVVEXLuQIhr1Y7R7YAWx4TZLdvuzk7DnmrsTNL0fax6Z3jrpFcas+vKbzxhhvp6TA55m1SQuWkpzI1qbfDZbAg==} engines: {node: ^14.13.1 || >=16.0.0} - hasBin: true dependencies: chalk: 5.2.0 cli-truncate: 3.1.0 @@ -15547,7 +15446,6 @@ packages: /loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true dependencies: js-tokens: 4.0.0 @@ -15573,7 +15471,6 @@ packages: /lz-string@1.5.0: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} - hasBin: true dev: true /magic-string@0.25.9: @@ -15643,7 +15540,6 @@ packages: /markdown-it@14.1.0: resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} - hasBin: true dependencies: argparse: 2.0.1 entities: 4.5.0 @@ -15674,7 +15570,6 @@ packages: /mathjs@11.8.2: resolution: {integrity: sha512-ZePu0oDbM0vuFExikIMY/9syjo/jbgNbX6ti+iMdaALDuxciMCsXIslGDBEn7QCpCWYBiVCYmc0lsmk5bwHBdQ==} engines: {node: '>= 14'} - hasBin: true dependencies: '@babel/runtime': 7.24.7 complex.js: 2.1.1 @@ -16021,7 +15916,6 @@ packages: /mime@1.6.0: resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} engines: {node: '>=4'} - hasBin: true /mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} @@ -16121,14 +16015,12 @@ packages: /mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true dependencies: minimist: 1.2.8 /mkdirp@1.0.4: resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} engines: {node: '>=10'} - hasBin: true /mkdirp@3.0.1: resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} @@ -16161,7 +16053,6 @@ packages: /multicast-dns@7.2.5: resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} - hasBin: true dependencies: dns-packet: 5.6.1 thunky: 1.1.0 @@ -16205,12 +16096,10 @@ packages: /nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true /nanoid@5.0.7: resolution: {integrity: sha512-oLxFY2gd2IqnjcYyOXD8XGCftpGtZP2AbHbOkthDkvRywH5ayNtPVy9YlOPcHckXzbLTCHpkb7FB+yuxKV13pQ==} engines: {node: ^18 || >=20} - hasBin: true dev: false /nanomatch@1.2.13: @@ -16337,7 +16226,6 @@ packages: /nopt@7.2.1: resolution: {integrity: sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - hasBin: true dependencies: abbrev: 2.0.0 dev: true @@ -16401,7 +16289,6 @@ packages: /nypm@0.3.9: resolution: {integrity: sha512-BI2SdqqTHg2d4wJh8P9A1W+bslg33vOE9IZDY6eR2QC+Pu1iNBVZUqczrd43rJb+fMzHU7ltAYKsEFY/kHMFcw==} engines: {node: ^14.16.0 || >=16.10.0} - hasBin: true dependencies: citty: 0.1.6 consola: 3.2.3 @@ -16850,7 +16737,6 @@ packages: /pbf@3.2.1: resolution: {integrity: sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==} - hasBin: true dependencies: ieee754: 1.2.1 resolve-protobuf-schema: 2.1.0 @@ -16877,7 +16763,6 @@ packages: /pidtree@0.6.0: resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} engines: {node: '>=0.10'} - hasBin: true dev: true /pify@2.3.0: @@ -17697,7 +17582,6 @@ packages: /prettier@3.0.0: resolution: {integrity: sha512-zBf5eHpwHOGPC47h0zrPyNn+eAEIdEzfywMoYn2XPi0P44Zp0tSq64rq0xAREh4auw2cJZHo9QUob+NqCQky4g==} engines: {node: '>=14'} - hasBin: true dev: true /prettier@3.3.2: @@ -18004,10 +17888,6 @@ 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==} @@ -18095,7 +17975,6 @@ packages: /react-app-rewired@2.2.1(react-scripts@5.0.1): resolution: {integrity: sha512-uFQWTErXeLDrMzOJHKp0h8P1z0LV9HzPGsJ6adOtGlA/B9WfT6Shh4j2tLTTGlXOfiVx6w6iWpp7SOC5pvk+gA==} - hasBin: true peerDependencies: react-scripts: '>=2.1.3' dependencies: @@ -18493,7 +18372,6 @@ packages: /react-scripts@5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(@swc/core@1.6.6)(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 peerDependencies: eslint: '*' react: '>= 16' @@ -18868,7 +18746,6 @@ packages: /regjsparser@0.9.1: resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} - hasBin: true dependencies: jsesc: 0.5.0 @@ -18989,7 +18866,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@1.1.1: @@ -18998,7 +18874,6 @@ packages: /resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true dependencies: is-core-module: 2.14.0 path-parse: 1.0.7 @@ -19006,7 +18881,6 @@ packages: /resolve@2.0.0-next.5: resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} - hasBin: true dependencies: is-core-module: 2.14.0 path-parse: 1.0.7 @@ -19063,16 +18937,12 @@ packages: /rimraf@2.6.3: resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true dependencies: glob: 7.2.3 dev: true /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true dependencies: glob: 7.2.3 @@ -19082,7 +18952,6 @@ packages: /rollup-plugin-terser@7.0.2(rollup@2.79.1): resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} - deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser peerDependencies: rollup: ^2.0.0 dependencies: @@ -19095,7 +18964,6 @@ packages: /rollup@2.79.1: resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} engines: {node: '>=10.0.0'} - hasBin: true optionalDependencies: fsevents: 2.3.3 @@ -19170,8 +19038,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 @@ -19240,7 +19106,6 @@ packages: /sass@1.71.1: resolution: {integrity: sha512-wovtnV2PxzteLlfNzbgm1tFXPLoZILYAMJtvoXXkD7/+1uP41eKkIt1ypWq5/q2uT94qHjXehEYfmjKOvjL9sg==} engines: {node: '>=14.0.0'} - hasBin: true dependencies: chokidar: 3.6.0 immutable: 4.3.6 @@ -19324,17 +19189,14 @@ packages: /semver@5.7.2: resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} - hasBin: true dev: true /semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true /semver@7.6.2: resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} engines: {node: '>=10'} - hasBin: true /send@0.18.0: resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} @@ -19606,7 +19468,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 @@ -19623,7 +19484,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.6: @@ -19651,7 +19511,6 @@ packages: /sourcemap-codec@1.4.8: resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} - deprecated: Please use @jridgewell/sourcemap-codec instead /space-separated-tokens@1.1.5: resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==} @@ -19723,7 +19582,6 @@ packages: /stable@0.1.8: resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} - deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' /stack-generator@2.0.10: resolution: {integrity: sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==} @@ -19821,7 +19679,6 @@ packages: /storybook@8.1.10(@babel/preset-env@7.22.6)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-HHlZibyc/QkcQj8aEnYnYwEl+ItNZ/uRbCdkvJzu/vIWYon5jUg30mHFIGZprgLSt27CxOs30Et8yT9z4VhwjA==} - hasBin: true dependencies: '@storybook/cli': 8.1.10(@babel/preset-env@7.22.6)(react-dom@18.2.0)(react@18.2.0) transitivePeerDependencies: @@ -20044,7 +19901,6 @@ packages: /subscriptions-transport-ws@0.11.0(graphql@16.8.1): resolution: {integrity: sha512-8D4C6DIH5tGiAIpp5I0wD/xRlNiZAPGHygzCe7VzyzUoxHtawzjNAY9SUTXU05/EY2NMY9/9GF0ycizkXr1CWQ==} - deprecated: The `subscriptions-transport-ws` package is no longer maintained. We recommend you use `graphql-ws` instead. For help migrating Apollo software to `graphql-ws`, see https://www.apollographql.com/docs/apollo-server/data/subscriptions/#switching-from-subscriptions-transport-ws For general help using `graphql-ws`, see https://github.com/enisdenjo/graphql-ws/blob/master/README.md peerDependencies: graphql: ^15.7.2 || ^16.0.0 dependencies: @@ -20062,7 +19918,6 @@ packages: /sucrase@3.35.0: resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} engines: {node: '>=16 || 14 >=14.17'} - hasBin: true dependencies: '@jridgewell/gen-mapping': 0.3.5 commander: 4.1.1 @@ -20113,8 +19968,6 @@ packages: /svgo@1.3.2: resolution: {integrity: sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==} engines: {node: '>=4.0.0'} - deprecated: This SVGO version is no longer supported. Upgrade to v2.x.x. - hasBin: true dependencies: chalk: 2.4.2 coa: 2.0.2 @@ -20133,7 +19986,6 @@ packages: /svgo@2.8.0: resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==} engines: {node: '>=10.13.0'} - hasBin: true dependencies: '@trysound/sax': 0.2.0 commander: 7.2.0 @@ -20184,7 +20036,6 @@ packages: /tailwindcss@3.4.4: resolution: {integrity: sha512-ZoyXOdJjISB7/BcLTR6SEsLgKtDStYyYZVLsUtWChO4Ps20CBad7lfJKVDiejocV4ME1hLmyY0WJE3hSDcmQ2A==} engines: {node: '>=14.0.0'} - hasBin: true dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -20333,7 +20184,6 @@ packages: /terser@5.31.1: resolution: {integrity: sha512-37upzU1+viGvuFtBo9NPufCb9dwM0+l9hMxYyWfBA+fbwrPqNJAhbZ6W47bBFnZHKHTUBnMvi87434qq+qnxOg==} engines: {node: '>=10'} - hasBin: true dependencies: '@jridgewell/source-map': 0.3.6 acorn: 8.12.0 @@ -20518,7 +20368,6 @@ packages: /ts-node@10.9.2(@swc/core@1.6.6)(@types/node@17.0.45)(typescript@5.4.3): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} - hasBin: true peerDependencies: '@swc/core': '>=1.2.50' '@swc/wasm': '>=1.2.50' @@ -20726,7 +20575,6 @@ packages: /typescript@5.4.3: resolution: {integrity: sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==} engines: {node: '>=14.17'} - hasBin: true /ua-parser-js@1.0.38: resolution: {integrity: sha512-Aq5ppTOfvrCMgAPneW1HfWj66Xi7XL+/mIy996R1/CLS/rcyJQm6QZdsKrUeivDFQ+Oc9Wyuwor8Ze8peEoUoQ==} @@ -20743,7 +20591,6 @@ packages: /uglify-js@3.18.0: resolution: {integrity: sha512-SyVVbcNBCk0dzr9XL/R/ySrmYf0s372K6/hFklzgcp2lBFyXtw4I7BOdDjlLhE1aVqaI/SHWXWmYdlZxuyF38A==} engines: {node: '>=0.8.0'} - hasBin: true requiresBuild: true dev: true optional: true @@ -20920,7 +20767,6 @@ packages: /update-browserslist-db@1.0.16(browserslist@4.23.1): resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==} - hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: @@ -20935,7 +20781,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: @@ -21064,16 +20909,13 @@ packages: /uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true /uuid@9.0.1: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} - hasBin: true /uvu@0.5.6: resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} engines: {node: '>=8'} - hasBin: true dependencies: dequal: 2.0.3 diff: 5.2.0 @@ -21126,7 +20968,6 @@ packages: /w3c-hr-time@1.0.2: resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} - deprecated: Use your platform's native performance.now() and performance.timeOrigin. dependencies: browser-process-hrtime: 1.0.0 @@ -21218,7 +21059,6 @@ packages: /webpack-dev-server@4.15.2(webpack@5.91.0): resolution: {integrity: sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==} engines: {node: '>= 12.13.0'} - hasBin: true peerDependencies: webpack: ^4.37.0 || ^5.0.0 webpack-cli: '*' @@ -21320,7 +21160,6 @@ packages: /webpack@5.91.0(@swc/core@1.6.6)(esbuild@0.21.3): resolution: {integrity: sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==} engines: {node: '>=10.13.0'} - hasBin: true peerDependencies: webpack-cli: '*' peerDependenciesMeta: @@ -21447,14 +21286,12 @@ packages: /which@1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} - hasBin: true dependencies: isexe: 2.0.0 /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} - hasBin: true dependencies: isexe: 2.0.0 @@ -21536,7 +21373,6 @@ packages: /workbox-cacheable-response@6.6.0: resolution: {integrity: sha512-JfhJUSQDwsF1Xv3EV1vWzSsCOZn4mQ38bWEBR3LdvOxSPgB65gAM6cS2CX8rkkKHRgiLrN7Wxoyu+TuH67kHrw==} - deprecated: workbox-background-sync@6.6.0 dependencies: workbox-core: 6.6.0 @@ -21744,7 +21580,6 @@ packages: /yaml@2.4.5: resolution: {integrity: sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==} engines: {node: '>= 14'} - hasBin: true /yargs-parser@20.2.9: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} @@ -21840,7 +21675,6 @@ packages: id: github.com/theopensystemslab/planx-core/b975cf9 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) diff --git a/hasura.planx.uk/tests/pnpm-lock.yaml b/hasura.planx.uk/tests/pnpm-lock.yaml index 89746e8022..5cc294ccda 100644 --- a/hasura.planx.uk/tests/pnpm-lock.yaml +++ b/hasura.planx.uk/tests/pnpm-lock.yaml @@ -197,7 +197,6 @@ packages: /@babel/parser@7.24.7: resolution: {integrity: sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==} engines: {node: '>=6.0.0'} - hasBin: true dependencies: '@babel/types': 7.24.7 dev: false @@ -856,7 +855,6 @@ packages: /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.30001639 electron-to-chromium: 1.4.815 @@ -978,7 +976,6 @@ packages: /create-jest@29.7.0: 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 @@ -1087,7 +1084,6 @@ packages: /esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} - hasBin: true dev: false /execa@5.1.1: @@ -1184,7 +1180,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 @@ -1232,7 +1227,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 @@ -1245,7 +1239,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 @@ -1399,7 +1392,6 @@ packages: /jest-cli@29.7.0: resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -1750,7 +1742,6 @@ packages: /jest@29.7.0: resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -1774,7 +1765,6 @@ packages: /js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true dependencies: argparse: 1.0.10 esprima: 4.0.1 @@ -1783,7 +1773,6 @@ packages: /jsesc@2.5.2: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} - hasBin: true dev: false /json-parse-even-better-errors@2.3.1: @@ -1793,7 +1782,6 @@ packages: /json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} - hasBin: true dev: false /jsonwebtoken@9.0.1: @@ -2070,7 +2058,6 @@ packages: /resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true dependencies: is-core-module: 2.14.0 path-parse: 1.0.7 @@ -2084,7 +2071,6 @@ packages: /semver@7.6.2: resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} engines: {node: '>=10'} - hasBin: true dev: false /shebang-command@2.0.0: @@ -2245,7 +2231,6 @@ packages: /update-browserslist-db@1.0.16(browserslist@4.23.1): resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==} - hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: @@ -2256,7 +2241,6 @@ packages: /uuid@9.0.0: resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==} - hasBin: true dev: false /v8-to-istanbul@9.3.0: @@ -2292,7 +2276,6 @@ packages: /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} - hasBin: true dependencies: isexe: 2.0.0 dev: false From 95b54c43e4ac8dc911d617e648b35a56d803161c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Tue, 2 Jul 2024 11:22:54 +0100 Subject: [PATCH 084/150] chore: Add `packageManager` field to all `package.json` files (#3359) --- api.planx.uk/package.json | 1 + e2e/package.json | 1 + e2e/tests/api-driven/package.json | 1 + e2e/tests/ui-driven/package.json | 1 + editor.planx.uk/package.json | 1 + hasura.planx.uk/package.json | 1 + infrastructure/application/package.json | 1 + infrastructure/certificates/package.json | 1 + infrastructure/data/package.json | 1 + infrastructure/networking/package.json | 1 + scripts/encrypt/package.json | 1 + sharedb.planx.uk/package.json | 1 + 12 files changed, 12 insertions(+) diff --git a/api.planx.uk/package.json b/api.planx.uk/package.json index ab680ac837..0d6fde610d 100644 --- a/api.planx.uk/package.json +++ b/api.planx.uk/package.json @@ -2,6 +2,7 @@ "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#b975cf9", diff --git a/e2e/package.json b/e2e/package.json index c5888413e4..5151d20aed 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", diff --git a/e2e/tests/api-driven/package.json b/e2e/tests/api-driven/package.json index 3fb3256b3e..6fb4c3bbd6 100644 --- a/e2e/tests/api-driven/package.json +++ b/e2e/tests/api-driven/package.json @@ -4,6 +4,7 @@ "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#b975cf9", diff --git a/e2e/tests/ui-driven/package.json b/e2e/tests/ui-driven/package.json index 99eada8d2b..2d115ebd2d 100644 --- a/e2e/tests/ui-driven/package.json +++ b/e2e/tests/ui-driven/package.json @@ -19,6 +19,7 @@ "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/editor.planx.uk/package.json b/editor.planx.uk/package.json index f96b12fb79..044a921413 100644 --- a/editor.planx.uk/package.json +++ b/editor.planx.uk/package.json @@ -158,6 +158,7 @@ "typescript": "^5.4.3", "webpack": "^5.91.0" }, + "packageManager": "pnpm@8.6.6", "scripts": { "start": "craco start", "build": "CI=false && craco build", diff --git a/hasura.planx.uk/package.json b/hasura.planx.uk/package.json index 1b859f4845..19bf95a16c 100644 --- a/hasura.planx.uk/package.json +++ b/hasura.planx.uk/package.json @@ -5,6 +5,7 @@ "scripts": { "start": "hasura console --envfile ./../.env" }, + "packageManager": "pnpm@8.6.6", "pnpm": { "overrides": { "follow-redirects@<=1.15.5": ">=1.15.6" diff --git a/infrastructure/application/package.json b/infrastructure/application/package.json index 9847b6ec4e..aa65adf6d6 100644 --- a/infrastructure/application/package.json +++ b/infrastructure/application/package.json @@ -19,6 +19,7 @@ "scripts": { "build-editor": "cd ../../editor.planx.uk && pnpm build" }, + "packageManager": "pnpm@8.6.6", "pnpm": { "overrides": { "protobufjs@>=7.0.0 <7.2.5": ">=7.2.5", diff --git a/infrastructure/certificates/package.json b/infrastructure/certificates/package.json index 09511d2a7d..ab8d8e38cf 100644 --- a/infrastructure/certificates/package.json +++ b/infrastructure/certificates/package.json @@ -10,6 +10,7 @@ "@pulumi/pulumi": "^3.0.0", "tldjs": "^2.3.1" }, + "packageManager": "pnpm@8.6.6", "pnpm": { "overrides": { "protobufjs": ">=7.2.4", diff --git a/infrastructure/data/package.json b/infrastructure/data/package.json index ddb789481e..8ee29c4301 100644 --- a/infrastructure/data/package.json +++ b/infrastructure/data/package.json @@ -7,6 +7,7 @@ "@pulumi/awsx": "^0.30.0", "@pulumi/pulumi": "^3.74.0" }, + "packageManager": "pnpm@8.6.6", "pnpm": { "overrides": { "protobufjs@>=7.0.0 <7.2.5": ">=7.2.5", diff --git a/infrastructure/networking/package.json b/infrastructure/networking/package.json index ddb789481e..8ee29c4301 100644 --- a/infrastructure/networking/package.json +++ b/infrastructure/networking/package.json @@ -7,6 +7,7 @@ "@pulumi/awsx": "^0.30.0", "@pulumi/pulumi": "^3.74.0" }, + "packageManager": "pnpm@8.6.6", "pnpm": { "overrides": { "protobufjs@>=7.0.0 <7.2.5": ">=7.2.5", diff --git a/scripts/encrypt/package.json b/scripts/encrypt/package.json index bed04c82bc..47f53c4676 100644 --- a/scripts/encrypt/package.json +++ b/scripts/encrypt/package.json @@ -7,6 +7,7 @@ "encrypt": "ts-node encrypt.ts", "decrypt": "ts-node decrypt.ts" }, + "packageManager": "pnpm@8.6.6", "keywords": [], "dependencies": { "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#722e1c7", diff --git a/sharedb.planx.uk/package.json b/sharedb.planx.uk/package.json index bbbf9a5532..9841fc0c35 100644 --- a/sharedb.planx.uk/package.json +++ b/sharedb.planx.uk/package.json @@ -15,6 +15,7 @@ "dev": "node-dev server.js", "start": "node server.js" }, + "packageManager": "pnpm@8.6.6", "devDependencies": { "node-dev": "^8.0.0" }, From 69fe9a1a7afa2408fe7cdbb147a79f3aaa7a3cd0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Jul 2024 14:18:20 +0100 Subject: [PATCH 085/150] chore(deps): bump graphql from 16.8.1 to 16.9.0 in /api.planx.uk (#3342) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Dafydd Llŷr Pearson --- api.planx.uk/package.json | 2 +- api.planx.uk/pnpm-lock.yaml | 23 +++++++++++++---------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/api.planx.uk/package.json b/api.planx.uk/package.json index 0d6fde610d..bdd45131cc 100644 --- a/api.planx.uk/package.json +++ b/api.planx.uk/package.json @@ -24,7 +24,7 @@ "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", diff --git a/api.planx.uk/pnpm-lock.yaml b/api.planx.uk/pnpm-lock.yaml index 89a9ab3e88..2f47d1001f 100644 --- a/api.planx.uk/pnpm-lock.yaml +++ b/api.planx.uk/pnpm-lock.yaml @@ -71,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 @@ -3688,6 +3688,7 @@ packages: /eslint-config-prettier@9.1.0(eslint@8.57.0): resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} + hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: @@ -4427,7 +4428,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 @@ -4435,7 +4436,7 @@ 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 @@ -4459,11 +4460,6 @@ packages: iterall: 1.3.0 dev: true - /graphql@16.8.1: - resolution: {integrity: sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==} - 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} @@ -5067,6 +5063,7 @@ packages: /jest-cli@29.7.0(@types/node@18.19.13): resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -5487,6 +5484,7 @@ packages: /jest@29.7.0(@types/node@18.19.13): resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -7618,6 +7616,7 @@ packages: /ts-jest@29.1.1(@babel/core@7.24.0)(esbuild@0.21.4)(jest@29.7.0)(typescript@5.4.3): resolution: {integrity: sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true peerDependencies: '@babel/core': '>=7.0.0-beta.0 <8' '@jest/types': ^29.0.0 @@ -7652,6 +7651,7 @@ packages: /ts-node-dev@2.0.0(@types/node@18.19.13)(typescript@5.4.3): resolution: {integrity: sha512-ywMrhCfH6M75yftYvrvNarLEY+SUXtUvU8/0Z6llrHQVBx12GiFk5sStF8UdfE/yfzk9IAq7O5EEbTQsxlBI8w==} engines: {node: '>=0.8.0'} + hasBin: true peerDependencies: node-notifier: '*' typescript: '*' @@ -7678,6 +7678,7 @@ packages: /ts-node@10.9.2(@types/node@18.19.13)(typescript@5.4.3): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true peerDependencies: '@swc/core': '>=1.2.50' '@swc/wasm': '>=1.2.50' @@ -7838,6 +7839,7 @@ packages: /update-browserslist-db@1.0.16(browserslist@4.23.1): resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==} + hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: @@ -8195,6 +8197,7 @@ packages: resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/b975cf9} name: '@opensystemslab/planx-core' version: 1.0.0 + prepare: true requiresBuild: true dependencies: '@emotion/react': 11.11.4(react@18.3.1) From bd40f268cdd72a0ff88855cf07e1a7c3ef0fd559 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Jul 2024 14:55:30 +0100 Subject: [PATCH 086/150] chore(deps-dev): bump uuid and @types/uuid in /api.planx.uk (#3346) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Dafydd Llŷr Pearson --- api.planx.uk/package.json | 4 +- api.planx.uk/pnpm-lock.yaml | 104 ++++++++++++++++++------------------ 2 files changed, 53 insertions(+), 55 deletions(-) diff --git a/api.planx.uk/package.json b/api.planx.uk/package.json index bdd45131cc..e334fd8ce3 100644 --- a/api.planx.uk/package.json +++ b/api.planx.uk/package.json @@ -92,7 +92,7 @@ "@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", @@ -113,7 +113,7 @@ "ts-jest": "^29.1.1", "ts-node-dev": "^2.0.0", "typescript": "^5.4.3", - "uuid": "^9.0.1" + "uuid": "^10.0.0" }, "pnpm": { "peerDependencyRules": { diff --git a/api.planx.uk/pnpm-lock.yaml b/api.planx.uk/pnpm-lock.yaml index 2f47d1001f..82da7df72c 100644 --- a/api.planx.uk/pnpm-lock.yaml +++ b/api.planx.uk/pnpm-lock.yaml @@ -114,7 +114,7 @@ dependencies: version: 3.3.7 notifications-node-client: specifier: ^8.1.0 - version: 8.1.0 + version: 8.2.0 passport: specifier: ^0.5.3 version: 0.5.3 @@ -214,14 +214,14 @@ 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 @@ -239,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) @@ -269,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.21.4)(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 + version: 5.5.2 uuid: - specifier: ^9.0.1 - version: 9.0.1 + specifier: ^10.0.0 + version: 10.0.0 packages: @@ -2139,8 +2139,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: @@ -2159,7 +2159,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: @@ -2171,23 +2171,23 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.11.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.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) + '@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: @@ -2199,10 +2199,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.2) debug: 4.3.5 eslint: 8.57.0 - typescript: 5.4.3 + typescript: 5.5.2 transitivePeerDependencies: - supports-color dev: true @@ -2215,7 +2215,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: @@ -2225,12 +2225,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.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 @@ -2240,7 +2240,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: @@ -2255,13 +2255,13 @@ packages: 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: @@ -2272,7 +2272,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 @@ -3695,7 +3695,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: @@ -3708,8 +3708,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: @@ -6200,8 +6200,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 @@ -7613,7 +7613,7 @@ packages: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} 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.21.4)(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 @@ -7644,11 +7644,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 @@ -7667,16 +7667,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: @@ -7702,7 +7702,7 @@ packages: 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 @@ -7725,14 +7725,14 @@ packages: 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: @@ -7792,9 +7792,10 @@ 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 /uid2@0.0.4: @@ -7898,18 +7899,15 @@ packages: /uuid@10.0.0: resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} hasBin: true - dev: false /uuid@8.0.0: resolution: {integrity: sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==} + hasBin: true dev: false /uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - dev: true - - /uuid@9.0.1: - resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true dev: true /v8-compile-cache-lib@3.0.1: From 496bc86cdc1d11bdccbf82d05d565ab0b9c78166 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Jul 2024 14:58:53 +0100 Subject: [PATCH 087/150] [skip pizza] bump prettier from 3.2.4 to 3.3.2 in /e2e (#3356) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- e2e/package.json | 2 +- e2e/pnpm-lock.yaml | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/e2e/package.json b/e2e/package.json index 5151d20aed..e9a5719acc 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -28,7 +28,7 @@ "eslint": "^8.57.0", "husky": "^8.0.3", "lint-staged": "^15.2.0", - "prettier": "^3.2.4", + "prettier": "^3.3.2", "typescript": "^5.4.3" } } diff --git a/e2e/pnpm-lock.yaml b/e2e/pnpm-lock.yaml index c367e2a3d4..65d9f4bfa2 100644 --- a/e2e/pnpm-lock.yaml +++ b/e2e/pnpm-lock.yaml @@ -24,8 +24,8 @@ 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 @@ -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 From 45cccffe11b98895d53526225f34d4a190a3c943 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Jul 2024 14:59:33 +0100 Subject: [PATCH 088/150] chore(deps): bump pg from 8.11.3 to 8.12.0 in /sharedb.planx.uk (#3354) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- sharedb.planx.uk/package.json | 2 +- sharedb.planx.uk/pnpm-lock.yaml | 39 ++++++++++++--------------------- 2 files changed, 15 insertions(+), 26 deletions(-) diff --git a/sharedb.planx.uk/package.json b/sharedb.planx.uk/package.json index 9841fc0c35..f69b3a89b9 100644 --- a/sharedb.planx.uk/package.json +++ b/sharedb.planx.uk/package.json @@ -7,7 +7,7 @@ "dompurify": "^3.1.2", "jsdom": "^24.1.0", "jsonwebtoken": "^8.5.1", - "pg": "^8.11.3", + "pg": "^8.12.0", "sharedb": "^4.1.1", "ws": "^8.17.1" }, diff --git a/sharedb.planx.uk/pnpm-lock.yaml b/sharedb.planx.uk/pnpm-lock.yaml index 60db207a2a..efc01ef711 100644 --- a/sharedb.planx.uk/pnpm-lock.yaml +++ b/sharedb.planx.uk/pnpm-lock.yaml @@ -23,8 +23,8 @@ dependencies: specifier: '>=9.0.0' version: 9.0.1 pg: - specifier: ^8.11.3 - version: 8.11.3 + specifier: ^8.12.0 + version: 8.12.0 sharedb: specifier: ^4.1.1 version: 4.1.1 @@ -68,11 +68,6 @@ packages: resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} dev: false - /buffer-writer@2.0.0: - resolution: {integrity: sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==} - engines: {node: '>=4'} - dev: false - /combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} @@ -378,10 +373,6 @@ packages: resolution: {integrity: sha512-wf5fci7GGpMYRDnbbdIFQymvhsbFACMHtxjivQo5KgvAHlxekyfJ9aPsRr6YfFQthQkk4bmsl5yESrZwC/oMYQ==} dev: false - /packet-reader@1.0.0: - resolution: {integrity: sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==} - dev: false - /parse5@7.1.2: resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} dependencies: @@ -398,8 +389,8 @@ packages: dev: false optional: true - /pg-connection-string@2.6.2: - resolution: {integrity: sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==} + /pg-connection-string@2.6.4: + resolution: {integrity: sha512-v+Z7W/0EO707aNMaAEfiGnGL9sxxumwLl2fJvCQtMn9Fxsg+lPpPkdcyBSv/KFgpGdYkMfn+EI1Or2EHjpgLCA==} dev: false /pg-int8@1.0.1: @@ -407,16 +398,16 @@ packages: engines: {node: '>=4.0.0'} dev: false - /pg-pool@3.6.1(pg@8.11.3): - resolution: {integrity: sha512-jizsIzhkIitxCGfPRzJn1ZdcosIt3pz9Sh3V01fm1vZnbnCMgmGl5wvGGdNN2EL9Rmb0EcFoCkixH4Pu+sP9Og==} + /pg-pool@3.6.2(pg@8.12.0): + resolution: {integrity: sha512-Htjbg8BlwXqSBQ9V8Vjtc+vzf/6fVUuak/3/XXKA9oxZprwW3IMDQTGHP+KDmVL7rtd+R1QjbnCFPuTHm3G4hg==} peerDependencies: pg: '>=8.0' dependencies: - pg: 8.11.3 + pg: 8.12.0 dev: false - /pg-protocol@1.6.0: - resolution: {integrity: sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==} + /pg-protocol@1.6.1: + resolution: {integrity: sha512-jPIlvgoD63hrEuihvIg+tJhoGjUsLPn6poJY9N5CnlPd91c2T18T/9zBtLxZSb1EhYxBRoZJtzScCaWlYLtktg==} dev: false /pg-types@2.2.0: @@ -430,8 +421,8 @@ packages: postgres-interval: 1.2.0 dev: false - /pg@8.11.3: - resolution: {integrity: sha512-+9iuvG8QfaaUrrph+kpF24cXkH1YOOUeArRNYIxq1viYHZagBxrTno7cecY1Fa44tJeZvaoG+Djpkc3JwehN5g==} + /pg@8.12.0: + resolution: {integrity: sha512-A+LHUSnwnxrnL/tZ+OLfqR1SxLN3c/pgDztZ47Rpbsd4jUytsTtwQo/TLPRzPJMp/1pbhYVhH9cuSZLAajNfjQ==} engines: {node: '>= 8.0.0'} peerDependencies: pg-native: '>=3.0.1' @@ -439,11 +430,9 @@ packages: pg-native: optional: true dependencies: - buffer-writer: 2.0.0 - packet-reader: 1.0.0 - pg-connection-string: 2.6.2 - pg-pool: 3.6.1(pg@8.11.3) - pg-protocol: 1.6.0 + pg-connection-string: 2.6.4 + pg-pool: 3.6.2(pg@8.12.0) + pg-protocol: 1.6.1 pg-types: 2.2.0 pgpass: 1.0.5 optionalDependencies: From 6d6e3d3f8c7ada3c6e777b2b02741f70403f5902 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Jul 2024 15:05:31 +0100 Subject: [PATCH 089/150] [skip pizza] bump uuid from 9.0.0 to 10.0.0 in /hasura.planx.uk/tests (#3347) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Dafydd Llŷr Pearson --- hasura.planx.uk/tests/package.json | 2 +- hasura.planx.uk/tests/pnpm-lock.yaml | 12 ++++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/hasura.planx.uk/tests/package.json b/hasura.planx.uk/tests/package.json index 3bdcc77c1b..b5f2938381 100644 --- a/hasura.planx.uk/tests/package.json +++ b/hasura.planx.uk/tests/package.json @@ -9,7 +9,7 @@ "isomorphic-fetch": "^3.0.0", "jest": "^29.7.0", "jsonwebtoken": "^9.0.1", - "uuid": "^9.0.0" + "uuid": "^10.0.0" }, "jest": { "setupFilesAfterEnv": [ diff --git a/hasura.planx.uk/tests/pnpm-lock.yaml b/hasura.planx.uk/tests/pnpm-lock.yaml index 5cc294ccda..2aa8871dcd 100644 --- a/hasura.planx.uk/tests/pnpm-lock.yaml +++ b/hasura.planx.uk/tests/pnpm-lock.yaml @@ -21,8 +21,8 @@ dependencies: specifier: ^9.0.1 version: 9.0.1 uuid: - specifier: ^9.0.0 - version: 9.0.0 + specifier: ^10.0.0 + version: 10.0.0 packages: @@ -1392,6 +1392,7 @@ packages: /jest-cli@29.7.0: resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -1742,6 +1743,7 @@ packages: /jest@29.7.0: resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -2231,6 +2233,7 @@ packages: /update-browserslist-db@1.0.16(browserslist@4.23.1): resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==} + hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: @@ -2239,8 +2242,9 @@ packages: picocolors: 1.0.1 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 /v8-to-istanbul@9.3.0: From 9374fc12b453ac19f2be0a496550813e62f3d451 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Jul 2024 15:26:19 +0100 Subject: [PATCH 090/150] chore(deps-dev): bump eslint-plugin-simple-import-sort from 10.0.0 to 12.1.0 in /editor.planx.uk (#3352) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Dafydd Llŷr Pearson --- editor.planx.uk/package.json | 2 +- editor.planx.uk/pnpm-lock.yaml | 37 ++++++++++++++++++++++++++++------ 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/editor.planx.uk/package.json b/editor.planx.uk/package.json index 044a921413..a580d3f5b0 100644 --- a/editor.planx.uk/package.json +++ b/editor.planx.uk/package.json @@ -138,7 +138,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", diff --git a/editor.planx.uk/pnpm-lock.yaml b/editor.planx.uk/pnpm-lock.yaml index 3569f494b1..4f6000edb3 100644 --- a/editor.planx.uk/pnpm-lock.yaml +++ b/editor.planx.uk/pnpm-lock.yaml @@ -413,8 +413,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) @@ -3388,6 +3388,7 @@ packages: /@craco/craco@7.1.0(@swc/core@1.6.6)(@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 peerDependencies: react-scripts: ^5.0.0 dependencies: @@ -6758,7 +6759,7 @@ packages: '@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 @@ -8491,7 +8492,6 @@ packages: /@types/lodash@4.17.6: resolution: {integrity: sha512-OpXEVoCKSS3lQqjx9GGGOapBeuW5eUboYHRlHP9urXPX25IKZ6AnP5ZRxtVf63iieUbsHxLn8NQ5Nlftc6yzAA==} - dev: false /@types/mdast@3.0.15: resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} @@ -9524,6 +9524,7 @@ packages: /autoprefixer@10.4.16(postcss@8.4.32): resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==} engines: {node: ^10 || ^12 || >=14} + hasBin: true peerDependencies: postcss: ^8.1.0 dependencies: @@ -10780,6 +10781,7 @@ packages: /css-blank-pseudo@3.0.3(postcss@8.4.32): resolution: {integrity: sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==} engines: {node: ^12 || ^14 || >=16} + hasBin: true peerDependencies: postcss: ^8.4 dependencies: @@ -10807,6 +10809,7 @@ packages: /css-has-pseudo@3.0.4(postcss@8.4.32): resolution: {integrity: sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==} engines: {node: ^12 || ^14 || >=16} + hasBin: true peerDependencies: postcss: ^8.4 dependencies: @@ -10879,6 +10882,7 @@ packages: /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 dependencies: @@ -11975,6 +11979,7 @@ packages: /eslint-config-prettier@9.0.0(eslint@8.44.0): resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==} + hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: @@ -12179,8 +12184,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: @@ -13165,6 +13170,7 @@ packages: /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.2.1 jackspeak: 3.4.0 @@ -13175,6 +13181,7 @@ 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 @@ -13709,6 +13716,7 @@ 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 @@ -14277,6 +14285,7 @@ packages: /jest-cli@27.5.1: resolution: {integrity: sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + hasBin: true peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -14856,6 +14865,7 @@ packages: /jest@27.5.1: resolution: {integrity: sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + hasBin: true peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -14899,6 +14909,7 @@ packages: /js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true dependencies: argparse: 1.0.10 esprima: 4.0.1 @@ -14910,6 +14921,7 @@ packages: /jscodeshift@0.15.2(@babel/preset-env@7.22.6): resolution: {integrity: sha512-FquR7Okgmc4Sd0aEDwqho3rEiKR3BdvuG9jfdHjLJ6JQoWSMpavug3AoIfnfWhxFlf+5pzQh8qjqz0DWFrNQzA==} + hasBin: true peerDependencies: '@babel/preset-env': ^7.1.6 peerDependenciesMeta: @@ -14943,6 +14955,7 @@ packages: /jscodeshift@0.15.2(@babel/preset-env@7.24.7): resolution: {integrity: sha512-FquR7Okgmc4Sd0aEDwqho3rEiKR3BdvuG9jfdHjLJ6JQoWSMpavug3AoIfnfWhxFlf+5pzQh8qjqz0DWFrNQzA==} + hasBin: true peerDependencies: '@babel/preset-env': ^7.1.6 peerDependenciesMeta: @@ -15446,6 +15459,7 @@ packages: /loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true dependencies: js-tokens: 4.0.0 @@ -16015,12 +16029,14 @@ packages: /mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true dependencies: minimist: 1.2.8 /mkdirp@1.0.4: resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} engines: {node: '>=10'} + hasBin: true /mkdirp@3.0.1: resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} @@ -17975,6 +17991,7 @@ packages: /react-app-rewired@2.2.1(react-scripts@5.0.1): resolution: {integrity: sha512-uFQWTErXeLDrMzOJHKp0h8P1z0LV9HzPGsJ6adOtGlA/B9WfT6Shh4j2tLTTGlXOfiVx6w6iWpp7SOC5pvk+gA==} + hasBin: true peerDependencies: react-scripts: '>=2.1.3' dependencies: @@ -18372,6 +18389,7 @@ packages: /react-scripts@5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(@swc/core@1.6.6)(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 peerDependencies: eslint: '*' react: '>= 16' @@ -18881,6 +18899,7 @@ packages: /resolve@2.0.0-next.5: resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + hasBin: true dependencies: is-core-module: 2.14.0 path-parse: 1.0.7 @@ -20368,6 +20387,7 @@ packages: /ts-node@10.9.2(@swc/core@1.6.6)(@types/node@17.0.45)(typescript@5.4.3): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true peerDependencies: '@swc/core': '>=1.2.50' '@swc/wasm': '>=1.2.50' @@ -20767,6 +20787,7 @@ packages: /update-browserslist-db@1.0.16(browserslist@4.23.1): resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==} + hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: @@ -20909,6 +20930,7 @@ packages: /uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true /uuid@9.0.1: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} @@ -21059,6 +21081,7 @@ packages: /webpack-dev-server@4.15.2(webpack@5.91.0): resolution: {integrity: sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==} engines: {node: '>= 12.13.0'} + hasBin: true peerDependencies: webpack: ^4.37.0 || ^5.0.0 webpack-cli: '*' @@ -21160,6 +21183,7 @@ packages: /webpack@5.91.0(@swc/core@1.6.6)(esbuild@0.21.3): resolution: {integrity: sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==} engines: {node: '>=10.13.0'} + hasBin: true peerDependencies: webpack-cli: '*' peerDependenciesMeta: @@ -21675,6 +21699,7 @@ packages: id: github.com/theopensystemslab/planx-core/b975cf9 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) From a0032b113f2d01a477908fca5d640601dcc86469 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Jul 2024 15:34:52 +0100 Subject: [PATCH 091/150] chore(deps-dev): bump typescript from 5.4.3 to 5.5.2 in /api.planx.uk (#3345) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- api.planx.uk/package.json | 2 +- api.planx.uk/pnpm-lock.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/api.planx.uk/package.json b/api.planx.uk/package.json index e334fd8ce3..a62b2a088b 100644 --- a/api.planx.uk/package.json +++ b/api.planx.uk/package.json @@ -112,7 +112,7 @@ "supertest": "^7.0.0", "ts-jest": "^29.1.1", "ts-node-dev": "^2.0.0", - "typescript": "^5.4.3", + "typescript": "^5.5.2", "uuid": "^10.0.0" }, "pnpm": { diff --git a/api.planx.uk/pnpm-lock.yaml b/api.planx.uk/pnpm-lock.yaml index 82da7df72c..708f3f9dad 100644 --- a/api.planx.uk/pnpm-lock.yaml +++ b/api.planx.uk/pnpm-lock.yaml @@ -274,7 +274,7 @@ devDependencies: specifier: ^2.0.0 version: 2.0.0(@types/node@18.19.13)(typescript@5.5.2) typescript: - specifier: ^5.4.3 + specifier: ^5.5.2 version: 5.5.2 uuid: specifier: ^10.0.0 From 8ba938d41934a1c485c7c7d7a9e5c873c2aef5e0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Jul 2024 15:56:14 +0100 Subject: [PATCH 092/150] chore(deps-dev): bump esbuild from 0.21.4 to 0.22.0 in /api.planx.uk (#3343) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- api.planx.uk/package.json | 2 +- api.planx.uk/pnpm-lock.yaml | 217 +++++++++++++++++++----------------- 2 files changed, 115 insertions(+), 104 deletions(-) diff --git a/api.planx.uk/package.json b/api.planx.uk/package.json index a62b2a088b..b91b145f19 100644 --- a/api.planx.uk/package.json +++ b/api.planx.uk/package.json @@ -96,7 +96,7 @@ "@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", diff --git a/api.planx.uk/pnpm-lock.yaml b/api.planx.uk/pnpm-lock.yaml index 708f3f9dad..2942a9fade 100644 --- a/api.planx.uk/pnpm-lock.yaml +++ b/api.planx.uk/pnpm-lock.yaml @@ -226,11 +226,11 @@ devDependencies: 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 @@ -269,7 +269,7 @@ 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.5.2) + 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.5.2) @@ -940,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 @@ -3622,7 +3631,7 @@ 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' @@ -3630,39 +3639,41 @@ packages: '@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: @@ -7613,7 +7624,7 @@ packages: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} dev: true - /ts-jest@29.1.1(@babel/core@7.24.0)(esbuild@0.21.4)(jest@29.7.0)(typescript@5.5.2): + /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 @@ -7636,7 +7647,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 From 47bfd259a16c09aefa823c1ebc3bde0ce46afa09 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Jul 2024 15:57:14 +0100 Subject: [PATCH 093/150] chore(deps): bump notifications-node-client from 8.1.0 to 8.2.0 in /api.planx.uk (#3344) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- api.planx.uk/package.json | 2 +- api.planx.uk/pnpm-lock.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/api.planx.uk/package.json b/api.planx.uk/package.json index b91b145f19..be60eacc27 100644 --- a/api.planx.uk/package.json +++ b/api.planx.uk/package.json @@ -38,7 +38,7 @@ "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", diff --git a/api.planx.uk/pnpm-lock.yaml b/api.planx.uk/pnpm-lock.yaml index 2942a9fade..79b0f90388 100644 --- a/api.planx.uk/pnpm-lock.yaml +++ b/api.planx.uk/pnpm-lock.yaml @@ -113,7 +113,7 @@ dependencies: specifier: ^3.3.7 version: 3.3.7 notifications-node-client: - specifier: ^8.1.0 + specifier: ^8.2.0 version: 8.2.0 passport: specifier: ^0.5.3 From 433f09e2def5e28c349cacca745725143637f522 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Jul 2024 16:26:25 +0100 Subject: [PATCH 094/150] chore(deps): bump @turf/area from 6.5.0 to 7.0.0 in /editor.planx.uk (#3348) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Dafydd Llŷr Pearson --- editor.planx.uk/package.json | 2 +- editor.planx.uk/pnpm-lock.yaml | 30 ++++++++++++------- .../FindProperty/Public/Public.test.tsx | 8 ++--- 3 files changed, 25 insertions(+), 15 deletions(-) diff --git a/editor.planx.uk/package.json b/editor.planx.uk/package.json index a580d3f5b0..02cc9322ba 100644 --- a/editor.planx.uk/package.json +++ b/editor.planx.uk/package.json @@ -35,7 +35,7 @@ "@tiptap/pm": "^2.0.3", "@tiptap/react": "^2.4.0", "@tiptap/suggestion": "^2.0.3", - "@turf/area": "^6.5.0", + "@turf/area": "^7.0.0", "@turf/buffer": "^6.5.0", "@turf/helpers": "^6.5.0", "array-move": "^4.0.0", diff --git a/editor.planx.uk/pnpm-lock.yaml b/editor.planx.uk/pnpm-lock.yaml index 4f6000edb3..f20d06333d 100644 --- a/editor.planx.uk/pnpm-lock.yaml +++ b/editor.planx.uk/pnpm-lock.yaml @@ -108,8 +108,8 @@ 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/buffer': specifier: ^6.5.0 version: 6.5.0 @@ -8192,11 +8192,12 @@ 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: @@ -8235,6 +8236,13 @@ packages: 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: @@ -8247,6 +8255,12 @@ packages: '@turf/helpers': 6.5.0 dev: false + /@turf/meta@7.0.0: + resolution: {integrity: sha512-cEXr13uFwhXq5mFBy0IK1U/QepE5qgk3zXpBYsla3lYV7cB83Vh+NNUR+r0/w/QoJqest1TG4H20F9tGYWPi/g==} + dependencies: + '@turf/helpers': 7.0.0 + dev: false + /@turf/projection@6.5.0: resolution: {integrity: sha512-/Pgh9mDvQWWu8HRxqpM+tKz8OzgauV+DiOcr3FCjD6ubDnrrmMJlsf6fFJmggw93mtVPrZRL6yyi9aYCQBOIvg==} dependencies: @@ -11187,7 +11201,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==} @@ -11707,7 +11720,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==} @@ -13780,7 +13792,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==} @@ -19664,7 +19675,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==} 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", From 0ddc01264fef057c8f31a2f61fb940129d18bec2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Jul 2024 18:06:13 +0100 Subject: [PATCH 095/150] [skip pizza] bump typescript from 5.4.3 to 5.5.3 in /e2e (#3360) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Dafydd Llŷr Pearson --- e2e/package.json | 2 +- e2e/pnpm-lock.yaml | 54 +++++++++++++++--------------- e2e/tests/ui-driven/package.json | 2 +- e2e/tests/ui-driven/pnpm-lock.yaml | 31 ++--------------- 4 files changed, 32 insertions(+), 57 deletions(-) diff --git a/e2e/package.json b/e2e/package.json index e9a5719acc..5bdc4466f5 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -29,6 +29,6 @@ "husky": "^8.0.3", "lint-staged": "^15.2.0", "prettier": "^3.3.2", - "typescript": "^5.4.3" + "typescript": "^5.5.3" } } diff --git a/e2e/pnpm-lock.yaml b/e2e/pnpm-lock.yaml index 65d9f4bfa2..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 @@ -27,8 +27,8 @@ devDependencies: 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 @@ -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/ui-driven/package.json b/e2e/tests/ui-driven/package.json index 2d115ebd2d..7c5adb48b6 100644 --- a/e2e/tests/ui-driven/package.json +++ b/e2e/tests/ui-driven/package.json @@ -12,7 +12,7 @@ "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", diff --git a/e2e/tests/ui-driven/pnpm-lock.yaml b/e2e/tests/ui-driven/pnpm-lock.yaml index e20757a273..74f6d4791b 100644 --- a/e2e/tests/ui-driven/pnpm-lock.yaml +++ b/e2e/tests/ui-driven/pnpm-lock.yaml @@ -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 @@ -382,14 +382,6 @@ packages: resolution: {integrity: sha512-dWO2pw8hhi+WrXq1YJy2yCuWoL20PddgGaqTgVe4cOS9Q6qklXCiA1tJEqX6BEwRNSCP84/afac9hd4MS+zEUA==} dev: false - /@graphql-typed-document-node/core@3.2.0(graphql@16.8.1): - 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 - dev: false - /@graphql-typed-document-node/core@3.2.0(graphql@16.9.0): resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} peerDependencies: @@ -1618,18 +1610,6 @@ packages: /graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - /graphql-request@6.1.0(graphql@16.8.1): - resolution: {integrity: sha512-p+XPfS4q7aIpKVcgmnZKhMNqhltk20hfXtkaIkTfjjmiKMJ5xrt5c743cL03y/K7y1rg3WrIC49xGiEQ4mxdNw==} - peerDependencies: - graphql: 14 - 16 - dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1) - cross-fetch: 3.1.8 - graphql: 16.8.1 - transitivePeerDependencies: - - encoding - dev: false - /graphql-request@6.1.0(graphql@16.9.0): resolution: {integrity: sha512-p+XPfS4q7aIpKVcgmnZKhMNqhltk20hfXtkaIkTfjjmiKMJ5xrt5c743cL03y/K7y1rg3WrIC49xGiEQ4mxdNw==} peerDependencies: @@ -1642,11 +1622,6 @@ packages: - encoding dev: false - /graphql@16.8.1: - resolution: {integrity: sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==} - 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} From dc215a265eea51f5156f29760bc0e036d4865ca3 Mon Sep 17 00:00:00 2001 From: Rory Doak <138574807+RODO94@users.noreply.github.com> Date: Wed, 3 Jul 2024 09:13:59 +0100 Subject: [PATCH 096/150] feat: Repointing data fetches from ``Teams`` table to ``team_settings`` table (#3334) --- api.planx.uk/package.json | 2 +- api.planx.uk/pnpm-lock.yaml | 8 +- e2e/tests/api-driven/package.json | 2 +- e2e/tests/api-driven/pnpm-lock.yaml | 11 +- e2e/tests/ui-driven/package.json | 2 +- e2e/tests/ui-driven/pnpm-lock.yaml | 9 +- editor.planx.uk/package.json | 2 +- editor.planx.uk/pnpm-lock.yaml | 807 +++++++----------- .../src/components/Header.test.tsx | 22 +- .../src/pages/FlowEditor/lib/store/team.ts | 14 +- editor.planx.uk/src/routes/views/draft.tsx | 10 +- .../src/routes/views/published.tsx | 11 +- .../src/routes/views/standalone.tsx | 10 +- .../ExternalPlanningSiteDialog.stories.tsx | 6 - .../ui/public/ExternalPlanningSiteDialog.tsx | 14 +- hasura.planx.uk/metadata/tables.yaml | 80 +- 16 files changed, 429 insertions(+), 581 deletions(-) diff --git a/api.planx.uk/package.json b/api.planx.uk/package.json index be60eacc27..89b12c4858 100644 --- a/api.planx.uk/package.json +++ b/api.planx.uk/package.json @@ -5,7 +5,7 @@ "packageManager": "pnpm@8.6.6", "dependencies": { "@airbrake/node": "^2.1.8", - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#b975cf9", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#462914f", "@types/isomorphic-fetch": "^0.0.36", "adm-zip": "^0.5.10", "aws-sdk": "^2.1467.0", diff --git a/api.planx.uk/pnpm-lock.yaml b/api.planx.uk/pnpm-lock.yaml index 79b0f90388..9aecb6701a 100644 --- a/api.planx.uk/pnpm-lock.yaml +++ b/api.planx.uk/pnpm-lock.yaml @@ -14,8 +14,8 @@ dependencies: specifier: ^2.1.8 version: 2.1.8 '@opensystemslab/planx-core': - specifier: git+https://github.com/theopensystemslab/planx-core#b975cf9 - version: github.com/theopensystemslab/planx-core/b975cf9 + specifier: git+https://github.com/theopensystemslab/planx-core#462914f + version: github.com/theopensystemslab/planx-core/462914f '@types/isomorphic-fetch': specifier: ^0.0.36 version: 0.0.36 @@ -8202,8 +8202,8 @@ packages: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} dev: false - github.com/theopensystemslab/planx-core/b975cf9: - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/b975cf9} + github.com/theopensystemslab/planx-core/462914f: + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/462914f} name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true diff --git a/e2e/tests/api-driven/package.json b/e2e/tests/api-driven/package.json index 6fb4c3bbd6..1153fc789c 100644 --- a/e2e/tests/api-driven/package.json +++ b/e2e/tests/api-driven/package.json @@ -7,7 +7,7 @@ "packageManager": "pnpm@8.6.6", "dependencies": { "@cucumber/cucumber": "^9.3.0", - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#b975cf9", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#462914f", "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 cf097777b1..5c6aa2f01d 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#b975cf9 - version: github.com/theopensystemslab/planx-core/b975cf9 + specifier: git+https://github.com/theopensystemslab/planx-core#462914f + version: github.com/theopensystemslab/planx-core/462914f axios: specifier: ^1.6.8 version: 1.6.8 @@ -258,6 +258,7 @@ packages: /@cucumber/gherkin-streams@5.0.1(@cucumber/gherkin@26.2.0)(@cucumber/message-streams@4.0.1)(@cucumber/messages@22.0.0): resolution: {integrity: sha512-/7VkIE/ASxIP/jd4Crlp4JHXqdNFxPGQokqWqsaCCiqBiu5qHoKMxcWNlp9njVL/n9yN4S08OmY3ZR8uC5x74Q==} + hasBin: true peerDependencies: '@cucumber/gherkin': '>=22.0.0' '@cucumber/message-streams': '>=4.0.0' @@ -2806,6 +2807,7 @@ packages: /ts-node@10.9.1(@types/node@18.16.1)(typescript@5.4.3): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} + hasBin: true peerDependencies: '@swc/core': '>=1.2.50' '@swc/wasm': '>=1.2.50' @@ -3051,10 +3053,11 @@ packages: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} dev: false - github.com/theopensystemslab/planx-core/b975cf9: - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/b975cf9} + github.com/theopensystemslab/planx-core/462914f: + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/462914f} name: '@opensystemslab/planx-core' version: 1.0.0 + prepare: true requiresBuild: true dependencies: '@emotion/react': 11.11.4(react@18.3.1) diff --git a/e2e/tests/ui-driven/package.json b/e2e/tests/ui-driven/package.json index 7c5adb48b6..0faffd78dd 100644 --- a/e2e/tests/ui-driven/package.json +++ b/e2e/tests/ui-driven/package.json @@ -8,7 +8,7 @@ "postinstall": "./install-dependencies.sh" }, "dependencies": { - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#b975cf9", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#462914f", "axios": "^1.6.8", "dotenv": "^16.3.1", "eslint": "^8.56.0", diff --git a/e2e/tests/ui-driven/pnpm-lock.yaml b/e2e/tests/ui-driven/pnpm-lock.yaml index 74f6d4791b..84ffe4dbb5 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#b975cf9 - version: github.com/theopensystemslab/planx-core/b975cf9 + specifier: git+https://github.com/theopensystemslab/planx-core#462914f + version: github.com/theopensystemslab/planx-core/462914f axios: specifier: ^1.6.8 version: 1.6.8 @@ -2780,10 +2780,11 @@ packages: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} dev: false - github.com/theopensystemslab/planx-core/b975cf9: - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/b975cf9} + github.com/theopensystemslab/planx-core/462914f: + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/462914f} name: '@opensystemslab/planx-core' version: 1.0.0 + prepare: true requiresBuild: true dependencies: '@emotion/react': 11.11.4(react@18.3.1) diff --git a/editor.planx.uk/package.json b/editor.planx.uk/package.json index 02cc9322ba..bc7dc36125 100644 --- a/editor.planx.uk/package.json +++ b/editor.planx.uk/package.json @@ -13,7 +13,7 @@ "@mui/material": "^5.15.2", "@mui/utils": "^5.15.2", "@opensystemslab/map": "^0.8.3", - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#b975cf9", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#60158b2", "@tiptap/core": "^2.4.0", "@tiptap/extension-bold": "^2.0.3", "@tiptap/extension-bubble-menu": "^2.1.13", diff --git a/editor.planx.uk/pnpm-lock.yaml b/editor.planx.uk/pnpm-lock.yaml index f20d06333d..dcd836ee57 100644 --- a/editor.planx.uk/pnpm-lock.yaml +++ b/editor.planx.uk/pnpm-lock.yaml @@ -42,8 +42,8 @@ dependencies: specifier: ^0.8.3 version: 0.8.3 '@opensystemslab/planx-core': - specifier: git+https://github.com/theopensystemslab/planx-core#b975cf9 - version: github.com/theopensystemslab/planx-core/b975cf9(@types/react@18.2.45) + specifier: git+https://github.com/theopensystemslab/planx-core#60158b2 + version: github.com/theopensystemslab/planx-core/60158b2(@types/react@18.2.45) '@tiptap/core': specifier: ^2.4.0 version: 2.4.0(@tiptap/pm@2.0.3) @@ -223,7 +223,7 @@ dependencies: version: 0.15.0(navi@0.15.0)(react-dom@18.2.0)(react-navi@0.15.0)(react@18.2.0) react-scripts: specifier: ^5.0.1 - version: 5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(@swc/core@1.6.6)(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.3)(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) @@ -291,7 +291,7 @@ devDependencies: version: 7.23.3(@babel/core@7.22.5) '@craco/craco': specifier: ^7.1.0 - version: 7.1.0(@swc/core@1.6.6)(@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.3)(@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) @@ -321,7 +321,7 @@ devDependencies: version: 7.6.7(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.3) '@storybook/react-webpack5': specifier: ^7.6.7 - version: 7.6.7(@babel/core@7.22.5)(@swc/core@1.6.6)(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.3)(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 @@ -336,7 +336,7 @@ devDependencies: version: 14.2.1(react-dom@18.2.0)(react@18.2.0) '@testing-library/user-event': specifier: ^14.4.3 - version: 14.4.3(@testing-library/dom@10.2.0) + version: 14.4.3(@testing-library/dom@10.1.0) '@types/dompurify': specifier: ^3.0.5 version: 3.0.5 @@ -468,7 +468,7 @@ devDependencies: version: 5.4.3 webpack: specifier: ^5.91.0 - version: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) + version: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) packages: @@ -3385,7 +3385,7 @@ packages: dev: true optional: true - /@craco/craco@7.1.0(@swc/core@1.6.6)(@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.3)(@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 @@ -3394,10 +3394,10 @@ packages: dependencies: autoprefixer: 10.4.16(postcss@8.4.32) cosmiconfig: 7.1.0 - cosmiconfig-typescript-loader: 1.0.9(@swc/core@1.6.6)(@types/node@17.0.45)(cosmiconfig@7.1.0)(typescript@5.4.3) + cosmiconfig-typescript-loader: 1.0.9(@swc/core@1.6.3)(@types/node@17.0.45)(cosmiconfig@7.1.0)(typescript@5.4.3) cross-spawn: 7.0.3 lodash: 4.17.21 - react-scripts: 5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(@swc/core@1.6.6)(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.3)(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: @@ -4456,8 +4456,8 @@ packages: eslint-visitor-keys: 3.4.3 dev: false - /@eslint-community/regexpp@4.11.0: - resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==} + /@eslint-community/regexpp@4.10.1: + resolution: {integrity: sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} /@eslint/eslintrc@2.1.4: @@ -4489,40 +4489,40 @@ packages: resolution: {integrity: sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ==} dev: true - /@floating-ui/core@1.6.4: - resolution: {integrity: sha512-a4IowK4QkXl4SCWTGUR0INAfEOX3wtsYw3rKK5InQEHMGObkR8Xk44qYQD9P4r6HHw0iIfK6GUKECmY8sTkqRA==} + /@floating-ui/core@1.6.2: + resolution: {integrity: sha512-+2XpQV9LLZeanU4ZevzRnGFg2neDeKHgFLjP6YLW+tly0IvrhqT4u8enLGjLH3qeh85g19xY5rsAusfwTdn5lg==} dependencies: - '@floating-ui/utils': 0.2.4 + '@floating-ui/utils': 0.2.2 - /@floating-ui/dom@1.6.7: - resolution: {integrity: sha512-wmVfPG5o2xnKDU4jx/m4w5qva9FWHcnZ8BvzEe90D/RpwsJaTAVYPEPdQ8sbr/N8zZTAHlZUTQdqg8ZUbzHmng==} + /@floating-ui/dom@1.6.5: + resolution: {integrity: sha512-Nsdud2X65Dz+1RHjAIP0t8z5e2ff/IRbei6BqFrl1urT8sDVzM1HMQ+R0XcU5ceRfyO3I6ayeqIfh+6Wb8LGTw==} dependencies: - '@floating-ui/core': 1.6.4 - '@floating-ui/utils': 0.2.4 + '@floating-ui/core': 1.6.2 + '@floating-ui/utils': 0.2.2 - /@floating-ui/react-dom@2.1.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg==} + /@floating-ui/react-dom@2.1.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-lNzj5EQmEKn5FFKc04+zasr09h/uX8RtJRNj5gUXsSQIXHVWTVh+hVAg1vOMCexkX8EgvemMvIFpQfkosnVNyA==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' dependencies: - '@floating-ui/dom': 1.6.7 + '@floating-ui/dom': 1.6.5 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - /@floating-ui/react-dom@2.1.1(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg==} + /@floating-ui/react-dom@2.1.0(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-lNzj5EQmEKn5FFKc04+zasr09h/uX8RtJRNj5gUXsSQIXHVWTVh+hVAg1vOMCexkX8EgvemMvIFpQfkosnVNyA==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' dependencies: - '@floating-ui/dom': 1.6.7 + '@floating-ui/dom': 1.6.5 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) dev: false - /@floating-ui/utils@0.2.4: - resolution: {integrity: sha512-dWO2pw8hhi+WrXq1YJy2yCuWoL20PddgGaqTgVe4cOS9Q6qklXCiA1tJEqX6BEwRNSCP84/afac9hd4MS+zEUA==} + /@floating-ui/utils@0.2.2: + resolution: {integrity: sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==} /@focus-reactive/react-yaml@1.1.2(react@18.2.0): resolution: {integrity: sha512-X9/rmfuDHR+beDym2206RsD5m/5EfH26vVuGVbLXy7+BunPcVBRqwe2WbvCyoHloMUX7Ccp2xrLwmmPrvZ9hrA==} @@ -4983,6 +4983,7 @@ packages: /@mapbox/mapbox-gl-style-spec@13.28.0: resolution: {integrity: sha512-B8xM7Fp1nh5kejfIl4SWeY0gtIeewbuRencqO3cJDrCHZpaPg7uY+V8abuR+esMeuOjRl5cLhVTP40v+1ywxbg==} + hasBin: true dependencies: '@mapbox/jsonlint-lines-primitives': 2.0.2 '@mapbox/point-geometry': 0.1.0 @@ -5131,7 +5132,7 @@ packages: optional: true dependencies: '@babel/runtime': 7.24.7 - '@floating-ui/react-dom': 2.1.1(react-dom@18.2.0)(react@18.2.0) + '@floating-ui/react-dom': 2.1.0(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 @@ -5154,7 +5155,7 @@ packages: optional: true dependencies: '@babel/runtime': 7.24.7 - '@floating-ui/react-dom': 2.1.1(react-dom@18.3.1)(react@18.3.1) + '@floating-ui/react-dom': 2.1.0(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 @@ -5177,7 +5178,7 @@ packages: optional: true dependencies: '@babel/runtime': 7.24.7 - '@floating-ui/react-dom': 2.1.1(react-dom@18.2.0)(react@18.2.0) + '@floating-ui/react-dom': 2.1.0(react-dom@18.2.0)(react@18.2.0) '@mui/types': 7.2.14(@types/react@18.2.45) '@mui/utils': 5.15.20(@types/react@18.2.45)(react@18.2.0) '@popperjs/core': 2.11.8 @@ -5188,8 +5189,8 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@mui/core-downloads-tracker@5.15.21: - resolution: {integrity: sha512-dp9lXBaJZzJYeJfQY3Ow4Rb49QaCEdkl2KKYscdQHQm6bMJ+l4XPY3Cd9PCeeJTsHPIDJ60lzXbeRgs6sx/rpw==} + /@mui/core-downloads-tracker@5.15.20: + resolution: {integrity: sha512-DoL2ppgldL16utL8nNyj/P12f8mCNdx/Hb/AJnX9rLY4b52hCMIx1kH83pbXQ6uMy6n54M3StmEbvSGoj2OFuA==} dev: false /@mui/icons-material@5.15.2(@mui/material@5.15.2)(@types/react@18.2.45)(react@18.2.0): @@ -5263,7 +5264,7 @@ packages: '@emotion/react': 11.11.1(@types/react@18.2.45)(react@18.2.0) '@emotion/styled': 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.45)(react@18.2.0) '@mui/base': 5.0.0-beta.29(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) - '@mui/core-downloads-tracker': 5.15.21 + '@mui/core-downloads-tracker': 5.15.20 '@mui/system': 5.15.20(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.45)(react@18.2.0) '@mui/types': 7.2.14(@types/react@18.2.45) '@mui/utils': 5.15.2(@types/react@18.2.45)(react@18.2.0) @@ -5299,7 +5300,7 @@ packages: '@emotion/react': 11.11.4(@types/react@18.2.45)(react@18.3.1) '@emotion/styled': 11.11.5(@emotion/react@11.11.4)(@types/react@18.2.45)(react@18.3.1) '@mui/base': 5.0.0-beta.29(@types/react@18.2.45)(react-dom@18.3.1)(react@18.3.1) - '@mui/core-downloads-tracker': 5.15.21 + '@mui/core-downloads-tracker': 5.15.20 '@mui/system': 5.15.20(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(@types/react@18.2.45)(react@18.3.1) '@mui/types': 7.2.14(@types/react@18.2.45) '@mui/utils': 5.15.2(@types/react@18.2.45)(react@18.3.1) @@ -5584,7 +5585,7 @@ packages: lit: 3.1.4 ol: 9.2.4 ol-ext: 4.0.18(ol@9.2.4) - ol-mapbox-style: 12.3.4(ol@9.2.4) + ol-mapbox-style: 12.3.3(ol@9.2.4) postcode: 5.1.0 proj4: 2.11.0 rambda: 8.6.0 @@ -5634,7 +5635,7 @@ packages: react-refresh: 0.11.0 schema-utils: 4.2.0 source-map: 0.7.4 - webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) webpack-dev-server: 4.15.2(webpack@5.91.0) /@pmmmwh/react-refresh-webpack-plugin@0.5.15(react-refresh@0.14.0)(webpack@5.91.0): @@ -5671,7 +5672,7 @@ packages: react-refresh: 0.14.0 schema-utils: 4.2.0 source-map: 0.7.4 - webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) dev: true /@popperjs/core@2.11.8: @@ -5690,10 +5691,6 @@ packages: '@babel/runtime': 7.24.7 dev: true - /@radix-ui/primitive@1.1.0: - resolution: {integrity: sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==} - dev: true - /@radix-ui/react-arrow@1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==} peerDependencies: @@ -5739,29 +5736,6 @@ 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: @@ -5776,19 +5750,6 @@ packages: react: 18.2.0 dev: true - /@radix-ui/react-compose-refs@1.1.0(@types/react@18.2.45)(react@18.2.0): - resolution: {integrity: sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@types/react': 18.2.45 - react: 18.2.0 - dev: true - /@radix-ui/react-context@1.0.1(@types/react@18.2.45)(react@18.2.0): resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} peerDependencies: @@ -5803,19 +5764,6 @@ packages: react: 18.2.0 dev: true - /@radix-ui/react-context@1.1.0(@types/react@18.2.45)(react@18.2.0): - resolution: {integrity: sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@types/react': 18.2.45 - react: 18.2.0 - dev: true - /@radix-ui/react-direction@1.0.1(@types/react@18.2.45)(react@18.2.0): resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} peerDependencies: @@ -5830,19 +5778,6 @@ packages: react: 18.2.0 dev: true - /@radix-ui/react-direction@1.1.0(@types/react@18.2.45)(react@18.2.0): - resolution: {integrity: sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@types/react': 18.2.45 - react: 18.2.0 - dev: true - /@radix-ui/react-dismissable-layer@1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg==} peerDependencies: @@ -5920,20 +5855,6 @@ packages: react: 18.2.0 dev: true - /@radix-ui/react-id@1.1.0(@types/react@18.2.45)(react@18.2.0): - resolution: {integrity: sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.2.45)(react@18.2.0) - '@types/react': 18.2.45 - react: 18.2.0 - dev: true - /@radix-ui/react-popper@1.1.2(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-1CnGGfFi/bbqtJZZ0P/NQY20xdG3E0LALJaLUEoKwPLwl6PPPfbeiCqMVQnhoFRAxjJj4RpBRJzDmUgsex2tSg==} peerDependencies: @@ -5948,7 +5869,7 @@ packages: optional: true dependencies: '@babel/runtime': 7.24.7 - '@floating-ui/react-dom': 2.1.1(react-dom@18.2.0)(react@18.2.0) + '@floating-ui/react-dom': 2.1.0(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) @@ -6006,48 +5927,29 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true - /@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==} + /@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==} 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-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 + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 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) + '@babel/runtime': 7.24.7 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.45)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.45)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.45)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.45)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.45)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.45)(react@18.2.0) '@types/react': 18.2.45 '@types/react-dom': 18.2.18 react: 18.2.0 @@ -6095,20 +5997,21 @@ packages: react-remove-scroll: 2.5.5(@types/react@18.2.45)(react@18.2.0) dev: true - /@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==} + /@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==} 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 + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: '@types/react': optional: true '@types/react-dom': optional: true dependencies: - '@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) + '@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 react: 18.2.0 @@ -6130,88 +6033,77 @@ packages: 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: - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.2.45)(react@18.2.0) - '@types/react': 18.2.45 - react: 18.2.0 - dev: true - - /@radix-ui/react-toggle-group@1.1.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-PpTJV68dZU2oqqgq75Uzto5o/XfOVgkrJ9rulVmfTKxWp3HfUjHE6CP/WLRR4AzPX9HWxw7vFow2me85Yu+Naw==} + /@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==} 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 + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: '@types/react': optional: true '@types/react-dom': optional: true dependencies: - '@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) + '@babel/runtime': 7.24.7 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-context': 1.0.1(@types/react@18.2.45)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.45)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-toggle': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.45)(react@18.2.0) '@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.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==} + /@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==} 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 + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: '@types/react': optional: true '@types/react-dom': optional: true dependencies: - '@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) + '@babel/runtime': 7.24.7 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.45)(react@18.2.0) '@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.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==} + /@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==} 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 + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: '@types/react': optional: true '@types/react-dom': optional: true dependencies: - '@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) + '@babel/runtime': 7.24.7 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-context': 1.0.1(@types/react@18.2.45)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.45)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-separator': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-toggle-group': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) '@types/react': 18.2.45 '@types/react-dom': 18.2.18 react: 18.2.0 @@ -6232,19 +6124,6 @@ packages: react: 18.2.0 dev: true - /@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.2.45)(react@18.2.0): - resolution: {integrity: sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@types/react': 18.2.45 - react: 18.2.0 - dev: true - /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.2.45)(react@18.2.0): resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} peerDependencies: @@ -6260,20 +6139,6 @@ packages: react: 18.2.0 dev: true - /@radix-ui/react-use-controllable-state@1.1.0(@types/react@18.2.45)(react@18.2.0): - resolution: {integrity: sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.2.45)(react@18.2.0) - '@types/react': 18.2.45 - react: 18.2.0 - dev: true - /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.2.45)(react@18.2.0): resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} peerDependencies: @@ -6303,19 +6168,6 @@ packages: react: 18.2.0 dev: true - /@radix-ui/react-use-layout-effect@1.1.0(@types/react@18.2.45)(react@18.2.0): - resolution: {integrity: sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@types/react': 18.2.45 - react: 18.2.0 - dev: true - /@radix-ui/react-use-previous@1.0.1(@types/react@18.2.45)(react@18.2.0): resolution: {integrity: sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==} peerDependencies: @@ -6701,7 +6553,7 @@ packages: react: optional: true dependencies: - '@storybook/csf': 0.1.9 + '@storybook/csf': 0.1.8 '@storybook/global': 5.0.0 react: 18.2.0 ts-dedent: 2.2.0 @@ -6752,14 +6604,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.9 + '@storybook/csf': 0.1.8 '@storybook/docs-tools': 7.6.7 '@storybook/global': 5.0.0 '@storybook/manager-api': 7.6.7(react-dom@18.2.0)(react@18.2.0) '@storybook/preview-api': 7.6.7 '@storybook/theming': 7.6.7(react-dom@18.2.0)(react@18.2.0) '@storybook/types': 7.6.7 - '@types/lodash': 4.17.6 + '@types/lodash': 4.17.5 color-convert: 2.0.1 dequal: 2.0.3 lodash: 4.17.21 @@ -6820,15 +6672,15 @@ packages: '@storybook/node-logger': 7.6.7 '@storybook/preview': 7.6.7 '@storybook/preview-api': 7.6.7 - '@swc/core': 1.6.6 - '@types/node': 18.19.39 + '@swc/core': 1.6.3 + '@types/node': 18.19.36 '@types/semver': 7.5.8 babel-loader: 9.1.3(@babel/core@7.24.7)(webpack@5.91.0) browser-assert: 1.2.1 case-sensitive-paths-webpack-plugin: 2.4.0 constants-browserify: 1.0.0 css-loader: 6.10.0(webpack@5.91.0) - es-module-lexer: 1.5.4 + es-module-lexer: 1.5.3 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 @@ -6838,14 +6690,14 @@ packages: process: 0.11.10 semver: 7.6.2 style-loader: 3.3.4(webpack@5.91.0) - swc-loader: 0.2.6(@swc/core@1.6.6)(webpack@5.91.0) - terser-webpack-plugin: 5.3.10(@swc/core@1.6.6)(esbuild@0.21.3)(webpack@5.91.0) + swc-loader: 0.2.6(@swc/core@1.6.3)(webpack@5.91.0) + terser-webpack-plugin: 5.3.10(@swc/core@1.6.3)(esbuild@0.21.3)(webpack@5.91.0) ts-dedent: 2.2.0 typescript: 5.4.3 url: 0.11.3 util: 0.12.5 util-deprecate: 1.0.2 - webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.3)(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 @@ -6907,7 +6759,7 @@ packages: fs-extra: 11.2.0 get-npm-tarball-url: 2.1.0 giget: 1.2.3 - globby: 14.0.2 + globby: 14.0.1 jscodeshift: 0.15.2(@babel/preset-env@7.22.6) leven: 3.1.0 ora: 5.4.1 @@ -6954,13 +6806,13 @@ packages: '@babel/core': 7.24.7 '@babel/preset-env': 7.24.7(@babel/core@7.24.7) '@babel/types': 7.24.7 - '@storybook/csf': 0.1.9 + '@storybook/csf': 0.1.8 '@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.2 + globby: 14.0.1 jscodeshift: 0.15.2(@babel/preset-env@7.24.7) lodash: 4.17.21 prettier: 3.3.2 @@ -6977,9 +6829,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.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-toolbar': 1.0.4(@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.9 + '@storybook/csf': 0.1.8 '@storybook/global': 5.0.0 '@storybook/theming': 7.6.7(react-dom@18.2.0)(react@18.2.0) '@storybook/types': 7.6.7 @@ -7007,7 +6859,7 @@ packages: '@storybook/node-logger': 7.6.7 '@storybook/types': 7.6.7 '@types/find-cache-dir': 3.2.1 - '@types/node': 18.19.39 + '@types/node': 18.19.36 '@types/node-fetch': 2.6.11 '@types/pretty-hrtime': 1.0.3 chalk: 4.1.2 @@ -7089,7 +6941,7 @@ packages: /@storybook/core-events@8.1.10: resolution: {integrity: sha512-aS4zsBVyJds74+rAW0IfTEjULDCQwXecVpQfv11B8/89/07s3bOPssGGoTtCTaN4pHbduywE6MxbmFvTmXOFCA==} dependencies: - '@storybook/csf': 0.1.9 + '@storybook/csf': 0.1.8 ts-dedent: 2.2.0 dev: true @@ -7104,7 +6956,7 @@ packages: '@storybook/channels': 8.1.10 '@storybook/core-common': 8.1.10(prettier@3.3.2) '@storybook/core-events': 8.1.10 - '@storybook/csf': 0.1.9 + '@storybook/csf': 0.1.8 '@storybook/csf-tools': 8.1.10 '@storybook/docs-mdx': 3.1.0-next.0 '@storybook/global': 5.0.0 @@ -7116,7 +6968,7 @@ packages: '@storybook/types': 8.1.10 '@types/detect-port': 1.3.5 '@types/diff': 5.2.1 - '@types/node': 18.19.39 + '@types/node': 18.19.36 '@types/pretty-hrtime': 1.0.3 '@types/semver': 7.5.8 better-opn: 3.0.2 @@ -7127,7 +6979,7 @@ packages: diff: 5.2.0 express: 4.19.2 fs-extra: 11.2.0 - globby: 14.0.2 + globby: 14.0.1 lodash: 4.17.21 open: 8.4.2 pretty-hrtime: 1.0.3 @@ -7157,7 +7009,7 @@ packages: '@storybook/core-common': 7.6.7 '@storybook/node-logger': 7.6.7 '@storybook/types': 7.6.7 - '@types/node': 18.19.39 + '@types/node': 18.19.36 ts-dedent: 2.2.0 transitivePeerDependencies: - encoding @@ -7168,7 +7020,7 @@ packages: resolution: {integrity: sha512-YL7e6H4iVcsDI0UpgpdQX2IiGDrlbgaQMHQgDLWXmZyKxBcy0ONROAX5zoT1ml44EHkL60TMaG4f7SinviJCog==} dependencies: '@storybook/csf-tools': 7.6.7 - unplugin: 1.11.0 + unplugin: 1.10.1 transitivePeerDependencies: - supports-color dev: true @@ -7180,7 +7032,7 @@ packages: '@babel/parser': 7.24.7 '@babel/traverse': 7.24.7 '@babel/types': 7.24.7 - '@storybook/csf': 0.1.9 + '@storybook/csf': 0.1.8 '@storybook/types': 7.6.7 fs-extra: 11.2.0 recast: 0.23.9 @@ -7196,7 +7048,7 @@ packages: '@babel/parser': 7.24.7 '@babel/traverse': 7.24.7 '@babel/types': 7.24.7 - '@storybook/csf': 0.1.9 + '@storybook/csf': 0.1.8 '@storybook/types': 8.1.10 fs-extra: 11.2.0 recast: 0.23.9 @@ -7205,8 +7057,8 @@ packages: - supports-color dev: true - /@storybook/csf@0.1.9: - resolution: {integrity: sha512-JlZ6v/iFn+iKohKGpYXnMeNeTiiAMeFoDhYnPLIC8GnyyIWqEI9wJYrOK9i9rxlJ8NZAH/ojGC/u/xVC41qSgQ==} + /@storybook/csf@0.1.8: + resolution: {integrity: sha512-Ntab9o7LjBCbFIao5l42itFiaSh/Qu+l16l/r/9qmV9LnYZkO+JQ7tzhdlwpgJfhs+B5xeejpdAtftDRyXNajw==} dependencies: type-fest: 2.19.0 dev: true @@ -7251,7 +7103,7 @@ packages: '@storybook/channels': 7.6.7 '@storybook/client-logger': 7.6.7 '@storybook/core-events': 7.6.7 - '@storybook/csf': 0.1.9 + '@storybook/csf': 0.1.8 '@storybook/global': 5.0.0 '@storybook/router': 7.6.7 '@storybook/theming': 7.6.7(react-dom@18.2.0)(react@18.2.0) @@ -7273,7 +7125,7 @@ packages: '@storybook/channels': 8.1.10 '@storybook/client-logger': 8.1.10 '@storybook/core-events': 8.1.10 - '@storybook/csf': 0.1.9 + '@storybook/csf': 0.1.8 '@storybook/global': 5.0.0 '@storybook/icons': 1.2.9(react-dom@18.2.0)(react@18.2.0) '@storybook/router': 8.1.10 @@ -7323,7 +7175,7 @@ packages: '@types/babel__core': 7.20.5 '@types/semver': 7.5.8 pnp-webpack-plugin: 1.7.0(typescript@5.4.3) - react-scripts: 5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(@swc/core@1.6.6)(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.3)(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' @@ -7338,7 +7190,7 @@ packages: - webpack-plugin-serve dev: true - /@storybook/preset-react-webpack@7.6.7(@babel/core@7.22.5)(@swc/core@1.6.6)(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.3)(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: @@ -7361,7 +7213,7 @@ packages: '@storybook/node-logger': 7.6.7 '@storybook/react': 7.6.7(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.3) '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.4.3)(webpack@5.91.0) - '@types/node': 18.19.39 + '@types/node': 18.19.36 '@types/semver': 7.5.8 babel-plugin-add-react-displayname: 0.0.5 fs-extra: 11.2.0 @@ -7372,7 +7224,7 @@ packages: react-refresh: 0.14.0 semver: 7.6.2 typescript: 5.4.3 - webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) transitivePeerDependencies: - '@swc/core' - '@types/webpack' @@ -7394,7 +7246,7 @@ packages: '@storybook/channels': 7.6.7 '@storybook/client-logger': 7.6.7 '@storybook/core-events': 7.6.7 - '@storybook/csf': 0.1.9 + '@storybook/csf': 0.1.8 '@storybook/global': 5.0.0 '@storybook/types': 7.6.7 '@types/qs': 6.9.15 @@ -7413,7 +7265,7 @@ packages: '@storybook/channels': 8.1.10 '@storybook/client-logger': 8.1.10 '@storybook/core-events': 8.1.10 - '@storybook/csf': 0.1.9 + '@storybook/csf': 0.1.8 '@storybook/global': 5.0.0 '@storybook/types': 8.1.10 '@types/qs': 6.9.15 @@ -7444,7 +7296,7 @@ packages: react-docgen-typescript: 2.2.2(typescript@5.4.3) tslib: 2.6.3 typescript: 5.4.3 - webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) transitivePeerDependencies: - supports-color dev: true @@ -7459,7 +7311,7 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true - /@storybook/react-webpack5@7.6.7(@babel/core@7.22.5)(@swc/core@1.6.6)(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.3)(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: @@ -7475,9 +7327,9 @@ packages: dependencies: '@babel/core': 7.22.5 '@storybook/builder-webpack5': 7.6.7(esbuild@0.21.3)(typescript@5.4.3) - '@storybook/preset-react-webpack': 7.6.7(@babel/core@7.22.5)(@swc/core@1.6.6)(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.3)(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.39 + '@types/node': 18.19.36 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) typescript: 5.4.3 @@ -7518,7 +7370,7 @@ packages: '@storybook/types': 7.6.7 '@types/escodegen': 0.0.6 '@types/estree': 0.0.51 - '@types/node': 18.19.39 + '@types/node': 18.19.36 acorn: 7.4.1 acorn-jsx: 5.3.2(acorn@7.4.1) acorn-walk: 7.2.0 @@ -7746,88 +7598,88 @@ packages: transitivePeerDependencies: - supports-color - /@swc/core-darwin-arm64@1.6.6: - resolution: {integrity: sha512-5DA8NUGECcbcK1YLKJwNDKqdtTYDVnkfDU1WvQSXq/rU+bjYCLtn5gCe8/yzL7ISXA6rwqPU1RDejhbNt4ARLQ==} + /@swc/core-darwin-arm64@1.6.3: + resolution: {integrity: sha512-3r7cJf1BcE30iyF1rnOSKrEzIR+cqnyYSZvivrm62TZdXVsIjfXe1xulsKGxZgNeLY5erIu7ukvMvBvPhnQvqA==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] requiresBuild: true optional: true - /@swc/core-darwin-x64@1.6.6: - resolution: {integrity: sha512-2nbh/RHpweNRsJiYDFk1KcX7UtaKgzzTNUjwtvK5cp0wWrpbXmPvdlWOx3yzwoiSASDFx78242JHHXCIOlEdsw==} + /@swc/core-darwin-x64@1.6.3: + resolution: {integrity: sha512-8GLZ23IgVpF5xh2SbS5ZW/12/EEBuRU1hFOLB5rKERJU0y1RJ6YhDMf/FuOWhfHQcFM7TeedBwHIzaF+tdKKlw==} engines: {node: '>=10'} cpu: [x64] os: [darwin] requiresBuild: true optional: true - /@swc/core-linux-arm-gnueabihf@1.6.6: - resolution: {integrity: sha512-YgytuyUfR7b0z0SRHKV+ylr83HmgnROgeT7xryEkth6JGpAEHooCspQ4RrWTU8+WKJ7aXiZlGXPgybQ4TiS+TA==} + /@swc/core-linux-arm-gnueabihf@1.6.3: + resolution: {integrity: sha512-VQ/bduX7WhLOlGbJLMG7UH0LBehjjx43R4yuk55rjjJLqpvX5fQzMsWhQdIZ5vsc+4ORzdgtEAlpumTv6bsD1A==} engines: {node: '>=10'} cpu: [arm] os: [linux] requiresBuild: true optional: true - /@swc/core-linux-arm64-gnu@1.6.6: - resolution: {integrity: sha512-yGwx9fddzEE0iURqRVwKBQ4IwRHE6hNhl15WliHpi/PcYhzmYkUIpcbRXjr0dssubXAVPVnx6+jZVDSbutvnfg==} + /@swc/core-linux-arm64-gnu@1.6.3: + resolution: {integrity: sha512-jHIQ/PCwtdDBIF/BiC5DochswuCAIW/T5skJ+eDMbta7+QtEnZCXTZWpT5ORoEY/gtsE2fjpOA4TS6fBBvXqUw==} engines: {node: '>=10'} cpu: [arm64] os: [linux] requiresBuild: true optional: true - /@swc/core-linux-arm64-musl@1.6.6: - resolution: {integrity: sha512-a6fMbqzSAsS5KCxFJyg1mD5kwN3ZFO8qQLyJ75R/htZP/eCt05jrhmOI7h2n+1HjiG332jLnZ9S8lkVE5O8Nqw==} + /@swc/core-linux-arm64-musl@1.6.3: + resolution: {integrity: sha512-gA6velEUD27Dwu0BlR9hCcFzkWq2YL2pDAU5qbgeuGhaMiUCBssfqTQB+2ctEnV+AZx+hSMJOHvtA+uFZjfRrw==} engines: {node: '>=10'} cpu: [arm64] os: [linux] requiresBuild: true optional: true - /@swc/core-linux-x64-gnu@1.6.6: - resolution: {integrity: sha512-hRGsUKNzzZle28YF0dYIpN0bt9PceR9LaVBq7x8+l9TAaDLFbgksSxcnU/ubTtsy+WsYSYGn+A83w3xWC0O8CQ==} + /@swc/core-linux-x64-gnu@1.6.3: + resolution: {integrity: sha512-fy4qoBDr5I8r+ZNCZxs/oZcmu4j/8mtSud6Ka102DaSxEjNg0vfIdo9ITsVIPsofhUTmDKjQsPB2O7YUlJAioQ==} engines: {node: '>=10'} cpu: [x64] os: [linux] requiresBuild: true optional: true - /@swc/core-linux-x64-musl@1.6.6: - resolution: {integrity: sha512-NokIUtFxJDVv3LzGeEtYMTV3j2dnGKLac59luTeq36DQLZdJQawQIdTbzzWl2jE7lxxTZme+dhsVOH9LxE3ceg==} + /@swc/core-linux-x64-musl@1.6.3: + resolution: {integrity: sha512-c/twcMbq/Gpq47G+b3kWgoaCujpXO11aRgJx6am+CprvP4uNeBHEpQkxD+DQmdWFHisZd0i9GB8NG3e7L9Rz9Q==} engines: {node: '>=10'} cpu: [x64] os: [linux] requiresBuild: true optional: true - /@swc/core-win32-arm64-msvc@1.6.6: - resolution: {integrity: sha512-lzYdI4qb4k1dFG26yv+9Jaq/bUMAhgs/2JsrLncGjLof86+uj74wKYCQnbzKAsq2hDtS5DqnHnl+//J+miZfGA==} + /@swc/core-win32-arm64-msvc@1.6.3: + resolution: {integrity: sha512-y6RxMtX45acReQmzkxcEfJscfBXce6QjuNgWQHHs9exA592BZzmolDUwgmAyjyvopz1lWX+KdymdZFKvuDSx4w==} engines: {node: '>=10'} cpu: [arm64] os: [win32] requiresBuild: true optional: true - /@swc/core-win32-ia32-msvc@1.6.6: - resolution: {integrity: sha512-bvl7FMaXIJQ76WZU0ER4+RyfKIMGb6S2MgRkBhJOOp0i7VFx4WLOnrmMzaeoPJaJSkityVKAftfNh7NBzTIydQ==} + /@swc/core-win32-ia32-msvc@1.6.3: + resolution: {integrity: sha512-41h7z3xgukl1HDDwhquaeOPSP1OWeHl+mWKnJVmmwd3ui/oowUDCO856qa6JagBgPSnAGfyXwv6vthuXwyCcWA==} engines: {node: '>=10'} cpu: [ia32] os: [win32] requiresBuild: true optional: true - /@swc/core-win32-x64-msvc@1.6.6: - resolution: {integrity: sha512-WAP0JoCTfgeYKgOeYJoJV4ZS0sQUmU3OwvXa2dYYtMLF7zsNqOiW4niU7QlThBHgUv/qNZm2p6ITEgh3w1cltw==} + /@swc/core-win32-x64-msvc@1.6.3: + resolution: {integrity: sha512-//bnwo9b8Vp1ED06eXCHyGZ5xIpdkQgg2fuFDdtd1FITl7r5bdQh2ryRzPiKiGwgXZwZQitUshI4JeEX9IuW+Q==} engines: {node: '>=10'} cpu: [x64] os: [win32] requiresBuild: true optional: true - /@swc/core@1.6.6: - resolution: {integrity: sha512-sHfmIUPUXNrQTwFMVCY5V5Ena2GTOeaWjS2GFUpjLhAgVfP90OP67DWow7+cYrfFtqBdILHuWnjkTcd0+uPKlg==} + /@swc/core@1.6.3: + resolution: {integrity: sha512-mZpei+LqE+AL+nwgERMQey9EJA9/yhHTN6nwbobH5GnSij/lhfTdGfAb1iumOrroqEcXbHUaK//7wOw7DjBGdA==} engines: {node: '>=10'} requiresBuild: true peerDependencies: @@ -7837,29 +7689,29 @@ packages: optional: true dependencies: '@swc/counter': 0.1.3 - '@swc/types': 0.1.9 + '@swc/types': 0.1.8 optionalDependencies: - '@swc/core-darwin-arm64': 1.6.6 - '@swc/core-darwin-x64': 1.6.6 - '@swc/core-linux-arm-gnueabihf': 1.6.6 - '@swc/core-linux-arm64-gnu': 1.6.6 - '@swc/core-linux-arm64-musl': 1.6.6 - '@swc/core-linux-x64-gnu': 1.6.6 - '@swc/core-linux-x64-musl': 1.6.6 - '@swc/core-win32-arm64-msvc': 1.6.6 - '@swc/core-win32-ia32-msvc': 1.6.6 - '@swc/core-win32-x64-msvc': 1.6.6 + '@swc/core-darwin-arm64': 1.6.3 + '@swc/core-darwin-x64': 1.6.3 + '@swc/core-linux-arm-gnueabihf': 1.6.3 + '@swc/core-linux-arm64-gnu': 1.6.3 + '@swc/core-linux-arm64-musl': 1.6.3 + '@swc/core-linux-x64-gnu': 1.6.3 + '@swc/core-linux-x64-musl': 1.6.3 + '@swc/core-win32-arm64-msvc': 1.6.3 + '@swc/core-win32-ia32-msvc': 1.6.3 + '@swc/core-win32-x64-msvc': 1.6.3 /@swc/counter@0.1.3: resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - /@swc/types@0.1.9: - resolution: {integrity: sha512-qKnCno++jzcJ4lM4NTfYifm1EFSCeIfKiAHAfkENZAV5Kl9PjJIyd2yeeVv6c/2CckuLyv2NmRC5pv6pm2WQBg==} + /@swc/types@0.1.8: + resolution: {integrity: sha512-RNFA3+7OJFNYY78x0FYwi1Ow+iF1eF5WvmfY1nXPOEH4R2p/D4Cr1vzje7dNAI2aLFqpv8Wyz4oKSWqIZArpQA==} dependencies: '@swc/counter': 0.1.3 - /@testing-library/dom@10.2.0: - resolution: {integrity: sha512-CytIvb6tVOADRngTHGWNxH8LPgO/3hi/BdCEHOf7Qd2GvZVClhVP0Wo/QHzWhpki49Bk0b4VT6xpt3fx8HTSIw==} + /@testing-library/dom@10.1.0: + resolution: {integrity: sha512-wdsYKy5zupPyLCW2Je5DLHSxSfbIp6h80WoHOQc+RPtmPGA52O9x5MJEkv92Sjonpq+poOAtUKhh1kBGAXBrNA==} engines: {node: '>=18'} dependencies: '@babel/code-frame': 7.24.7 @@ -7915,13 +7767,13 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true - /@testing-library/user-event@14.4.3(@testing-library/dom@10.2.0): + /@testing-library/user-event@14.4.3(@testing-library/dom@10.1.0): resolution: {integrity: sha512-kCUc5MEwaEMakkO5x7aoD+DLi02ehmEM2QCGWvNqAS1dV/fAvORWEjnjsEIvml59M7Y5kCkWN6fCCyPOe8OL6Q==} engines: {node: '>=12', npm: '>=6'} peerDependencies: '@testing-library/dom': '>=7.21.4' dependencies: - '@testing-library/dom': 10.2.0 + '@testing-library/dom': 10.1.0 dev: true /@testing-library/user-event@14.4.3(@testing-library/dom@9.3.4): @@ -8132,12 +7984,12 @@ packages: prosemirror-keymap: 1.2.2 prosemirror-markdown: 1.13.0 prosemirror-menu: 1.2.4 - prosemirror-model: 1.21.3 + prosemirror-model: 1.21.1 prosemirror-schema-basic: 1.2.2 prosemirror-schema-list: 1.4.0 prosemirror-state: 1.4.3 prosemirror-tables: 1.3.7 - prosemirror-trailing-node: 2.0.8(prosemirror-model@1.21.3)(prosemirror-state@1.4.3)(prosemirror-view@1.33.8) + prosemirror-trailing-node: 2.0.8(prosemirror-model@1.21.1)(prosemirror-state@1.4.3)(prosemirror-view@1.33.8) prosemirror-transform: 1.9.0 prosemirror-view: 1.33.8 dev: false @@ -8324,7 +8176,7 @@ packages: /@types/connect-history-api-fallback@1.5.4: resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} dependencies: - '@types/express-serve-static-core': 4.19.5 + '@types/express-serve-static-core': 4.19.3 '@types/node': 17.0.45 /@types/connect@3.4.38: @@ -8407,8 +8259,8 @@ packages: /@types/estree@1.0.5: resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - /@types/express-serve-static-core@4.19.5: - resolution: {integrity: sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==} + /@types/express-serve-static-core@4.19.3: + resolution: {integrity: sha512-KOzM7MhcBFlmnlr/fzISFF5vGWVSvN6fTd4T+ExOt08bA/dA5kpSzY52nMsI1KDFmUREpJelPYyuslLRSjjgCg==} dependencies: '@types/node': 17.0.45 '@types/qs': 6.9.15 @@ -8419,7 +8271,7 @@ packages: resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} dependencies: '@types/body-parser': 1.19.5 - '@types/express-serve-static-core': 4.19.5 + '@types/express-serve-static-core': 4.19.3 '@types/qs': 6.9.15 '@types/serve-static': 1.15.7 @@ -8504,8 +8356,8 @@ packages: /@types/lodash@4.14.202: resolution: {integrity: sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==} - /@types/lodash@4.17.6: - resolution: {integrity: sha512-OpXEVoCKSS3lQqjx9GGGOapBeuW5eUboYHRlHP9urXPX25IKZ6AnP5ZRxtVf63iieUbsHxLn8NQ5Nlftc6yzAA==} + /@types/lodash@4.17.5: + resolution: {integrity: sha512-MBIOHVZqVqgfro1euRDWX7OO0fBVUUMrN6Pwm8LQsz8cWhEpihlvR70ENj3f40j58TNxZaWv2ndSkInykNBBJw==} /@types/mdast@3.0.15: resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} @@ -8539,14 +8391,14 @@ packages: /@types/node@17.0.45: resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} - /@types/node@18.19.39: - resolution: {integrity: sha512-nPwTRDKUctxw3di5b4TfT3I0sWDiWoPQCZjXhvdkINntwr8lcoVCKsTgnXeRubKIlfnV+eN/HYk6Jb40tbcEAQ==} + /@types/node@18.19.36: + resolution: {integrity: sha512-tX1BNmYSWEvViftB26VLNxT6mEr37M7+ldUtq7rlKnv4/2fKYsJIOmqJAjT6h1DNuwQjIKgw3VJ/Dtw3yiTIQw==} dependencies: undici-types: 5.26.5 dev: true - /@types/node@20.14.9: - resolution: {integrity: sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==} + /@types/node@20.14.5: + resolution: {integrity: sha512-aoRR+fJkZT2l0aGOJhuA8frnCSoNX6W7U2mpNq63+BxBIj5BQFt8rHy627kijCmm63ijdSdwvGgpUsU6MBsZZA==} dependencies: undici-types: 5.26.5 dev: false @@ -8756,7 +8608,7 @@ packages: typescript: optional: true dependencies: - '@eslint-community/regexpp': 4.11.0 + '@eslint-community/regexpp': 4.10.1 '@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) @@ -9529,6 +9381,7 @@ packages: /atob@2.1.2: resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} engines: {node: '>= 4.5.0'} + hasBin: true /attr-accept@2.2.2: resolution: {integrity: sha512-7prDjvt9HmqiZ0cl5CRjtS84sEyhsHP2coDkaZKRKVfCDo9s7iw7ChVmar78Gu9pC4SoR/28wFu/G5JJhTnqEg==} @@ -9543,7 +9396,7 @@ packages: postcss: ^8.1.0 dependencies: browserslist: 4.23.1 - caniuse-lite: 1.0.30001639 + caniuse-lite: 1.0.30001636 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.1 @@ -9580,11 +9433,10 @@ packages: - debug dev: false - /axobject-query@3.2.2: - resolution: {integrity: sha512-QtQGAQJfHXiTrtRH8Q1gkarFLs56fDmfiMCptvRbo/AEQIImrW6u7EcUAOfkHHNE9dqZKH3227iRKRSp0KtfTw==} - engines: {node: '>= 0.4'} + /axobject-query@3.2.1: + resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} dependencies: - deep-equal-json: 1.0.0 + dequal: 2.0.3 /babel-core@7.0.0-bridge.0(@babel/core@7.24.7): resolution: {integrity: sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==} @@ -9643,7 +9495,7 @@ packages: loader-utils: 2.0.4 make-dir: 3.1.0 schema-utils: 2.7.1 - webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) /babel-loader@9.1.3(@babel/core@7.24.7)(webpack@5.91.0): resolution: {integrity: sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==} @@ -9655,7 +9507,7 @@ packages: '@babel/core': 7.24.7 find-cache-dir: 4.0.0 schema-utils: 4.2.0 - webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) dev: true /babel-plugin-add-react-displayname@0.0.5: @@ -10058,8 +9910,8 @@ packages: resolution: {integrity: sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} dependencies: - caniuse-lite: 1.0.30001639 - electron-to-chromium: 1.4.815 + caniuse-lite: 1.0.30001636 + electron-to-chromium: 1.4.806 node-releases: 2.0.14 update-browserslist-db: 1.0.16(browserslist@4.23.1) @@ -10071,6 +9923,7 @@ packages: /btoa@1.2.1: resolution: {integrity: sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==} engines: {node: '>= 0.4.0'} + hasBin: true dev: false /buffer-from@1.1.2: @@ -10161,12 +10014,12 @@ packages: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} dependencies: browserslist: 4.23.1 - caniuse-lite: 1.0.30001639 + caniuse-lite: 1.0.30001636 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 - /caniuse-lite@1.0.30001639: - resolution: {integrity: sha512-eFHflNTBIlFwP2AIKaYuBQN/apnUoKNhBdza8ZnW/h2di4LCZ4xFqYlxUxo+LQ76KFI1PGcC1QDxMbxTZpSCAg==} + /caniuse-lite@1.0.30001636: + resolution: {integrity: sha512-bMg2vmr8XBsbL6Lr0UHXy/21m84FTxDLWn2FSqMd5PrlbMxwJlQnC2YWYxVgp66PZE+BBNF2jYQUBKCo1FDeZg==} /canvg@3.0.10: resolution: {integrity: sha512-qwR2FRNO9NlzTeKIPIKpnTY6fqwuYSequ8Ru8c0YkYU7U0oW+hLUvWadLvAu1Rl72OMNiFhoLu4f8eUjQ7l/+Q==} @@ -10599,10 +10452,6 @@ 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: @@ -10695,7 +10544,7 @@ packages: /core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - /cosmiconfig-typescript-loader@1.0.9(@swc/core@1.6.6)(@types/node@17.0.45)(cosmiconfig@7.1.0)(typescript@5.4.3): + /cosmiconfig-typescript-loader@1.0.9(@swc/core@1.6.3)(@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: @@ -10705,7 +10554,7 @@ packages: dependencies: '@types/node': 17.0.45 cosmiconfig: 7.1.0 - ts-node: 10.9.2(@swc/core@1.6.6)(@types/node@17.0.45)(typescript@5.4.3) + ts-node: 10.9.2(@swc/core@1.6.3)(@types/node@17.0.45)(typescript@5.4.3) typescript: 5.4.3 transitivePeerDependencies: - '@swc/core' @@ -10738,10 +10587,10 @@ packages: '@craco/craco': ^7.0.0 react-scripts: ^5.0.0 dependencies: - '@craco/craco': 7.1.0(@swc/core@1.6.6)(@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.3)(@types/node@17.0.45)(postcss@8.4.32)(react-scripts@5.0.1)(typescript@5.4.3) esbuild-jest: 0.5.0(esbuild@0.21.3) esbuild-loader: 4.2.0(webpack@5.91.0) - react-scripts: 5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(@swc/core@1.6.6)(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.3)(esbuild@0.21.3)(eslint@8.44.0)(react@18.2.0)(sass@1.71.1)(typescript@5.4.3) transitivePeerDependencies: - esbuild - supports-color @@ -10855,15 +10704,15 @@ packages: webpack: optional: true dependencies: - 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) + 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) postcss-value-parser: 4.2.0 semver: 7.6.2 - webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.3)(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==} @@ -10891,7 +10740,7 @@ packages: schema-utils: 4.2.0 serialize-javascript: 6.0.2 source-map: 0.6.1 - webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) /css-prefers-color-scheme@6.0.3(postcss@8.4.32): resolution: {integrity: sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==} @@ -11170,15 +11019,6 @@ packages: /dedent@0.7.0: resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} - /deep-equal-json@1.0.0: - resolution: {integrity: sha512-x11iOxzQuLWG1faqBf8PYn3xSxkK41Wg38lUbch9f+nVmBeuI53PPXeRIDdHsW2/dP2GGKL9p8cLCahHToE7CA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - isarray: 2.0.5 - object-is: 1.1.6 - object-keys: 1.1.1 - /deep-equal@2.2.3: resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==} engines: {node: '>= 0.4'} @@ -11402,7 +11242,7 @@ packages: resolution: {integrity: sha512-4SbcbedPXTciySXiSnNNLuJXpvxFe5nqivbiEHXyL8P/w0wx2uW7YXNjnYgjW0e2e6vy+L/tMISU/oAiXCl57Q==} engines: {node: '>=10'} dependencies: - '@types/node': 20.14.9 + '@types/node': 20.14.5 jszip: 3.10.1 nanoid: 5.0.7 xml: 1.0.1 @@ -11571,8 +11411,8 @@ packages: dependencies: jake: 10.9.1 - /electron-to-chromium@1.4.815: - resolution: {integrity: sha512-OvpTT2ItpOXJL7IGcYakRjHCt8L5GrrN/wHCQsRB4PQa1X9fe+X9oen245mIId7s14xvArCGSTIq644yPUKKLg==} + /electron-to-chromium@1.4.806: + resolution: {integrity: sha512-nkoEX2QIB8kwCOtvtgwhXWy2IHVcOLQZu9Qo36uaGB835mdX/h8uLRlosL6QIhLVUnAiicXRW00PwaPZC74Nrg==} /emittery@0.10.2: resolution: {integrity: sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==} @@ -11679,7 +11519,7 @@ packages: is-string: 1.0.7 is-typed-array: 1.1.13 is-weakref: 1.0.2 - object-inspect: 1.13.2 + object-inspect: 1.13.1 object-keys: 1.1.1 object.assign: 4.1.5 regexp.prototype.flags: 1.5.2 @@ -11740,8 +11580,8 @@ packages: iterator.prototype: 1.1.2 safe-array-concat: 1.1.2 - /es-module-lexer@1.5.4: - resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} + /es-module-lexer@1.5.3: + resolution: {integrity: sha512-i1gCgmR9dCl6Vil6UKPI/trA69s08g/syhiDK9TG0Nf1RJjjFI+AzoWW7sPufzkgYAn861skuCwJa0pIIHYxvg==} /es-object-atoms@1.0.0: resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} @@ -11827,7 +11667,7 @@ packages: esbuild: 0.21.3 get-tsconfig: 4.7.5 loader-utils: 2.0.4 - webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) webpack-sources: 1.4.3 dev: true @@ -12036,7 +11876,7 @@ packages: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} dependencies: debug: 3.2.7 - is-core-module: 2.14.0 + is-core-module: 2.13.1 resolve: 1.22.8 transitivePeerDependencies: - supports-color @@ -12104,7 +11944,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.14.0 + is-core-module: 2.13.1 is-glob: 4.0.3 minimatch: 3.1.2 object.fromentries: 2.0.8 @@ -12150,7 +11990,7 @@ packages: array.prototype.flatmap: 1.3.2 ast-types-flow: 0.0.7 axe-core: 4.9.1 - axobject-query: 3.2.2 + axobject-query: 3.2.1 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 eslint: 8.44.0 @@ -12251,14 +12091,14 @@ packages: micromatch: 4.0.7 normalize-path: 3.0.0 schema-utils: 4.2.0 - webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) /eslint@8.44.0: resolution: {integrity: sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.44.0) - '@eslint-community/regexpp': 4.11.0 + '@eslint-community/regexpp': 4.10.1 '@eslint/eslintrc': 2.1.4 '@eslint/js': 8.44.0 '@humanwhocodes/config-array': 0.11.14 @@ -12305,7 +12145,7 @@ packages: hasBin: true dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@eslint-community/regexpp': 4.11.0 + '@eslint-community/regexpp': 4.10.1 '@eslint/eslintrc': 2.1.4 '@eslint/js': 8.57.0 '@humanwhocodes/config-array': 0.11.14 @@ -12706,7 +12546,7 @@ packages: dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) /file-saver@2.0.5: resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} @@ -12826,8 +12666,8 @@ packages: /flatted@3.3.1: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} - /flow-parser@0.238.3: - resolution: {integrity: sha512-hNUhucq8V6KWSX1skXUS3vnDmrRNuKWzDvEVK5b+n97uMF32zj2y8pmcLDQEqlY5u926B0GYGWT/3XhwDJfLOQ==} + /flow-parser@0.238.0: + resolution: {integrity: sha512-VE7XSv1epljsIN2YeBnxCmGJihpNIAnLLu/pPOdA+Gkso7qDltJwUi6vfHjgxdBbjSdAuPGnhuOHJUQG+yYwIg==} engines: {node: '>=0.4.0'} dev: true @@ -12898,7 +12738,7 @@ packages: semver: 7.6.2 tapable: 1.1.3 typescript: 5.4.3 - webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.3)(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==} @@ -12920,7 +12760,7 @@ packages: semver: 7.6.2 tapable: 2.2.1 typescript: 5.4.3 - webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) dev: true /form-data@2.5.1: @@ -13154,7 +12994,7 @@ packages: consola: 3.2.3 defu: 6.1.4 node-fetch-native: 1.6.4 - nypm: 0.3.9 + nypm: 0.3.8 ohash: 1.1.3 pathe: 1.1.2 tar: 6.2.1 @@ -13182,11 +13022,10 @@ packages: /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.2.1 jackspeak: 3.4.0 - minimatch: 9.0.5 + minimatch: 9.0.4 minipass: 7.1.2 package-json-from-dist: 1.0.0 path-scurry: 1.11.1 @@ -13251,8 +13090,8 @@ packages: merge2: 1.4.1 slash: 3.0.0 - /globby@14.0.2: - resolution: {integrity: sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==} + /globby@14.0.1: + resolution: {integrity: sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ==} engines: {node: '>=18'} dependencies: '@sindresorhus/merge-streams': 2.3.0 @@ -13518,7 +13357,7 @@ packages: lodash: 4.17.21 pretty-error: 4.0.0 tapable: 2.2.1 - webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) /html2canvas@1.4.1: resolution: {integrity: sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==} @@ -13664,13 +13503,13 @@ packages: dependencies: safer-buffer: 2.1.2 - /icss-utils@5.1.0(postcss@8.4.39): + /icss-utils@5.1.0(postcss@8.4.38): resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.39 + postcss: 8.4.38 /idb@7.1.1: resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} @@ -13861,9 +13700,8 @@ packages: rgba-regex: 1.0.0 dev: true - /is-core-module@2.14.0: - resolution: {integrity: sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==} - engines: {node: '>= 0.4'} + /is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} dependencies: hasown: 2.0.2 @@ -14920,7 +14758,6 @@ packages: /js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true dependencies: argparse: 1.0.10 esprima: 4.0.1 @@ -14952,7 +14789,7 @@ packages: '@babel/register': 7.24.6(@babel/core@7.24.7) babel-core: 7.0.0-bridge.0(@babel/core@7.24.7) chalk: 4.1.2 - flow-parser: 0.238.3 + flow-parser: 0.238.0 graceful-fs: 4.2.11 micromatch: 4.0.7 neo-async: 2.6.2 @@ -14986,7 +14823,7 @@ packages: '@babel/register': 7.24.6(@babel/core@7.24.7) babel-core: 7.0.0-bridge.0(@babel/core@7.24.7) chalk: 4.1.2 - flow-parser: 0.238.3 + flow-parser: 0.238.0 graceful-fs: 4.2.11 micromatch: 4.0.7 neo-async: 2.6.2 @@ -15059,7 +14896,7 @@ packages: dependencies: '@apidevtools/json-schema-ref-parser': 11.6.4 '@types/json-schema': 7.0.15 - '@types/lodash': 4.17.6 + '@types/lodash': 4.17.5 cli-color: 2.0.4 glob: 10.4.2 is-glob: 4.0.3 @@ -15329,7 +15166,7 @@ packages: listr2: 5.0.8 micromatch: 4.0.7 normalize-path: 3.0.0 - object-inspect: 1.13.2 + object-inspect: 1.13.1 pidtree: 0.6.0 string-argv: 0.3.2 yaml: 2.4.5 @@ -15470,7 +15307,6 @@ packages: /loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true dependencies: js-tokens: 4.0.0 @@ -15479,8 +15315,8 @@ packages: dependencies: tslib: 2.6.3 - /lru-cache@10.3.0: - resolution: {integrity: sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ==} + /lru-cache@10.2.2: + resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==} engines: {node: 14 || >=16.14} /lru-cache@5.1.1: @@ -15970,7 +15806,7 @@ packages: dependencies: schema-utils: 4.2.0 tapable: 2.2.1 - webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) /minimalistic-assert@1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} @@ -15993,8 +15829,8 @@ packages: brace-expansion: 2.0.1 dev: true - /minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + /minimatch@9.0.4: + resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} engines: {node: '>=16 || 14 >=14.17'} dependencies: brace-expansion: 2.0.1 @@ -16055,15 +15891,6 @@ packages: hasBin: true dev: false - /mlly@1.7.1: - resolution: {integrity: sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==} - dependencies: - acorn: 8.12.0 - pathe: 1.1.2 - pkg-types: 1.1.2 - ufo: 1.5.3 - dev: true - /mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} @@ -16313,15 +16140,14 @@ packages: /nwsapi@2.2.10: resolution: {integrity: sha512-QK0sRs7MKv0tKe1+5uZIQk/C8XGza4DAnztJG8iD+TpJIORARrCxczA738awHrZoHeTjSSoHqao2teO0dC/gFQ==} - /nypm@0.3.9: - resolution: {integrity: sha512-BI2SdqqTHg2d4wJh8P9A1W+bslg33vOE9IZDY6eR2QC+Pu1iNBVZUqczrd43rJb+fMzHU7ltAYKsEFY/kHMFcw==} + /nypm@0.3.8: + resolution: {integrity: sha512-IGWlC6So2xv6V4cIDmoV0SwwWx7zLG086gyqkyumteH2fIgCAM4nDVFB2iDRszDvmdSVW9xb1N+2KjQ6C7d4og==} engines: {node: ^14.16.0 || >=16.10.0} dependencies: citty: 0.1.6 consola: 3.2.3 execa: 8.0.1 pathe: 1.1.2 - pkg-types: 1.1.2 ufo: 1.5.3 dev: true @@ -16342,9 +16168,8 @@ packages: resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} engines: {node: '>= 6'} - /object-inspect@1.13.2: - resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} - engines: {node: '>= 0.4'} + /object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} /object-is@1.1.6: resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} @@ -16452,8 +16277,8 @@ packages: ol: 9.2.4 dev: false - /ol-mapbox-style@12.3.4(ol@9.2.4): - resolution: {integrity: sha512-TxGJZw4hmvc6n5dHSyAE8ZpgALJ6hVG5Q9yl0j2Q1KmLS9iq4wMpb383TAitWiG86SvJV4oDkWMGkyyMLfVyew==} + /ol-mapbox-style@12.3.3(ol@9.2.4): + resolution: {integrity: sha512-Wyb1vSxTl/c09S9yC/Dcr7XWQf5u19/9BriqOiDJRgbjLTAbrWXW8l+5N9E/I0fV2gcTQDE+7iFtvVOvXcTmMA==} peerDependencies: ol: '*' dependencies: @@ -16584,7 +16409,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.1.1 + yocto-queue: 1.0.0 dev: true /p-locate@3.0.0: @@ -16743,7 +16568,7 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} dependencies: - lru-cache: 10.3.0 + lru-cache: 10.2.2 minipass: 7.1.2 /path-to-regexp@0.1.7: @@ -16764,6 +16589,7 @@ packages: /pbf@3.2.1: resolution: {integrity: sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==} + hasBin: true dependencies: ieee754: 1.2.1 resolve-protobuf-schema: 2.1.0 @@ -16832,14 +16658,6 @@ packages: find-up: 6.3.0 dev: true - /pkg-types@1.1.2: - resolution: {integrity: sha512-VEGf1he2DR5yowYRl0XJhWJq5ktm9gYIsH+y8sNJpHlxch7JPDaufgrsl4vYjd9hMUY8QVjoNncKbow9I7exyA==} - 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'} @@ -17173,7 +16991,7 @@ packages: klona: 2.0.6 postcss: 8.4.32 semver: 7.6.2 - webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) /postcss-logical@5.0.4(postcss@8.4.32): resolution: {integrity: sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==} @@ -17253,42 +17071,42 @@ packages: postcss: 8.4.32 postcss-selector-parser: 6.1.0 - /postcss-modules-extract-imports@3.1.0(postcss@8.4.39): + /postcss-modules-extract-imports@3.1.0(postcss@8.4.38): resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.39 + postcss: 8.4.38 - /postcss-modules-local-by-default@4.0.5(postcss@8.4.39): + /postcss-modules-local-by-default@4.0.5(postcss@8.4.38): resolution: {integrity: sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - icss-utils: 5.1.0(postcss@8.4.39) - postcss: 8.4.39 + icss-utils: 5.1.0(postcss@8.4.38) + postcss: 8.4.38 postcss-selector-parser: 6.1.0 postcss-value-parser: 4.2.0 - /postcss-modules-scope@3.2.0(postcss@8.4.39): + /postcss-modules-scope@3.2.0(postcss@8.4.38): resolution: {integrity: sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.39 + postcss: 8.4.38 postcss-selector-parser: 6.1.0 - /postcss-modules-values@4.0.0(postcss@8.4.39): + /postcss-modules-values@4.0.0(postcss@8.4.38): resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - icss-utils: 5.1.0(postcss@8.4.39) - postcss: 8.4.39 + icss-utils: 5.1.0(postcss@8.4.38) + postcss: 8.4.38 /postcss-nested@6.0.1(postcss@8.4.32): resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} @@ -17585,8 +17403,8 @@ packages: picocolors: 1.0.1 source-map-js: 1.2.0 - /postcss@8.4.39: - resolution: {integrity: sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==} + /postcss@8.4.38: + resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.7 @@ -17724,7 +17542,7 @@ packages: /prosemirror-commands@1.5.2: resolution: {integrity: sha512-hgLcPaakxH8tu6YvVAaILV2tXYsW3rAdDR8WNkeKGcgeMVQg3/TMhPdVoh7iAmfgVjZGtcOSjKiQaoeKjzd2mQ==} dependencies: - prosemirror-model: 1.21.3 + prosemirror-model: 1.21.1 prosemirror-state: 1.4.3 prosemirror-transform: 1.9.0 dev: false @@ -17741,7 +17559,7 @@ packages: resolution: {integrity: sha512-wtjswVBd2vaQRrnYZaBCbyDqr232Ed4p2QPtRIUK5FuqHYKGWkEwl08oQM4Tw7DOR0FsasARV5uJFvMZWxdNxQ==} dependencies: prosemirror-keymap: 1.2.2 - prosemirror-model: 1.21.3 + prosemirror-model: 1.21.1 prosemirror-state: 1.4.3 prosemirror-view: 1.33.8 dev: false @@ -17773,7 +17591,7 @@ packages: resolution: {integrity: sha512-UziddX3ZYSYibgx8042hfGKmukq5Aljp2qoBiJRejD/8MH70siQNz5RB1TrdTPheqLMy4aCe4GYNF10/3lQS5g==} dependencies: markdown-it: 14.1.0 - prosemirror-model: 1.21.3 + prosemirror-model: 1.21.1 dev: false /prosemirror-menu@1.2.4: @@ -17785,8 +17603,8 @@ packages: prosemirror-state: 1.4.3 dev: false - /prosemirror-model@1.21.3: - resolution: {integrity: sha512-nt2Xs/RNGepD9hrrkzXvtCm1mpGJoQfFSPktGa0BF/aav6XsnmVGZ9sTXNWRLupAz5SCLa3EyKlFeK7zJWROKg==} + /prosemirror-model@1.21.1: + resolution: {integrity: sha512-IVBAuMqOfltTr7yPypwpfdGT+6rGAteVOw2FO6GEvCGGa1ZwxLseqC1Eax/EChDvG/xGquB2d/hLdgh3THpsYg==} dependencies: orderedmap: 2.1.1 dev: false @@ -17794,13 +17612,13 @@ packages: /prosemirror-schema-basic@1.2.2: resolution: {integrity: sha512-/dT4JFEGyO7QnNTe9UaKUhjDXbTNkiWTq/N4VpKaF79bBjSExVV2NXmJpcM7z/gD7mbqNjxbmWW5nf1iNSSGnw==} dependencies: - prosemirror-model: 1.21.3 + prosemirror-model: 1.21.1 dev: false /prosemirror-schema-list@1.4.0: resolution: {integrity: sha512-nZOIq/AkBSzCENxUyLm5ltWE53e2PLk65ghMN8qLQptOmDVixZlPqtMeQdiNw0odL9vNpalEjl3upgRkuJ/Jyw==} dependencies: - prosemirror-model: 1.21.3 + prosemirror-model: 1.21.1 prosemirror-state: 1.4.3 prosemirror-transform: 1.9.0 dev: false @@ -17808,7 +17626,7 @@ packages: /prosemirror-state@1.4.3: resolution: {integrity: sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q==} dependencies: - prosemirror-model: 1.21.3 + prosemirror-model: 1.21.1 prosemirror-transform: 1.9.0 prosemirror-view: 1.33.8 dev: false @@ -17817,13 +17635,13 @@ packages: resolution: {integrity: sha512-oEwX1wrziuxMtwFvdDWSFHVUWrFJWt929kVVfHvtTi8yvw+5ppxjXZkMG/fuTdFo+3DXyIPSKfid+Be1npKXDA==} dependencies: prosemirror-keymap: 1.2.2 - prosemirror-model: 1.21.3 + prosemirror-model: 1.21.1 prosemirror-state: 1.4.3 prosemirror-transform: 1.9.0 prosemirror-view: 1.33.8 dev: false - /prosemirror-trailing-node@2.0.8(prosemirror-model@1.21.3)(prosemirror-state@1.4.3)(prosemirror-view@1.33.8): + /prosemirror-trailing-node@2.0.8(prosemirror-model@1.21.1)(prosemirror-state@1.4.3)(prosemirror-view@1.33.8): resolution: {integrity: sha512-ujRYhSuhQb1Jsarh1IHqb2KoSnRiD7wAMDGucP35DN7j5af6X7B18PfdPIrbwsPTqIAj0fyOvxbuPsWhNvylmA==} peerDependencies: prosemirror-model: ^1.19.0 @@ -17832,7 +17650,7 @@ packages: dependencies: '@remirror/core-constants': 2.0.2 escape-string-regexp: 4.0.0 - prosemirror-model: 1.21.3 + prosemirror-model: 1.21.1 prosemirror-state: 1.4.3 prosemirror-view: 1.33.8 dev: false @@ -17840,13 +17658,13 @@ packages: /prosemirror-transform@1.9.0: resolution: {integrity: sha512-5UXkr1LIRx3jmpXXNKDhv8OyAOeLTGuXNwdVfg8x27uASna/wQkr9p6fD3eupGOi4PLJfbezxTyi/7fSJypXHg==} dependencies: - prosemirror-model: 1.21.3 + prosemirror-model: 1.21.1 dev: false /prosemirror-view@1.33.8: resolution: {integrity: sha512-4PhMr/ufz2cdvFgpUAnZfs+0xij3RsFysreeG9V/utpwX7AJtYCDVyuRxzWoMJIEf4C7wVihuBNMPpFLPCiLQw==} dependencies: - prosemirror-model: 1.21.3 + prosemirror-model: 1.21.1 prosemirror-state: 1.4.3 prosemirror-transform: 1.9.0 dev: false @@ -18006,7 +17824,7 @@ packages: peerDependencies: react-scripts: '>=2.1.3' dependencies: - react-scripts: 5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(@swc/core@1.6.6)(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.3)(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 @@ -18097,7 +17915,7 @@ packages: strip-ansi: 6.0.1 text-table: 0.2.0 typescript: 5.4.3 - webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) transitivePeerDependencies: - eslint - supports-color @@ -18397,7 +18215,7 @@ packages: use-sidecar: 1.1.2(@types/react@18.2.45)(react@18.2.0) dev: true - /react-scripts@5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(@swc/core@1.6.6)(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.3)(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 @@ -18452,9 +18270,9 @@ packages: source-map-loader: 3.0.2(webpack@5.91.0) style-loader: 3.3.4(webpack@5.91.0) tailwindcss: 3.4.4 - terser-webpack-plugin: 5.3.10(@swc/core@1.6.6)(esbuild@0.21.3)(webpack@5.91.0) + terser-webpack-plugin: 5.3.10(@swc/core@1.6.3)(esbuild@0.21.3)(webpack@5.91.0) typescript: 5.4.3 - webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.3)(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) @@ -18904,15 +18722,14 @@ packages: /resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} dependencies: - is-core-module: 2.14.0 + is-core-module: 2.13.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 /resolve@2.0.0-next.5: resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} - hasBin: true dependencies: - is-core-module: 2.14.0 + is-core-module: 2.13.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -19107,7 +18924,7 @@ packages: klona: 2.0.6 neo-async: 2.6.2 sass: 1.71.1 - webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.3)(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==} @@ -19130,7 +18947,7 @@ packages: dependencies: neo-async: 2.6.2 sass: 1.71.1 - webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) dev: true /sass@1.71.1: @@ -19380,7 +19197,7 @@ packages: call-bind: 1.0.7 es-errors: 1.3.0 get-intrinsic: 1.2.4 - object-inspect: 1.13.2 + object-inspect: 1.13.1 /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -19494,7 +19311,7 @@ packages: abab: 2.0.6 iconv-lite: 0.6.3 source-map-js: 1.2.0 - webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) /source-map-resolve@0.5.3: resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==} @@ -19898,7 +19715,7 @@ packages: peerDependencies: webpack: ^5.0.0 dependencies: - webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) /style-mod@4.1.2: resolution: {integrity: sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==} @@ -20024,15 +19841,15 @@ packages: picocolors: 1.0.1 stable: 0.1.8 - /swc-loader@0.2.6(@swc/core@1.6.6)(webpack@5.91.0): + /swc-loader@0.2.6(@swc/core@1.6.3)(webpack@5.91.0): resolution: {integrity: sha512-9Zi9UP2YmDpgmQVbyOPJClY0dwf58JDyDMQ7uRc4krmc72twNI2fvlBWHLqVekBpPc7h5NJkGVT1zNDxFrqhvg==} peerDependencies: '@swc/core': ^1.2.147 webpack: '>=2' dependencies: - '@swc/core': 1.6.6 + '@swc/core': 1.6.3 '@swc/counter': 0.1.3 - webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) dev: true /swr@2.2.4(react@18.2.0): @@ -20185,7 +20002,7 @@ packages: ansi-escapes: 4.3.2 supports-hyperlinks: 2.3.0 - /terser-webpack-plugin@5.3.10(@swc/core@1.6.6)(esbuild@0.21.3)(webpack@5.91.0): + /terser-webpack-plugin@5.3.10(@swc/core@1.6.3)(esbuild@0.21.3)(webpack@5.91.0): resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -20202,13 +20019,13 @@ packages: optional: true dependencies: '@jridgewell/trace-mapping': 0.3.25 - '@swc/core': 1.6.6 + '@swc/core': 1.6.3 esbuild: 0.21.3 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.31.1 - webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) /terser@5.31.1: resolution: {integrity: sha512-37upzU1+viGvuFtBo9NPufCb9dwM0+l9hMxYyWfBA+fbwrPqNJAhbZ6W47bBFnZHKHTUBnMvi87434qq+qnxOg==} @@ -20395,7 +20212,7 @@ packages: tslib: 2.6.3 dev: false - /ts-node@10.9.2(@swc/core@1.6.6)(@types/node@17.0.45)(typescript@5.4.3): + /ts-node@10.9.2(@swc/core@1.6.3)(@types/node@17.0.45)(typescript@5.4.3): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -20410,7 +20227,7 @@ packages: optional: true dependencies: '@cspotcode/source-map-support': 0.8.1 - '@swc/core': 1.6.6 + '@swc/core': 1.6.3 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 @@ -20766,8 +20583,8 @@ packages: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} - /unplugin@1.11.0: - resolution: {integrity: sha512-3r7VWZ/webh0SGgJScpWl2/MRCZK5d3ZYFcNaeci/GQ7Teop7zf0Nl2pUuz7G21BwPd9pcUPOC5KmJ2L3WgC5g==} + /unplugin@1.10.1: + resolution: {integrity: sha512-d6Mhq8RJeGA8UfKCu54Um4lFA0eSaRa3XxdAJg8tIdxbu1ubW0hBCZUL7yI2uGyYCRndvbK8FLHzqy2XKfeMsg==} engines: {node: '>=14.0.0'} dependencies: acorn: 8.12.0 @@ -21069,7 +20886,7 @@ packages: mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.2.0 - webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) /webpack-dev-middleware@6.1.3(webpack@5.91.0): resolution: {integrity: sha512-A4ChP0Qj8oGociTs6UdlRUGANIGrCDL3y+pmQMc+dSsraXHCatFpmMey4mYELA+juqwUqwQsUgJJISXl1KWmiw==} @@ -21085,7 +20902,7 @@ packages: mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.2.0 - webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) dev: true /webpack-dev-server@4.15.2(webpack@5.91.0): @@ -21129,7 +20946,7 @@ packages: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) webpack-dev-middleware: 5.3.4(webpack@5.91.0) ws: 8.17.1 transitivePeerDependencies: @@ -21153,7 +20970,7 @@ packages: webpack: ^4.44.2 || ^5.47.0 dependencies: tapable: 2.2.1 - webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) webpack-sources: 2.3.1 /webpack-merge@5.10.0: @@ -21190,7 +21007,7 @@ packages: resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} dev: true - /webpack@5.91.0(@swc/core@1.6.6)(esbuild@0.21.3): + /webpack@5.91.0(@swc/core@1.6.3)(esbuild@0.21.3): resolution: {integrity: sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==} engines: {node: '>=10.13.0'} hasBin: true @@ -21210,7 +21027,7 @@ packages: browserslist: 4.23.1 chrome-trace-event: 1.0.4 enhanced-resolve: 5.17.0 - es-module-lexer: 1.5.4 + es-module-lexer: 1.5.3 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 @@ -21221,7 +21038,7 @@ packages: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(@swc/core@1.6.6)(esbuild@0.21.3)(webpack@5.91.0) + terser-webpack-plugin: 5.3.10(@swc/core@1.6.3)(esbuild@0.21.3)(webpack@5.91.0) watchpack: 2.4.1 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -21482,7 +21299,7 @@ packages: fast-json-stable-stringify: 2.1.0 pretty-bytes: 5.6.0 upath: 1.2.0 - webpack: 5.91.0(@swc/core@1.6.6)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) webpack-sources: 1.4.3 workbox-build: 6.6.0 transitivePeerDependencies: @@ -21640,8 +21457,8 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - /yocto-queue@1.1.1: - resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==} + /yocto-queue@1.0.0: + resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} engines: {node: '>=12.20'} dev: true @@ -21704,9 +21521,9 @@ packages: use-sync-external-store: 1.2.0(react@18.2.0) dev: false - github.com/theopensystemslab/planx-core/b975cf9(@types/react@18.2.45): - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/b975cf9} - id: github.com/theopensystemslab/planx-core/b975cf9 + github.com/theopensystemslab/planx-core/60158b2(@types/react@18.2.45): + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/60158b2} + id: github.com/theopensystemslab/planx-core/60158b2 name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true diff --git a/editor.planx.uk/src/components/Header.test.tsx b/editor.planx.uk/src/components/Header.test.tsx index 73ea68818b..94e370320e 100644 --- a/editor.planx.uk/src/components/Header.test.tsx +++ b/editor.planx.uk/src/components/Header.test.tsx @@ -26,6 +26,16 @@ const mockTeam1: Team = { linkColour: "#0010A4", favicon: null, }, + teamSettings: { + boundaryUrl: "https://www.planning.data.gov.uk/", + helpEmail: "example@council.co.uk", + helpPhone: "(01234) 56789", + helpOpeningHours: "Monday - Friday, 9am - 5pm", + emailReplyToId: "727d48fa-cb8a-42f9-b8b2-55032f3bb451", + referenceCode: "OSL", + externalPlanningSiteName: "Open Planning", + externalPlanningSiteUrl: "openplanning.com", + }, }; const mockTeam2: Team = { @@ -42,6 +52,16 @@ const mockTeam2: Team = { linkColour: "#0010A4", favicon: null, }, + teamSettings: { + boundaryUrl: "https://www.planning.data.gov.uk/", + helpEmail: "example@council.co.uk", + helpPhone: "(01234) 56789", + helpOpeningHours: "Monday - Friday, 9am - 5pm", + emailReplyToId: "727d48fa-cb8a-42f9-b8b2-55032f3bb451", + referenceCode: "CSL", + externalPlanningSiteName: "Closed Planning", + externalPlanningSiteUrl: "closedplanning.com", + }, }; jest.spyOn(ReactNavi, "useNavigation").mockReturnValue({ @@ -54,7 +74,7 @@ describe("Header Component - Editor Route", () => { setState({ previewEnvironment: "editor", teamName: mockTeam1.name, - teamSettings: mockTeam1.settings, + teamSettings: mockTeam1.teamSettings, teamTheme: mockTeam1.theme, teamSlug: mockTeam1.slug, user: { diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/store/team.ts b/editor.planx.uk/src/pages/FlowEditor/lib/store/team.ts index 113069d56c..884b4e5cb9 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/store/team.ts +++ b/editor.planx.uk/src/pages/FlowEditor/lib/store/team.ts @@ -1,5 +1,4 @@ import { - NotifyPersonalisation, Team, TeamIntegrations, TeamSettings, @@ -13,11 +12,10 @@ import { SharedStore } from "./shared"; export interface TeamStore { boundaryBBox?: Team["boundaryBBox"]; - notifyPersonalisation?: NotifyPersonalisation; teamId: number; teamIntegrations: TeamIntegrations; teamName: string; - teamSettings?: TeamSettings; + teamSettings: TeamSettings; teamSlug: string; teamTheme: TeamTheme; @@ -36,22 +34,20 @@ export const teamStore: StateCreator< TeamStore > = (set, get) => ({ boundaryBBox: undefined, - notifyPersonalisation: undefined, teamId: 0, teamIntegrations: {} as TeamIntegrations, teamName: "", - teamSettings: undefined, + teamSettings: {} as TeamSettings, teamSlug: "", teamTheme: {} as TeamTheme, setTeam: (team) => { set({ boundaryBBox: team.boundaryBBox, - notifyPersonalisation: team.notifyPersonalisation, teamId: team.id, teamIntegrations: team.integrations, teamName: team.name, - teamSettings: team.settings, + teamSettings: team.teamSettings, teamSlug: team.slug, teamTheme: team.theme, }); @@ -67,8 +63,7 @@ export const teamStore: StateCreator< id: get().teamId, integrations: get().teamIntegrations, name: get().teamName, - notifyPersonalisation: get().notifyPersonalisation, - settings: get().teamSettings, + teamSettings: get().teamSettings, slug: get().teamSlug, theme: get().teamTheme, }), @@ -110,7 +105,6 @@ export const teamStore: StateCreator< clearTeamStore: () => set({ boundaryBBox: undefined, - notifyPersonalisation: undefined, teamId: 0, teamIntegrations: undefined, teamName: "", diff --git a/editor.planx.uk/src/routes/views/draft.tsx b/editor.planx.uk/src/routes/views/draft.tsx index 5860824a5f..cf2361140f 100644 --- a/editor.planx.uk/src/routes/views/draft.tsx +++ b/editor.planx.uk/src/routes/views/draft.tsx @@ -69,12 +69,18 @@ const fetchSettingsForDraftView = async ( favicon } name - settings + settings: team_settings { + boundaryUrl: boundary_url + homepage + helpEmail: help_email + helpPhone: help_phone + helpOpeningHours: help_opening_hours + emailReplyToId: email_reply_to_id + } integrations { hasPlanningData: has_planning_data } slug - notifyPersonalisation: notify_personalisation boundaryBBox: boundary_bbox } settings diff --git a/editor.planx.uk/src/routes/views/published.tsx b/editor.planx.uk/src/routes/views/published.tsx index 9570675577..09d9cb6db4 100644 --- a/editor.planx.uk/src/routes/views/published.tsx +++ b/editor.planx.uk/src/routes/views/published.tsx @@ -95,12 +95,19 @@ export const fetchSettingsForPublishedView = async ( favicon } name - settings + settings: team_settings { + boundaryUrl: boundary_url + homepage + helpEmail: help_email + helpPhone: help_phone + helpOpeningHours: help_opening_hours + emailReplyToId: email_reply_to_id + } integrations { hasPlanningData: has_planning_data } slug - notifyPersonalisation: notify_personalisation + boundaryBBox: boundary_bbox } settings diff --git a/editor.planx.uk/src/routes/views/standalone.tsx b/editor.planx.uk/src/routes/views/standalone.tsx index 5212c41b38..6f87ff7cde 100644 --- a/editor.planx.uk/src/routes/views/standalone.tsx +++ b/editor.planx.uk/src/routes/views/standalone.tsx @@ -69,12 +69,18 @@ const fetchDataForStandaloneView = async ( favicon } name - settings + settings: team_settings { + boundaryUrl: boundary_url + homepage + helpEmail: help_email + helpPhone: help_phone + helpOpeningHours: help_opening_hours + emailReplyToId: email_reply_to_id + } integrations { hasPlanningData: has_planning_data } slug - notifyPersonalisation: notify_personalisation boundaryBBox: boundary_bbox } settings diff --git a/editor.planx.uk/src/ui/public/ExternalPlanningSiteDialog.stories.tsx b/editor.planx.uk/src/ui/public/ExternalPlanningSiteDialog.stories.tsx index 723c0f81b9..25df956831 100644 --- a/editor.planx.uk/src/ui/public/ExternalPlanningSiteDialog.stories.tsx +++ b/editor.planx.uk/src/ui/public/ExternalPlanningSiteDialog.stories.tsx @@ -16,11 +16,5 @@ export default meta; export const Basic = { args: { purpose: DialogPurpose.MissingProjectType, - teamSettings: { - externalPlanningSite: { - name: "Council website", - url: "test.gov.uk", - }, - }, }, } satisfies Story; diff --git a/editor.planx.uk/src/ui/public/ExternalPlanningSiteDialog.tsx b/editor.planx.uk/src/ui/public/ExternalPlanningSiteDialog.tsx index 27a9d5c256..5b042c81f9 100644 --- a/editor.planx.uk/src/ui/public/ExternalPlanningSiteDialog.tsx +++ b/editor.planx.uk/src/ui/public/ExternalPlanningSiteDialog.tsx @@ -32,11 +32,11 @@ const getTitleAndContent = ( content: ( <>

    At present, only the listed project types are supported.

    - {settings?.supportEmail && ( + {settings?.helpEmail && (

    Please feel free to{" "} @@ -53,7 +53,6 @@ const getTitleAndContent = ( interface Props { purpose: DialogPurpose; - teamSettings?: TeamSettings; } export default function ExternalPlanningSiteDialog({ @@ -77,7 +76,7 @@ export default function ExternalPlanningSiteDialog({

    You can apply for a Lawful Development Certificate without an address and postcode through{" "} - {teamSettings?.externalPlanningSite?.name}. + {teamSettings?.externalPlanningSiteName}.

    @@ -88,12 +87,9 @@ export default function ExternalPlanningSiteDialog({ > Return to application - + - Go to {teamSettings?.externalPlanningSite?.name} + Go to {teamSettings?.externalPlanningSiteName} (opens in a new tab) diff --git a/hasura.planx.uk/metadata/tables.yaml b/hasura.planx.uk/metadata/tables.yaml index bc532a857d..1bab36f613 100644 --- a/hasura.planx.uk/metadata/tables.yaml +++ b/hasura.planx.uk/metadata/tables.yaml @@ -157,7 +157,7 @@ definition: enable_manual: false insert: - columns: '*' + columns: "*" retry_conf: interval_sec: 30 num_retries: 1 @@ -171,7 +171,7 @@ query_params: type: bops-submission template_engine: Kriti - url: '{{$base_url}}/webhooks/hasura/send-slack-notification' + url: "{{$base_url}}/webhooks/hasura/send-slack-notification" version: 2 - table: name: document_template @@ -225,7 +225,7 @@ definition: enable_manual: false insert: - columns: '*' + columns: "*" retry_conf: interval_sec: 30 num_retries: 1 @@ -239,7 +239,7 @@ query_params: type: email-submission template_engine: Kriti - url: '{{$base_url}}/webhooks/hasura/send-slack-notification' + url: "{{$base_url}}/webhooks/hasura/send-slack-notification" version: 2 - table: name: feedback @@ -451,9 +451,9 @@ forward_client_headers: false headers: - name: authorization - value: '{{HASURA_PLANX_API_KEY}}' + value: "{{HASURA_PLANX_API_KEY}}" timeout: 10 - url: '{{HASURA_PLANX_API_URL}}/webhooks/hasura/validate-input/jsonb/clean-html' + url: "{{HASURA_PLANX_API_URL}}/webhooks/hasura/validate-input/jsonb/clean-html" type: http - role: platformAdmin permission: @@ -475,9 +475,9 @@ forward_client_headers: false headers: - name: authorization - value: '{{HASURA_PLANX_API_KEY}}' + value: "{{HASURA_PLANX_API_KEY}}" timeout: 10 - url: '{{HASURA_PLANX_API_URL}}/webhooks/hasura/validate-input/jsonb/clean-html' + url: "{{HASURA_PLANX_API_URL}}/webhooks/hasura/validate-input/jsonb/clean-html" type: http - role: teamEditor permission: @@ -506,9 +506,9 @@ forward_client_headers: false headers: - name: authorization - value: '{{HASURA_PLANX_API_KEY}}' + value: "{{HASURA_PLANX_API_KEY}}" timeout: 10 - url: '{{HASURA_PLANX_API_URL}}/webhooks/hasura/validate-input/jsonb/clean-html' + url: "{{HASURA_PLANX_API_URL}}/webhooks/hasura/validate-input/jsonb/clean-html" type: http select_permissions: - role: api @@ -609,9 +609,9 @@ forward_client_headers: false headers: - name: authorization - value: '{{HASURA_PLANX_API_KEY}}' + value: "{{HASURA_PLANX_API_KEY}}" timeout: 10 - url: '{{HASURA_PLANX_API_URL}}/webhooks/hasura/validate-input/jsonb/clean-html' + url: "{{HASURA_PLANX_API_URL}}/webhooks/hasura/validate-input/jsonb/clean-html" type: http - role: platformAdmin permission: @@ -629,9 +629,9 @@ forward_client_headers: false headers: - name: authorization - value: '{{HASURA_PLANX_API_KEY}}' + value: "{{HASURA_PLANX_API_KEY}}" timeout: 10 - url: '{{HASURA_PLANX_API_URL}}/webhooks/hasura/validate-input/jsonb/clean-html' + url: "{{HASURA_PLANX_API_URL}}/webhooks/hasura/validate-input/jsonb/clean-html" type: http - role: teamEditor permission: @@ -656,9 +656,9 @@ forward_client_headers: false headers: - name: authorization - value: '{{HASURA_PLANX_API_KEY}}' + value: "{{HASURA_PLANX_API_KEY}}" timeout: 10 - url: '{{HASURA_PLANX_API_URL}}/webhooks/hasura/validate-input/jsonb/clean-html' + url: "{{HASURA_PLANX_API_URL}}/webhooks/hasura/validate-input/jsonb/clean-html" type: http delete_permissions: - role: platformAdmin @@ -689,9 +689,9 @@ forward_client_headers: false headers: - name: authorization - value: '{{HASURA_PLANX_API_KEY}}' + value: "{{HASURA_PLANX_API_KEY}}" timeout: 10 - url: '{{HASURA_PLANX_API_URL}}/webhooks/hasura/validate-input/jsonb/clean-html' + url: "{{HASURA_PLANX_API_URL}}/webhooks/hasura/validate-input/jsonb/clean-html" type: http select_permissions: - role: platformAdmin @@ -724,9 +724,9 @@ forward_client_headers: false headers: - name: authorization - value: '{{HASURA_PLANX_API_KEY}}' + value: "{{HASURA_PLANX_API_KEY}}" timeout: 10 - url: '{{HASURA_PLANX_API_URL}}/webhooks/hasura/validate-input/jsonb/clean-html' + url: "{{HASURA_PLANX_API_URL}}/webhooks/hasura/validate-input/jsonb/clean-html" type: http - table: name: lowcal_sessions @@ -873,7 +873,7 @@ method: POST query_params: {} template_engine: Kriti - url: '{{$base_url}}/send-email/confirmation' + url: "{{$base_url}}/send-email/confirmation" version: 2 - name: setup_lowcal_expiry_events definition: @@ -903,7 +903,7 @@ method: POST query_params: {} template_engine: Kriti - url: '{{$base_url}}/webhooks/hasura/create-expiry-event' + url: "{{$base_url}}/webhooks/hasura/create-expiry-event" version: 2 - name: setup_lowcal_reminder_events definition: @@ -933,7 +933,7 @@ method: POST query_params: {} template_engine: Kriti - url: '{{$base_url}}/webhooks/hasura/create-reminder-event' + url: "{{$base_url}}/webhooks/hasura/create-reminder-event" version: 2 - table: name: operations @@ -1110,7 +1110,7 @@ definition: enable_manual: false insert: - columns: '*' + columns: "*" retry_conf: interval_sec: 10 num_retries: 3 @@ -1132,13 +1132,13 @@ method: POST query_params: {} template_engine: Kriti - url: '{{$base_url}}/webhooks/hasura/create-payment-expiry-events' + url: "{{$base_url}}/webhooks/hasura/create-payment-expiry-events" version: 2 - name: setup_payment_invitation_events definition: enable_manual: false insert: - columns: '*' + columns: "*" retry_conf: interval_sec: 10 num_retries: 3 @@ -1160,13 +1160,13 @@ method: POST query_params: {} template_engine: Kriti - url: '{{$base_url}}/webhooks/hasura/create-payment-invitation-events' + url: "{{$base_url}}/webhooks/hasura/create-payment-invitation-events" version: 2 - name: setup_payment_reminder_events definition: enable_manual: false insert: - columns: '*' + columns: "*" retry_conf: interval_sec: 10 num_retries: 3 @@ -1188,7 +1188,7 @@ method: POST query_params: {} template_engine: Kriti - url: '{{$base_url}}/webhooks/hasura/create-payment-reminder-events' + url: "{{$base_url}}/webhooks/hasura/create-payment-reminder-events" version: 2 - name: setup_payment_send_events definition: @@ -1217,7 +1217,7 @@ method: POST query_params: {} template_engine: Kriti - url: '{{$base_url}}/webhooks/hasura/create-payment-send-events' + url: "{{$base_url}}/webhooks/hasura/create-payment-send-events" version: 2 - table: name: payment_status @@ -1660,6 +1660,8 @@ - role: api permission: columns: + - id + - team_id - boundary_json - boundary_url - email_reply_to_id @@ -1669,14 +1671,14 @@ - help_opening_hours - help_phone - homepage - - id - reference_code - - team_id filter: {} comment: "" - role: platformAdmin permission: columns: + - id + - team_id - boundary_json - boundary_url - email_reply_to_id @@ -1686,9 +1688,7 @@ - help_opening_hours - help_phone - homepage - - id - reference_code - - team_id filter: {} comment: "" - role: public @@ -1696,8 +1696,12 @@ columns: - boundary_json - boundary_url + - email_reply_to_id - external_planning_site_name - external_planning_site_url + - help_email + - help_opening_hours + - help_phone - homepage - id - reference_code @@ -1707,6 +1711,8 @@ - role: teamEditor permission: columns: + - id + - team_id - boundary_json - boundary_url - email_reply_to_id @@ -1716,9 +1722,7 @@ - help_opening_hours - help_phone - homepage - - id - reference_code - - team_id filter: {} comment: "" update_permissions: @@ -2060,7 +2064,7 @@ definition: enable_manual: false insert: - columns: '*' + columns: "*" retry_conf: interval_sec: 30 num_retries: 1 @@ -2074,7 +2078,7 @@ query_params: type: uniform-submission template_engine: Kriti - url: '{{$base_url}}/webhooks/hasura/send-slack-notification' + url: "{{$base_url}}/webhooks/hasura/send-slack-notification" version: 2 - table: name: user_roles From c84453267834d218034f170df7eb44d4c407c496 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Wed, 3 Jul 2024 09:24:22 +0100 Subject: [PATCH 097/150] chore: Only open dependabot PRs for major versions (#3361) --- .github/dependabot.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) 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" From 772ea6a133c72a29b1afce88cd6385edbdb3db8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Wed, 3 Jul 2024 10:50:21 +0100 Subject: [PATCH 098/150] chore: Bump planx-core (#3365) --- api.planx.uk/package.json | 2 +- api.planx.uk/pnpm-lock.yaml | 8 ++++---- e2e/tests/api-driven/package.json | 2 +- e2e/tests/api-driven/pnpm-lock.yaml | 8 ++++---- e2e/tests/ui-driven/package.json | 2 +- e2e/tests/ui-driven/pnpm-lock.yaml | 8 ++++---- 6 files changed, 15 insertions(+), 15 deletions(-) diff --git a/api.planx.uk/package.json b/api.planx.uk/package.json index 89b12c4858..09c750cf4c 100644 --- a/api.planx.uk/package.json +++ b/api.planx.uk/package.json @@ -5,7 +5,7 @@ "packageManager": "pnpm@8.6.6", "dependencies": { "@airbrake/node": "^2.1.8", - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#462914f", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#60158b2", "@types/isomorphic-fetch": "^0.0.36", "adm-zip": "^0.5.10", "aws-sdk": "^2.1467.0", diff --git a/api.planx.uk/pnpm-lock.yaml b/api.planx.uk/pnpm-lock.yaml index 9aecb6701a..a4251b7ad7 100644 --- a/api.planx.uk/pnpm-lock.yaml +++ b/api.planx.uk/pnpm-lock.yaml @@ -14,8 +14,8 @@ dependencies: specifier: ^2.1.8 version: 2.1.8 '@opensystemslab/planx-core': - specifier: git+https://github.com/theopensystemslab/planx-core#462914f - version: github.com/theopensystemslab/planx-core/462914f + specifier: git+https://github.com/theopensystemslab/planx-core#60158b2 + version: github.com/theopensystemslab/planx-core/60158b2 '@types/isomorphic-fetch': specifier: ^0.0.36 version: 0.0.36 @@ -8202,8 +8202,8 @@ packages: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} dev: false - github.com/theopensystemslab/planx-core/462914f: - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/462914f} + github.com/theopensystemslab/planx-core/60158b2: + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/60158b2} name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true diff --git a/e2e/tests/api-driven/package.json b/e2e/tests/api-driven/package.json index 1153fc789c..3d7bb5de3d 100644 --- a/e2e/tests/api-driven/package.json +++ b/e2e/tests/api-driven/package.json @@ -7,7 +7,7 @@ "packageManager": "pnpm@8.6.6", "dependencies": { "@cucumber/cucumber": "^9.3.0", - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#462914f", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#60158b2", "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 5c6aa2f01d..5852716546 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#462914f - version: github.com/theopensystemslab/planx-core/462914f + specifier: git+https://github.com/theopensystemslab/planx-core#60158b2 + version: github.com/theopensystemslab/planx-core/60158b2 axios: specifier: ^1.6.8 version: 1.6.8 @@ -3053,8 +3053,8 @@ packages: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} dev: false - github.com/theopensystemslab/planx-core/462914f: - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/462914f} + github.com/theopensystemslab/planx-core/60158b2: + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/60158b2} name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true diff --git a/e2e/tests/ui-driven/package.json b/e2e/tests/ui-driven/package.json index 0faffd78dd..920b91f9c2 100644 --- a/e2e/tests/ui-driven/package.json +++ b/e2e/tests/ui-driven/package.json @@ -8,7 +8,7 @@ "postinstall": "./install-dependencies.sh" }, "dependencies": { - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#462914f", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#60158b2", "axios": "^1.6.8", "dotenv": "^16.3.1", "eslint": "^8.56.0", diff --git a/e2e/tests/ui-driven/pnpm-lock.yaml b/e2e/tests/ui-driven/pnpm-lock.yaml index 84ffe4dbb5..6a74c3ec0b 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#462914f - version: github.com/theopensystemslab/planx-core/462914f + specifier: git+https://github.com/theopensystemslab/planx-core#60158b2 + version: github.com/theopensystemslab/planx-core/60158b2 axios: specifier: ^1.6.8 version: 1.6.8 @@ -2780,8 +2780,8 @@ packages: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} dev: false - github.com/theopensystemslab/planx-core/462914f: - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/462914f} + github.com/theopensystemslab/planx-core/60158b2: + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/60158b2} name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true From 712819fbcb133fc639cc3a40632d5530eb7ed00b Mon Sep 17 00:00:00 2001 From: Jessica McInchak Date: Wed, 3 Jul 2024 15:53:33 +0200 Subject: [PATCH 099/150] chore: show number units on inactive List if defined (#3367) --- .../src/@planx/components/List/utils.tsx | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/editor.planx.uk/src/@planx/components/List/utils.tsx b/editor.planx.uk/src/@planx/components/List/utils.tsx index 7b26eee627..2f1bf744cf 100644 --- a/editor.planx.uk/src/@planx/components/List/utils.tsx +++ b/editor.planx.uk/src/@planx/components/List/utils.tsx @@ -1,13 +1,14 @@ +import { styled } from "@mui/material/styles"; import React from "react"; +import { optional } from "zod"; import { Field, UserResponse } from "./model"; -import { styled } from "@mui/material/styles"; 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 @@ -21,6 +22,7 @@ export function formatSchemaDisplayValue( ) { switch (field.type) { case "number": + return field.data.units ? `${value} ${field.data.units}` : value; case "text": return value; case "checklist": { @@ -106,15 +108,15 @@ 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 = {} + object: T, + { depth = Infinity, path = null, separator = "." }: FlattenOptions = {}, ): T { return Object.keys(object).reduce((acc: T, key: string): T => { const value = object[key]; @@ -133,8 +135,11 @@ export function flatten>( !(Array.isArray(value) && value.length === 0), ].every(Boolean); - return (isObject && depth > 0) - ? { ...acc, ...flatten(value, { depth: depth - 1, path: newPath, separator }) } + return isObject && depth > 0 + ? { + ...acc, + ...flatten(value, { depth: depth - 1, path: newPath, separator }), + } : { ...acc, [newPath]: value }; }, {} as T); } From 2d5ad70fa72bbf830d72376a63755e5ac12797ac Mon Sep 17 00:00:00 2001 From: Rory Doak <138574807+RODO94@users.noreply.github.com> Date: Wed, 3 Jul 2024 17:02:57 +0100 Subject: [PATCH 100/150] feat: Fetch `team_settings` data for Editor forms and adding Update fn (#3366) --- .../Settings/GeneralSettings/BoundaryForm.tsx | 12 ++++++-- .../Settings/GeneralSettings/ContactForm.tsx | 29 ++++++++++++++----- .../Settings/GeneralSettings/index.tsx | 27 +++++------------ .../Settings/shared/SettingsForm.tsx | 1 + .../src/pages/FlowEditor/lib/store/team.ts | 10 +++++++ editor.planx.uk/src/routes/teamSettings.tsx | 10 +++---- 6 files changed, 55 insertions(+), 34 deletions(-) diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/BoundaryForm.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/BoundaryForm.tsx index dbd93e3f0b..a33aa3d16c 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/BoundaryForm.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/BoundaryForm.tsx @@ -1,4 +1,5 @@ import { useFormik } from "formik"; +import { useStore } from "pages/FlowEditor/lib/store"; import React, { ChangeEvent } from "react"; import InputLabel from "ui/editor/InputLabel"; import Input from "ui/shared/Input"; @@ -9,9 +10,14 @@ import { FormProps } from "."; export default function BoundaryForm({ formikConfig, onSuccess }: FormProps) { const formik = useFormik({ ...formikConfig, - onSubmit(values, { resetForm }) { - onSuccess(); - resetForm({ values }); + onSubmit: async (values, { resetForm }) => { + const isSuccess = await useStore.getState().updateTeamSettings({ + boundaryUrl: values.boundaryUrl, + }); + if (isSuccess) { + onSuccess(); + resetForm({ values }); + } }, }); diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/ContactForm.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/ContactForm.tsx index 5b8c8c4047..906ab6531d 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/ContactForm.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/ContactForm.tsx @@ -1,4 +1,5 @@ import { useFormik } from "formik"; +import { useStore } from "pages/FlowEditor/lib/store"; import React, { ChangeEvent } from "react"; import InputLabel from "ui/editor/InputLabel"; import Input from "ui/shared/Input"; @@ -13,16 +14,26 @@ export default function ContactForm({ formikConfig, onSuccess }: FormProps) { .email("Please enter valid email") .required("Help Email is required"), helpPhone: Yup.string().required("Help Phone is required"), - helpOpeningHours: Yup.string(), - homepage: Yup.string().url("Please enter a valid URL for the homepage"), + helpOpeningHours: Yup.string().required(), + homepage: Yup.string() + .url("Please enter a valid URL for the homepage") + .required("Enter a homepage"), }); const formik = useFormik({ ...formikConfig, validationSchema: formSchema, - onSubmit(values, { resetForm }) { - onSuccess(); - resetForm({ values }); + onSubmit: async (values, { resetForm }) => { + const isSuccess = await useStore.getState().updateTeamSettings({ + helpEmail: values.helpEmail, + helpOpeningHours: values.helpOpeningHours, + helpPhone: values.helpPhone, + homepage: values.homepage, + }); + if (isSuccess) { + onSuccess(); + resetForm({ values }); + } }, }); @@ -41,18 +52,20 @@ export default function ContactForm({ formikConfig, onSuccess }: FormProps) { } input={ <> - + { onChangeFn("homepage", event); }} - id="homepageUrl" + value={formik.values.homepage} + id="homepage" /> { onChangeFn("helpEmail", event); }} @@ -62,6 +75,7 @@ export default function ContactForm({ formikConfig, onSuccess }: FormProps) { { onChangeFn("helpPhone", event); }} @@ -72,6 +86,7 @@ export default function ContactForm({ formikConfig, onSuccess }: FormProps) { { onChangeFn("helpOpeningHours", event); }} diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/index.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/index.tsx index a2fec53d73..b2ee94db39 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/index.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/index.tsx @@ -2,44 +2,33 @@ import Alert from "@mui/material/Alert"; import Box from "@mui/material/Box"; import Snackbar from "@mui/material/Snackbar"; import Typography from "@mui/material/Typography"; +import { TeamSettings } from "@opensystemslab/planx-core/types"; import { FormikConfig } from "formik"; +import { useStore } from "pages/FlowEditor/lib/store"; import React, { useEffect, useState } from "react"; import SettingsSection from "ui/editor/SettingsSection"; import BoundaryForm from "./BoundaryForm"; import ContactForm from "./ContactForm"; -export interface GeneralSettings { - boundaryUrl: string; - helpEmail: string; - helpPhone: string; - helpOpeningHours: string; - homepage: string; -} - export interface FormProps { - formikConfig: FormikConfig; + formikConfig: FormikConfig; onSuccess: () => void; } const GeneralSettings: React.FC = () => { const [formikConfig, setFormikConfig] = useState< - FormikConfig | undefined + FormikConfig | undefined >(undefined); - const initialValues = { - boundaryUrl: "", - helpEmail: "", - helpPhone: "", - helpOpeningHours: "", - homepage: "", - }; - useEffect(() => { const fetchTeam = async () => { try { + const fetchedTeam = await useStore.getState().fetchCurrentTeam(); + if (!fetchedTeam) throw Error("Unable to find team"); + setFormikConfig({ - initialValues: initialValues, + initialValues: fetchedTeam.teamSettings, onSubmit: () => {}, validateOnBlur: false, validateOnChange: false, diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/shared/SettingsForm.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/shared/SettingsForm.tsx index aefab091a4..61b67c6f6c 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/shared/SettingsForm.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/shared/SettingsForm.tsx @@ -40,6 +40,7 @@ export const SettingsForm = ({ {preview} )} + void; fetchCurrentTeam: () => Promise; updateTeamTheme: (theme: Partial) => Promise; + updateTeamSettings: (teamSettings: Partial) => Promise; } export const teamStore: StateCreator< @@ -128,4 +129,13 @@ export const teamStore: StateCreator< const isSuccess = await $client.team.updateTheme(teamId, theme); return isSuccess; }, + + updateTeamSettings: async (teamSettings: Partial) => { + const { teamId, $client } = get(); + const isSuccess = await $client.team.updateTeamSettings( + teamId, + teamSettings, + ); + return isSuccess; + }, }); diff --git a/editor.planx.uk/src/routes/teamSettings.tsx b/editor.planx.uk/src/routes/teamSettings.tsx index 27fcb11715..75f14a89b7 100644 --- a/editor.planx.uk/src/routes/teamSettings.tsx +++ b/editor.planx.uk/src/routes/teamSettings.tsx @@ -37,6 +37,11 @@ const teamSettingsRoutes = compose( ), From 04a98cb3f920da3aed9a43bbbcba84530e693fc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Fri, 5 Jul 2024 08:46:32 +0100 Subject: [PATCH 101/150] chore: Run `pnpm lint:fix` in Editor (#3372) --- .../@planx/components/List/Public/Context.tsx | 2 +- .../@planx/components/List/Public/Fields.tsx | 32 +--- .../components/List/Public/index.test.tsx | 180 +++++++++++------- .../@planx/components/List/Public/index.tsx | 6 +- .../src/@planx/components/Send/Public.tsx | 6 +- .../src/@planx/components/SetValue/Editor.tsx | 4 +- editor.planx.uk/src/ui/shared/Checkbox.tsx | 4 +- 7 files changed, 130 insertions(+), 104 deletions(-) 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 38bb5b1ec4..8d7f033828 100644 --- a/editor.planx.uk/src/@planx/components/List/Public/Context.tsx +++ b/editor.planx.uk/src/@planx/components/List/Public/Context.tsx @@ -129,7 +129,7 @@ export const ListProvider: React.FC = (props) => { if (formik.values.userData.length < schema.min) { return setMinError(true); } - + formik.handleSubmit(); }; 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 8fad6c35db..961e219c8c 100644 --- a/editor.planx.uk/src/@planx/components/List/Public/Fields.tsx +++ b/editor.planx.uk/src/@planx/components/List/Public/Fields.tsx @@ -6,6 +6,7 @@ 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"; @@ -23,21 +24,14 @@ import type { TextField, } from "../model"; import { useListContext } from "./Context"; -import { get } from "lodash"; type Props = T & { id: string }; -export const TextFieldInput: React.FC> = ({ - id, - data, -}) => { +export const TextFieldInput: React.FC> = ({ id, data }) => { const { formik, activeIndex } = useListContext(); return ( - + { if (type === "email") return "email"; @@ -48,10 +42,7 @@ export const TextFieldInput: React.FC> = ({ bordered value={formik.values.userData[activeIndex][data.fn]} onChange={formik.handleChange} - errorMessage={get( - formik.errors, - ["userData", activeIndex, data.fn], - )} + errorMessage={get(formik.errors, ["userData", activeIndex, data.fn])} id={id} rows={ data.type && ["long", "extraLong"].includes(data.type) ? 5 : undefined @@ -80,10 +71,7 @@ export const NumberFieldInput: React.FC> = ({ const { formik, activeIndex } = useListContext(); return ( - + > = ({ type="number" value={formik.values.userData[activeIndex][data.fn]} onChange={formik.handleChange} - errorMessage={get( - formik.errors, - ["userData", activeIndex, data.fn], - )} + errorMessage={get(formik.errors, ["userData", activeIndex, data.fn])} inputProps={{ "aria-describedby": [ data.description ? DESCRIPTION_TEXT : "", @@ -161,10 +146,7 @@ export const SelectFieldInput: React.FC> = (props) => { const { id, data } = props; return ( - + { describe("Form validation and error handling", () => { test("form validation is triggered when saving an item", async () => { - const { user, getByRole, getAllByTestId } = setup(); + const { user, getByRole, getAllByTestId } = setup( + , + ); let errorMessages = getAllByTestId(/error-message-input/); - + // Each field has an ErrorWrapper - expect(errorMessages).toHaveLength(mockZooProps.schema.fields.length) + expect(errorMessages).toHaveLength(mockZooProps.schema.fields.length); // All are empty initially - errorMessages.forEach(message => { + 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) + expect(errorMessages).toHaveLength(mockZooProps.schema.fields.length); // Each field is in an error state - errorMessages.forEach(message => { + errorMessages.forEach((message) => { expect(message).not.toBeEmptyDOMElement(); - }); + }); }); /** @@ -410,62 +412,95 @@ describe("Form validation and error handling", () => { */ describe("existing validation schemas are correctly referenced", () => { test("text fields", async () => { - const { user, getByRole, getByTestId } = setup(); + 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.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/); + const nameInputErrorMessage = getByTestId( + /error-message-input-text-name/, + ); - expect(nameInputErrorMessage).toHaveTextContent(/Your answer must be 120 characters or fewer/); + expect(nameInputErrorMessage).toHaveTextContent( + /Your answer must be 120 characters or fewer/, + ); }); test("number fields", async () => { - const { user, getByRole, getByTestId } = setup(); + 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/); + const ageInputErrorMessage = getByTestId( + /error-message-input-number-age/, + ); expect(ageInputErrorMessage).toHaveTextContent(/Enter a positive number/); }); test("question fields", async () => { - const { user, getByRole, getByTestId } = setup(); + const { user, getByRole, getByTestId } = setup( + , + ); await user.click(getByRole("button", { name: /Save/ })); - const sizeInputErrorMessage = getByTestId(/error-message-input-question-size/); + const sizeInputErrorMessage = getByTestId( + /error-message-input-question-size/, + ); - expect(sizeInputErrorMessage).toHaveTextContent(/Select your answer before continuing/); + expect(sizeInputErrorMessage).toHaveTextContent( + /Select your answer before continuing/, + ); }); test("radio fields", async () => { - const { user, getByRole, getByTestId } = setup(); + const { user, getByRole, getByTestId } = setup( + , + ); await user.click(getByRole("button", { name: /Save/ })); - const cuteInputErrorMessage = getByTestId(/error-message-input-question-cute/); + const cuteInputErrorMessage = getByTestId( + /error-message-input-question-cute/, + ); - expect(cuteInputErrorMessage).toHaveTextContent(/Select your answer before continuing/); + expect(cuteInputErrorMessage).toHaveTextContent( + /Select your answer before continuing/, + ); }); test("checklist fields", async () => { - const { user, getByRole, getByTestId } = setup(); + const { user, getByRole, getByTestId } = setup( + , + ); await user.click(getByRole("button", { name: /Save/ })); - const foodInputErrorMessage = getByTestId(/error-message-input-checklist-food/); + const foodInputErrorMessage = getByTestId( + /error-message-input-checklist-food/, + ); - expect(foodInputErrorMessage).toHaveTextContent(/Select at least one option/); - }) + 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 { user, getByRole, getByTestId, getByText } = setup( + , + ); const minNumberOfItems = mockZooProps.schema.min; expect(minNumberOfItems).toEqual(1); @@ -473,12 +508,16 @@ describe("Form validation and error handling", () => { await user.click(getByRole("button", { name: /Cancel/ })); await user.click(getByTestId("continue-button")); - const minItemsErrorMessage = getByText(`You must provide at least ${minNumberOfItems} response(s)`) + 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 { user, getAllByTestId, getByTestId, getByText } = setup( + , + ); const addItemButton = getByTestId(/list-add-button/); const maxNumberOfItems = mockZooProps.schema.max; @@ -497,45 +536,51 @@ describe("Form validation and error handling", () => { // Try to add a fourth await user.click(getByTestId(/list-add-button/)); - const maxItemsErrorMessage = getByText(`You can provide at most ${maxNumberOfItems} response(s)`) + 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(); - } - ); + 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", () => { @@ -559,9 +604,8 @@ describe("Payload generation", () => { it("generates a valid payload with summary stats on submission (Units)", async () => { const handleSubmit = jest.fn(); - const { getByTestId, user, getByRole, getAllByRole, getByLabelText } = setup( - , - ); + const { getByTestId, user, getByRole, getAllByRole, getByLabelText } = + setup(); const addItemButton = getByTestId("list-add-button"); @@ -601,7 +645,7 @@ describe("Payload generation", () => { 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); @@ -611,7 +655,7 @@ describe("Payload generation", () => { await user.click(getByTestId("continue-button")); expect(handleSubmit).toHaveBeenCalled(); - const output = handleSubmit.mock.calls[0][0] + const output = handleSubmit.mock.calls[0][0]; expect(output).toMatchObject(mockUnitsPayload); }); }); 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 c0d3136c29..52ae77b23e 100644 --- a/editor.planx.uk/src/@planx/components/List/Public/index.tsx +++ b/editor.planx.uk/src/@planx/components/List/Public/index.tsx @@ -70,14 +70,14 @@ const ActiveListCard: React.FC<{ }> = ({ index: i }) => { const { schema, saveItem, cancelEditItem, errors, isPageComponent } = useListContext(); - + const ref = useRef(null); useEffect(() => { if (ref.current) { - ref.current.scrollIntoView({ behavior: "smooth" }) + ref.current.scrollIntoView({ behavior: "smooth" }); } }, []); - + return ( = ({ } if ( - destinations.includes(Destination.Idox) && - isReady && + destinations.includes(Destination.Idox) && + isReady && props.handleSubmit ) { props.handleSubmit( - makeData(props, request.value.idox?.event_id, "idoxSendEventId") + makeData(props, request.value.idox?.event_id, "idoxSendEventId"), ); } diff --git a/editor.planx.uk/src/@planx/components/SetValue/Editor.tsx b/editor.planx.uk/src/@planx/components/SetValue/Editor.tsx index f3926067ee..b36c1e37f0 100644 --- a/editor.planx.uk/src/@planx/components/SetValue/Editor.tsx +++ b/editor.planx.uk/src/@planx/components/SetValue/Editor.tsx @@ -106,7 +106,7 @@ function SetValueComponent(props: Props) { /> - {formik.values.operation !== "removeAll" && + {formik.values.operation !== "removeAll" && ( - } + )} diff --git a/editor.planx.uk/src/ui/shared/Checkbox.tsx b/editor.planx.uk/src/ui/shared/Checkbox.tsx index 37969b1e90..db2fe034f2 100644 --- a/editor.planx.uk/src/ui/shared/Checkbox.tsx +++ b/editor.planx.uk/src/ui/shared/Checkbox.tsx @@ -57,9 +57,9 @@ export default function Checkbox({ inputProps, }: Props): FCReturn { const handleChange = (e: React.MouseEvent) => { - e.preventDefault() + e.preventDefault(); onChange && onChange(); - } + }; return ( From 7cda94de4051352a15e37fe585f9ca01fdcf5525 Mon Sep 17 00:00:00 2001 From: Jessica McInchak Date: Fri, 5 Jul 2024 12:17:36 +0200 Subject: [PATCH 102/150] Revert "Revert "feat: build pizzas on alpine"" (#3374) --- .github/workflows/pizza-teardown.yml | 2 +- .github/workflows/pull-request.yml | 24 ++++++++++++++++++------ scripts/pullrequest/create.sh | 9 --------- 3 files changed, 19 insertions(+), 16 deletions(-) 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/scripts/pullrequest/create.sh b/scripts/pullrequest/create.sh index c8fc91cadf..6f0f9394f5 100755 --- a/scripts/pullrequest/create.sh +++ b/scripts/pullrequest/create.sh @@ -10,15 +10,6 @@ echo "root:$SSH_PASSWORD" | chpasswd # https://www.digitalocean.com/community/tutorials/how-to-add-swap-space-on-ubuntu-22-04 swapon --show -# install docker -apt-get install apt-transport-https ca-certificates curl gnupg lsb-release -y -curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --batch --yes --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg -echo \ - "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ - $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null -apt-get update -y -apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y - # set env for this shell set -o allexport source .env.pizza From 6d8c06b93632372c7cc0f01bc9f2d73c8819ffb3 Mon Sep 17 00:00:00 2001 From: Rory Doak <138574807+RODO94@users.noreply.github.com> Date: Fri, 5 Jul 2024 11:29:39 +0100 Subject: [PATCH 103/150] feat: `team_settings` form error validation (#3368) Changes requested by @DafyddLlyr have been made --- .../Settings/DesignSettings/ButtonForm.tsx | 1 + .../Settings/DesignSettings/TextLinkForm.tsx | 1 + .../DesignSettings/ThemeAndLogoForm.tsx | 1 + .../Settings/GeneralSettings/BoundaryForm.tsx | 11 ++++ .../Settings/GeneralSettings/ContactForm.tsx | 18 +++++-- .../Settings/shared/SettingsForm.tsx | 36 ++++++------- editor.planx.uk/src/ui/editor/ColorPicker.tsx | 54 +++++++++++-------- 7 files changed, 73 insertions(+), 49 deletions(-) diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/ButtonForm.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/ButtonForm.tsx index 464cf9a215..1a8383e325 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/ButtonForm.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/ButtonForm.tsx @@ -61,6 +61,7 @@ export const ButtonForm: React.FC = ({ color={formik.values.actionColour} onChange={(color) => formik.setFieldValue("actionColour", color)} label="Button colour" + errorMessage={formik.errors.actionColour} /> diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/TextLinkForm.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/TextLinkForm.tsx index 6064cbac15..6f454d6144 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/TextLinkForm.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/TextLinkForm.tsx @@ -70,6 +70,7 @@ export const TextLinkForm: React.FC = ({ color={formik.values.linkColour} onChange={(color) => formik.setFieldValue("linkColour", color)} label="Text link colour" + errorMessage={formik.errors.linkColour} /> diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/ThemeAndLogoForm.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/ThemeAndLogoForm.tsx index 2ab48b447b..3629d5d0c5 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/ThemeAndLogoForm.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/ThemeAndLogoForm.tsx @@ -86,6 +86,7 @@ export const ThemeAndLogoForm: React.FC = ({ formik.setFieldValue("primaryColour", color) } label="Theme colour" + errorMessage={formik.errors.primaryColour} /> diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/BoundaryForm.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/BoundaryForm.tsx index a33aa3d16c..f59e2bee97 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/BoundaryForm.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/BoundaryForm.tsx @@ -3,13 +3,23 @@ import { useStore } from "pages/FlowEditor/lib/store"; import React, { ChangeEvent } from "react"; import InputLabel from "ui/editor/InputLabel"; import Input from "ui/shared/Input"; +import * as Yup from "yup"; import { SettingsForm } from "../shared/SettingsForm"; import { FormProps } from "."; export default function BoundaryForm({ formikConfig, onSuccess }: FormProps) { + const formSchema = Yup.object().shape({ + boundaryUrl: Yup.string() + .url( + "Enter a boundary URL in the correct format, https://www.planning.data.gov.uk/", + ) + .required("Enter a boundary URL"), + }); + const formik = useFormik({ ...formikConfig, + validationSchema: formSchema, onSubmit: async (values, { resetForm }) => { const isSuccess = await useStore.getState().updateTeamSettings({ boundaryUrl: values.boundaryUrl, @@ -49,6 +59,7 @@ export default function BoundaryForm({ formikConfig, onSuccess }: FormProps) { ) => { formik.setFieldValue("boundaryUrl", ev.target.value); }} diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/ContactForm.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/ContactForm.tsx index 906ab6531d..7924634a00 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/ContactForm.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/ContactForm.tsx @@ -11,12 +11,16 @@ import { FormProps } from "."; export default function ContactForm({ formikConfig, onSuccess }: FormProps) { const formSchema = Yup.object().shape({ helpEmail: Yup.string() - .email("Please enter valid email") - .required("Help Email is required"), - helpPhone: Yup.string().required("Help Phone is required"), - helpOpeningHours: Yup.string().required(), + .email( + "Enter an email address in the correct format, like example@email.com", + ) + .required("Enter a help email address"), + helpPhone: Yup.string().required("Enter a help phone number"), + helpOpeningHours: Yup.string().required("Enter your opening hours"), homepage: Yup.string() - .url("Please enter a valid URL for the homepage") + .url( + "Enter a homepage URL in the correct format, like https://www.localauthority.gov.uk/", + ) .required("Enter a homepage"), }); @@ -59,6 +63,7 @@ export default function ContactForm({ formikConfig, onSuccess }: FormProps) { onChangeFn("homepage", event); }} value={formik.values.homepage} + errorMessage={formik.errors.homepage} id="homepage" /> @@ -66,6 +71,7 @@ export default function ContactForm({ formikConfig, onSuccess }: FormProps) { { onChangeFn("helpEmail", event); }} @@ -76,6 +82,7 @@ export default function ContactForm({ formikConfig, onSuccess }: FormProps) { { onChangeFn("helpPhone", event); }} @@ -87,6 +94,7 @@ export default function ContactForm({ formikConfig, onSuccess }: FormProps) { multiline name="helpOpeningHours" value={formik.values.helpOpeningHours} + errorMessage={formik.errors.helpOpeningHours} onChange={(event) => { onChangeFn("helpOpeningHours", event); }} diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/shared/SettingsForm.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/shared/SettingsForm.tsx index 61b67c6f6c..10cf9fefee 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/shared/SettingsForm.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/shared/SettingsForm.tsx @@ -40,27 +40,21 @@ export const SettingsForm = ({ {preview} )} - - - - - - - + + + + ); diff --git a/editor.planx.uk/src/ui/editor/ColorPicker.tsx b/editor.planx.uk/src/ui/editor/ColorPicker.tsx index d855547bc1..3f56a4e996 100644 --- a/editor.planx.uk/src/ui/editor/ColorPicker.tsx +++ b/editor.planx.uk/src/ui/editor/ColorPicker.tsx @@ -2,13 +2,16 @@ import Box, { BoxProps } from "@mui/material/Box"; import ButtonBase, { ButtonBaseProps } from "@mui/material/ButtonBase"; import { styled } from "@mui/material/styles"; import Typography from "@mui/material/Typography"; +import { ErrorMessage } from "formik"; import React, { useState } from "react"; import { ChromePicker, ColorChangeHandler } from "react-color"; +import ErrorWrapper from "ui/shared/ErrorWrapper"; export interface Props { label?: string; inline?: boolean; color?: string; + errorMessage?: string; onChange?: (newColor: string) => void; } @@ -93,28 +96,33 @@ export default function ColorPicker(props: Props): FCReturn { }; return ( - - - {props.label || "Background colour"}:{" "} - - - - {props.color} - - {show ? ( - - - - - ) : null} - + + + + {props.label || "Background colour"}:{" "} + + + + {props.color} + + {show ? ( + + + + + ) : null} + + ); } From 89adc20ba94b12a01776d6dcc21fe63f5a178678 Mon Sep 17 00:00:00 2001 From: Rory Doak <138574807+RODO94@users.noreply.github.com> Date: Fri, 5 Jul 2024 12:56:21 +0100 Subject: [PATCH 104/150] feat: `team_settings` column rename from `boundary_json` to `boundary_bbox` (#3375) --- hasura.planx.uk/metadata/tables.yaml | 72 +++++++++---------- .../down.sql | 1 + .../up.sql | 1 + 3 files changed, 38 insertions(+), 36 deletions(-) create mode 100644 hasura.planx.uk/migrations/1720175441656_alter_table_public_team_settings_alter_column_boundary_json/down.sql create mode 100644 hasura.planx.uk/migrations/1720175441656_alter_table_public_team_settings_alter_column_boundary_json/up.sql diff --git a/hasura.planx.uk/metadata/tables.yaml b/hasura.planx.uk/metadata/tables.yaml index 1bab36f613..31b922cac7 100644 --- a/hasura.planx.uk/metadata/tables.yaml +++ b/hasura.planx.uk/metadata/tables.yaml @@ -157,7 +157,7 @@ definition: enable_manual: false insert: - columns: "*" + columns: '*' retry_conf: interval_sec: 30 num_retries: 1 @@ -171,7 +171,7 @@ query_params: type: bops-submission template_engine: Kriti - url: "{{$base_url}}/webhooks/hasura/send-slack-notification" + url: '{{$base_url}}/webhooks/hasura/send-slack-notification' version: 2 - table: name: document_template @@ -225,7 +225,7 @@ definition: enable_manual: false insert: - columns: "*" + columns: '*' retry_conf: interval_sec: 30 num_retries: 1 @@ -239,7 +239,7 @@ query_params: type: email-submission template_engine: Kriti - url: "{{$base_url}}/webhooks/hasura/send-slack-notification" + url: '{{$base_url}}/webhooks/hasura/send-slack-notification' version: 2 - table: name: feedback @@ -451,9 +451,9 @@ forward_client_headers: false headers: - name: authorization - value: "{{HASURA_PLANX_API_KEY}}" + value: '{{HASURA_PLANX_API_KEY}}' timeout: 10 - url: "{{HASURA_PLANX_API_URL}}/webhooks/hasura/validate-input/jsonb/clean-html" + url: '{{HASURA_PLANX_API_URL}}/webhooks/hasura/validate-input/jsonb/clean-html' type: http - role: platformAdmin permission: @@ -475,9 +475,9 @@ forward_client_headers: false headers: - name: authorization - value: "{{HASURA_PLANX_API_KEY}}" + value: '{{HASURA_PLANX_API_KEY}}' timeout: 10 - url: "{{HASURA_PLANX_API_URL}}/webhooks/hasura/validate-input/jsonb/clean-html" + url: '{{HASURA_PLANX_API_URL}}/webhooks/hasura/validate-input/jsonb/clean-html' type: http - role: teamEditor permission: @@ -506,9 +506,9 @@ forward_client_headers: false headers: - name: authorization - value: "{{HASURA_PLANX_API_KEY}}" + value: '{{HASURA_PLANX_API_KEY}}' timeout: 10 - url: "{{HASURA_PLANX_API_URL}}/webhooks/hasura/validate-input/jsonb/clean-html" + url: '{{HASURA_PLANX_API_URL}}/webhooks/hasura/validate-input/jsonb/clean-html' type: http select_permissions: - role: api @@ -609,9 +609,9 @@ forward_client_headers: false headers: - name: authorization - value: "{{HASURA_PLANX_API_KEY}}" + value: '{{HASURA_PLANX_API_KEY}}' timeout: 10 - url: "{{HASURA_PLANX_API_URL}}/webhooks/hasura/validate-input/jsonb/clean-html" + url: '{{HASURA_PLANX_API_URL}}/webhooks/hasura/validate-input/jsonb/clean-html' type: http - role: platformAdmin permission: @@ -629,9 +629,9 @@ forward_client_headers: false headers: - name: authorization - value: "{{HASURA_PLANX_API_KEY}}" + value: '{{HASURA_PLANX_API_KEY}}' timeout: 10 - url: "{{HASURA_PLANX_API_URL}}/webhooks/hasura/validate-input/jsonb/clean-html" + url: '{{HASURA_PLANX_API_URL}}/webhooks/hasura/validate-input/jsonb/clean-html' type: http - role: teamEditor permission: @@ -656,9 +656,9 @@ forward_client_headers: false headers: - name: authorization - value: "{{HASURA_PLANX_API_KEY}}" + value: '{{HASURA_PLANX_API_KEY}}' timeout: 10 - url: "{{HASURA_PLANX_API_URL}}/webhooks/hasura/validate-input/jsonb/clean-html" + url: '{{HASURA_PLANX_API_URL}}/webhooks/hasura/validate-input/jsonb/clean-html' type: http delete_permissions: - role: platformAdmin @@ -689,9 +689,9 @@ forward_client_headers: false headers: - name: authorization - value: "{{HASURA_PLANX_API_KEY}}" + value: '{{HASURA_PLANX_API_KEY}}' timeout: 10 - url: "{{HASURA_PLANX_API_URL}}/webhooks/hasura/validate-input/jsonb/clean-html" + url: '{{HASURA_PLANX_API_URL}}/webhooks/hasura/validate-input/jsonb/clean-html' type: http select_permissions: - role: platformAdmin @@ -724,9 +724,9 @@ forward_client_headers: false headers: - name: authorization - value: "{{HASURA_PLANX_API_KEY}}" + value: '{{HASURA_PLANX_API_KEY}}' timeout: 10 - url: "{{HASURA_PLANX_API_URL}}/webhooks/hasura/validate-input/jsonb/clean-html" + url: '{{HASURA_PLANX_API_URL}}/webhooks/hasura/validate-input/jsonb/clean-html' type: http - table: name: lowcal_sessions @@ -873,7 +873,7 @@ method: POST query_params: {} template_engine: Kriti - url: "{{$base_url}}/send-email/confirmation" + url: '{{$base_url}}/send-email/confirmation' version: 2 - name: setup_lowcal_expiry_events definition: @@ -903,7 +903,7 @@ method: POST query_params: {} template_engine: Kriti - url: "{{$base_url}}/webhooks/hasura/create-expiry-event" + url: '{{$base_url}}/webhooks/hasura/create-expiry-event' version: 2 - name: setup_lowcal_reminder_events definition: @@ -933,7 +933,7 @@ method: POST query_params: {} template_engine: Kriti - url: "{{$base_url}}/webhooks/hasura/create-reminder-event" + url: '{{$base_url}}/webhooks/hasura/create-reminder-event' version: 2 - table: name: operations @@ -1110,7 +1110,7 @@ definition: enable_manual: false insert: - columns: "*" + columns: '*' retry_conf: interval_sec: 10 num_retries: 3 @@ -1132,13 +1132,13 @@ method: POST query_params: {} template_engine: Kriti - url: "{{$base_url}}/webhooks/hasura/create-payment-expiry-events" + url: '{{$base_url}}/webhooks/hasura/create-payment-expiry-events' version: 2 - name: setup_payment_invitation_events definition: enable_manual: false insert: - columns: "*" + columns: '*' retry_conf: interval_sec: 10 num_retries: 3 @@ -1160,13 +1160,13 @@ method: POST query_params: {} template_engine: Kriti - url: "{{$base_url}}/webhooks/hasura/create-payment-invitation-events" + url: '{{$base_url}}/webhooks/hasura/create-payment-invitation-events' version: 2 - name: setup_payment_reminder_events definition: enable_manual: false insert: - columns: "*" + columns: '*' retry_conf: interval_sec: 10 num_retries: 3 @@ -1188,7 +1188,7 @@ method: POST query_params: {} template_engine: Kriti - url: "{{$base_url}}/webhooks/hasura/create-payment-reminder-events" + url: '{{$base_url}}/webhooks/hasura/create-payment-reminder-events' version: 2 - name: setup_payment_send_events definition: @@ -1217,7 +1217,7 @@ method: POST query_params: {} template_engine: Kriti - url: "{{$base_url}}/webhooks/hasura/create-payment-send-events" + url: '{{$base_url}}/webhooks/hasura/create-payment-send-events' version: 2 - table: name: payment_status @@ -1662,7 +1662,7 @@ columns: - id - team_id - - boundary_json + - boundary_bbox - boundary_url - email_reply_to_id - external_planning_site_name @@ -1679,7 +1679,7 @@ columns: - id - team_id - - boundary_json + - boundary_bbox - boundary_url - email_reply_to_id - external_planning_site_name @@ -1694,7 +1694,7 @@ - role: public permission: columns: - - boundary_json + - boundary_bbox - boundary_url - email_reply_to_id - external_planning_site_name @@ -1713,7 +1713,7 @@ columns: - id - team_id - - boundary_json + - boundary_bbox - boundary_url - email_reply_to_id - external_planning_site_name @@ -2064,7 +2064,7 @@ definition: enable_manual: false insert: - columns: "*" + columns: '*' retry_conf: interval_sec: 30 num_retries: 1 @@ -2078,7 +2078,7 @@ query_params: type: uniform-submission template_engine: Kriti - url: "{{$base_url}}/webhooks/hasura/send-slack-notification" + url: '{{$base_url}}/webhooks/hasura/send-slack-notification' version: 2 - table: name: user_roles diff --git a/hasura.planx.uk/migrations/1720175441656_alter_table_public_team_settings_alter_column_boundary_json/down.sql b/hasura.planx.uk/migrations/1720175441656_alter_table_public_team_settings_alter_column_boundary_json/down.sql new file mode 100644 index 0000000000..91c81c2392 --- /dev/null +++ b/hasura.planx.uk/migrations/1720175441656_alter_table_public_team_settings_alter_column_boundary_json/down.sql @@ -0,0 +1 @@ +alter table "public"."team_settings" rename column "boundary_bbox" to "boundary_json"; diff --git a/hasura.planx.uk/migrations/1720175441656_alter_table_public_team_settings_alter_column_boundary_json/up.sql b/hasura.planx.uk/migrations/1720175441656_alter_table_public_team_settings_alter_column_boundary_json/up.sql new file mode 100644 index 0000000000..6379f408d1 --- /dev/null +++ b/hasura.planx.uk/migrations/1720175441656_alter_table_public_team_settings_alter_column_boundary_json/up.sql @@ -0,0 +1 @@ +alter table "public"."team_settings" rename column "boundary_json" to "boundary_bbox"; From 721ab2f557b6004162711c25b2b462ec0eeaac63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Fri, 5 Jul 2024 15:17:23 +0100 Subject: [PATCH 105/150] chore: Add Espom and Ewell certs to AWS (#3376) --- .gitignore | 1 + infrastructure/application/Pulumi.production.yaml | 4 ++++ infrastructure/application/index.ts | 4 ++++ 3 files changed, 9 insertions(+) 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/infrastructure/application/Pulumi.production.yaml b/infrastructure/application/Pulumi.production.yaml index 199fd0a32d..2065d18a51 100644 --- a/infrastructure/application/Pulumi.production.yaml +++ b/infrastructure/application/Pulumi.production.yaml @@ -57,6 +57,10 @@ config: secure: AAABADIUwFlpmPKfH8fQoNkOe9z8xCwnQgCrV1jxoPTtgfpL9GmImtNx0AnL6HUgkndlUgjCtArhChDN2rdepbgvBV2IZmZ3vds8LvRnBwwLKdxWvNwC6LBQnmWo4oac+VU1XoEOrs+kIDnPqFpkCwyxwySw3FzEmRzUoNLUlGun+ZKTtgtPgYcBNL4P9A73WAvzNlSX2mmRB7lVcEKqSB8SZ3/kEgGbgQ9PyDmHON78RBkaHBT5i0wHP9O1fulEoJ/w9D1S237JagtKzqeb81KUcqWTYLHUwuWKM2pmY4LpVKWOJM8d9PI7gYNQB4YKj/y1mSViK7PuSdCpmPchHER2WN+Oil7z/T47DQevp46Gthv5Von7ZEtoo1kw7aYsRxcUSl+pvVuOMzgP3bw3GS3YKksBsxA8WOlm+bKbyXoHVm/nrFuoSeTmBFUz+sb4VrWDDlF8c+XIe7SRjekk0Ld6Xr8qMPcRjOxj5wtTTPnsaetBmb9FERCa+IW91e37rMUitctX1QqF05SaajJ9oBwJoWQXxIMJ05OltWV1bLW1qdWAcqwFQMXsivo1/xFSjeeUmlld0ba3fjQcdMIvuXOLLVyYQpFPyxKMV1DT4Z+NSRkbBzOP9DtIB2pVp98QeKs3Fovd7mKS6ThGGMdYsub3o3TKg+pAh/KCffe2+MHRyP3Cwz7M7qJ/33puo4HGirTIJdV2nMRBroFyWU5mO8PFBdBgMeSP+zefu0QYpv1ifTv39Xoao4L0TXnj+mT2cO9oZknrH/ymyqTsLHj3Mrn200hZLhp1UhbATzEmHw+6KDMdgpADJRqsDIhtr6MOMa9Q9A1q2Kbk57XSxhP43xA8bZN/BIC+swTUCehFmFD5YeJtjYOD1TnEJPgYnsDtyheenblxfwVhmFT7kxMs8zV6QPLukKKBhkmk7OnyjjMxsJC7/B3SzajDpHqstjZkK+jklE+gQrJxxukVOwiJsBoXzya4aIBeRDEcQRxBK6nbjQOFAUoa5eMID5LAj33tXgXdyM8pdoNM5vJUIXJc6IhWaPUlDPTEwAdehtC+wNEqzeloNQxzCaZ/XsfMTrNcUpHrJcF+xFEcWA57OfiSDyNd3VyMFUQV87NJF/ifg1jhFNl4KxI/md5oUZOX97F314C3YEwsbQy9/2b/WbmnuMhgPpT4QYLDnYqn7Y9BbsBD2eR1U6NvLxJy8H83nCfEfUvRvJ1cmV5IiXnHaF8HC3/ThNjMM7CQaxWLWM4fkDQApEmUU34yL068daNmy3mEbDa739X/zCPNh9295ruyFT74n8Iw4XWCMo/3v0vNVDCRyV5pI4vaEj1GOQSNMLa8CHjXL1T8RKl8b93GXssVRSbDf5WoBcAt0v35v0i5Lq5jTVZjUtlftPVelhI/CLrdP5+5KFaj5M3PX6SaPSO6DbzFjLeCKDu0+MhITp/2iFR5zP1qFHb0fTnIhdKUHGSb88OKUZ8B3eRQRxJrauYcAu0ezx0fOtlEpaZ2E/yUhB4KxXEBCHXkKg1fvoziX/fgsdZGXGdjDzaYhtWxSGsHjQfkGSgaCZ5JY0bwB/Gp6obQlfsJZrFKPCMo+qeRMRv0okEFtlO2Vp7WlH2NjaMZffaXZ2TRsFvMfT2XFNCXF+3pAM9RU8gmN1j/ZULCFsmFJbgJprjNK4KvCjMZmFLUzm7G6+ul6recIcUufwKRm6kmJnJgJIMvz8mbsTU/NDAMLLak4MeJxCzRVXWbXBpv2J6ol15Q89D4eNgdSQKFBjMz7/SnTG06k+kCT1y24+0xAJU8x3BQmpN8ExFnQBzbCyaXkSLPxkt8Y9CJRSx+nIo35sTcVNsu9yw1KNH4+X2qAads55wGFBNy6ucZ2ngI2pnFGfEGNbXv2ZnjB2p8z+UiIHLnBk7Y18Blqvin/guZ4jimpEL0Tuq7Voinrz9Wn4/fwTj0UcMan7UqIq4x4p/C8QiWsYQq/WXlXJqE3XQ0cTsP3cIB1cEFBGGvJhoebBDECyGFlHxW/hTn2RdLApRVF5TAIo02nHcpji0XAT3ctlEKF/4KuFb7RtvNo/OpXDWb44JCt400Wuta1y1I4hDjCtA60pKIA3sBRmkGv3asxzgWYlftCyGLihZNwsPIA/WvGZTSeIY+9I+Ns69YxYxQYHx6Yk/sH0YgkTIau67n4SpbTTQHmNjdyhHapIeutQ9tpmPS06lrqEP7vuYryGlfK/a96MsHPUHJH015zxFDEw5RxeYvaVPOVAB2zA8TMkhGUw8PmAJPpCrT0oUhIFgVt7H56Lj3A/EKlNnFYQbrL6eUB6xl4I1eeUOsDGmgZxDioKQY81wyEjpuI8nSgDlJXg7j472Ol1Oj2AQBIMxa2RprpUwbZ0+6O/+w1jq4Ywy766PDSFj5HGQAxO2EfG+x+Tp9lPS+lhB/O6k1xZ2c8vT8UQjCZI4CCQMLgZcjgy4m+Bj01gJWgyLcLhAF2gfp9mgaoGkHWN24Gu4rykGwr7EJvmffA0U5+RRlkGkSvgjTqnh577o2gw5jyZvGCUUcxb89BAOg63JoZyeZVxpr+mBiASDhafJ1OYo1s1yUUP6dujlpGs1vWWkLeY7kx4LHITrMJw3N+YBGV4gKyRmAzqqNgjsPBAZuq6vW+I6US7Ohdrpzkv1NzXFaLK3o8wU9lbHfC6D/CiB6w6ypdGxWZ+PJy8NHYUwFdfM8nLyd7XjUxcOpdO4y/TS/9r4+FXCnoqIsEiBNXatQvfYdbNmbEGIILgXgBBI7BPZ3A8+U98yaUzgMzXBhOi5Vqn5QA+Yeb9yZdqgGgOJqblm9KgwMXQxwwCfQGTri1hTlP6ZemZNJTgkZph3UhS48MfMDHqoDstYE8gZeALSgDDB+H0dvkCBKT6AcIRejulORkBevz8ZFtQm5xws7EPcscP+1/KxuXzHfsYuf1CLrOIf7K8ZzofksqDIuu8XaDwEfGP9FVOjaohS7kUtyJmT6M2B7HM/lPLopns+CD1nkSPNPIvA9XZHNAdfL7887+1dSMcE1t6m1Rtkee9K8JrREHuLoWZzUHMjo18gBYzX3JJQSykKfy5ZTcqBjfp+j8EjbCV9x8/VmMfjZ6TApf2TDhGxihLBkBKFnSSymCfsVNPv9fBUXYPH3CYHs2VAQUOhh2XYDQasfUbYbtgnOSJfgtCdTHVHB5cYwG4ZrTIA68LJhjrc660bkzeXTAxn6P3o5bRKyqDCAOGqyv0M= application:ssl-doncaster-key: secure: AAABADjezySsYE1/SQmPh9oTRvK0m2tnDSBWUL4j1n9ahASsy7qqkJr5eL2IV9yfW1FP11Gj0XViJ2MviELA9ahrnzrcJVBTqlQKpVRYA3p5myLLmI1ntbr3Y+ZRtzVGQbEHnGr1kerLK03YsGJNLgNw1QWeO8tCHF8+FpJqyxhCPSHV16lBVTjsDxMOBc6rLC/dtI00edcq2x7N0Auhyr/sCauGis/GgYAH3On3HdUSQUvELPFFWn/4Ce8bUzIZ0tywvoy0BqQPO2cHKQyEBhb+Gavj/6Zb2MSvj5xen2/B7BZ2oxq7Xpui1X4nDGqBPf8xdXRlTrt9jIQnpvrqec/A729uXMyngpPBr3vg0wPzdqiUbvMVv13DV0XpdQr6NYf7UdKrQ28yd+37WPMRd4oLynfza3j9FJdqQG01DkLWsEOZa2qpDmg5Edj18fy3KRDe5HIrjCnAsn54H7Q00jggq1Yl31Y/Q0YHc0czDuD2/NTn7SyjBks4gM0QG9rv32U2Co+Z1rzBL94vLmBUNGLWF2IvU1eElkH56ATNR+I7uHXl+AvzsvKqGlY7+UKmna+qlSUI+86kCMb/xltD4nGgu1pHpkT6LptC0xFIPTFL5yH0ZsQ6aEUO8t9BBPRvE5AU4C5zM3Lb7iUI0jX31+Q9ZeslixE/fMBRyjDM4lakvGEVYO88PYtS1cl2JC4Ro2dL5eNySkkPIt/bu0QEPnfVrWZfTFeM9dGiDUG66iWxi/eEvLV53D7AbuhbOSD1J3VILgVmuefHwDAgoPOeUZZGKIiZgFHssn6/Owv3mCYtywtiwv517T9TrR1/RjqT0sAFp33xwwzpQr4X7RLIZUgfhg26bM6l/Tvl7+LLVmbttMWDFnjHM1EdeyDM9gBonOIuwUYIjl80RoD5ezJ9aafQcM2CdbPNsBmzlbgln98YR8Tm7QyOpxzLr3YOp5QLpZ/FGFHSNh1qvfELXU9LeFAhShlrZ3p7Nf6R4rynAl6eoDU9EMc1w8ZfBxoAtxYF41zbzDwgjwUvYmRtUWQa7foVtSTJGQx8ypZlaVP3W47Kq8jTMRkgKKkJvxgB7RErfVeL9GpRXHTZkD/i1kSM15zg4T02ijBHAb54IRK196Vf0yUR0eFP5mUXeEFdcsRMwVBaNYrQhWMmx0aiQWS6lRK+n/eDv5klGnSl9iUKdBvyjXwXVzNJYjJlZPIXYn0xKfG/zClwDxfr4K0Hg4H3lSttu/+hyyxHJi5tGctMXeVvkRj6gCINSiVv2/fEwk3IeaGyRz6o0YiPlt16q41JepwjZhA+7DtNS8WE+aoPcb5hN1lmlKFlvAj8yQ4MYEJLXdj13ZsWoXfdJAh+0W9mKk7hnNJer9954poHRtD1AFVgeIZfTFkKdmkD+SVay3BvqXjcEmWtF1VB8d2VliP33ZNo/J6VWDeKoAJ/se9x9qcu/yOke+Cijd9qZPQ09uzdxOHX+6bGvF5YWjiln8EK6RM49TAfAq9vtt1R5X4DvEQbGxkb5TLpoURKqV7DeQUmcymNJ+55zjKR58177z2LuqFquhwl9dHy65sYB8Rhmiiv/hQBdsNELSy+f0Zy8d2EWw97nPLTqUBJD5iDP0H7dis7BbHZnoHBZS9MkidJgHqlZNLFrmVK3F4YU+9juWvAK3XkTZgx0r4y72cMRwJ3GcKfumI2u7cMEbimmtsx8/qhej0PTf7bXoGaQWmboQE5D89wRACoAqpOwC0G/BJ54qYZP1q7lwU6Ku97sueznkNKE5A2dokDR+gnm3uy+mbMJI6NUOfKJCgrnoxkTgCVcIHwMGHG1u9VED1A6GBDFfO/5Wvx5BI/jihO5+vfvr49UFFAz5Xah6kjIFH/S47AnTVHfbRIH/22z7BMOJQMt4kZ3ZklyVnMfdQtIK1YPlgtN7eXgH+F3OvH7K1RDW5vUvFk64LWIlb/8EoaF+TALb8ZSx2Zv8xLfm1NjLuztvQkSot7jhRTo23XjDJfxf/e8Aaqjmlgl/CDVC62kq7Wt84BaP8r/pO4+KAAxb8plYzhzK7M1m0QOOvk2Avb80TamNeQjLX906GUpsEI61mEZAYm/NJFENpA/5Rh1HLI2lAKmyEi9bcQ1QoscoO8HIKKjb7uIj8t6bvpy8JAGlqx3Yq1S+yBYqFdPpYJEzW0DrPdDR55B6KD/HfEt0t2KpehCJk40uzfmBMyRv6MqP7uRb6O49pkBj6lN8+NUM8PUBMcT2T4IvxvID1zhyDAo7KIqS0IpMJUOactGyI= + application:ssl-epsom-and-ewell-cert: + secure: AAABAN1YNPGTbUk3OK/j7777E5fs37UbfLwG6ZWhnbNZKpki4rYk6SEw4m3bK3c5NlizygvjIEonsDavi5Np9Bcl3eRbUZCdTfJ3zKYkU+jn1RYwAUsqUxLGyZvv9XLptWb1Ykq2ewsgzmxnWF7oEndXuyuCGdn7B4V1RUmMH+s9sFVBGHWx+5v3dp3KCOHcz5mbZ7/bJIBikXFDkLIsEq6ZvviElNTiWBjQvDm7xZ9UYgmuLIUMALXHSxJFy9vFNYwnMmr8OcpUSgssX7g/cDCo39Xe7kWQRdH0lnmiPSChKSIJRsM/d9FZ1ZffUGXU4GeJmOdHNTI3q/hLDwfR7zRQWNeNHH9o22nikf2OpViviz6iVvD/Oy6SOxoH5RG5G3n7dQzHKV6bS51bV0w1PrBPD3UmL1nCK8AQlsuXf9FDXn7jEpijycQVEXQnHrCZ6WY+UrU2yJsX2gwnXAAdEGusJEPgHjYDanTgmMwRYJ+v8QV8BmykjqI/eMVOzZh7Kernd9RYu4Z3SCqarrpdLin1xIgdPXwB8wcgWj8K8lyCos/0FGSGLmFNGvvZy5J9z4hhLdIqOgUjpuZe4C5w9h/IBrkJJuVeNpzM7A0fcqcv7B53KQRgas9bH2CHT11+ymC/MY5/9IjchWIDkaksAfWAiIKAEVX9sCiEF7D8DLMkL867rhQT1w/2udvx5IambfvDZxw1NwybdiOsh1xdEfT8Rgs4t7s6FSek8xy1Ohzp7kmrqy0EqIG+8PNhn7AiaevgICqwTlHTvYKg1nzsscSSluva07Ww8Z2nOy6LDv9aJhxZI9kwVSuXZjn5WTpWN6WPHy/198J6R1SSSPMRqegvWFoN2pGELuh+TGudMFwypPkj/EwhW+60YqBY+jKL6bp3AZvFUZ35vU9LFxQXQr4yb6Irfh/G2gzP85M5JIQxEUAiLuY0VqAUlgD+XjlwRb4W90DNEx7dsRKt3+bpiFnRrXY8UGnfzay8+P4Rp0c3ObDuevU6lKGYXe7lHtmWc57qEWgYbXTgOt7ntKqZsdJ0NvGwGwBCISoYPYYTMynTmWWBWBpDBx7IBssdBdMRF0eRLdXzZDEHzg822S04DWHVQwUfYEN/24UiQ/78UaVVuYn7d0G0Xf61Cq7n95n+mEuQ75Eh7km+zPZTBlY6c3RJpYqZHv1UToFfgdBxX/yz5+1de6hXFkL6QcdXTFOiYEn/Pw6cpdpvHx0/81bCLTQOg/2YxdAgGJTv1J0Ko/sf5JkMJagDHVbOMquiwJ0UKV4Lm+vAgEtO2IQ/EM4p+syRcuVdhmklKGXLRBYHO4t7JxKSAKbyAj46AVcm5QcdVvWnVe1bBeks/y4nybJCbh/LLbyBKxCPTzd2aHa5lJ1zBEVw2YABKre+OgQW8g9VsMU05vqxj1mIVwZfCkwNIXTJn4vlwUA1h9plTW9vgTRqCBCfuuZI7uZtoeZiVpSfVO4/8bzoKlf7jGC+9MVUkVCBdWBMk3AvaaEyQ8ll71CyJJlM/EHQ3RKQNZUNnpR/uy9W+H8K7mN2ExvA+P043TshMP65H8Lq7gNsvztUVFpHQN1EoJhbh3DQ6QDMhLnqTH0BIqKJu2Jw1wHoLA0McCALbJzovCowcgQ1BEUP8cSHFG4BtUWNJEh8IM6lv+LoWNYH5LOA8+Jcd6Idb8xbLQPGHW70CHb5X5egK6dt7cbfWUl93pZMKcgy1Ar+O+k6hCycsqWVM4KX0taYHkfZzKjRVud41W2MxkUdfZN7MK2ou8qIpvpHb+1Lvnv0K7AzGyFpXwaNdY4D3yDTo8vWY7VMo+l3N2gYYkoAgRAPUL/niLfTqxnl4bnt19RmBVDgteLAd+ShIVvbuNy/GLAqw/NhaKwtxQFHeIXL6BlA125l/xK9uAz9zhazHmjG5MhdnBEs8VX5NljOOKsR1kzIE4HzBo4rIpbuIesIrUXtH2gnxhkngajjfhl8Mcbl/zg+VWkzsLw0B/uCtfEbvTxcBgvFgqmRQhxMmujorV9gDmwX6w65Rl4zA9PS2vhyzhy3v5JyoItbENF3FQTU0xermBolWpX5WAGGwBJMYbT+Nrrm908rbUF8DpLtfQ0VkieAmczIUBuLDqB7XWYRDgl1OVKZqRXnbrl1sK0GCEg0NfG+i8ow6/UP8nnwTVjKGtng3lecvSlaPZARLxAlKHyrZHf7XJRbqMwG4RdGXslrDmUboh9XQYfhWRJZNtv4gL+WGkiR3anq9dVJeOwzNM+exXYwu4bgy1Q8sWLZyIvitEotEXDZEILOdEP691KjryzY1SvquiwdXKET6gYpzmMCsU4yh/W4LZCwy92lBEXj9umEnGC191VPtCOfxWjaX7q9AVwtgJS8eDH65lMAuP+EFaiBQSitbZHjeTVhYj8cIkI75qdcGVcrKRkSI5JULYgud7CUhnb9VFSPRfJ5lUbEFQFMBKH5sZmav/gjZswcPJLo1CmEIqqwCRMVxJ0qf4QUvASQdR6q5P5oljHEmmuCBISsUunqOZeKP0xxK++K89/RWtQYNvGL7rvCVar52K+lqGeK2LuOg61Duw2juvK9MMJ6OVIQzR9erWojtn4TyXLDeqefj0DSA/+MphOeHxQxX+oPCOrwMgpeqymABSXyFASiYd2oBaCvaywqHKzJGAKM+DgIJKtOixwWMSC7gDqlp8PBcG4Xzs+exTrQ4gltiuS/PylJ2KLlFh5VdNMcDNRX2/LcnAMewUS1SJYycFHw/kPONBNFlLIn1OWIuIqEceH5EDQxkfmEJoHcFBGQcCQ2dIzfggQAqSZUHlUSoUa+iLWZIQfBM8jr1/awKWP4i7a3KDL9VRhU9tO+kqJyh8pRan7B0FZCg8kVuv1YRnpz6Ucb/lJxqv4I/qse8XTem/3YWrbezT1Pz7EepwkccYO8t+do55iARGYTPCCxulnwU2rH+rzoMkMQ0znk+X1V2uMz7XvX5S567NOoIsAD38GinyTiv0MUE3EAvvPISTi7rxCILHN/3H5pXffJ+DQk2/x2UMzi8YjwymA5EZpe0ArWhyi4JUCRxQHUqRvhStYkLACqzqAYYx8U+kmhM2b7HkFdN+dJuxYwV4hCqlc+N2ViKwEZY42MCkihugH5BiAPsAYCQ96dnihp0bh02rXuTN9l3n+DlBdM3LHfOaT2GQw0gQwlSQtwiVhLqHKT2oRJGQUXOCE6O46xtXdYdtGqP5I4TEkL0wHkHHfrwb/0CzKn0SvzWk2NkSubpBttsSzhYcjrbhqZCPQt2uF7KrCKaGfeM+AL2HSKwY4OKCkgPpQe6f+E+/Y/71pwWKHHvXMaNrNDuVcCHnndKq5c83OmuKsHRs+uk/tcpk8ZeKnZGDlbAaxzNgYLT3vSMyWjohx3bwJH2T2jSTSOw7ZltOmZtCL7a4yE+co4A3hZxeuupqO+GNGxsVV1FrWRZF5rIgOvf6+ubyHFLZNvas6ZuzwNDkqkd8WyujEdcN1oX84OexIQZDEI20gvQ+w20qqyR9GBZBPmk1z18xvOGmcrR3HesDymvRfVcD59FvAEuu6Bl4KbvWKzsyDjXJu8BWeNWnY54uiT8PVuQVbJ6lRAsspfyN2J/7wa4KN8r6O4rV8n5aFVs71ujEmqHR9o9tAm0J29+2mjEi/vqIoh/iN5L9CILdKeRwP8WJO17yg1lm/c4trd3/xNRS7b2wJaP6Br5MS8NDSEaCR+QOsN6g+TVENnoxTmojVdwSsiXT/mx/RBKK8RZwEOrCiOsLBqIlDMQBuPhx+eobwbsTyeNvhQOIhCzmPaWXuVRqsnuJv9eYLLOmrwT6sm3AQbnGOaC5hAbzYgh1sQ8qAsKkuM/TWWJkmpPv0Ya9F0d3qFSOMA9QaiVXCeD0rNsl9LyfpjghFsiOiOt2UrSO2irJb+9QsPKbRSVxw8HtHLmYo4iL1Tgw== + application:ssl-epsom-and-ewell-key: + secure: AAABABngth8fC8gaD7FItkcIgu1B7NEfXj5QGExBTUClDu05/cJsG3lsz4j/QN0yGVrJsryWM3gOfwVFwalLJmn+Ff0hBaRbdbzJIIdA3GRXpN6muOh0JAQpWZ5JmvLNSmfF8q+U1YUAds7Q8N5fXAaTQMPvwzTJcKTSJbvJ8uv6yTenzwqehaujz4fbOZrakYLRAWBH4QIuht51QQ+3CaLxnHDrO/ORt2ACzpDnqNDBKvVpLi/S3zMcZcMB1zR7uY9osO3XXzBHHuYjkjaP1W9t7ay0J1M4jJc/XRbg9bWSKG1/nOiagboPF3AAe+XwETAhsKi5XyEuAbSzffCx+Z4kZAIqqJTp+dOnj1jyu7nX9wnn9dl0iJv01eDCP3/dzXI1+ZVxbqbnhxBuEP6Dmx0ArledivEO6BPRnTGP2K7BAc6vcnW6gMBs5A77NZzebhOhO1n8WWBRQZyRHP0XxSy0/bMHG/hTgTsyI3g8WmSciPV10zNnOTtbEYZvw5y6V1gjhkgDb3Ds5pJpeZujgrcjsx1WOkVX3zu9CQ083NovEtJlAcAYCkLn08Dgv6vRCEX2VuwhX0VlEG4M/OwZ3dV4uARZe5erZRF+w+ec2n0gO0IyfTT9Oe3bKTtPkdR205cxIDTaeOA9NkAJChrHNX1aIogor+4hyhVee2yTawztDqpUwVpH3TdmCBPCGBnhSwgxCNxlBvu/BLopUceMMNEhYeUQid70nRQvbjUs7FY6j/TAkxJYNF7hgpRYbvg6fuhiicm9fY36WKyqEZEncon1dCLYCespq4BupNGcnPFPrA2811i5qkz5aCdeyGEYBHTJcfQyxETdPO817MD4GOiruG1BXMT3apFx6/EtNGvLAoZe510ia6/CxTwYaC71VLM57LlK4p1Ubd8+R6ikueXAl5yHYm4jJJ75ftvJs7/PAWeP2CGIonSt8TeWJhYjsAPzxEtFqnYdY2cbwe3c/NEejr9zXgZSIPsTvcS3NAEiHxPlBWCB7Opzi6FkdXsjkf/RkSfyupMCMHgcRTXDtHdPS7f5F+j+II76vHEWmOUXB8aN56x69SbR8e+3e8wAJhu8INU39W+AJAIxmySvkrstIp9k2ljqkGsoo64P5jOpS8WmiJfwf8EYMZk5iMKsZpf4DYOToe7wW659nX1sMAlROGIvjG1Q2pnEdo/T8mAPTmM+A5MjzOYmGE23ht+Z+9JHvOmSxAOyQuYZrP0zlWxnyvUQ0Gp8wimVoZEQ5O2eAWeF+qf+Bh3KgcotSE5OyHnOub4eg/nllTmFRChOozoP//3IwfPUuJ9FJYar/OnJbijbFU30Yk0cOQ4qtTCcfgWTbCBOq317PKslmlIJLbL8iQxzAahNgIpUSRGQ3p94h1GUki5P3iqki1kYHWHV/4f0cYu6qnAxmKgsdMEPXxCCZPK6aFcKZA6kJ6ko7taGFfD//GrLpPIIXX9tbkchlhqX5kJx1bXcnF4GMdGZvXx8+1bYhPnI8uArKl0uViqeQ6hTPkYMTg8BaHL70IAiCN7jrmjmQ7khgPci5TzrO7pPFY5wZPGqFrKhQKw/cXPZqDUGDdItmq+fCYJrkuQGm8jQ7Zb4E5x7vgcGsIQ7/PgfJya2+UrjN0/r/xjQyF/ZMNh9GVJ+tFcjCwQLBvHksxkETyLx9IU7WVNSdCKPpap4+ZDrut1Q4SitDXiV9EyKzYFVZd6Y5Wrad0hG3igjiqN4LgJzstGGOpUL2FvQDyEqgYh6Bu/5d5MhflpqS+6wdJqsehEe2Bjkjt/hBtmj71Sa8T1COqK/ATGtaqBlfXWPOORBFPWA+Qb1AouS7ewmmXGRF28rVA+bq8E6SbksUr6Ven3TxWAmlU3Qx24KOtHhhDwvHFCofL8acxLqs+GkZ+IjAovmoSw0tmu963vZ0TBYcSery5xhjt/euwI2dISHI81Ft52gasuKcAa4i5bAKiuMEcBlFNQUqaYvdndH0wbL6H5PwU7bv/vbKZeApq3cB+uj8pa+V/+ZqOtv6GbiGzq+uCTgbd+cMvNdNPUwiFwRe1rcsMyH0d+LtGWFUDrVjp65GzvVoUBYducEIrV5zQIWYMzf2Whb6tRZu8TJ+5cgdIEIDtPnsVY4Sqppi8ziNHOhBe9XQjio/tv7NdvWFu5zBeqdTt5BoX+jgsjUsYuVVhRo+oB/xDWJMPUJscUcHDoZDxR8BN2mE3yfGwev+/9xC2gsu23wcVjJf+lR32bgPy7yJSoXcWiMxTBhZxcbSUdStxI/vhsZMEet80/U+WRuyjUwrafJAV7typC8+UC8SQj4hA== application:ssl-gateshead-cert: secure: AAABAA4sXJL0jy7scdk7OXFcuIjhA9g02L3mALj1QeEOitqUdHG/HZnTw1xmZAvnWhSirO25xT+DzGfxPiRrPlEuhuJ3bXFPNztle79L795xQRPbVjhZ0aASWutFouG/3xB3foU/j4hpf6oyzPoOrjcGv8rS3PddqgwdVgRbNqkqYb+SHs3xIEb8kvstQNDyiiL9OPeQiqFhaVCdcG1x70aVn3IW5n2JHDXG3tKZ/onu6maxfP0WF8P782VhmsrtVSgVEaO6ntm1cOad+W1k0ZnkN+26UzQbTL5/tGR2MZ+/PiLw1KotFb3CS2glkv6ecmC73z3Dbye3GWlR27kKzlxQQOKbxrKcwpt5GshZWtnfRWPBQK9B8yjejxRswPniblLbmnNPYATjq3NKDaoD5pt6CIOyXywsyvA3CZVCqLBblAJMprUCbKVlbsyn/5eSV5STD7Sig1LyLQKylVyicD+ii/pLhWQhkCoCLeMhF4cAuQCJ1hrmu88gOY/PThwi9U70el9dSDqYnJ0sNU5cLNgJ2X7rH+w3e+wveDOieyhLqJhk7i+zvcOizMpRIteWXDwd1jTdeiltJxVEiuoKHBcBmtvAB5X5bXKuqIiCpDjMYT7nqyMzTt9HfKWBOB/iFU5Ba1iko0wdOBJyU5PfWR5/F1P0J9bl5h8pE2fY0bilNgRTgRB8auo/9CmW8pvUJVJgzpSX9TN7yBoAGjyf+/IJdsCBFLEv1loUDGtCokq411tr368xPlJz+/2HQpGlv8MBNiH3snYHa0rOITryZhB+09VgFAAa8AmzMreAE/KLzanRIWe8Ag78SaUEnF7O/WzQHCyjgxk8ZrPG1+HL89H9nOJUlBcKcwljdGLKiUwR46Yxl1ZmMr7f7YKlA5EzDtFNJk/aelcUP+xL9wma9IgL/xm0qcjKP6Xt78tGlrHzL9+s1r5Z+mTWs+C7wjUTIPUNnVJauk4zKZ7YxPiISZdGAdUgO38mggZTs9OKn3Tanyit8OT5QHL/u4gv8UBO1EUNeR1VVYqhQh3KVcU+FHQdijF89KEd4t/Y28FnBh21GrnCebtVuaFNrsWu0IfqC3+c31OpZfOA462yPIQ6T6UfHWUon8Ag/ETnbDUSYYHBEPRGDur+K6roUwPgRmaxmFTnuoa7BMgLYdPhlIzCimfBmg8jquRCvewf3XKvIh8nxhjZgFRiJXfZhr7G6VKq/lhmpWqSj3vBYGBP/hHVsw95CEaThR7BRp+ZCv+Lev02pLjZ1KbtUrYISfrFl+TbYmDJX7CnrXso/X2IXB0aMV21icd9ErANlpsTIjA1cEOrs1osMtPyaVhkHeoZRyaZgjHMU+xhnGbnYygo0YIuA33cDMJ8e7lq6ynn/1u+KlrXlQs//cFSKo2Fu58HQlWMrsOoKdcqrqyQ+TDltjR9hxjcbufutNPMjpCYqRn8hsxOla/lSTn5WAE3j/Di6+7wISIX3hlb5LNL4yluaGzBcpSoRyDnPLCAZJAGk40UQAVOF+/j/yckISUknRCPkhy+7Gf8+s9rlMdQtZRR93itTHhFpNrYaSQq1x1Zalyxox2fLrUBG9Ekivi77Qxjj0VLlhDjz0rvyUKEIwbbaPgLprMAMMLaCzwTcEVmk1NuA/koyNligLFlFEUDgEaghVrDX6p9l1nXeQzj5KFGU5GxwDyIT87gcXhiAJ4McVsa1UHED6erZhAZGzMxT/ZCEDCvS8HNeEeUHgooqBNmwpwYXQsoelqsHtE1RydJ3bd554i3ijARxW5LzkeM2sLNq496zjRcEY5eIwBLxK36Yh32yAQnRphgl1mcvH+lczOPPZK0avYx7llaaPcDsX1km2epiV5ws+BoxmLcGEClrAK2rD4YnUmKzU6sdCSOQvi63Bna3xqmvTNcWbW0SuRBVNZy+ILtUBdIAAdvGLRdWwVwgdEwFOOnHGJQWaZG7nqMyfxyMKUw2W4PjINsUthCWymbqCQLgbSYYAQtRpJbVSGl538OaF63J7cspQlNltCQoYLbdHnxM2NoF+mGeFZO2HwCrGJ6FLSCnqYzMQV9XZwAUgPF0zZTp/97Z8eozhr8SjiYgNUVHq1HBVAZDD4TEqzwyv5W7H99ujYTgbciCP7M2+jB/GSdHjE/PuB4JPRmZfOPq5K8GyziPsY6QHpLlx1mdzuLLqwoufnVs/vdfR+7+ORfjjQil3LHGxwRIiEiO6jPkj4CVqS5HNIyAKRox9D5gLQyd28wBxHq2GJUpemZQM9UDKFw/kbWkeBhRNUZsxK1eN/J9hiEGiscW0peyaUBwCkwEHfUoV8aYoolrafF1MG7RR7vyivW5tJPencgkvfuNk3EaCpDxYSy0pnBDzfcMdrLXVjrXqdL8qVekB/sD4GRqmtFKa6YxZa96EVALM40ea7NEVEljUGxKZKusda1JMGZ3fdVE9QawdWuU3DwBC4YbO5CgoLxIIogRIiFq7kRwOPvgyctBN/dqMVqQOqdyBzn2t+cVThAjsnllnKhenqtie95N9SQkYj8UjVHUCjgL54lxpV0Rhy3K4qx5ftm/mxOamNPiRiEABbxpXQSJ9PY4/nC+TSwhNZJAicvBpgylId8pgGkKkHTYCulKpzunZ6+v7NuHTmZ00QZtnZmjRtsFIyKVOhZEoCvA7QqEvFkuM8WJnP5ViOt38MGZ4RAdyYIJ1Czn8lzSmNMr/mDT9Q4U46p9YPh0t8GhNPi9hVOgQvBUSI3y4BEzhr1yRY88t5p7ApPIpSxFMGRUTCP5ZOy4MlIOZXW+gIs9zfelLtx/XOZE4MVz3NwejYIUAet8wWdZFrT9Ndcf36eMgL/sa5BEQTrOyQRr7/uTxHcDe9W0vmNu2c5rFqoaHDfAZNBJLlsMooXUS+KuVA2YaUVvuo3s/sOt1EqHjRgDg/INpmN5dfTmXJnJ55MSTQduAN3zyJfcoOhIn09XwVOQFsF/LSunGVubDcYds105ykqY5ZdOMQtHgrOX7U4QgMK/6bEutHBqo2N6MS/9gmM8bsXMShvuGFvUbKhPGPVJXZCl53hgzJS/j5kJLWL2iM0Vumzx8CgMWZIFfsTl9T5RwVfW8yMcv6tuZ7ZQZltCFEEriKWSeJXudXd8vzWXyL11AawpRkffVwz/SErOHeSkQVHjoTmYkaZ/SFNhw08Vdq2l5oFQUZJUqbzlp79U7lIJJKK9RFtVs3ZhQI7QNjkR74qFhbRKgYsEcBHF0vBlYy8IZgmgGTmrsumeL9/0njfrabraN7HWpDKQITgUbwJK7qZ8reTbqWcK+J2oNN13icy application:ssl-gateshead-chain: diff --git a/infrastructure/application/index.ts b/infrastructure/application/index.ts index 26deceb602..a5817ffe67 100644 --- a/infrastructure/application/index.ts +++ b/infrastructure/application/index.ts @@ -76,6 +76,10 @@ const CUSTOM_DOMAINS: CustomDomains = domain: "planningservices.gloucester.gov.uk", name: "gloucester", }, + { + domain: "planningservices.epsom-ewell.gov.uk", + name: "epsom-and-ewell", + }, ] : []; From fcf0f18e2ee85493a9be56b84e90055a8b8db02c Mon Sep 17 00:00:00 2001 From: Rory Doak <138574807+RODO94@users.noreply.github.com> Date: Sun, 7 Jul 2024 10:12:12 +0100 Subject: [PATCH 106/150] feat: adding scripts for new ``boundary_bbox`` column in ``team_settings`` (#3379) --- scripts/seed-database/write/team_settings.sql | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/seed-database/write/team_settings.sql b/scripts/seed-database/write/team_settings.sql index 1278dac0aa..ad7d7ac281 100644 --- a/scripts/seed-database/write/team_settings.sql +++ b/scripts/seed-database/write/team_settings.sql @@ -11,7 +11,7 @@ CREATE TEMPORARY TABLE sync_team_settings ( external_planning_site_url text, external_planning_site_name text, boundary_url text, - boundary_json jsonb + boundary_bbox jsonb ); \copy sync_team_settings FROM '/tmp/team_settings.csv' WITH (FORMAT csv, DELIMITER ';'); @@ -29,7 +29,7 @@ INSERT INTO external_planning_site_url, external_planning_site_name, boundary_url, - boundary_json + boundary_bbox ) SELECT id, @@ -43,7 +43,7 @@ SELECT external_planning_site_url, external_planning_site_name, boundary_url, - boundary_json + boundary_bbox FROM sync_team_settings ON CONFLICT (id) DO UPDATE @@ -58,7 +58,7 @@ SET external_planning_site_url = EXCLUDED.external_planning_site_url, external_planning_site_name = EXCLUDED.external_planning_site_name, boundary_url = EXCLUDED.boundary_url, - boundary_json = EXCLUDED.boundary_json; + boundary_bbox = EXCLUDED.boundary_bbox; SELECT setval('team_settings_id_seq', max(id)) FROM From a7faf6435d558e929fb20813d1dd4e8431e75929 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Mon, 8 Jul 2024 09:03:39 +0100 Subject: [PATCH 107/150] Revert "chore: Add Espom and Ewell certs to AWS" (#3380) --- .gitignore | 1 - infrastructure/application/Pulumi.production.yaml | 4 ---- infrastructure/application/index.ts | 4 ---- 3 files changed, 9 deletions(-) diff --git a/.gitignore b/.gitignore index d2d8497fb8..133d7d8670 100644 --- a/.gitignore +++ b/.gitignore @@ -24,7 +24,6 @@ api.planx.uk/tmp/ # Ignore certificate files **/*.chain **/*.cert -**/*.crt **/*.key **/*.pfx **/*.pkcs12 diff --git a/infrastructure/application/Pulumi.production.yaml b/infrastructure/application/Pulumi.production.yaml index 2065d18a51..199fd0a32d 100644 --- a/infrastructure/application/Pulumi.production.yaml +++ b/infrastructure/application/Pulumi.production.yaml @@ -57,10 +57,6 @@ config: secure: AAABADIUwFlpmPKfH8fQoNkOe9z8xCwnQgCrV1jxoPTtgfpL9GmImtNx0AnL6HUgkndlUgjCtArhChDN2rdepbgvBV2IZmZ3vds8LvRnBwwLKdxWvNwC6LBQnmWo4oac+VU1XoEOrs+kIDnPqFpkCwyxwySw3FzEmRzUoNLUlGun+ZKTtgtPgYcBNL4P9A73WAvzNlSX2mmRB7lVcEKqSB8SZ3/kEgGbgQ9PyDmHON78RBkaHBT5i0wHP9O1fulEoJ/w9D1S237JagtKzqeb81KUcqWTYLHUwuWKM2pmY4LpVKWOJM8d9PI7gYNQB4YKj/y1mSViK7PuSdCpmPchHER2WN+Oil7z/T47DQevp46Gthv5Von7ZEtoo1kw7aYsRxcUSl+pvVuOMzgP3bw3GS3YKksBsxA8WOlm+bKbyXoHVm/nrFuoSeTmBFUz+sb4VrWDDlF8c+XIe7SRjekk0Ld6Xr8qMPcRjOxj5wtTTPnsaetBmb9FERCa+IW91e37rMUitctX1QqF05SaajJ9oBwJoWQXxIMJ05OltWV1bLW1qdWAcqwFQMXsivo1/xFSjeeUmlld0ba3fjQcdMIvuXOLLVyYQpFPyxKMV1DT4Z+NSRkbBzOP9DtIB2pVp98QeKs3Fovd7mKS6ThGGMdYsub3o3TKg+pAh/KCffe2+MHRyP3Cwz7M7qJ/33puo4HGirTIJdV2nMRBroFyWU5mO8PFBdBgMeSP+zefu0QYpv1ifTv39Xoao4L0TXnj+mT2cO9oZknrH/ymyqTsLHj3Mrn200hZLhp1UhbATzEmHw+6KDMdgpADJRqsDIhtr6MOMa9Q9A1q2Kbk57XSxhP43xA8bZN/BIC+swTUCehFmFD5YeJtjYOD1TnEJPgYnsDtyheenblxfwVhmFT7kxMs8zV6QPLukKKBhkmk7OnyjjMxsJC7/B3SzajDpHqstjZkK+jklE+gQrJxxukVOwiJsBoXzya4aIBeRDEcQRxBK6nbjQOFAUoa5eMID5LAj33tXgXdyM8pdoNM5vJUIXJc6IhWaPUlDPTEwAdehtC+wNEqzeloNQxzCaZ/XsfMTrNcUpHrJcF+xFEcWA57OfiSDyNd3VyMFUQV87NJF/ifg1jhFNl4KxI/md5oUZOX97F314C3YEwsbQy9/2b/WbmnuMhgPpT4QYLDnYqn7Y9BbsBD2eR1U6NvLxJy8H83nCfEfUvRvJ1cmV5IiXnHaF8HC3/ThNjMM7CQaxWLWM4fkDQApEmUU34yL068daNmy3mEbDa739X/zCPNh9295ruyFT74n8Iw4XWCMo/3v0vNVDCRyV5pI4vaEj1GOQSNMLa8CHjXL1T8RKl8b93GXssVRSbDf5WoBcAt0v35v0i5Lq5jTVZjUtlftPVelhI/CLrdP5+5KFaj5M3PX6SaPSO6DbzFjLeCKDu0+MhITp/2iFR5zP1qFHb0fTnIhdKUHGSb88OKUZ8B3eRQRxJrauYcAu0ezx0fOtlEpaZ2E/yUhB4KxXEBCHXkKg1fvoziX/fgsdZGXGdjDzaYhtWxSGsHjQfkGSgaCZ5JY0bwB/Gp6obQlfsJZrFKPCMo+qeRMRv0okEFtlO2Vp7WlH2NjaMZffaXZ2TRsFvMfT2XFNCXF+3pAM9RU8gmN1j/ZULCFsmFJbgJprjNK4KvCjMZmFLUzm7G6+ul6recIcUufwKRm6kmJnJgJIMvz8mbsTU/NDAMLLak4MeJxCzRVXWbXBpv2J6ol15Q89D4eNgdSQKFBjMz7/SnTG06k+kCT1y24+0xAJU8x3BQmpN8ExFnQBzbCyaXkSLPxkt8Y9CJRSx+nIo35sTcVNsu9yw1KNH4+X2qAads55wGFBNy6ucZ2ngI2pnFGfEGNbXv2ZnjB2p8z+UiIHLnBk7Y18Blqvin/guZ4jimpEL0Tuq7Voinrz9Wn4/fwTj0UcMan7UqIq4x4p/C8QiWsYQq/WXlXJqE3XQ0cTsP3cIB1cEFBGGvJhoebBDECyGFlHxW/hTn2RdLApRVF5TAIo02nHcpji0XAT3ctlEKF/4KuFb7RtvNo/OpXDWb44JCt400Wuta1y1I4hDjCtA60pKIA3sBRmkGv3asxzgWYlftCyGLihZNwsPIA/WvGZTSeIY+9I+Ns69YxYxQYHx6Yk/sH0YgkTIau67n4SpbTTQHmNjdyhHapIeutQ9tpmPS06lrqEP7vuYryGlfK/a96MsHPUHJH015zxFDEw5RxeYvaVPOVAB2zA8TMkhGUw8PmAJPpCrT0oUhIFgVt7H56Lj3A/EKlNnFYQbrL6eUB6xl4I1eeUOsDGmgZxDioKQY81wyEjpuI8nSgDlJXg7j472Ol1Oj2AQBIMxa2RprpUwbZ0+6O/+w1jq4Ywy766PDSFj5HGQAxO2EfG+x+Tp9lPS+lhB/O6k1xZ2c8vT8UQjCZI4CCQMLgZcjgy4m+Bj01gJWgyLcLhAF2gfp9mgaoGkHWN24Gu4rykGwr7EJvmffA0U5+RRlkGkSvgjTqnh577o2gw5jyZvGCUUcxb89BAOg63JoZyeZVxpr+mBiASDhafJ1OYo1s1yUUP6dujlpGs1vWWkLeY7kx4LHITrMJw3N+YBGV4gKyRmAzqqNgjsPBAZuq6vW+I6US7Ohdrpzkv1NzXFaLK3o8wU9lbHfC6D/CiB6w6ypdGxWZ+PJy8NHYUwFdfM8nLyd7XjUxcOpdO4y/TS/9r4+FXCnoqIsEiBNXatQvfYdbNmbEGIILgXgBBI7BPZ3A8+U98yaUzgMzXBhOi5Vqn5QA+Yeb9yZdqgGgOJqblm9KgwMXQxwwCfQGTri1hTlP6ZemZNJTgkZph3UhS48MfMDHqoDstYE8gZeALSgDDB+H0dvkCBKT6AcIRejulORkBevz8ZFtQm5xws7EPcscP+1/KxuXzHfsYuf1CLrOIf7K8ZzofksqDIuu8XaDwEfGP9FVOjaohS7kUtyJmT6M2B7HM/lPLopns+CD1nkSPNPIvA9XZHNAdfL7887+1dSMcE1t6m1Rtkee9K8JrREHuLoWZzUHMjo18gBYzX3JJQSykKfy5ZTcqBjfp+j8EjbCV9x8/VmMfjZ6TApf2TDhGxihLBkBKFnSSymCfsVNPv9fBUXYPH3CYHs2VAQUOhh2XYDQasfUbYbtgnOSJfgtCdTHVHB5cYwG4ZrTIA68LJhjrc660bkzeXTAxn6P3o5bRKyqDCAOGqyv0M= application:ssl-doncaster-key: secure: AAABADjezySsYE1/SQmPh9oTRvK0m2tnDSBWUL4j1n9ahASsy7qqkJr5eL2IV9yfW1FP11Gj0XViJ2MviELA9ahrnzrcJVBTqlQKpVRYA3p5myLLmI1ntbr3Y+ZRtzVGQbEHnGr1kerLK03YsGJNLgNw1QWeO8tCHF8+FpJqyxhCPSHV16lBVTjsDxMOBc6rLC/dtI00edcq2x7N0Auhyr/sCauGis/GgYAH3On3HdUSQUvELPFFWn/4Ce8bUzIZ0tywvoy0BqQPO2cHKQyEBhb+Gavj/6Zb2MSvj5xen2/B7BZ2oxq7Xpui1X4nDGqBPf8xdXRlTrt9jIQnpvrqec/A729uXMyngpPBr3vg0wPzdqiUbvMVv13DV0XpdQr6NYf7UdKrQ28yd+37WPMRd4oLynfza3j9FJdqQG01DkLWsEOZa2qpDmg5Edj18fy3KRDe5HIrjCnAsn54H7Q00jggq1Yl31Y/Q0YHc0czDuD2/NTn7SyjBks4gM0QG9rv32U2Co+Z1rzBL94vLmBUNGLWF2IvU1eElkH56ATNR+I7uHXl+AvzsvKqGlY7+UKmna+qlSUI+86kCMb/xltD4nGgu1pHpkT6LptC0xFIPTFL5yH0ZsQ6aEUO8t9BBPRvE5AU4C5zM3Lb7iUI0jX31+Q9ZeslixE/fMBRyjDM4lakvGEVYO88PYtS1cl2JC4Ro2dL5eNySkkPIt/bu0QEPnfVrWZfTFeM9dGiDUG66iWxi/eEvLV53D7AbuhbOSD1J3VILgVmuefHwDAgoPOeUZZGKIiZgFHssn6/Owv3mCYtywtiwv517T9TrR1/RjqT0sAFp33xwwzpQr4X7RLIZUgfhg26bM6l/Tvl7+LLVmbttMWDFnjHM1EdeyDM9gBonOIuwUYIjl80RoD5ezJ9aafQcM2CdbPNsBmzlbgln98YR8Tm7QyOpxzLr3YOp5QLpZ/FGFHSNh1qvfELXU9LeFAhShlrZ3p7Nf6R4rynAl6eoDU9EMc1w8ZfBxoAtxYF41zbzDwgjwUvYmRtUWQa7foVtSTJGQx8ypZlaVP3W47Kq8jTMRkgKKkJvxgB7RErfVeL9GpRXHTZkD/i1kSM15zg4T02ijBHAb54IRK196Vf0yUR0eFP5mUXeEFdcsRMwVBaNYrQhWMmx0aiQWS6lRK+n/eDv5klGnSl9iUKdBvyjXwXVzNJYjJlZPIXYn0xKfG/zClwDxfr4K0Hg4H3lSttu/+hyyxHJi5tGctMXeVvkRj6gCINSiVv2/fEwk3IeaGyRz6o0YiPlt16q41JepwjZhA+7DtNS8WE+aoPcb5hN1lmlKFlvAj8yQ4MYEJLXdj13ZsWoXfdJAh+0W9mKk7hnNJer9954poHRtD1AFVgeIZfTFkKdmkD+SVay3BvqXjcEmWtF1VB8d2VliP33ZNo/J6VWDeKoAJ/se9x9qcu/yOke+Cijd9qZPQ09uzdxOHX+6bGvF5YWjiln8EK6RM49TAfAq9vtt1R5X4DvEQbGxkb5TLpoURKqV7DeQUmcymNJ+55zjKR58177z2LuqFquhwl9dHy65sYB8Rhmiiv/hQBdsNELSy+f0Zy8d2EWw97nPLTqUBJD5iDP0H7dis7BbHZnoHBZS9MkidJgHqlZNLFrmVK3F4YU+9juWvAK3XkTZgx0r4y72cMRwJ3GcKfumI2u7cMEbimmtsx8/qhej0PTf7bXoGaQWmboQE5D89wRACoAqpOwC0G/BJ54qYZP1q7lwU6Ku97sueznkNKE5A2dokDR+gnm3uy+mbMJI6NUOfKJCgrnoxkTgCVcIHwMGHG1u9VED1A6GBDFfO/5Wvx5BI/jihO5+vfvr49UFFAz5Xah6kjIFH/S47AnTVHfbRIH/22z7BMOJQMt4kZ3ZklyVnMfdQtIK1YPlgtN7eXgH+F3OvH7K1RDW5vUvFk64LWIlb/8EoaF+TALb8ZSx2Zv8xLfm1NjLuztvQkSot7jhRTo23XjDJfxf/e8Aaqjmlgl/CDVC62kq7Wt84BaP8r/pO4+KAAxb8plYzhzK7M1m0QOOvk2Avb80TamNeQjLX906GUpsEI61mEZAYm/NJFENpA/5Rh1HLI2lAKmyEi9bcQ1QoscoO8HIKKjb7uIj8t6bvpy8JAGlqx3Yq1S+yBYqFdPpYJEzW0DrPdDR55B6KD/HfEt0t2KpehCJk40uzfmBMyRv6MqP7uRb6O49pkBj6lN8+NUM8PUBMcT2T4IvxvID1zhyDAo7KIqS0IpMJUOactGyI= - application:ssl-epsom-and-ewell-cert: - secure: AAABAN1YNPGTbUk3OK/j7777E5fs37UbfLwG6ZWhnbNZKpki4rYk6SEw4m3bK3c5NlizygvjIEonsDavi5Np9Bcl3eRbUZCdTfJ3zKYkU+jn1RYwAUsqUxLGyZvv9XLptWb1Ykq2ewsgzmxnWF7oEndXuyuCGdn7B4V1RUmMH+s9sFVBGHWx+5v3dp3KCOHcz5mbZ7/bJIBikXFDkLIsEq6ZvviElNTiWBjQvDm7xZ9UYgmuLIUMALXHSxJFy9vFNYwnMmr8OcpUSgssX7g/cDCo39Xe7kWQRdH0lnmiPSChKSIJRsM/d9FZ1ZffUGXU4GeJmOdHNTI3q/hLDwfR7zRQWNeNHH9o22nikf2OpViviz6iVvD/Oy6SOxoH5RG5G3n7dQzHKV6bS51bV0w1PrBPD3UmL1nCK8AQlsuXf9FDXn7jEpijycQVEXQnHrCZ6WY+UrU2yJsX2gwnXAAdEGusJEPgHjYDanTgmMwRYJ+v8QV8BmykjqI/eMVOzZh7Kernd9RYu4Z3SCqarrpdLin1xIgdPXwB8wcgWj8K8lyCos/0FGSGLmFNGvvZy5J9z4hhLdIqOgUjpuZe4C5w9h/IBrkJJuVeNpzM7A0fcqcv7B53KQRgas9bH2CHT11+ymC/MY5/9IjchWIDkaksAfWAiIKAEVX9sCiEF7D8DLMkL867rhQT1w/2udvx5IambfvDZxw1NwybdiOsh1xdEfT8Rgs4t7s6FSek8xy1Ohzp7kmrqy0EqIG+8PNhn7AiaevgICqwTlHTvYKg1nzsscSSluva07Ww8Z2nOy6LDv9aJhxZI9kwVSuXZjn5WTpWN6WPHy/198J6R1SSSPMRqegvWFoN2pGELuh+TGudMFwypPkj/EwhW+60YqBY+jKL6bp3AZvFUZ35vU9LFxQXQr4yb6Irfh/G2gzP85M5JIQxEUAiLuY0VqAUlgD+XjlwRb4W90DNEx7dsRKt3+bpiFnRrXY8UGnfzay8+P4Rp0c3ObDuevU6lKGYXe7lHtmWc57qEWgYbXTgOt7ntKqZsdJ0NvGwGwBCISoYPYYTMynTmWWBWBpDBx7IBssdBdMRF0eRLdXzZDEHzg822S04DWHVQwUfYEN/24UiQ/78UaVVuYn7d0G0Xf61Cq7n95n+mEuQ75Eh7km+zPZTBlY6c3RJpYqZHv1UToFfgdBxX/yz5+1de6hXFkL6QcdXTFOiYEn/Pw6cpdpvHx0/81bCLTQOg/2YxdAgGJTv1J0Ko/sf5JkMJagDHVbOMquiwJ0UKV4Lm+vAgEtO2IQ/EM4p+syRcuVdhmklKGXLRBYHO4t7JxKSAKbyAj46AVcm5QcdVvWnVe1bBeks/y4nybJCbh/LLbyBKxCPTzd2aHa5lJ1zBEVw2YABKre+OgQW8g9VsMU05vqxj1mIVwZfCkwNIXTJn4vlwUA1h9plTW9vgTRqCBCfuuZI7uZtoeZiVpSfVO4/8bzoKlf7jGC+9MVUkVCBdWBMk3AvaaEyQ8ll71CyJJlM/EHQ3RKQNZUNnpR/uy9W+H8K7mN2ExvA+P043TshMP65H8Lq7gNsvztUVFpHQN1EoJhbh3DQ6QDMhLnqTH0BIqKJu2Jw1wHoLA0McCALbJzovCowcgQ1BEUP8cSHFG4BtUWNJEh8IM6lv+LoWNYH5LOA8+Jcd6Idb8xbLQPGHW70CHb5X5egK6dt7cbfWUl93pZMKcgy1Ar+O+k6hCycsqWVM4KX0taYHkfZzKjRVud41W2MxkUdfZN7MK2ou8qIpvpHb+1Lvnv0K7AzGyFpXwaNdY4D3yDTo8vWY7VMo+l3N2gYYkoAgRAPUL/niLfTqxnl4bnt19RmBVDgteLAd+ShIVvbuNy/GLAqw/NhaKwtxQFHeIXL6BlA125l/xK9uAz9zhazHmjG5MhdnBEs8VX5NljOOKsR1kzIE4HzBo4rIpbuIesIrUXtH2gnxhkngajjfhl8Mcbl/zg+VWkzsLw0B/uCtfEbvTxcBgvFgqmRQhxMmujorV9gDmwX6w65Rl4zA9PS2vhyzhy3v5JyoItbENF3FQTU0xermBolWpX5WAGGwBJMYbT+Nrrm908rbUF8DpLtfQ0VkieAmczIUBuLDqB7XWYRDgl1OVKZqRXnbrl1sK0GCEg0NfG+i8ow6/UP8nnwTVjKGtng3lecvSlaPZARLxAlKHyrZHf7XJRbqMwG4RdGXslrDmUboh9XQYfhWRJZNtv4gL+WGkiR3anq9dVJeOwzNM+exXYwu4bgy1Q8sWLZyIvitEotEXDZEILOdEP691KjryzY1SvquiwdXKET6gYpzmMCsU4yh/W4LZCwy92lBEXj9umEnGC191VPtCOfxWjaX7q9AVwtgJS8eDH65lMAuP+EFaiBQSitbZHjeTVhYj8cIkI75qdcGVcrKRkSI5JULYgud7CUhnb9VFSPRfJ5lUbEFQFMBKH5sZmav/gjZswcPJLo1CmEIqqwCRMVxJ0qf4QUvASQdR6q5P5oljHEmmuCBISsUunqOZeKP0xxK++K89/RWtQYNvGL7rvCVar52K+lqGeK2LuOg61Duw2juvK9MMJ6OVIQzR9erWojtn4TyXLDeqefj0DSA/+MphOeHxQxX+oPCOrwMgpeqymABSXyFASiYd2oBaCvaywqHKzJGAKM+DgIJKtOixwWMSC7gDqlp8PBcG4Xzs+exTrQ4gltiuS/PylJ2KLlFh5VdNMcDNRX2/LcnAMewUS1SJYycFHw/kPONBNFlLIn1OWIuIqEceH5EDQxkfmEJoHcFBGQcCQ2dIzfggQAqSZUHlUSoUa+iLWZIQfBM8jr1/awKWP4i7a3KDL9VRhU9tO+kqJyh8pRan7B0FZCg8kVuv1YRnpz6Ucb/lJxqv4I/qse8XTem/3YWrbezT1Pz7EepwkccYO8t+do55iARGYTPCCxulnwU2rH+rzoMkMQ0znk+X1V2uMz7XvX5S567NOoIsAD38GinyTiv0MUE3EAvvPISTi7rxCILHN/3H5pXffJ+DQk2/x2UMzi8YjwymA5EZpe0ArWhyi4JUCRxQHUqRvhStYkLACqzqAYYx8U+kmhM2b7HkFdN+dJuxYwV4hCqlc+N2ViKwEZY42MCkihugH5BiAPsAYCQ96dnihp0bh02rXuTN9l3n+DlBdM3LHfOaT2GQw0gQwlSQtwiVhLqHKT2oRJGQUXOCE6O46xtXdYdtGqP5I4TEkL0wHkHHfrwb/0CzKn0SvzWk2NkSubpBttsSzhYcjrbhqZCPQt2uF7KrCKaGfeM+AL2HSKwY4OKCkgPpQe6f+E+/Y/71pwWKHHvXMaNrNDuVcCHnndKq5c83OmuKsHRs+uk/tcpk8ZeKnZGDlbAaxzNgYLT3vSMyWjohx3bwJH2T2jSTSOw7ZltOmZtCL7a4yE+co4A3hZxeuupqO+GNGxsVV1FrWRZF5rIgOvf6+ubyHFLZNvas6ZuzwNDkqkd8WyujEdcN1oX84OexIQZDEI20gvQ+w20qqyR9GBZBPmk1z18xvOGmcrR3HesDymvRfVcD59FvAEuu6Bl4KbvWKzsyDjXJu8BWeNWnY54uiT8PVuQVbJ6lRAsspfyN2J/7wa4KN8r6O4rV8n5aFVs71ujEmqHR9o9tAm0J29+2mjEi/vqIoh/iN5L9CILdKeRwP8WJO17yg1lm/c4trd3/xNRS7b2wJaP6Br5MS8NDSEaCR+QOsN6g+TVENnoxTmojVdwSsiXT/mx/RBKK8RZwEOrCiOsLBqIlDMQBuPhx+eobwbsTyeNvhQOIhCzmPaWXuVRqsnuJv9eYLLOmrwT6sm3AQbnGOaC5hAbzYgh1sQ8qAsKkuM/TWWJkmpPv0Ya9F0d3qFSOMA9QaiVXCeD0rNsl9LyfpjghFsiOiOt2UrSO2irJb+9QsPKbRSVxw8HtHLmYo4iL1Tgw== - application:ssl-epsom-and-ewell-key: - secure: AAABABngth8fC8gaD7FItkcIgu1B7NEfXj5QGExBTUClDu05/cJsG3lsz4j/QN0yGVrJsryWM3gOfwVFwalLJmn+Ff0hBaRbdbzJIIdA3GRXpN6muOh0JAQpWZ5JmvLNSmfF8q+U1YUAds7Q8N5fXAaTQMPvwzTJcKTSJbvJ8uv6yTenzwqehaujz4fbOZrakYLRAWBH4QIuht51QQ+3CaLxnHDrO/ORt2ACzpDnqNDBKvVpLi/S3zMcZcMB1zR7uY9osO3XXzBHHuYjkjaP1W9t7ay0J1M4jJc/XRbg9bWSKG1/nOiagboPF3AAe+XwETAhsKi5XyEuAbSzffCx+Z4kZAIqqJTp+dOnj1jyu7nX9wnn9dl0iJv01eDCP3/dzXI1+ZVxbqbnhxBuEP6Dmx0ArledivEO6BPRnTGP2K7BAc6vcnW6gMBs5A77NZzebhOhO1n8WWBRQZyRHP0XxSy0/bMHG/hTgTsyI3g8WmSciPV10zNnOTtbEYZvw5y6V1gjhkgDb3Ds5pJpeZujgrcjsx1WOkVX3zu9CQ083NovEtJlAcAYCkLn08Dgv6vRCEX2VuwhX0VlEG4M/OwZ3dV4uARZe5erZRF+w+ec2n0gO0IyfTT9Oe3bKTtPkdR205cxIDTaeOA9NkAJChrHNX1aIogor+4hyhVee2yTawztDqpUwVpH3TdmCBPCGBnhSwgxCNxlBvu/BLopUceMMNEhYeUQid70nRQvbjUs7FY6j/TAkxJYNF7hgpRYbvg6fuhiicm9fY36WKyqEZEncon1dCLYCespq4BupNGcnPFPrA2811i5qkz5aCdeyGEYBHTJcfQyxETdPO817MD4GOiruG1BXMT3apFx6/EtNGvLAoZe510ia6/CxTwYaC71VLM57LlK4p1Ubd8+R6ikueXAl5yHYm4jJJ75ftvJs7/PAWeP2CGIonSt8TeWJhYjsAPzxEtFqnYdY2cbwe3c/NEejr9zXgZSIPsTvcS3NAEiHxPlBWCB7Opzi6FkdXsjkf/RkSfyupMCMHgcRTXDtHdPS7f5F+j+II76vHEWmOUXB8aN56x69SbR8e+3e8wAJhu8INU39W+AJAIxmySvkrstIp9k2ljqkGsoo64P5jOpS8WmiJfwf8EYMZk5iMKsZpf4DYOToe7wW659nX1sMAlROGIvjG1Q2pnEdo/T8mAPTmM+A5MjzOYmGE23ht+Z+9JHvOmSxAOyQuYZrP0zlWxnyvUQ0Gp8wimVoZEQ5O2eAWeF+qf+Bh3KgcotSE5OyHnOub4eg/nllTmFRChOozoP//3IwfPUuJ9FJYar/OnJbijbFU30Yk0cOQ4qtTCcfgWTbCBOq317PKslmlIJLbL8iQxzAahNgIpUSRGQ3p94h1GUki5P3iqki1kYHWHV/4f0cYu6qnAxmKgsdMEPXxCCZPK6aFcKZA6kJ6ko7taGFfD//GrLpPIIXX9tbkchlhqX5kJx1bXcnF4GMdGZvXx8+1bYhPnI8uArKl0uViqeQ6hTPkYMTg8BaHL70IAiCN7jrmjmQ7khgPci5TzrO7pPFY5wZPGqFrKhQKw/cXPZqDUGDdItmq+fCYJrkuQGm8jQ7Zb4E5x7vgcGsIQ7/PgfJya2+UrjN0/r/xjQyF/ZMNh9GVJ+tFcjCwQLBvHksxkETyLx9IU7WVNSdCKPpap4+ZDrut1Q4SitDXiV9EyKzYFVZd6Y5Wrad0hG3igjiqN4LgJzstGGOpUL2FvQDyEqgYh6Bu/5d5MhflpqS+6wdJqsehEe2Bjkjt/hBtmj71Sa8T1COqK/ATGtaqBlfXWPOORBFPWA+Qb1AouS7ewmmXGRF28rVA+bq8E6SbksUr6Ven3TxWAmlU3Qx24KOtHhhDwvHFCofL8acxLqs+GkZ+IjAovmoSw0tmu963vZ0TBYcSery5xhjt/euwI2dISHI81Ft52gasuKcAa4i5bAKiuMEcBlFNQUqaYvdndH0wbL6H5PwU7bv/vbKZeApq3cB+uj8pa+V/+ZqOtv6GbiGzq+uCTgbd+cMvNdNPUwiFwRe1rcsMyH0d+LtGWFUDrVjp65GzvVoUBYducEIrV5zQIWYMzf2Whb6tRZu8TJ+5cgdIEIDtPnsVY4Sqppi8ziNHOhBe9XQjio/tv7NdvWFu5zBeqdTt5BoX+jgsjUsYuVVhRo+oB/xDWJMPUJscUcHDoZDxR8BN2mE3yfGwev+/9xC2gsu23wcVjJf+lR32bgPy7yJSoXcWiMxTBhZxcbSUdStxI/vhsZMEet80/U+WRuyjUwrafJAV7typC8+UC8SQj4hA== application:ssl-gateshead-cert: secure: AAABAA4sXJL0jy7scdk7OXFcuIjhA9g02L3mALj1QeEOitqUdHG/HZnTw1xmZAvnWhSirO25xT+DzGfxPiRrPlEuhuJ3bXFPNztle79L795xQRPbVjhZ0aASWutFouG/3xB3foU/j4hpf6oyzPoOrjcGv8rS3PddqgwdVgRbNqkqYb+SHs3xIEb8kvstQNDyiiL9OPeQiqFhaVCdcG1x70aVn3IW5n2JHDXG3tKZ/onu6maxfP0WF8P782VhmsrtVSgVEaO6ntm1cOad+W1k0ZnkN+26UzQbTL5/tGR2MZ+/PiLw1KotFb3CS2glkv6ecmC73z3Dbye3GWlR27kKzlxQQOKbxrKcwpt5GshZWtnfRWPBQK9B8yjejxRswPniblLbmnNPYATjq3NKDaoD5pt6CIOyXywsyvA3CZVCqLBblAJMprUCbKVlbsyn/5eSV5STD7Sig1LyLQKylVyicD+ii/pLhWQhkCoCLeMhF4cAuQCJ1hrmu88gOY/PThwi9U70el9dSDqYnJ0sNU5cLNgJ2X7rH+w3e+wveDOieyhLqJhk7i+zvcOizMpRIteWXDwd1jTdeiltJxVEiuoKHBcBmtvAB5X5bXKuqIiCpDjMYT7nqyMzTt9HfKWBOB/iFU5Ba1iko0wdOBJyU5PfWR5/F1P0J9bl5h8pE2fY0bilNgRTgRB8auo/9CmW8pvUJVJgzpSX9TN7yBoAGjyf+/IJdsCBFLEv1loUDGtCokq411tr368xPlJz+/2HQpGlv8MBNiH3snYHa0rOITryZhB+09VgFAAa8AmzMreAE/KLzanRIWe8Ag78SaUEnF7O/WzQHCyjgxk8ZrPG1+HL89H9nOJUlBcKcwljdGLKiUwR46Yxl1ZmMr7f7YKlA5EzDtFNJk/aelcUP+xL9wma9IgL/xm0qcjKP6Xt78tGlrHzL9+s1r5Z+mTWs+C7wjUTIPUNnVJauk4zKZ7YxPiISZdGAdUgO38mggZTs9OKn3Tanyit8OT5QHL/u4gv8UBO1EUNeR1VVYqhQh3KVcU+FHQdijF89KEd4t/Y28FnBh21GrnCebtVuaFNrsWu0IfqC3+c31OpZfOA462yPIQ6T6UfHWUon8Ag/ETnbDUSYYHBEPRGDur+K6roUwPgRmaxmFTnuoa7BMgLYdPhlIzCimfBmg8jquRCvewf3XKvIh8nxhjZgFRiJXfZhr7G6VKq/lhmpWqSj3vBYGBP/hHVsw95CEaThR7BRp+ZCv+Lev02pLjZ1KbtUrYISfrFl+TbYmDJX7CnrXso/X2IXB0aMV21icd9ErANlpsTIjA1cEOrs1osMtPyaVhkHeoZRyaZgjHMU+xhnGbnYygo0YIuA33cDMJ8e7lq6ynn/1u+KlrXlQs//cFSKo2Fu58HQlWMrsOoKdcqrqyQ+TDltjR9hxjcbufutNPMjpCYqRn8hsxOla/lSTn5WAE3j/Di6+7wISIX3hlb5LNL4yluaGzBcpSoRyDnPLCAZJAGk40UQAVOF+/j/yckISUknRCPkhy+7Gf8+s9rlMdQtZRR93itTHhFpNrYaSQq1x1Zalyxox2fLrUBG9Ekivi77Qxjj0VLlhDjz0rvyUKEIwbbaPgLprMAMMLaCzwTcEVmk1NuA/koyNligLFlFEUDgEaghVrDX6p9l1nXeQzj5KFGU5GxwDyIT87gcXhiAJ4McVsa1UHED6erZhAZGzMxT/ZCEDCvS8HNeEeUHgooqBNmwpwYXQsoelqsHtE1RydJ3bd554i3ijARxW5LzkeM2sLNq496zjRcEY5eIwBLxK36Yh32yAQnRphgl1mcvH+lczOPPZK0avYx7llaaPcDsX1km2epiV5ws+BoxmLcGEClrAK2rD4YnUmKzU6sdCSOQvi63Bna3xqmvTNcWbW0SuRBVNZy+ILtUBdIAAdvGLRdWwVwgdEwFOOnHGJQWaZG7nqMyfxyMKUw2W4PjINsUthCWymbqCQLgbSYYAQtRpJbVSGl538OaF63J7cspQlNltCQoYLbdHnxM2NoF+mGeFZO2HwCrGJ6FLSCnqYzMQV9XZwAUgPF0zZTp/97Z8eozhr8SjiYgNUVHq1HBVAZDD4TEqzwyv5W7H99ujYTgbciCP7M2+jB/GSdHjE/PuB4JPRmZfOPq5K8GyziPsY6QHpLlx1mdzuLLqwoufnVs/vdfR+7+ORfjjQil3LHGxwRIiEiO6jPkj4CVqS5HNIyAKRox9D5gLQyd28wBxHq2GJUpemZQM9UDKFw/kbWkeBhRNUZsxK1eN/J9hiEGiscW0peyaUBwCkwEHfUoV8aYoolrafF1MG7RR7vyivW5tJPencgkvfuNk3EaCpDxYSy0pnBDzfcMdrLXVjrXqdL8qVekB/sD4GRqmtFKa6YxZa96EVALM40ea7NEVEljUGxKZKusda1JMGZ3fdVE9QawdWuU3DwBC4YbO5CgoLxIIogRIiFq7kRwOPvgyctBN/dqMVqQOqdyBzn2t+cVThAjsnllnKhenqtie95N9SQkYj8UjVHUCjgL54lxpV0Rhy3K4qx5ftm/mxOamNPiRiEABbxpXQSJ9PY4/nC+TSwhNZJAicvBpgylId8pgGkKkHTYCulKpzunZ6+v7NuHTmZ00QZtnZmjRtsFIyKVOhZEoCvA7QqEvFkuM8WJnP5ViOt38MGZ4RAdyYIJ1Czn8lzSmNMr/mDT9Q4U46p9YPh0t8GhNPi9hVOgQvBUSI3y4BEzhr1yRY88t5p7ApPIpSxFMGRUTCP5ZOy4MlIOZXW+gIs9zfelLtx/XOZE4MVz3NwejYIUAet8wWdZFrT9Ndcf36eMgL/sa5BEQTrOyQRr7/uTxHcDe9W0vmNu2c5rFqoaHDfAZNBJLlsMooXUS+KuVA2YaUVvuo3s/sOt1EqHjRgDg/INpmN5dfTmXJnJ55MSTQduAN3zyJfcoOhIn09XwVOQFsF/LSunGVubDcYds105ykqY5ZdOMQtHgrOX7U4QgMK/6bEutHBqo2N6MS/9gmM8bsXMShvuGFvUbKhPGPVJXZCl53hgzJS/j5kJLWL2iM0Vumzx8CgMWZIFfsTl9T5RwVfW8yMcv6tuZ7ZQZltCFEEriKWSeJXudXd8vzWXyL11AawpRkffVwz/SErOHeSkQVHjoTmYkaZ/SFNhw08Vdq2l5oFQUZJUqbzlp79U7lIJJKK9RFtVs3ZhQI7QNjkR74qFhbRKgYsEcBHF0vBlYy8IZgmgGTmrsumeL9/0njfrabraN7HWpDKQITgUbwJK7qZ8reTbqWcK+J2oNN13icy application:ssl-gateshead-chain: diff --git a/infrastructure/application/index.ts b/infrastructure/application/index.ts index a5817ffe67..26deceb602 100644 --- a/infrastructure/application/index.ts +++ b/infrastructure/application/index.ts @@ -76,10 +76,6 @@ const CUSTOM_DOMAINS: CustomDomains = domain: "planningservices.gloucester.gov.uk", name: "gloucester", }, - { - domain: "planningservices.epsom-ewell.gov.uk", - name: "epsom-and-ewell", - }, ] : []; From 367327bf3b2644ef04fa66f9051216a04ad56dc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Mon, 8 Jul 2024 09:04:27 +0100 Subject: [PATCH 108/150] feat: Add error handling for failed file uploads (#3369) --- .../@planx/components/FileUpload/Public.tsx | 11 ++ .../components/FileUploadAndLabel/Public.tsx | 5 +- .../components/FileUploadAndLabel/schema.ts | 17 ++- .../PrivateFileUpload/UploadedFileCard.tsx | 144 ++++++++++-------- 4 files changed, 106 insertions(+), 71 deletions(-) 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/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/shared/PrivateFileUpload/UploadedFileCard.tsx b/editor.planx.uk/src/@planx/components/shared/PrivateFileUpload/UploadedFileCard.tsx index 283d21b2fd..f0ad4ba588 100644 --- a/editor.planx.uk/src/@planx/components/shared/PrivateFileUpload/UploadedFileCard.tsx +++ b/editor.planx.uk/src/@planx/components/shared/PrivateFileUpload/UploadedFileCard.tsx @@ -11,6 +11,7 @@ import { visuallyHidden } from "@mui/utils"; import { FileUploadSlot } from "@planx/components/FileUpload/Public"; import ImagePreview from "components/ImagePreview"; import React from "react"; +import ErrorWrapper from "ui/shared/ErrorWrapper"; interface Props extends FileUploadSlot { removeFile: () => void; @@ -19,12 +20,12 @@ interface Props extends FileUploadSlot { } const Root = styled(Box)(({ theme }) => ({ - border: `1px solid ${theme.palette.border.main}`, marginBottom: theme.spacing(0.5), marginTop: theme.spacing(5), })); const FileCard = styled(Box)(({ theme }) => ({ + border: `1px solid ${theme.palette.border.main}`, position: "relative", height: "auto", display: "flex", @@ -91,74 +92,89 @@ export const UploadedFileCard: React.FC = ({ removeFile, onChange, tags, + status, }) => ( - - - - {file instanceof File && file?.type?.includes("image") ? ( - - ) : ( - - )} - - - - + <> + + + + {file instanceof File && file?.type?.includes("image") ? ( + + ) : ( + + )} + + - {file.path} - - {formatBytes(file.size)} - - {removeFile && ( - - - - )} - - - {tags && ( - - - {tags.map((tag) => ( - - + + {file.path} + + {formatBytes(file.size)} + + {removeFile && ( + - - ))} - - onChange && onChange()} - sx={{ fontFamily: "inherit", fontSize: "inherit" }} - component="button" - variant="body2" - > - Change - - the list of what file {file.path} shows + aria-label={`Delete ${file.path}`} + title={`Delete ${file.path}`} + onClick={removeFile} + > + + + )} - - - )} + + {tags && ( + + + {tags.map((tag) => ( + + + + ))} + + onChange && onChange()} + sx={{ fontFamily: "inherit", fontSize: "inherit" }} + component="button" + variant="body2" + > + Change + + the list of what file {file.path} shows + + + + )} + +
    ); From 8adce6aa6ba8b9197e60885959cc2687fde8a01c Mon Sep 17 00:00:00 2001 From: Jessica McInchak Date: Mon, 8 Jul 2024 12:44:59 +0200 Subject: [PATCH 109/150] feat: add ODP Schema validation example for FileTypes to publish checks (#3373) --- api.planx.uk/modules/flows/docs.yaml | 32 ++- .../modules/flows/validate/service.ts | 89 ++++++++- .../modules/flows/validate/validate.test.ts | 188 ++++++++++++++++++ api.planx.uk/package.json | 2 +- api.planx.uk/pnpm-lock.yaml | 9 +- e2e/tests/api-driven/package.json | 2 +- e2e/tests/api-driven/pnpm-lock.yaml | 8 +- e2e/tests/ui-driven/package.json | 2 +- e2e/tests/ui-driven/pnpm-lock.yaml | 8 +- editor.planx.uk/package.json | 2 +- editor.planx.uk/pnpm-lock.yaml | 12 +- .../components/Sidebar/PublishDialog.tsx | 4 +- 12 files changed, 320 insertions(+), 38 deletions(-) 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/validate/service.ts b/api.planx.uk/modules/flows/validate/service.ts index 6b4dc388c4..802f8f5c9e 100644 --- a/api.planx.uk/modules/flows/validate/service.ts +++ b/api.planx.uk/modules/flows/validate/service.ts @@ -1,3 +1,4 @@ +import { getValidSchemaValues } from "@opensystemslab/planx-core"; import { ComponentType, Edges, @@ -6,6 +7,7 @@ import { } from "@opensystemslab/planx-core/types"; import * as jsondiffpatch from "jsondiffpatch"; import intersection from "lodash/intersection"; +import countBy from "lodash/countBy"; import { dataMerged, getMostRecentPublishedFlow } from "../../../helpers"; import { @@ -23,7 +25,7 @@ type AlteredNode = { type ValidationResponse = { title: string; - status: "Pass" | "Fail" | "Not applicable"; + status: "Pass" | "Fail" | "Warn" | "Not applicable"; message: string; }; @@ -55,16 +57,20 @@ const validateAndDiffFlow = async ( const validationChecks = []; const sections = validateSections(flattenedFlow); const inviteToPay = validateInviteToPay(flattenedFlow); - validationChecks.push(sections, inviteToPay); + const fileTypes = validateFileTypes(flattenedFlow); + validationChecks.push(sections, inviteToPay, fileTypes); - // Sort validation checks by status: Fail, Pass, Not applicable - const applicableChecks = validationChecks - .filter((v) => v.status !== "Not applicable") - .sort((a, b) => a.status.localeCompare(b.status)); + // 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 = applicableChecks.concat(notApplicableChecks); + const sortedValidationChecks = failingChecks + .concat(warningChecks) + .concat(passingChecks) + .concat(notApplicableChecks); return { alteredNodes, @@ -193,9 +199,8 @@ const validateInviteToPay = (flowGraph: FlowGraph): ValidationResponse => { }; const inviteToPayEnabled = (flowGraph: FlowGraph): boolean => { - const payNodes = Object.entries(flowGraph).filter( - (entry): entry is [string, Node] => - isComponentType(entry, ComponentType.Pay), + const payNodes = Object.entries(flowGraph).filter((entry) => + isComponentType(entry, ComponentType.Pay), ); const payNodeStatuses = payNodes.map( ([_nodeId, node]) => node?.data?.allowInviteToPay, @@ -206,4 +211,68 @@ const inviteToPayEnabled = (flowGraph: FlowGraph): boolean => { ); }; +const validateFileTypes = (flowGraph: FlowGraph): ValidationResponse => { + // 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 { validateAndDiffFlow }; diff --git a/api.planx.uk/modules/flows/validate/validate.test.ts b/api.planx.uk/modules/flows/validate/validate.test.ts index f17a73052d..dce4af082e 100644 --- a/api.planx.uk/modules/flows/validate/validate.test.ts +++ b/api.planx.uk/modules/flows/validate/validate.test.ts @@ -120,6 +120,11 @@ describe("sections validation on diff", () => { 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", + }, ]); }); }); @@ -168,6 +173,11 @@ describe("sections validation on diff", () => { 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", + }, ]); }); }); @@ -207,6 +217,11 @@ describe("invite to pay validation on diff", () => { 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", + }, ]); }); }); @@ -256,6 +271,11 @@ describe("invite to pay validation on diff", () => { 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", + }, ]); }); }); @@ -301,6 +321,11 @@ describe("invite to pay validation on diff", () => { 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", + }, ]); }); }); @@ -348,6 +373,11 @@ describe("invite to pay validation on diff", () => { 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", + }, ]); }); }); @@ -397,6 +427,164 @@ describe("invite to pay validation on diff", () => { 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", + }, + ]); + }); + }); +}); + +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", + }, + ]); + }); + }); + + 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", + }, ]); }); }); diff --git a/api.planx.uk/package.json b/api.planx.uk/package.json index 09c750cf4c..3ae697df3f 100644 --- a/api.planx.uk/package.json +++ b/api.planx.uk/package.json @@ -5,7 +5,7 @@ "packageManager": "pnpm@8.6.6", "dependencies": { "@airbrake/node": "^2.1.8", - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#60158b2", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#ed7c187", "@types/isomorphic-fetch": "^0.0.36", "adm-zip": "^0.5.10", "aws-sdk": "^2.1467.0", diff --git a/api.planx.uk/pnpm-lock.yaml b/api.planx.uk/pnpm-lock.yaml index a4251b7ad7..c28fa8d50e 100644 --- a/api.planx.uk/pnpm-lock.yaml +++ b/api.planx.uk/pnpm-lock.yaml @@ -14,8 +14,8 @@ dependencies: specifier: ^2.1.8 version: 2.1.8 '@opensystemslab/planx-core': - specifier: git+https://github.com/theopensystemslab/planx-core#60158b2 - version: github.com/theopensystemslab/planx-core/60158b2 + specifier: git+https://github.com/theopensystemslab/planx-core#ed7c187 + version: github.com/theopensystemslab/planx-core/ed7c187 '@types/isomorphic-fetch': specifier: ^0.0.36 version: 0.0.36 @@ -5528,6 +5528,7 @@ packages: /js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true dependencies: argparse: 1.0.10 esprima: 4.0.1 @@ -8202,8 +8203,8 @@ packages: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} dev: false - github.com/theopensystemslab/planx-core/60158b2: - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/60158b2} + github.com/theopensystemslab/planx-core/ed7c187: + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/ed7c187} name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true diff --git a/e2e/tests/api-driven/package.json b/e2e/tests/api-driven/package.json index 3d7bb5de3d..f0542e3572 100644 --- a/e2e/tests/api-driven/package.json +++ b/e2e/tests/api-driven/package.json @@ -7,7 +7,7 @@ "packageManager": "pnpm@8.6.6", "dependencies": { "@cucumber/cucumber": "^9.3.0", - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#60158b2", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#ed7c187", "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 5852716546..d193c924e6 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#60158b2 - version: github.com/theopensystemslab/planx-core/60158b2 + specifier: git+https://github.com/theopensystemslab/planx-core#ed7c187 + version: github.com/theopensystemslab/planx-core/ed7c187 axios: specifier: ^1.6.8 version: 1.6.8 @@ -3053,8 +3053,8 @@ packages: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} dev: false - github.com/theopensystemslab/planx-core/60158b2: - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/60158b2} + github.com/theopensystemslab/planx-core/ed7c187: + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/ed7c187} name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true diff --git a/e2e/tests/ui-driven/package.json b/e2e/tests/ui-driven/package.json index 920b91f9c2..8838e01c2e 100644 --- a/e2e/tests/ui-driven/package.json +++ b/e2e/tests/ui-driven/package.json @@ -8,7 +8,7 @@ "postinstall": "./install-dependencies.sh" }, "dependencies": { - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#60158b2", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#ed7c187", "axios": "^1.6.8", "dotenv": "^16.3.1", "eslint": "^8.56.0", diff --git a/e2e/tests/ui-driven/pnpm-lock.yaml b/e2e/tests/ui-driven/pnpm-lock.yaml index 6a74c3ec0b..f055a392b8 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#60158b2 - version: github.com/theopensystemslab/planx-core/60158b2 + specifier: git+https://github.com/theopensystemslab/planx-core#ed7c187 + version: github.com/theopensystemslab/planx-core/ed7c187 axios: specifier: ^1.6.8 version: 1.6.8 @@ -2780,8 +2780,8 @@ packages: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} dev: false - github.com/theopensystemslab/planx-core/60158b2: - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/60158b2} + github.com/theopensystemslab/planx-core/ed7c187: + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/ed7c187} name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true diff --git a/editor.planx.uk/package.json b/editor.planx.uk/package.json index bc7dc36125..3fe13db76c 100644 --- a/editor.planx.uk/package.json +++ b/editor.planx.uk/package.json @@ -13,7 +13,7 @@ "@mui/material": "^5.15.2", "@mui/utils": "^5.15.2", "@opensystemslab/map": "^0.8.3", - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#60158b2", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#ed7c187", "@tiptap/core": "^2.4.0", "@tiptap/extension-bold": "^2.0.3", "@tiptap/extension-bubble-menu": "^2.1.13", diff --git a/editor.planx.uk/pnpm-lock.yaml b/editor.planx.uk/pnpm-lock.yaml index dcd836ee57..a9111c6554 100644 --- a/editor.planx.uk/pnpm-lock.yaml +++ b/editor.planx.uk/pnpm-lock.yaml @@ -42,8 +42,8 @@ dependencies: specifier: ^0.8.3 version: 0.8.3 '@opensystemslab/planx-core': - specifier: git+https://github.com/theopensystemslab/planx-core#60158b2 - version: github.com/theopensystemslab/planx-core/60158b2(@types/react@18.2.45) + specifier: git+https://github.com/theopensystemslab/planx-core#ed7c187 + version: github.com/theopensystemslab/planx-core/ed7c187(@types/react@18.2.45) '@tiptap/core': specifier: ^2.4.0 version: 2.4.0(@tiptap/pm@2.0.3) @@ -13022,6 +13022,7 @@ packages: /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.2.1 jackspeak: 3.4.0 @@ -14758,6 +14759,7 @@ packages: /js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true dependencies: argparse: 1.0.10 esprima: 4.0.1 @@ -21521,9 +21523,9 @@ packages: use-sync-external-store: 1.2.0(react@18.2.0) dev: false - github.com/theopensystemslab/planx-core/60158b2(@types/react@18.2.45): - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/60158b2} - id: github.com/theopensystemslab/planx-core/60158b2 + github.com/theopensystemslab/planx-core/ed7c187(@types/react@18.2.45): + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/ed7c187} + id: github.com/theopensystemslab/planx-core/ed7c187 name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Sidebar/PublishDialog.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Sidebar/PublishDialog.tsx index cb33d3ba3c..446cfafedd 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Sidebar/PublishDialog.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Sidebar/PublishDialog.tsx @@ -18,6 +18,7 @@ import { useAsync } from "react-use"; import Caret from "ui/icons/Caret"; import { useStore } from "../../lib/store"; +import Warning from "@mui/icons-material/Warning"; export interface AlteredNode { id: string; @@ -231,7 +232,7 @@ export const AlteredNodesSummaryContent = (props: { export interface ValidationCheck { title: string; - status: "Pass" | "Fail" | "Not applicable"; + status: "Pass" | "Fail" | "Warn" | "Not applicable"; message: string; } @@ -243,6 +244,7 @@ export const ValidationChecks = (props: { const Icon: Record = { Pass: , Fail: , + Warn: , "Not applicable": , }; From c885843abf04ea44ecb50f6395eb8e2a176defb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Mon, 8 Jul 2024 12:13:05 +0100 Subject: [PATCH 110/150] chore: Update all turf packages to v7 (#3383) --- editor.planx.uk/package.json | 5 +- editor.planx.uk/pnpm-lock.yaml | 82 +++++++++++-------- .../components/DrawBoundary/Public/index.tsx | 3 +- .../components/FindProperty/Public/index.tsx | 2 +- .../components/PropertyInformation/Public.tsx | 3 +- 5 files changed, 53 insertions(+), 42 deletions(-) diff --git a/editor.planx.uk/package.json b/editor.planx.uk/package.json index 3fe13db76c..5243f30980 100644 --- a/editor.planx.uk/package.json +++ b/editor.planx.uk/package.json @@ -36,8 +36,8 @@ "@tiptap/react": "^2.4.0", "@tiptap/suggestion": "^2.0.3", "@turf/area": "^7.0.0", - "@turf/buffer": "^6.5.0", - "@turf/helpers": "^6.5.0", + "@turf/buffer": "^7.0.0", + "@turf/helpers": "^7.0.0", "array-move": "^4.0.0", "axios": "^1.6.8", "bowser": "^2.11.0", @@ -115,6 +115,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", diff --git a/editor.planx.uk/pnpm-lock.yaml b/editor.planx.uk/pnpm-lock.yaml index a9111c6554..2aef8f5a44 100644 --- a/editor.planx.uk/pnpm-lock.yaml +++ b/editor.planx.uk/pnpm-lock.yaml @@ -111,11 +111,11 @@ dependencies: 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 @@ -343,6 +343,9 @@ devDependencies: '@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 @@ -8052,36 +8055,39 @@ packages: tslib: 2.6.3 dev: false - /@turf/bbox@6.5.0: - resolution: {integrity: sha512-RBbLaao5hXTYyyg577iuMtDB8ehxMlUqHEJiMs8jT1GHkFhr6sYre3lmLsPeYEi/ZKj5TP5tt7fkzNdJ4GIVyw==} + /@turf/bbox@7.0.0: + resolution: {integrity: sha512-IyXG5HAsn6IZLdAtQo7aWYccjU5WsV+uzIzhGaXrh/qTVylSYmRiWgLdiekHZVED9nv9r7D/EJUMOT4zyA6POA==} 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/buffer@6.5.0: - resolution: {integrity: sha512-qeX4N6+PPWbKqp1AVkBVWFerGjMYMUyencwfnkCesoznU6qvfugFHNAngNqIBVnJjZ5n8IFyOf+akcxnrt9sNg==} + /@turf/buffer@7.0.0: + resolution: {integrity: sha512-viw3XjTtYVtkq5DkRDBQjXoi5QeEMhe4JHWXIfHMHs4o5F9B+lZ8+TtXWo18X5aAXknv6ib1z2syoaQdBpb5Xw==} 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/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: @@ -8101,10 +8107,10 @@ packages: '@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/meta@7.0.0: @@ -8113,12 +8119,13 @@ packages: '@turf/helpers': 7.0.0 dev: false - /@turf/projection@6.5.0: - resolution: {integrity: sha512-/Pgh9mDvQWWu8HRxqpM+tKz8OzgauV+DiOcr3FCjD6ubDnrrmMJlsf6fFJmggw93mtVPrZRL6yyi9aYCQBOIvg==} + /@turf/projection@7.0.0: + resolution: {integrity: sha512-EoPbZPZSDv0AJMfYhqnS455CVMYwPU78kHyQHeOnMR1Tc5z+TiImvyq55umhfecgpETzuDsjFkmeQ2phDKTmbA==} dependencies: - '@turf/clone': 6.5.0 - '@turf/helpers': 6.5.0 - '@turf/meta': 6.5.0 + '@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: @@ -8281,7 +8288,6 @@ packages: /@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==} @@ -15029,6 +15035,11 @@ packages: 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'} @@ -15309,6 +15320,7 @@ packages: /loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true dependencies: js-tokens: 4.0.0 @@ -18723,6 +18735,7 @@ packages: /resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true dependencies: is-core-module: 2.13.1 path-parse: 1.0.7 @@ -18730,6 +18743,7 @@ packages: /resolve@2.0.0-next.5: resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + hasBin: true dependencies: is-core-module: 2.13.1 path-parse: 1.0.7 @@ -20303,10 +20317,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'} 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/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/PropertyInformation/Public.tsx b/editor.planx.uk/src/@planx/components/PropertyInformation/Public.tsx index 70454b7784..3bdaa78a0c 100644 --- a/editor.planx.uk/src/@planx/components/PropertyInformation/Public.tsx +++ b/editor.planx.uk/src/@planx/components/PropertyInformation/Public.tsx @@ -1,14 +1,13 @@ import { useQuery } from "@apollo/client"; import Box from "@mui/material/Box"; import Link from "@mui/material/Link"; -import { styled } from "@mui/material/styles"; import Typography from "@mui/material/Typography"; import { visuallyHidden } from "@mui/utils"; import Card from "@planx/components/shared/Preview/Card"; import CardHeader from "@planx/components/shared/Preview/CardHeader"; import { SummaryListTable } from "@planx/components/shared/Preview/SummaryList"; import type { PublicProps } from "@planx/components/ui"; -import { Feature } from "@turf/helpers"; +import { Feature } from "geojson"; import { publicClient } from "lib/graphql"; import find from "lodash/find"; import { useAnalyticsTracking } from "pages/FlowEditor/lib/analytics/provider"; From 9413a56c354a2b122981690c3cd2aca0b02445e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Mon, 8 Jul 2024 12:20:00 +0100 Subject: [PATCH 111/150] chore: Bump `planx-core` (#3382) --- api.planx.uk/package.json | 2 +- api.planx.uk/pnpm-lock.yaml | 14 +++++++------- e2e/tests/api-driven/package.json | 2 +- e2e/tests/api-driven/pnpm-lock.yaml | 14 +++++++------- e2e/tests/ui-driven/package.json | 2 +- e2e/tests/ui-driven/pnpm-lock.yaml | 16 +++++++++------- editor.planx.uk/package.json | 2 +- editor.planx.uk/pnpm-lock.yaml | 17 +++++++++++------ 8 files changed, 38 insertions(+), 31 deletions(-) diff --git a/api.planx.uk/package.json b/api.planx.uk/package.json index 3ae697df3f..9e1d308b8a 100644 --- a/api.planx.uk/package.json +++ b/api.planx.uk/package.json @@ -5,7 +5,7 @@ "packageManager": "pnpm@8.6.6", "dependencies": { "@airbrake/node": "^2.1.8", - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#ed7c187", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#b43b268", "@types/isomorphic-fetch": "^0.0.36", "adm-zip": "^0.5.10", "aws-sdk": "^2.1467.0", diff --git a/api.planx.uk/pnpm-lock.yaml b/api.planx.uk/pnpm-lock.yaml index c28fa8d50e..c1b21ac157 100644 --- a/api.planx.uk/pnpm-lock.yaml +++ b/api.planx.uk/pnpm-lock.yaml @@ -14,8 +14,8 @@ dependencies: specifier: ^2.1.8 version: 2.1.8 '@opensystemslab/planx-core': - specifier: git+https://github.com/theopensystemslab/planx-core#ed7c187 - version: github.com/theopensystemslab/planx-core/ed7c187 + specifier: git+https://github.com/theopensystemslab/planx-core#b43b268 + version: github.com/theopensystemslab/planx-core/b43b268 '@types/isomorphic-fetch': specifier: ^0.0.36 version: 0.0.36 @@ -7777,8 +7777,8 @@ packages: engines: {node: '>=16'} dev: false - /type-fest@4.20.1: - resolution: {integrity: sha512-R6wDsVsoS9xYOpy8vgeBlqpdOyzJ12HNfQhC/aAKWM3YoCV9TtunJzh/QpkMgeDhkoynDcw5f1y+qF9yc/HHyg==} + /type-fest@4.21.0: + resolution: {integrity: sha512-ADn2w7hVPcK6w1I0uWnM//y1rLXZhzB9mr0a3OirzclKF1Wp6VzevUmzz/NRAWunOT6E8HrnpGY7xOfc6K57fA==} engines: {node: '>=16'} dev: false @@ -8203,8 +8203,8 @@ packages: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} dev: false - github.com/theopensystemslab/planx-core/ed7c187: - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/ed7c187} + github.com/theopensystemslab/planx-core/b43b268: + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/b43b268} name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true @@ -8229,7 +8229,7 @@ packages: prettier: 3.3.2 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - type-fest: 4.20.1 + type-fest: 4.21.0 uuid: 10.0.0 zod: 3.23.8 transitivePeerDependencies: diff --git a/e2e/tests/api-driven/package.json b/e2e/tests/api-driven/package.json index f0542e3572..f59a16d87b 100644 --- a/e2e/tests/api-driven/package.json +++ b/e2e/tests/api-driven/package.json @@ -7,7 +7,7 @@ "packageManager": "pnpm@8.6.6", "dependencies": { "@cucumber/cucumber": "^9.3.0", - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#ed7c187", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#b43b268", "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 d193c924e6..325902c9a3 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#ed7c187 - version: github.com/theopensystemslab/planx-core/ed7c187 + specifier: git+https://github.com/theopensystemslab/planx-core#b43b268 + version: github.com/theopensystemslab/planx-core/b43b268 axios: specifier: ^1.6.8 version: 1.6.8 @@ -2852,8 +2852,8 @@ packages: engines: {node: '>=10'} dev: false - /type-fest@4.20.1: - resolution: {integrity: sha512-R6wDsVsoS9xYOpy8vgeBlqpdOyzJ12HNfQhC/aAKWM3YoCV9TtunJzh/QpkMgeDhkoynDcw5f1y+qF9yc/HHyg==} + /type-fest@4.21.0: + resolution: {integrity: sha512-ADn2w7hVPcK6w1I0uWnM//y1rLXZhzB9mr0a3OirzclKF1Wp6VzevUmzz/NRAWunOT6E8HrnpGY7xOfc6K57fA==} engines: {node: '>=16'} dev: false @@ -3053,8 +3053,8 @@ packages: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} dev: false - github.com/theopensystemslab/planx-core/ed7c187: - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/ed7c187} + github.com/theopensystemslab/planx-core/b43b268: + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/b43b268} name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true @@ -3079,7 +3079,7 @@ packages: prettier: 3.3.2 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - type-fest: 4.20.1 + type-fest: 4.21.0 uuid: 10.0.0 zod: 3.23.8 transitivePeerDependencies: diff --git a/e2e/tests/ui-driven/package.json b/e2e/tests/ui-driven/package.json index 8838e01c2e..59e49915dd 100644 --- a/e2e/tests/ui-driven/package.json +++ b/e2e/tests/ui-driven/package.json @@ -8,7 +8,7 @@ "postinstall": "./install-dependencies.sh" }, "dependencies": { - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#ed7c187", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#b43b268", "axios": "^1.6.8", "dotenv": "^16.3.1", "eslint": "^8.56.0", diff --git a/e2e/tests/ui-driven/pnpm-lock.yaml b/e2e/tests/ui-driven/pnpm-lock.yaml index f055a392b8..a8b7649791 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#ed7c187 - version: github.com/theopensystemslab/planx-core/ed7c187 + specifier: git+https://github.com/theopensystemslab/planx-core#b43b268 + version: github.com/theopensystemslab/planx-core/b43b268 axios: specifier: ^1.6.8 version: 1.6.8 @@ -1588,6 +1588,7 @@ 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 @@ -1684,6 +1685,7 @@ 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 @@ -2622,8 +2624,8 @@ packages: engines: {node: '>=12.20'} dev: false - /type-fest@4.20.1: - resolution: {integrity: sha512-R6wDsVsoS9xYOpy8vgeBlqpdOyzJ12HNfQhC/aAKWM3YoCV9TtunJzh/QpkMgeDhkoynDcw5f1y+qF9yc/HHyg==} + /type-fest@4.21.0: + resolution: {integrity: sha512-ADn2w7hVPcK6w1I0uWnM//y1rLXZhzB9mr0a3OirzclKF1Wp6VzevUmzz/NRAWunOT6E8HrnpGY7xOfc6K57fA==} engines: {node: '>=16'} dev: false @@ -2780,8 +2782,8 @@ packages: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} dev: false - github.com/theopensystemslab/planx-core/ed7c187: - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/ed7c187} + github.com/theopensystemslab/planx-core/b43b268: + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/b43b268} name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true @@ -2806,7 +2808,7 @@ packages: prettier: 3.3.2 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - type-fest: 4.20.1 + type-fest: 4.21.0 uuid: 10.0.0 zod: 3.23.8 transitivePeerDependencies: diff --git a/editor.planx.uk/package.json b/editor.planx.uk/package.json index 5243f30980..3cf94a79fc 100644 --- a/editor.planx.uk/package.json +++ b/editor.planx.uk/package.json @@ -13,7 +13,7 @@ "@mui/material": "^5.15.2", "@mui/utils": "^5.15.2", "@opensystemslab/map": "^0.8.3", - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#ed7c187", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#b43b268", "@tiptap/core": "^2.4.0", "@tiptap/extension-bold": "^2.0.3", "@tiptap/extension-bubble-menu": "^2.1.13", diff --git a/editor.planx.uk/pnpm-lock.yaml b/editor.planx.uk/pnpm-lock.yaml index 2aef8f5a44..a8064a9bf5 100644 --- a/editor.planx.uk/pnpm-lock.yaml +++ b/editor.planx.uk/pnpm-lock.yaml @@ -42,8 +42,8 @@ dependencies: specifier: ^0.8.3 version: 0.8.3 '@opensystemslab/planx-core': - specifier: git+https://github.com/theopensystemslab/planx-core#ed7c187 - version: github.com/theopensystemslab/planx-core/ed7c187(@types/react@18.2.45) + specifier: git+https://github.com/theopensystemslab/planx-core#b43b268 + version: github.com/theopensystemslab/planx-core/b43b268(@types/react@18.2.45) '@tiptap/core': specifier: ^2.4.0 version: 2.4.0(@tiptap/pm@2.0.3) @@ -20370,6 +20370,11 @@ packages: engines: {node: '>=16'} dev: false + /type-fest@4.21.0: + resolution: {integrity: sha512-ADn2w7hVPcK6w1I0uWnM//y1rLXZhzB9mr0a3OirzclKF1Wp6VzevUmzz/NRAWunOT6E8HrnpGY7xOfc6K57fA==} + engines: {node: '>=16'} + dev: false + /type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} @@ -21533,9 +21538,9 @@ packages: use-sync-external-store: 1.2.0(react@18.2.0) dev: false - github.com/theopensystemslab/planx-core/ed7c187(@types/react@18.2.45): - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/ed7c187} - id: github.com/theopensystemslab/planx-core/ed7c187 + github.com/theopensystemslab/planx-core/b43b268(@types/react@18.2.45): + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/b43b268} + id: github.com/theopensystemslab/planx-core/b43b268 name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true @@ -21560,7 +21565,7 @@ packages: prettier: 3.3.2 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - type-fest: 4.20.1 + type-fest: 4.21.0 uuid: 10.0.0 zod: 3.23.8 transitivePeerDependencies: From f0dc85b789cba3e20c2771f33f6142950383f298 Mon Sep 17 00:00:00 2001 From: augustlindemer <118665588+augustlindemer@users.noreply.github.com> Date: Mon, 8 Jul 2024 14:39:17 +0100 Subject: [PATCH 112/150] feat: Add material details to list component and schema (#3384) --- .../src/@planx/components/List/Editor.tsx | 3 + .../components/List/schemas/Materials.ts | 63 +++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 editor.planx.uk/src/@planx/components/List/schemas/Materials.ts diff --git a/editor.planx.uk/src/@planx/components/List/Editor.tsx b/editor.planx.uk/src/@planx/components/List/Editor.tsx index bfa3e99ae8..53d1f15fad 100644 --- a/editor.planx.uk/src/@planx/components/List/Editor.tsx +++ b/editor.planx.uk/src/@planx/components/List/Editor.tsx @@ -14,6 +14,7 @@ import InputRowLabel from "ui/shared/InputRowLabel"; import { EditorProps, ICONS, InternalNotes, MoreInformation } from "../ui"; import { List, parseContent } from "./model"; import { ProposedAdvertisements } from "./schemas/Adverts"; +import { MaterialDetails } from "./schemas/Materials"; import { NonResidentialFloorspace } from "./schemas/Floorspace"; import { BuildingDetailsGLA } from "./schemas/GLA/BuildingDetails"; import { CommunalSpaceGLA } from "./schemas/GLA/CommunalSpace"; @@ -28,6 +29,7 @@ import { ResidentialUnitsGLARebuilt } from "./schemas/ResidentialUnits/GLA/Rebui import { ResidentialUnitsGLARemoved } from "./schemas/ResidentialUnits/GLA/Removed"; import { ResidentialUnitsProposed } from "./schemas/ResidentialUnits/Proposed"; + type Props = EditorProps; export const SCHEMAS = [ @@ -55,6 +57,7 @@ export const SCHEMAS = [ 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 }, 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..be09469488 --- /dev/null +++ b/editor.planx.uk/src/@planx/components/List/schemas/Materials.ts @@ -0,0 +1,63 @@ +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; From 7abb697ce94555478b6450e9970b75666e777cca Mon Sep 17 00:00:00 2001 From: augustlindemer <118665588+augustlindemer@users.noreply.github.com> Date: Mon, 8 Jul 2024 16:43:19 +0100 Subject: [PATCH 113/150] feat: Change wording in GLA new residential units schema and remove old incorrect schemas (#3387) --- .../src/@planx/components/List/Editor.tsx | 12 +- .../schemas/ResidentialUnits/GLA/Gained.ts | 192 ------------------ .../List/schemas/ResidentialUnits/GLA/Lost.ts | 164 --------------- .../List/schemas/ResidentialUnits/GLA/New.ts | 2 +- 4 files changed, 6 insertions(+), 364 deletions(-) delete mode 100644 editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/GLA/Gained.ts delete mode 100644 editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/GLA/Lost.ts diff --git a/editor.planx.uk/src/@planx/components/List/Editor.tsx b/editor.planx.uk/src/@planx/components/List/Editor.tsx index 53d1f15fad..0066f539d7 100644 --- a/editor.planx.uk/src/@planx/components/List/Editor.tsx +++ b/editor.planx.uk/src/@planx/components/List/Editor.tsx @@ -22,11 +22,10 @@ import { ExistingAndProposedUsesGLA } from "./schemas/GLA/ExistingAndProposedUse import { OpenSpaceGLA } from "./schemas/GLA/OpenSpace"; import { ProtectedSpaceGLA } from "./schemas/GLA/ProtectedSpace"; import { ResidentialUnitsExisting } from "./schemas/ResidentialUnits/Existing"; -import { ResidentialUnitsGLAGained } from "./schemas/ResidentialUnits/GLA/Gained"; -import { ResidentialUnitsGLALost } from "./schemas/ResidentialUnits/GLA/Lost"; 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"; @@ -35,11 +34,6 @@ type Props = EditorProps; export const SCHEMAS = [ { name: "Residential units - Existing", schema: ResidentialUnitsExisting }, { name: "Residential units - Proposed", schema: ResidentialUnitsProposed }, - { - name: "Residential units (GLA) - Gained", - schema: ResidentialUnitsGLAGained, - }, - { name: "Residential units (GLA) - Lost", schema: ResidentialUnitsGLALost }, { name: "Residential units (GLA) - New", schema: ResidentialUnitsGLANew, @@ -52,6 +46,10 @@ export const SCHEMAS = [ 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)", diff --git a/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/GLA/Gained.ts b/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/GLA/Gained.ts deleted file mode 100644 index f403091c5c..0000000000 --- a/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/GLA/Gained.ts +++ /dev/null @@ -1,192 +0,0 @@ -import { Schema } from "@planx/components/List/model"; - -export const ResidentialUnitsGLAGained: Schema = { - type: "Gained 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: "conversion", data: { text: "Conversion", val: "conversion" } }, - { - id: "changeOfUse", - data: { text: "Change of use", val: "changeOfUse" }, - }, - { id: "extension", data: { text: "Extension", val: "extension" } }, - { id: "notKnown", data: { text: "Not known", val: "notKnown" } }, - ], - }, - }, - { - 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" } }, - { - id: "AR", - data: { text: "Affordable rent (not at LAR benchmark rents)" }, - }, - { id: "SR", data: { text: "Social rent" } }, - { id: "LRR", data: { text: "London Living Rent" } }, - { id: "sharedEquity", data: { text: "Shared equity" } }, - { id: "LSO", data: { text: "London Shared Ownership" } }, - { id: "DMS", data: { text: "Discount market sale" } }, - { id: "DMR", data: { text: "Discount market rent" } }, - { - id: "DMRLLR", - data: { - text: "Discount market rent (charged at London Living Rents)", - }, - }, - { id: "marketForRent", data: { text: "Market for rent" } }, - { id: "SH", data: { text: "Starter homes" } }, - { - id: "selfCustomBuild", - data: { text: "Self-build and custom build" }, - }, - { id: "marketForSale", data: { text: "Market for sale" } }, - { id: "other", data: { text: "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" } }, - { id: "semiDetached", data: { text: "Semi detached home" } }, - { id: "detached", data: { text: "Detached home" } }, - { id: "flat", data: { text: "Flat/apartment or maisonette" } }, - { id: "LW", data: { text: "Live/work unit" } }, - { id: "cluster", data: { text: "Cluster flat" } }, - { id: "studio", data: { text: "Studio or bedsit" } }, - { id: "coLiving", data: { text: "Co living unit" } }, - { id: "hostel", data: { text: "Hostel room" } }, - { id: "HMO", data: { text: "HMO" } }, - { id: "student", data: { text: "Student accommodation" } }, - { id: "other", data: { text: "Other" } }, - ], - }, - }, - { - type: "question", - data: { - title: "What best describes the provider of this unit?", - fn: "provider", - options: [ - { id: "private", data: { text: "Private" } }, - { id: "privateRented", data: { text: "Private rented sector" } }, - { id: "HA", data: { text: "Housing association" } }, - { id: "LA", data: { text: "Local authority" } }, - { id: "publicAuthority", data: { text: "Other public authority" } }, - { id: "councilDelivery", data: { text: "Council delivery company" } }, - { - id: "councilBuildToRent", - data: { text: "Council delivered build to rent" }, - }, - { - id: "affordableHousing", - data: { text: "Other affordable housing provider" }, - }, - { id: "selfBuild", data: { text: "Self-build" } }, - ], - }, - }, - { - type: "question", - data: { - title: "Is this unit built on garden land?", - fn: "garden", - options: [ - { id: "true", data: { text: "Yes" } }, - { id: "false", data: { text: "No" } }, - ], - }, - }, - { - 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" } }, - { id: "false", data: { text: "No" } }, - ], - }, - }, - { - type: "question", - data: { - title: "Is this unit specifically designed for older people?", - fn: "olderPersons", - options: [ - { id: "true", data: { text: "Yes" } }, - { id: "false", data: { text: "No" } }, - ], - }, - }, - { - 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/Lost.ts b/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/GLA/Lost.ts deleted file mode 100644 index bed690a2e7..0000000000 --- a/editor.planx.uk/src/@planx/components/List/schemas/ResidentialUnits/GLA/Lost.ts +++ /dev/null @@ -1,164 +0,0 @@ -import { Schema } from "@planx/components/List/model"; - -export const ResidentialUnitsGLALost: Schema = { - type: "Lost or replaced 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" } }, - { - id: "AR", - data: { text: "Affordable rent (not at LAR benchmark rents)" }, - }, - { id: "SR", data: { text: "Social rent" } }, - { id: "LRR", data: { text: "London Living Rent" } }, - { id: "sharedEquity", data: { text: "Shared equity" } }, - { id: "LSO", data: { text: "London Shared Ownership" } }, - { id: "DMS", data: { text: "Discount market sale" } }, - { id: "DMR", data: { text: "Discount market rent" } }, - { - id: "DMRLLR", - data: { - text: "Discount market rent (charged at London Living Rents)", - }, - }, - { id: "marketForRent", data: { text: "Market for rent" } }, - { id: "SH", data: { text: "Starter homes" } }, - { - id: "selfCustomBuild", - data: { text: "Self-build and custom build" }, - }, - { id: "marketForSale", data: { text: "Market for sale" } }, - { id: "other", data: { text: "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" } }, - { id: "semiDetached", data: { text: "Semi detached home" } }, - { id: "detached", data: { text: "Detached home" } }, - { id: "flat", data: { text: "Flat/apartment or maisonette" } }, - { id: "LW", data: { text: "Live/work unit" } }, - { id: "cluster", data: { text: "Cluster flat" } }, - { id: "studio", data: { text: "Studio or bedsit" } }, - { id: "coLiving", data: { text: "Co living unit" } }, - { id: "hostel", data: { text: "Hostel room" } }, - { id: "HMO", data: { text: "HMO" } }, - { id: "student", data: { text: "Student accommodation" } }, - { id: "other", data: { text: "Other" } }, - ], - }, - }, - { - type: "question", - data: { - title: "What best describes the provider of this unit?", - fn: "provider", - options: [ - { id: "private", data: { text: "Private" } }, - { id: "privateRented", data: { text: "Private rented sector" } }, - { id: "HA", data: { text: "Housing association" } }, - { id: "LA", data: { text: "Local authority" } }, - { id: "publicAuthority", data: { text: "Other public authority" } }, - { id: "councilDelivery", data: { text: "Council delivery company" } }, - { - id: "councilBuildToRent", - data: { text: "Council delivered build to rent" }, - }, - { - id: "affordableHousing", - data: { text: "Other affordable housing provider" }, - }, - { id: "selfBuild", data: { text: "Self-build" } }, - ], - }, - }, - { - 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" } }, - { id: "false", data: { text: "No" } }, - ], - }, - }, - { - type: "question", - data: { - title: "Is this unit specifically designed for older people?", - fn: "olderPersons", - options: [ - { id: "true", data: { text: "Yes" } }, - { id: "false", data: { text: "No" } }, - ], - }, - }, - { - 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 index fe8f9a2a78..1c1e5d203d 100644 --- 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 @@ -1,7 +1,7 @@ import { Schema } from "@planx/components/List/model"; export const ResidentialUnitsGLANew: Schema = { - type: "New built residential unit", + type: "New residential unit", fields: [ { type: "question", From e4359d751d6cef87c68328cf10338bdeec0cd100 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Mon, 8 Jul 2024 16:48:20 +0100 Subject: [PATCH 114/150] chore: Setup Epsom and Ewell subdomain (take 2) (#3388) --- .gitignore | 1 + infrastructure/application/Pulumi.production.yaml | 6 ++++++ infrastructure/application/index.ts | 4 ++++ 3 files changed, 11 insertions(+) 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/infrastructure/application/Pulumi.production.yaml b/infrastructure/application/Pulumi.production.yaml index 199fd0a32d..3d52f8b922 100644 --- a/infrastructure/application/Pulumi.production.yaml +++ b/infrastructure/application/Pulumi.production.yaml @@ -57,6 +57,12 @@ config: secure: AAABADIUwFlpmPKfH8fQoNkOe9z8xCwnQgCrV1jxoPTtgfpL9GmImtNx0AnL6HUgkndlUgjCtArhChDN2rdepbgvBV2IZmZ3vds8LvRnBwwLKdxWvNwC6LBQnmWo4oac+VU1XoEOrs+kIDnPqFpkCwyxwySw3FzEmRzUoNLUlGun+ZKTtgtPgYcBNL4P9A73WAvzNlSX2mmRB7lVcEKqSB8SZ3/kEgGbgQ9PyDmHON78RBkaHBT5i0wHP9O1fulEoJ/w9D1S237JagtKzqeb81KUcqWTYLHUwuWKM2pmY4LpVKWOJM8d9PI7gYNQB4YKj/y1mSViK7PuSdCpmPchHER2WN+Oil7z/T47DQevp46Gthv5Von7ZEtoo1kw7aYsRxcUSl+pvVuOMzgP3bw3GS3YKksBsxA8WOlm+bKbyXoHVm/nrFuoSeTmBFUz+sb4VrWDDlF8c+XIe7SRjekk0Ld6Xr8qMPcRjOxj5wtTTPnsaetBmb9FERCa+IW91e37rMUitctX1QqF05SaajJ9oBwJoWQXxIMJ05OltWV1bLW1qdWAcqwFQMXsivo1/xFSjeeUmlld0ba3fjQcdMIvuXOLLVyYQpFPyxKMV1DT4Z+NSRkbBzOP9DtIB2pVp98QeKs3Fovd7mKS6ThGGMdYsub3o3TKg+pAh/KCffe2+MHRyP3Cwz7M7qJ/33puo4HGirTIJdV2nMRBroFyWU5mO8PFBdBgMeSP+zefu0QYpv1ifTv39Xoao4L0TXnj+mT2cO9oZknrH/ymyqTsLHj3Mrn200hZLhp1UhbATzEmHw+6KDMdgpADJRqsDIhtr6MOMa9Q9A1q2Kbk57XSxhP43xA8bZN/BIC+swTUCehFmFD5YeJtjYOD1TnEJPgYnsDtyheenblxfwVhmFT7kxMs8zV6QPLukKKBhkmk7OnyjjMxsJC7/B3SzajDpHqstjZkK+jklE+gQrJxxukVOwiJsBoXzya4aIBeRDEcQRxBK6nbjQOFAUoa5eMID5LAj33tXgXdyM8pdoNM5vJUIXJc6IhWaPUlDPTEwAdehtC+wNEqzeloNQxzCaZ/XsfMTrNcUpHrJcF+xFEcWA57OfiSDyNd3VyMFUQV87NJF/ifg1jhFNl4KxI/md5oUZOX97F314C3YEwsbQy9/2b/WbmnuMhgPpT4QYLDnYqn7Y9BbsBD2eR1U6NvLxJy8H83nCfEfUvRvJ1cmV5IiXnHaF8HC3/ThNjMM7CQaxWLWM4fkDQApEmUU34yL068daNmy3mEbDa739X/zCPNh9295ruyFT74n8Iw4XWCMo/3v0vNVDCRyV5pI4vaEj1GOQSNMLa8CHjXL1T8RKl8b93GXssVRSbDf5WoBcAt0v35v0i5Lq5jTVZjUtlftPVelhI/CLrdP5+5KFaj5M3PX6SaPSO6DbzFjLeCKDu0+MhITp/2iFR5zP1qFHb0fTnIhdKUHGSb88OKUZ8B3eRQRxJrauYcAu0ezx0fOtlEpaZ2E/yUhB4KxXEBCHXkKg1fvoziX/fgsdZGXGdjDzaYhtWxSGsHjQfkGSgaCZ5JY0bwB/Gp6obQlfsJZrFKPCMo+qeRMRv0okEFtlO2Vp7WlH2NjaMZffaXZ2TRsFvMfT2XFNCXF+3pAM9RU8gmN1j/ZULCFsmFJbgJprjNK4KvCjMZmFLUzm7G6+ul6recIcUufwKRm6kmJnJgJIMvz8mbsTU/NDAMLLak4MeJxCzRVXWbXBpv2J6ol15Q89D4eNgdSQKFBjMz7/SnTG06k+kCT1y24+0xAJU8x3BQmpN8ExFnQBzbCyaXkSLPxkt8Y9CJRSx+nIo35sTcVNsu9yw1KNH4+X2qAads55wGFBNy6ucZ2ngI2pnFGfEGNbXv2ZnjB2p8z+UiIHLnBk7Y18Blqvin/guZ4jimpEL0Tuq7Voinrz9Wn4/fwTj0UcMan7UqIq4x4p/C8QiWsYQq/WXlXJqE3XQ0cTsP3cIB1cEFBGGvJhoebBDECyGFlHxW/hTn2RdLApRVF5TAIo02nHcpji0XAT3ctlEKF/4KuFb7RtvNo/OpXDWb44JCt400Wuta1y1I4hDjCtA60pKIA3sBRmkGv3asxzgWYlftCyGLihZNwsPIA/WvGZTSeIY+9I+Ns69YxYxQYHx6Yk/sH0YgkTIau67n4SpbTTQHmNjdyhHapIeutQ9tpmPS06lrqEP7vuYryGlfK/a96MsHPUHJH015zxFDEw5RxeYvaVPOVAB2zA8TMkhGUw8PmAJPpCrT0oUhIFgVt7H56Lj3A/EKlNnFYQbrL6eUB6xl4I1eeUOsDGmgZxDioKQY81wyEjpuI8nSgDlJXg7j472Ol1Oj2AQBIMxa2RprpUwbZ0+6O/+w1jq4Ywy766PDSFj5HGQAxO2EfG+x+Tp9lPS+lhB/O6k1xZ2c8vT8UQjCZI4CCQMLgZcjgy4m+Bj01gJWgyLcLhAF2gfp9mgaoGkHWN24Gu4rykGwr7EJvmffA0U5+RRlkGkSvgjTqnh577o2gw5jyZvGCUUcxb89BAOg63JoZyeZVxpr+mBiASDhafJ1OYo1s1yUUP6dujlpGs1vWWkLeY7kx4LHITrMJw3N+YBGV4gKyRmAzqqNgjsPBAZuq6vW+I6US7Ohdrpzkv1NzXFaLK3o8wU9lbHfC6D/CiB6w6ypdGxWZ+PJy8NHYUwFdfM8nLyd7XjUxcOpdO4y/TS/9r4+FXCnoqIsEiBNXatQvfYdbNmbEGIILgXgBBI7BPZ3A8+U98yaUzgMzXBhOi5Vqn5QA+Yeb9yZdqgGgOJqblm9KgwMXQxwwCfQGTri1hTlP6ZemZNJTgkZph3UhS48MfMDHqoDstYE8gZeALSgDDB+H0dvkCBKT6AcIRejulORkBevz8ZFtQm5xws7EPcscP+1/KxuXzHfsYuf1CLrOIf7K8ZzofksqDIuu8XaDwEfGP9FVOjaohS7kUtyJmT6M2B7HM/lPLopns+CD1nkSPNPIvA9XZHNAdfL7887+1dSMcE1t6m1Rtkee9K8JrREHuLoWZzUHMjo18gBYzX3JJQSykKfy5ZTcqBjfp+j8EjbCV9x8/VmMfjZ6TApf2TDhGxihLBkBKFnSSymCfsVNPv9fBUXYPH3CYHs2VAQUOhh2XYDQasfUbYbtgnOSJfgtCdTHVHB5cYwG4ZrTIA68LJhjrc660bkzeXTAxn6P3o5bRKyqDCAOGqyv0M= application:ssl-doncaster-key: secure: AAABADjezySsYE1/SQmPh9oTRvK0m2tnDSBWUL4j1n9ahASsy7qqkJr5eL2IV9yfW1FP11Gj0XViJ2MviELA9ahrnzrcJVBTqlQKpVRYA3p5myLLmI1ntbr3Y+ZRtzVGQbEHnGr1kerLK03YsGJNLgNw1QWeO8tCHF8+FpJqyxhCPSHV16lBVTjsDxMOBc6rLC/dtI00edcq2x7N0Auhyr/sCauGis/GgYAH3On3HdUSQUvELPFFWn/4Ce8bUzIZ0tywvoy0BqQPO2cHKQyEBhb+Gavj/6Zb2MSvj5xen2/B7BZ2oxq7Xpui1X4nDGqBPf8xdXRlTrt9jIQnpvrqec/A729uXMyngpPBr3vg0wPzdqiUbvMVv13DV0XpdQr6NYf7UdKrQ28yd+37WPMRd4oLynfza3j9FJdqQG01DkLWsEOZa2qpDmg5Edj18fy3KRDe5HIrjCnAsn54H7Q00jggq1Yl31Y/Q0YHc0czDuD2/NTn7SyjBks4gM0QG9rv32U2Co+Z1rzBL94vLmBUNGLWF2IvU1eElkH56ATNR+I7uHXl+AvzsvKqGlY7+UKmna+qlSUI+86kCMb/xltD4nGgu1pHpkT6LptC0xFIPTFL5yH0ZsQ6aEUO8t9BBPRvE5AU4C5zM3Lb7iUI0jX31+Q9ZeslixE/fMBRyjDM4lakvGEVYO88PYtS1cl2JC4Ro2dL5eNySkkPIt/bu0QEPnfVrWZfTFeM9dGiDUG66iWxi/eEvLV53D7AbuhbOSD1J3VILgVmuefHwDAgoPOeUZZGKIiZgFHssn6/Owv3mCYtywtiwv517T9TrR1/RjqT0sAFp33xwwzpQr4X7RLIZUgfhg26bM6l/Tvl7+LLVmbttMWDFnjHM1EdeyDM9gBonOIuwUYIjl80RoD5ezJ9aafQcM2CdbPNsBmzlbgln98YR8Tm7QyOpxzLr3YOp5QLpZ/FGFHSNh1qvfELXU9LeFAhShlrZ3p7Nf6R4rynAl6eoDU9EMc1w8ZfBxoAtxYF41zbzDwgjwUvYmRtUWQa7foVtSTJGQx8ypZlaVP3W47Kq8jTMRkgKKkJvxgB7RErfVeL9GpRXHTZkD/i1kSM15zg4T02ijBHAb54IRK196Vf0yUR0eFP5mUXeEFdcsRMwVBaNYrQhWMmx0aiQWS6lRK+n/eDv5klGnSl9iUKdBvyjXwXVzNJYjJlZPIXYn0xKfG/zClwDxfr4K0Hg4H3lSttu/+hyyxHJi5tGctMXeVvkRj6gCINSiVv2/fEwk3IeaGyRz6o0YiPlt16q41JepwjZhA+7DtNS8WE+aoPcb5hN1lmlKFlvAj8yQ4MYEJLXdj13ZsWoXfdJAh+0W9mKk7hnNJer9954poHRtD1AFVgeIZfTFkKdmkD+SVay3BvqXjcEmWtF1VB8d2VliP33ZNo/J6VWDeKoAJ/se9x9qcu/yOke+Cijd9qZPQ09uzdxOHX+6bGvF5YWjiln8EK6RM49TAfAq9vtt1R5X4DvEQbGxkb5TLpoURKqV7DeQUmcymNJ+55zjKR58177z2LuqFquhwl9dHy65sYB8Rhmiiv/hQBdsNELSy+f0Zy8d2EWw97nPLTqUBJD5iDP0H7dis7BbHZnoHBZS9MkidJgHqlZNLFrmVK3F4YU+9juWvAK3XkTZgx0r4y72cMRwJ3GcKfumI2u7cMEbimmtsx8/qhej0PTf7bXoGaQWmboQE5D89wRACoAqpOwC0G/BJ54qYZP1q7lwU6Ku97sueznkNKE5A2dokDR+gnm3uy+mbMJI6NUOfKJCgrnoxkTgCVcIHwMGHG1u9VED1A6GBDFfO/5Wvx5BI/jihO5+vfvr49UFFAz5Xah6kjIFH/S47AnTVHfbRIH/22z7BMOJQMt4kZ3ZklyVnMfdQtIK1YPlgtN7eXgH+F3OvH7K1RDW5vUvFk64LWIlb/8EoaF+TALb8ZSx2Zv8xLfm1NjLuztvQkSot7jhRTo23XjDJfxf/e8Aaqjmlgl/CDVC62kq7Wt84BaP8r/pO4+KAAxb8plYzhzK7M1m0QOOvk2Avb80TamNeQjLX906GUpsEI61mEZAYm/NJFENpA/5Rh1HLI2lAKmyEi9bcQ1QoscoO8HIKKjb7uIj8t6bvpy8JAGlqx3Yq1S+yBYqFdPpYJEzW0DrPdDR55B6KD/HfEt0t2KpehCJk40uzfmBMyRv6MqP7uRb6O49pkBj6lN8+NUM8PUBMcT2T4IvxvID1zhyDAo7KIqS0IpMJUOactGyI= + application:ssl-epsom-and-ewell-cert: + secure: AAABAN1YNPGTbUk3OK/j7777E5fs37UbfLwG6ZWhnbNZKpki4rYk6SEw4m3bK3c5NlizygvjIEonsDavi5Np9Bcl3eRbUZCdTfJ3zKYkU+jn1RYwAUsqUxLGyZvv9XLptWb1Ykq2ewsgzmxnWF7oEndXuyuCGdn7B4V1RUmMH+s9sFVBGHWx+5v3dp3KCOHcz5mbZ7/bJIBikXFDkLIsEq6ZvviElNTiWBjQvDm7xZ9UYgmuLIUMALXHSxJFy9vFNYwnMmr8OcpUSgssX7g/cDCo39Xe7kWQRdH0lnmiPSChKSIJRsM/d9FZ1ZffUGXU4GeJmOdHNTI3q/hLDwfR7zRQWNeNHH9o22nikf2OpViviz6iVvD/Oy6SOxoH5RG5G3n7dQzHKV6bS51bV0w1PrBPD3UmL1nCK8AQlsuXf9FDXn7jEpijycQVEXQnHrCZ6WY+UrU2yJsX2gwnXAAdEGusJEPgHjYDanTgmMwRYJ+v8QV8BmykjqI/eMVOzZh7Kernd9RYu4Z3SCqarrpdLin1xIgdPXwB8wcgWj8K8lyCos/0FGSGLmFNGvvZy5J9z4hhLdIqOgUjpuZe4C5w9h/IBrkJJuVeNpzM7A0fcqcv7B53KQRgas9bH2CHT11+ymC/MY5/9IjchWIDkaksAfWAiIKAEVX9sCiEF7D8DLMkL867rhQT1w/2udvx5IambfvDZxw1NwybdiOsh1xdEfT8Rgs4t7s6FSek8xy1Ohzp7kmrqy0EqIG+8PNhn7AiaevgICqwTlHTvYKg1nzsscSSluva07Ww8Z2nOy6LDv9aJhxZI9kwVSuXZjn5WTpWN6WPHy/198J6R1SSSPMRqegvWFoN2pGELuh+TGudMFwypPkj/EwhW+60YqBY+jKL6bp3AZvFUZ35vU9LFxQXQr4yb6Irfh/G2gzP85M5JIQxEUAiLuY0VqAUlgD+XjlwRb4W90DNEx7dsRKt3+bpiFnRrXY8UGnfzay8+P4Rp0c3ObDuevU6lKGYXe7lHtmWc57qEWgYbXTgOt7ntKqZsdJ0NvGwGwBCISoYPYYTMynTmWWBWBpDBx7IBssdBdMRF0eRLdXzZDEHzg822S04DWHVQwUfYEN/24UiQ/78UaVVuYn7d0G0Xf61Cq7n95n+mEuQ75Eh7km+zPZTBlY6c3RJpYqZHv1UToFfgdBxX/yz5+1de6hXFkL6QcdXTFOiYEn/Pw6cpdpvHx0/81bCLTQOg/2YxdAgGJTv1J0Ko/sf5JkMJagDHVbOMquiwJ0UKV4Lm+vAgEtO2IQ/EM4p+syRcuVdhmklKGXLRBYHO4t7JxKSAKbyAj46AVcm5QcdVvWnVe1bBeks/y4nybJCbh/LLbyBKxCPTzd2aHa5lJ1zBEVw2YABKre+OgQW8g9VsMU05vqxj1mIVwZfCkwNIXTJn4vlwUA1h9plTW9vgTRqCBCfuuZI7uZtoeZiVpSfVO4/8bzoKlf7jGC+9MVUkVCBdWBMk3AvaaEyQ8ll71CyJJlM/EHQ3RKQNZUNnpR/uy9W+H8K7mN2ExvA+P043TshMP65H8Lq7gNsvztUVFpHQN1EoJhbh3DQ6QDMhLnqTH0BIqKJu2Jw1wHoLA0McCALbJzovCowcgQ1BEUP8cSHFG4BtUWNJEh8IM6lv+LoWNYH5LOA8+Jcd6Idb8xbLQPGHW70CHb5X5egK6dt7cbfWUl93pZMKcgy1Ar+O+k6hCycsqWVM4KX0taYHkfZzKjRVud41W2MxkUdfZN7MK2ou8qIpvpHb+1Lvnv0K7AzGyFpXwaNdY4D3yDTo8vWY7VMo+l3N2gYYkoAgRAPUL/niLfTqxnl4bnt19RmBVDgteLAd+ShIVvbuNy/GLAqw/NhaKwtxQFHeIXL6BlA125l/xK9uAz9zhazHmjG5MhdnBEs8VX5NljOOKsR1kzIE4HzBo4rIpbuIesIrUXtH2gnxhkngajjfhl8Mcbl/zg+VWkzsLw0B/uCtfEbvTxcBgvFgqmRQhxMmujorV9gDmwX6w65Rl4zA9PS2vhyzhy3v5JyoItbENF3FQTU0xermBolWpX5WAGGwBJMYbT+Nrrm908rbUF8DpLtfQ0VkieAmczIUBuLDqB7XWYRDgl1OVKZqRXnbrl1sK0GCEg0NfG+i8ow6/UP8nnwTVjKGtng3lecvSlaPZARLxAlKHyrZHf7XJRbqMwG4RdGXslrDmUboh9XQYfhWRJZNtv4gL+WGkiR3anq9dVJeOwzNM+exXYwu4bgy1Q8sWLZyIvitEotEXDZEILOdEP691KjryzY1SvquiwdXKET6gYpzmMCsU4yh/W4LZCwy92lBEXj9umEnGC191VPtCOfxWjaX7q9AVwtgJS8eDH65lMAuP+EFaiBQSitbZHjeTVhYj8cIkI75qdcGVcrKRkSI5JULYgud7CUhnb9VFSPRfJ5lUbEFQFMBKH5sZmav/gjZswcPJLo1CmEIqqwCRMVxJ0qf4QUvASQdR6q5P5oljHEmmuCBISsUunqOZeKP0xxK++K89/RWtQYNvGL7rvCVar52K+lqGeK2LuOg61Duw2juvK9MMJ6OVIQzR9erWojtn4TyXLDeqefj0DSA/+MphOeHxQxX+oPCOrwMgpeqymABSXyFASiYd2oBaCvaywqHKzJGAKM+DgIJKtOixwWMSC7gDqlp8PBcG4Xzs+exTrQ4gltiuS/PylJ2KLlFh5VdNMcDNRX2/LcnAMewUS1SJYycFHw/kPONBNFlLIn1OWIuIqEceH5EDQxkfmEJoHcFBGQcCQ2dIzfggQAqSZUHlUSoUa+iLWZIQfBM8jr1/awKWP4i7a3KDL9VRhU9tO+kqJyh8pRan7B0FZCg8kVuv1YRnpz6Ucb/lJxqv4I/qse8XTem/3YWrbezT1Pz7EepwkccYO8t+do55iARGYTPCCxulnwU2rH+rzoMkMQ0znk+X1V2uMz7XvX5S567NOoIsAD38GinyTiv0MUE3EAvvPISTi7rxCILHN/3H5pXffJ+DQk2/x2UMzi8YjwymA5EZpe0ArWhyi4JUCRxQHUqRvhStYkLACqzqAYYx8U+kmhM2b7HkFdN+dJuxYwV4hCqlc+N2ViKwEZY42MCkihugH5BiAPsAYCQ96dnihp0bh02rXuTN9l3n+DlBdM3LHfOaT2GQw0gQwlSQtwiVhLqHKT2oRJGQUXOCE6O46xtXdYdtGqP5I4TEkL0wHkHHfrwb/0CzKn0SvzWk2NkSubpBttsSzhYcjrbhqZCPQt2uF7KrCKaGfeM+AL2HSKwY4OKCkgPpQe6f+E+/Y/71pwWKHHvXMaNrNDuVcCHnndKq5c83OmuKsHRs+uk/tcpk8ZeKnZGDlbAaxzNgYLT3vSMyWjohx3bwJH2T2jSTSOw7ZltOmZtCL7a4yE+co4A3hZxeuupqO+GNGxsVV1FrWRZF5rIgOvf6+ubyHFLZNvas6ZuzwNDkqkd8WyujEdcN1oX84OexIQZDEI20gvQ+w20qqyR9GBZBPmk1z18xvOGmcrR3HesDymvRfVcD59FvAEuu6Bl4KbvWKzsyDjXJu8BWeNWnY54uiT8PVuQVbJ6lRAsspfyN2J/7wa4KN8r6O4rV8n5aFVs71ujEmqHR9o9tAm0J29+2mjEi/vqIoh/iN5L9CILdKeRwP8WJO17yg1lm/c4trd3/xNRS7b2wJaP6Br5MS8NDSEaCR+QOsN6g+TVENnoxTmojVdwSsiXT/mx/RBKK8RZwEOrCiOsLBqIlDMQBuPhx+eobwbsTyeNvhQOIhCzmPaWXuVRqsnuJv9eYLLOmrwT6sm3AQbnGOaC5hAbzYgh1sQ8qAsKkuM/TWWJkmpPv0Ya9F0d3qFSOMA9QaiVXCeD0rNsl9LyfpjghFsiOiOt2UrSO2irJb+9QsPKbRSVxw8HtHLmYo4iL1Tgw== + application:ssl-epsom-and-ewell-chain: + secure: AAABAOXsk9afvb9Lnu0+TQNKLGUsYInXmPIkORFUb/mb27pOR1OiDxSXOMW5nWRsjCmbe3NZRc/ICIX/rLKybZCS+PmfjZ0JZqMqRdSny53YHJv1IzUbManzbSpxsrRP/LYNVL0S9tTZfzoFCuEyJjKVoXk9/6R0Ud6lVcvskCkM8LYr829ul97qmQlYY72GaXxyBAH1TGwzmy0Jrs4MnHWjZyGQs4vaSpioKiiIZrw4SCZfidl9Vj4pjwwmgim0BImcWHan2N46uJ1iA2t1FpGReNLtVpV8j28e15z3jlx/kKrH4mB1Cd14V/syAEzIjgFcVCKnlIAcdeVLzvkZtLw/79tCJ9qvq98o5u47JoHk7EapFlgnhRJ7k5EmAjfd00PkaSwLL4sJFNL0Pk/RnZ9Ap8Lq0/SqxyeTWBCp3gsXalUJRBKyMjHG7pUi4IQt8IYt8SwH/DcWTBm60AqrT7I8VC6Ml1IT14X1ueETR4Fm8nLQIiz1Yfb+zA9lcUBTgPb6t7uRHqaJfi1/5q8TORtdNIQ5DgSl2U5uSyo0QAG7P2bKy5d67Un/OQgCkXQNM87hafZaWB5nbhoj8lg6ucCVhgb7nOYZMqa2Lt2Gwac6rshZrm/A5HUF43wZt3jN4dJHHx+ODczU7y0/jXW/T4r9qqQ1HdZtBqw3iquJfpYcEKQsXIn+om69UThWAt191xTddQLf3aNK79KbjUvdYtvoySqf9rY7GmYPI83vwHFgSjk9M+dEvuwPFDlO0s6N3N3fe7fjquaxs1OUO9b5/AuvLjEHlaCLxeRQ+pEgKIZOLPRhepPwtvxAF1hbhx/2I6TJpLQJuqNWQNR+Ac6mwg4cicQHcBKXKxof9rkYjhsdjav9qlJUuh7hqGW9oH9fOw97AgIzkUw3+w85VqDiVCO4s3dd1R3clmAL43XL/BqzYSH/deB1ZJw0VVLPF0l/KXOBA5izYZ2hTe+ETmRCB7eAVwgun8n+cBWTtxgUqeH0w3tXiwVbJbCNp9iChuiNcoMsbqnmdpDIVURdA+out8pO9KxRMY7fcQgjpEcWiYtQ0dALp0mfDkDXIMojTIDf9Fq46NKo+f9AT5FeB8J1n0gVkNy3Cz5cizQM/bcrXVEveSeWIqkUBW3p4gX/jq/55qXkGAjxQeI5x9cIm8fL6GZ0euMlM7MnldXrxbJ4WGtCTb7W4lzjFYXZj9dR7eO6ZiEr6WWvsUNk/QpIb2XRyrh4gHPi62BJa+G7LiJyt09zo68sXaNJZlZ0HtlSjihu+Q/mJuxNVCIVWQO7w2a9AcqFE904tfE55agP3qyvtEjuwkaJo3gOAToPmN7Pm9vbPgge8qCCdPSE+ZZfx0aAyPGcpNCj7HdPPZeC1tyjpOs/bmXA7PzJDH0REKNKiVZ9Ypw0B//i3RScbDBMsvzLW8q6TFdSIB8LCrD224KJPHpJHjQ8byibRAMIPEhR/4EQoTvsZ/FhiI9uEqSH6C2Nuyn8zDWtyZauTRQ4AxwRJbkEFhsOuLlmKkjM6+O7HbxKyHVfmTs7TQlTeCmmif/NuSszdlNX2AjXzqqYRULjZoeJyUl6y52ind83PbOdT3clc9K/MTc9q8Qvu58i+AKZ3USMDj9iykmNxuuxL14pcdui5A1haRfoWAedWPXI9ChvFyROUpvpNbUgvJfI6C1NUWoPrdVPvnmuqiKG1Q8S4PgK/133eb+d585Y/GDZfsZPfOmhE0PmFco2l3py6YQZgA2nucl2XpTWuJqmTNQIK/G8RsClm0HwJG0ErEtsCav2YsDqrO2g+cIpt8QAbM9GwCDU8HAdGFgJWKnobh++ZxktlXAcmSVe76pmF6LR313IYoldzsn12lrT8OK3umcOL5YV6tTIqwakfmwElPqCa8spGQviWVPdNOVTxEyLo0TFi1mYnFBUcEuOcFUQqp3H4SkB/25ZiIS+HaKbFgj3ASrX2owFmBTLRcNEPSjqZjQz7M0BXNKRcF6ZoUifsVhqIkwzQsHV5gm8M5UOZzIAAksg4uOb8iIluvdn+YaFZzcpVlssjAAqfx5gUWDmy4Iv9o7zySC9xlsyCv8YAGe/edTPbm8jA8QmpnPB1HdWNPpT7hYl8pkrnF+D8rXXCjmSH/r2yGjMM6YpMKQR+BDr4uKK0qu4+vLyVT06M+QUzQFuC0K5TG4SQEkJH1B8EHEmYrSdIwqTuA7ZnKFNcY2h9Z2ReDcOhX4= + application:ssl-epsom-and-ewell-key: + secure: AAABABngth8fC8gaD7FItkcIgu1B7NEfXj5QGExBTUClDu05/cJsG3lsz4j/QN0yGVrJsryWM3gOfwVFwalLJmn+Ff0hBaRbdbzJIIdA3GRXpN6muOh0JAQpWZ5JmvLNSmfF8q+U1YUAds7Q8N5fXAaTQMPvwzTJcKTSJbvJ8uv6yTenzwqehaujz4fbOZrakYLRAWBH4QIuht51QQ+3CaLxnHDrO/ORt2ACzpDnqNDBKvVpLi/S3zMcZcMB1zR7uY9osO3XXzBHHuYjkjaP1W9t7ay0J1M4jJc/XRbg9bWSKG1/nOiagboPF3AAe+XwETAhsKi5XyEuAbSzffCx+Z4kZAIqqJTp+dOnj1jyu7nX9wnn9dl0iJv01eDCP3/dzXI1+ZVxbqbnhxBuEP6Dmx0ArledivEO6BPRnTGP2K7BAc6vcnW6gMBs5A77NZzebhOhO1n8WWBRQZyRHP0XxSy0/bMHG/hTgTsyI3g8WmSciPV10zNnOTtbEYZvw5y6V1gjhkgDb3Ds5pJpeZujgrcjsx1WOkVX3zu9CQ083NovEtJlAcAYCkLn08Dgv6vRCEX2VuwhX0VlEG4M/OwZ3dV4uARZe5erZRF+w+ec2n0gO0IyfTT9Oe3bKTtPkdR205cxIDTaeOA9NkAJChrHNX1aIogor+4hyhVee2yTawztDqpUwVpH3TdmCBPCGBnhSwgxCNxlBvu/BLopUceMMNEhYeUQid70nRQvbjUs7FY6j/TAkxJYNF7hgpRYbvg6fuhiicm9fY36WKyqEZEncon1dCLYCespq4BupNGcnPFPrA2811i5qkz5aCdeyGEYBHTJcfQyxETdPO817MD4GOiruG1BXMT3apFx6/EtNGvLAoZe510ia6/CxTwYaC71VLM57LlK4p1Ubd8+R6ikueXAl5yHYm4jJJ75ftvJs7/PAWeP2CGIonSt8TeWJhYjsAPzxEtFqnYdY2cbwe3c/NEejr9zXgZSIPsTvcS3NAEiHxPlBWCB7Opzi6FkdXsjkf/RkSfyupMCMHgcRTXDtHdPS7f5F+j+II76vHEWmOUXB8aN56x69SbR8e+3e8wAJhu8INU39W+AJAIxmySvkrstIp9k2ljqkGsoo64P5jOpS8WmiJfwf8EYMZk5iMKsZpf4DYOToe7wW659nX1sMAlROGIvjG1Q2pnEdo/T8mAPTmM+A5MjzOYmGE23ht+Z+9JHvOmSxAOyQuYZrP0zlWxnyvUQ0Gp8wimVoZEQ5O2eAWeF+qf+Bh3KgcotSE5OyHnOub4eg/nllTmFRChOozoP//3IwfPUuJ9FJYar/OnJbijbFU30Yk0cOQ4qtTCcfgWTbCBOq317PKslmlIJLbL8iQxzAahNgIpUSRGQ3p94h1GUki5P3iqki1kYHWHV/4f0cYu6qnAxmKgsdMEPXxCCZPK6aFcKZA6kJ6ko7taGFfD//GrLpPIIXX9tbkchlhqX5kJx1bXcnF4GMdGZvXx8+1bYhPnI8uArKl0uViqeQ6hTPkYMTg8BaHL70IAiCN7jrmjmQ7khgPci5TzrO7pPFY5wZPGqFrKhQKw/cXPZqDUGDdItmq+fCYJrkuQGm8jQ7Zb4E5x7vgcGsIQ7/PgfJya2+UrjN0/r/xjQyF/ZMNh9GVJ+tFcjCwQLBvHksxkETyLx9IU7WVNSdCKPpap4+ZDrut1Q4SitDXiV9EyKzYFVZd6Y5Wrad0hG3igjiqN4LgJzstGGOpUL2FvQDyEqgYh6Bu/5d5MhflpqS+6wdJqsehEe2Bjkjt/hBtmj71Sa8T1COqK/ATGtaqBlfXWPOORBFPWA+Qb1AouS7ewmmXGRF28rVA+bq8E6SbksUr6Ven3TxWAmlU3Qx24KOtHhhDwvHFCofL8acxLqs+GkZ+IjAovmoSw0tmu963vZ0TBYcSery5xhjt/euwI2dISHI81Ft52gasuKcAa4i5bAKiuMEcBlFNQUqaYvdndH0wbL6H5PwU7bv/vbKZeApq3cB+uj8pa+V/+ZqOtv6GbiGzq+uCTgbd+cMvNdNPUwiFwRe1rcsMyH0d+LtGWFUDrVjp65GzvVoUBYducEIrV5zQIWYMzf2Whb6tRZu8TJ+5cgdIEIDtPnsVY4Sqppi8ziNHOhBe9XQjio/tv7NdvWFu5zBeqdTt5BoX+jgsjUsYuVVhRo+oB/xDWJMPUJscUcHDoZDxR8BN2mE3yfGwev+/9xC2gsu23wcVjJf+lR32bgPy7yJSoXcWiMxTBhZxcbSUdStxI/vhsZMEet80/U+WRuyjUwrafJAV7typC8+UC8SQj4hA== application:ssl-gateshead-cert: secure: AAABAA4sXJL0jy7scdk7OXFcuIjhA9g02L3mALj1QeEOitqUdHG/HZnTw1xmZAvnWhSirO25xT+DzGfxPiRrPlEuhuJ3bXFPNztle79L795xQRPbVjhZ0aASWutFouG/3xB3foU/j4hpf6oyzPoOrjcGv8rS3PddqgwdVgRbNqkqYb+SHs3xIEb8kvstQNDyiiL9OPeQiqFhaVCdcG1x70aVn3IW5n2JHDXG3tKZ/onu6maxfP0WF8P782VhmsrtVSgVEaO6ntm1cOad+W1k0ZnkN+26UzQbTL5/tGR2MZ+/PiLw1KotFb3CS2glkv6ecmC73z3Dbye3GWlR27kKzlxQQOKbxrKcwpt5GshZWtnfRWPBQK9B8yjejxRswPniblLbmnNPYATjq3NKDaoD5pt6CIOyXywsyvA3CZVCqLBblAJMprUCbKVlbsyn/5eSV5STD7Sig1LyLQKylVyicD+ii/pLhWQhkCoCLeMhF4cAuQCJ1hrmu88gOY/PThwi9U70el9dSDqYnJ0sNU5cLNgJ2X7rH+w3e+wveDOieyhLqJhk7i+zvcOizMpRIteWXDwd1jTdeiltJxVEiuoKHBcBmtvAB5X5bXKuqIiCpDjMYT7nqyMzTt9HfKWBOB/iFU5Ba1iko0wdOBJyU5PfWR5/F1P0J9bl5h8pE2fY0bilNgRTgRB8auo/9CmW8pvUJVJgzpSX9TN7yBoAGjyf+/IJdsCBFLEv1loUDGtCokq411tr368xPlJz+/2HQpGlv8MBNiH3snYHa0rOITryZhB+09VgFAAa8AmzMreAE/KLzanRIWe8Ag78SaUEnF7O/WzQHCyjgxk8ZrPG1+HL89H9nOJUlBcKcwljdGLKiUwR46Yxl1ZmMr7f7YKlA5EzDtFNJk/aelcUP+xL9wma9IgL/xm0qcjKP6Xt78tGlrHzL9+s1r5Z+mTWs+C7wjUTIPUNnVJauk4zKZ7YxPiISZdGAdUgO38mggZTs9OKn3Tanyit8OT5QHL/u4gv8UBO1EUNeR1VVYqhQh3KVcU+FHQdijF89KEd4t/Y28FnBh21GrnCebtVuaFNrsWu0IfqC3+c31OpZfOA462yPIQ6T6UfHWUon8Ag/ETnbDUSYYHBEPRGDur+K6roUwPgRmaxmFTnuoa7BMgLYdPhlIzCimfBmg8jquRCvewf3XKvIh8nxhjZgFRiJXfZhr7G6VKq/lhmpWqSj3vBYGBP/hHVsw95CEaThR7BRp+ZCv+Lev02pLjZ1KbtUrYISfrFl+TbYmDJX7CnrXso/X2IXB0aMV21icd9ErANlpsTIjA1cEOrs1osMtPyaVhkHeoZRyaZgjHMU+xhnGbnYygo0YIuA33cDMJ8e7lq6ynn/1u+KlrXlQs//cFSKo2Fu58HQlWMrsOoKdcqrqyQ+TDltjR9hxjcbufutNPMjpCYqRn8hsxOla/lSTn5WAE3j/Di6+7wISIX3hlb5LNL4yluaGzBcpSoRyDnPLCAZJAGk40UQAVOF+/j/yckISUknRCPkhy+7Gf8+s9rlMdQtZRR93itTHhFpNrYaSQq1x1Zalyxox2fLrUBG9Ekivi77Qxjj0VLlhDjz0rvyUKEIwbbaPgLprMAMMLaCzwTcEVmk1NuA/koyNligLFlFEUDgEaghVrDX6p9l1nXeQzj5KFGU5GxwDyIT87gcXhiAJ4McVsa1UHED6erZhAZGzMxT/ZCEDCvS8HNeEeUHgooqBNmwpwYXQsoelqsHtE1RydJ3bd554i3ijARxW5LzkeM2sLNq496zjRcEY5eIwBLxK36Yh32yAQnRphgl1mcvH+lczOPPZK0avYx7llaaPcDsX1km2epiV5ws+BoxmLcGEClrAK2rD4YnUmKzU6sdCSOQvi63Bna3xqmvTNcWbW0SuRBVNZy+ILtUBdIAAdvGLRdWwVwgdEwFOOnHGJQWaZG7nqMyfxyMKUw2W4PjINsUthCWymbqCQLgbSYYAQtRpJbVSGl538OaF63J7cspQlNltCQoYLbdHnxM2NoF+mGeFZO2HwCrGJ6FLSCnqYzMQV9XZwAUgPF0zZTp/97Z8eozhr8SjiYgNUVHq1HBVAZDD4TEqzwyv5W7H99ujYTgbciCP7M2+jB/GSdHjE/PuB4JPRmZfOPq5K8GyziPsY6QHpLlx1mdzuLLqwoufnVs/vdfR+7+ORfjjQil3LHGxwRIiEiO6jPkj4CVqS5HNIyAKRox9D5gLQyd28wBxHq2GJUpemZQM9UDKFw/kbWkeBhRNUZsxK1eN/J9hiEGiscW0peyaUBwCkwEHfUoV8aYoolrafF1MG7RR7vyivW5tJPencgkvfuNk3EaCpDxYSy0pnBDzfcMdrLXVjrXqdL8qVekB/sD4GRqmtFKa6YxZa96EVALM40ea7NEVEljUGxKZKusda1JMGZ3fdVE9QawdWuU3DwBC4YbO5CgoLxIIogRIiFq7kRwOPvgyctBN/dqMVqQOqdyBzn2t+cVThAjsnllnKhenqtie95N9SQkYj8UjVHUCjgL54lxpV0Rhy3K4qx5ftm/mxOamNPiRiEABbxpXQSJ9PY4/nC+TSwhNZJAicvBpgylId8pgGkKkHTYCulKpzunZ6+v7NuHTmZ00QZtnZmjRtsFIyKVOhZEoCvA7QqEvFkuM8WJnP5ViOt38MGZ4RAdyYIJ1Czn8lzSmNMr/mDT9Q4U46p9YPh0t8GhNPi9hVOgQvBUSI3y4BEzhr1yRY88t5p7ApPIpSxFMGRUTCP5ZOy4MlIOZXW+gIs9zfelLtx/XOZE4MVz3NwejYIUAet8wWdZFrT9Ndcf36eMgL/sa5BEQTrOyQRr7/uTxHcDe9W0vmNu2c5rFqoaHDfAZNBJLlsMooXUS+KuVA2YaUVvuo3s/sOt1EqHjRgDg/INpmN5dfTmXJnJ55MSTQduAN3zyJfcoOhIn09XwVOQFsF/LSunGVubDcYds105ykqY5ZdOMQtHgrOX7U4QgMK/6bEutHBqo2N6MS/9gmM8bsXMShvuGFvUbKhPGPVJXZCl53hgzJS/j5kJLWL2iM0Vumzx8CgMWZIFfsTl9T5RwVfW8yMcv6tuZ7ZQZltCFEEriKWSeJXudXd8vzWXyL11AawpRkffVwz/SErOHeSkQVHjoTmYkaZ/SFNhw08Vdq2l5oFQUZJUqbzlp79U7lIJJKK9RFtVs3ZhQI7QNjkR74qFhbRKgYsEcBHF0vBlYy8IZgmgGTmrsumeL9/0njfrabraN7HWpDKQITgUbwJK7qZ8reTbqWcK+J2oNN13icy application:ssl-gateshead-chain: diff --git a/infrastructure/application/index.ts b/infrastructure/application/index.ts index 26deceb602..a5817ffe67 100644 --- a/infrastructure/application/index.ts +++ b/infrastructure/application/index.ts @@ -76,6 +76,10 @@ const CUSTOM_DOMAINS: CustomDomains = domain: "planningservices.gloucester.gov.uk", name: "gloucester", }, + { + domain: "planningservices.epsom-ewell.gov.uk", + name: "epsom-and-ewell", + }, ] : []; From fdc795d41436abda65b3518c95bdbaa4216a77cd Mon Sep 17 00:00:00 2001 From: Rory Doak <138574807+RODO94@users.noreply.github.com> Date: Mon, 8 Jul 2024 17:17:36 +0100 Subject: [PATCH 115/150] feat: Team Settings Form Fetching Boundary GeoJSON using Boundary URL (#3378) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Dafydd Llŷr Pearson --- editor.planx.uk/package.json | 2 + editor.planx.uk/pnpm-lock.yaml | 13 +++++ .../components/FindProperty/Public/Map.tsx | 2 +- .../Settings/GeneralSettings/BoundaryForm.tsx | 52 +++++++++++++++---- .../Settings/GeneralSettings/ContactForm.tsx | 4 +- .../src/pages/FlowEditor/lib/store/team.ts | 5 -- editor.planx.uk/src/routes/views/draft.tsx | 2 +- .../src/routes/views/published.tsx | 3 +- .../src/routes/views/standalone.tsx | 2 +- hasura.planx.uk/metadata/tables.yaml | 2 + 10 files changed, 66 insertions(+), 21 deletions(-) diff --git a/editor.planx.uk/package.json b/editor.planx.uk/package.json index 3cf94a79fc..b5fcbef8f8 100644 --- a/editor.planx.uk/package.json +++ b/editor.planx.uk/package.json @@ -36,6 +36,8 @@ "@tiptap/react": "^2.4.0", "@tiptap/suggestion": "^2.0.3", "@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", diff --git a/editor.planx.uk/pnpm-lock.yaml b/editor.planx.uk/pnpm-lock.yaml index a8064a9bf5..94afc869b1 100644 --- a/editor.planx.uk/pnpm-lock.yaml +++ b/editor.planx.uk/pnpm-lock.yaml @@ -110,6 +110,12 @@ dependencies: '@turf/area': 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: ^7.0.0 version: 7.0.0 @@ -8055,6 +8061,13 @@ packages: tslib: 2.6.3 dev: false + /@turf/bbox-polygon@7.0.0: + resolution: {integrity: sha512-RMBADOr0zOhVhTidKXCAx1TLTzgBvZwQKI6KJ1FgoCPH7GMZZnMXGMvOtdQLdsplS4Zs6+NoVtaK2x0+EXdYJQ==} + dependencies: + '@turf/helpers': 7.0.0 + tslib: 2.6.3 + dev: false + /@turf/bbox@7.0.0: resolution: {integrity: sha512-IyXG5HAsn6IZLdAtQo7aWYccjU5WsV+uzIzhGaXrh/qTVylSYmRiWgLdiekHZVED9nv9r7D/EJUMOT4zyA6POA==} dependencies: 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..6e88d7393e 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/pages/FlowEditor/components/Settings/GeneralSettings/BoundaryForm.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/BoundaryForm.tsx index f59e2bee97..2c3185c52a 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/BoundaryForm.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/BoundaryForm.tsx @@ -1,4 +1,8 @@ +import { bbox } from "@turf/bbox"; +import { bboxPolygon } from "@turf/bbox-polygon"; +import axios, { isAxiosError } from "axios"; import { useFormik } from "formik"; +import type { Feature, MultiPolygon, Polygon } from "geojson"; import { useStore } from "pages/FlowEditor/lib/store"; import React, { ChangeEvent } from "react"; import InputLabel from "ui/editor/InputLabel"; @@ -8,11 +12,26 @@ import * as Yup from "yup"; import { SettingsForm } from "../shared/SettingsForm"; import { FormProps } from "."; +export type PlanningDataEntity = Feature< + Polygon | MultiPolygon, + Record +>; + +/** + * Convert a complex local authority boundary to a simplified bounding box + */ +const convertToBoundingBox = (feature: PlanningDataEntity): Feature => + bboxPolygon(bbox(feature)); + export default function BoundaryForm({ formikConfig, onSuccess }: FormProps) { + const planningDataURLRegex = + /^https:\/\/www\.planning\.data\.gov\.uk\/entity\/\d{1,7}$/; + const formSchema = Yup.object().shape({ boundaryUrl: Yup.string() - .url( - "Enter a boundary URL in the correct format, https://www.planning.data.gov.uk/", + .matches( + planningDataURLRegex, + "Enter a boundary URL in the correct format, https://www.planning.data.gov.uk/entity/1234567", ) .required("Enter a boundary URL"), }); @@ -21,12 +40,27 @@ export default function BoundaryForm({ formikConfig, onSuccess }: FormProps) { ...formikConfig, validationSchema: formSchema, onSubmit: async (values, { resetForm }) => { - const isSuccess = await useStore.getState().updateTeamSettings({ - boundaryUrl: values.boundaryUrl, - }); - if (isSuccess) { - onSuccess(); - resetForm({ values }); + try { + const { data } = await axios.get( + `${values.boundaryUrl}.geojson`, + ); + + const isUpdateSuccess = await useStore.getState().updateTeamSettings({ + boundaryUrl: values.boundaryUrl, + boundaryBbox: convertToBoundingBox(data), + }); + if (isUpdateSuccess) { + onSuccess(); + resetForm({ values }); + } + } catch (error) { + if (isAxiosError(error)) { + formik.setFieldError( + "boundaryUrl", + "We are unable to retrieve your boundary, check your boundary URL and try again", + ); + } + console.error(error); } }, }); @@ -49,7 +83,7 @@ export default function BoundaryForm({ formikConfig, onSuccess }: FormProps) { target="_blank" rel="noopener noreferrer" > - https://www.planning.data.gov.uk/ + https://www.planning.data.gov.uk/entity/1234567

    diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/ContactForm.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/ContactForm.tsx index 7924634a00..83d2438261 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/ContactForm.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/ContactForm.tsx @@ -14,8 +14,8 @@ export default function ContactForm({ formikConfig, onSuccess }: FormProps) { .email( "Enter an email address in the correct format, like example@email.com", ) - .required("Enter a help email address"), - helpPhone: Yup.string().required("Enter a help phone number"), + .required("Enter a contact email address"), + helpPhone: Yup.string().required("Enter a phone number"), helpOpeningHours: Yup.string().required("Enter your opening hours"), homepage: Yup.string() .url( diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/store/team.ts b/editor.planx.uk/src/pages/FlowEditor/lib/store/team.ts index 7494fdf292..5a2a2080a0 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/store/team.ts +++ b/editor.planx.uk/src/pages/FlowEditor/lib/store/team.ts @@ -11,7 +11,6 @@ import type { StateCreator } from "zustand"; import { SharedStore } from "./shared"; export interface TeamStore { - boundaryBBox?: Team["boundaryBBox"]; teamId: number; teamIntegrations: TeamIntegrations; teamName: string; @@ -34,7 +33,6 @@ export const teamStore: StateCreator< [], TeamStore > = (set, get) => ({ - boundaryBBox: undefined, teamId: 0, teamIntegrations: {} as TeamIntegrations, teamName: "", @@ -44,7 +42,6 @@ export const teamStore: StateCreator< setTeam: (team) => { set({ - boundaryBBox: team.boundaryBBox, teamId: team.id, teamIntegrations: team.integrations, teamName: team.name, @@ -60,7 +57,6 @@ export const teamStore: StateCreator< }, getTeam: () => ({ - boundaryBBox: get().boundaryBBox, id: get().teamId, integrations: get().teamIntegrations, name: get().teamName, @@ -105,7 +101,6 @@ export const teamStore: StateCreator< clearTeamStore: () => set({ - boundaryBBox: undefined, teamId: 0, teamIntegrations: undefined, teamName: "", diff --git a/editor.planx.uk/src/routes/views/draft.tsx b/editor.planx.uk/src/routes/views/draft.tsx index cf2361140f..5654bbec46 100644 --- a/editor.planx.uk/src/routes/views/draft.tsx +++ b/editor.planx.uk/src/routes/views/draft.tsx @@ -71,6 +71,7 @@ const fetchSettingsForDraftView = async ( name settings: team_settings { boundaryUrl: boundary_url + boundaryBBox: boundary_bbox homepage helpEmail: help_email helpPhone: help_phone @@ -81,7 +82,6 @@ const fetchSettingsForDraftView = async ( hasPlanningData: has_planning_data } slug - boundaryBBox: boundary_bbox } settings slug diff --git a/editor.planx.uk/src/routes/views/published.tsx b/editor.planx.uk/src/routes/views/published.tsx index 09d9cb6db4..03402fafb2 100644 --- a/editor.planx.uk/src/routes/views/published.tsx +++ b/editor.planx.uk/src/routes/views/published.tsx @@ -97,6 +97,7 @@ export const fetchSettingsForPublishedView = async ( name settings: team_settings { boundaryUrl: boundary_url + boundaryBBox: boundary_bbox homepage helpEmail: help_email helpPhone: help_phone @@ -107,8 +108,6 @@ export const fetchSettingsForPublishedView = async ( hasPlanningData: has_planning_data } slug - - boundaryBBox: boundary_bbox } settings status diff --git a/editor.planx.uk/src/routes/views/standalone.tsx b/editor.planx.uk/src/routes/views/standalone.tsx index 6f87ff7cde..5687060f74 100644 --- a/editor.planx.uk/src/routes/views/standalone.tsx +++ b/editor.planx.uk/src/routes/views/standalone.tsx @@ -71,6 +71,7 @@ const fetchDataForStandaloneView = async ( name settings: team_settings { boundaryUrl: boundary_url + boundaryBBox: boundary_bbox homepage helpEmail: help_email helpPhone: help_phone @@ -81,7 +82,6 @@ const fetchDataForStandaloneView = async ( hasPlanningData: has_planning_data } slug - boundaryBBox: boundary_bbox } settings } diff --git a/hasura.planx.uk/metadata/tables.yaml b/hasura.planx.uk/metadata/tables.yaml index 31b922cac7..1f3505f696 100644 --- a/hasura.planx.uk/metadata/tables.yaml +++ b/hasura.planx.uk/metadata/tables.yaml @@ -1729,6 +1729,7 @@ - role: platformAdmin permission: columns: + - boundary_bbox - boundary_url - email_reply_to_id - external_planning_site_name @@ -1744,6 +1745,7 @@ - role: teamEditor permission: columns: + - boundary_bbox - boundary_url - email_reply_to_id - external_planning_site_name From ed8a907e6e5167cfa910e20972dfe2c8db8142df Mon Sep 17 00:00:00 2001 From: Jessica McInchak Date: Mon, 8 Jul 2024 18:26:25 +0200 Subject: [PATCH 116/150] feat: validate ODP Schema project types on publish (#3386) --- .../modules/flows/validate/controller.ts | 2 +- .../modules/flows/validate/service.ts | 278 ------------------ .../flows/validate/service/fileTypes.ts | 76 +++++ .../modules/flows/validate/service/index.ts | 74 +++++ .../flows/validate/service/inviteToPay.ts | 88 ++++++ .../flows/validate/service/projectTypes.ts | 69 +++++ .../flows/validate/service/sections.ts | 61 ++++ .../modules/flows/validate/validate.test.ts | 54 ++++ api.planx.uk/tests/mocks/inviteToPayData.ts | 2 +- 9 files changed, 424 insertions(+), 280 deletions(-) delete mode 100644 api.planx.uk/modules/flows/validate/service.ts create mode 100644 api.planx.uk/modules/flows/validate/service/fileTypes.ts create mode 100644 api.planx.uk/modules/flows/validate/service/index.ts create mode 100644 api.planx.uk/modules/flows/validate/service/inviteToPay.ts create mode 100644 api.planx.uk/modules/flows/validate/service/projectTypes.ts create mode 100644 api.planx.uk/modules/flows/validate/service/sections.ts 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/service.ts b/api.planx.uk/modules/flows/validate/service.ts deleted file mode 100644 index 802f8f5c9e..0000000000 --- a/api.planx.uk/modules/flows/validate/service.ts +++ /dev/null @@ -1,278 +0,0 @@ -import { getValidSchemaValues } from "@opensystemslab/planx-core"; -import { - ComponentType, - Edges, - FlowGraph, - Node, -} from "@opensystemslab/planx-core/types"; -import * as jsondiffpatch from "jsondiffpatch"; -import intersection from "lodash/intersection"; -import countBy from "lodash/countBy"; - -import { dataMerged, getMostRecentPublishedFlow } from "../../../helpers"; -import { - hasComponentType, - isComponentType, - numberOfComponentType, -} from "./helpers"; - -type AlteredNode = { - id: string; - type?: ComponentType; - edges?: Edges; - data?: Node["data"]; -}; - -type ValidationResponse = { - title: string; - status: "Pass" | "Fail" | "Warn" | "Not applicable"; - message: string; -}; - -interface ValidateAndDiffResponse { - alteredNodes: AlteredNode[] | null; - message: string; - validationChecks?: ValidationResponse[]; -} - -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); - validationChecks.push(sections, inviteToPay, fileTypes); - - // 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, - }; -}; - -const validateSections = (flowGraph: FlowGraph): ValidationResponse => { - 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; -}; - -const validateInviteToPay = (flowGraph: FlowGraph): ValidationResponse => { - 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) - ); -}; - -const validateFileTypes = (flowGraph: FlowGraph): ValidationResponse => { - // 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 { 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 dce4af082e..1c2dfd09e4 100644 --- a/api.planx.uk/modules/flows/validate/validate.test.ts +++ b/api.planx.uk/modules/flows/validate/validate.test.ts @@ -125,6 +125,12 @@ describe("sections validation on diff", () => { 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"', + }, ]); }); }); @@ -178,6 +184,12 @@ describe("sections validation on diff", () => { 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"', + }, ]); }); }); @@ -212,6 +224,12 @@ describe("invite to pay validation on diff", () => { 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", @@ -266,6 +284,12 @@ describe("invite to pay validation on diff", () => { 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", @@ -316,6 +340,12 @@ describe("invite to pay validation on diff", () => { 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", @@ -368,6 +398,12 @@ describe("invite to pay validation on diff", () => { 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", @@ -432,6 +468,12 @@ describe("invite to pay validation on diff", () => { 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"', + }, ]); }); }); @@ -513,6 +555,12 @@ describe("ODP Schema file type validation on diff", () => { 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"', + }, ]); }); }); @@ -585,6 +633,12 @@ describe("ODP Schema file type validation on diff", () => { 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/tests/mocks/inviteToPayData.ts b/api.planx.uk/tests/mocks/inviteToPayData.ts index 9b00a4c9e1..4f4d4dfcaf 100644 --- a/api.planx.uk/tests/mocks/inviteToPayData.ts +++ b/api.planx.uk/tests/mocks/inviteToPayData.ts @@ -186,7 +186,7 @@ export const flowWithInviteToPay: Flow["data"] = { ChecklistOptionTwo: { data: { text: "Build new", - val: "build", + val: "new", }, type: 200, }, From 591eb9a00ef20bd2307c9ca626166ba762f9e7ce Mon Sep 17 00:00:00 2001 From: Jessica McInchak Date: Mon, 8 Jul 2024 19:15:08 +0200 Subject: [PATCH 117/150] fix: allow teamEditor to select all rows from users table (#3390) --- hasura.planx.uk/metadata/tables.yaml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/hasura.planx.uk/metadata/tables.yaml b/hasura.planx.uk/metadata/tables.yaml index 1f3505f696..49a7278c64 100644 --- a/hasura.planx.uk/metadata/tables.yaml +++ b/hasura.planx.uk/metadata/tables.yaml @@ -2157,9 +2157,7 @@ - is_platform_admin - last_name - updated_at - filter: - id: - _eq: x-hasura-user-id + filter: {} update_permissions: - role: platformAdmin permission: From 9e02aa0c662a041b38d8512775684ed0f044e946 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Tue, 9 Jul 2024 09:55:36 +0100 Subject: [PATCH 118/150] test: Remove redundant test following `teamEditor` permission update (#3392) --- e2e/tests/api-driven/src/permissions/teamAdmin.feature | 1 - 1 file changed, 1 deletion(-) 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 From 0236f93dd600a6cca1ad98943135b19dd3f216fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Tue, 9 Jul 2024 10:57:22 +0100 Subject: [PATCH 119/150] chore: Additional logging in `errorLink` (#3393) --- editor.planx.uk/src/lib/graphql.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/editor.planx.uk/src/lib/graphql.ts b/editor.planx.uk/src/lib/graphql.ts index 0e29fcaadd..2b35952141 100644 --- a/editor.planx.uk/src/lib/graphql.ts +++ b/editor.planx.uk/src/lib/graphql.ts @@ -103,6 +103,9 @@ const errorLink = onError(({ graphQLErrors, operation }) => { if (graphQLErrors) { handleHasuraGraphQLErrors(graphQLErrors, operation); } else { + console.error( + `[Error]: Operation name: ${operation.operationName}. Details: ${operation}`, + ); toast.error("Network error, attempting to reconnect…", { toastId, autoClose: false, From 9e1d63ea7393670a2113a58a1957bdffc34266db Mon Sep 17 00:00:00 2001 From: Jessica McInchak Date: Tue, 9 Jul 2024 14:59:18 +0200 Subject: [PATCH 120/150] chore: enable AWS S3 Send destination on production (#3394) --- .../src/@planx/components/Send/Editor.tsx | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/editor.planx.uk/src/@planx/components/Send/Editor.tsx b/editor.planx.uk/src/@planx/components/Send/Editor.tsx index bfc3f208ca..c7ca991d52 100644 --- a/editor.planx.uk/src/@planx/components/Send/Editor.tsx +++ b/editor.planx.uk/src/@planx/components/Send/Editor.tsx @@ -55,18 +55,17 @@ const SendComponent: React.FC = (props) => { value: Destination.Email, label: "Email to planning office", }, - ]; - - // Show S3 & Nexus options on staging only - if (process.env.REACT_APP_ENV !== "production") { - options.push({ + { value: Destination.S3, label: "Upload to AWS S3 bucket", - }); + }, + ]; + // Show Nexus option on staging only + if (process.env.REACT_APP_ENV !== "production") { options.push({ value: Destination.Idox, - label: "Idox Nexus", + label: "Idox Nexus (testing only)", }); } From 17f966ddc0bd775b29dc5107e826aa27d7df8df6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Tue, 9 Jul 2024 15:51:46 +0100 Subject: [PATCH 121/150] fix: Use `teamSettings` instead of `settings` in query (#3396) --- editor.planx.uk/src/routes/views/draft.tsx | 2 +- editor.planx.uk/src/routes/views/published.tsx | 2 +- editor.planx.uk/src/routes/views/standalone.tsx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/editor.planx.uk/src/routes/views/draft.tsx b/editor.planx.uk/src/routes/views/draft.tsx index 5654bbec46..e21bb6d3ac 100644 --- a/editor.planx.uk/src/routes/views/draft.tsx +++ b/editor.planx.uk/src/routes/views/draft.tsx @@ -69,7 +69,7 @@ const fetchSettingsForDraftView = async ( favicon } name - settings: team_settings { + teamSettings: team_settings { boundaryUrl: boundary_url boundaryBBox: boundary_bbox homepage diff --git a/editor.planx.uk/src/routes/views/published.tsx b/editor.planx.uk/src/routes/views/published.tsx index 03402fafb2..da8eb891bd 100644 --- a/editor.planx.uk/src/routes/views/published.tsx +++ b/editor.planx.uk/src/routes/views/published.tsx @@ -95,7 +95,7 @@ export const fetchSettingsForPublishedView = async ( favicon } name - settings: team_settings { + teamSettings: team_settings { boundaryUrl: boundary_url boundaryBBox: boundary_bbox homepage diff --git a/editor.planx.uk/src/routes/views/standalone.tsx b/editor.planx.uk/src/routes/views/standalone.tsx index 5687060f74..027bfd7ccf 100644 --- a/editor.planx.uk/src/routes/views/standalone.tsx +++ b/editor.planx.uk/src/routes/views/standalone.tsx @@ -69,7 +69,7 @@ const fetchDataForStandaloneView = async ( favicon } name - settings: team_settings { + teamSettings: team_settings { boundaryUrl: boundary_url boundaryBBox: boundary_bbox homepage From be4bb9d2292b8f8e2d3118148ec6c816aca3561b Mon Sep 17 00:00:00 2001 From: Jessica McInchak Date: Wed, 10 Jul 2024 13:37:09 +0200 Subject: [PATCH 122/150] feat: add an audit table for applications submitted via S3 and Power Automate (#3397) --- api.planx.uk/modules/send/s3/index.test.ts | 8 ++ api.planx.uk/modules/send/s3/index.ts | 72 +++++++++++++---- hasura.planx.uk/metadata/tables.yaml | 40 ++++++++++ .../down.sql | 1 + .../up.sql | 11 +++ hasura.planx.uk/tests/s3_applications.test.js | 79 +++++++++++++++++++ 6 files changed, 195 insertions(+), 16 deletions(-) create mode 100644 hasura.planx.uk/migrations/1720597665798_create_table_s3_applications/down.sql create mode 100644 hasura.planx.uk/migrations/1720597665798_create_table_s3_applications/up.sql create mode 100644 hasura.planx.uk/tests/s3_applications.test.js 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/hasura.planx.uk/metadata/tables.yaml b/hasura.planx.uk/metadata/tables.yaml index 49a7278c64..a20b9f2d82 100644 --- a/hasura.planx.uk/metadata/tables.yaml +++ b/hasura.planx.uk/metadata/tables.yaml @@ -1414,6 +1414,46 @@ - role: api permission: filter: {} +- table: + name: s3_applications + schema: public + insert_permissions: + - role: api + permission: + check: {} + columns: + - id + - webhook_request + - webhook_response + - session_id + - team_slug + - created_at + comment: "" + select_permissions: + - role: api + permission: + columns: + - id + - webhook_request + - webhook_response + - session_id + - team_slug + - created_at + filter: {} + comment: "" + update_permissions: + - role: api + permission: + columns: + - id + - webhook_request + - webhook_response + - session_id + - team_slug + - created_at + filter: {} + check: null + comment: "" - table: name: sessions schema: public diff --git a/hasura.planx.uk/migrations/1720597665798_create_table_s3_applications/down.sql b/hasura.planx.uk/migrations/1720597665798_create_table_s3_applications/down.sql new file mode 100644 index 0000000000..d2db0a6dcf --- /dev/null +++ b/hasura.planx.uk/migrations/1720597665798_create_table_s3_applications/down.sql @@ -0,0 +1 @@ +DROP TABLE "public.s3_applications" CASCADE; diff --git a/hasura.planx.uk/migrations/1720597665798_create_table_s3_applications/up.sql b/hasura.planx.uk/migrations/1720597665798_create_table_s3_applications/up.sql new file mode 100644 index 0000000000..b5995aeb1c --- /dev/null +++ b/hasura.planx.uk/migrations/1720597665798_create_table_s3_applications/up.sql @@ -0,0 +1,11 @@ +CREATE TABLE "public"."s3_applications" ( + "id" serial NOT NULL, + "session_id" text NOT NULL, + "team_slug" text NOT NULL, + "webhook_request" JSONB NOT NULL, + "webhook_response" JSONB NOT NULL, + "created_at" timestamptz NOT NULL DEFAULT now(), + PRIMARY KEY ("id") +); + +COMMENT ON TABLE "public"."s3_applications" IS 'Stores a receipt of applications submitted using the Upload to AWS S3 method with notifications via Power Automate webhook'; diff --git a/hasura.planx.uk/tests/s3_applications.test.js b/hasura.planx.uk/tests/s3_applications.test.js new file mode 100644 index 0000000000..913e95cb8c --- /dev/null +++ b/hasura.planx.uk/tests/s3_applications.test.js @@ -0,0 +1,79 @@ +const { introspectAs } = require("./utils"); + +describe("s3_applications", () => { + describe("public", () => { + let i; + beforeAll(async () => { + i = await introspectAs("public"); + }); + + test("cannot query s3 applications", () => { + expect(i.queries).not.toContain("s3_applications"); + }); + + test("cannot create, update, or delete s3 applications", () => { + expect(i).toHaveNoMutationsFor("s3_applications"); + }); + }); + + describe("admin", () => { + let i; + beforeAll(async () => { + i = await introspectAs("admin"); + }); + + test("has full access to query and mutate s3 applications", () => { + expect(i.queries).toContain("s3_applications"); + expect(i.mutations).toContain("insert_s3_applications"); + expect(i.mutations).toContain("update_s3_applications_by_pk"); + expect(i.mutations).toContain("delete_s3_applications"); + }); + }); + + describe("platformAdmin", () => { + let i; + beforeAll(async () => { + i = await introspectAs("platformAdmin"); + }); + + test("cannot query s3_applications", () => { + expect(i.queries).not.toContain("s3_applications"); + }); + + test("cannot create, update, or delete s3_applications", () => { + expect(i).toHaveNoMutationsFor("s3_applications"); + }); + }); + + describe("teamEditor", () => { + let i; + beforeAll(async () => { + i = await introspectAs("teamEditor"); + }); + + test("cannot query s3_applications", () => { + expect(i.queries).not.toContain("s3_applications"); + }); + + test("cannot create, update, or delete s3_applications", () => { + expect(i).toHaveNoMutationsFor("s3_applications"); + }); + }); + + describe("api", () => { + let i; + beforeAll(async () => { + i = await introspectAs("api"); + }); + + test("can query and mutate s3 applications", () => { + expect(i.queries).toContain("s3_applications"); + expect(i.mutations).toContain("insert_s3_applications"); + expect(i.mutations).toContain("update_s3_applications_by_pk"); + }); + + test("cannot delete s3 applications", () => { + expect(i.mutations).not.toContain("delete_s3_applications"); + }); + }); +}); From 20ce9d60c30d44092274e67620c45240bd6fc594 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Wed, 10 Jul 2024 12:55:31 +0100 Subject: [PATCH 123/150] fix: Update Pizza Teardown (Manual) GitHub action variables (#3400) --- .github/workflows/pizza-teardown-manual.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) 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 From 7169464b35b7e7d18d1af2f3ca84ad91bb520b32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Wed, 10 Jul 2024 17:07:14 +0100 Subject: [PATCH 124/150] fix: Associate label and input in `MoreInformation` (#3401) --- editor.planx.uk/src/@planx/components/ui.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/editor.planx.uk/src/@planx/components/ui.tsx b/editor.planx.uk/src/@planx/components/ui.tsx index 4d7130dd99..3707d3eb05 100644 --- a/editor.planx.uk/src/@planx/components/ui.tsx +++ b/editor.planx.uk/src/@planx/components/ui.tsx @@ -127,7 +127,7 @@ export const MoreInformation = ({ onChange={changeField} /> - + Date: Wed, 10 Jul 2024 17:26:02 +0100 Subject: [PATCH 125/150] fix: React warnings on `PlanningConstraints` component (#3399) --- .../src/@planx/components/PlanningConstraints/List.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/editor.planx.uk/src/@planx/components/PlanningConstraints/List.tsx b/editor.planx.uk/src/@planx/components/PlanningConstraints/List.tsx index 4169ecb00a..60e0c59c81 100644 --- a/editor.planx.uk/src/@planx/components/PlanningConstraints/List.tsx +++ b/editor.planx.uk/src/@planx/components/PlanningConstraints/List.tsx @@ -78,7 +78,7 @@ export default function ConstraintsList({ {Object.keys(groupedConstraints).map( (category: string, index: number) => ( - <> + ))} - + ), )} @@ -147,7 +147,7 @@ function ConstraintListItem({ children, ...props }: ConstraintListItemProps) { expandIcon={} sx={{ pr: 1.5, background: `rgba(255, 255, 255, 0.8)` }} > - + {children} @@ -199,7 +199,7 @@ function ConstraintListItem({ children, ...props }: ConstraintListItemProps) { )} - + Date: Thu, 11 Jul 2024 08:23:43 +0100 Subject: [PATCH 126/150] fix: CVE-2024-39008 (#3402) --- editor.planx.uk/package.json | 5 +- editor.planx.uk/pnpm-lock.yaml | 1208 ++++++++++++++++++++------------ 2 files changed, 755 insertions(+), 458 deletions(-) diff --git a/editor.planx.uk/package.json b/editor.planx.uk/package.json index b5fcbef8f8..297c6d69d5 100644 --- a/editor.planx.uk/package.json +++ b/editor.planx.uk/package.json @@ -77,7 +77,7 @@ "react-navi-helmet-async": "^0.15.0", "react-scripts": "^5.0.1", "react-toastify": "^9.1.3", - "react-use": "^17.4.2", + "react-use": "^17.5.0", "reconnecting-websocket": "^4.4.0", "rxjs": "^7.8.1", "scroll-into-view-if-needed": "^3.1.0", @@ -224,7 +224,8 @@ "nth-check@<2.0.1": ">=2.0.1", "postcss@<8.4.31": ">=8.4.31", "follow-redirects@<1.15.4": ">=1.15.4", - "braces@<3.0.3": ">=3.0.3" + "braces@<3.0.3": ">=3.0.3", + "fast-loops@<1.1.4": ">=1.1.4" } } } diff --git a/editor.planx.uk/pnpm-lock.yaml b/editor.planx.uk/pnpm-lock.yaml index 94afc869b1..7ea2dbb091 100644 --- a/editor.planx.uk/pnpm-lock.yaml +++ b/editor.planx.uk/pnpm-lock.yaml @@ -9,6 +9,7 @@ overrides: postcss@<8.4.31: '>=8.4.31' follow-redirects@<1.15.4: '>=1.15.4' braces@<3.0.3: '>=3.0.3' + fast-loops@<1.1.4: '>=1.1.4' dependencies: '@airbrake/browser': @@ -229,13 +230,13 @@ dependencies: version: 0.15.0(navi@0.15.0)(react-dom@18.2.0)(react-navi@0.15.0)(react@18.2.0) react-scripts: specifier: ^5.0.1 - version: 5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(@swc/core@1.6.3)(esbuild@0.21.3)(eslint@8.44.0)(react@18.2.0)(sass@1.71.1)(typescript@5.4.3) + version: 5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(@swc/core@1.6.13)(esbuild@0.21.3)(eslint@8.44.0)(react@18.2.0)(sass@1.71.1)(typescript@5.4.3) react-toastify: specifier: ^9.1.3 version: 9.1.3(react-dom@18.2.0)(react@18.2.0) react-use: - specifier: ^17.4.2 - version: 17.4.2(react-dom@18.2.0)(react@18.2.0) + specifier: ^17.5.0 + version: 17.5.0(react-dom@18.2.0)(react@18.2.0) reconnecting-websocket: specifier: ^4.4.0 version: 4.4.0 @@ -297,7 +298,7 @@ devDependencies: version: 7.23.3(@babel/core@7.22.5) '@craco/craco': specifier: ^7.1.0 - version: 7.1.0(@swc/core@1.6.3)(@types/node@17.0.45)(postcss@8.4.32)(react-scripts@5.0.1)(typescript@5.4.3) + version: 7.1.0(@swc/core@1.6.13)(@types/node@17.0.45)(postcss@8.4.32)(react-scripts@5.0.1)(typescript@5.4.3) '@react-theming/storybook-addon': specifier: ^1.1.10 version: 1.1.10(@storybook/addons@7.6.7)(@storybook/react@7.6.7)(@storybook/theming@7.6.7)(react-dom@18.2.0)(react@18.2.0) @@ -327,7 +328,7 @@ devDependencies: version: 7.6.7(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.3) '@storybook/react-webpack5': specifier: ^7.6.7 - version: 7.6.7(@babel/core@7.22.5)(@swc/core@1.6.3)(esbuild@0.21.3)(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.3) + version: 7.6.7(@babel/core@7.22.5)(@swc/core@1.6.13)(esbuild@0.21.3)(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.3) '@storybook/testing-library': specifier: ^0.2.2 version: 0.2.2 @@ -342,7 +343,7 @@ devDependencies: version: 14.2.1(react-dom@18.2.0)(react@18.2.0) '@testing-library/user-event': specifier: ^14.4.3 - version: 14.4.3(@testing-library/dom@10.1.0) + version: 14.4.3(@testing-library/dom@10.3.1) '@types/dompurify': specifier: ^3.0.5 version: 3.0.5 @@ -477,7 +478,7 @@ devDependencies: version: 5.4.3 webpack: specifier: ^5.91.0 - version: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + version: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) packages: @@ -567,6 +568,7 @@ packages: /@aw-web-design/x-default-browser@1.4.126: resolution: {integrity: sha512-Xk1sIhyNC/esHGGVjL/niHLowM0csl/kFO5uawBy4IrWwy0o1G8LGt3jP6nmWGz+USxeeqbihAmp/oVZju6wug==} + hasBin: true dependencies: default-browser-id: 3.0.0 dev: true @@ -670,7 +672,7 @@ packages: dependencies: '@babel/compat-data': 7.24.7 '@babel/helper-validator-option': 7.24.7 - browserslist: 4.23.1 + browserslist: 4.23.2 lru-cache: 5.1.1 semver: 6.3.1 @@ -991,6 +993,7 @@ packages: /@babel/parser@7.24.7: resolution: {integrity: sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==} engines: {node: '>=6.0.0'} + hasBin: true dependencies: '@babel/types': 7.24.7 @@ -1065,6 +1068,7 @@ packages: /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.22.5): resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -1090,6 +1094,7 @@ packages: /@babel/plugin-proposal-logical-assignment-operators@7.20.7(@babel/core@7.22.5): resolution: {integrity: sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==} engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-logical-assignment-operators instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -1101,6 +1106,7 @@ packages: /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.22.5): resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -1111,6 +1117,7 @@ packages: /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.22.5): resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -1121,6 +1128,7 @@ packages: /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.22.5): resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -1134,6 +1142,7 @@ packages: /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.22.5): resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -1163,6 +1172,7 @@ packages: /@babel/plugin-proposal-private-property-in-object@7.21.11(@babel/core@7.22.5): resolution: {integrity: sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==} engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -1177,6 +1187,7 @@ packages: /@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.22.5): resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} engines: {node: '>=4'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-unicode-property-regex instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -3159,6 +3170,7 @@ packages: /@cnakazawa/watch@1.0.4: resolution: {integrity: sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==} engines: {node: '>=0.1.95'} + hasBin: true dependencies: exec-sh: 0.3.6 minimist: 1.2.8 @@ -3177,6 +3189,7 @@ packages: /@codemirror/basic-setup@0.19.3: resolution: {integrity: sha512-2hfO+QDk/HTpQzeYk1NyL1G9D5L7Sj78dtaQP8xBU42DKU9+OBPF5MdjLYnxP0jKzm6IfQfsLd89fnqW3rBVfQ==} + deprecated: In version 6.0, this package has been renamed to just 'codemirror' dependencies: '@codemirror/autocomplete': 0.19.15 '@codemirror/closebrackets': 0.19.2 @@ -3197,6 +3210,7 @@ packages: /@codemirror/closebrackets@0.19.2: resolution: {integrity: sha512-ClMPzPcPP0eQiDcVjtVPl6OLxgdtZSYDazsvT0AKl70V1OJva0eHgl4/6kCW3RZ0pb2n34i9nJz4eXCmK+TYDA==} + deprecated: As of 0.20.0, this package has been merged into @codemirror/autocomplete dependencies: '@codemirror/language': 0.19.10 '@codemirror/rangeset': 0.19.9 @@ -3218,6 +3232,7 @@ packages: /@codemirror/comment@0.19.1: resolution: {integrity: sha512-uGKteBuVWAC6fW+Yt8u27DOnXMT/xV4Ekk2Z5mRsiADCZDqYvryrJd6PLL5+8t64BVyocwQwNfz1UswYS2CtFQ==} + deprecated: As of 0.20.0, this package has been merged into @codemirror/commands dependencies: '@codemirror/state': 0.19.9 '@codemirror/text': 0.19.6 @@ -3226,6 +3241,7 @@ packages: /@codemirror/fold@0.19.4: resolution: {integrity: sha512-0SNSkRSOa6gymD6GauHa3sxiysjPhUC0SRVyTlvL52o0gz9GHdc8kNqNQskm3fBtGGOiSriGwF/kAsajRiGhVw==} + deprecated: As of 0.20.0, this package has been merged into @codemirror/language dependencies: '@codemirror/gutter': 0.19.9 '@codemirror/language': 0.19.10 @@ -3236,6 +3252,7 @@ packages: /@codemirror/gutter@0.19.9: resolution: {integrity: sha512-PFrtmilahin1g6uL27aG5tM/rqR9DZzZYZsIrCXA5Uc2OFTFqx4owuhoU9hqfYxHp5ovfvBwQ+txFzqS4vog6Q==} + deprecated: As of 0.20.0, this package has been merged into @codemirror/view dependencies: '@codemirror/rangeset': 0.19.9 '@codemirror/state': 0.19.9 @@ -3244,6 +3261,7 @@ packages: /@codemirror/highlight@0.19.8: resolution: {integrity: sha512-v/lzuHjrYR8MN2mEJcUD6fHSTXXli9C1XGYpr+ElV6fLBIUhMTNKR3qThp611xuWfXfwDxeL7ppcbkM/MzPV3A==} + deprecated: As of 0.20.0, this package has been split between @lezer/highlight and @codemirror/language dependencies: '@codemirror/language': 0.19.10 '@codemirror/rangeset': 0.19.9 @@ -3255,6 +3273,7 @@ packages: /@codemirror/history@0.19.2: resolution: {integrity: sha512-unhP4t3N2smzmHoo/Yio6ueWi+il8gm9VKrvi6wlcdGH5fOfVDNkmjHQ495SiR+EdOG35+3iNebSPYww0vN7ow==} + deprecated: As of 0.20.0, this package has been merged into @codemirror/commands dependencies: '@codemirror/state': 0.19.9 '@codemirror/view': 0.19.48 @@ -3302,6 +3321,7 @@ packages: /@codemirror/matchbrackets@0.19.4: resolution: {integrity: sha512-VFkaOKPNudAA5sGP1zikRHCEKU0hjYmkKpr04pybUpQvfTvNJXlReCyP0rvH/1iEwAGPL990ZTT+QrLdu4MeEA==} + deprecated: As of 0.20.0, this package has been merged into @codemirror/language dependencies: '@codemirror/language': 0.19.10 '@codemirror/state': 0.19.9 @@ -3311,6 +3331,7 @@ packages: /@codemirror/panel@0.19.1: resolution: {integrity: sha512-sYeOCMA3KRYxZYJYn5PNlt9yNsjy3zTNTrbYSfVgjgL9QomIVgOJWPO5hZ2sTN8lufO6lw0vTBsIPL9MSidmBg==} + deprecated: As of 0.20.0, this package has been merged into @codemirror/view dependencies: '@codemirror/state': 0.19.9 '@codemirror/view': 0.19.48 @@ -3318,12 +3339,14 @@ packages: /@codemirror/rangeset@0.19.9: resolution: {integrity: sha512-V8YUuOvK+ew87Xem+71nKcqu1SXd5QROMRLMS/ljT5/3MCxtgrRie1Cvild0G/Z2f1fpWxzX78V0U4jjXBorBQ==} + deprecated: As of 0.20.0, this package has been merged into @codemirror/state dependencies: '@codemirror/state': 0.19.9 dev: true /@codemirror/rectangular-selection@0.19.2: resolution: {integrity: sha512-AXK/p5eGwFJ9GJcLfntqN4dgY+XiIF7eHfXNQJX5HhQLSped2wJE6WuC1rMEaOlcpOqlb9mrNi/ZdUjSIj9mbA==} + deprecated: As of 0.20.0, this package has been merged into @codemirror/view dependencies: '@codemirror/state': 0.19.9 '@codemirror/text': 0.19.6 @@ -3349,6 +3372,7 @@ packages: /@codemirror/stream-parser@0.19.9: resolution: {integrity: sha512-WTmkEFSRCetpk8xIOvV2yyXdZs3DgYckM0IP7eFi4ewlxWnJO/H4BeJZLs4wQaydWsAqTQoDyIwNH1BCzK5LUQ==} + deprecated: As of 0.20.0, this package has been merged into @codemirror/language dependencies: '@codemirror/highlight': 0.19.8 '@codemirror/language': 0.19.10 @@ -3360,6 +3384,7 @@ packages: /@codemirror/text@0.19.6: resolution: {integrity: sha512-T9jnREMIygx+TPC1bOuepz18maGq/92q2a+n4qTqObKwvNMg+8cMTslb8yxeEDEq7S3kpgGWxgO1UWbQRij0dA==} + deprecated: As of 0.20.0, this package has been merged into @codemirror/state dev: true /@codemirror/theme-one-dark@0.19.0: @@ -3372,6 +3397,7 @@ packages: /@codemirror/tooltip@0.19.16: resolution: {integrity: sha512-zxKDHryUV5/RS45AQL+wOeN+i7/l81wK56OMnUPoTSzCWNITfxHn7BToDsjtrRKbzHqUxKYmBnn/4hPjpZ4WJQ==} + deprecated: As of 0.20.0, this package has been merged into @codemirror/view dependencies: '@codemirror/state': 0.19.9 '@codemirror/view': 0.19.48 @@ -3394,7 +3420,7 @@ packages: dev: true optional: true - /@craco/craco@7.1.0(@swc/core@1.6.3)(@types/node@17.0.45)(postcss@8.4.32)(react-scripts@5.0.1)(typescript@5.4.3): + /@craco/craco@7.1.0(@swc/core@1.6.13)(@types/node@17.0.45)(postcss@8.4.32)(react-scripts@5.0.1)(typescript@5.4.3): resolution: {integrity: sha512-oRAcPIKYrfPXp9rSzlsDNeOaVtDiKhoyqSXUoqiK24jCkHr4T8m/a2f74yXIzCbIheoUWDOIfWZyRgFgT+cpqA==} engines: {node: '>=6'} hasBin: true @@ -3403,10 +3429,10 @@ packages: dependencies: autoprefixer: 10.4.16(postcss@8.4.32) cosmiconfig: 7.1.0 - cosmiconfig-typescript-loader: 1.0.9(@swc/core@1.6.3)(@types/node@17.0.45)(cosmiconfig@7.1.0)(typescript@5.4.3) + cosmiconfig-typescript-loader: 1.0.9(@swc/core@1.6.13)(@types/node@17.0.45)(cosmiconfig@7.1.0)(typescript@5.4.3) cross-spawn: 7.0.3 lodash: 4.17.21 - react-scripts: 5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(@swc/core@1.6.3)(esbuild@0.21.3)(eslint@8.44.0)(react@18.2.0)(sass@1.71.1)(typescript@5.4.3) + react-scripts: 5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(@swc/core@1.6.13)(esbuild@0.21.3)(eslint@8.44.0)(react@18.2.0)(sass@1.71.1)(typescript@5.4.3) semver: 7.6.2 webpack-merge: 5.10.0 transitivePeerDependencies: @@ -4465,8 +4491,8 @@ packages: eslint-visitor-keys: 3.4.3 dev: false - /@eslint-community/regexpp@4.10.1: - resolution: {integrity: sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==} + /@eslint-community/regexpp@4.11.0: + resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} /@eslint/eslintrc@2.1.4: @@ -4498,40 +4524,40 @@ packages: resolution: {integrity: sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ==} dev: true - /@floating-ui/core@1.6.2: - resolution: {integrity: sha512-+2XpQV9LLZeanU4ZevzRnGFg2neDeKHgFLjP6YLW+tly0IvrhqT4u8enLGjLH3qeh85g19xY5rsAusfwTdn5lg==} + /@floating-ui/core@1.6.4: + resolution: {integrity: sha512-a4IowK4QkXl4SCWTGUR0INAfEOX3wtsYw3rKK5InQEHMGObkR8Xk44qYQD9P4r6HHw0iIfK6GUKECmY8sTkqRA==} dependencies: - '@floating-ui/utils': 0.2.2 + '@floating-ui/utils': 0.2.4 - /@floating-ui/dom@1.6.5: - resolution: {integrity: sha512-Nsdud2X65Dz+1RHjAIP0t8z5e2ff/IRbei6BqFrl1urT8sDVzM1HMQ+R0XcU5ceRfyO3I6ayeqIfh+6Wb8LGTw==} + /@floating-ui/dom@1.6.7: + resolution: {integrity: sha512-wmVfPG5o2xnKDU4jx/m4w5qva9FWHcnZ8BvzEe90D/RpwsJaTAVYPEPdQ8sbr/N8zZTAHlZUTQdqg8ZUbzHmng==} dependencies: - '@floating-ui/core': 1.6.2 - '@floating-ui/utils': 0.2.2 + '@floating-ui/core': 1.6.4 + '@floating-ui/utils': 0.2.4 - /@floating-ui/react-dom@2.1.0(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-lNzj5EQmEKn5FFKc04+zasr09h/uX8RtJRNj5gUXsSQIXHVWTVh+hVAg1vOMCexkX8EgvemMvIFpQfkosnVNyA==} + /@floating-ui/react-dom@2.1.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' dependencies: - '@floating-ui/dom': 1.6.5 + '@floating-ui/dom': 1.6.7 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - /@floating-ui/react-dom@2.1.0(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-lNzj5EQmEKn5FFKc04+zasr09h/uX8RtJRNj5gUXsSQIXHVWTVh+hVAg1vOMCexkX8EgvemMvIFpQfkosnVNyA==} + /@floating-ui/react-dom@2.1.1(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' dependencies: - '@floating-ui/dom': 1.6.5 + '@floating-ui/dom': 1.6.7 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) dev: false - /@floating-ui/utils@0.2.2: - resolution: {integrity: sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==} + /@floating-ui/utils@0.2.4: + resolution: {integrity: sha512-dWO2pw8hhi+WrXq1YJy2yCuWoL20PddgGaqTgVe4cOS9Q6qklXCiA1tJEqX6BEwRNSCP84/afac9hd4MS+zEUA==} /@focus-reactive/react-yaml@1.1.2(react@18.2.0): resolution: {integrity: sha512-X9/rmfuDHR+beDym2206RsD5m/5EfH26vVuGVbLXy7+BunPcVBRqwe2WbvCyoHloMUX7Ccp2xrLwmmPrvZ9hrA==} @@ -4571,6 +4597,7 @@ packages: /@humanwhocodes/config-array@0.11.14: resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead dependencies: '@humanwhocodes/object-schema': 2.0.3 debug: 4.3.5 @@ -4584,6 +4611,7 @@ packages: /@humanwhocodes/object-schema@2.0.3: resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + deprecated: Use @eslint/object-schema instead /@icons/material@0.2.4(react@18.2.0): resolution: {integrity: sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw==} @@ -4915,7 +4943,7 @@ packages: engines: {node: '>=6.0.0'} dependencies: '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping': 0.3.25 /@jridgewell/resolve-uri@3.1.2: @@ -4932,20 +4960,20 @@ packages: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - /@jridgewell/sourcemap-codec@1.4.15: - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + /@jridgewell/sourcemap-codec@1.5.0: + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} /@jridgewell/trace-mapping@0.3.25: resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 /@jridgewell/trace-mapping@0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 dev: true /@jsdevtools/ono@7.1.3: @@ -5141,7 +5169,7 @@ packages: optional: true dependencies: '@babel/runtime': 7.24.7 - '@floating-ui/react-dom': 2.1.0(react-dom@18.2.0)(react@18.2.0) + '@floating-ui/react-dom': 2.1.1(react-dom@18.2.0)(react@18.2.0) '@mui/types': 7.2.14(@types/react@18.2.45) '@mui/utils': 5.15.2(@types/react@18.2.45)(react@18.2.0) '@popperjs/core': 2.11.8 @@ -5164,7 +5192,7 @@ packages: optional: true dependencies: '@babel/runtime': 7.24.7 - '@floating-ui/react-dom': 2.1.0(react-dom@18.3.1)(react@18.3.1) + '@floating-ui/react-dom': 2.1.1(react-dom@18.3.1)(react@18.3.1) '@mui/types': 7.2.14(@types/react@18.2.45) '@mui/utils': 5.15.2(@types/react@18.2.45)(react@18.3.1) '@popperjs/core': 2.11.8 @@ -5187,9 +5215,9 @@ packages: optional: true dependencies: '@babel/runtime': 7.24.7 - '@floating-ui/react-dom': 2.1.0(react-dom@18.2.0)(react@18.2.0) + '@floating-ui/react-dom': 2.1.1(react-dom@18.2.0)(react@18.2.0) '@mui/types': 7.2.14(@types/react@18.2.45) - '@mui/utils': 5.15.20(@types/react@18.2.45)(react@18.2.0) + '@mui/utils': 5.16.0(@types/react@18.2.45)(react@18.2.0) '@popperjs/core': 2.11.8 '@types/react': 18.2.45 clsx: 2.1.1 @@ -5198,8 +5226,8 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@mui/core-downloads-tracker@5.15.20: - resolution: {integrity: sha512-DoL2ppgldL16utL8nNyj/P12f8mCNdx/Hb/AJnX9rLY4b52hCMIx1kH83pbXQ6uMy6n54M3StmEbvSGoj2OFuA==} + /@mui/core-downloads-tracker@5.16.0: + resolution: {integrity: sha512-8SLffXYPRVpcZx5QzxNE8fytTqzp+IuU3deZbQWg/vSaTlDpR5YVrQ4qQtXTi5cRdhOufV5INylmwlKK+//nPw==} dev: false /@mui/icons-material@5.15.2(@mui/material@5.15.2)(@types/react@18.2.45)(react@18.2.0): @@ -5242,9 +5270,9 @@ packages: '@emotion/styled': 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.45)(react@18.2.0) '@mui/base': 5.0.0-beta.40(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) '@mui/material': 5.15.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) - '@mui/system': 5.15.20(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.45)(react@18.2.0) + '@mui/system': 5.16.0(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.45)(react@18.2.0) '@mui/types': 7.2.14(@types/react@18.2.45) - '@mui/utils': 5.15.20(@types/react@18.2.45)(react@18.2.0) + '@mui/utils': 5.16.0(@types/react@18.2.45)(react@18.2.0) '@types/react': 18.2.45 clsx: 2.1.1 prop-types: 15.8.1 @@ -5273,8 +5301,8 @@ packages: '@emotion/react': 11.11.1(@types/react@18.2.45)(react@18.2.0) '@emotion/styled': 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.45)(react@18.2.0) '@mui/base': 5.0.0-beta.29(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) - '@mui/core-downloads-tracker': 5.15.20 - '@mui/system': 5.15.20(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.45)(react@18.2.0) + '@mui/core-downloads-tracker': 5.16.0 + '@mui/system': 5.16.0(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.45)(react@18.2.0) '@mui/types': 7.2.14(@types/react@18.2.45) '@mui/utils': 5.15.2(@types/react@18.2.45)(react@18.2.0) '@types/react': 18.2.45 @@ -5309,8 +5337,8 @@ packages: '@emotion/react': 11.11.4(@types/react@18.2.45)(react@18.3.1) '@emotion/styled': 11.11.5(@emotion/react@11.11.4)(@types/react@18.2.45)(react@18.3.1) '@mui/base': 5.0.0-beta.29(@types/react@18.2.45)(react-dom@18.3.1)(react@18.3.1) - '@mui/core-downloads-tracker': 5.15.20 - '@mui/system': 5.15.20(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(@types/react@18.2.45)(react@18.3.1) + '@mui/core-downloads-tracker': 5.16.0 + '@mui/system': 5.16.0(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(@types/react@18.2.45)(react@18.3.1) '@mui/types': 7.2.14(@types/react@18.2.45) '@mui/utils': 5.15.2(@types/react@18.2.45)(react@18.3.1) '@types/react': 18.2.45 @@ -5324,8 +5352,8 @@ packages: react-transition-group: 4.4.5(react-dom@18.3.1)(react@18.3.1) dev: false - /@mui/private-theming@5.15.20(@types/react@18.2.45)(react@18.2.0): - resolution: {integrity: sha512-BK8F94AIqSrnaPYXf2KAOjGZJgWfvqAVQ2gVR3EryvQFtuBnG6RwodxrCvd3B48VuMy6Wsk897+lQMUxJyk+6g==} + /@mui/private-theming@5.16.0(@types/react@18.2.45)(react@18.2.0): + resolution: {integrity: sha512-sYpubkO1MZOnxNyVOClrPNOTs0MfuRVVnAvCeMaOaXt6GimgQbnUcshYv2pSr6PFj+Mqzdff/FYOBceK8u5QgA==} engines: {node: '>=12.0.0'} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 @@ -5335,14 +5363,14 @@ packages: optional: true dependencies: '@babel/runtime': 7.24.7 - '@mui/utils': 5.15.20(@types/react@18.2.45)(react@18.2.0) + '@mui/utils': 5.16.0(@types/react@18.2.45)(react@18.2.0) '@types/react': 18.2.45 prop-types: 15.8.1 react: 18.2.0 dev: false - /@mui/private-theming@5.15.20(@types/react@18.2.45)(react@18.3.1): - resolution: {integrity: sha512-BK8F94AIqSrnaPYXf2KAOjGZJgWfvqAVQ2gVR3EryvQFtuBnG6RwodxrCvd3B48VuMy6Wsk897+lQMUxJyk+6g==} + /@mui/private-theming@5.16.0(@types/react@18.2.45)(react@18.3.1): + resolution: {integrity: sha512-sYpubkO1MZOnxNyVOClrPNOTs0MfuRVVnAvCeMaOaXt6GimgQbnUcshYv2pSr6PFj+Mqzdff/FYOBceK8u5QgA==} engines: {node: '>=12.0.0'} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 @@ -5352,7 +5380,7 @@ packages: optional: true dependencies: '@babel/runtime': 7.24.7 - '@mui/utils': 5.15.20(@types/react@18.2.45)(react@18.3.1) + '@mui/utils': 5.16.0(@types/react@18.2.45)(react@18.3.1) '@types/react': 18.2.45 prop-types: 15.8.1 react: 18.3.1 @@ -5402,8 +5430,8 @@ packages: react: 18.3.1 dev: false - /@mui/system@5.15.20(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.45)(react@18.2.0): - resolution: {integrity: sha512-LoMq4IlAAhxzL2VNUDBTQxAb4chnBe8JvRINVNDiMtHE2PiPOoHlhOPutSxEbaL5mkECPVWSv6p8JEV+uykwIA==} + /@mui/system@5.16.0(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.45)(react@18.2.0): + resolution: {integrity: sha512-9YbkC2m3+pNumAvubYv+ijLtog6puJ0fJ6rYfzfLCM47pWrw3m+30nXNM8zMgDaKL6vpfWJcCXm+LPaWBpy7sw==} engines: {node: '>=12.0.0'} peerDependencies: '@emotion/react': ^11.5.0 @@ -5421,10 +5449,10 @@ packages: '@babel/runtime': 7.24.7 '@emotion/react': 11.11.1(@types/react@18.2.45)(react@18.2.0) '@emotion/styled': 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.45)(react@18.2.0) - '@mui/private-theming': 5.15.20(@types/react@18.2.45)(react@18.2.0) + '@mui/private-theming': 5.16.0(@types/react@18.2.45)(react@18.2.0) '@mui/styled-engine': 5.15.14(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) '@mui/types': 7.2.14(@types/react@18.2.45) - '@mui/utils': 5.15.20(@types/react@18.2.45)(react@18.2.0) + '@mui/utils': 5.16.0(@types/react@18.2.45)(react@18.2.0) '@types/react': 18.2.45 clsx: 2.1.1 csstype: 3.1.3 @@ -5432,8 +5460,8 @@ packages: react: 18.2.0 dev: false - /@mui/system@5.15.20(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(@types/react@18.2.45)(react@18.3.1): - resolution: {integrity: sha512-LoMq4IlAAhxzL2VNUDBTQxAb4chnBe8JvRINVNDiMtHE2PiPOoHlhOPutSxEbaL5mkECPVWSv6p8JEV+uykwIA==} + /@mui/system@5.16.0(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(@types/react@18.2.45)(react@18.3.1): + resolution: {integrity: sha512-9YbkC2m3+pNumAvubYv+ijLtog6puJ0fJ6rYfzfLCM47pWrw3m+30nXNM8zMgDaKL6vpfWJcCXm+LPaWBpy7sw==} engines: {node: '>=12.0.0'} peerDependencies: '@emotion/react': ^11.5.0 @@ -5451,10 +5479,10 @@ packages: '@babel/runtime': 7.24.7 '@emotion/react': 11.11.4(@types/react@18.2.45)(react@18.3.1) '@emotion/styled': 11.11.5(@emotion/react@11.11.4)(@types/react@18.2.45)(react@18.3.1) - '@mui/private-theming': 5.15.20(@types/react@18.2.45)(react@18.3.1) + '@mui/private-theming': 5.16.0(@types/react@18.2.45)(react@18.3.1) '@mui/styled-engine': 5.15.14(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1) '@mui/types': 7.2.14(@types/react@18.2.45) - '@mui/utils': 5.15.20(@types/react@18.2.45)(react@18.3.1) + '@mui/utils': 5.16.0(@types/react@18.2.45)(react@18.3.1) '@types/react': 18.2.45 clsx: 2.1.1 csstype: 3.1.3 @@ -5509,8 +5537,8 @@ packages: react-is: 18.3.1 dev: false - /@mui/utils@5.15.20(@types/react@18.2.45)(react@18.2.0): - resolution: {integrity: sha512-mAbYx0sovrnpAu1zHc3MDIhPqL8RPVC5W5xcO1b7PiSCJPtckIZmBkp8hefamAvUiAV8gpfMOM6Zb+eSisbI2A==} + /@mui/utils@5.16.0(@types/react@18.2.45)(react@18.2.0): + resolution: {integrity: sha512-kLLi5J1xY+mwtUlMb8Ubdxf4qFAA1+U7WPBvjM/qQ4CIwLCohNb0sHo1oYPufjSIH/Z9+dhVxD7dJlfGjd1AVA==} engines: {node: '>=12.0.0'} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 @@ -5527,8 +5555,8 @@ packages: react-is: 18.3.1 dev: false - /@mui/utils@5.15.20(@types/react@18.2.45)(react@18.3.1): - resolution: {integrity: sha512-mAbYx0sovrnpAu1zHc3MDIhPqL8RPVC5W5xcO1b7PiSCJPtckIZmBkp8hefamAvUiAV8gpfMOM6Zb+eSisbI2A==} + /@mui/utils@5.16.0(@types/react@18.2.45)(react@18.3.1): + resolution: {integrity: sha512-kLLi5J1xY+mwtUlMb8Ubdxf4qFAA1+U7WPBvjM/qQ4CIwLCohNb0sHo1oYPufjSIH/Z9+dhVxD7dJlfGjd1AVA==} engines: {node: '>=12.0.0'} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 @@ -5560,6 +5588,7 @@ packages: /@nicolo-ribaudo/semver-v6@6.3.3: resolution: {integrity: sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg==} + hasBin: true /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -5593,8 +5622,8 @@ packages: jspdf: 2.5.1 lit: 3.1.4 ol: 9.2.4 - ol-ext: 4.0.18(ol@9.2.4) - ol-mapbox-style: 12.3.3(ol@9.2.4) + ol-ext: 4.0.19(ol@9.2.4) + ol-mapbox-style: 12.3.4(ol@9.2.4) postcode: 5.1.0 proj4: 2.11.0 rambda: 8.6.0 @@ -5644,7 +5673,7 @@ packages: react-refresh: 0.11.0 schema-utils: 4.2.0 source-map: 0.7.4 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) webpack-dev-server: 4.15.2(webpack@5.91.0) /@pmmmwh/react-refresh-webpack-plugin@0.5.15(react-refresh@0.14.0)(webpack@5.91.0): @@ -5681,7 +5710,7 @@ packages: react-refresh: 0.14.0 schema-utils: 4.2.0 source-map: 0.7.4 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) dev: true /@popperjs/core@2.11.8: @@ -5700,6 +5729,10 @@ packages: '@babel/runtime': 7.24.7 dev: true + /@radix-ui/primitive@1.1.0: + resolution: {integrity: sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==} + dev: true + /@radix-ui/react-arrow@1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==} peerDependencies: @@ -5745,6 +5778,29 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true + /@radix-ui/react-collection@1.1.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.2.45)(react@18.2.0) + '@radix-ui/react-context': 1.1.0(@types/react@18.2.45)(react@18.2.0) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.1.0(@types/react@18.2.45)(react@18.2.0) + '@types/react': 18.2.45 + '@types/react-dom': 18.2.18 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: true + /@radix-ui/react-compose-refs@1.0.1(@types/react@18.2.45)(react@18.2.0): resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} peerDependencies: @@ -5759,6 +5815,19 @@ packages: react: 18.2.0 dev: true + /@radix-ui/react-compose-refs@1.1.0(@types/react@18.2.45)(react@18.2.0): + resolution: {integrity: sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.45 + react: 18.2.0 + dev: true + /@radix-ui/react-context@1.0.1(@types/react@18.2.45)(react@18.2.0): resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} peerDependencies: @@ -5773,6 +5842,19 @@ packages: react: 18.2.0 dev: true + /@radix-ui/react-context@1.1.0(@types/react@18.2.45)(react@18.2.0): + resolution: {integrity: sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.45 + react: 18.2.0 + dev: true + /@radix-ui/react-direction@1.0.1(@types/react@18.2.45)(react@18.2.0): resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} peerDependencies: @@ -5787,6 +5869,19 @@ packages: react: 18.2.0 dev: true + /@radix-ui/react-direction@1.1.0(@types/react@18.2.45)(react@18.2.0): + resolution: {integrity: sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.45 + react: 18.2.0 + dev: true + /@radix-ui/react-dismissable-layer@1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg==} peerDependencies: @@ -5864,6 +5959,20 @@ packages: react: 18.2.0 dev: true + /@radix-ui/react-id@1.1.0(@types/react@18.2.45)(react@18.2.0): + resolution: {integrity: sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.2.45)(react@18.2.0) + '@types/react': 18.2.45 + react: 18.2.0 + dev: true + /@radix-ui/react-popper@1.1.2(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-1CnGGfFi/bbqtJZZ0P/NQY20xdG3E0LALJaLUEoKwPLwl6PPPfbeiCqMVQnhoFRAxjJj4RpBRJzDmUgsex2tSg==} peerDependencies: @@ -5878,7 +5987,7 @@ packages: optional: true dependencies: '@babel/runtime': 7.24.7 - '@floating-ui/react-dom': 2.1.0(react-dom@18.2.0)(react@18.2.0) + '@floating-ui/react-dom': 2.1.1(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.45)(react@18.2.0) '@radix-ui/react-context': 1.0.1(@types/react@18.2.45)(react@18.2.0) @@ -5936,29 +6045,48 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true - /@radix-ui/react-roving-focus@1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==} + /@radix-ui/react-primitive@2.0.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.7 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.45)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.45)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.2.45)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.2.45)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.45)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.45)(react@18.2.0) + '@radix-ui/react-slot': 1.1.0(@types/react@18.2.45)(react@18.2.0) + '@types/react': 18.2.45 + '@types/react-dom': 18.2.18 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: true + + /@radix-ui/react-roving-focus@1.1.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-EA6AMGeq9AEeQDeSH0aZgG198qkfHSbvWTf1HvoDmOB5bBG/qTxjYMWUKMnYiV6J/iP/J8MEFSuB2zRU2n7ODA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.2.45)(react@18.2.0) + '@radix-ui/react-context': 1.1.0(@types/react@18.2.45)(react@18.2.0) + '@radix-ui/react-direction': 1.1.0(@types/react@18.2.45)(react@18.2.0) + '@radix-ui/react-id': 1.1.0(@types/react@18.2.45)(react@18.2.0) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.2.45)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.2.45)(react@18.2.0) '@types/react': 18.2.45 '@types/react-dom': 18.2.18 react: 18.2.0 @@ -6006,21 +6134,20 @@ packages: react-remove-scroll: 2.5.5(@types/react@18.2.45)(react@18.2.0) dev: true - /@radix-ui/react-separator@1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-itYmTy/kokS21aiV5+Z56MZB54KrhPgn6eHDKkFeOLR34HMN2s8PaN47qZZAGnvupcjxHaFZnW4pQEh0BvvVuw==} + /@radix-ui/react-separator@1.1.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-3uBAs+egzvJBDZAzvb/n4NxxOYpnspmWxO2u5NbZ8Y6FM/NdrGSF9bop3Cf6F6C71z1rTSn8KV0Fo2ZVd79lGA==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.7 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) '@types/react': 18.2.45 '@types/react-dom': 18.2.18 react: 18.2.0 @@ -6042,77 +6169,88 @@ packages: react: 18.2.0 dev: true - /@radix-ui/react-toggle-group@1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-Uaj/M/cMyiyT9Bx6fOZO0SAG4Cls0GptBWiBmBxofmDbNVnYYoyRWj/2M/6VCi/7qcXFWnHhRUfdfZFvvkuu8A==} + /@radix-ui/react-slot@1.1.0(@types/react@18.2.45)(react@18.2.0): + resolution: {integrity: sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.2.45)(react@18.2.0) + '@types/react': 18.2.45 + react: 18.2.0 + dev: true + + /@radix-ui/react-toggle-group@1.1.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-PpTJV68dZU2oqqgq75Uzto5o/XfOVgkrJ9rulVmfTKxWp3HfUjHE6CP/WLRR4AzPX9HWxw7vFow2me85Yu+Naw==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.7 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-context': 1.0.1(@types/react@18.2.45)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.2.45)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-toggle': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.45)(react@18.2.0) + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-context': 1.1.0(@types/react@18.2.45)(react@18.2.0) + '@radix-ui/react-direction': 1.1.0(@types/react@18.2.45)(react@18.2.0) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-roving-focus': 1.1.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-toggle': 1.1.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.2.45)(react@18.2.0) '@types/react': 18.2.45 '@types/react-dom': 18.2.18 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: true - /@radix-ui/react-toggle@1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-Pkqg3+Bc98ftZGsl60CLANXQBBQ4W3mTFS9EJvNxKMZ7magklKV69/id1mlAlOFDDfHvlCms0fx8fA4CMKDJHg==} + /@radix-ui/react-toggle@1.1.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-gwoxaKZ0oJ4vIgzsfESBuSgJNdc0rv12VhHgcqN0TEJmmZixXG/2XpsLK8kzNWYcnaoRIEEQc0bEi3dIvdUpjw==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.7 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.45)(react@18.2.0) + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.2.45)(react@18.2.0) '@types/react': 18.2.45 '@types/react-dom': 18.2.18 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: true - /@radix-ui/react-toolbar@1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-tBgmM/O7a07xbaEkYJWYTXkIdU/1pW4/KZORR43toC/4XWyBCURK0ei9kMUdp+gTPPKBgYLxXmRSH1EVcIDp8Q==} + /@radix-ui/react-toolbar@1.1.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-ZUKknxhMTL/4hPh+4DuaTot9aO7UD6Kupj4gqXCsBTayX1pD1L+0C2/2VZKXb4tIifQklZ3pf2hG9T+ns+FclQ==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.7 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-context': 1.0.1(@types/react@18.2.45)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.2.45)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-separator': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-toggle-group': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-context': 1.1.0(@types/react@18.2.45)(react@18.2.0) + '@radix-ui/react-direction': 1.1.0(@types/react@18.2.45)(react@18.2.0) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-roving-focus': 1.1.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-separator': 1.1.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-toggle-group': 1.1.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) '@types/react': 18.2.45 '@types/react-dom': 18.2.18 react: 18.2.0 @@ -6133,6 +6271,19 @@ packages: react: 18.2.0 dev: true + /@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.2.45)(react@18.2.0): + resolution: {integrity: sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.45 + react: 18.2.0 + dev: true + /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.2.45)(react@18.2.0): resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} peerDependencies: @@ -6148,6 +6299,20 @@ packages: react: 18.2.0 dev: true + /@radix-ui/react-use-controllable-state@1.1.0(@types/react@18.2.45)(react@18.2.0): + resolution: {integrity: sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.2.45)(react@18.2.0) + '@types/react': 18.2.45 + react: 18.2.0 + dev: true + /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.2.45)(react@18.2.0): resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} peerDependencies: @@ -6177,6 +6342,19 @@ packages: react: 18.2.0 dev: true + /@radix-ui/react-use-layout-effect@1.1.0(@types/react@18.2.45)(react@18.2.0): + resolution: {integrity: sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.45 + react: 18.2.0 + dev: true + /@radix-ui/react-use-previous@1.0.1(@types/react@18.2.45)(react@18.2.0): resolution: {integrity: sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==} peerDependencies: @@ -6562,7 +6740,7 @@ packages: react: optional: true dependencies: - '@storybook/csf': 0.1.8 + '@storybook/csf': 0.1.11 '@storybook/global': 5.0.0 react: 18.2.0 ts-dedent: 2.2.0 @@ -6613,14 +6791,14 @@ packages: '@storybook/client-logger': 7.6.7 '@storybook/components': 7.6.7(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) '@storybook/core-events': 7.6.7 - '@storybook/csf': 0.1.8 + '@storybook/csf': 0.1.11 '@storybook/docs-tools': 7.6.7 '@storybook/global': 5.0.0 '@storybook/manager-api': 7.6.7(react-dom@18.2.0)(react@18.2.0) '@storybook/preview-api': 7.6.7 '@storybook/theming': 7.6.7(react-dom@18.2.0)(react@18.2.0) '@storybook/types': 7.6.7 - '@types/lodash': 4.17.5 + '@types/lodash': 4.14.202 color-convert: 2.0.1 dequal: 2.0.3 lodash: 4.17.21 @@ -6641,11 +6819,11 @@ packages: - supports-color dev: true - /@storybook/builder-manager@8.1.10(prettier@3.3.2): + /@storybook/builder-manager@8.1.10(prettier@3.0.0): 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.10(prettier@3.3.2) + '@storybook/core-common': 8.1.10(prettier@3.0.0) '@storybook/manager': 8.1.10 '@storybook/node-logger': 8.1.10 '@types/ejs': 3.1.5 @@ -6681,15 +6859,15 @@ packages: '@storybook/node-logger': 7.6.7 '@storybook/preview': 7.6.7 '@storybook/preview-api': 7.6.7 - '@swc/core': 1.6.3 - '@types/node': 18.19.36 + '@swc/core': 1.6.13 + '@types/node': 18.19.39 '@types/semver': 7.5.8 babel-loader: 9.1.3(@babel/core@7.24.7)(webpack@5.91.0) browser-assert: 1.2.1 case-sensitive-paths-webpack-plugin: 2.4.0 constants-browserify: 1.0.0 css-loader: 6.10.0(webpack@5.91.0) - es-module-lexer: 1.5.3 + es-module-lexer: 1.5.4 express: 4.19.2 fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.4.3)(webpack@5.91.0) fs-extra: 11.2.0 @@ -6699,14 +6877,14 @@ packages: process: 0.11.10 semver: 7.6.2 style-loader: 3.3.4(webpack@5.91.0) - swc-loader: 0.2.6(@swc/core@1.6.3)(webpack@5.91.0) - terser-webpack-plugin: 5.3.10(@swc/core@1.6.3)(esbuild@0.21.3)(webpack@5.91.0) + swc-loader: 0.2.6(@swc/core@1.6.13)(webpack@5.91.0) + terser-webpack-plugin: 5.3.10(@swc/core@1.6.13)(esbuild@0.21.3)(webpack@5.91.0) ts-dedent: 2.2.0 typescript: 5.4.3 url: 0.11.3 util: 0.12.5 util-deprecate: 1.0.2 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) webpack-dev-middleware: 6.1.3(webpack@5.91.0) webpack-hot-middleware: 2.26.1 webpack-virtual-modules: 0.5.0 @@ -6726,7 +6904,7 @@ packages: '@storybook/client-logger': 7.6.7 '@storybook/core-events': 7.6.7 '@storybook/global': 5.0.0 - qs: 6.12.1 + qs: 6.12.3 telejson: 7.2.0 tiny-invariant: 1.3.3 dev: true @@ -6743,17 +6921,18 @@ packages: /@storybook/cli@8.1.10(@babel/preset-env@7.22.6)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-7Fm2Qgk33sHayZ0QABqwe1Jto4yyVRVW6kTrSeP5IuLh+mn244RgxBvWtGCyL1EcWDFI7PYUFa0HxgTCq7C+OA==} + hasBin: true dependencies: '@babel/core': 7.24.7 '@babel/types': 7.24.7 '@ndelangen/get-tarball': 3.0.9 '@storybook/codemod': 8.1.10 - '@storybook/core-common': 8.1.10(prettier@3.3.2) + '@storybook/core-common': 8.1.10(prettier@3.0.0) '@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/core-server': 8.1.10(prettier@3.0.0)(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/telemetry': 8.1.10(prettier@3.0.0) '@storybook/types': 8.1.10 '@types/semver': 7.5.8 '@yarnpkg/fslib': 2.10.3 @@ -6768,7 +6947,7 @@ packages: fs-extra: 11.2.0 get-npm-tarball-url: 2.1.0 giget: 1.2.3 - globby: 14.0.1 + globby: 14.0.2 jscodeshift: 0.15.2(@babel/preset-env@7.22.6) leven: 3.1.0 ora: 5.4.1 @@ -6815,13 +6994,13 @@ packages: '@babel/core': 7.24.7 '@babel/preset-env': 7.24.7(@babel/core@7.24.7) '@babel/types': 7.24.7 - '@storybook/csf': 0.1.8 + '@storybook/csf': 0.1.11 '@storybook/csf-tools': 8.1.10 '@storybook/node-logger': 8.1.10 '@storybook/types': 8.1.10 '@types/cross-spawn': 6.0.6 cross-spawn: 7.0.3 - globby: 14.0.1 + globby: 14.0.2 jscodeshift: 0.15.2(@babel/preset-env@7.24.7) lodash: 4.17.21 prettier: 3.3.2 @@ -6838,9 +7017,9 @@ packages: react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: '@radix-ui/react-select': 1.2.2(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-toolbar': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-toolbar': 1.1.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) '@storybook/client-logger': 7.6.7 - '@storybook/csf': 0.1.8 + '@storybook/csf': 0.1.11 '@storybook/global': 5.0.0 '@storybook/theming': 7.6.7(react-dom@18.2.0)(react@18.2.0) '@storybook/types': 7.6.7 @@ -6868,7 +7047,7 @@ packages: '@storybook/node-logger': 7.6.7 '@storybook/types': 7.6.7 '@types/find-cache-dir': 3.2.1 - '@types/node': 18.19.36 + '@types/node': 18.19.39 '@types/node-fetch': 2.6.11 '@types/pretty-hrtime': 1.0.3 chalk: 4.1.2 @@ -6878,7 +7057,7 @@ packages: find-cache-dir: 3.3.2 find-up: 5.0.0 fs-extra: 11.2.0 - glob: 10.4.2 + glob: 10.4.5 handlebars: 4.7.8 lazy-universal-dotenv: 4.0.0 node-fetch: 2.7.0 @@ -6892,7 +7071,7 @@ packages: - supports-color dev: true - /@storybook/core-common@8.1.10(prettier@3.3.2): + /@storybook/core-common@8.1.10(prettier@3.0.0): resolution: {integrity: sha512-+0GhgDRQwUlXu1lY77NdLnVBVycCEW0DG7eu7rvLYYkTyNRxbdl2RWsQpjr/j4sxqT6u82l9/b+RWpmsl4MgMQ==} peerDependencies: prettier: ^2 || ^3 @@ -6915,14 +7094,14 @@ packages: find-cache-dir: 3.3.2 find-up: 5.0.0 fs-extra: 11.2.0 - glob: 10.4.2 + glob: 10.4.5 handlebars: 4.7.8 lazy-universal-dotenv: 4.0.0 node-fetch: 2.7.0 picomatch: 2.3.1 pkg-dir: 5.0.0 - prettier: 3.3.2 - prettier-fallback: /prettier@3.3.2 + prettier: 3.0.0 + prettier-fallback: /prettier@3.0.0 pretty-hrtime: 1.0.3 resolve-from: 5.0.0 semver: 7.6.2 @@ -6950,22 +7129,22 @@ packages: /@storybook/core-events@8.1.10: resolution: {integrity: sha512-aS4zsBVyJds74+rAW0IfTEjULDCQwXecVpQfv11B8/89/07s3bOPssGGoTtCTaN4pHbduywE6MxbmFvTmXOFCA==} dependencies: - '@storybook/csf': 0.1.8 + '@storybook/csf': 0.1.11 ts-dedent: 2.2.0 dev: true - /@storybook/core-server@8.1.10(prettier@3.3.2)(react-dom@18.2.0)(react@18.2.0): + /@storybook/core-server@8.1.10(prettier@3.0.0)(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.7 '@babel/parser': 7.24.7 '@discoveryjs/json-ext': 0.5.7 - '@storybook/builder-manager': 8.1.10(prettier@3.3.2) + '@storybook/builder-manager': 8.1.10(prettier@3.0.0) '@storybook/channels': 8.1.10 - '@storybook/core-common': 8.1.10(prettier@3.3.2) + '@storybook/core-common': 8.1.10(prettier@3.0.0) '@storybook/core-events': 8.1.10 - '@storybook/csf': 0.1.8 + '@storybook/csf': 0.1.11 '@storybook/csf-tools': 8.1.10 '@storybook/docs-mdx': 3.1.0-next.0 '@storybook/global': 5.0.0 @@ -6973,11 +7152,11 @@ packages: '@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/telemetry': 8.1.10(prettier@3.0.0) '@storybook/types': 8.1.10 '@types/detect-port': 1.3.5 '@types/diff': 5.2.1 - '@types/node': 18.19.36 + '@types/node': 18.19.39 '@types/pretty-hrtime': 1.0.3 '@types/semver': 7.5.8 better-opn: 3.0.2 @@ -6988,7 +7167,7 @@ packages: diff: 5.2.0 express: 4.19.2 fs-extra: 11.2.0 - globby: 14.0.1 + globby: 14.0.2 lodash: 4.17.21 open: 8.4.2 pretty-hrtime: 1.0.3 @@ -7001,7 +7180,7 @@ packages: util: 0.12.5 util-deprecate: 1.0.2 watchpack: 2.4.1 - ws: 8.17.1 + ws: 8.18.0 transitivePeerDependencies: - bufferutil - encoding @@ -7018,7 +7197,7 @@ packages: '@storybook/core-common': 7.6.7 '@storybook/node-logger': 7.6.7 '@storybook/types': 7.6.7 - '@types/node': 18.19.36 + '@types/node': 18.19.39 ts-dedent: 2.2.0 transitivePeerDependencies: - encoding @@ -7029,7 +7208,7 @@ packages: resolution: {integrity: sha512-YL7e6H4iVcsDI0UpgpdQX2IiGDrlbgaQMHQgDLWXmZyKxBcy0ONROAX5zoT1ml44EHkL60TMaG4f7SinviJCog==} dependencies: '@storybook/csf-tools': 7.6.7 - unplugin: 1.10.1 + unplugin: 1.11.0 transitivePeerDependencies: - supports-color dev: true @@ -7041,7 +7220,7 @@ packages: '@babel/parser': 7.24.7 '@babel/traverse': 7.24.7 '@babel/types': 7.24.7 - '@storybook/csf': 0.1.8 + '@storybook/csf': 0.1.11 '@storybook/types': 7.6.7 fs-extra: 11.2.0 recast: 0.23.9 @@ -7057,7 +7236,7 @@ packages: '@babel/parser': 7.24.7 '@babel/traverse': 7.24.7 '@babel/types': 7.24.7 - '@storybook/csf': 0.1.8 + '@storybook/csf': 0.1.11 '@storybook/types': 8.1.10 fs-extra: 11.2.0 recast: 0.23.9 @@ -7066,8 +7245,8 @@ packages: - supports-color dev: true - /@storybook/csf@0.1.8: - resolution: {integrity: sha512-Ntab9o7LjBCbFIao5l42itFiaSh/Qu+l16l/r/9qmV9LnYZkO+JQ7tzhdlwpgJfhs+B5xeejpdAtftDRyXNajw==} + /@storybook/csf@0.1.11: + resolution: {integrity: sha512-dHYFQH3mA+EtnCkHXzicbLgsvzYjcDJ1JWsogbItZogkPHgSJM/Wr71uMkcvw8v9mmCyP4NpXJuu6bPoVsOnzg==} dependencies: type-fest: 2.19.0 dev: true @@ -7112,7 +7291,7 @@ packages: '@storybook/channels': 7.6.7 '@storybook/client-logger': 7.6.7 '@storybook/core-events': 7.6.7 - '@storybook/csf': 0.1.8 + '@storybook/csf': 0.1.11 '@storybook/global': 5.0.0 '@storybook/router': 7.6.7 '@storybook/theming': 7.6.7(react-dom@18.2.0)(react@18.2.0) @@ -7134,7 +7313,7 @@ packages: '@storybook/channels': 8.1.10 '@storybook/client-logger': 8.1.10 '@storybook/core-events': 8.1.10 - '@storybook/csf': 0.1.8 + '@storybook/csf': 0.1.11 '@storybook/global': 5.0.0 '@storybook/icons': 1.2.9(react-dom@18.2.0)(react@18.2.0) '@storybook/router': 8.1.10 @@ -7184,7 +7363,7 @@ packages: '@types/babel__core': 7.20.5 '@types/semver': 7.5.8 pnp-webpack-plugin: 1.7.0(typescript@5.4.3) - react-scripts: 5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(@swc/core@1.6.3)(esbuild@0.21.3)(eslint@8.44.0)(react@18.2.0)(sass@1.71.1)(typescript@5.4.3) + react-scripts: 5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(@swc/core@1.6.13)(esbuild@0.21.3)(eslint@8.44.0)(react@18.2.0)(sass@1.71.1)(typescript@5.4.3) semver: 7.6.2 transitivePeerDependencies: - '@types/webpack' @@ -7199,7 +7378,7 @@ packages: - webpack-plugin-serve dev: true - /@storybook/preset-react-webpack@7.6.7(@babel/core@7.22.5)(@swc/core@1.6.3)(esbuild@0.21.3)(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.3): + /@storybook/preset-react-webpack@7.6.7(@babel/core@7.22.5)(@swc/core@1.6.13)(esbuild@0.21.3)(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.3): resolution: {integrity: sha512-olKTivJmbyuiPIa99/4Gx3zxbBplyXgbNso9ZAXHnSf7rBD0irV5oRqk+gFlEFJDHkK9vnpWMenly7vzX8QCXQ==} engines: {node: '>=16.0.0'} peerDependencies: @@ -7222,7 +7401,7 @@ packages: '@storybook/node-logger': 7.6.7 '@storybook/react': 7.6.7(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.3) '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.4.3)(webpack@5.91.0) - '@types/node': 18.19.36 + '@types/node': 18.19.39 '@types/semver': 7.5.8 babel-plugin-add-react-displayname: 0.0.5 fs-extra: 11.2.0 @@ -7233,7 +7412,7 @@ packages: react-refresh: 0.14.0 semver: 7.6.2 typescript: 5.4.3 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) transitivePeerDependencies: - '@swc/core' - '@types/webpack' @@ -7255,14 +7434,14 @@ packages: '@storybook/channels': 7.6.7 '@storybook/client-logger': 7.6.7 '@storybook/core-events': 7.6.7 - '@storybook/csf': 0.1.8 + '@storybook/csf': 0.1.11 '@storybook/global': 5.0.0 '@storybook/types': 7.6.7 '@types/qs': 6.9.15 dequal: 2.0.3 lodash: 4.17.21 memoizerific: 1.11.3 - qs: 6.12.1 + qs: 6.12.3 synchronous-promise: 2.0.17 ts-dedent: 2.2.0 util-deprecate: 1.0.2 @@ -7274,14 +7453,14 @@ packages: '@storybook/channels': 8.1.10 '@storybook/client-logger': 8.1.10 '@storybook/core-events': 8.1.10 - '@storybook/csf': 0.1.8 + '@storybook/csf': 0.1.11 '@storybook/global': 5.0.0 '@storybook/types': 8.1.10 '@types/qs': 6.9.15 dequal: 2.0.3 lodash: 4.17.21 memoizerific: 1.11.3 - qs: 6.12.1 + qs: 6.12.3 tiny-invariant: 1.3.3 ts-dedent: 2.2.0 util-deprecate: 1.0.2 @@ -7305,7 +7484,7 @@ packages: react-docgen-typescript: 2.2.2(typescript@5.4.3) tslib: 2.6.3 typescript: 5.4.3 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) transitivePeerDependencies: - supports-color dev: true @@ -7320,7 +7499,7 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true - /@storybook/react-webpack5@7.6.7(@babel/core@7.22.5)(@swc/core@1.6.3)(esbuild@0.21.3)(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.3): + /@storybook/react-webpack5@7.6.7(@babel/core@7.22.5)(@swc/core@1.6.13)(esbuild@0.21.3)(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.3): resolution: {integrity: sha512-/HK+v8vmeApN4WI5RyaDdhPhjFuEQfMQmvZLl+ewpamhJNMRr4nvrdvxOSfBw46zFubKgieuxEcW+VxHwvZ1og==} engines: {node: '>=16.0.0'} peerDependencies: @@ -7336,9 +7515,9 @@ packages: dependencies: '@babel/core': 7.22.5 '@storybook/builder-webpack5': 7.6.7(esbuild@0.21.3)(typescript@5.4.3) - '@storybook/preset-react-webpack': 7.6.7(@babel/core@7.22.5)(@swc/core@1.6.3)(esbuild@0.21.3)(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.3) + '@storybook/preset-react-webpack': 7.6.7(@babel/core@7.22.5)(@swc/core@1.6.13)(esbuild@0.21.3)(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.3) '@storybook/react': 7.6.7(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.3) - '@types/node': 18.19.36 + '@types/node': 18.19.39 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) typescript: 5.4.3 @@ -7379,7 +7558,7 @@ packages: '@storybook/types': 7.6.7 '@types/escodegen': 0.0.6 '@types/estree': 0.0.51 - '@types/node': 18.19.36 + '@types/node': 18.19.39 acorn: 7.4.1 acorn-jsx: 5.3.2(acorn@7.4.1) acorn-walk: 7.2.0 @@ -7404,7 +7583,7 @@ packages: dependencies: '@storybook/client-logger': 7.6.7 memoizerific: 1.11.3 - qs: 6.12.1 + qs: 6.12.3 dev: true /@storybook/router@8.1.10: @@ -7412,14 +7591,14 @@ packages: dependencies: '@storybook/client-logger': 8.1.10 memoizerific: 1.11.3 - qs: 6.12.1 + qs: 6.12.3 dev: true - /@storybook/telemetry@8.1.10(prettier@3.3.2): + /@storybook/telemetry@8.1.10(prettier@3.0.0): resolution: {integrity: sha512-pwiMWrq85D0AnaAgYNfB2w2BDgqnetQ+tXwsUAw4fUEFwA4oPU6r0uqekRbNNE6wmSSYjiiFP3JgknBFqjd2hg==} dependencies: '@storybook/client-logger': 8.1.10 - '@storybook/core-common': 8.1.10(prettier@3.3.2) + '@storybook/core-common': 8.1.10(prettier@3.0.0) '@storybook/csf-tools': 8.1.10 chalk: 4.1.2 detect-package-manager: 2.0.1 @@ -7607,88 +7786,88 @@ packages: transitivePeerDependencies: - supports-color - /@swc/core-darwin-arm64@1.6.3: - resolution: {integrity: sha512-3r7cJf1BcE30iyF1rnOSKrEzIR+cqnyYSZvivrm62TZdXVsIjfXe1xulsKGxZgNeLY5erIu7ukvMvBvPhnQvqA==} + /@swc/core-darwin-arm64@1.6.13: + resolution: {integrity: sha512-SOF4buAis72K22BGJ3N8y88mLNfxLNprTuJUpzikyMGrvkuBFNcxYtMhmomO0XHsgLDzOJ+hWzcgjRNzjMsUcQ==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] requiresBuild: true optional: true - /@swc/core-darwin-x64@1.6.3: - resolution: {integrity: sha512-8GLZ23IgVpF5xh2SbS5ZW/12/EEBuRU1hFOLB5rKERJU0y1RJ6YhDMf/FuOWhfHQcFM7TeedBwHIzaF+tdKKlw==} + /@swc/core-darwin-x64@1.6.13: + resolution: {integrity: sha512-AW8akFSC+tmPE6YQQvK9S2A1B8pjnXEINg+gGgw0KRUUXunvu1/OEOeC5L2Co1wAwhD7bhnaefi06Qi9AiwOag==} engines: {node: '>=10'} cpu: [x64] os: [darwin] requiresBuild: true optional: true - /@swc/core-linux-arm-gnueabihf@1.6.3: - resolution: {integrity: sha512-VQ/bduX7WhLOlGbJLMG7UH0LBehjjx43R4yuk55rjjJLqpvX5fQzMsWhQdIZ5vsc+4ORzdgtEAlpumTv6bsD1A==} + /@swc/core-linux-arm-gnueabihf@1.6.13: + resolution: {integrity: sha512-f4gxxvDXVUm2HLYXRd311mSrmbpQF2MZ4Ja6XCQz1hWAxXdhRl1gpnZ+LH/xIfGSwQChrtLLVrkxdYUCVuIjFg==} engines: {node: '>=10'} cpu: [arm] os: [linux] requiresBuild: true optional: true - /@swc/core-linux-arm64-gnu@1.6.3: - resolution: {integrity: sha512-jHIQ/PCwtdDBIF/BiC5DochswuCAIW/T5skJ+eDMbta7+QtEnZCXTZWpT5ORoEY/gtsE2fjpOA4TS6fBBvXqUw==} + /@swc/core-linux-arm64-gnu@1.6.13: + resolution: {integrity: sha512-Nf/eoW2CbG8s+9JoLtjl9FByBXyQ5cjdBsA4efO7Zw4p+YSuXDgc8HRPC+E2+ns0praDpKNZtLvDtmF2lL+2Gg==} engines: {node: '>=10'} cpu: [arm64] os: [linux] requiresBuild: true optional: true - /@swc/core-linux-arm64-musl@1.6.3: - resolution: {integrity: sha512-gA6velEUD27Dwu0BlR9hCcFzkWq2YL2pDAU5qbgeuGhaMiUCBssfqTQB+2ctEnV+AZx+hSMJOHvtA+uFZjfRrw==} + /@swc/core-linux-arm64-musl@1.6.13: + resolution: {integrity: sha512-2OysYSYtdw79prJYuKIiux/Gj0iaGEbpS2QZWCIY4X9sGoETJ5iMg+lY+YCrIxdkkNYd7OhIbXdYFyGs/w5LDg==} engines: {node: '>=10'} cpu: [arm64] os: [linux] requiresBuild: true optional: true - /@swc/core-linux-x64-gnu@1.6.3: - resolution: {integrity: sha512-fy4qoBDr5I8r+ZNCZxs/oZcmu4j/8mtSud6Ka102DaSxEjNg0vfIdo9ITsVIPsofhUTmDKjQsPB2O7YUlJAioQ==} + /@swc/core-linux-x64-gnu@1.6.13: + resolution: {integrity: sha512-PkR4CZYJNk5hcd2+tMWBpnisnmYsUzazI1O5X7VkIGFcGePTqJ/bWlfUIVVExWxvAI33PQFzLbzmN5scyIUyGQ==} engines: {node: '>=10'} cpu: [x64] os: [linux] requiresBuild: true optional: true - /@swc/core-linux-x64-musl@1.6.3: - resolution: {integrity: sha512-c/twcMbq/Gpq47G+b3kWgoaCujpXO11aRgJx6am+CprvP4uNeBHEpQkxD+DQmdWFHisZd0i9GB8NG3e7L9Rz9Q==} + /@swc/core-linux-x64-musl@1.6.13: + resolution: {integrity: sha512-OdsY7wryTxCKwGQcwW9jwWg3cxaHBkTTHi91+5nm7hFPpmZMz1HivJrWAMwVE7iXFw+M4l6ugB/wCvpYrUAAjA==} engines: {node: '>=10'} cpu: [x64] os: [linux] requiresBuild: true optional: true - /@swc/core-win32-arm64-msvc@1.6.3: - resolution: {integrity: sha512-y6RxMtX45acReQmzkxcEfJscfBXce6QjuNgWQHHs9exA592BZzmolDUwgmAyjyvopz1lWX+KdymdZFKvuDSx4w==} + /@swc/core-win32-arm64-msvc@1.6.13: + resolution: {integrity: sha512-ap6uNmYjwk9M/+bFEuWRNl3hq4VqgQ/Lk+ID/F5WGqczNr0L7vEf+pOsRAn0F6EV+o/nyb3ePt8rLhE/wjHpPg==} engines: {node: '>=10'} cpu: [arm64] os: [win32] requiresBuild: true optional: true - /@swc/core-win32-ia32-msvc@1.6.3: - resolution: {integrity: sha512-41h7z3xgukl1HDDwhquaeOPSP1OWeHl+mWKnJVmmwd3ui/oowUDCO856qa6JagBgPSnAGfyXwv6vthuXwyCcWA==} + /@swc/core-win32-ia32-msvc@1.6.13: + resolution: {integrity: sha512-IJ8KH4yIUHTnS/U1jwQmtbfQals7zWPG0a9hbEfIr4zI0yKzjd83lmtS09lm2Q24QBWOCFGEEbuZxR4tIlvfzA==} engines: {node: '>=10'} cpu: [ia32] os: [win32] requiresBuild: true optional: true - /@swc/core-win32-x64-msvc@1.6.3: - resolution: {integrity: sha512-//bnwo9b8Vp1ED06eXCHyGZ5xIpdkQgg2fuFDdtd1FITl7r5bdQh2ryRzPiKiGwgXZwZQitUshI4JeEX9IuW+Q==} + /@swc/core-win32-x64-msvc@1.6.13: + resolution: {integrity: sha512-f6/sx6LMuEnbuxtiSL/EkR0Y6qUHFw1XVrh6rwzKXptTipUdOY+nXpKoh+1UsBm/r7H0/5DtOdrn3q5ZHbFZjQ==} engines: {node: '>=10'} cpu: [x64] os: [win32] requiresBuild: true optional: true - /@swc/core@1.6.3: - resolution: {integrity: sha512-mZpei+LqE+AL+nwgERMQey9EJA9/yhHTN6nwbobH5GnSij/lhfTdGfAb1iumOrroqEcXbHUaK//7wOw7DjBGdA==} + /@swc/core@1.6.13: + resolution: {integrity: sha512-eailUYex6fkfaQTev4Oa3mwn0/e3mQU4H8y1WPuImYQESOQDtVrowwUGDSc19evpBbHpKtwM+hw8nLlhIsF+Tw==} engines: {node: '>=10'} requiresBuild: true peerDependencies: @@ -7698,29 +7877,29 @@ packages: optional: true dependencies: '@swc/counter': 0.1.3 - '@swc/types': 0.1.8 + '@swc/types': 0.1.9 optionalDependencies: - '@swc/core-darwin-arm64': 1.6.3 - '@swc/core-darwin-x64': 1.6.3 - '@swc/core-linux-arm-gnueabihf': 1.6.3 - '@swc/core-linux-arm64-gnu': 1.6.3 - '@swc/core-linux-arm64-musl': 1.6.3 - '@swc/core-linux-x64-gnu': 1.6.3 - '@swc/core-linux-x64-musl': 1.6.3 - '@swc/core-win32-arm64-msvc': 1.6.3 - '@swc/core-win32-ia32-msvc': 1.6.3 - '@swc/core-win32-x64-msvc': 1.6.3 + '@swc/core-darwin-arm64': 1.6.13 + '@swc/core-darwin-x64': 1.6.13 + '@swc/core-linux-arm-gnueabihf': 1.6.13 + '@swc/core-linux-arm64-gnu': 1.6.13 + '@swc/core-linux-arm64-musl': 1.6.13 + '@swc/core-linux-x64-gnu': 1.6.13 + '@swc/core-linux-x64-musl': 1.6.13 + '@swc/core-win32-arm64-msvc': 1.6.13 + '@swc/core-win32-ia32-msvc': 1.6.13 + '@swc/core-win32-x64-msvc': 1.6.13 /@swc/counter@0.1.3: resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - /@swc/types@0.1.8: - resolution: {integrity: sha512-RNFA3+7OJFNYY78x0FYwi1Ow+iF1eF5WvmfY1nXPOEH4R2p/D4Cr1vzje7dNAI2aLFqpv8Wyz4oKSWqIZArpQA==} + /@swc/types@0.1.9: + resolution: {integrity: sha512-qKnCno++jzcJ4lM4NTfYifm1EFSCeIfKiAHAfkENZAV5Kl9PjJIyd2yeeVv6c/2CckuLyv2NmRC5pv6pm2WQBg==} dependencies: '@swc/counter': 0.1.3 - /@testing-library/dom@10.1.0: - resolution: {integrity: sha512-wdsYKy5zupPyLCW2Je5DLHSxSfbIp6h80WoHOQc+RPtmPGA52O9x5MJEkv92Sjonpq+poOAtUKhh1kBGAXBrNA==} + /@testing-library/dom@10.3.1: + resolution: {integrity: sha512-q/WL+vlXMpC0uXDyfsMtc1rmotzLV8Y0gq6q1gfrrDjQeHoeLrqHbxdPvPNAh1i+xuJl7+BezywcXArz7vLqKQ==} engines: {node: '>=18'} dependencies: '@babel/code-frame': 7.24.7 @@ -7733,6 +7912,20 @@ packages: pretty-format: 27.5.1 dev: true + /@testing-library/dom@8.20.1: + resolution: {integrity: sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==} + engines: {node: '>=12'} + dependencies: + '@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 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + pretty-format: 27.5.1 + dev: true + /@testing-library/dom@9.3.4: resolution: {integrity: sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==} engines: {node: '>=14'} @@ -7770,19 +7963,19 @@ packages: react-dom: ^18.0.0 dependencies: '@babel/runtime': 7.24.7 - '@testing-library/dom': 9.3.4 + '@testing-library/dom': 8.20.1 '@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): @@ -7988,17 +8181,17 @@ packages: prosemirror-commands: 1.5.2 prosemirror-dropcursor: 1.8.1 prosemirror-gapcursor: 1.3.2 - prosemirror-history: 1.4.0 + prosemirror-history: 1.4.1 prosemirror-inputrules: 1.4.0 prosemirror-keymap: 1.2.2 prosemirror-markdown: 1.13.0 prosemirror-menu: 1.2.4 - prosemirror-model: 1.21.1 + prosemirror-model: 1.21.3 prosemirror-schema-basic: 1.2.2 prosemirror-schema-list: 1.4.0 prosemirror-state: 1.4.3 prosemirror-tables: 1.3.7 - prosemirror-trailing-node: 2.0.8(prosemirror-model@1.21.1)(prosemirror-state@1.4.3)(prosemirror-view@1.33.8) + prosemirror-trailing-node: 2.0.8(prosemirror-model@1.21.3)(prosemirror-state@1.4.3)(prosemirror-view@1.33.8) prosemirror-transform: 1.9.0 prosemirror-view: 1.33.8 dev: false @@ -8196,7 +8389,7 @@ packages: /@types/connect-history-api-fallback@1.5.4: resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} dependencies: - '@types/express-serve-static-core': 4.19.3 + '@types/express-serve-static-core': 4.19.5 '@types/node': 17.0.45 /@types/connect@3.4.38: @@ -8279,8 +8472,8 @@ packages: /@types/estree@1.0.5: resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - /@types/express-serve-static-core@4.19.3: - resolution: {integrity: sha512-KOzM7MhcBFlmnlr/fzISFF5vGWVSvN6fTd4T+ExOt08bA/dA5kpSzY52nMsI1KDFmUREpJelPYyuslLRSjjgCg==} + /@types/express-serve-static-core@4.19.5: + resolution: {integrity: sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==} dependencies: '@types/node': 17.0.45 '@types/qs': 6.9.15 @@ -8291,7 +8484,7 @@ packages: resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} dependencies: '@types/body-parser': 1.19.5 - '@types/express-serve-static-core': 4.19.3 + '@types/express-serve-static-core': 4.19.5 '@types/qs': 6.9.15 '@types/serve-static': 1.15.7 @@ -8375,8 +8568,9 @@ packages: /@types/lodash@4.14.202: resolution: {integrity: sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==} - /@types/lodash@4.17.5: - resolution: {integrity: sha512-MBIOHVZqVqgfro1euRDWX7OO0fBVUUMrN6Pwm8LQsz8cWhEpihlvR70ENj3f40j58TNxZaWv2ndSkInykNBBJw==} + /@types/lodash@4.17.6: + resolution: {integrity: sha512-OpXEVoCKSS3lQqjx9GGGOapBeuW5eUboYHRlHP9urXPX25IKZ6AnP5ZRxtVf63iieUbsHxLn8NQ5Nlftc6yzAA==} + dev: false /@types/mdast@3.0.15: resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} @@ -8410,14 +8604,14 @@ packages: /@types/node@17.0.45: resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} - /@types/node@18.19.36: - resolution: {integrity: sha512-tX1BNmYSWEvViftB26VLNxT6mEr37M7+ldUtq7rlKnv4/2fKYsJIOmqJAjT6h1DNuwQjIKgw3VJ/Dtw3yiTIQw==} + /@types/node@18.19.39: + resolution: {integrity: sha512-nPwTRDKUctxw3di5b4TfT3I0sWDiWoPQCZjXhvdkINntwr8lcoVCKsTgnXeRubKIlfnV+eN/HYk6Jb40tbcEAQ==} dependencies: undici-types: 5.26.5 dev: true - /@types/node@20.14.5: - resolution: {integrity: sha512-aoRR+fJkZT2l0aGOJhuA8frnCSoNX6W7U2mpNq63+BxBIj5BQFt8rHy627kijCmm63ijdSdwvGgpUsU6MBsZZA==} + /@types/node@20.14.10: + resolution: {integrity: sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==} dependencies: undici-types: 5.26.5 dev: false @@ -8627,7 +8821,7 @@ packages: typescript: optional: true dependencies: - '@eslint-community/regexpp': 4.10.1 + '@eslint-community/regexpp': 4.11.0 '@typescript-eslint/parser': 5.58.0(eslint@8.44.0)(typescript@5.4.3) '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/type-utils': 5.62.0(eslint@8.44.0)(typescript@5.4.3) @@ -8984,6 +9178,7 @@ packages: /abab@2.0.6: resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} + deprecated: Use your platform's native atob() and btoa() methods instead /abbrev@2.0.0: resolution: {integrity: sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==} @@ -9009,12 +9204,12 @@ packages: acorn: 7.4.1 acorn-walk: 7.2.0 - /acorn-import-assertions@1.9.0(acorn@8.12.0): + /acorn-import-assertions@1.9.0(acorn@8.12.1): resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} peerDependencies: acorn: ^8 dependencies: - acorn: 8.12.0 + acorn: 8.12.1 /acorn-jsx@5.3.2(acorn@7.4.1): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} @@ -9024,12 +9219,12 @@ packages: acorn: 7.4.1 dev: true - /acorn-jsx@5.3.2(acorn@8.12.0): + /acorn-jsx@5.3.2(acorn@8.12.1): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.12.0 + acorn: 8.12.1 /acorn-walk@7.2.0: resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} @@ -9039,16 +9234,18 @@ packages: resolution: {integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==} engines: {node: '>=0.4.0'} dependencies: - acorn: 8.12.0 + acorn: 8.12.1 dev: true /acorn@7.4.1: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} engines: {node: '>=0.4.0'} + hasBin: true - /acorn@8.12.0: - resolution: {integrity: sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==} + /acorn@8.12.1: + resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} engines: {node: '>=0.4.0'} + hasBin: true /address@1.2.2: resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} @@ -9127,10 +9324,12 @@ packages: /ansi-html-community@0.0.8: resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} engines: {'0': node >= 0.8.0} + hasBin: true /ansi-html@0.0.9: resolution: {integrity: sha512-ozbS3LuenHVxNRh/wdnN16QapUHzauqSomAl1jwwJRRsGwFwtj644lIhxfWu0Fy0acCij2+AEgHvjscq3dlVXg==} engines: {'0': node >= 0.8.0} + hasBin: true /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} @@ -9414,8 +9613,8 @@ packages: peerDependencies: postcss: ^8.1.0 dependencies: - browserslist: 4.23.1 - caniuse-lite: 1.0.30001636 + browserslist: 4.23.2 + caniuse-lite: 1.0.30001641 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.1 @@ -9452,10 +9651,9 @@ packages: - debug dev: false - /axobject-query@3.2.1: - resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} - dependencies: - dequal: 2.0.3 + /axobject-query@3.2.4: + resolution: {integrity: sha512-aPTElBrbifBU1krmZxGZOlBkslORe7Ll7+BDnI50Wy4LgOt69luMgevkDfTq1O/ZgprooPCtWpjCwKSZw/iZ4A==} + engines: {node: '>= 0.4'} /babel-core@7.0.0-bridge.0(@babel/core@7.24.7): resolution: {integrity: sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==} @@ -9514,7 +9712,7 @@ packages: loader-utils: 2.0.4 make-dir: 3.1.0 schema-utils: 2.7.1 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) /babel-loader@9.1.3(@babel/core@7.24.7)(webpack@5.91.0): resolution: {integrity: sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==} @@ -9526,7 +9724,7 @@ packages: '@babel/core': 7.24.7 find-cache-dir: 4.0.0 schema-utils: 4.2.0 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) dev: true /babel-plugin-add-react-displayname@0.0.5: @@ -9925,14 +10123,15 @@ packages: pako: 0.2.9 dev: true - /browserslist@4.23.1: - resolution: {integrity: sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==} + /browserslist@4.23.2: + resolution: {integrity: sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true dependencies: - caniuse-lite: 1.0.30001636 - electron-to-chromium: 1.4.806 + caniuse-lite: 1.0.30001641 + electron-to-chromium: 1.4.823 node-releases: 2.0.14 - update-browserslist-db: 1.0.16(browserslist@4.23.1) + update-browserslist-db: 1.1.0(browserslist@4.23.2) /bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} @@ -10013,7 +10212,7 @@ packages: camelcase: 8.0.0 map-obj: 5.0.0 quick-lru: 6.1.2 - type-fest: 4.20.1 + type-fest: 4.21.0 dev: false /camelcase@5.3.1: @@ -10032,13 +10231,13 @@ packages: /caniuse-api@3.0.0: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} dependencies: - browserslist: 4.23.1 - caniuse-lite: 1.0.30001636 + browserslist: 4.23.2 + caniuse-lite: 1.0.30001641 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 - /caniuse-lite@1.0.30001636: - resolution: {integrity: sha512-bMg2vmr8XBsbL6Lr0UHXy/21m84FTxDLWn2FSqMd5PrlbMxwJlQnC2YWYxVgp66PZE+BBNF2jYQUBKCo1FDeZg==} + /caniuse-lite@1.0.30001641: + resolution: {integrity: sha512-Phv5thgl67bHYo1TtMY/MurjkHhV4EDaCosezRXgZ8jzA/Ub+wjxAvbGvjoFENStinwi5kCyOYV3mi5tOGykwA==} /canvg@3.0.10: resolution: {integrity: sha512-qwR2FRNO9NlzTeKIPIKpnTY6fqwuYSequ8Ru8c0YkYU7U0oW+hLUvWadLvAu1Rl72OMNiFhoLu4f8eUjQ7l/+Q==} @@ -10471,6 +10670,10 @@ packages: /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + /confbox@0.1.7: + resolution: {integrity: sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==} + dev: true + /config-chain@1.1.13: resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} dependencies: @@ -10545,7 +10748,7 @@ packages: /core-js-compat@3.37.1: resolution: {integrity: sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==} dependencies: - browserslist: 4.23.1 + browserslist: 4.23.2 /core-js-pure@3.37.1: resolution: {integrity: sha512-J/r5JTHSmzTxbiYYrzXg9w1VpqrYt+gexenBE9pugeyhwPZTAEJddyiReJWsLO6uNQ8xJZFbod6XC7KKwatCiA==} @@ -10553,6 +10756,7 @@ packages: /core-js@2.6.12: resolution: {integrity: sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==} + deprecated: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js. requiresBuild: true dev: true @@ -10563,7 +10767,7 @@ packages: /core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - /cosmiconfig-typescript-loader@1.0.9(@swc/core@1.6.3)(@types/node@17.0.45)(cosmiconfig@7.1.0)(typescript@5.4.3): + /cosmiconfig-typescript-loader@1.0.9(@swc/core@1.6.13)(@types/node@17.0.45)(cosmiconfig@7.1.0)(typescript@5.4.3): resolution: {integrity: sha512-tRuMRhxN4m1Y8hP9SNYfz7jRwt8lZdWxdjg/ohg5esKmsndJIn4yT96oJVcf5x0eA11taXl+sIp+ielu529k6g==} engines: {node: '>=12', npm: '>=6'} peerDependencies: @@ -10573,7 +10777,7 @@ packages: dependencies: '@types/node': 17.0.45 cosmiconfig: 7.1.0 - ts-node: 10.9.2(@swc/core@1.6.3)(@types/node@17.0.45)(typescript@5.4.3) + ts-node: 10.9.2(@swc/core@1.6.13)(@types/node@17.0.45)(typescript@5.4.3) typescript: 5.4.3 transitivePeerDependencies: - '@swc/core' @@ -10606,10 +10810,10 @@ packages: '@craco/craco': ^7.0.0 react-scripts: ^5.0.0 dependencies: - '@craco/craco': 7.1.0(@swc/core@1.6.3)(@types/node@17.0.45)(postcss@8.4.32)(react-scripts@5.0.1)(typescript@5.4.3) + '@craco/craco': 7.1.0(@swc/core@1.6.13)(@types/node@17.0.45)(postcss@8.4.32)(react-scripts@5.0.1)(typescript@5.4.3) esbuild-jest: 0.5.0(esbuild@0.21.3) esbuild-loader: 4.2.0(webpack@5.91.0) - react-scripts: 5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(@swc/core@1.6.3)(esbuild@0.21.3)(eslint@8.44.0)(react@18.2.0)(sass@1.71.1)(typescript@5.4.3) + react-scripts: 5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(@swc/core@1.6.13)(esbuild@0.21.3)(eslint@8.44.0)(react@18.2.0)(sass@1.71.1)(typescript@5.4.3) transitivePeerDependencies: - esbuild - supports-color @@ -10723,15 +10927,15 @@ packages: webpack: optional: true dependencies: - icss-utils: 5.1.0(postcss@8.4.38) - postcss: 8.4.38 - postcss-modules-extract-imports: 3.1.0(postcss@8.4.38) - postcss-modules-local-by-default: 4.0.5(postcss@8.4.38) - postcss-modules-scope: 3.2.0(postcss@8.4.38) - postcss-modules-values: 4.0.0(postcss@8.4.38) + icss-utils: 5.1.0(postcss@8.4.39) + postcss: 8.4.39 + postcss-modules-extract-imports: 3.1.0(postcss@8.4.39) + postcss-modules-local-by-default: 4.0.5(postcss@8.4.39) + postcss-modules-scope: 3.2.0(postcss@8.4.39) + postcss-modules-values: 4.0.0(postcss@8.4.39) postcss-value-parser: 4.2.0 semver: 7.6.2 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) /css-minimizer-webpack-plugin@3.4.1(esbuild@0.21.3)(webpack@5.91.0): resolution: {integrity: sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==} @@ -10759,7 +10963,7 @@ packages: schema-utils: 4.2.0 serialize-javascript: 6.0.2 source-map: 0.6.1 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) /css-prefers-color-scheme@6.0.3(postcss@8.4.32): resolution: {integrity: sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==} @@ -10843,6 +11047,7 @@ packages: /cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} + hasBin: true /cssnano-preset-default@5.2.14(postcss@8.4.32): resolution: {integrity: sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==} @@ -11185,6 +11390,7 @@ packages: /detect-port-alt@1.1.6: resolution: {integrity: sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==} engines: {node: '>= 4.2.1'} + hasBin: true dependencies: address: 1.2.2 debug: 2.6.9 @@ -11194,6 +11400,7 @@ packages: /detect-port@1.6.1: resolution: {integrity: sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q==} engines: {node: '>= 4.0.0'} + hasBin: true dependencies: address: 1.2.2 debug: 4.3.5 @@ -11261,7 +11468,7 @@ packages: resolution: {integrity: sha512-4SbcbedPXTciySXiSnNNLuJXpvxFe5nqivbiEHXyL8P/w0wx2uW7YXNjnYgjW0e2e6vy+L/tMISU/oAiXCl57Q==} engines: {node: '>=10'} dependencies: - '@types/node': 20.14.5 + '@types/node': 20.14.10 jszip: 3.10.1 nanoid: 5.0.7 xml: 1.0.1 @@ -11317,6 +11524,7 @@ packages: /domexception@2.0.1: resolution: {integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==} engines: {node: '>=8'} + deprecated: Use your platform's native DOMException instead dependencies: webidl-conversions: 5.0.0 @@ -11339,8 +11547,8 @@ packages: domelementtype: 2.3.0 dev: false - /dompurify@2.5.5: - resolution: {integrity: sha512-FgbqnEPiv5Vdtwt6Mxl7XSylttCC03cqP5ldNT2z+Kj0nLxPHJH4+1Cyf5Jasxhw93Rl4Oo11qRoUV72fmya2Q==} + /dompurify@2.5.6: + resolution: {integrity: sha512-zUTaUBO8pY4+iJMPE1B9XlO2tXVYIcEA4SNGtvDELzTSCQO7RzH+j7S180BmhmJId78lqGU2z19vgVx2Sxs/PQ==} requiresBuild: true dev: false optional: true @@ -11414,6 +11622,7 @@ packages: /editorconfig@1.0.4: resolution: {integrity: sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==} engines: {node: '>=14'} + hasBin: true dependencies: '@one-ini/wasm': 0.1.1 commander: 10.0.1 @@ -11427,11 +11636,12 @@ packages: /ejs@3.1.10: resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} engines: {node: '>=0.10.0'} + hasBin: true dependencies: jake: 10.9.1 - /electron-to-chromium@1.4.806: - resolution: {integrity: sha512-nkoEX2QIB8kwCOtvtgwhXWy2IHVcOLQZu9Qo36uaGB835mdX/h8uLRlosL6QIhLVUnAiicXRW00PwaPZC74Nrg==} + /electron-to-chromium@1.4.823: + resolution: {integrity: sha512-4h+oPeAiGQOHFyUJOqpoEcPj/xxlicxBzOErVeYVMMmAiXUXsGpsFd0QXBMaUUbnD8hhSfLf9uw+MlsoIA7j5w==} /emittery@0.10.2: resolution: {integrity: sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==} @@ -11491,6 +11701,7 @@ packages: /envinfo@7.13.0: resolution: {integrity: sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==} engines: {node: '>=4'} + hasBin: true dev: true /error-ex@1.3.2: @@ -11538,7 +11749,7 @@ packages: is-string: 1.0.7 is-typed-array: 1.1.13 is-weakref: 1.0.2 - object-inspect: 1.13.1 + object-inspect: 1.13.2 object-keys: 1.1.1 object.assign: 4.1.5 regexp.prototype.flags: 1.5.2 @@ -11599,8 +11810,8 @@ packages: iterator.prototype: 1.1.2 safe-array-concat: 1.1.2 - /es-module-lexer@1.5.3: - resolution: {integrity: sha512-i1gCgmR9dCl6Vil6UKPI/trA69s08g/syhiDK9TG0Nf1RJjjFI+AzoWW7sPufzkgYAn861skuCwJa0pIIHYxvg==} + /es-module-lexer@1.5.4: + resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} /es-object-atoms@1.0.0: resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} @@ -11686,7 +11897,7 @@ packages: esbuild: 0.21.3 get-tsconfig: 4.7.5 loader-utils: 2.0.4 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) webpack-sources: 1.4.3 dev: true @@ -11719,6 +11930,7 @@ packages: /esbuild@0.18.20: resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} engines: {node: '>=12'} + hasBin: true requiresBuild: true optionalDependencies: '@esbuild/android-arm': 0.18.20 @@ -11748,6 +11960,7 @@ packages: /esbuild@0.20.2: resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} engines: {node: '>=12'} + hasBin: true requiresBuild: true optionalDependencies: '@esbuild/aix-ppc64': 0.20.2 @@ -11778,6 +11991,7 @@ packages: /esbuild@0.21.3: resolution: {integrity: sha512-Kgq0/ZsAPzKrbOjCQcjoSmPoWhlcVnGAUo7jvaLHoxW1Drto0KGkR1xBNg2Cp43b9ImvxmPEJZ9xkfcnqPsfBw==} engines: {node: '>=12'} + hasBin: true requiresBuild: true optionalDependencies: '@esbuild/aix-ppc64': 0.21.3 @@ -11830,6 +12044,7 @@ packages: /escodegen@1.14.3: resolution: {integrity: sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==} engines: {node: '>=4.0'} + hasBin: true dependencies: esprima: 4.0.1 estraverse: 4.3.0 @@ -11841,6 +12056,7 @@ packages: /escodegen@2.1.0: resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} engines: {node: '>=6.0'} + hasBin: true dependencies: esprima: 4.0.1 estraverse: 5.3.0 @@ -11895,7 +12111,7 @@ packages: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} dependencies: debug: 3.2.7 - is-core-module: 2.13.1 + is-core-module: 2.14.0 resolve: 1.22.8 transitivePeerDependencies: - supports-color @@ -11963,7 +12179,7 @@ packages: eslint-import-resolver-node: 0.3.9 eslint-module-utils: 2.8.1(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-node@0.3.9)(eslint@8.44.0) hasown: 2.0.2 - is-core-module: 2.13.1 + is-core-module: 2.14.0 is-glob: 4.0.3 minimatch: 3.1.2 object.fromentries: 2.0.8 @@ -12009,7 +12225,7 @@ packages: array.prototype.flatmap: 1.3.2 ast-types-flow: 0.0.7 axe-core: 4.9.1 - axobject-query: 3.2.1 + axobject-query: 3.2.4 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 eslint: 8.44.0 @@ -12110,14 +12326,15 @@ packages: micromatch: 4.0.7 normalize-path: 3.0.0 schema-utils: 4.2.0 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) /eslint@8.44.0: resolution: {integrity: sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.44.0) - '@eslint-community/regexpp': 4.10.1 + '@eslint-community/regexpp': 4.11.0 '@eslint/eslintrc': 2.1.4 '@eslint/js': 8.44.0 '@humanwhocodes/config-array': 0.11.14 @@ -12132,7 +12349,7 @@ packages: eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 - esquery: 1.5.0 + esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 6.0.1 @@ -12164,7 +12381,7 @@ packages: hasBin: true dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@eslint-community/regexpp': 4.10.1 + '@eslint-community/regexpp': 4.11.0 '@eslint/eslintrc': 2.1.4 '@eslint/js': 8.57.0 '@humanwhocodes/config-array': 0.11.14 @@ -12180,7 +12397,7 @@ packages: eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 - esquery: 1.5.0 + esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 6.0.1 @@ -12219,20 +12436,22 @@ packages: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.12.0 - acorn-jsx: 5.3.2(acorn@8.12.0) + acorn: 8.12.1 + acorn-jsx: 5.3.2(acorn@8.12.1) eslint-visitor-keys: 3.4.3 /esprima@1.2.2: resolution: {integrity: sha512-+JpPZam9w5DuJ3Q67SqsMGtiHKENSMRVoxvArfJZK01/BfLEObtZ6orJa/MtoGNR/rfMgp5837T41PAmTwAv/A==} engines: {node: '>=0.4.0'} + hasBin: true /esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} + hasBin: true - /esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + /esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} engines: {node: '>=0.10'} dependencies: estraverse: 5.3.0 @@ -12474,10 +12693,6 @@ packages: /fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - /fast-loops@1.1.3: - resolution: {integrity: sha512-8EZzEP0eKkEEVX+drtd9mtuQ+/QrlfW/5MlwcwK5Nds6EkZ/tRzEexkzUY2mIssnAyVLT+TKHuRXmFNNXYUd6g==} - dev: false - /fast-shallow-equal@1.0.0: resolution: {integrity: sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw==} dev: false @@ -12565,7 +12780,7 @@ packages: dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) /file-saver@2.0.5: resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} @@ -12680,13 +12895,14 @@ packages: /flat@5.0.2: resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true dev: true /flatted@3.3.1: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} - /flow-parser@0.238.0: - resolution: {integrity: sha512-VE7XSv1epljsIN2YeBnxCmGJihpNIAnLLu/pPOdA+Gkso7qDltJwUi6vfHjgxdBbjSdAuPGnhuOHJUQG+yYwIg==} + /flow-parser@0.239.1: + resolution: {integrity: sha512-topOrETNxJ6T2gAnQiWqAlzGPj8uI2wtmNOlDIMNB+qyvGJZ6R++STbUOTAYmvPhOMz2gXnXPH0hOvURYmrBow==} engines: {node: '>=0.4.0'} dev: true @@ -12757,7 +12973,7 @@ packages: semver: 7.6.2 tapable: 1.1.3 typescript: 5.4.3 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) /fork-ts-checker-webpack-plugin@8.0.0(typescript@5.4.3)(webpack@5.91.0): resolution: {integrity: sha512-mX3qW3idpueT2klaQXBzrIM/pHw+T0B/V9KHEvNrqijTq9NFnMZU6oreVxDYcf33P8a5cW+67PjodNHthGnNVg==} @@ -12779,7 +12995,7 @@ packages: semver: 7.6.2 tapable: 2.2.1 typescript: 5.4.3 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) dev: true /form-data@2.5.1: @@ -13008,12 +13224,13 @@ packages: /giget@1.2.3: resolution: {integrity: sha512-8EHPljDvs7qKykr6uw8b+lqLiUc/vUg+KVTI0uND4s63TdsZM2Xus3mflvF0DDG9SiM4RlCkFGL+7aAjRmV7KA==} + hasBin: true dependencies: citty: 0.1.6 consola: 3.2.3 defu: 6.1.4 node-fetch-native: 1.6.4 - nypm: 0.3.8 + nypm: 0.3.9 ohash: 1.1.3 pathe: 1.1.2 tar: 6.2.1 @@ -13038,14 +13255,13 @@ packages: /glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - /glob@10.4.2: - resolution: {integrity: sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==} - engines: {node: '>=16 || 14 >=14.18'} + /glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true dependencies: foreground-child: 3.2.1 - jackspeak: 3.4.0 - minimatch: 9.0.4 + jackspeak: 3.4.3 + minimatch: 9.0.5 minipass: 7.1.2 package-json-from-dist: 1.0.0 path-scurry: 1.11.1 @@ -13110,8 +13326,8 @@ packages: merge2: 1.4.1 slash: 3.0.0 - /globby@14.0.1: - resolution: {integrity: sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ==} + /globby@14.0.2: + resolution: {integrity: sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==} engines: {node: '>=18'} dependencies: '@sindresorhus/merge-streams': 2.3.0 @@ -13172,6 +13388,7 @@ packages: /gunzip-maybe@1.4.2: resolution: {integrity: sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==} + hasBin: true dependencies: browserify-zlib: 0.1.4 is-deflate: 1.0.0 @@ -13193,6 +13410,7 @@ packages: /handlebars@4.7.8: resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} engines: {node: '>=0.4.7'} + hasBin: true dependencies: minimist: 1.2.8 neo-async: 2.6.2 @@ -13286,6 +13504,7 @@ packages: /he@1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true /hex-color-regex@1.1.0: resolution: {integrity: sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==} @@ -13346,6 +13565,7 @@ packages: /html-minifier-terser@6.1.0: resolution: {integrity: sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==} engines: {node: '>=12'} + hasBin: true dependencies: camel-case: 4.1.2 clean-css: 5.3.3 @@ -13353,7 +13573,7 @@ packages: he: 1.2.0 param-case: 3.0.4 relateurl: 0.2.7 - terser: 5.31.1 + terser: 5.31.2 /html-tags@3.3.1: resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} @@ -13377,7 +13597,7 @@ packages: lodash: 4.17.21 pretty-error: 4.0.0 tapable: 2.2.1 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) /html2canvas@1.4.1: resolution: {integrity: sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==} @@ -13506,6 +13726,7 @@ packages: /husky@8.0.3: resolution: {integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==} engines: {node: '>=14'} + hasBin: true dev: true /hyphenate-style-name@1.1.0: @@ -13523,13 +13744,13 @@ packages: dependencies: safer-buffer: 2.1.2 - /icss-utils@5.1.0(postcss@8.4.38): + /icss-utils@5.1.0(postcss@8.4.39): resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.38 + postcss: 8.4.39 /idb@7.1.1: resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} @@ -13572,6 +13793,7 @@ packages: /import-local@3.1.0: resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} engines: {node: '>=8'} + hasBin: true dependencies: pkg-dir: 4.2.0 resolve-cwd: 3.0.0 @@ -13605,11 +13827,10 @@ packages: resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} dev: false - /inline-style-prefixer@7.0.0: - resolution: {integrity: sha512-I7GEdScunP1dQ6IM2mQWh6v0mOYdYmH3Bp31UecKdrcUgcURTcctSe1IECdUznSHKSmsHtjrT3CwCPI1pyxfUQ==} + /inline-style-prefixer@7.0.1: + resolution: {integrity: sha512-lhYo5qNTQp3EvSSp3sRvXMbVQTLrvGV6DycRMJ5dm2BLMiJ30wpXKdDdgX+GmJZ5uQMucwRKHamXSst3Sj/Giw==} dependencies: css-in-js-utils: 3.1.0 - fast-loops: 1.1.3 dev: false /internal-slot@1.0.7: @@ -13705,6 +13926,7 @@ packages: /is-ci@2.0.0: resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==} + hasBin: true dependencies: ci-info: 2.0.0 dev: true @@ -13720,8 +13942,9 @@ packages: rgba-regex: 1.0.0 dev: true - /is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + /is-core-module@2.14.0: + resolution: {integrity: sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==} + engines: {node: '>= 0.4'} dependencies: hasown: 2.0.2 @@ -13767,6 +13990,7 @@ packages: /is-docker@2.2.1: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} + hasBin: true /is-dom@1.1.0: resolution: {integrity: sha512-u82f6mvhYxRPKpw8V1N0W8ce1xXwOrQtgGcxl6UCL5zBmZu3is/18K0rR7uFCnMDuAsS/3W54mGL4vsaFUQlEQ==} @@ -14086,9 +14310,8 @@ packages: reflect.getprototypeof: 1.0.6 set-function-name: 2.0.2 - /jackspeak@3.4.0: - resolution: {integrity: sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==} - engines: {node: '>=14'} + /jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} dependencies: '@isaacs/cliui': 8.0.2 optionalDependencies: @@ -14097,6 +14320,7 @@ packages: /jake@10.9.1: resolution: {integrity: sha512-61btcOHNnLnsOdtLgA5efqQWjnSi/vow5HbI7HMdKKWqvrKR1bLK3BPlJn9gcSaP2ewuamUSMB5XEy76KUIS2w==} engines: {node: '>=10'} + hasBin: true dependencies: async: 3.2.5 chalk: 4.1.2 @@ -14753,14 +14977,16 @@ packages: /jiti@1.21.6: resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} + hasBin: true /js-beautify@1.15.1: resolution: {integrity: sha512-ESjNzSlt/sWE8sciZH8kBF8BPlwXPwhR6pWKAw8bw4Bwj+iZcnKW6ONWUutJ7eObuBZQpiIb8S7OYspWrKt7rA==} engines: {node: '>=14'} + hasBin: true dependencies: config-chain: 1.1.13 editorconfig: 1.0.4 - glob: 10.4.2 + glob: 10.4.5 js-cookie: 3.0.5 nopt: 7.2.1 dev: true @@ -14785,6 +15011,7 @@ packages: /js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true dependencies: argparse: 2.0.1 @@ -14810,7 +15037,7 @@ packages: '@babel/register': 7.24.6(@babel/core@7.24.7) babel-core: 7.0.0-bridge.0(@babel/core@7.24.7) chalk: 4.1.2 - flow-parser: 0.238.0 + flow-parser: 0.239.1 graceful-fs: 4.2.11 micromatch: 4.0.7 neo-async: 2.6.2 @@ -14844,7 +15071,7 @@ packages: '@babel/register': 7.24.6(@babel/core@7.24.7) babel-core: 7.0.0-bridge.0(@babel/core@7.24.7) chalk: 4.1.2 - flow-parser: 0.238.0 + flow-parser: 0.239.1 graceful-fs: 4.2.11 micromatch: 4.0.7 neo-async: 2.6.2 @@ -14866,7 +15093,7 @@ packages: optional: true dependencies: abab: 2.0.6 - acorn: 8.12.0 + acorn: 8.12.1 acorn-globals: 6.0.0 cssom: 0.4.4 cssstyle: 2.3.0 @@ -14899,10 +15126,12 @@ packages: /jsesc@0.5.0: resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true /jsesc@2.5.2: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} + hasBin: true /json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} @@ -14917,9 +15146,9 @@ packages: dependencies: '@apidevtools/json-schema-ref-parser': 11.6.4 '@types/json-schema': 7.0.15 - '@types/lodash': 4.17.5 + '@types/lodash': 4.17.6 cli-color: 2.0.4 - glob: 10.4.2 + glob: 10.4.5 is-glob: 4.0.3 js-yaml: 4.1.0 lodash: 4.17.21 @@ -14947,12 +15176,14 @@ packages: /json5@1.0.2: resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true dependencies: minimist: 1.2.8 /json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} + hasBin: true /jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} @@ -14982,7 +15213,7 @@ packages: optionalDependencies: canvg: 3.0.10 core-js: 3.31.0 - dompurify: 2.5.5 + dompurify: 2.5.6 html2canvas: 1.4.1 dev: false @@ -15182,6 +15413,7 @@ packages: /lint-staged@13.2.3: resolution: {integrity: sha512-zVVEXLuQIhr1Y7R7YAWx4TZLdvuzk7DnmrsTNL0fax6Z3jrpFcas+vKbzxhhvp6TA55m1SQuWkpzI1qbfDZbAg==} engines: {node: ^14.13.1 || >=16.0.0} + hasBin: true dependencies: chalk: 5.2.0 cli-truncate: 3.1.0 @@ -15192,7 +15424,7 @@ packages: listr2: 5.0.8 micromatch: 4.0.7 normalize-path: 3.0.0 - object-inspect: 1.13.1 + object-inspect: 1.13.2 pidtree: 0.6.0 string-argv: 0.3.2 yaml: 2.4.5 @@ -15342,9 +15574,8 @@ packages: dependencies: tslib: 2.6.3 - /lru-cache@10.2.2: - resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==} - engines: {node: 14 || >=16.14} + /lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} /lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -15359,6 +15590,7 @@ packages: /lz-string@1.5.0: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} + hasBin: true dev: true /magic-string@0.25.9: @@ -15369,7 +15601,7 @@ packages: /magic-string@0.30.10: resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==} dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 dev: true /make-dir@2.1.0: @@ -15428,6 +15660,7 @@ packages: /markdown-it@14.1.0: resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} + hasBin: true dependencies: argparse: 2.0.1 entities: 4.5.0 @@ -15446,8 +15679,8 @@ packages: react: 18.2.0 dev: true - /marked@13.0.1: - resolution: {integrity: sha512-7kBohS6GrZKvCsNXZyVVXSW7/hGBHe49ng99YPkDCckSUrrG7MSFLCexsRxptzOmyW2eT5dySh4Md1V6my52fA==} + /marked@13.0.2: + resolution: {integrity: sha512-J6CPjP8pS5sgrRqxVRvkCIkZ6MFdRIjDkwUwgJ9nL2fbmM6qGQeB2C16hi8Cc9BOzj6xXzy0jyi0iPIfnMHYzA==} engines: {node: '>= 18'} hasBin: true dev: false @@ -15458,6 +15691,7 @@ packages: /mathjs@11.8.2: resolution: {integrity: sha512-ZePu0oDbM0vuFExikIMY/9syjo/jbgNbX6ti+iMdaALDuxciMCsXIslGDBEn7QCpCWYBiVCYmc0lsmk5bwHBdQ==} engines: {node: '>= 14'} + hasBin: true dependencies: '@babel/runtime': 7.24.7 complex.js: 2.1.1 @@ -15804,6 +16038,7 @@ packages: /mime@1.6.0: resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} engines: {node: '>=4'} + hasBin: true /mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} @@ -15833,7 +16068,7 @@ packages: dependencies: schema-utils: 4.2.0 tapable: 2.2.1 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) /minimalistic-assert@1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} @@ -15856,8 +16091,8 @@ packages: brace-expansion: 2.0.1 dev: true - /minimatch@9.0.4: - resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} + /minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} dependencies: brace-expansion: 2.0.1 @@ -15918,6 +16153,15 @@ packages: hasBin: true dev: false + /mlly@1.7.1: + resolution: {integrity: sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==} + dependencies: + acorn: 8.12.1 + pathe: 1.1.2 + pkg-types: 1.1.3 + ufo: 1.5.3 + dev: true + /mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} @@ -15934,6 +16178,7 @@ packages: /multicast-dns@7.2.5: resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} + hasBin: true dependencies: dns-packet: 5.6.1 thunky: 1.1.0 @@ -15951,11 +16196,11 @@ packages: react: '*' react-dom: '*' dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 css-tree: 1.1.3 csstype: 3.1.3 fastest-stable-stringify: 2.0.2 - inline-style-prefixer: 7.0.0 + inline-style-prefixer: 7.0.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) rtl-css-js: 1.16.1 @@ -15977,10 +16222,12 @@ packages: /nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true /nanoid@5.0.7: resolution: {integrity: sha512-oLxFY2gd2IqnjcYyOXD8XGCftpGtZP2AbHbOkthDkvRywH5ayNtPVy9YlOPcHckXzbLTCHpkb7FB+yuxKV13pQ==} engines: {node: ^18 || >=20} + hasBin: true dev: false /nanomatch@1.2.13: @@ -16107,6 +16354,7 @@ packages: /nopt@7.2.1: resolution: {integrity: sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + hasBin: true dependencies: abbrev: 2.0.0 dev: true @@ -16167,14 +16415,16 @@ packages: /nwsapi@2.2.10: resolution: {integrity: sha512-QK0sRs7MKv0tKe1+5uZIQk/C8XGza4DAnztJG8iD+TpJIORARrCxczA738awHrZoHeTjSSoHqao2teO0dC/gFQ==} - /nypm@0.3.8: - resolution: {integrity: sha512-IGWlC6So2xv6V4cIDmoV0SwwWx7zLG086gyqkyumteH2fIgCAM4nDVFB2iDRszDvmdSVW9xb1N+2KjQ6C7d4og==} + /nypm@0.3.9: + resolution: {integrity: sha512-BI2SdqqTHg2d4wJh8P9A1W+bslg33vOE9IZDY6eR2QC+Pu1iNBVZUqczrd43rJb+fMzHU7ltAYKsEFY/kHMFcw==} engines: {node: ^14.16.0 || >=16.10.0} + hasBin: true dependencies: citty: 0.1.6 consola: 3.2.3 execa: 8.0.1 pathe: 1.1.2 + pkg-types: 1.1.3 ufo: 1.5.3 dev: true @@ -16195,8 +16445,9 @@ packages: resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} engines: {node: '>= 6'} - /object-inspect@1.13.1: - resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + /object-inspect@1.13.2: + resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + engines: {node: '>= 0.4'} /object-is@1.1.6: resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} @@ -16296,16 +16547,16 @@ packages: resolution: {integrity: sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw==} dev: true - /ol-ext@4.0.18(ol@9.2.4): - resolution: {integrity: sha512-zzeTAoCg9IocaM7LlXiLNnVCgVmfxxLzlDTWvYn3Y2gFxtICHSfRrIQl/8vumgBjftBksVl1Fds8P5uFReTmew==} + /ol-ext@4.0.19(ol@9.2.4): + resolution: {integrity: sha512-QMhmys/ux7eYKZFtca6CeK+l9YgZb5yL5hHFJLKkiObw/qz6xKu+gy+SSnF/QyvJbfAJDleuFHf2mqkYqC9hZQ==} peerDependencies: ol: '>= 5.3.0' dependencies: ol: 9.2.4 dev: false - /ol-mapbox-style@12.3.3(ol@9.2.4): - resolution: {integrity: sha512-Wyb1vSxTl/c09S9yC/Dcr7XWQf5u19/9BriqOiDJRgbjLTAbrWXW8l+5N9E/I0fV2gcTQDE+7iFtvVOvXcTmMA==} + /ol-mapbox-style@12.3.4(ol@9.2.4): + resolution: {integrity: sha512-TxGJZw4hmvc6n5dHSyAE8ZpgALJ6hVG5Q9yl0j2Q1KmLS9iq4wMpb383TAitWiG86SvJV4oDkWMGkyyMLfVyew==} peerDependencies: ol: '*' dependencies: @@ -16436,7 +16687,7 @@ packages: resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: - yocto-queue: 1.0.0 + yocto-queue: 1.1.1 dev: true /p-locate@3.0.0: @@ -16595,7 +16846,7 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} dependencies: - lru-cache: 10.2.2 + lru-cache: 10.4.3 minipass: 7.1.2 /path-to-regexp@0.1.7: @@ -16643,6 +16894,7 @@ packages: /pidtree@0.6.0: resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} engines: {node: '>=0.10'} + hasBin: true dev: true /pify@2.3.0: @@ -16685,6 +16937,14 @@ packages: find-up: 6.3.0 dev: true + /pkg-types@1.1.3: + resolution: {integrity: sha512-+JrgthZG6m3ckicaOB74TwQ+tBWsFl3qVQg7mN8ulwSOElJ7gBhKzj2VkCPnZ4NlF6kEquYU+RIYNVAvzd54UA==} + dependencies: + confbox: 0.1.7 + mlly: 1.7.1 + pathe: 1.1.2 + dev: true + /pkg-up@3.1.0: resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} engines: {node: '>=8'} @@ -16741,14 +17001,14 @@ packages: postcss: 8.4.32 postcss-selector-parser: 6.1.0 - /postcss-browser-comments@4.0.0(browserslist@4.23.1)(postcss@8.4.32): + /postcss-browser-comments@4.0.0(browserslist@4.23.2)(postcss@8.4.32): resolution: {integrity: sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==} engines: {node: '>=8'} peerDependencies: browserslist: '>=4' postcss: '>=8' dependencies: - browserslist: 4.23.1 + browserslist: 4.23.2 postcss: 8.4.32 /postcss-calc@8.2.4(postcss@8.4.32): @@ -16802,7 +17062,7 @@ packages: peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.23.1 + browserslist: 4.23.2 caniuse-api: 3.0.0 colord: 2.9.3 postcss: 8.4.32 @@ -16814,7 +17074,7 @@ packages: peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.23.1 + browserslist: 4.23.2 postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -17018,7 +17278,7 @@ packages: klona: 2.0.6 postcss: 8.4.32 semver: 7.6.2 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) /postcss-logical@5.0.4(postcss@8.4.32): resolution: {integrity: sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==} @@ -17052,7 +17312,7 @@ packages: peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.23.1 + browserslist: 4.23.2 caniuse-api: 3.0.0 cssnano-utils: 3.1.0(postcss@8.4.32) postcss: 8.4.32 @@ -17084,7 +17344,7 @@ packages: peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.23.1 + browserslist: 4.23.2 cssnano-utils: 3.1.0(postcss@8.4.32) postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -17098,42 +17358,42 @@ packages: postcss: 8.4.32 postcss-selector-parser: 6.1.0 - /postcss-modules-extract-imports@3.1.0(postcss@8.4.38): + /postcss-modules-extract-imports@3.1.0(postcss@8.4.39): resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.38 + postcss: 8.4.39 - /postcss-modules-local-by-default@4.0.5(postcss@8.4.38): + /postcss-modules-local-by-default@4.0.5(postcss@8.4.39): resolution: {integrity: sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - icss-utils: 5.1.0(postcss@8.4.38) - postcss: 8.4.38 + icss-utils: 5.1.0(postcss@8.4.39) + postcss: 8.4.39 postcss-selector-parser: 6.1.0 postcss-value-parser: 4.2.0 - /postcss-modules-scope@3.2.0(postcss@8.4.38): + /postcss-modules-scope@3.2.0(postcss@8.4.39): resolution: {integrity: sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.38 + postcss: 8.4.39 postcss-selector-parser: 6.1.0 - /postcss-modules-values@4.0.0(postcss@8.4.38): + /postcss-modules-values@4.0.0(postcss@8.4.39): resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - icss-utils: 5.1.0(postcss@8.4.38) - postcss: 8.4.38 + icss-utils: 5.1.0(postcss@8.4.39) + postcss: 8.4.39 /postcss-nested@6.0.1(postcss@8.4.32): resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} @@ -17213,7 +17473,7 @@ packages: peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.23.1 + browserslist: 4.23.2 postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -17236,7 +17496,7 @@ packages: postcss: 8.4.32 postcss-value-parser: 4.2.0 - /postcss-normalize@10.0.1(browserslist@4.23.1)(postcss@8.4.32): + /postcss-normalize@10.0.1(browserslist@4.23.2)(postcss@8.4.32): resolution: {integrity: sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==} engines: {node: '>= 12'} peerDependencies: @@ -17244,9 +17504,9 @@ packages: postcss: '>= 8' dependencies: '@csstools/normalize.css': 12.1.1 - browserslist: 4.23.1 + browserslist: 4.23.2 postcss: 8.4.32 - postcss-browser-comments: 4.0.0(browserslist@4.23.1)(postcss@8.4.32) + postcss-browser-comments: 4.0.0(browserslist@4.23.2)(postcss@8.4.32) sanitize.css: 13.0.0 /postcss-opacity-percentage@1.1.3(postcss@8.4.32): @@ -17313,7 +17573,7 @@ packages: '@csstools/postcss-trigonometric-functions': 1.0.2(postcss@8.4.32) '@csstools/postcss-unset-value': 1.0.2(postcss@8.4.32) autoprefixer: 10.4.16(postcss@8.4.32) - browserslist: 4.23.1 + browserslist: 4.23.2 css-blank-pseudo: 3.0.3(postcss@8.4.32) css-has-pseudo: 3.0.4(postcss@8.4.32) css-prefers-color-scheme: 6.0.3(postcss@8.4.32) @@ -17364,7 +17624,7 @@ packages: peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.23.1 + browserslist: 4.23.2 caniuse-api: 3.0.0 postcss: 8.4.32 @@ -17430,8 +17690,8 @@ packages: picocolors: 1.0.1 source-map-js: 1.2.0 - /postcss@8.4.38: - resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} + /postcss@8.4.39: + resolution: {integrity: sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==} engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.7 @@ -17454,6 +17714,7 @@ packages: /prettier@3.0.0: resolution: {integrity: sha512-zBf5eHpwHOGPC47h0zrPyNn+eAEIdEzfywMoYn2XPi0P44Zp0tSq64rq0xAREh4auw2cJZHo9QUob+NqCQky4g==} engines: {node: '>=14'} + hasBin: true dev: true /prettier@3.3.2: @@ -17569,7 +17830,7 @@ packages: /prosemirror-commands@1.5.2: resolution: {integrity: sha512-hgLcPaakxH8tu6YvVAaILV2tXYsW3rAdDR8WNkeKGcgeMVQg3/TMhPdVoh7iAmfgVjZGtcOSjKiQaoeKjzd2mQ==} dependencies: - prosemirror-model: 1.21.1 + prosemirror-model: 1.21.3 prosemirror-state: 1.4.3 prosemirror-transform: 1.9.0 dev: false @@ -17586,13 +17847,13 @@ packages: resolution: {integrity: sha512-wtjswVBd2vaQRrnYZaBCbyDqr232Ed4p2QPtRIUK5FuqHYKGWkEwl08oQM4Tw7DOR0FsasARV5uJFvMZWxdNxQ==} dependencies: prosemirror-keymap: 1.2.2 - prosemirror-model: 1.21.1 + prosemirror-model: 1.21.3 prosemirror-state: 1.4.3 prosemirror-view: 1.33.8 dev: false - /prosemirror-history@1.4.0: - resolution: {integrity: sha512-UUiGzDVcqo1lovOPdi9YxxUps3oBFWAIYkXLu3Ot+JPv1qzVogRbcizxK3LhHmtaUxclohgiOVesRw5QSlMnbQ==} + /prosemirror-history@1.4.1: + resolution: {integrity: sha512-2JZD8z2JviJrboD9cPuX/Sv/1ChFng+xh2tChQ2X4bB2HeK+rra/bmJ3xGntCcjhOqIzSDG6Id7e8RJ9QPXLEQ==} dependencies: prosemirror-state: 1.4.3 prosemirror-transform: 1.9.0 @@ -17618,7 +17879,7 @@ packages: resolution: {integrity: sha512-UziddX3ZYSYibgx8042hfGKmukq5Aljp2qoBiJRejD/8MH70siQNz5RB1TrdTPheqLMy4aCe4GYNF10/3lQS5g==} dependencies: markdown-it: 14.1.0 - prosemirror-model: 1.21.1 + prosemirror-model: 1.21.3 dev: false /prosemirror-menu@1.2.4: @@ -17626,12 +17887,12 @@ packages: dependencies: crelt: 1.0.6 prosemirror-commands: 1.5.2 - prosemirror-history: 1.4.0 + prosemirror-history: 1.4.1 prosemirror-state: 1.4.3 dev: false - /prosemirror-model@1.21.1: - resolution: {integrity: sha512-IVBAuMqOfltTr7yPypwpfdGT+6rGAteVOw2FO6GEvCGGa1ZwxLseqC1Eax/EChDvG/xGquB2d/hLdgh3THpsYg==} + /prosemirror-model@1.21.3: + resolution: {integrity: sha512-nt2Xs/RNGepD9hrrkzXvtCm1mpGJoQfFSPktGa0BF/aav6XsnmVGZ9sTXNWRLupAz5SCLa3EyKlFeK7zJWROKg==} dependencies: orderedmap: 2.1.1 dev: false @@ -17639,13 +17900,13 @@ packages: /prosemirror-schema-basic@1.2.2: resolution: {integrity: sha512-/dT4JFEGyO7QnNTe9UaKUhjDXbTNkiWTq/N4VpKaF79bBjSExVV2NXmJpcM7z/gD7mbqNjxbmWW5nf1iNSSGnw==} dependencies: - prosemirror-model: 1.21.1 + prosemirror-model: 1.21.3 dev: false /prosemirror-schema-list@1.4.0: resolution: {integrity: sha512-nZOIq/AkBSzCENxUyLm5ltWE53e2PLk65ghMN8qLQptOmDVixZlPqtMeQdiNw0odL9vNpalEjl3upgRkuJ/Jyw==} dependencies: - prosemirror-model: 1.21.1 + prosemirror-model: 1.21.3 prosemirror-state: 1.4.3 prosemirror-transform: 1.9.0 dev: false @@ -17653,7 +17914,7 @@ packages: /prosemirror-state@1.4.3: resolution: {integrity: sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q==} dependencies: - prosemirror-model: 1.21.1 + prosemirror-model: 1.21.3 prosemirror-transform: 1.9.0 prosemirror-view: 1.33.8 dev: false @@ -17662,13 +17923,13 @@ packages: resolution: {integrity: sha512-oEwX1wrziuxMtwFvdDWSFHVUWrFJWt929kVVfHvtTi8yvw+5ppxjXZkMG/fuTdFo+3DXyIPSKfid+Be1npKXDA==} dependencies: prosemirror-keymap: 1.2.2 - prosemirror-model: 1.21.1 + prosemirror-model: 1.21.3 prosemirror-state: 1.4.3 prosemirror-transform: 1.9.0 prosemirror-view: 1.33.8 dev: false - /prosemirror-trailing-node@2.0.8(prosemirror-model@1.21.1)(prosemirror-state@1.4.3)(prosemirror-view@1.33.8): + /prosemirror-trailing-node@2.0.8(prosemirror-model@1.21.3)(prosemirror-state@1.4.3)(prosemirror-view@1.33.8): resolution: {integrity: sha512-ujRYhSuhQb1Jsarh1IHqb2KoSnRiD7wAMDGucP35DN7j5af6X7B18PfdPIrbwsPTqIAj0fyOvxbuPsWhNvylmA==} peerDependencies: prosemirror-model: ^1.19.0 @@ -17677,7 +17938,7 @@ packages: dependencies: '@remirror/core-constants': 2.0.2 escape-string-regexp: 4.0.0 - prosemirror-model: 1.21.1 + prosemirror-model: 1.21.3 prosemirror-state: 1.4.3 prosemirror-view: 1.33.8 dev: false @@ -17685,13 +17946,13 @@ packages: /prosemirror-transform@1.9.0: resolution: {integrity: sha512-5UXkr1LIRx3jmpXXNKDhv8OyAOeLTGuXNwdVfg8x27uASna/wQkr9p6fD3eupGOi4PLJfbezxTyi/7fSJypXHg==} dependencies: - prosemirror-model: 1.21.1 + prosemirror-model: 1.21.3 dev: false /prosemirror-view@1.33.8: resolution: {integrity: sha512-4PhMr/ufz2cdvFgpUAnZfs+0xij3RsFysreeG9V/utpwX7AJtYCDVyuRxzWoMJIEf4C7wVihuBNMPpFLPCiLQw==} dependencies: - prosemirror-model: 1.21.1 + prosemirror-model: 1.21.3 prosemirror-state: 1.4.3 prosemirror-transform: 1.9.0 dev: false @@ -17760,6 +18021,10 @@ packages: /q@1.5.1: resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} engines: {node: '>=0.6.0', teleport: '>=0.2.0'} + deprecated: |- + You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other. + + (For a CapTP with native promises, see @endo/eventual-send and @endo/captp) /qs@6.11.0: resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} @@ -17767,8 +18032,8 @@ packages: dependencies: side-channel: 1.0.6 - /qs@6.12.1: - resolution: {integrity: sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==} + /qs@6.12.3: + resolution: {integrity: sha512-AWJm14H1vVaO/iNZ4/hO+HyaTehuy9nRqVdkTqlJt0HWvBiBIEXFmb4C0DGeYo3Xes9rrEW+TxHsaigCbN5ICQ==} engines: {node: '>=0.6'} dependencies: side-channel: 1.0.6 @@ -17851,7 +18116,7 @@ packages: peerDependencies: react-scripts: '>=2.1.3' dependencies: - react-scripts: 5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(@swc/core@1.6.3)(esbuild@0.21.3)(eslint@8.44.0)(react@18.2.0)(sass@1.71.1)(typescript@5.4.3) + react-scripts: 5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(@swc/core@1.6.13)(esbuild@0.21.3)(eslint@8.44.0)(react@18.2.0)(sass@1.71.1)(typescript@5.4.3) semver: 5.7.2 dev: true @@ -17919,7 +18184,7 @@ packages: dependencies: '@babel/code-frame': 7.24.7 address: 1.2.2 - browserslist: 4.23.1 + browserslist: 4.23.2 chalk: 4.1.2 cross-spawn: 7.0.3 detect-port-alt: 1.1.6 @@ -17942,7 +18207,7 @@ packages: strip-ansi: 6.0.1 text-table: 0.2.0 typescript: 5.4.3 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) transitivePeerDependencies: - eslint - supports-color @@ -18242,7 +18507,7 @@ packages: use-sidecar: 1.1.2(@types/react@18.2.45)(react@18.2.0) dev: true - /react-scripts@5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(@swc/core@1.6.3)(esbuild@0.21.3)(eslint@8.44.0)(react@18.2.0)(sass@1.71.1)(typescript@5.4.3): + /react-scripts@5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(@swc/core@1.6.13)(esbuild@0.21.3)(eslint@8.44.0)(react@18.2.0)(sass@1.71.1)(typescript@5.4.3): resolution: {integrity: sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==} engines: {node: '>=14.0.0'} hasBin: true @@ -18262,7 +18527,7 @@ packages: babel-plugin-named-asset-import: 0.3.8(@babel/core@7.22.5) babel-preset-react-app: 10.0.1 bfj: 7.1.0 - browserslist: 4.23.1 + browserslist: 4.23.2 camelcase: 6.3.0 case-sensitive-paths-webpack-plugin: 2.4.0 css-loader: 6.10.0(webpack@5.91.0) @@ -18283,7 +18548,7 @@ packages: postcss: 8.4.32 postcss-flexbugs-fixes: 5.0.2(postcss@8.4.32) postcss-loader: 6.2.1(postcss@8.4.32)(webpack@5.91.0) - postcss-normalize: 10.0.1(browserslist@4.23.1)(postcss@8.4.32) + postcss-normalize: 10.0.1(browserslist@4.23.2)(postcss@8.4.32) postcss-preset-env: 7.8.3(postcss@8.4.32) prompts: 2.4.2 react: 18.2.0 @@ -18297,9 +18562,9 @@ packages: source-map-loader: 3.0.2(webpack@5.91.0) style-loader: 3.3.4(webpack@5.91.0) tailwindcss: 3.4.4 - terser-webpack-plugin: 5.3.10(@swc/core@1.6.3)(esbuild@0.21.3)(webpack@5.91.0) + terser-webpack-plugin: 5.3.10(@swc/core@1.6.13)(esbuild@0.21.3)(webpack@5.91.0) typescript: 5.4.3 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) webpack-dev-server: 4.15.2(webpack@5.91.0) webpack-manifest-plugin: 4.1.1(webpack@5.91.0) workbox-webpack-plugin: 6.6.0(webpack@5.91.0) @@ -18413,8 +18678,8 @@ packages: tslib: 2.6.3 dev: false - /react-use@17.4.2(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-1jPtmWLD8OJJNYCdYLJEH/HM+bPDfJuyGwCYeJFgPmWY8ttwpgZnW5QnzgM55CYUByUiTjHxsGOnEpLl6yQaoQ==} + /react-use@17.5.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-PbfwSPMwp/hoL847rLnm/qkjg3sTRCvn6YhUZiHaUa3FA6/aNoFX79ul5Xt70O1rK+9GxSVqkY0eTwMdsR/bWg==} peerDependencies: react: '*' react-dom: '*' @@ -18620,6 +18885,7 @@ packages: /regjsparser@0.9.1: resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} + hasBin: true dependencies: jsesc: 0.5.0 @@ -18740,6 +19006,7 @@ packages: /resolve-url@0.2.1: resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==} + deprecated: https://github.com/lydell/resolve-url#deprecated dev: true /resolve.exports@1.1.1: @@ -18750,7 +19017,7 @@ packages: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true dependencies: - is-core-module: 2.13.1 + is-core-module: 2.14.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -18758,7 +19025,7 @@ packages: resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} hasBin: true dependencies: - is-core-module: 2.13.1 + is-core-module: 2.14.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -18813,12 +19080,16 @@ packages: /rimraf@2.6.3: resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true dependencies: glob: 7.2.3 dev: true /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true dependencies: glob: 7.2.3 @@ -18828,6 +19099,7 @@ packages: /rollup-plugin-terser@7.0.2(rollup@2.79.1): resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} + deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser peerDependencies: rollup: ^2.0.0 dependencies: @@ -18835,11 +19107,12 @@ packages: jest-worker: 26.6.2 rollup: 2.79.1 serialize-javascript: 4.0.0 - terser: 5.31.1 + terser: 5.31.2 /rollup@2.79.1: resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} engines: {node: '>=10.0.0'} + hasBin: true optionalDependencies: fsevents: 2.3.3 @@ -18914,6 +19187,8 @@ packages: /sane@4.1.0: resolution: {integrity: sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==} engines: {node: 6.* || 8.* || >= 10.*} + deprecated: some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added + hasBin: true dependencies: '@cnakazawa/watch': 1.0.4 anymatch: 2.0.0 @@ -18953,7 +19228,7 @@ packages: klona: 2.0.6 neo-async: 2.6.2 sass: 1.71.1 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) /sass-loader@13.3.2(sass@1.71.1)(webpack@5.91.0): resolution: {integrity: sha512-CQbKl57kdEv+KDLquhC+gE3pXt74LEAzm+tzywcA0/aHZuub8wTErbjAoNI57rPUWRYRNC5WUnNl8eGJNbDdwg==} @@ -18976,12 +19251,13 @@ packages: dependencies: neo-async: 2.6.2 sass: 1.71.1 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) dev: true /sass@1.71.1: resolution: {integrity: sha512-wovtnV2PxzteLlfNzbgm1tFXPLoZILYAMJtvoXXkD7/+1uP41eKkIt1ypWq5/q2uT94qHjXehEYfmjKOvjL9sg==} engines: {node: '>=14.0.0'} + hasBin: true dependencies: chokidar: 3.6.0 immutable: 4.3.6 @@ -19065,14 +19341,17 @@ packages: /semver@5.7.2: resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true dev: true /semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true /semver@7.6.2: resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} engines: {node: '>=10'} + hasBin: true /send@0.18.0: resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} @@ -19226,7 +19505,7 @@ packages: call-bind: 1.0.7 es-errors: 1.3.0 get-intrinsic: 1.2.4 - object-inspect: 1.13.1 + object-inspect: 1.13.2 /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -19340,10 +19619,11 @@ packages: abab: 2.0.6 iconv-lite: 0.6.3 source-map-js: 1.2.0 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) /source-map-resolve@0.5.3: resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==} + deprecated: See https://github.com/lydell/source-map-resolve#deprecated dependencies: atob: 2.1.2 decode-uri-component: 0.2.2 @@ -19360,6 +19640,7 @@ packages: /source-map-url@0.4.1: resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==} + deprecated: See https://github.com/lydell/source-map-url#deprecated dev: true /source-map@0.5.6: @@ -19387,6 +19668,7 @@ packages: /sourcemap-codec@1.4.8: resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + deprecated: Please use @jridgewell/sourcemap-codec instead /space-separated-tokens@1.1.5: resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==} @@ -19458,6 +19740,7 @@ packages: /stable@0.1.8: resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} + deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' /stack-generator@2.0.10: resolution: {integrity: sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==} @@ -19554,6 +19837,7 @@ packages: /storybook@8.1.10(@babel/preset-env@7.22.6)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-HHlZibyc/QkcQj8aEnYnYwEl+ItNZ/uRbCdkvJzu/vIWYon5jUg30mHFIGZprgLSt27CxOs30Et8yT9z4VhwjA==} + hasBin: true dependencies: '@storybook/cli': 8.1.10(@babel/preset-env@7.22.6)(react-dom@18.2.0)(react@18.2.0) transitivePeerDependencies: @@ -19744,7 +20028,7 @@ packages: peerDependencies: webpack: ^5.0.0 dependencies: - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) /style-mod@4.1.2: resolution: {integrity: sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==} @@ -19762,7 +20046,7 @@ packages: peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.23.1 + browserslist: 4.23.2 postcss: 8.4.32 postcss-selector-parser: 6.1.0 @@ -19776,6 +20060,7 @@ packages: /subscriptions-transport-ws@0.11.0(graphql@16.8.1): resolution: {integrity: sha512-8D4C6DIH5tGiAIpp5I0wD/xRlNiZAPGHygzCe7VzyzUoxHtawzjNAY9SUTXU05/EY2NMY9/9GF0ycizkXr1CWQ==} + deprecated: The `subscriptions-transport-ws` package is no longer maintained. We recommend you use `graphql-ws` instead. For help migrating Apollo software to `graphql-ws`, see https://www.apollographql.com/docs/apollo-server/data/subscriptions/#switching-from-subscriptions-transport-ws For general help using `graphql-ws`, see https://github.com/enisdenjo/graphql-ws/blob/master/README.md peerDependencies: graphql: ^15.7.2 || ^16.0.0 dependencies: @@ -19793,10 +20078,11 @@ packages: /sucrase@3.35.0: resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} engines: {node: '>=16 || 14 >=14.17'} + hasBin: true dependencies: '@jridgewell/gen-mapping': 0.3.5 commander: 4.1.1 - glob: 10.4.2 + glob: 10.4.5 lines-and-columns: 1.2.4 mz: 2.7.0 pirates: 4.0.6 @@ -19843,6 +20129,8 @@ packages: /svgo@1.3.2: resolution: {integrity: sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==} engines: {node: '>=4.0.0'} + deprecated: This SVGO version is no longer supported. Upgrade to v2.x.x. + hasBin: true dependencies: chalk: 2.4.2 coa: 2.0.2 @@ -19861,6 +20149,7 @@ packages: /svgo@2.8.0: resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==} engines: {node: '>=10.13.0'} + hasBin: true dependencies: '@trysound/sax': 0.2.0 commander: 7.2.0 @@ -19870,15 +20159,15 @@ packages: picocolors: 1.0.1 stable: 0.1.8 - /swc-loader@0.2.6(@swc/core@1.6.3)(webpack@5.91.0): + /swc-loader@0.2.6(@swc/core@1.6.13)(webpack@5.91.0): resolution: {integrity: sha512-9Zi9UP2YmDpgmQVbyOPJClY0dwf58JDyDMQ7uRc4krmc72twNI2fvlBWHLqVekBpPc7h5NJkGVT1zNDxFrqhvg==} peerDependencies: '@swc/core': ^1.2.147 webpack: '>=2' dependencies: - '@swc/core': 1.6.3 + '@swc/core': 1.6.13 '@swc/counter': 0.1.3 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) dev: true /swr@2.2.4(react@18.2.0): @@ -19911,6 +20200,7 @@ packages: /tailwindcss@3.4.4: resolution: {integrity: sha512-ZoyXOdJjISB7/BcLTR6SEsLgKtDStYyYZVLsUtWChO4Ps20CBad7lfJKVDiejocV4ME1hLmyY0WJE3hSDcmQ2A==} engines: {node: '>=14.0.0'} + hasBin: true dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -20031,7 +20321,7 @@ packages: ansi-escapes: 4.3.2 supports-hyperlinks: 2.3.0 - /terser-webpack-plugin@5.3.10(@swc/core@1.6.3)(esbuild@0.21.3)(webpack@5.91.0): + /terser-webpack-plugin@5.3.10(@swc/core@1.6.13)(esbuild@0.21.3)(webpack@5.91.0): resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -20048,20 +20338,21 @@ packages: optional: true dependencies: '@jridgewell/trace-mapping': 0.3.25 - '@swc/core': 1.6.3 + '@swc/core': 1.6.13 esbuild: 0.21.3 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 - terser: 5.31.1 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + terser: 5.31.2 + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) - /terser@5.31.1: - resolution: {integrity: sha512-37upzU1+viGvuFtBo9NPufCb9dwM0+l9hMxYyWfBA+fbwrPqNJAhbZ6W47bBFnZHKHTUBnMvi87434qq+qnxOg==} + /terser@5.31.2: + resolution: {integrity: sha512-LGyRZVFm/QElZHy/CPr/O4eNZOZIzsrQ92y4v9UJe/pFJjypje2yI3C2FmPtvUEnhadlSbmG2nXtdcjHOjCfxw==} engines: {node: '>=10'} + hasBin: true dependencies: '@jridgewell/source-map': 0.3.6 - acorn: 8.12.0 + acorn: 8.12.1 commander: 2.20.3 source-map-support: 0.5.21 @@ -20241,7 +20532,7 @@ packages: tslib: 2.6.3 dev: false - /ts-node@10.9.2(@swc/core@1.6.3)(@types/node@17.0.45)(typescript@5.4.3): + /ts-node@10.9.2(@swc/core@1.6.13)(@types/node@17.0.45)(typescript@5.4.3): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -20256,13 +20547,13 @@ packages: optional: true dependencies: '@cspotcode/source-map-support': 0.8.1 - '@swc/core': 1.6.3 + '@swc/core': 1.6.13 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 '@types/node': 17.0.45 - acorn: 8.12.0 + acorn: 8.12.1 acorn-walk: 8.3.3 arg: 4.1.3 create-require: 1.1.1 @@ -20378,11 +20669,6 @@ packages: engines: {node: '>=12.20'} dev: true - /type-fest@4.20.1: - resolution: {integrity: sha512-R6wDsVsoS9xYOpy8vgeBlqpdOyzJ12HNfQhC/aAKWM3YoCV9TtunJzh/QpkMgeDhkoynDcw5f1y+qF9yc/HHyg==} - engines: {node: '>=16'} - dev: false - /type-fest@4.21.0: resolution: {integrity: sha512-ADn2w7hVPcK6w1I0uWnM//y1rLXZhzB9mr0a3OirzclKF1Wp6VzevUmzz/NRAWunOT6E8HrnpGY7xOfc6K57fA==} engines: {node: '>=16'} @@ -20452,6 +20738,7 @@ packages: /typescript@5.4.3: resolution: {integrity: sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==} engines: {node: '>=14.17'} + hasBin: true /ua-parser-js@1.0.38: resolution: {integrity: sha512-Aq5ppTOfvrCMgAPneW1HfWj66Xi7XL+/mIy996R1/CLS/rcyJQm6QZdsKrUeivDFQ+Oc9Wyuwor8Ze8peEoUoQ==} @@ -20468,6 +20755,7 @@ packages: /uglify-js@3.18.0: resolution: {integrity: sha512-SyVVbcNBCk0dzr9XL/R/ySrmYf0s372K6/hFklzgcp2lBFyXtw4I7BOdDjlLhE1aVqaI/SHWXWmYdlZxuyF38A==} engines: {node: '>=0.8.0'} + hasBin: true requiresBuild: true dev: true optional: true @@ -20613,11 +20901,11 @@ packages: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} - /unplugin@1.10.1: - resolution: {integrity: sha512-d6Mhq8RJeGA8UfKCu54Um4lFA0eSaRa3XxdAJg8tIdxbu1ubW0hBCZUL7yI2uGyYCRndvbK8FLHzqy2XKfeMsg==} + /unplugin@1.11.0: + resolution: {integrity: sha512-3r7VWZ/webh0SGgJScpWl2/MRCZK5d3ZYFcNaeci/GQ7Teop7zf0Nl2pUuz7G21BwPd9pcUPOC5KmJ2L3WgC5g==} engines: {node: '>=14.0.0'} dependencies: - acorn: 8.12.0 + acorn: 8.12.1 chokidar: 3.6.0 webpack-sources: 3.2.3 webpack-virtual-modules: 0.6.2 @@ -20642,13 +20930,13 @@ packages: resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} engines: {node: '>=4'} - /update-browserslist-db@1.0.16(browserslist@4.23.1): - resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==} + /update-browserslist-db@1.1.0(browserslist@4.23.2): + resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: - browserslist: 4.23.1 + browserslist: 4.23.2 escalade: 3.1.2 picocolors: 1.0.1 @@ -20659,6 +20947,7 @@ packages: /urix@0.1.0: resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==} + deprecated: Please see https://github.com/lydell/urix#deprecated dev: true /url-parse@1.5.10: @@ -20671,7 +20960,7 @@ packages: resolution: {integrity: sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==} dependencies: punycode: 1.4.1 - qs: 6.12.1 + qs: 6.12.3 dev: true /use-callback-ref@1.3.2(@types/react@18.2.45)(react@18.2.0): @@ -20791,10 +21080,12 @@ packages: /uuid@9.0.1: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true /uvu@0.5.6: resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} engines: {node: '>=8'} + hasBin: true dependencies: dequal: 2.0.3 diff: 5.2.0 @@ -20847,6 +21138,7 @@ packages: /w3c-hr-time@1.0.2: resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} + deprecated: Use your platform's native performance.now() and performance.timeOrigin. dependencies: browser-process-hrtime: 1.0.0 @@ -20916,7 +21208,7 @@ packages: mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.2.0 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) /webpack-dev-middleware@6.1.3(webpack@5.91.0): resolution: {integrity: sha512-A4ChP0Qj8oGociTs6UdlRUGANIGrCDL3y+pmQMc+dSsraXHCatFpmMey4mYELA+juqwUqwQsUgJJISXl1KWmiw==} @@ -20932,7 +21224,7 @@ packages: mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.2.0 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) dev: true /webpack-dev-server@4.15.2(webpack@5.91.0): @@ -20976,9 +21268,9 @@ packages: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) webpack-dev-middleware: 5.3.4(webpack@5.91.0) - ws: 8.17.1 + ws: 8.18.0 transitivePeerDependencies: - bufferutil - debug @@ -21000,7 +21292,7 @@ packages: webpack: ^4.44.2 || ^5.47.0 dependencies: tapable: 2.2.1 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) webpack-sources: 2.3.1 /webpack-merge@5.10.0: @@ -21037,7 +21329,7 @@ packages: resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} dev: true - /webpack@5.91.0(@swc/core@1.6.3)(esbuild@0.21.3): + /webpack@5.91.0(@swc/core@1.6.13)(esbuild@0.21.3): resolution: {integrity: sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==} engines: {node: '>=10.13.0'} hasBin: true @@ -21052,12 +21344,12 @@ packages: '@webassemblyjs/ast': 1.12.1 '@webassemblyjs/wasm-edit': 1.12.1 '@webassemblyjs/wasm-parser': 1.12.1 - acorn: 8.12.0 - acorn-import-assertions: 1.9.0(acorn@8.12.0) - browserslist: 4.23.1 + acorn: 8.12.1 + acorn-import-assertions: 1.9.0(acorn@8.12.1) + browserslist: 4.23.2 chrome-trace-event: 1.0.4 enhanced-resolve: 5.17.0 - es-module-lexer: 1.5.3 + es-module-lexer: 1.5.4 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 @@ -21068,7 +21360,7 @@ packages: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(@swc/core@1.6.3)(esbuild@0.21.3)(webpack@5.91.0) + terser-webpack-plugin: 5.3.10(@swc/core@1.6.13)(esbuild@0.21.3)(webpack@5.91.0) watchpack: 2.4.1 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -21167,12 +21459,14 @@ packages: /which@1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true dependencies: isexe: 2.0.0 /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} + hasBin: true dependencies: isexe: 2.0.0 @@ -21254,6 +21548,7 @@ packages: /workbox-cacheable-response@6.6.0: resolution: {integrity: sha512-JfhJUSQDwsF1Xv3EV1vWzSsCOZn4mQ38bWEBR3LdvOxSPgB65gAM6cS2CX8rkkKHRgiLrN7Wxoyu+TuH67kHrw==} + deprecated: workbox-background-sync@6.6.0 dependencies: workbox-core: 6.6.0 @@ -21329,7 +21624,7 @@ packages: fast-json-stable-stringify: 2.1.0 pretty-bytes: 5.6.0 upath: 1.2.0 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) webpack-sources: 1.4.3 workbox-build: 6.6.0 transitivePeerDependencies: @@ -21406,8 +21701,8 @@ packages: utf-8-validate: optional: true - /ws@8.17.1: - resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} + /ws@8.18.0: + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -21461,6 +21756,7 @@ packages: /yaml@2.4.5: resolution: {integrity: sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==} engines: {node: '>= 14'} + hasBin: true /yargs-parser@20.2.9: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} @@ -21487,8 +21783,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 @@ -21574,7 +21870,7 @@ packages: graphql-request: 6.1.0(graphql@16.9.0) json-schema-to-typescript: 14.1.0 lodash: 4.17.21 - marked: 13.0.1 + marked: 13.0.2 prettier: 3.3.2 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) From 495bb41c05585e4a7f8feac6bec354f8dc17b97b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Thu, 11 Jul 2024 08:24:10 +0100 Subject: [PATCH 127/150] fix: Reduce React re-renders when checking `currentCard()` (#3398) --- .../src/@planx/components/Section/Public.tsx | 2 +- .../@planx/components/shared/Preview/Card.tsx | 6 +- editor.planx.uk/src/components/Header.tsx | 9 +- editor.planx.uk/src/lib/feedback.ts | 3 +- .../FlowEditor/lib/__tests__/clones.test.ts | 16 +-- .../FlowEditor/lib/__tests__/filters.test.ts | 17 ++- .../lib/__tests__/preview/canGoBack.test.ts | 105 +++++++----------- .../__tests__/preview/overrideAnswer.test.ts | 4 +- .../__tests__/preview/previousCard.test.ts | 8 +- .../removeNodesDependentOnPassport.test.ts | 23 ++-- .../__tests__/preview/upcomingCardIds.test.ts | 4 +- .../FlowEditor/lib/__tests__/setValue.test.ts | 20 ++-- .../FlowEditor/lib/analytics/provider.tsx | 6 +- .../src/pages/FlowEditor/lib/store/preview.ts | 20 ++-- .../src/pages/Preview/Questions.tsx | 8 +- .../src/pages/Preview/ReconciliationPage.tsx | 2 +- 16 files changed, 126 insertions(+), 127 deletions(-) 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/shared/Preview/Card.tsx b/editor.planx.uk/src/@planx/components/shared/Preview/Card.tsx index 6eb6ba8dda..72c8e261af 100644 --- a/editor.planx.uk/src/@planx/components/shared/Preview/Card.tsx +++ b/editor.planx.uk/src/@planx/components/shared/Preview/Card.tsx @@ -48,7 +48,7 @@ const Card: React.FC = ({ ...props }) => { const theme = useTheme(); - const [path, currentCard] = useStore((state) => [ + const [path, visibleNode] = useStore((state) => [ state.path, state.currentCard, ]); @@ -57,9 +57,7 @@ const Card: React.FC = ({ const { track } = useAnalyticsTracking(); useEffect(() => { - // The Card component is only rendered when there's content the user will - // see - const visibleNode = currentCard(); + // The Card component is only rendered when there's content the user will see if (visibleNode?.id) track(visibleNode?.id); }, []); diff --git a/editor.planx.uk/src/components/Header.tsx b/editor.planx.uk/src/components/Header.tsx index fefadf8f55..467af46ad1 100644 --- a/editor.planx.uk/src/components/Header.tsx +++ b/editor.planx.uk/src/components/Header.tsx @@ -259,20 +259,19 @@ const Breadcrumbs: React.FC = () => { }; const NavBar: React.FC = () => { - const [index, sectionCount, title, hasSections, saveToEmail, path] = useStore( - (state) => [ + const [index, sectionCount, title, hasSections, saveToEmail, path, node] = + useStore((state) => [ state.currentSectionIndex, state.sectionCount, state.currentSectionTitle, state.hasSections, state.saveToEmail, state.path, - ], - ); + state.currentCard, + ]); const isSaveAndReturnLandingPage = path !== ApplicationPath.SingleSession && !saveToEmail; const isContentPage = useCurrentRoute()?.data?.isContentPage; - const { node } = useAnalyticsTracking(); const isSectionCard = node?.type == TYPES.Section; const isVisible = hasSections && diff --git a/editor.planx.uk/src/lib/feedback.ts b/editor.planx.uk/src/lib/feedback.ts index fec8766746..f4e6464512 100644 --- a/editor.planx.uk/src/lib/feedback.ts +++ b/editor.planx.uk/src/lib/feedback.ts @@ -23,13 +23,12 @@ export type FeedbackMetadata = { export async function getInternalFeedbackMetadata(): Promise { const { breadcrumbs, - currentCard, + currentCard: node, computePassport, fetchCurrentTeam, id: flowId, } = useStore.getState(); const { id: teamId } = await fetchCurrentTeam(); - const node = currentCard(); const userData = { breadcrumbs: breadcrumbs, passport: computePassport(), diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/clones.test.ts b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/clones.test.ts index 3f608eda46..71f051ccf6 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/clones.test.ts +++ b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/clones.test.ts @@ -3,7 +3,7 @@ const { getState, setState } = vanillaStore; import forwardsFlow from "./mocks/flowWithClones.json"; import reverseFlow from "./mocks/flowWithReverseClones.json"; -const { record, previousCard, currentCard, upcomingCardIds, resetPreview } = +const { record, previousCard, getCurrentCard, upcomingCardIds, resetPreview } = getState(); beforeEach(() => { @@ -54,14 +54,14 @@ describe("Clone order in flow (backwards)", () => { // Traverse forward to final node record("question", { answers: ["leftChoice"] }); record("clone", { answers: ["finalNode"] }); - expect(currentCard()?.id).toBe("finalNode"); + expect(getCurrentCard()?.id).toBe("finalNode"); // Traverse back one-by-one to first node - let previous = previousCard(currentCard()); + let previous = previousCard(getCurrentCard()); expect(previous).toBe("clone"); record(previous!); - previous = previousCard(currentCard()); + previous = previousCard(getCurrentCard()); expect(previous).toBe("question"); record(previous!); @@ -79,18 +79,18 @@ describe("Clone order in flow (backwards)", () => { record("question", { answers: ["rightChoice"] }); record("rightNotice", { answers: ["clone"] }); record("clone", { answers: ["finalNode"] }); - expect(currentCard()?.id).toBe("finalNode"); + expect(getCurrentCard()?.id).toBe("finalNode"); // Traverse back one-by-one to first node - let previous = previousCard(currentCard()); + let previous = previousCard(getCurrentCard()); expect(previous).toBe("clone"); record(previous!); - previous = previousCard(currentCard()); + previous = previousCard(getCurrentCard()); expect(previous).toBe("rightNotice"); record(previous!); - previous = previousCard(currentCard()); + previous = previousCard(getCurrentCard()); expect(previous).toBe("question"); record(previous!); diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/filters.test.ts b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/filters.test.ts index dc1d3451d7..30e90ac03d 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/filters.test.ts +++ b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/filters.test.ts @@ -4,8 +4,13 @@ import flowWithBranchingFilters from "./mocks/flowWithBranchingFilters.json"; import flowWithRootFilter from "./mocks/flowWithRootFilter.json"; const { getState, setState } = vanillaStore; -const { upcomingCardIds, resetPreview, record, currentCard, collectedFlags } = - getState(); +const { + upcomingCardIds, + resetPreview, + record, + getCurrentCard, + collectedFlags, +} = getState(); // https://i.imgur.com/k0kkKox.png describe("A filter on the root of the graph", () => { @@ -74,9 +79,9 @@ describe("A filter on a branch", () => { record("fork", { answers: ["filter2"] }); // XXX: Test fails here - // The currentCard returns as "immunityFlag2" which we should not land on - + // getCurrentCard returns as "immunityFlag2" which we should not land on - // the flags on the first filter are skipped, we go direct from "immunityPath1" to "fork" - expect(currentCard()?.id).toBe("immunityPath2"); + expect(getCurrentCard()?.id).toBe("immunityPath2"); }); }); @@ -97,7 +102,7 @@ describe("Nodes on a filter path should only be auto-answered when the path matc record("TiIuAVIXsV", { answers: ["hdaeOVIXsV"], auto: false }); // land on the correct result component - expect(currentCard()?.id).toBe("seN42VIXsV"); + expect(getCurrentCard()?.id).toBe("seN42VIXsV"); expect(getState().resultData()["Planning permission"]).toHaveProperty( "flag.value", "PLANNING_PERMISSION_REQUIRED", @@ -131,7 +136,7 @@ describe("Nodes on a filter path should only be auto-answered when the path matc upcomingCardIds(); // land on the correct result component - expect(currentCard()?.id).toBe("seN42VIXsV"); + expect(getCurrentCard()?.id).toBe("seN42VIXsV"); expect(getState().resultData()["Planning permission"]).toHaveProperty( "flag.value", "PLANNING_PERMISSION_REQUIRED", diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/canGoBack.test.ts b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/canGoBack.test.ts index be23cda4d3..6a12ab655d 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/canGoBack.test.ts +++ b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/canGoBack.test.ts @@ -3,6 +3,8 @@ import { ComponentType as TYPES } from "@opensystemslab/planx-core/types"; import { Store, vanillaStore } from "../../store"; const { getState, setState } = vanillaStore; +const { canGoBack, getCurrentCard, resetPreview, record, changeAnswer } = + getState(); // https://imgur.com/VFV64ax const flow: Store.flow = { @@ -58,7 +60,7 @@ const flow: Store.flow = { }; beforeEach(() => { - getState().resetPreview(); + resetPreview(); setState({ flow, }); @@ -66,90 +68,69 @@ beforeEach(() => { describe("can go back if", () => { test("the previous component was manually answered", () => { - setState({ - breadcrumbs: { - Question: { - auto: false, - answers: ["NoFeeAnswerPath"], - }, - }, + record("Question", { + auto: false, + answers: ["NoFeeAnswerPath"], }); - expect(getState().canGoBack(getState().currentCard())).toStrictEqual(true); + + expect(canGoBack(getCurrentCard())).toStrictEqual(true); }); test("the user skipped the payment component", () => { - setState({ - breadcrumbs: { - Question: { - auto: false, - answers: ["NoFeeAnswerPath"], - }, - Pay: { - auto: true, - }, - }, + record("Question", { + auto: false, + answers: ["NoFeeAnswerPath"], }); - expect(getState().canGoBack(getState().currentCard())).toStrictEqual(true); + record("Pay", { auto: true }); + + expect(canGoBack(getCurrentCard())).toStrictEqual(true); }); }); describe("cannot go back if", () => { test("it's the very first component", () => { - expect(getState().canGoBack(getState().currentCard())).toStrictEqual(false); + expect(canGoBack(getCurrentCard())).toStrictEqual(false); }); test("the only previous component was auto-answered", () => { - setState({ - breadcrumbs: { - Question: { - auto: true, - answers: ["NoFeeAnswerPath"], - }, - }, + record("Question", { + auto: true, + answers: ["NoFeeAnswerPath"], }); - expect(getState().canGoBack(getState().currentCard())).toStrictEqual(false); + + expect(canGoBack(getCurrentCard())).toStrictEqual(false); }); test("the applicant made a payment", () => { - setState({ - breadcrumbs: { - Question: { - auto: false, - answers: ["FeeAnswerPath"], - }, - Calculate: { - auto: true, - data: { - fee: 10, - }, - }, - Pay: { - auto: false, - }, + record("Question", { + auto: false, + answers: ["NoFeeAnswerPath"], + }); + record("Calculate", { + auto: true, + data: { + fee: 10, }, }); - expect(getState().canGoBack(getState().currentCard())).toStrictEqual(false); + record("Pay", { auto: false }); + + expect(canGoBack(getCurrentCard())).toStrictEqual(false); }); test("changing a component's answer", () => { - setState({ - breadcrumbs: { - Question: { - auto: false, - answers: ["FeeAnswerPath"], - }, - Calculate: { - auto: true, - data: { - fee: 10, - }, - }, - Pay: { - auto: false, - }, + record("Question", { + auto: false, + answers: ["FeeAnswerPath"], + }); + record("Calculate", { + auto: true, + data: { + fee: 10, }, - changedNode: "Confirmation", }); - expect(getState().canGoBack(getState().currentCard())).toStrictEqual(false); + record("Pay", { auto: false }); + changeAnswer("Confirmation"); + + expect(canGoBack(getCurrentCard())).toStrictEqual(false); }); }); diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/overrideAnswer.test.ts b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/overrideAnswer.test.ts index e0f53e3992..c7bcb0da1b 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/overrideAnswer.test.ts +++ b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/overrideAnswer.test.ts @@ -2,7 +2,7 @@ import { vanillaStore } from "../../store"; const { getState, setState } = vanillaStore; -const { overrideAnswer, currentCard, upcomingCardIds, record } = getState(); +const { overrideAnswer, getCurrentCard, upcomingCardIds, record } = getState(); test("it clears the correct breadcrumb and navigates back to the right node", async () => { // set up initial state, confirm our passport computes as expected @@ -38,7 +38,7 @@ test("it clears the correct breadcrumb and navigates back to the right node", as }); // confirm we've navigated back to the right node, and that PropertyInformation is queued up again in upcoming cards - expect(currentCard()?.id).toEqual("FirstPropertyTypeQuestionNodeId"); + expect(getCurrentCard()?.id).toEqual("FirstPropertyTypeQuestionNodeId"); expect(upcomingCardIds()).toContain("PropertyInformationNodeId"); // select a new answer, confirm our passport has updated diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/previousCard.test.ts b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/previousCard.test.ts index 5ccedeeb2b..92ccc71a37 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/previousCard.test.ts +++ b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/previousCard.test.ts @@ -2,7 +2,7 @@ import { vanillaStore } from "../../store"; const { getState, setState } = vanillaStore; -const { resetPreview, previousCard, currentCard } = getState(); +const { resetPreview, previousCard, getCurrentCard } = getState(); beforeEach(() => { resetPreview(); @@ -24,7 +24,7 @@ const setup = (args = {}) => describe("store.previousCard is", () => { test("undefined when there are no breadcrumbs", () => { setup(); - expect(previousCard(currentCard())).toBeUndefined(); + expect(previousCard(getCurrentCard())).toBeUndefined(); }); test("undefined when cards were automatically answered", () => { @@ -34,7 +34,7 @@ describe("store.previousCard is", () => { b: { auto: true }, }, }); - expect(previousCard(currentCard())).toBeUndefined(); + expect(previousCard(getCurrentCard())).toBeUndefined(); }); test("the most recent human-answered card id", () => { @@ -45,6 +45,6 @@ describe("store.previousCard is", () => { }, }); - expect(previousCard(currentCard())).toEqual("a"); + expect(previousCard(getCurrentCard())).toEqual("a"); }); }); diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/removeNodesDependentOnPassport.test.ts b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/removeNodesDependentOnPassport.test.ts index 092553572a..dcf8e20d8b 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/removeNodesDependentOnPassport.test.ts +++ b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/removeNodesDependentOnPassport.test.ts @@ -15,8 +15,14 @@ let flowWithPassportComponents = cloneDeep( flowWithPassportComponentsMock, ) as Store.flow; -const { record, resetPreview, previousCard, currentCard, changeAnswer } = - getState(); +const { + record, + resetPreview, + previousCard, + getCurrentCard, + changeAnswer, + setCurrentCard, +} = getState(); beforeEach(() => { resetPreview(); @@ -61,7 +67,7 @@ describe("removeNodesDependentOnPassport", () => { }); describe("nodesDependentOnPassport with record", () => { - test("should remove Draw Boundary and Planning contraints from cachedBreadcrumbs", () => { + test("should remove Draw Boundary and Planning constraints from cachedBreadcrumbs", () => { const cachedBreadcrumbs = { ...breadcrumbsDependentOnPassport, } as Store.cachedBreadcrumbs; @@ -182,7 +188,7 @@ describe("nodesDependentOnPassport with record", () => { }, }); - expect(currentCard()?.id).toEqual("drawBoundary"); + expect(getCurrentCard()?.id).toEqual("drawBoundary"); }); test("should clear _nodesPendingEdit after edition", () => { @@ -229,8 +235,11 @@ describe("nodesDependentOnPassport with previousCard", () => { _nodesPendingEdit: [], }); - expect(currentCard()?.id).toEqual("drawBoundary"); - expect(previousCard(currentCard())).toEqual("text"); + // Manually call setCurrentCard() as we're not using record() as part of our setup + setCurrentCard(); + + expect(getCurrentCard()?.id).toEqual("drawBoundary"); + expect(previousCard(getCurrentCard())).toEqual("text"); }); test("To be last pushed to the breadcrumbs when changing answer", () => { @@ -247,7 +256,7 @@ describe("nodesDependentOnPassport with previousCard", () => { _nodesPendingEdit, }); - expect(previousCard(currentCard())).toEqual("findProperty"); + expect(previousCard(getCurrentCard())).toEqual("findProperty"); }); }); diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/upcomingCardIds.test.ts b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/upcomingCardIds.test.ts index a72b347792..6c3a1f5e05 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/upcomingCardIds.test.ts +++ b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/upcomingCardIds.test.ts @@ -3,7 +3,7 @@ import { ComponentType as TYPES } from "@opensystemslab/planx-core/types"; import { Store, vanillaStore } from "../../store"; const { getState, setState } = vanillaStore; -const { upcomingCardIds, resetPreview, record, currentCard } = getState(); +const { upcomingCardIds, resetPreview, record, getCurrentCard } = getState(); const flow: Store.flow = { _root: { @@ -75,7 +75,7 @@ test.skip("A node is only auto-answered when it is the first upcomingCardId(), n record("SetValue", { data: { fruit: ["apple"] }, auto: true }); clickContinue(); - expect(currentCard()?.id).toBe("Content"); + expect(getCurrentCard()?.id).toBe("Content"); // "AutomatedQuestion" should still be queued up, not already answered based on SetValue expect(visitedNodes()).not.toContain("AutomatedQuestion"); diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/setValue.test.ts b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/setValue.test.ts index 09052ced51..72983ec6fd 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/setValue.test.ts +++ b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/setValue.test.ts @@ -4,7 +4,7 @@ import { cloneDeep, merge } from "lodash"; import { Store, vanillaStore } from "../store"; const { getState, setState } = vanillaStore; -const { resetPreview, record, computePassport, currentCard } = getState(); +const { resetPreview, record, computePassport, getCurrentCard } = getState(); const baseFlow: Store.flow = { _root: { @@ -76,7 +76,7 @@ describe("SetValue component", () => { expect(breadcrumbKeys).toContain("setValue1"); // Middle of flow reached - expect(currentCard()?.id).toEqual("middleOfService"); + expect(getCurrentCard()?.id).toEqual("middleOfService"); // Passport correctly populated expect(computePassport()?.data?.myKey).toHaveLength(1); @@ -94,7 +94,7 @@ describe("SetValue component", () => { expect(breadcrumbKeys).toContain("setValue2"); // End of flow reached - expect(currentCard()?.id).toEqual("endOfService"); + expect(getCurrentCard()?.id).toEqual("endOfService"); // Passport correctly populated expect(computePassport()?.data?.myKey).toHaveLength(1); @@ -133,7 +133,7 @@ describe("SetValue component", () => { expect(breadcrumbKeys).toContain("setValue1"); // Middle of flow reached - expect(currentCard()?.id).toEqual("middleOfService"); + expect(getCurrentCard()?.id).toEqual("middleOfService"); // Passport correctly populated expect(computePassport()?.data?.myKey).toHaveLength(1); @@ -155,7 +155,7 @@ describe("SetValue component", () => { expect(breadcrumbKeys).toContain("setValue2"); // End of flow reached - expect(currentCard()?.id).toEqual("endOfService"); + expect(getCurrentCard()?.id).toEqual("endOfService"); // Passport correctly populated expect(computePassport()?.data?.myKey).toHaveLength(2); @@ -212,7 +212,7 @@ describe("SetValue component", () => { expect(breadcrumbKeys).toContain("setValue1"); // Middle of flow reached - expect(currentCard()?.id).toEqual("middleOfService"); + expect(getCurrentCard()?.id).toEqual("middleOfService"); // Passport correctly populated - value not present expect(computePassport()?.data?.myKey).toBeUndefined(); @@ -236,7 +236,7 @@ describe("SetValue component", () => { record("setValue3", { data: { myKey: ["mySecondValue"] } }); // End of flow reached - expect(currentCard()?.id).toEqual("endOfService"); + expect(getCurrentCard()?.id).toEqual("endOfService"); // Passport correctly populated - value no longer set expect(computePassport()?.data?.myKey).toBeUndefined(); @@ -265,7 +265,7 @@ describe("SetValue component", () => { record("setValue3", { data: { myKey: ["myUnsetValue"] } }); // End of flow reached - expect(currentCard()?.id).toEqual("endOfService"); + expect(getCurrentCard()?.id).toEqual("endOfService"); // Passport correctly populated - passport variable not removed as values do not match expect(computePassport()?.data?.myKey).toEqual("mySecondValue"); @@ -320,7 +320,7 @@ describe("SetValue component", () => { expect(breadcrumbKeys).toContain("setValue1"); // Middle of flow reached - expect(currentCard()?.id).toEqual("middleOfService"); + expect(getCurrentCard()?.id).toEqual("middleOfService"); // Passport correctly populated - value not present expect(computePassport()?.data?.myKey).toBeUndefined(); @@ -344,7 +344,7 @@ describe("SetValue component", () => { record("setValue3", { data: { myKey: ["mySecondValue"] } }); // End of flow reached - expect(currentCard()?.id).toEqual("endOfService"); + expect(getCurrentCard()?.id).toEqual("endOfService"); // Passport correctly populated - key:value pair removed expect(computePassport()?.data).not.toHaveProperty("myKey"); diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/analytics/provider.tsx b/editor.planx.uk/src/pages/FlowEditor/lib/analytics/provider.tsx index 5ba9bbf4ed..b4090bef66 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/analytics/provider.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/lib/analytics/provider.tsx @@ -51,7 +51,6 @@ let lastVisibleNodeAnalyticsLogId: number | undefined = undefined; const analyticsContext = createContext<{ createAnalytics: (type: AnalyticsType) => Promise; trackEvent: (eventData: EventData) => Promise; - node: Store.node | null; track: ( nodeId: string, direction?: AnalyticsLogDirection, @@ -60,7 +59,6 @@ const analyticsContext = createContext<{ }>({ createAnalytics: () => Promise.resolve(), trackEvent: () => Promise.resolve(), - node: null, track: () => Promise.resolve(), }); const { Provider } = analyticsContext; @@ -90,7 +88,6 @@ export const AnalyticsProvider: React.FC<{ children: React.ReactNode }> = ({ state.id, state.flow, ]); - const node = currentCard(); const isAnalyticsEnabled = new URL(window.location.href).searchParams.get("analytics") !== "false"; const shouldTrackAnalytics = @@ -138,7 +135,6 @@ export const AnalyticsProvider: React.FC<{ children: React.ReactNode }> = ({ = ({ }); const id = response.data.insert_analytics_one.id; setAnalyticsId(id); - const currentNodeId = currentCard()?.id; + const currentNodeId = currentCard?.id; if (currentNodeId) track(currentNodeId, type, id); } diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/store/preview.ts b/editor.planx.uk/src/pages/FlowEditor/lib/store/preview.ts index be77eeeb9b..f17ba45b38 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/store/preview.ts +++ b/editor.planx.uk/src/pages/FlowEditor/lib/store/preview.ts @@ -39,7 +39,9 @@ export interface PreviewStore extends Store.Store { upToNodeId: Store.nodeId, visited?: Array, ) => Array; - currentCard: () => Store.node | null; + currentCard: ({ id: Store.nodeId } & Store.node) | null; + setCurrentCard: () => void; + getCurrentCard: () => ({ id: Store.nodeId } & Store.node) | null; hasPaid: () => boolean; previousCard: ( node: Store.node | null, @@ -136,18 +138,15 @@ export const previewStore: StateCreator< return res; }, - currentCard() { + setCurrentCard() { const { upcomingCardIds, flow } = get(); const upcoming = upcomingCardIds(); if (upcoming.length > 0) { const id = upcoming[0]; - return { - id, - ...flow[id], - }; + set({ currentCard: { id, ...flow[id] } }); } else { - return null; + set({ currentCard: null }); } }, @@ -287,6 +286,7 @@ export const previewStore: StateCreator< _nodesPendingEdit, changedNode, updateSectionData, + setCurrentCard, } = get(); if (!flow[id]) throw new Error(`id "${id}" not found`); @@ -369,6 +369,7 @@ export const previewStore: StateCreator< }); } } + setCurrentCard(); updateSectionData(); }, @@ -379,6 +380,7 @@ export const previewStore: StateCreator< resumeSession(session: Session) { set({ ...session }); + get().setCurrentCard(); get().updateSectionData(); }, @@ -652,6 +654,10 @@ export const previewStore: StateCreator< return currentRequestedFiles || emptyFileList; }, + + currentCard: null, + + getCurrentCard: () => get().currentCard, }); const knownNots = ( diff --git a/editor.planx.uk/src/pages/Preview/Questions.tsx b/editor.planx.uk/src/pages/Preview/Questions.tsx index 194a5f7edf..ac1f400730 100644 --- a/editor.planx.uk/src/pages/Preview/Questions.tsx +++ b/editor.planx.uk/src/pages/Preview/Questions.tsx @@ -63,6 +63,8 @@ const Questions = ({ previewEnvironment }: QuestionsProps) => { canGoBack, setPreviewEnvironment, getType, + node, + setCurrentCard, ] = useStore((state) => [ state.previousCard, state.record, @@ -75,9 +77,11 @@ const Questions = ({ previewEnvironment }: QuestionsProps) => { state.canGoBack, state.setPreviewEnvironment, state.getType, + state.currentCard, + state.setCurrentCard, ]); const isStandalone = previewEnvironment === "standalone"; - const { createAnalytics, node, trackEvent } = useAnalyticsTracking(); + const { createAnalytics, trackEvent } = useAnalyticsTracking(); const [gotFlow, setGotFlow] = useState(false); const isUsingLocalStorage = useStore((state) => state.path) === ApplicationPath.SingleSession; @@ -89,6 +93,8 @@ const Questions = ({ previewEnvironment }: QuestionsProps) => { // Initial setup useEffect(() => { + setCurrentCard(); + if (!isStandalone) return; if (isUsingLocalStorage) { diff --git a/editor.planx.uk/src/pages/Preview/ReconciliationPage.tsx b/editor.planx.uk/src/pages/Preview/ReconciliationPage.tsx index 75d13added..2e52f43042 100644 --- a/editor.planx.uk/src/pages/Preview/ReconciliationPage.tsx +++ b/editor.planx.uk/src/pages/Preview/ReconciliationPage.tsx @@ -38,7 +38,7 @@ const ReconciliationPage: React.FC = ({ state.flow, state.hasSections, state.sectionNodes, - state.currentCard(), + state.currentCard, state.changeAnswer, state.record, state.computePassport(), From 30aaffbccead1b6560cbab645974892f80b37645 Mon Sep 17 00:00:00 2001 From: Jessica McInchak Date: Thu, 11 Jul 2024 09:47:03 +0200 Subject: [PATCH 128/150] chore: add columns to `submissions_services_summary` for S3 applications (#3403) --- hasura.planx.uk/metadata/tables.yaml | 20 +++++ .../down.sql | 79 ++++++++++++++++ .../up.sql | 90 +++++++++++++++++++ 3 files changed, 189 insertions(+) create mode 100644 hasura.planx.uk/migrations/1720635370662_add_s3_applications_to_submissions_summary_view/down.sql create mode 100644 hasura.planx.uk/migrations/1720635370662_add_s3_applications_to_submissions_summary_view/up.sql diff --git a/hasura.planx.uk/metadata/tables.yaml b/hasura.planx.uk/metadata/tables.yaml index a20b9f2d82..3118099b7b 100644 --- a/hasura.planx.uk/metadata/tables.yaml +++ b/hasura.planx.uk/metadata/tables.yaml @@ -1557,6 +1557,7 @@ - number_times_resumed - sent_to_bops - sent_to_email + - sent_to_s3_power_automate - sent_to_uniform - user_clicked_save - user_invited_to_pay @@ -1565,7 +1566,16 @@ - email_applications - payment_requests - payment_status + - s3_applications - uniform_applications + - allow_list_answers + - application_declaration_connection + - draw_boundary_action + - find_property_action + - property_constraints_planning + - property_type + - proposal_project_type + - user_role - service_slug - session_id - team_slug @@ -1579,6 +1589,7 @@ - number_times_resumed - sent_to_bops - sent_to_email + - sent_to_s3_power_automate - sent_to_uniform - user_clicked_save - user_invited_to_pay @@ -1587,7 +1598,16 @@ - email_applications - payment_requests - payment_status + - s3_applications - uniform_applications + - allow_list_answers + - application_declaration_connection + - draw_boundary_action + - find_property_action + - property_constraints_planning + - property_type + - proposal_project_type + - user_role - service_slug - session_id - team_slug diff --git a/hasura.planx.uk/migrations/1720635370662_add_s3_applications_to_submissions_summary_view/down.sql b/hasura.planx.uk/migrations/1720635370662_add_s3_applications_to_submissions_summary_view/down.sql new file mode 100644 index 0000000000..462fb42a34 --- /dev/null +++ b/hasura.planx.uk/migrations/1720635370662_add_s3_applications_to_submissions_summary_view/down.sql @@ -0,0 +1,79 @@ +CREATE OR REPLACE VIEW "public"."submission_services_summary" AS + WITH resumes_per_session AS ( + SELECT reconciliation_requests.session_id, + count(reconciliation_requests.id) AS number_times_resumed + FROM reconciliation_requests + GROUP BY reconciliation_requests.session_id + ), bops_agg AS ( + SELECT bops_applications.session_id, + json_agg(json_build_object('id', bops_applications.bops_id, 'submittedAt', bops_applications.created_at, 'destinationUrl', bops_applications.destination_url) ORDER BY bops_applications.created_at DESC) AS bops_applications + FROM bops_applications + GROUP BY bops_applications.session_id + ), email_agg AS ( + SELECT email_applications.session_id, + json_agg(json_build_object('id', email_applications.id, 'recipient', email_applications.recipient, 'submittedAt', email_applications.created_at) ORDER BY email_applications.created_at DESC) AS email_applications + FROM email_applications + GROUP BY email_applications.session_id + ), uniform_agg AS ( + SELECT uniform_applications.submission_reference, + json_agg(json_build_object('id', uniform_applications.idox_submission_id, 'submittedAt', uniform_applications.created_at) ORDER BY uniform_applications.created_at DESC) AS uniform_applications + FROM uniform_applications + GROUP BY uniform_applications.submission_reference + ), payment_requests_agg AS ( + SELECT payment_requests.session_id, + json_agg(json_build_object('id', payment_requests.id, 'createdAt', payment_requests.created_at, 'paidAt', payment_requests.paid_at, 'govpayPaymentId', payment_requests.govpay_payment_id) ORDER BY payment_requests.created_at DESC) AS payment_requests + FROM payment_requests + GROUP BY payment_requests.session_id + ), payment_status_agg AS ( + SELECT payment_status.session_id, + json_agg(json_build_object('govpayPaymentId', payment_status.payment_id, 'createdAt', payment_status.created_at, 'status', payment_status.status) ORDER BY payment_status.created_at DESC) AS payment_status + FROM payment_status + GROUP BY payment_status.session_id + ) + SELECT (ls.id)::text AS session_id, + t.slug AS team_slug, + f.slug AS service_slug, + ls.created_at, + ls.submitted_at, + ((ls.submitted_at)::date - (ls.created_at)::date) AS session_length_days, + ls.has_user_saved AS user_clicked_save, + rps.number_times_resumed, + ls.allow_list_answers, + (ls.allow_list_answers -> 'proposal.projectType'::text) AS proposal_project_type, + (ls.allow_list_answers -> 'application.declaration.connection'::text) AS application_declaration_connection, + (ls.allow_list_answers -> 'property.type'::text) AS property_type, + (ls.allow_list_answers -> 'drawBoundary.action'::text) AS draw_boundary_action, + (ls.allow_list_answers -> 'user.role'::text) AS user_role, + (ls.allow_list_answers -> 'property.constraints.planning'::text) AS property_constraints_planning, + CASE + WHEN (((pr.payment_requests)::jsonb IS NOT NULL) AND (jsonb_array_length((pr.payment_requests)::jsonb) > 0)) THEN true + ELSE false + END AS user_invited_to_pay, + pr.payment_requests, + ps.payment_status, + CASE + WHEN (((ba.bops_applications)::jsonb IS NOT NULL) AND (jsonb_array_length((ba.bops_applications)::jsonb) > 0)) THEN true + ELSE false + END AS sent_to_bops, + ba.bops_applications, + CASE + WHEN (((ua.uniform_applications)::jsonb IS NOT NULL) AND (jsonb_array_length((ua.uniform_applications)::jsonb) > 0)) THEN true + ELSE false + END AS sent_to_uniform, + ua.uniform_applications, + CASE + WHEN (((ea.email_applications)::jsonb IS NOT NULL) AND (jsonb_array_length((ea.email_applications)::jsonb) > 0)) THEN true + ELSE false + END AS sent_to_email, + ea.email_applications, + (ls.allow_list_answers -> 'findProperty.action'::text) AS find_property_action + FROM ((((((((lowcal_sessions ls + LEFT JOIN flows f ON ((f.id = ls.flow_id))) + LEFT JOIN teams t ON ((t.id = f.team_id))) + LEFT JOIN resumes_per_session rps ON ((rps.session_id = (ls.id)::text))) + LEFT JOIN payment_requests_agg pr ON ((pr.session_id = ls.id))) + LEFT JOIN payment_status_agg ps ON ((ps.session_id = ls.id))) + LEFT JOIN bops_agg ba ON ((ba.session_id = (ls.id)::text))) + LEFT JOIN uniform_agg ua ON ((ua.submission_reference = (ls.id)::text))) + LEFT JOIN email_agg ea ON ((ea.session_id = ls.id))) + WHERE ((f.slug IS NOT NULL) AND (t.slug IS NOT NULL)); diff --git a/hasura.planx.uk/migrations/1720635370662_add_s3_applications_to_submissions_summary_view/up.sql b/hasura.planx.uk/migrations/1720635370662_add_s3_applications_to_submissions_summary_view/up.sql new file mode 100644 index 0000000000..734c07fea5 --- /dev/null +++ b/hasura.planx.uk/migrations/1720635370662_add_s3_applications_to_submissions_summary_view/up.sql @@ -0,0 +1,90 @@ +CREATE OR REPLACE VIEW "public"."submission_services_summary" AS + WITH resumes_per_session AS ( + SELECT reconciliation_requests.session_id, + count(reconciliation_requests.id) AS number_times_resumed + FROM reconciliation_requests + GROUP BY reconciliation_requests.session_id + ), bops_agg AS ( + SELECT bops_applications.session_id, + json_agg(json_build_object('id', bops_applications.bops_id, 'submittedAt', bops_applications.created_at, 'destinationUrl', bops_applications.destination_url) ORDER BY bops_applications.created_at DESC) AS bops_applications + FROM bops_applications + GROUP BY bops_applications.session_id + ), email_agg AS ( + SELECT email_applications.session_id, + json_agg(json_build_object('id', email_applications.id, 'recipient', email_applications.recipient, 'submittedAt', email_applications.created_at) ORDER BY email_applications.created_at DESC) AS email_applications + FROM email_applications + GROUP BY email_applications.session_id + ), uniform_agg AS ( + SELECT uniform_applications.submission_reference, + json_agg(json_build_object('id', uniform_applications.idox_submission_id, 'submittedAt', uniform_applications.created_at) ORDER BY uniform_applications.created_at DESC) AS uniform_applications + FROM uniform_applications + GROUP BY uniform_applications.submission_reference + ), payment_requests_agg AS ( + SELECT payment_requests.session_id, + json_agg(json_build_object('id', payment_requests.id, 'createdAt', payment_requests.created_at, 'paidAt', payment_requests.paid_at, 'govpayPaymentId', payment_requests.govpay_payment_id) ORDER BY payment_requests.created_at DESC) AS payment_requests + FROM payment_requests + GROUP BY payment_requests.session_id + ), payment_status_agg AS ( + SELECT payment_status.session_id, + json_agg(json_build_object('govpayPaymentId', payment_status.payment_id, 'createdAt', payment_status.created_at, 'status', payment_status.status) ORDER BY payment_status.created_at DESC) AS payment_status + FROM payment_status + GROUP BY payment_status.session_id + ), s3_agg AS ( + SELECT s3_applications.session_id, + json_agg(json_build_object('id', s3_applications.id, 'submittedAt', s3_applications.created_at) ORDER BY s3_applications.created_at DESC) AS s3_applications + FROM s3_applications + GROUP BY s3_applications.session_id + ) + SELECT (ls.id)::text AS session_id, + t.slug AS team_slug, + f.slug AS service_slug, + ls.created_at, + ls.submitted_at, + ((ls.submitted_at)::date - (ls.created_at)::date) AS session_length_days, + ls.has_user_saved AS user_clicked_save, + rps.number_times_resumed, + ls.allow_list_answers, + (ls.allow_list_answers -> 'proposal.projectType'::text) AS proposal_project_type, + (ls.allow_list_answers -> 'application.declaration.connection'::text) AS application_declaration_connection, + (ls.allow_list_answers -> 'property.type'::text) AS property_type, + (ls.allow_list_answers -> 'drawBoundary.action'::text) AS draw_boundary_action, + (ls.allow_list_answers -> 'user.role'::text) AS user_role, + (ls.allow_list_answers -> 'property.constraints.planning'::text) AS property_constraints_planning, + CASE + WHEN (((pr.payment_requests)::jsonb IS NOT NULL) AND (jsonb_array_length((pr.payment_requests)::jsonb) > 0)) THEN true + ELSE false + END AS user_invited_to_pay, + pr.payment_requests, + ps.payment_status, + CASE + WHEN (((ba.bops_applications)::jsonb IS NOT NULL) AND (jsonb_array_length((ba.bops_applications)::jsonb) > 0)) THEN true + ELSE false + END AS sent_to_bops, + ba.bops_applications, + CASE + WHEN (((ua.uniform_applications)::jsonb IS NOT NULL) AND (jsonb_array_length((ua.uniform_applications)::jsonb) > 0)) THEN true + ELSE false + END AS sent_to_uniform, + ua.uniform_applications, + CASE + WHEN (((ea.email_applications)::jsonb IS NOT NULL) AND (jsonb_array_length((ea.email_applications)::jsonb) > 0)) THEN true + ELSE false + END AS sent_to_email, + ea.email_applications, + (ls.allow_list_answers -> 'findProperty.action'::text) AS find_property_action, + CASE + WHEN (((sa.s3_applications)::jsonb IS NOT NULL) AND (jsonb_array_length((sa.s3_applications)::jsonb) > 0)) THEN true + ELSE false + END AS sent_to_s3_power_automate, + sa.s3_applications + FROM ((((((((lowcal_sessions ls + LEFT JOIN flows f ON ((f.id = ls.flow_id))) + LEFT JOIN teams t ON ((t.id = f.team_id))) + LEFT JOIN resumes_per_session rps ON ((rps.session_id = (ls.id)::text))) + LEFT JOIN payment_requests_agg pr ON ((pr.session_id = ls.id))) + LEFT JOIN payment_status_agg ps ON ((ps.session_id = ls.id))) + LEFT JOIN bops_agg ba ON ((ba.session_id = (ls.id)::text))) + LEFT JOIN uniform_agg ua ON ((ua.submission_reference = (ls.id)::text))) + LEFT JOIN email_agg ea ON ((ea.session_id = ls.id)) + LEFT JOIN s3_agg sa ON ((sa.session_id = (ls.id)::text))) + WHERE ((f.slug IS NOT NULL) AND (t.slug IS NOT NULL)); From 17cdbd6cfee5f3195e50094d386dcd1d4c210c8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Thu, 11 Jul 2024 09:10:02 +0100 Subject: [PATCH 129/150] chore: Finalise Epsom and Ewell subdomain setup (#3406) --- editor.planx.uk/src/airbrake.ts | 1 + editor.planx.uk/src/routes/utils.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/editor.planx.uk/src/airbrake.ts b/editor.planx.uk/src/airbrake.ts index 9d8e284042..224a5e8f8d 100644 --- a/editor.planx.uk/src/airbrake.ts +++ b/editor.planx.uk/src/airbrake.ts @@ -13,6 +13,7 @@ function getEnvForAllowedHosts(host: string) { case "planningservices.buckinghamshire.gov.uk": case "planningservices.camden.gov.uk": case "planningservices.doncaster.gov.uk": + case "planningservices.epsom-ewell.gov.uk": case "planningservices.gateshead.gov.uk": case "planningservices.gloucester.gov.uk": case "planningservices.lambeth.gov.uk": diff --git a/editor.planx.uk/src/routes/utils.ts b/editor.planx.uk/src/routes/utils.ts index e293bee05c..a61b6463a1 100644 --- a/editor.planx.uk/src/routes/utils.ts +++ b/editor.planx.uk/src/routes/utils.ts @@ -49,6 +49,7 @@ export const setPath = (flowData: Store.flow, req: NaviRequest) => { // So I've hard-coded these domain names until a better solution comes along. // const PREVIEW_ONLY_DOMAINS = [ + "planningservices.epsom-ewell.gov.uk", "planningservices.barnet.gov.uk", "planningservices.buckinghamshire.gov.uk", "planningservices.camden.gov.uk", From b8da4143edb78f0906df465f4c286bd79621dae5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Thu, 11 Jul 2024 09:36:23 +0100 Subject: [PATCH 130/150] chore: Remove redundant `convertSlugToName` util (#3405) --- .../service/inviteToPay/sendConfirmationEmail.ts | 1 - .../pay/service/inviteToPay/sendPaymentEmail.ts | 1 - .../service/resumeApplication.test.ts | 14 +++++++------- .../saveAndReturn/service/resumeApplication.ts | 10 ++-------- .../modules/saveAndReturn/service/utils.test.ts | 14 -------------- .../modules/saveAndReturn/service/utils.ts | 8 -------- 6 files changed, 9 insertions(+), 39 deletions(-) diff --git a/api.planx.uk/modules/pay/service/inviteToPay/sendConfirmationEmail.ts b/api.planx.uk/modules/pay/service/inviteToPay/sendConfirmationEmail.ts index 8e3801ec99..6ee3820fda 100644 --- a/api.planx.uk/modules/pay/service/inviteToPay/sendConfirmationEmail.ts +++ b/api.planx.uk/modules/pay/service/inviteToPay/sendConfirmationEmail.ts @@ -1,7 +1,6 @@ import { $public, $api } from "../../../../client"; import { sendEmail } from "../../../../lib/notify"; import { gql } from "graphql-request"; -import { convertSlugToName } from "../../../saveAndReturn/service/utils"; import type { AgentAndPayeeSubmissionNotifyConfig } from "../../../../types"; export async function sendAgentAndPayeeConfirmationEmail(sessionId: string) { diff --git a/api.planx.uk/modules/pay/service/inviteToPay/sendPaymentEmail.ts b/api.planx.uk/modules/pay/service/inviteToPay/sendPaymentEmail.ts index 18293e7d02..ac2ca1d9f5 100644 --- a/api.planx.uk/modules/pay/service/inviteToPay/sendPaymentEmail.ts +++ b/api.planx.uk/modules/pay/service/inviteToPay/sendPaymentEmail.ts @@ -1,7 +1,6 @@ import { gql } from "graphql-request"; import { calculateExpiryDate, - convertSlugToName, getServiceLink, } from "../../../saveAndReturn/service/utils"; import { diff --git a/api.planx.uk/modules/saveAndReturn/service/resumeApplication.test.ts b/api.planx.uk/modules/saveAndReturn/service/resumeApplication.test.ts index 18d935ca83..b7cba296bf 100644 --- a/api.planx.uk/modules/saveAndReturn/service/resumeApplication.test.ts +++ b/api.planx.uk/modules/saveAndReturn/service/resumeApplication.test.ts @@ -54,7 +54,7 @@ describe("buildContentFromSessions function", () => { }, ]; - const result = `Service: Apply for a lawful development certificate + const result = `Service: Apply for a Lawful Development Certificate Address: 1 High Street Project type: New office premises Expiry Date: 29 May 2026 @@ -124,15 +124,15 @@ describe("buildContentFromSessions function", () => { }, }, ]; - const result = `Service: Apply for a lawful development certificate + const result = `Service: Apply for a Lawful Development Certificate Address: 1 High Street Project type: New office premises Expiry Date: 29 May 2026 - Link: example.com/team/apply-for-a-lawful-development-certificate/published?sessionId=123\n\nService: Apply for a lawful development certificate + Link: example.com/team/apply-for-a-lawful-development-certificate/published?sessionId=123\n\nService: Apply for a Lawful Development Certificate Address: 2 High Street Project type: New office premises Expiry Date: 29 May 2026 - Link: example.com/team/apply-for-a-lawful-development-certificate/published?sessionId=456\n\nService: Apply for a lawful development certificate + Link: example.com/team/apply-for-a-lawful-development-certificate/published?sessionId=456\n\nService: Apply for a Lawful Development Certificate Address: 3 High Street Project type: New office premises Expiry Date: 29 May 2026 @@ -184,7 +184,7 @@ describe("buildContentFromSessions function", () => { }, }, ]; - const result = `Service: Apply for a lawful development certificate + const result = `Service: Apply for a Lawful Development Certificate Address: 1 High Street Project type: New office premises Expiry Date: 29 May 2026 @@ -217,7 +217,7 @@ describe("buildContentFromSessions function", () => { }, ]; - const result = `Service: Apply for a lawful development certificate + const result = `Service: Apply for a Lawful Development Certificate Address: Address not submitted Project type: New office premises Expiry Date: 29 May 2026 @@ -252,7 +252,7 @@ describe("buildContentFromSessions function", () => { }, ]; - const result = `Service: Apply for a lawful development certificate + const result = `Service: Apply for a Lawful Development Certificate Address: 1 High Street Project type: Project type not submitted Expiry Date: 29 May 2026 diff --git a/api.planx.uk/modules/saveAndReturn/service/resumeApplication.ts b/api.planx.uk/modules/saveAndReturn/service/resumeApplication.ts index 696db69174..b229a7f1b0 100644 --- a/api.planx.uk/modules/saveAndReturn/service/resumeApplication.ts +++ b/api.planx.uk/modules/saveAndReturn/service/resumeApplication.ts @@ -4,12 +4,7 @@ import { gql } from "graphql-request"; import { $api, $public } from "../../../client"; import { sendEmail } from "../../../lib/notify"; import { LowCalSession, Team } from "../../../types"; -import { - DAYS_UNTIL_EXPIRY, - calculateExpiryDate, - convertSlugToName, - getResumeLink, -} from "./utils"; +import { DAYS_UNTIL_EXPIRY, calculateExpiryDate, getResumeLink } from "./utils"; /** * Send a "Resume" email to an applicant which list all open applications for a given council (team) @@ -111,7 +106,6 @@ const buildContentFromSessions = async ( team: Team, ): Promise => { const contentBuilder = async (session: LowCalSession) => { - const service = convertSlugToName(session.flow.slug); const address: SiteAddress | undefined = session.data?.passport?.data?._address; const addressLine = address?.single_line_address || address?.title; @@ -126,7 +120,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..e0d2eb0328 100644 --- a/api.planx.uk/modules/saveAndReturn/service/utils.test.ts +++ b/api.planx.uk/modules/saveAndReturn/service/utils.test.ts @@ -1,25 +1,11 @@ import { queryMock } from "../../../tests/graphqlQueryMock"; import { LowCalSession, LowCalSessionData, Team } from "../../../types"; import { - convertSlugToName, getResumeLink, getSessionDetails, setupEmailEventTriggers, } from "./utils"; -describe("convertSlugToName util function", () => { - it("should return the correct value", () => { - const testData = [ - ["open-systems-lab", "Open systems lab"], - ["lambeth", "Lambeth"], - ]; - - testData.forEach(([slug, name]) => { - expect(convertSlugToName(slug)).toEqual(name); - }); - }); -}); - describe("getResumeLink util function", () => { it("should return the correct value for a custom domain", () => { const session = { diff --git a/api.planx.uk/modules/saveAndReturn/service/utils.ts b/api.planx.uk/modules/saveAndReturn/service/utils.ts index 6184b068c3..a7f54a9132 100644 --- a/api.planx.uk/modules/saveAndReturn/service/utils.ts +++ b/api.planx.uk/modules/saveAndReturn/service/utils.ts @@ -8,13 +8,6 @@ import { $api, $public } from "../../../client"; const DAYS_UNTIL_EXPIRY = 28; const REMINDER_DAYS_FROM_EXPIRY = [7, 1]; -/** - * Converts a flow's slug to a pretty name - * XXX: This relies on pretty names not having dashes in them, which may not always be true (e.g. Na h-Eileanan Siar, Stoke-on-Trent) - */ -const convertSlugToName = (slug: string): string => - slug[0].toUpperCase() + slug.substring(1).replaceAll("-", " "); - /** * Build the magic link which will be sent to users via email to continue their application */ @@ -276,7 +269,6 @@ export const setupEmailEventTriggers = async (sessionId: string) => { export { getSaveAndReturnPublicHeaders, - convertSlugToName, getResumeLink, sendSingleApplicationEmail, markSessionAsSubmitted, From 67b15da5bf4a09b1aa5047a8a2a77e7195a62be0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Thu, 11 Jul 2024 15:23:30 +0100 Subject: [PATCH 131/150] feat: Read from new `team_settings` table (#3391) --- api.planx.uk/modules/admin/session/summary.ts | 9 +-- .../modules/flows/moveFlow/service.ts | 3 +- .../inviteToPay/createPaymentSendEvents.ts | 4 +- .../inviteToPay/sendConfirmationEmail.ts | 7 ++- .../service/inviteToPay/sendPaymentEmail.ts | 59 +++++++++++-------- .../service/resumeApplication.test.ts | 3 +- .../service/resumeApplication.ts | 13 ++-- .../saveAndReturn/service/utils.test.ts | 3 +- .../modules/saveAndReturn/service/utils.ts | 13 ++-- api.planx.uk/modules/send/email/index.test.ts | 4 +- api.planx.uk/modules/send/email/service.ts | 7 ++- api.planx.uk/package.json | 2 +- api.planx.uk/pnpm-lock.yaml | 8 +-- api.planx.uk/tests/mocks/inviteToPayData.ts | 2 +- .../tests/mocks/saveAndReturnMocks.ts | 5 +- api.planx.uk/types.ts | 16 +---- e2e/tests/api-driven/package.json | 2 +- e2e/tests/api-driven/pnpm-lock.yaml | 8 +-- e2e/tests/ui-driven/package.json | 2 +- e2e/tests/ui-driven/pnpm-lock.yaml | 8 +-- editor.planx.uk/package.json | 2 +- editor.planx.uk/pnpm-lock.yaml | 57 +++++++----------- .../components/FindProperty/Public/Map.tsx | 2 +- .../src/components/Header.test.tsx | 6 +- .../Settings/GeneralSettings/BoundaryForm.tsx | 2 +- .../Settings/GeneralSettings/index.tsx | 2 +- .../src/pages/FlowEditor/lib/store/team.ts | 4 +- editor.planx.uk/src/pages/Pay/InviteToPay.tsx | 14 ++--- editor.planx.uk/src/routes/teamSettings.tsx | 2 +- editor.planx.uk/src/routes/views/draft.tsx | 2 +- .../src/routes/views/published.tsx | 2 +- .../src/routes/views/standalone.tsx | 2 +- .../1720511391883_run_sql_migration/down.sql | 28 +++++++++ .../1720511391883_run_sql_migration/up.sql | 32 ++++++++++ 34 files changed, 194 insertions(+), 141 deletions(-) create mode 100644 hasura.planx.uk/migrations/1720511391883_run_sql_migration/down.sql create mode 100644 hasura.planx.uk/migrations/1720511391883_run_sql_migration/up.sql diff --git a/api.planx.uk/modules/admin/session/summary.ts b/api.planx.uk/modules/admin/session/summary.ts index 9139719bc5..d74b93038d 100644 --- a/api.planx.uk/modules/admin/session/summary.ts +++ b/api.planx.uk/modules/admin/session/summary.ts @@ -2,17 +2,12 @@ import { GovUKPayment, PaymentRequest, Session, + Team, } from "@opensystemslab/planx-core/types"; import { NextFunction, Request, Response } from "express"; import { gql } from "graphql-request"; -import { - Breadcrumb, - Flow, - LowCalSession, - Passport, - Team, -} from "../../../types"; +import { Breadcrumb, Flow, LowCalSession, Passport } from "../../../types"; import { $api } from "../../../client"; /** diff --git a/api.planx.uk/modules/flows/moveFlow/service.ts b/api.planx.uk/modules/flows/moveFlow/service.ts index e77a811422..6c05c62c40 100644 --- a/api.planx.uk/modules/flows/moveFlow/service.ts +++ b/api.planx.uk/modules/flows/moveFlow/service.ts @@ -1,6 +1,7 @@ import { gql } from "graphql-request"; -import { Flow, Team } from "../../../types"; +import { Flow } from "../../../types"; import { $public, getClient } from "../../../client"; +import { Team } from "@opensystemslab/planx-core/types"; export const moveFlow = async (flowId: string, teamSlug: string) => { const team = await $public.team.getBySlug(teamSlug); diff --git a/api.planx.uk/modules/pay/service/inviteToPay/createPaymentSendEvents.ts b/api.planx.uk/modules/pay/service/inviteToPay/createPaymentSendEvents.ts index d9020df1c9..2c67cd6027 100644 --- a/api.planx.uk/modules/pay/service/inviteToPay/createPaymentSendEvents.ts +++ b/api.planx.uk/modules/pay/service/inviteToPay/createPaymentSendEvents.ts @@ -1,4 +1,4 @@ -import { ComponentType } from "@opensystemslab/planx-core/types"; +import { ComponentType, Team } from "@opensystemslab/planx-core/types"; import { NextFunction, Request, Response } from "express"; import { gql } from "graphql-request"; import { @@ -7,7 +7,7 @@ import { } from "../../../../lib/hasura/metadata"; import { $api, $public } from "../../../../client"; import { getMostRecentPublishedFlow } from "../../../../helpers"; -import { Flow, Node, Team } from "../../../../types"; +import { Flow, Node } from "../../../../types"; enum Destination { BOPS = "bops", diff --git a/api.planx.uk/modules/pay/service/inviteToPay/sendConfirmationEmail.ts b/api.planx.uk/modules/pay/service/inviteToPay/sendConfirmationEmail.ts index 6ee3820fda..92e30223d7 100644 --- a/api.planx.uk/modules/pay/service/inviteToPay/sendConfirmationEmail.ts +++ b/api.planx.uk/modules/pay/service/inviteToPay/sendConfirmationEmail.ts @@ -46,7 +46,12 @@ async function getDataForPayeeAndAgentEmails( flow { slug team { - notifyPersonalisation: notify_personalisation + notifyPersonalisation: team_settings { + helpEmail: help_email + helpPhone: help_phone + emailReplyToId: email_reply_to_id + helpOpeningHours: help_opening_hours + } } } paymentRequests: payment_requests( diff --git a/api.planx.uk/modules/pay/service/inviteToPay/sendPaymentEmail.ts b/api.planx.uk/modules/pay/service/inviteToPay/sendPaymentEmail.ts index ac2ca1d9f5..14dd6cea5c 100644 --- a/api.planx.uk/modules/pay/service/inviteToPay/sendPaymentEmail.ts +++ b/api.planx.uk/modules/pay/service/inviteToPay/sendPaymentEmail.ts @@ -9,8 +9,7 @@ import { sendEmail, } from "../../../../lib/notify"; import { InviteToPayNotifyConfig } from "../../../../types"; -import { Team } from "../../../../types"; -import type { PaymentRequest } from "@opensystemslab/planx-core/types"; +import type { PaymentRequest, Team } from "@opensystemslab/planx-core/types"; import { $public } from "../../../../client"; interface SessionDetails { @@ -75,7 +74,7 @@ const validatePaymentRequest = async ( name slug domain - notifyPersonalisation: notify_personalisation + settings: team_settings } } } @@ -108,28 +107,38 @@ const validatePaymentRequest = async ( const getInviteToPayNotifyConfig = async ( session: SessionDetails, paymentRequest: PaymentRequest, -): Promise => ({ - personalisation: { - ...session.flow.team.notifyPersonalisation, - sessionId: paymentRequest.sessionId, - paymentRequestId: paymentRequest.id, - payeeEmail: paymentRequest.payeeEmail, - payeeName: paymentRequest.payeeName, - agentName: paymentRequest.applicantName, - address: ( - paymentRequest.sessionPreviewData?._address as Record<"title", string> - ).title, - fee: getFee(paymentRequest), - projectType: - (await $public.formatRawProjectTypes( - paymentRequest.sessionPreviewData?.["proposal.projectType"] as string[], - )) || "Project type not submitted", - serviceName: session.flow.name, - serviceLink: getServiceLink(session.flow.team, session.flow.slug), - expiryDate: calculateExpiryDate(paymentRequest.createdAt), - paymentLink: getPaymentLink(session, paymentRequest), - }, -}); +): Promise => { + const flow = session.flow; + const { settings } = session.flow.team; + + return { + personalisation: { + helpEmail: settings.helpEmail, + helpPhone: settings.helpPhone, + emailReplyToId: settings.emailReplyToId, + helpOpeningHours: settings.helpOpeningHours, + sessionId: paymentRequest.sessionId, + paymentRequestId: paymentRequest.id, + payeeEmail: paymentRequest.payeeEmail, + payeeName: paymentRequest.payeeName, + agentName: paymentRequest.applicantName, + address: ( + paymentRequest.sessionPreviewData?._address as Record<"title", string> + ).title, + fee: getFee(paymentRequest), + projectType: + (await $public.formatRawProjectTypes( + paymentRequest.sessionPreviewData?.[ + "proposal.projectType" + ] as string[], + )) || "Project type not submitted", + serviceName: session.flow.name, + serviceLink: getServiceLink(flow.team, flow.slug), + expiryDate: calculateExpiryDate(paymentRequest.createdAt), + paymentLink: getPaymentLink(session, paymentRequest), + }, + }; +}; const getFee = (paymentRequest: PaymentRequest) => { const toPounds = (pence: number) => pence / 100; diff --git a/api.planx.uk/modules/saveAndReturn/service/resumeApplication.test.ts b/api.planx.uk/modules/saveAndReturn/service/resumeApplication.test.ts index b7cba296bf..1c57226fdb 100644 --- a/api.planx.uk/modules/saveAndReturn/service/resumeApplication.test.ts +++ b/api.planx.uk/modules/saveAndReturn/service/resumeApplication.test.ts @@ -1,4 +1,4 @@ -import { LowCalSession, Team } from "../../../types"; +import { LowCalSession } from "../../../types"; import supertest from "supertest"; import app from "../../../server"; import { queryMock } from "../../../tests/graphqlQueryMock"; @@ -8,6 +8,7 @@ import { } from "../../../tests/mocks/saveAndReturnMocks"; import { buildContentFromSessions } from "./resumeApplication"; import { PartialDeep } from "type-fest"; +import { Team } from "@opensystemslab/planx-core/types"; const ENDPOINT = "/resume-application"; const TEST_EMAIL = "simulate-delivered@notifications.service.gov.uk"; diff --git a/api.planx.uk/modules/saveAndReturn/service/resumeApplication.ts b/api.planx.uk/modules/saveAndReturn/service/resumeApplication.ts index b229a7f1b0..5e0c877c0b 100644 --- a/api.planx.uk/modules/saveAndReturn/service/resumeApplication.ts +++ b/api.planx.uk/modules/saveAndReturn/service/resumeApplication.ts @@ -1,9 +1,9 @@ -import type { SiteAddress } from "@opensystemslab/planx-core/types"; +import type { SiteAddress, Team } from "@opensystemslab/planx-core/types"; import { differenceInDays } from "date-fns"; import { gql } from "graphql-request"; import { $api, $public } from "../../../client"; import { sendEmail } from "../../../lib/notify"; -import { LowCalSession, Team } from "../../../types"; +import { LowCalSession } from "../../../types"; import { DAYS_UNTIL_EXPIRY, calculateExpiryDate, getResumeLink } from "./utils"; /** @@ -17,7 +17,7 @@ const resumeApplication = async (teamSlug: string, email: string) => { const config = { personalisation: await getPersonalisation(sessions, team), reference: null, - emailReplyToId: team.notifyPersonalisation.emailReplyToId, + emailReplyToId: team.settings.emailReplyToId, }; const response = await sendEmail("resume", email, config); return response; @@ -64,7 +64,7 @@ const validateRequest = async ( teams(where: { slug: { _eq: $teamSlug } }) { slug name - notifyPersonalisation: notify_personalisation + settings: team_settings domain } } @@ -93,7 +93,10 @@ const getPersonalisation = async (sessions: LowCalSession[], team: Team) => { return { teamName: team.name, content: await buildContentFromSessions(sessions, team), - ...team.notifyPersonalisation, + helpEmail: team.settings.helpEmail, + helpPhone: team.settings.helpPhone, + helpOpeningHours: team.settings.helpOpeningHours, + emailReplyToId: team.settings.emailReplyToId, }; }; diff --git a/api.planx.uk/modules/saveAndReturn/service/utils.test.ts b/api.planx.uk/modules/saveAndReturn/service/utils.test.ts index e0d2eb0328..6cf33d0649 100644 --- a/api.planx.uk/modules/saveAndReturn/service/utils.test.ts +++ b/api.planx.uk/modules/saveAndReturn/service/utils.test.ts @@ -1,5 +1,6 @@ +import { Team } from "@opensystemslab/planx-core/types"; import { queryMock } from "../../../tests/graphqlQueryMock"; -import { LowCalSession, LowCalSessionData, Team } from "../../../types"; +import { LowCalSession, LowCalSessionData } from "../../../types"; import { getResumeLink, getSessionDetails, diff --git a/api.planx.uk/modules/saveAndReturn/service/utils.ts b/api.planx.uk/modules/saveAndReturn/service/utils.ts index a7f54a9132..baa416371f 100644 --- a/api.planx.uk/modules/saveAndReturn/service/utils.ts +++ b/api.planx.uk/modules/saveAndReturn/service/utils.ts @@ -1,7 +1,7 @@ -import { SiteAddress } from "@opensystemslab/planx-core/types"; +import { SiteAddress, Team } from "@opensystemslab/planx-core/types"; import { format, addDays } from "date-fns"; import { gql } from "graphql-request"; -import { LowCalSession, Team } from "../../../types"; +import { LowCalSession } from "../../../types"; import { Template, getClientForTemplate, sendEmail } from "../../../lib/notify"; import { $api, $public } from "../../../client"; @@ -59,7 +59,7 @@ const sendSingleApplicationEmail = async ({ const config = { personalisation: getPersonalisation(session, flowSlug, flowName, team), reference: null, - emailReplyToId: team.notifyPersonalisation.emailReplyToId, + emailReplyToId: team.settings.emailReplyToId, }; const firstSave = !session.hasUserSaved; if (firstSave && !session.submittedAt) @@ -97,7 +97,7 @@ const validateSingleSessionRequest = async ( team { name slug - notifyPersonalisation: notify_personalisation + settings: team_settings domain } } @@ -176,7 +176,10 @@ const getPersonalisation = ( serviceName: flowName, teamName: team.name, sessionId: session.id, - ...team.notifyPersonalisation, + helpEmail: team.settings.helpEmail, + helpPhone: team.settings.helpPhone, + helpOpeningHours: team.settings.helpOpeningHours, + emailReplyToId: team.settings.emailReplyToId, ...session, }; }; diff --git a/api.planx.uk/modules/send/email/index.test.ts b/api.planx.uk/modules/send/email/index.test.ts index ff6c89e263..c0b2cae2f1 100644 --- a/api.planx.uk/modules/send/email/index.test.ts +++ b/api.planx.uk/modules/send/email/index.test.ts @@ -50,7 +50,7 @@ describe(`sending an application by email to a planning office`, () => { teams: [ { sendToEmail: "planning.office.example@council.gov.uk", - notifyPersonalisation: { emailReplyToId: "abc123" }, + settings: { emailReplyToId: "abc123" }, }, ], }, @@ -153,7 +153,7 @@ describe(`sending an application by email to a planning office`, () => { teams: [ { sendToEmail: null, - notifyPersonalisation: { emailReplyToId: "abc123" }, + settings: { emailReplyToId: "abc123" }, }, ], }, diff --git a/api.planx.uk/modules/send/email/service.ts b/api.planx.uk/modules/send/email/service.ts index 7ba6e6ffb6..7cb7e0e606 100644 --- a/api.planx.uk/modules/send/email/service.ts +++ b/api.planx.uk/modules/send/email/service.ts @@ -17,7 +17,12 @@ export async function getTeamEmailSettings(localAuthority: string) { query GetTeamEmailSettings($slug: String) { teams(where: { slug: { _eq: $slug } }) { sendToEmail: submission_email - notifyPersonalisation: notify_personalisation + notifyPersonalisation: team_settings { + helpEmail: help_email + helpPhone: help_phone + emailReplyToId: email_reply_to_id + helpOpeningHours: help_opening_hours + } } } `, diff --git a/api.planx.uk/package.json b/api.planx.uk/package.json index 9e1d308b8a..82f46fc379 100644 --- a/api.planx.uk/package.json +++ b/api.planx.uk/package.json @@ -5,7 +5,7 @@ "packageManager": "pnpm@8.6.6", "dependencies": { "@airbrake/node": "^2.1.8", - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#b43b268", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#75127e6", "@types/isomorphic-fetch": "^0.0.36", "adm-zip": "^0.5.10", "aws-sdk": "^2.1467.0", diff --git a/api.planx.uk/pnpm-lock.yaml b/api.planx.uk/pnpm-lock.yaml index c1b21ac157..474d6d91d4 100644 --- a/api.planx.uk/pnpm-lock.yaml +++ b/api.planx.uk/pnpm-lock.yaml @@ -14,8 +14,8 @@ dependencies: specifier: ^2.1.8 version: 2.1.8 '@opensystemslab/planx-core': - specifier: git+https://github.com/theopensystemslab/planx-core#b43b268 - version: github.com/theopensystemslab/planx-core/b43b268 + specifier: git+https://github.com/theopensystemslab/planx-core#75127e6 + version: github.com/theopensystemslab/planx-core/75127e6 '@types/isomorphic-fetch': specifier: ^0.0.36 version: 0.0.36 @@ -8203,8 +8203,8 @@ packages: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} dev: false - github.com/theopensystemslab/planx-core/b43b268: - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/b43b268} + github.com/theopensystemslab/planx-core/75127e6: + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/75127e6} name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true diff --git a/api.planx.uk/tests/mocks/inviteToPayData.ts b/api.planx.uk/tests/mocks/inviteToPayData.ts index 4f4d4dfcaf..6f0ad73dcf 100644 --- a/api.planx.uk/tests/mocks/inviteToPayData.ts +++ b/api.planx.uk/tests/mocks/inviteToPayData.ts @@ -83,7 +83,7 @@ export const validPaymentRequest = { name: "Buckinghamshire", slug: "buckinghamshire", domain: "planningservices.buckinghamshire.gov.uk", - notifyPersonalisation: { + settings: { helpEmail: "help@council.gov.uk", helpPhone: "123", helpOpeningHours: "9a-5p", diff --git a/api.planx.uk/tests/mocks/saveAndReturnMocks.ts b/api.planx.uk/tests/mocks/saveAndReturnMocks.ts index 12415a5222..0fcdc37285 100644 --- a/api.planx.uk/tests/mocks/saveAndReturnMocks.ts +++ b/api.planx.uk/tests/mocks/saveAndReturnMocks.ts @@ -1,17 +1,18 @@ import { v4 as uuidV4 } from "uuid"; import type { LowCalSession, Flow } from "../../types"; +import { Team } from "@opensystemslab/planx-core/types"; export const mockTeam = { id: 1, slug: "test-team", name: "Test Team", - notifyPersonalisation: { + settings: { helpEmail: "example@council.gov.uk", helpPhone: "(01234) 567890", helpOpeningHours: "Monday - Friday, 9am - 5pm", emailReplyToId: "727d48fa-cb8a-42f9-b8b2-55032f3bb451", }, -}; +} as Team; export const mockFlow: Flow = { id: "dcfd4f07-76da-4b67-9822-2aca92b27551", diff --git a/api.planx.uk/types.ts b/api.planx.uk/types.ts index aa38f936db..60c8272418 100644 --- a/api.planx.uk/types.ts +++ b/api.planx.uk/types.ts @@ -1,5 +1,5 @@ import { PaymentRequest } from "@opensystemslab/planx-core/dist/types"; -import { GovUKPayment } from "@opensystemslab/planx-core/types"; +import { GovUKPayment, Team } from "@opensystemslab/planx-core/types"; /** * @deprecated Migrating to Node from planx-core @@ -49,20 +49,6 @@ export interface UserData { export type Breadcrumb = Record; -export interface Team { - id: number; - slug: string; - name: string; - domain?: string; - boundaryBBox?: object; - notifyPersonalisation: { - helpEmail: string; - helpPhone: string; - helpOpeningHours: string; - emailReplyToId: string; - }; -} - export interface Passport { data: Record; } diff --git a/e2e/tests/api-driven/package.json b/e2e/tests/api-driven/package.json index f59a16d87b..a26bd30205 100644 --- a/e2e/tests/api-driven/package.json +++ b/e2e/tests/api-driven/package.json @@ -7,7 +7,7 @@ "packageManager": "pnpm@8.6.6", "dependencies": { "@cucumber/cucumber": "^9.3.0", - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#b43b268", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#75127e6", "axios": "^1.6.8", "dotenv": "^16.3.1", "dotenv-expand": "^10.0.0", diff --git a/e2e/tests/api-driven/pnpm-lock.yaml b/e2e/tests/api-driven/pnpm-lock.yaml index 325902c9a3..cdadc2cd71 100644 --- a/e2e/tests/api-driven/pnpm-lock.yaml +++ b/e2e/tests/api-driven/pnpm-lock.yaml @@ -9,8 +9,8 @@ dependencies: specifier: ^9.3.0 version: 9.3.0 '@opensystemslab/planx-core': - specifier: git+https://github.com/theopensystemslab/planx-core#b43b268 - version: github.com/theopensystemslab/planx-core/b43b268 + specifier: git+https://github.com/theopensystemslab/planx-core#75127e6 + version: github.com/theopensystemslab/planx-core/75127e6 axios: specifier: ^1.6.8 version: 1.6.8 @@ -3053,8 +3053,8 @@ packages: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} dev: false - github.com/theopensystemslab/planx-core/b43b268: - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/b43b268} + github.com/theopensystemslab/planx-core/75127e6: + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/75127e6} name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true diff --git a/e2e/tests/ui-driven/package.json b/e2e/tests/ui-driven/package.json index 59e49915dd..eeae99cbee 100644 --- a/e2e/tests/ui-driven/package.json +++ b/e2e/tests/ui-driven/package.json @@ -8,7 +8,7 @@ "postinstall": "./install-dependencies.sh" }, "dependencies": { - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#b43b268", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#75127e6", "axios": "^1.6.8", "dotenv": "^16.3.1", "eslint": "^8.56.0", diff --git a/e2e/tests/ui-driven/pnpm-lock.yaml b/e2e/tests/ui-driven/pnpm-lock.yaml index a8b7649791..2f1970bebb 100644 --- a/e2e/tests/ui-driven/pnpm-lock.yaml +++ b/e2e/tests/ui-driven/pnpm-lock.yaml @@ -6,8 +6,8 @@ settings: dependencies: '@opensystemslab/planx-core': - specifier: git+https://github.com/theopensystemslab/planx-core#b43b268 - version: github.com/theopensystemslab/planx-core/b43b268 + specifier: git+https://github.com/theopensystemslab/planx-core#75127e6 + version: github.com/theopensystemslab/planx-core/75127e6 axios: specifier: ^1.6.8 version: 1.6.8 @@ -2782,8 +2782,8 @@ packages: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} dev: false - github.com/theopensystemslab/planx-core/b43b268: - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/b43b268} + github.com/theopensystemslab/planx-core/75127e6: + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/75127e6} name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true diff --git a/editor.planx.uk/package.json b/editor.planx.uk/package.json index 297c6d69d5..10ccc6e6b8 100644 --- a/editor.planx.uk/package.json +++ b/editor.planx.uk/package.json @@ -13,7 +13,7 @@ "@mui/material": "^5.15.2", "@mui/utils": "^5.15.2", "@opensystemslab/map": "^0.8.3", - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#b43b268", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#75127e6", "@tiptap/core": "^2.4.0", "@tiptap/extension-bold": "^2.0.3", "@tiptap/extension-bubble-menu": "^2.1.13", diff --git a/editor.planx.uk/pnpm-lock.yaml b/editor.planx.uk/pnpm-lock.yaml index 7ea2dbb091..c918ec40b8 100644 --- a/editor.planx.uk/pnpm-lock.yaml +++ b/editor.planx.uk/pnpm-lock.yaml @@ -43,8 +43,8 @@ dependencies: specifier: ^0.8.3 version: 0.8.3 '@opensystemslab/planx-core': - specifier: git+https://github.com/theopensystemslab/planx-core#b43b268 - version: github.com/theopensystemslab/planx-core/b43b268(@types/react@18.2.45) + specifier: git+https://github.com/theopensystemslab/planx-core#75127e6 + version: github.com/theopensystemslab/planx-core/75127e6(@types/react@18.2.45) '@tiptap/core': specifier: ^2.4.0 version: 2.4.0(@tiptap/pm@2.0.3) @@ -6798,7 +6798,7 @@ packages: '@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 @@ -6819,11 +6819,11 @@ packages: - supports-color dev: true - /@storybook/builder-manager@8.1.10(prettier@3.0.0): + /@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.10(prettier@3.0.0) + '@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 @@ -6927,12 +6927,12 @@ packages: '@babel/types': 7.24.7 '@ndelangen/get-tarball': 3.0.9 '@storybook/codemod': 8.1.10 - '@storybook/core-common': 8.1.10(prettier@3.0.0) + '@storybook/core-common': 8.1.10(prettier@3.3.2) '@storybook/core-events': 8.1.10 - '@storybook/core-server': 8.1.10(prettier@3.0.0)(react-dom@18.2.0)(react@18.2.0) + '@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.0.0) + '@storybook/telemetry': 8.1.10(prettier@3.3.2) '@storybook/types': 8.1.10 '@types/semver': 7.5.8 '@yarnpkg/fslib': 2.10.3 @@ -7071,7 +7071,7 @@ packages: - supports-color dev: true - /@storybook/core-common@8.1.10(prettier@3.0.0): + /@storybook/core-common@8.1.10(prettier@3.3.2): resolution: {integrity: sha512-+0GhgDRQwUlXu1lY77NdLnVBVycCEW0DG7eu7rvLYYkTyNRxbdl2RWsQpjr/j4sxqT6u82l9/b+RWpmsl4MgMQ==} peerDependencies: prettier: ^2 || ^3 @@ -7100,8 +7100,8 @@ packages: node-fetch: 2.7.0 picomatch: 2.3.1 pkg-dir: 5.0.0 - prettier: 3.0.0 - prettier-fallback: /prettier@3.0.0 + prettier: 3.3.2 + prettier-fallback: /prettier@3.3.2 pretty-hrtime: 1.0.3 resolve-from: 5.0.0 semver: 7.6.2 @@ -7133,16 +7133,16 @@ packages: ts-dedent: 2.2.0 dev: true - /@storybook/core-server@8.1.10(prettier@3.0.0)(react-dom@18.2.0)(react@18.2.0): + /@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.7 '@babel/parser': 7.24.7 '@discoveryjs/json-ext': 0.5.7 - '@storybook/builder-manager': 8.1.10(prettier@3.0.0) + '@storybook/builder-manager': 8.1.10(prettier@3.3.2) '@storybook/channels': 8.1.10 - '@storybook/core-common': 8.1.10(prettier@3.0.0) + '@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 @@ -7152,7 +7152,7 @@ packages: '@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.0.0) + '@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 @@ -7594,11 +7594,11 @@ packages: qs: 6.12.3 dev: true - /@storybook/telemetry@8.1.10(prettier@3.0.0): + /@storybook/telemetry@8.1.10(prettier@3.3.2): resolution: {integrity: sha512-pwiMWrq85D0AnaAgYNfB2w2BDgqnetQ+tXwsUAw4fUEFwA4oPU6r0uqekRbNNE6wmSSYjiiFP3JgknBFqjd2hg==} dependencies: '@storybook/client-logger': 8.1.10 - '@storybook/core-common': 8.1.10(prettier@3.0.0) + '@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 @@ -7912,20 +7912,6 @@ packages: pretty-format: 27.5.1 dev: true - /@testing-library/dom@8.20.1: - resolution: {integrity: sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==} - engines: {node: '>=12'} - dependencies: - '@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 - dom-accessibility-api: 0.5.16 - lz-string: 1.5.0 - pretty-format: 27.5.1 - dev: true - /@testing-library/dom@9.3.4: resolution: {integrity: sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==} engines: {node: '>=14'} @@ -7963,7 +7949,7 @@ packages: react-dom: ^18.0.0 dependencies: '@babel/runtime': 7.24.7 - '@testing-library/dom': 8.20.1 + '@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) @@ -8570,7 +8556,6 @@ packages: /@types/lodash@4.17.6: resolution: {integrity: sha512-OpXEVoCKSS3lQqjx9GGGOapBeuW5eUboYHRlHP9urXPX25IKZ6AnP5ZRxtVf63iieUbsHxLn8NQ5Nlftc6yzAA==} - dev: false /@types/mdast@3.0.15: resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} @@ -21847,9 +21832,9 @@ packages: use-sync-external-store: 1.2.0(react@18.2.0) dev: false - github.com/theopensystemslab/planx-core/b43b268(@types/react@18.2.45): - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/b43b268} - id: github.com/theopensystemslab/planx-core/b43b268 + github.com/theopensystemslab/planx-core/75127e6(@types/react@18.2.45): + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/75127e6} + id: github.com/theopensystemslab/planx-core/75127e6 name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true diff --git a/editor.planx.uk/src/@planx/components/FindProperty/Public/Map.tsx b/editor.planx.uk/src/@planx/components/FindProperty/Public/Map.tsx index 6e88d7393e..554e77e804 100644 --- a/editor.planx.uk/src/@planx/components/FindProperty/Public/Map.tsx +++ b/editor.planx.uk/src/@planx/components/FindProperty/Public/Map.tsx @@ -63,7 +63,7 @@ export default function PlotNewAddress(props: PlotNewAddressProps): FCReturn { const [environment, boundaryBBox] = useStore((state) => [ state.previewEnvironment, - state.teamSettings.boundaryBbox, + state.teamSettings.boundaryBBox, ]); useEffect(() => { diff --git a/editor.planx.uk/src/components/Header.test.tsx b/editor.planx.uk/src/components/Header.test.tsx index 94e370320e..e3e2cfee26 100644 --- a/editor.planx.uk/src/components/Header.test.tsx +++ b/editor.planx.uk/src/components/Header.test.tsx @@ -26,7 +26,7 @@ const mockTeam1: Team = { linkColour: "#0010A4", favicon: null, }, - teamSettings: { + settings: { boundaryUrl: "https://www.planning.data.gov.uk/", helpEmail: "example@council.co.uk", helpPhone: "(01234) 56789", @@ -52,7 +52,7 @@ const mockTeam2: Team = { linkColour: "#0010A4", favicon: null, }, - teamSettings: { + settings: { boundaryUrl: "https://www.planning.data.gov.uk/", helpEmail: "example@council.co.uk", helpPhone: "(01234) 56789", @@ -74,7 +74,7 @@ describe("Header Component - Editor Route", () => { setState({ previewEnvironment: "editor", teamName: mockTeam1.name, - teamSettings: mockTeam1.teamSettings, + teamSettings: mockTeam1.settings, teamTheme: mockTeam1.theme, teamSlug: mockTeam1.slug, user: { diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/BoundaryForm.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/BoundaryForm.tsx index 2c3185c52a..767ebd75ec 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/BoundaryForm.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/BoundaryForm.tsx @@ -47,7 +47,7 @@ export default function BoundaryForm({ formikConfig, onSuccess }: FormProps) { const isUpdateSuccess = await useStore.getState().updateTeamSettings({ boundaryUrl: values.boundaryUrl, - boundaryBbox: convertToBoundingBox(data), + boundaryBBox: convertToBoundingBox(data), }); if (isUpdateSuccess) { onSuccess(); diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/index.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/index.tsx index b2ee94db39..b57672a2c5 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/index.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/index.tsx @@ -28,7 +28,7 @@ const GeneralSettings: React.FC = () => { if (!fetchedTeam) throw Error("Unable to find team"); setFormikConfig({ - initialValues: fetchedTeam.teamSettings, + initialValues: fetchedTeam.settings, onSubmit: () => {}, validateOnBlur: false, validateOnChange: false, diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/store/team.ts b/editor.planx.uk/src/pages/FlowEditor/lib/store/team.ts index 5a2a2080a0..00a334b171 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/store/team.ts +++ b/editor.planx.uk/src/pages/FlowEditor/lib/store/team.ts @@ -45,7 +45,7 @@ export const teamStore: StateCreator< teamId: team.id, teamIntegrations: team.integrations, teamName: team.name, - teamSettings: team.teamSettings, + teamSettings: team.settings, teamSlug: team.slug, teamTheme: team.theme, }); @@ -60,7 +60,7 @@ export const teamStore: StateCreator< id: get().teamId, integrations: get().teamIntegrations, name: get().teamName, - teamSettings: get().teamSettings, + settings: get().teamSettings, slug: get().teamSlug, theme: get().teamTheme, }), diff --git a/editor.planx.uk/src/pages/Pay/InviteToPay.tsx b/editor.planx.uk/src/pages/Pay/InviteToPay.tsx index 9b5ad7973c..ec9d1a52c5 100644 --- a/editor.planx.uk/src/pages/Pay/InviteToPay.tsx +++ b/editor.planx.uk/src/pages/Pay/InviteToPay.tsx @@ -26,7 +26,9 @@ const FormInner = styled(Box)(({ theme }) => ({ const InviteToPay: React.FC = ({ createdAt }) => { const theme = useTheme(); const expiryDate = getExpiryDateForPaymentRequest(createdAt); - const team = useStore((state) => state.getTeam()); + const { helpEmail, helpOpeningHours, helpPhone } = useStore( + (state) => state.teamSettings, + ); return ( <> @@ -70,18 +72,14 @@ const InviteToPay: React.FC = ({ createdAt }) => { - Telephone {team.notifyPersonalisation?.helpPhone} - - - {team.notifyPersonalisation?.helpOpeningHours} + Telephone {helpPhone} + {helpOpeningHours} Email{" "} - - {team.notifyPersonalisation?.helpEmail} - + {helpEmail} We aim to respond within 2 working days. diff --git a/editor.planx.uk/src/routes/teamSettings.tsx b/editor.planx.uk/src/routes/teamSettings.tsx index 75f14a89b7..8427b37501 100644 --- a/editor.planx.uk/src/routes/teamSettings.tsx +++ b/editor.planx.uk/src/routes/teamSettings.tsx @@ -22,7 +22,7 @@ const teamSettingsRoutes = compose( })), mount({ - "/": redirect("./team"), + "/": redirect("./general"), "/:tab": map(async (req) => { const isAuthorised = useStore.getState().canUserEditTeam(req.params.team); diff --git a/editor.planx.uk/src/routes/views/draft.tsx b/editor.planx.uk/src/routes/views/draft.tsx index e21bb6d3ac..881988884f 100644 --- a/editor.planx.uk/src/routes/views/draft.tsx +++ b/editor.planx.uk/src/routes/views/draft.tsx @@ -77,13 +77,13 @@ const fetchSettingsForDraftView = async ( helpPhone: help_phone helpOpeningHours: help_opening_hours emailReplyToId: email_reply_to_id + boundaryBBox: boundary_bbox } integrations { hasPlanningData: has_planning_data } slug } - settings slug name } diff --git a/editor.planx.uk/src/routes/views/published.tsx b/editor.planx.uk/src/routes/views/published.tsx index da8eb891bd..a97a426a52 100644 --- a/editor.planx.uk/src/routes/views/published.tsx +++ b/editor.planx.uk/src/routes/views/published.tsx @@ -103,13 +103,13 @@ export const fetchSettingsForPublishedView = async ( helpPhone: help_phone helpOpeningHours: help_opening_hours emailReplyToId: email_reply_to_id + boundaryBBox: boundary_bbox } integrations { hasPlanningData: has_planning_data } slug } - settings status publishedFlows: published_flows( limit: 1 diff --git a/editor.planx.uk/src/routes/views/standalone.tsx b/editor.planx.uk/src/routes/views/standalone.tsx index 027bfd7ccf..8de2a37b67 100644 --- a/editor.planx.uk/src/routes/views/standalone.tsx +++ b/editor.planx.uk/src/routes/views/standalone.tsx @@ -77,13 +77,13 @@ const fetchDataForStandaloneView = async ( helpPhone: help_phone helpOpeningHours: help_opening_hours emailReplyToId: email_reply_to_id + boundaryBBox: boundary_bbox } integrations { hasPlanningData: has_planning_data } slug } - settings } globalSettings: global_settings { diff --git a/hasura.planx.uk/migrations/1720511391883_run_sql_migration/down.sql b/hasura.planx.uk/migrations/1720511391883_run_sql_migration/down.sql new file mode 100644 index 0000000000..f8befa0df9 --- /dev/null +++ b/hasura.planx.uk/migrations/1720511391883_run_sql_migration/down.sql @@ -0,0 +1,28 @@ +-- Previous version of teams_summary view from 1713084872473_create_view_teams_summary/up.sql + +CREATE OR REPLACE VIEW "public"."teams_summary" AS SELECT + t.id, + t.name, + t.slug, + t.reference_code, + t.settings->>'homepage' as homepage, + t.domain as subdomain, + ti.has_planning_data as planning_data_enabled, + '@todo' as article_4s_enabled, + t.notify_personalisation as govnotify_personalisation, + CASE + WHEN coalesce(ti.production_govpay_secret, ti.staging_govpay_secret) is not null + THEN true + ELSE false + END as govpay_enabled, + t.submission_email as send_to_email_address, + coalesce(ti.production_bops_submission_url, ti.staging_bops_submission_url) as bops_submission_url, + tt.logo, + tt.favicon, + tt.primary_colour, + tt.link_colour, + tt.action_colour +FROM teams t + JOIN team_integrations ti on ti.team_id = t.id + JOIN team_themes tt on tt.team_id = t.id +ORDER BY t.name ASC; diff --git a/hasura.planx.uk/migrations/1720511391883_run_sql_migration/up.sql b/hasura.planx.uk/migrations/1720511391883_run_sql_migration/up.sql new file mode 100644 index 0000000000..32ffa2afde --- /dev/null +++ b/hasura.planx.uk/migrations/1720511391883_run_sql_migration/up.sql @@ -0,0 +1,32 @@ +CREATE OR REPLACE VIEW "public"."teams_summary" AS SELECT + t.id, + t.name, + t.slug, + t.reference_code, + t.settings->>'homepage' as homepage, + t.domain as subdomain, + ti.has_planning_data as planning_data_enabled, + '@todo' as article_4s_enabled, + jsonb_build_object( + 'helpEmail', ts.help_email, + 'helpPhone', ts.help_phone, + 'emailReplyToId', ts.email_reply_to_id, + 'helpOpeningHours', ts.help_opening_hours + ) as govnotify_personalisation, + CASE + WHEN coalesce(ti.production_govpay_secret, ti.staging_govpay_secret) is not null + THEN true + ELSE false + END as govpay_enabled, + t.submission_email as send_to_email_address, + coalesce(ti.production_bops_submission_url, ti.staging_bops_submission_url) as bops_submission_url, + tt.logo, + tt.favicon, + tt.primary_colour, + tt.link_colour, + tt.action_colour +FROM teams t + JOIN team_integrations ti on ti.team_id = t.id + JOIN team_themes tt on tt.team_id = t.id + JOIN team_settings ts on ts.team_id = t.id +ORDER BY t.name ASC; From 1060db4fbec961ebcadecac69b13b15df7511339 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Fri, 12 Jul 2024 10:27:20 +0100 Subject: [PATCH 132/150] feat: `Permission` component (#3407) --- editor.planx.uk/src/components/Header.tsx | 5 ++-- .../FlowEditor/components/Sidebar/index.tsx | 7 +++-- editor.planx.uk/src/ui/editor/Permission.tsx | 26 +++++++++++++++++++ 3 files changed, 32 insertions(+), 6 deletions(-) create mode 100644 editor.planx.uk/src/ui/editor/Permission.tsx diff --git a/editor.planx.uk/src/components/Header.tsx b/editor.planx.uk/src/components/Header.tsx index 467af46ad1..0210e2b98d 100644 --- a/editor.planx.uk/src/components/Header.tsx +++ b/editor.planx.uk/src/components/Header.tsx @@ -37,6 +37,7 @@ import { LINE_HEIGHT_BASE, } from "theme"; import { ApplicationPath } from "types"; +import Permission from "ui/editor/Permission"; import Reset from "ui/icons/Reset"; import { useStore } from "../pages/FlowEditor/lib/store"; @@ -531,14 +532,14 @@ const EditorToolbar: React.FC<{ )} - {!user.isPlatformAdmin && ( + All teams - )} + {/* Only show team settings link if inside a team route */} {isTeamSettingsVisible && ( diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Sidebar/index.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Sidebar/index.tsx index 1b42dd65b0..1cc8df1652 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Sidebar/index.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Sidebar/index.tsx @@ -22,6 +22,7 @@ import { AxiosError } from "axios"; import { formatLastPublishMessage } from "pages/FlowEditor/utils"; import React, { useState } from "react"; import { useAsync } from "react-use"; +import Permission from "ui/editor/Permission"; import Input from "ui/shared/Input"; import Questions from "../../../Preview/Questions"; @@ -163,7 +164,6 @@ const Sidebar: React.FC<{ lastPublisher, validateAndDiffFlow, isFlowPublished, - isPlatformAdmin, ] = useStore((state) => [ state.id, state.flowAnalyticsLink, @@ -173,7 +173,6 @@ const Sidebar: React.FC<{ state.lastPublisher, state.validateAndDiffFlow, state.isFlowPublished, - state.user?.isPlatformAdmin, ]); const [key, setKey] = useState(false); const [lastPublishedTitle, setLastPublishedTitle] = useState( @@ -297,7 +296,7 @@ const Sidebar: React.FC<{ )} - {isPlatformAdmin && ( + - )} + & { + IsPlatformAdmin: React.FC; +} & { IsNotPlatformAdmin: React.FC }; + +const Permission: PermissionComponent = ({ children }) => { + return children; +}; + +const IsPlatformAdmin: React.FC = ({ children }) => { + const isPlatformAdmin = useStore((state) => state.user?.isPlatformAdmin); + return isPlatformAdmin ? children : null; +}; + +const IsNotPlatformAdmin: React.FC = ({ children }) => { + const isPlatformAdmin = useStore((state) => state.user?.isPlatformAdmin); + return !isPlatformAdmin ? children : null; +}; + +// Attach permission specific components as static properties +Permission.IsPlatformAdmin = IsPlatformAdmin; +Permission.IsNotPlatformAdmin = IsNotPlatformAdmin; + +export default Permission; From 80ae221fe2d354809004a7d3ac702d893be9eaa0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Fri, 12 Jul 2024 10:41:52 +0100 Subject: [PATCH 133/150] fix: Correctly populate flow settings and status (#3412) --- .../src/pages/FlowEditor/lib/store/editor.ts | 2 +- editor.planx.uk/src/routes/flow.tsx | 4 ++-- editor.planx.uk/src/routes/flowSettings.tsx | 6 +++--- editor.planx.uk/src/routes/views/flowEditor.tsx | 11 +++-------- 4 files changed, 9 insertions(+), 14 deletions(-) diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/store/editor.ts b/editor.planx.uk/src/pages/FlowEditor/lib/store/editor.ts index a3b24ef3e3..16a452b78a 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/store/editor.ts +++ b/editor.planx.uk/src/pages/FlowEditor/lib/store/editor.ts @@ -282,7 +282,7 @@ export const editorStore: StateCreator< client.cache.reset(); const { data } = await client.query({ query: gql` - query GetFlow($teamId: Int!) { + query GetFlows($teamId: Int!) { flows(where: { team: { id: { _eq: $teamId } } }) { id name diff --git a/editor.planx.uk/src/routes/flow.tsx b/editor.planx.uk/src/routes/flow.tsx index f921ac065b..f6d60051b1 100644 --- a/editor.planx.uk/src/routes/flow.tsx +++ b/editor.planx.uk/src/routes/flow.tsx @@ -224,7 +224,7 @@ const routes = compose( withView(SettingsContainer), route(async (req) => ({ - getData: getFlowSettings, + getData: await getFlowSettings(req), title: makeTitle( [req.params.team, req.params.flow, "service"].join("/"), ), @@ -236,7 +236,7 @@ const routes = compose( withView(SettingsContainer), route(async (req) => ({ - getData: getFlowSettings, + getData: await getFlowSettings(req), title: makeTitle( [req.params.team, req.params.flow, "service-flags"].join("/"), ), diff --git a/editor.planx.uk/src/routes/flowSettings.tsx b/editor.planx.uk/src/routes/flowSettings.tsx index b06ce1406e..7201cf2ff7 100644 --- a/editor.planx.uk/src/routes/flowSettings.tsx +++ b/editor.planx.uk/src/routes/flowSettings.tsx @@ -95,13 +95,13 @@ const flowSettingsRoutes = compose( `User does not have access to ${req.originalUrl}`, ); - return route({ - getData: getFlowSettings, + return route(async (req) => ({ + getData: await getFlowSettings(req), title: makeTitle( [req.params.team, req.params.flow, "Flow Settings"].join("/"), ), view: , - }); + })); }), }), ); diff --git a/editor.planx.uk/src/routes/views/flowEditor.tsx b/editor.planx.uk/src/routes/views/flowEditor.tsx index 8eb95f9677..d80823711b 100644 --- a/editor.planx.uk/src/routes/views/flowEditor.tsx +++ b/editor.planx.uk/src/routes/views/flowEditor.tsx @@ -6,17 +6,14 @@ import { View } from "react-navi"; import { client } from "../../lib/graphql"; import { useStore } from "../../pages/FlowEditor/lib/store"; -import type { FlowSettings } from "../../types"; interface FlowMetadata { - flowSettings: FlowSettings; flowAnalyticsLink: string; isFlowPublished: boolean; } interface GetFlowMetadata { flows: { - flowSettings: FlowSettings; flowAnalyticsLink: string; publishedFlowsAggregate: { aggregate: { @@ -34,13 +31,12 @@ const getFlowMetadata = async ( data: { flows }, } = await client.query({ query: gql` - query GetFlow($slug: String!, $team_slug: String!) { + query GetFlowMetadata($slug: String!, $team_slug: String!) { flows( limit: 1 where: { slug: { _eq: $slug }, team: { slug: { _eq: $team_slug } } } ) { id - flowSettings: settings flowAnalyticsLink: analytics_link publishedFlowsAggregate: published_flows_aggregate { aggregate { @@ -60,7 +56,6 @@ const getFlowMetadata = async ( if (!flows) throw new NotFoundError(`Flow ${flowSlug} not found for ${team}`); const metadata = { - flowSettings: flow.flowSettings, flowAnalyticsLink: flow.flowAnalyticsLink, isFlowPublished: flow.publishedFlowsAggregate?.aggregate.count > 0, }; @@ -72,9 +67,9 @@ const getFlowMetadata = async ( */ export const flowEditorView = async (req: NaviRequest) => { const [flow] = req.params.flow.split(","); - const { flowSettings, flowAnalyticsLink, isFlowPublished } = + const { flowAnalyticsLink, isFlowPublished } = await getFlowMetadata(flow, req.params.team); - useStore.setState({ flowSettings, flowAnalyticsLink, isFlowPublished }); + useStore.setState({ flowAnalyticsLink, isFlowPublished }); return ( From cfec66f3fc8a58e75fc8b71eb06ecbd1e9aea2a5 Mon Sep 17 00:00:00 2001 From: Jessica McInchak Date: Fri, 12 Jul 2024 13:33:32 +0200 Subject: [PATCH 134/150] chore: bump planx-core (ODP Schema v0.7.0) (#3413) --- api.planx.uk/package.json | 2 +- api.planx.uk/pnpm-lock.yaml | 8 ++++---- e2e/tests/api-driven/package.json | 2 +- e2e/tests/api-driven/pnpm-lock.yaml | 8 ++++---- e2e/tests/ui-driven/package.json | 2 +- e2e/tests/ui-driven/pnpm-lock.yaml | 8 ++++---- editor.planx.uk/package.json | 2 +- editor.planx.uk/pnpm-lock.yaml | 10 +++++----- 8 files changed, 21 insertions(+), 21 deletions(-) diff --git a/api.planx.uk/package.json b/api.planx.uk/package.json index 82f46fc379..64343791e3 100644 --- a/api.planx.uk/package.json +++ b/api.planx.uk/package.json @@ -5,7 +5,7 @@ "packageManager": "pnpm@8.6.6", "dependencies": { "@airbrake/node": "^2.1.8", - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#75127e6", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#7666a78", "@types/isomorphic-fetch": "^0.0.36", "adm-zip": "^0.5.10", "aws-sdk": "^2.1467.0", diff --git a/api.planx.uk/pnpm-lock.yaml b/api.planx.uk/pnpm-lock.yaml index 474d6d91d4..956bcf7897 100644 --- a/api.planx.uk/pnpm-lock.yaml +++ b/api.planx.uk/pnpm-lock.yaml @@ -14,8 +14,8 @@ dependencies: specifier: ^2.1.8 version: 2.1.8 '@opensystemslab/planx-core': - specifier: git+https://github.com/theopensystemslab/planx-core#75127e6 - version: github.com/theopensystemslab/planx-core/75127e6 + specifier: git+https://github.com/theopensystemslab/planx-core#7666a78 + version: github.com/theopensystemslab/planx-core/7666a78 '@types/isomorphic-fetch': specifier: ^0.0.36 version: 0.0.36 @@ -8203,8 +8203,8 @@ packages: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} dev: false - github.com/theopensystemslab/planx-core/75127e6: - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/75127e6} + github.com/theopensystemslab/planx-core/7666a78: + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/7666a78} name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true diff --git a/e2e/tests/api-driven/package.json b/e2e/tests/api-driven/package.json index a26bd30205..56327dd937 100644 --- a/e2e/tests/api-driven/package.json +++ b/e2e/tests/api-driven/package.json @@ -7,7 +7,7 @@ "packageManager": "pnpm@8.6.6", "dependencies": { "@cucumber/cucumber": "^9.3.0", - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#75127e6", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#7666a78", "axios": "^1.6.8", "dotenv": "^16.3.1", "dotenv-expand": "^10.0.0", diff --git a/e2e/tests/api-driven/pnpm-lock.yaml b/e2e/tests/api-driven/pnpm-lock.yaml index cdadc2cd71..bbf9d8c26e 100644 --- a/e2e/tests/api-driven/pnpm-lock.yaml +++ b/e2e/tests/api-driven/pnpm-lock.yaml @@ -9,8 +9,8 @@ dependencies: specifier: ^9.3.0 version: 9.3.0 '@opensystemslab/planx-core': - specifier: git+https://github.com/theopensystemslab/planx-core#75127e6 - version: github.com/theopensystemslab/planx-core/75127e6 + specifier: git+https://github.com/theopensystemslab/planx-core#7666a78 + version: github.com/theopensystemslab/planx-core/7666a78 axios: specifier: ^1.6.8 version: 1.6.8 @@ -3053,8 +3053,8 @@ packages: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} dev: false - github.com/theopensystemslab/planx-core/75127e6: - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/75127e6} + github.com/theopensystemslab/planx-core/7666a78: + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/7666a78} name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true diff --git a/e2e/tests/ui-driven/package.json b/e2e/tests/ui-driven/package.json index eeae99cbee..0ec4fb8c07 100644 --- a/e2e/tests/ui-driven/package.json +++ b/e2e/tests/ui-driven/package.json @@ -8,7 +8,7 @@ "postinstall": "./install-dependencies.sh" }, "dependencies": { - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#75127e6", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#7666a78", "axios": "^1.6.8", "dotenv": "^16.3.1", "eslint": "^8.56.0", diff --git a/e2e/tests/ui-driven/pnpm-lock.yaml b/e2e/tests/ui-driven/pnpm-lock.yaml index 2f1970bebb..05082a1442 100644 --- a/e2e/tests/ui-driven/pnpm-lock.yaml +++ b/e2e/tests/ui-driven/pnpm-lock.yaml @@ -6,8 +6,8 @@ settings: dependencies: '@opensystemslab/planx-core': - specifier: git+https://github.com/theopensystemslab/planx-core#75127e6 - version: github.com/theopensystemslab/planx-core/75127e6 + specifier: git+https://github.com/theopensystemslab/planx-core#7666a78 + version: github.com/theopensystemslab/planx-core/7666a78 axios: specifier: ^1.6.8 version: 1.6.8 @@ -2782,8 +2782,8 @@ packages: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} dev: false - github.com/theopensystemslab/planx-core/75127e6: - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/75127e6} + github.com/theopensystemslab/planx-core/7666a78: + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/7666a78} name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true diff --git a/editor.planx.uk/package.json b/editor.planx.uk/package.json index 10ccc6e6b8..74c80819f3 100644 --- a/editor.planx.uk/package.json +++ b/editor.planx.uk/package.json @@ -13,7 +13,7 @@ "@mui/material": "^5.15.2", "@mui/utils": "^5.15.2", "@opensystemslab/map": "^0.8.3", - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#75127e6", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#7666a78", "@tiptap/core": "^2.4.0", "@tiptap/extension-bold": "^2.0.3", "@tiptap/extension-bubble-menu": "^2.1.13", diff --git a/editor.planx.uk/pnpm-lock.yaml b/editor.planx.uk/pnpm-lock.yaml index c918ec40b8..d4765034e1 100644 --- a/editor.planx.uk/pnpm-lock.yaml +++ b/editor.planx.uk/pnpm-lock.yaml @@ -43,8 +43,8 @@ dependencies: specifier: ^0.8.3 version: 0.8.3 '@opensystemslab/planx-core': - specifier: git+https://github.com/theopensystemslab/planx-core#75127e6 - version: github.com/theopensystemslab/planx-core/75127e6(@types/react@18.2.45) + specifier: git+https://github.com/theopensystemslab/planx-core#7666a78 + version: github.com/theopensystemslab/planx-core/7666a78(@types/react@18.2.45) '@tiptap/core': specifier: ^2.4.0 version: 2.4.0(@tiptap/pm@2.0.3) @@ -21832,9 +21832,9 @@ packages: use-sync-external-store: 1.2.0(react@18.2.0) dev: false - github.com/theopensystemslab/planx-core/75127e6(@types/react@18.2.45): - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/75127e6} - id: github.com/theopensystemslab/planx-core/75127e6 + github.com/theopensystemslab/planx-core/7666a78(@types/react@18.2.45): + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/7666a78} + id: github.com/theopensystemslab/planx-core/7666a78 name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true From bca0fdd69d8101c08a295a64b6b2e5e49d4be984 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Fri, 12 Jul 2024 13:21:58 +0100 Subject: [PATCH 135/150] chore: Update Lambeth SSL certs (#3414) --- infrastructure/application/Pulumi.production.yaml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/infrastructure/application/Pulumi.production.yaml b/infrastructure/application/Pulumi.production.yaml index 3d52f8b922..60e7802b58 100644 --- a/infrastructure/application/Pulumi.production.yaml +++ b/infrastructure/application/Pulumi.production.yaml @@ -76,9 +76,11 @@ config: application:ssl-gloucester-key: secure: AAABAGwoc2NFbOjzGrCk+rMyWYTfZZxVNLPGUSmla7FfmitukCTLWvAIy4xNTkB9ajN18IxZ2YbAKaKjc8zsPMmcXjUlGMcVxu2qSnVNiN7A6s69ClKQ6fRVTEvgfcuP/mJLyZ3l7VBDlpK8c0T6TQ351l4NrA32G8Ig5AS3TBkPFTbZz/3ZkVUNEf5/n29bZ3AFKsb6b50zaFxzWYbW5qYZNPnQrC0cKaxv0O7k4KzRgnVexb/doceR2SPRPORoypxuSXd8J1sCc78AZR+dCa5JJvsisSLO8FulBAjhPjSNSmGCrAWB9xVLD6Ie7BX0QKkrJe+hmvWV2BsbDytgpXDhY2G8hoEiuJCH5R78DStIFP07Q5rxXlBoEcYZQh02Hj+69BgLs0bW7eNH1gl3s7a/fE1DYRscK8hv6cRI1zSSZKUacxOCsWaba6hyw8N9CyA15XZ2wrSsHD+9KOa9GBkPHs3vJQD9PS1IrSGvfJH4NKVvtS0OwNvhE+97+TzEEkQ4wJ8gQ3Bo46oGxjs+ovz/zIGNRXr6I+zKIdcXvjqUrMdF/0ysHztbN+S+/Z0yAXxcKyZBREze/9bBJ3ApgWTd/OWnPH991NSjTu7KVG9ULH28x+kD+Gw3Gys4bFe/BdWWwnu8dqv4XHU7VrOQ40iVK9uYuulbi2CRUwQLV7oEaQclV4V0RidXqov+M0byPLpEDVZGLLdYHItP5dIQylYukWjwTVtyDZHiGc1y2n4WJl5nJa7eOwCV2haY9lPfJXJqNrKc+uEpRhP/oBJFOGA/w9JcDKg40tdyJj0VvM69hJCVcPRc4jVNAZqBm0OR/7W7rGAmSxHAXm4SZYpB5w8+qRubNze/6yNhlGRMWfApNNem33BMW6HV8AMOuuDNQg1BokX+P51zUGN318v1SyxFFp4o98wytGVw6tWFjGovFa+shCgKWj7fpBdWJhAKsmdMB5pUuUM+RZz0s03SOIzo2FbXanVBnAzxEka4y0Z3VVBthO9TpWF1FGVYuqbLFQtlYTRdXHhyH7mXGm5mDtIenxWJqgNUfvLv4Tl0Lkvz6pPPNbgfLwKE+BBnA82bH/YaTV9J3ZGZiJ6sQ5Vn7zXzyhEDlL05jFm+D9CXtC9gqKKeUsOzsHvTvHVWhMIpHi1IxQac5Ji73kgRL4yRiiD2iD/bbzJS+45o+9m+zt82pjsseizF5UiX6t+bbaFW4g+G+43asCZU4LS1t4V4UHwpOVJwFNBl5xlHqWeBpE29RrWXzPZN67tsTV4Bp3rAPp3HzFXt5OLhluafJfS43gTyHRtVDsyfJaD/V7GI1HQn53oqCr9VwTvYv/x0nJSiL+Meukzku9Z28Fgtmbo54gKGx/iK0ffBXkigT/SQhLUDMSGgk+dNJSGhBpCcyal4a11eRxh+W+YbAmIMUp3rnoBKNLe2Oi3wA6YUk6/2L824776NJaYxh1VoSpHLjFMcTMOk+GkwYcY5H5iWyoy2FrprO0lNafE7jKryNKfZC/iHY1472NXlw+lLwvog93Xls1bY3pA68rl+7jyv4kvc0uS0h4G/O1N8BUoTtXiZpDlkDxVe/cSp9aX/jqZfT8oUmikGOA9/jA6ggOapD4UfGOo/+XLMIIok3JK57aGm3bZ1R4HadBd9FSFFEP8DicYqJfQkbUZJj8OYlulFWDADHJMS2uE1gFpPH3ecFsWZjvhhEPertZHSXI5kUrptH8McJYX/unKkvrX83fUGn8yRi+j6ahuzbGhZpI2bhVELtWR1UHAWSC+lzWhWXQPxT58TMryx55+14baqVvt59QVp0JiXwHfp8Itn8aL7CNxmJWTxCAv0OqtKYkrI+M2v3bU5ySZrE+6iXJQzJt4vdvJqOmv0UvGeUNWUSTkaxiZRnw7m4SXB0WM4StibFLHCy1/wpKAyBLtePLLlE3h9iVT9jdwc/W74BLykac3xxdWbIaKDXjMQ67PjuEDN425V2wgUYpx932p8J5jO3QiY2qyuLJMrqhQQkjmXPfOO6eoFWG5Uu0KT/O6zF8UjapaVo+BBq/IDbNdNNgmJymBBjxj+/8f7iKnORI5GI6aXLFDyL6MtxesekIFETPZi/1EpqQN7fWRBotJSshV0M9emqfdNzT2KTzaZUTpa9OXqSc2gu5R8bzIQwUFTlKzdBC5luHVbqDFKREjxwntdUw0IrEvjdZBy4OxNjyMBOtFPdrtaU52AhNYkI3A+Ny8Ra/fkz+aVrnyIcTpdq8rFlACr6Q3iglRKMTLWaIygF3d/zfgve+DUdul7Og/1vgvy03rdDGik/mySRqDud4lw6JAiAKglTzhg3b4elrd2WqJxY28nm5PwBYU0tIQz6D/2IVXd700ZEybAEz13KAi/+jebHmGXF4v4/iAOGh8x6b+nu/ph628uNfgvdqbh6YjUSgmBMceYKIFn7ycNfWT6Um8HLoa0ofxiOsvRVxr0Nsx4cLCtLAZ+xek= application:ssl-lambeth-cert: - secure: AAABACSO184UmYsTyp5LtMIB0ITweF9l8cq7T1Btzqza9Y9/IAL6sP4PtYvkjmbRCYeVDa7XFkGNuybR1uc2b1otibDVW/rmlh6F7yDmEMet9vVPueB7qA08pdDHgB3Rok/ADAq0nEbUhV4A+rlUPykbn4C6fg17wKfzmyGTpDm4mWr189fomsSXUFFZ5MnGKFZU4ylwqWdfqY190Qu+kdPJhPJkPVi9u1Qql25XoKHUYs0xJym2VMcIuQJMJF/m4/5gAglj2V1exD5xEMfREwC+taxHKpk4EDZZMPeJ5dgL5YJrfD0IqJNGUhNB/6nle31pjIOfLISgNoMG4oKDb5OqQUGLDQFlN3LMfxWnCDewdH9r7F3A4Zbtph/XTj5yHxz1FRmkGwsJeAUCJ92avViMjyxv3Q7ypFArgsDdHmmJRHP4j7SHdCpt0MiGbN8QmghDRgO2zP85RFxGWX+96PNq1QppsJx8Hzzxg1fRxMhOW+9l8B5psZPFqs7TE3a23XZW36lVyogZxhEENCmPT/7rpUJrikmBuB3xiiJb7CVpegI6+LPcP8t22N2/A1m6Pczy0VQ2Jvd04upbzuC/Kja+3yGZVg8ouqIWD4a501WKLEqOz5uLk2X3Ad7V8aCPIQWme7G58pqHwVfsJ8tT+9oa/o5NVPMuxtnFIqjKVAGIDYUsgVL099hV5aI1EeeMeQ6AocYYLiCKLIyBkJ0ImGHU2/ZmsFYTIgZvBHUtxNHf2pNYhC3+VU1Btvd+XC5LtNfzM/ftX/o/LMYRDiTFYjiiIxzCOTp6qEYjUdAxBdih/A+pyIoV5f5a4tSmOfUhzq+5B5qvweJccio/5e2nQql1Ho/9d5kX8TKSMnxfjyey8lvLxIYGqYuoO8Bj5H/7+J7y0Dx3cndwPhYVIUWn3wwjjyXw/xfwGrs6N7WD6/qBIgbakL0zIZH6bPR/oQ0qqiDbs2J73DqS7JbfL3s7pj5lBH4+HBDAMTS45UWNLO4ZsT5NtjeEuXZ/aaSWOQiA1s0hG1rRHs+5ZSbGEPEkA5Mpo6J7YGQcUDJDRFTvcIJ6pDFJLfXXHnOGQ492VkLxTbR26qht1n3SJheF/DfBceVHeqz7bV9OjF2utjDbp27hUsSjP6Qdqb6V5bx1VyDz4sp3BgBbwwf7yy+zFkXQky9ZuBnScaPV9L5zCC2CekzNUT2NMtVgAwtggzll12DcTreJeu5ImcHrhbWCORsUHYVTnXI0QRL6Ep3s7awojW42yNb+L1XMZN8Q23j1RDPhVvkztQs7I8hyU/sMaEwKT9O46cgIiMq9xXaN6fH0UkMgiT2iR3Ekal1UDQOPJkbkfKv9MyOBpAaJoum1CMVh+czMSpe0cjNSMzyZg6P38o2/jbMIcsdnnYMY7wVXdINlJyT/LYREWjCe4EQDglZzb0/pXAe94yafb2dV6QIklP1GQX/8m+KQkr2Iaj0aR/YU6sIEp2MkFBZWGT62lqBosFjlgTTjrleA0Z/EZR5i4FLWNJ/pIYn0Z9mLQpXpd+IDBkor6m+ybsSz5UFUxvV9tfU0f395R6S5TZhnmeZiThjPiJjBXFcSOwz94ITGFmlOH8PujRXyth+tq4uCUGQ1ji2epZ3isNhR00RAuqhd7NxbTrw32nVAS10ftYm7p6lfKsuGNB8OK67gw5bi/rXGNWuFgC7DBzG3yUDeQTHtdbvik8x/ZU3PcR2uYcg0WUtL2pmqW7NcRWlCGEcO+HyIIfnTon1croipuYwPsgoer8ZyY7ydUjt3X/axlYoWWK1b2Boee69P8H9Mt6UCfqRME55aBV0asH1hloEIcJ4pQ/NqWv08i5zWkEnu/99lD+Mjarg4GwjHp4hovNi0XGn+6Is4vD1rLH/97xrRiBRTBRHfjJxgPFURPmv6gCq8PIY1/INiwqY+S77PSuFxNTUimGhLaOak62iMWyp/nrKGscQi71VL4gMj1MC2cP5Z/6ORj6CzzEKEhX4C5kTaODCzsAv1yDNMVEUVVh1DpbWjvNKXd2PtRkPcb6XOiyZb6s9duS3obloPZJjz42vHpGtf+OUie2ip/z78I8UMr7Jehmt+LpFOcbeFAqk/5HgAnBc2mQIi7gHFXjHg+CZr9sC+cMz9DTUU2OCEu5CiV+9W6700tvaCxAaL+wsQu21SC/fmJdv577GtxsTXnyRh7HRk8Kc2dyT+Gk6du1p6Wl7lvqLKiHMVpympoPgez22ZRRyj3CmRoKHefehGxc4nCtsCvhUpYfkq+sJJIFsfRFsMd/iwdwFWz7wipD9U6NavlycQpwOnCpOtBlG4OgS7flruW8tBL8CWwA6IWDAI5A8AMllMxynnXbPkdQuTqY4UdC9yjFU7K9ykl7+nVVjH6IXLQ/ip6Jd3OFsurrtWsmIVYQgWMaymubf0gVJRryAkvydDXdYYbggD7N4qMT2aez5/DysOYJZiUc7jfWPFEvUYiKzZ3px/ShseYIj0jewUoNvr/fAuFnRaobxnRTF0RQGSdZSfvc6qOo1rFKDQlMlsfdX9PI3D2X4Kculso3/GU7TbkL/x3uhc2ZTgsDccJSXw3hMXKIEspfHgZRryqw0MiUf2WvIt1EPevh2k6Hs/l8ow1zwrGq6rwM67k1ccw6dmuYGtTa3+QY+Ft4HIz6ZwTU7UM/RqqBiOf0illlDHwcPy1seplvpvJWPtP6Wvg6Dhl0E/7wzgk6IovUVOFMSX35ifBkXXn7p7PAI3Vjs+atqjvdG/CFgF4LrFSwCefuTCmmkSjFD/kTQZMtenu4ZfILxIEy3dqoFSz9y53GQKV6deB2qh4jQ1uBvuNO6X/nWdcBTA67vBSnnhePYiG44QeDV4BePpkIw2cbMlDDfLo19yKmFjbZq8SJvI32VvwW4bWMBinvpsVAOK+dhhu8s3bI/P4LrvGnAD2YKgeflALagR4cqL8fVb0oIBFfhbZ0fs6Ett8AM65HKpmG/qHptPD7bPUmlm7+iZHLguh1O8oZfEaBXVQEebEYDGJHt418jevrUvjtUMN5Hw7UKX2vgAbOApu+bPLzGrmU0gT9GHbzH6M+KGsb5Z+3qwRt1Dj26REidRXgNCrq2zH8wnjeD+PQU/mhonO1JuQWrdpDfHJMvJyJWmKAL5CtA1yP48tO8Muc3xky79qQjfICN6UXgkMuVSwhYPg90Cx7kUCswfoVBQCGY9wujhF9fbQx2/HZzW6yOlZiMbV2Rtm8yqWkC4uDC5+LZXZ4hfSRa9 + secure: AAABABVF8JrsOipsnIYtIDiIR/ILBcWTuRgzQp1ISBHThNHaO/N/bccO1Q3R1umgNcI0dUWBIDAUeOMWW7sQRGzedPfffbDH0jMT3c/nqUdY8jFATJcLCs0iBgG3IIiuF4jAfK/AnsQGb0VHzYAunOS899B5k9TRM48U07ZAQ006F6zZxla3fOICBAVhSVVqzp3Q8BRiFdMLMw53JYjfo5oEvBFNEVTGSigbjns0c8d8pE16eU1Sru67TtkReV/fRyStRAMpR3E5PXMt0Vsg6XCSwhqv5HSDxMPUozUg51RYVW+NY25Dsz3JLZhfMacocdeTIHOmYN0lpWjgN5b1z3j3IbbnkHf8cvGxDL++ppyUwpJWjdim03Q0MfebuBpofo+H46zdUHRAf9FBVGvpA0OaP2NCrJ+wZz0gaxpO8KGB+kzn0Vt5cDOvn9tfzVr8Qp1G8mX92CwFjtcU42qiMJcg/qiahIEGmHuomGnRBSYBhu2MNRj+otdT48203ICAJUidbsDXAJ6r4JAv6ccHea8X9mrae0TMta9q2/1s25Ji4K2DoH55IK5yaHmME7YVslB5wNUttyxg9yyYmioBT9sO4C272jSZPoDRETFzWEqoeN/30HpIkCE1LZHqdmEWEk5iJcMsEC2AR2Ie/6+R2plo2OCpnGyoEZ0aWU++gyPw9zyodfFJBa4hhkH7K/pJfF0PFYpF+mw8PmKgncA3RLfku83Iv4Ls+35V/EDgkM0ndzvbLpYe4bScaTaIzucrJ0dWxRSRStGoZ8TNU/o10Ust95g5s6uE7nIPWEJJXepH5D0tuRqGh9Jet7ef+dwvxZ4XmjvRDqIQC7yVgXXIc0oPGcXjkYuiz8rtOp98YtpilAoM0eEsmoOxPVHYjvFyi4x6lCDslrqPtuMHnRcHpMUETQLsaO+pxS6aL7xJ5wQZ4ES9FjEkmxxJpgb9zz3UTNke7kKueHJsXwZBsL22qRRCml5xcB9yYWM+BYmBw2gkx0maFZiXqcoIeiqCjSNlSJ3ruLZdq2EsqUbogiybmngtjPArGxGVXh/jDxBu+YVk1dGeQ/DGEEfJfzkCn0bGTpEpoAkaFZ0aBxfba8r4Vr9Sh3udHd4Jg0gHnDkdLGSNu3hb++wt1NxK9RmyQwF+wSZdR9txgQCZ+ZDqEgVRXr7M9y5qLKpeJ2IeqyrYLQU1iwVe6ps3hgf7J+u/8FKhYccIgizLrkLqfS+yvBHy6qvdVhZtgQXJ3awjkda3yi/0K3smg5XvmJH8zQhpdZFrFL/JHChJ7bTWcb1K9ppY0256rgcOLBDt/ksLcAT1wz4gt5a8BlCsEeNY5wDL5fEakDadzVq/YemHPhsACpStMA9iwAw46g4rPHQQDgo5TWz+RqLXaGMRCopK+Ob8+dNwzDR96V7q+P/cDbs38BtmTN5qaPGUxQ5EY/M+/acTiqPj2n3J7baRifAE5ZMtWD2GpHMJcstmYo+p64o02Bhlta9gOVxg24EHFaWXeC6Gd6j19mrfDA4miI7QU5cIcBwiEjwdfpZwugISx4bgJHDv5MBmd5hs+jTeyoVijXXEw5z36iKcbZaxKjDxTdrbPePZme4U/zp8dc5uDGMp961UborpYlxPFAi8me/ON7O6DuuFSzolSo9CIhx+nUA4w8XjR/NWC/g6bF/Jnu3IaiyPC8NXbk2X9hjmiYdxy7VYw2MMHIZgplZGw8P9iWhZKXf5rEafYY4Cx0kFjw+VD8oYB2RWo+TJgtzb3ol99AxhYqOG/GXfvYgzr7wL06wdKxyvYZzlMjpFqnQv9R8TjuDQ5DOFPrizaMkrjzIFZ1hLqfgS3GFAfPUiPWT+RI/hRA2ttmbLFbo6kP5MJ3U3eDfPUXNqZbgRhH36Z/mXOYTshTOYHbSimtGN50/ONZ2xwVHzb5yXE/MZKJBeCthwhCalUX+V/Rg/yTpzCTTMTaBgSBl4UCAn9jdO13E+fPI+QNdkv+CppedhHphi+0+MM+XfQAORhwqSanTZdVF5CMLqUr5y8eh3yvaJjh0HJs3T2KPubVa2guscAoewD7nqq38WE1JahIl/r7sceuy5G1uJCFm+CKfgmXSxFp5ontIdBvG8SNtdNs3SxcxICKsrp8opPPXkHRgOzZzIz4DeiBJgx2VCrFJcnO14GNdd9+F65RF5nIS6w/99wDbXUi8mAX9Hhi74FlzN8q6Hyr3YSQXGBRIgpoSYoMfuG3WGjjPNZTbfY2g3lI6qvM9p6HZGXpahyXld0OjkTYdgPeq7TvrFRPc5Igr/vpmlBcDtl44jIUCFdpXBZ7Jrk+q3qk/9zUKMuDwWMbpyhHW+uTeoUtNP6WfthlqrJ4B7Gos5/RvJk5BNyMQ/Mj21gSIfqXkzmbh8nyPpVydpWEG4h8+94R9k2DEjPwgatkKK0KKI18gmWiFx8RqV2UUyfd3Dk1i60XoOnzPnlcw3i5wOK4xOmlttW319dcBZ3ZCbe+nIpHGKrJ49O4+R9unydj8lIqgJhSVJf+ED4a5FkfxSN9aESPKbmfjqDiOrUXIgijQKYzU2OybfFuWLb772Pqc9id4XJQViKZzPh805dZqhZycq8f1eZDrHVUfhJnlLhePj0D3KaeHYrz7TZyRierajtnOHh1EhWKdIJbSpxsyk8n1tp65rP8mFe5J4QvyFHdSPN3c9MQdsXVrcGa6Ad42H3Jdm+j8hnnl+AuvxMul9pDXfujAter2rfrEg4k7kTVCwhOwKvED/8rKneQOG+d3n+eALKw4mm2rZxO0tufzo4HouOwMW6OOIZ59nNpbg+ODpufmU0QWBiDMrAKtTCwKZX0DC8aDfJySXjsDcFacu3L2HUCVuSgU5rWI9fKgCb3BodjFWuZJNMuNTu2pnOOiibpleodRF2GcjoBAQ1+Wt31by9vK+y9cnI6DjQJUEeBAZrC8eNkNMGzAAtLV5C9pw9Q9eVVVyNl7w9nY/oyoMpDsDQV8b7FHxTAUpml2tNAD0qLuMonLJcIdQ+kCe9LSu6E7zfbK3+GbunU3X81dpMKBwXVaHWNSGAjD2pZf5uAKIHsFsZTg2CoG7jK4DcdY+eqQbHeKKW1splR2U0/0tkcG/FJj83k+1uywe2o6FwsnFLO6/xYr6oihKeXItDixvix5pvFAsoG8FNsvFQeePgagO31HINGZs3GdMpRaVVerKnEvVazN1QjNeY2w3XW3c1Z4oqPN6Q26lcFb8bUNgEVjUwTnwZ+P7eSOHuLPfR1rxF/uhhFxl+dFTQEi1U2VD8qFLK4P0+qZZbiq0VHU8xKnxW1t0Mwuhn5Y4RF4UMRcg3ipQLEmNeBTS7HSuIwlZGfJv0OJb/K2GO4Acr0D556onLYOwpSAxoBF7RaHT4iV9N1vBRduvDMo/0FBvy6hyMWz8vIrgl+a4QtUIAsCbyLnXMsaRys8oKl+ekkDXtPz8d0LxvtPKO8wi7Ci3obBh7lnbSTQ5Q9EOF8bon6f4NIcXszTVziPpBZU6YeUShgRRGMWuGop8YzepiBWOcETgdTlvhOsGtBA139Rl+UL3qmxNFWCmOZI3bHRYAk+2BNJ3qgjmwz7EneyP1XY9on6ji7le + application:ssl-lambeth-chain: + secure: AAABAL20WMuViMkaIsjSuZkzNgc+R0WlKOiYLuXR3mmXIYEFhq9h7cM0/1r4zPmWKMQz6fOKxrlSYyWdT2TGfjbiQkJ5l9pfDPrQkhkvkOJA3FDwATZS+fKh3R3n1aB5FZDfUvFu2qDOGOPzsGqTAS59dhIscvB8kwz7rct6/5r0+FT3wdUk1tXrp0yIQNzm6Hjxwsh/CmoohmBiGf11muwPkt8/Zfz2l+7dL+N7tLwGTRQcY4VSL8f3/2HvXNNpzdgVAHiEofBuMMsrsPSBF14BmuiV2OAkvCuTQmNYyUw/yivmKmxCdWnnWqtZt9OD3dGlFTb3lf9JkfLGhtcjm/tHq3iGQNnz+0d5O+G/TH1QKTcjUvztk2Okp1urWJjp+QPt8MNedte9lQ4VEflQVu/XZ6HgPx8DoRu+wxg6XtQ5srtho6Yk5sigFasgxx2wkURNSj7LgIVr6K2Agm1gAKlXq7wK/bk7ixTYiWIUvlE/GHiH7eKsy2GxFqjeoY57+U6/st9mpLoKLs7vkPb1/9SWNJ9ThvmeEPLAltN+M9ghtYf2vE/LsPun0ZBOKr3xLAe6s18nn8gmn/2aK55AwAICTDhlNbMv2tp8xQuCCurh16Mu1viDlm48AkG3teDbL1f/rp09yzccEalids/CVGkA43OOvpzsL13Sl+yQpQF+Y/EogrmByUuHOcFIBQlPdk5RNUoIEMzGz0dcjsT4PzVc/9FlvWbfuHNu9ubYeYkn80k3cOmopbkvuHfYw+nkCZa7OfgDFy+pOPTFYJ6ELSGL+Cs7lCaX/lNcRK9eBj9m7KkMhaLip2xbPpulDaZc2unl5MRT6hb4CLHJKT+IqoDpqX3ZX3OcbQ2KvesJYVh9w7T+4Aqs040Pd1W/Gwy46raAiJQsaFXcJbmlFmp8u3xQdqlWg1qB88fKp2L6fwgOxm/kHjrJx0H2EO5CW7K9sylXW2qVx921px21FHpf3wkkoComZhd0Va4Baz0C1EeuoVr2jjLXi3E4fc2L8KWdx9ppZBE8zHJAWome0tC45/X97SciTSqtbDL5KynJIyYSm55qZZbVQXa4oaXBacdptv3HNOIfXerIAgEKu2wbwbNWc6+jNd8S8js5POOQ7Nidr5/qZgtOsi+5ZivDLOXzY7f+5GLhm0+ChqbT9pwn5c7MQWy+rIK15d1Mf1VvIBKSY4TzEc7oqcGHcncV/aMg+dyTR9sTEUYnFzDr++AX/iJvsAPxI9pRd5iiqp2sYpX+w3Q79HMapawJ4CQ4DImREEtN6f7Q27K7j4qyc7TfzdejIsxY/AEqmJvH7lunatBMWDxuIBr/HSZMkTrmZDKBmmZnXSrzIGwg08jKXNZohNGDy3I/6C9LovvvJJaho295CMxYEa98jXtGndKoCIlIeToQh+WdW+im1cdJsKHZ1Fkcsw6+MiVDAQXHXmjgva76EqHUqH5taGthcKtUVk5k4Bntt8GxD9A9PXoHSoQ9XtDUufefAemdTXSmOze6TLc81gC2OPFZhQbfGpbYZMo/ZKg6e5G4qQ4icm7xmIkKSOqah5d1+I5D6pEWMq+IRmIdC6nPphhl7QGsxKnRbbD3nKshFh2yr+85GsBwFevVyKcDQpLZP2Pi2ebZbctmaSdVriDhU1XL6uz0H8rfw2vmxJ25zV0e7xLV/hx4UBjgcGn/T8hjoA6K6Vhg9hFs+uG7SCeahDlMGNe7RmO3T698jO/Ub2j1vafELk/zYlJrkdHT38cqj+Caz8bFK9TYqRlE75RdGTG6HW+MO2P/Pad1uxeQ3Er373o5+0rRMEINDqmtt30fZxTLfMihgXhzuM3+c9EZZ/IDplA91Of8C63vnpNmAmovFauy7Zok5VGlDjNW/5q/PT6ABxY/y0OgrdOW7frGDdj/M4EVdMM7B9g169wEcOiep8pJstIMposmEeHrlGdhPmXUswxILTGNkbycSm42Lg6M/DJncXkmSI9PHzB4SzGwgE0lqKIz98P0GH75yw6vk7j9Zn5QUWsaMfDf7TAdEgAVI8iQiTN2OrvRHEuDVL40B4WlK16PNXa2h4IvOm+BiZJgjrCA29qw5R2DWonEk12r271baUBJ3JRVIsC0FaX2wBjIW+BvWVc6nWYbhUGtC9er+61F6guSxfdaAi56vQo6jiyD5PBTu68nZp1Xry9U1RNfzwywWxbGly0FrWVwBmI0KNoSfgsuWJJEpcz3bkZRBx9LUMs/1dP17bC3UqpBsOLHv2lZlmOdDdGhZmNSFf0615BWiIF9NUOrthuTbFBNsVDLok1bCuAuD6/VuYZeIh9mEw11HsdQrUHUOiF1vW+IbIRYw3cUUP/6VXOKiito0u1rGbDpZ1/l3FjdbygW9NGeVD5d3NcceoIh7cZG+skPCjXpbvK6ItBANLfGIQPjcXtpoLKsd6XrlNwNpTjcX/TAZvA19poXFIi8spW9RjPpPxfbEmGikT9FdBOjfYlTXmzg/tQYyIoVLRKE+Xl2vbxRhyrM3+HJeHczDLV4C7Ebocdhh2oWeZnb7y3X4vELlJWUl+f7aEPxnKculFDrg+mPFaFGVTaUddYhjqHVKjYMPIZv2I0ZqpFcq2ZbdnUzKW/O+koU9RZN6BzqWYwZmoAiqB5e4X7Tb2YXl28FW3WYHUxjECPkJAYL+NzfkP3WSYUVJHzkbs5qipJAs/PAuUE2z7VyW5prqeKujtDUH3BVzwMA/3wJgvC0igVRANhe2WiNcxhqVCG1ZjpGWO/EBHQCF35ChYkdlDPHpFNq8RmGSOayv+s253Rx7AzKoB0s9TeNGzJvWaHvLrh0Ob/NnCYntVB/mNxB1UmSkMN6Pu2Iw3JBOrW1LYShBIgP1xl8rUCDKGRo3p+NN8YiZS9GXqAAxhgU64rfus2dyDSiOTWrS+99JPBhctL/eVxyBPdSOifOVP8QAWybRObyXMtumIiyvOPXdxVNQ5/DxIGeNivFJ3ulueHm6w8nH+pfyQnmrGsayFV1gM1W3wv3KGDdxY09AFAA/9/uMtZO59LdvgbsMR67q5IZV+1EOHsetkU4xHlMVDDWZlJXVzKb7ESocXRumi03eIeKWukPC50GA8YkF/lcg7KMScrX9eu9ZIGvp2PYaqFkj48//muUVj2k78ygbjs3kfZCi5g0VJL+SXLrDMP6z7x/3HlDDYtirsRIdeT2E2ViUrBPXCQdj/URlowheomX19aTy+3ycM/z97gQiJSnHHk7chbDcxqz8WGkCZBu0jfn5prDc5bamfM4wGu+RTTqCmPNYsZGeRrWFCXfywWVgLm3sHWfyR7N3aq2vL04qKOllmt4pbPTnxAWK5WNp7CWGZ/JreZGeXwzp//r7HGvRAO3pQC5jISccUDlly593NhSsZxFjvOOlQR/6vxzEzQ4tF7KMa4dzeGxAK4noJhbwg/cS4LSFRSMdli/8KUPkp7scggmc8i+5YK4DxZMtawaXazv9jaRP0waCXdmzoIDUz7wR0HlpPDvYYftHG0ThGtNOZW38JEK45RNGogaAqNY9mO7ZUjCLCxY5Jvt2fC5yhpya9mevYI/btRJlsW+WBBzOycNcS0AFB4p3Sa1vu9gQi8vVWwe0oeSESPLQoen+ItGtVWV0MA7mjoGlLfVgDDoxNovLVFYE0LwbsKlfCkSNnHWvbKLuahqm9eaGd+nKfnCksI2P3ngPlRCzZDMNtb0L1+tugYsjp+RbT9SOTy4/D+lAph9v57pziiBuW2Aw4f8R5/K52xECFwIjQ/I2nt0hKEciew4kvwMuuiMx8F0tg/AOj9rhWK0DHnH+eoEFKqPq/IBahB88nMzrfiaTzW8Tl4Xb2B06qQ7yFQ2pwxBwX4yku43dJi8lMZWzr/kYH1z+p+SJRmiP5ps9F08nj2tO18GvKupmYecV9i1VjgCrFDqwghEHJmjSUYcE3k97c9AKFjA6Ixc4zpJi1pVLWgDN11wz4v4tBaHi8dMmnIlU3nM1cecUxPVbgA+1P3lzAw4o1jAOVamDYRbjSM62FEjwiE5/mijLbbdG/2GqMmTFQi/LNgZStaPMpnUooBFCH5OxrJrDKl+vaJ6m7lAmNlnRlzh19Qutgh0KbELT2aOpypfIlRwg3r26xi5S3Si4Z5Orv6kH4+LkvGg5BQtZkFm6w4saXx6J+cwhYFMCWohczErHfL5y8krjkiF5fUKwhSdZXZDESJ1YC1F0sjO21HF3V8sSafm1gF0xeQ/Too4nDgNalCXX4BAgNFrFv8D8NezXrLjKsbrckzb4/MCDg6u+SfrNif8Xbom3Z/ac1ol6yFa8nac6O2OvF5rx75wCDpskq7HXSPb8hCxElto9BQsEEgH91sxCCOO6LrTufJeah14euk/g//x5O0Yw0r5uflpd9LAVhKjj56d5nwiUZqgTCHGevDdvpv0ejd4k0WYowhG2JL66dmIfLflsxC1pItfYTii4RooWaeuAcLt4zZ7mn7hX2CJyKo+5auJpBRXmL2IroTFKQ0LAnf62KKMuFTRrORM5J/C7pxCmxpAx7wAfVDDY/GEadApVJL6PoYnjo28BaUJVvPSVyCe7/TLO0Ifck8rlv3BIxhqIj9gKaUqfCzQuM+3adz9FV3RJlDjoi8KRxbvHQ1Ui+cemsBADVmpufA/mmZpx9qErM+x1mZeoE3kDVdpDyXyqhbrfspNsM2RHfVq5O6SqsTovc3H4Hu6zCgKqDgpDdZTLkdYwEGbGL4AhJ0v76jM2g+aNViy2qVVRsvn6Ldr5/XzioS5RnzDdri9qe0aHS+Eupku3WrR1TX1hIO6Bw11hlF3lIWRroemoD3sqBafT0Cds65A1oZP3Vmw2+j3CwxCosvxHBx/C1FTmNGmk4OTnBMjFHDJyUZaoHDSbAh9nEtAyAbSNmuRTBc7yEezkqH6n2H0xL8zSZONfgWUfjW51C8LyKqCFk8psdMtocp5wz4f9fg8/EudOdAfzjYdXlmSd3dyZ5dXUKrZv4+GxeKoqtuqfVrR3jQGPbh1V0kQh8wJYzq4oF5iftRgCdUWnPzyfOAB+E5aFABjZs+IUByojhovj1Xc1OZKlq01ESSTXMRGQ52/h6OH4qU8mL9alDvZwdrfFCbNw2fRZ/+NjMhW/+QAOHRgISYfANeryWOzQ0rLRUksMt/VwVwgjOgU3EMEhcXM8C8DMMC2ChRBC1bRWj8bB1J9ATlQOzL84QXKw7Yn8rhohmRpjHPGjW6Pg5HXisi+ZKeZthb/wLHFf/dqE9IWg2AYfff2/1fr1G4hQjr5gZRDx8kDS7BdZGDTbyEEjblNF1fuiAqyfXaBVAdE8J/2eR1i/jKiKto9D8c0BqwTYAcHW3iS4wzmGe/U3Th9GqRsxvLxgSP1QC9yQ2htNU8katg6gCxxkGLdct67QJMhCq97C+GX/WrconY4Y3Jpr5MArBIv04P5mzfyKi9mMDCsza+d0+joAoOzj9NgiE4ltxnOhRW/kURzVnSfFSD2wFoJvsBU9Aml+vfhXQBNGjsk0tb9BlU3l/Ct/2Ua5CcOLnLxZFkQ0NdfQuZcI0PlxOGUmTPo0tzTISJEx5lyVRnmGi8ru1maZvdQnZsiFg3b4TDf6KL0dsE8OTA4JOpRmSM+uzo9DfIfmtqjK4dnvSPbz01w2DVz3x2ud3DFfZn6RdUo2FE5i2X1AM63VLWblz9KKw8Fb9sCjXWFoB8JQXcm+UoEQ9c7wCaer/zQnNxaJqcS7/nj1RhUuU1DLlSFe7UOA+qP0p+icTsmAlxhVd70Xtal/9gkRfHMncoZry2pHlqM4ocVjYDn4rw/entwQpKiNYhvvtxIj9NyXt/iMBhnANsHVTPcr8JE/Hfwwp4ZcDIDgYj6/tMovDsWY+q5IX+5rMd5ifFwjFXvsIo7nADHY9OsargEubPjTByUmdoELTwQQNAyrsDMquVO2BunYqEaPT4EOVRtcGsora+vR804rN9wlkc2KhgUCNmgqswDE1e86fyAxxWaG/ETT+e8kFB2kWqvLagKrTzwTha05dPvhqEYn8GqkPCdRuFSOY4E2CCwD1pXgC+zVFbb7xDR/YGPxUoUJAdcIHrpzuqd4lQd6JHQJKbnbCguzxQkyJ48JXDgcQNNk8GNVGPSGDru26ccyrMNstqBqfcaWqlFj1TA8Bd+0KkLdJRhI+pljN882tq6ZXTHfYWFM4mpq0eth1M9UFfJ8Ga1IYHKvJewVLCzx6QvhlqlQO3eQpLKDgUB1wpfh/x+b3ZSrx0LVMgEgaDNQX0kM4/3aNFbEvMqbAYaBkcsDWnmlk/wV+LrfotKlvbcz+96fBkSmaX2a4yVVzsymDPt8IT2MEr0vXFQ3AP2oRYGRaFM5hA0BipGsILc0klk8WX9PYMm112ZLJDPU93fcdK8FbQOUgoA9oR1+T4CMM8jz5fyvl0VQXbDogsmYLNDlDClW6PtS8kknT2EbbU27RVUmdnCiExgwGdB1Lp/+afhizPUS88UIeyKWJ5JPmRATy7NFhLXM05kFggJLb95THSiWZCnhWJ7PGBsMJNnr6ewQwTDeS9bXh2ve9Gr6rCiWocySl6cBeMbUyORHyLnjzJBocZnHRneiT6k1nBu7x6QBeRz1Y9s+ooz9QxqKjURPLINKQVnaXxxdFhmjLaQQmo2PK2X3dwO5YjXSaJoFMYbMK7r1zmLQkhBXXlDww0kImq3v41mvaaEJA4j2YAwVGpN7sW+TmK+x089nX1jbwXCcsnrzkPhnBCXg/RjEe6Zss33Anzi5N00RYj9tIn2B0tB82Jy7G6f5gP4Cj2/m65iJQ6IPvJw3TVmc1r6g79npq7TqbpuAqrmgdt7icDShpDJNe5fbqF7r7x45Wu0TjPRdhimcXQma+BklraZDp6Il+kEKnHyqT1Wq3pJPs7ehHk45Vufjpi2a5th8kkM5kCEtGWUUX+qsingb4S/Zxk4FHcriHDbd+sEO5V/jdQJQfz+JNKLL/Uz28/JTLOl1+7KHipJK/+mjnCJkqW+u0av6tCKvp+CiPWDY+WpBVxb1jSq7o+1mgJG++nQJ5CsOa8InPI/2o4xN+E+/6LvHR6Pr9RXdNcbbkt1ICQ5PBKrjZJw56ohyWAIPvlPPJBDLR4Ai98O2GGKlmwFOn2HIwu1lKqiA91utedtsffzQdENtNHITKdUJlbMLsyEdrI4tc+fC2GzUlBDp0yxSepJLdpEzhQuSrh4/aHyYgIcdjN6OwmHLABW5ZQ6tc7MiWQ7PhqXYIDgx+voePjlIs/RKPo0kOE2mm6vN358Ica3vCIh29PiqIDKgT1nrLjRkkpKXogerqgE9dL6JFKEBA++7DD33jhblcTsiMt5isKrl0xHuggvg5lCLkkFpv+m8jy84nkppU3jlR8+2uOy0X1qwhr0CUJ4d/OX8tqvRF6/NwqEV/GhqkIVoK1iGwUdWyNFRgnctGFnhuncjUrK3VDuj4vwZllx7dFLGA0kJrK4N20vXjLtBUr/20oMT4XDXZrL+NOj7yhzdH97sDnaROhKD2E9DPQ= application:ssl-lambeth-key: - secure: AAABABYsOQCXgtklLmxDuHVYXSRdzpmZqesaNzu6GOmrTm5OvvMg1L9FosLdrZPF7IhLm+AuBEbJRBHCWAOZhbo0K0KuKiy7vBfzQ23Qhpd9WaZgS5uO1pC3J6smdpl8MFS7r6mnH4qPszBkVLv5HteCP9FntxXQabgZgFlU5EX4aAxVYMYbp0liNq+VUszunBs2hgSGHEeKS69lur1/o4XHXnTXITogtSn2xz9aGXeRzaiW/SU3xT8nCNhpPdCbaH//MWUHvXV2dmdWtvamiTmcovAkMcM+dpC/43/T8xczdTol3w+E2nuIIWd8wLKuOnPS54qFKT1dYoS46znfePwZrIan9JwkEX8B2ItXM8yjbwtWCNjSCAdpJTxCGZBWzkVbMiwJYuQHUyQG/4z6zHWjoGtg2PdTr9dM9j4WUea5WRQ8fZmIbBvD9zwqLEJoQFcC391cNz9zus6qrPWyQE7FJ+INlFIWiTUJd7wT29+OlWYNcD0kCap7+tYKXloeSy631EU6P5woMWGYWV/FECa/GuK8jmRDslIPmpv6jpZFoyrf+PIzjwePkbFp4N82iPBG2XeSEskFAXv6Y6iDgMzFNUIq9Y2ASycLj51wMj6i8NlgUsdNiHg0Wq3F/a6x+HCVniJ+iJxAIcuvD+9aw8aOQtJTsd4xJ+suDZyYZq1GNLTXHf+yt4CrgU/FLFwsmPhEPThuRsBO338yODL8qYcpho65FqLOtl1vZddgxq6yC77qq61rhViOB0Ix+343WctF11L66mF2/lr1nWLrHODgSII7LS/+DGuP2nFPc5vPe4wrujyFSoVboYTOmgrMA5KmR4VrcXQy+SXn+UcrMmbVKxv+vwp3jIh9+XvnjabZDL7n5FJTKVaMk/7VjSZY6jL9FEPJF17XNXVKKg+TgXymQn7NjuVthiDVZxloYvqbtvvcZEUc9GQ+qeWGo5tgQY66JNaAlGNAPnkJhaZE/WSzW5UtQtQLxiXOJlf+SuvN8B0Wr2Jmy+LQDp2TjnCYXUXtFNnJoUOqz19ZymFEnaqixS7dR/zZaKIdO4pXFBjaztnZZLtYe6iybu9Cpf52z8amGdKTHXsk7dGS6ILQBWib0uTjmnppb5KxkT0TOzw0PmeUhjN5OFryQbATdWyAlbvS1MXqli9Q7Q1gB8INnxTBkNWuFBwJ11VFc8Z28c17r9a565ar8zdWl9mVXUD+7mb2D/ASX/fXGMrZ6angag7EAeLxPbIjRvcHm/EHKKgaZRS4yNHXzUWp9MgDq+3t9Emrr1+MAwXAH3Wka44p8U/gXDmULnwfRP2tOeaDyQgq7T+lpy7/HWTtp6jTmF9dlafdPr/e38igCj2r0Mjk7S5ORfu+lxmc5Nsnwd/lDJEnV0z/efvYGiWJlK/dPqI+6xxhGLSbYCxrhHJ3t45YUudLt/HOvMuKJuxGT0MFyvrSOi+Xl7+wcbpzpjPiSnROwJA1bT1u1Mnq4/cY+OH097rAES5WKQA1+lqc3rxJ1ejLzLNvOKYEvYP74Akd1iwAXBiZmOcNTxQEfRztN2Q7+syjQYY3uurkIO9f9VBL/8tYfMIZw9Q2o8tO+B2ok07AW4C45IbJXw1gUvYR8r3BCgs/wsmBWrJt7IxYDMFcBe6CNToUSkmGiNRHpErbh8BsyiF4igzcvh8G3zjnl1Jk5TXg08TShT55jVwsYYtJlSVENoire4J9wTVfFN5Obd22QiYpAV/TblTOLmae+u6wvB69FGF3Gzi6aUlf+4PxD7j4IK2dmX1ljBiX0U61VBwt8N0Z0eH7+n3dWe35LcLFnfiyjdw6hgLEFgGwLE0FgUPzrB+9cOy9MoFBKWg2yYYGeo1aOrF2aFVTjcjI9vBDICS8fs10bJGPes2mx/NCW1DBRtbUn6qDe0gEi2FrI4Hc7sEjXjRwuiR4YVXdyLvFnScSRNUt3QD6OsrqXmnoKuJ8TANAuOTlfwvkxPSFeNfFSAAtTmnYMqrGsELFx07G5mEBIJMJ5DrwdGhmoUh1/qR8mu2TB4AC8mBLyD/fY274tTFUE8sCGDHC1BS60AmiLRh54moYA4xZ30hXCU4FAi+0Kr2+5rmGGtPfyW1PuDffsY6CizkSF0n3Mpi+Nx8/jy17PzSDrLfFMxCq/FbCxnHzI1II8mVoFI7Uru8JqhgqoCymceKvjfvfRNnvTWSLmy1fqiwDHvaB99cS58dkB+6RfFBaakSs6OvlsDGq/j6cpBsyUMxMmsFEAs5xqjwATKsYE4+i0xz44HlPrxkKPiP3dhd/hFWxn5La/qZZMvXzUeiafKSB6Jrru3E= + secure: AAABAK5QLAxwWQHYNiBEZbN5hd2cXoWWnG3FS4I6f/c4ranj319YBjv/YiMFxM+42ldWvhk4mIW7aa0KM8mw7kpv6uIbXufb958IH+VXmjTFuq0IlTEA+3uHlNTfVBKRW9gOZmljb+0bKhDAgRj/AMKTJEhJpH7u51enAUJHandwMFwDN/yQ8Vima+MEJZN4Lfktwcs5btJI5FGSGFl0r5I20xZYoQWpVxGlTDixmfRMjOOUVflO23BfdYHfsQkBi/R3sXFycUOMbccU0CM+NUPp7eDQc+1/vaZ/6c32sKoQ9O3/+1nGT4hvxiLqU5Cg5ZBs0hSQ5kzyaAPwXTE+BV/So/Go+bh1UziQRzYhSyUf+pBHnUCAVuXWnVC/WjhR2XK00VcNdh9QmiL1xntYWJmuidsDEWYWD0sg4G96/pviw1lpGp9qq9O9Tkh7bSCHtR8I5gYiR+IjWuA9HBtBnRIIxvmO6ulvJ7JBc1USBxJywOp+HvZefqkLMxlSHjkXoXdA7aJCFdJ6l5g57tWeeI6C2LHaALG5S9MUU1vPEi8LMG2zuSlHl+mbVaeMQVX3VJdNmdAWukDleAqrFYSYWycJ5ancU3tgSCTGk6SN4VXoePhvaz3GCg8Zs0LbE2Xq9EgonPekaBMV1GtQlouH+Aw+aYAr4f5rzFv9uYpBOeNpinxx9o2DPERK3Be1EbJbWbGRuNX1H6qhOYPJyb80YBBMylxTFxqmf8yNgKOsqWIn9G3giNhrDSDpJdX68w/OtLJtxrOLpS+u51GWHgCIQSoMmA3azlozL4oIoM7+AwRrVDIrUxvj1E9S6QnoyCkcEqZqJ3HC3ceAU3d7xctGCH6BDg6KStplfw9Ina9ZDagLjN1y8h50YQ4nybv47k9f5Wjy5a6q9OmKamALTjKYbVVbio96RjKRS9dSKMBTEqU+Iigr8vYo1D7HxnSWf8EPjkzePlYtiun4KY88ZUEzC9ru8tkdbgFAakqB+1EKW32D5o2b/03aviPZvkDBnwssfNMLxsUrEYPPSH5RVarBD8dcgcwyVlEPtcJN/Jt2TfzIysBA+vNYQ3N8ggj5WloN6WpwjRZgTmB3D9zm2DZOYe41o56uorWrGaDgpy3+VIjNmY1MfqTtiURE3L9Ua/rEipaLZSAqpEMOx0GzMeOXN1FWWi0QOLiEglHGcVK33moKhHRr7VhEpXTE4cVWeCP0yYNMgRVXfFE74vfW0qJOrs8zEpMWiX+I6FJJ7X75qUSTwAeysZz80yixVxNgT3CMNFYZwiHzWU/H4SmQMwWjl+dGc4WSYgZY2eWt+CPNbAeIu/RDI971hMDzyX6pweGPr7b9cHT2Av/WK1R0h6VIT1dWnfP1ppCSB/aRdWrvRvTMIq84ngoTRL658K6D6nxmMNUGYyAivvWN6H0vsNh89ns51ekKzqp4jdpI+3jnWwqhLg0SImSmkUm/oMLvi4q3LCjoMHuaibnVrJsps/JEbtoHZCapxAFRpl0ytM4r1XUVJu+Dqm9sW5myVfpkBH1TrLErJRwfHYsFqg3oTwYFNYdLp+O6YzF6cMfSI+gmm5X/GnSVeOda5dLMwCXFoJMCNC8vkJJGud1sJV2eg6XHx9ohafq4W8TX1ztmgoYvuADAgmiDdltbHbAk7Q5uWP8743uXgWdyxWWxnvRc2jGa1T8pjq0ac6SvPDQOdNnaF+wVa/GBHz1yEbVgISriyQd5WSe5gnT9aY4mTRj5ApB+ZXydO60gO/xb/MnPYD1nNm1M20yhgsmqLbM4fGNJXYPVVVGQFUb4xyCuIfpbxLnq3RzjNiGhqbtO/7umD9jm9Qek7p/YvDhms76EMMkgDmjjZhHoGCOdjkA6Vlcugzhvh0IfFk8oRrFlUoGc/49YIWDSIcB9bM3kA1SM3L4ETJXDmoNuAH9oUkWjyyvoBue/7FqvFHpmjTQU+PfnNtHLQy1dUNrWTKDahHO/NE1lZrhGE4JGLs1gsnEqJFvmr6yxgkClP0YiRtoW+zmTpGkSjlf0codUbSFWTgX4MHsqYahE3nZX5z4d+zySx/iIOhPydTRBnkT7ACLnHGYsSbxLHNGjnLtaf+2S7UeezJtRgjldAUvVN3NZ4bwbCGk+H2PFjXQTjEpqKGWcSN7g+i76mem5N2pt7GieXykm9l5aq3FvDZmIzAtYd67qrGJ2Zd2L9rUESBBkxU8DRv3stWFyico03EVRih3kBwLgBtYwHe4lLKcOc2UhgExA92pQkRhicimCZ+5oXCiZOyLdc0qML150RXVxT0iQ+n27rOchZ+niQuD1G73TT7ckw5kqGbha/ngkr3xmu2fw+SYUzV2t9/6eMv3KAC16kvA8CoXpyz8Wu+HYH6kEV7nS6aYTTmLhno3uE0AHPkmJjvqoEHCqCggvJSIdOfZJrjyd6BCIvGBRO0JSMft5DzJBDDjtoYUGLTaJk8tLRxrQjMFVZ/CjwH2ki893BR9bE6jRrlS2hE0n/XP6ck+k6VyT2AWRfGoeLEoepW2myNmQVT9Uh8J6Uf50z7HKaPjwp1VAWxID2OYGugp0B675g4IV0hORwMAy0kH0BU9TpmY1S01d1g== application:ssl-medway-cert: secure: AAABADcRrgyLvE/mAcsgoEgkLFgNA75B2NBxtr3o7y4xBIJXJKB/zcr4lT5RoB1M3n76vg/9iBpgT3m5afvtk/a39dlEhYQRsTGpZHccnV3l+9pz3yekORUggDlu+/LkCahs4M7gsohs+zPVlxFuFwcTtRrk+qWJhswsHD7JEd+en1QLDqDOBqAEhk/yzxbyCQofzKf8Rl2Z6iqZcTfOPiBtNT0BFyTBxcE4cZMAdeNj55gA0fPigyZIVGtlEfEJKzwz4WWBBtGWp5x3xU26K3j1Jccj5CIdUsiuWIlqPw+wiRZ+GcB8T98JzbPfNqY0LDvKvYi6GRT+MBytlPMqJfMOi1UUhAYuPbu+v4eE7uJID3oOC97t3sFNx/WGzPO97BtPwOfMefWImx+jbWgtl82xdCmowllI616pFJ8giJOSVKwzKJIUi5SQYifDyzXZq74ezrqgW9rMyLscsWBG+VmI/Cd+KJ7oz2/iBZ8L4iAWKZdK5HRzn07Twwg7w/QhT2YkGZ52XwPnN8Pt/CpeUcxjmoQOzqRCnc8VXXNPh9ZyTE+sgQ5VecyHRJ1jPo77VopCuqpq0c5SIeDXFhVvpt9QGpIOdsqqz3FJFk6osEsWvGz8GN1dVKz8lDoJSgxdlcwu+Kv2zhQQWZrwahvmMHolENmCcj04Y502Hm7MyV5q7yDqFe6pRvA29J+xqGNIzRVOhPhWirD1PGhlgv4QOLbIt4mUQxEq2M2dvLQU7AWWabqzYtaAbQC3m65tY6KpYcaFGFicxtHOGWZzEPr+aZPH4GcuL8aKmO6KS7JsHdxXoarDSpI5i/1Ko5bP1fX7ykiH5uGQRnDOSn4ET4Jt1QxNt3SDO/7mZxnnfEnDkAJU4ZD2y0ZaE6cvZzngv3h+1fOTYmaAU+jJNvf/8y9FaMzC56EM9wVee5CPBgB6mOCbdlUtexNTSfrm5ijjO8TrJLapvDLkYbAw037AuZX3ICJz9Kji25mR3QEDZC3eGOTV1qwzMfvMt4y0qRFWDKMbmezqV5KbQGGPpMGH2tpg2TQ60a4UrjsLTlU86xNLay+fIju4UC9XiSpjQsY/gPkESUFSHpkWCNoCgbKugIX7KVSkv9wqYSaxz0drrd1IcvKx94NxDU6RMnWaRy1tBQYkHQ26wK51Tf8OCISIX6/FF3HyUgufPOStxq/0xVsBqm3XTqcRV0h3Y4IrT4/0S93AlNTOrc1KqeBGfZPqI4NoPRCH1PNrhCvya26FedO4SaYXmN3skAReB/fe4vZaoCbzmiTllPLx1X1FiX0k9LWmxOjemNKuZ8HzRoUJmAI/+G4qSZa9DJ+uSioE4Ic5K8INz8Y3c8hCFAf3BV97KB0hVVA/i0FjKAiVHJDxT0gFJgQYGjH4IZ8ltiKOnBNQk6UJvkqmAOngbSMA3Ec+st/jmsXTUMnbPAkuOxdCz9e/FgFMynuNOiN3Te64QGlrTWxnWwprC7Gtlnl2uDWAnyjS3TlkRL4g2HhS3NTphxLw1IDE4s9L6mdx/t66PMUjRdhKhPP0lBsaaVr4ZWorDX/1fvkSZI1Rzw75sE5Hnh48+LGBMl6gmjClViyK4FVaMJC38uR5PitpjvWdd1nhct8d8xffvlan9EFTgMCRoORrLVQC3LB7czTocLn1xDhsDlfrUKTc3YFGu65ZBa8gmW1wQfWBVJ/S/uW98hkjS7a/7yLsjKax+EawN1zJIvua1C6m2RmqE6HjgwYyD/0uY3zMHBMoXJJsawbOBW5N6ilL3w3FbtweJOo9LobUxVTgMI/mJZ93vTIHa156Ua1is32BumLzEBSvBnWsIZVKBq9Kvk/9bl91x7xH1PPiNTuClLVVWUmQVpJXpBGCpdbzqY4ny0DageoiEwuUBDmr/tq0Iwj4TwjkDKn3g5QNkh0rj+sKzbqz+y2BwqCQuSYSXSROLkGzCwQbD9LDwmgSlqoBu3Yacz/f6wd4ev3i3vZGJH7fDLeDUxzs1UBJV6SZ8XdNTsTywWMTPHXyM1quuDpeY+lQPMlbaSCNY7KqgB8bj2CD0/8qqTEhipXZs5SWxMvAkYnH4gv1i6WmC8sDwYLSJTl4CbEWcxakQcYvfqWpOMJC7LOe3ViMLhROJHfS5mrDbMuFOnHpF7b7umybZM7q3vCAGYBUJwDopUL7YdYhlXm/ZEu9fd5SVW6aNVMG3/OpfjGgKpZj1mEyiqq2HkNxvRpZ7RdZHLbRbMGYmw5rUhIZllnUzI3NhYHJwqTNsoTgiIaSxwL5v9PD8TVC8B+HRSlb1nFStkVIljBvchfahrDNekCqwmkjFOfmWZDuCaWTOiDEErQJCNyiTLuJUS3PS8cxM5sxeAUMLvASlefCSqTDMGbY40ZRcwOIVRruibXJsR0Rx9OtuV4x5vp6/suRhQQn41tOMji6MZYBOp3aeCJRB64tYIrgRqel18QWCMM1xekGjSPAy0IVY/W7QYOT3K7aWlMjy1PJa+uvo6cbkiELxaMjV51ppcFW+7vtweUu7MrtI4bp5KMCpwoR1ODym/ZyUm8NheOy/k1ZP0nYdCcK8+qW3cMtbhCnzzAZ5mWl+9xkDilGtevtVItuHbYQbxx5bzARYTKJa98EmVnXGxabLzbbX3gwz7epZWlQECLUhSMFRUGrOVU2qSvcKF5JjyuY3kqBtPRf9iBSOcmdSmTCb9GHk5157xmKirIPyc2l/yBV4KMg61H2HYdVy+qF1FA/xItQCCDXTwdeeEYVagdBX5l4w5X/JekJZFqerIF22dXqrSfB0tLYbB7RBNnbZnWQkoFO1/ct0Im/xOGNEfYIaLd/4IS67DjaCs1XdhyDLSlRD1kGusqn0IBMaKKGryhWgiVgU86zGz7lAkLwA5WoY1cdIgX72g3FjBaXzmqTGDFyqQh9Uao8DMb/ja7pRHJ826t7B4rCcBqCzam/nvkcC6+MsZotkjUlXw9YmrOnqOnSJVjGJOlA04IYfmxUg87I/CWj3do9Z3Sob7eASpemWo/woHdYe+8OZDhMXQ5WD430mSydzB9i4+99f7K7/TX42wiSSrm1/mk7zFoaDOtsTMl1mcw6KgVHAdfYpHQKyssFMK7uGPlLjfHikW1aCOiMVC+n8QFl3kjXApbvgCeHMxmrbX1KW2nlgRRWBQE90Q81f7kXXhOic8sNUTxE6HCGK1a+SY377eAJn+xs3+PoJ4K4XLAjprnge4mgN768eA8Qv8r3fcvV8RInhExX1ZeIRlHTvumTxr0MpNjYaZ4Phz3yNws7eEfhQYXn0LsDP9EqNh15keOMIHMXvBUOhAaP4vBpxq8q+Qq17zhwJ/t/cfn8Jl4GaIBXIGEYgth89o/5xwtuPOfNELhSW+S0oZsJkY+OOAEI6nzZNXcWPrHK6U9dIwP+wOv0sDh5CwQyfl4A5Ps3Zjjfw3pWJHzZ2q19Nirf4D69SRtkEUVvRcxYK/n2tzYrUo9BPr/I3NMZCblXWiAjNP5+rq8eKTh411FP9jxhn4CsjWTkGeSKgL6cyphoWrcfhga8EhxbdypBWJz2/uJZDikAQ1NbIhTGm2PlS0k0Y6LRSxfj4Uhf69qITFtXhwfE1MjjEsM82qe0m+41pn8cPpi8D+2DFTwTEf30+ZqElwEme7YBySLKg7vK1I6fRCOQRTzihlZC/AN4f8Ybt/VM2n+5+oPnHWz2Cmu16rRviDTRj83sG6hpD/Ca9rLo03oMuw== application:ssl-medway-chain: From 90de5661a629c5257cc8204671c8090f585a70ed Mon Sep 17 00:00:00 2001 From: Dan G Date: Fri, 12 Jul 2024 14:33:06 +0100 Subject: [PATCH 136/150] revert: reintroduce redirect bug to be fixed later (#3416) --- editor.planx.uk/src/index.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/editor.planx.uk/src/index.tsx b/editor.planx.uk/src/index.tsx index 9e178d4167..50e58d2691 100644 --- a/editor.planx.uk/src/index.tsx +++ b/editor.planx.uk/src/index.tsx @@ -48,7 +48,8 @@ const hasJWT = (): boolean | void => { // Remove JWT from URL, and re-run this function setCookie("jwt", jwtSearchParams); setCookie("auth", { loggedIn: true }); - window.history.go(-1); + // TODO: observe any redirect in secure fashion + window.location.href = "/"; }; const Layout: React.FC<{ From e1bc433a5044a8c36cc9fe7482f179e4c2ba7b05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Fri, 12 Jul 2024 15:23:12 +0100 Subject: [PATCH 137/150] fix: Correct destructuring in queries for `teamSettings` (#3417) --- api.planx.uk/modules/saveAndReturn/service/utils.ts | 11 ++++++++++- editor.planx.uk/src/routes/views/draft.tsx | 2 +- editor.planx.uk/src/routes/views/published.tsx | 2 +- editor.planx.uk/src/routes/views/standalone.tsx | 2 +- 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/api.planx.uk/modules/saveAndReturn/service/utils.ts b/api.planx.uk/modules/saveAndReturn/service/utils.ts index baa416371f..d65dedc16f 100644 --- a/api.planx.uk/modules/saveAndReturn/service/utils.ts +++ b/api.planx.uk/modules/saveAndReturn/service/utils.ts @@ -97,7 +97,16 @@ const validateSingleSessionRequest = async ( team { name slug - settings: team_settings + 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 } } diff --git a/editor.planx.uk/src/routes/views/draft.tsx b/editor.planx.uk/src/routes/views/draft.tsx index 881988884f..1ce79410a4 100644 --- a/editor.planx.uk/src/routes/views/draft.tsx +++ b/editor.planx.uk/src/routes/views/draft.tsx @@ -69,7 +69,7 @@ const fetchSettingsForDraftView = async ( favicon } name - teamSettings: team_settings { + settings: team_settings { boundaryUrl: boundary_url boundaryBBox: boundary_bbox homepage diff --git a/editor.planx.uk/src/routes/views/published.tsx b/editor.planx.uk/src/routes/views/published.tsx index a97a426a52..914bd79369 100644 --- a/editor.planx.uk/src/routes/views/published.tsx +++ b/editor.planx.uk/src/routes/views/published.tsx @@ -95,7 +95,7 @@ export const fetchSettingsForPublishedView = async ( favicon } name - teamSettings: team_settings { + settings: team_settings { boundaryUrl: boundary_url boundaryBBox: boundary_bbox homepage diff --git a/editor.planx.uk/src/routes/views/standalone.tsx b/editor.planx.uk/src/routes/views/standalone.tsx index 8de2a37b67..465f25a9d3 100644 --- a/editor.planx.uk/src/routes/views/standalone.tsx +++ b/editor.planx.uk/src/routes/views/standalone.tsx @@ -69,7 +69,7 @@ const fetchDataForStandaloneView = async ( favicon } name - teamSettings: team_settings { + settings: team_settings { boundaryUrl: boundary_url boundaryBBox: boundary_bbox homepage From b484df1f7c3615d41be1a80cc7bcef9f2ba86697 Mon Sep 17 00:00:00 2001 From: Ian Jones <51156018+ianjon3s@users.noreply.github.com> Date: Fri, 12 Jul 2024 16:42:32 +0100 Subject: [PATCH 138/150] feat: In-page editor navigation menus (#3336) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Dafydd Llŷr Pearson --- .../src/create-flow/create-flow.spec.ts | 6 +- .../src/components/EditorNavMenu.tsx | 232 ++++++++++++++++++ editor.planx.uk/src/components/Header.tsx | 80 +----- editor.planx.uk/src/lib/featureFlags.ts | 2 +- .../FlowEditor/components/EditorMenu.tsx | 119 --------- .../components/Flow/FeedbackPage.tsx | 96 ++++---- .../Settings/DataManagerSettings.tsx | 6 +- .../Settings/DesignSettings/index.tsx | 5 +- .../Settings/GeneralSettings/index.tsx | 8 +- .../components/Settings/ServiceFlags.tsx | 6 +- .../components/Settings/ServiceSettings.tsx | 5 +- .../components/Settings/Submissions/index.tsx | 29 +-- .../components/Settings/TeamSettings.tsx | 6 +- .../FlowEditor/components/Settings/index.tsx | 169 ------------- .../components/Team/TeamMembers.tsx | 51 ++-- .../src/pages/FlowEditor/index.tsx | 4 +- editor.planx.uk/src/pages/GlobalSettings.tsx | 5 +- .../src/pages/PlatformAdminPanel.tsx | 21 +- editor.planx.uk/src/pages/Team.tsx | 129 +++++----- editor.planx.uk/src/pages/Teams.tsx | 53 ++-- .../src/pages/layout/AuthenticatedLayout.tsx | 33 ++- .../src/pages/layout/FlowEditorLayout.tsx | 16 +- editor.planx.uk/src/routes/flow.tsx | 54 +++- editor.planx.uk/src/routes/flowSettings.tsx | 109 -------- editor.planx.uk/src/routes/team.tsx | 32 ++- editor.planx.uk/src/routes/teamSettings.tsx | 63 ----- editor.planx.uk/src/ui/editor/Dashboard.tsx | 22 -- 27 files changed, 529 insertions(+), 832 deletions(-) create mode 100644 editor.planx.uk/src/components/EditorNavMenu.tsx delete mode 100644 editor.planx.uk/src/pages/FlowEditor/components/EditorMenu.tsx delete mode 100644 editor.planx.uk/src/pages/FlowEditor/components/Settings/index.tsx delete mode 100644 editor.planx.uk/src/routes/flowSettings.tsx delete mode 100644 editor.planx.uk/src/routes/teamSettings.tsx delete mode 100644 editor.planx.uk/src/ui/editor/Dashboard.tsx 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 3948a7338f..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 @@ -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/editor.planx.uk/src/components/EditorNavMenu.tsx b/editor.planx.uk/src/components/EditorNavMenu.tsx new file mode 100644 index 0000000000..0471ebdc55 --- /dev/null +++ b/editor.planx.uk/src/components/EditorNavMenu.tsx @@ -0,0 +1,232 @@ +import AdminPanelSettingsIcon from "@mui/icons-material/AdminPanelSettings"; +import FactCheckIcon from "@mui/icons-material/FactCheck"; +import FormatListBulletedIcon from "@mui/icons-material/FormatListBulleted"; +import GroupIcon from "@mui/icons-material/Group"; +import PaletteIcon from "@mui/icons-material/Palette"; +import RateReviewIcon from "@mui/icons-material/RateReview"; +import TuneIcon from "@mui/icons-material/Tune"; +import Box from "@mui/material/Box"; +import IconButton from "@mui/material/IconButton"; +import { styled } from "@mui/material/styles"; +import Tooltip, { tooltipClasses, TooltipProps } from "@mui/material/Tooltip"; +import Typography from "@mui/material/Typography"; +import { Role } from "@opensystemslab/planx-core/types"; +import { useStore } from "pages/FlowEditor/lib/store"; +import React from "react"; +import { useCurrentRoute, useNavigation } from "react-navi"; +import { FONT_WEIGHT_SEMI_BOLD } from "theme"; +import EditorIcon from "ui/icons/Editor"; + +interface Route { + title: string; + Icon: React.ElementType; + route: string; + accessibleBy: Role[]; +} + +const MENU_WIDTH_COMPACT = "52px"; +const MENU_WIDTH_FULL = "178px"; + +const Root = styled(Box, { + shouldForwardProp: (prop) => prop !== "compact", +})<{ compact?: boolean }>(({ theme, compact }) => ({ + width: compact ? MENU_WIDTH_COMPACT : MENU_WIDTH_FULL, + flexShrink: 0, + background: theme.palette.background.paper, + borderRight: `1px solid ${theme.palette.border.light}`, +})); + +const MenuWrap = styled("ul")(({ theme }) => ({ + listStyle: "none", + margin: 0, + padding: theme.spacing(1, 0.4, 0, 0.4), + position: "sticky", + top: 0, +})); + +const MenuItem = styled("li")(({ theme }) => ({ + margin: theme.spacing(0.75, 0), + padding: 0, +})); + +const MenuTitle = styled(Typography)(({ theme }) => ({ + fontWeight: FONT_WEIGHT_SEMI_BOLD, + paddingLeft: theme.spacing(0.5), + textAlign: "left", +})) as typeof Typography; + +const TooltipWrap = styled(({ className, ...props }: TooltipProps) => ( + +))(() => ({ + [`& .${tooltipClasses.arrow}`]: { + color: "#2c2c2c", + }, + [`& .${tooltipClasses.tooltip}`]: { + backgroundColor: "#2c2c2c", + left: "-5px", + fontSize: "0.8em", + borderRadius: 0, + fontWeight: FONT_WEIGHT_SEMI_BOLD, + }, +})); + +const MenuButton = styled(IconButton, { + shouldForwardProp: (prop) => prop !== "isActive", +})<{ isActive: boolean }>(({ theme, isActive }) => ({ + color: theme.palette.text.primary, + width: "100%", + border: "1px solid transparent", + justifyContent: "flex-start", + borderRadius: "3px", + "&:hover": { + background: "white", + borderColor: theme.palette.border.light, + }, + ...(isActive && { + background: theme.palette.common.white, + color: theme.palette.text.primary, + border: `1px solid ${theme.palette.border.main}`, + }), + "& > svg": { + opacity: 0.8, + }, +})); + +function EditorNavMenu() { + const { navigate } = useNavigation(); + const { url } = useCurrentRoute(); + const [teamSlug, flowSlug, user, canUserEditTeam] = useStore((state) => [ + state.teamSlug, + state.flowSlug, + state.user, + state.canUserEditTeam, + ]); + + const isActive = (route: string) => url.href.endsWith(route); + + const handleClick = (route: string) => { + if (isActive(route)) return; + navigate(route); + }; + + const globalLayoutRoutes: Route[] = [ + { + title: "Select a team", + Icon: FormatListBulletedIcon, + route: "/", + accessibleBy: ["platformAdmin", "teamEditor", "teamViewer"], + }, + { + title: "Admin panel", + Icon: AdminPanelSettingsIcon, + route: "admin-panel", + accessibleBy: ["platformAdmin"], + }, + { + title: "Global settings", + Icon: TuneIcon, + route: "global-settings", + accessibleBy: ["platformAdmin"], + }, + ]; + + const teamLayoutRoutes: Route[] = [ + { + title: "Services", + Icon: FormatListBulletedIcon, + route: `/${teamSlug}`, + accessibleBy: ["platformAdmin", "teamEditor", "teamViewer"], + }, + { + title: "Team members", + Icon: GroupIcon, + route: `/${teamSlug}/members`, + accessibleBy: ["platformAdmin", "teamEditor"], + }, + { + title: "Design", + Icon: PaletteIcon, + route: `/${teamSlug}/design`, + accessibleBy: ["platformAdmin", "teamEditor"], + }, + { + title: "Settings", + Icon: TuneIcon, + route: `/${teamSlug}/general-settings`, + accessibleBy: ["platformAdmin", "teamEditor"], + }, + ]; + + const flowLayoutRoutes: Route[] = [ + { + title: "Editor", + Icon: EditorIcon, + route: `/${teamSlug}/${flowSlug}`, + accessibleBy: ["platformAdmin", "teamEditor", "teamViewer"], + }, + { + title: "Service settings", + Icon: TuneIcon, + route: `/${teamSlug}/${flowSlug}/service`, + accessibleBy: ["platformAdmin", "teamEditor"], + }, + { + title: "Submissions log", + Icon: FactCheckIcon, + route: `/${teamSlug}/${flowSlug}/submissions-log`, + accessibleBy: ["platformAdmin", "teamEditor"], + }, + { + title: "Feedback", + Icon: RateReviewIcon, + route: `/${teamSlug}/${flowSlug}/feedback`, + accessibleBy: ["platformAdmin", "teamEditor"], + }, + ]; + + const getRoutesForUrl = ( + url: string, + ): { routes: Route[]; compact: boolean } => { + if (flowSlug && url.includes(flowSlug)) + return { routes: flowLayoutRoutes, compact: true }; + if (teamSlug && url.includes(teamSlug)) + return { routes: teamLayoutRoutes, compact: false }; + return { routes: globalLayoutRoutes, compact: false }; + }; + + const { routes, compact } = getRoutesForUrl(url.href); + + const visibleRoutes = routes.filter(({ accessibleBy }) => { + if (user?.isPlatformAdmin) return accessibleBy.includes("platformAdmin"); + if (canUserEditTeam(teamSlug)) return accessibleBy.includes("teamEditor"); + return accessibleBy.includes("teamViewer"); + }); + + // Hide menu if the user does not have a selection of items + if (visibleRoutes.length < 2) return null; + + return ( + + + {visibleRoutes.map(({ title, Icon, route }) => ( + handleClick(route)} key={title}> + {compact ? ( + + + + + + ) : ( + + + {title} + + )} + + ))} + + + ); +} + +export default EditorNavMenu; diff --git a/editor.planx.uk/src/components/Header.tsx b/editor.planx.uk/src/components/Header.tsx index 0210e2b98d..16947e9bc0 100644 --- a/editor.planx.uk/src/components/Header.tsx +++ b/editor.planx.uk/src/components/Header.tsx @@ -41,7 +41,7 @@ import Permission from "ui/editor/Permission"; import Reset from "ui/icons/Reset"; import { useStore } from "../pages/FlowEditor/lib/store"; -import { rootFlowPath, rootTeamPath } from "../routes/utils"; +import { rootFlowPath } from "../routes/utils"; import AnalyticsDisabledBanner from "./AnalyticsDisabledBanner"; import { ConfirmationDialog } from "./ConfirmationDialog"; import TestEnvironmentBanner from "./TestEnvironmentBanner"; @@ -63,7 +63,7 @@ const BreadcrumbsRoot = styled(Box)(() => ({ const BreadcrumbsLink = styled(Link)(({ theme }) => ({ color: theme.palette.common.white, textDecoration: "none", - borderBottom: "1px solid currentColor", + borderBottom: "1px solid rgba(255, 255, 255, 0.75)", })) as typeof Link; const StyledToolbar = styled(MuiToolbar)(() => ({ @@ -436,13 +436,6 @@ const EditorToolbar: React.FC<{ setOpen(!open); }; - const isFlowSettingsVisible = route.data.flow && canUserEditTeam(team.slug); - - const isTeamSettingsVisible = - route.data.team && !route.data.flow && canUserEditTeam(team.slug); - - const isGlobalSettingsVisible = !route.data.team && user?.isPlatformAdmin; - return ( <> @@ -488,7 +481,7 @@ const EditorToolbar: React.FC<{ {user.lastName[0]} - Menu + Account @@ -520,73 +513,6 @@ const EditorToolbar: React.FC<{ {user.email} - {(user.isPlatformAdmin || user.teams.length > 0) && ( - - - - - - {user.isPlatformAdmin - ? `All teams` - : user.teams.map((team) => team.team.name).join(", ")} - - - )} - - - - - - All teams - - - - {/* Only show team settings link if inside a team route */} - {isTeamSettingsVisible && ( - <> - navigate(`${rootTeamPath()}/settings`)} - > - Team Settings - - navigate(`${rootTeamPath()}/members`)}> - Team Members - - - )} - - {/* Only show flow settings link if inside a flow route */} - {isFlowSettingsVisible && ( - <> - - navigate([rootFlowPath(true), "settings"].join("/")) - } - > - Flow Settings - - - navigate([rootFlowPath(true), "feedback"].join("/")) - } - > - Feedback - - - )} - - {/* Only show global settings & admin panel links from top-level view */} - {isGlobalSettingsVisible && ( - <> - navigate("/global-settings")}> - Global Settings - - navigate("/admin-panel")}> - Admin Panel - - - )} - navigate("/logout")}>Log out diff --git a/editor.planx.uk/src/lib/featureFlags.ts b/editor.planx.uk/src/lib/featureFlags.ts index 022965a276..31cbfdf23c 100644 --- a/editor.planx.uk/src/lib/featureFlags.ts +++ b/editor.planx.uk/src/lib/featureFlags.ts @@ -1,5 +1,5 @@ // add/edit/remove feature flags in array below -const AVAILABLE_FEATURE_FLAGS = ["EDITOR_NAVIGATION"] as const; +const AVAILABLE_FEATURE_FLAGS = [] as const; type FeatureFlag = (typeof AVAILABLE_FEATURE_FLAGS)[number]; diff --git a/editor.planx.uk/src/pages/FlowEditor/components/EditorMenu.tsx b/editor.planx.uk/src/pages/FlowEditor/components/EditorMenu.tsx deleted file mode 100644 index e99fb24bd9..0000000000 --- a/editor.planx.uk/src/pages/FlowEditor/components/EditorMenu.tsx +++ /dev/null @@ -1,119 +0,0 @@ -import FactCheckIcon from "@mui/icons-material/FactCheck"; -import RateReviewIcon from "@mui/icons-material/RateReview"; -import TuneIcon from "@mui/icons-material/Tune"; -import Box from "@mui/material/Box"; -import IconButton from "@mui/material/IconButton"; -import { styled } from "@mui/material/styles"; -import Tooltip, { tooltipClasses, TooltipProps } from "@mui/material/Tooltip"; -import React from "react"; -import { useCurrentRoute, useNavigation } from "react-navi"; -import { rootFlowPath } from "routes/utils"; -import { FONT_WEIGHT_SEMI_BOLD } from "theme"; -import EditorIcon from "ui/icons/Editor"; - -const MENU_WIDTH = "46px"; - -const Root = styled(Box)(({ theme }) => ({ - width: MENU_WIDTH, - flexShrink: 0, - background: theme.palette.background.paper, - borderRight: `1px solid ${theme.palette.border.main}`, -})); - -const MenuWrap = styled("ul")(({ theme }) => ({ - listStyle: "none", - margin: 0, - padding: theme.spacing(4, 0, 0, 0), -})); - -const MenuItem = styled("li")(({ theme }) => ({ - margin: theme.spacing(0.75, 0), - padding: 0, -})); - -const TooltipWrap = styled(({ className, ...props }: TooltipProps) => ( - -))(() => ({ - [`& .${tooltipClasses.arrow}`]: { - color: "#2c2c2c", - }, - [`& .${tooltipClasses.tooltip}`]: { - backgroundColor: "#2c2c2c", - left: "-5px", - fontSize: "0.8em", - borderRadius: 0, - fontWeight: FONT_WEIGHT_SEMI_BOLD, - }, -})); - -const MenuButton = styled(IconButton, { - shouldForwardProp: (prop) => prop !== "isActive", -})<{ isActive: boolean }>(({ theme, isActive }) => ({ - color: theme.palette.primary.main, - width: MENU_WIDTH, - height: MENU_WIDTH, - border: "1px solid transparent", - borderRightColor: theme.palette.border.main, - "&:hover": { - background: "white", - borderTopColor: theme.palette.border.light, - borderBottomColor: theme.palette.border.light, - }, - ...(isActive && { - background: theme.palette.common.white, - color: theme.palette.text.primary, - border: `1px solid ${theme.palette.border.main}`, - borderRightColor: "transparent", - }), -})); - -function EditorMenu() { - const { navigate } = useNavigation(); - const { url } = useCurrentRoute(); - const rootPath = rootFlowPath(); - - const isActive = (route: string) => url.pathname.endsWith(route); - const handleClick = (route: string) => - !isActive(route) && navigate(rootPath + route); - - const routes = [ - { - title: "Editor", - Icon: EditorIcon, - route: "/", - }, - { - title: "Service settings", - Icon: TuneIcon, - route: "/service", - }, - { - title: "Submissions log", - Icon: FactCheckIcon, - route: "/submissions-log", - }, - { - title: "Feedback", - Icon: RateReviewIcon, - route: "/feedback", - }, - ]; - - return ( - - - {routes.map(({ title, Icon, route }) => ( - handleClick(route)} key={title}> - - - - - - - ))} - - - ); -} - -export default EditorMenu; diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Flow/FeedbackPage.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Flow/FeedbackPage.tsx index 04c7307dcf..48c42e4fd0 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Flow/FeedbackPage.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Flow/FeedbackPage.tsx @@ -155,55 +155,53 @@ export const FeedbackPage: React.FC = ({ feedback }) => { return ( - - - - Feedback log - - - Feedback from users about this service. - - - - {feedback.length === 0 ? ( - - ) : ( - - - - *": { borderBottomColor: "black !important" } }} - > - - Type - - - Date - - - Comment - - - - - - {feedback.map((item) => ( - - ))} - -
    -
    - )} -
    -
    + + + Feedback log + + + Feedback from users about this service. + + + + {feedback.length === 0 ? ( + + ) : ( + + + + *": { borderBottomColor: "black !important" } }} + > + + Type + + + Date + + + Comment + + + + + + {feedback.map((item) => ( + + ))} + +
    +
    + )} +
    ); }; diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/DataManagerSettings.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/DataManagerSettings.tsx index 431ba6cb61..c5899d05e2 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/DataManagerSettings.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/DataManagerSettings.tsx @@ -1,4 +1,4 @@ -import Box from "@mui/material/Box"; +import Container from "@mui/material/Container"; import Typography from "@mui/material/Typography"; import React from "react"; import { FeaturePlaceholder } from "ui/editor/FeaturePlaceholder"; @@ -6,7 +6,7 @@ import SettingsSection from "ui/editor/SettingsSection"; const DataManagerSettings: React.FC = () => { return ( - + Data Manager @@ -19,7 +19,7 @@ const DataManagerSettings: React.FC = () => { - + ); }; export default DataManagerSettings; diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/index.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/index.tsx index a5071ba261..9215f9b95b 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/index.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/DesignSettings/index.tsx @@ -1,5 +1,6 @@ import Alert from "@mui/material/Alert"; import Box from "@mui/material/Box"; +import Container from "@mui/material/Container"; import Snackbar from "@mui/material/Snackbar"; import { styled } from "@mui/material/styles"; import Typography from "@mui/material/Typography"; @@ -75,7 +76,7 @@ const DesignSettings: React.FC = () => { const onSuccess = () => setOpen(true); return ( - + Design @@ -97,7 +98,7 @@ const DesignSettings: React.FC = () => { Theme updated successfully - + ); }; diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/index.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/index.tsx index b57672a2c5..71ec6eeca2 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/index.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/index.tsx @@ -1,5 +1,5 @@ import Alert from "@mui/material/Alert"; -import Box from "@mui/material/Box"; +import Container from "@mui/material/Container"; import Snackbar from "@mui/material/Snackbar"; import Typography from "@mui/material/Typography"; import { TeamSettings } from "@opensystemslab/planx-core/types"; @@ -59,13 +59,13 @@ const GeneralSettings: React.FC = () => { const onSuccess = () => setOpen(true); return ( - + General - Important links and settings for how your users connect with you + Important links and settings for how your users connect with you. {formikConfig && ( @@ -79,7 +79,7 @@ const GeneralSettings: React.FC = () => { {updateMessage} - + ); }; diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/ServiceFlags.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/ServiceFlags.tsx index 12954c5d67..d8165924c1 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/ServiceFlags.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/ServiceFlags.tsx @@ -1,4 +1,4 @@ -import Box from "@mui/material/Box"; +import Container from "@mui/material/Container"; import Typography from "@mui/material/Typography"; import React from "react"; import { FeaturePlaceholder } from "ui/editor/FeaturePlaceholder"; @@ -6,7 +6,7 @@ import SettingsSection from "ui/editor/SettingsSection"; const ServiceFlags: React.FC = () => { return ( - + Service flags @@ -19,7 +19,7 @@ const ServiceFlags: React.FC = () => { - + ); }; export default ServiceFlags; diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/ServiceSettings.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/ServiceSettings.tsx index 06abc3430d..0e4ef6f895 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/ServiceSettings.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/ServiceSettings.tsx @@ -1,6 +1,7 @@ import Alert from "@mui/material/Alert"; import Box from "@mui/material/Box"; import Button from "@mui/material/Button"; +import Container from "@mui/material/Container"; import FormControlLabel, { formControlLabelClasses, } from "@mui/material/FormControlLabel"; @@ -143,7 +144,7 @@ const ServiceSettings: React.FC = () => { }); return ( - + @@ -309,7 +310,7 @@ const ServiceSettings: React.FC = () => { Service settings updated successfully - + ); }; diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/Submissions/index.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/Submissions/index.tsx index 388d700279..73d1e4c247 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/Submissions/index.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/Submissions/index.tsx @@ -1,5 +1,4 @@ import { gql, useQuery } from "@apollo/client"; -import Box from "@mui/material/Box"; import Container from "@mui/material/Container"; import Typography from "@mui/material/Typography"; import React, { useMemo } from "react"; @@ -74,23 +73,17 @@ const Submissions: React.FC = () => { return ( - - - - Submissions - - - Feed of payment and submission events for this service - - - - - - + + + Submissions + + + Feed of payment and submission events for this service + + + + + ); }; diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/TeamSettings.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/TeamSettings.tsx index 9d590cfbcf..b54f0a76ee 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/TeamSettings.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/TeamSettings.tsx @@ -1,4 +1,4 @@ -import Box from "@mui/material/Box"; +import Container from "@mui/material/Container"; import Typography from "@mui/material/Typography"; import React from "react"; import { FeaturePlaceholder } from "ui/editor/FeaturePlaceholder"; @@ -6,7 +6,7 @@ import SettingsSection from "ui/editor/SettingsSection"; const Team: React.FC = () => { return ( - + Team @@ -30,7 +30,7 @@ const Team: React.FC = () => { - + ); }; export default Team; diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/index.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/index.tsx deleted file mode 100644 index fe05eeb961..0000000000 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/index.tsx +++ /dev/null @@ -1,169 +0,0 @@ -import Close from "@mui/icons-material/Close"; -import AppBar from "@mui/material/AppBar"; -import Box from "@mui/material/Box"; -import Container from "@mui/material/Container"; -import Grid from "@mui/material/Grid"; -import IconButton from "@mui/material/IconButton"; -import { styled } from "@mui/material/styles"; -import Tab from "@mui/material/Tab"; -import Tabs from "@mui/material/Tabs"; -import { HEADER_HEIGHT } from "components/Header"; -import React from "react"; -import { Link, useNavigation } from "react-navi"; - -export interface SettingsTab { - route: string; - name: string; - Component: React.FC; -} - -interface SettingsProps { - currentTab: string; - tabs: SettingsTab[]; -} - -interface TabPanelProps { - children?: React.ReactNode; - index: number; - value: number; -} - -function TabPanel(props: TabPanelProps) { - const { children, value, index, ...other } = props; - - return ( - - ); -} - -function a11yProps(index: number) { - return { - id: `nav-tab-${index}`, - "aria-controls": `nav-tabpanel-${index}`, - }; -} - -interface LinkTabProps { - label?: string; - href?: string; -} - -const StyledTab = styled(Tab)(({ theme }) => ({ - position: "relative", - zIndex: 1, - textTransform: "none", - background: theme.palette.background.default, -})) as typeof Tab; - -function LinkTab(props: LinkTabProps) { - return ( - { - if (!event.metaKey) { - event.preventDefault(); - } - }} - {...props} - /> - ); -} - -const PREFIX = "Settings"; - -const classes = { - tabs: `${PREFIX}-tabs`, - tabIndicator: `${PREFIX}-tabIndicator`, -}; - -const Root = styled(Box)(({ theme }) => ({ - flexGrow: 1, - backgroundColor: theme.palette.background.default, - position: "absolute", - top: HEADER_HEIGHT, - left: 0, - right: 0, - minHeight: `calc(100% - ${HEADER_HEIGHT}px)`, - // Ensure settings panels sit above editor content with explicit z-index set, will be redundent when we move to side-tabbed settings - zIndex: theme.zIndex.appBar, - [`& .${classes.tabs}`]: { - backgroundColor: theme.palette.border.main, - }, - [`& .${classes.tabIndicator}`]: { - height: "100%", - backgroundColor: "#f2f2f2", - zIndex: 0, - }, -})); - -const Settings: React.FC = ({ currentTab, tabs }) => { - const { navigate } = useNavigation(); - - const handleChange = (event: React.ChangeEvent) => { - navigate(event.currentTarget.pathname); - }; - - const value = tabs.findIndex(({ route }) => route === currentTab); - - return ( - - - - - - {tabs.map(({ name, route }, index) => ( - - ))} - - - - - - - - - - {tabs.map(({ name, Component }, index) => ( - - - - ))} - - ); -}; - -export default Settings; diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Team/TeamMembers.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Team/TeamMembers.tsx index 445a094839..c48c680317 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Team/TeamMembers.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Team/TeamMembers.tsx @@ -1,5 +1,4 @@ import Avatar from "@mui/material/Avatar"; -import Box from "@mui/material/Box"; import Chip from "@mui/material/Chip"; import Container from "@mui/material/Container"; import { styled } from "@mui/material/styles"; @@ -128,38 +127,36 @@ export const TeamMembers: React.FC = ({ teamMembersByRole }) => { return ( - + + + Team editors + + + Editors have access to edit your services. + + + + + + Admins + + + Admins have editor access across all teams. + + + + {archivedMembers.length > 0 && ( - Team editors + Archived team editors - Editors have access to edit your services. + Past team members who no longer have access to the Editor, but may + be part of the edit history of your services. - + - - - Admins - - - Admins have editor access across all teams. - - - - {archivedMembers.length > 0 && ( - - - Archived team editors - - - Past team members who no longer have access to the Editor, but may - be part of the edit history of your services. - - - - )} - + )} ); }; diff --git a/editor.planx.uk/src/pages/FlowEditor/index.tsx b/editor.planx.uk/src/pages/FlowEditor/index.tsx index 5d3aa6cdfa..c712f3c1e2 100644 --- a/editor.planx.uk/src/pages/FlowEditor/index.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/index.tsx @@ -1,8 +1,8 @@ -import "./components/Settings"; import "./floweditor.scss"; import Box from "@mui/material/Box"; import { styled } from "@mui/material/styles"; +import { HEADER_HEIGHT } from "components/Header"; import React, { useRef } from "react"; import { rootFlowPath } from "../../routes/utils"; @@ -10,11 +10,13 @@ import Flow from "./components/Flow"; import Sidebar from "./components/Sidebar"; import { useStore } from "./lib/store"; import useScrollControlsAndRememberPosition from "./lib/useScrollControlsAndRememberPosition"; + const EditorContainer = styled(Box)(() => ({ display: "flex", alignItems: "stretch", overflow: "hidden", flexGrow: 1, + maxHeight: `calc(100vh - ${HEADER_HEIGHT}px)`, })); const FlowEditor: React.FC = ({ flow, breadcrumbs }) => { diff --git a/editor.planx.uk/src/pages/GlobalSettings.tsx b/editor.planx.uk/src/pages/GlobalSettings.tsx index 5b44b151b9..13c1f60211 100644 --- a/editor.planx.uk/src/pages/GlobalSettings.tsx +++ b/editor.planx.uk/src/pages/GlobalSettings.tsx @@ -8,7 +8,6 @@ import { useFormik } from "formik"; import { useStore } from "pages/FlowEditor/lib/store"; import React, { useState } from "react"; import type { TextContent } from "types"; -import Dashboard from "ui/editor/Dashboard"; import InputGroup from "ui/editor/InputGroup"; import InputLegend from "ui/editor/InputLegend"; import ListManager from "ui/editor/ListManager"; @@ -66,7 +65,7 @@ function Component() { }; return ( - + <>
    @@ -116,7 +115,7 @@ function Component() { Footer settings updated successfully - + ); } diff --git a/editor.planx.uk/src/pages/PlatformAdminPanel.tsx b/editor.planx.uk/src/pages/PlatformAdminPanel.tsx index 540fc44abe..05d384c100 100644 --- a/editor.planx.uk/src/pages/PlatformAdminPanel.tsx +++ b/editor.planx.uk/src/pages/PlatformAdminPanel.tsx @@ -4,6 +4,7 @@ import Accordion from "@mui/material/Accordion"; import AccordionDetails from "@mui/material/AccordionDetails"; import AccordionSummary from "@mui/material/AccordionSummary"; import Box from "@mui/material/Box"; +import Container from "@mui/material/Container"; import Grid from "@mui/material/Grid"; import { styled } from "@mui/material/styles"; import Typography from "@mui/material/Typography"; @@ -34,15 +35,17 @@ function Component() { const adminPanelData = useStore((state) => state.adminPanelData); return ( - - Platform Admin Panel - - {`This is an overview of each team's integrations and settings for the `} - {process.env.REACT_APP_ENV} - {` environment`} - - {adminPanelData?.map((team) => )} - + + + Platform Admin Panel + + {`This is an overview of each team's integrations and settings for the `} + {process.env.REACT_APP_ENV} + {` environment`} + + {adminPanelData?.map((team) => )} + + ); } diff --git a/editor.planx.uk/src/pages/Team.tsx b/editor.planx.uk/src/pages/Team.tsx index fc6ee62a4c..d3851ed023 100644 --- a/editor.planx.uk/src/pages/Team.tsx +++ b/editor.planx.uk/src/pages/Team.tsx @@ -17,7 +17,6 @@ import React, { useCallback, useEffect, useState } from "react"; import { Link, useNavigation } from "react-navi"; import { FONT_WEIGHT_SEMI_BOLD } from "theme"; import { borderedFocusStyle } from "theme"; -import Dashboard from "ui/editor/Dashboard"; import { slugify } from "utils"; import { client } from "../lib/graphql"; @@ -25,14 +24,6 @@ import SimpleMenu from "../ui/editor/SimpleMenu"; import { useStore } from "./FlowEditor/lib/store"; import { formatLastEditMessage } from "./FlowEditor/utils"; -const Root = styled(Box)(({ theme }) => ({ - backgroundColor: theme.palette.background.default, - width: "100%", - display: "flex", - alignItems: "flex-start", - flexGrow: 1, -})); - const DashboardList = styled("ul")(({ theme }) => ({ padding: theme.spacing(0, 0, 3), borderBottom: "1px solid #fff", @@ -302,71 +293,67 @@ const Team: React.FC = () => { }, [fetchFlows]); return ( - - - - + + + + Services + + {useStore.getState().canUserEditTeam(slug) ? ( + + ) : ( + + )} + + {useStore.getState().canUserEditTeam(slug) && ( + { + const newFlowName = prompt("Service name"); + if (newFlowName) { + const newFlowSlug = slugify(newFlowName); + useStore + .getState() + .createFlow(teamId, newFlowSlug, newFlowName) + .then((newId: string) => { + navigation.navigate(`/${slug}/${newId}`); + }); + } }} > - + )} + + {flows && ( + + {flows.map((flow: any) => ( + { + fetchFlows(); }} - > - - Services - - {useStore.getState().canUserEditTeam(slug) ? ( - - ) : ( - - )} - - {useStore.getState().canUserEditTeam(slug) && ( - { - const newFlowName = prompt("Service name"); - if (newFlowName) { - const newFlowSlug = slugify(newFlowName); - useStore - .getState() - .createFlow(teamId, newFlowSlug, newFlowName) - .then((newId: string) => { - navigation.navigate(`/${slug}/${newId}`); - }); - } - }} - > - Add a new service - - )} - - {flows && ( - - {flows.map((flow: any) => ( - { - fetchFlows(); - }} - /> - ))} - - )} - - - + /> + ))} + + )} + ); }; diff --git a/editor.planx.uk/src/pages/Teams.tsx b/editor.planx.uk/src/pages/Teams.tsx index f8208dd2c9..38649d671b 100644 --- a/editor.planx.uk/src/pages/Teams.tsx +++ b/editor.planx.uk/src/pages/Teams.tsx @@ -7,7 +7,6 @@ import { Team } from "@opensystemslab/planx-core/types"; import React from "react"; import { Link } from "react-navi"; import { borderedFocusStyle } from "theme"; -import Dashboard from "ui/editor/Dashboard"; import { useStore } from "./FlowEditor/lib/store"; @@ -21,14 +20,6 @@ interface Props { teamTheme: Array; } -export const Root = styled(Box)(({ theme }) => ({ - backgroundColor: theme.palette.background.default, - width: "100%", - display: "flex", - alignItems: "flex-start", - flexGrow: 1, -})); - const StyledLink = styled(Link)(() => ({ textDecoration: "none", "&:focus-within > div": { @@ -80,32 +71,28 @@ const Teams: React.FC = ({ teams, teamTheme }) => { ); }); return ( - - - - - Select a team + + + Select a team + + {editableTeams.length > 0 && ( + <> + + My teams - {editableTeams.length > 0 && ( - <> - - My teams - - {renderTeams(editableTeams)} - - )} + {renderTeams(editableTeams)} + + )} - {viewOnlyTeams.length > 0 && ( - <> - - Other teams (view only) - - {renderTeams(viewOnlyTeams)} - - )} - - - + {viewOnlyTeams.length > 0 && ( + <> + + Other teams (view only) + + {renderTeams(viewOnlyTeams)} + + )} + ); }; diff --git a/editor.planx.uk/src/pages/layout/AuthenticatedLayout.tsx b/editor.planx.uk/src/pages/layout/AuthenticatedLayout.tsx index 028fb10a4c..ae94fef872 100644 --- a/editor.planx.uk/src/pages/layout/AuthenticatedLayout.tsx +++ b/editor.planx.uk/src/pages/layout/AuthenticatedLayout.tsx @@ -1,13 +1,44 @@ +import Box from "@mui/material/Box"; +import { containerClasses } from "@mui/material/Container"; +import { styled } from "@mui/material/styles"; +import EditorNavMenu from "components/EditorNavMenu"; +import { HEADER_HEIGHT } from "components/Header"; import React, { PropsWithChildren } from "react"; import { DndProvider } from "react-dnd"; import { HTML5Backend } from "react-dnd-html5-backend"; import Header from "../../components/Header"; +const DashboardWrap = styled(Box)(({ theme }) => ({ + backgroundColor: theme.palette.background.default, + width: "100%", + display: "flex", + flexGrow: 1, +})); + +const DashboardContainer = styled(Box)(({ theme }) => ({ + backgroundColor: theme.palette.background.default, + color: theme.palette.text.primary, + display: "flex", + flexDirection: "row", + width: "100%", + minHeight: `calc(100vh - ${HEADER_HEIGHT}px)`, + overflow: "hidden", + [`& > .${containerClasses.root}`]: { + paddingTop: theme.spacing(5), + paddingBottom: theme.spacing(5), + }, +})); + const Layout: React.FC = ({ children }) => ( <>
    - {children} + + + + {children} + + ); diff --git a/editor.planx.uk/src/pages/layout/FlowEditorLayout.tsx b/editor.planx.uk/src/pages/layout/FlowEditorLayout.tsx index 1c95b66633..bb66ae8e20 100644 --- a/editor.planx.uk/src/pages/layout/FlowEditorLayout.tsx +++ b/editor.planx.uk/src/pages/layout/FlowEditorLayout.tsx @@ -1,23 +1,9 @@ -import Box from "@mui/material/Box"; -import { styled } from "@mui/material/styles"; import ErrorFallback from "components/ErrorFallback"; -import { hasFeatureFlag } from "lib/featureFlags"; -import EditorMenu from "pages/FlowEditor/components/EditorMenu"; import React, { PropsWithChildren } from "react"; import { ErrorBoundary } from "react-error-boundary"; -const Root = styled(Box)(() => ({ - display: "flex", - alignItems: "stretch", - overflow: "hidden", - flexGrow: 1, -})); - const FlowEditorLayout: React.FC = ({ children }) => ( - - {hasFeatureFlag("EDITOR_NAVIGATION") && } - {children} - + {children} ); export default FlowEditorLayout; diff --git a/editor.planx.uk/src/routes/flow.tsx b/editor.planx.uk/src/routes/flow.tsx index f6d60051b1..1bb284969a 100644 --- a/editor.planx.uk/src/routes/flow.tsx +++ b/editor.planx.uk/src/routes/flow.tsx @@ -1,6 +1,8 @@ import { gql } from "@apollo/client"; -import Box from "@mui/material/Box"; -import { ComponentType as TYPES } from "@opensystemslab/planx-core/types"; +import { + ComponentType as TYPES, + FlowStatus, +} from "@opensystemslab/planx-core/types"; import natsort from "natsort"; import { compose, @@ -8,6 +10,7 @@ import { map, Matcher, mount, + NaviRequest, redirect, route, withData, @@ -27,8 +30,7 @@ import components from "../pages/FlowEditor/components/forms"; import FormModal from "../pages/FlowEditor/components/forms/FormModal"; import { SLUGS } from "../pages/FlowEditor/data/types"; import { useStore } from "../pages/FlowEditor/lib/store"; -import type { Flow } from "../types"; -import { getFlowSettings } from "./flowSettings"; +import type { Flow, FlowSettings } from "../types"; import { makeTitle } from "./utils"; import { flowEditorView } from "./views/flowEditor"; @@ -177,11 +179,43 @@ const nodeRoutes = mount({ "/:parent/nodes/:id/edit": editNode, }); -const SettingsContainer = () => ( - - - -); +const SettingsContainer = () => ; + +interface GetFlowSettings { + flows: { + id: string; + settings: FlowSettings; + status: FlowStatus; + }[]; +} + +export const getFlowSettings = async (req: NaviRequest) => { + const { + data: { + flows: [{ settings, status }], + }, + } = await client.query({ + query: gql` + query GetFlow($slug: String!, $team_slug: String!) { + flows( + limit: 1 + where: { slug: { _eq: $slug }, team: { slug: { _eq: $team_slug } } } + ) { + id + settings + status + } + } + `, + variables: { + slug: req.params.flow, + team_slug: req.params.team, + }, + }); + + useStore.getState().setFlowSettings(settings); + useStore.getState().setFlowStatus(status); +}; const routes = compose( withData((req) => ({ @@ -218,8 +252,6 @@ const routes = compose( nodeRoutes, ), - "/settings": lazy(() => import("./flowSettings")), - "/service": compose( withView(SettingsContainer), diff --git a/editor.planx.uk/src/routes/flowSettings.tsx b/editor.planx.uk/src/routes/flowSettings.tsx deleted file mode 100644 index 7201cf2ff7..0000000000 --- a/editor.planx.uk/src/routes/flowSettings.tsx +++ /dev/null @@ -1,109 +0,0 @@ -import { FlowStatus } from "@opensystemslab/planx-core/types"; -import gql from "graphql-tag"; -import { - compose, - map, - mount, - NaviRequest, - NotFoundError, - redirect, - route, - withData, -} from "navi"; -import DataManagerSettings from "pages/FlowEditor/components/Settings/DataManagerSettings"; -import ServiceFlags from "pages/FlowEditor/components/Settings/ServiceFlags"; -import ServiceSettings from "pages/FlowEditor/components/Settings/ServiceSettings"; -import Submissions from "pages/FlowEditor/components/Settings/Submissions"; -import { useStore } from "pages/FlowEditor/lib/store"; -import React from "react"; - -import { client } from "../lib/graphql"; -import Settings, { SettingsTab } from "../pages/FlowEditor/components/Settings"; -import type { FlowSettings } from "../types"; -import { makeTitle } from "./utils"; - -interface GetFlowSettings { - flows: { - id: string; - settings: FlowSettings; - status: FlowStatus; - }[]; -} - -export const getFlowSettings = async (req: NaviRequest) => { - const { - data: { - flows: [{ settings, status }], - }, - } = await client.query({ - query: gql` - query GetFlow($slug: String!, $team_slug: String!) { - flows( - limit: 1 - where: { slug: { _eq: $slug }, team: { slug: { _eq: $team_slug } } } - ) { - id - settings - status - } - } - `, - variables: { - slug: req.params.flow, - team_slug: req.params.team, - }, - }); - - useStore.getState().setFlowSettings(settings); - useStore.getState().setFlowStatus(status); -}; - -const tabs: SettingsTab[] = [ - { - name: "Service", - route: "service", - Component: ServiceSettings, - }, - { - name: "Service Flags", - route: "flags", - Component: ServiceFlags, - }, - { - name: "Data", - route: "data-manager", - Component: DataManagerSettings, - }, - { - name: "Submissions", - route: "submissions", - Component: Submissions, - }, -]; - -const flowSettingsRoutes = compose( - withData((req) => ({ - mountpath: req.mountpath, - })), - - mount({ - "/": redirect("./service"), - "/:tab": map(async (req) => { - const isAuthorised = useStore.getState().canUserEditTeam(req.params.team); - if (!isAuthorised) - throw new NotFoundError( - `User does not have access to ${req.originalUrl}`, - ); - - return route(async (req) => ({ - getData: await getFlowSettings(req), - title: makeTitle( - [req.params.team, req.params.flow, "Flow Settings"].join("/"), - ), - view: , - })); - }), - }), -); - -export default flowSettingsRoutes; diff --git a/editor.planx.uk/src/routes/team.tsx b/editor.planx.uk/src/routes/team.tsx index 2d956b14a6..ad89c46704 100644 --- a/editor.planx.uk/src/routes/team.tsx +++ b/editor.planx.uk/src/routes/team.tsx @@ -1,15 +1,7 @@ -import { FlowGraph } from "@opensystemslab/planx-core/types"; -import axios from "axios"; import gql from "graphql-tag"; -import { - compose, - lazy, - mount, - NotFoundError, - route, - withData, - withView, -} from "navi"; +import { compose, lazy, mount, route, withData, withView } from "navi"; +import DesignSettings from "pages/FlowEditor/components/Settings/DesignSettings"; +import GeneralSettings from "pages/FlowEditor/components/Settings/GeneralSettings"; import React from "react"; import { client } from "../lib/graphql"; @@ -36,8 +28,6 @@ const routes = compose( view: , })), - "/settings": lazy(() => import("./teamSettings")), - "/:flow": lazy(async (req) => { const [slug] = req.params.flow.split(","); @@ -85,6 +75,22 @@ const routes = compose( }), "/members": lazy(() => import("./teamMembers")), + "/design": compose( + route(async (req) => ({ + title: makeTitle( + [req.params.team, req.params.flow, "design"].join("/"), + ), + view: DesignSettings, + })), + ), + "/general-settings": compose( + route(async (req) => ({ + title: makeTitle( + [req.params.team, req.params.flow, "settings"].join("/"), + ), + view: GeneralSettings, + })), + ), }), ); diff --git a/editor.planx.uk/src/routes/teamSettings.tsx b/editor.planx.uk/src/routes/teamSettings.tsx deleted file mode 100644 index 8427b37501..0000000000 --- a/editor.planx.uk/src/routes/teamSettings.tsx +++ /dev/null @@ -1,63 +0,0 @@ -import { - compose, - map, - mount, - NotFoundError, - redirect, - route, - withData, -} from "navi"; -import DesignSettings from "pages/FlowEditor/components/Settings/DesignSettings"; -import GeneralSettings from "pages/FlowEditor/components/Settings/GeneralSettings"; -import TeamSettings from "pages/FlowEditor/components/Settings/TeamSettings"; -import { useStore } from "pages/FlowEditor/lib/store"; -import React from "react"; - -import Settings from "../pages/FlowEditor/components/Settings"; -import { makeTitle } from "./utils"; - -const teamSettingsRoutes = compose( - withData((req) => ({ - mountpath: req.mountpath, - })), - - mount({ - "/": redirect("./general"), - "/:tab": map(async (req) => { - const isAuthorised = useStore.getState().canUserEditTeam(req.params.team); - - if (!isAuthorised) - throw new NotFoundError( - `User does not have access to ${req.originalUrl}`, - ); - - return route(async (req) => ({ - title: makeTitle([req.params.team, "Team Settings"].join("/")), - view: ( - - ), - })); - }), - }), -); - -export default teamSettingsRoutes; diff --git a/editor.planx.uk/src/ui/editor/Dashboard.tsx b/editor.planx.uk/src/ui/editor/Dashboard.tsx deleted file mode 100644 index a18472da46..0000000000 --- a/editor.planx.uk/src/ui/editor/Dashboard.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import Box from "@mui/material/Box"; -import { containerClasses } from "@mui/material/Container"; -import { styled } from "@mui/material/styles"; -import { HEADER_HEIGHT } from "components/Header"; -import React, { PropsWithChildren } from "react"; - -const Root = styled(Box)(({ theme }) => ({ - backgroundColor: theme.palette.background.default, - color: theme.palette.text.primary, - display: "flex", - flexDirection: "row", - width: "100%", - minHeight: `calc(100vh - ${HEADER_HEIGHT}px)`, - [`& > .${containerClasses.root}`]: { - paddingTop: theme.spacing(6), - paddingBottom: theme.spacing(6), - }, -})); - -export default function Dashboard(props: PropsWithChildren) { - return {props.children}; -} From 4bc58f97aeb0c018fb570b5bd5119ab4f94b6628 Mon Sep 17 00:00:00 2001 From: Ian Jones <51156018+ianjon3s@users.noreply.github.com> Date: Mon, 15 Jul 2024 08:51:39 +0100 Subject: [PATCH 139/150] feat: Admin panel styling (#3424) --- .../src/pages/PlatformAdminPanel.tsx | 45 ++++++++++++------- 1 file changed, 29 insertions(+), 16 deletions(-) diff --git a/editor.planx.uk/src/pages/PlatformAdminPanel.tsx b/editor.planx.uk/src/pages/PlatformAdminPanel.tsx index 05d384c100..9f925f3ab6 100644 --- a/editor.planx.uk/src/pages/PlatformAdminPanel.tsx +++ b/editor.planx.uk/src/pages/PlatformAdminPanel.tsx @@ -13,21 +13,27 @@ import { useStore } from "pages/FlowEditor/lib/store"; import React from "react"; import useSWR from "swr"; import { AdminPanelData } from "types"; +import SettingsSection from "ui/editor/SettingsSection"; import Caret from "ui/icons/Caret"; const StyledTeamAccordion = styled(Accordion, { shouldForwardProp: (prop) => prop !== "primaryColour", })<{ primaryColour?: string }>(({ theme, primaryColour }) => ({ - borderTop: "none", // TODO figure out how to remove top border (box shadow?) when collapsed - borderLeft: `10px solid ${primaryColour}`, backgroundColor: theme.palette.background.paper, + outline: `1px solid ${theme.palette.border.light}`, width: "100%", position: "relative", - marginBottom: theme.spacing(2), - padding: theme.spacing(1), + "&::before": { + display: "none", + }, "&::after": { + content: "''", position: "absolute", - width: "100%", + left: 0, + top: 0, + width: theme.spacing(1.5), + height: "100%", + backgroundColor: primaryColour, }, })); @@ -36,15 +42,19 @@ function Component() { return ( - - Platform Admin Panel - + + + Platform Admin Panel + + {`This is an overview of each team's integrations and settings for the `} {process.env.REACT_APP_ENV} - {` environment`} + {` environment.`} + + {adminPanelData?.map((team) => )} - + ); } @@ -71,19 +81,22 @@ const TeamData: React.FC = ({ data }) => { id={`${data.name}-header`} aria-controls={`${data.name}-panel`} expandIcon={} - sx={{ pr: 1.5 }} + sx={{ p: 1.5, pl: 3 }} > - {data.name} + + {data.name} + - + <> {"Slug"} @@ -112,7 +125,7 @@ const TeamData: React.FC = ({ data }) => { - + <> {"Planning constraints"} @@ -146,7 +159,7 @@ const TeamData: React.FC = ({ data }) => { - + <> {"GOV.UK Notify"} From d8a990e2ff8f5e356d3387e86b6ff08cbe57736c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Mon, 15 Jul 2024 09:13:21 +0100 Subject: [PATCH 140/150] feat: Update Zustand, resolve deprecated imports (#3423) --- editor.planx.uk/package.json | 2 +- editor.planx.uk/pnpm-lock.yaml | 14 ++++++---- .../@planx/components/Calculate/logic.test.ts | 4 +-- .../DrawBoundary/Public/Public.test.tsx | 4 +-- .../FileUploadAndLabel/Editor.test.tsx | 4 +-- .../FileUploadAndLabel/Public.test.tsx | 4 +-- .../src/@planx/components/Pay/Editor.test.tsx | 4 +-- .../@planx/components/Pay/Public/Pay.test.tsx | 4 +-- .../@planx/components/Result/Public.test.tsx | 4 +-- .../components/Review/Public/Public.test.tsx | 4 +-- .../components/shared/Preview/Card.test.tsx | 4 +-- .../src/components/Feedback/index.test.tsx | 4 +-- .../src/components/Header.test.tsx | 4 +-- .../lib/__tests__/advancedAutomations.test.ts | 4 +-- .../lib/__tests__/automations.test.ts | 4 +-- .../FlowEditor/lib/__tests__/clones.test.ts | 4 +-- .../lib/__tests__/externalPortals.test.ts | 4 +-- .../FlowEditor/lib/__tests__/filters.test.ts | 4 +-- .../FlowEditor/lib/__tests__/flags.test.ts | 4 +-- .../lib/__tests__/granularity.test.ts | 4 +-- .../lib/__tests__/navigation.test.ts | 4 +-- .../FlowEditor/lib/__tests__/ordering.test.ts | 4 +-- .../lib/__tests__/preview/canGoBack.test.ts | 4 +-- .../lib/__tests__/preview/changeAnswer.ts | 4 +-- .../lib/__tests__/preview/hasPaid.test.ts | 4 +-- .../__tests__/preview/overrideAnswer.test.ts | 4 +-- .../__tests__/preview/previousCard.test.ts | 4 +-- .../lib/__tests__/preview/record.test.ts | 4 +-- .../removeNodesDependentOnPassport.test.ts | 4 +-- .../__tests__/preview/resetPreview.test.ts | 4 +-- .../__tests__/preview/upcomingCardIds.test.ts | 4 +-- .../FlowEditor/lib/__tests__/setValue.test.ts | 4 +-- .../FlowEditor/lib/__tests__/unseen.test.ts | 4 +-- .../lib/__tests__/useNotValues.test.ts | 4 +-- .../FlowEditor/lib/__tests__/user.test.ts | 4 +-- .../src/pages/FlowEditor/lib/store/index.ts | 27 +++++-------------- .../src/pages/FlowEditor/lib/store/shared.ts | 1 - .../src/pages/Preview/SaveAndReturn.test.tsx | 4 +-- editor.planx.uk/src/routes/utils.test.tsx | 4 +-- 39 files changed, 87 insertions(+), 97 deletions(-) diff --git a/editor.planx.uk/package.json b/editor.planx.uk/package.json index 74c80819f3..a4d7d5357b 100644 --- a/editor.planx.uk/package.json +++ b/editor.planx.uk/package.json @@ -89,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", diff --git a/editor.planx.uk/pnpm-lock.yaml b/editor.planx.uk/pnpm-lock.yaml index d4765034e1..4ae9acf1b1 100644 --- a/editor.planx.uk/pnpm-lock.yaml +++ b/editor.planx.uk/pnpm-lock.yaml @@ -271,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': @@ -21815,18 +21815,22 @@ 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) 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/DrawBoundary/Public/Public.test.tsx b/editor.planx.uk/src/@planx/components/DrawBoundary/Public/Public.test.tsx index 570a387cbb..87c345b2ec 100644 --- a/editor.planx.uk/src/@planx/components/DrawBoundary/Public/Public.test.tsx +++ b/editor.planx.uk/src/@planx/components/DrawBoundary/Public/Public.test.tsx @@ -2,7 +2,7 @@ import { Breadcrumbs } from "@opensystemslab/planx-core/types"; import { PASSPORT_REQUESTED_FILES_KEY } from "@planx/components/FileUploadAndLabel/model"; import { screen } from "@testing-library/react"; import axios from "axios"; -import { vanillaStore } from "pages/FlowEditor/lib/store"; +import { useStore } from "pages/FlowEditor/lib/store"; import React from "react"; import { act } from "react-dom/test-utils"; import { axe, setup } from "testUtils"; @@ -18,7 +18,7 @@ jest.mock("axios"); const mockedAxios = axios as jest.Mocked; 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/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/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/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/Public/Pay.test.tsx b/editor.planx.uk/src/@planx/components/Pay/Public/Pay.test.tsx index cece85b320..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; diff --git a/editor.planx.uk/src/@planx/components/Result/Public.test.tsx b/editor.planx.uk/src/@planx/components/Result/Public.test.tsx index 5aa861166c..415fcd39ce 100644 --- a/editor.planx.uk/src/@planx/components/Result/Public.test.tsx +++ b/editor.planx.uk/src/@planx/components/Result/Public.test.tsx @@ -2,10 +2,10 @@ import { screen } from "@testing-library/react"; import React from "react"; import { axe, setup } from "testUtils"; -import { vanillaStore } from "../../../pages/FlowEditor/lib/store"; +import { useStore } from "../../../pages/FlowEditor/lib/store"; import Result from "./Public"; -const { getState, setState } = vanillaStore; +const { getState, setState } = useStore; beforeEach(() => { 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/shared/Preview/Card.test.tsx b/editor.planx.uk/src/@planx/components/shared/Preview/Card.test.tsx index 83baaeeaa8..381b22462c 100644 --- a/editor.planx.uk/src/@planx/components/shared/Preview/Card.test.tsx +++ b/editor.planx.uk/src/@planx/components/shared/Preview/Card.test.tsx @@ -1,13 +1,13 @@ import Button from "@mui/material/Button"; import { act, screen, waitFor } 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"; import { ApplicationPath } from "types"; import Card from "./Card"; -const { getState, setState } = vanillaStore; +const { getState, setState } = useStore; let initialState: FullStore; diff --git a/editor.planx.uk/src/components/Feedback/index.test.tsx b/editor.planx.uk/src/components/Feedback/index.test.tsx index 181d6e09d9..2009dea98f 100644 --- a/editor.planx.uk/src/components/Feedback/index.test.tsx +++ b/editor.planx.uk/src/components/Feedback/index.test.tsx @@ -4,13 +4,13 @@ import { getInternalFeedbackMetadata, insertFeedbackMutation, } from "lib/feedback"; -import { vanillaStore } from "pages/FlowEditor/lib/store"; +import { useStore } from "pages/FlowEditor/lib/store"; import React from "react"; import { axe, setup } from "testUtils"; import Feedback from "./index"; -const { setState } = vanillaStore; +const { setState } = useStore; const mockedBreadcrumbs: Breadcrumbs = { LU5xin8PHs: { diff --git a/editor.planx.uk/src/components/Header.test.tsx b/editor.planx.uk/src/components/Header.test.tsx index e3e2cfee26..f7a358169e 100644 --- a/editor.planx.uk/src/components/Header.test.tsx +++ b/editor.planx.uk/src/components/Header.test.tsx @@ -1,6 +1,6 @@ import { Team } from "@opensystemslab/planx-core/types"; 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 { act } from "react-dom/test-utils"; import * as ReactNavi from "react-navi"; @@ -10,7 +10,7 @@ import flowWithoutSections from "../pages/FlowEditor/lib/__tests__/mocks/flowWit import flowWithThreeSections from "../pages/FlowEditor/lib/__tests__/mocks/flowWithThreeSections.json"; import Header from "./Header"; -const { setState, getState } = vanillaStore; +const { setState, getState } = useStore; const mockTeam1: Team = { id: 123, diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/advancedAutomations.test.ts b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/advancedAutomations.test.ts index e0df4e2696..ac20d92923 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/advancedAutomations.test.ts +++ b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/advancedAutomations.test.ts @@ -1,8 +1,8 @@ import { ComponentType as TYPES } from "@opensystemslab/planx-core/types"; -import { Store, vanillaStore } from "../store"; +import { Store, useStore } from "../store"; -const { getState, setState } = vanillaStore; +const { getState, setState } = useStore; const flow: Store.flow = { _root: { diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/automations.test.ts b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/automations.test.ts index 9b2599a997..54fc776b78 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/automations.test.ts +++ b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/automations.test.ts @@ -1,9 +1,9 @@ import { ComponentType as TYPES } from "@opensystemslab/planx-core/types"; import shuffle from "lodash/shuffle"; -import { vanillaStore } from "../store"; +import { useStore } from "../store"; -const { getState, setState } = vanillaStore; +const { getState, setState } = useStore; beforeEach(() => { getState().resetPreview(); diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/clones.test.ts b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/clones.test.ts index 71f051ccf6..d87413e083 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/clones.test.ts +++ b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/clones.test.ts @@ -1,5 +1,5 @@ -import { vanillaStore } from "../store"; -const { getState, setState } = vanillaStore; +import { useStore } from "../store"; +const { getState, setState } = useStore; import forwardsFlow from "./mocks/flowWithClones.json"; import reverseFlow from "./mocks/flowWithReverseClones.json"; diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/externalPortals.test.ts b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/externalPortals.test.ts index 6646cafadd..d43d63afbd 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/externalPortals.test.ts +++ b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/externalPortals.test.ts @@ -1,8 +1,8 @@ -import { FullStore, vanillaStore } from "../store"; +import { FullStore, useStore } from "../store"; import multipleExternalPortals from "./mocks/multipleExternalPortals.json"; import singleExternalPortal from "./mocks/singleExternalPortal.json"; -const { getState, setState } = vanillaStore; +const { getState, setState } = useStore; const { upcomingCardIds, record } = getState(); let initialState: FullStore; diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/filters.test.ts b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/filters.test.ts index 30e90ac03d..9ce3674e38 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/filters.test.ts +++ b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/filters.test.ts @@ -1,9 +1,9 @@ -import { vanillaStore } from "../store"; +import { useStore } from "../store"; import flowWithAutoAnsweredFilterPaths from "./mocks/flowWithAutoAnsweredFilterPaths.json"; import flowWithBranchingFilters from "./mocks/flowWithBranchingFilters.json"; import flowWithRootFilter from "./mocks/flowWithRootFilter.json"; -const { getState, setState } = vanillaStore; +const { getState, setState } = useStore; const { upcomingCardIds, resetPreview, diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/flags.test.ts b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/flags.test.ts index 857ba71305..1c6e8f4e83 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/flags.test.ts +++ b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/flags.test.ts @@ -1,8 +1,8 @@ import { ComponentType as TYPES } from "@opensystemslab/planx-core/types"; -import { vanillaStore } from "../store"; +import { useStore } from "../store"; -const { getState, setState } = vanillaStore; +const { getState, setState } = useStore; describe("in a flow with no collected flags, the user", () => { beforeEach(() => { diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/granularity.test.ts b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/granularity.test.ts index aaf4e7201f..95aaa41af7 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/granularity.test.ts +++ b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/granularity.test.ts @@ -1,8 +1,8 @@ import { ComponentType as TYPES } from "@opensystemslab/planx-core/types"; -import { Store, vanillaStore } from "../store"; +import { Store, useStore } from "../store"; -const { getState, setState } = vanillaStore; +const { getState, setState } = useStore; const flow: Store.flow = { _root: { diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/navigation.test.ts b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/navigation.test.ts index 21a56af59f..0e92ae9bc6 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/navigation.test.ts +++ b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/navigation.test.ts @@ -1,10 +1,10 @@ import { ComponentType as TYPES } from "@opensystemslab/planx-core/types"; -import { FullStore, vanillaStore } from "../store"; +import { FullStore, useStore } from "../store"; import flowWithoutSections from "./mocks/flowWithClones.json"; import flowWithThreeSections from "./mocks/flowWithThreeSections.json"; -const { getState, setState } = vanillaStore; +const { getState, setState } = useStore; const { filterFlowByType, initNavigationStore, record } = getState(); let initialState: FullStore; diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/ordering.test.ts b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/ordering.test.ts index 43f1fdb515..d27323334a 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/ordering.test.ts +++ b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/ordering.test.ts @@ -1,8 +1,8 @@ import { ComponentType as TYPES } from "@opensystemslab/planx-core/types"; -import { Store, vanillaStore } from "../store"; +import { Store, useStore } from "../store"; -const { getState, setState } = vanillaStore; +const { getState, setState } = useStore; const flow: Store.flow = { _root: { diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/canGoBack.test.ts b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/canGoBack.test.ts index 6a12ab655d..22f0af6d53 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/canGoBack.test.ts +++ b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/canGoBack.test.ts @@ -1,8 +1,8 @@ import { ComponentType as TYPES } from "@opensystemslab/planx-core/types"; -import { Store, vanillaStore } from "../../store"; +import { Store, useStore } from "../../store"; -const { getState, setState } = vanillaStore; +const { getState, setState } = useStore; const { canGoBack, getCurrentCard, resetPreview, record, changeAnswer } = getState(); diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/changeAnswer.ts b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/changeAnswer.ts index 03cc472c81..fe9bf87b80 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/changeAnswer.ts +++ b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/changeAnswer.ts @@ -1,9 +1,9 @@ import cloneDeep from "lodash/cloneDeep"; -import { Store, vanillaStore } from "../../store"; +import { Store, useStore } from "../../store"; import flowWithAutoAnswersMock from "../mocks/flowWithAutoAnswers.json"; -const { getState, setState } = vanillaStore; +const { getState, setState } = useStore; const flowWithAutoAnswers = cloneDeep(flowWithAutoAnswersMock) as Store.flow; diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/hasPaid.test.ts b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/hasPaid.test.ts index a32b6cce32..b829da536a 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/hasPaid.test.ts +++ b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/hasPaid.test.ts @@ -1,8 +1,8 @@ import { ComponentType as TYPES } from "@opensystemslab/planx-core/types"; -import { vanillaStore } from "../../store"; +import { useStore } from "../../store"; -const { getState, setState } = vanillaStore; +const { getState, setState } = useStore; const { record, hasPaid } = getState(); test("hasPaid is updated if a Pay component has been recorded", () => { diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/overrideAnswer.test.ts b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/overrideAnswer.test.ts index c7bcb0da1b..6aa0936cf4 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/overrideAnswer.test.ts +++ b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/overrideAnswer.test.ts @@ -1,6 +1,6 @@ -import { vanillaStore } from "../../store"; +import { useStore } from "../../store"; -const { getState, setState } = vanillaStore; +const { getState, setState } = useStore; const { overrideAnswer, getCurrentCard, upcomingCardIds, record } = getState(); diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/previousCard.test.ts b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/previousCard.test.ts index 92ccc71a37..cdb1986792 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/previousCard.test.ts +++ b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/previousCard.test.ts @@ -1,6 +1,6 @@ -import { vanillaStore } from "../../store"; +import { useStore } from "../../store"; -const { getState, setState } = vanillaStore; +const { getState, setState } = useStore; const { resetPreview, previousCard, getCurrentCard } = getState(); diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/record.test.ts b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/record.test.ts index e8d825104f..5c39916a80 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/record.test.ts +++ b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/record.test.ts @@ -1,8 +1,8 @@ import { ComponentType as TYPES } from "@opensystemslab/planx-core/types"; -import { vanillaStore } from "../../store"; +import { useStore } from "../../store"; -const { getState, setState } = vanillaStore; +const { getState, setState } = useStore; const { record } = getState(); describe("error handling", () => { diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/removeNodesDependentOnPassport.test.ts b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/removeNodesDependentOnPassport.test.ts index dcf8e20d8b..bcc4415941 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/removeNodesDependentOnPassport.test.ts +++ b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/removeNodesDependentOnPassport.test.ts @@ -1,11 +1,11 @@ import cloneDeep from "lodash/cloneDeep"; -import { Store, vanillaStore } from "../../store"; +import { Store, useStore } from "../../store"; import { removeNodesDependentOnPassport } from "../../store/preview"; import breadcrumbsDependentOnPassportMock from "../mocks/breadcrumbsDependentOnPassport.json"; import flowWithPassportComponentsMock from "../mocks/flowWithPassportComponents.json"; -const { getState, setState } = vanillaStore; +const { getState, setState } = useStore; let breadcrumbsDependentOnPassport = cloneDeep( breadcrumbsDependentOnPassportMock, diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/resetPreview.test.ts b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/resetPreview.test.ts index c212c43630..add46df266 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/resetPreview.test.ts +++ b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/resetPreview.test.ts @@ -1,6 +1,6 @@ -import { vanillaStore } from "../../store"; +import { useStore } from "../../store"; -const { getState, setState } = vanillaStore; +const { getState, setState } = useStore; const { resetPreview } = getState(); diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/upcomingCardIds.test.ts b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/upcomingCardIds.test.ts index 6c3a1f5e05..b166ce5463 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/upcomingCardIds.test.ts +++ b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/upcomingCardIds.test.ts @@ -1,8 +1,8 @@ import { ComponentType as TYPES } from "@opensystemslab/planx-core/types"; -import { Store, vanillaStore } from "../../store"; +import { Store, useStore } from "../../store"; -const { getState, setState } = vanillaStore; +const { getState, setState } = useStore; const { upcomingCardIds, resetPreview, record, getCurrentCard } = getState(); const flow: Store.flow = { diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/setValue.test.ts b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/setValue.test.ts index 72983ec6fd..7aae5da40a 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/setValue.test.ts +++ b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/setValue.test.ts @@ -1,9 +1,9 @@ import { ComponentType as TYPES } from "@opensystemslab/planx-core/types"; import { cloneDeep, merge } from "lodash"; -import { Store, vanillaStore } from "../store"; +import { Store, useStore } from "../store"; -const { getState, setState } = vanillaStore; +const { getState, setState } = useStore; const { resetPreview, record, computePassport, getCurrentCard } = getState(); const baseFlow: Store.flow = { diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/unseen.test.ts b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/unseen.test.ts index a4575e3558..4ea8774a75 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/unseen.test.ts +++ b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/unseen.test.ts @@ -1,6 +1,6 @@ -import { Store, vanillaStore } from "../store"; +import { Store, useStore } from "../store"; -const { getState, setState } = vanillaStore; +const { getState, setState } = useStore; // https://github.com/theopensystemslab/planx-new/pull/430#issue-625111571 const flow: Store.flow = { diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/useNotValues.test.ts b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/useNotValues.test.ts index 54a789d760..cb74d0cebc 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/useNotValues.test.ts +++ b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/useNotValues.test.ts @@ -1,4 +1,4 @@ -import { Store, vanillaStore } from "../store"; +import { Store, useStore } from "../store"; // flow preview: https://i.imgur.com/nCov5CE.png @@ -106,7 +106,7 @@ const flow: Store.flow = { }, }; -const { getState, setState } = vanillaStore; +const { getState, setState } = useStore; describe("if I initially pick", () => { beforeEach(() => { diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/user.test.ts b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/user.test.ts index 5c0f9e24c7..2f14e589aa 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/user.test.ts +++ b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/user.test.ts @@ -1,8 +1,8 @@ import { User } from "@opensystemslab/planx-core/types"; -import { FullStore, vanillaStore } from "../store"; +import { FullStore, useStore } from "../store"; -const { getState, setState } = vanillaStore; +const { getState, setState } = useStore; const { canUserEditTeam } = getState(); const redUser: User = { diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/store/index.ts b/editor.planx.uk/src/pages/FlowEditor/lib/store/index.ts index bc3b32961c..94572fdd6b 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/store/index.ts +++ b/editor.planx.uk/src/pages/FlowEditor/lib/store/index.ts @@ -1,7 +1,6 @@ import { ComponentType as TYPES } from "@opensystemslab/planx-core/types"; import { isPreviewOnlyDomain } from "routes/utils"; -import { create, UseBoundStore } from "zustand"; -import { createStore, StoreApi } from "zustand/vanilla"; +import { create, StoreApi,UseBoundStore } from "zustand"; import type { EditorStore, EditorUIStore } from "./editor"; import type { NavigationStore } from "./navigation"; @@ -54,32 +53,25 @@ export type PublicStore = SharedStore & export type FullStore = PublicStore & EditorStore & EditorUIStore & UserStore; -interface PlanXStores { - // Non-React implementation (e.g. for use in tests) - vanillaStore: StoreApi; - // React hook - useStore: UseBoundStore>; -} - /** * If accessing the public preview, don't load editor store files * Cast to FullStore for autocomplete and linting */ -const createPublicStore = (): StoreApi => - createStore((...args) => ({ +const createPublicStore = () => + create()((...args) => ({ ...sharedStore(...args), ...previewStore(...args), ...navigationStore(...args), ...settingsStore(...args), ...teamStore(...args), - })) as StoreApi; + })) as UseBoundStore>; /** * If accessing the editor then load ALL store files */ -const createFullStore = (): StoreApi => { +const createFullStore = () => { const { editorStore, editorUIStore } = require("./editor"); - return createStore((...args) => ({ + return create()((...args) => ({ ...sharedStore(...args), ...previewStore(...args), ...navigationStore(...args), @@ -94,12 +86,7 @@ const createFullStore = (): StoreApi => { const isPublic = isPreviewOnlyDomain || window?.location?.href?.includes("/published"); -export const { vanillaStore, useStore }: PlanXStores = (() => { - const vanillaStore: StoreApi = (() => - isPublic ? createPublicStore() : createFullStore())(); - - return { vanillaStore, useStore: create(vanillaStore) }; -})(); +export const useStore = isPublic ? createPublicStore() : createFullStore(); // having window.api in console is useful for debugging (window as any)["api"] = useStore; diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/store/shared.ts b/editor.planx.uk/src/pages/FlowEditor/lib/store/shared.ts index ff71086a35..80ea07475e 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/store/shared.ts +++ b/editor.planx.uk/src/pages/FlowEditor/lib/store/shared.ts @@ -2,7 +2,6 @@ import { CoreDomainClient } from "@opensystemslab/planx-core"; import { Auth } from "@opensystemslab/planx-core/dist/requests/graphql"; import { FlowStatus } from "@opensystemslab/planx-core/types"; import { ROOT_NODE_KEY } from "@planx/graph"; -import { capitalize } from "lodash"; import { removeSessionIdSearchParam } from "utils"; import type { StateCreator } from "zustand"; diff --git a/editor.planx.uk/src/pages/Preview/SaveAndReturn.test.tsx b/editor.planx.uk/src/pages/Preview/SaveAndReturn.test.tsx index 87a154a4c6..d69ea4433e 100644 --- a/editor.planx.uk/src/pages/Preview/SaveAndReturn.test.tsx +++ b/editor.planx.uk/src/pages/Preview/SaveAndReturn.test.tsx @@ -1,12 +1,12 @@ import Button from "@mui/material/Button"; import { act, screen, waitFor } 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"; import SaveAndReturn, { ConfirmEmail } from "./SaveAndReturn"; -const { getState, setState } = vanillaStore; +const { getState, setState } = useStore; let initialState: FullStore; diff --git a/editor.planx.uk/src/routes/utils.test.tsx b/editor.planx.uk/src/routes/utils.test.tsx index 6e47cd424f..0d398a6318 100644 --- a/editor.planx.uk/src/routes/utils.test.tsx +++ b/editor.planx.uk/src/routes/utils.test.tsx @@ -1,11 +1,11 @@ import { waitFor } from "@testing-library/react"; import { NaviRequest } from "navi"; -import { FullStore, vanillaStore } from "pages/FlowEditor/lib/store"; +import { FullStore, useStore } from "pages/FlowEditor/lib/store"; import { ApplicationPath } from "types"; import { isSaveReturnFlow, setPath } from "./utils"; -const { getState, setState } = vanillaStore; +const { getState, setState } = useStore; let initialState: FullStore; const mockFlow = { From a056a0e948126d6ab09f12d212c713d29ed55b39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Mon, 15 Jul 2024 09:13:42 +0100 Subject: [PATCH 141/150] chore: Improve network error logging (#3420) --- editor.planx.uk/src/lib/graphql.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/editor.planx.uk/src/lib/graphql.ts b/editor.planx.uk/src/lib/graphql.ts index 2b35952141..7c4dbf4073 100644 --- a/editor.planx.uk/src/lib/graphql.ts +++ b/editor.planx.uk/src/lib/graphql.ts @@ -104,7 +104,9 @@ const errorLink = onError(({ graphQLErrors, operation }) => { handleHasuraGraphQLErrors(graphQLErrors, operation); } else { console.error( - `[Error]: Operation name: ${operation.operationName}. Details: ${operation}`, + `[Error]: Operation name: ${ + operation.operationName + }. Details: ${JSON.stringify(operation)}`, ); toast.error("Network error, attempting to reconnect…", { toastId, From 5dd7744e34ce76a50082ffbd0506cdb8924ef352 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Mon, 15 Jul 2024 10:14:17 +0100 Subject: [PATCH 142/150] test(e2e): Write to new `team_settings` table (#3422) --- api.planx.uk/package.json | 2 +- api.planx.uk/pnpm-lock.yaml | 8 +++---- e2e/tests/api-driven/package.json | 2 +- e2e/tests/api-driven/pnpm-lock.yaml | 8 +++---- e2e/tests/api-driven/src/globalHelpers.ts | 6 +++-- e2e/tests/ui-driven/package.json | 2 +- e2e/tests/ui-driven/pnpm-lock.yaml | 8 +++---- e2e/tests/ui-driven/src/context.ts | 27 +++++++++++------------ editor.planx.uk/package.json | 2 +- editor.planx.uk/pnpm-lock.yaml | 10 ++++----- 10 files changed, 38 insertions(+), 37 deletions(-) diff --git a/api.planx.uk/package.json b/api.planx.uk/package.json index 64343791e3..4d5eb967bc 100644 --- a/api.planx.uk/package.json +++ b/api.planx.uk/package.json @@ -5,7 +5,7 @@ "packageManager": "pnpm@8.6.6", "dependencies": { "@airbrake/node": "^2.1.8", - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#7666a78", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#f8d6480", "@types/isomorphic-fetch": "^0.0.36", "adm-zip": "^0.5.10", "aws-sdk": "^2.1467.0", diff --git a/api.planx.uk/pnpm-lock.yaml b/api.planx.uk/pnpm-lock.yaml index 956bcf7897..c4ce6e5aad 100644 --- a/api.planx.uk/pnpm-lock.yaml +++ b/api.planx.uk/pnpm-lock.yaml @@ -14,8 +14,8 @@ dependencies: specifier: ^2.1.8 version: 2.1.8 '@opensystemslab/planx-core': - specifier: git+https://github.com/theopensystemslab/planx-core#7666a78 - version: github.com/theopensystemslab/planx-core/7666a78 + specifier: git+https://github.com/theopensystemslab/planx-core#f8d6480 + version: github.com/theopensystemslab/planx-core/f8d6480 '@types/isomorphic-fetch': specifier: ^0.0.36 version: 0.0.36 @@ -8203,8 +8203,8 @@ packages: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} dev: false - github.com/theopensystemslab/planx-core/7666a78: - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/7666a78} + github.com/theopensystemslab/planx-core/f8d6480: + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/f8d6480} name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true diff --git a/e2e/tests/api-driven/package.json b/e2e/tests/api-driven/package.json index 56327dd937..7f59584dca 100644 --- a/e2e/tests/api-driven/package.json +++ b/e2e/tests/api-driven/package.json @@ -7,7 +7,7 @@ "packageManager": "pnpm@8.6.6", "dependencies": { "@cucumber/cucumber": "^9.3.0", - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#7666a78", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#f8d6480", "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 bbf9d8c26e..dd487ecbba 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#7666a78 - version: github.com/theopensystemslab/planx-core/7666a78 + specifier: git+https://github.com/theopensystemslab/planx-core#f8d6480 + version: github.com/theopensystemslab/planx-core/f8d6480 axios: specifier: ^1.6.8 version: 1.6.8 @@ -3053,8 +3053,8 @@ packages: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} dev: false - github.com/theopensystemslab/planx-core/7666a78: - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/7666a78} + github.com/theopensystemslab/planx-core/f8d6480: + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/f8d6480} name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true diff --git a/e2e/tests/api-driven/src/globalHelpers.ts b/e2e/tests/api-driven/src/globalHelpers.ts index e479549efe..159e8290ba 100644 --- a/e2e/tests/api-driven/src/globalHelpers.ts +++ b/e2e/tests/api-driven/src/globalHelpers.ts @@ -9,8 +9,10 @@ export function createTeam( name: "E2E Test Team", slug: "E2E", submissionEmail: TEST_EMAIL, - homepage: "planx.uk", - referenceCode: "ABCD", + settings: { + homepage: "http://www.planx.uk", + referenceCode: "ABCD", + }, ...args, }), ); diff --git a/e2e/tests/ui-driven/package.json b/e2e/tests/ui-driven/package.json index 0ec4fb8c07..ae79605c14 100644 --- a/e2e/tests/ui-driven/package.json +++ b/e2e/tests/ui-driven/package.json @@ -8,7 +8,7 @@ "postinstall": "./install-dependencies.sh" }, "dependencies": { - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#7666a78", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#f8d6480", "axios": "^1.6.8", "dotenv": "^16.3.1", "eslint": "^8.56.0", diff --git a/e2e/tests/ui-driven/pnpm-lock.yaml b/e2e/tests/ui-driven/pnpm-lock.yaml index 05082a1442..a6fcf0322a 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#7666a78 - version: github.com/theopensystemslab/planx-core/7666a78 + specifier: git+https://github.com/theopensystemslab/planx-core#f8d6480 + version: github.com/theopensystemslab/planx-core/f8d6480 axios: specifier: ^1.6.8 version: 1.6.8 @@ -2782,8 +2782,8 @@ packages: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} dev: false - github.com/theopensystemslab/planx-core/7666a78: - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/7666a78} + github.com/theopensystemslab/planx-core/f8d6480: + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/f8d6480} name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true diff --git a/e2e/tests/ui-driven/src/context.ts b/e2e/tests/ui-driven/src/context.ts index f2ccb89479..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,15 +14,7 @@ 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; @@ -41,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", }, }; @@ -60,9 +58,10 @@ 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 ( diff --git a/editor.planx.uk/package.json b/editor.planx.uk/package.json index a4d7d5357b..8b5fb3d29f 100644 --- a/editor.planx.uk/package.json +++ b/editor.planx.uk/package.json @@ -13,7 +13,7 @@ "@mui/material": "^5.15.2", "@mui/utils": "^5.15.2", "@opensystemslab/map": "^0.8.3", - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#7666a78", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#f8d6480", "@tiptap/core": "^2.4.0", "@tiptap/extension-bold": "^2.0.3", "@tiptap/extension-bubble-menu": "^2.1.13", diff --git a/editor.planx.uk/pnpm-lock.yaml b/editor.planx.uk/pnpm-lock.yaml index 4ae9acf1b1..1523de3d77 100644 --- a/editor.planx.uk/pnpm-lock.yaml +++ b/editor.planx.uk/pnpm-lock.yaml @@ -43,8 +43,8 @@ dependencies: specifier: ^0.8.3 version: 0.8.3 '@opensystemslab/planx-core': - specifier: git+https://github.com/theopensystemslab/planx-core#7666a78 - version: github.com/theopensystemslab/planx-core/7666a78(@types/react@18.2.45) + specifier: git+https://github.com/theopensystemslab/planx-core#f8d6480 + version: github.com/theopensystemslab/planx-core/f8d6480(@types/react@18.2.45) '@tiptap/core': specifier: ^2.4.0 version: 2.4.0(@tiptap/pm@2.0.3) @@ -21836,9 +21836,9 @@ packages: use-sync-external-store: 1.2.0(react@18.2.0) dev: false - github.com/theopensystemslab/planx-core/7666a78(@types/react@18.2.45): - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/7666a78} - id: github.com/theopensystemslab/planx-core/7666a78 + github.com/theopensystemslab/planx-core/f8d6480(@types/react@18.2.45): + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/f8d6480} + id: github.com/theopensystemslab/planx-core/f8d6480 name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true From 17804bd30b994eccee8feda7629aac6726b3454c Mon Sep 17 00:00:00 2001 From: Jessica McInchak Date: Mon, 15 Jul 2024 12:36:08 +0200 Subject: [PATCH 143/150] Revert "fix: GIS API should return geometry" (#3425) --- api.planx.uk/modules/gis/service/digitalLand.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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, }; } From f50eba78da17acf7a9976a4ea1463697e629c3e1 Mon Sep 17 00:00:00 2001 From: Jessica McInchak Date: Mon, 15 Jul 2024 16:05:35 +0200 Subject: [PATCH 144/150] chore: update `blpu_codes` values and descriptions per content team (#3426) --- .../down.sql | 468 ++++++++++++++++++ .../up.sql | 468 ++++++++++++++++++ 2 files changed, 936 insertions(+) create mode 100644 hasura.planx.uk/migrations/1721047343459_update_blpu_codes_values/down.sql create mode 100644 hasura.planx.uk/migrations/1721047343459_update_blpu_codes_values/up.sql diff --git a/hasura.planx.uk/migrations/1721047343459_update_blpu_codes_values/down.sql b/hasura.planx.uk/migrations/1721047343459_update_blpu_codes_values/down.sql new file mode 100644 index 0000000000..5c21bef20b --- /dev/null +++ b/hasura.planx.uk/migrations/1721047343459_update_blpu_codes_values/down.sql @@ -0,0 +1,468 @@ +TRUNCATE table "public"."blpu_codes"; +INSERT INTO "public"."blpu_codes" (code, description, value) VALUES + ('C','Commercial','commercial'), + ('CA','Agricultural','commercial.agriculture'), + ('CA01','Farm / Non-Residential Associated Building','commercial.agriculture.farm'), + ('CA02','Fishery','commercial.fish'), + ('CA02FF','Fish Farming','commercial.fish.farm'), + ('CA02FH','Fish Hatchery','commercial.fish.hatchery'), + ('CA02FP','Fish Processing','commercial.fish.processing'), + ('CA02OY','Oyster / Mussel Bed','commercial.fish.oysters'), + ('CA03','Horticulture','commercial.horticulture'), + ('CA03SH','Smallholding','commercial.horticulture.smallholding'), + ('CA03VY','Vineyard','commercial.horticulture.vineyard'), + ('CA03WB','Watercress Bed','commercial.horticulture.watercress'), + ('CA04','Slaughter House / Abattoir','commercial.abattoir'), + ('CB','Ancillary Building','commercial.ancilliary'), + ('CC','Community Services','commercial.community'), + ('CC02','Law Court','commercial.community.court'), + ('CC03','Prison','commercial.community.prison'), + ('CC03HD','HM Detention Centre','commercial.community.prison.detention'), + ('CC03PR','HM Prison Service','commercial.community.prison.service'), + ('CC03SC','Secure Residential Accommodation','commercial.community.prison.secureResidential'), + ('CC04','Public / Village Hall / Other Community Facility','commercial.community.hall'), + ('CC04YR','Youth Recreational / Social Club','commercial.community.hall.club'), + ('CC05','Public Convenience','commercial.community.wc'), + ('CC06','Cemetery / Crematorium / Graveyard. In Current Use.','commercial.community.cemetary'), + ('CC06CB','Columbarium','commercial.community.cemetary.columbarium'), + ('CC06CN','Crematorium','commercial.community.cemetary.crematorium'), + ('CC06CR','Chapel Of Rest','commercial.community.cemetary.chapelOfRest'), + ('CC06CY','Cemetery','commercial.community.cemetary.cemetary'), + ('CC06MC','Military Cemetery','commercial.community.cemetary.military'), + ('CC06MY','Mortuary','commercial.community.cemetary.mortuary'), + ('CC07','Church Hall / Religious Meeting Place / Hall','commercial.community.religious'), + ('CC08','Community Service Centre / Office','commercial.community.services'), + ('CC09','Public Household Waste Recycling Centre (HWRC)','commercial.community.HWRC'), + ('CC10','Recycling Site','commercial.community.recycling'), + ('CC11','CCTV','commercial.community.CCTV'), + ('CC12','Job Centre','commercial.community.employment'), + ('CE','Education','commercial.education'), + ('CE01','College','commercial.education.college'), + ('CE01FE','Further Education','commercial.education.college.further'), + ('CE01HE','Higher Education','commercial.education.college.higher'), + ('CE02','Children’s Nursery / Crèche','commercial.education.nursery'), + ('CE03','Preparatory / First / Primary / Infant / Junior / Middle School','commercial.education.school'), + ('CE03FS','First School','commercial.education.school.first'), + ('CE03IS','Infant School','commercial.education.school.infant'), + ('CE03JS','Junior School','commercial.education.school.junior'), + ('CE03MS','Middle School','commercial.education.school.middle'), + ('CE03NP','Non State Primary / Preparatory School','commercial.education.school.primary.private'), + ('CE03PS','Primary School','commercial.education.school.primary.state'), + ('CE04','Secondary / High School','commercial.education.secondarySchool'), + ('CE04NS','Non State Secondary School','commercial.education.secondarySchool.private'), + ('CE04SS','Secondary School','commercial.education.secondarySchool.state'), + ('CE05','University','commercial.education.university'), + ('CE06','Special Needs Establishment.','commercial.education.specialNeeds'), + ('CE07','Other Educational Establishment','commercial.education.other'), + ('CH','Hotel / Motel / Boarding / Guest House','commercial.guest'), + ('CH01','Boarding / Guest House / Bed And Breakfast / Youth Hostel','commercial.guest.hostel'), + ('CH01YH','Youth Hostel','commercial.guest.hostel.youth'), + ('CH02','Holiday Let/Accomodation/Short-Term Let Other Than CH01','commercial.guest.shortLet'), + ('CH03','Hotel/Motel','commercial.guest.hotel'), + ('CI','Industrial Applicable to manufacturing, engineering, maintenance, storage / wholesale distribution and extraction sites','commercial.industrial'), + ('CI01','Factory/Manufacturing','commercial.industrial.manufacturing'), + ('CI01AW','Aircraft Works','commercial.industrial.manufacturing.aircraft'), + ('CI01BB','Boat Building','commercial.industrial.manufacturing.boats'), + ('CI01BR','Brick Works','commercial.industrial.manufacturing.bricks'), + ('CI01BW','Brewery','commercial.industrial.manufacturing.beer'), + ('CI01CD','Cider Manufacture','commercial.industrial.manufacturing.cider'), + ('CI01CM','Chemical Works','commercial.industrial.manufacturing.chemicals'), + ('CI01CW','Cement Works','commercial.industrial.manufacturing.cement'), + ('CI01DA','Dairy Processing','commercial.industrial.manufacturing.dairy'), + ('CI01DY','Distillery','commercial.industrial.manufacturing.distillery'), + ('CI01FL','Flour Mill','commercial.industrial.manufacturing.flour'), + ('CI01FO','Food Processing','commercial.industrial.manufacturing.food'), + ('CI01GW','Glassworks','commercial.industrial.manufacturing.glass'), + ('CI01MG','Manufacturing','commercial.industrial.manufacturing.other'), + ('CI01OH','Oast House','commercial.industrial.manufacturing.hops'), + ('CI01OR','Oil Refining','commercial.industrial.manufacturing.oil'), + ('CI01PG','Pottery Manufacturing','commercial.industrial.manufacturing.pottery'), + ('CI01PM','Paper Mill','commercial.industrial.manufacturing.paper'), + ('CI01PW','Printing Works','commercial.industrial.manufacturing.printing'), + ('CI01SR','Sugar Refinery','commercial.industrial.manufacturing.sugar'), + ('CI01SW','Steel Works','commercial.industrial.manufacturing.steel'), + ('CI01TL','Timber Mill','commercial.industrial.manufacturing.timber'), + ('CI01WN','Winery','commercial.industrial.manufacturing.wine'), + ('CI01YD','Shipyard','commercial.industrial.manufacturing.ships'), + ('CI02','Mineral / Ore Working / Quarry / Mine','commercial.industrial.extraction'), + ('CI02MA','Mineral Mining / Active','commercial.industrial.extraction.mining'), + ('CI02MD','Mineral Distribution / Storage','commercial.industrial.extraction.distribution'), + ('CI02MP','Mineral Processing','commercial.industrial.extraction.processing'), + ('CI02OA','Oil / Gas Extraction / Active','commercial.industrial.extraction.oilGas'), + ('CI02QA','Mineral Quarrying / Open Extraction / Active','commercial.industrial.extraction.quarrying'), + ('CI03','Workshop / Light Industrial','commercial.industrial.light'), + ('CI03GA','Servicing Garage','commercial.industrial.light.garage'), + ('CI04','Warehouse / Store / Storage Depot','commercial.industrial.light.storage'), + ('CI04CS','Crop Handling / Storage','commercial.industrial.light.storage.crops'), + ('CI04PL','Postal Sorting / Distribution','commercial.industrial.light.storage.post'), + ('CI04SO','Solid Fuel Storage','commercial.industrial.light.storage.solidFuel'), + ('CI04TS','Timber Storage','commercial.industrial.light.storage.timber'), + ('CI05','Wholesale Distribution','commercial.industrial.distribution'), + ('CI05SF','Solid Fuel Distribution','commercial.industrial.distribution.solidFueld'), + ('CI05TD','Timber Distribution','commercial.industrial.distribution.timber'), + ('CI06','Recycling Plant','commercial.industrial.recycling'), + ('CI07','Incinerator / Waste Transfer Station','commercial.industrial.incineration'), + ('CI08','Maintenance Depot','commercial.industrial.maintenanceDepot'), + ('CL','Leisure - Applicable to recreational sites and enterprises','commercial.leisure'), + ('CL01','Amusements','commercial.leisure.amusements'), + ('CL01LP','Leisure Pier','commercial.leisure.amusements.pier'), + ('CL02','Holiday / Campsite','commercial.leisure.holiday'), + ('CL02CG','Camping','commercial.leisure.holiday.camping'), + ('CL02CV','Caravanning','commercial.leisure.holiday.caravanning'), + ('CL02HA','Holiday Accommodation','commercial.leisure.holiday.accommodation'), + ('CL02HO','Holiday Centre','commercial.leisure.holiday.centre'), + ('CL02YC','Youth Organisation Camp','commercial.leisure.holiday.youth'), + ('CL03','Library','commercial.leisure.library'), + ('CL03RR','Reading Room','commercial.leisure.library.readingRoom'), + ('CL04','Museum / Gallery','commercial.leisure.museum'), + ('CL04AC','Art Centre / Gallery','commercial.leisure.museum.art'), + ('CL04AM','Aviation Museum','commercial.leisure.museum.aviation'), + ('CL04HG','Heritage Centre','commercial.leisure.museum.heritage'), + ('CL04IM','Industrial Museum','commercial.leisure.museum.industrial'), + ('CL04MM','Military Museum','commercial.leisure.museum.military'), + ('CL04NM','Maritime Museum','commercial.leisure.museum.maritime'), + ('CL04SM','Science Museum','commercial.leisure.museum.science'), + ('CL04TM','Transport Museum','commercial.leisure.museum.transport'), + ('CL06','Indoor / Outdoor Leisure / Sporting Activity / Centre','commercial.leisure.sport'), + ('CL06AH','Athletics Facility','commercial.leisure.sport.athletics'), + ('CL06BF','Bowls Facility','commercial.leisure.sport.bowls'), + ('CL06CK','Cricket Facility','commercial.leisure.sport.cricket'), + ('CL06CU','Curling Facility','commercial.leisure.sport.curling'), + ('CL06DS','Diving / Swimming Facility','commercial.leisure.sport.swimming'), + ('CL06EQ','Equestrian Sports Facility','commercial.leisure.sport.equestrian'), + ('CL06FB','Football Facility','commercial.leisure.sport.football'), + ('CL06FI','Fishing / Angling Facility','commercial.leisure.sport.fishing'), + ('CL06GF','Golf Facility','commercial.leisure.sport.golf'), + ('CL06GL','Gliding Facility','commercial.leisure.sport.gliding'), + ('CL06GR','Greyhound Racing Facility','commercial.leisure.sport.dogracing'), + ('CL06HF','Hockey Facility','commercial.leisure.sport.hockey'), + ('CL06HR','Horse Racing Facility','commercial.leisure.sport.horseracing'), + ('CL06HV','Historic Vessel / Aircraft / Vehicle','commercial.leisure.sport.historicVehicles'), + ('CL06LS','Activity / Leisure / Sports Centre','commercial.leisure.sport.centre'), + ('CL06ME','Model Sports Facility','commercial.leisure.sport.model'), + ('CL06MF','Motor Sports Facility','commercial.leisure.sport.motor'), + ('CL06PF','Playing Field','commercial.leisure.sport.playingField'), + ('CL06QS','Racquet Sports Facility','commercial.leisure.sport.racquet'), + ('CL06RF','Rugby Facility','commercial.leisure.sport.rugby'), + ('CL06RG','Recreation Ground','commercial.leisure.sport.recreationGround'), + ('CL06SI','Shinty Facility','commercial.leisure.sport.shinty'), + ('CL06SK','Skateboarding Facility','commercial.leisure.sport.skateboarding'), + ('CL06SX','Civilian Firing Facility','commercial.leisure.sport.firing'), + ('CL06TB','Tenpin Bowling Facility','commercial.leisure.sport.tenpin'), + ('CL06TN','Public Tennis Court','commercial.leisure.sport.tennis'), + ('CL06WA','Water Sports Facility','commercial.leisure.sport.water'), + ('CL06WP','Winter Sports Facility','commercial.leisure.sport.winter'), + ('CL06WY','Wildlife Sports Facility','commercial.leisure.sport.wildlife'), + ('CL06YF','Cycling Sports Facility','commercial.leisure.sport.cycling'), + ('CL07','Bingo Hall / Cinema / Conference / Exhibition Centre / Theatre / Concert Hall','commercial.leisure.entertainment'), + ('CL07CI','Cinema','commercial.leisure.entertainment.cinema'), + ('CL07EN','Entertainment Complex','commercial.leisure.entertainment.mixed'), + ('CL07EX','Conference / Exhibition Centre','commercial.leisure.entertainment.exhibition'), + ('CL07TH','Theatre','commercial.leisure.entertainment.theatre'), + ('CL08','Zoo / Theme Park','commercial.leisure.park.zoo'), + ('CL08AK','Amusement Park','commercial.leisure.park.amusement'), + ('CL08AQ','Aquatic Attraction','commercial.leisure.park.aquatic'), + ('CL08MX','Model Village Site','commercial.leisure.park.model'), + ('CL08WZ','Wildlife / Zoological Park','commercial.leisure.park.wildlife'), + ('CL09','Beach Hut (Recreational, Non-Residential Use Only)','commercial.leisure.beachHut'), + ('CL10','Licensed Private Members’ Club','commercial.leisure.club.private'), + ('CL10RE','Recreational / Social Club','commercial.leisure.club.social'), + ('CL11','Arena / Stadium','commercial.leisure.arena'), + ('CL11SD','Stadium','commercial.leisure.arena.stadium'), + ('CL11SJ','Showground','commercial.leisure.arena.showground'), + ('CM','Medical','commercial.medical'), + ('CM01','Dentist','commercial.medical.dentist'), + ('CM02','General Practice Surgery / Clinic','commercial.medical.GP'), + ('CM02HC','Health Centre','commercial.medical.healthCentre'), + ('CM02HL','Health Care Services','commercial.medical.healthServices'), + ('CM03','Hospital / Hospice','commercial.medical.care'), + ('CM03HI','Care home/Hospice','commercial.medical.care.home'), + ('CM03HP','Hospital','commercial.medical.care.hospital'), + ('CM04','Medical / Testing / Research Laboratory','commercial.medical.lab'), + ('CM05','Professional Medical Service','commercial.medical.professional'), + ('CM05ZS','Assessment / Development Services','commercial.medical.assessment'), + ('CN','Animal Centre','commercial.animals'), + ('CN01','Cattery / Kennel','commercial.animals.kennelsCattery'), + ('CN02','Animal Services','commercial.animals.services'), + ('CN02AX','Animal Quarantining','commercial.animals.services.quarantine'), + ('CN03','Equestrian','commercial.animals.equestrian'), + ('CN03HB','Horse Racing / Breeding Stable','commercial.animals.equestrian.racing'), + ('CN03SB','Commercial Stabling / Riding','commercial.animals.equestrian.riding'), + ('CN04','Vet / Animal Medical Treatment','commercial.animals.vet'), + ('CN05','Animal / Bird / Marine Sanctuary','commercial.animals.sanctuary'), + ('CN05AN','Animal Sanctuary','commercial.animals.sanctuary.animals'), + ('CN05MR','Marine Sanctuary','commercial.animals.sanctuary.marine'), + ('CO','Office','commercial.office'), + ('CO01','Office / Work Studio','commercial.office.workspace'), + ('CO01EM','Embassy /, High Commission / Consulate','commercial.office.workspace.embassy'), + ('CO01FM','Film Studio','commercial.office.workspace.film'), + ('CO01GV','Central Government Service','commercial.office.workspace.gov.national'), + ('CO01LG','Local Government Service','commercial.office.workspace.gov.local'), + ('CO02','Broadcasting (TV / Radio)','commercial.office.broadcasting'), + ('CR','Retail','commercial.retail'), + ('CR01','Bank / Financial Service','commercial.retail.financial'), + ('CR02','Retail Service Agent','commercial.retail.services'), + ('CR02PO','Post Office','commercial.retail.post'), + ('CR04','Market (Indoor / Outdoor)','commercial.retail.market'), + ('CR04FK','Fish Market','commercial.retail.market.fish'), + ('CR04FV','Fruit / Vegetable Market','commercial.retail.market.fruit'), + ('CR04LV','Livestock Market','commercial.retail.market.livestock'), + ('CR05','Petrol Filling Station','commercial.retail.fuel'), + ('CR06','Public House / Bar / Nightclub','commercial.retail.drinking'), + ('CR07','Restaurant / Cafeteria','commercial.retail.restaurant'), + ('CR08','Shop / Showroom','commercial.retail.showroom'), + ('CR08 ','Shop','commercial.retail.shop'), + ('CR08GC','Garden Centre','commercial.retail.shop.gardenCentre'), + ('CR09','Other Licensed Premise / Vendor','commercial.retail.licensedPremises'), + ('CR10','Fast Food Outlet / Takeaway (Hot / Cold)','commercial.retail.takeaway'), + ('CR11','Automated Teller Machine (ATM)','commercial.retail.atm'), + ('CS','Storage Land','commercial.storageLand'), + ('CS01','General Storage Land','commercial.storageLand.general'), + ('CS02','Builders’ Yard','commercial.storageLand.building'), + ('CT','Transport','commercial.transport'), + ('CT01','Airfield / Airstrip / Airport / Air Transport Infrastructure Facility','commercial.transport.air'), + ('CT01AF','Airfield','commercial.transport.air.airfield'), + ('CT01AI','Air Transport Infrastructure Services','commercial.transport.air.infrastructure'), + ('CT01AP','Airport','commercial.transport.air.airport'), + ('CT01AY','Air Passenger Terminal','commercial.transport.air.passengerTerminal'), + ('CT01HS','Helicopter Station','commercial.transport.air.helicopterStation'), + ('CT01HT','Heliport / Helipad','commercial.transport.air.heliport'), + ('CT02','Bus Shelter','commercial.transport.bus'), + ('CT03','Car / Coach / Commercial Vehicle / Taxi Parking / Park And Ride Site','commercial.transport.parking'), + ('CT03PK','Public Park And Ride','commercial.transport.parking.parkAndRide'), + ('CT03PP','Public Car Parking','commercial.transport.parking.car'), + ('CT03PU','Public Coach Parking','commercial.transport.parking.coach'), + ('CT03VP','Public Commercial Vehicle Parking','commercial.transport.parking.commercialVehicle'), + ('CT04','Goods Freight Handling / Terminal','commercial.transport.freight'), + ('CT04AE','Air Freight Terminal','commercial.transport.freight.air'), + ('CT04CF','Container Freight','commercial.transport.freight.container'), + ('CT04RH','Road Freight Transport','commercial.transport.freight.road'), + ('CT04RT','Rail Freight Transport','commercial.transport.freight.rail'), + ('CT05','Marina','commercial.transport.marina'), + ('CT06','Mooring','commercial.transport.mooring'), + ('CT07','Railway Asset','commercial.transport.railAsset'), + ('CT08','Station / Interchange / Terminal / Halt','commercial.transport.terminal'), + ('CT08BC','Bus station','commercial.transport.terminal.bus'), + ('CT08RS','Train station','commercial.transport.terminal.train'), + ('CT08VH','Vehicular Rail Terminal','commercial.transport.terminal.vehicularRail'), + ('CT09','Transport Track / Way','commercial.transport.track'), + ('CT09CL','Cliff Railway','commercial.transport.track.cliff'), + ('CT09CX','Chair Lift / Cable Car / Ski Tow','commercial.transport.track.cable'), + ('CT09MO','Monorail','commercial.transport.track.monorail'), + ('CT10','Vehicle Storage','commercial.transport.storage'), + ('CT10BG','Boat Storage','commercial.transport.storage.boat'), + ('CT10BU','Bus / Coach Depot','commercial.transport.storage.bus'), + ('CT11','Transport Related Infrastructure','commercial.transport.infrastructure'), + ('CT11AD','Aqueduct','commercial.transport.infrastructure.aqueduct'), + ('CT11LK','Lock','commercial.transport.infrastructure.lock'), + ('CT11WE','Weir','commercial.transport.infrastructure.weir'), + ('CT11WG','Weighbridge / Load Gauge','commercial.transport.infrastructure.weighing'), + ('CT12','Overnight Lorry Park','commercial.transport.overnightLorryPark'), + ('CT13','Harbour / Port / Dock / Dockyard / Slipway / Landing Stage / Pier / Jetty / Pontoon / Terminal / Berthing / Quay','commercial.transport.dock'), + ('CT13FR','Passenger Ferry Terminal','commercial.transport.dock.ferry.passengers'), + ('CT13NB','Non-Tanker Nautical Berthing','commercial.transport.dock.generalBerth'), + ('CT13NF','Nautical Refuelling Facility','commercial.transport.dock.refuelling'), + ('CT13SA','Slipway','commercial.transport.dock.slipway'), + ('CT13SP','Ship Passenger Terminal','commercial.transport.dock.passenger'), + ('CT13TK','Tanker Berthing','commercial.transport.dock.tankerBerth'), + ('CT13VF','Vehicular Ferry Terminal','commercial.transport.dock.ferry.vehicles'), + ('CU','Utility','commercial.utility'), + ('CU01','Electricity Sub-Station','commercial.utility.SubStation'), + ('CU02','Landfill','commercial.utility.landfill'), + ('CU03','Power Station / Energy Production','commercial.utility.electricity'), + ('CU03ED','Electricity Distribution Facility','commercial.utility.electricity.distribution'), + ('CU03EP','Electricity Production Facility','commercial.utility.electricity.production'), + ('CU03WF','Wind Farm','commercial.utility.electricity.windFarm'), + ('CU03WU','Wind Turbine','commercial.utility.electricity.windTurbine'), + ('CU04','Pump House / Pumping Station / Water Tower','commercial.utility.water'), + ('CU04WC','Water Controlling / Pumping','commercial.utility.water.pump.control'), + ('CU04WD','Water Distribution / Pumping','commercial.utility.water.pump.distribution'), + ('CU04WM','Water Quality Monitoring','commercial.utility.water.qualityMonitoring'), + ('CU04WS','Water Storage','commercial.utility.water.storage'), + ('CU04WW','Waste Water Distribution / Pumping','commercial.utility.water.waste'), + ('CU06','Telecommunication','commercial.utility.telecoms'), + ('CU06TE','Telecommunications Mast','commercial.utility.telecoms.mast'), + ('CU06TX','Telephone Exchange','commercial.utility.telecoms.exhange'), + ('CU07','Water / Waste Water / Sewage Treatment Works','commercial.utility.waterTreatment'), + ('CU07WR','Waste Water Treatment','commercial.utility.waterTreatment.waste'), + ('CU07WT','Water Treatment','commercial.utility.waterTreatment.water'), + ('CU08','Gas / Oil Storage / Distribution','commercial.utility.oilGas'), + ('CU08GG','Gas Governor','commercial.utility.oilGas.gasGovernor'), + ('CU08GH','Gas Holder','commercial.utility.oilGas.gasHolder'), + ('CU08OT','Oil Terminal','commercial.utility.oilGas.oilTerminal'), + ('CU09','Other Utility Use','commercial.utility.other'), + ('CU09CQ','Cable Terminal Station','commercial.utility.other.cableTerminal'), + ('CU09OV','Observatory','commercial.utility.other.observatory'), + ('CU09RA','Radar Station','commercial.utility.other.radar'), + ('CU09SE','Satellite Earth Station','commercial.utility.other.satelliteEarth'), + ('CU10','Waste Management','commercial.utility.wasteManagement'), + ('CU11','Telephone Box','commercial.utility.publicPhone.box'), + ('CU11OP','Other Public Telephones','commercial.utility.publicPhone.other'), + ('CU12','Dam','commercial.utility.dam'), + ('CX','Emergency / Rescue Service','commercial.emergency'), + ('OA02NL','Nautical Navigation Beacon / Light','other.navigation.nautical.beacon'), + ('OA03','Aid To Road Navigation','other.navigation.road'), + ('OA03GP','Guide Post','other.navigation.guidePost'), + ('OC','Coastal Protection / Flood Prevention','other.coastal'), + ('OC01','Boulder Wall / Sea Wall','other.coastal.wall'), + ('OC02','Flood Gate / Flood Sluice Gate / Flood Valve','other.coastal.floodGate'), + ('OC03','Groyne','other.coastal.groyne'), + ('OC04','Rip-Rap','other.coastal.ripRap'), + ('OE','Emergency Support','other.emergency'), + ('OE01','Beach Office / First Aid Facility','other.emergency.firstAid'), + ('OE02','Emergency Telephone (Non Motorway)','other.emergency.telephone'), + ('OE03','Fire Alarm Structure / Fire Observation Tower / Fire Beater Facility','other.emergency.fire'), + ('OE04','Emergency Equipment Point / Emergency Siren / Warning Flag','other.emergency.warning'), + ('OE05','Lifeguard Facility','other.emergency.lifeguard'), + ('OE06','LIfe / Belt / Buoy / Float / Jacket / Safety Rope','other.emergency.floatAids'), + ('OF','Street Furniture','other.streetFurniture'), + ('OG','Agricultural Support Objects','other.agriculture'), + ('OG01','Fish Ladder / Lock / Pen / Trap','other.agriculture.fishPen'), + ('OG02','Livestock Pen / Dip','other.agriculture.livestockPen'), + ('OG03','Currick','other.agriculture.currick'), + ('OG04','Slurry Bed / Pit','other.agriculture.slurry'), + ('OH','Historical Site / Object','other.historic'), + ('OH01','Historic Structure / Object','other.historic.structure'), + ('OI','Industrial Support','other.industrial'), + ('OI01','Adit / Incline / Level','other.industrial.aditIncline'), + ('OI02','Caisson / Dry Dock / Grid','other.industrial.caissonDock'), + ('OI03','Channel / Conveyor / Conduit / Pipe','other.industrial.channel'), + ('OI04','Chimney / Flue','other.industrial.chimney'), + ('OI05','Crane / Hoist / Winch / Material Elevator','other.industrial.crane'), + ('OI06','Flare Stack','other.industrial.flareStack'), + ('OI07','Hopper / Silo / Cistern / Tank','other.industrial.siloTank'), + ('OI08','Grab / Skip / Other Industrial Waste Machinery / Discharging','other.industrial.discharge'), + ('OI09','Kiln / Oven / Smelter','other.industrial.kiln'), + ('OI10','Manhole / Shaft','other.industrial.manholeShaft'), + ('OI11','Industrial Overflow / Sluice / Valve / Valve Housing','other.industrial.overflowSluiceValve'), + ('OI12','Cooling Tower','other.industrial.coolingTower'), + ('OI13','Solar Panel / Waterwheel','other.industrial.solarPanel'), + ('OI14','Telephone Pole / Post','other.industrial.pylon.telecom'), + ('OI15','Electricity Distribution Pole / Pylon','other.industrial.pylon.electricity'), + ('ON','Significant Natural Object','other.natural'), + ('ON01','Boundary / Significant / Historic Tree / Pollard','other.natural.tree'), + ('ON02','Boundary / Significant Rock / Boulder','other.natural.rock'), + ('ON03','Natural Hole (Blow / Shake / Swallow)','other.natural.hole'), + ('OO','Ornamental / Cultural Object','other.ornamental'), + ('OO02','Mausoleum / Tomb / Grave','other.ornamental.tomb'), + ('OO03','Simple Ornamental Object','other.ornamental.object'), + ('OO04','Maze','other.ornamental.maze'), + ('OP','Sport / Leisure Support','other.leisure'), + ('OP01','Butt / Hide','other.leisure.hide'), + ('OP02','Gallop / Ride','other.leisure.gallop'), + ('OP03','Miniature Railway','other.leisure.modelRailway'), + ('OR','Royal Mail Infrastructure','other.mail'), + ('OR01','Postal Box','other.mail.postBox'), + ('OR02','Postal Delivery Box / Pouch','other.mail.deliveryBox'), + ('OR03','PO Box','other.mail.POBox'), + ('OR04','Additional Mail / Packet Addressee','other.mail.additionalAddressee'), + ('OS','Scientific / Observation Support','other.scientific'), + ('OS01','Meteorological Station / Equipment','other.scientific.meteo'), + ('OS02','Radar / Satellite Infrastructure','other.scientific.radarSatellite'), + ('OS03','Telescope / Observation Infrastructure / Astronomy','other.scientific.astronomy'), + ('OT','Transport Support','other.transport'), + ('OT01','Cattle Grid / Ford','other.transport.cattleGridFord'), + ('OT02','Elevator / Escalator / Steps','other.transport.stepsLiftEscalator'), + ('OT03','Footbridge / Walkway','other.transport.bridge'), + ('OT04','Pole / Post / Bollard (Restricting Vehicular Access)','other.transport.post'), + ('OT05','Subway / Underpass','other.transport.subway'), + ('OT06','Customs Inspection Facility','other.transport.customs'), + ('OT07','Lay-By','other.transport.layby'), + ('OT08','Level Crossing','other.transport.rail.crossing.vehicles'), + ('OT09','Mail Pick Up','other.transport.mailPickUp'), + ('OT10','Railway Pedestrian Crossing','other.transport.rail.crossing.pedestrian'), + ('OT11','Railway Buffer','other.transport.rail.buffer'), + ('OT12','Rail Drag','other.transport.rail.drag'), + ('OT13','Rail Infrastructure Services','other.transport.rail.infrastructure'), + ('OT14','Rail Kilometre Distance Marker','other.transport.rail.marker.km'), + ('OT15','Railway Lighting','other.transport.rail.lighting'), + ('OT16','Rail Mile Distance Marker','other.transport.rail.market.mile'), + ('OT17','Railway Turntable','other.transport.rail.turntable'), + ('OT18','Rail Weighbridge','other.transport.rail.weighbridge'), + ('OT19','Rail Signalling','other.transport.rail.signals'), + ('OT20','Railway Traverse','other.transport.rail.traverse'), + ('OT21','Goods Tramway','other.transport.goodsTramway'), + ('OT22','Road Drag','other.transport.road.drag'), + ('OT23','Vehicle Dip','other.transport.road.vehicleDip'), + ('OT24','Road Turntable','other.transport.road.turntable'), + ('OT25','Road Mile Distance Marker','other.transport.road.marker.mile'), + ('OT26','Road Kilometre Distance Marker','other.transport.road.market.km'), + ('OT27','Road Infrastructure Services','other.transport.road.infrastructure'), + ('OU','Unsupported Site','other.unsupported'), + ('OU01','Cycle Parking Facility','other.unsupported.cycleParking'), + ('OU04','Picnic / Barbeque Site','other.unsupported.picnic'), + ('OU05','Travelling Persons Site','other.unsupported.travellingPersons'), + ('OU08','Shelter (Not Including Bus Shelter)','other.unsupported.shelter'), + ('PS','Street Record','parent.street'), + ('R','Residential','residential'), + ('RB','Ancillary Building','residential.building'), + ('RC','Car Park Space','residential.carParkingSpace'), + ('RC01','Allocated Parking','residential.carParkingSpace.allocated'), + ('RD','Residential dwelling','residential.dwelling'), + ('RD01','Caravan','residential.dwelling.caravan'), + ('RD02','Detached','residential.dwelling.house.detached'), + ('RD03','Semi-detached','residential.dwelling.house.semiDetached'), + ('RD04','Terrace','residential.dwelling.house.terrace'), + ('RD06','Flat','residential.dwelling.flat'), + ('RD07','House Boat','residential.dwelling.boat'), + ('RD08','Sheltered Accommodation','residential.dwelling.shelteredAccommodation'), + ('RD10','Privately Owned Holiday Caravan / Chalet','residential.dwelling.holiday'), + ('RG','Garage','residential.garage'), + ('RG02','Lock-Up Garage / Garage Court','residential.garage'), + ('RH','House In Multiple Occupation','residential.HMO'), + ('RH01','HMO Parent','residential.HMO.parent'), + ('RH02','HMO Bedsit / Other Non Self Contained Accommodation','residential.HMO.bedsit'), + ('RH03','HMO Not Further Divided','residential.HMO.undivided'), + ('RI','Residential Institution','residential.institution'), + ('RI01','Care / Nursing Home','residential.institution.care'), + ('RI02','Communal Residence','residential.institution.communal'), + ('RI02NC','Non-Commercial Lodgings','residential.institution.noncommercial'), + ('RI02RC','Religious Community','residential.institution.religious'), + ('RI03','Residential Education','residential.institution.education'), + ('U','Unclassified','unclassified'), + ('UC','Awaiting Classification','unclassified.awaitingclassification'), + ('UP','Pending Internal Investigation','unclassified.pendingInvestigation'), + ('X','Dual Use','dualUse'), + ('Z','Object of Interest','object'), + ('ZA','Archaeological Dig Site','object.archaeological'), + ('ZM','Monument','object.monument'), + ('ZM01','Obelisk / Milestone / Standing Stone','object.monument.vertical'), + ('ZM01OB','Obelisk','object.monument.vertical.obelisk'), + ('ZM01ST','Standing Stone','object.monument.vertical.standingStone'), + ('ZM02','Memorial / Market Cross','object.monument.memorial'), + ('ZM03','Statue','object.monument.statue'), + ('ZM04','Castle / Historic Ruin','object.monument.ruin'), + ('ZM05','Other Structure','object.monument.other'), + ('ZM05BS','Boundary Stone','object.monument.other.boundaryStone'), + ('ZM05CE','Cascade / Fountain','object.monument.other.waterFeature'), + ('ZM05PN','Permanent Art Display / Sculpture','object.monument.other.art'), + ('ZM05WI','Windmill (Inactive)','object.monument.other.windmill'), + ('ZS','Stately Home','object.statelyHome'), + ('ZU','Underground Feature','object.underground'), + ('ZU01','Cave','object.underground.cave'), + ('ZU04','Pothole / Natural Hole','object.underground.hole'), + ('ZV','Other Underground Feature','object.underground.other'), + ('ZV01','Cellar','object.underground.other.cellar'), + ('ZV02','Disused Mine','object.underground.other.extraction'), + ('ZV02MI','Mineral Mining / Inactive','object.underground.other.extraction.mine'), + ('ZV02OI','Oil And / Gas Extraction/ Inactive','object.underground.other.extraction.oilGas'), + ('ZV02QI','Mineral Quarrying And / Open Extraction / Inactive','object.underground.other.extraction.quarry'), + ('ZV03','Well / Spring','object.underground.other.water'), + ('ZV03SG','Spring','object.underground.other.water.spring'), + ('ZV03WL','Well','object.underground.other.water.well'), + ('ZW','Place Of Worship','object.religious'), + ('ZW99','Religious building','object.religious.building'), + ('ZW99AB','Abbey','object.religious.building.abbey'), + ('ZW99CA','Cathedral','object.religious.building.cathedral'), + ('ZW99CH','Church','object.religious.building.church'), + ('ZW99CP','Chapel','object.religious.building.chapel'), + ('ZW99GU','Gurdwara','object.religious.building.gurdwara'), + ('ZW99KH','Kingdom Hall','object.religious.building.kingdomHall'), + ('ZW99LG','Lych Gate','object.religious.building.lychGate'), + ('ZW99MQ','Mosque','object.religious.building.mosque'), + ('ZW99MT','Minster','object.religious.building.minster'), + ('ZW99SU','Stupa','object.religious.building.stupa'), + ('ZW99SY','Synagogue','object.religious.building.synagogue'), + ('ZW99TP','Temple','object.religious.building.temple'), + ('P','Parent Shell',null), + ('PP','Property Shell',null); diff --git a/hasura.planx.uk/migrations/1721047343459_update_blpu_codes_values/up.sql b/hasura.planx.uk/migrations/1721047343459_update_blpu_codes_values/up.sql new file mode 100644 index 0000000000..374641a390 --- /dev/null +++ b/hasura.planx.uk/migrations/1721047343459_update_blpu_codes_values/up.sql @@ -0,0 +1,468 @@ +TRUNCATE table "public"."blpu_codes"; +INSERT INTO "public"."blpu_codes" (code, description, value) VALUES + ('C','Commercial','commercial'), + ('CA','Agricultural','commercial.agriculture'), + ('CA01','Farm / Non-Residential Agricultural Development','commercial.agriculture.farm'), + ('CA02','Fishery','commercial.agriculture.fish'), + ('CA02FF','Fish Farming','commercial.agriculture.fish.farm'), + ('CA02FH','Fish Hatchery','commercial.agriculture.fish.hatchery'), + ('CA02FP','Fish Processing','commercial.agriculture.fish.processing'), + ('CA02OY','Oyster / Mussel Bed','commercial.agriculture.fish.oysters'), + ('CA03','Horticulture','commercial.horticulture'), + ('CA03SH','Smallholding','commercial.horticulture.smallholding'), + ('CA03VY','Vineyard','commercial.horticulture.vineyard'), + ('CA03WB','Watercress Bed','commercial.horticulture.watercress'), + ('CA04','Slaughter House / Abattoir','commercial.abattoir'), + ('CB','Commercial Ancillary Development','commercial.ancilliary'), + ('CC','Community Services','commercial.community'), + ('CC02','Law Court','commercial.community.court'), + ('CC03','Prison','commercial.community.prison'), + ('CC03HD','HM Detention Centre','commercial.community.prison.detention'), + ('CC03PR','HM Prison Service','commercial.community.prison.service'), + ('CC03SC','Secure Residential Accommodation','commercial.community.prison.secureResidential'), + ('CC04','Public / Village Hall / Other Community Facility','commercial.community.hall'), + ('CC04YR','Youth Recreational / Social Club','commercial.community.hall.club'), + ('CC05','Public Convenience','commercial.community.wc'), + ('CC06','Cemetery / Crematorium / Graveyard. In Current Use.','commercial.community.cemetary'), + ('CC06CB','Columbarium','commercial.community.cemetary.columbarium'), + ('CC06CN','Crematorium','commercial.community.cemetary.crematorium'), + ('CC06CR','Chapel Of Rest','commercial.community.cemetary.chapelOfRest'), + ('CC06CY','Cemetery','commercial.community.cemetary.cemetary'), + ('CC06MC','Military Cemetery','commercial.community.cemetary.military'), + ('CC06MY','Mortuary','commercial.community.cemetary.mortuary'), + ('CC07','Church Hall / Religious Meeting Place / Religious Hall','commercial.community.religious'), + ('CC08','Community Service Centre / Office','commercial.community.services'), + ('CC09','Public Household Waste Recycling Centre (HWRC)','commercial.community.HWRC'), + ('CC10','Recycling Site','commercial.community.recycling'), + ('CC11','CCTV','commercial.community.CCTV'), + ('CC12','Job Centre','commercial.community.employment'), + ('CE','Education','commercial.education'), + ('CE01','College','commercial.education.college'), + ('CE01FE','Further Education','commercial.education.college.further'), + ('CE01HE','Higher Education','commercial.education.college.higher'), + ('CE02','Children’s Nursery / Crèche','commercial.education.nursery'), + ('CE03','Preparatory / First / Primary / Infant / Junior / Middle School','commercial.education.school'), + ('CE03FS','First School','commercial.education.school.first'), + ('CE03IS','Infant School','commercial.education.school.infant'), + ('CE03JS','Junior School','commercial.education.school.junior'), + ('CE03MS','Middle School','commercial.education.school.middle'), + ('CE03NP','Non State Primary / Preparatory School','commercial.education.school.primary.private'), + ('CE03PS','Primary School','commercial.education.school.primary.state'), + ('CE04','Secondary / High School','commercial.education.secondarySchool'), + ('CE04NS','Non State Secondary School','commercial.education.secondarySchool.private'), + ('CE04SS','Secondary School','commercial.education.secondarySchool.state'), + ('CE05','University','commercial.education.university'), + ('CE06','Special Needs Establishment.','commercial.education.specialNeeds'), + ('CE07','Other Educational Establishment','commercial.education.other'), + ('CH','Hotel / Motel / Boarding / Guest House','commercial.guest'), + ('CH01','Boarding House / Guest House / Bed And Breakfast / Youth Hostel','commercial.guest.hostel'), + ('CH01YH','Youth Hostel','commercial.guest.hostel.youth'), + ('CH02','Holiday Let / Accomodation / Short-Term Let','commercial.guest.shortLet'), + ('CH03','Hotel / Motel','commercial.guest.hotel'), + ('CI','Industrial Applicable to manufacturing, engineering, maintenance, storage / wholesale distribution and extraction sites','commercial.industrial'), + ('CI01','Factory/Manufacturing','commercial.industrial.manufacturing'), + ('CI01AW','Aircraft Works','commercial.industrial.manufacturing.aircraft'), + ('CI01BB','Boat Building','commercial.industrial.manufacturing.boats'), + ('CI01BR','Brick Works','commercial.industrial.manufacturing.bricks'), + ('CI01BW','Brewery','commercial.industrial.manufacturing.beer'), + ('CI01CD','Cider Manufacture','commercial.industrial.manufacturing.cider'), + ('CI01CM','Chemical Works','commercial.industrial.manufacturing.chemicals'), + ('CI01CW','Cement Works','commercial.industrial.manufacturing.cement'), + ('CI01DA','Dairy Processing','commercial.industrial.manufacturing.dairy'), + ('CI01DY','Distillery','commercial.industrial.manufacturing.distillery'), + ('CI01FL','Flour Mill','commercial.industrial.manufacturing.flour'), + ('CI01FO','Food Processing','commercial.industrial.manufacturing.food'), + ('CI01GW','Glassworks','commercial.industrial.manufacturing.glass'), + ('CI01MG','Manufacturing','commercial.industrial.manufacturing.other'), + ('CI01OH','Oast House','commercial.industrial.manufacturing.hops'), + ('CI01OR','Oil Refining','commercial.industrial.manufacturing.oil'), + ('CI01PG','Pottery Manufacturing','commercial.industrial.manufacturing.pottery'), + ('CI01PM','Paper Mill','commercial.industrial.manufacturing.paper'), + ('CI01PW','Printing Works','commercial.industrial.manufacturing.printing'), + ('CI01SR','Sugar Refinery','commercial.industrial.manufacturing.sugar'), + ('CI01SW','Steel Works','commercial.industrial.manufacturing.steel'), + ('CI01TL','Timber Mill','commercial.industrial.manufacturing.timber'), + ('CI01WN','Winery','commercial.industrial.manufacturing.wine'), + ('CI01YD','Shipyard','commercial.industrial.manufacturing.ships'), + ('CI02','Mineral / Ore Working / Quarry / Mine','commercial.industrial.extraction'), + ('CI02MA','Mineral Mining / Active','commercial.industrial.extraction.mining'), + ('CI02MD','Mineral Distribution / Storage','commercial.industrial.extraction.distribution'), + ('CI02MP','Mineral Processing','commercial.industrial.extraction.processing'), + ('CI02OA','Oil / Gas Extraction / Active','commercial.industrial.extraction.oilGas'), + ('CI02QA','Mineral Quarrying / Open Extraction / Active','commercial.industrial.extraction.quarrying'), + ('CI03','Workshop / Light Industrial','commercial.industrial.light'), + ('CI03GA','Servicing Garage','commercial.industrial.light.garage'), + ('CI04','Warehouse / Store / Storage Depot','commercial.industrial.light.storage'), + ('CI04CS','Crop Handling / Storage','commercial.industrial.light.storage.crops'), + ('CI04PL','Postal Sorting / Distribution','commercial.industrial.light.storage.post'), + ('CI04SO','Solid Fuel Storage','commercial.industrial.light.storage.solidFuel'), + ('CI04TS','Timber Storage','commercial.industrial.light.storage.timber'), + ('CI05','Wholesale Distribution','commercial.industrial.distribution'), + ('CI05SF','Solid Fuel Distribution','commercial.industrial.distribution.solidFueld'), + ('CI05TD','Timber Distribution','commercial.industrial.distribution.timber'), + ('CI06','Recycling Plant','commercial.industrial.recycling'), + ('CI07','Incinerator / Waste Transfer Station','commercial.industrial.incineration'), + ('CI08','Maintenance Depot','commercial.industrial.maintenanceDepot'), + ('CL','Leisure - Applicable to recreational sites and enterprises','commercial.leisure'), + ('CL01','Amusements','commercial.leisure.amusements'), + ('CL01LP','Leisure Pier','commercial.leisure.amusements.pier'), + ('CL02','Holiday / Campsite','commercial.leisure.holiday'), + ('CL02CG','Camping','commercial.leisure.holiday.camping'), + ('CL02CV','Caravanning','commercial.leisure.holiday.caravanning'), + ('CL02HA','Holiday Accommodation','commercial.leisure.holiday.accommodation'), + ('CL02HO','Holiday Centre','commercial.leisure.holiday.centre'), + ('CL02YC','Youth Organisation Camp','commercial.leisure.holiday.youth'), + ('CL03','Library','commercial.leisure.library'), + ('CL03RR','Reading Room','commercial.leisure.library.readingRoom'), + ('CL04','Museum / Gallery','commercial.leisure.museum'), + ('CL04AC','Art Centre / Gallery','commercial.leisure.museum.art'), + ('CL04AM','Aviation Museum','commercial.leisure.museum.aviation'), + ('CL04HG','Heritage Centre','commercial.leisure.museum.heritage'), + ('CL04IM','Industrial Museum','commercial.leisure.museum.industrial'), + ('CL04MM','Military Museum','commercial.leisure.museum.military'), + ('CL04NM','Maritime Museum','commercial.leisure.museum.maritime'), + ('CL04SM','Science Museum','commercial.leisure.museum.science'), + ('CL04TM','Transport Museum','commercial.leisure.museum.transport'), + ('CL06','Indoor / Outdoor Leisure / Sporting Activity / Centre','commercial.leisure.sport'), + ('CL06AH','Athletics Facility','commercial.leisure.sport.athletics'), + ('CL06BF','Bowls Facility','commercial.leisure.sport.bowls'), + ('CL06CK','Cricket Facility','commercial.leisure.sport.cricket'), + ('CL06CU','Curling Facility','commercial.leisure.sport.curling'), + ('CL06DS','Diving / Swimming Facility','commercial.leisure.sport.swimming'), + ('CL06EQ','Equestrian Sports Facility','commercial.leisure.sport.equestrian'), + ('CL06FB','Football Facility','commercial.leisure.sport.football'), + ('CL06FI','Fishing / Angling Facility','commercial.leisure.sport.fishing'), + ('CL06GF','Golf Facility','commercial.leisure.sport.golf'), + ('CL06GL','Gliding Facility','commercial.leisure.sport.gliding'), + ('CL06GR','Greyhound Racing Facility','commercial.leisure.sport.dogracing'), + ('CL06HF','Hockey Facility','commercial.leisure.sport.hockey'), + ('CL06HR','Horse Racing Facility','commercial.leisure.sport.horseracing'), + ('CL06HV','Historic Vessel / Aircraft / Vehicle','commercial.leisure.sport.historicVehicles'), + ('CL06LS','Activity / Leisure / Sports Centre','commercial.leisure.sport.centre'), + ('CL06ME','Model Sports Facility','commercial.leisure.sport.model'), + ('CL06MF','Motor Sports Facility','commercial.leisure.sport.motor'), + ('CL06PF','Playing Field','commercial.leisure.sport.playingField'), + ('CL06QS','Racquet Sports Facility','commercial.leisure.sport.racquet'), + ('CL06RF','Rugby Facility','commercial.leisure.sport.rugby'), + ('CL06RG','Recreation Ground','commercial.leisure.sport.recreationGround'), + ('CL06SI','Shinty Facility','commercial.leisure.sport.shinty'), + ('CL06SK','Skateboarding Facility','commercial.leisure.sport.skateboarding'), + ('CL06SX','Civilian Firing Facility','commercial.leisure.sport.firing'), + ('CL06TB','Tenpin Bowling Facility','commercial.leisure.sport.tenpin'), + ('CL06TN','Public Tennis Court','commercial.leisure.sport.tennis'), + ('CL06WA','Water Sports Facility','commercial.leisure.sport.water'), + ('CL06WP','Winter Sports Facility','commercial.leisure.sport.winter'), + ('CL06WY','Wildlife Sports Facility','commercial.leisure.sport.wildlife'), + ('CL06YF','Cycling Sports Facility','commercial.leisure.sport.cycling'), + ('CL07','Bingo Hall / Cinema / Conference / Exhibition Centre / Theatre / Concert Hall','commercial.leisure.entertainment'), + ('CL07CI','Cinema','commercial.leisure.entertainment.cinema'), + ('CL07EN','Entertainment Complex','commercial.leisure.entertainment.mixed'), + ('CL07EX','Conference / Exhibition Centre','commercial.leisure.entertainment.exhibition'), + ('CL07TH','Theatre','commercial.leisure.entertainment.theatre'), + ('CL08','Zoo / Theme Park','commercial.leisure.park.zoo'), + ('CL08AK','Amusement Park','commercial.leisure.park.amusement'), + ('CL08AQ','Aquatic Attraction','commercial.leisure.park.aquatic'), + ('CL08MX','Model Village Site','commercial.leisure.park.model'), + ('CL08WZ','Wildlife / Zoological Park','commercial.leisure.park.wildlife'), + ('CL09','Beach Hut (Recreational, Non-Residential Use Only)','commercial.leisure.beachHut'), + ('CL10','Licensed Private Members’ Club','commercial.leisure.club.private'), + ('CL10RE','Recreational / Social Club','commercial.leisure.club.social'), + ('CL11','Arena / Stadium','commercial.leisure.arena'), + ('CL11SD','Stadium','commercial.leisure.arena.stadium'), + ('CL11SJ','Showground','commercial.leisure.arena.showground'), + ('CM','Medical','commercial.medical'), + ('CM01','Dentist','commercial.medical.dentist'), + ('CM02','General Practice Surgery / Clinic','commercial.medical.GP'), + ('CM02HC','Health Centre','commercial.medical.healthCentre'), + ('CM02HL','Health Care Services','commercial.medical.healthServices'), + ('CM03','Hospital / Hospice','commercial.medical.care'), + ('CM03HI','Care home/Hospice','commercial.medical.care.home'), + ('CM03HP','Hospital','commercial.medical.care.hospital'), + ('CM04','Medical / Testing / Research Laboratory','commercial.medical.lab'), + ('CM05','Professional Medical Service','commercial.medical.professional'), + ('CM05ZS','Assessment / Development Services','commercial.medical.assessment'), + ('CN','Animal Centre','commercial.animals'), + ('CN01','Cattery / Kennel','commercial.animals.kennelsCattery'), + ('CN02','Animal Services','commercial.animals.services'), + ('CN02AX','Animal Quarantining','commercial.animals.services.quarantine'), + ('CN03','Equestrian','commercial.animals.equestrian'), + ('CN03HB','Horse Racing / Breeding Stable','commercial.animals.equestrian.racing'), + ('CN03SB','Commercial Stabling / Riding','commercial.animals.equestrian.riding'), + ('CN04','Vet / Animal Medical Treatment','commercial.animals.vet'), + ('CN05','Animal / Bird / Marine Sanctuary','commercial.animals.sanctuary'), + ('CN05AN','Animal Sanctuary','commercial.animals.sanctuary.animals'), + ('CN05MR','Marine Sanctuary','commercial.animals.sanctuary.marine'), + ('CO','Office','commercial.office'), + ('CO01','Office / Work Studio','commercial.office.workspace'), + ('CO01EM','Embassy /, High Commission / Consulate','commercial.office.workspace.embassy'), + ('CO01FM','Film Studio','commercial.office.workspace.film'), + ('CO01GV','Central Government Service','commercial.office.workspace.gov.national'), + ('CO01LG','Local Government Service','commercial.office.workspace.gov.local'), + ('CO02','Broadcasting (TV / Radio)','commercial.office.broadcasting'), + ('CR','Retail','commercial.retail'), + ('CR01','Bank / Financial Service','commercial.retail.financial'), + ('CR02','Retail Service Agent','commercial.retail.services'), + ('CR02PO','Post Office','commercial.retail.post'), + ('CR04','Market (Indoor / Outdoor)','commercial.retail.market'), + ('CR04FK','Fish Market','commercial.retail.market.fish'), + ('CR04FV','Fruit / Vegetable Market','commercial.retail.market.fruit'), + ('CR04LV','Livestock Market','commercial.retail.market.livestock'), + ('CR05','Petrol Filling Station','commercial.retail.fuel'), + ('CR06','Public House / Bar / Nightclub','commercial.retail.drinking'), + ('CR07','Restaurant / Cafeteria','commercial.retail.restaurant'), + ('CR08','Shop / Showroom','commercial.retail.showroom'), + ('CR08 ','Shop','commercial.retail.shop'), + ('CR08GC','Garden Centre','commercial.retail.shop.gardenCentre'), + ('CR09','Other Licensed Premise / Vendor','commercial.retail.licensedPremises'), + ('CR10','Fast Food Outlet / Takeaway (Hot / Cold)','commercial.retail.takeaway'), + ('CR11','Automated Teller Machine (ATM)','commercial.retail.atm'), + ('CS','Storage Land','commercial.storageLand'), + ('CS01','General Storage Land','commercial.storageLand.general'), + ('CS02','Builders’ Yard','commercial.storageLand.building'), + ('CT','Transport','commercial.transport'), + ('CT01','Airfield / Airstrip / Airport / Air Transport Infrastructure Facility','commercial.transport.air'), + ('CT01AF','Airfield','commercial.transport.air.airfield'), + ('CT01AI','Air Transport Infrastructure Services','commercial.transport.air.infrastructure'), + ('CT01AP','Airport','commercial.transport.air.airport'), + ('CT01AY','Air Passenger Terminal','commercial.transport.air.passengerTerminal'), + ('CT01HS','Helicopter Station','commercial.transport.air.helicopterStation'), + ('CT01HT','Heliport / Helipad','commercial.transport.air.heliport'), + ('CT02','Bus Shelter','commercial.transport.bus'), + ('CT03','Car / Coach / Commercial Vehicle / Taxi Parking / Park And Ride Site','commercial.transport.parking'), + ('CT03PK','Public Park And Ride','commercial.transport.parking.parkAndRide'), + ('CT03PP','Public Car Parking','commercial.transport.parking.car'), + ('CT03PU','Public Coach Parking','commercial.transport.parking.coach'), + ('CT03VP','Public Commercial Vehicle Parking','commercial.transport.parking.commercialVehicle'), + ('CT04','Goods Freight Handling / Terminal','commercial.transport.freight'), + ('CT04AE','Air Freight Terminal','commercial.transport.freight.air'), + ('CT04CF','Container Freight','commercial.transport.freight.container'), + ('CT04RH','Road Freight Transport','commercial.transport.freight.road'), + ('CT04RT','Rail Freight Transport','commercial.transport.freight.rail'), + ('CT05','Marina','commercial.transport.marina'), + ('CT06','Mooring','commercial.transport.mooring'), + ('CT07','Railway Asset','commercial.transport.railAsset'), + ('CT08','Station / Interchange / Terminal / Halt','commercial.transport.terminal'), + ('CT08BC','Bus station','commercial.transport.terminal.bus'), + ('CT08RS','Train station','commercial.transport.terminal.train'), + ('CT08VH','Vehicular Rail Terminal','commercial.transport.terminal.vehicularRail'), + ('CT09','Transport Track / Way','commercial.transport.track'), + ('CT09CL','Cliff Railway','commercial.transport.track.cliff'), + ('CT09CX','Chair Lift / Cable Car / Ski Tow','commercial.transport.track.cable'), + ('CT09MO','Monorail','commercial.transport.track.monorail'), + ('CT10','Vehicle Storage','commercial.transport.storage'), + ('CT10BG','Boat Storage','commercial.transport.storage.boat'), + ('CT10BU','Bus / Coach Depot','commercial.transport.storage.bus'), + ('CT11','Transport Related Infrastructure','commercial.transport.infrastructure'), + ('CT11AD','Aqueduct','commercial.transport.infrastructure.aqueduct'), + ('CT11LK','Lock','commercial.transport.infrastructure.lock'), + ('CT11WE','Weir','commercial.transport.infrastructure.weir'), + ('CT11WG','Weighbridge / Load Gauge','commercial.transport.infrastructure.weighing'), + ('CT12','Overnight Lorry Park','commercial.transport.overnightLorryPark'), + ('CT13','Harbour / Port / Dock / Dockyard / Slipway / Landing Stage / Pier / Jetty / Pontoon / Terminal / Berthing / Quay','commercial.transport.dock'), + ('CT13FR','Passenger Ferry Terminal','commercial.transport.dock.ferry.passengers'), + ('CT13NB','Non-Tanker Nautical Berthing','commercial.transport.dock.generalBerth'), + ('CT13NF','Nautical Refuelling Facility','commercial.transport.dock.refuelling'), + ('CT13SA','Slipway','commercial.transport.dock.slipway'), + ('CT13SP','Ship Passenger Terminal','commercial.transport.dock.passenger'), + ('CT13TK','Tanker Berthing','commercial.transport.dock.tankerBerth'), + ('CT13VF','Vehicular Ferry Terminal','commercial.transport.dock.ferry.vehicles'), + ('CU','Utility','commercial.utility'), + ('CU01','Electricity Sub-Station','commercial.utility.SubStation'), + ('CU02','Landfill','commercial.utility.landfill'), + ('CU03','Power Station / Energy Production','commercial.utility.electricity'), + ('CU03ED','Electricity Distribution Facility','commercial.utility.electricity.distribution'), + ('CU03EP','Electricity Production Facility','commercial.utility.electricity.production'), + ('CU03WF','Wind Farm','commercial.utility.electricity.windFarm'), + ('CU03WU','Wind Turbine','commercial.utility.electricity.windTurbine'), + ('CU04','Pump House / Pumping Station / Water Tower','commercial.utility.water'), + ('CU04WC','Water Controlling / Pumping','commercial.utility.water.pump.control'), + ('CU04WD','Water Distribution / Pumping','commercial.utility.water.pump.distribution'), + ('CU04WM','Water Quality Monitoring','commercial.utility.water.qualityMonitoring'), + ('CU04WS','Water Storage','commercial.utility.water.storage'), + ('CU04WW','Waste Water Distribution / Pumping','commercial.utility.water.waste'), + ('CU06','Telecommunication','commercial.utility.telecoms'), + ('CU06TE','Telecommunications Mast','commercial.utility.telecoms.mast'), + ('CU06TX','Telephone Exchange','commercial.utility.telecoms.exhange'), + ('CU07','Water / Waste Water / Sewage Treatment Works','commercial.utility.waterTreatment'), + ('CU07WR','Waste Water Treatment','commercial.utility.waterTreatment.waste'), + ('CU07WT','Water Treatment','commercial.utility.waterTreatment.water'), + ('CU08','Gas / Oil Storage / Distribution','commercial.utility.oilGas'), + ('CU08GG','Gas Governor','commercial.utility.oilGas.gasGovernor'), + ('CU08GH','Gas Holder','commercial.utility.oilGas.gasHolder'), + ('CU08OT','Oil Terminal','commercial.utility.oilGas.oilTerminal'), + ('CU09','Other Utility Use','commercial.utility.other'), + ('CU09CQ','Cable Terminal Station','commercial.utility.other.cableTerminal'), + ('CU09OV','Observatory','commercial.utility.other.observatory'), + ('CU09RA','Radar Station','commercial.utility.other.radar'), + ('CU09SE','Satellite Earth Station','commercial.utility.other.satelliteEarth'), + ('CU10','Waste Management','commercial.utility.wasteManagement'), + ('CU11','Telephone Box','commercial.utility.publicPhone.box'), + ('CU11OP','Other Public Telephones','commercial.utility.publicPhone.other'), + ('CU12','Dam','commercial.utility.dam'), + ('CX','Emergency / Rescue Service','commercial.emergency'), + ('OA02NL','Nautical Navigation Beacon / Light','other.navigation.nautical.beacon'), + ('OA03','Aid To Road Navigation','other.navigation.road'), + ('OA03GP','Guide Post','other.navigation.guidePost'), + ('OC','Coastal Protection / Flood Prevention','other.coastal'), + ('OC01','Boulder Wall / Sea Wall','other.coastal.wall'), + ('OC02','Flood Gate / Flood Sluice Gate / Flood Valve','other.coastal.floodGate'), + ('OC03','Groyne','other.coastal.groyne'), + ('OC04','Rip-Rap','other.coastal.ripRap'), + ('OE','Emergency Support','other.emergency'), + ('OE01','Beach Office / First Aid Facility','other.emergency.firstAid'), + ('OE02','Emergency Telephone (Non Motorway)','other.emergency.telephone'), + ('OE03','Fire Alarm Structure / Fire Observation Tower / Fire Beater Facility','other.emergency.fire'), + ('OE04','Emergency Equipment Point / Emergency Siren / Warning Flag','other.emergency.warning'), + ('OE05','Lifeguard Facility','other.emergency.lifeguard'), + ('OE06','LIfe / Belt / Buoy / Float / Jacket / Safety Rope','other.emergency.floatAids'), + ('OF','Street Furniture','other.streetFurniture'), + ('OG','Agricultural Support Objects','other.agriculture'), + ('OG01','Fish Ladder / Lock / Pen / Trap','other.agriculture.fishPen'), + ('OG02','Livestock Pen / Dip','other.agriculture.livestockPen'), + ('OG03','Currick','other.agriculture.currick'), + ('OG04','Slurry Bed / Pit','other.agriculture.slurry'), + ('OH','Historical Site / Object','other.historic'), + ('OH01','Historic Structure / Object','other.historic.structure'), + ('OI','Industrial Support','other.industrial'), + ('OI01','Adit / Incline / Level','other.industrial.aditIncline'), + ('OI02','Caisson / Dry Dock / Grid','other.industrial.caissonDock'), + ('OI03','Channel / Conveyor / Conduit / Pipe','other.industrial.channel'), + ('OI04','Chimney / Flue','other.industrial.chimney'), + ('OI05','Crane / Hoist / Winch / Material Elevator','other.industrial.crane'), + ('OI06','Flare Stack','other.industrial.flareStack'), + ('OI07','Hopper / Silo / Cistern / Tank','other.industrial.siloTank'), + ('OI08','Grab / Skip / Other Industrial Waste Machinery / Discharging','other.industrial.discharge'), + ('OI09','Kiln / Oven / Smelter','other.industrial.kiln'), + ('OI10','Manhole / Shaft','other.industrial.manholeShaft'), + ('OI11','Industrial Overflow / Sluice / Valve / Valve Housing','other.industrial.overflowSluiceValve'), + ('OI12','Cooling Tower','other.industrial.coolingTower'), + ('OI13','Solar Panel / Waterwheel','other.industrial.solarPanel'), + ('OI14','Telephone Pole / Post','other.industrial.pylon.telecom'), + ('OI15','Electricity Distribution Pole / Pylon','other.industrial.pylon.electricity'), + ('ON','Significant Natural Object','other.natural'), + ('ON01','Boundary / Significant / Historic Tree / Pollard','other.natural.tree'), + ('ON02','Boundary / Significant Rock / Boulder','other.natural.rock'), + ('ON03','Natural Hole (Blow / Shake / Swallow)','other.natural.hole'), + ('OO','Ornamental / Cultural Object','other.ornamental'), + ('OO02','Mausoleum / Tomb / Grave','other.ornamental.tomb'), + ('OO03','Simple Ornamental Object','other.ornamental.object'), + ('OO04','Maze','other.ornamental.maze'), + ('OP','Sport / Leisure Support','other.leisure'), + ('OP01','Butt / Hide','other.leisure.hide'), + ('OP02','Gallop / Ride','other.leisure.gallop'), + ('OP03','Miniature Railway','other.leisure.modelRailway'), + ('OR','Royal Mail Infrastructure','other.mail'), + ('OR01','Postal Box','other.mail.postBox'), + ('OR02','Postal Delivery Box / Pouch','other.mail.deliveryBox'), + ('OR03','PO Box','other.mail.POBox'), + ('OR04','Additional Mail / Packet Addressee','other.mail.additionalAddressee'), + ('OS','Scientific / Observation Support','other.scientific'), + ('OS01','Meteorological Station / Equipment','other.scientific.meteo'), + ('OS02','Radar / Satellite Infrastructure','other.scientific.radarSatellite'), + ('OS03','Telescope / Observation Infrastructure / Astronomy','other.scientific.astronomy'), + ('OT','Transport Support','other.transport'), + ('OT01','Cattle Grid / Ford','other.transport.cattleGridFord'), + ('OT02','Elevator / Escalator / Steps','other.transport.stepsLiftEscalator'), + ('OT03','Footbridge / Walkway','other.transport.bridge'), + ('OT04','Pole / Post / Bollard (Restricting Vehicular Access)','other.transport.post'), + ('OT05','Subway / Underpass','other.transport.subway'), + ('OT06','Customs Inspection Facility','other.transport.customs'), + ('OT07','Lay-By','other.transport.layby'), + ('OT08','Level Crossing','other.transport.rail.crossing.vehicles'), + ('OT09','Mail Pick Up','other.transport.mailPickUp'), + ('OT10','Railway Pedestrian Crossing','other.transport.rail.crossing.pedestrian'), + ('OT11','Railway Buffer','other.transport.rail.buffer'), + ('OT12','Rail Drag','other.transport.rail.drag'), + ('OT13','Rail Infrastructure Services','other.transport.rail.infrastructure'), + ('OT14','Rail Kilometre Distance Marker','other.transport.rail.marker.km'), + ('OT15','Railway Lighting','other.transport.rail.lighting'), + ('OT16','Rail Mile Distance Marker','other.transport.rail.market.mile'), + ('OT17','Railway Turntable','other.transport.rail.turntable'), + ('OT18','Rail Weighbridge','other.transport.rail.weighbridge'), + ('OT19','Rail Signalling','other.transport.rail.signals'), + ('OT20','Railway Traverse','other.transport.rail.traverse'), + ('OT21','Goods Tramway','other.transport.goodsTramway'), + ('OT22','Road Drag','other.transport.road.drag'), + ('OT23','Vehicle Dip','other.transport.road.vehicleDip'), + ('OT24','Road Turntable','other.transport.road.turntable'), + ('OT25','Road Mile Distance Marker','other.transport.road.marker.mile'), + ('OT26','Road Kilometre Distance Marker','other.transport.road.market.km'), + ('OT27','Road Infrastructure Services','other.transport.road.infrastructure'), + ('OU','Custom','other.unsupported'), + ('OU01','Cycle Parking Facility','other.unsupported.cycleParking'), + ('OU04','Picnic / Barbeque Site','other.unsupported.picnic'), + ('OU05','Travelling Persons Site','other.unsupported.travellingPersons'), + ('OU08','Shelter (Not Including Bus Shelter)','other.unsupported.shelter'), + ('PS','Street Record','parent.street'), + ('R','Residential','residential'), + ('RB','Residential Ancillary Building','residential.building'), + ('RC','Residential Car Park Space','residential.carParkingSpace'), + ('RC01','Residential Allocated Parking','residential.carParkingSpace.allocated'), + ('RD','Residential dwelling','residential.dwelling'), + ('RD01','Caravan','residential.dwelling.caravan'), + ('RD02','Residential - Detached','residential.dwelling.house.detached'), + ('RD03','Residential - Semi Detached','residential.dwelling.house.semiDetached'), + ('RD04','Residential - Terraced','residential.dwelling.house.terrace'), + ('RD06','Residential - Flat','residential.dwelling.flat'), + ('RD07','House Boat','residential.dwelling.boat'), + ('RD08','Sheltered Accommodation','residential.dwelling.shelteredAccommodation'), + ('RD10','Privately Owned Holiday Caravan / Chalet','residential.dwelling.holiday'), + ('RG','Garage','residential.garage'), + ('RG02','Lock-Up Garage / Garage Court','residential.garage'), + ('RH','House In Multiple Occupation','residential.HMO'), + ('RH01','HMO Parent','residential.HMO.parent'), + ('RH02','HMO Bedsit / Other Non Self Contained Accommodation','residential.HMO.bedsit'), + ('RH03','HMO Not Further Divided','residential.HMO.undivided'), + ('RI','Residential Institution','residential.institution'), + ('RI01','Care / Nursing Home','residential.institution.care'), + ('RI02','Communal Residence','residential.institution.communal'), + ('RI02NC','Non-Commercial Lodgings','residential.institution.noncommercial'), + ('RI02RC','Religious Community','residential.institution.religious'), + ('RI03','Residential Education','residential.institution.education'), + ('U','Unclassified','unclassified'), + ('UC','Awaiting Classification','unclassified.awaitingclassification'), + ('UP','Pending Internal Investigation','unclassified.pendingInvestigation'), + ('X','Dual Use','dualUse'), + ('Z','Object of Interest','object'), + ('ZA','Archaeological Dig Site','object.archaeological'), + ('ZM','Monument','object.monument'), + ('ZM01','Obelisk / Milestone / Standing Stone','object.monument.vertical'), + ('ZM01OB','Obelisk','object.monument.vertical.obelisk'), + ('ZM01ST','Standing Stone','object.monument.vertical.standingStone'), + ('ZM02','Memorial / Market Cross','object.monument.memorial'), + ('ZM03','Statue','object.monument.statue'), + ('ZM04','Castle / Historic Ruin','object.monument.ruin'), + ('ZM05','Other Structure','object.monument.other'), + ('ZM05BS','Boundary Stone','object.monument.other.boundaryStone'), + ('ZM05CE','Cascade / Fountain','object.monument.other.waterFeature'), + ('ZM05PN','Permanent Art Display / Sculpture','object.monument.other.art'), + ('ZM05WI','Windmill (Inactive)','object.monument.other.windmill'), + ('ZS','Stately Home','object.statelyHome'), + ('ZU','Underground Feature','object.underground'), + ('ZU01','Cave','object.underground.cave'), + ('ZU04','Pothole / Natural Hole','object.underground.hole'), + ('ZV','Other Underground Feature','object.underground.other'), + ('ZV01','Cellar','object.underground.other.cellar'), + ('ZV02','Disused Mine','object.underground.other.extraction'), + ('ZV02MI','Mineral Mining / Inactive','object.underground.other.extraction.mine'), + ('ZV02OI','Oil And / Gas Extraction/ Inactive','object.underground.other.extraction.oilGas'), + ('ZV02QI','Mineral Quarrying And / Open Extraction / Inactive','object.underground.other.extraction.quarry'), + ('ZV03','Well / Spring','object.underground.other.water'), + ('ZV03SG','Spring','object.underground.other.water.spring'), + ('ZV03WL','Well','object.underground.other.water.well'), + ('ZW','Place Of Worship','object.religious'), + ('ZW99','Religious building','object.religious.building'), + ('ZW99AB','Abbey','object.religious.building.abbey'), + ('ZW99CA','Cathedral','object.religious.building.cathedral'), + ('ZW99CH','Church','object.religious.building.church'), + ('ZW99CP','Chapel','object.religious.building.chapel'), + ('ZW99GU','Gurdwara','object.religious.building.gurdwara'), + ('ZW99KH','Kingdom Hall','object.religious.building.kingdomHall'), + ('ZW99LG','Lych Gate','object.religious.building.lychGate'), + ('ZW99MQ','Mosque','object.religious.building.mosque'), + ('ZW99MT','Minster','object.religious.building.minster'), + ('ZW99SU','Stupa','object.religious.building.stupa'), + ('ZW99SY','Synagogue','object.religious.building.synagogue'), + ('ZW99TP','Temple','object.religious.building.temple'), + ('P','Parent Shell',null), + ('PP','Property Shell',null); From f9035a83457513fe80c6dae1a2a9e4ab3b135709 Mon Sep 17 00:00:00 2001 From: Jessica McInchak Date: Mon, 15 Jul 2024 18:24:36 +0200 Subject: [PATCH 145/150] fix: temporary redirect for Canterbury FOI service (#3427) --- editor.planx.uk/src/routes/index.tsx | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/editor.planx.uk/src/routes/index.tsx b/editor.planx.uk/src/routes/index.tsx index 1f15826a56..f2a6bc3449 100644 --- a/editor.planx.uk/src/routes/index.tsx +++ b/editor.planx.uk/src/routes/index.tsx @@ -71,6 +71,12 @@ export default isPreviewOnlyDomain }) : mount({ "/:team/:flow/published": lazy(() => import("./published")), // loads current published flow if exists, or throws Not Found if unpublished + "canterbury/find-out-if-you-need-planning-permission/preview": map( + async (req) => + redirect( + `/canterbury-find-out-if-you-need-planning-permission/published${req?.search}`, + ), + ), // temporary redirect while Canterbury works with internal IT to update advertised service links "/:team/:flow/preview": lazy(() => import("./preview")), // loads current draft flow and latest published external portals, or throws Not Found if any external portal is unpublished "/:team/:flow/draft": lazy(() => import("./draft")), // loads current draft flow and draft external portals "/:team/:flow/pay": mountPayRoutes(), From 84670ae58031194f4e914c09312ec426b94f2b8f Mon Sep 17 00:00:00 2001 From: Jessica McInchak Date: Mon, 15 Jul 2024 20:00:03 +0200 Subject: [PATCH 146/150] chore: refactor `formatRawProjectTypes` (take 2) (#3421) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Dafydd Llŷr Pearson --- .../inviteToPay/sendConfirmationEmail.test.ts | 20 +-------- .../inviteToPay/sendConfirmationEmail.ts | 7 ++-- .../inviteToPay/sendPaymentEmail.test.ts | 5 --- .../service/inviteToPay/sendPaymentEmail.ts | 33 +++++++++------ .../service/resumeApplication.test.ts | 32 +++----------- .../service/resumeApplication.ts | 25 ++++++++--- .../modules/saveAndReturn/service/utils.ts | 25 ++++++----- api.planx.uk/modules/sendEmail/index.test.ts | 5 --- api.planx.uk/package.json | 2 +- api.planx.uk/pnpm-lock.yaml | 39 +++++++++++++---- e2e/tests/api-driven/package.json | 2 +- e2e/tests/api-driven/pnpm-lock.yaml | 35 ++++++++++++---- e2e/tests/api-driven/src/globalHelpers.ts | 1 - .../api-driven/src/invite-to-pay/helpers.ts | 2 +- e2e/tests/ui-driven/package.json | 2 +- e2e/tests/ui-driven/pnpm-lock.yaml | 39 +++++++++++++---- .../ui-driven/src/invite-to-pay/mocks.ts | 4 +- .../src/invite-to-pay/nominee.spec.ts | 2 +- .../src/mocks/flows/invite-to-pay-flow.ts | 2 +- editor.planx.uk/package.json | 4 +- editor.planx.uk/pnpm-lock.yaml | 42 ++++++++++++++----- editor.planx.uk/src/pages/Pay/MakePayment.tsx | 15 +------ 22 files changed, 193 insertions(+), 150 deletions(-) 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 7739adbd9c..6150f6b4a2 100644 --- a/api.planx.uk/modules/pay/service/inviteToPay/sendConfirmationEmail.test.ts +++ b/api.planx.uk/modules/pay/service/inviteToPay/sendConfirmationEmail.test.ts @@ -58,31 +58,13 @@ 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", diff --git a/api.planx.uk/modules/pay/service/inviteToPay/sendConfirmationEmail.ts b/api.planx.uk/modules/pay/service/inviteToPay/sendConfirmationEmail.ts index 92e30223d7..be197253be 100644 --- a/api.planx.uk/modules/pay/service/inviteToPay/sendConfirmationEmail.ts +++ b/api.planx.uk/modules/pay/service/inviteToPay/sendConfirmationEmail.ts @@ -1,13 +1,14 @@ -import { $public, $api } from "../../../../client"; -import { sendEmail } from "../../../../lib/notify"; +import { formatRawProjectTypes } from "@opensystemslab/planx-core"; import { gql } from "graphql-request"; +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: { 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 14dd6cea5c..acb92aa972 100644 --- a/api.planx.uk/modules/pay/service/inviteToPay/sendPaymentEmail.ts +++ b/api.planx.uk/modules/pay/service/inviteToPay/sendPaymentEmail.ts @@ -1,16 +1,16 @@ +import { formatRawProjectTypes } from "@opensystemslab/planx-core"; +import type { PaymentRequest, Team } from "@opensystemslab/planx-core/types"; import { gql } from "graphql-request"; -import { - calculateExpiryDate, - getServiceLink, -} from "../../../saveAndReturn/service/utils"; import { Template, getClientForTemplate, sendEmail, } from "../../../../lib/notify"; import { InviteToPayNotifyConfig } from "../../../../types"; -import type { PaymentRequest, Team } from "@opensystemslab/planx-core/types"; -import { $public } from "../../../../client"; +import { + calculateExpiryDate, + getServiceLink, +} from "../../../saveAndReturn/service/utils"; interface SessionDetails { email: string; @@ -37,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; @@ -74,7 +74,16 @@ const validatePaymentRequest = async ( name slug domain - settings: team_settings + 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,10 +113,10 @@ const validatePaymentRequest = async ( } }; -const getInviteToPayNotifyConfig = async ( +const getInviteToPayNotifyConfig = ( session: SessionDetails, paymentRequest: PaymentRequest, -): Promise => { +): InviteToPayNotifyConfig => { const flow = session.flow; const { settings } = session.flow.team; @@ -127,11 +136,11 @@ const getInviteToPayNotifyConfig = async ( ).title, fee: getFee(paymentRequest), projectType: - (await $public.formatRawProjectTypes( + formatRawProjectTypes( paymentRequest.sessionPreviewData?.[ "proposal.projectType" ] as string[], - )) || "Project type not submitted", + ) || "Project type not submitted", serviceName: session.flow.name, serviceLink: getServiceLink(flow.team, flow.slug), expiryDate: calculateExpiryDate(paymentRequest.createdAt), diff --git a/api.planx.uk/modules/saveAndReturn/service/resumeApplication.test.ts b/api.planx.uk/modules/saveAndReturn/service/resumeApplication.test.ts index 1c57226fdb..c1464a59c1 100644 --- a/api.planx.uk/modules/saveAndReturn/service/resumeApplication.test.ts +++ b/api.planx.uk/modules/saveAndReturn/service/resumeApplication.test.ts @@ -13,25 +13,6 @@ 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[] = [ @@ -57,7 +38,7 @@ describe("buildContentFromSessions function", () => { 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( @@ -127,15 +108,15 @@ describe("buildContentFromSessions function", () => { ]; 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 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 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( @@ -187,7 +168,7 @@ describe("buildContentFromSessions function", () => { ]; 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( @@ -220,7 +201,7 @@ describe("buildContentFromSessions function", () => { 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( @@ -232,7 +213,6 @@ describe("buildContentFromSessions function", () => { }); it("should handle an empty project type field", async () => { - mockFormatRawProjectTypes.mockResolvedValueOnce(""); const sessions: PartialDeep[] = [ { data: { diff --git a/api.planx.uk/modules/saveAndReturn/service/resumeApplication.ts b/api.planx.uk/modules/saveAndReturn/service/resumeApplication.ts index 5e0c877c0b..3c33c34e09 100644 --- a/api.planx.uk/modules/saveAndReturn/service/resumeApplication.ts +++ b/api.planx.uk/modules/saveAndReturn/service/resumeApplication.ts @@ -1,7 +1,9 @@ +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 } from "../../../types"; import { DAYS_UNTIL_EXPIRY, calculateExpiryDate, getResumeLink } from "./utils"; @@ -64,7 +66,16 @@ const validateRequest = async ( teams(where: { slug: { _eq: $teamSlug } }) { slug name - settings: team_settings + 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 } } @@ -108,13 +119,15 @@ const buildContentFromSessions = async ( sessions: LowCalSession[], team: Team, ): Promise => { - const contentBuilder = async (session: LowCalSession) => { + 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); diff --git a/api.planx.uk/modules/saveAndReturn/service/utils.ts b/api.planx.uk/modules/saveAndReturn/service/utils.ts index d65dedc16f..492cacf10e 100644 --- a/api.planx.uk/modules/saveAndReturn/service/utils.ts +++ b/api.planx.uk/modules/saveAndReturn/service/utils.ts @@ -1,9 +1,11 @@ +import { formatRawProjectTypes } from "@opensystemslab/planx-core"; import { SiteAddress, Team } from "@opensystemslab/planx-core/types"; -import { format, addDays } from "date-fns"; +import { addDays, format } from "date-fns"; import { gql } from "graphql-request"; -import { LowCalSession } 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]; @@ -129,7 +131,7 @@ const validateSingleSessionRequest = async ( 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}`); @@ -148,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; @@ -280,12 +279,12 @@ export const setupEmailEventTriggers = async (sessionId: string) => { }; export { - getSaveAndReturnPublicHeaders, - getResumeLink, - sendSingleApplicationEmail, - markSessionAsSubmitted, DAYS_UNTIL_EXPIRY, REMINDER_DAYS_FROM_EXPIRY, calculateExpiryDate, + getResumeLink, + getSaveAndReturnPublicHeaders, + markSessionAsSubmitted, + sendSingleApplicationEmail, softDeleteSession, }; 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 4d5eb967bc..037e410828 100644 --- a/api.planx.uk/package.json +++ b/api.planx.uk/package.json @@ -5,7 +5,7 @@ "packageManager": "pnpm@8.6.6", "dependencies": { "@airbrake/node": "^2.1.8", - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#f8d6480", + "@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", diff --git a/api.planx.uk/pnpm-lock.yaml b/api.planx.uk/pnpm-lock.yaml index c4ce6e5aad..e40f8c91b2 100644 --- a/api.planx.uk/pnpm-lock.yaml +++ b/api.planx.uk/pnpm-lock.yaml @@ -14,8 +14,8 @@ dependencies: specifier: ^2.1.8 version: 2.1.8 '@opensystemslab/planx-core': - specifier: git+https://github.com/theopensystemslab/planx-core#f8d6480 - version: github.com/theopensystemslab/planx-core/f8d6480 + 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 @@ -1222,6 +1222,27 @@ packages: 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.9.0): resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} peerDependencies: @@ -1890,10 +1911,6 @@ packages: '@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: @@ -7732,6 +7749,10 @@ 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'} @@ -8203,8 +8224,8 @@ packages: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} dev: false - github.com/theopensystemslab/planx-core/f8d6480: - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/f8d6480} + 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 @@ -8212,8 +8233,8 @@ 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) + '@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) - '@types/geojson': 7946.0.14 ajv: 8.16.0 ajv-formats: 2.1.1(ajv@8.16.0) cheerio: 1.0.0-rc.12 diff --git a/e2e/tests/api-driven/package.json b/e2e/tests/api-driven/package.json index 7f59584dca..949cf29c56 100644 --- a/e2e/tests/api-driven/package.json +++ b/e2e/tests/api-driven/package.json @@ -7,7 +7,7 @@ "packageManager": "pnpm@8.6.6", "dependencies": { "@cucumber/cucumber": "^9.3.0", - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#f8d6480", + "@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 dd487ecbba..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#f8d6480 - version: github.com/theopensystemslab/planx-core/f8d6480 + 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 @@ -516,6 +516,27 @@ packages: 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.9.0): resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} peerDependencies: @@ -804,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 @@ -3053,8 +3070,8 @@ packages: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} dev: false - github.com/theopensystemslab/planx-core/f8d6480: - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/f8d6480} + 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 @@ -3062,8 +3079,8 @@ 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) + '@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) - '@types/geojson': 7946.0.14 ajv: 8.16.0 ajv-formats: 2.1.1(ajv@8.16.0) cheerio: 1.0.0-rc.12 diff --git a/e2e/tests/api-driven/src/globalHelpers.ts b/e2e/tests/api-driven/src/globalHelpers.ts index 159e8290ba..88a0cafcb9 100644 --- a/e2e/tests/api-driven/src/globalHelpers.ts +++ b/e2e/tests/api-driven/src/globalHelpers.ts @@ -11,7 +11,6 @@ export function createTeam( submissionEmail: TEST_EMAIL, settings: { homepage: "http://www.planx.uk", - referenceCode: "ABCD", }, ...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 4a856b1b77..d8d2db0acf 100644 --- a/e2e/tests/api-driven/src/invite-to-pay/helpers.ts +++ b/e2e/tests/api-driven/src/invite-to-pay/helpers.ts @@ -186,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/ui-driven/package.json b/e2e/tests/ui-driven/package.json index ae79605c14..a8d617b2e7 100644 --- a/e2e/tests/ui-driven/package.json +++ b/e2e/tests/ui-driven/package.json @@ -8,7 +8,7 @@ "postinstall": "./install-dependencies.sh" }, "dependencies": { - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#f8d6480", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#6c2cc59", "axios": "^1.6.8", "dotenv": "^16.3.1", "eslint": "^8.56.0", diff --git a/e2e/tests/ui-driven/pnpm-lock.yaml b/e2e/tests/ui-driven/pnpm-lock.yaml index a6fcf0322a..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#f8d6480 - version: github.com/theopensystemslab/planx-core/f8d6480 + 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 @@ -382,6 +382,27 @@ packages: 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.9.0): resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} peerDependencies: @@ -643,10 +664,6 @@ 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 @@ -2609,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'} @@ -2782,8 +2803,8 @@ packages: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} dev: false - github.com/theopensystemslab/planx-core/f8d6480: - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/f8d6480} + 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 @@ -2791,8 +2812,8 @@ 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) + '@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) - '@types/geojson': 7946.0.14 ajv: 8.16.0 ajv-formats: 2.1.1(ajv@8.16.0) cheerio: 1.0.0-rc.12 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 db126996e9..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 @@ -56,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/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/editor.planx.uk/package.json b/editor.planx.uk/package.json index 8b5fb3d29f..359c449e10 100644 --- a/editor.planx.uk/package.json +++ b/editor.planx.uk/package.json @@ -13,7 +13,7 @@ "@mui/material": "^5.15.2", "@mui/utils": "^5.15.2", "@opensystemslab/map": "^0.8.3", - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#f8d6480", + "@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", @@ -41,7 +41,7 @@ "@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", diff --git a/editor.planx.uk/pnpm-lock.yaml b/editor.planx.uk/pnpm-lock.yaml index 1523de3d77..d9c7e1ada3 100644 --- a/editor.planx.uk/pnpm-lock.yaml +++ b/editor.planx.uk/pnpm-lock.yaml @@ -43,8 +43,8 @@ dependencies: specifier: ^0.8.3 version: 0.8.3 '@opensystemslab/planx-core': - specifier: git+https://github.com/theopensystemslab/planx-core#f8d6480 - version: github.com/theopensystemslab/planx-core/f8d6480(@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) @@ -127,8 +127,8 @@ dependencies: 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 @@ -4578,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: @@ -8480,6 +8501,7 @@ packages: /@types/geojson@7946.0.14: resolution: {integrity: sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg==} + dev: true /@types/graceful-fs@4.1.9: resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} @@ -9626,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 @@ -21836,9 +21858,9 @@ packages: use-sync-external-store: 1.2.0(react@18.2.0) dev: false - github.com/theopensystemslab/planx-core/f8d6480(@types/react@18.2.45): - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/f8d6480} - id: github.com/theopensystemslab/planx-core/f8d6480 + 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 @@ -21846,8 +21868,8 @@ packages: 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.16.0 ajv-formats: 2.1.1(ajv@8.16.0) cheerio: 1.0.0-rc.12 diff --git a/editor.planx.uk/src/pages/Pay/MakePayment.tsx b/editor.planx.uk/src/pages/Pay/MakePayment.tsx index 39afbf201f..da6d7c4d96 100644 --- a/editor.planx.uk/src/pages/Pay/MakePayment.tsx +++ b/editor.planx.uk/src/pages/Pay/MakePayment.tsx @@ -2,6 +2,7 @@ import Check from "@mui/icons-material/Check"; import Container from "@mui/material/Container"; import { lighten, useTheme } from "@mui/material/styles"; import Typography from "@mui/material/Typography"; +import { formatRawProjectTypes } from "@opensystemslab/planx-core"; import { GovUKPayment, type PaymentRequest, @@ -170,19 +171,7 @@ export default function MakePayment({ ); const PaymentDetails = () => { - const $public = useStore((state) => state.$public); - const [projectType, setProjectType] = useState(); - - useEffect(() => { - const fetchProjectType = async () => { - const projectType = await $public().formatRawProjectTypes( - rawProjectTypes, - ); - setProjectType(projectType); - }; - fetchProjectType(); - }, []); - + const projectType = formatRawProjectTypes(rawProjectTypes); const data = [ { term: "Application type", details: flowName }, { From 0628d5a3712fd75f6b1b4385ac3c3cf8b77fcdb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Tue, 16 Jul 2024 08:52:39 +0100 Subject: [PATCH 147/150] feat: Initial search UI (feature flagged) (#3371) --- editor.planx.uk/src/lib/featureFlags.ts | 2 +- .../FlowEditor/components/Sidebar/Search.tsx | 134 ++++++++++++++++++ .../FlowEditor/components/Sidebar/index.tsx | 18 ++- editor.planx.uk/src/ui/shared/Checkbox.tsx | 24 +++- .../src/ui/shared/ChecklistItem.tsx | 9 +- 5 files changed, 178 insertions(+), 9 deletions(-) create mode 100644 editor.planx.uk/src/pages/FlowEditor/components/Sidebar/Search.tsx diff --git a/editor.planx.uk/src/lib/featureFlags.ts b/editor.planx.uk/src/lib/featureFlags.ts index 31cbfdf23c..90a52dfe3f 100644 --- a/editor.planx.uk/src/lib/featureFlags.ts +++ b/editor.planx.uk/src/lib/featureFlags.ts @@ -1,5 +1,5 @@ // add/edit/remove feature flags in array below -const AVAILABLE_FEATURE_FLAGS = [] as const; +const AVAILABLE_FEATURE_FLAGS = ["SEARCH"] as const; type FeatureFlag = (typeof AVAILABLE_FEATURE_FLAGS)[number]; diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Sidebar/Search.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Sidebar/Search.tsx new file mode 100644 index 0000000000..679377c8cb --- /dev/null +++ b/editor.planx.uk/src/pages/FlowEditor/components/Sidebar/Search.tsx @@ -0,0 +1,134 @@ +import Box from "@mui/material/Box"; +import Container from "@mui/material/Container"; +import Typography from "@mui/material/Typography"; +import { ComponentType } from "@opensystemslab/planx-core/types"; +import { ICONS } from "@planx/components/ui"; +import { debounce } from "lodash"; +import { useStore } from "pages/FlowEditor/lib/store"; +import React, { ChangeEvent, useCallback, useState } from "react"; +import useSWR from "swr"; +import { FONT_WEIGHT_SEMI_BOLD } from "theme"; +import InputLabel from "ui/editor/InputLabel"; +import ChecklistItem from "ui/shared/ChecklistItem"; +import Input from "ui/shared/Input"; + +const mockData: SearchResult[] = [ + { + nodeId: "abc123", + nodeType: ComponentType.Question, + nodeTitle: "Is the property in Lambeth?", + text: "Lambeth example biodiversity text", + path: ["_root", "xyz123", "abc123"], + }, + { + nodeId: "abc456", + nodeType: ComponentType.Notice, + nodeTitle: "It looks like the property is not in Lambeth", + text: "Lambeth example biodiversity text", + path: ["_root", "xyz123", "abc123"], + }, + { + nodeId: "abc789", + nodeType: ComponentType.Question, + nodeTitle: "What are you applying about?", + text: "Lambeth example biodiversity text", + path: ["_root", "xyz123", "abc123"], + }, +]; + +export interface SearchResult { + nodeId: string; + nodeType: ComponentType; + nodeTitle?: string; + text: string; + path: string[]; +} + +const SearchResults: React.FC<{ results: SearchResult[] }> = ({ results }) => { + return ( + + {results.map((result) => ( + + ))} + + ); +}; + +const SearchResultCard: React.FC = ({ + nodeTitle, + text, + nodeType, +}) => { + const Icon = ICONS[nodeType]; + + return ( + ({ + pb: 2, + borderBottom: `1px solid ${theme.palette.border.main}`, + })} + > + + {Icon && } + + Question + {nodeTitle && ` - ${nodeTitle}`} + + + {text} + + ); +}; + +const Search: React.FC = () => { + const [flowId] = useStore((state) => [state.id]); + const [query, setQuery] = useState(""); + const [debouncedQuery, setDebouncedQuery] = useState(query); + + const debounceSearch = useCallback( + debounce((input) => setDebouncedQuery(input), 500), + [], + ); + + const handleChange = (e: ChangeEvent) => { + const input = e.target.value; + setQuery(input); + debounceSearch(input); + }; + + const fetcher = (url: string) => fetch(url).then((r) => r.json()); + const endpoint = `${process.env.REACT_APP_API_URL}/flows/${flowId}/search`; + const { data, error } = useSWR( + debouncedQuery ? `${endpoint}?find=${debouncedQuery}` : null, + fetcher, + ); + + return ( + + + + + {}} + /> + + {error && "Something went wrong"} + {mockData ? : "Loading..."} + + + ); +}; + +export default Search; diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Sidebar/index.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Sidebar/index.tsx index 1cc8df1652..ed5ed9ab49 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Sidebar/index.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Sidebar/index.tsx @@ -19,6 +19,7 @@ import Tabs from "@mui/material/Tabs"; import Tooltip from "@mui/material/Tooltip"; import Typography from "@mui/material/Typography"; import { AxiosError } from "axios"; +import { hasFeatureFlag } from "lib/featureFlags"; import { formatLastPublishMessage } from "pages/FlowEditor/utils"; import React, { useState } from "react"; import { useAsync } from "react-use"; @@ -34,8 +35,9 @@ import { ValidationCheck, ValidationChecks, } from "./PublishDialog"; +import Search from "./Search"; -type SidebarTabs = "PreviewBrowser" | "History"; +type SidebarTabs = "PreviewBrowser" | "History" | "Search"; const Console = styled(Box)(() => ({ overflow: "auto", @@ -449,6 +451,15 @@ const Sidebar: React.FC<{ value="History" label="History" /> + {hasFeatureFlag("SEARCH") && ( + + )} {activeTab === "PreviewBrowser" && ( @@ -463,6 +474,11 @@ const Sidebar: React.FC<{ )} + {activeTab === "Search" && ( + + + + )} {showDebugConsole && } ); diff --git a/editor.planx.uk/src/ui/shared/Checkbox.tsx b/editor.planx.uk/src/ui/shared/Checkbox.tsx index db2fe034f2..90e816b41b 100644 --- a/editor.planx.uk/src/ui/shared/Checkbox.tsx +++ b/editor.planx.uk/src/ui/shared/Checkbox.tsx @@ -1,9 +1,11 @@ -import Box from "@mui/material/Box"; +import Box, { BoxProps } from "@mui/material/Box"; import { styled } from "@mui/material/styles"; import React from "react"; import { borderedFocusStyle } from "theme"; -const Root = styled(Box)(({ theme }) => ({ +const Root = styled(Box, { + shouldForwardProp: (prop) => !["disabled"].includes(prop.toString()), +})(({ theme, disabled }) => ({ display: "inline-flex", flexShrink: 0, position: "relative", @@ -13,6 +15,10 @@ const Root = styled(Box)(({ theme }) => ({ border: "2px solid", backgroundColor: theme.palette.common.white, "&:focus-within": borderedFocusStyle, + ...(disabled && { + border: `2px solid ${theme.palette.grey[400]}`, + backgroundColor: theme.palette.grey[400], + }), })); const Input = styled("input")(() => ({ @@ -24,11 +30,13 @@ const Input = styled("input")(() => ({ interface IconProps extends React.HTMLAttributes { checked: boolean; + disabled?: boolean; } const Icon = styled("span", { - shouldForwardProp: (prop) => prop !== "checked", -})(({ theme, checked }) => ({ + shouldForwardProp: (prop) => + !["checked", "disabled"].includes(prop.toString()), +})(({ theme, checked, disabled }) => ({ display: checked ? "block" : "none", content: "''", position: "absolute", @@ -41,6 +49,10 @@ const Icon = styled("span", { top: "42%", transform: "translate(-50%, -50%) rotate(45deg)", cursor: "pointer", + ...(disabled && { + borderBottom: `5px solid white`, + borderRight: `5px solid white`, + }), })); export interface Props { @@ -62,7 +74,7 @@ export default function Checkbox({ }; return ( - + - + ); } diff --git a/editor.planx.uk/src/ui/shared/ChecklistItem.tsx b/editor.planx.uk/src/ui/shared/ChecklistItem.tsx index 85f1c90674..b1cc24e8a3 100644 --- a/editor.planx.uk/src/ui/shared/ChecklistItem.tsx +++ b/editor.planx.uk/src/ui/shared/ChecklistItem.tsx @@ -26,6 +26,7 @@ interface Props { label: string; checked: boolean; onChange: (event?: React.MouseEvent) => void; + inputProps?: React.InputHTMLAttributes; } export default function ChecklistItem({ @@ -33,10 +34,16 @@ export default function ChecklistItem({ onChange, checked, id, + inputProps, }: Props): FCReturn { return ( - + From 6d7ea5d9529b84e03047f0f47aa6a56b2a34bee3 Mon Sep 17 00:00:00 2001 From: Jessica McInchak Date: Tue, 16 Jul 2024 09:55:34 +0200 Subject: [PATCH 148/150] fix: correct Canterbury redirect (#3430) --- editor.planx.uk/src/routes/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/editor.planx.uk/src/routes/index.tsx b/editor.planx.uk/src/routes/index.tsx index f2a6bc3449..8d04f89613 100644 --- a/editor.planx.uk/src/routes/index.tsx +++ b/editor.planx.uk/src/routes/index.tsx @@ -74,7 +74,7 @@ export default isPreviewOnlyDomain "canterbury/find-out-if-you-need-planning-permission/preview": map( async (req) => redirect( - `/canterbury-find-out-if-you-need-planning-permission/published${req?.search}`, + `/canterbury/find-out-if-you-need-planning-permission/published${req?.search}`, ), ), // temporary redirect while Canterbury works with internal IT to update advertised service links "/:team/:flow/preview": lazy(() => import("./preview")), // loads current draft flow and latest published external portals, or throws Not Found if any external portal is unpublished From 32b3b8146f3752e5c85050085c1d81e6511d15c4 Mon Sep 17 00:00:00 2001 From: Jessica McInchak Date: Tue, 16 Jul 2024 09:56:38 +0200 Subject: [PATCH 149/150] chore: drop table `project_types` (#3429) --- hasura.planx.uk/metadata/tables.yaml | 10 - .../down.sql | 194 ++++++++++++++++++ .../up.sql | 1 + 3 files changed, 195 insertions(+), 10 deletions(-) create mode 100644 hasura.planx.uk/migrations/1721112734683_drop_table_public_project_types/down.sql create mode 100644 hasura.planx.uk/migrations/1721112734683_drop_table_public_project_types/up.sql diff --git a/hasura.planx.uk/metadata/tables.yaml b/hasura.planx.uk/metadata/tables.yaml index 3118099b7b..0242083d56 100644 --- a/hasura.planx.uk/metadata/tables.yaml +++ b/hasura.planx.uk/metadata/tables.yaml @@ -1283,16 +1283,6 @@ - session_id - created_at filter: {} -- table: - name: project_types - schema: public - select_permissions: - - role: public - permission: - columns: - - description - - value - filter: {} - table: name: published_flows schema: public diff --git a/hasura.planx.uk/migrations/1721112734683_drop_table_public_project_types/down.sql b/hasura.planx.uk/migrations/1721112734683_drop_table_public_project_types/down.sql new file mode 100644 index 0000000000..6682b6f158 --- /dev/null +++ b/hasura.planx.uk/migrations/1721112734683_drop_table_public_project_types/down.sql @@ -0,0 +1,194 @@ +CREATE TABLE "public"."project_types" ( + "description" text NOT NULL, + "value" text NOT NULL, + "id" serial NOT NULL, + PRIMARY KEY ("id") +); +COMMENT ON TABLE "public"."project_types" IS E'A list of things people want to do within the planning system'; +INSERT INTO "public"."project_types" (description, value) VALUES + ('demolition of a building', 'demolish.full'), + ('demolition of part of a building', 'demolish.part'), + ('demolition of an outbuilding', 'demolish.outbuilding'), + ('demolition of an extension', 'demolish.extension'), + ('demolition of a boundary', 'demolish.boundary'), + ('alteration of internal layout', 'internal'), + ('internal alterations', 'alter.internal'), + ('alteration of internal walls', 'alter.internal.walls'), + ('alteration to internal floors', 'alter.internal.floors'), + ('alteration of internal staircases', 'alter.internal.staircases'), + ('alteration of internal doorways', 'alter.internal.doorways'), + ('alteration of internal window openings', 'alter.internal.windows'), + ('alteration of internal finishes', 'alter.internal.finishes'), + ('alteration of internal services', 'alter.internal.services'), + ('installation / replacement of kitchen units', 'alter.internal.kitchen'), + ('installation / replacement of bathroom appliances', 'alter.internal.bathroom'), + ('replacement of internal doors ', 'alter.internal.doors'), + ('alterations to internal decorative features', 'alter.internal.features'), + ('conversion of a roof space into habitable room/s', 'alter.internal.loft'), + ('alteration of internal basements', 'alter.internal.basement'), + ('addition of a mezzanine floor', 'alter.internal.mezzanine'), + ('removal of part of a building', 'alter.remove'), + ('removal of equipment', 'alter.remove.equipment'), + ('removal of a chimney', 'alter.remove.chimney'), + ('removal of a soil pipe', 'alter.remove.soilPipe'), + ('removal of a hard surface', 'alter.remove.surface'), + ('removal of a deck', 'alter.remove.deck'), + ('removal of part of a facade', 'alter.remove.facade'), + ('repairs to windows ', 'alter.repair.windows'), + ('repairs to doors ', 'alter.repair.doors'), + ('replacement of windows with windows', 'alter.replace.windowsToWindows'), + ('replacement of doors with doors', 'alter.replace.doorsToDoors'), + ('replacement of windows with doors', 'alter.replace.windowsToDoors'), + ('replacement of doors with windows', 'alter.replace.doorsToWindows'), + ('changes to door or window openings', 'alter.openings'), + ('addition of window or door openings', 'alter.openings.add'), + ('alteration of window or door openings', 'alter.openings.alter'), + ('alteration of window or door openings to the rear', 'alter.openings.alter.rear'), + ('addition of doorways to the front of the building', 'alter.openings.add.doors.front'), + ('addition of doorways to the side of the building', 'alter.openings.add.doors.side'), + ('addition of doorways to the rear of the building', 'alter.openings.add.doors.rear'), + ('addition of window openings', 'alter.openings.add.windows'), + ('addition of window openings to the front of the building', 'alter.openings.add.windows.front'), + ('addition of window openings to the side of the building', 'alter.openings.add.windows.side'), + ('addition of window openings to the rear of the building', 'alter.openings.add.windows.rear'), + ('addition of high up window', 'alter.openings.add.windows.high'), + ('addition of doors openings to the front of the building', 'alter.openings.alter.doors.front'), + ('addition of doors openings to the side of the building', 'alter.openings.alter.doors.side'), + ('addition of doors openings to the rear of the building', 'alter.openings.alter.doors.rear'), + ('addition of window openings', 'alter.openings.alter.windows'), + ('addition of window openings to the front of the building', 'alter.openings.alter.windows.front'), + ('addition of window openings to the side of the building', 'alter.openings.alter.windows.side'), + ('addition of window openings to the rear of the building', 'alter.openings.alter.windows.rear'), + ('blocking-up of doorways or windows', 'alter.openings.remove'), + ('addition of secondary glazing', 'alter.secondaryGlazing'), + ('addition of one or more skylights', 'alter.rooflight'), + ('alterations to facades', 'alter.facades'), + ('alterations to facades to th rear of the building', 'alter.facades.rear'), + ('painting of facades', 'alter.facades.paint'), + ('cladding of facades', 'alter.facades.reclad'), + ('addition of advert or sign', 'alter.sign'), + ('works to drains', 'alter.drains'), + ('alterations to tree or hedges', 'alter.trees'), + ('alterations to hard surfaces', 'alter.surfaces'), + ('alterations to hard surfaces', 'alter.surfaces.parking'), + ('addition or alteration of a deck', 'alter.decks'), + ('alterations to a boundary', 'alter.boundary'), + ('repairs to a boundary', 'alter.boundary.repair'), + ('repairs to a fence', 'alter.boundary.repair.fence'), + ('repairs to a gate', 'alter.boundary.repair.gate'), + ('repairs to a wall', 'alter.boundary.repair.wall'), + ('replacement of a boundary', 'alter.boundary.replace'), + ('replacement of a fence', 'alter.boundary.replace.fence'), + ('replacement of a gate', 'alter.boundary.replace.gate'), + ('replacement of a walll', 'alter.boundary.replace.wall'), + ('addition of a new boundary', 'alter.boundary.add'), + ('erection of a new fence', 'alter.boundary.add.fence'), + ('addition of a new gate', 'alter.boundary.add.gate'), + ('construction of a new wall', 'alter.boundary.add.wall'), + ('addition of a chimney', 'alter.chimneys'), + ('removal of a chimney', 'alter.remove.chimney'), + ('alterations to the roof', 'alter.roof'), + ('alteration of roof materials', 'alter.roof.materials'), + ('alteration of roof shape', 'alter.roof.shape'), + ('addition of a roof terrace', 'alter.roof.terrace'), + ('alterations to roof parapet', 'alter.roof.parapet'), + ('alterations to a public highway', 'alter.highways'), + ('creation of a point of access to a highway', 'alter.highways.access'), + ('creation of a point of access to an unclassified road', 'alter.highways.access.unclassified'), + ('addition of a dropped kerb', 'alter.highways.droppedKerb.add'), + ('removal of a dropped kerb', 'alter.highways.droppedKerb.remove'), + ('addition or alteration of soil pipes', 'alter.soilPipes'), + ('works to an external staircase', 'alter.staircase'), + ('addition or removal of a bay window', 'alter.bayWindow'), + ('addition of a bay window', 'alter.bayWindow.add'), + ('removal of a bay window', 'alter.bayWindow.remove'), + ('addition of a bay window to the rear', 'alter.bayWindow.rear'), + ('addition of an indoor swimming pool', 'alter.swimmingPool.indoor'), + ('addition of an outdoor swimming pool', 'alter.swimmingPool.outdoor'), + ('addition or removal of a pond', 'alter.landscape.ponds'), + ('addition or removal of a residential lawn or garden', 'alter.landscape.gardens'), + ('installation of equipment', 'alter.equipment'), + ('installation of a barbecue', 'alter.equipment.bbq'), + ('installation of cctv', 'alter.equipment.cctv'), + ('installation of external lighting ', 'alter.equipment.lighting'), + ('installation of wind turbine ', 'alter.equipment.wind'), + ('installation of antennae', 'alter.equipment.antennae'), + ('installation of an aerial', 'alter.equipment.antennae.aerial'), + ('installation of a satellite dish', 'alter.equipment.antennae.dish'), + ('installation of solar panel', 'alter.equipment.solar'), + ('installation of security alarm ', 'alter.equipment.alarm'), + ('installation of tank ', 'alter.equipment.tank'), + ('installation of heat pump (air)', 'alter.equipment.heatPump.air'), + ('installation of heat pump (ground)', 'alter.equipment.heatPump.ground'), + ('installation of heat pump (water)', 'alter.equipment.heatPump.water'), + ('installation of biomass / CHP', 'alter.equipment.biomass'), + ('installation of an electric vehicle charging point', 'alter.equipment.charging'), + ('installation of industrial equipment', 'alter.equipment.industrial'), + ('installation of cables ', 'alter.cables'), + ('installation of pipes', 'alter.pipes'), + ('extension to the rear or side', 'extend.rearSide'), + ('extension to the rear', 'extend.rearSide.rear'), + ('extension to the side', 'extend.rearSide.side'), + ('extension to the front', 'extend.front'), + ('upper storey extension', 'extend.upperStorey'), + ('roof extension', 'extend.roof'), + ('addition of a roof dormer', 'extend.roof.dormer'), + ('addition of a mansard roof', 'extend.roof.mansard'), + ('hip-to-gable roof enlargement', 'extend.roof.hiptogable'), + ('addition of one or more new storeys', 'extend.roof.newstorey'), + ('connection of parts of a roof', 'extend.roof.connect'), + ('alteration of roof shape', 'extend.roof.shape'), + ('addition of a new storey', 'extend.roof.newstorey'), + ('basement extension ', 'extend.basement'), + ('enlargement of a basement', 'extend.basement.extend'), + ('addition of a lightwell', 'extend.basement.lightwell'), + ('addition of an outbuilding', 'extend.outbuilding.garage'), + ('addition of garage', 'extend.outbuilding.garage'), + ('addition of shed', 'extend.outbuilding.shed'), + ('addition of garden office', 'extend.outbuilding.office'), + ('addition of a roof shelter', 'extend.outbuilding.shelter'), + ('additon of sauna', 'extend.outbuilding.sauna'), + ('addition of store', 'extend.outbuilding.store'), + ('addition of gym', 'extend.outbuilding.gym'), + ('addition of summer house', 'extend.outbuilding.summerHouse'), + ('addition of greenhouse', 'extend.outbuilding.greenhouse'), + ('addition of other outbuilding', 'extend.outbuilding.other'), + ('addition of a tank', 'extend.outbuilding.tank'), + ('addition of a porch', 'extend.porch'), + ('addition of a front porch', 'extend.porch.front'), + ('addition of a side porch', 'extend.porch.side'), + ('addition of a rear porch', 'extend.porch.rear'), + ('new home/s', 'new.residential.dwelling'), + ('new flat/s', 'new.residential.dwelling.flat'), + ('new houses/s', 'new.residential.dwelling.house'), + ('new office premises', 'new.office'), + ('new storage or distribution premises', 'new.storage'), + ('new industrial premises', 'new.industrial'), + ('new retail premises', 'new.retail'), + ('new leisure premises', 'new.leisure'), + ('new mixed premises', 'new.mixed'), + ('new agricultural premises', 'new.agriculture'), + ('new agricultural premises', 'new.agriculture.glasshouse'), + ('new agricultural premises', 'new.agriculture.poultry'), + ('new agricultural premises', 'new.agriculture.pigs'), + ('new agricultural premises', 'new.agricultural.mining '), + ('new agricultural premises', 'new.agricultural.fish'), + ('new forestry premises', 'new.forestry'), + ('new other premises', 'new'), + ('change of use', 'changeOfUse.whole'), + ('changing the use of part of the property', 'changeOfUse.part'), + ('permanent change of use', 'changeOfUse.permanent'), + ('temporary change of use', 'changeOfUse.temporary'), + ('temporary change of use - markets', 'changeOfUse.temporary.market'), + ('temporary change of use - motor racing', 'changeOfUse.temporary.motorracing'), + ('conversion of an outbuilding', 'changeOfUse.outbuilding'), + ('convertion of an extension', 'changeOfUse.extension'), + ('working from home', 'changeOfUse.workFromHome'), + ('let a property', 'changeOfUse.let.whole'), + ('let part of a property', 'changeOfUse.let.part'), + ('siting of a caravan', 'changeOfUse.caravans'), + ('land swap', 'changeOfUse.swap'), + ('creation of a residential annexe', 'changeofUse.annexe'), + ('subdivision of a property', 'unit.subdivide'), + ('merge two or more properties', 'unit.merge'), + ('other changes', 'other'); diff --git a/hasura.planx.uk/migrations/1721112734683_drop_table_public_project_types/up.sql b/hasura.planx.uk/migrations/1721112734683_drop_table_public_project_types/up.sql new file mode 100644 index 0000000000..4a682ac1da --- /dev/null +++ b/hasura.planx.uk/migrations/1721112734683_drop_table_public_project_types/up.sql @@ -0,0 +1 @@ +DROP table "public"."project_types" CASCADE; From 81fd176fa40257d35fd041356db6b74e1cbaeeae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dafydd=20Ll=C5=B7r=20Pearson?= Date: Tue, 16 Jul 2024 16:56:26 +0100 Subject: [PATCH 150/150] feat: Add reference code field to team settings (#3431) --- .../Settings/GeneralSettings/ContactForm.tsx | 3 +- .../GeneralSettings/ReferenceCodeForm.tsx | 80 +++++++++++++++++++ .../Settings/GeneralSettings/index.tsx | 7 +- 3 files changed, 87 insertions(+), 3 deletions(-) create mode 100644 editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/ReferenceCodeForm.tsx diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/ContactForm.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/ContactForm.tsx index 83d2438261..23527446a7 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/ContactForm.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/ContactForm.tsx @@ -62,7 +62,7 @@ export default function ContactForm({ formikConfig, onSuccess }: FormProps) { onChange={(event) => { onChangeFn("homepage", event); }} - value={formik.values.homepage} + value={formik.values.homepage ?? ""} errorMessage={formik.errors.homepage} id="homepage" /> @@ -91,7 +91,6 @@ export default function ContactForm({ formikConfig, onSuccess }: FormProps) { { + const isSuccess = await useStore.getState().updateTeamSettings({ + referenceCode: values.referenceCode, + }); + if (isSuccess) { + onSuccess(); + resetForm({ values }); + } + }, + }); + + const onChangeFn = (type: string, event: ChangeEvent) => + formik.setFieldValue(type, event.target.value.toUpperCase()); + + return ( + + + Your local authority reference code is required for submissions. + This is a unique three-letter code per local authority. + + + The reference code can be found from Planning Data at:{" "} + + https://www.planning.data.gov.uk/entity/?dataset=local-authority + + + + } + input={ + <> + + { + onChangeFn("referenceCode", event); + }} + value={formik.values.referenceCode ?? ""} + errorMessage={formik.errors.referenceCode} + id="homepage" + /> + + + } + /> + ); +} diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/index.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/index.tsx index 71ec6eeca2..1352092514 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/index.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/index.tsx @@ -10,6 +10,7 @@ import SettingsSection from "ui/editor/SettingsSection"; import BoundaryForm from "./BoundaryForm"; import ContactForm from "./ContactForm"; +import ReferenceCodeForm from "./ReferenceCodeForm"; export interface FormProps { formikConfig: FormikConfig; @@ -62,7 +63,7 @@ const GeneralSettings: React.FC = () => { - General + Settings Important links and settings for how your users connect with you. @@ -72,6 +73,10 @@ const GeneralSettings: React.FC = () => { <> + )}