From bb0f115f0450273fc76a481c473e64a72cf37817 Mon Sep 17 00:00:00 2001 From: Jakob Schoedl Date: Mon, 4 Nov 2024 11:35:12 +0100 Subject: [PATCH 01/14] feat: add About page with intro text --- src/components/About/About.tsx | 46 +++++++++++++++++++ .../About/HungerMapLiveSuperscript.tsx | 12 +++++ src/styles/globals.css | 14 ++++++ 3 files changed, 72 insertions(+) create mode 100644 src/components/About/About.tsx create mode 100644 src/components/About/HungerMapLiveSuperscript.tsx diff --git a/src/components/About/About.tsx b/src/components/About/About.tsx new file mode 100644 index 00000000..367b43cf --- /dev/null +++ b/src/components/About/About.tsx @@ -0,0 +1,46 @@ +import { Link } from '@nextui-org/link'; +import React from 'react'; + +import HungerMapLiveSuperscript from '@/components/About/HungerMapLiveSuperscript'; + +export function About() { + return ( +
+

+ About +

+
+

+ + is the World Food Programme (WFP)’s global hunger monitoring system. + {' '} + It combines key metrics from various data sources – such as food security information, weather, population + size, conflict, hazards, nutrition information and macro-economic data – to help assess, monitor and predict + the magnitude and severity of hunger in near real-time. The resulting analysis is displayed on an interactive + map that helps WFP staff, key decision makers and the broader humanitarian community to make more informed and + timely decisions relating to food security. +

+

+ The platform covers 94 countries, including countries where WFP has operations as well as most{' '} + + lower and lower-middle income countries + {' '} + (as classified by the World Bank). For any questions, comments, or if you would like further information, + please get in touch by sending an email to{' '} + + wfp.mvam@wfp.org + + . +

+
+
+ ); +} + +export default About; diff --git a/src/components/About/HungerMapLiveSuperscript.tsx b/src/components/About/HungerMapLiveSuperscript.tsx new file mode 100644 index 00000000..ec9e2844 --- /dev/null +++ b/src/components/About/HungerMapLiveSuperscript.tsx @@ -0,0 +1,12 @@ +import React from 'react'; + +export function HungerMapLiveSuperscript() { + return ( + <> + HungerMap + LIVE + + ); +} + +export default HungerMapLiveSuperscript; diff --git a/src/styles/globals.css b/src/styles/globals.css index b5c61c95..dbbaa870 100644 --- a/src/styles/globals.css +++ b/src/styles/globals.css @@ -1,3 +1,17 @@ @tailwind base; @tailwind components; @tailwind utilities; + +@layer base { + main { + @apply max-w-screen-lg mx-auto + } + + main h1 { + @apply text-4xl sm:text-5xl lg:text-7xl font-black + } + + main p { + @apply text-large leading-relaxed pb-6 + } +} From 585612ec48364260c3bda21d5686cb81b7e860fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20Sch=C3=B6dl?= Date: Fri, 8 Nov 2024 12:04:28 +0100 Subject: [PATCH 02/14] feat: implement grouped table --- package.json | 1 + public/icons/xmark-solid.svg | 4 + src/components/About/About.tsx | 55 ++++++ src/components/Table/GroupedTable.tsx | 70 ++++++++ src/domain/props/GroupedTableProps.ts | 28 +++ yarn.lock | 238 +++++++++++++++++++++++++- 6 files changed, 395 insertions(+), 1 deletion(-) create mode 100644 public/icons/xmark-solid.svg create mode 100644 src/components/Table/GroupedTable.tsx create mode 100644 src/domain/props/GroupedTableProps.ts diff --git a/package.json b/package.json index c652e1e5..bccc4c85 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "@nextui-org/snippet": "2.0.43", "@nextui-org/switch": "2.0.34", "@nextui-org/system": "2.2.6", + "@nextui-org/table": "^2.0.40", "@nextui-org/theme": "2.2.11", "@react-aria/ssr": "3.9.4", "@react-aria/visually-hidden": "3.8.12", diff --git a/public/icons/xmark-solid.svg b/public/icons/xmark-solid.svg new file mode 100644 index 00000000..c0fe14e6 --- /dev/null +++ b/public/icons/xmark-solid.svg @@ -0,0 +1,4 @@ + + + diff --git a/src/components/About/About.tsx b/src/components/About/About.tsx index 367b43cf..16e7cdca 100644 --- a/src/components/About/About.tsx +++ b/src/components/About/About.tsx @@ -1,7 +1,55 @@ +'use client'; + +// 'use client' is necessary because of an unresolved bug in NextUI Table +// https://github.com/nextui-org/nextui/issues/1403#issuecomment-1678863519 + import { Link } from '@nextui-org/link'; import React from 'react'; import HungerMapLiveSuperscript from '@/components/About/HungerMapLiveSuperscript'; +import GroupedTable from '@/components/Table/GroupedTable'; +import { GroupedTableColumns, GroupedTableData } from '@/domain/props/GroupedTableProps'; + +const accuracyTableColumns = [ + { columnId: 'mainColumn', label: 'Measure' }, + { columnId: 'withPast', label: 'With past data' }, + { columnId: 'FCS', label: 'FCS' }, + { columnId: 'rCSI', label: 'rCSI' }, +] as GroupedTableColumns; + +const accuracyTableData = [ + { + groupKey: '1', + groupName: ( + <> + {' '} + + Coefficient of determination (R²) + {' '} + (higher is better) + + ), + attributeRows: [ + { withPast: true, FCS: 0.75, rCSI: 0.78 }, + { withPast: false, FCS: 0.63, rCSI: 0.73 }, + ], + }, + { + groupKey: '2', + groupName: ( + <> + + Mean Absolute Error + {' '} + (lower is better) + + ), + attributeRows: [ + { withPast: true, FCS: 0.08, rCSI: 0.06 }, + { withPast: false, FCS: 0.09, rCSI: 0.07 }, + ], + }, +] as GroupedTableData; export function About() { return ( @@ -39,6 +87,13 @@ export function About() { .

+
+ +
); } diff --git a/src/components/Table/GroupedTable.tsx b/src/components/Table/GroupedTable.tsx new file mode 100644 index 00000000..3905a861 --- /dev/null +++ b/src/components/Table/GroupedTable.tsx @@ -0,0 +1,70 @@ +import { Table, TableBody, TableCell, TableColumn, TableHeader, TableRow } from '@nextui-org/table'; +import React from 'react'; + +import GroupedTableProps, { GroupedTableRow } from '@/domain/props/GroupedTableProps'; + +// This function cannot be converted into a component because TableCell has to be the direct descendant of a TableRow. +function getTableCell(row: GroupedTableRow, columnKey: string) { + if (columnKey === 'mainColumn' && row.index > 0) + // don't return null here because TableRow can't deal with that + // eslint-disable-next-line react/jsx-no-useless-fragment + return <>; + + let cellContent = row.cellContents[columnKey]; + if (typeof cellContent === 'boolean') cellContent = cellContent ? '✅' : '❎'; + const addBottomBorder = row.index === row.groupLength - 1 || columnKey === 'mainColumn'; + + return ( + + {cellContent} + + ); +} + +/** + * A table with its rows grouped by the values in the first column. + * + * Rows belonging to different groups are visually seperated by a divider. + */ +function GroupedTable({ columns, data, ariaLabel }: GroupedTableProps) { + const rows = data.flatMap(({ groupKey, groupName, attributeRows }) => + attributeRows.map((row, index) => ({ + index, + groupKey, + groupLength: attributeRows.length, + cellContents: { + mainColumn: groupName, + ...row, + }, + })) + ) as GroupedTableRow[]; + + return ( + tr:last-child]:hidden' }}> + + {({ columnId, label }) => ( + + {label} + + )} + + + {(row) => { + return ( + + {(columnKey) => getTableCell(row, columnKey as string)} + + ); + }} + +
+ ); +} + +export default GroupedTable; diff --git a/src/domain/props/GroupedTableProps.ts b/src/domain/props/GroupedTableProps.ts new file mode 100644 index 00000000..51244f6b --- /dev/null +++ b/src/domain/props/GroupedTableProps.ts @@ -0,0 +1,28 @@ +import { ReactNode } from 'react'; + +export type GroupedTableRow = { + index: number; + groupKey: string; + groupLength: number; + cellContents: { + mainColumn: ReactNode; + [columnKey: string]: ReactNode; + }; +}; + +export type GroupedTableColumns = { columnId: string; label: ReactNode }[] & { + // the first described column should be mainColumn + 0: { columnId: 'mainColumn'; label: ReactNode }; +}; + +export type GroupedTableData = { + groupKey: string; + groupName: ReactNode; + attributeRows: readonly { [columnId: string]: ReactNode }[]; +}[]; + +export default interface GroupedTableProps { + columns: GroupedTableColumns; + data: GroupedTableData; + ariaLabel?: string; +} diff --git a/yarn.lock b/yarn.lock index 40844bf3..acbec9ce 100644 --- a/yarn.lock +++ b/yarn.lock @@ -440,6 +440,25 @@ "@react-types/button" "3.9.4" "@react-types/shared" "3.23.1" +"@nextui-org/checkbox@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nextui-org/checkbox/-/checkbox-2.1.5.tgz#6b3083b7b53cf8a6e3c20e6063ca21a66866432e" + integrity sha512-PSCWmxEzFPfeIJfoGAtbQS5T7JvBRblUMz5NdCMArA8MLvWW8EKL41cMPsqWjaUanjD0fAI8Q9HuDfBZnkcPbw== + dependencies: + "@nextui-org/react-utils" "2.0.17" + "@nextui-org/shared-utils" "2.0.8" + "@nextui-org/use-callback-ref" "2.0.6" + "@nextui-org/use-safe-layout-effect" "2.0.6" + "@react-aria/checkbox" "3.14.3" + "@react-aria/focus" "3.17.1" + "@react-aria/interactions" "3.21.3" + "@react-aria/utils" "3.24.1" + "@react-aria/visually-hidden" "3.8.12" + "@react-stately/checkbox" "3.6.5" + "@react-stately/toggle" "3.7.4" + "@react-types/checkbox" "3.8.1" + "@react-types/shared" "3.23.1" + "@nextui-org/code@2.0.33": version "2.0.33" resolved "https://registry.yarnpkg.com/@nextui-org/code/-/code-2.0.33.tgz#04ba9280e08505c6c4a57cac029f6db1411cac55" @@ -599,6 +618,15 @@ "@react-aria/focus" "3.17.1" "@react-aria/utils" "3.24.1" +"@nextui-org/spacer@2.0.33": + version "2.0.33" + resolved "https://registry.yarnpkg.com/@nextui-org/spacer/-/spacer-2.0.33.tgz#6c8bb36fbe7e7e135f5e8dac9b2a92324b930db9" + integrity sha512-0YDtovMWuAVgBvVXUmplzohObGxMPFhisHXn6v+0nflAE9LiVeiXf121WVOEMrd08S7xvmrAANcMwo4TsYi49g== + dependencies: + "@nextui-org/react-utils" "2.0.17" + "@nextui-org/shared-utils" "2.0.8" + "@nextui-org/system-rsc" "2.1.6" + "@nextui-org/spinner@2.0.34": version "2.0.34" resolved "https://registry.yarnpkg.com/@nextui-org/spinner/-/spinner-2.0.34.tgz#91f1d3db33fa4ceedbd88e00e7b1a10c7833c9b5" @@ -645,6 +673,26 @@ "@react-aria/utils" "3.24.1" "@react-stately/utils" "3.10.1" +"@nextui-org/table@^2.0.40": + version "2.0.40" + resolved "https://registry.yarnpkg.com/@nextui-org/table/-/table-2.0.40.tgz#2ee8e380402e0cf0eaf468cf1ec931712b5aa12f" + integrity sha512-qDbSsu6mpWnr1Mt3DYTBzTFtN8Z5Gv7GDqECGcDVradkDVuJFZvkB9Ke392LcVZoXSk99Rpamq4WSWkEewBhWg== + dependencies: + "@nextui-org/checkbox" "2.1.5" + "@nextui-org/react-utils" "2.0.17" + "@nextui-org/shared-icons" "2.0.9" + "@nextui-org/shared-utils" "2.0.8" + "@nextui-org/spacer" "2.0.33" + "@react-aria/focus" "3.17.1" + "@react-aria/interactions" "3.21.3" + "@react-aria/table" "3.14.1" + "@react-aria/utils" "3.24.1" + "@react-aria/visually-hidden" "3.8.12" + "@react-stately/table" "3.11.8" + "@react-stately/virtualizer" "3.7.1" + "@react-types/grid" "3.2.6" + "@react-types/table" "3.9.5" + "@nextui-org/theme@2.2.11": version "2.2.11" resolved "https://registry.yarnpkg.com/@nextui-org/theme/-/theme-2.2.11.tgz#e56bd6568326819c8bd22ae58fb9d75ac6c7cb39" @@ -714,6 +762,13 @@ "@react-types/button" "3.9.4" "@react-types/shared" "3.23.1" +"@nextui-org/use-callback-ref@2.0.6": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@nextui-org/use-callback-ref/-/use-callback-ref-2.0.6.tgz#6720a1381d4ce79ae7075949a647b03be8309d99" + integrity sha512-2WcwWuK1L/wIpTbibnLrysmmkzWomvkVIcgWayB6n/w+bpPrPCG7Zyg2WHzmMmDhe6imV//KKBgNKRi8Xhu/VA== + dependencies: + "@nextui-org/use-safe-layout-effect" "2.0.6" + "@nextui-org/use-clipboard@2.0.7": version "2.0.7" resolved "https://registry.yarnpkg.com/@nextui-org/use-clipboard/-/use-clipboard-2.0.7.tgz#f572f8c2c37f9248c4aebc7b31019e685ae33f82" @@ -790,6 +845,23 @@ "@react-types/shared" "^3.23.1" "@swc/helpers" "^0.5.0" +"@react-aria/checkbox@3.14.3": + version "3.14.3" + resolved "https://registry.yarnpkg.com/@react-aria/checkbox/-/checkbox-3.14.3.tgz#6e2579681008e460d2c764a03f1f1b54e0815868" + integrity sha512-EtBJL6iu0gvrw3A4R7UeVLR6diaVk/mh4kFBc7c8hQjpEJweRr4hmJT3hrNg3MBcTWLxFiMEXPGgWEwXDBygtA== + dependencies: + "@react-aria/form" "^3.0.5" + "@react-aria/interactions" "^3.21.3" + "@react-aria/label" "^3.7.8" + "@react-aria/toggle" "^3.10.4" + "@react-aria/utils" "^3.24.1" + "@react-stately/checkbox" "^3.6.5" + "@react-stately/form" "^3.0.3" + "@react-stately/toggle" "^3.7.4" + "@react-types/checkbox" "^3.8.1" + "@react-types/shared" "^3.23.1" + "@swc/helpers" "^0.5.0" + "@react-aria/focus@3.17.1": version "3.17.1" resolved "https://registry.yarnpkg.com/@react-aria/focus/-/focus-3.17.1.tgz#c796a188120421e2fedf438cadacdf463c77ad29" @@ -823,6 +895,25 @@ "@react-types/shared" "^3.25.0" "@swc/helpers" "^0.5.0" +"@react-aria/grid@^3.9.1": + version "3.10.5" + resolved "https://registry.yarnpkg.com/@react-aria/grid/-/grid-3.10.5.tgz#34caf94aa2442949e75a825684f6b7bea0b8af43" + integrity sha512-9sLa+rpLgRZk7VX+tvdSudn1tdVgolVzhDLGWd95yS4UtPVMihTMGBrRoByY57Wxvh1V+7Ptw8kc6tsRSotYKg== + dependencies: + "@react-aria/focus" "^3.18.4" + "@react-aria/i18n" "^3.12.3" + "@react-aria/interactions" "^3.22.4" + "@react-aria/live-announcer" "^3.4.0" + "@react-aria/selection" "^3.20.1" + "@react-aria/utils" "^3.25.3" + "@react-stately/collections" "^3.11.0" + "@react-stately/grid" "^3.9.3" + "@react-stately/selection" "^3.17.0" + "@react-types/checkbox" "^3.8.4" + "@react-types/grid" "^3.2.9" + "@react-types/shared" "^3.25.0" + "@swc/helpers" "^0.5.0" + "@react-aria/i18n@3.11.1": version "3.11.1" resolved "https://registry.yarnpkg.com/@react-aria/i18n/-/i18n-3.11.1.tgz#2d238d2be30d8c691b5fa3161f5fb48066fc8e4b" @@ -907,6 +998,13 @@ "@react-types/shared" "^3.23.1" "@swc/helpers" "^0.5.0" +"@react-aria/live-announcer@^3.3.4", "@react-aria/live-announcer@^3.4.0": + version "3.4.0" + resolved "https://registry.yarnpkg.com/@react-aria/live-announcer/-/live-announcer-3.4.0.tgz#0ad90fddc4731e93071d802c8cec9e1dfd2fc448" + integrity sha512-VBxEdMq2SbtRbNTQNcDR2G6E3lEl5cJSBiHTTO8Ln1AL76LiazrylIXGgoktqzCfRQmyq0v8CHk1cNKDU9mvJg== + dependencies: + "@swc/helpers" "^0.5.0" + "@react-aria/overlays@3.22.1": version "3.22.1" resolved "https://registry.yarnpkg.com/@react-aria/overlays/-/overlays-3.22.1.tgz#7a01673317fa6517bb91b0b7504e303facdc9ccb" @@ -924,7 +1022,7 @@ "@react-types/shared" "^3.23.1" "@swc/helpers" "^0.5.0" -"@react-aria/selection@^3.18.1": +"@react-aria/selection@^3.18.1", "@react-aria/selection@^3.20.1": version "3.20.1" resolved "https://registry.yarnpkg.com/@react-aria/selection/-/selection-3.20.1.tgz#94b405214ea8506410f632fd2bfe470b9360ebfb" integrity sha512-My0w8UC/7PAkz/1yZUjr2VRuzDZz1RrbgTqP36j5hsJx8RczDTjI4TmKtQNKG0ggaP4w83G2Og5JPTq3w3LMAw== @@ -961,6 +1059,28 @@ "@react-types/switch" "^3.5.3" "@swc/helpers" "^0.5.0" +"@react-aria/table@3.14.1": + version "3.14.1" + resolved "https://registry.yarnpkg.com/@react-aria/table/-/table-3.14.1.tgz#6316349e17fe6adfe9132aab75ce72c4a44c028f" + integrity sha512-WaPgQe4zQF5OaluO5rm+Y2nEoFR63vsLd4BT4yjK1uaFhKhDY2Zk+1SCVQvBLLKS4WK9dhP05nrNzT0vp/ZPOw== + dependencies: + "@react-aria/focus" "^3.17.1" + "@react-aria/grid" "^3.9.1" + "@react-aria/i18n" "^3.11.1" + "@react-aria/interactions" "^3.21.3" + "@react-aria/live-announcer" "^3.3.4" + "@react-aria/utils" "^3.24.1" + "@react-aria/visually-hidden" "^3.8.12" + "@react-stately/collections" "^3.10.7" + "@react-stately/flags" "^3.0.3" + "@react-stately/table" "^3.11.8" + "@react-stately/virtualizer" "^3.7.1" + "@react-types/checkbox" "^3.8.1" + "@react-types/grid" "^3.2.6" + "@react-types/shared" "^3.23.1" + "@react-types/table" "^3.9.5" + "@swc/helpers" "^0.5.0" + "@react-aria/textfield@3.14.5": version "3.14.5" resolved "https://registry.yarnpkg.com/@react-aria/textfield/-/textfield-3.14.5.tgz#afb46b4af019dc88fc7f77396cea5ec0c9701f01" @@ -1049,6 +1169,28 @@ resolved "https://registry.yarnpkg.com/@react-leaflet/core/-/core-2.1.0.tgz#383acd31259d7c9ae8fb1b02d5e18fe613c2a13d" integrity sha512-Qk7Pfu8BSarKGqILj4x7bCSZ1pjuAPZ+qmRwH5S7mDS91VSbVVsJSrW4qA+GPrro8t69gFYVMWb1Zc4yFmPiVg== +"@react-stately/checkbox@3.6.5": + version "3.6.5" + resolved "https://registry.yarnpkg.com/@react-stately/checkbox/-/checkbox-3.6.5.tgz#0566eae3ba3a84af6f29526b3feaf124d3c3a66b" + integrity sha512-IXV3f9k+LtmfQLE+DKIN41Q5QB/YBLDCB1YVx5PEdRp52S9+EACD5683rjVm8NVRDwjMi2SP6RnFRk7fVb5Azg== + dependencies: + "@react-stately/form" "^3.0.3" + "@react-stately/utils" "^3.10.1" + "@react-types/checkbox" "^3.8.1" + "@react-types/shared" "^3.23.1" + "@swc/helpers" "^0.5.0" + +"@react-stately/checkbox@^3.6.5": + version "3.6.9" + resolved "https://registry.yarnpkg.com/@react-stately/checkbox/-/checkbox-3.6.9.tgz#e7ff459cb8fe2f57bac37ed666e8304eb70a8ed3" + integrity sha512-JrY3ecnK/SSJPxw+qhGhg3YV4e0CpUcPDrVwY3mSiAE932DPd19xr+qVCknJ34H7JYYt/q0l2z0lmgPnl96RTg== + dependencies: + "@react-stately/form" "^3.0.6" + "@react-stately/utils" "^3.10.4" + "@react-types/checkbox" "^3.8.4" + "@react-types/shared" "^3.25.0" + "@swc/helpers" "^0.5.0" + "@react-stately/collections@3.10.7": version "3.10.7" resolved "https://registry.yarnpkg.com/@react-stately/collections/-/collections-3.10.7.tgz#b1add46cb8e2f2a0d33938ef1b232fb2d0fd11eb" @@ -1065,6 +1207,13 @@ "@react-types/shared" "^3.25.0" "@swc/helpers" "^0.5.0" +"@react-stately/flags@^3.0.3", "@react-stately/flags@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@react-stately/flags/-/flags-3.0.4.tgz#ac778647733b6f7c46f4b0f907cec82f08986490" + integrity sha512-RNJEkOALwKg+JeYsfNlfPc4GXm7hiBLX0yuHOkRapWEyDOfi0cinkV/TZG4goOZdQ5tBpHmemf2qqiHAxqHlzQ== + dependencies: + "@swc/helpers" "^0.5.0" + "@react-stately/form@^3.0.3", "@react-stately/form@^3.0.6": version "3.0.6" resolved "https://registry.yarnpkg.com/@react-stately/form/-/form-3.0.6.tgz#788c837a7967a499366928a91738b15dd7f87d77" @@ -1073,6 +1222,17 @@ "@react-types/shared" "^3.25.0" "@swc/helpers" "^0.5.0" +"@react-stately/grid@^3.8.7", "@react-stately/grid@^3.9.3": + version "3.9.3" + resolved "https://registry.yarnpkg.com/@react-stately/grid/-/grid-3.9.3.tgz#1ead7cc7b6d036c4609692eaf818a70f472ba8c8" + integrity sha512-P5KgCNYwm/n8bbLx6527li89RQWoESikrsg2MMyUpUd6IJ321t2pGONGRRQzxE0SBMolPRDJKV0Do2OlsjYKhQ== + dependencies: + "@react-stately/collections" "^3.11.0" + "@react-stately/selection" "^3.17.0" + "@react-types/grid" "^3.2.9" + "@react-types/shared" "^3.25.0" + "@swc/helpers" "^0.5.0" + "@react-stately/list@3.10.5": version "3.10.5" resolved "https://registry.yarnpkg.com/@react-stately/list/-/list-3.10.5.tgz#b68ebd595b5f4a51d6719cdcabd34f0780e95b85" @@ -1123,6 +1283,36 @@ "@react-types/shared" "^3.25.0" "@swc/helpers" "^0.5.0" +"@react-stately/table@3.11.8": + version "3.11.8" + resolved "https://registry.yarnpkg.com/@react-stately/table/-/table-3.11.8.tgz#b5323b095be8937761b9c5598f38623089047cf8" + integrity sha512-EdyRW3lT1/kAVDp5FkEIi1BQ7tvmD2YgniGdLuW/l9LADo0T+oxZqruv60qpUS6sQap+59Riaxl91ClDxrJnpg== + dependencies: + "@react-stately/collections" "^3.10.7" + "@react-stately/flags" "^3.0.3" + "@react-stately/grid" "^3.8.7" + "@react-stately/selection" "^3.15.1" + "@react-stately/utils" "^3.10.1" + "@react-types/grid" "^3.2.6" + "@react-types/shared" "^3.23.1" + "@react-types/table" "^3.9.5" + "@swc/helpers" "^0.5.0" + +"@react-stately/table@^3.11.8": + version "3.12.3" + resolved "https://registry.yarnpkg.com/@react-stately/table/-/table-3.12.3.tgz#aae5fa267af2de6ed77a79b8482758ffdd318e80" + integrity sha512-8uGrLcNJYeMbFtzRQZFWCBj5kV+7v3jzwoKIL1j9TmYUKow1PTDMQbPJpAZLQhnC2wVMlaFVgDbedSlbBij7Zg== + dependencies: + "@react-stately/collections" "^3.11.0" + "@react-stately/flags" "^3.0.4" + "@react-stately/grid" "^3.9.3" + "@react-stately/selection" "^3.17.0" + "@react-stately/utils" "^3.10.4" + "@react-types/grid" "^3.2.9" + "@react-types/shared" "^3.25.0" + "@react-types/table" "^3.10.2" + "@swc/helpers" "^0.5.0" + "@react-stately/toggle@3.7.4": version "3.7.4" resolved "https://registry.yarnpkg.com/@react-stately/toggle/-/toggle-3.7.4.tgz#3345b5c939db96305af7c22b73577db5536220ab" @@ -1173,6 +1363,15 @@ dependencies: "@swc/helpers" "^0.5.0" +"@react-stately/virtualizer@3.7.1", "@react-stately/virtualizer@^3.7.1": + version "3.7.1" + resolved "https://registry.yarnpkg.com/@react-stately/virtualizer/-/virtualizer-3.7.1.tgz#eb962d2ce700c026ce1b1d901034601db9d370c0" + integrity sha512-voHgE6EQ+oZaLv6u2umKxakvIKNkCQuUihqKACTjdslp7SJh4Mvs3oLBI0hf0JOh+rCcFIKDvQtFwy1fXFRYBA== + dependencies: + "@react-aria/utils" "^3.24.1" + "@react-types/shared" "^3.23.1" + "@swc/helpers" "^0.5.0" + "@react-types/button@3.9.4": version "3.9.4" resolved "https://registry.yarnpkg.com/@react-types/button/-/button-3.9.4.tgz#ec10452e870660d31db1994f6fe4abfe0c800814" @@ -1187,6 +1386,13 @@ dependencies: "@react-types/shared" "^3.25.0" +"@react-types/checkbox@3.8.1": + version "3.8.1" + resolved "https://registry.yarnpkg.com/@react-types/checkbox/-/checkbox-3.8.1.tgz#de82c93542b2dd85c01df2e0c85c33a2e6349d14" + integrity sha512-5/oVByPw4MbR/8QSdHCaalmyWC71H/QGgd4aduTJSaNi825o+v/hsN2/CH7Fq9atkLKsC8fvKD00Bj2VGaKriQ== + dependencies: + "@react-types/shared" "^3.23.1" + "@react-types/checkbox@^3.8.1", "@react-types/checkbox@^3.8.4": version "3.8.4" resolved "https://registry.yarnpkg.com/@react-types/checkbox/-/checkbox-3.8.4.tgz#a51b90025fd362d8b755d8a95640a0134124f688" @@ -1194,6 +1400,20 @@ dependencies: "@react-types/shared" "^3.25.0" +"@react-types/grid@3.2.6": + version "3.2.6" + resolved "https://registry.yarnpkg.com/@react-types/grid/-/grid-3.2.6.tgz#c0aba4a748d1722bafe85acf87f8d9d5134653b3" + integrity sha512-XfHenL2jEBUYrhKiPdeM24mbLRXUn79wVzzMhrNYh24nBwhsPPpxF+gjFddT3Cy8dt6tRInfT6pMEu9nsXwaHw== + dependencies: + "@react-types/shared" "^3.23.1" + +"@react-types/grid@^3.2.6", "@react-types/grid@^3.2.9": + version "3.2.9" + resolved "https://registry.yarnpkg.com/@react-types/grid/-/grid-3.2.9.tgz#2a3e7b78cdca2df60e408b6f4f2bc6173ac98a0e" + integrity sha512-eMw0d2UIZ4QTzGgD1wGGPw0cv67KjAOCp4TcwWjgDV7Wa5SVV/UvOmpnIVDyfhkG/4KRI5OR9h+isy76B726qA== + dependencies: + "@react-types/shared" "^3.25.0" + "@react-types/link@3.5.5": version "3.5.5" resolved "https://registry.yarnpkg.com/@react-types/link/-/link-3.5.5.tgz#5ed829aa32f226fe62efb0d906b1926c110daf02" @@ -1254,6 +1474,22 @@ dependencies: "@react-types/shared" "^3.25.0" +"@react-types/table@3.9.5": + version "3.9.5" + resolved "https://registry.yarnpkg.com/@react-types/table/-/table-3.9.5.tgz#7910debd618405598583a10588a75f97c7b15eeb" + integrity sha512-fgM2j9F/UR4Anmd28CueghCgBwOZoCVyN8fjaIFPd2MN4gCwUUfANwxLav65gZk4BpwUXGoQdsW+X50L3555mg== + dependencies: + "@react-types/grid" "^3.2.6" + "@react-types/shared" "^3.23.1" + +"@react-types/table@^3.10.2", "@react-types/table@^3.9.5": + version "3.10.2" + resolved "https://registry.yarnpkg.com/@react-types/table/-/table-3.10.2.tgz#5e0be00eb61899ac6c9c322c6bad9cf94cbe157b" + integrity sha512-YzA4hcsYfnFFpA2UyGb1KKhLpWgaj5daApqjp126tCIosl8k1KxZmhKD50cwH0Jm19lALJseqo5VdlcJtcr4qg== + dependencies: + "@react-types/grid" "^3.2.9" + "@react-types/shared" "^3.25.0" + "@react-types/textfield@3.9.3": version "3.9.3" resolved "https://registry.yarnpkg.com/@react-types/textfield/-/textfield-3.9.3.tgz#23db9d87ddadc4eddff3f85406af91e442f01dc9" From 14147f94c78c5533b776c53e8005518b4c60ba82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20Sch=C3=B6dl?= Date: Fri, 8 Nov 2024 14:41:34 +0100 Subject: [PATCH 03/14] fix: remove unused icon --- public/icons/xmark-solid.svg | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 public/icons/xmark-solid.svg diff --git a/public/icons/xmark-solid.svg b/public/icons/xmark-solid.svg deleted file mode 100644 index c0fe14e6..00000000 --- a/public/icons/xmark-solid.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - From bdda653e8918fb474f053c9bd6bbcb5ca03e03f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20Sch=C3=B6dl?= Date: Fri, 8 Nov 2024 15:31:05 +0100 Subject: [PATCH 04/14] fix: use clsx instead of ternary operator --- src/components/Table/GroupedTable.tsx | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/components/Table/GroupedTable.tsx b/src/components/Table/GroupedTable.tsx index 3905a861..e0ec672e 100644 --- a/src/components/Table/GroupedTable.tsx +++ b/src/components/Table/GroupedTable.tsx @@ -1,4 +1,5 @@ import { Table, TableBody, TableCell, TableColumn, TableHeader, TableRow } from '@nextui-org/table'; +import clsx from 'clsx'; import React from 'react'; import GroupedTableProps, { GroupedTableRow } from '@/domain/props/GroupedTableProps'; @@ -16,7 +17,10 @@ function getTableCell(row: GroupedTableRow, columnKey: string) { return ( {cellContent} @@ -48,7 +52,7 @@ function GroupedTable({ columns, data, ariaLabel }: GroupedTableProps) { {({ columnId, label }) => ( {label} From 1603456e3b93662af9a184f44c1ed9e00934c6bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20Sch=C3=B6dl?= Date: Mon, 11 Nov 2024 09:48:28 +0100 Subject: [PATCH 05/14] fix: extract grouped table logic to groupedTableOperations.tsx --- src/components/About/About.tsx | 2 +- .../{Table => GroupedTable}/GroupedTable.tsx | 27 ++--------------- .../groupedTable/groupedTableOperations.tsx | 29 +++++++++++++++++++ 3 files changed, 32 insertions(+), 26 deletions(-) rename src/components/{Table => GroupedTable}/GroupedTable.tsx (58%) create mode 100644 src/operations/groupedTable/groupedTableOperations.tsx diff --git a/src/components/About/About.tsx b/src/components/About/About.tsx index 16e7cdca..dde4eed1 100644 --- a/src/components/About/About.tsx +++ b/src/components/About/About.tsx @@ -7,7 +7,7 @@ import { Link } from '@nextui-org/link'; import React from 'react'; import HungerMapLiveSuperscript from '@/components/About/HungerMapLiveSuperscript'; -import GroupedTable from '@/components/Table/GroupedTable'; +import GroupedTable from '@/components/GroupedTable/GroupedTable'; import { GroupedTableColumns, GroupedTableData } from '@/domain/props/GroupedTableProps'; const accuracyTableColumns = [ diff --git a/src/components/Table/GroupedTable.tsx b/src/components/GroupedTable/GroupedTable.tsx similarity index 58% rename from src/components/Table/GroupedTable.tsx rename to src/components/GroupedTable/GroupedTable.tsx index e0ec672e..576a9049 100644 --- a/src/components/Table/GroupedTable.tsx +++ b/src/components/GroupedTable/GroupedTable.tsx @@ -1,32 +1,9 @@ -import { Table, TableBody, TableCell, TableColumn, TableHeader, TableRow } from '@nextui-org/table'; +import { Table, TableBody, TableColumn, TableHeader, TableRow } from '@nextui-org/table'; import clsx from 'clsx'; import React from 'react'; import GroupedTableProps, { GroupedTableRow } from '@/domain/props/GroupedTableProps'; - -// This function cannot be converted into a component because TableCell has to be the direct descendant of a TableRow. -function getTableCell(row: GroupedTableRow, columnKey: string) { - if (columnKey === 'mainColumn' && row.index > 0) - // don't return null here because TableRow can't deal with that - // eslint-disable-next-line react/jsx-no-useless-fragment - return <>; - - let cellContent = row.cellContents[columnKey]; - if (typeof cellContent === 'boolean') cellContent = cellContent ? '✅' : '❎'; - const addBottomBorder = row.index === row.groupLength - 1 || columnKey === 'mainColumn'; - - return ( - - {cellContent} - - ); -} +import { getTableCell } from '@/operations/groupedTable/groupedTableOperations'; /** * A table with its rows grouped by the values in the first column. diff --git a/src/operations/groupedTable/groupedTableOperations.tsx b/src/operations/groupedTable/groupedTableOperations.tsx new file mode 100644 index 00000000..3138196d --- /dev/null +++ b/src/operations/groupedTable/groupedTableOperations.tsx @@ -0,0 +1,29 @@ +import { TableCell } from '@nextui-org/table'; +import clsx from 'clsx'; +import React from 'react'; + +import { GroupedTableRow } from '@/domain/props/GroupedTableProps'; + +// This function cannot be converted into a component because TableCell has to be the direct descendant of a TableRow. +export function getTableCell(row: GroupedTableRow, columnKey: string) { + if (columnKey === 'mainColumn' && row.index > 0) + // don't return null here because TableRow can't deal with that + // eslint-disable-next-line react/jsx-no-useless-fragment + return <>; + + let cellContent = row.cellContents[columnKey]; + if (typeof cellContent === 'boolean') cellContent = cellContent ? '✅' : '❎'; + const addBottomBorder = row.index === row.groupLength - 1 || columnKey === 'mainColumn'; + + return ( + + {cellContent} + + ); +} From 0001c7aa1af5bbeade5801f52c56147edd00ba07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20Sch=C3=B6dl?= Date: Mon, 11 Nov 2024 10:11:56 +0100 Subject: [PATCH 06/14] feat: add /about page --- src/app/about/page.tsx | 20 ++++ src/components/About/About.tsx | 101 ------------------ src/components/About/AboutText.tsx | 41 +++++++ src/components/GroupedTable/GroupedTable.tsx | 5 + src/domain/constant/about/accordionItems.tsx | 19 ++++ .../constant/about/accuracyTableData.tsx | 43 ++++++++ yarn.lock | 2 +- 7 files changed, 129 insertions(+), 102 deletions(-) create mode 100644 src/app/about/page.tsx delete mode 100644 src/components/About/About.tsx create mode 100644 src/components/About/AboutText.tsx create mode 100644 src/domain/constant/about/accordionItems.tsx create mode 100644 src/domain/constant/about/accuracyTableData.tsx diff --git a/src/app/about/page.tsx b/src/app/about/page.tsx new file mode 100644 index 00000000..fe5a6f18 --- /dev/null +++ b/src/app/about/page.tsx @@ -0,0 +1,20 @@ +import React from 'react'; + +import AboutText from '@/components/About/AboutText'; +import HungerMapLiveSuperscript from '@/components/About/HungerMapLiveSuperscript'; +import Accordion from '@/components/Accordions/Accordion'; +import accordionItems from '@/domain/constant/about/accordionItems'; + +function Page() { + return ( +
+

+ About +

+ + +
+ ); +} + +export default Page; diff --git a/src/components/About/About.tsx b/src/components/About/About.tsx deleted file mode 100644 index dde4eed1..00000000 --- a/src/components/About/About.tsx +++ /dev/null @@ -1,101 +0,0 @@ -'use client'; - -// 'use client' is necessary because of an unresolved bug in NextUI Table -// https://github.com/nextui-org/nextui/issues/1403#issuecomment-1678863519 - -import { Link } from '@nextui-org/link'; -import React from 'react'; - -import HungerMapLiveSuperscript from '@/components/About/HungerMapLiveSuperscript'; -import GroupedTable from '@/components/GroupedTable/GroupedTable'; -import { GroupedTableColumns, GroupedTableData } from '@/domain/props/GroupedTableProps'; - -const accuracyTableColumns = [ - { columnId: 'mainColumn', label: 'Measure' }, - { columnId: 'withPast', label: 'With past data' }, - { columnId: 'FCS', label: 'FCS' }, - { columnId: 'rCSI', label: 'rCSI' }, -] as GroupedTableColumns; - -const accuracyTableData = [ - { - groupKey: '1', - groupName: ( - <> - {' '} - - Coefficient of determination (R²) - {' '} - (higher is better) - - ), - attributeRows: [ - { withPast: true, FCS: 0.75, rCSI: 0.78 }, - { withPast: false, FCS: 0.63, rCSI: 0.73 }, - ], - }, - { - groupKey: '2', - groupName: ( - <> - - Mean Absolute Error - {' '} - (lower is better) - - ), - attributeRows: [ - { withPast: true, FCS: 0.08, rCSI: 0.06 }, - { withPast: false, FCS: 0.09, rCSI: 0.07 }, - ], - }, -] as GroupedTableData; - -export function About() { - return ( -
-

- About -

-
-

- - is the World Food Programme (WFP)’s global hunger monitoring system. - {' '} - It combines key metrics from various data sources – such as food security information, weather, population - size, conflict, hazards, nutrition information and macro-economic data – to help assess, monitor and predict - the magnitude and severity of hunger in near real-time. The resulting analysis is displayed on an interactive - map that helps WFP staff, key decision makers and the broader humanitarian community to make more informed and - timely decisions relating to food security. -

-

- The platform covers 94 countries, including countries where WFP has operations as well as most{' '} - - lower and lower-middle income countries - {' '} - (as classified by the World Bank). For any questions, comments, or if you would like further information, - please get in touch by sending an email to{' '} - - wfp.mvam@wfp.org - - . -

-
-
- -
-
- ); -} - -export default About; diff --git a/src/components/About/AboutText.tsx b/src/components/About/AboutText.tsx new file mode 100644 index 00000000..c4e9c996 --- /dev/null +++ b/src/components/About/AboutText.tsx @@ -0,0 +1,41 @@ +import { Link } from '@nextui-org/link'; +import React from 'react'; + +import HungerMapLiveSuperscript from '@/components/About/HungerMapLiveSuperscript'; + +export function AboutText() { + return ( +
+

+ + is the World Food Programme (WFP)’s global hunger monitoring system. + {' '} + It combines key metrics from various data sources – such as food security information, weather, population size, + conflict, hazards, nutrition information and macro-economic data – to help assess, monitor and predict the + magnitude and severity of hunger in near real-time. The resulting analysis is displayed on an interactive map + that helps WFP staff, key decision makers and the broader humanitarian community to make more informed and + timely decisions relating to food security. +

+

+ The platform covers 94 countries, including countries where WFP has operations as well as most{' '} + + lower and lower-middle income countries + {' '} + (as classified by the World Bank). For any questions, comments, or if you would like further information, please + get in touch by sending an email to{' '} + + wfp.mvam@wfp.org + + . +

+
+ ); +} + +export default AboutText; diff --git a/src/components/GroupedTable/GroupedTable.tsx b/src/components/GroupedTable/GroupedTable.tsx index 576a9049..2bd7ea48 100644 --- a/src/components/GroupedTable/GroupedTable.tsx +++ b/src/components/GroupedTable/GroupedTable.tsx @@ -1,3 +1,8 @@ +'use client'; + +// 'use client' is necessary because of an unresolved bug in NextUI (affects Table & Accordion) +// https://github.com/nextui-org/nextui/issues/1403#issuecomment-1678863519 + import { Table, TableBody, TableColumn, TableHeader, TableRow } from '@nextui-org/table'; import clsx from 'clsx'; import React from 'react'; diff --git a/src/domain/constant/about/accordionItems.tsx b/src/domain/constant/about/accordionItems.tsx new file mode 100644 index 00000000..1d803db7 --- /dev/null +++ b/src/domain/constant/about/accordionItems.tsx @@ -0,0 +1,19 @@ +import React from 'react'; + +import GroupedTable from '@/components/GroupedTable/GroupedTable'; +import { accuracyTableColumns, accuracyTableData } from '@/domain/constant/about/accuracyTableData'; + +const accordionItems = [ + { + title: 'How accurate are the prediction algorithms?', + content: ( + + ), + }, +]; + +export default accordionItems; diff --git a/src/domain/constant/about/accuracyTableData.tsx b/src/domain/constant/about/accuracyTableData.tsx new file mode 100644 index 00000000..537894e8 --- /dev/null +++ b/src/domain/constant/about/accuracyTableData.tsx @@ -0,0 +1,43 @@ +import { Link } from '@nextui-org/link'; + +import { GroupedTableColumns, GroupedTableData } from '@/domain/props/GroupedTableProps'; + +export const accuracyTableColumns = [ + { columnId: 'mainColumn', label: 'Measure' }, + { columnId: 'withPast', label: 'With past data' }, + { columnId: 'FCS', label: 'FCS' }, + { columnId: 'rCSI', label: 'rCSI' }, +] as GroupedTableColumns; +export const accuracyTableData = [ + { + groupKey: '1', + groupName: ( + <> + {' '} + + Coefficient of determination (R²) + {' '} + (higher is better) + + ), + attributeRows: [ + { withPast: true, FCS: 0.75, rCSI: 0.78 }, + { withPast: false, FCS: 0.63, rCSI: 0.73 }, + ], + }, + { + groupKey: '2', + groupName: ( + <> + + Mean Absolute Error + {' '} + (lower is better) + + ), + attributeRows: [ + { withPast: true, FCS: 0.08, rCSI: 0.06 }, + { withPast: false, FCS: 0.09, rCSI: 0.07 }, + ], + }, +] as GroupedTableData; diff --git a/yarn.lock b/yarn.lock index 0e34c1e0..f4162631 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1108,7 +1108,7 @@ "@react-aria/utils" "3.24.1" "@react-stately/utils" "3.10.1" -"@nextui-org/table@2.0.40": +"@nextui-org/table@2.0.40", "@nextui-org/table@^2.0.40": version "2.0.40" resolved "https://registry.yarnpkg.com/@nextui-org/table/-/table-2.0.40.tgz#2ee8e380402e0cf0eaf468cf1ec931712b5aa12f" integrity sha512-qDbSsu6mpWnr1Mt3DYTBzTFtN8Z5Gv7GDqECGcDVradkDVuJFZvkB9Ke392LcVZoXSk99Rpamq4WSWkEewBhWg== From 95f112bd5ad0649b918f64de60dee3c6ae8aff07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20Sch=C3=B6dl?= Date: Mon, 11 Nov 2024 13:47:35 +0100 Subject: [PATCH 07/14] feat: add contents to /about page --- src/app/about/page.tsx | 40 +++++++-- src/components/About/AboutText.tsx | 26 +++--- src/components/About/ExternalLink.tsx | 13 +++ src/domain/constant/about/accordionItems.tsx | 19 ---- ...ableData.tsx => accuracyTableContents.tsx} | 18 ++-- src/domain/constant/about/generalFaqItems.tsx | 79 ++++++++++++++++ .../constant/about/predictionFaqItems.tsx | 90 +++++++++++++++++++ .../constant/about/realTimeFaqItems.tsx | 62 +++++++++++++ src/styles/globals.css | 24 ++++- 9 files changed, 320 insertions(+), 51 deletions(-) create mode 100644 src/components/About/ExternalLink.tsx delete mode 100644 src/domain/constant/about/accordionItems.tsx rename src/domain/constant/about/{accuracyTableData.tsx => accuracyTableContents.tsx} (67%) create mode 100644 src/domain/constant/about/generalFaqItems.tsx create mode 100644 src/domain/constant/about/predictionFaqItems.tsx create mode 100644 src/domain/constant/about/realTimeFaqItems.tsx diff --git a/src/app/about/page.tsx b/src/app/about/page.tsx index fe5a6f18..75b7405f 100644 --- a/src/app/about/page.tsx +++ b/src/app/about/page.tsx @@ -1,18 +1,46 @@ import React from 'react'; import AboutText from '@/components/About/AboutText'; +import ExternalLink from '@/components/About/ExternalLink'; import HungerMapLiveSuperscript from '@/components/About/HungerMapLiveSuperscript'; import Accordion from '@/components/Accordions/Accordion'; -import accordionItems from '@/domain/constant/about/accordionItems'; +import generalFaqItems from '@/domain/constant/about/generalFaqItems'; +import predictionFaqItems from '@/domain/constant/about/predictionFaqItems'; +import realTimeFaqItems from '@/domain/constant/about/realTimeFaqItems'; function Page() { return (
-

- About -

- - +
+

+ About +

+ +
+
+

General Questions

+ +
+
+

Near real-time food security continuous monitoring

+ +
+
+

Predictive analysis

+

+ For first-level administrative areas where daily updated survey data is not available, the prevalence of + people with poor or borderline{' '} + + food consumption (FCS) + {' '} + and the prevalence of people with{' '} + + reduced coping strategy index (rCSI) + {' '} + ≥ 19 is estimated with a predictive model. +

+ +
); } diff --git a/src/components/About/AboutText.tsx b/src/components/About/AboutText.tsx index c4e9c996..e53450e9 100644 --- a/src/components/About/AboutText.tsx +++ b/src/components/About/AboutText.tsx @@ -1,11 +1,11 @@ -import { Link } from '@nextui-org/link'; import React from 'react'; +import ExternalLink from '@/components/About/ExternalLink'; import HungerMapLiveSuperscript from '@/components/About/HungerMapLiveSuperscript'; export function AboutText() { return ( -
+ <>

is the World Food Programme (WFP)’s global hunger monitoring system. @@ -16,25 +16,21 @@ export function AboutText() { that helps WFP staff, key decision makers and the broader humanitarian community to make more informed and timely decisions relating to food security.

+

+ WFP’s Hunger Monitoring Unit in the Research, Assessment and Monitoring Division conducts real-time food + security monitoring to track the latest food security trends. In areas where limited or no data is available, we + use machine learning-based predictive models to estimate the food security situation. +

The platform covers 94 countries, including countries where WFP has operations as well as most{' '} - + lower and lower-middle income countries - {' '} + {' '} (as classified by the World Bank). For any questions, comments, or if you would like further information, please - get in touch by sending an email to{' '} - - wfp.mvam@wfp.org - + get in touch by sending an email to wfp.mvam@wfp.org .

-
+ ); } diff --git a/src/components/About/ExternalLink.tsx b/src/components/About/ExternalLink.tsx new file mode 100644 index 00000000..94a40067 --- /dev/null +++ b/src/components/About/ExternalLink.tsx @@ -0,0 +1,13 @@ +import { Link } from '@nextui-org/link'; +import clsx from 'clsx'; +import React, { ReactNode } from 'react'; + +function ExternalLink({ href, children, className }: { href: string; children: ReactNode; className?: string }) { + return ( + + {children} + + ); +} + +export default ExternalLink; diff --git a/src/domain/constant/about/accordionItems.tsx b/src/domain/constant/about/accordionItems.tsx deleted file mode 100644 index 1d803db7..00000000 --- a/src/domain/constant/about/accordionItems.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import React from 'react'; - -import GroupedTable from '@/components/GroupedTable/GroupedTable'; -import { accuracyTableColumns, accuracyTableData } from '@/domain/constant/about/accuracyTableData'; - -const accordionItems = [ - { - title: 'How accurate are the prediction algorithms?', - content: ( - - ), - }, -]; - -export default accordionItems; diff --git a/src/domain/constant/about/accuracyTableData.tsx b/src/domain/constant/about/accuracyTableContents.tsx similarity index 67% rename from src/domain/constant/about/accuracyTableData.tsx rename to src/domain/constant/about/accuracyTableContents.tsx index 537894e8..86ccc268 100644 --- a/src/domain/constant/about/accuracyTableData.tsx +++ b/src/domain/constant/about/accuracyTableContents.tsx @@ -1,5 +1,4 @@ -import { Link } from '@nextui-org/link'; - +import ExternalLink from '@/components/About/ExternalLink'; import { GroupedTableColumns, GroupedTableData } from '@/domain/props/GroupedTableProps'; export const accuracyTableColumns = [ @@ -8,15 +7,16 @@ export const accuracyTableColumns = [ { columnId: 'FCS', label: 'FCS' }, { columnId: 'rCSI', label: 'rCSI' }, ] as GroupedTableColumns; -export const accuracyTableData = [ + +export const accuracyTableContents = [ { groupKey: '1', groupName: ( <> {' '} - + Coefficient of determination (R²) - {' '} + {' '} (higher is better) ), @@ -28,12 +28,12 @@ export const accuracyTableData = [ { groupKey: '2', groupName: ( - <> - + + Mean Absolute Error - {' '} + {' '} (lower is better) - + ), attributeRows: [ { withPast: true, FCS: 0.08, rCSI: 0.06 }, diff --git a/src/domain/constant/about/generalFaqItems.tsx b/src/domain/constant/about/generalFaqItems.tsx new file mode 100644 index 00000000..8f7152d6 --- /dev/null +++ b/src/domain/constant/about/generalFaqItems.tsx @@ -0,0 +1,79 @@ +import React from 'react'; + +import ExternalLink from '@/components/About/ExternalLink'; +import HungerMapLiveSuperscript from '@/components/About/HungerMapLiveSuperscript'; +import { AccordionItemProps } from '@/domain/entities/accordions/Accordions'; + +const generalFaqItems: AccordionItemProps[] = [ + { + title: 'What is shown on the "Current food consumption" map?', + content: ( + <> +

+ The global view of the visualizes two data streams: +

+
    +
  • Prevalence of insufficient food intake at administrative level 1 (green, yellow, and red color)
  • +
  • Population density (brightness of a region)
  • +
+

+ Therefore, the color indicates the level of food insufficiency in a given country - wherein red signals areas + where people are not meeting the required food intake levels and thus require urgent assistance. At the same + time, the brightness of a region or country indicates how populated the area is - wherein brighter areas + signal the presence of more people. +

+

+ More so, in areas where we do not have data on the prevalence of people with insufficient food intake - and + are therefore not clickable - we use the{' '} + + Proteus index + + , which measures food security in 185 countries over 28 years and is published annually. +

+ + ), + }, + { + title: 'Why are the numbers different from last time I checked?', + content: ( + <> +

+ You might notice that the figures in the trends of the number of people with insufficient food consumption and + of the number of people using crisis or above crisis food-based coping might have changed from the last time + you accessed the . These are several reasons why this might have happened. +

+
    +
  • + We are constantly looking at improving our predictive model. We regularly re-train the model as new + food insecurity data comes in from our near-real time food security continuous monitoring systems and from + face-to-face or mVAM surveys carried out by WFP Country Offices. Sometimes we also add new features to the + model to improve its accuracy. Overall, any change we make to the model is meant to improve the predictions + and make them closer to the truth. For consistency, every time we improve the model, we re-run the + predictions for the last 90 days, and this is why you might see numbers changing for dates in the past as + well. +
  • +
  • + As we expand our continuous monitoring systems, and as data becomes available for a new country, we{' '} + switch from showing predictions to showing actual data estimates obtained from daily mVAM surveys. + So, when this happens, we replace the historical, prediction-based series of data with the actual, live data + being collected daily. +
  • +
  • + We are constantly working to improve our survey aggregation methodology, exploring the best ways to + weight the contribution of each household and of each geographical area. As we improve how we compute the + aggregates, we apply the new methods across the entire historical series of data, and this may be why the + trends may show different numbers sometimes. +
  • +
  • + Finally, another reason might be because we obtained updated population estimates from WFP Country + Offices. In this case, the existing numbers computed from the predictive models or the continuous monitoring + data are recalculated with the new population estimates, causing changes in the number of people with + insufficient food consumption and using negative coping strategies. +
  • +
+ + ), + }, +]; + +export default generalFaqItems; diff --git a/src/domain/constant/about/predictionFaqItems.tsx b/src/domain/constant/about/predictionFaqItems.tsx new file mode 100644 index 00000000..af5afea4 --- /dev/null +++ b/src/domain/constant/about/predictionFaqItems.tsx @@ -0,0 +1,90 @@ +import React from 'react'; + +import ExternalLink from '@/components/About/ExternalLink'; +import GroupedTable from '@/components/GroupedTable/GroupedTable'; +import { accuracyTableColumns, accuracyTableContents } from '@/domain/constant/about/accuracyTableContents'; +import { AccordionItemProps } from '@/domain/entities/accordions/Accordions'; + +const generalQuestionItems: AccordionItemProps[] = [ + { + title: 'What data are used for training the models?', + content: ( + <> +

+ The models were trained using FCS and rCSI data spanning over 70 countries across, aggregated at the level of + first-order administrative divisions. The input variables used to make the predictions were built using + information about population density, rainfall, vegetation status, conflict, market prices, macroeconomic + indicators, and undernourishment. For areas where past FCS/rCSI measurements are available, the last available + data point is also included as input variable. +

+

+ More details are listed in the Data sources page. Additional sources used only for the model but not + for display purposes are: +

+
    +
  • + + Gridded Population of the World, Version 4 (GPWv4): Population Count, Revision 11 + +
  • +
  • + + WFP’s Alert for Price Spikes (ALPS) indicator + +
  • +
+ + ), + }, + { + title: 'Which algorithm is being used for training?', + content: ( +

+ The predictive models are trained using XGBoost – a + machine learning technique producing predictive models in the of an ensemble of regression trees. The model + parameters were optimized by a cross-validated grid-search. +

+ ), + }, + { + title: 'How accurate are the predictions?', + content: ( + <> +

+ The accuracy of the model was evaluated on a test set comprising 20% of the historical data, having trained + 100 models on subsamples (with replacement) of the remaining 80% of the historical data. The following results + were obtained on the test sets. +

+ + + ), + }, + { + title: 'Which data are predicted by the model?', + content: ( +

+ The model produces current estimates of the prevalence of people with poor or borderline FCS and rCSI for areas + where no food security data is available; we call this nowcasting. For each first-level administrative boundary + we report the median and 95% confidence intervals of a distribution of predictions obtained from 100-bootstrap + models trained on subsamples (with replacement) of the training data. +

+ ), + }, + { + title: "What are next steps in the development of WFP's predictions?", + content: ( +

+ Moving forward, more features will be developed and made available to explain how predicted numbers are + calculated. In tandem, a technical report on the predictive model will also be made available soon. + Additionally, WFP aims to extend the scope of the system’s predictions from nowcasting the current food security + situation to forecasting how the situation is likely to change in the next one, three or six months. +

+ ), + }, +]; + +export default generalQuestionItems; diff --git a/src/domain/constant/about/realTimeFaqItems.tsx b/src/domain/constant/about/realTimeFaqItems.tsx new file mode 100644 index 00000000..3627c604 --- /dev/null +++ b/src/domain/constant/about/realTimeFaqItems.tsx @@ -0,0 +1,62 @@ +import React from 'react'; + +import { AccordionItemProps } from '@/domain/entities/accordions/Accordions'; + +const generalQuestionItems: AccordionItemProps[] = [ + { + title: 'How does the near real-time food security monitoring work?', + content: ( + <> +

+ WFP conducts continuous food security monitoring via computer assisted telephone interviewing (CATI){' '} + through call centers. Data is collected on a rolling basis, spread evenly over a past 28/30 calendar days or + over a three-month period. The main advantage of this approach is that data is available more frequently and + processed daily through automated statistical engines. Daily updates are then produced showing a + snapshot of the current food security situation (with a slight time lag of 2-4 days to ensure data quality) + over the past 28/30 calendar days. +

+

+ The questionnaire includes questions on household demographics, households’ food consumption, coping + strategies used (food-based and livelihood-based), access to food, market and health services, and other + country-specific livelihood-related questions. In addition, at the end of the survey, respondents are given + the opportunity to share additional information on the food situation in their communities. +

+ + ), + }, + { + title: 'How does the WFP strive for representative monitoring results?', + content: ( + <> +

+ The call interviews aim to cover all mobile service providers, and telephone numbers are randomly selected + from a database of phone numbers or generated using random-digit dialling (RDD) method. To ensure a more + representative sample, WFP uses various types of pre/post-stratification and sampling methods, + including by weighting results by population at the first or second administrative level and by a demographic + variable such as the level of education or water sources which could impact food security, in order to account + for the fact that households with more phones are more likely to be selected (e.g. younger, somewhat + better-off households who live in urban areas). +

+

+ In order to compensate for non-response and attrition, key challenges for high frequency mobile phone surveys, + new observations are added in each administrative area following the sample design specific for each of the + country. +

+ + ), + }, + { + title: 'Where is near real-time data available?', + content: ( +

+ The countries where near-real time data is currently displayed are: Afghanistan, Angola, Benin, Burkina Faso, + Cameroon, Central African Republic, Chad, Colombia, Congo, Democratic Republic of the Congo, El Salvador, + Ethiopia, Guatemala, Guinea, Haiti, Honduras, Iraq, Ivory Coast, Kenya, Madagascar, Malawi, Mali, Mauritania, + Mozambique, Nicaragua, Niger, Nigeria, Sierra Leone, Somalia, Syrian Arab Republic, United Republic of Tanzania, + Yemen, Zambia, and Zimbabwe (as of January April 2021). +

+ ), + }, +]; + +export default generalQuestionItems; diff --git a/src/styles/globals.css b/src/styles/globals.css index da223f27..c8ca3ccc 100644 --- a/src/styles/globals.css +++ b/src/styles/globals.css @@ -8,12 +8,32 @@ } main h1 { - @apply text-4xl sm:text-5xl lg:text-7xl font-black + @apply text-4xl sm:text-5xl lg:text-7xl font-black mb-8 } - main p { + main h2 { + @apply text-2xl lg:text-3xl mb-3 + } + + main p, ol, ul { @apply text-large leading-relaxed pb-6 } + + main p:last-child { + @apply pb-0 + } + + main ol, ul { + @apply pl-8 + } + + main ol { + @apply list-decimal + } + + main ul { + @apply list-disc + } } /* PdfViewer.css */ From c3e5f500c91c94223d64991275b4019087d407a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20Sch=C3=B6dl?= Date: Tue, 12 Nov 2024 11:30:16 +0100 Subject: [PATCH 08/14] feat: replace ExternalLink with a more generic StyledLink --- src/app/about/page.tsx | 10 ++++---- src/components/About/AboutText.tsx | 9 ++++---- src/components/About/ExternalLink.tsx | 13 ----------- src/components/About/StyledLink.tsx | 23 +++++++++++++++++++ .../constant/about/accuracyTableContents.tsx | 10 ++++---- src/domain/constant/about/generalFaqItems.tsx | 6 ++--- .../constant/about/predictionFaqItems.tsx | 16 ++++++------- 7 files changed, 48 insertions(+), 39 deletions(-) delete mode 100644 src/components/About/ExternalLink.tsx create mode 100644 src/components/About/StyledLink.tsx diff --git a/src/app/about/page.tsx b/src/app/about/page.tsx index 75b7405f..5dd6f3eb 100644 --- a/src/app/about/page.tsx +++ b/src/app/about/page.tsx @@ -1,8 +1,8 @@ import React from 'react'; import AboutText from '@/components/About/AboutText'; -import ExternalLink from '@/components/About/ExternalLink'; import HungerMapLiveSuperscript from '@/components/About/HungerMapLiveSuperscript'; +import StyledLink from '@/components/About/StyledLink'; import Accordion from '@/components/Accordions/Accordion'; import generalFaqItems from '@/domain/constant/about/generalFaqItems'; import predictionFaqItems from '@/domain/constant/about/predictionFaqItems'; @@ -30,13 +30,13 @@ function Page() {

For first-level administrative areas where daily updated survey data is not available, the prevalence of people with poor or borderline{' '} - + food consumption (FCS) - {' '} + {' '} and the prevalence of people with{' '} - + reduced coping strategy index (rCSI) - {' '} + {' '} ≥ 19 is estimated with a predictive model.

diff --git a/src/components/About/AboutText.tsx b/src/components/About/AboutText.tsx index e53450e9..a7ca611b 100644 --- a/src/components/About/AboutText.tsx +++ b/src/components/About/AboutText.tsx @@ -1,7 +1,7 @@ import React from 'react'; -import ExternalLink from '@/components/About/ExternalLink'; import HungerMapLiveSuperscript from '@/components/About/HungerMapLiveSuperscript'; +import StyledLink from '@/components/About/StyledLink'; export function AboutText() { return ( @@ -23,12 +23,11 @@ export function AboutText() {

The platform covers 94 countries, including countries where WFP has operations as well as most{' '} - + lower and lower-middle income countries - {' '} + {' '} (as classified by the World Bank). For any questions, comments, or if you would like further information, please - get in touch by sending an email to wfp.mvam@wfp.org - . + get in touch by sending an email to wfp.mvam@wfp.org.

); diff --git a/src/components/About/ExternalLink.tsx b/src/components/About/ExternalLink.tsx deleted file mode 100644 index 94a40067..00000000 --- a/src/components/About/ExternalLink.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import { Link } from '@nextui-org/link'; -import clsx from 'clsx'; -import React, { ReactNode } from 'react'; - -function ExternalLink({ href, children, className }: { href: string; children: ReactNode; className?: string }) { - return ( - - {children} - - ); -} - -export default ExternalLink; diff --git a/src/components/About/StyledLink.tsx b/src/components/About/StyledLink.tsx new file mode 100644 index 00000000..3073c68c --- /dev/null +++ b/src/components/About/StyledLink.tsx @@ -0,0 +1,23 @@ +import { Link } from '@nextui-org/link'; +import clsx from 'clsx'; +import React, { ReactNode } from 'react'; + +function StyledLink({ + href, + children, + className = '', + isInternal = false, +}: { + href: string; + children: ReactNode; + className?: string; + isInternal?: boolean; +}) { + return ( + + {children} + + ); +} + +export default StyledLink; diff --git a/src/domain/constant/about/accuracyTableContents.tsx b/src/domain/constant/about/accuracyTableContents.tsx index 86ccc268..d138524d 100644 --- a/src/domain/constant/about/accuracyTableContents.tsx +++ b/src/domain/constant/about/accuracyTableContents.tsx @@ -1,4 +1,4 @@ -import ExternalLink from '@/components/About/ExternalLink'; +import StyledLink from '@/components/About/StyledLink'; import { GroupedTableColumns, GroupedTableData } from '@/domain/props/GroupedTableProps'; export const accuracyTableColumns = [ @@ -14,9 +14,9 @@ export const accuracyTableContents = [ groupName: ( <> {' '} - + Coefficient of determination (R²) - {' '} + {' '} (higher is better) ), @@ -29,9 +29,9 @@ export const accuracyTableContents = [ groupKey: '2', groupName: ( - + Mean Absolute Error - {' '} + {' '} (lower is better) ), diff --git a/src/domain/constant/about/generalFaqItems.tsx b/src/domain/constant/about/generalFaqItems.tsx index 8f7152d6..5ee55828 100644 --- a/src/domain/constant/about/generalFaqItems.tsx +++ b/src/domain/constant/about/generalFaqItems.tsx @@ -1,7 +1,7 @@ import React from 'react'; -import ExternalLink from '@/components/About/ExternalLink'; import HungerMapLiveSuperscript from '@/components/About/HungerMapLiveSuperscript'; +import StyledLink from '@/components/About/StyledLink'; import { AccordionItemProps } from '@/domain/entities/accordions/Accordions'; const generalFaqItems: AccordionItemProps[] = [ @@ -25,9 +25,9 @@ const generalFaqItems: AccordionItemProps[] = [

More so, in areas where we do not have data on the prevalence of people with insufficient food intake - and are therefore not clickable - we use the{' '} - + Proteus index - + , which measures food security in 185 countries over 28 years and is published annually.

diff --git a/src/domain/constant/about/predictionFaqItems.tsx b/src/domain/constant/about/predictionFaqItems.tsx index af5afea4..bac4ea91 100644 --- a/src/domain/constant/about/predictionFaqItems.tsx +++ b/src/domain/constant/about/predictionFaqItems.tsx @@ -1,6 +1,6 @@ import React from 'react'; -import ExternalLink from '@/components/About/ExternalLink'; +import StyledLink from '@/components/About/StyledLink'; import GroupedTable from '@/components/GroupedTable/GroupedTable'; import { accuracyTableColumns, accuracyTableContents } from '@/domain/constant/about/accuracyTableContents'; import { AccordionItemProps } from '@/domain/entities/accordions/Accordions'; @@ -23,14 +23,14 @@ const generalQuestionItems: AccordionItemProps[] = [

  • - + Gridded Population of the World, Version 4 (GPWv4): Population Count, Revision 11 - +
  • - + WFP’s Alert for Price Spikes (ALPS) indicator - +
@@ -40,9 +40,9 @@ const generalQuestionItems: AccordionItemProps[] = [ title: 'Which algorithm is being used for training?', content: (

- The predictive models are trained using XGBoost – a - machine learning technique producing predictive models in the of an ensemble of regression trees. The model - parameters were optimized by a cross-validated grid-search. + The predictive models are trained using XGBoost – a machine + learning technique producing predictive models in the of an ensemble of regression trees. The model parameters + were optimized by a cross-validated grid-search.

), }, From f5e51b8f52ed9613fc662e7912deb3827c72456a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20Sch=C3=B6dl?= Date: Tue, 12 Nov 2024 11:43:08 +0100 Subject: [PATCH 09/14] fix: rename .about-page to .text-content --- src/app/about/page.tsx | 2 +- src/styles/globals.css | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/app/about/page.tsx b/src/app/about/page.tsx index 5dd6f3eb..93e81c89 100644 --- a/src/app/about/page.tsx +++ b/src/app/about/page.tsx @@ -10,7 +10,7 @@ import realTimeFaqItems from '@/domain/constant/about/realTimeFaqItems'; function Page() { return ( -
+

About diff --git a/src/styles/globals.css b/src/styles/globals.css index c8ca3ccc..123d6508 100644 --- a/src/styles/globals.css +++ b/src/styles/globals.css @@ -3,35 +3,35 @@ @tailwind utilities; @layer base { - main { + .text-content { @apply max-w-screen-lg mx-auto } - main h1 { + .text-content h1 { @apply text-4xl sm:text-5xl lg:text-7xl font-black mb-8 } - main h2 { + .text-content h2 { @apply text-2xl lg:text-3xl mb-3 } - main p, ol, ul { + .text-content p, .text-content ol, .text-content ul { @apply text-large leading-relaxed pb-6 } - main p:last-child { + .text-content p:last-child { @apply pb-0 } - main ol, ul { + .text-content ol, .text-content ul { @apply pl-8 } - main ol { + .text-content ol { @apply list-decimal } - main ul { + .text-content ul { @apply list-disc } } From 975e7aa98b64d94f20928ee277b96732f2880cd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20Sch=C3=B6dl?= Date: Mon, 18 Nov 2024 10:54:12 +0100 Subject: [PATCH 10/14] feat: add Data Sources page --- src/app/data_sources/page.tsx | 31 +++ .../dataSourceAccordionItems.tsx | 251 ++++++++++++++++++ src/domain/props/GroupedTableProps.ts | 10 + .../groupedTable/formatDataSourceTable.tsx | 66 +++++ 4 files changed, 358 insertions(+) create mode 100644 src/app/data_sources/page.tsx create mode 100644 src/domain/constant/dataSourceTables/dataSourceAccordionItems.tsx create mode 100644 src/operations/groupedTable/formatDataSourceTable.tsx diff --git a/src/app/data_sources/page.tsx b/src/app/data_sources/page.tsx new file mode 100644 index 00000000..620d8318 --- /dev/null +++ b/src/app/data_sources/page.tsx @@ -0,0 +1,31 @@ +import React from 'react'; + +import HungerMapLiveSuperscript from '@/components/About/HungerMapLiveSuperscript'; +import StyledLink from '@/components/About/StyledLink'; +import CustomAccordion from '@/components/Accordions/Accordion'; +import dataSourceAccordionItems from '@/domain/constant/dataSourceTables/dataSourceAccordionItems'; + +function Page() { + return ( +
+
+

Data Sources

+

+ + This section includes all indicators and data sources displayed on (global and + country pages). + {' '} + Additional sources used as input variables for the predictive model but not for display purposes are listed on + the{' '} + + About page + + . +

+ +
+
+ ); +} + +export default Page; diff --git a/src/domain/constant/dataSourceTables/dataSourceAccordionItems.tsx b/src/domain/constant/dataSourceTables/dataSourceAccordionItems.tsx new file mode 100644 index 00000000..413a8c25 --- /dev/null +++ b/src/domain/constant/dataSourceTables/dataSourceAccordionItems.tsx @@ -0,0 +1,251 @@ +import React from 'react'; + +import GroupedTable from '@/components/GroupedTable/GroupedTable'; +import { AccordionItemProps } from '@/domain/entities/accordions/Accordions'; +import { DataSourceTableData, GroupedTableColumns } from '@/domain/props/GroupedTableProps'; +import formatDataSourceTable from '@/operations/groupedTable/formatDataSourceTable'; + +const dataSourceTableColumns = [ + { columnId: 'mainColumn', label: 'Data type' }, + { columnId: 'source', label: 'Source' }, +] as GroupedTableColumns; + +const contextAndNeedTableData: DataSourceTableData = [ + { + label: 'Conflict', + description: + 'All reported violence and conflicts in the last 30 days across Africa, the Middle East, South and South East ' + + 'Asia, Eastern and Southeastern Europe and the Balkans.', + dataSource: 'Armed Conflict Location & Event Data Project (ACLED)', + dataSourceLink: 'https://acleddata.com/', + updateInterval: 'daily', + }, + { + label: 'Hazards', + description: + 'Current hazards information: Active Volcanoes; Active/Forecast Wind Radii (39, 58, 74); Previous, Current and ' + + 'Forecast Storm Positions; 3- and 5-day Potential Track Area of Storms; Recent Earthquakes; MODIS Hotspots; ' + + 'Tsunami Travel Time; GLIDE Events; H1N1 Affected Countries; Country Boundaries and Labels; Global Shaded ' + + 'Relief; Global Population Density; and PDC integrated hazards.', + dataSource: 'Pacific Disaster Centre (PDC) - Active Hazards Map Service', + updateInterval: 'hourly', + }, + { + label: 'Population', + description: + 'Total population counts all residents, regardless of legal status or citizenship (the values shown are mid-year estimates).', + dataSource: 'World Bank', + }, +]; + +const foodSecurityTableData: DataSourceTableData = [ + { + label: 'Estimated number of people', + description: + 'The number of people are estimated by multiplying the percentages calculated from WFP mVAM data by the population of the country.', + dataSource: ( + + World Food Programme - (i) representative face-to-face household surveys, e.g. Comprehensive Food Security and + Vulnerability Analysis (CFSVA), Emergency Food Security Assessment (EFSA); and (ii) mobile Vulnerability + Analysis and Mapping (mVAM) surveys + + ), + updateDetails: [ + { label: 'mVAM surveys', interval: 'daily or monthly' }, + { label: 'face-to-face surveys', interval: 'biyearly or less' }, + ], + }, + { + label: 'People with insufficient food consumption', + description: + 'Number of people with poor or borderline food consumption according to the Food Consumption Score (FCS).', + readMoreLink: '#', + dataSource: ( + + World Food Programme - (i) representative face-to-face household surveys, e.g. Comprehensive Food Security and + Vulnerability Analysis (CFSVA), Emergency Food Security Assessment (EFSA); and (ii) mobile Vulnerability + Analysis and Mapping (mVAM) surveys + + ), + updateDetails: [ + { label: 'mVAM surveys', interval: 'daily or monthly' }, + { label: 'face-to-face surveys', interval: 'biyearly or less' }, + ], + }, + { + label: 'Integrated Food Security Phase Classification (IPC) / Cadre Harmonisé (CH)', + description: + 'Developed by a global partnership, the IPC/CH is a set of tools and procedures to classify food insecurity. ' + + 'It classifies the populations in five different phases according to the severity of the food insecurity and ' + + 'malnutrition situation: Minimal, Stressed, Crisis, Emergency, and Catastrophe/Famine.', + dataSource: 'Integrated Phase Classification (IPC) / Cadre Harmonisé (CH)', + dataSourceLink: 'https://www.ipcinfo.org/', + }, + { + label: 'reduced Coping Strategies Index (rCSI)', + description: 'Frequency and Severity of behaviors when faced with shortages of food.', + readMoreLink: '#', + dataSource: ( + + World Food Programme - (i) representative face-to-face household surveys, e.g. Comprehensive Food Security and + Vulnerability Analysis (CFSVA), Emergency Food Security Assessment (EFSA); and (ii) mobile Vulnerability + Analysis and Mapping (mVAM) surveys + + ), + updateDetails: [ + { label: 'mVAM surveys', interval: 'daily or monthly' }, + { label: 'face-to-face surveys', interval: 'biyearly or less' }, + ], + }, + { + label: 'Undernourishment', + description: + 'Estimate of the percentage of individuals in the total populations that are in a condition of undernourishment', + dataSource: 'FAO, IFAD, UNICEF, WFP and WHO: "The State of Food Security and Nutrition in the World"', + dataSourceLink: + 'https://www.wfp.org/publications/2019-state-food-security-and-nutrition-world-sofi-safeguarding-against-economic', + updateInterval: 'yearly', + }, +]; + +const nutritionTable: DataSourceTableData = [ + { + label: 'Acute malnutrition', + description: 'Characterized by a rapid deterioration in nutritional status over a short period of time.', + readMoreLink: '#', + dataSource: 'Joint Malnutrition Estimates – UNICEF, WHO, World Bank', + updateInterval: 'yearly or less', + }, + { + label: 'Chronic malnutrition', + description: + 'A form of growth failure which develops as a result of inadequate nutrition and/or repeated infections over long periods of time.', + readMoreLink: '#', + dataSource: 'Joint Malnutrition Estimates – UNICEF, WHO, World Bank', + updateInterval: 'yearly or less', + }, +]; + +const marketsTable: DataSourceTableData = [ + { + label: 'Import dependency', + description: ( + + Percentage of a country’s imported food for domestic supply versus its own food production for domestic supply. +
+ IDR = Imports ÷ (local production + imports – exports) × 100% +
+ ), + dataSource: 'WFP’s calculation based on USDA data', + updateInterval: 'daily', + }, + { + label: 'Currency exchange', + description: 'Price of a unit of domestic currency in terms of USD.', + dataSource: 'Trading Economics', + updateInterval: 'yearly', + }, + { + label: 'Balance of trade', + description: + 'The balance of trade is the value of exports of goods and services less imports of goods and services. ' + + 'It is usually the largest component of the current account.', + dataSource: 'Trading Economics', + updateInterval: 'monthly or less', + }, + { + label: 'Food inflation', + description: + 'Year-on-year percentage change in the price of a standard basket of food as calculated from the national Consumer Price Index.', + dataSource: 'Trading Economics', + updateInterval: 'monthly', + }, + { + label: 'Headline inflation', + description: + 'Year on year percentage change in the price of a standard basket of goods and services as calculated from the national Consumer Price Index.', + dataSource: 'Trading Economics', + updateInterval: 'monthly', + }, +]; + +const seasonalTable: DataSourceTableData = [ + { + label: 'Rainfall', + description: + 'The rainfall layer shows the cumulative rainfall in the previous month compared to the 20-year average.', + dataSource: + 'CHIRPS rainfall estimates, Climate Hazards Group, University of California at Santa Barbara; data processed by WFP VAM', + updateInterval: 'every 10 days', + }, + { + label: 'Vegetation', + description: + 'Recent vegetation development compared to the average. Values between 90% and 110% are considered as being within the range of normal variability.', + dataSource: + 'MODIS platforms Terra and Aqua. MODIS NDVI CMG data product retrieved from Earthdata Search, courtesy of NASA ' + + 'EOSDIS Land Processes Distributed Active Archive Center (LP DAAC), USGS/Earth Resources Observation and ' + + 'Science (EROS) Center and Sioux Falls, South Dakota, USA.', + updateInterval: 'every 8 days', + }, + { + label: 'River baisins', + description: + 'The river basins visualization provides rainfall data for the last 35+ years for five of the world’s major ' + + 'rivers (Limpopo, Nile, Orange, Shabelli-Juba, and Zambesi), allowing users to track whether the current ' + + 'basin-wide rainfall is within the normal range, or whether there is a risk of drought and lower river flows ' + + 'or flooding and high river flows.', + dataSource: + 'CHIRPS rainfall estimates, Climate Hazards Group, University of California at Santa Barbara; data processed by WFP-VAM', + updateInterval: 'every 5-10 days', + }, + { + label: 'Headline inflation', + description: + 'Year on year percentage change in the price of a standard basket of goods and services as calculated from the national Consumer Price Index.', + dataSource: 'Trading Economics', + updateInterval: 'monthly', + }, +]; + +const otherTable: DataSourceTableData = [ + { + label: 'News feed', + description: + 'News articles retrieved from news sources all over the web. Topics include recent events or developments ' + + 'relating to hazards and conflict. The news feed is country-specific and serves to provide further context to ' + + 'the food security situation in a country.', + dataSource: 'NewsAPI', + dataSourceLink: 'https://newsapi.org', + updateInterval: 'live', + }, +]; + +const dataSourceAccordionItems: AccordionItemProps[] = [ + { + title: 'Context and Need', + content: , + }, + { + title: 'Food Security', + content: , + }, + { + title: 'Nutrition', + content: , + }, + { + title: 'Markets', + content: , + }, + { + title: 'Seasonal Information', + content: , + }, + { + title: 'Other', + content: , + }, +]; + +export default dataSourceAccordionItems; diff --git a/src/domain/props/GroupedTableProps.ts b/src/domain/props/GroupedTableProps.ts index 51244f6b..eeda9602 100644 --- a/src/domain/props/GroupedTableProps.ts +++ b/src/domain/props/GroupedTableProps.ts @@ -26,3 +26,13 @@ export default interface GroupedTableProps { data: GroupedTableData; ariaLabel?: string; } + +export type DataSourceTableData = { + label: string; + description: ReactNode; + readMoreLink?: string; + dataSource: ReactNode; + dataSourceLink?: string; + updateInterval?: string; + updateDetails?: readonly { label: ReactNode; interval: string }[]; +}[]; diff --git a/src/operations/groupedTable/formatDataSourceTable.tsx b/src/operations/groupedTable/formatDataSourceTable.tsx new file mode 100644 index 00000000..37e9acdc --- /dev/null +++ b/src/operations/groupedTable/formatDataSourceTable.tsx @@ -0,0 +1,66 @@ +import { Chip } from '@nextui-org/chip'; + +import StyledLink from '@/components/About/StyledLink'; +import { DataSourceTableData, GroupedTableData } from '@/domain/props/GroupedTableProps'; + +function formatDataSourceTable(dataSources: DataSourceTableData) { + return dataSources.map( + ({ label, description, updateInterval, updateDetails, dataSource, dataSourceLink, readMoreLink }) => { + // remove leading http[s]:// and trailing slash + const linkDisplayText = dataSourceLink?.split('//')?.pop()?.replace(/\/$/, ''); + return { + groupKey: label, + updateDetails, + groupName: ( + <> + + {label} {updateInterval && {updateInterval}} + + + {description} + {readMoreLink && ( + <> + {' '} + + Read more... + + + )} + + {updateDetails && ( +
    + {updateDetails.map(({ label: detailLabel, interval }) => ( +
  • + {detailLabel}{' '} + + {interval} + +
  • + ))} +
+ )} + + ), + attributeRows: [ + { + source: ( + <> + {dataSource} + {dataSourceLink && ( + <> +
+ + {linkDisplayText} + + + )} + + ), + }, + ], + }; + } + ) as GroupedTableData; +} + +export default formatDataSourceTable; From 4f8340a92913c7ff521475f9fa384e8261210771 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20Sch=C3=B6dl?= Date: Tue, 19 Nov 2024 09:48:48 +0100 Subject: [PATCH 11/14] feat: add links and layout for /data_sources --- src/app/data_sources/layout.tsx | 16 +++++++++ src/app/data_sources/page.tsx | 34 +++++++++---------- src/domain/constant/PageLinks.ts | 2 +- .../constant/about/predictionFaqItems.tsx | 7 ++-- src/styles/globals.css | 2 +- 5 files changed, 39 insertions(+), 22 deletions(-) create mode 100644 src/app/data_sources/layout.tsx diff --git a/src/app/data_sources/layout.tsx b/src/app/data_sources/layout.tsx new file mode 100644 index 00000000..5fe221c3 --- /dev/null +++ b/src/app/data_sources/layout.tsx @@ -0,0 +1,16 @@ +import { Metadata } from 'next'; + +import { Topbar } from '@/components/Topbar/Topbar'; + +export const metadata: Metadata = { + title: 'About', +}; + +export default function Layout({ children }: { children: React.ReactNode }) { + return ( +
+ +
{children}
+
+ ); +} diff --git a/src/app/data_sources/page.tsx b/src/app/data_sources/page.tsx index 620d8318..42e0dbd6 100644 --- a/src/app/data_sources/page.tsx +++ b/src/app/data_sources/page.tsx @@ -7,24 +7,22 @@ import dataSourceAccordionItems from '@/domain/constant/dataSourceTables/dataSou function Page() { return ( -
-
-

Data Sources

-

- - This section includes all indicators and data sources displayed on (global and - country pages). - {' '} - Additional sources used as input variables for the predictive model but not for display purposes are listed on - the{' '} - - About page - - . -

- -
-
+
+

Data Sources

+

+ + This section includes all indicators and data sources displayed on (global and + country pages). + {' '} + Additional sources used as input variables for the predictive model but not for display purposes are listed on + the{' '} + + About page + + . +

+ +
); } diff --git a/src/domain/constant/PageLinks.ts b/src/domain/constant/PageLinks.ts index 831b434d..e6d01e65 100644 --- a/src/domain/constant/PageLinks.ts +++ b/src/domain/constant/PageLinks.ts @@ -1,7 +1,7 @@ export const pageLinks = [ { href: '/', label: 'Home' }, { href: '/about', label: 'About' }, - { href: '/glossary', label: 'Glossary' }, + { href: '/data_sources', label: 'Data Sources' }, { href: '/methodology', label: 'Methodology' }, { href: '/disclaimer', label: 'Disclaimer' }, ]; diff --git a/src/domain/constant/about/predictionFaqItems.tsx b/src/domain/constant/about/predictionFaqItems.tsx index bac4ea91..9743808a 100644 --- a/src/domain/constant/about/predictionFaqItems.tsx +++ b/src/domain/constant/about/predictionFaqItems.tsx @@ -18,8 +18,11 @@ const generalQuestionItems: AccordionItemProps[] = [ data point is also included as input variable.

- More details are listed in the Data sources page. Additional sources used only for the model but not - for display purposes are: + More details are listed in the{' '} + + Data sources page + + . Additional sources used only for the model but not for display purposes are:

  • diff --git a/src/styles/globals.css b/src/styles/globals.css index 123d6508..0f7fd2e1 100644 --- a/src/styles/globals.css +++ b/src/styles/globals.css @@ -11,7 +11,7 @@ @apply text-4xl sm:text-5xl lg:text-7xl font-black mb-8 } - .text-content h2 { + .text-content section > h2 { @apply text-2xl lg:text-3xl mb-3 } From 62e5bfd94bb483beabf104e3f9b364da6e2a3917 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20Sch=C3=B6dl?= Date: Tue, 19 Nov 2024 13:31:46 +0100 Subject: [PATCH 12/14] feat: add Abbreviation component --- src/components/Tooltip/Abbreviation.tsx | 21 +++++ src/components/Tooltip/Tooltip.tsx | 2 +- src/domain/constant/abbreviations.ts | 9 +++ .../dataSourceAccordionItems.tsx | 80 ++++++++++++++----- tailwind.config.js | 5 +- 5 files changed, 94 insertions(+), 23 deletions(-) create mode 100644 src/components/Tooltip/Abbreviation.tsx create mode 100644 src/domain/constant/abbreviations.ts diff --git a/src/components/Tooltip/Abbreviation.tsx b/src/components/Tooltip/Abbreviation.tsx new file mode 100644 index 00000000..4b904d8c --- /dev/null +++ b/src/components/Tooltip/Abbreviation.tsx @@ -0,0 +1,21 @@ +import React from 'react'; + +import { Tooltip } from '@/components/Tooltip/Tooltip'; +import abbreviations from '@/domain/constant/abbreviations'; + +function Abbreviation({ abbreviation }: { abbreviation: keyof typeof abbreviations }) { + if (!abbreviations[abbreviation]) { + return {abbreviation}; + } + + return ( + +
    + {abbreviation} + info icon +
    +
    + ); +} + +export default Abbreviation; diff --git a/src/components/Tooltip/Tooltip.tsx b/src/components/Tooltip/Tooltip.tsx index 7cb86f58..a669c6fb 100644 --- a/src/components/Tooltip/Tooltip.tsx +++ b/src/components/Tooltip/Tooltip.tsx @@ -40,7 +40,7 @@ export function Tooltip({ children, title, text, warning }: TooltipProps) { radius={RADIUS} shadow={SHADOW} > - {Array.isArray(children) ? <> {...children} : children} + {Array.isArray(children) ?
    {...children}
    : children} ); } diff --git a/src/domain/constant/abbreviations.ts b/src/domain/constant/abbreviations.ts new file mode 100644 index 00000000..af8c60e5 --- /dev/null +++ b/src/domain/constant/abbreviations.ts @@ -0,0 +1,9 @@ +const abbreviations = { + CFSVA: 'Comprehensive Food Security and Vulnerability Analysis', + EFSA: 'Emergency Food Security Assessment', + mVAM: 'mobile Vulnerability Analysis and Mapping', + VAM: 'Vulnerability Analysis and Mapping', + WFP: 'World Food Programme', +}; + +export default abbreviations; diff --git a/src/domain/constant/dataSourceTables/dataSourceAccordionItems.tsx b/src/domain/constant/dataSourceTables/dataSourceAccordionItems.tsx index 413a8c25..30f0bd3e 100644 --- a/src/domain/constant/dataSourceTables/dataSourceAccordionItems.tsx +++ b/src/domain/constant/dataSourceTables/dataSourceAccordionItems.tsx @@ -1,6 +1,7 @@ import React from 'react'; import GroupedTable from '@/components/GroupedTable/GroupedTable'; +import Abbreviation from '@/components/Tooltip/Abbreviation'; import { AccordionItemProps } from '@/domain/entities/accordions/Accordions'; import { DataSourceTableData, GroupedTableColumns } from '@/domain/props/GroupedTableProps'; import formatDataSourceTable from '@/operations/groupedTable/formatDataSourceTable'; @@ -42,16 +43,23 @@ const foodSecurityTableData: DataSourceTableData = [ { label: 'Estimated number of people', description: - 'The number of people are estimated by multiplying the percentages calculated from WFP mVAM data by the population of the country.', + 'The number of people are estimated by multiplying the percentages calculated from mVAM data by the population of the country.', dataSource: ( - World Food Programme - (i) representative face-to-face household surveys, e.g. Comprehensive Food Security and - Vulnerability Analysis (CFSVA), Emergency Food Security Assessment (EFSA); and (ii) mobile Vulnerability - Analysis and Mapping (mVAM) surveys + : representative face-to-face household surveys (e.g.{' '} + , ) and{' '} + surveys ), updateDetails: [ - { label: 'mVAM surveys', interval: 'daily or monthly' }, + { + label: ( + <> + surveys + + ), + interval: 'daily or monthly', + }, { label: 'face-to-face surveys', interval: 'biyearly or less' }, ], }, @@ -62,13 +70,20 @@ const foodSecurityTableData: DataSourceTableData = [ readMoreLink: '#', dataSource: ( - World Food Programme - (i) representative face-to-face household surveys, e.g. Comprehensive Food Security and - Vulnerability Analysis (CFSVA), Emergency Food Security Assessment (EFSA); and (ii) mobile Vulnerability - Analysis and Mapping (mVAM) surveys + : representative face-to-face household surveys (e.g.{' '} + , ) and{' '} + surveys ), updateDetails: [ - { label: 'mVAM surveys', interval: 'daily or monthly' }, + { + label: ( + <> + surveys + + ), + interval: 'daily or monthly', + }, { label: 'face-to-face surveys', interval: 'biyearly or less' }, ], }, @@ -87,13 +102,20 @@ const foodSecurityTableData: DataSourceTableData = [ readMoreLink: '#', dataSource: ( - World Food Programme - (i) representative face-to-face household surveys, e.g. Comprehensive Food Security and - Vulnerability Analysis (CFSVA), Emergency Food Security Assessment (EFSA); and (ii) mobile Vulnerability - Analysis and Mapping (mVAM) surveys + : representative face-to-face household surveys (e.g.{' '} + , ) and{' '} + surveys ), updateDetails: [ - { label: 'mVAM surveys', interval: 'daily or monthly' }, + { + label: ( + <> + surveys + + ), + interval: 'daily or monthly', + }, { label: 'face-to-face surveys', interval: 'biyearly or less' }, ], }, @@ -101,7 +123,12 @@ const foodSecurityTableData: DataSourceTableData = [ label: 'Undernourishment', description: 'Estimate of the percentage of individuals in the total populations that are in a condition of undernourishment', - dataSource: 'FAO, IFAD, UNICEF, WFP and WHO: "The State of Food Security and Nutrition in the World"', + dataSource: ( + <> + FAO, IFAD, UNICEF, and WHO: “The State of Food Security and Nutrition + in the World” + + ), dataSourceLink: 'https://www.wfp.org/publications/2019-state-food-security-and-nutrition-world-sofi-safeguarding-against-economic', updateInterval: 'yearly', @@ -136,7 +163,12 @@ const marketsTable: DataSourceTableData = [ IDR = Imports ÷ (local production + imports – exports) × 100% ), - dataSource: 'WFP’s calculation based on USDA data', + dataSource: ( + <> + + ’s calculation based on USDA data + + ), updateInterval: 'daily', }, { @@ -174,8 +206,12 @@ const seasonalTable: DataSourceTableData = [ label: 'Rainfall', description: 'The rainfall layer shows the cumulative rainfall in the previous month compared to the 20-year average.', - dataSource: - 'CHIRPS rainfall estimates, Climate Hazards Group, University of California at Santa Barbara; data processed by WFP VAM', + dataSource: ( + <> + CHIRPS rainfall estimates, Climate Hazards Group, University of California at Santa Barbara; data processed by{' '} + + + ), updateInterval: 'every 10 days', }, { @@ -185,7 +221,7 @@ const seasonalTable: DataSourceTableData = [ dataSource: 'MODIS platforms Terra and Aqua. MODIS NDVI CMG data product retrieved from Earthdata Search, courtesy of NASA ' + 'EOSDIS Land Processes Distributed Active Archive Center (LP DAAC), USGS/Earth Resources Observation and ' + - 'Science (EROS) Center and Sioux Falls, South Dakota, USA.', + 'Science (EROS) Center.', updateInterval: 'every 8 days', }, { @@ -195,8 +231,12 @@ const seasonalTable: DataSourceTableData = [ 'rivers (Limpopo, Nile, Orange, Shabelli-Juba, and Zambesi), allowing users to track whether the current ' + 'basin-wide rainfall is within the normal range, or whether there is a risk of drought and lower river flows ' + 'or flooding and high river flows.', - dataSource: - 'CHIRPS rainfall estimates, Climate Hazards Group, University of California at Santa Barbara; data processed by WFP-VAM', + dataSource: ( + <> + CHIRPS rainfall estimates, Climate Hazards Group, University of California at Santa Barbara; data processed by{' '} + + + ), updateInterval: 'every 5-10 days', }, { diff --git a/tailwind.config.js b/tailwind.config.js index 6509e2b9..ca3832a1 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -38,6 +38,7 @@ const config = { content: [ './src/components/**/*.{js,ts,jsx,tsx,mdx}', './src/app/**/*.{js,ts,jsx,tsx,mdx}', + './src/domain/constant/dataSourceTables/dataSourceAccordionItems.tsx', './node_modules/@nextui-org/theme/dist/**/*.{js,ts,jsx,tsx}', ], theme: { @@ -175,6 +176,6 @@ const config = { }, }), ], -} +}; -module.exports = config \ No newline at end of file +module.exports = config From d6ce92bc5f086d8cac4f83aad202e913f574ec46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20Sch=C3=B6dl?= Date: Tue, 19 Nov 2024 14:11:21 +0100 Subject: [PATCH 13/14] feat: improve /data_sources for mobile --- .../dataSourceTables/dataSourceAccordionItems.tsx | 2 +- .../groupedTable/formatDataSourceTable.tsx | 14 ++++++++++---- src/styles/globals.css | 2 +- tailwind.config.js | 1 + 4 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/domain/constant/dataSourceTables/dataSourceAccordionItems.tsx b/src/domain/constant/dataSourceTables/dataSourceAccordionItems.tsx index 30f0bd3e..9f50a542 100644 --- a/src/domain/constant/dataSourceTables/dataSourceAccordionItems.tsx +++ b/src/domain/constant/dataSourceTables/dataSourceAccordionItems.tsx @@ -120,7 +120,7 @@ const foodSecurityTableData: DataSourceTableData = [ ], }, { - label: 'Undernourishment', + label: 'Under­nourish­ment', description: 'Estimate of the percentage of individuals in the total populations that are in a condition of undernourishment', dataSource: ( diff --git a/src/operations/groupedTable/formatDataSourceTable.tsx b/src/operations/groupedTable/formatDataSourceTable.tsx index 37e9acdc..e7147be7 100644 --- a/src/operations/groupedTable/formatDataSourceTable.tsx +++ b/src/operations/groupedTable/formatDataSourceTable.tsx @@ -1,4 +1,5 @@ import { Chip } from '@nextui-org/chip'; +import clsx from 'clsx'; import StyledLink from '@/components/About/StyledLink'; import { DataSourceTableData, GroupedTableData } from '@/domain/props/GroupedTableProps'; @@ -13,9 +14,14 @@ function formatDataSourceTable(dataSources: DataSourceTableData) { updateDetails, groupName: ( <> - - {label} {updateInterval && {updateInterval}} - +
    + {label}{' '} + {updateInterval && ( + + {updateInterval} + + )} +
    {description} {readMoreLink && ( @@ -32,7 +38,7 @@ function formatDataSourceTable(dataSources: DataSourceTableData) { {updateDetails.map(({ label: detailLabel, interval }) => (
  • {detailLabel}{' '} - + {interval}
  • diff --git a/src/styles/globals.css b/src/styles/globals.css index 0f7fd2e1..17eda88c 100644 --- a/src/styles/globals.css +++ b/src/styles/globals.css @@ -24,7 +24,7 @@ } .text-content ol, .text-content ul { - @apply pl-8 + @apply pl-4 md:pl-8 } .text-content ol { diff --git a/tailwind.config.js b/tailwind.config.js index c1f99445..0aa6436a 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -39,6 +39,7 @@ const config = { './src/components/**/*.{js,ts,jsx,tsx,mdx}', './src/app/**/*.{js,ts,jsx,tsx,mdx}', './src/domain/constant/dataSourceTables/dataSourceAccordionItems.tsx', + './src/operations/groupedTable/formatDataSourceTable.tsx', './node_modules/@nextui-org/theme/dist/**/*.{js,ts,jsx,tsx}', ], theme: { From 025b7d4f03d7fb7a38e76f9251c013bb06d5c4ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20Sch=C3=B6dl?= Date: Tue, 19 Nov 2024 14:19:28 +0100 Subject: [PATCH 14/14] fix: replace yarn.lock --- yarn.lock | 1337 ++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 1209 insertions(+), 128 deletions(-) diff --git a/yarn.lock b/yarn.lock index f4162631..1d7681d1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -232,13 +232,13 @@ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.1.tgz#de633db3ec2ef6a3c89e2f19038063e8a122e2c2" integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q== -"@formatjs/ecma402-abstract@2.2.3": - version "2.2.3" - resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-2.2.3.tgz#dc5a032e1971c709b32b9ab511fa35504a7d3bc9" - integrity sha512-aElGmleuReGnk2wtYOzYFmNWYoiWWmf1pPPCYg0oiIQSJj0mjc4eUfzUXaSOJ4S8WzI/cLqnCTWjqz904FT2OQ== +"@formatjs/ecma402-abstract@2.2.4": + version "2.2.4" + resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-2.2.4.tgz#355e42d375678229d46dc8ad7a7139520dd03e7b" + integrity sha512-lFyiQDVvSbQOpU+WFd//ILolGj4UgA/qXrKeZxdV14uKiAUiPAtX6XAn7WBCRi7Mx6I7EybM9E5yYn4BIpZWYg== dependencies: "@formatjs/fast-memoize" "2.2.3" - "@formatjs/intl-localematcher" "0.5.7" + "@formatjs/intl-localematcher" "0.5.8" tslib "2" "@formatjs/fast-memoize@2.2.3": @@ -248,27 +248,27 @@ dependencies: tslib "2" -"@formatjs/icu-messageformat-parser@2.9.3": - version "2.9.3" - resolved "https://registry.yarnpkg.com/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.9.3.tgz#7785cb48ba980ebcbe67a0a3fe12837032b95518" - integrity sha512-9L99QsH14XjOCIp4TmbT8wxuffJxGK8uLNO1zNhLtcZaVXvv626N0s4A2qgRCKG3dfYWx9psvGlFmvyVBa6u/w== +"@formatjs/icu-messageformat-parser@2.9.4": + version "2.9.4" + resolved "https://registry.yarnpkg.com/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.9.4.tgz#52501fbdc122a86097644f03ae1117b9ced00872" + integrity sha512-Tbvp5a9IWuxUcpWNIW6GlMQYEc4rwNHR259uUFoKWNN1jM9obf9Ul0e+7r7MvFOBNcN+13K7NuKCKqQiAn1QEg== dependencies: - "@formatjs/ecma402-abstract" "2.2.3" - "@formatjs/icu-skeleton-parser" "1.8.7" + "@formatjs/ecma402-abstract" "2.2.4" + "@formatjs/icu-skeleton-parser" "1.8.8" tslib "2" -"@formatjs/icu-skeleton-parser@1.8.7": - version "1.8.7" - resolved "https://registry.yarnpkg.com/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.7.tgz#c0c21d75428bf7213ac23a0efbf4dbfa868b800d" - integrity sha512-fI+6SmS2g7h3srfAKSWa5dwreU5zNEfon2uFo99OToiLF6yxGE+WikvFSbsvMAYkscucvVmTYNlWlaDPp0n5HA== +"@formatjs/icu-skeleton-parser@1.8.8": + version "1.8.8" + resolved "https://registry.yarnpkg.com/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.8.tgz#a16eff7fd040acf096fb1853c99527181d38cf90" + integrity sha512-vHwK3piXwamFcx5YQdCdJxUQ1WdTl6ANclt5xba5zLGDv5Bsur7qz8AD7BevaKxITwpgDeU0u8My3AIibW9ywA== dependencies: - "@formatjs/ecma402-abstract" "2.2.3" + "@formatjs/ecma402-abstract" "2.2.4" tslib "2" -"@formatjs/intl-localematcher@0.5.7": - version "0.5.7" - resolved "https://registry.yarnpkg.com/@formatjs/intl-localematcher/-/intl-localematcher-0.5.7.tgz#f889d076881b785d11ff993b966f527d199436d0" - integrity sha512-GGFtfHGQVFe/niOZp24Kal5b2i36eE2bNL0xi9Sg/yd0TR8aLjcteApZdHmismP5QQax1cMnZM9yWySUUjJteA== +"@formatjs/intl-localematcher@0.5.8": + version "0.5.8" + resolved "https://registry.yarnpkg.com/@formatjs/intl-localematcher/-/intl-localematcher-0.5.8.tgz#b11bbd04bd3551f7cadcb1ef1e231822d0e3c97e" + integrity sha512-I+WDNWWJFZie+jkfkiK5Mp4hEDyRSEvmyfYadflOno/mmKJKcB17fEpEH0oJu/OWhhCJ8kJBDz2YMd/6cDl7Mg== dependencies: tslib "2" @@ -369,6 +369,16 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" +"@mapbox/jsonlint-lines-primitives@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz#ce56e539f83552b58d10d672ea4d6fc9adc7b234" + integrity sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ== + +"@mapbox/mapbox-gl-supported@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-3.0.0.tgz#bebd3d5da3c1fd988011bb79718a39f63f5e16ac" + integrity sha512-2XghOwu16ZwPJLOFVuIOaLbN0iKMn867evzXFyf0P22dqugezfJwLmdanAgU25ITvz1TvOfVP4jsDImlDJzcWg== + "@mapbox/node-pre-gyp@^1.0.0": version "1.0.11" resolved "https://registry.yarnpkg.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz#417db42b7f5323d79e93b34a6d7a2a12c0df43fa" @@ -384,6 +394,33 @@ semver "^7.3.5" tar "^6.1.11" +"@mapbox/point-geometry@0.1.0", "@mapbox/point-geometry@^0.1.0", "@mapbox/point-geometry@~0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz#8a83f9335c7860effa2eeeca254332aa0aeed8f2" + integrity sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ== + +"@mapbox/tiny-sdf@^2.0.6": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@mapbox/tiny-sdf/-/tiny-sdf-2.0.6.tgz#9a1d33e5018093e88f6a4df2343e886056287282" + integrity sha512-qMqa27TLw+ZQz5Jk+RcwZGH7BQf5G/TrutJhspsca/3SHwmgKQ1iq+d3Jxz5oysPVYTGP6aXxCo5Lk9Er6YBAA== + +"@mapbox/unitbezier@^0.0.1": + version "0.0.1" + resolved "https://registry.yarnpkg.com/@mapbox/unitbezier/-/unitbezier-0.0.1.tgz#d32deb66c7177e9e9dfc3bbd697083e2e657ff01" + integrity sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw== + +"@mapbox/vector-tile@^1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz#d3a74c90402d06e89ec66de49ec817ff53409666" + integrity sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw== + dependencies: + "@mapbox/point-geometry" "~0.1.0" + +"@mapbox/whoots-js@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz#497c67a1cef50d1a2459ba60f315e448d2ad87fe" + integrity sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q== + "@next/env@14.2.10": version "14.2.10" resolved "https://registry.yarnpkg.com/@next/env/-/env-14.2.10.tgz#1d3178340028ced2d679f84140877db4f420333c" @@ -798,7 +835,7 @@ "@react-types/menu" "3.9.9" "@react-types/shared" "3.23.1" -"@nextui-org/modal@2.0.41": +"@nextui-org/modal@2.0.41", "@nextui-org/modal@^2.0.41": version "2.0.41" resolved "https://registry.yarnpkg.com/@nextui-org/modal/-/modal-2.0.41.tgz#3fba82661413236e9b41f3b4d6c50c3205d6292c" integrity sha512-Sirn319xAf7E4cZqvQ0o0Vd3Xqy0FRSuhOTwp8dALMGTMY61c2nIyurgVCNP6hh8dMvMT7zQEPP9/LE0boFCEQ== @@ -1062,7 +1099,7 @@ "@nextui-org/shared-utils" "2.0.8" "@nextui-org/system-rsc" "2.1.6" -"@nextui-org/spinner@2.0.34": +"@nextui-org/spinner@2.0.34", "@nextui-org/spinner@^2.0.34": version "2.0.34" resolved "https://registry.yarnpkg.com/@nextui-org/spinner/-/spinner-2.0.34.tgz#91f1d3db33fa4ceedbd88e00e7b1a10c7833c9b5" integrity sha512-YKw/6xSLhsXU1k22OvYKyWhtJCHzW2bRAiieVSVG5xak3gYwknTds5H9s5uur+oAZVK9AkyAObD19QuZND32Jg== @@ -2749,23 +2786,23 @@ tslib "^2.4.0" "@swc/helpers@^0.5.0": - version "0.5.13" - resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.13.tgz#33e63ff3cd0cade557672bd7888a39ce7d115a8c" - integrity sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w== + version "0.5.15" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.15.tgz#79efab344c5819ecf83a43f3f9f811fc84b516d7" + integrity sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g== dependencies: - tslib "^2.4.0" + tslib "^2.8.0" -"@tanstack/query-core@5.59.20": - version "5.59.20" - resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.59.20.tgz#356718976536727b9af0ad1163a21fd6a44ee0a9" - integrity sha512-e8vw0lf7KwfGe1if4uPFhvZRWULqHjFcz3K8AebtieXvnMOz5FSzlZe3mTLlPuUBcydCnBRqYs2YJ5ys68wwLg== +"@tanstack/query-core@5.60.5": + version "5.60.5" + resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.60.5.tgz#37b7c5ab7e6894cea9ef341299a7a3febc2ea361" + integrity sha512-jiS1aC3XI3BJp83ZiTuDLerTmn9P3U95r6p+6/SNauLJaYxfIC4dMuWygwnBHIZxjn2zJqEpj3nysmPieoxfPQ== "@tanstack/react-query@^5.59.17": - version "5.59.20" - resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-5.59.20.tgz#bacf1983f44c5690bb99b518f2ef71dc2fa875a4" - integrity sha512-Zly0egsK0tFdfSbh5/mapSa+Zfc3Et0Zkar7Wo5sQkFzWyB3p3uZWOHR2wrlAEEV2L953eLuDBtbgFvMYiLvUw== + version "5.60.5" + resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-5.60.5.tgz#3194c390f7eff20542b321c3042880dc3f1a81e2" + integrity sha512-M77bOsPwj1wYE56gk7iJvxGAr4IC12NWdIDhT+Eo8ldkWRHMvIR8I/rufIvT1OXoV/bl7EECwuRuMlxxWtvW2Q== dependencies: - "@tanstack/query-core" "5.59.20" + "@tanstack/query-core" "5.60.5" "@types/conventional-commits-parser@^5.0.0": version "5.0.0" @@ -2774,17 +2811,57 @@ dependencies: "@types/node" "*" +"@types/debug@^4.0.0": + version "4.1.12" + resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" + integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== + dependencies: + "@types/ms" "*" + +"@types/estree-jsx@^1.0.0": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@types/estree-jsx/-/estree-jsx-1.0.5.tgz#858a88ea20f34fe65111f005a689fa1ebf70dc18" + integrity sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg== + dependencies: + "@types/estree" "*" + +"@types/estree@*", "@types/estree@^1.0.0": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" + integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== + +"@types/geojson-vt@^3.2.5": + version "3.2.5" + resolved "https://registry.yarnpkg.com/@types/geojson-vt/-/geojson-vt-3.2.5.tgz#b6c356874991d9ab4207533476dfbcdb21e38408" + integrity sha512-qDO7wqtprzlpe8FfQ//ClPV9xiuoh2nkIgiouIptON9w5jvD/fA4szvP9GBlDVdJ5dldAl0kX/sy3URbWwLx0g== + dependencies: + "@types/geojson" "*" + "@types/geojson@*", "@types/geojson@^7946.0.14": version "7946.0.14" resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.14.tgz#319b63ad6df705ee2a65a73ef042c8271e696613" integrity sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg== +"@types/hast@^3.0.0": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/hast/-/hast-3.0.4.tgz#1d6b39993b82cea6ad783945b0508c25903e15aa" + integrity sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ== + dependencies: + "@types/unist" "*" + "@types/json5@^0.0.29": version "0.0.29" resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== -"@types/leaflet@^1.9.14": +"@types/leaflet.markercluster@^1.5.5": + version "1.5.5" + resolved "https://registry.yarnpkg.com/@types/leaflet.markercluster/-/leaflet.markercluster-1.5.5.tgz#e420caf5b9f6300ab4869fc877d08a9eaf200eec" + integrity sha512-TkWOhSHDM1ANxmLi+uK0PjsVcjIKBr8CLV2WoF16dIdeFmC0Cj5P5axkI3C1Xsi4+ht6EU8+BfEbbqEF9icPrg== + dependencies: + "@types/leaflet" "*" + +"@types/leaflet@*", "@types/leaflet@^1.9.14": version "1.9.14" resolved "https://registry.yarnpkg.com/@types/leaflet/-/leaflet-1.9.14.tgz#f008fef281a05e457bbae9f00a82c836af1b9b03" integrity sha512-sx2q6MDJaajwhKeVgPSvqXd8rhNJSTA3tMidQGduZn9S6WBYxDkCpSpV5xXEmSg7Cgdk/5vJGhVF1kMYLzauBg== @@ -2803,6 +2880,32 @@ resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.13.tgz#786e2d67cfd95e32862143abe7463a7f90c300eb" integrity sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg== +"@types/mapbox__point-geometry@*", "@types/mapbox__point-geometry@^0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@types/mapbox__point-geometry/-/mapbox__point-geometry-0.1.4.tgz#0ef017b75eedce02ff6243b4189210e2e6d5e56d" + integrity sha512-mUWlSxAmYLfwnRBmgYV86tgYmMIICX4kza8YnE/eIlywGe2XoOxlpVnXWwir92xRLjwyarqwpu2EJKD2pk0IUA== + +"@types/mapbox__vector-tile@^1.3.4": + version "1.3.4" + resolved "https://registry.yarnpkg.com/@types/mapbox__vector-tile/-/mapbox__vector-tile-1.3.4.tgz#ad757441ef1d34628d9e098afd9c91423c1f8734" + integrity sha512-bpd8dRn9pr6xKvuEBQup8pwQfD4VUyqO/2deGjfpe6AwC8YRlyEipvefyRJUSiCJTZuCb8Pl1ciVV5ekqJ96Bg== + dependencies: + "@types/geojson" "*" + "@types/mapbox__point-geometry" "*" + "@types/pbf" "*" + +"@types/mdast@^4.0.0": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-4.0.4.tgz#7ccf72edd2f1aa7dd3437e180c64373585804dd6" + integrity sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA== + dependencies: + "@types/unist" "*" + +"@types/ms@*": + version "0.7.34" + resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.34.tgz#10964ba0dee6ac4cd462e2795b6bebd407303433" + integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== + "@types/node@*": version "22.9.0" resolved "https://registry.yarnpkg.com/@types/node/-/node-22.9.0.tgz#b7f16e5c3384788542c72dc3d561a7ceae2c0365" @@ -2815,6 +2918,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-20.5.7.tgz#4b8ecac87fbefbc92f431d09c30e176fc0a7c377" integrity sha512-dP7f3LdZIysZnmvP3ANJYTSwg+wLLl8p7RqniVlV7j+oXSXAbt9h0WIBFmJy5inWZoX9wZN6eXx+YXd9Rh3RBA== +"@types/pbf@*", "@types/pbf@^3.0.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@types/pbf/-/pbf-3.0.5.tgz#a9495a58d8c75be4ffe9a0bd749a307715c07404" + integrity sha512-j3pOPiEcWZ34R6a6mN07mUkM4o4Lwf6hPNt8eilOeZhTFbxFXmKhvXl9Y28jotFPaI1bpPDJsbCprUoNke6OrA== + "@types/prop-types@*": version "15.7.13" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.13.tgz#2af91918ee12d9d32914feb13f5326658461b451" @@ -2835,67 +2943,84 @@ "@types/prop-types" "*" csstype "^3.0.2" +"@types/supercluster@^7.1.3": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@types/supercluster/-/supercluster-7.1.3.tgz#1a1bc2401b09174d9c9e44124931ec7874a72b27" + integrity sha512-Z0pOY34GDFl3Q6hUFYf3HkTwKEE02e7QgtJppBt+beEAxnyOpJua+voGFvxINBHa06GwLFFym7gRPY2SiKIfIA== + dependencies: + "@types/geojson" "*" + "@types/tinycolor2@^1.4.0": version "1.4.6" resolved "https://registry.yarnpkg.com/@types/tinycolor2/-/tinycolor2-1.4.6.tgz#670cbc0caf4e58dd61d1e3a6f26386e473087f06" integrity sha512-iEN8J0BoMnsWBqjVbWH/c0G0Hh7O21lpR2/+PrvAVgWdzL7eexIFm4JN/Wn10PTcmNdtS6U67r499mlWMXOxNw== +"@types/unist@*", "@types/unist@^3.0.0": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-3.0.3.tgz#acaab0f919ce69cce629c2d4ed2eb4adc1b6c20c" + integrity sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q== + +"@types/unist@^2.0.0": + version "2.0.11" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.11.tgz#11af57b127e32487774841f7a4e54eab166d03c4" + integrity sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA== + "@typescript-eslint/eslint-plugin@^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", "@typescript-eslint/eslint-plugin@^8.11.0": - version "8.13.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.13.0.tgz#650c50b8c795b5d092189f139f6d00535b5b0f3d" - integrity sha512-nQtBLiZYMUPkclSeC3id+x4uVd1SGtHuElTxL++SfP47jR0zfkZBJHc+gL4qPsgTuypz0k8Y2GheaDYn6Gy3rg== + version "8.15.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.15.0.tgz#c95c6521e70c8b095a684d884d96c0c1c63747d2" + integrity sha512-+zkm9AR1Ds9uLWN3fkoeXgFppaQ+uEVtfOV62dDmsy9QCNqlRHWNEck4yarvRNrvRcHQLGfqBNui3cimoz8XAg== dependencies: "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "8.13.0" - "@typescript-eslint/type-utils" "8.13.0" - "@typescript-eslint/utils" "8.13.0" - "@typescript-eslint/visitor-keys" "8.13.0" + "@typescript-eslint/scope-manager" "8.15.0" + "@typescript-eslint/type-utils" "8.15.0" + "@typescript-eslint/utils" "8.15.0" + "@typescript-eslint/visitor-keys" "8.15.0" graphemer "^1.4.0" ignore "^5.3.1" natural-compare "^1.4.0" ts-api-utils "^1.3.0" "@typescript-eslint/parser@^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", "@typescript-eslint/parser@^8.11.0": - version "8.13.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.13.0.tgz#ef76203b7cac515aa3ccc4f7ce5320dd61c46b29" - integrity sha512-w0xp+xGg8u/nONcGw1UXAr6cjCPU1w0XVyBs6Zqaj5eLmxkKQAByTdV/uGgNN5tVvN/kKpoQlP2cL7R+ajZZIQ== - dependencies: - "@typescript-eslint/scope-manager" "8.13.0" - "@typescript-eslint/types" "8.13.0" - "@typescript-eslint/typescript-estree" "8.13.0" - "@typescript-eslint/visitor-keys" "8.13.0" + version "8.15.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.15.0.tgz#92610da2b3af702cfbc02a46e2a2daa6260a9045" + integrity sha512-7n59qFpghG4uazrF9qtGKBZXn7Oz4sOMm8dwNWDQY96Xlm2oX67eipqcblDj+oY1lLCbf1oltMZFpUso66Kl1A== + dependencies: + "@typescript-eslint/scope-manager" "8.15.0" + "@typescript-eslint/types" "8.15.0" + "@typescript-eslint/typescript-estree" "8.15.0" + "@typescript-eslint/visitor-keys" "8.15.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@8.13.0": - version "8.13.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.13.0.tgz#2f4aed0b87d72360e64e4ea194b1fde14a59082e" - integrity sha512-XsGWww0odcUT0gJoBZ1DeulY1+jkaHUciUq4jKNv4cpInbvvrtDoyBH9rE/n2V29wQJPk8iCH1wipra9BhmiMA== +"@typescript-eslint/scope-manager@8.15.0": + version "8.15.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.15.0.tgz#28a1a0f13038f382424f45a988961acaca38f7c6" + integrity sha512-QRGy8ADi4J7ii95xz4UoiymmmMd/zuy9azCaamnZ3FM8T5fZcex8UfJcjkiEZjJSztKfEBe3dZ5T/5RHAmw2mA== dependencies: - "@typescript-eslint/types" "8.13.0" - "@typescript-eslint/visitor-keys" "8.13.0" + "@typescript-eslint/types" "8.15.0" + "@typescript-eslint/visitor-keys" "8.15.0" -"@typescript-eslint/type-utils@8.13.0": - version "8.13.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.13.0.tgz#8c8fa68490dcb9ae1687ffc7de8fbe23c26417bd" - integrity sha512-Rqnn6xXTR316fP4D2pohZenJnp+NwQ1mo7/JM+J1LWZENSLkJI8ID8QNtlvFeb0HnFSK94D6q0cnMX6SbE5/vA== +"@typescript-eslint/type-utils@8.15.0": + version "8.15.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.15.0.tgz#a6da0f93aef879a68cc66c73fe42256cb7426c72" + integrity sha512-UU6uwXDoI3JGSXmcdnP5d8Fffa2KayOhUUqr/AiBnG1Gl7+7ut/oyagVeSkh7bxQ0zSXV9ptRh/4N15nkCqnpw== dependencies: - "@typescript-eslint/typescript-estree" "8.13.0" - "@typescript-eslint/utils" "8.13.0" + "@typescript-eslint/typescript-estree" "8.15.0" + "@typescript-eslint/utils" "8.15.0" debug "^4.3.4" ts-api-utils "^1.3.0" -"@typescript-eslint/types@8.13.0": - version "8.13.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.13.0.tgz#3f35dead2b2491a04339370dcbcd17bbdfc204d8" - integrity sha512-4cyFErJetFLckcThRUFdReWJjVsPCqyBlJTi6IDEpc1GWCIIZRFxVppjWLIMcQhNGhdWJJRYFHpHoDWvMlDzng== +"@typescript-eslint/types@8.15.0": + version "8.15.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.15.0.tgz#4958edf3d83e97f77005f794452e595aaf6430fc" + integrity sha512-n3Gt8Y/KyJNe0S3yDCD2RVKrHBC4gTUcLTebVBXacPy091E6tNspFLKRXlk3hwT4G55nfr1n2AdFqi/XMxzmPQ== -"@typescript-eslint/typescript-estree@8.13.0": - version "8.13.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.13.0.tgz#db8c93dd5437ca3ce417a255fb35ddc3c12c3e95" - integrity sha512-v7SCIGmVsRK2Cy/LTLGN22uea6SaUIlpBcO/gnMGT/7zPtxp90bphcGf4fyrCQl3ZtiBKqVTG32hb668oIYy1g== +"@typescript-eslint/typescript-estree@8.15.0": + version "8.15.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.15.0.tgz#915c94e387892b114a2a2cc0df2d7f19412c8ba7" + integrity sha512-1eMp2JgNec/niZsR7ioFBlsh/Fk0oJbhaqO0jRyQBMgkz7RrFfkqF9lYYmBoGBaSiLnu8TAPQTwoTUiSTUW9dg== dependencies: - "@typescript-eslint/types" "8.13.0" - "@typescript-eslint/visitor-keys" "8.13.0" + "@typescript-eslint/types" "8.15.0" + "@typescript-eslint/visitor-keys" "8.15.0" debug "^4.3.4" fast-glob "^3.3.2" is-glob "^4.0.3" @@ -2903,25 +3028,25 @@ semver "^7.6.0" ts-api-utils "^1.3.0" -"@typescript-eslint/utils@8.13.0": - version "8.13.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.13.0.tgz#f6d40e8b5053dcaeabbd2e26463857abf27d62c0" - integrity sha512-A1EeYOND6Uv250nybnLZapeXpYMl8tkzYUxqmoKAWnI4sei3ihf2XdZVd+vVOmHGcp3t+P7yRrNsyyiXTvShFQ== +"@typescript-eslint/utils@8.15.0": + version "8.15.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.15.0.tgz#ac04679ad19252776b38b81954b8e5a65567cef6" + integrity sha512-k82RI9yGhr0QM3Dnq+egEpz9qB6Un+WLYhmoNcvl8ltMEededhh7otBVVIDDsEEttauwdY/hQoSsOv13lxrFzQ== dependencies: "@eslint-community/eslint-utils" "^4.4.0" - "@typescript-eslint/scope-manager" "8.13.0" - "@typescript-eslint/types" "8.13.0" - "@typescript-eslint/typescript-estree" "8.13.0" + "@typescript-eslint/scope-manager" "8.15.0" + "@typescript-eslint/types" "8.15.0" + "@typescript-eslint/typescript-estree" "8.15.0" -"@typescript-eslint/visitor-keys@8.13.0": - version "8.13.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.13.0.tgz#e97b0d92b266ef38a1faf40a74da289b66683a5b" - integrity sha512-7N/+lztJqH4Mrf0lb10R/CbI1EaAMMGyF5y0oJvFoAhafwgiRA7TXyd8TFn8FC8k5y2dTsYogg238qavRGNnlw== +"@typescript-eslint/visitor-keys@8.15.0": + version "8.15.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.15.0.tgz#9ea5a85eb25401d2aa74ec8a478af4e97899ea12" + integrity sha512-h8vYOulWec9LhpwfAdZf2bjr8xIp0KNKnpgqSz0qqYYKAW/QZKw3ktRndbiAtUz4acH4QLQavwZBYCc0wulA/Q== dependencies: - "@typescript-eslint/types" "8.13.0" - eslint-visitor-keys "^3.4.3" + "@typescript-eslint/types" "8.15.0" + eslint-visitor-keys "^4.2.0" -"@ungap/structured-clone@^1.2.0": +"@ungap/structured-clone@^1.0.0", "@ungap/structured-clone@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== @@ -3182,6 +3307,11 @@ axobject-query@^4.1.0: resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-4.1.0.tgz#28768c76d0e3cff21bc62a9e2d0b6ac30042a1ee" integrity sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ== +bail@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/bail/-/bail-2.0.2.tgz#d26f5cd8fe5d6f832a31517b9f7c356040ba6d5d" + integrity sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw== + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -3253,9 +3383,9 @@ camelcase-css@^2.0.1: integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== caniuse-lite@^1.0.30001579, caniuse-lite@^1.0.30001599, caniuse-lite@^1.0.30001669: - version "1.0.30001679" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001679.tgz#18c573b72f72ba70822194f6c39e7888597f9e32" - integrity sha512-j2YqID/YwpLnKzCmBOS4tlZdWprXm3ZmQLBH9ZBXFOhoxLA46fwyBvx6toCBWBmnuwUY/qB3kEU6gFx8qgCroA== + version "1.0.30001680" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001680.tgz#5380ede637a33b9f9f1fc6045ea99bd142f3da5e" + integrity sha512-rPQy70G6AGUMnbwS1z6Xg+RkHYPAi18ihs47GH0jcxIG7wArmPgY3XbS2sRdBbxJljp3thdT8BIqv9ccCypiPA== canvas@^2.11.2: version "2.11.2" @@ -3266,6 +3396,11 @@ canvas@^2.11.2: nan "^2.17.0" simple-get "^3.0.3" +ccount@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5" + integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg== + chalk@5.3.0, chalk@^5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" @@ -3279,6 +3414,31 @@ chalk@^4.0.0, chalk@^4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" +character-entities-html4@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-2.1.0.tgz#1f1adb940c971a4b22ba39ddca6b618dc6e56b2b" + integrity sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA== + +character-entities-legacy@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz#76bc83a90738901d7bc223a9e93759fdd560125b" + integrity sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ== + +character-entities@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-2.0.2.tgz#2d09c2e72cd9523076ccb21157dff66ad43fcc22" + integrity sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ== + +character-reference-invalid@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz#85c66b041e43b47210faf401278abf808ac45cb9" + integrity sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw== + +cheap-ruler@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cheap-ruler/-/cheap-ruler-4.0.0.tgz#bdc984de7e0e3f748bdfd2dbe23ec6b9dc820a09" + integrity sha512-0BJa8f4t141BYKQyn9NSQt1PguFQXMXwZiA5shfoaBYHAb2fFk2RAX+tiWMoQU+Agtzt3mdt0JtuyshAXqZ+Vw== + chokidar@^3.5.3: version "3.6.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" @@ -3373,6 +3533,11 @@ color@^4.2.3: color-convert "^2.0.1" color-string "^1.9.0" +comma-separated-tokens@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz#4e89c9458acb61bc8fef19f4529973b2392839ee" + integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg== + commander@11.0.0: version "11.0.0" resolved "https://registry.yarnpkg.com/commander/-/commander-11.0.0.tgz#43e19c25dbedc8256203538e8d7e9346877a6f67" @@ -3453,14 +3618,19 @@ cosmiconfig@^9.0.0: parse-json "^5.2.0" cross-spawn@^7.0.0, cross-spawn@^7.0.2: - version "7.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.5.tgz#910aac880ff5243da96b728bc6521a5f6c2f2f82" - integrity sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug== + version "7.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== dependencies: path-key "^3.1.0" shebang-command "^2.0.0" which "^2.0.1" +csscolorparser@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/csscolorparser/-/csscolorparser-1.0.3.tgz#b34f391eea4da8f3e98231e2ccd8df9c041f171b" + integrity sha512-umPSgYwZkdFoUrH5hIq5kf0wPSXiro51nPw0j2K/c83KflkPSTBGMz6NJvMB+07VlL0y7VPo6QJcDjcgKTTm3w== + cssesc@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" @@ -3508,7 +3678,12 @@ data-view-byte-offset@^1.0.0: es-errors "^1.3.0" is-data-view "^1.0.1" -debug@4, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5: +date-fns@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-4.1.0.tgz#64b3d83fff5aa80438f5b1a633c2e83b8a1c2d14" + integrity sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg== + +debug@4, debug@^4.0.0, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5: version "4.3.7" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== @@ -3522,6 +3697,13 @@ debug@^3.2.7: dependencies: ms "^2.1.1" +decode-named-character-reference@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz#daabac9690874c394c81e4162a0304b35d824f0e" + integrity sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg== + dependencies: + character-entities "^2.0.0" + decompress-response@^4.2.0: version "4.2.1" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-4.2.1.tgz#414023cc7a302da25ce2ec82d0d5238ccafd8986" @@ -3562,7 +3744,7 @@ delegates@^1.0.0: resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== -dequal@^2.0.3: +dequal@^2.0.0, dequal@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== @@ -3577,6 +3759,13 @@ detect-node-es@^1.1.0: resolved "https://registry.yarnpkg.com/detect-node-es/-/detect-node-es-1.1.0.tgz#163acdf643330caa0b4cd7c21e7ee7755d6fa493" integrity sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ== +devlop@^1.0.0, devlop@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/devlop/-/devlop-1.1.0.tgz#4db7c2ca4dc6e0e834c30be70c94bbc976dc7018" + integrity sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA== + dependencies: + dequal "^2.0.0" + didyoumean@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" @@ -3608,15 +3797,20 @@ dot-prop@^5.1.0: dependencies: is-obj "^2.0.0" +earcut@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/earcut/-/earcut-3.0.0.tgz#a8d5bf891224eaea8287201b5e787c6c0318af89" + integrity sha512-41Fs7Q/PLq1SDbqjsgcY7GA42T0jvaCNGXgGtsNdvg+Yv8eIu06bxv4/PoREkZ9nMDNwnUSG9OFB9+yv8eKhDg== + eastasianwidth@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== electron-to-chromium@^1.5.41: - version "1.5.55" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.55.tgz#73684752aa2e1aa49cafb355a41386c6637e76a9" - integrity sha512-6maZ2ASDOTBtjt9FhqYPRnbvKU5tjG0IN9SztUOWYw2AzNDNpKJYLJmlK0/En4Hs/aiWnB+JZ+gW19PIGszgKg== + version "1.5.63" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.63.tgz#69444d592fbbe628d129866c2355691ea93eda3e" + integrity sha512-ddeXKuY9BHo/mw145axlyWjlJ1UBt4WK3AlvkT7W2AbqfRQoacVoRUCF6wL3uIx/8wT9oLKXzI+rFqHHscByaA== emoji-regex@^10.3.0: version "10.4.0" @@ -3654,9 +3848,9 @@ error-ex@^1.3.1: is-arrayish "^0.2.1" es-abstract@^1.17.5, es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.1, es-abstract@^1.23.2, es-abstract@^1.23.3: - version "1.23.3" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0" - integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A== + version "1.23.5" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.5.tgz#f4599a4946d57ed467515ed10e4f157289cd52fb" + integrity sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ== dependencies: array-buffer-byte-length "^1.0.1" arraybuffer.prototype.slice "^1.0.3" @@ -3673,7 +3867,7 @@ es-abstract@^1.17.5, es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23 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" @@ -3689,10 +3883,10 @@ es-abstract@^1.17.5, es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23 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.3" object-keys "^1.1.1" object.assign "^4.1.5" - regexp.prototype.flags "^1.5.2" + regexp.prototype.flags "^1.5.3" safe-array-concat "^1.1.2" safe-regex-test "^1.0.3" string.prototype.trim "^1.2.9" @@ -3780,6 +3974,11 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== +escape-string-regexp@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" + integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== + eslint-config-airbnb-base@^15.0.0: version "15.0.0" resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz#6b09add90ac79c2f8d723a2580e07f3925afd236" @@ -3956,6 +4155,11 @@ eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== +eslint-visitor-keys@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz#687bacb2af884fcdda8a6e7d65c606f46a14cd45" + integrity sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw== + eslint@^8.57.0: version "8.57.1" resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.1.tgz#7df109654aba7e3bbe5c8eae533c5e461d3c6ca9" @@ -4028,11 +4232,21 @@ estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== +estree-util-is-identifier-name@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz#0b5ef4c4ff13508b34dcd01ecfa945f61fce5dbd" + integrity sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg== + esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== +extend@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -4133,9 +4347,9 @@ flat@^5.0.2: integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== flatted@^3.2.9: - version "3.3.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" - integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== + version "3.3.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.2.tgz#adba1448a9841bec72b42c532ea23dbbedef1a27" + integrity sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA== for-each@^0.3.3: version "0.3.3" @@ -4216,6 +4430,11 @@ gauge@^3.0.0: strip-ansi "^6.0.1" wide-align "^1.1.2" +geojson-vt@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/geojson-vt/-/geojson-vt-4.0.2.tgz#1162f6c7d61a0ba305b1030621e6e111f847828a" + integrity sha512-AV9ROqlNqoZEIJGfm1ncNjEXfkz2hdFlZf0qkVfmkwdKa8vj7H16YUOT81rJw1rdFhyEDlN2Tds91p/glzbl5A== + geojson@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/geojson/-/geojson-0.5.0.tgz#3cd6c96399be65b56ee55596116fe9191ce701c0" @@ -4272,6 +4491,11 @@ git-raw-commits@^4.0.0: meow "^12.0.1" split2 "^4.0.0" +gl-matrix@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/gl-matrix/-/gl-matrix-3.4.3.tgz#fc1191e8320009fd4d20e9339595c6041ddc22c9" + integrity sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA== + glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" @@ -4357,6 +4581,11 @@ graphemer@^1.4.0: resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== +grid-index@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/grid-index/-/grid-index-1.1.0.tgz#97f8221edec1026c8377b86446a7c71e79522ea7" + integrity sha512-HZRwumpOGUrHyxO5bqKZL0B0GlUpwtCAzZ42sgxUPniu33R1LSFH5yrIcBCHjkctCAh3mtWKcKd9J4vDDdeVHA== + has-bigints@^1.0.1, has-bigints@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" @@ -4403,6 +4632,43 @@ hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: dependencies: function-bind "^1.1.2" +hast-util-sanitize@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/hast-util-sanitize/-/hast-util-sanitize-5.0.2.tgz#edb260d94e5bba2030eb9375790a8753e5bf391f" + integrity sha512-3yTWghByc50aGS7JlGhk61SPenfE/p1oaFeNwkOOyrscaOkMGrcW9+Cy/QAIOBpZxP1yqDIzFMR0+Np0i0+usg== + dependencies: + "@types/hast" "^3.0.0" + "@ungap/structured-clone" "^1.0.0" + unist-util-position "^5.0.0" + +hast-util-to-jsx-runtime@^2.0.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.2.tgz#6d11b027473e69adeaa00ca4cfb5bb68e3d282fa" + integrity sha512-1ngXYb+V9UT5h+PxNRa1O1FYguZK/XL+gkeqvp7EdHlB9oHUG0eYRo/vY5inBdcqo3RkPMC58/H94HvkbfGdyg== + dependencies: + "@types/estree" "^1.0.0" + "@types/hast" "^3.0.0" + "@types/unist" "^3.0.0" + comma-separated-tokens "^2.0.0" + devlop "^1.0.0" + estree-util-is-identifier-name "^3.0.0" + hast-util-whitespace "^3.0.0" + mdast-util-mdx-expression "^2.0.0" + mdast-util-mdx-jsx "^3.0.0" + mdast-util-mdxjs-esm "^2.0.0" + property-information "^6.0.0" + space-separated-tokens "^2.0.0" + style-to-object "^1.0.0" + unist-util-position "^5.0.0" + vfile-message "^4.0.0" + +hast-util-whitespace@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz#7778ed9d3c92dd9e8c5c8f648a49c21fc51cb621" + integrity sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw== + dependencies: + "@types/hast" "^3.0.0" + highcharts-react-official@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/highcharts-react-official/-/highcharts-react-official-3.2.1.tgz#4b62a7af2969bdebde6b338d36f6b9bf1f1029bc" @@ -4413,6 +4679,11 @@ highcharts@^11.4.8: resolved "https://registry.yarnpkg.com/highcharts/-/highcharts-11.4.8.tgz#252e71b81c24ec9f99e756b76dbebd7546e18dda" integrity sha512-5Tke9LuzZszC4osaFisxLIcw7xgNGz4Sy3Jc9pRMV+ydm6sYqsPYdU8ELOgpzGNrbrRNDRBtveoR5xS3SzneEA== +html-url-attributes@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/html-url-attributes/-/html-url-attributes-3.0.1.tgz#83b052cd5e437071b756cd74ae70f708870c2d87" + integrity sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ== + https-proxy-agent@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" @@ -4422,9 +4693,9 @@ https-proxy-agent@^5.0.0: debug "4" husky@^9.1.6: - version "9.1.6" - resolved "https://registry.yarnpkg.com/husky/-/husky-9.1.6.tgz#e23aa996b6203ab33534bdc82306b0cf2cb07d6c" - integrity sha512-sqbjZKK7kf44hfdE94EoX8MZNk0n7HeW37O4YrVGCF4wzgQjp+akPAkfUK5LZ6KuR/6sqeAVuXHji+RzQgOn5A== + version "9.1.7" + resolved "https://registry.yarnpkg.com/husky/-/husky-9.1.7.tgz#d46a38035d101b46a70456a850ff4201344c0b2d" + integrity sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA== iconsax-react@^0.0.8: version "0.0.8" @@ -4433,6 +4704,11 @@ iconsax-react@^0.0.8: dependencies: prop-types "^15.7.2" +ieee754@^1.1.12: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + ignore@^5.2.0, ignore@^5.3.1: version "5.3.2" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" @@ -4474,6 +4750,11 @@ ini@4.1.1: resolved "https://registry.yarnpkg.com/ini/-/ini-4.1.1.tgz#d95b3d843b1e906e56d6747d5447904ff50ce7a1" integrity sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g== +inline-style-parser@0.2.4: + version "0.2.4" + resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.2.4.tgz#f4af5fe72e612839fcd453d989a586566d695f22" + integrity sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q== + internal-slot@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" @@ -4484,13 +4765,13 @@ internal-slot@^1.0.7: side-channel "^1.0.4" intl-messageformat@^10.1.0, intl-messageformat@^10.5.0: - version "10.7.6" - resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-10.7.6.tgz#d486c780508a2fb8c383e95462951276cf0bcdf4" - integrity sha512-IsMU/hqyy3FJwNJ0hxDfY2heJ7MteSuFvcnCebxRp67di4Fhx1gKKE+qS0bBwUF8yXkX9SsPUhLeX/B6h5SKUA== + version "10.7.7" + resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-10.7.7.tgz#42085e1664729d02240a03346e31a2540b1112a0" + integrity sha512-F134jIoeYMro/3I0h08D0Yt4N9o9pjddU/4IIxMMURqbAtI2wu70X8hvG1V48W49zXHXv3RKSF/po+0fDfsGjA== dependencies: - "@formatjs/ecma402-abstract" "2.2.3" + "@formatjs/ecma402-abstract" "2.2.4" "@formatjs/fast-memoize" "2.2.3" - "@formatjs/icu-messageformat-parser" "2.9.3" + "@formatjs/icu-messageformat-parser" "2.9.4" tslib "2" invariant@^2.2.4: @@ -4500,6 +4781,19 @@ invariant@^2.2.4: dependencies: loose-envify "^1.0.0" +is-alphabetical@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-2.0.1.tgz#01072053ea7c1036df3c7d19a6daaec7f19e789b" + integrity sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ== + +is-alphanumerical@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz#7c03fbe96e3e931113e57f964b0a368cc2dfd875" + integrity sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw== + dependencies: + is-alphabetical "^2.0.0" + is-decimal "^2.0.0" + is-array-buffer@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" @@ -4580,6 +4874,11 @@ is-date-object@^1.0.1, is-date-object@^1.0.5: dependencies: has-tostringtag "^1.0.0" +is-decimal@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-2.0.1.tgz#9469d2dc190d0214fd87d78b78caecc0cc14eef7" + integrity sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A== + is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -4611,6 +4910,11 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" +is-hexadecimal@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz#86b5bf668fca307498d319dfc03289d781a90027" + integrity sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg== + is-interactive@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-2.0.0.tgz#40c57614593826da1100ade6059778d597f16e90" @@ -4648,6 +4952,11 @@ is-path-inside@^3.0.3: resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== +is-plain-obj@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0" + integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== + is-regex@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" @@ -4820,6 +5129,11 @@ jsonparse@^1.2.0: object.assign "^4.1.4" object.values "^1.1.6" +kdbush@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/kdbush/-/kdbush-4.0.2.tgz#2f7b7246328b4657dd122b6c7f025fbc2c868e39" + integrity sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA== + keyv@^4.5.3: version "4.5.4" resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" @@ -4857,6 +5171,11 @@ leaflet-geosearch@^4.0.0: "@googlemaps/js-api-loader" "^1.16.6" leaflet "^1.6.0" +leaflet.markercluster@^1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/leaflet.markercluster/-/leaflet.markercluster-1.5.3.tgz#9cdb52a4eab92671832e1ef9899669e80efc4056" + integrity sha512-vPTw/Bndq7eQHjLBVlWpnGeLa3t+3zGiuM7fJwCkiMFq+nmRuG3RI3f7f4N4TDX7T4NpbAXpR2+NTRSEGfCSeA== + leaflet@^1.6.0, leaflet@^1.9.4: version "1.9.4" resolved "https://registry.yarnpkg.com/leaflet/-/leaflet-1.9.4.tgz#23fae724e282fa25745aff82ca4d394748db7d8d" @@ -4977,6 +5296,11 @@ log-symbols@^6.0.0: chalk "^5.3.0" is-unicode-supported "^1.3.0" +longest-streak@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-3.1.0.tgz#62fa67cd958742a1574af9f39866364102d90cd4" + integrity sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g== + loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -5011,6 +5335,230 @@ make-event-props@^1.6.0: resolved "https://registry.yarnpkg.com/make-event-props/-/make-event-props-1.6.2.tgz#c8e0e48eb28b9b808730de38359f6341de7ec5a2" integrity sha512-iDwf7mA03WPiR8QxvcVHmVWEPfMY1RZXerDVNCRYW7dUr2ppH3J58Rwb39/WG39yTZdRSxr3x+2v22tvI0VEvA== +mapbox-gl-leaflet@^0.0.16: + version "0.0.16" + resolved "https://registry.yarnpkg.com/mapbox-gl-leaflet/-/mapbox-gl-leaflet-0.0.16.tgz#25208897bbffbe8e2c1f15d3710f253c19a0a533" + integrity sha512-w4bpZrKHOWDZqUzhDOjIPL6Pc4tD10TVR/z8Iwp3hlUaf8PVqfxPINrcBLkcOg0+xFZSX3uka6Vl6NeO7KUYXw== + +mapbox-gl@^3.7.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/mapbox-gl/-/mapbox-gl-3.8.0.tgz#81330a033e34b8a3b62f01c3f5d853e2307ef755" + integrity sha512-7iQ6wxAf8UedbNYTzNsyr2J25ozIBA4vmKY0xUDXQlHEokulzPENwjjmLxHQGRylDpOmR0c8kPEbtHCaQE2eMw== + dependencies: + "@mapbox/jsonlint-lines-primitives" "^2.0.2" + "@mapbox/mapbox-gl-supported" "^3.0.0" + "@mapbox/point-geometry" "^0.1.0" + "@mapbox/tiny-sdf" "^2.0.6" + "@mapbox/unitbezier" "^0.0.1" + "@mapbox/vector-tile" "^1.3.1" + "@mapbox/whoots-js" "^3.1.0" + "@types/geojson" "^7946.0.14" + "@types/geojson-vt" "^3.2.5" + "@types/mapbox__point-geometry" "^0.1.4" + "@types/mapbox__vector-tile" "^1.3.4" + "@types/pbf" "^3.0.5" + "@types/supercluster" "^7.1.3" + cheap-ruler "^4.0.0" + csscolorparser "~1.0.3" + earcut "^3.0.0" + geojson-vt "^4.0.2" + gl-matrix "^3.4.3" + grid-index "^1.1.0" + kdbush "^4.0.2" + murmurhash-js "^1.0.0" + pbf "^3.2.1" + potpack "^2.0.0" + quickselect "^3.0.0" + serialize-to-js "^3.1.2" + supercluster "^8.0.1" + tinyqueue "^3.0.0" + vt-pbf "^3.1.3" + +markdown-table@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-3.0.4.tgz#fe44d6d410ff9d6f2ea1797a3f60aa4d2b631c2a" + integrity sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw== + +mdast-util-find-and-replace@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.1.tgz#a6fc7b62f0994e973490e45262e4bc07607b04e0" + integrity sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA== + dependencies: + "@types/mdast" "^4.0.0" + escape-string-regexp "^5.0.0" + unist-util-is "^6.0.0" + unist-util-visit-parents "^6.0.0" + +mdast-util-from-markdown@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz#4850390ca7cf17413a9b9a0fbefcd1bc0eb4160a" + integrity sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA== + dependencies: + "@types/mdast" "^4.0.0" + "@types/unist" "^3.0.0" + decode-named-character-reference "^1.0.0" + devlop "^1.0.0" + mdast-util-to-string "^4.0.0" + micromark "^4.0.0" + micromark-util-decode-numeric-character-reference "^2.0.0" + micromark-util-decode-string "^2.0.0" + micromark-util-normalize-identifier "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + unist-util-stringify-position "^4.0.0" + +mdast-util-gfm-autolink-literal@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz#abd557630337bd30a6d5a4bd8252e1c2dc0875d5" + integrity sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ== + dependencies: + "@types/mdast" "^4.0.0" + ccount "^2.0.0" + devlop "^1.0.0" + mdast-util-find-and-replace "^3.0.0" + micromark-util-character "^2.0.0" + +mdast-util-gfm-footnote@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.0.0.tgz#25a1753c7d16db8bfd53cd84fe50562bd1e6d6a9" + integrity sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ== + dependencies: + "@types/mdast" "^4.0.0" + devlop "^1.1.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" + micromark-util-normalize-identifier "^2.0.0" + +mdast-util-gfm-strikethrough@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz#d44ef9e8ed283ac8c1165ab0d0dfd058c2764c16" + integrity sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg== + dependencies: + "@types/mdast" "^4.0.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" + +mdast-util-gfm-table@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz#7a435fb6223a72b0862b33afbd712b6dae878d38" + integrity sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg== + dependencies: + "@types/mdast" "^4.0.0" + devlop "^1.0.0" + markdown-table "^3.0.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" + +mdast-util-gfm-task-list-item@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz#e68095d2f8a4303ef24094ab642e1047b991a936" + integrity sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ== + dependencies: + "@types/mdast" "^4.0.0" + devlop "^1.0.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" + +mdast-util-gfm@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz#3f2aecc879785c3cb6a81ff3a243dc11eca61095" + integrity sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw== + dependencies: + mdast-util-from-markdown "^2.0.0" + mdast-util-gfm-autolink-literal "^2.0.0" + mdast-util-gfm-footnote "^2.0.0" + mdast-util-gfm-strikethrough "^2.0.0" + mdast-util-gfm-table "^2.0.0" + mdast-util-gfm-task-list-item "^2.0.0" + mdast-util-to-markdown "^2.0.0" + +mdast-util-mdx-expression@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz#43f0abac9adc756e2086f63822a38c8d3c3a5096" + integrity sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ== + dependencies: + "@types/estree-jsx" "^1.0.0" + "@types/hast" "^3.0.0" + "@types/mdast" "^4.0.0" + devlop "^1.0.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" + +mdast-util-mdx-jsx@^3.0.0: + version "3.1.3" + resolved "https://registry.yarnpkg.com/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.3.tgz#76b957b3da18ebcfd0de3a9b4451dcd6fdec2320" + integrity sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ== + dependencies: + "@types/estree-jsx" "^1.0.0" + "@types/hast" "^3.0.0" + "@types/mdast" "^4.0.0" + "@types/unist" "^3.0.0" + ccount "^2.0.0" + devlop "^1.1.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" + parse-entities "^4.0.0" + stringify-entities "^4.0.0" + unist-util-stringify-position "^4.0.0" + vfile-message "^4.0.0" + +mdast-util-mdxjs-esm@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz#019cfbe757ad62dd557db35a695e7314bcc9fa97" + integrity sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg== + dependencies: + "@types/estree-jsx" "^1.0.0" + "@types/hast" "^3.0.0" + "@types/mdast" "^4.0.0" + devlop "^1.0.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" + +mdast-util-phrasing@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz#7cc0a8dec30eaf04b7b1a9661a92adb3382aa6e3" + integrity sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w== + dependencies: + "@types/mdast" "^4.0.0" + unist-util-is "^6.0.0" + +mdast-util-to-hast@^13.0.0: + version "13.2.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz#5ca58e5b921cc0a3ded1bc02eed79a4fe4fe41f4" + integrity sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA== + dependencies: + "@types/hast" "^3.0.0" + "@types/mdast" "^4.0.0" + "@ungap/structured-clone" "^1.0.0" + devlop "^1.0.0" + micromark-util-sanitize-uri "^2.0.0" + trim-lines "^3.0.0" + unist-util-position "^5.0.0" + unist-util-visit "^5.0.0" + vfile "^6.0.0" + +mdast-util-to-markdown@^2.0.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz#f910ffe60897f04bb4b7e7ee434486f76288361b" + integrity sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA== + dependencies: + "@types/mdast" "^4.0.0" + "@types/unist" "^3.0.0" + longest-streak "^3.0.0" + mdast-util-phrasing "^4.0.0" + mdast-util-to-string "^4.0.0" + micromark-util-classify-character "^2.0.0" + micromark-util-decode-string "^2.0.0" + unist-util-visit "^5.0.0" + zwitch "^2.0.0" + +mdast-util-to-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz#7a5121475556a04e7eddeb67b264aae79d312814" + integrity sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg== + dependencies: + "@types/mdast" "^4.0.0" + meow@^12.0.1: version "12.1.1" resolved "https://registry.yarnpkg.com/meow/-/meow-12.1.1.tgz#e558dddbab12477b69b2e9a2728c327f191bace6" @@ -5026,6 +5574,279 @@ merge2@^1.3.0: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== +micromark-core-commonmark@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-2.0.2.tgz#6a45bbb139e126b3f8b361a10711ccc7c6e15e93" + integrity sha512-FKjQKbxd1cibWMM1P9N+H8TwlgGgSkWZMmfuVucLCHaYqeSvJ0hFeHsIa65pA2nYbes0f8LDHPMrd9X7Ujxg9w== + dependencies: + decode-named-character-reference "^1.0.0" + devlop "^1.0.0" + micromark-factory-destination "^2.0.0" + micromark-factory-label "^2.0.0" + micromark-factory-space "^2.0.0" + micromark-factory-title "^2.0.0" + micromark-factory-whitespace "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-chunked "^2.0.0" + micromark-util-classify-character "^2.0.0" + micromark-util-html-tag-name "^2.0.0" + micromark-util-normalize-identifier "^2.0.0" + micromark-util-resolve-all "^2.0.0" + micromark-util-subtokenize "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-extension-gfm-autolink-literal@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz#6286aee9686c4462c1e3552a9d505feddceeb935" + integrity sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw== + dependencies: + micromark-util-character "^2.0.0" + micromark-util-sanitize-uri "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-extension-gfm-footnote@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz#4dab56d4e398b9853f6fe4efac4fc9361f3e0750" + integrity sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw== + dependencies: + devlop "^1.0.0" + micromark-core-commonmark "^2.0.0" + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-normalize-identifier "^2.0.0" + micromark-util-sanitize-uri "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-extension-gfm-strikethrough@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz#86106df8b3a692b5f6a92280d3879be6be46d923" + integrity sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw== + dependencies: + devlop "^1.0.0" + micromark-util-chunked "^2.0.0" + micromark-util-classify-character "^2.0.0" + micromark-util-resolve-all "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-extension-gfm-table@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.0.tgz#5cadedfbb29fca7abf752447967003dc3b6583c9" + integrity sha512-Ub2ncQv+fwD70/l4ou27b4YzfNaCJOvyX4HxXU15m7mpYY+rjuWzsLIPZHJL253Z643RpbcP1oeIJlQ/SKW67g== + dependencies: + devlop "^1.0.0" + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-extension-gfm-tagfilter@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz#f26d8a7807b5985fba13cf61465b58ca5ff7dc57" + integrity sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg== + dependencies: + micromark-util-types "^2.0.0" + +micromark-extension-gfm-task-list-item@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz#bcc34d805639829990ec175c3eea12bb5b781f2c" + integrity sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw== + dependencies: + devlop "^1.0.0" + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-extension-gfm@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz#3e13376ab95dd7a5cfd0e29560dfe999657b3c5b" + integrity sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w== + dependencies: + micromark-extension-gfm-autolink-literal "^2.0.0" + micromark-extension-gfm-footnote "^2.0.0" + micromark-extension-gfm-strikethrough "^2.0.0" + micromark-extension-gfm-table "^2.0.0" + micromark-extension-gfm-tagfilter "^2.0.0" + micromark-extension-gfm-task-list-item "^2.0.0" + micromark-util-combine-extensions "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-factory-destination@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz#8fef8e0f7081f0474fbdd92deb50c990a0264639" + integrity sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA== + dependencies: + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-factory-label@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz#5267efa97f1e5254efc7f20b459a38cb21058ba1" + integrity sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg== + dependencies: + devlop "^1.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-factory-space@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz#36d0212e962b2b3121f8525fc7a3c7c029f334fc" + integrity sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg== + dependencies: + micromark-util-character "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-factory-title@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz#237e4aa5d58a95863f01032d9ee9b090f1de6e94" + integrity sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw== + dependencies: + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-factory-whitespace@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz#06b26b2983c4d27bfcc657b33e25134d4868b0b1" + integrity sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ== + dependencies: + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-util-character@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-2.1.1.tgz#2f987831a40d4c510ac261e89852c4e9703ccda6" + integrity sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q== + dependencies: + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-util-chunked@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz#47fbcd93471a3fccab86cff03847fc3552db1051" + integrity sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA== + dependencies: + micromark-util-symbol "^2.0.0" + +micromark-util-classify-character@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz#d399faf9c45ca14c8b4be98b1ea481bced87b629" + integrity sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q== + dependencies: + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-util-combine-extensions@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz#2a0f490ab08bff5cc2fd5eec6dd0ca04f89b30a9" + integrity sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg== + dependencies: + micromark-util-chunked "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-util-decode-numeric-character-reference@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz#fcf15b660979388e6f118cdb6bf7d79d73d26fe5" + integrity sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw== + dependencies: + micromark-util-symbol "^2.0.0" + +micromark-util-decode-string@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz#6cb99582e5d271e84efca8e61a807994d7161eb2" + integrity sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ== + dependencies: + decode-named-character-reference "^1.0.0" + micromark-util-character "^2.0.0" + micromark-util-decode-numeric-character-reference "^2.0.0" + micromark-util-symbol "^2.0.0" + +micromark-util-encode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz#0d51d1c095551cfaac368326963cf55f15f540b8" + integrity sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw== + +micromark-util-html-tag-name@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz#e40403096481986b41c106627f98f72d4d10b825" + integrity sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA== + +micromark-util-normalize-identifier@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz#c30d77b2e832acf6526f8bf1aa47bc9c9438c16d" + integrity sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q== + dependencies: + micromark-util-symbol "^2.0.0" + +micromark-util-resolve-all@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz#e1a2d62cdd237230a2ae11839027b19381e31e8b" + integrity sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg== + dependencies: + micromark-util-types "^2.0.0" + +micromark-util-sanitize-uri@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz#ab89789b818a58752b73d6b55238621b7faa8fd7" + integrity sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ== + dependencies: + micromark-util-character "^2.0.0" + micromark-util-encode "^2.0.0" + micromark-util-symbol "^2.0.0" + +micromark-util-subtokenize@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.2.tgz#ea5e3984b96b13cda7b1329763e15f3b4a4e063b" + integrity sha512-xKxhkB62vwHUuuxHe9Xqty3UaAsizV2YKq5OV344u3hFBbf8zIYrhYOWhAQb94MtMPkjTOzzjJ/hid9/dR5vFA== + dependencies: + devlop "^1.0.0" + micromark-util-chunked "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-util-symbol@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz#e5da494e8eb2b071a0d08fb34f6cefec6c0a19b8" + integrity sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q== + +micromark-util-types@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-2.0.1.tgz#a3edfda3022c6c6b55bfb049ef5b75d70af50709" + integrity sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ== + +micromark@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/micromark/-/micromark-4.0.1.tgz#294c2f12364759e5f9e925a767ae3dfde72223ff" + integrity sha512-eBPdkcoCNvYcxQOAKAlceo5SNdzZWfF+FcSupREAzdAh9rRmE239CEQAiTwIgblwnoM8zzj35sZ5ZwvSEOF6Kw== + dependencies: + "@types/debug" "^4.0.0" + debug "^4.0.0" + decode-named-character-reference "^1.0.0" + devlop "^1.0.0" + micromark-core-commonmark "^2.0.0" + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-chunked "^2.0.0" + micromark-util-combine-extensions "^2.0.0" + micromark-util-decode-numeric-character-reference "^2.0.0" + micromark-util-encode "^2.0.0" + micromark-util-normalize-identifier "^2.0.0" + micromark-util-resolve-all "^2.0.0" + micromark-util-sanitize-uri "^2.0.0" + micromark-util-subtokenize "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + micromatch@^4.0.4, micromatch@^4.0.5: version "4.0.8" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" @@ -5098,6 +5919,11 @@ ms@^2.1.1, ms@^2.1.3: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== +murmurhash-js@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/murmurhash-js/-/murmurhash-js-1.0.0.tgz#b06278e21fc6c37fa5313732b0412bcb6ae15f51" + integrity sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw== + mz@^2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" @@ -5216,10 +6042,10 @@ object-hash@^3.0.0: resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== -object-inspect@^1.13.1: - version "1.13.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff" - integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== +object-inspect@^1.13.1, object-inspect@^1.13.3: + version "1.13.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.3.tgz#f14c183de51130243d6d18ae149375ff50ea488a" + integrity sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA== object-keys@^1.1.1: version "1.1.1" @@ -5354,6 +6180,20 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" +parse-entities@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-4.0.1.tgz#4e2a01111fb1c986549b944af39eeda258fc9e4e" + integrity sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w== + dependencies: + "@types/unist" "^2.0.0" + character-entities "^2.0.0" + character-entities-legacy "^3.0.0" + character-reference-invalid "^2.0.0" + decode-named-character-reference "^1.0.0" + is-alphanumerical "^2.0.0" + is-decimal "^2.0.0" + is-hexadecimal "^2.0.0" + parse-json@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" @@ -5407,6 +6247,14 @@ pathe@1.1.2: resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec" integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== +pbf@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/pbf/-/pbf-3.3.0.tgz#1790f3d99118333cc7f498de816028a346ef367f" + integrity sha512-XDF38WCH3z5OV/OVa8GKUNtLAyneuzbCisx7QUCF8Q6Nutx0WnJrQe5O+kOtBlLfRNUws98Y58Lblp+NJG5T4Q== + dependencies: + ieee754 "^1.1.12" + resolve-protobuf-schema "^2.1.0" + pdfjs-dist@4.4.168: version "4.4.168" resolved "https://registry.yarnpkg.com/pdfjs-dist/-/pdfjs-dist-4.4.168.tgz#4487716376a33c68753ed37f782ae91d1c9ef8fa" @@ -5415,7 +6263,7 @@ pdfjs-dist@4.4.168: canvas "^2.11.2" path2d "^0.2.0" -picocolors@^1.0.0, picocolors@^1.1.0: +picocolors@^1.0.0, picocolors@^1.1.0, picocolors@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== @@ -5503,14 +6351,19 @@ postcss@8.4.38: source-map-js "^1.2.0" postcss@^8.4.23: - version "8.4.47" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.47.tgz#5bf6c9a010f3e724c503bf03ef7947dcb0fea365" - integrity sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ== + version "8.4.49" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.49.tgz#4ea479048ab059ab3ae61d082190fabfd994fe19" + integrity sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA== dependencies: nanoid "^3.3.7" - picocolors "^1.1.0" + picocolors "^1.1.1" source-map-js "^1.2.1" +potpack@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/potpack/-/potpack-2.0.0.tgz#61f4dd2dc4b3d5e996e3698c0ec9426d0e169104" + integrity sha512-Q+/tYsFU9r7xoOJ+y/ZTtdVQwTWfzjbiXBDMM/JKUux3+QPP02iUuIoeBQ+Ot6oEDlC+/PGjB/5A3K7KKb7hcw== + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -5537,6 +6390,16 @@ prop-types@^15.7.2, prop-types@^15.8.1: object-assign "^4.1.1" react-is "^16.13.1" +property-information@^6.0.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-6.5.0.tgz#6212fbb52ba757e92ef4fb9d657563b933b7ffec" + integrity sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig== + +protocol-buffers-schema@^3.3.1: + version "3.6.0" + resolved "https://registry.yarnpkg.com/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz#77bc75a48b2ff142c1ad5b5b90c94cd0fa2efd03" + integrity sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw== + punycode@^2.1.0: version "2.3.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" @@ -5547,6 +6410,11 @@ queue-microtask@^1.2.2: resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== +quickselect@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/quickselect/-/quickselect-3.0.0.tgz#a37fc953867d56f095a20ac71c6d27063d2de603" + integrity sha512-XdjUArbK4Bm5fLLvlm5KpTFOiOThgfWWI4axAZDWg4E/0mKdZyI9tNEfds27qCi1ze/vwTR16kvmmGhRra3c2g== + react-dom@18.3.1: version "18.3.1" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.3.1.tgz#c2265d79511b57d479b3dd3fdfa51536494c5cb4" @@ -5560,6 +6428,13 @@ react-is@^16.13.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== +react-leaflet-cluster@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/react-leaflet-cluster/-/react-leaflet-cluster-2.1.0.tgz#9e5299efb7b16eff75511a47ed4a5d763dcf55b5" + integrity sha512-16X7XQpRThQFC4PH4OpXHimGg19ouWmjxjtpxOeBKpvERSvIRqTx7fvhTwkEPNMFTQ8zTfddz6fRTUmUEQul7g== + dependencies: + leaflet.markercluster "^1.5.3" + react-leaflet@^4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/react-leaflet/-/react-leaflet-4.2.1.tgz#c300e9eccaf15cb40757552e181200aa10b94780" @@ -5567,6 +6442,22 @@ react-leaflet@^4.2.1: dependencies: "@react-leaflet/core" "^2.1.0" +react-markdown@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/react-markdown/-/react-markdown-9.0.1.tgz#c05ddbff67fd3b3f839f8c648e6fb35d022397d1" + integrity sha512-186Gw/vF1uRkydbsOIkcGXw7aHq0sZOCRFFjGrr7b9+nVZg4UfA4enXCaxm4fUzecU38sWfrNDitGhshuU7rdg== + dependencies: + "@types/hast" "^3.0.0" + devlop "^1.0.0" + hast-util-to-jsx-runtime "^2.0.0" + html-url-attributes "^3.0.0" + mdast-util-to-hast "^13.0.0" + remark-parse "^11.0.0" + remark-rehype "^11.0.0" + unified "^11.0.0" + unist-util-visit "^5.0.0" + vfile "^6.0.0" + react-pdf@^9.1.1: version "9.1.1" resolved "https://registry.yarnpkg.com/react-pdf/-/react-pdf-9.1.1.tgz#10b1d1012e1ad15a12b7d16fbaec5a3dc81068d7" @@ -5610,9 +6501,9 @@ react-style-singleton@^2.2.1: tslib "^2.0.0" react-textarea-autosize@^8.5.3: - version "8.5.4" - resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.5.4.tgz#1c568ad838857b6ce86ee2a96e504179305e0bf4" - integrity sha512-eSSjVtRLcLfFwFcariT77t9hcbVJHQV76b51QjQGarQIHml2+gM2lms0n3XrhnDmgK5B+/Z7TmQk5OHNzqYm/A== + version "8.5.5" + resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.5.5.tgz#987cc25ad7f8e51389a41f88239ff07d2e968761" + integrity sha512-CVA94zmfp8m4bSHtWwmANaBR8EPsKy2aZ7KwqhoS4Ftib87F9Kvi7XQhOixypPLMc6kVYgOXvKFuuzZDpHGRPg== dependencies: "@babel/runtime" "^7.20.13" use-composed-ref "^1.3.0" @@ -5666,7 +6557,7 @@ regenerator-runtime@^0.14.0: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== -regexp.prototype.flags@^1.5.2: +regexp.prototype.flags@^1.5.2, regexp.prototype.flags@^1.5.3: version "1.5.3" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz#b3ae40b1d2499b8350ab2c3fe6ef3845d3a96f42" integrity sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ== @@ -5676,6 +6567,56 @@ regexp.prototype.flags@^1.5.2: es-errors "^1.3.0" set-function-name "^2.0.2" +rehype-sanitize@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/rehype-sanitize/-/rehype-sanitize-6.0.0.tgz#16e95f4a67a69cbf0f79e113c8e0df48203db73c" + integrity sha512-CsnhKNsyI8Tub6L4sm5ZFsme4puGfc6pYylvXo1AeqaGbjOYyzNv3qZPwvs0oMJ39eryyeOdmxwUIo94IpEhqg== + dependencies: + "@types/hast" "^3.0.0" + hast-util-sanitize "^5.0.0" + +remark-gfm@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/remark-gfm/-/remark-gfm-4.0.0.tgz#aea777f0744701aa288b67d28c43565c7e8c35de" + integrity sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA== + dependencies: + "@types/mdast" "^4.0.0" + mdast-util-gfm "^3.0.0" + micromark-extension-gfm "^3.0.0" + remark-parse "^11.0.0" + remark-stringify "^11.0.0" + unified "^11.0.0" + +remark-parse@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-11.0.0.tgz#aa60743fcb37ebf6b069204eb4da304e40db45a1" + integrity sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA== + dependencies: + "@types/mdast" "^4.0.0" + mdast-util-from-markdown "^2.0.0" + micromark-util-types "^2.0.0" + unified "^11.0.0" + +remark-rehype@^11.0.0: + version "11.1.1" + resolved "https://registry.yarnpkg.com/remark-rehype/-/remark-rehype-11.1.1.tgz#f864dd2947889a11997c0a2667cd6b38f685bca7" + integrity sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ== + dependencies: + "@types/hast" "^3.0.0" + "@types/mdast" "^4.0.0" + mdast-util-to-hast "^13.0.0" + unified "^11.0.0" + vfile "^6.0.0" + +remark-stringify@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-11.0.0.tgz#4c5b01dd711c269df1aaae11743eb7e2e7636fd3" + integrity sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw== + dependencies: + "@types/mdast" "^4.0.0" + mdast-util-to-markdown "^2.0.0" + unified "^11.0.0" + require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -5701,6 +6642,13 @@ resolve-pkg-maps@^1.0.0: resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== +resolve-protobuf-schema@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz#9ca9a9e69cf192bbdaf1006ec1973948aa4a3758" + integrity sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ== + dependencies: + protocol-buffers-schema "^3.3.1" + resolve@^1.1.7, resolve@^1.22.2, resolve@^1.22.4: version "1.22.8" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" @@ -5799,6 +6747,11 @@ semver@^7.3.5, semver@^7.6.0, semver@^7.6.3: resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== +serialize-to-js@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/serialize-to-js/-/serialize-to-js-3.1.2.tgz#844b8a1c2d72412f68ea30da55090b3fc8e95790" + integrity sha512-owllqNuDDEimQat7EPG0tH7JjO090xKNzUtYz6X+Sk2BXDnOCilDdNLwjWeFywG9xkJul1ULvtUQa9O4pUaY0w== + set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -5889,6 +6842,11 @@ source-map-js@^1.0.2, source-map-js@^1.2.0, source-map-js@^1.2.1: resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== +space-separated-tokens@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz#1ecd9d2350a3844572c3f4a312bceb018348859f" + integrity sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q== + split2@^4.0.0: version "4.2.0" resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" @@ -6010,6 +6968,14 @@ string_decoder@^1.1.1: dependencies: safe-buffer "~5.2.0" +stringify-entities@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-4.0.4.tgz#b3b79ef5f277cc4ac73caeb0236c5ba939b3a4f3" + integrity sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg== + dependencies: + character-entities-html4 "^2.0.0" + character-entities-legacy "^3.0.0" + "strip-ansi-cjs@npm:strip-ansi@^6.0.1": version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -6041,6 +7007,13 @@ strip-json-comments@^3.1.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== +style-to-object@^1.0.0: + version "1.0.8" + resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-1.0.8.tgz#67a29bca47eaa587db18118d68f9d95955e81292" + integrity sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g== + dependencies: + inline-style-parser "0.2.4" + styled-jsx@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.1.1.tgz#839a1c3aaacc4e735fed0781b8619ea5d0009d1f" @@ -6061,6 +7034,13 @@ sucrase@^3.32.0: pirates "^4.0.1" ts-interface-checker "^0.1.9" +supercluster@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/supercluster/-/supercluster-8.0.1.tgz#9946ba123538e9e9ab15de472531f604e7372df5" + integrity sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ== + dependencies: + kdbush "^4.0.2" + supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" @@ -6190,6 +7170,11 @@ tinygradient@^1.1.5: "@types/tinycolor2" "^1.4.0" tinycolor2 "^1.0.0" +tinyqueue@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/tinyqueue/-/tinyqueue-3.0.0.tgz#101ea761ccc81f979e29200929e78f1556e3661e" + integrity sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g== + to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -6202,6 +7187,16 @@ tr46@~0.0.3: resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== +trim-lines@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-3.0.1.tgz#d802e332a07df861c48802c04321017b1bd87338" + integrity sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg== + +trough@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/trough/-/trough-2.2.0.tgz#94a60bd6bd375c152c1df911a4b11d5b0256f50f" + integrity sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw== + ts-api-utils@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.4.0.tgz#709c6f2076e511a81557f3d07a0cbd566ae8195c" @@ -6222,7 +7217,7 @@ tsconfig-paths@^3.15.0: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@2, tslib@^2.0.0, tslib@^2.1.0, tslib@^2.4.0, tslib@^2.6.2: +tslib@2, tslib@^2.0.0, tslib@^2.1.0, tslib@^2.4.0, tslib@^2.6.2, tslib@^2.8.0: version "2.8.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== @@ -6308,6 +7303,57 @@ unicorn-magic@^0.1.0: resolved "https://registry.yarnpkg.com/unicorn-magic/-/unicorn-magic-0.1.0.tgz#1bb9a51c823aaf9d73a8bfcd3d1a23dde94b0ce4" integrity sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ== +unified@^11.0.0: + version "11.0.5" + resolved "https://registry.yarnpkg.com/unified/-/unified-11.0.5.tgz#f66677610a5c0a9ee90cab2b8d4d66037026d9e1" + integrity sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA== + dependencies: + "@types/unist" "^3.0.0" + bail "^2.0.0" + devlop "^1.0.0" + extend "^3.0.0" + is-plain-obj "^4.0.0" + trough "^2.0.0" + vfile "^6.0.0" + +unist-util-is@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-6.0.0.tgz#b775956486aff107a9ded971d996c173374be424" + integrity sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw== + dependencies: + "@types/unist" "^3.0.0" + +unist-util-position@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-5.0.0.tgz#678f20ab5ca1207a97d7ea8a388373c9cf896be4" + integrity sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA== + dependencies: + "@types/unist" "^3.0.0" + +unist-util-stringify-position@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz#449c6e21a880e0855bf5aabadeb3a740314abac2" + integrity sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ== + dependencies: + "@types/unist" "^3.0.0" + +unist-util-visit-parents@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz#4d5f85755c3b8f0dc69e21eca5d6d82d22162815" + integrity sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw== + dependencies: + "@types/unist" "^3.0.0" + unist-util-is "^6.0.0" + +unist-util-visit@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-5.0.0.tgz#a7de1f31f72ffd3519ea71814cccf5fd6a9217d6" + integrity sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg== + dependencies: + "@types/unist" "^3.0.0" + unist-util-is "^6.0.0" + unist-util-visit-parents "^6.0.0" + update-browserslist-db@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz#80846fba1d79e82547fb661f8d141e0945755fe5" @@ -6360,6 +7406,36 @@ util-deprecate@^1.0.1, util-deprecate@^1.0.2: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== +uuid@^11.0.3: + version "11.0.3" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-11.0.3.tgz#248451cac9d1a4a4128033e765d137e2b2c49a3d" + integrity sha512-d0z310fCWv5dJwnX1Y/MncBAqGMKEzlBb1AOf7z9K8ALnd0utBX/msg/fA0+sbyN1ihbMsLhrBlnl1ak7Wa0rg== + +vfile-message@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-4.0.2.tgz#c883c9f677c72c166362fd635f21fc165a7d1181" + integrity sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw== + dependencies: + "@types/unist" "^3.0.0" + unist-util-stringify-position "^4.0.0" + +vfile@^6.0.0: + version "6.0.3" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-6.0.3.tgz#3652ab1c496531852bf55a6bac57af981ebc38ab" + integrity sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q== + dependencies: + "@types/unist" "^3.0.0" + vfile-message "^4.0.0" + +vt-pbf@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/vt-pbf/-/vt-pbf-3.1.3.tgz#68fd150756465e2edae1cc5c048e063916dcfaac" + integrity sha512-2LzDFzt0mZKZ9IpVF2r69G9bXaP2Q2sArJCmcCgvfTdCCZzSyz4aCLoQyUilu37Ll56tCblIZrXFIjNUpGIlmA== + dependencies: + "@mapbox/point-geometry" "0.1.0" + "@mapbox/vector-tile" "^1.3.1" + pbf "^3.2.1" + warning@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" @@ -6523,3 +7599,8 @@ yocto-queue@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.1.1.tgz#fef65ce3ac9f8a32ceac5a634f74e17e5b232110" integrity sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g== + +zwitch@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7" + integrity sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==