From 8f162fb83d0dcb605094e761447922b28f3f3f08 Mon Sep 17 00:00:00 2001 From: Derick M <58572875+TurtIeSocks@users.noreply.github.com> Date: Sun, 8 Jan 2023 20:35:56 -0500 Subject: [PATCH 01/10] frontend components - Adds a fancy import wizard - Replaces json/shapefile imports with a step by step process - Add react window for virtualized scrolling --- client/package.json | 4 +- client/src/components/Code.tsx | 12 +- client/src/components/ReactWindow.tsx | 30 + client/src/components/dialogs/Base.tsx | 58 + client/src/components/dialogs/Header.tsx | 18 +- .../components/dialogs/import/AssignStep.tsx | 296 +++++ .../src/components/dialogs/import/Finish.tsx | 74 ++ .../components/dialogs/import/ImportStep.tsx | 84 ++ .../dialogs/import/ImportWizard.tsx | 241 ++++ .../src/components/dialogs/import/MiniMap.tsx | 82 ++ .../components/dialogs/import/PropsStep.tsx | 260 ++++ .../components/dialogs/import/TabPanel.tsx | 19 + client/src/components/drawer/MenuItem.tsx | 2 +- .../src/components/drawer/manage/Instance.tsx | 84 +- client/src/components/drawer/manage/Json.tsx | 47 +- .../components/drawer/manage/ShapeFile.tsx | 80 +- client/src/components/drawer/manage/index.tsx | 27 +- client/src/hooks/useShapes.ts | 2 + client/src/hooks/useStatic.ts | 41 +- client/src/pages/map/markers/Polygon.tsx | 117 +- client/src/pages/map/popups/Polygon.tsx | 25 +- client/yarn.lock | 1164 +++++++++-------- server/model/src/api/collection.rs | 29 + server/model/src/api/feature.rs | 5 +- server/model/src/api/mod.rs | 2 +- 25 files changed, 2039 insertions(+), 764 deletions(-) create mode 100644 client/src/components/ReactWindow.tsx create mode 100644 client/src/components/dialogs/Base.tsx create mode 100644 client/src/components/dialogs/import/AssignStep.tsx create mode 100644 client/src/components/dialogs/import/Finish.tsx create mode 100644 client/src/components/dialogs/import/ImportStep.tsx create mode 100644 client/src/components/dialogs/import/ImportWizard.tsx create mode 100644 client/src/components/dialogs/import/MiniMap.tsx create mode 100644 client/src/components/dialogs/import/PropsStep.tsx create mode 100644 client/src/components/dialogs/import/TabPanel.tsx diff --git a/client/package.json b/client/package.json index 226d55c6..3d3d47eb 100644 --- a/client/package.json +++ b/client/package.json @@ -17,7 +17,7 @@ "@codemirror/lint": "^6.1.0", "@emotion/react": "^11.10.5", "@emotion/styled": "^11.10.5", - "@geoman-io/leaflet-geoman-free": "github:TurtIeSocks/leaflet-geoman#66a5b28", + "@geoman-io/leaflet-geoman-free": "github:TurtIeSocks/leaflet-geoman#1dcf3a0", "@mui/icons-material": "^5.11.0", "@mui/material": "^5.11.2", "@mui/x-date-pickers": "^5.0.12", @@ -42,6 +42,7 @@ "react-leaflet-geoman-v2": "^0.2.2", "react-router": "^6.6.1", "react-router-dom": "^6.6.1", + "react-window": "^1.8.8", "shapefile": "^0.6.6", "use-deep-compare-effect": "^1.8.1", "zustand": "^4.1.5" @@ -53,6 +54,7 @@ "@types/node": "^18.11.11", "@types/react": "^18.0.26", "@types/react-dom": "^18.0.9", + "@types/react-window": "^1.8.5", "@types/shapefile": "^0.6.1", "@typescript-eslint/eslint-plugin": "^5.45.1", "@typescript-eslint/parser": "^5.45.1", diff --git a/client/src/components/Code.tsx b/client/src/components/Code.tsx index ca441576..9bb13925 100644 --- a/client/src/components/Code.tsx +++ b/client/src/components/Code.tsx @@ -1,13 +1,13 @@ import * as React from 'react' -import ReactCodeMirror from '@uiw/react-codemirror' +import ReactCodeMirror, { ReactCodeMirrorProps } from '@uiw/react-codemirror' import { json, jsonParseLinter } from '@codemirror/lang-json' import { linter } from '@codemirror/lint' import { usePersist } from '@hooks/usePersist' import { getData } from '@services/fetches' -interface EditProps { - code: string +interface EditProps extends ReactCodeMirrorProps { + code?: string setCode: (code: string) => void textMode?: boolean children?: string @@ -22,7 +22,7 @@ export function Code({ setCode, textMode = false, children, - maxHeight, + ...rest }: EditProps | ReadProps) { const darkMode = usePersist((s) => s.darkMode) @@ -36,7 +36,7 @@ export function Code({ key={darkMode.toString()} extensions={extensions} theme={darkMode ? 'dark' : 'light'} - value={children ?? code} + value={children ?? code ?? ''} onUpdate={async (value) => { if (value.docChanged) { if (setCode) { @@ -50,7 +50,7 @@ export function Code({ } } }} - maxHeight={maxHeight} + {...rest} /> ) } diff --git a/client/src/components/ReactWindow.tsx b/client/src/components/ReactWindow.tsx new file mode 100644 index 00000000..c875b2d1 --- /dev/null +++ b/client/src/components/ReactWindow.tsx @@ -0,0 +1,30 @@ +import * as React from 'react' +import { FixedSizeList, type ListChildComponentProps } from 'react-window' + +export default function ReactWindow({ + children, + rows, + data, + itemSize, + height = 500, + width = '100%', +}: { + children: React.FC> + rows: T[] + data: U + itemSize?: number + height?: number + width?: number | string +}) { + return ( + + {children} + + ) +} diff --git a/client/src/components/dialogs/Base.tsx b/client/src/components/dialogs/Base.tsx new file mode 100644 index 00000000..b15027a7 --- /dev/null +++ b/client/src/components/dialogs/Base.tsx @@ -0,0 +1,58 @@ +import * as React from 'react' +import { + Button, + Dialog, + DialogActions, + DialogContent, + DialogTitleProps, + type DialogProps, + DialogContentProps, + DialogActionsProps, +} from '@mui/material' +import DialogHeader from './Header' + +interface Props { + open: boolean + onClose: () => void + title: string + children: React.ReactNode + Components?: { + Dialog?: Partial + DialogTitle?: Partial + DialogContent?: Partial + DialogActions?: Partial + } +} +export default function BaseDialog({ + open, + onClose, + title, + children, + Components, +}: Props) { + const { children: actions, ...actionProps } = Components?.DialogActions || {} + + return ( + + + {title} + + {children} + ({ + mt: 3, + bgcolor: + theme.palette.mode === 'dark' + ? theme.palette.grey[700] + : theme.palette.grey[200], + })} + {...actionProps} + > + {actions} + + + + ) +} diff --git a/client/src/components/dialogs/Header.tsx b/client/src/components/dialogs/Header.tsx index 1cf17162..c65a6667 100644 --- a/client/src/components/dialogs/Header.tsx +++ b/client/src/components/dialogs/Header.tsx @@ -1,20 +1,28 @@ import * as React from 'react' -import { DialogTitle, IconButton } from '@mui/material' +import { DialogTitle, DialogTitleProps, IconButton } from '@mui/material' import Clear from '@mui/icons-material/Clear' -interface Props { +interface Props extends DialogTitleProps { children?: React.ReactNode action?: () => void } -export default function DialogHeader({ children, action }: Props) { +export default function DialogHeader({ children, action, ...rest }: Props) { return ( - + ({ + bgcolor: + theme.palette.mode === 'dark' + ? theme.palette.grey[700] + : theme.palette.grey[200], + })} + {...rest} + > {children} {!!action && ( diff --git a/client/src/components/dialogs/import/AssignStep.tsx b/client/src/components/dialogs/import/AssignStep.tsx new file mode 100644 index 00000000..fff02b22 --- /dev/null +++ b/client/src/components/dialogs/import/AssignStep.tsx @@ -0,0 +1,296 @@ +/* eslint-disable react/no-array-index-key */ +import * as React from 'react' +import Grid2 from '@mui/material/Unstable_Grid2/Grid2' +import Typography from '@mui/material/Typography' +import type { FeatureCollection } from 'geojson' + +import { ClientProject } from '@assets/types' +import { Checkbox, Divider, MenuItem, Select } from '@mui/material' +import ReactWindow from '@components/ReactWindow' +import { useStatic } from '@hooks/useStatic' + +const AssignStep = React.forwardRef< + HTMLDivElement, + { + handleChange: (geojson: FeatureCollection) => void + geojson: FeatureCollection + refGeojson: FeatureCollection + } +>(({ handleChange, geojson, refGeojson }, ref) => { + const { allProjects, allType, checked, nameProp } = useStatic( + (s) => s.importWizard, + ) + const projects = useStatic((s) => s.projects) + + const innerRef = React.useRef(null) + + React.useEffect(() => { + fetch('/internal/admin/project/all') + .then((res) => res.json()) + .then((data) => + useStatic.setState({ + projects: data.data.map( + (project: Omit) => ({ + ...project, + related: [], + }), + ), + }), + ) + }, []) + + React.useEffect(() => { + useStatic.setState((prev) => ({ + importWizard: { + ...prev.importWizard, + checked: Object.fromEntries( + geojson.features.map((feature) => [ + feature.properties?.name, + checked[feature.properties?.name] ?? true, + ]), + ), + }, + })) + }, []) + + const all = Object.values(checked).every((val) => val) + const some = !all && Object.values(checked).some((val) => val) + + const sorted = React.useMemo( + () => + refGeojson.features + .slice() + .sort((a, b) => + a.properties?.[nameProp]?.localeCompare(b.properties?.[nameProp]), + ), + [nameProp], + ) + return ( + + + + + Feature + + + + + Type + + + + + Projects + + + + + useStatic.setState((prev) => ({ + importWizard: { + ...prev.importWizard, + checked: Object.fromEntries( + Object.keys(checked).map((k) => [k, !all && !some]), + ), + }, + })) + } + /> + + + + All + + + + + + + + + + +
+ + {({ style, data, index }) => { + const refFeature = data.rows[index] + const feature = data.geojson.features.find( + (feat) => feat.id === refFeature.id, + ) + if (!feature) return null + const isActive = + feature && checked[feature.properties?.name || ''] + return ( + + + { + useStatic.setState((prev) => ({ + importWizard: { + ...prev.importWizard, + checked: { + ...prev.importWizard.checked, + [feature.properties?.name || '']: !isActive, + }, + }, + })) + }} + color={isActive ? 'primary' : 'secondary'} + /> + + + + {feature.properties?.name || `Feature_${index}`} + + + + + + + + + + ) + }} + +
+
+
+ ) +}) + +AssignStep.displayName = 'AssignStep' + +export default AssignStep diff --git a/client/src/components/dialogs/import/Finish.tsx b/client/src/components/dialogs/import/Finish.tsx new file mode 100644 index 00000000..0f3b0a12 --- /dev/null +++ b/client/src/components/dialogs/import/Finish.tsx @@ -0,0 +1,74 @@ +import Button from '@mui/material/Button' +import Grid2 from '@mui/material/Unstable_Grid2/Grid2' +import * as React from 'react' + +import { useShapes } from '@hooks/useShapes' +import type { FeatureCollection } from 'geojson' +import { save } from '@services/fetches' + +interface Props { + code: string + filtered: FeatureCollection + reset: () => void +} + +export default function FinishStep({ code, filtered, reset }: Props) { + return ( + + + + + + + + + + + + ) +} diff --git a/client/src/components/dialogs/import/ImportStep.tsx b/client/src/components/dialogs/import/ImportStep.tsx new file mode 100644 index 00000000..dff967d5 --- /dev/null +++ b/client/src/components/dialogs/import/ImportStep.tsx @@ -0,0 +1,84 @@ +import * as React from 'react' +import Grid2 from '@mui/material/Unstable_Grid2/Grid2' +import Typography from '@mui/material/Typography' +import type { FeatureCollection } from 'geojson' + +import JsonFile from '@components/drawer/manage/Json' +import ShapeFile from '@components/drawer/manage/ShapeFile' +import { Divider } from '@mui/material' +import InstanceSelect from '@components/drawer/manage/Instance' +import { useStatic } from '@hooks/useStatic' + +const ImportStep = React.forwardRef< + HTMLDivElement, + { + handleChange: ( + geojson: FeatureCollection, + updatedSelected?: boolean, + ) => void + } +>(({ handleChange }, ref) => { + const { scannerSelected } = useStatic((s) => s.importWizard) + + return ( + + {/* JSON */} + + JSON + + + + Upload a JSON file, such as an areas.json from ReactMap, + a geofence.json from Poracle, or any GeoJSON. + + + + + + + {/* Shapefile */} + + Shapefile + + + + Accepts either a .shp file or a combination of{' '} + .shp and .dbf files to add extra + information. + + + + + + + {/* Scanner */} + + Scanner + + + + Import fences directly from your scanner database. + + + + handleChange(geo, true)} + filters={['AutoTth', 'AutoQuest', 'PokemonIv', 'AutoPokemon']} + initialState={[...scannerSelected]} + /> + + + {/* Nominatim */} + + + Nominatim and OSM searching coming soon + + + + ) +}) + +ImportStep.displayName = 'ImportStep' + +export default ImportStep diff --git a/client/src/components/dialogs/import/ImportWizard.tsx b/client/src/components/dialogs/import/ImportWizard.tsx new file mode 100644 index 00000000..e9b20b82 --- /dev/null +++ b/client/src/components/dialogs/import/ImportWizard.tsx @@ -0,0 +1,241 @@ +import * as React from 'react' +import { useStatic } from '@hooks/useStatic' +import Stepper from '@mui/material/Stepper' +import Step from '@mui/material/Step' +import StepLabel from '@mui/material/StepLabel' +import { Code } from '@components/Code' + +import { Box, Button, Tab, Tabs } from '@mui/material' +import type { FeatureCollection } from 'geojson' +import { safeParse } from '@services/utils' + +import BaseDialog from '../Base' +import ImportStep from './ImportStep' +import PropsStep from './PropsStep' +import AssignStep from './AssignStep' +import FinishStep from './Finish' +import TabPanel from './TabPanel' +import MiniMap from './MiniMap' + +export default function ImportWizard() { + const importWizard = useStatic((s) => s.importWizard) + const setStatic = useStatic((s) => s.setStatic) + + const [tempGeojson, setTempGeojson] = React.useState({ + type: 'FeatureCollection', + bbox: [0, 0, 0, 0], + features: [], + }) + const [code, setCode] = React.useState(JSON.stringify(tempGeojson, null, 2)) + const [tab, setTab] = React.useState(0) + const [step, setStep] = React.useState(0) + + const tabRef = React.useRef(null) + + const handleChange = ( + newGeojson: FeatureCollection, + updatedSelected = false, + ) => { + if (updatedSelected) { + useStatic.setState({ + importWizard: { + ...importWizard, + scannerSelected: new Set([ + ...importWizard.scannerSelected, + ...newGeojson.features.map( + (feat) => `${feat.properties?.name}__${feat.properties?.type}`, + ), + ]), + }, + }) + } + setTempGeojson((prev) => { + const merged = { + ...prev, + ...newGeojson, + features: [ + ...prev.features, + ...newGeojson.features.map((feat) => ({ + ...feat, + id: crypto.randomUUID(), + })), + ], + } + setCode(JSON.stringify(merged, null, 2)) + return merged + }) + } + + const handleCodeChange = (newGeojson: FeatureCollection) => { + setCode( + JSON.stringify( + { + ...newGeojson, + features: newGeojson.features.map((feat) => ({ + ...feat, + properties: Object.fromEntries( + Object.entries(feat.properties || {}).map(([k, v]) => + k.startsWith('__') ? [k, undefined] : [k, v], + ), + ), + })), + }, + null, + 2, + ), + ) + } + + const reset = (open = false) => { + setStatic('importWizard', { + open, + nameProp: 'name', + props: [], + customName: '', + modifier: 'none', + allProjects: [], + allType: '', + checked: {}, + scannerSelected: new Set(), + }) + setTempGeojson({ + type: 'FeatureCollection', + bbox: [0, 0, 0, 0], + features: [], + }) + setCode( + '{ "type": "FeatureCollection", "features": [], "bbox": [0, 0, 0, 0] }', + ) + setTab(0) + setStep(0) + } + + const parsed = safeParse(code) + const safe: FeatureCollection = parsed.error + ? { + type: 'FeatureCollection', + bbox: [0, 0, 0, 0], + features: [], + } + : parsed.value + + const filtered = Object.keys(importWizard.checked).length + ? { + ...safe, + features: safe.features.filter( + (feat) => importWizard.checked[feat.properties?.name], + ), + } + : safe + + return ( + reset()} + Components={{ + Dialog: { + maxWidth: 'xl', + }, + DialogContent: { + sx: { + m: 0, + p: 0, + minWidth: '80vw', + overflow: 'auto', + }, + }, + DialogActions: { + children: ( + <> + + + + + + ), + }, + }} + > + setTab(newTab)} + textColor="primary" + indicatorColor="primary" + variant="fullWidth" + > + {['select', 'code', 'preview'].map((label, i) => ( + + ))} + + + {{ + 0: , + 1: ( + + ), + 2: ( + + ), + 3: , + }[step] || null} + + + + + + + + + {['Import', 'Properties', 'Assign', 'Confirm'].map((label) => ( + + {label} + + ))} + + + ) +} diff --git a/client/src/components/dialogs/import/MiniMap.tsx b/client/src/components/dialogs/import/MiniMap.tsx new file mode 100644 index 00000000..c5f067c7 --- /dev/null +++ b/client/src/components/dialogs/import/MiniMap.tsx @@ -0,0 +1,82 @@ +import * as React from 'react' +import { GeoJSON, LayerGroup, LayersControl, Rectangle } from 'react-leaflet' +import * as L from 'leaflet' +import center from '@turf/center' + +import Map from '@components/Map' +import { useStatic } from '@hooks/useStatic' +import type { AllGeoJSON } from '@turf/helpers' +import type { FeatureCollection } from 'geojson' + +export default function MiniMap({ filtered }: { filtered: FeatureCollection }) { + const centerPoint = filtered.features.length + ? center(filtered as AllGeoJSON) + : { geometry: { coordinates: [0, 0] } } + + return ( + + + + {filtered.bbox && ( + + )} + + + + {filtered.features.map((feat) => + feat.bbox ? ( + + ) : null, + )} + + + + { + const projectObj = Object.fromEntries( + useStatic.getState().projects.map((p) => [p.id, p.name]), + ) + + if (layer instanceof L.Polygon && feature.properties) { + layer.setStyle(feature.properties) + } + layer.bindTooltip( + ` +
Name: ${feature?.properties?.name}
+
Type: ${feature?.properties?.type}
+
+ Projects: +

+ ${(feature?.properties?.projects || []) + ?.map((p: number) => projectObj[p]) + .join(', ')} +

+
+ `, + { direction: 'top' }, + ) + }} + /> +
+
+
+ ) +} diff --git a/client/src/components/dialogs/import/PropsStep.tsx b/client/src/components/dialogs/import/PropsStep.tsx new file mode 100644 index 00000000..1c6a5bfe --- /dev/null +++ b/client/src/components/dialogs/import/PropsStep.tsx @@ -0,0 +1,260 @@ +import * as React from 'react' +import Grid2 from '@mui/material/Unstable_Grid2/Grid2' +import type { FeatureCollection } from 'geojson' + +import { + Box, + Button, + Chip, + MenuItem, + Select, + TextField, + ToggleButton, + ToggleButtonGroup, + Typography, +} from '@mui/material' +import { useStatic, UseStatic } from '@hooks/useStatic' +import useSkipFirstEffect from '@hooks/useSkipFirstEffect' + +const modifyName = ( + name: string, + mod: UseStatic['importWizard']['modifier'], +) => { + switch (mod) { + case 'capitalize': + return name + .split(' ') + .map( + (word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase(), + ) + .join(' ') + case 'lowercase': + return name.toLowerCase() + case 'uppercase': + return name.toUpperCase() + default: + return name + } +} + +const PropsStep = React.forwardRef< + HTMLDivElement, + { + handleChange: (geojson: FeatureCollection) => void + geojson: FeatureCollection + } +>(({ handleChange, geojson }, ref) => { + const importWizard = useStatic((s) => s.importWizard) + + const [availableProps] = React.useState(() => { + if (!geojson) return [] + const available = new Set() + geojson.features.forEach((feature) => { + if (feature.properties) { + Object.keys(feature.properties).forEach((key) => available.add(key)) + } + }) + const filtered = Array.from(available).filter((key) => + geojson.features.every( + (feat) => feat.properties?.[key] !== undefined && !key.startsWith('__'), + ), + ) + if (filtered.includes('name') && !importWizard.nameProp) { + useStatic.setState({ + importWizard: { ...importWizard, nameProp: 'name' }, + }) + } + return filtered + }) + + useSkipFirstEffect(() => { + handleChange({ + ...geojson, + features: geojson.features.map((feat, i) => { + const moddedName = modifyName( + feat.properties?.[importWizard.nameProp] || `feature_${i}`, + importWizard.modifier, + ) + const name = importWizard.customName + ? `${importWizard.customName + .replace(/{name}/g, moddedName) + .replace(/{index}/g, i.toString())}${ + /{name}|{index}/g.test(importWizard.customName) ? '' : `_${i}` + }` + : moddedName + return { + ...feat, + properties: { + ...Object.fromEntries( + Object.entries(feat.properties ?? {}).map(([key, v]) => { + const actualKey = key.startsWith('__') ? key.slice(2) : key + return importWizard.props.includes(actualKey) + ? [actualKey, v] + : [`__${actualKey}`, v] + }), + ), + name, + }, + } + }), + }) + }, [ + importWizard.props.length, + importWizard.nameProp, + importWizard.customName, + importWizard.modifier, + ]) + + return ( + + + + Feature Name + + + + + Feature Properties + + + + + Property + + + + + *Properties found on all features + + + + Custom + + + + useStatic.setState({ + importWizard: { ...importWizard, customName: target.value }, + }) + } + helperText="Try using {name} and {index}" + /> + + + + {(['none', 'capitalize', 'uppercase', 'lowercase'] as const).map( + (value) => ( + + useStatic.setState({ + importWizard: { ...importWizard, modifier: value }, + }) + } + > + {value} + + ), + )} + + + + + + {availableProps.map((value) => { + const selected = importWizard.props.includes(value) + if (value === 'name') return null + return ( + } + onClick={() => { + const values = selected + ? importWizard.props.filter((v) => v !== value) + : [...importWizard.props, value] + useStatic.setState({ + importWizard: { ...importWizard, props: values }, + }) + }} + onDelete={() => { + useStatic.setState({ + importWizard: { + ...importWizard, + props: importWizard.props.filter((v) => v !== value), + }, + }) + }} + /> + ) + })} + + + + + + ) +}) + +PropsStep.displayName = 'PropsStep' + +export default PropsStep diff --git a/client/src/components/dialogs/import/TabPanel.tsx b/client/src/components/dialogs/import/TabPanel.tsx new file mode 100644 index 00000000..c339dcc9 --- /dev/null +++ b/client/src/components/dialogs/import/TabPanel.tsx @@ -0,0 +1,19 @@ +import * as React from 'react' + +export default function TabPanel({ + children, + value, + index, + ...other +}: { + children?: React.ReactNode + dir?: string + index: number + value: number +}) { + return ( + + ) +} diff --git a/client/src/components/drawer/MenuItem.tsx b/client/src/components/drawer/MenuItem.tsx index cb7b4093..bc25d7a2 100644 --- a/client/src/components/drawer/MenuItem.tsx +++ b/client/src/components/drawer/MenuItem.tsx @@ -33,7 +33,7 @@ export default function MenuAccordion({ name, children }: Props) { onChange={(_, isExpanded) => { setStore('menuItem', isExpanded ? name : '') }} - TransitionProps={{ unmountOnExit: true }} + TransitionProps={{ unmountOnExit: name === 'Geojson' }} > }> diff --git a/client/src/components/drawer/manage/Instance.tsx b/client/src/components/drawer/manage/Instance.tsx index 22353b62..0ff254cc 100644 --- a/client/src/components/drawer/manage/Instance.tsx +++ b/client/src/components/drawer/manage/Instance.tsx @@ -16,7 +16,7 @@ import { import CheckBoxOutlineBlank from '@mui/icons-material/CheckBoxOutlineBlank' import IndeterminateCheckBoxOutlined from '@mui/icons-material/IndeterminateCheckBoxOutlined' import CheckBox from '@mui/icons-material/CheckBox' -import type { Feature, GeoJsonTypes } from 'geojson' +import type { Feature, FeatureCollection, GeoJsonTypes } from 'geojson' import { KojiResponse } from '@assets/types' import { useShapes } from '@hooks/useShapes' @@ -39,14 +39,22 @@ interface Option { geoType?: Exclude } -interface Props { +export default function InstanceSelect({ + endpoint, + setGeojson, + koji = false, + filters = [], + initialState = [], +}: { endpoint: string + setGeojson?: (collection: FeatureCollection) => void koji?: boolean -} - -export default function InstanceSelect({ endpoint, koji = false }: Props) { + filters?: string[] + initialState?: string[] +}) { const add = useShapes((s) => s.setters.add) const remove = useShapes((s) => s.setters.remove) + const remoteCache = useShapes((s) => s.remoteCache) const [loading, setLoading] = React.useState(false) const [options, setOptions] = React.useState>({}) @@ -59,10 +67,13 @@ export default function InstanceSelect({ endpoint, koji = false }: Props) { if (resp) { setOptions( Object.fromEntries( - resp.data.map((o) => [`${o.name}__${o.type}`, o]), + resp.data + .filter((o) => filters.length === 0 || filters.includes(o.type)) + .map((o) => [`${o.name}__${o.type}`, o]), ), ) } + setSelected(initialState) setLoading(false) }) // eslint-disable-next-line no-console @@ -72,29 +83,50 @@ export default function InstanceSelect({ endpoint, koji = false }: Props) { const updateState = async (newValue: string[]) => { const added = newValue.filter((s) => !selected.includes(s)) const deleted = selected.filter((s) => !newValue.includes(s)) - await Promise.all( + + const features = await Promise.allSettled( added.map((a) => - getData>( - `/internal/routes/one/${koji ? 'koji' : 'scanner'}/${options[ - a - ].name.replace(/\//g, '__')}/${options[a].type}`, - ).then((resp) => { - if (resp) { - add(resp.data, koji ? '' : '__SCANNER') - setOptions((prev) => ({ - ...prev, - [a]: { ...prev[a], geoType: resp.data.geometry.type }, - })) - } - }), + remoteCache[a] + ? Promise.resolve(remoteCache[a]) + : getData>( + `/internal/routes/one/${koji ? 'koji' : 'scanner'}/${options[ + a + ].name.replace(/\//g, '__')}/${options[a].type}`, + ).then((resp) => { + if (resp) { + if (!setGeojson) { + add(resp.data, koji ? '' : '__SCANNER') + } + setOptions((prev) => ({ + ...prev, + [a]: { ...prev[a], geoType: resp.data.geometry.type }, + })) + + return resp.data + } + }), ), ) - deleted.forEach((d) => { - const { name, type, geoType } = options[d] - if (geoType) { - remove(geoType, `${name}${type}${koji ? '' : '__SCANNER'}`) - } - }) + if (setGeojson) { + setGeojson({ + type: 'FeatureCollection', + features: [ + ...features + .filter( + (result): result is PromiseFulfilledResult => + result.status === 'fulfilled', + ) + .map((result) => result.value), + ], + }) + } else { + deleted.forEach((d) => { + const { name, type, geoType } = options[d] + if (geoType) { + remove(geoType, `${name}${type}${koji ? '' : '__SCANNER'}`) + } + }) + } setSelected(newValue) } diff --git a/client/src/components/drawer/manage/Json.tsx b/client/src/components/drawer/manage/Json.tsx index be45d339..0320c156 100644 --- a/client/src/components/drawer/manage/Json.tsx +++ b/client/src/components/drawer/manage/Json.tsx @@ -1,5 +1,5 @@ /* eslint-disable no-console */ -import { ListItemButton, ListItemIcon, ListItemText } from '@mui/material' +import { Button, CircularProgress } from '@mui/material' import * as React from 'react' import UploadFileIcon from '@mui/icons-material/UploadFile' @@ -8,26 +8,42 @@ import { convert } from '@services/fetches' import type { FeatureCollection } from 'geojson' import { usePersist } from '@hooks/usePersist' -export default function JsonFile() { +interface Props { + setter?: (featureCollection: FeatureCollection) => void +} + +export default function JsonFile({ setter }: Props) { const add = useShapes((s) => s.setters.add) const simplifyPolygons = usePersist((s) => s.simplifyPolygons) + const [fileName, setFileName] = React.useState('') + const [loading, setLoading] = React.useState(false) + const handleFileUpload = async (e: React.ChangeEvent) => { if (!e.target.files) { return } + setFileName(e.target.files[0].name) const reader = new FileReader() reader.onload = async function parse(newSettings) { if (newSettings?.target) { const contents = newSettings.target.result if (typeof contents === 'string') { + setLoading(true) const geojson = await convert( JSON.parse(contents), 'featureCollection', simplifyPolygons, - ) + ).then((geo) => { + setLoading(false) + return geo + }) if (geojson.type === 'FeatureCollection') { - add(geojson.features) + if (setter) { + setter(geojson) + } else { + add(geojson.features) + } } } } @@ -35,18 +51,27 @@ export default function JsonFile() { reader.readAsText(e.target.files[0]) } - return ( - - - - - + return loading ? ( + + ) : ( + ) } diff --git a/client/src/components/drawer/manage/ShapeFile.tsx b/client/src/components/drawer/manage/ShapeFile.tsx index 0ba79172..9415f5d7 100644 --- a/client/src/components/drawer/manage/ShapeFile.tsx +++ b/client/src/components/drawer/manage/ShapeFile.tsx @@ -1,20 +1,23 @@ /* eslint-disable no-console */ -import { ListItemButton, ListItemIcon, ListItemText } from '@mui/material' +import { Button, CircularProgress } from '@mui/material' import * as React from 'react' import * as shapefile from 'shapefile' import UploadFileIcon from '@mui/icons-material/UploadFile' -import type { Feature } from 'geojson' -import { useShapes } from '@hooks/useShapes' -import { convert } from '@services/fetches' +import type { Feature, FeatureCollection } from 'geojson' import { usePersist } from '@hooks/usePersist' +import { convert } from '@services/fetches' + +interface Props { + setter?: (featureCollection: FeatureCollection) => void +} -export default function ShapeFile() { - const [value, setValue] = React.useState([]) +export default function ShapeFile({ setter }: Props) { const [shpString, setShpString] = React.useState('') const [dbfString, setDbfString] = React.useState('') + const [fileNames, setFileNames] = React.useState([]) + const [loading, setLoading] = React.useState(false) const simplifyPolygons = usePersist((s) => s.simplifyPolygons) - const add = useShapes((s) => s.setters.add) const handleFileUpload = (e: React.ChangeEvent) => { if (!e.target.files) { @@ -22,6 +25,7 @@ export default function ShapeFile() { } Array.from(e.target.files).forEach((file) => { + setFileNames((prev) => [...prev, file.name]) const reader = new FileReader() reader.onload = (evt) => { if (!evt?.target?.result) { @@ -39,13 +43,24 @@ export default function ShapeFile() { } React.useEffect(() => { + const values: Feature[] = [] if (shpString) { shapefile .open(shpString, dbfString || undefined) .then((source) => source.read().then(function write(result): Promise | void { - if (result.done) return - setValue((prev) => [...prev, result.value]) + if (result.done && setter) { + setLoading(true) + return convert( + values, + 'featureCollection', + simplifyPolygons, + ).then((geo) => { + setLoading(false) + setter(geo) + }) + } + values.push(result.value) return source.read().then(write) }), ) @@ -53,33 +68,24 @@ export default function ShapeFile() { } }, [shpString, dbfString]) - React.useEffect(() => { - if (value.length) { - convert( - value.map((feat) => ({ - ...feat, - id: feat.properties?.town, - properties: { - ...feat.properties, - name: feat.properties?.town, - type: 'AutoQuest', - }, - })), - 'featureVec', - simplifyPolygons, - ).then((geojson) => { - add(geojson) - setValue([]) - }) - } - }, [value]) - - return ( - - - - - + return loading ? ( + + ) : ( + ) } diff --git a/client/src/components/drawer/manage/index.tsx b/client/src/components/drawer/manage/index.tsx index 133c8a17..ce5f9dea 100644 --- a/client/src/components/drawer/manage/index.tsx +++ b/client/src/components/drawer/manage/index.tsx @@ -1,29 +1,29 @@ import * as React from 'react' import { - Divider, List, ListItemButton, ListItemIcon, ListItemText, ListSubheader, } from '@mui/material' -import Code from '@mui/icons-material/Code' import Save from '@mui/icons-material/Save' import Upload from '@mui/icons-material/Upload' +import AutoFix from '@mui/icons-material/AutoFixHigh' +import Code from '@mui/icons-material/Code' import { useStatic } from '@hooks/useStatic' - import RawManager from '@components/dialogs/Manager' +import ImportWizard from '@components/dialogs/import/ImportWizard' + import ExportRoute from '../../dialogs/ExportRoute' import PolygonDialog from '../../dialogs/Polygon' import InstanceSelect from './Instance' -import ShapeFile from './ShapeFile' -import JsonFile from './Json' export default function ImportExport() { const [open, setOpen] = React.useState('') const [exportAll, setExportAll] = React.useState(false) const geojson = useStatic((s) => s.geojson) + const setStatic = useStatic((s) => s.setStatic) return ( @@ -31,15 +31,23 @@ export default function ImportExport() { Import from Kōji - Additional Importing Methods + Manual Importing + + setStatic('importWizard', (prev) => ({ ...prev, open: true })) + } + > + + + + + setOpen('polygon')}> - - Exporting { @@ -58,7 +66,7 @@ export default function ImportExport() { Export All Routes - + Manage Current GeoJSON setOpen('rawManager')}> @@ -91,6 +99,7 @@ export default function ImportExport() { }} /> + ) } diff --git a/client/src/hooks/useShapes.ts b/client/src/hooks/useShapes.ts index ce9a8075..85218a74 100644 --- a/client/src/hooks/useShapes.ts +++ b/client/src/hooks/useShapes.ts @@ -16,6 +16,7 @@ export interface UseShapes { test: boolean activeRoute: string newRouteCount: number + remoteCache: Record firstPoint: keyof UseShapes['Point'] | null lastPoint: keyof UseShapes['Point'] | null Point: Record> @@ -62,6 +63,7 @@ export interface UseShapes { export const useShapes = create((set, get) => ({ activeRoute: 'new_route_0', + remoteCache: {}, newRouteCount: 0, test: false, firstPoint: null, diff --git a/client/src/hooks/useStatic.ts b/client/src/hooks/useStatic.ts index 377f083b..acccaf1a 100644 --- a/client/src/hooks/useStatic.ts +++ b/client/src/hooks/useStatic.ts @@ -1,7 +1,7 @@ import create from 'zustand' import type { FeatureCollection } from 'geojson' -import type { KojiStats, PixiMarker } from '@assets/types' +import type { ClientProject, KojiStats, PixiMarker } from '@assets/types' import { collectionToObject } from '@services/utils' export interface UseStatic { @@ -17,9 +17,6 @@ export interface UseStatic { scannerType: string tileServer: string geojson: FeatureCollection - lineStrings: FeatureCollection - polygons: FeatureCollection - circles: FeatureCollection layerEditing: { cutMode: boolean editMode: boolean @@ -30,6 +27,18 @@ export interface UseStatic { } forceRedraw: boolean forceFetch: boolean + importWizard: { + open: boolean + nameProp: string + props: string[] + customName: string + modifier: 'capitalize' | 'lowercase' | 'uppercase' | 'none' + allProjects: string[] + allType: '' | 'AutoQuest' | 'PokemonIv' | 'AutoPokemon' | 'AutoTth' + checked: Record + scannerSelected: Set + } + projects: ClientProject[] setStatic: < T extends keyof Omit< UseStatic, @@ -66,18 +75,6 @@ export const useStatic = create((set, get) => ({ type: 'FeatureCollection', features: [], }, - lineStrings: { - type: 'FeatureCollection', - features: [], - }, - circles: { - type: 'FeatureCollection', - features: [], - }, - polygons: { - type: 'FeatureCollection', - features: [], - }, tileServer: 'https://{s}.basemaps.cartocdn.com/rastertiles/voyager_labels_under/{z}/{x}/{y}{r}.png', layerEditing: { @@ -90,6 +87,18 @@ export const useStatic = create((set, get) => ({ }, forceRedraw: false, forceFetch: false, + importWizard: { + open: false, + nameProp: 'name', + props: [], + customName: '', + modifier: 'none', + allProjects: [], + allType: '', + checked: {}, + scannerSelected: new Set(), + }, + projects: [], setStatic: (key, newValue) => { set((state) => ({ [key]: typeof newValue === 'function' ? newValue(state[key]) : newValue, diff --git a/client/src/pages/map/markers/Polygon.tsx b/client/src/pages/map/markers/Polygon.tsx index 30b90c6b..297cdcbe 100644 --- a/client/src/pages/map/markers/Polygon.tsx +++ b/client/src/pages/map/markers/Polygon.tsx @@ -24,61 +24,67 @@ export function KojiPolygon({ if (ref && feature.id) { ref.feature = feature const { type } = feature.geometry - ref.on('click', () => setLoadData(true)) - ref.removeEventListener('pm:remove') - ref.on('pm:remove', function remove() { - useShapes.getState().setters.remove(type, feature.id) - }) - ref.removeEventListener('pm:dragend') - ref.on('pm:dragend', function dragend({ layer }) { - if (layer instanceof L.Polygon && layer.feature && feature.id) { - useShapes.getState().setters.update(type, feature.id, { - ...layer.toGeoJSON(), - id: feature.id, - properties: feature.properties, - } as any) // TODO: fix this - } - }) - ref.removeEventListener('pm:cut') - ref.on('pm:cut', function cut({ layer, originalLayer }) { - if (layer instanceof L.Polygon && layer.feature && feature.id) { - useShapes.getState().setters.update(type, feature.id, { - ...layer.toGeoJSON(), - id: feature.id, - properties: { - ...feature.properties, - leafletId: layer._leaflet_id, - }, - } as any) // TODO: fix this - originalLayer.remove() - layer.remove() - } - }) - ref.removeEventListener('pm:rotateend') - ref.on('pm:rotateend', function rotateEnd({ layer }) { - if (layer instanceof L.Polygon && layer.feature && feature.id) { - useShapes.getState().setters.update(type, feature.id, { - ...layer.toGeoJSON(), - id: feature.id, - properties: feature.properties, - } as any) // TODO: fix this - } - }) - ref.removeEventListener('pm:edit') - ref.on('pm:edit', function edit({ layer }) { - if ( - useStatic.getState().layerEditing.editMode && - layer instanceof L.Polygon && - layer.feature && - feature.id - ) { - useShapes.getState().setters.update(type, feature.id, { - ...layer.toGeoJSON(), - id: feature.id, - properties: feature.properties, - } as any) // TODO: fix this - } - }) + ref.addOneTimeEventListener('click', () => setLoadData(true)) + + if (!ref.hasEventListeners('pm:remove')) { + ref.on('pm:remove', function remove() { + useShapes.getState().setters.remove(type, feature.id) + }) + } + if (!ref.hasEventListeners('pm:dragend')) { + ref.on('pm:dragend', function dragend({ layer }) { + if (layer instanceof L.Polygon && layer.feature && feature.id) { + useShapes.getState().setters.update(type, feature.id, { + ...layer.toGeoJSON(), + id: feature.id, + properties: feature.properties, + } as any) // TODO: fix this + } + }) + } + if (!ref.hasEventListeners('pm:cut')) { + ref.on('pm:cut', function cut({ layer, originalLayer }) { + if (layer instanceof L.Polygon && layer.feature && feature.id) { + useShapes.getState().setters.update(type, feature.id, { + ...layer.toGeoJSON(), + id: feature.id, + properties: { + ...feature.properties, + leafletId: layer._leaflet_id, + }, + } as any) // TODO: fix this + originalLayer.remove() + layer.remove() + } + }) + } + if (!ref.hasEventListeners('pm:rotateend')) { + ref.on('pm:rotateend', function rotateEnd({ layer }) { + if (layer instanceof L.Polygon && layer.feature && feature.id) { + useShapes.getState().setters.update(type, feature.id, { + ...layer.toGeoJSON(), + id: feature.id, + properties: feature.properties, + } as any) // TODO: fix this + } + }) + } + if (!ref.hasEventListeners('pm:edit')) { + ref.on('pm:edit', function edit({ layer }) { + if ( + useStatic.getState().layerEditing.editMode && + layer instanceof L.Polygon && + layer.feature && + feature.id + ) { + useShapes.getState().setters.update(type, feature.id, { + ...layer.toGeoJSON(), + id: feature.id, + properties: feature.properties, + } as any) // TODO: fix this + } + }) + } } }} positions={ @@ -91,7 +97,6 @@ export function KojiPolygon({ ) as [[[number, number]]]) } {...feature.properties} - pmIgnore={false} pane="polygons" > diff --git a/client/src/pages/map/popups/Polygon.tsx b/client/src/pages/map/popups/Polygon.tsx index e557fcb8..89b24933 100644 --- a/client/src/pages/map/popups/Polygon.tsx +++ b/client/src/pages/map/popups/Polygon.tsx @@ -48,19 +48,20 @@ export function PolygonPopup({ } useDeepCompareEffect(() => { - if (!feature.geometry.coordinates.length || !loadData) return - Promise.allSettled( - ['pokestop', 'gym', 'spawnpoint'].map((category) => - getData<{ total: number }>(`/internal/data/area_stats/${category}`, { - area: feature, - }).then((data) => - setActive((prev) => ({ - ...prev, - [category]: data?.total ?? (data || 0), - })), + if (feature.geometry.coordinates.length && loadData) { + Promise.allSettled( + ['pokestop', 'gym', 'spawnpoint'].map((category) => + getData<{ total: number }>(`/internal/data/area_stats/${category}`, { + area: feature, + }).then((data) => + setActive((prev) => ({ + ...prev, + [category]: data?.total ?? (data || 0), + })), + ), ), - ), - ) + ) + } }, [feature, loadData]) return feature ? ( diff --git a/client/yarn.lock b/client/yarn.lock index f9b8fc17..7d6e3f94 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -4,7 +4,7 @@ "@ampproject/remapping@^2.1.0": version "2.2.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" + resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz" integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== dependencies: "@jridgewell/gen-mapping" "^0.1.0" @@ -12,19 +12,19 @@ "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz" integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== dependencies: "@babel/highlight" "^7.18.6" "@babel/compat-data@^7.20.0": version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.20.5.tgz#86f172690b093373a933223b4745deeb6049e733" + resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.5.tgz" integrity sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g== "@babel/core@^7.20.5": version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.20.5.tgz#45e2114dc6cd4ab167f81daf7820e8fa1250d113" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.20.5.tgz" integrity sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ== dependencies: "@ampproject/remapping" "^2.1.0" @@ -45,7 +45,7 @@ "@babel/generator@^7.20.5": version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.20.5.tgz#cb25abee3178adf58d6814b68517c62bdbfdda95" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.20.5.tgz" integrity sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA== dependencies: "@babel/types" "^7.20.5" @@ -54,7 +54,7 @@ "@babel/helper-compilation-targets@^7.20.0": version "7.20.0" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz#6bf5374d424e1b3922822f1d9bdaa43b1a139d0a" + resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz" integrity sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ== dependencies: "@babel/compat-data" "^7.20.0" @@ -64,12 +64,12 @@ "@babel/helper-environment-visitor@^7.18.9": version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" + resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz" integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== "@babel/helper-function-name@^7.19.0": version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz#941574ed5390682e872e52d3f38ce9d1bef4648c" + resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz" integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w== dependencies: "@babel/template" "^7.18.10" @@ -77,21 +77,21 @@ "@babel/helper-hoist-variables@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" + resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz" integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== dependencies: "@babel/types" "^7.18.6" "@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz" integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== dependencies: "@babel/types" "^7.18.6" "@babel/helper-module-transforms@^7.20.2": version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz#ac53da669501edd37e658602a21ba14c08748712" + resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz" integrity sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA== dependencies: "@babel/helper-environment-visitor" "^7.18.9" @@ -105,56 +105,56 @@ "@babel/helper-plugin-utils@^7.18.6": version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz#4b8aea3b069d8cb8a72cdfe28ddf5ceca695ef2f" + resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz" integrity sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w== "@babel/helper-plugin-utils@^7.19.0": version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629" + resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz" integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ== "@babel/helper-simple-access@^7.20.2": version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9" + resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz" integrity sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA== dependencies: "@babel/types" "^7.20.2" "@babel/helper-split-export-declaration@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" + resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz" integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== dependencies: "@babel/types" "^7.18.6" "@babel/helper-string-parser@^7.18.10": version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz#181f22d28ebe1b3857fa575f5c290b1aaf659b56" + resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz" integrity sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw== "@babel/helper-string-parser@^7.19.4": version "7.19.4" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" + resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz" integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== "@babel/helper-validator-identifier@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz" integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== "@babel/helper-validator-identifier@^7.19.1": version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz" integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== "@babel/helper-validator-option@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" + resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz" integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== "@babel/helpers@^7.20.5": version "7.20.6" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.20.6.tgz#e64778046b70e04779dfbdf924e7ebb45992c763" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.6.tgz" integrity sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w== dependencies: "@babel/template" "^7.18.10" @@ -163,7 +163,7 @@ "@babel/highlight@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz" integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== dependencies: "@babel/helper-validator-identifier" "^7.18.6" @@ -172,67 +172,67 @@ "@babel/parser@^7.18.10": version "7.18.11" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.11.tgz#68bb07ab3d380affa9a3f96728df07969645d2d9" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.18.11.tgz" integrity sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ== "@babel/parser@^7.20.5": version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.5.tgz#7f3c7335fe417665d929f34ae5dceae4c04015e8" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.20.5.tgz" integrity sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA== "@babel/plugin-syntax-jsx@^7.17.12": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz" integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q== dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-react-jsx-self@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.18.6.tgz#3849401bab7ae8ffa1e3e5687c94a753fc75bda7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.18.6.tgz" integrity sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig== dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-react-jsx-source@^7.19.6": version "7.19.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.19.6.tgz#88578ae8331e5887e8ce28e4c9dc83fb29da0b86" + resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.19.6.tgz" integrity sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ== dependencies: "@babel/helper-plugin-utils" "^7.19.0" "@babel/runtime-corejs3@^7.10.2": version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.18.9.tgz#7bacecd1cb2dd694eacd32a91fcf7021c20770ae" + resolved "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.18.9.tgz" integrity sha512-qZEWeccZCrHA2Au4/X05QW5CMdm4VjUDCrGq5gf1ZDcM4hRqreKrtwAn7yci9zfgAS9apvnsFXiGBHBAxZdK9A== dependencies: core-js-pure "^3.20.2" regenerator-runtime "^0.13.4" +"@babel/runtime@^7.0.0", "@babel/runtime@^7.20.6", "@babel/runtime@^7.20.7", "@babel/runtime@^7.6.2", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6": + version "7.20.7" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.7.tgz" + integrity sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ== + dependencies: + regenerator-runtime "^0.13.11" + "@babel/runtime@^7.10.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.18.3", "@babel/runtime@^7.18.6", "@babel/runtime@^7.18.9", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7": version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.9.tgz#b4fcfce55db3d2e5e080d2490f608a3b9f407f4a" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz" integrity sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw== dependencies: regenerator-runtime "^0.13.4" "@babel/runtime@^7.20.1": version "7.20.6" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.6.tgz#facf4879bfed9b5326326273a64220f099b0fce3" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.6.tgz" integrity sha512-Q+8MqP7TiHMWzSfwiJwXCjyf4GYA4Dgw3emg/7xmwsdLJOZUp+nMqcOwOzzYheuM1rhDu8FSj2l0aoMygEuXuA== dependencies: regenerator-runtime "^0.13.11" -"@babel/runtime@^7.20.6", "@babel/runtime@^7.20.7", "@babel/runtime@^7.6.2", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.7.tgz#fcb41a5a70550e04a7b708037c7c32f7f356d8fd" - integrity sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ== - dependencies: - regenerator-runtime "^0.13.11" - "@babel/template@^7.18.10": version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz" integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA== dependencies: "@babel/code-frame" "^7.18.6" @@ -241,7 +241,7 @@ "@babel/traverse@^7.20.1", "@babel/traverse@^7.20.5": version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.20.5.tgz#78eb244bea8270fdda1ef9af22a5d5e5b7e57133" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.5.tgz" integrity sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ== dependencies: "@babel/code-frame" "^7.18.6" @@ -257,7 +257,7 @@ "@babel/types@^7.18.10", "@babel/types@^7.18.6": version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.10.tgz#4908e81b6b339ca7c6b7a555a5fc29446f26dde6" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.18.10.tgz" integrity sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ== dependencies: "@babel/helper-string-parser" "^7.18.10" @@ -266,7 +266,7 @@ "@babel/types@^7.19.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5": version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.20.5.tgz#e206ae370b5393d94dfd1d04cd687cace53efa84" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.20.5.tgz" integrity sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg== dependencies: "@babel/helper-string-parser" "^7.19.4" @@ -275,7 +275,7 @@ "@codemirror/autocomplete@^6.0.0": version "6.1.0" - resolved "https://registry.yarnpkg.com/@codemirror/autocomplete/-/autocomplete-6.1.0.tgz#7d3ca6d49e3a71cfd366c0af16172f5c128376eb" + resolved "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.1.0.tgz" integrity sha512-wtO4O5WDyXhhCd4q4utDIDZxnQfmJ++3dGBCG9LMtI79+92OcA1DVk/n7BEupKmjIr8AzvptDz7YQ9ud6OkU+A== dependencies: "@codemirror/language" "^6.0.0" @@ -285,7 +285,7 @@ "@codemirror/commands@^6.0.0": version "6.1.0" - resolved "https://registry.yarnpkg.com/@codemirror/commands/-/commands-6.1.0.tgz#c9da851f419f25dae400d7cd94f80b80ef060696" + resolved "https://registry.npmjs.org/@codemirror/commands/-/commands-6.1.0.tgz" integrity sha512-qCj2YqmbBjj0P1iumnlL5lBqZvJPzT+t2UvgjcaXErp5ZvMqFRVgQyrEfdXX6SX5UcvcHKBjXqno+MkUp0aYvQ== dependencies: "@codemirror/language" "^6.0.0" @@ -295,7 +295,7 @@ "@codemirror/lang-json@^6.0.1": version "6.0.1" - resolved "https://registry.yarnpkg.com/@codemirror/lang-json/-/lang-json-6.0.1.tgz#0a0be701a5619c4b0f8991f9b5e95fe33f462330" + resolved "https://registry.npmjs.org/@codemirror/lang-json/-/lang-json-6.0.1.tgz" integrity sha512-+T1flHdgpqDDlJZ2Lkil/rLiRy684WMLc74xUnjJH48GQdfJo/pudlTRreZmKwzP8/tGdKf83wlbAdOCzlJOGQ== dependencies: "@codemirror/language" "^6.0.0" @@ -303,7 +303,7 @@ "@codemirror/language@^6.0.0": version "6.2.1" - resolved "https://registry.yarnpkg.com/@codemirror/language/-/language-6.2.1.tgz#cb10cd785a76e50ecd2fe2dc59ff66af8a41b87a" + resolved "https://registry.npmjs.org/@codemirror/language/-/language-6.2.1.tgz" integrity sha512-MC3svxuvIj0MRpFlGHxLS6vPyIdbTr2KKPEW46kCoCXw2ktb4NTkpkPBI/lSP/FoNXLCBJ0mrnUi1OoZxtpW1Q== dependencies: "@codemirror/state" "^6.0.0" @@ -313,18 +313,9 @@ "@lezer/lr" "^1.0.0" style-mod "^4.0.0" -"@codemirror/lint@^6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@codemirror/lint/-/lint-6.0.0.tgz#a249b021ac9933b94fe312d994d220f0ef11a157" - integrity sha512-nUUXcJW1Xp54kNs+a1ToPLK8MadO0rMTnJB8Zk4Z8gBdrN0kqV7uvUraU/T2yqg+grDNR38Vmy/MrhQN/RgwiA== - dependencies: - "@codemirror/state" "^6.0.0" - "@codemirror/view" "^6.0.0" - crelt "^1.0.5" - -"@codemirror/lint@^6.1.0": +"@codemirror/lint@^6.0.0", "@codemirror/lint@^6.1.0": version "6.1.0" - resolved "https://registry.yarnpkg.com/@codemirror/lint/-/lint-6.1.0.tgz#f006142d3a580fdb8ffc2faa3361b2232c08e079" + resolved "https://registry.npmjs.org/@codemirror/lint/-/lint-6.1.0.tgz" integrity sha512-mdvDQrjRmYPvQ3WrzF6Ewaao+NWERYtpthJvoQ3tK3t/44Ynhk8ZGjTSL9jMEv8CgSMogmt75X8ceOZRDSXHtQ== dependencies: "@codemirror/state" "^6.0.0" @@ -333,7 +324,7 @@ "@codemirror/search@^6.0.0": version "6.2.0" - resolved "https://registry.yarnpkg.com/@codemirror/search/-/search-6.2.0.tgz#05742292c8414dfcf86bd27ef2908d43620f79d2" + resolved "https://registry.npmjs.org/@codemirror/search/-/search-6.2.0.tgz" integrity sha512-FVhpUvPFUJe8lg2EQJTTcF4RNI9d/OC3PVitvOfhv5OuY7ZgtMfJl22o5eMkzOEsUY2Wxe7BKGLpe2UI5Wq3PQ== dependencies: "@codemirror/state" "^6.0.0" @@ -342,12 +333,12 @@ "@codemirror/state@^6.0.0": version "6.1.1" - resolved "https://registry.yarnpkg.com/@codemirror/state/-/state-6.1.1.tgz#4f512e5e34ea23a5e10b2c1fe43f6195e90417bb" + resolved "https://registry.npmjs.org/@codemirror/state/-/state-6.1.1.tgz" integrity sha512-2s+aXsxmAwnR3Rd+JDHPG/1lw0YsA9PEwl7Re88gHJHGfxyfEzKBmsN4rr53RyPIR4lzbbhJX0DCq0WlqlBIRw== "@codemirror/theme-one-dark@^6.0.0": version "6.0.0" - resolved "https://registry.yarnpkg.com/@codemirror/theme-one-dark/-/theme-one-dark-6.0.0.tgz#81a999a568217f68522bd8846cbf7210ca2a59df" + resolved "https://registry.npmjs.org/@codemirror/theme-one-dark/-/theme-one-dark-6.0.0.tgz" integrity sha512-jTCfi1I8QT++3m21Ui6sU8qwu3F/hLv161KLxfvkV1cYWSBwyUanmQFs89ChobQjBHi2x7s2k71wF9WYvE8fdw== dependencies: "@codemirror/language" "^6.0.0" @@ -357,7 +348,7 @@ "@codemirror/view@^6.0.0": version "6.2.1" - resolved "https://registry.yarnpkg.com/@codemirror/view/-/view-6.2.1.tgz#299698639c658c738f10021c5ea78a513c63977b" + resolved "https://registry.npmjs.org/@codemirror/view/-/view-6.2.1.tgz" integrity sha512-r1svbtAj2Lp/86F3yy1TfDAOAtJRGLINLSEqByETyUaGo1EnLS+P+bbGCVHV62z46BzZYm16noDid69+4bzn0g== dependencies: "@codemirror/state" "^6.0.0" @@ -366,40 +357,40 @@ "@date-io/core@^2.15.0", "@date-io/core@^2.16.0": version "2.16.0" - resolved "https://registry.yarnpkg.com/@date-io/core/-/core-2.16.0.tgz#7871bfc1d9bca9aa35ad444a239505589d0f22f6" + resolved "https://registry.npmjs.org/@date-io/core/-/core-2.16.0.tgz" integrity sha512-DYmSzkr+jToahwWrsiRA2/pzMEtz9Bq1euJwoOuYwuwIYXnZFtHajY2E6a1VNVDc9jP8YUXK1BvnZH9mmT19Zg== "@date-io/date-fns@^2.15.0": version "2.16.0" - resolved "https://registry.yarnpkg.com/@date-io/date-fns/-/date-fns-2.16.0.tgz#bd5e09b6ecb47ee55e593fc3a87e7b2caaa3da40" + resolved "https://registry.npmjs.org/@date-io/date-fns/-/date-fns-2.16.0.tgz" integrity sha512-bfm5FJjucqlrnQcXDVU5RD+nlGmL3iWgkHTq3uAZWVIuBu6dDmGa3m8a6zo2VQQpu8ambq9H22UyUpn7590joA== dependencies: "@date-io/core" "^2.16.0" "@date-io/dayjs@^2.15.0": version "2.16.0" - resolved "https://registry.yarnpkg.com/@date-io/dayjs/-/dayjs-2.16.0.tgz#0d2c254ad8db1306fdc4b8eda197cb53c9af89dc" + resolved "https://registry.npmjs.org/@date-io/dayjs/-/dayjs-2.16.0.tgz" integrity sha512-y5qKyX2j/HG3zMvIxTobYZRGnd1FUW2olZLS0vTj7bEkBQkjd2RO7/FEwDY03Z1geVGlXKnzIATEVBVaGzV4Iw== dependencies: "@date-io/core" "^2.16.0" "@date-io/luxon@^2.15.0": version "2.16.1" - resolved "https://registry.yarnpkg.com/@date-io/luxon/-/luxon-2.16.1.tgz#b08786614cb58831c729a15807753011e4acb966" + resolved "https://registry.npmjs.org/@date-io/luxon/-/luxon-2.16.1.tgz" integrity sha512-aeYp5K9PSHV28946pC+9UKUi/xMMYoaGelrpDibZSgHu2VWHXrr7zWLEr+pMPThSs5vt8Ei365PO+84pCm37WQ== dependencies: "@date-io/core" "^2.16.0" "@date-io/moment@^2.15.0": version "2.16.1" - resolved "https://registry.yarnpkg.com/@date-io/moment/-/moment-2.16.1.tgz#ec6e0daa486871e0e6412036c6f806842a0eeed4" + resolved "https://registry.npmjs.org/@date-io/moment/-/moment-2.16.1.tgz" integrity sha512-JkxldQxUqZBfZtsaCcCMkm/dmytdyq5pS1RxshCQ4fHhsvP5A7gSqPD22QbVXMcJydi3d3v1Y8BQdUKEuGACZQ== dependencies: "@date-io/core" "^2.16.0" "@emotion/babel-plugin@^11.10.5": version "11.10.5" - resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.10.5.tgz#65fa6e1790ddc9e23cc22658a4c5dea423c55c3c" + resolved "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.10.5.tgz" integrity sha512-xE7/hyLHJac7D2Ve9dKroBBZqBT7WuPQmWcq7HSGb84sUuP4mlOWoB8dvVfD9yk5DHkU1m6RW7xSoDtnQHNQeA== dependencies: "@babel/helper-module-imports" "^7.16.7" @@ -417,7 +408,7 @@ "@emotion/cache@^11.10.5": version "11.10.5" - resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.10.5.tgz#c142da9351f94e47527ed458f7bbbbe40bb13c12" + resolved "https://registry.npmjs.org/@emotion/cache/-/cache-11.10.5.tgz" integrity sha512-dGYHWyzTdmK+f2+EnIGBpkz1lKc4Zbj2KHd4cX3Wi8/OWr5pKslNjc3yABKH4adRGCvSX4VDC0i04mrrq0aiRA== dependencies: "@emotion/memoize" "^0.8.0" @@ -428,24 +419,24 @@ "@emotion/hash@^0.9.0": version "0.9.0" - resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.0.tgz#c5153d50401ee3c027a57a177bc269b16d889cb7" + resolved "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.0.tgz" integrity sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ== "@emotion/is-prop-valid@^1.2.0": version "1.2.0" - resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz#7f2d35c97891669f7e276eb71c83376a5dc44c83" + resolved "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz" integrity sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg== dependencies: "@emotion/memoize" "^0.8.0" "@emotion/memoize@^0.8.0": version "0.8.0" - resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.0.tgz#f580f9beb67176fa57aae70b08ed510e1b18980f" + resolved "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.0.tgz" integrity sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA== "@emotion/react@^11.10.5", "@emotion/react@^11.4.1": version "11.10.5" - resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.10.5.tgz#95fff612a5de1efa9c0d535384d3cfa115fe175d" + resolved "https://registry.npmjs.org/@emotion/react/-/react-11.10.5.tgz" integrity sha512-TZs6235tCJ/7iF6/rvTaOH4oxQg2gMAcdHemjwLKIjKz4rRuYe1HJ2TQJKnAcRAfOUDdU8XoDadCe1rl72iv8A== dependencies: "@babel/runtime" "^7.18.3" @@ -459,7 +450,7 @@ "@emotion/serialize@^1.1.1": version "1.1.1" - resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.1.1.tgz#0595701b1902feded8a96d293b26be3f5c1a5cf0" + resolved "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.1.tgz" integrity sha512-Zl/0LFggN7+L1liljxXdsVSVlg6E/Z/olVWpfxUTxOAmi8NU7YoeWeLfi1RmnB2TATHoaWwIBRoL+FvAJiTUQA== dependencies: "@emotion/hash" "^0.9.0" @@ -470,12 +461,12 @@ "@emotion/sheet@^1.2.1": version "1.2.1" - resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.2.1.tgz#0767e0305230e894897cadb6c8df2c51e61a6c2c" + resolved "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.1.tgz" integrity sha512-zxRBwl93sHMsOj4zs+OslQKg/uhF38MB+OMKoCrVuS0nyTkqnau+BM3WGEoOptg9Oz45T/aIGs1qbVAsEFo3nA== "@emotion/styled@^11.10.5", "@emotion/styled@^11.3.0": version "11.10.5" - resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.10.5.tgz#1fe7bf941b0909802cb826457e362444e7e96a79" + resolved "https://registry.npmjs.org/@emotion/styled/-/styled-11.10.5.tgz" integrity sha512-8EP6dD7dMkdku2foLoruPCNkRevzdcBaY6q0l0OsbyJK+x8D9HWjX27ARiSIKNF634hY9Zdoedh8bJCiva8yZw== dependencies: "@babel/runtime" "^7.18.3" @@ -487,22 +478,22 @@ "@emotion/unitless@^0.8.0": version "0.8.0" - resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.8.0.tgz#a4a36e9cbdc6903737cd20d38033241e1b8833db" + resolved "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz" integrity sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw== "@emotion/use-insertion-effect-with-fallbacks@^1.0.0": version "1.0.0" - resolved "https://registry.yarnpkg.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz#ffadaec35dbb7885bd54de3fa267ab2f860294df" + resolved "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz" integrity sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A== "@emotion/utils@^1.2.0": version "1.2.0" - resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.2.0.tgz#9716eaccbc6b5ded2ea5a90d65562609aab0f561" + resolved "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.0.tgz" integrity sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw== "@emotion/weak-memoize@^0.3.0": version "0.3.0" - resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz#ea89004119dc42db2e1dba0f97d553f7372f6fcb" + resolved "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz" integrity sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg== "@esbuild/android-arm64@0.16.12": @@ -522,7 +513,7 @@ "@esbuild/darwin-arm64@0.16.12": version "0.16.12" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.16.12.tgz#ac6c5d85cabf20de5047b55eab7f3c252d9aae71" + resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.12.tgz" integrity sha512-Dpe5hOAQiQRH20YkFAg+wOpcd4PEuXud+aGgKBQa/VriPJA8zuVlgCOSTwna1CgYl05lf6o5els4dtuyk1qJxQ== "@esbuild/darwin-x64@0.16.12": @@ -617,7 +608,7 @@ "@eslint/eslintrc@^1.3.3": version "1.3.3" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.3.tgz#2b044ab39fdfa75b4688184f9e573ce3c5b0ff95" + resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz" integrity sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg== dependencies: ajv "^6.12.4" @@ -630,9 +621,9 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@geoman-io/leaflet-geoman-free@github:TurtIeSocks/leaflet-geoman#66a5b28": +"@geoman-io/leaflet-geoman-free@github:TurtIeSocks/leaflet-geoman#1dcf3a0": version "2.13.2" - resolved "https://codeload.github.com/TurtIeSocks/leaflet-geoman/tar.gz/66a5b28bbb3ceff28ea25533f3c5b76d68956587" + resolved "https://codeload.github.com/TurtIeSocks/leaflet-geoman/tar.gz/1dcf3a065e9039894da08e81945dbecff6780ffb" dependencies: "@turf/boolean-contains" "^6.5.0" "@turf/kinks" "^6.5.0" @@ -643,7 +634,7 @@ "@humanwhocodes/config-array@^0.11.6": version "0.11.7" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.7.tgz#38aec044c6c828f6ed51d5d7ae3d9b9faf6dbb0f" + resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz" integrity sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw== dependencies: "@humanwhocodes/object-schema" "^1.2.1" @@ -652,17 +643,17 @@ "@humanwhocodes/module-importer@^1.0.1": version "1.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== "@humanwhocodes/object-schema@^1.2.1": version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== "@jridgewell/gen-mapping@^0.1.0": version "0.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz" integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== dependencies: "@jridgewell/set-array" "^1.0.0" @@ -670,7 +661,7 @@ "@jridgewell/gen-mapping@^0.3.2": version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz" integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== dependencies: "@jridgewell/set-array" "^1.0.1" @@ -679,22 +670,22 @@ "@jridgewell/resolve-uri@^3.0.3": version "3.1.0" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz" integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== "@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz" integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13": version "1.4.14" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz" integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== "@jridgewell/trace-mapping@^0.3.9": version "0.3.15" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz#aba35c48a38d3fd84b37e66c9c0423f9744f9774" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz" integrity sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g== dependencies: "@jridgewell/resolve-uri" "^3.0.3" @@ -702,19 +693,19 @@ "@lezer/common@^1.0.0": version "1.0.0" - resolved "https://registry.yarnpkg.com/@lezer/common/-/common-1.0.0.tgz#1c95ae53ec17706aa3cbcc88b52c23f22ed56096" + resolved "https://registry.npmjs.org/@lezer/common/-/common-1.0.0.tgz" integrity sha512-ohydQe+Hb+w4oMDvXzs8uuJd2NoA3D8YDcLiuDsLqH+yflDTPEpgCsWI3/6rH5C3BAedtH1/R51dxENldQceEA== "@lezer/highlight@^1.0.0": version "1.0.0" - resolved "https://registry.yarnpkg.com/@lezer/highlight/-/highlight-1.0.0.tgz#1dc82300f5d39fbd67ae1194b5519b4c381878d3" + resolved "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.0.0.tgz" integrity sha512-nsCnNtim90UKsB5YxoX65v3GEIw3iCHw9RM2DtdgkiqAbKh9pCdvi8AWNwkYf10Lu6fxNhXPpkpHbW6mihhvJA== dependencies: "@lezer/common" "^1.0.0" "@lezer/json@^1.0.0": version "1.0.0" - resolved "https://registry.yarnpkg.com/@lezer/json/-/json-1.0.0.tgz#848ad9c2c3e812518eb02897edd5a7f649e9c160" + resolved "https://registry.npmjs.org/@lezer/json/-/json-1.0.0.tgz" integrity sha512-zbAuUY09RBzCoCA3lJ1+ypKw5WSNvLqGMtasdW6HvVOqZoCpPr8eWrsGnOVWGKGn8Rh21FnrKRVlJXrGAVUqRw== dependencies: "@lezer/highlight" "^1.0.0" @@ -722,14 +713,14 @@ "@lezer/lr@^1.0.0": version "1.2.3" - resolved "https://registry.yarnpkg.com/@lezer/lr/-/lr-1.2.3.tgz#f44ca844f15f6762fde4eab877d110567e34ffa1" + resolved "https://registry.npmjs.org/@lezer/lr/-/lr-1.2.3.tgz" integrity sha512-qpB7rBzH8f6Mzjv2AVZRahcm+2Cf7nbIH++uXbvVOL1yIRvVWQ3HAM/saeBLCyz/togB7LGo76qdJYL1uKQlqA== dependencies: "@lezer/common" "^1.0.0" "@mui/base@5.0.0-alpha.111": version "5.0.0-alpha.111" - resolved "https://registry.yarnpkg.com/@mui/base/-/base-5.0.0-alpha.111.tgz#fffec7f6393fc45c0d3a200ee5820820a4b92403" + resolved "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.111.tgz" integrity sha512-2wfIPpl97S4dPzD0QOM3UIzQ/EuXCYQvHmXxTpfKxev/cfkzOe7Ik/McoYUBbtM1bSOqH3W276R/L2LF9cyXqQ== dependencies: "@babel/runtime" "^7.20.6" @@ -743,7 +734,7 @@ "@mui/base@5.0.0-alpha.112": version "5.0.0-alpha.112" - resolved "https://registry.yarnpkg.com/@mui/base/-/base-5.0.0-alpha.112.tgz#80e815430c5df0316e0a549d34628d54215e05f1" + resolved "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.112.tgz" integrity sha512-KPwb1iYPXsV/P8uu0SNQrj7v7YU6wdN4Eccc2lZQyRDW+f6PJYjHBuFUTYKc408B98Jvs1XbC/z5MN45a2DWrQ== dependencies: "@babel/runtime" "^7.20.7" @@ -757,24 +748,24 @@ "@mui/core-downloads-tracker@^5.11.1": version "5.11.1" - resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-5.11.1.tgz#5130682392203916bd9d947bac35dfd38f533654" + resolved "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.11.1.tgz" integrity sha512-QVqVNlZ2K+LqUDE5kFgYd0r4KekR/dv2cNYbAutQWbfOA8VPVUVrDz0ELrEcoe8TjM/CwnsmGvaDh/YSNl/ALA== "@mui/core-downloads-tracker@^5.11.2": version "5.11.2" - resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-5.11.2.tgz#0ff8066bee7e9654fd978cb671e9c12c9d2a65b7" + resolved "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.11.2.tgz" integrity sha512-ztLQELdSSuJFXezng8g5eCzy8mogtzMM8JcfG3HIGgUJ2RlAiBXI2Qe0adKmrJlF4FMat8vTaTeoiRNBZH4t1Q== "@mui/icons-material@^5.0.1", "@mui/icons-material@^5.11.0": version "5.11.0" - resolved "https://registry.yarnpkg.com/@mui/icons-material/-/icons-material-5.11.0.tgz#9ea6949278b2266d2683866069cd43009eaf6464" + resolved "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.11.0.tgz" integrity sha512-I2LaOKqO8a0xcLGtIozC9xoXjZAto5G5gh0FYUMAlbsIHNHIjn4Xrw9rvjY20vZonyiGrZNMAlAXYkY6JvhF6A== dependencies: "@babel/runtime" "^7.20.6" "@mui/material@^5.0.2": version "5.11.1" - resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.11.1.tgz#89ebc860abae0f146d9ac69b85baa691f09cfb47" + resolved "https://registry.npmjs.org/@mui/material/-/material-5.11.1.tgz" integrity sha512-yaZiXvcrl2vgUK+VO24780BWRgwdAMmAyuMVZnRTts1Yu0tWd6PjIYq2ZtaOlpj6/LbaSS+Q2kSfxYnDQ20CEQ== dependencies: "@babel/runtime" "^7.20.6" @@ -792,7 +783,7 @@ "@mui/material@^5.11.2": version "5.11.2" - resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.11.2.tgz#8f0ce18d2cf9da9276f6f19b40a681225098ea09" + resolved "https://registry.npmjs.org/@mui/material/-/material-5.11.2.tgz" integrity sha512-PeraRDsghnDLzejorfe9ps1syxlB8UrGs+UKwg9GGlndv5Tghm+9nwuibrP2TCDC14mlryF+u2WlAOYaPPMwGA== dependencies: "@babel/runtime" "^7.20.7" @@ -810,7 +801,7 @@ "@mui/private-theming@^5.11.1": version "5.11.1" - resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.11.1.tgz#8e6a6c33c6f04cadba17b6f3320e22bd64413655" + resolved "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.11.1.tgz" integrity sha512-nnHg7kA5RwFRhy0wiDYe59sLCVGORpPypL1JcEdhv0+N0Zbmc2E/y4z2zqMRZ62MAEscpro7cQbvv244ThA84A== dependencies: "@babel/runtime" "^7.20.6" @@ -819,7 +810,7 @@ "@mui/private-theming@^5.11.2": version "5.11.2" - resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.11.2.tgz#93eafb317070888a988efa8d6a9ec1f69183a606" + resolved "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.11.2.tgz" integrity sha512-qZwMaqRFPwlYmqwVKblKBGKtIjJRAj3nsvX93pOmatsXyorW7N/0IPE/swPgz1VwChXhHO75DwBEx8tB+aRMNg== dependencies: "@babel/runtime" "^7.20.7" @@ -828,7 +819,7 @@ "@mui/styled-engine@^5.11.0": version "5.11.0" - resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-5.11.0.tgz#79afb30c612c7807c4b77602cf258526d3997c7b" + resolved "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.11.0.tgz" integrity sha512-AF06K60Zc58qf0f7X+Y/QjaHaZq16znliLnGc9iVrV/+s8Ln/FCoeNuFvhlCbZZQ5WQcJvcy59zp0nXrklGGPQ== dependencies: "@babel/runtime" "^7.20.6" @@ -838,7 +829,7 @@ "@mui/system@^5.11.1": version "5.11.1" - resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.11.1.tgz#86c85472f5c2d4eaf739acd426c7b1ccce38eda2" + resolved "https://registry.npmjs.org/@mui/system/-/system-5.11.1.tgz" integrity sha512-BEA2S0hay8n8CcZftkeAVsi0nsb5ZjdnZRCahv5lX7QJYwDjO4ucJ6lnvxHe2v/9Te1LLjTO7ojxu/qM6CE5Cg== dependencies: "@babel/runtime" "^7.20.6" @@ -852,7 +843,7 @@ "@mui/system@^5.11.2": version "5.11.2" - resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.11.2.tgz#a5a5865dda0f5f360eed8cdc1ab399a493dbd361" + resolved "https://registry.npmjs.org/@mui/system/-/system-5.11.2.tgz" integrity sha512-PPkYhrcP2MkhscX6SauIl0wPgra0w1LGPtll+hIKc2Z2JbGRSrUCFif93kxejB7I1cAoCay9jWW4mnNhsOqF/g== dependencies: "@babel/runtime" "^7.20.7" @@ -866,12 +857,12 @@ "@mui/types@^7.2.3": version "7.2.3" - resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.3.tgz#06faae1c0e2f3a31c86af6f28b3a4a42143670b9" + resolved "https://registry.npmjs.org/@mui/types/-/types-7.2.3.tgz" integrity sha512-tZ+CQggbe9Ol7e/Fs5RcKwg/woU+o8DCtOnccX6KmbBc7YrfqMYEYuaIcXHuhpT880QwNkZZ3wQwvtlDFA2yOw== "@mui/utils@^5.10.3": version "5.10.16" - resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.10.16.tgz#7a981444855968ebdb1830d76e298d1ac47eaaf6" + resolved "https://registry.npmjs.org/@mui/utils/-/utils-5.10.16.tgz" integrity sha512-3MB/SGsgiiu9Z55CFmAfiONUoR7AAue/H4F6w3mc2LnhFQCsoVvXhioDPcsiRpUMIQr34jDPzGXdCuqWooPCXQ== dependencies: "@babel/runtime" "^7.20.1" @@ -882,7 +873,7 @@ "@mui/utils@^5.11.1": version "5.11.1" - resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.11.1.tgz#8d12b3c2245efd9a1c0595658dcb4c86f6625206" + resolved "https://registry.npmjs.org/@mui/utils/-/utils-5.11.1.tgz" integrity sha512-lMAPgIJoil8V9ZxsMbEflMsvZmWcHbRVMc4JDY9jPO9V4welpF43h/O267b1RqlcRnC5MEbVQV605GYkTZY29Q== dependencies: "@babel/runtime" "^7.20.6" @@ -893,7 +884,7 @@ "@mui/utils@^5.11.2": version "5.11.2" - resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.11.2.tgz#29764311acb99425159b159b1cb382153ad9be1f" + resolved "https://registry.npmjs.org/@mui/utils/-/utils-5.11.2.tgz" integrity sha512-AyizuHHlGdAtH5hOOXBW3kriuIwUIKUIgg0P7LzMvzf6jPhoQbENYqY6zJqfoZ7fAWMNNYT8mgN5EftNGzwE2w== dependencies: "@babel/runtime" "^7.20.7" @@ -904,7 +895,7 @@ "@mui/x-date-pickers@^5.0.12": version "5.0.12" - resolved "https://registry.yarnpkg.com/@mui/x-date-pickers/-/x-date-pickers-5.0.12.tgz#f80e742aa8045b214f40a72e782fd871fb18ec89" + resolved "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-5.0.12.tgz" integrity sha512-HpiPE4nkqlklilKAxUQpf3tecJEDaTIBRRVTGk9GMgpkwli7Cv+5OGn6aSxG5ckMZdiQ/NT1L9kOcm0Bi9Gqjw== dependencies: "@babel/runtime" "^7.18.9" @@ -922,7 +913,7 @@ "@nodelib/fs.scandir@2.1.5": version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: "@nodelib/fs.stat" "2.0.5" @@ -930,12 +921,12 @@ "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== "@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: "@nodelib/fs.scandir" "2.1.5" @@ -943,129 +934,129 @@ "@pixi/accessibility@6.5.8": version "6.5.8" - resolved "https://registry.yarnpkg.com/@pixi/accessibility/-/accessibility-6.5.8.tgz#bb948e868b3f24cd77ed407c847feb238597b73d" + resolved "https://registry.npmjs.org/@pixi/accessibility/-/accessibility-6.5.8.tgz" integrity sha512-3q1YaZeZKOoblgbxTQg2L0RAp9jtNtGcl/7kce+XelqxwIMS3p8411nwo90YO53XCqc/eQW2SoZ+hSXqcL0qOw== "@pixi/app@6.5.8": version "6.5.8" - resolved "https://registry.yarnpkg.com/@pixi/app/-/app-6.5.8.tgz#0a09bce23a222458e6a769d8ecbb0643ee165368" + resolved "https://registry.npmjs.org/@pixi/app/-/app-6.5.8.tgz" integrity sha512-pDPkamtYDaPhscNxack+bHNqazCwrqw6cAotKyoz1mvLXeGhxqTntOcfgGLZR2fNbnY8EBmdduLvH7n2jI/LTg== "@pixi/compressed-textures@6.5.8": version "6.5.8" - resolved "https://registry.yarnpkg.com/@pixi/compressed-textures/-/compressed-textures-6.5.8.tgz#5c814bc49f426485016c3eae1d50cb3a659fc4d8" + resolved "https://registry.npmjs.org/@pixi/compressed-textures/-/compressed-textures-6.5.8.tgz" integrity sha512-nW74kcvdEoe4a2U7Ekx4egqdH1tYKC2kCOZxKWYcUARqz26tS0ddwSRyIs05In6EChmXHXGy/MtShdueMH38TA== "@pixi/constants@6.5.8": version "6.5.8" - resolved "https://registry.yarnpkg.com/@pixi/constants/-/constants-6.5.8.tgz#034bf0f318546bf3c9346f4f3a7528f8cadcdb55" + resolved "https://registry.npmjs.org/@pixi/constants/-/constants-6.5.8.tgz" integrity sha512-yYRCebBPqajm1kn5f8QQTTvl7oDRDk1nppfO+JpqbrFXg0W7oqIMurec3KeG9RdZW5foOiXDoz1Gw+VtolYIEw== "@pixi/core@6.5.8": version "6.5.8" - resolved "https://registry.yarnpkg.com/@pixi/core/-/core-6.5.8.tgz#6b4fb6d877723427c8b3b438d071c1d523a859f5" + resolved "https://registry.npmjs.org/@pixi/core/-/core-6.5.8.tgz" integrity sha512-Gconik7/PpFPMpCpOddXVIPx5C2StWKw7lQ4YX19yQ+cRRmecCea2cV0xTBtpEjjx0ilX7nBfIEuZ4zIlMmlbA== dependencies: "@types/offscreencanvas" "^2019.6.4" "@pixi/display@6.5.8": version "6.5.8" - resolved "https://registry.yarnpkg.com/@pixi/display/-/display-6.5.8.tgz#f6e69aba09926affd610ad90b68b01cf6d5e3a64" + resolved "https://registry.npmjs.org/@pixi/display/-/display-6.5.8.tgz" integrity sha512-2K8YOG8s0iF8x/k2Q0RTFmoMJ9biI6PXEh76nH3EqUFdpyrIIgrG5aOMnCkVDvOxlgVRrKG8Q3JBHlSievTmuw== "@pixi/extensions@6.5.8": version "6.5.8" - resolved "https://registry.yarnpkg.com/@pixi/extensions/-/extensions-6.5.8.tgz#6976b8f582ce09dea9ba3baebd14c5958c39b222" + resolved "https://registry.npmjs.org/@pixi/extensions/-/extensions-6.5.8.tgz" integrity sha512-6vEV801Vn/EkU/qjFiZ76OZWPq5KsBR2r+P5gfKv4YLnaDc3A+0IpUOJ7sLBAJqmr0iw68g6xV6MnuqVjNGjFg== "@pixi/extract@6.5.8": version "6.5.8" - resolved "https://registry.yarnpkg.com/@pixi/extract/-/extract-6.5.8.tgz#d2a07055a766b7269b3f3a0ad1fdb93762168f6f" + resolved "https://registry.npmjs.org/@pixi/extract/-/extract-6.5.8.tgz" integrity sha512-qbuuD/iBA4J+TCBgrbMe8oDUFbCriyy9LTKEtQp+pghKD5MEMvJ3nO6Osumxqiqta2kYU6WldFLTldKyHEiQ7Q== "@pixi/filter-alpha@6.5.8": version "6.5.8" - resolved "https://registry.yarnpkg.com/@pixi/filter-alpha/-/filter-alpha-6.5.8.tgz#627ac683285754ebc94ad560bf99c015721d3314" + resolved "https://registry.npmjs.org/@pixi/filter-alpha/-/filter-alpha-6.5.8.tgz" integrity sha512-W4IkFTLTP84H+DS9XIdBGunAEpaXLrasDc4CQBeyp4c4hBlGlzriUZp30vkmqm7GPmFhzPe7aiJtNYgUpxKQBQ== "@pixi/filter-blur@6.5.8": version "6.5.8" - resolved "https://registry.yarnpkg.com/@pixi/filter-blur/-/filter-blur-6.5.8.tgz#78e6976e81ce685d17858be3338a4bb64c766298" + resolved "https://registry.npmjs.org/@pixi/filter-blur/-/filter-blur-6.5.8.tgz" integrity sha512-1UOfVthFBnavzTBkR6R+1tWhOOymtWvcpuJILhxf3mryLj9eqYbQubAG0gV8Da6Ibsgk+v73ORnOJyWR3POFvw== "@pixi/filter-color-matrix@6.5.8": version "6.5.8" - resolved "https://registry.yarnpkg.com/@pixi/filter-color-matrix/-/filter-color-matrix-6.5.8.tgz#4fa64977c87fcb5420aff439df1652a2048c47a6" + resolved "https://registry.npmjs.org/@pixi/filter-color-matrix/-/filter-color-matrix-6.5.8.tgz" integrity sha512-iix+a/KEi6HAwZwkUH3nkIzyLu0ln3HBuHEFLUUhug7xrQgQgGrTQZ32iWlfpJD/BZuKphIGfzlxMFfvyQmkVw== "@pixi/filter-displacement@6.5.8": version "6.5.8" - resolved "https://registry.yarnpkg.com/@pixi/filter-displacement/-/filter-displacement-6.5.8.tgz#14d135a9bd1619603956f832852fbe810993be54" + resolved "https://registry.npmjs.org/@pixi/filter-displacement/-/filter-displacement-6.5.8.tgz" integrity sha512-qLRka5cQbeH6667A+ViYoemsXGGe2tOBt92vM91+slMt9OBGtR0ymlpGU7VxBggWUlu5PE10zYed/xw78uSpig== "@pixi/filter-fxaa@6.5.8": version "6.5.8" - resolved "https://registry.yarnpkg.com/@pixi/filter-fxaa/-/filter-fxaa-6.5.8.tgz#30e5c7c5b5cb1850269d1010278537ee4e5cb2d3" + resolved "https://registry.npmjs.org/@pixi/filter-fxaa/-/filter-fxaa-6.5.8.tgz" integrity sha512-TxsBH2z2RMj0mqr13VPi18/EJ/Kn38J2u65HonJmhbvTaoK9HWMExTvl38Xjg0k7TlepwhoayxMhQ1uCw9xudQ== "@pixi/filter-noise@6.5.8": version "6.5.8" - resolved "https://registry.yarnpkg.com/@pixi/filter-noise/-/filter-noise-6.5.8.tgz#d183e2e56990ad6392eb9e892f416fa41dfff0dc" + resolved "https://registry.npmjs.org/@pixi/filter-noise/-/filter-noise-6.5.8.tgz" integrity sha512-BZHKuzV5Mdn+EpC52lFYpd6jUcrL+YQHdq0v0yJfVtpW2ripseQxMGxxXr6Yxp2P4F3g2aY2JrfX2VztosmGLA== "@pixi/graphics@6.5.8": version "6.5.8" - resolved "https://registry.yarnpkg.com/@pixi/graphics/-/graphics-6.5.8.tgz#25db47335d8191c38ae39adc95bd9eb20672247b" + resolved "https://registry.npmjs.org/@pixi/graphics/-/graphics-6.5.8.tgz" integrity sha512-DUuUXHO4t5fg+n+srMkHX38QEH3WtS1IMXtovBGFJkkopG0Z0xjxSp5XvsPPw1J//4fzkHZI5OBrlN613p9+sg== "@pixi/interaction@6.5.8": version "6.5.8" - resolved "https://registry.yarnpkg.com/@pixi/interaction/-/interaction-6.5.8.tgz#d4e83cb4d1f03f23633706ef9495406a2401dc26" + resolved "https://registry.npmjs.org/@pixi/interaction/-/interaction-6.5.8.tgz" integrity sha512-uP247r0f47vo9WSpEnsUfeD1izxVGpjtg4iAyGT/02ezWse2vD1aEL8AbxFa65TL0IXOKsHEQudCVL+wjnbSKQ== "@pixi/loaders@6.5.8": version "6.5.8" - resolved "https://registry.yarnpkg.com/@pixi/loaders/-/loaders-6.5.8.tgz#5fe2e74c2c532b4bb900063ee2f33385e5446f7a" + resolved "https://registry.npmjs.org/@pixi/loaders/-/loaders-6.5.8.tgz" integrity sha512-mj11UPKsqWaTEPMpCnFugr6heKkQeNFuVSddSwE8crg19l46zcMhk3ucpQX15RDpAdDJjtl3OraevQCHHbNENw== "@pixi/math@6.5.8": version "6.5.8" - resolved "https://registry.yarnpkg.com/@pixi/math/-/math-6.5.8.tgz#7dc06425c6a53b6a2adf5e66e57a2f9db0907cc9" + resolved "https://registry.npmjs.org/@pixi/math/-/math-6.5.8.tgz" integrity sha512-9493KEH5ITnjOZvQZbaU22lD0kcg/XhNh+309KYfwFX787zA1BN/7is06oHEgHBDb2NemqioYi6sw1WnECgQig== "@pixi/mesh-extras@6.5.8": version "6.5.8" - resolved "https://registry.yarnpkg.com/@pixi/mesh-extras/-/mesh-extras-6.5.8.tgz#c2495415d9a4e7a88bf59d14e86bc3df64c1b7c3" + resolved "https://registry.npmjs.org/@pixi/mesh-extras/-/mesh-extras-6.5.8.tgz" integrity sha512-eU2I53yZUFxKbTYZvyRfUcdina3WOl87fyqYwAoaHosU9VgbFl16YADKTGV+NflNp6RCTwU/UIPZ1T19W/iysw== "@pixi/mesh@6.5.8": version "6.5.8" - resolved "https://registry.yarnpkg.com/@pixi/mesh/-/mesh-6.5.8.tgz#1160dad0e42a0a59874e89e93ece28f230342546" + resolved "https://registry.npmjs.org/@pixi/mesh/-/mesh-6.5.8.tgz" integrity sha512-iZZGkh8QBhnfMEgpJsuwemFZZVatodckCgj7N8t1hyHEf0aOWEA6wp5N0Osa3mhltokl7BGnZZLxaR8NtjaiEQ== "@pixi/mixin-cache-as-bitmap@6.5.8": version "6.5.8" - resolved "https://registry.yarnpkg.com/@pixi/mixin-cache-as-bitmap/-/mixin-cache-as-bitmap-6.5.8.tgz#3e70ae36d3c63cb53f75ca74fec7814f3bfc01b4" + resolved "https://registry.npmjs.org/@pixi/mixin-cache-as-bitmap/-/mixin-cache-as-bitmap-6.5.8.tgz" integrity sha512-5TTv4w8v7guI6z3gKz5ppUCbNMRw+8RRNru/aq65qUl6kcUaJiYwQdBFJ/vJwpI9ePEScWrCuLVEc8QtX6xjNw== "@pixi/mixin-get-child-by-name@6.5.8": version "6.5.8" - resolved "https://registry.yarnpkg.com/@pixi/mixin-get-child-by-name/-/mixin-get-child-by-name-6.5.8.tgz#414a8bbf8d80686e351bc8f9abb8f12be2d04ff8" + resolved "https://registry.npmjs.org/@pixi/mixin-get-child-by-name/-/mixin-get-child-by-name-6.5.8.tgz" integrity sha512-b15HTdHpW4ErDBpf7wm1vvWHrTv5kQzElXrwAPBCnLgvronfSL9mL7npOUkZOybUorCoEBq/7oNVjkimsQc5gw== "@pixi/mixin-get-global-position@6.5.8": version "6.5.8" - resolved "https://registry.yarnpkg.com/@pixi/mixin-get-global-position/-/mixin-get-global-position-6.5.8.tgz#7fc71b89e13d37fdf39955a3de680511883ef5f2" + resolved "https://registry.npmjs.org/@pixi/mixin-get-global-position/-/mixin-get-global-position-6.5.8.tgz" integrity sha512-Y5epEW5mRrgpDOHvfc92t0PaBgboBKXR4n/AzOOFt0h9GRNTmVKYBpUQPp/HO+r1Bxq+XbaGm1CyfkjUUxnORA== "@pixi/particle-container@6.5.8": version "6.5.8" - resolved "https://registry.yarnpkg.com/@pixi/particle-container/-/particle-container-6.5.8.tgz#6e4315aa105581c961a2810a9fd8bcedec0fb17f" + resolved "https://registry.npmjs.org/@pixi/particle-container/-/particle-container-6.5.8.tgz" integrity sha512-wc4j84PssPWmZLpOJTLLC7MftCULzkQMAfVlwOERhNTZ+6E1LIKw91wDWZe9LQ/20iarzQwQXo0a4uNlJlhnVQ== "@pixi/polyfill@6.5.8": version "6.5.8" - resolved "https://registry.yarnpkg.com/@pixi/polyfill/-/polyfill-6.5.8.tgz#98d753fc6ca95cf086077ee230d089595a32bbfb" + resolved "https://registry.npmjs.org/@pixi/polyfill/-/polyfill-6.5.8.tgz" integrity sha512-z2klHelxTZExMyO4oiLdxJMGzzXnToEIDn7Dwfy3FY+98LbxSa2dVFCgzDsYeiiS8fSMsni2Ru7aZT/DFsRDcA== dependencies: object-assign "^4.1.1" @@ -1073,57 +1064,57 @@ "@pixi/prepare@6.5.8": version "6.5.8" - resolved "https://registry.yarnpkg.com/@pixi/prepare/-/prepare-6.5.8.tgz#01eeb8ae86c352ad47e05a569fa2328993dddd4d" + resolved "https://registry.npmjs.org/@pixi/prepare/-/prepare-6.5.8.tgz" integrity sha512-anrAcjX3r9ZzK/L6Fw7GhE1pCkjhSfBsxUTlVhuRKJPFC+A3BNpZCwy3GzyvHP4ocl8wvUMzuz5BB5l0AoBCFw== "@pixi/runner@6.5.8": version "6.5.8" - resolved "https://registry.yarnpkg.com/@pixi/runner/-/runner-6.5.8.tgz#e86ed6fac1f243d17dfa5d5317cb0b98fdce3960" + resolved "https://registry.npmjs.org/@pixi/runner/-/runner-6.5.8.tgz" integrity sha512-/9KVgQjTKiBa1qHdNmhP9I+AHgC/Eu9QiKcc+oakLCJtpYi79lx+nDFrpLUamIi2c7lP0hDWVe0XqlQeYmSwag== "@pixi/settings@6.5.8": version "6.5.8" - resolved "https://registry.yarnpkg.com/@pixi/settings/-/settings-6.5.8.tgz#574df7b10039903e4e158a067be8fd5d8531c653" + resolved "https://registry.npmjs.org/@pixi/settings/-/settings-6.5.8.tgz" integrity sha512-gmnwHkg9+tlQRuFNOdimzl73Dup2fdEo/VYaF7spT+8womE4KWAvARCBMqY/10aAx1iYeYuo5av/RfqrePB5Hg== "@pixi/sprite-animated@6.5.8": version "6.5.8" - resolved "https://registry.yarnpkg.com/@pixi/sprite-animated/-/sprite-animated-6.5.8.tgz#6a91cf194af21486ba36137e93a14d2f6396a77d" + resolved "https://registry.npmjs.org/@pixi/sprite-animated/-/sprite-animated-6.5.8.tgz" integrity sha512-woPT2cF1BaC0PDWdDrqJ0+DYcyIeXzZLq6bVx2YYia3+jJao1Zjmz1ns5e7YMUTEG7DoVFfhO6CC81YimsMG5w== "@pixi/sprite-tiling@6.5.8": version "6.5.8" - resolved "https://registry.yarnpkg.com/@pixi/sprite-tiling/-/sprite-tiling-6.5.8.tgz#2fafe50268565ab7f03d4aba50b2c2a975056edc" + resolved "https://registry.npmjs.org/@pixi/sprite-tiling/-/sprite-tiling-6.5.8.tgz" integrity sha512-PG3tiWI6uUest/d7HAz4/3I8NjpYyeMUL2WDy86nMXCJ6bLdTs/s9Nq3DLckaUsyIMTGsVbj/BXjE8LP1WDTog== "@pixi/sprite@6.5.8": version "6.5.8" - resolved "https://registry.yarnpkg.com/@pixi/sprite/-/sprite-6.5.8.tgz#94bcf4fe590f674e193e64b02365fa4582453c40" + resolved "https://registry.npmjs.org/@pixi/sprite/-/sprite-6.5.8.tgz" integrity sha512-ywvbrNgjK+K93X9cvHtDCnsBtU7B9JD/3wg+1G6v1Ktrr2E1gwVIQK1NANBrjzt6cYGphz5EqGAW68d0rMBliw== "@pixi/spritesheet@6.5.8": version "6.5.8" - resolved "https://registry.yarnpkg.com/@pixi/spritesheet/-/spritesheet-6.5.8.tgz#d369372e0341a522e44d75e2c750534392a5f9e6" + resolved "https://registry.npmjs.org/@pixi/spritesheet/-/spritesheet-6.5.8.tgz" integrity sha512-WiJd4fKpSitD3A+/u5q8IPoHXMFT8++bsluhuJvDwzo//s0PHb9qExlF2xos7zUmekmydEFMkDnrl4+lWn2cyg== "@pixi/text-bitmap@6.5.8": version "6.5.8" - resolved "https://registry.yarnpkg.com/@pixi/text-bitmap/-/text-bitmap-6.5.8.tgz#b43688300f35ca14e29a00142006b51c94b03781" + resolved "https://registry.npmjs.org/@pixi/text-bitmap/-/text-bitmap-6.5.8.tgz" integrity sha512-6VxejDc0gOu5HFN06m6i94xBZHdZ728iao8q+hEOjavGR5i2Pv3xseuke1qY0iN4q6Z+wTkcmoK5BfEVi2ujdQ== "@pixi/text@6.5.8": version "6.5.8" - resolved "https://registry.yarnpkg.com/@pixi/text/-/text-6.5.8.tgz#ed23ea16812b0b5be2d0b964e707c5c407f1e758" + resolved "https://registry.npmjs.org/@pixi/text/-/text-6.5.8.tgz" integrity sha512-7AZPj5+vWcUjK0QzQ3ehiEwEqywiWR8NhDmnnN5nRNHR9u5IOOnqCQtBTdDffYPN0uMgCi8MzUPwTJhGuyOeww== "@pixi/ticker@6.5.8": version "6.5.8" - resolved "https://registry.yarnpkg.com/@pixi/ticker/-/ticker-6.5.8.tgz#708120bcadce7c4446e2238df590c54debbaed78" + resolved "https://registry.npmjs.org/@pixi/ticker/-/ticker-6.5.8.tgz" integrity sha512-7VKq5hfnRDSv6a16pATqZAmpQfEu4G171iUTloy3QZfbnPw0s3JervZSih1yJJD84GXEF4VzYB26pJ/x3arGjQ== "@pixi/utils@6.5.8": version "6.5.8" - resolved "https://registry.yarnpkg.com/@pixi/utils/-/utils-6.5.8.tgz#5b7662c00951ac530bb0b72329bab922f4030930" + resolved "https://registry.npmjs.org/@pixi/utils/-/utils-6.5.8.tgz" integrity sha512-zLnvmVQBWPDnwkfvrSpBBF2XpWSMt+kQAsX562eqjuME63ic9M6fK4u/IaA8csdlG2wtcjBvSYWrpWmPq0bWag== dependencies: "@types/earcut" "^2.1.0" @@ -1133,22 +1124,22 @@ "@popperjs/core@^2.11.6": version "2.11.6" - resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.6.tgz#cee20bd55e68a1720bdab363ecf0c821ded4cd45" + resolved "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz" integrity sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw== "@react-leaflet/core@^2.1.0": version "2.1.0" - resolved "https://registry.yarnpkg.com/@react-leaflet/core/-/core-2.1.0.tgz#383acd31259d7c9ae8fb1b02d5e18fe613c2a13d" + resolved "https://registry.npmjs.org/@react-leaflet/core/-/core-2.1.0.tgz" integrity sha512-Qk7Pfu8BSarKGqILj4x7bCSZ1pjuAPZ+qmRwH5S7mDS91VSbVVsJSrW4qA+GPrro8t69gFYVMWb1Zc4yFmPiVg== "@remix-run/router@1.2.1": version "1.2.1" - resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.2.1.tgz#812edd4104a15a493dda1ccac0b352270d7a188c" + resolved "https://registry.npmjs.org/@remix-run/router/-/router-1.2.1.tgz" integrity sha512-XiY0IsyHR+DXYS5vBxpoBe/8veTeoRpMHP+vDosLZxL5bnpetzI0igkxkLZS235ldLzyfkxF+2divEwWHP3vMQ== "@turf/bbox@*", "@turf/bbox@^6.5.0": version "6.5.0" - resolved "https://registry.yarnpkg.com/@turf/bbox/-/bbox-6.5.0.tgz#bec30a744019eae420dac9ea46fb75caa44d8dc5" + resolved "https://registry.npmjs.org/@turf/bbox/-/bbox-6.5.0.tgz" integrity sha512-RBbLaao5hXTYyyg577iuMtDB8ehxMlUqHEJiMs8jT1GHkFhr6sYre3lmLsPeYEi/ZKj5TP5tt7fkzNdJ4GIVyw== dependencies: "@turf/helpers" "^6.5.0" @@ -1156,7 +1147,7 @@ "@turf/bearing@^6.5.0": version "6.5.0" - resolved "https://registry.yarnpkg.com/@turf/bearing/-/bearing-6.5.0.tgz#462a053c6c644434bdb636b39f8f43fb0cd857b0" + resolved "https://registry.npmjs.org/@turf/bearing/-/bearing-6.5.0.tgz" integrity sha512-dxINYhIEMzgDOztyMZc20I7ssYVNEpSv04VbMo5YPQsqa80KO3TFvbuCahMsCAW5z8Tncc8dwBlEFrmRjJG33A== dependencies: "@turf/helpers" "^6.5.0" @@ -1164,7 +1155,7 @@ "@turf/boolean-contains@^6.5.0": version "6.5.0" - resolved "https://registry.yarnpkg.com/@turf/boolean-contains/-/boolean-contains-6.5.0.tgz#f802e7432fb53109242d5bf57393ef2f53849bbf" + resolved "https://registry.npmjs.org/@turf/boolean-contains/-/boolean-contains-6.5.0.tgz" integrity sha512-4m8cJpbw+YQcKVGi8y0cHhBUnYT+QRfx6wzM4GI1IdtYH3p4oh/DOBJKrepQyiDzFDaNIjxuWXBh0ai1zVwOQQ== dependencies: "@turf/bbox" "^6.5.0" @@ -1175,7 +1166,7 @@ "@turf/boolean-point-in-polygon@^6.5.0": version "6.5.0" - resolved "https://registry.yarnpkg.com/@turf/boolean-point-in-polygon/-/boolean-point-in-polygon-6.5.0.tgz#6d2e9c89de4cd2e4365004c1e51490b7795a63cf" + resolved "https://registry.npmjs.org/@turf/boolean-point-in-polygon/-/boolean-point-in-polygon-6.5.0.tgz" integrity sha512-DtSuVFB26SI+hj0SjrvXowGTUCHlgevPAIsukssW6BG5MlNSBQAo70wpICBNJL6RjukXg8d2eXaAWuD/CqL00A== dependencies: "@turf/helpers" "^6.5.0" @@ -1183,7 +1174,7 @@ "@turf/boolean-point-on-line@^6.5.0": version "6.5.0" - resolved "https://registry.yarnpkg.com/@turf/boolean-point-on-line/-/boolean-point-on-line-6.5.0.tgz#a8efa7bad88760676f395afb9980746bc5b376e9" + resolved "https://registry.npmjs.org/@turf/boolean-point-on-line/-/boolean-point-on-line-6.5.0.tgz" integrity sha512-A1BbuQ0LceLHvq7F/P7w3QvfpmZqbmViIUPHdNLvZimFNLo4e6IQunmzbe+8aSStH9QRZm3VOflyvNeXvvpZEQ== dependencies: "@turf/helpers" "^6.5.0" @@ -1191,7 +1182,7 @@ "@turf/center@^6.5.0": version "6.5.0" - resolved "https://registry.yarnpkg.com/@turf/center/-/center-6.5.0.tgz#3bcb6bffcb8ba147430cfea84aabaed5dbdd4f07" + resolved "https://registry.npmjs.org/@turf/center/-/center-6.5.0.tgz" integrity sha512-T8KtMTfSATWcAX088rEDKjyvQCBkUsLnK/Txb6/8WUXIeOZyHu42G7MkdkHRoHtwieLdduDdmPLFyTdG5/e7ZQ== dependencies: "@turf/bbox" "^6.5.0" @@ -1199,7 +1190,7 @@ "@turf/destination@^6.5.0": version "6.5.0" - resolved "https://registry.yarnpkg.com/@turf/destination/-/destination-6.5.0.tgz#30a84702f9677d076130e0440d3223ae503fdae1" + resolved "https://registry.npmjs.org/@turf/destination/-/destination-6.5.0.tgz" integrity sha512-4cnWQlNC8d1tItOz9B4pmJdWpXqS0vEvv65bI/Pj/genJnsL7evI0/Xw42RvEGROS481MPiU80xzvwxEvhQiMQ== dependencies: "@turf/helpers" "^6.5.0" @@ -1207,7 +1198,7 @@ "@turf/distance@^6.5.0": version "6.5.0" - resolved "https://registry.yarnpkg.com/@turf/distance/-/distance-6.5.0.tgz#21f04d5f86e864d54e2abde16f35c15b4f36149a" + resolved "https://registry.npmjs.org/@turf/distance/-/distance-6.5.0.tgz" integrity sha512-xzykSLfoURec5qvQJcfifw/1mJa+5UwByZZ5TZ8iaqjGYN0vomhV9aiSLeYdUGtYRESZ+DYC/OzY+4RclZYgMg== dependencies: "@turf/helpers" "^6.5.0" @@ -1215,26 +1206,26 @@ "@turf/helpers@6.x", "@turf/helpers@^6.5.0": version "6.5.0" - resolved "https://registry.yarnpkg.com/@turf/helpers/-/helpers-6.5.0.tgz#f79af094bd6b8ce7ed2bd3e089a8493ee6cae82e" + resolved "https://registry.npmjs.org/@turf/helpers/-/helpers-6.5.0.tgz" integrity sha512-VbI1dV5bLFzohYYdgqwikdMVpe7pJ9X3E+dlr425wa2/sMJqYDhTO++ec38/pcPvPE6oD9WEEeU3Xu3gza+VPw== "@turf/invariant@^6.5.0": version "6.5.0" - resolved "https://registry.yarnpkg.com/@turf/invariant/-/invariant-6.5.0.tgz#970afc988023e39c7ccab2341bd06979ddc7463f" + resolved "https://registry.npmjs.org/@turf/invariant/-/invariant-6.5.0.tgz" integrity sha512-Wv8PRNCtPD31UVbdJE/KVAWKe7l6US+lJItRR/HOEW3eh+U/JwRCSUl/KZ7bmjM/C+zLNoreM2TU6OoLACs4eg== dependencies: "@turf/helpers" "^6.5.0" "@turf/kinks@^6.5.0": version "6.5.0" - resolved "https://registry.yarnpkg.com/@turf/kinks/-/kinks-6.5.0.tgz#80e7456367535365012f658cf1a988b39a2c920b" + resolved "https://registry.npmjs.org/@turf/kinks/-/kinks-6.5.0.tgz" integrity sha512-ViCngdPt1eEL7hYUHR2eHR662GvCgTc35ZJFaNR6kRtr6D8plLaDju0FILeFFWSc+o8e3fwxZEJKmFj9IzPiIQ== dependencies: "@turf/helpers" "^6.5.0" "@turf/line-intersect@^6.5.0": version "6.5.0" - resolved "https://registry.yarnpkg.com/@turf/line-intersect/-/line-intersect-6.5.0.tgz#dea48348b30c093715d2195d2dd7524aee4cf020" + resolved "https://registry.npmjs.org/@turf/line-intersect/-/line-intersect-6.5.0.tgz" integrity sha512-CS6R1tZvVQD390G9Ea4pmpM6mJGPWoL82jD46y0q1KSor9s6HupMIo1kY4Ny+AEYQl9jd21V3Scz20eldpbTVA== dependencies: "@turf/helpers" "^6.5.0" @@ -1245,7 +1236,7 @@ "@turf/line-segment@^6.5.0": version "6.5.0" - resolved "https://registry.yarnpkg.com/@turf/line-segment/-/line-segment-6.5.0.tgz#ee73f3ffcb7c956203b64ed966d96af380a4dd65" + resolved "https://registry.npmjs.org/@turf/line-segment/-/line-segment-6.5.0.tgz" integrity sha512-jI625Ho4jSuJESNq66Mmi290ZJ5pPZiQZruPVpmHkUw257Pew0alMmb6YrqYNnLUuiVVONxAAKXUVeeUGtycfw== dependencies: "@turf/helpers" "^6.5.0" @@ -1254,7 +1245,7 @@ "@turf/line-split@^6.5.0": version "6.5.0" - resolved "https://registry.yarnpkg.com/@turf/line-split/-/line-split-6.5.0.tgz#116d7fbf714457878225187f5820ef98db7b02c2" + resolved "https://registry.npmjs.org/@turf/line-split/-/line-split-6.5.0.tgz" integrity sha512-/rwUMVr9OI2ccJjw7/6eTN53URtGThNSD5I0GgxyFXMtxWiloRJ9MTff8jBbtPWrRka/Sh2GkwucVRAEakx9Sw== dependencies: "@turf/bbox" "^6.5.0" @@ -1270,14 +1261,14 @@ "@turf/meta@6.x", "@turf/meta@^6.5.0": version "6.5.0" - resolved "https://registry.yarnpkg.com/@turf/meta/-/meta-6.5.0.tgz#b725c3653c9f432133eaa04d3421f7e51e0418ca" + resolved "https://registry.npmjs.org/@turf/meta/-/meta-6.5.0.tgz" integrity sha512-RrArvtsV0vdsCBegoBtOalgdSOfkBrTJ07VkpiCnq/491W67hnMWmDu7e6Ztw0C3WldRYTXkg3SumfdzZxLBHA== dependencies: "@turf/helpers" "^6.5.0" "@turf/nearest-point-on-line@^6.5.0": version "6.5.0" - resolved "https://registry.yarnpkg.com/@turf/nearest-point-on-line/-/nearest-point-on-line-6.5.0.tgz#8e1cd2cdc0b5acaf4c8d8b3b33bb008d3cb99e7b" + resolved "https://registry.npmjs.org/@turf/nearest-point-on-line/-/nearest-point-on-line-6.5.0.tgz" integrity sha512-WthrvddddvmymnC+Vf7BrkHGbDOUu6Z3/6bFYUGv1kxw8tiZ6n83/VG6kHz4poHOfS0RaNflzXSkmCi64fLBlg== dependencies: "@turf/bearing" "^6.5.0" @@ -1290,7 +1281,7 @@ "@turf/square@^6.5.0": version "6.5.0" - resolved "https://registry.yarnpkg.com/@turf/square/-/square-6.5.0.tgz#ab43eef99d39c36157ab5b80416bbeba1f6b2122" + resolved "https://registry.npmjs.org/@turf/square/-/square-6.5.0.tgz" integrity sha512-BM2UyWDmiuHCadVhHXKIx5CQQbNCpOxB6S/aCNOCLbhCeypKX5Q0Aosc5YcmCJgkwO5BERCC6Ee7NMbNB2vHmQ== dependencies: "@turf/distance" "^6.5.0" @@ -1298,7 +1289,7 @@ "@turf/truncate@^6.5.0": version "6.5.0" - resolved "https://registry.yarnpkg.com/@turf/truncate/-/truncate-6.5.0.tgz#c3a16cad959f1be1c5156157d5555c64b19185d8" + resolved "https://registry.npmjs.org/@turf/truncate/-/truncate-6.5.0.tgz" integrity sha512-pFxg71pLk+eJj134Z9yUoRhIi8vqnnKvCYwdT4x/DQl/19RVdq1tV3yqOT3gcTQNfniteylL5qV1uTBDV5sgrg== dependencies: "@turf/helpers" "^6.5.0" @@ -1306,113 +1297,111 @@ "@types/earcut@^2.1.0": version "2.1.1" - resolved "https://registry.yarnpkg.com/@types/earcut/-/earcut-2.1.1.tgz#573a0af609f17005c751f6f4ffec49cfe358ea51" + resolved "https://registry.npmjs.org/@types/earcut/-/earcut-2.1.1.tgz" integrity sha512-w8oigUCDjElRHRRrMvn/spybSMyX8MTkKA5Dv+tS1IE/TgmNZPqUYtvYBXGY8cieSE66gm+szeK+bnbxC2xHTQ== "@types/geojson@*": version "7946.0.10" - resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.10.tgz#6dfbf5ea17142f7f9a043809f1cd4c448cb68249" + resolved "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.10.tgz" integrity sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA== "@types/geojson@7946.0.8": version "7946.0.8" - resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.8.tgz#30744afdb385e2945e22f3b033f897f76b1f12ca" + resolved "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.8.tgz" integrity sha512-1rkryxURpr6aWP7R786/UQOkJ3PcpQiWkAXBmdWc7ryFWqN6a4xfK7BtjXvFBKO9LjQ+MWQSWxYeZX1OApnArA== "@types/json-schema@^7.0.9": version "7.0.11" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz" integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== "@types/json5@^0.0.29": version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== "@types/leaflet.locatecontrol@^0.74.1": version "0.74.1" - resolved "https://registry.yarnpkg.com/@types/leaflet.locatecontrol/-/leaflet.locatecontrol-0.74.1.tgz#1a1074cd720a68655ffdb70d8104539a71416615" + resolved "https://registry.npmjs.org/@types/leaflet.locatecontrol/-/leaflet.locatecontrol-0.74.1.tgz" integrity sha512-4rqWfKadQ+Rksv4uq7Ab68CdOlaDt8z5bP+EMbXk5Ea82XMV9yLzQpAvVZ2xdARa8fpF2Atk+fheQ04Lik6ziA== dependencies: "@types/leaflet" "*" "@types/leaflet@*": version "1.7.11" - resolved "https://registry.yarnpkg.com/@types/leaflet/-/leaflet-1.7.11.tgz#48b33b7a15b015bbb1e8950399298a112c3220c8" + resolved "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.7.11.tgz" integrity sha512-VwAYom2pfIAf/pLj1VR5aLltd4tOtHyvfaJlNYCoejzP2nu52PrMi1ehsLRMUS+bgafmIIKBV1cMfKeS+uJ0Vg== dependencies: "@types/geojson" "*" "@types/leaflet@^1.9.0": version "1.9.0" - resolved "https://registry.yarnpkg.com/@types/leaflet/-/leaflet-1.9.0.tgz#8caf452255e16cb15e0eabcb0d2a26793da0a6a2" + resolved "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.9.0.tgz" integrity sha512-7LeOSj7EloC5UcyOMo+1kc3S1UT3MjJxwqsMT1d2PTyvQz53w0Y0oSSk9nwZnOZubCmBvpSNGceucxiq+ZPEUw== dependencies: "@types/geojson" "*" "@types/ngeohash@^0.6.4": version "0.6.4" - resolved "https://registry.yarnpkg.com/@types/ngeohash/-/ngeohash-0.6.4.tgz#a1ba2c25c4d1ef71f067de247a61490019ea0757" + resolved "https://registry.npmjs.org/@types/ngeohash/-/ngeohash-0.6.4.tgz" integrity sha512-rr20mmx41OkWx4q5du2dv2sESR/6xH2tzScUQXwO8SiaQWa6PYTuan1nqBtA76FR9qkVfZY7nwQwZNC9StX/Ww== "@types/node@*": version "18.11.17" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.17.tgz#5c009e1d9c38f4a2a9d45c0b0c493fe6cdb4bcb5" + resolved "https://registry.npmjs.org/@types/node/-/node-18.11.17.tgz" integrity sha512-HJSUJmni4BeDHhfzn6nF0sVmd1SMezP7/4F0Lq+aXzmp2xm9O7WXrUtHW/CHlYVtZUbByEvWidHqRtcJXGF2Ng== "@types/node@^18.11.11": version "18.11.11" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.11.tgz#1d455ac0211549a8409d3cdb371cd55cc971e8dc" + resolved "https://registry.npmjs.org/@types/node/-/node-18.11.11.tgz" integrity sha512-KJ021B1nlQUBLopzZmPBVuGU9un7WJd/W4ya7Ih02B4Uwky5Nja0yGYav2EfYIk0RR2Q9oVhf60S2XR1BCWJ2g== "@types/offscreencanvas@^2019.6.4": version "2019.7.0" - resolved "https://registry.yarnpkg.com/@types/offscreencanvas/-/offscreencanvas-2019.7.0.tgz#e4a932069db47bb3eabeb0b305502d01586fa90d" + resolved "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.7.0.tgz" integrity sha512-PGcyveRIpL1XIqK8eBsmRBt76eFgtzuPiSTyKHZxnGemp2yzGzWpjYKAfK3wIMiU7eH+851yEpiuP8JZerTmWg== "@types/parse-json@^4.0.0": version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz" integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== "@types/prop-types@*", "@types/prop-types@^15.7.5": version "15.7.5" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" + resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz" integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== "@types/react-dom@^18.0.9": version "18.0.9" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.9.tgz#ffee5e4bfc2a2f8774b15496474f8e7fe8d0b504" + resolved "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.9.tgz" integrity sha512-qnVvHxASt/H7i+XG1U1xMiY5t+IHcPGUK7TDMDzom08xa7e86eCeKOiLZezwCKVxJn6NEiiy2ekgX8aQssjIKg== dependencies: "@types/react" "*" "@types/react-is@^16.7.1 || ^17.0.0": version "17.0.3" - resolved "https://registry.yarnpkg.com/@types/react-is/-/react-is-17.0.3.tgz#2d855ba575f2fc8d17ef9861f084acc4b90a137a" + resolved "https://registry.npmjs.org/@types/react-is/-/react-is-17.0.3.tgz" integrity sha512-aBTIWg1emtu95bLTLx0cpkxwGW3ueZv71nE2YFBpL8k/z5czEW8yYpOo8Dp+UUAFAtKwNaOsh/ioSeQnWlZcfw== dependencies: "@types/react" "*" "@types/react-transition-group@^4.4.5": version "4.4.5" - resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.5.tgz#aae20dcf773c5aa275d5b9f7cdbca638abc5e416" + resolved "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.5.tgz" integrity sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA== dependencies: "@types/react" "*" -"@types/react@*": - version "18.0.17" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.17.tgz#4583d9c322d67efe4b39a935d223edcc7050ccf4" - integrity sha512-38ETy4tL+rn4uQQi7mB81G7V1g0u2ryquNmsVIOKUAEIDK+3CUjZ6rSRpdvS99dNBnkLFL83qfmtLacGOTIhwQ== +"@types/react-window@^1.8.5": + version "1.8.5" + resolved "https://registry.npmjs.org/@types/react-window/-/react-window-1.8.5.tgz" + integrity sha512-V9q3CvhC9Jk9bWBOysPGaWy/Z0lxYcTXLtLipkt2cnRj1JOSFNF7wqGpkScSXMgBwC+fnVRg/7shwgddBG5ICw== dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" + "@types/react" "*" -"@types/react@^18.0.26": +"@types/react@*", "@types/react@^18.0.26": version "18.0.26" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.26.tgz#8ad59fc01fef8eaf5c74f4ea392621749f0b7917" + resolved "https://registry.npmjs.org/@types/react/-/react-18.0.26.tgz" integrity sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug== dependencies: "@types/prop-types" "*" @@ -1421,17 +1410,17 @@ "@types/scheduler@*": version "0.16.2" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" + resolved "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz" integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== "@types/semver@^7.3.12": version "7.3.13" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" + resolved "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz" integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== "@types/shapefile@^0.6.1": version "0.6.1" - resolved "https://registry.yarnpkg.com/@types/shapefile/-/shapefile-0.6.1.tgz#dc68544e0dae80d71229fc8e97282bb78fccebed" + resolved "https://registry.npmjs.org/@types/shapefile/-/shapefile-0.6.1.tgz" integrity sha512-3WqvyHZ5qjTWzrC92eDT+sJXHtq82YI1UReJ37p0lP7xWxAhlpCDGtoZWZOgKApS7YJES2pp/NnqdesYriHQTQ== dependencies: "@types/geojson" "*" @@ -1439,7 +1428,7 @@ "@typescript-eslint/eslint-plugin@^5.45.1": version "5.45.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.45.1.tgz#ee5b51405f6c9ee7e60e4006d68c69450d3b4536" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.45.1.tgz" integrity sha512-cOizjPlKEh0bXdFrBLTrI/J6B/QMlhwE9auOov53tgB+qMukH6/h8YAK/qw+QJGct/PTbdh2lytGyipxCcEtAw== dependencies: "@typescript-eslint/scope-manager" "5.45.1" @@ -1454,7 +1443,7 @@ "@typescript-eslint/parser@^5.45.1": version "5.45.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.45.1.tgz#6440ec283fa1373a12652d4e2fef4cb6e7b7e8c6" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.45.1.tgz" integrity sha512-JQ3Ep8bEOXu16q0ztsatp/iQfDCtvap7sp/DKo7DWltUquj5AfCOpX2zSzJ8YkAVnrQNqQ5R62PBz2UtrfmCkA== dependencies: "@typescript-eslint/scope-manager" "5.45.1" @@ -1464,7 +1453,7 @@ "@typescript-eslint/scope-manager@5.45.1": version "5.45.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.45.1.tgz#5b87d025eec7035d879b99c260f03be5c247883c" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.45.1.tgz" integrity sha512-D6fCileR6Iai7E35Eb4Kp+k0iW7F1wxXYrOhX/3dywsOJpJAQ20Fwgcf+P/TDtvQ7zcsWsrJaglaQWDhOMsspQ== dependencies: "@typescript-eslint/types" "5.45.1" @@ -1472,7 +1461,7 @@ "@typescript-eslint/type-utils@5.45.1": version "5.45.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.45.1.tgz#cb7d300c3c95802cea9f87c7f8be363cf8f8538c" + resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.45.1.tgz" integrity sha512-aosxFa+0CoYgYEl3aptLe1svP910DJq68nwEJzyQcrtRhC4BN0tJAvZGAe+D0tzjJmFXe+h4leSsiZhwBa2vrA== dependencies: "@typescript-eslint/typescript-estree" "5.45.1" @@ -1482,12 +1471,12 @@ "@typescript-eslint/types@5.45.1": version "5.45.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.45.1.tgz#8e1883041cee23f1bb7e1343b0139f97f6a17c14" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.45.1.tgz" integrity sha512-HEW3U0E5dLjUT+nk7b4lLbOherS1U4ap+b9pfu2oGsW3oPu7genRaY9dDv3nMczC1rbnRY2W/D7SN05wYoGImg== "@typescript-eslint/typescript-estree@5.45.1": version "5.45.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.45.1.tgz#b3dc37f0c4f0fe73e09917fc735e6f96eabf9ba4" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.45.1.tgz" integrity sha512-76NZpmpCzWVrrb0XmYEpbwOz/FENBi+5W7ipVXAsG3OoFrQKJMiaqsBMbvGRyLtPotGqUfcY7Ur8j0dksDJDng== dependencies: "@typescript-eslint/types" "5.45.1" @@ -1500,7 +1489,7 @@ "@typescript-eslint/utils@5.45.1": version "5.45.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.45.1.tgz#39610c98bde82c4792f2a858b29b7d0053448be2" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.45.1.tgz" integrity sha512-rlbC5VZz68+yjAzQBc4I7KDYVzWG2X/OrqoZrMahYq3u8FFtmQYc+9rovo/7wlJH5kugJ+jQXV5pJMnofGmPRw== dependencies: "@types/json-schema" "^7.0.9" @@ -1514,7 +1503,7 @@ "@typescript-eslint/visitor-keys@5.45.1": version "5.45.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.45.1.tgz#204428430ad6a830d24c5ac87c71366a1cfe1948" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.45.1.tgz" integrity sha512-cy9ln+6rmthYWjH9fmx+5FU/JDpjQb586++x2FZlveq7GdGuLLW9a2Jcst2TGekH82bXpfmRNSwP9tyEs6RjvQ== dependencies: "@typescript-eslint/types" "5.45.1" @@ -1522,7 +1511,7 @@ "@uiw/codemirror-extensions-basic-setup@4.11.6": version "4.11.6" - resolved "https://registry.yarnpkg.com/@uiw/codemirror-extensions-basic-setup/-/codemirror-extensions-basic-setup-4.11.6.tgz#a1fd89ac39a16ba750fff5e73e219ff32624aed7" + resolved "https://registry.npmjs.org/@uiw/codemirror-extensions-basic-setup/-/codemirror-extensions-basic-setup-4.11.6.tgz" integrity sha512-VW9tmkHvdD5u3osksBrDU/DQYNGcifK3qJPmmMKmje106pZTgIhvxABVhNCEJlDIrG5zYV5cqLtwb9TPbkd5qQ== dependencies: "@codemirror/autocomplete" "^6.0.0" @@ -1535,7 +1524,7 @@ "@uiw/react-codemirror@4.11.*": version "4.11.6" - resolved "https://registry.yarnpkg.com/@uiw/react-codemirror/-/react-codemirror-4.11.6.tgz#99267c5128912e7daf01c3bdcda70c1a7a7a9c68" + resolved "https://registry.npmjs.org/@uiw/react-codemirror/-/react-codemirror-4.11.6.tgz" integrity sha512-xPBOHtWE1MqHp8H/hTnOTxnz1ZQiQ2CHi1neiTpnjUxQUNv5mm5vTSgw2POxPh1AJqAVFuS6L1p3EZZPiVyehQ== dependencies: "@babel/runtime" "^7.18.6" @@ -1545,7 +1534,7 @@ "@vitejs/plugin-react@^3.0.0": version "3.0.0" - resolved "https://registry.yarnpkg.com/@vitejs/plugin-react/-/plugin-react-3.0.0.tgz#f36ee1b2ce958dd11ac63fdf746a3b27b0d258ed" + resolved "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-3.0.0.tgz" integrity sha512-1mvyPc0xYW5G8CHQvJIJXLoMjl5Ct3q2g5Y2s6Ccfgwm45y48LBvsla7az+GkkAtYikWQ4Lxqcsq5RHLcZgtNQ== dependencies: "@babel/core" "^7.20.5" @@ -1556,17 +1545,17 @@ acorn-jsx@^5.3.2: version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn@^8.8.0: version "8.8.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz" integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== ajv@^6.10.0, ajv@^6.12.4: version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" @@ -1576,33 +1565,33 @@ ajv@^6.10.0, ajv@^6.12.4: ansi-escapes@^4.3.0: version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== dependencies: type-fest "^0.21.3" ansi-regex@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-styles@^3.2.1: version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" ansi-styles@^4.1.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" anymatch@~3.1.2: version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== dependencies: normalize-path "^3.0.0" @@ -1610,12 +1599,12 @@ anymatch@~3.1.2: argparse@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== aria-query@^4.2.2: version "4.2.2" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b" + resolved "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz" integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA== dependencies: "@babel/runtime" "^7.10.2" @@ -1623,7 +1612,7 @@ aria-query@^4.2.2: array-includes@^3.1.4, array-includes@^3.1.5: version "3.1.5" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.5.tgz#2c320010db8d31031fd2a5f6b3bbd4b1aad31bdb" + resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz" integrity sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ== dependencies: call-bind "^1.0.2" @@ -1634,7 +1623,7 @@ array-includes@^3.1.4, array-includes@^3.1.5: array-includes@^3.1.6: version "3.1.6" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" + resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz" integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== dependencies: call-bind "^1.0.2" @@ -1645,17 +1634,17 @@ array-includes@^3.1.6: array-source@0.0: version "0.0.4" - resolved "https://registry.yarnpkg.com/array-source/-/array-source-0.0.4.tgz#a525df4a84b1376d27c677cd426a97c3882f8aca" + resolved "https://registry.npmjs.org/array-source/-/array-source-0.0.4.tgz" integrity sha512-frNdc+zBn80vipY+GdcJkLEbMWj3xmzArYApmUGxoiV8uAu/ygcs9icPdsGdA26h0MkHUMW6EN2piIvVx+M5Mw== array-union@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== array.prototype.flat@^1.2.5: version "1.3.0" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz#0b0c1567bf57b38b56b4c97b8aa72ab45e4adc7b" + resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz" integrity sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw== dependencies: call-bind "^1.0.2" @@ -1665,7 +1654,7 @@ array.prototype.flat@^1.2.5: array.prototype.flatmap@^1.3.1: version "1.3.1" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" + resolved "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz" integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== dependencies: call-bind "^1.0.2" @@ -1675,7 +1664,7 @@ array.prototype.flatmap@^1.3.1: array.prototype.foreach@^1.0.0: version "1.0.4" - resolved "https://registry.yarnpkg.com/array.prototype.foreach/-/array.prototype.foreach-1.0.4.tgz#ea248e0bc250fef587c369cc7102908a43d9f23c" + resolved "https://registry.npmjs.org/array.prototype.foreach/-/array.prototype.foreach-1.0.4.tgz" integrity sha512-OYqqGR/56CopyheXNwdlJvFtbSvf2Z9RGvL20X6GvAuKePJ76L/D46BqZn3bITd36QA2Ti7Iy0UwVJaD/YwXZA== dependencies: call-bind "^1.0.2" @@ -1687,7 +1676,7 @@ array.prototype.foreach@^1.0.0: array.prototype.tosorted@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz#ccf44738aa2b5ac56578ffda97c03fd3e23dd532" + resolved "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz" integrity sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ== dependencies: call-bind "^1.0.2" @@ -1698,34 +1687,34 @@ array.prototype.tosorted@^1.1.1: ast-types-flow@^0.0.7: version "0.0.7" - resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" + resolved "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz" integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag== attr-accept@^2.2.2: version "2.2.2" - resolved "https://registry.yarnpkg.com/attr-accept/-/attr-accept-2.2.2.tgz#646613809660110749e92f2c10833b70968d929b" + resolved "https://registry.npmjs.org/attr-accept/-/attr-accept-2.2.2.tgz" integrity sha512-7prDjvt9HmqiZ0cl5CRjtS84sEyhsHP2coDkaZKRKVfCDo9s7iw7ChVmar78Gu9pC4SoR/28wFu/G5JJhTnqEg== autosuggest-highlight@^3.1.1: version "3.3.4" - resolved "https://registry.yarnpkg.com/autosuggest-highlight/-/autosuggest-highlight-3.3.4.tgz#d71b575ba8eab40b5adba73df9244e9ba88cc387" + resolved "https://registry.npmjs.org/autosuggest-highlight/-/autosuggest-highlight-3.3.4.tgz" integrity sha512-j6RETBD2xYnrVcoV1S5R4t3WxOlWZKyDQjkwnggDPSjF5L4jV98ZltBpvPvbkM1HtoSe5o+bNrTHyjPbieGeYA== dependencies: remove-accents "^0.4.2" axe-core@^4.4.3: version "4.4.3" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.4.3.tgz#11c74d23d5013c0fa5d183796729bc3482bd2f6f" + resolved "https://registry.npmjs.org/axe-core/-/axe-core-4.4.3.tgz" integrity sha512-32+ub6kkdhhWick/UjvEwRchgoetXqTK14INLqbGm5U2TzBkBNF3nQtLYm8ovxSkQWArjEQvftCKryjZaATu3w== axobject-query@^2.2.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" + resolved "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz" integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== babel-plugin-macros@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1" + resolved "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz" integrity sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg== dependencies: "@babel/runtime" "^7.12.5" @@ -1734,22 +1723,22 @@ babel-plugin-macros@^3.1.0: balanced-match@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== big-integer@^1.6.16: version "1.6.51" - resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" + resolved "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz" integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== binary-extensions@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== brace-expansion@^1.1.7: version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" @@ -1757,14 +1746,14 @@ brace-expansion@^1.1.7: braces@^3.0.2, braces@~3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" broadcast-channel@^3.4.1: version "3.7.0" - resolved "https://registry.yarnpkg.com/broadcast-channel/-/broadcast-channel-3.7.0.tgz#2dfa5c7b4289547ac3f6705f9c00af8723889937" + resolved "https://registry.npmjs.org/broadcast-channel/-/broadcast-channel-3.7.0.tgz" integrity sha512-cIAKJXAxGJceNZGTZSBzMxzyOn72cVgPnKx4dc6LRjQgbaJUQqhy5rzL3zbMxkMWsGKkv2hSFkPRMEXfoMZ2Mg== dependencies: "@babel/runtime" "^7.7.2" @@ -1778,7 +1767,7 @@ broadcast-channel@^3.4.1: browserslist@^4.21.3: version "4.21.4" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz" integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw== dependencies: caniuse-lite "^1.0.30001400" @@ -1788,7 +1777,7 @@ browserslist@^4.21.3: call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== dependencies: function-bind "^1.1.1" @@ -1796,17 +1785,17 @@ call-bind@^1.0.0, call-bind@^1.0.2: callsites@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== caniuse-lite@^1.0.30001400: version "1.0.30001436" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001436.tgz#22d7cbdbbbb60cdc4ca1030ccd6dea9f5de4848b" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001436.tgz" integrity sha512-ZmWkKsnC2ifEPoWUvSAIGyOYwT+keAaaWPHiQ9DfMqS1t6tfuyFYoWR78TeZtznkEQ64+vGXH9cZrElwR2Mrxg== chalk@^2.0.0: version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: ansi-styles "^3.2.1" @@ -1815,7 +1804,7 @@ chalk@^2.0.0: chalk@^4.0.0, chalk@^4.1.1: version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" @@ -1823,7 +1812,7 @@ chalk@^4.0.0, chalk@^4.1.1: "chokidar@>=3.0.0 <4.0.0", chokidar@^3.5.1: version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== dependencies: anymatch "~3.1.2" @@ -1838,12 +1827,12 @@ chalk@^4.0.0, chalk@^4.1.1: clsx@^1.1.1, clsx@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" + resolved "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz" integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== codemirror@^6.0.0: version "6.0.1" - resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-6.0.1.tgz#62b91142d45904547ee3e0e0e4c1a79158035a29" + resolved "https://registry.npmjs.org/codemirror/-/codemirror-6.0.1.tgz" integrity sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg== dependencies: "@codemirror/autocomplete" "^6.0.0" @@ -1856,63 +1845,63 @@ codemirror@^6.0.0: color-convert@^1.9.0: version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" color-name@1.1.3: version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== color-name@~1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== commander@2: version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== commander@^8.0.0: version "8.3.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" + resolved "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz" integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== concat-map@0.0.1: version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== confusing-browser-globals@^1.0.10: version "1.0.11" - resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" + resolved "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz" integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== convert-source-map@^1.5.0, convert-source-map@^1.7.0: version "1.8.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz" integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== dependencies: safe-buffer "~5.1.1" core-js-pure@^3.20.2: version "3.24.1" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.24.1.tgz#8839dde5da545521bf282feb7dc6d0b425f39fd3" + resolved "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.24.1.tgz" integrity sha512-r1nJk41QLLPyozHUUPmILCEMtMw24NG4oWK6RbsDdjzQgg9ZvrUsPBj1MnG0wXXp1DCDU6j+wUvEmBSrtRbLXg== cosmiconfig@^7.0.0: version "7.0.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" + resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz" integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== dependencies: "@types/parse-json" "^4.0.0" @@ -1923,12 +1912,12 @@ cosmiconfig@^7.0.0: crelt@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/crelt/-/crelt-1.0.5.tgz#57c0d52af8c859e354bace1883eb2e1eb182bb94" + resolved "https://registry.npmjs.org/crelt/-/crelt-1.0.5.tgz" integrity sha512-+BO9wPPi+DWTDcNYhr/W90myha8ptzftZT+LwcmUbbok0rcP/fequmFYCw8NMoH7pkAZQzU78b3kYrlua5a9eA== cross-spawn@^7.0.2: version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== dependencies: path-key "^3.1.0" @@ -1937,68 +1926,68 @@ cross-spawn@^7.0.2: css-mediaquery@^0.1.2: version "0.1.2" - resolved "https://registry.yarnpkg.com/css-mediaquery/-/css-mediaquery-0.1.2.tgz#6a2c37344928618631c54bd33cedd301da18bea0" + resolved "https://registry.npmjs.org/css-mediaquery/-/css-mediaquery-0.1.2.tgz" integrity sha512-COtn4EROW5dBGlE/4PiKnh6rZpAPxDeFLaEEwt4i10jpDMFt2EhQGS79QmmrO+iKCHv0PU/HrOWEhijFd1x99Q== csstype@^3.0.2: version "3.1.0" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.0.tgz#4ddcac3718d787cf9df0d1b7d15033925c8f29f2" + resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz" integrity sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA== csstype@^3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9" + resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz" integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw== damerau-levenshtein@^1.0.8: version "1.0.8" - resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" + resolved "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz" integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== date-fns@^2.19.0: version "2.29.3" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.29.3.tgz#27402d2fc67eb442b511b70bbdf98e6411cd68a8" + resolved "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz" integrity sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA== dayjs@^1.11.7: version "1.11.7" - resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.7.tgz#4b296922642f70999544d1144a2c25730fce63e2" + resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.11.7.tgz" integrity sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ== debug@^2.6.9: version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" debug@^3.2.7: version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: ms "^2.1.1" debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" decode-uri-component@^0.2.2: version "0.2.2" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" + resolved "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz" integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== deep-is@^0.1.3: version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== define-properties@^1.1.3, define-properties@^1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" + resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz" integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== dependencies: has-property-descriptors "^1.0.0" @@ -2006,38 +1995,38 @@ define-properties@^1.1.3, define-properties@^1.1.4: dequal@^2.0.2: version "2.0.3" - resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" + resolved "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz" integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== detect-node@^2.0.4, detect-node@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" + resolved "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz" integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== dir-glob@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== dependencies: path-type "^4.0.0" doctrine@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz" integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== dependencies: esutils "^2.0.2" doctrine@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== dependencies: esutils "^2.0.2" dom-helpers@^5.0.1: version "5.2.1" - resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902" + resolved "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz" integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA== dependencies: "@babel/runtime" "^7.8.7" @@ -2045,29 +2034,29 @@ dom-helpers@^5.0.1: earcut@^2.2.4: version "2.2.4" - resolved "https://registry.yarnpkg.com/earcut/-/earcut-2.2.4.tgz#6d02fd4d68160c114825d06890a92ecaae60343a" + resolved "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz" integrity sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ== electron-to-chromium@^1.4.251: version "1.4.284" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz#61046d1e4cab3a25238f6bf7413795270f125592" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz" integrity sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA== emoji-regex@^9.2.2: version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== error-ex@^1.3.1: version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.2, es-abstract@^1.19.5: version "1.20.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.1.tgz#027292cd6ef44bd12b1913b828116f54787d1814" + resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz" integrity sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA== dependencies: call-bind "^1.0.2" @@ -2096,7 +2085,7 @@ es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.2, es-abstract@^1.19 es-abstract@^1.20.4: version "1.20.4" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.4.tgz#1d103f9f8d78d4cf0713edcd6d0ed1a46eed5861" + resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz" integrity sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA== dependencies: call-bind "^1.0.2" @@ -2126,19 +2115,19 @@ es-abstract@^1.20.4: es-array-method-boxes-properly@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" + resolved "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz" integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== es-shim-unscopables@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" + resolved "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz" integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== dependencies: has "^1.0.3" es-to-primitive@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== dependencies: is-callable "^1.1.4" @@ -2147,7 +2136,7 @@ es-to-primitive@^1.2.1: esbuild@^0.16.3: version "0.16.12" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.16.12.tgz#60850b9ad2f103f1c4316be42c34d5023f27378d" + resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.16.12.tgz" integrity sha512-eq5KcuXajf2OmivCl4e89AD3j8fbV+UTE9vczEzq5haA07U9oOTzBWlh3+6ZdjJR7Rz2QfWZ2uxZyhZxBgJ4+g== optionalDependencies: "@esbuild/android-arm" "0.16.12" @@ -2175,22 +2164,22 @@ esbuild@^0.16.3: escalade@^3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== escape-string-regexp@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== escape-string-regexp@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 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" + resolved "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz" integrity sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig== dependencies: confusing-browser-globals "^1.0.10" @@ -2200,14 +2189,14 @@ eslint-config-airbnb-base@^15.0.0: eslint-config-airbnb-typescript@^17.0.0: version "17.0.0" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-17.0.0.tgz#360dbcf810b26bbcf2ff716198465775f1c49a07" + resolved "https://registry.npmjs.org/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-17.0.0.tgz" integrity sha512-elNiuzD0kPAPTXjFWg+lE24nMdHMtuxgYoD30OyMD6yrW1AhFZPAg27VX7d3tzOErw+dgJTNWfRSDqEcXb4V0g== dependencies: eslint-config-airbnb-base "^15.0.0" eslint-config-airbnb@^19.0.4: version "19.0.4" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-19.0.4.tgz#84d4c3490ad70a0ffa571138ebcdea6ab085fdc3" + resolved "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-19.0.4.tgz" integrity sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew== dependencies: eslint-config-airbnb-base "^15.0.0" @@ -2216,17 +2205,17 @@ eslint-config-airbnb@^19.0.4: eslint-config-prettier@^8.5.0: version "8.5.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz#5a81680ec934beca02c7b1a61cf8ca34b66feab1" + resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz" integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q== eslint-import-resolver-alias@^1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-alias/-/eslint-import-resolver-alias-1.1.2.tgz#297062890e31e4d6651eb5eba9534e1f6e68fc97" + resolved "https://registry.npmjs.org/eslint-import-resolver-alias/-/eslint-import-resolver-alias-1.1.2.tgz" integrity sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w== eslint-import-resolver-node@^0.3.6: version "0.3.6" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" + resolved "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz" integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw== dependencies: debug "^3.2.7" @@ -2234,14 +2223,14 @@ eslint-import-resolver-node@^0.3.6: eslint-module-utils@^2.7.3: version "2.7.4" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz#4f3e41116aaf13a20792261e61d3a2e7e0583974" + resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz" integrity sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA== dependencies: debug "^3.2.7" eslint-plugin-import@^2.26.0: version "2.26.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz#f812dc47be4f2b72b478a021605a59fc6fe8b88b" + resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz" integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA== dependencies: array-includes "^3.1.4" @@ -2260,7 +2249,7 @@ eslint-plugin-import@^2.26.0: eslint-plugin-jsx-a11y@^6.6.1: version "6.6.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz#93736fc91b83fdc38cc8d115deedfc3091aef1ff" + resolved "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz" integrity sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q== dependencies: "@babel/runtime" "^7.18.9" @@ -2279,12 +2268,12 @@ eslint-plugin-jsx-a11y@^6.6.1: eslint-plugin-react-hooks@^4.6.0: version "4.6.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" + resolved "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz" integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== eslint-plugin-react@^7.31.11: version "7.31.11" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.31.11.tgz#011521d2b16dcf95795df688a4770b4eaab364c8" + resolved "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.11.tgz" integrity sha512-TTvq5JsT5v56wPa9OYHzsrOlHzKZKjV+aLgS+55NJP/cuzdiQPC7PfYoUjMoxlffKtvijpk7vA/jmuqRb9nohw== dependencies: array-includes "^3.1.6" @@ -2305,7 +2294,7 @@ eslint-plugin-react@^7.31.11: eslint-scope@^5.1.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== dependencies: esrecurse "^4.3.0" @@ -2313,7 +2302,7 @@ eslint-scope@^5.1.1: eslint-scope@^7.1.1: version "7.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz" integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== dependencies: esrecurse "^4.3.0" @@ -2321,24 +2310,24 @@ eslint-scope@^7.1.1: eslint-utils@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== dependencies: eslint-visitor-keys "^2.0.0" eslint-visitor-keys@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== eslint-visitor-keys@^3.3.0: version "3.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz" integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== eslint@^8.29.0: version "8.29.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.29.0.tgz#d74a88a20fb44d59c51851625bc4ee8d0ec43f87" + resolved "https://registry.npmjs.org/eslint/-/eslint-8.29.0.tgz" integrity sha512-isQ4EEiyUjZFbEKvEGJKKGBwXtvXX+zJbkVKCgTuB9t/+jUBcy8avhkEwWJecI15BkRkOYmvIM5ynbhRjEkoeg== dependencies: "@eslint/eslintrc" "^1.3.3" @@ -2383,7 +2372,7 @@ eslint@^8.29.0: espree@^9.4.0: version "9.4.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.1.tgz#51d6092615567a2c2cff7833445e37c28c0065bd" + resolved "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz" integrity sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg== dependencies: acorn "^8.8.0" @@ -2392,51 +2381,51 @@ espree@^9.4.0: esquery@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== dependencies: estraverse "^5.1.0" esrecurse@^4.3.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: estraverse "^5.2.0" estraverse@^4.1.1: version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== esutils@^2.0.2: version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== eventemitter3@^3.1.0: version "3.1.2" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" + resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz" integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== eventemitter3@^4.0.7: version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== 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" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-glob@^3.2.7, fast-glob@^3.2.9: version "3.2.11" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz" integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== dependencies: "@nodelib/fs.stat" "^2.0.2" @@ -2447,62 +2436,62 @@ fast-glob@^3.2.7, fast-glob@^3.2.9: fast-json-stable-stringify@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fast-levenshtein@^2.0.6: version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fastq@^1.6.0: version "1.13.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz" integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== dependencies: reusify "^1.0.4" file-entry-cache@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== dependencies: flat-cache "^3.0.4" file-selector@^0.5.0: version "0.5.0" - resolved "https://registry.yarnpkg.com/file-selector/-/file-selector-0.5.0.tgz#21c7126dc9728b31a2742d91cab20d55e67e4fb4" + resolved "https://registry.npmjs.org/file-selector/-/file-selector-0.5.0.tgz" integrity sha512-s8KNnmIDTBoD0p9uJ9uD0XY38SCeBOtj0UMXyQSLg1Ypfrfj8+dAvwsLjYQkQ2GjhVtp2HrnF5cJzMhBjfD8HA== dependencies: tslib "^2.0.3" file-source@0.6: version "0.6.1" - resolved "https://registry.yarnpkg.com/file-source/-/file-source-0.6.1.tgz#ae189d4993766b865a77f83adcf9b9a504cd37dc" + resolved "https://registry.npmjs.org/file-source/-/file-source-0.6.1.tgz" integrity sha512-1R1KneL7eTXmXfKxC10V/9NeGOdbsAXJ+lQ//fvvcHUgtaZcZDWNJNblxAoVOyV1cj45pOtUrR3vZTBwqcW8XA== dependencies: stream-source "0.3" fill-range@^7.0.1: version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== dependencies: to-regex-range "^5.0.1" filter-obj@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-1.1.0.tgz#9b311112bc6c6127a16e016c6c5d7f19e0805c5b" + resolved "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz" integrity sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ== find-root@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" + resolved "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz" integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== find-up@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== dependencies: locate-path "^6.0.0" @@ -2510,7 +2499,7 @@ find-up@^5.0.0: flat-cache@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== dependencies: flatted "^3.1.0" @@ -2518,27 +2507,27 @@ flat-cache@^3.0.4: flatted@^3.1.0: version "3.2.6" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.6.tgz#022e9218c637f9f3fc9c35ab9c9193f05add60b2" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz" integrity sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ== fs.realpath@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@~2.3.2: version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== function-bind@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== function.prototype.name@^1.1.5: version "1.1.5" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" + resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz" integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== dependencies: call-bind "^1.0.2" @@ -2548,17 +2537,17 @@ function.prototype.name@^1.1.5: functions-have-names@^1.2.2: version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== gensync@^1.0.0-beta.2: version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== geojson-rbush@3.x: version "3.2.0" - resolved "https://registry.yarnpkg.com/geojson-rbush/-/geojson-rbush-3.2.0.tgz#8b543cf0d56f99b78faf1da52bb66acad6dfc290" + resolved "https://registry.npmjs.org/geojson-rbush/-/geojson-rbush-3.2.0.tgz" integrity sha512-oVltQTXolxvsz1sZnutlSuLDEcQAKYC/uXt9zDzJJ6bu0W+baTI8LZBaTup5afzibEH4N3jlq2p+a152wlBJ7w== dependencies: "@turf/bbox" "*" @@ -2569,12 +2558,12 @@ geojson-rbush@3.x: geojson@^0.5.0: version "0.5.0" - resolved "https://registry.yarnpkg.com/geojson/-/geojson-0.5.0.tgz#3cd6c96399be65b56ee55596116fe9191ce701c0" + resolved "https://registry.npmjs.org/geojson/-/geojson-0.5.0.tgz" integrity sha512-/Bx5lEn+qRF4TfQ5aLu6NH+UKtvIv7Lhc487y/c8BdludrCTpiWf9wyI0RTyqg49MFefIAvFDuEi5Dfd/zgNxQ== get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: version "1.1.2" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.2.tgz#336975123e05ad0b7ba41f152ee4aadbea6cf598" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz" integrity sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA== dependencies: function-bind "^1.1.1" @@ -2583,7 +2572,7 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: get-intrinsic@^1.1.3: version "1.1.3" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz" integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== dependencies: function-bind "^1.1.1" @@ -2592,7 +2581,7 @@ get-intrinsic@^1.1.3: get-symbol-description@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz" integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== dependencies: call-bind "^1.0.2" @@ -2600,21 +2589,21 @@ get-symbol-description@^1.0.0: 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" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" glob-parent@^6.0.2: version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== dependencies: is-glob "^4.0.3" glob@^7.1.3: version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" @@ -2626,19 +2615,19 @@ glob@^7.1.3: globals@^11.1.0: version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globals@^13.15.0: version "13.17.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.17.0.tgz#902eb1e680a41da93945adbdcb5a9f361ba69bd4" + resolved "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz" integrity sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw== dependencies: type-fest "^0.20.2" globby@^11.1.0: version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== dependencies: array-union "^2.1.0" @@ -2650,77 +2639,77 @@ globby@^11.1.0: grapheme-splitter@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz" integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== 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" + resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== has-flag@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-property-descriptors@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz" integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== dependencies: get-intrinsic "^1.1.1" has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== has-tostringtag@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== dependencies: has-symbols "^1.0.2" has@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== dependencies: function-bind "^1.1.1" history@^5.1.0: version "5.3.0" - resolved "https://registry.yarnpkg.com/history/-/history-5.3.0.tgz#1548abaa245ba47992f063a0783db91ef201c73b" + resolved "https://registry.npmjs.org/history/-/history-5.3.0.tgz" integrity sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ== dependencies: "@babel/runtime" "^7.7.6" hoist-non-react-statics@^3.3.1: version "3.3.2" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + resolved "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz" integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== dependencies: react-is "^16.7.0" ignore@^5.2.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz" integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== immutable@^4.0.0: version "4.2.1" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.2.1.tgz#8a4025691018c560a40c67e43d698f816edc44d4" + resolved "https://registry.npmjs.org/immutable/-/immutable-4.2.1.tgz" integrity sha512-7WYV7Q5BTs0nlQm7tl92rDYYoyELLKHoDMBKhrxEoiV4mrfVdRz8hzPiYOzH7yWjzoVEamxRuAqhxL2PLRwZYQ== import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== dependencies: parent-module "^1.0.0" @@ -2728,17 +2717,17 @@ import-fresh@^3.0.0, import-fresh@^3.2.1: imurmurhash@^0.1.4: version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== inflection@~1.12.0: version "1.12.0" - resolved "https://registry.yarnpkg.com/inflection/-/inflection-1.12.0.tgz#a200935656d6f5f6bc4dc7502e1aecb703228416" + resolved "https://registry.npmjs.org/inflection/-/inflection-1.12.0.tgz" integrity sha512-lRy4DxuIFWXlJU7ed8UiTJOSTqStqYdEb4CEbtXfNbkdj3nH1L+reUWiE10VWcJS2yR7tge8Z74pJjtBjNwj0w== inflight@^1.0.4: version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" @@ -2746,12 +2735,12 @@ inflight@^1.0.4: inherits@2: version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== internal-slot@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" + resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz" integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== dependencies: get-intrinsic "^1.1.0" @@ -2760,26 +2749,26 @@ internal-slot@^1.0.3: is-arrayish@^0.2.1: version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== is-bigint@^1.0.1: version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== dependencies: has-bigints "^1.0.1" is-binary-path@~2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== dependencies: binary-extensions "^2.0.0" is-boolean-object@^1.1.0: version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== dependencies: call-bind "^1.0.2" @@ -2787,65 +2776,65 @@ is-boolean-object@^1.1.0: is-callable@^1.1.4, is-callable@^1.2.4: version "1.2.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" + resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz" integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== is-callable@^1.2.7: version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== is-core-module@^2.8.1, is-core-module@^2.9.0: version "2.10.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.10.0.tgz#9012ede0a91c69587e647514e1d5277019e728ed" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz" integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg== dependencies: has "^1.0.3" is-date-object@^1.0.1: version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== dependencies: has-tostringtag "^1.0.0" is-extglob@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" is-negative-zero@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz" integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== is-number-object@^1.0.4: version "1.0.7" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz" integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== dependencies: has-tostringtag "^1.0.0" is-number@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-path-inside@^3.0.3: version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== is-regex@^1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== dependencies: call-bind "^1.0.2" @@ -2853,99 +2842,99 @@ is-regex@^1.1.4: is-shared-array-buffer@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz" integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== dependencies: call-bind "^1.0.2" is-string@^1.0.5, is-string@^1.0.7: version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== dependencies: has-tostringtag "^1.0.0" is-symbol@^1.0.2, is-symbol@^1.0.3: version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== dependencies: has-symbols "^1.0.2" is-weakref@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== dependencies: call-bind "^1.0.2" isexe@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== js-sdsl@^4.1.4: version "4.2.0" - resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.2.0.tgz#278e98b7bea589b8baaf048c20aeb19eb7ad09d0" + resolved "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz" integrity sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ== js-sha3@0.8.0: version "0.8.0" - resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" + resolved "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz" integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" jsesc@^2.5.1: version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== json-parse-even-better-errors@^2.3.0: version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== json-schema-traverse@^0.4.1: version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== json5@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + resolved "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz" integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== dependencies: minimist "^1.2.0" json5@^2.2.1: version "2.2.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz" integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== jsonexport@^3.2.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/jsonexport/-/jsonexport-3.2.0.tgz#e5b4905ea1f6c8f8e0f62e4ceb26e4a31f1c93a8" + resolved "https://registry.npmjs.org/jsonexport/-/jsonexport-3.2.0.tgz" integrity sha512-GbO9ugb0YTZatPd/hqCGR0FSwbr82H6OzG04yzdrG7XOe4QZ0jhQ+kOsB29zqkzoYJLmLxbbrFiuwbQu891XnQ== "jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.2: version "3.3.3" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz#76b3e6e6cece5c69d49a5792c3d01bd1a0cdc7ea" + resolved "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz" integrity sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw== dependencies: array-includes "^3.1.5" @@ -2953,19 +2942,19 @@ jsonexport@^3.2.0: language-subtag-registry@~0.3.2: version "0.3.22" - resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" + resolved "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz" integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== language-tags@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" + resolved "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz" integrity sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ== dependencies: language-subtag-registry "~0.3.2" leaflet-arrowheads@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/leaflet-arrowheads/-/leaflet-arrowheads-1.4.0.tgz#2a92711c4ca89e6a63014f552cc0d6c67653a773" + resolved "https://registry.npmjs.org/leaflet-arrowheads/-/leaflet-arrowheads-1.4.0.tgz" integrity sha512-aIjsmoWe1VJXaGOpKpS6E8EzN2vpx3GGCNP/FxQteLVzAg5xMID7elf9hj/1CWLJo8FuGRjSvKkUQDj7mocrYA== dependencies: leaflet "^1.7.1" @@ -2973,36 +2962,36 @@ leaflet-arrowheads@^1.4.0: leaflet-easybutton@^2.4.0: version "2.4.0" - resolved "https://registry.yarnpkg.com/leaflet-easybutton/-/leaflet-easybutton-2.4.0.tgz#3ad8ad31c9cf6d5ca7a6a1988f82eed13ff2c1af" + resolved "https://registry.npmjs.org/leaflet-easybutton/-/leaflet-easybutton-2.4.0.tgz" integrity sha512-O+qsQq4zTF6ds8VClnytobTH/MKalctlPpiA8L+bNKHP14J3lgJpvEd/jSpq9mHTI6qOzRAvbQX6wS6qNwThvg== dependencies: leaflet "^1.0.1" leaflet-geometryutil@^0.10.0: version "0.10.1" - resolved "https://registry.yarnpkg.com/leaflet-geometryutil/-/leaflet-geometryutil-0.10.1.tgz#d9e7f662991dac71d234faf2db9c7641abf57523" + resolved "https://registry.npmjs.org/leaflet-geometryutil/-/leaflet-geometryutil-0.10.1.tgz" integrity sha512-xfyBxv0Ls2H45V4nrzn5ASi/qw0VXgEVAkbXZqQE2Qhs52fMqmWyl7egA5ht2xbyPHqjTN9ssr9lXrmXWE91yw== dependencies: leaflet "^1.6.0" leaflet-pixi-overlay@^1.8.2: version "1.8.2" - resolved "https://registry.yarnpkg.com/leaflet-pixi-overlay/-/leaflet-pixi-overlay-1.8.2.tgz#05e9dab736696560b4585583c9e3209a17e5c394" + resolved "https://registry.npmjs.org/leaflet-pixi-overlay/-/leaflet-pixi-overlay-1.8.2.tgz" integrity sha512-4xG9+yIndWuaEzpiInd6E5u9BqHpPdDRve4Dc647K5KlrYkC6HwiRtuRF2aCSFzognBQmESiS7O/2JlpjWexdA== leaflet.locatecontrol@^0.79.0: version "0.79.0" - resolved "https://registry.yarnpkg.com/leaflet.locatecontrol/-/leaflet.locatecontrol-0.79.0.tgz#0236b87c699a49f9ddb2f289941fbc0d3c3f8b62" + resolved "https://registry.npmjs.org/leaflet.locatecontrol/-/leaflet.locatecontrol-0.79.0.tgz" integrity sha512-h64QIHFkypYdr90lkSfjKvPvvk8/b8UnP3m9WuoWdp5p2AaCWC0T1NVwyuj4rd5U4fBW3tQt4ppmZ2LceHMIDg== leaflet@^1.0.1, leaflet@^1.6.0, leaflet@^1.7.1, leaflet@^1.9.3: version "1.9.3" - resolved "https://registry.yarnpkg.com/leaflet/-/leaflet-1.9.3.tgz#52ec436954964e2d3d39e0d433da4b2500d74414" + resolved "https://registry.npmjs.org/leaflet/-/leaflet-1.9.3.tgz" integrity sha512-iB2cR9vAkDOu5l3HAay2obcUHZ7xwUBBjph8+PGtmW/2lYhbLizWtG7nTeYht36WfOslixQF9D/uSIzhZgGMfQ== levn@^0.4.1: version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== dependencies: prelude-ls "^1.2.1" @@ -3010,73 +2999,78 @@ levn@^0.4.1: lines-and-columns@^1.1.6: version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== locate-path@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== dependencies: p-locate "^5.0.0" lodash.debounce@^4.0.8: version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + resolved "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz" integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== lodash.merge@^4.6.2: version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== lodash.pick@^4.4.0: version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" + resolved "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz" integrity sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q== lodash@4.17.21, lodash@~4.17.5: version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 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" + resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== dependencies: js-tokens "^3.0.0 || ^4.0.0" lru-cache@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== dependencies: yallist "^4.0.0" magic-string@^0.27.0: version "0.27.0" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.27.0.tgz#e4a3413b4bab6d98d2becffd48b4a257effdbbf3" + resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz" integrity sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA== dependencies: "@jridgewell/sourcemap-codec" "^1.4.13" match-sorter@^6.0.2: version "6.3.1" - resolved "https://registry.yarnpkg.com/match-sorter/-/match-sorter-6.3.1.tgz#98cc37fda756093424ddf3cbc62bfe9c75b92bda" + resolved "https://registry.npmjs.org/match-sorter/-/match-sorter-6.3.1.tgz" integrity sha512-mxybbo3pPNuA+ZuCUhm5bwNkXrJTbsk5VWbR5wiwz/GC6LIiegBGn2w3O08UG/jdbYLinw51fSQ5xNU1U3MgBw== dependencies: "@babel/runtime" "^7.12.5" remove-accents "0.4.2" +"memoize-one@>=3.1.1 <6": + version "5.2.1" + resolved "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz" + integrity sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q== + merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== micromatch@^4.0.4: version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== dependencies: braces "^3.0.2" @@ -3084,66 +3078,66 @@ micromatch@^4.0.4: microseconds@0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/microseconds/-/microseconds-0.2.0.tgz#233b25f50c62a65d861f978a4a4f8ec18797dc39" + resolved "https://registry.npmjs.org/microseconds/-/microseconds-0.2.0.tgz" integrity sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA== minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" minimist@^1.2.0, minimist@^1.2.6: version "1.2.6" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz" integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== ms@2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== ms@2.1.2: version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== ms@^2.1.1: version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== nano-time@1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/nano-time/-/nano-time-1.0.0.tgz#b0554f69ad89e22d0907f7a12b0993a5d96137ef" + resolved "https://registry.npmjs.org/nano-time/-/nano-time-1.0.0.tgz" integrity sha512-flnngywOoQ0lLQOTRNexn2gGSNuM9bKj9RZAWSzhQ+UJYaAFG9bac4DW9VHjUAzrOaIcajHybCTHe/bkvozQqA== dependencies: big-integer "^1.6.16" nanoid@^3.3.4: version "3.3.4" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" + resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz" integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== natural-compare-lite@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" + resolved "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz" integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== natural-compare@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== ngeohash@^0.6.3: version "0.6.3" - resolved "https://registry.yarnpkg.com/ngeohash/-/ngeohash-0.6.3.tgz#10b1e80be5488262ec95c56cf2dbb6c45fbdf245" + resolved "https://registry.npmjs.org/ngeohash/-/ngeohash-0.6.3.tgz" integrity sha512-kltF0cOxgx1AbmVzKxYZaoB0aj7mOxZeHaerEtQV0YaqnkXNq26WWqMmJ6lTqShYxVRWZ/mwvvTrNeOwdslWiw== node-polyglot@^2.2.2: version "2.4.2" - resolved "https://registry.yarnpkg.com/node-polyglot/-/node-polyglot-2.4.2.tgz#e4876e6710b70dc00b1351a9a68de4af47a5d61d" + resolved "https://registry.npmjs.org/node-polyglot/-/node-polyglot-2.4.2.tgz" integrity sha512-AgTVpQ32BQ5XPI+tFHJ9bCYxWwSLvtmEodX8ooftFhEuyCgBG6ijWulIVb7pH3THigtgvc9uLiPn0IO51KHpkg== dependencies: array.prototype.foreach "^1.0.0" @@ -3154,39 +3148,39 @@ node-polyglot@^2.2.2: node-releases@^2.0.6: version "2.0.6" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz" integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== npm-run-path@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== dependencies: path-key "^3.0.0" object-assign@^4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== object-inspect@^1.12.0, object-inspect@^1.12.2, object-inspect@^1.9.0: version "1.12.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz" integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== object-keys@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== object.assign@^4.1.2, object.assign@^4.1.3, object.assign@^4.1.4: version "4.1.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz" integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== dependencies: call-bind "^1.0.2" @@ -3196,7 +3190,7 @@ object.assign@^4.1.2, object.assign@^4.1.3, object.assign@^4.1.4: object.entries@^1.1.4, object.entries@^1.1.6: version "1.1.6" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.6.tgz#9737d0e5b8291edd340a3e3264bb8a3b00d5fa23" + resolved "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz" integrity sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w== dependencies: call-bind "^1.0.2" @@ -3205,7 +3199,7 @@ object.entries@^1.1.4, object.entries@^1.1.6: object.entries@^1.1.5: version "1.1.5" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.5.tgz#e1acdd17c4de2cd96d5a08487cfb9db84d881861" + resolved "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz" integrity sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g== dependencies: call-bind "^1.0.2" @@ -3214,7 +3208,7 @@ object.entries@^1.1.5: object.fromentries@^2.0.6: version "2.0.6" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73" + resolved "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz" integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg== dependencies: call-bind "^1.0.2" @@ -3223,7 +3217,7 @@ object.fromentries@^2.0.6: object.hasown@^1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.2.tgz#f919e21fad4eb38a57bc6345b3afd496515c3f92" + resolved "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz" integrity sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw== dependencies: define-properties "^1.1.4" @@ -3231,7 +3225,7 @@ object.hasown@^1.1.2: object.values@^1.1.5: version "1.1.5" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac" + resolved "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz" integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg== dependencies: call-bind "^1.0.2" @@ -3240,7 +3234,7 @@ object.values@^1.1.5: object.values@^1.1.6: version "1.1.6" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" + resolved "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz" integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== dependencies: call-bind "^1.0.2" @@ -3249,19 +3243,19 @@ object.values@^1.1.6: oblivious-set@1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/oblivious-set/-/oblivious-set-1.0.0.tgz#c8316f2c2fb6ff7b11b6158db3234c49f733c566" + resolved "https://registry.npmjs.org/oblivious-set/-/oblivious-set-1.0.0.tgz" integrity sha512-z+pI07qxo4c2CulUHCDf9lcqDlMSo72N/4rLUpRXf6fu+q8vjt8y0xS+Tlf8NTJDdTXHbdeO1n3MlbctwEoXZw== once@^1.3.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" optionator@^0.9.1: version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== dependencies: deep-is "^0.1.3" @@ -3273,28 +3267,28 @@ optionator@^0.9.1: p-limit@^3.0.2: version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: yocto-queue "^0.1.0" p-locate@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== dependencies: p-limit "^3.0.2" parent-module@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== dependencies: callsites "^3.0.0" parse-json@^5.0.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== dependencies: "@babel/code-frame" "^7.0.0" @@ -3304,27 +3298,27 @@ parse-json@^5.0.0: path-exists@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== path-is-absolute@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.7: version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== path-source@0.1: version "0.1.3" - resolved "https://registry.yarnpkg.com/path-source/-/path-source-0.1.3.tgz#03907c595480aa2596a15a901c44f745736e7a73" + resolved "https://registry.npmjs.org/path-source/-/path-source-0.1.3.tgz" integrity sha512-dWRHm5mIw5kw0cs3QZLNmpUWty48f5+5v9nWD2dw3Y0Hf+s01Ag8iJEWV0Sm0kocE8kK27DrIowha03e1YR+Qw== dependencies: array-source "0.0" @@ -3332,22 +3326,22 @@ path-source@0.1: path-type@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== picocolors@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== pixi.js@^6.5.8: version "6.5.8" - resolved "https://registry.yarnpkg.com/pixi.js/-/pixi.js-6.5.8.tgz#9c4962d9cc37f43b58b92fdc2c1ab62f1b1de12c" + resolved "https://registry.npmjs.org/pixi.js/-/pixi.js-6.5.8.tgz" integrity sha512-TAovIMCvKiWlonyAEbStOSq2+GZliRgs+Pqlavffa/D0Rmvmb78bytWRxgonGx1qkg7G8W7eIbF55tFP4a5Krw== dependencies: "@pixi/accessibility" "6.5.8" @@ -3389,14 +3383,14 @@ pixi.js@^6.5.8: polygon-clipping@0.15.3: version "0.15.3" - resolved "https://registry.yarnpkg.com/polygon-clipping/-/polygon-clipping-0.15.3.tgz#0215840438470ba2e9e6593625e4ea5c1087b4b7" + resolved "https://registry.npmjs.org/polygon-clipping/-/polygon-clipping-0.15.3.tgz" integrity sha512-ho0Xx5DLkgxRx/+n4O74XyJ67DcyN3Tu9bGYKsnTukGAW6ssnuak6Mwcyb1wHy9MZc9xsUWqIoiazkZB5weECg== dependencies: splaytree "^3.1.0" postcss@^8.4.20: version "8.4.20" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.20.tgz#64c52f509644cecad8567e949f4081d98349dc56" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.20.tgz" integrity sha512-6Q04AXR1212bXr5fh03u8aAwbLxAQNGQ/Q1LNa0VfOI06ZAlhPHtQvE4OIdpj4kLThXilalPnmDSOD65DcHt+g== dependencies: nanoid "^3.3.4" @@ -3405,22 +3399,22 @@ postcss@^8.4.20: prelude-ls@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== prettier@^2.8.0: version "2.8.0" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.0.tgz#c7df58393c9ba77d6fba3921ae01faf994fb9dc9" + resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.0.tgz" integrity sha512-9Lmg8hTFZKG0Asr/kW9Bp8tJjRVluO8EJQVfY2T7FMw9T5jy4I/Uvx0Rca/XWf50QQ1/SS48+6IJWnrb+2yemA== promise-polyfill@^8.2.0: version "8.2.3" - resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-8.2.3.tgz#2edc7e4b81aff781c88a0d577e5fe9da822107c6" + resolved "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.2.3.tgz" integrity sha512-Og0+jCRQetV84U8wVjMNccfGCnMQ9mGs9Hv78QFe+pSDD3gWTpz0y+1QCuxy5d/vBFuZ3iwP2eycAkvqIMPmWg== prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.0, prop-types@^15.7.2, prop-types@^15.8.1: version "15.8.1" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== dependencies: loose-envify "^1.4.0" @@ -3429,17 +3423,17 @@ prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.0, prop-types@^15.7.2, punycode@1.3.2: version "1.3.2" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + resolved "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz" integrity sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw== punycode@^2.1.0: version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== query-string@^7.1.1: version "7.1.3" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-7.1.3.tgz#a1cf90e994abb113a325804a972d98276fe02328" + resolved "https://registry.npmjs.org/query-string/-/query-string-7.1.3.tgz" integrity sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg== dependencies: decode-uri-component "^0.2.2" @@ -3449,22 +3443,22 @@ query-string@^7.1.1: querystring@0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + resolved "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz" integrity sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g== queue-microtask@^1.2.2: version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== quickselect@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/quickselect/-/quickselect-2.0.0.tgz#f19680a486a5eefb581303e023e98faaf25dd018" + resolved "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz" integrity sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw== ra-core@^4.6.2: version "4.6.2" - resolved "https://registry.yarnpkg.com/ra-core/-/ra-core-4.6.2.tgz#8f12ae2d5cb72952599e86208b389969d43c3710" + resolved "https://registry.npmjs.org/ra-core/-/ra-core-4.6.2.tgz" integrity sha512-Thp9QOffve+meV9FLCmNqUwZH9za2ik/gYvwKAeMdmVJSlSYxhDtPNasAIn73WgW8pQsJhAJ5UNczWKaDQORNg== dependencies: clsx "^1.1.1" @@ -3480,14 +3474,14 @@ ra-core@^4.6.2: ra-data-simple-rest@^4.6.2: version "4.6.2" - resolved "https://registry.yarnpkg.com/ra-data-simple-rest/-/ra-data-simple-rest-4.6.2.tgz#b05f83a9d4ed76774c9187d4fed8dd889f463d0f" + resolved "https://registry.npmjs.org/ra-data-simple-rest/-/ra-data-simple-rest-4.6.2.tgz" integrity sha512-8Z7W/QhuP4NxcEE6qQOYc3xge908KSKQu2J3k//ZK4uHqskPxQHBP2HQFm0Phcn3ba4GmX6CvygOSFyt9umGtw== dependencies: query-string "^7.1.1" ra-i18n-polyglot@^4.6.2: version "4.6.2" - resolved "https://registry.yarnpkg.com/ra-i18n-polyglot/-/ra-i18n-polyglot-4.6.2.tgz#2a62aa1408ae56ba564689ef8509dddbff0abd52" + resolved "https://registry.npmjs.org/ra-i18n-polyglot/-/ra-i18n-polyglot-4.6.2.tgz" integrity sha512-McI6Y5dVzS1EsFEodbfa9fCFbH8V/DMk8ZJQ/jbZ+xV9l1NjwjG+Y46KdiN+FxQuNGqDxs/14gZiY99yQc8e3Q== dependencies: node-polyglot "^2.2.2" @@ -3495,14 +3489,14 @@ ra-i18n-polyglot@^4.6.2: ra-language-english@^4.6.2: version "4.6.2" - resolved "https://registry.yarnpkg.com/ra-language-english/-/ra-language-english-4.6.2.tgz#365360571949b52904d8afd2dc443d37ebb76cae" + resolved "https://registry.npmjs.org/ra-language-english/-/ra-language-english-4.6.2.tgz" integrity sha512-lPmWtv/Y58ohnS4h30BzkA3N3VKNuMaFB3fDkoIQGXpB3qeyQgja8FNgxqIinn5scU5ocMJho2SUhdJObo2eIQ== dependencies: ra-core "^4.6.2" ra-ui-materialui@^4.6.2: version "4.6.2" - resolved "https://registry.yarnpkg.com/ra-ui-materialui/-/ra-ui-materialui-4.6.2.tgz#75104519c380e37b9022b0fcc8146c444574e77b" + resolved "https://registry.npmjs.org/ra-ui-materialui/-/ra-ui-materialui-4.6.2.tgz" integrity sha512-AB5y8ZS23PATNDploArb7tD2Y4++UI2Wdl1CW5G+YiMAZfKmIsxhkAYkRaBW+Gej2M/vXeWKbLC7LppJXVQuoA== dependencies: autosuggest-highlight "^3.1.1" @@ -3520,14 +3514,14 @@ ra-ui-materialui@^4.6.2: rbush@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/rbush/-/rbush-3.0.1.tgz#5fafa8a79b3b9afdfe5008403a720cc1de882ecf" + resolved "https://registry.npmjs.org/rbush/-/rbush-3.0.1.tgz" integrity sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w== dependencies: quickselect "^2.0.0" react-admin@^4.6.2: version "4.6.2" - resolved "https://registry.yarnpkg.com/react-admin/-/react-admin-4.6.2.tgz#10ae28a8f60dd77bf83b95339bf38086b6979be2" + resolved "https://registry.npmjs.org/react-admin/-/react-admin-4.6.2.tgz" integrity sha512-lCvbTPHDDBnbRDFzk3yQ1OqdePN8Cc6v8WBnsX0GXhSHcv8DosufUd4a7kKlPaqozg4xsf+oI0HxwFhDoCRJ3A== dependencies: "@emotion/react" "^11.4.1" @@ -3545,7 +3539,7 @@ react-admin@^4.6.2: react-dom@^18.2.0: version "18.2.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" + resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz" integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== dependencies: loose-envify "^1.1.0" @@ -3553,7 +3547,7 @@ react-dom@^18.2.0: react-dropzone@^12.0.4: version "12.1.0" - resolved "https://registry.yarnpkg.com/react-dropzone/-/react-dropzone-12.1.0.tgz#e097b37e9da6f9e324efc757b7434ebc6f3dc2cb" + resolved "https://registry.npmjs.org/react-dropzone/-/react-dropzone-12.1.0.tgz" integrity sha512-iBYHA1rbopIvtzokEX4QubO6qk5IF/x3BtKGu74rF2JkQDXnwC4uO/lHKpaw4PJIV6iIAYOlwLv2FpiGyqHNog== dependencies: attr-accept "^2.2.2" @@ -3562,48 +3556,48 @@ react-dropzone@^12.0.4: react-error-boundary@^3.1.4: version "3.1.4" - resolved "https://registry.yarnpkg.com/react-error-boundary/-/react-error-boundary-3.1.4.tgz#255db92b23197108757a888b01e5b729919abde0" + resolved "https://registry.npmjs.org/react-error-boundary/-/react-error-boundary-3.1.4.tgz" integrity sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA== dependencies: "@babel/runtime" "^7.12.5" react-hook-form@^7.40.0: version "7.41.0" - resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.41.0.tgz#cc0871f4784e7233ac8466300da557d622154414" + resolved "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.41.0.tgz" integrity sha512-u1cHOXujr+AsNBoeCtcCuRwPh87mXAgKtXqd3qTCBgNFYzVZLXjYgLcynORpAgqhe24r5scucR8+6gfWaXBtHQ== react-is@^16.13.1, react-is@^16.7.0: version "16.13.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== react-is@^17.0.2: version "17.0.2" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" + resolved "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== react-is@^18.2.0: version "18.2.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + resolved "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz" integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== react-leaflet-geoman-v2@^0.2.2: version "0.2.2" - resolved "https://registry.yarnpkg.com/react-leaflet-geoman-v2/-/react-leaflet-geoman-v2-0.2.2.tgz#d20258311fcde8d45a5ec11290840ba92c3d180b" + resolved "https://registry.npmjs.org/react-leaflet-geoman-v2/-/react-leaflet-geoman-v2-0.2.2.tgz" integrity sha512-BLcf3kd3enzo14By9Y0b4tbM2KfL0zRbZls32Gl3eXlhoNblBjcxiszY1OklF2ktI3QZggZvjSmGp00zC1QCFQ== dependencies: use-deep-compare-effect "^1.8.1" react-leaflet@^4.2.0: version "4.2.0" - resolved "https://registry.yarnpkg.com/react-leaflet/-/react-leaflet-4.2.0.tgz#6c2ee4b576209d9fe40e78006cfa37196c216eaa" + resolved "https://registry.npmjs.org/react-leaflet/-/react-leaflet-4.2.0.tgz" integrity sha512-9d8T7hzYrQA5GLe3vn0qtRLJzQKgjr080NKa45yArGwuSl1nH/6aK9gp7DeYdktpdO1vKGSUTGW5AsUS064X0A== dependencies: "@react-leaflet/core" "^2.1.0" react-query@^3.32.1: version "3.39.2" - resolved "https://registry.yarnpkg.com/react-query/-/react-query-3.39.2.tgz#9224140f0296f01e9664b78ed6e4f69a0cc9216f" + resolved "https://registry.npmjs.org/react-query/-/react-query-3.39.2.tgz" integrity sha512-F6hYDKyNgDQfQOuR1Rsp3VRzJnWHx6aRnnIZHMNGGgbL3SBgpZTDg8MQwmxOgpCAoqZJA+JSNCydF1xGJqKOCA== dependencies: "@babel/runtime" "^7.5.5" @@ -3612,12 +3606,12 @@ react-query@^3.32.1: react-refresh@^0.14.0: version "0.14.0" - resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.0.tgz#4e02825378a5f227079554d4284889354e5f553e" + resolved "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz" integrity sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ== react-router-dom@^6.1.0, react-router-dom@^6.6.1: version "6.6.1" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.6.1.tgz#1b96ec0b2cefa7319f1251383ea5b41295ee260d" + resolved "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.6.1.tgz" integrity sha512-u+8BKUtelStKbZD5UcY0NY90WOzktrkJJhyhNg7L0APn9t1qJNLowzrM9CHdpB6+rcPt6qQrlkIXsTvhuXP68g== dependencies: "@remix-run/router" "1.2.1" @@ -3625,14 +3619,14 @@ react-router-dom@^6.1.0, react-router-dom@^6.6.1: react-router@6.6.1, react-router@^6.1.0, react-router@^6.6.1: version "6.6.1" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.6.1.tgz#17de6cf285f2d1c9721a3afca999c984e5558854" + resolved "https://registry.npmjs.org/react-router/-/react-router-6.6.1.tgz" integrity sha512-YkvlYRusnI/IN0kDtosUCgxqHeulN5je+ew8W+iA1VvFhf86kA+JEI/X/8NqYcr11hCDDp906S+SGMpBheNeYQ== dependencies: "@remix-run/router" "1.2.1" react-transition-group@^4.4.1, react-transition-group@^4.4.5: version "4.4.5" - resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" + resolved "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz" integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g== dependencies: "@babel/runtime" "^7.5.5" @@ -3640,33 +3634,41 @@ react-transition-group@^4.4.1, react-transition-group@^4.4.5: loose-envify "^1.4.0" prop-types "^15.6.2" +react-window@^1.8.8: + version "1.8.8" + resolved "https://registry.npmjs.org/react-window/-/react-window-1.8.8.tgz" + integrity sha512-D4IiBeRtGXziZ1n0XklnFGu7h9gU684zepqyKzgPNzrsrk7xOCxni+TCckjg2Nr/DiaEEGVVmnhYSlT2rB47dQ== + dependencies: + "@babel/runtime" "^7.0.0" + memoize-one ">=3.1.1 <6" + react@^18.2.0: version "18.2.0" - resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" + resolved "https://registry.npmjs.org/react/-/react-18.2.0.tgz" integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== dependencies: loose-envify "^1.1.0" readdirp@~3.6.0: version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: picomatch "^2.2.1" regenerator-runtime@^0.13.11: version "0.13.11" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" + resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz" integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== regenerator-runtime@^0.13.4: version "0.13.9" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" + resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz" integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== regexp.prototype.flags@^1.4.3: version "1.4.3" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" + resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz" integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== dependencies: call-bind "^1.0.2" @@ -3675,27 +3677,27 @@ regexp.prototype.flags@^1.4.3: regexpp@^3.2.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== remove-accents@0.4.2: version "0.4.2" - resolved "https://registry.yarnpkg.com/remove-accents/-/remove-accents-0.4.2.tgz#0a43d3aaae1e80db919e07ae254b285d9e1c7bb5" + resolved "https://registry.npmjs.org/remove-accents/-/remove-accents-0.4.2.tgz" integrity sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA== remove-accents@^0.4.2: version "0.4.4" - resolved "https://registry.yarnpkg.com/remove-accents/-/remove-accents-0.4.4.tgz#73704abf7dae3764295d475d2b6afac4ea23e4d9" + resolved "https://registry.npmjs.org/remove-accents/-/remove-accents-0.4.4.tgz" integrity sha512-EpFcOa/ISetVHEXqu+VwI96KZBmq+a8LJnGkaeFw45epGlxIZz5dhEEnNZMsQXgORu3qaMoLX4qJCzOik6ytAg== resolve-from@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.22.1: version "1.22.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz" integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== dependencies: is-core-module "^2.9.0" @@ -3704,7 +3706,7 @@ resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.22.1: resolve@^2.0.0-next.3: version "2.0.0-next.4" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" + resolved "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz" integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ== dependencies: is-core-module "^2.9.0" @@ -3713,43 +3715,43 @@ resolve@^2.0.0-next.3: reusify@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== rifm@^0.12.1: version "0.12.1" - resolved "https://registry.yarnpkg.com/rifm/-/rifm-0.12.1.tgz#8fa77f45b7f1cda2a0068787ac821f0593967ac4" + resolved "https://registry.npmjs.org/rifm/-/rifm-0.12.1.tgz" integrity sha512-OGA1Bitg/dSJtI/c4dh90svzaUPt228kzFsUkJbtA2c964IqEAwWXeL9ZJi86xWv3j5SMqRvGULl7bA6cK0Bvg== rimraf@3.0.2, rimraf@^3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" rollup@^3.7.0: version "3.8.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.8.1.tgz#d4af8aca7c60d5b8c0281be79ea2fab6b41d458f" + resolved "https://registry.npmjs.org/rollup/-/rollup-3.8.1.tgz" integrity sha512-4yh9eMW7byOroYcN8DlF9P/2jCpu6txVIHjEqquQVSx7DI0RgyCCN3tjrcy4ra6yVtV336aLBB3v2AarYAxePQ== optionalDependencies: fsevents "~2.3.2" run-parallel@^1.1.9: version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== dependencies: queue-microtask "^1.2.2" safe-buffer@~5.1.1: version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== safe-regex-test@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz" integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== dependencies: call-bind "^1.0.2" @@ -3758,7 +3760,7 @@ safe-regex-test@^1.0.0: sass@^1.57.1: version "1.57.1" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.57.1.tgz#dfafd46eb3ab94817145e8825208ecf7281119b5" + resolved "https://registry.npmjs.org/sass/-/sass-1.57.1.tgz" integrity sha512-O2+LwLS79op7GI0xZ8fqzF7X2m/m8WFfI02dHOdsK5R2ECeS5F62zrwg/relM1rjSLy7Vd/DiMNIvPrQGsA0jw== dependencies: chokidar ">=3.0.0 <4.0.0" @@ -3767,26 +3769,26 @@ sass@^1.57.1: scheduler@^0.23.0: version "0.23.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" + resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz" integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== dependencies: loose-envify "^1.1.0" semver@^6.3.0: version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== semver@^7.3.4, semver@^7.3.7: version "7.3.7" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== dependencies: lru-cache "^6.0.0" shapefile@^0.6.6: version "0.6.6" - resolved "https://registry.yarnpkg.com/shapefile/-/shapefile-0.6.6.tgz#6fee152b9fb2b1c85f690285b692fb68c95a5f4f" + resolved "https://registry.npmjs.org/shapefile/-/shapefile-0.6.6.tgz" integrity sha512-rLGSWeK2ufzCVx05wYd+xrWnOOdSV7xNUW5/XFgx3Bc02hBkpMlrd2F1dDII7/jhWzv0MSyBFh5uJIy9hLdfuw== dependencies: array-source "0.0" @@ -3798,19 +3800,19 @@ shapefile@^0.6.6: shebang-command@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" shebang-regex@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== side-channel@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== dependencies: call-bind "^1.0.0" @@ -3819,47 +3821,47 @@ side-channel@^1.0.4: slash@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== slice-source@0.4: version "0.4.1" - resolved "https://registry.yarnpkg.com/slice-source/-/slice-source-0.4.1.tgz#40a57ac03c6668b5da200e05378e000bf2a61d79" + resolved "https://registry.npmjs.org/slice-source/-/slice-source-0.4.1.tgz" integrity sha512-YiuPbxpCj4hD9Qs06hGAz/OZhQ0eDuALN0lRWJez0eD/RevzKqGdUx1IOMUnXgpr+sXZLq3g8ERwbAH0bCb8vg== "source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== source-map@^0.5.7: version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== splaytree@^3.1.0: version "3.1.1" - resolved "https://registry.yarnpkg.com/splaytree/-/splaytree-3.1.1.tgz#e1bc8e68e64ef5a9d5f09d36e6d9f3621795a438" + resolved "https://registry.npmjs.org/splaytree/-/splaytree-3.1.1.tgz" integrity sha512-9FaQ18FF0+sZc/ieEeXHt+Jw2eSpUgUtTLDYB/HXKWvhYVyOc7h1hzkn5MMO3GPib9MmXG1go8+OsBBzs/NMww== split-on-first@^1.0.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" + resolved "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz" integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw== stream-source@0.3: version "0.3.5" - resolved "https://registry.yarnpkg.com/stream-source/-/stream-source-0.3.5.tgz#b97f52d0f8ea566db071db679b985403a31e0340" + resolved "https://registry.npmjs.org/stream-source/-/stream-source-0.3.5.tgz" integrity sha512-ZuEDP9sgjiAwUVoDModftG0JtYiLUV8K4ljYD1VyUMRWtbVf92474o4kuuul43iZ8t/hRuiDAx1dIJSvirrK/g== strict-uri-encode@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" + resolved "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz" integrity sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ== string.prototype.matchall@^4.0.8: version "4.0.8" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3" + resolved "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz" integrity sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg== dependencies: call-bind "^1.0.2" @@ -3873,7 +3875,7 @@ string.prototype.matchall@^4.0.8: string.prototype.trim@^1.2.4: version "1.2.7" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533" + resolved "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz" integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg== dependencies: call-bind "^1.0.2" @@ -3882,7 +3884,7 @@ string.prototype.trim@^1.2.4: string.prototype.trimend@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0" + resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz" integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog== dependencies: call-bind "^1.0.2" @@ -3891,7 +3893,7 @@ string.prototype.trimend@^1.0.5: string.prototype.trimstart@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef" + resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz" integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg== dependencies: call-bind "^1.0.2" @@ -3900,80 +3902,80 @@ string.prototype.trimstart@^1.0.5: strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" strip-bom@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== style-mod@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/style-mod/-/style-mod-4.0.0.tgz#97e7c2d68b592975f2ca7a63d0dd6fcacfe35a01" + resolved "https://registry.npmjs.org/style-mod/-/style-mod-4.0.0.tgz" integrity sha512-OPhtyEjyyN9x3nhPsu76f52yUGXiZcgvsrFVtvTkyGRQJ0XK+GPc6ov1z+lRpbeabka+MYEQxOYRnt5nF30aMw== stylis@4.1.3: version "4.1.3" - resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.1.3.tgz#fd2fbe79f5fed17c55269e16ed8da14c84d069f7" + resolved "https://registry.npmjs.org/stylis/-/stylis-4.1.3.tgz" integrity sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA== supports-color@^5.3.0: version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" supports-color@^7.1.0: version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== text-encoding@^0.6.4: version "0.6.4" - resolved "https://registry.yarnpkg.com/text-encoding/-/text-encoding-0.6.4.tgz#e399a982257a276dae428bb92845cb71bdc26d19" + resolved "https://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz" integrity sha512-hJnc6Qg3dWoOMkqP53F0dzRIgtmsAge09kxUIqGrEUS4qr5rWLckGYaQAVr+opBrIMRErGgy6f5aPnyPpyGRfg== text-table@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== tiny-invariant@^1.1.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.2.0.tgz#a1141f86b672a9148c72e978a19a73b9b94a15a9" + resolved "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.2.0.tgz" integrity sha512-1Uhn/aqw5C6RI4KejVeTg6mIS7IqxnLJ8Mv2tV5rTc0qWobay7pDUz6Wi392Cnc8ak1H0F2cjoRzb2/AW4+Fvg== to-fast-properties@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== 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" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" tsconfig-paths@^3.14.1: version "3.14.1" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" + resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz" integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== dependencies: "@types/json5" "^0.0.29" @@ -3983,46 +3985,46 @@ tsconfig-paths@^3.14.1: tslib@^1.8.1: version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== tslib@^2.0.3: version "2.4.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz" integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== tsutils@^3.21.0: version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== dependencies: tslib "^1.8.1" type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== dependencies: prelude-ls "^1.2.1" type-fest@^0.20.2: version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== type-fest@^0.21.3: version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== typescript@^4.9.3: version "4.9.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.3.tgz#3aea307c1746b8c384435d8ac36b8a2e580d85db" + resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz" integrity sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA== unbox-primitive@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== dependencies: call-bind "^1.0.2" @@ -4032,7 +4034,7 @@ unbox-primitive@^1.0.2: unload@2.2.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/unload/-/unload-2.2.0.tgz#ccc88fdcad345faa06a92039ec0f80b488880ef7" + resolved "https://registry.npmjs.org/unload/-/unload-2.2.0.tgz" integrity sha512-B60uB5TNBLtN6/LsgAf3udH9saB5p7gqJwcFfbOEZ8BcBHnGwCf6G/TGiEqkRAxX7zAFIUtzdrXQSdL3Q/wqNA== dependencies: "@babel/runtime" "^7.6.2" @@ -4040,7 +4042,7 @@ unload@2.2.0: update-browserslist-db@^1.0.9: version "1.0.10" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" + resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz" integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== dependencies: escalade "^3.1.1" @@ -4048,14 +4050,14 @@ update-browserslist-db@^1.0.9: uri-js@^4.2.2: version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" url@^0.11.0: version "0.11.0" - resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + resolved "https://registry.npmjs.org/url/-/url-0.11.0.tgz" integrity sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ== dependencies: punycode "1.3.2" @@ -4063,7 +4065,7 @@ url@^0.11.0: use-deep-compare-effect@^1.8.1: version "1.8.1" - resolved "https://registry.yarnpkg.com/use-deep-compare-effect/-/use-deep-compare-effect-1.8.1.tgz#ef0ce3b3271edb801da1ec23bf0754ef4189d0c6" + resolved "https://registry.npmjs.org/use-deep-compare-effect/-/use-deep-compare-effect-1.8.1.tgz" integrity sha512-kbeNVZ9Zkc0RFGpfMN3MNfaKNvcLNyxOAAd9O4CBZ+kCBXXscn9s/4I+8ytUER4RDpEYs5+O6Rs4PqiZ+rHr5Q== dependencies: "@babel/runtime" "^7.12.5" @@ -4071,12 +4073,12 @@ use-deep-compare-effect@^1.8.1: use-sync-external-store@1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" + resolved "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz" integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== vite-plugin-checker@^0.5.3: version "0.5.3" - resolved "https://registry.yarnpkg.com/vite-plugin-checker/-/vite-plugin-checker-0.5.3.tgz#41e61eb59142973997a4873fbcaeabb944704a8c" + resolved "https://registry.npmjs.org/vite-plugin-checker/-/vite-plugin-checker-0.5.3.tgz" integrity sha512-upPESKsQTypC2S7LPjxu9HknOymNSToAAHTYSFHb0at5GKLcN1QGMAR5Hb+7KqZclGMVniXAj7QdhZv+fTx83Q== dependencies: "@babel/code-frame" "^7.12.13" @@ -4097,7 +4099,7 @@ vite-plugin-checker@^0.5.3: vite@^4.0.3: version "4.0.3" - resolved "https://registry.yarnpkg.com/vite/-/vite-4.0.3.tgz#de27ad3f263a03ae9419cdc8bc07721eadcba8b9" + resolved "https://registry.npmjs.org/vite/-/vite-4.0.3.tgz" integrity sha512-HvuNv1RdE7deIfQb8mPk51UKjqptO/4RXZ5yXSAvurd5xOckwS/gg8h9Tky3uSbnjYTgUm0hVCet1cyhKd73ZA== dependencies: esbuild "^0.16.3" @@ -4109,12 +4111,12 @@ vite@^4.0.3: vscode-jsonrpc@6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz#108bdb09b4400705176b957ceca9e0880e9b6d4e" + resolved "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz" integrity sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg== vscode-languageclient@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/vscode-languageclient/-/vscode-languageclient-7.0.0.tgz#b505c22c21ffcf96e167799757fca07a6bad0fb2" + resolved "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-7.0.0.tgz" integrity sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg== dependencies: minimatch "^3.0.4" @@ -4123,7 +4125,7 @@ vscode-languageclient@^7.0.0: vscode-languageserver-protocol@3.16.0: version "3.16.0" - resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz#34135b61a9091db972188a07d337406a3cdbe821" + resolved "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz" integrity sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A== dependencies: vscode-jsonrpc "6.0.0" @@ -4131,41 +4133,41 @@ vscode-languageserver-protocol@3.16.0: vscode-languageserver-textdocument@^1.0.1: version "1.0.5" - resolved "https://registry.yarnpkg.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.5.tgz#838769940ece626176ec5d5a2aa2d0aa69f5095c" + resolved "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.5.tgz" integrity sha512-1ah7zyQjKBudnMiHbZmxz5bYNM9KKZYz+5VQLj+yr8l+9w3g+WAhCkUkWbhMEdC5u0ub4Ndiye/fDyS8ghIKQg== vscode-languageserver-types@3.16.0: version "3.16.0" - resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz#ecf393fc121ec6974b2da3efb3155644c514e247" + resolved "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz" integrity sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA== vscode-languageserver@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz#49b068c87cfcca93a356969d20f5d9bdd501c6b0" + resolved "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz" integrity sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw== dependencies: vscode-languageserver-protocol "3.16.0" vscode-uri@^3.0.2: version "3.0.3" - resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-3.0.3.tgz#a95c1ce2e6f41b7549f86279d19f47951e4f4d84" + resolved "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.3.tgz" integrity sha512-EcswR2S8bpR7fD0YPeS7r2xXExrScVMxg4MedACaWHEtx9ftCF/qHG1xGkolzTPcEmjTavCQgbVzHUIdTMzFGA== w3c-keyname@^2.2.4: version "2.2.6" - resolved "https://registry.yarnpkg.com/w3c-keyname/-/w3c-keyname-2.2.6.tgz#8412046116bc16c5d73d4e612053ea10a189c85f" + resolved "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.6.tgz" integrity sha512-f+fciywl1SJEniZHD6H+kUO8gOnwIr7f4ijKA6+ZvJFjeGi1r4PDLl53Ayud9O/rk64RqgoQine0feoeOU0kXg== warning@^4.0.3: version "4.0.3" - resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" + resolved "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz" integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== dependencies: loose-envify "^1.0.0" which-boxed-primitive@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== dependencies: is-bigint "^1.0.1" @@ -4176,39 +4178,39 @@ which-boxed-primitive@^1.0.2: which@^2.0.1: version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" word-wrap@^1.2.3: version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== wrappy@1: version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== yallist@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== yaml@^1.10.0: version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== yocto-queue@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== zustand@^4.1.5: version "4.1.5" - resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.1.5.tgz#7402b511f5b23ccb0f9ba6d20ae01ec817e16eb6" + resolved "https://registry.npmjs.org/zustand/-/zustand-4.1.5.tgz" integrity sha512-PsdRT8Bvq22Yyh1tvpgdHNE7OAeFKqJXUxtJvj1Ixw2B9O2YZ1M34ImQ+xyZah4wZrR4lENMoDUutKPpyXCQ/Q== dependencies: use-sync-external-store "1.2.0" diff --git a/server/model/src/api/collection.rs b/server/model/src/api/collection.rs index b3898bc6..3a42259b 100644 --- a/server/model/src/api/collection.rs +++ b/server/model/src/api/collection.rs @@ -112,6 +112,35 @@ impl ToText for FeatureCollection { } } +impl ToCollection for FeatureCollection { + fn to_collection(self, _name: Option, _enum_type: Option<&Type>) -> FeatureCollection { + FeatureCollection { + bbox: if self.bbox.is_some() { + self.bbox + } else { + self.clone() + .into_iter() + .flat_map(|x| x.to_single_vec()) + .collect::() + .get_bbox() + }, + features: self + .features + .into_iter() + .map(|feat| Feature { + bbox: if feat.bbox.is_some() { + feat.bbox + } else { + feat.clone().to_single_vec().get_bbox() + }, + ..feat + }) + .collect(), + ..self + } + } +} + impl ToPoracleVec for FeatureCollection { fn to_poracle_vec(self: FeatureCollection) -> Vec { let mut return_vec = vec![]; diff --git a/server/model/src/api/feature.rs b/server/model/src/api/feature.rs index ac1f9cfc..fb2e0578 100644 --- a/server/model/src/api/feature.rs +++ b/server/model/src/api/feature.rs @@ -156,8 +156,9 @@ impl ToCollection for Vec { features: self .into_iter() .enumerate() - .map(|(i, feat)| { - feat.ensure_first_last().ensure_properties( + .map(|(i, feat)| Feature { + bbox: feat.clone().to_single_vec().get_bbox(), + ..feat.ensure_first_last().ensure_properties( Some(if length > 1 { format!("{}_{}", name, i) } else { diff --git a/server/model/src/api/mod.rs b/server/model/src/api/mod.rs index d47503a2..16d16bb7 100644 --- a/server/model/src/api/mod.rs +++ b/server/model/src/api/mod.rs @@ -135,7 +135,7 @@ impl ToCollection for GeoFormats { GeoFormats::MultiStruct(area) => area.to_collection(name, enum_type), GeoFormats::Feature(area) => area.to_collection(name, enum_type), GeoFormats::FeatureVec(area) => area.to_collection(name, enum_type), - GeoFormats::FeatureCollection(area) => area, + GeoFormats::FeatureCollection(area) => area.to_collection(name, enum_type), GeoFormats::Poracle(area) => area.to_collection(name, enum_type), GeoFormats::Bound(area) => vec![ [area.min_lat, area.min_lon], From a7573504293e39c4bc75e79b76fe7730afe39dbd Mon Sep 17 00:00:00 2001 From: Derick M <58572875+TurtIeSocks@users.noreply.github.com> Date: Sun, 8 Jan 2023 20:41:31 -0500 Subject: [PATCH 02/10] add to admin panel side --- client/src/assets/global.d.ts | 3 -- .../src/pages/admin/geofence/CreateDialog.tsx | 45 ++++--------------- 2 files changed, 9 insertions(+), 39 deletions(-) delete mode 100644 client/src/assets/global.d.ts diff --git a/client/src/assets/global.d.ts b/client/src/assets/global.d.ts deleted file mode 100644 index 577c5bc9..00000000 --- a/client/src/assets/global.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -interface Window { - safari: { pushNotifications: object } -} diff --git a/client/src/pages/admin/geofence/CreateDialog.tsx b/client/src/pages/admin/geofence/CreateDialog.tsx index 0aed2501..9fe783db 100644 --- a/client/src/pages/admin/geofence/CreateDialog.tsx +++ b/client/src/pages/admin/geofence/CreateDialog.tsx @@ -1,51 +1,24 @@ import * as React from 'react' -import { - Button, - Dialog, - DialogActions, - DialogContent, - Link, -} from '@mui/material' -import { useRaStore } from '@hooks/useRaStore' +import { Button } from '@mui/material' import Add from '@mui/icons-material/Add' - -export function CreateDialog() { - const geofenceCreateDialog = useRaStore((state) => state.geofenceCreateDialog) - const setRaStore = useRaStore((state) => state.setRaStore) - - return ( - setRaStore('geofenceCreateDialog', false)} - > - - Creating a geofence from the admin panel is currently not supported. To - create one or import from a file, please go to the{' '} - map and open the "JSON Manager" from - the side panel. - - - - - - ) -} +import ImportWizard from '@components/dialogs/import/ImportWizard' +import { useStatic } from '@hooks/useStatic' export default function GeofenceCreateButton() { - const setRaStore = useRaStore((state) => state.setRaStore) - return ( <> - + ) } From e32596db84f3787d5ac78116932b37929ba683d5 Mon Sep 17 00:00:00 2001 From: Derick M <58572875+TurtIeSocks@users.noreply.github.com> Date: Sun, 8 Jan 2023 21:26:39 -0500 Subject: [PATCH 03/10] add mode to geofence table --- client/src/assets/constants.ts | 22 +++++++++++++ .../components/dialogs/import/AssignStep.tsx | 7 +++-- .../components/dialogs/import/ImportStep.tsx | 4 ++- .../src/components/drawer/manage/Instance.tsx | 2 +- .../src/pages/admin/geofence/GeofenceForm.tsx | 12 +++++++ .../src/pages/admin/geofence/GeofenceList.tsx | 1 + .../src/pages/admin/geofence/GeofenceShow.tsx | 1 + server/migration/src/lib.rs | 2 ++ .../src/m20221207_120629_create_geofence.rs | 1 + .../src/m20230108_204408_add_type_column.rs | 31 +++++++++++++++++++ server/model/src/db/geofence.rs | 18 +++++++++-- server/model/src/db/mod.rs | 13 ++++++-- 12 files changed, 106 insertions(+), 8 deletions(-) create mode 100644 server/migration/src/m20230108_204408_add_type_column.rs diff --git a/client/src/assets/constants.ts b/client/src/assets/constants.ts index 21c1fb86..bb14e7d6 100644 --- a/client/src/assets/constants.ts +++ b/client/src/assets/constants.ts @@ -61,6 +61,28 @@ export const ICON_MAP: Record = { Geojson: Map, } +export const RDM_FENCES = [ + 'AutoPokemon', + 'AutoQuest', + 'AutoTth', + 'PokemonIV', +] as const + +export const RDM_ROUTES = [ + 'CirclePokemon', + 'CircleSmartPokemon', + 'CircleRaid', + 'CircleSmartRaid', +] as const + +export const UNOWN_FENCES = ['AutoQuest'] as const + +export const UNOWN_ROUTES = [ + 'CirclePokemon', + 'CircleRaid', + 'ManualQuest', +] as const + export const COLORS = [ '#F0F8FF', '#FAEBD7', diff --git a/client/src/components/dialogs/import/AssignStep.tsx b/client/src/components/dialogs/import/AssignStep.tsx index fff02b22..6d7155b6 100644 --- a/client/src/components/dialogs/import/AssignStep.tsx +++ b/client/src/components/dialogs/import/AssignStep.tsx @@ -8,6 +8,7 @@ import { ClientProject } from '@assets/types' import { Checkbox, Divider, MenuItem, Select } from '@mui/material' import ReactWindow from '@components/ReactWindow' import { useStatic } from '@hooks/useStatic' +import { RDM_FENCES, UNOWN_FENCES } from '@assets/constants' const AssignStep = React.forwardRef< HTMLDivElement, @@ -20,6 +21,8 @@ const AssignStep = React.forwardRef< const { allProjects, allType, checked, nameProp } = useStatic( (s) => s.importWizard, ) + const scannerType = useStatic((s) => s.scannerType) + const projects = useStatic((s) => s.projects) const innerRef = React.useRef(null) @@ -128,7 +131,7 @@ const AssignStep = React.forwardRef< }) }} > - {['AutoQuest', 'PokemonIv', 'AutoPokemon', 'AutoTth'].map( + {(scannerType === 'rdm' ? RDM_FENCES : UNOWN_FENCES).map( (instanceType) => ( {instanceType} @@ -239,7 +242,7 @@ const AssignStep = React.forwardRef< }) }} > - {['AutoQuest', 'PokemonIv', 'AutoPokemon', 'AutoTth'].map( + {(scannerType === 'rdm' ? RDM_FENCES : UNOWN_FENCES).map( (instanceType) => ( {instanceType} diff --git a/client/src/components/dialogs/import/ImportStep.tsx b/client/src/components/dialogs/import/ImportStep.tsx index dff967d5..58ca28ed 100644 --- a/client/src/components/dialogs/import/ImportStep.tsx +++ b/client/src/components/dialogs/import/ImportStep.tsx @@ -8,6 +8,7 @@ import ShapeFile from '@components/drawer/manage/ShapeFile' import { Divider } from '@mui/material' import InstanceSelect from '@components/drawer/manage/Instance' import { useStatic } from '@hooks/useStatic' +import { RDM_FENCES, UNOWN_FENCES } from '@assets/constants' const ImportStep = React.forwardRef< HTMLDivElement, @@ -19,6 +20,7 @@ const ImportStep = React.forwardRef< } >(({ handleChange }, ref) => { const { scannerSelected } = useStatic((s) => s.importWizard) + const scannerType = useStatic((s) => s.scannerType) return ( @@ -64,7 +66,7 @@ const ImportStep = React.forwardRef< handleChange(geo, true)} - filters={['AutoTth', 'AutoQuest', 'PokemonIv', 'AutoPokemon']} + filters={scannerType === 'rdm' ? RDM_FENCES : UNOWN_FENCES} initialState={[...scannerSelected]} /> diff --git a/client/src/components/drawer/manage/Instance.tsx b/client/src/components/drawer/manage/Instance.tsx index 0ff254cc..e27c217f 100644 --- a/client/src/components/drawer/manage/Instance.tsx +++ b/client/src/components/drawer/manage/Instance.tsx @@ -49,7 +49,7 @@ export default function InstanceSelect({ endpoint: string setGeojson?: (collection: FeatureCollection) => void koji?: boolean - filters?: string[] + filters?: readonly string[] initialState?: string[] }) { const add = useShapes((s) => s.setters.add) diff --git a/client/src/pages/admin/geofence/GeofenceForm.tsx b/client/src/pages/admin/geofence/GeofenceForm.tsx index 9176e885..acbe792e 100644 --- a/client/src/pages/admin/geofence/GeofenceForm.tsx +++ b/client/src/pages/admin/geofence/GeofenceForm.tsx @@ -4,6 +4,7 @@ import { FormDataConsumer, ReferenceArrayInput, SelectArrayInput, + SelectInput, SimpleForm, SimpleFormIterator, TextInput, @@ -12,11 +13,22 @@ import { Box } from '@mui/material' import Map from '@components/Map' import { GeoJSON } from 'react-leaflet' import center from '@turf/center' +import { useStatic } from '@hooks/useStatic' +import { RDM_FENCES, UNOWN_FENCES } from '@assets/constants' export default function GeofenceForm() { + const scannerType = useStatic((s) => s.scannerType) return ( + ({ id: i, mode }), + )} + optionText="mode" + optionValue="mode" + /> {({ formData }) => { if (formData?.area?.geometry === undefined) return null diff --git a/client/src/pages/admin/geofence/GeofenceList.tsx b/client/src/pages/admin/geofence/GeofenceList.tsx index e40ac10d..08c2cb16 100644 --- a/client/src/pages/admin/geofence/GeofenceList.tsx +++ b/client/src/pages/admin/geofence/GeofenceList.tsx @@ -47,6 +47,7 @@ export default function GeofenceList() { > }> + diff --git a/client/src/pages/admin/geofence/GeofenceShow.tsx b/client/src/pages/admin/geofence/GeofenceShow.tsx index ac8aab33..05070397 100644 --- a/client/src/pages/admin/geofence/GeofenceShow.tsx +++ b/client/src/pages/admin/geofence/GeofenceShow.tsx @@ -33,6 +33,7 @@ export default function GeofenceShow() { Overview + Result<(), DbErr> { + manager + .alter_table( + Table::alter() + .table(Geofence::Table) + .add_column(ColumnDef::new(Geofence::Mode).string()) + .to_owned(), + ) + .await + } + + async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> { + manager + .alter_table( + Table::alter() + .table(Geofence::Table) + .drop_column(Geofence::Mode) + .to_owned(), + ) + .await + } +} diff --git a/server/model/src/db/geofence.rs b/server/model/src/db/geofence.rs index 1525b1aa..17f5b4b0 100644 --- a/server/model/src/db/geofence.rs +++ b/server/model/src/db/geofence.rs @@ -15,6 +15,7 @@ pub struct Model { pub id: u32, pub name: String, pub area: Json, + pub mode: Option, pub created_at: DateTimeUtc, pub updated_at: DateTimeUtc, } @@ -76,14 +77,15 @@ impl Query { Entity::find().all(db).await } - pub async fn get_all_no_fences(db: &DatabaseConnection) -> Result, DbErr> { + pub async fn get_all_no_fences(db: &DatabaseConnection) -> Result, DbErr> { Entity::find() .select_only() .column(Column::Id) .column(Column::Name) + .column(Column::Mode) .column(Column::CreatedAt) .column(Column::UpdatedAt) - .into_model::() + .into_model::() .all(db) .await } @@ -107,6 +109,7 @@ impl Query { ActiveModel { name: Set(new_project.name.to_owned()), area: Set(new_project.area), + mode: Set(new_project.mode), created_at: Set(Utc::now()), updated_at: Set(Utc::now()), ..Default::default() @@ -204,6 +207,15 @@ impl Query { if let Some(name) = name.as_str() { let mut feat = feat.clone(); feat.id = None; + let mode = if let Some(r#type) = feat.property("type") { + if let Some(r#type) = r#type.as_str() { + Some(r#type.to_string()) + } else { + None + } + } else { + None + }; let area = GeoJson::Feature(feat).to_json_value(); if let Some(area) = area.as_object() { let area = sea_orm::JsonValue::Object(area.to_owned()); @@ -213,6 +225,7 @@ impl Query { if let Some(entry) = is_update { Entity::update_many() .col_expr(Column::Area, Expr::value(area)) + .col_expr(Column::Mode, Expr::value(mode)) .filter(Column::Id.eq(entry.id)) .exec(conn) .await?; @@ -221,6 +234,7 @@ impl Query { inserts.push(ActiveModel { name: Set(name.to_string()), area: Set(area), + mode: Set(mode), created_at: Set(Utc::now()), updated_at: Set(Utc::now()), ..Default::default() diff --git a/server/model/src/db/mod.rs b/server/model/src/db/mod.rs index e8c0a746..e8ef5ee5 100644 --- a/server/model/src/db/mod.rs +++ b/server/model/src/db/mod.rs @@ -5,8 +5,8 @@ use super::*; use chrono::Utc; use futures::future; use sea_orm::{ - sea_query::Expr, DbBackend, DeleteResult, DeriveEntityModel, FromQueryResult, Order, - QueryOrder, QuerySelect, Set, Statement, + prelude::DateTimeUtc, sea_query::Expr, DbBackend, DeleteResult, DeriveEntityModel, + FromQueryResult, Order, QueryOrder, QuerySelect, Set, Statement, }; pub mod area; @@ -40,6 +40,15 @@ pub struct NameTypeId { pub r#type: self::sea_orm_active_enums::Type, } +#[derive(Serialize, Deserialize, FromQueryResult)] +pub struct NoFence { + pub id: u32, + pub name: String, + pub mode: String, + pub created_at: DateTimeUtc, + pub updated_at: DateTimeUtc, +} + #[derive(Debug, FromQueryResult)] pub struct AreaRef { pub id: u32, From 891a3cdaced5687d6787ae14c9faa2d5c10a6a9f Mon Sep 17 00:00:00 2001 From: Derick M <58572875+TurtIeSocks@users.noreply.github.com> Date: Sun, 8 Jan 2023 22:07:23 -0500 Subject: [PATCH 04/10] geofence_projects inserts --- server/model/src/db/geofence.rs | 76 ++++++++++++++++++++++++++------- 1 file changed, 61 insertions(+), 15 deletions(-) diff --git a/server/model/src/db/geofence.rs b/server/model/src/db/geofence.rs index 17f5b4b0..7b51b393 100644 --- a/server/model/src/db/geofence.rs +++ b/server/model/src/db/geofence.rs @@ -5,7 +5,7 @@ use crate::api::{EnsureProperties, ToCollection}; use super::{sea_orm_active_enums::Type, *}; use geojson::GeoJson; -use sea_orm::entity::prelude::*; +use sea_orm::{entity::prelude::*, InsertResult}; use serde::{Deserialize, Serialize}; #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] @@ -187,6 +187,24 @@ impl Query { } } + async fn insert_related_projects( + conn: &DatabaseConnection, + projects: Vec, + id: u32, + ) -> Result, DbErr> { + let projects: Vec = projects + .into_iter() + .map(|project| geofence_project::ActiveModel { + project_id: Set(project as u32), + geofence_id: Set(id), + ..Default::default() + }) + .collect(); + geofence_project::Entity::insert_many(projects) + .exec(conn) + .await + } + pub async fn save( conn: &DatabaseConnection, area: FeatureCollection, @@ -199,7 +217,7 @@ impl Query { .all(conn) .await?; - let mut inserts: Vec = vec![]; + let mut inserts = 0; let mut update_len = 0; for feat in area.into_iter() { @@ -216,6 +234,27 @@ impl Query { } else { None }; + let projects: Option> = + if let Some(projects) = feat.property("projects") { + if let Some(projects) = projects.as_array() { + Some( + projects + .iter() + .filter_map(|project| { + if let Some(project) = project.as_u64() { + Some(project) + } else { + None + } + }) + .collect(), + ) + } else { + None + } + } else { + None + }; let area = GeoJson::Feature(feat).to_json_value(); if let Some(area) = area.as_object() { let area = sea_orm::JsonValue::Object(area.to_owned()); @@ -223,32 +262,39 @@ impl Query { let is_update = existing.iter().find(|entry| entry.name == name); if let Some(entry) = is_update { - Entity::update_many() - .col_expr(Column::Area, Expr::value(area)) - .col_expr(Column::Mode, Expr::value(mode)) - .filter(Column::Id.eq(entry.id)) - .exec(conn) - .await?; + let old_model: Option = + Entity::find_by_id(entry.id).one(conn).await?; + let mut old_model: ActiveModel = old_model.unwrap().into(); + old_model.area = Set(area); + old_model.updated_at = Set(Utc::now()); + let model = old_model.update(conn).await?; + + if let Some(projects) = projects { + Query::insert_related_projects(conn, projects, model.id).await?; + }; update_len += 1; } else { - inserts.push(ActiveModel { + let model = ActiveModel { name: Set(name.to_string()), area: Set(area), mode: Set(mode), created_at: Set(Utc::now()), updated_at: Set(Utc::now()), ..Default::default() - }) + } + .insert(conn) + .await?; + + if let Some(projects) = projects { + Query::insert_related_projects(conn, projects, model.id).await?; + }; + inserts += 1; } } } } } - let insert_len = inserts.len(); - if !inserts.is_empty() { - Entity::insert_many(inserts).exec(conn).await?; - } - Ok((insert_len, update_len)) + Ok((inserts, update_len)) } pub async fn by_project( From 0784e8b697b4d9ada63c4d72e35af5bad56b5b3e Mon Sep 17 00:00:00 2001 From: Derick M <58572875+TurtIeSocks@users.noreply.github.com> Date: Mon, 9 Jan 2023 15:16:36 -0500 Subject: [PATCH 05/10] admin panel refining --- client/src/assets/types.ts | 1 + client/src/components/dialogs/Polygon.tsx | 13 +- .../components/dialogs/import/AssignStep.tsx | 89 ++++------ .../src/components/dialogs/import/Finish.tsx | 5 +- .../dialogs/import/ImportWizard.tsx | 2 +- .../src/components/dialogs/import/MiniMap.tsx | 6 +- .../components/drawer/inputs/ProjectsAC.tsx | 154 ++++++++++++++++++ client/src/hooks/useStatic.ts | 6 +- client/src/pages/admin/dataProvider.ts | 3 +- .../src/pages/admin/geofence/CreateDialog.tsx | 8 +- .../pages/admin/geofence/GeofenceCreate.tsx | 47 ++++++ .../src/pages/admin/geofence/GeofenceEdit.tsx | 23 ++- .../src/pages/admin/geofence/GeofenceForm.tsx | 16 +- client/src/pages/admin/index.tsx | 2 + client/src/pages/admin/inputs/CodeInput.tsx | 54 ++++++ .../src/pages/admin/project/ProjectEdit.tsx | 21 ++- .../src/pages/admin/project/ProjectForm.tsx | 14 +- server/api/src/lib.rs | 1 + server/api/src/private/admin/geofence.rs | 2 +- server/api/src/private/admin/mod.rs | 5 + server/api/src/private/admin/project.rs | 18 ++ server/model/src/db/geofence.rs | 3 + server/model/src/db/project.rs | 7 + 23 files changed, 391 insertions(+), 109 deletions(-) create mode 100644 client/src/components/drawer/inputs/ProjectsAC.tsx create mode 100644 client/src/pages/admin/geofence/GeofenceCreate.tsx create mode 100644 client/src/pages/admin/inputs/CodeInput.tsx diff --git a/client/src/assets/types.ts b/client/src/assets/types.ts index c2613c79..1a8e3488 100644 --- a/client/src/assets/types.ts +++ b/client/src/assets/types.ts @@ -110,6 +110,7 @@ export interface PopupProps { export interface KojiGeofence { id: number name: string + mode: string area: Feature } diff --git a/client/src/components/dialogs/Polygon.tsx b/client/src/components/dialogs/Polygon.tsx index 68f91196..cb048007 100644 --- a/client/src/components/dialogs/Polygon.tsx +++ b/client/src/components/dialogs/Polygon.tsx @@ -79,17 +79,14 @@ export default function ExportPolygon({ ;(async () => { try { const cleanCode = code.trim() - const remote = cleanCode.startsWith('http') - ? await fetch(cleanCode).then((res) => res.json()) - : cleanCode const parsed: ToConvert = - remote.startsWith('{') || remote.startsWith('[') + cleanCode.startsWith('{') || cleanCode.startsWith('[') ? JSON.parse( - remote.endsWith(',') - ? remote.substring(0, remote.length - 1) - : remote, + cleanCode.endsWith(',') + ? cleanCode.substring(0, cleanCode.length - 1) + : cleanCode, ) - : remote + : cleanCode const geojson = await convert( parsed, 'featureCollection', diff --git a/client/src/components/dialogs/import/AssignStep.tsx b/client/src/components/dialogs/import/AssignStep.tsx index 6d7155b6..14afa2b1 100644 --- a/client/src/components/dialogs/import/AssignStep.tsx +++ b/client/src/components/dialogs/import/AssignStep.tsx @@ -9,6 +9,7 @@ import { Checkbox, Divider, MenuItem, Select } from '@mui/material' import ReactWindow from '@components/ReactWindow' import { useStatic } from '@hooks/useStatic' import { RDM_FENCES, UNOWN_FENCES } from '@assets/constants' +import ProjectsAc from '@components/drawer/inputs/ProjectsAC' const AssignStep = React.forwardRef< HTMLDivElement, @@ -23,23 +24,24 @@ const AssignStep = React.forwardRef< ) const scannerType = useStatic((s) => s.scannerType) - const projects = useStatic((s) => s.projects) - const innerRef = React.useRef(null) React.useEffect(() => { fetch('/internal/admin/project/all') .then((res) => res.json()) - .then((data) => - useStatic.setState({ - projects: data.data.map( - (project: Omit) => ({ - ...project, - related: [], - }), + .then((data) => { + return useStatic.setState({ + projects: Object.fromEntries( + data.data.map((project: Omit) => [ + project.id, + { + ...project, + related: [], + }, + ]), ), - }), - ) + }) + }) }, []) React.useEffect(() => { @@ -48,8 +50,8 @@ const AssignStep = React.forwardRef< ...prev.importWizard, checked: Object.fromEntries( geojson.features.map((feature) => [ - feature.properties?.name, - checked[feature.properties?.name] ?? true, + feature.id, + checked[feature.id || ''] ?? true, ]), ), }, @@ -68,6 +70,7 @@ const AssignStep = React.forwardRef< ), [nameProp], ) + return ( @@ -141,36 +144,27 @@ const AssignStep = React.forwardRef< - + /> @@ -187,11 +181,11 @@ const AssignStep = React.forwardRef< (feat) => feat.id === refFeature.id, ) if (!feature) return null - const isActive = - feature && checked[feature.properties?.name || ''] + const isActive = feature && checked[feature.id || ''] + return ( @@ -204,7 +198,7 @@ const AssignStep = React.forwardRef< ...prev.importWizard, checked: { ...prev.importWizard.checked, - [feature.properties?.name || '']: !isActive, + [feature.id as string]: !isActive, }, }, })) @@ -234,8 +228,7 @@ const AssignStep = React.forwardRef< ...geojson, features: [ ...geojson.features.filter( - (f) => - f.properties?.name !== feature.properties?.name, + (f) => f.id !== feature.id, ), newFeature, ], @@ -252,37 +245,27 @@ const AssignStep = React.forwardRef< - + /> ) diff --git a/client/src/components/dialogs/import/Finish.tsx b/client/src/components/dialogs/import/Finish.tsx index 0f3b0a12..8290ebf7 100644 --- a/client/src/components/dialogs/import/Finish.tsx +++ b/client/src/components/dialogs/import/Finish.tsx @@ -25,12 +25,13 @@ export default function FinishStep({ code, filtered, reset }: Props) { diff --git a/client/src/components/dialogs/import/ImportWizard.tsx b/client/src/components/dialogs/import/ImportWizard.tsx index e9b20b82..edecf182 100644 --- a/client/src/components/dialogs/import/ImportWizard.tsx +++ b/client/src/components/dialogs/import/ImportWizard.tsx @@ -123,7 +123,7 @@ export default function ImportWizard() { ? { ...safe, features: safe.features.filter( - (feat) => importWizard.checked[feat.properties?.name], + (feat) => importWizard.checked[feat.id || ''], ), } : safe diff --git a/client/src/components/dialogs/import/MiniMap.tsx b/client/src/components/dialogs/import/MiniMap.tsx index c5f067c7..c0a2b97b 100644 --- a/client/src/components/dialogs/import/MiniMap.tsx +++ b/client/src/components/dialogs/import/MiniMap.tsx @@ -51,10 +51,6 @@ export default function MiniMap({ filtered }: { filtered: FeatureCollection }) { { - const projectObj = Object.fromEntries( - useStatic.getState().projects.map((p) => [p.id, p.name]), - ) - if (layer instanceof L.Polygon && feature.properties) { layer.setStyle(feature.properties) } @@ -66,7 +62,7 @@ export default function MiniMap({ filtered }: { filtered: FeatureCollection }) { Projects:

${(feature?.properties?.projects || []) - ?.map((p: number) => projectObj[p]) + ?.map((p: number) => useStatic.getState().projects[p]) .join(', ')}

diff --git a/client/src/components/drawer/inputs/ProjectsAC.tsx b/client/src/components/drawer/inputs/ProjectsAC.tsx new file mode 100644 index 00000000..367fb3a3 --- /dev/null +++ b/client/src/components/drawer/inputs/ProjectsAC.tsx @@ -0,0 +1,154 @@ +import { KojiProject, KojiResponse } from '@assets/types' +import { useStatic } from '@hooks/useStatic' +import { + Autocomplete, + Checkbox, + CircularProgress, + TextField, + createFilterOptions, +} from '@mui/material' +import * as React from 'react' + +interface NewKojiProject extends KojiProject { + inputValue?: string +} + +const filter = createFilterOptions() + +export default function ProjectsAc({ + value, + setValue, +}: { + value: number[] + setValue: (value: number[]) => void +}) { + const projectObj = useStatic((s) => s.projects) + + const [projects, setProjects] = React.useState( + Object.values(projectObj), + ) + const [loading, setLoading] = React.useState(false) + + const saveProject = async (newProject: NewKojiProject) => { + const res = await fetch('/internal/admin/project', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + id: 0, + name: newProject.inputValue, + created_at: new Date(), + updated_at: new Date(), + }), + }) + const data: KojiResponse = await res.json() + return data.data + } + + const getOptions = async (search = '') => { + setLoading(true) + const res = await fetch(`/internal/admin/project/search?query=${search}`) + if (!res.ok) { + return + } + const json: KojiResponse = await res.json() + setProjects(json.data) + setLoading(false) + } + + return ( + projectObj[id])} + onChange={(_e, newValue) => { + const newProject = newValue.find( + (val) => typeof val === 'object' && val.id === 0, + ) + if (typeof newProject === 'object') { + saveProject(newProject).then((val) => { + const newProjects = Object.fromEntries( + [...Object.values(projectObj), val].map((project) => [ + project.id, + { ...project, related: [] }, + ]), + ) + setValue( + newValue.map((project) => { + return typeof project === 'string' + ? Object.values(newProjects).find( + (proj) => proj.name === project, + )?.id || val.id + : project.id || val.id + }), + ) + useStatic.setState({ projects: newProjects }) + }) + } else { + setValue( + newValue.map((val) => + typeof val === 'string' + ? Object.values(projectObj).find((proj) => proj.name === val) + ?.id || 0 + : val.id, + ), + ) + } + }} + onInputChange={(_e, newInputValue) => getOptions(newInputValue)} + renderInput={(params) => ( + + {loading ? ( + + ) : null} + {params.InputProps.endAdornment} + + ), + }} + helperText={ + Object.values(projectObj).length === 0 + ? 'No projects found, try creating a new one' + : undefined + } + /> + )} + options={projects} + getOptionLabel={(option) => + typeof option === 'string' ? option : option?.name + } + isOptionEqualToValue={(option, v) => option.name === v.name} + filterOptions={(options, params) => { + const filtered = filter(options, params) + const { inputValue } = params + const isExisting = projects.some((option) => inputValue === option.name) + if (inputValue !== '' && !isExisting) { + filtered.push({ + id: 0, + name: `Add "${inputValue}"`, + inputValue, + }) + } + return filtered + }} + renderOption={(props, option, { selected }) => { + return ( +
  • + + {option.name} +
  • + ) + }} + limitTags={1} + loading={loading} + sx={{ width: '80%', mx: 'auto' }} + size="small" + multiple + freeSolo + disableCloseOnSelect + /> + ) +} diff --git a/client/src/hooks/useStatic.ts b/client/src/hooks/useStatic.ts index acccaf1a..ea275604 100644 --- a/client/src/hooks/useStatic.ts +++ b/client/src/hooks/useStatic.ts @@ -33,12 +33,12 @@ export interface UseStatic { props: string[] customName: string modifier: 'capitalize' | 'lowercase' | 'uppercase' | 'none' - allProjects: string[] + allProjects: number[] allType: '' | 'AutoQuest' | 'PokemonIv' | 'AutoPokemon' | 'AutoTth' checked: Record scannerSelected: Set } - projects: ClientProject[] + projects: Record setStatic: < T extends keyof Omit< UseStatic, @@ -98,7 +98,7 @@ export const useStatic = create((set, get) => ({ checked: {}, scannerSelected: new Set(), }, - projects: [], + projects: {}, setStatic: (key, newValue) => { set((state) => ({ [key]: typeof newValue === 'function' ? newValue(state[key]) : newValue, diff --git a/client/src/pages/admin/dataProvider.ts b/client/src/pages/admin/dataProvider.ts index e85c3a5f..ba02b807 100644 --- a/client/src/pages/admin/dataProvider.ts +++ b/client/src/pages/admin/dataProvider.ts @@ -81,6 +81,7 @@ export const dataProvider: typeof defaultProvider = { ? { data: { ...json.data[0], + area: JSON.stringify(json.data[0].area), properties: Object.entries( json.data?.[0]?.area?.properties || {}, ).map(([key, value]) => ({ @@ -105,8 +106,8 @@ export const dataProvider: typeof defaultProvider = { const { json } = await httpClient(`/internal/admin/${resource}`, { method: 'POST', body: JSON.stringify({ + ...params.data, id: 0, - name: params.data.name, created_at: params.data.created_at || new Date(), updated_at: params.data.updated_at || new Date(), }), diff --git a/client/src/pages/admin/geofence/CreateDialog.tsx b/client/src/pages/admin/geofence/CreateDialog.tsx index 9fe783db..d8f18779 100644 --- a/client/src/pages/admin/geofence/CreateDialog.tsx +++ b/client/src/pages/admin/geofence/CreateDialog.tsx @@ -4,7 +4,11 @@ import Add from '@mui/icons-material/Add' import ImportWizard from '@components/dialogs/import/ImportWizard' import { useStatic } from '@hooks/useStatic' -export default function GeofenceCreateButton() { +export default function GeofenceCreateButton({ + children, +}: { + children?: string +}) { return ( <> diff --git a/client/src/pages/admin/geofence/GeofenceCreate.tsx b/client/src/pages/admin/geofence/GeofenceCreate.tsx new file mode 100644 index 00000000..ea44a385 --- /dev/null +++ b/client/src/pages/admin/geofence/GeofenceCreate.tsx @@ -0,0 +1,47 @@ +import * as React from 'react' +import { Create, SimpleForm, useNotify, useRedirect } from 'react-admin' +import { Divider, Typography } from '@mui/material' +import { ClientGeofence } from '@assets/types' + +import GeofenceCreateButton from './CreateDialog' +import GeofenceForm from './GeofenceForm' + +const transformPayload = async (geofence: ClientGeofence) => { + return { + id: 0, + name: geofence.name, + mode: geofence.mode, + area: { + ...JSON.parse(geofence.area.toString()), + properties: Object.fromEntries( + geofence.properties.map((p) => [p.key, p.value]), + ), + }, + } +} + +export default function GeofenceCreate() { + const notify = useNotify() + const redirect = useRedirect() + + const onSuccess = () => { + notify('Geofence created successfully') + redirect('list', 'geofence') + } + + return ( + + + Create Multiple + Open the Wizard + + Create One + + + + ) +} diff --git a/client/src/pages/admin/geofence/GeofenceEdit.tsx b/client/src/pages/admin/geofence/GeofenceEdit.tsx index af82d772..0c71cf94 100644 --- a/client/src/pages/admin/geofence/GeofenceEdit.tsx +++ b/client/src/pages/admin/geofence/GeofenceEdit.tsx @@ -1,7 +1,11 @@ import * as React from 'react' -import { Edit } from 'react-admin' +import { + Edit, + ReferenceArrayInput, + SelectArrayInput, + SimpleForm, +} from 'react-admin' -// import { KojiGeofence } from '@assets/types' import { ClientGeofence } from '@assets/types' import GeofenceForm from './GeofenceForm' @@ -19,7 +23,9 @@ const transformPayload = async (geofence: ClientGeofence) => { return { ...geofence, area: { - ...geofence.area, + ...(typeof geofence.area === 'string' + ? JSON.parse(geofence.area) + : geofence.area), properties: Object.fromEntries( geofence.properties.map((p) => [p.key, p.value]), ), @@ -30,7 +36,16 @@ const transformPayload = async (geofence: ClientGeofence) => { export default function GeofenceEdit() { return ( - + + + + + + ) } diff --git a/client/src/pages/admin/geofence/GeofenceForm.tsx b/client/src/pages/admin/geofence/GeofenceForm.tsx index acbe792e..c7c4316c 100644 --- a/client/src/pages/admin/geofence/GeofenceForm.tsx +++ b/client/src/pages/admin/geofence/GeofenceForm.tsx @@ -2,10 +2,7 @@ import * as React from 'react' import { ArrayInput, FormDataConsumer, - ReferenceArrayInput, - SelectArrayInput, SelectInput, - SimpleForm, SimpleFormIterator, TextInput, } from 'react-admin' @@ -15,11 +12,12 @@ import { GeoJSON } from 'react-leaflet' import center from '@turf/center' import { useStatic } from '@hooks/useStatic' import { RDM_FENCES, UNOWN_FENCES } from '@assets/constants' +import CodeInput from '../inputs/CodeInput' export default function GeofenceForm() { const scannerType = useStatic((s) => s.scannerType) return ( - + <> - - - - + + ) } diff --git a/client/src/pages/admin/index.tsx b/client/src/pages/admin/index.tsx index 60325fa7..13a04c7e 100644 --- a/client/src/pages/admin/index.tsx +++ b/client/src/pages/admin/index.tsx @@ -13,6 +13,7 @@ import ProjectList from './project/ProjectList' import ProjectEdit from './project/ProjectEdit' import ProjectShow from './project/ProjectShow' import ProjectCreate from './project/ProjectCreate' +import GeofenceCreate from './geofence/GeofenceCreate' export default function AdminPanel() { const theme = useTheme() @@ -34,6 +35,7 @@ export default function AdminPanel() { list={GeofenceList} edit={GeofenceEdit} show={GeofenceShow} + create={GeofenceCreate} /> s.simplifyPolygons) + + return ( + <> + {label} + { + field.onChange({ target: { value: newCode } }) + }} + onBlurCapture={async () => { + const geofence = safeParse(field.value) + if (!geofence.error) { + await convert(geofence.value, 'feature', simplifyPolygons).then( + (res) => { + if (Array.isArray(res)) { + setError( + 'Warning, multiple features were found, you should only assign one feature!', + ) + } else { + field.onChange({ + target: { value: JSON.stringify(res, null, 2) }, + }) + setError('') + } + }, + ) + } + }} + /> + {error} + + ) +} diff --git a/client/src/pages/admin/project/ProjectEdit.tsx b/client/src/pages/admin/project/ProjectEdit.tsx index 96c76b94..3a7103a4 100644 --- a/client/src/pages/admin/project/ProjectEdit.tsx +++ b/client/src/pages/admin/project/ProjectEdit.tsx @@ -1,10 +1,14 @@ import * as React from 'react' -import { Edit } from 'react-admin' +import { + Edit, + ReferenceArrayInput, + SelectArrayInput, + SimpleForm, + TextInput, +} from 'react-admin' import { ClientProject } from '@assets/types' -import ProjectForm from './ProjectForm' - const transformPayload = async (project: ClientProject) => { if (Array.isArray(project.related)) { await fetch(`/internal/admin/geofence_project/project/${project.id}`, { @@ -21,7 +25,16 @@ const transformPayload = async (project: ClientProject) => { export default function ProjectEdit() { return ( - + + + + + + ) } diff --git a/client/src/pages/admin/project/ProjectForm.tsx b/client/src/pages/admin/project/ProjectForm.tsx index 73aca227..c3063834 100644 --- a/client/src/pages/admin/project/ProjectForm.tsx +++ b/client/src/pages/admin/project/ProjectForm.tsx @@ -1,22 +1,10 @@ import * as React from 'react' -import { - ReferenceArrayInput, - SelectArrayInput, - SimpleForm, - TextInput, -} from 'react-admin' +import { SimpleForm, TextInput } from 'react-admin' export default function ProjectForm() { return ( - - - ) } diff --git a/server/api/src/lib.rs b/server/api/src/lib.rs index d27bd846..b101cfb5 100644 --- a/server/api/src/lib.rs +++ b/server/api/src/lib.rs @@ -146,6 +146,7 @@ pub async fn main() -> io::Result<()> { .service(private::admin::geofence::update) .service(private::admin::geofence::remove) .service(private::admin::project::get_all) + .service(private::admin::project::search) .service(private::admin::project::paginate) .service(private::admin::project::get_one) .service(private::admin::project::create) diff --git a/server/api/src/private/admin/geofence.rs b/server/api/src/private/admin/geofence.rs index 8a2cfd53..b34b1b22 100644 --- a/server/api/src/private/admin/geofence.rs +++ b/server/api/src/private/admin/geofence.rs @@ -83,7 +83,7 @@ async fn get_one( })) } -#[post("/geofence/{id}")] +#[post("/geofence")] async fn create( conn: web::Data, // id: actix_web::web::Path, diff --git a/server/api/src/private/admin/mod.rs b/server/api/src/private/admin/mod.rs index d46e71b2..9a24bddd 100644 --- a/server/api/src/private/admin/mod.rs +++ b/server/api/src/private/admin/mod.rs @@ -15,6 +15,11 @@ pub struct AdminReq { pub order: Option, } +#[derive(Debug, Deserialize)] +pub struct Search { + pub query: String, +} + pub struct AdminReqParsed { pub page: usize, pub per_page: usize, diff --git a/server/api/src/private/admin/project.rs b/server/api/src/private/admin/project.rs index 9d203401..80d461ea 100644 --- a/server/api/src/private/admin/project.rs +++ b/server/api/src/private/admin/project.rs @@ -143,3 +143,21 @@ async fn remove( status_code: 200, })) } + +#[get("/project/search")] +async fn search(conn: web::Data, url: web::Query) -> Result { + let url = url.into_inner(); + + println!("Search {:?}", url.query); + let projects = project::Query::search(&conn.koji_db, url.query) + .await + .map_err(actix_web::error::ErrorInternalServerError)?; + + Ok(HttpResponse::Ok().json(Response { + data: Some(json!(projects)), + message: "Success".to_string(), + status: "ok".to_string(), + stats: None, + status_code: 200, + })) +} diff --git a/server/model/src/db/geofence.rs b/server/model/src/db/geofence.rs index 7b51b393..17c49e72 100644 --- a/server/model/src/db/geofence.rs +++ b/server/model/src/db/geofence.rs @@ -255,6 +255,9 @@ impl Query { } else { None }; + feat.remove_property("name"); + feat.remove_property("type"); + feat.remove_property("projects"); let area = GeoJson::Feature(feat).to_json_value(); if let Some(area) = area.as_object() { let area = sea_orm::JsonValue::Object(area.to_owned()); diff --git a/server/model/src/db/project.rs b/server/model/src/db/project.rs index c08fff89..2682cd66 100644 --- a/server/model/src/db/project.rs +++ b/server/model/src/db/project.rs @@ -118,4 +118,11 @@ impl Query { let record = project::Entity::delete_by_id(id).exec(db).await?; Ok(record) } + + pub async fn search(db: &DatabaseConnection, search: String) -> Result, DbErr> { + Ok(project::Entity::find() + .filter(Column::Name.like(format!("%{}%", search).as_str())) + .all(db) + .await?) + } } From 7a7deec1f4d9590acd836ba70f4c5da8f954cf3f Mon Sep 17 00:00:00 2001 From: Derick M <58572875+TurtIeSocks@users.noreply.github.com> Date: Mon, 9 Jan 2023 15:24:12 -0500 Subject: [PATCH 06/10] minor tweaks --- client/src/pages/admin/geofence/GeofenceShow.tsx | 2 +- client/src/pages/admin/inputs/CodeInput.tsx | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/client/src/pages/admin/geofence/GeofenceShow.tsx b/client/src/pages/admin/geofence/GeofenceShow.tsx index 05070397..6ea2428a 100644 --- a/client/src/pages/admin/geofence/GeofenceShow.tsx +++ b/client/src/pages/admin/geofence/GeofenceShow.tsx @@ -50,7 +50,7 @@ export default function GeofenceShow() { render={(fence) => { const parsed: string = typeof fence?.area === 'string' - ? fence?.area + ? JSON.stringify(JSON.parse(fence?.area), null, 2) : JSON.stringify(fence?.area, null, 2) return {parsed} }} diff --git a/client/src/pages/admin/inputs/CodeInput.tsx b/client/src/pages/admin/inputs/CodeInput.tsx index 17160cd9..575265da 100644 --- a/client/src/pages/admin/inputs/CodeInput.tsx +++ b/client/src/pages/admin/inputs/CodeInput.tsx @@ -22,9 +22,13 @@ export default function CodeInput({ <> {label} { field.onChange({ target: { value: newCode } }) }} From d2977e3fe547b668fe3e25f839b76da7988d657e Mon Sep 17 00:00:00 2001 From: Derick M <58572875+TurtIeSocks@users.noreply.github.com> Date: Mon, 9 Jan 2023 15:43:09 -0500 Subject: [PATCH 07/10] touch ups --- .../src/components/dialogs/import/ImportWizard.tsx | 5 ++++- client/src/components/drawer/inputs/ProjectsAC.tsx | 12 ++++++++++++ client/src/pages/admin/geofence/CreateDialog.tsx | 12 +++++++++++- client/src/pages/admin/geofence/GeofenceList.tsx | 4 ++-- client/src/pages/admin/inputs/CodeInput.tsx | 6 +++--- 5 files changed, 32 insertions(+), 7 deletions(-) diff --git a/client/src/components/dialogs/import/ImportWizard.tsx b/client/src/components/dialogs/import/ImportWizard.tsx index edecf182..afa32852 100644 --- a/client/src/components/dialogs/import/ImportWizard.tsx +++ b/client/src/components/dialogs/import/ImportWizard.tsx @@ -17,7 +17,7 @@ import FinishStep from './Finish' import TabPanel from './TabPanel' import MiniMap from './MiniMap' -export default function ImportWizard() { +export default function ImportWizard({ onClose }: { onClose?: () => void }) { const importWizard = useStatic((s) => s.importWizard) const setStatic = useStatic((s) => s.setStatic) @@ -87,6 +87,9 @@ export default function ImportWizard() { } const reset = (open = false) => { + if (onClose) { + onClose() + } setStatic('importWizard', { open, nameProp: 'name', diff --git a/client/src/components/drawer/inputs/ProjectsAC.tsx b/client/src/components/drawer/inputs/ProjectsAC.tsx index 367fb3a3..bb4ed6be 100644 --- a/client/src/components/drawer/inputs/ProjectsAC.tsx +++ b/client/src/components/drawer/inputs/ProjectsAC.tsx @@ -24,6 +24,7 @@ export default function ProjectsAc({ }) { const projectObj = useStatic((s) => s.projects) + const [open, setOpen] = React.useState(false) const [projects, setProjects] = React.useState( Object.values(projectObj), ) @@ -142,6 +143,17 @@ export default function ProjectsAc({ ) }} + open={open} + onFocus={() => { + setOpen(true) + }} + onOpen={async () => { + setOpen(true) + await getOptions() + }} + onClose={() => { + setOpen(false) + }} limitTags={1} loading={loading} sx={{ width: '80%', mx: 'auto' }} diff --git a/client/src/pages/admin/geofence/CreateDialog.tsx b/client/src/pages/admin/geofence/CreateDialog.tsx index d8f18779..92e23543 100644 --- a/client/src/pages/admin/geofence/CreateDialog.tsx +++ b/client/src/pages/admin/geofence/CreateDialog.tsx @@ -3,12 +3,15 @@ import { Button } from '@mui/material' import Add from '@mui/icons-material/Add' import ImportWizard from '@components/dialogs/import/ImportWizard' import { useStatic } from '@hooks/useStatic' +import { useRedirect, useRefresh } from 'react-admin' export default function GeofenceCreateButton({ children, }: { children?: string }) { + const refresh = useRefresh() + const redirect = useRedirect() return ( <> - + { + setTimeout(() => { + refresh() + }, 1000) + redirect('list', 'geofence') + }} + /> ) } diff --git a/client/src/pages/admin/geofence/GeofenceList.tsx b/client/src/pages/admin/geofence/GeofenceList.tsx index 08c2cb16..70cce0fb 100644 --- a/client/src/pages/admin/geofence/GeofenceList.tsx +++ b/client/src/pages/admin/geofence/GeofenceList.tsx @@ -9,14 +9,14 @@ import { Pagination, TextField, TopToolbar, + CreateButton, } from 'react-admin' import { BulkAssignButton } from '../actions/bulk/AssignButton' -import GeofenceCreateButton from './CreateDialog' function ListActions() { return ( - + ) } diff --git a/client/src/pages/admin/inputs/CodeInput.tsx b/client/src/pages/admin/inputs/CodeInput.tsx index 575265da..0886ac5e 100644 --- a/client/src/pages/admin/inputs/CodeInput.tsx +++ b/client/src/pages/admin/inputs/CodeInput.tsx @@ -25,9 +25,9 @@ export default function CodeInput({ width="75vw" maxHeight="50vh" code={ - typeof field.value === 'string' - ? JSON.stringify(JSON.parse(field.value), null, 2) - : JSON.stringify(field.value, null, 2) + typeof field.value === 'object' + ? JSON.stringify(field.value, null, 2) + : field.value } setCode={(newCode) => { field.onChange({ target: { value: newCode } }) From ebdb85b4b2ec6eb3404ef5a1e4b8a7f8a4aba0ba Mon Sep 17 00:00:00 2001 From: Derick M <58572875+TurtIeSocks@users.noreply.github.com> Date: Mon, 9 Jan 2023 16:00:34 -0500 Subject: [PATCH 08/10] better single poracle area parsing --- client/src/components/Code.tsx | 44 +++++++++++-------- .../src/pages/admin/geofence/GeofenceForm.tsx | 18 ++++++-- server/api/src/utils/response.rs | 3 +- server/model/src/api/args.rs | 3 +- server/model/src/api/mod.rs | 2 + 5 files changed, 47 insertions(+), 23 deletions(-) diff --git a/client/src/components/Code.tsx b/client/src/components/Code.tsx index 9bb13925..502f3069 100644 --- a/client/src/components/Code.tsx +++ b/client/src/components/Code.tsx @@ -5,6 +5,8 @@ import { linter } from '@codemirror/lint' import { usePersist } from '@hooks/usePersist' import { getData } from '@services/fetches' +import Typography from '@mui/material/Typography' +import { Box } from '@mui/material' interface EditProps extends ReactCodeMirrorProps { code?: string @@ -32,25 +34,31 @@ export function Code({ ) return ( - { - if (value.docChanged) { - if (setCode) { - const newValue = value.state.doc.toString() - if (newValue.startsWith('http')) { - const remoteValue = await getData(newValue) - setCode(JSON.stringify(remoteValue, null, 2)) - } else { - setCode(newValue) + + { + if (value.docChanged) { + if (setCode) { + const newValue = value.state.doc.toString() + if (newValue.startsWith('http')) { + const remoteValue = await getData(newValue) + setCode(JSON.stringify(remoteValue, null, 2)) + } else { + setCode(newValue) + } } } - } - }} - {...rest} - /> + }} + {...rest} + /> + + You can also try entering a url for a remote JSON, Kōji will attempt to + fetch and parse it. + + ) } diff --git a/client/src/pages/admin/geofence/GeofenceForm.tsx b/client/src/pages/admin/geofence/GeofenceForm.tsx index c7c4316c..8a3590ef 100644 --- a/client/src/pages/admin/geofence/GeofenceForm.tsx +++ b/client/src/pages/admin/geofence/GeofenceForm.tsx @@ -12,6 +12,9 @@ import { GeoJSON } from 'react-leaflet' import center from '@turf/center' import { useStatic } from '@hooks/useStatic' import { RDM_FENCES, UNOWN_FENCES } from '@assets/constants' +import { safeParse } from '@services/utils' +import type { Feature } from 'geojson' + import CodeInput from '../inputs/CodeInput' export default function GeofenceForm() { @@ -29,8 +32,17 @@ export default function GeofenceForm() { /> {({ formData }) => { - if (formData?.area?.geometry === undefined) return null - const point = center(formData.area.geometry) + console.log(formData.area) + const parsed = + typeof formData.area === 'string' + ? (() => { + const safe = safeParse(formData.area) + if (!safe.error) return safe.value + })() + : formData.area + if (parsed?.geometry === undefined) return null + + const point = center(parsed.geometry) return ( - + ) }} diff --git a/server/api/src/utils/response.rs b/server/api/src/utils/response.rs index 1b6fc780..8b0b59a6 100644 --- a/server/api/src/utils/response.rs +++ b/server/api/src/utils/response.rs @@ -31,7 +31,7 @@ pub fn send( ReturnTypeArg::MultiArray => GeoFormats::MultiArray(value.to_multi_vec()), ReturnTypeArg::Feature => { if value.features.len() == 1 { - GeoFormats::Feature(value.features[0].clone()) + GeoFormats::Feature(value.features.first().unwrap().clone()) } else { println!("\"Feature\" was requested as the return type but multiple features were found so a Vec of features is being returned"); GeoFormats::FeatureVec(value.features) @@ -40,6 +40,7 @@ pub fn send( ReturnTypeArg::FeatureVec => GeoFormats::FeatureVec(value.features), ReturnTypeArg::FeatureCollection => GeoFormats::FeatureCollection(value), ReturnTypeArg::Poracle => GeoFormats::Poracle(value.to_poracle_vec()), + ReturnTypeArg::PoracleSingle => GeoFormats::PoracleSingle(value.to_poracle_vec().first().unwrap().clone()) }))}, stats, }) diff --git a/server/model/src/api/args.rs b/server/model/src/api/args.rs index be3c6b77..b0a05e71 100644 --- a/server/model/src/api/args.rs +++ b/server/model/src/api/args.rs @@ -28,6 +28,7 @@ pub enum ReturnTypeArg { Feature, FeatureVec, FeatureCollection, + PoracleSingle, Poracle, } @@ -117,7 +118,7 @@ impl Args { GeoFormats::Feature(_) => ReturnTypeArg::Feature, GeoFormats::FeatureVec(_) => ReturnTypeArg::FeatureVec, GeoFormats::FeatureCollection(_) => ReturnTypeArg::FeatureCollection, - GeoFormats::Poracle(_) => ReturnTypeArg::Poracle, + GeoFormats::Poracle(_) | GeoFormats::PoracleSingle(_) => ReturnTypeArg::Poracle, }, ) } else { diff --git a/server/model/src/api/mod.rs b/server/model/src/api/mod.rs index 16d16bb7..d2234f68 100644 --- a/server/model/src/api/mod.rs +++ b/server/model/src/api/mod.rs @@ -121,6 +121,7 @@ pub enum GeoFormats { FeatureVec(Vec), FeatureCollection(FeatureCollection), Poracle(Vec), + PoracleSingle(poracle::Poracle), Bound(args::BoundsArg), } @@ -137,6 +138,7 @@ impl ToCollection for GeoFormats { GeoFormats::FeatureVec(area) => area.to_collection(name, enum_type), GeoFormats::FeatureCollection(area) => area.to_collection(name, enum_type), GeoFormats::Poracle(area) => area.to_collection(name, enum_type), + GeoFormats::PoracleSingle(area) => vec![area].to_collection(name, enum_type), GeoFormats::Bound(area) => vec![ [area.min_lat, area.min_lon], [area.min_lat, area.max_lon], From 8212d1e49025d118ed9b56db503d3f9dfe913653 Mon Sep 17 00:00:00 2001 From: Derick M <58572875+TurtIeSocks@users.noreply.github.com> Date: Tue, 10 Jan 2023 01:52:05 -0500 Subject: [PATCH 09/10] basic nominatim support - support searching nominatims - integrate nominatim code support into the codebase instead of from a lib due to needed custom functionality - add nominatim_url to env vars - fix scanner import tracking --- .../components/dialogs/import/ImportStep.tsx | 46 ++- .../dialogs/import/ImportWizard.tsx | 65 ++--- .../components/dialogs/import/Nominatim.tsx | 113 ++++++++ client/src/hooks/useStatic.ts | 1 - .../src/pages/admin/geofence/GeofenceForm.tsx | 1 - docker-compose.example.yml | 1 + server/.env.example | 1 + server/Cargo.lock | 212 +++++++++++++- server/Cargo.toml | 2 +- server/api/Cargo.toml | 2 + server/api/src/lib.rs | 17 +- server/api/src/private/misc.rs | 33 ++- server/nominatim/Cargo.toml | 19 ++ server/nominatim/src/client.rs | 51 ++++ server/nominatim/src/error.rs | 13 + server/nominatim/src/lib.rs | 27 ++ server/nominatim/src/lookup.rs | 109 +++++++ server/nominatim/src/reverse.rs | 121 ++++++++ server/nominatim/src/search.rs | 144 ++++++++++ server/nominatim/src/serde_utils.rs | 210 ++++++++++++++ server/nominatim/src/types.rs | 271 ++++++++++++++++++ server/nominatim/src/util.rs | 28 ++ 22 files changed, 1430 insertions(+), 57 deletions(-) create mode 100644 client/src/components/dialogs/import/Nominatim.tsx create mode 100644 server/nominatim/Cargo.toml create mode 100644 server/nominatim/src/client.rs create mode 100644 server/nominatim/src/error.rs create mode 100644 server/nominatim/src/lib.rs create mode 100644 server/nominatim/src/lookup.rs create mode 100644 server/nominatim/src/reverse.rs create mode 100644 server/nominatim/src/search.rs create mode 100644 server/nominatim/src/serde_utils.rs create mode 100644 server/nominatim/src/types.rs create mode 100644 server/nominatim/src/util.rs diff --git a/client/src/components/dialogs/import/ImportStep.tsx b/client/src/components/dialogs/import/ImportStep.tsx index 58ca28ed..89a363c8 100644 --- a/client/src/components/dialogs/import/ImportStep.tsx +++ b/client/src/components/dialogs/import/ImportStep.tsx @@ -9,17 +9,15 @@ import { Divider } from '@mui/material' import InstanceSelect from '@components/drawer/manage/Instance' import { useStatic } from '@hooks/useStatic' import { RDM_FENCES, UNOWN_FENCES } from '@assets/constants' +import Nominatim from './Nominatim' const ImportStep = React.forwardRef< HTMLDivElement, { - handleChange: ( - geojson: FeatureCollection, - updatedSelected?: boolean, - ) => void + geojson: FeatureCollection + handleChange: (geojson: FeatureCollection, key?: string) => void } ->(({ handleChange }, ref) => { - const { scannerSelected } = useStatic((s) => s.importWizard) +>(({ geojson, handleChange }, ref) => { const scannerType = useStatic((s) => s.scannerType) return ( @@ -65,17 +63,41 @@ const ImportStep = React.forwardRef< handleChange(geo, true)} + setGeojson={(geo) => + handleChange( + { + ...geo, + features: geo.features.map((feat) => ({ + ...feat, + properties: { ...feat.properties, __scanner: true }, + })), + }, + '__scanner', + ) + } filters={scannerType === 'rdm' ? RDM_FENCES : UNOWN_FENCES} - initialState={[...scannerSelected]} + initialState={geojson.features + .filter((feat) => feat.properties?.__scanner) + .map( + (feat) => `${feat.properties?.name}__${feat.properties?.type}`, + )} /> {/* Nominatim */} - - - Nominatim and OSM searching coming soon - + + Nominatim + + + Search Nominatim for GeoJSONs + + + feat.properties?.__nominatim, + )} + handleChange={handleChange} + /> ) diff --git a/client/src/components/dialogs/import/ImportWizard.tsx b/client/src/components/dialogs/import/ImportWizard.tsx index afa32852..989e2502 100644 --- a/client/src/components/dialogs/import/ImportWizard.tsx +++ b/client/src/components/dialogs/import/ImportWizard.tsx @@ -32,40 +32,6 @@ export default function ImportWizard({ onClose }: { onClose?: () => void }) { const tabRef = React.useRef(null) - const handleChange = ( - newGeojson: FeatureCollection, - updatedSelected = false, - ) => { - if (updatedSelected) { - useStatic.setState({ - importWizard: { - ...importWizard, - scannerSelected: new Set([ - ...importWizard.scannerSelected, - ...newGeojson.features.map( - (feat) => `${feat.properties?.name}__${feat.properties?.type}`, - ), - ]), - }, - }) - } - setTempGeojson((prev) => { - const merged = { - ...prev, - ...newGeojson, - features: [ - ...prev.features, - ...newGeojson.features.map((feat) => ({ - ...feat, - id: crypto.randomUUID(), - })), - ], - } - setCode(JSON.stringify(merged, null, 2)) - return merged - }) - } - const handleCodeChange = (newGeojson: FeatureCollection) => { setCode( JSON.stringify( @@ -86,6 +52,28 @@ export default function ImportWizard({ onClose }: { onClose?: () => void }) { ) } + const handleChange = (newGeojson: FeatureCollection, key = '') => { + setTempGeojson((prev) => { + const merged = { + ...prev, + ...newGeojson, + features: [ + ...(key + ? prev.features.filter( + (feat) => feat.properties?.[key] === undefined, + ) + : prev.features), + ...newGeojson.features.map((feat) => ({ + ...feat, + id: crypto.randomUUID(), + })), + ], + } + handleCodeChange(merged) + return merged + }) + } + const reset = (open = false) => { if (onClose) { onClose() @@ -99,7 +87,6 @@ export default function ImportWizard({ onClose }: { onClose?: () => void }) { allProjects: [], allType: '', checked: {}, - scannerSelected: new Set(), }) setTempGeojson({ type: 'FeatureCollection', @@ -193,7 +180,13 @@ export default function ImportWizard({ onClose }: { onClose?: () => void }) { {{ - 0: , + 0: ( + + ), 1: ( void +}) { + const [loading, setLoading] = React.useState(false) + const [results, setResults] = React.useState({ + type: 'FeatureCollection', + features: [], + }) + const [inputValue, setInputValue] = React.useState('') + + React.useEffect(() => { + setLoading(true) + fetch(`/config/nominatim?query=${inputValue}`) + .then((res) => res.json()) + .then((res: KojiResponse) => { + setResults(res.data) + setLoading(false) + }) + }, [inputValue]) + + return ( + { + const newGeojson: FeatureCollection = { + type: 'FeatureCollection', + features: [], + } + if (Array.isArray(newValue)) { + newValue.forEach((feature) => { + if (typeof feature === 'string') { + return + } + newGeojson.features.push({ + ...feature, + properties: { + ...feature.properties, + __nominatim: true, + }, + }) + }) + } + handleChange(newGeojson, '__nominatim') + }} + inputValue={inputValue} + onInputChange={(_e, newInputValue) => { + setInputValue(newInputValue) + }} + renderInput={(params) => ( + + {loading ? ( + + ) : null} + {params.InputProps.endAdornment} + + ), + }} + /> + )} + options={results.features} + getOptionLabel={(option) => { + return typeof option === 'string' + ? option + : option.properties?.display_name || '' + }} + renderOption={(props, option, { selected }) => { + return ( +
  • + + + {option.properties?.display_name} ({option.properties?.osm_id}) + +
  • + ) + }} + isOptionEqualToValue={(option, v) => + option.properties?.osm_id === v.properties?.osm_id + } + limitTags={1} + loading={loading} + sx={{ width: '90%', mx: 'auto', my: 1 }} + size="small" + multiple + freeSolo + disableCloseOnSelect + selectOnFocus + /> + ) +} diff --git a/client/src/hooks/useStatic.ts b/client/src/hooks/useStatic.ts index ea275604..783e363e 100644 --- a/client/src/hooks/useStatic.ts +++ b/client/src/hooks/useStatic.ts @@ -36,7 +36,6 @@ export interface UseStatic { allProjects: number[] allType: '' | 'AutoQuest' | 'PokemonIv' | 'AutoPokemon' | 'AutoTth' checked: Record - scannerSelected: Set } projects: Record setStatic: < diff --git a/client/src/pages/admin/geofence/GeofenceForm.tsx b/client/src/pages/admin/geofence/GeofenceForm.tsx index 8a3590ef..d9474179 100644 --- a/client/src/pages/admin/geofence/GeofenceForm.tsx +++ b/client/src/pages/admin/geofence/GeofenceForm.tsx @@ -32,7 +32,6 @@ export default function GeofenceForm() { /> {({ formData }) => { - console.log(formData.area) const parsed = typeof formData.area === 'string' ? (() => { diff --git a/docker-compose.example.yml b/docker-compose.example.yml index 9abb2e2a..9e27111e 100644 --- a/docker-compose.example.yml +++ b/docker-compose.example.yml @@ -14,6 +14,7 @@ services: #START_LAT: 0 #START_LON: 0 #TILE_SERVER: https://{s}.basemaps.cartocdn.com/rastertiles/voyager_labels_under/{z}/{x}/{y}{r}.png + #NOMINATIM_URL="https://nominatim.openstreetmap.org" # highly recommended using your own #MAX_CONNECTIONS: 100 #LOG_LEVEL: info # error | warn | info | debug | trace #mem_limit: 2048G diff --git a/server/.env.example b/server/.env.example index c3c465cf..d84be244 100644 --- a/server/.env.example +++ b/server/.env.example @@ -10,4 +10,5 @@ START_LAT="0" START_LON="0" TILE_SERVER="https://{s}.basemaps.cartocdn.com/rastertiles/voyager_labels_under/{z}/{x}/{y}{r}.png" MAX_CONNECTIONS=100 +NOMINATIM_URL="https://nominatim.openstreetmap.org" # highly recommended using your own LOG_LEVEL="info" # error | warn | info | debug | trace \ No newline at end of file diff --git a/server/Cargo.lock b/server/Cargo.lock index 1eb510c4..559473b4 100644 --- a/server/Cargo.lock +++ b/server/Cargo.lock @@ -369,9 +369,11 @@ dependencies = [ "log", "migration", "model", + "nominatim", "sea-orm", "serde", "serde_json", + "url", ] [[package]] @@ -1037,14 +1039,38 @@ dependencies = [ "syn", ] +[[package]] +name = "darling" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f2c43f534ea4b0b049015d00269734195e6d3f0f6635cb692251aca6f9f8b3c" +dependencies = [ + "darling_core 0.12.4", + "darling_macro 0.12.4", +] + [[package]] name = "darling" version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b0dd3cd20dc6b5a876612a6e5accfe7f3dd883db6d07acfbf14c128f61550dfa" dependencies = [ - "darling_core", - "darling_macro", + "darling_core 0.14.2", + "darling_macro 0.14.2", +] + +[[package]] +name = "darling_core" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e91455b86830a1c21799d94524df0845183fa55bafd9aa137b01c7d1065fa36" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn", ] [[package]] @@ -1061,13 +1087,24 @@ dependencies = [ "syn", ] +[[package]] +name = "darling_macro" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29b5acf0dea37a7f66f7b25d2c5e93fd46f8f6968b1a5d7a3e02e97768afc95a" +dependencies = [ + "darling_core 0.12.4", + "quote", + "syn", +] + [[package]] name = "darling_macro" version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7618812407e9402654622dd402b0a89dff9ba93badd6540781526117b92aab7e" dependencies = [ - "darling_core", + "darling_core 0.14.2", "quote", "syn", ] @@ -1083,6 +1120,37 @@ dependencies = [ "pem-rfc7468", ] +[[package]] +name = "derive_builder" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d13202debe11181040ae9063d739fa32cfcaaebe2275fe387703460ae2365b30" +dependencies = [ + "derive_builder_macro", +] + +[[package]] +name = "derive_builder_core" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66e616858f6187ed828df7c64a6d71720d83767a7f19740b2d1b6fe6327b36e5" +dependencies = [ + "darling 0.12.4", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "derive_builder_macro" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58a94ace95092c5acb1e97a7e846b310cfbd499652f72297da7493f618a98d73" +dependencies = [ + "derive_builder_core", + "syn", +] + [[package]] name = "derive_more" version = "0.99.17" @@ -1564,6 +1632,17 @@ dependencies = [ "itoa", ] +[[package]] +name = "http-body" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" +dependencies = [ + "bytes", + "http", + "pin-project-lite", +] + [[package]] name = "http-range" version = "0.1.5" @@ -1588,6 +1667,43 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" +[[package]] +name = "hyper" +version = "0.14.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "034711faac9d2166cb1baf1a2fb0b60b1f277f8492fd72176c17f3515e1abd3c" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper-tls" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +dependencies = [ + "bytes", + "hyper", + "native-tls", + "tokio", + "tokio-native-tls", +] + [[package]] name = "iana-time-zone" version = "0.1.53" @@ -1657,6 +1773,12 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "ipnet" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" + [[package]] name = "itertools" version = "0.10.5" @@ -1914,6 +2036,20 @@ dependencies = [ "minimal-lexical", ] +[[package]] +name = "nominatim" +version = "0.1.0" +dependencies = [ + "derive_builder", + "geojson", + "reqwest", + "serde", + "serde_json", + "serde_urlencoded", + "thiserror", + "url", +] + [[package]] name = "nu-ansi-term" version = "0.46.0" @@ -2420,6 +2556,43 @@ dependencies = [ "bytecheck", ] +[[package]] +name = "reqwest" +version = "0.11.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68cc60575865c7831548863cc02356512e3f1dc2f3f82cb837d7fc4cc8f3c97c" +dependencies = [ + "base64", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "hyper", + "hyper-tls", + "ipnet", + "js-sys", + "log", + "mime", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "serde", + "serde_json", + "serde_urlencoded", + "tokio", + "tokio-native-tls", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "winreg", +] + [[package]] name = "rkyv" version = "0.7.39" @@ -2801,7 +2974,7 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3452b4c0f6c1e357f73fdb87cd1efabaa12acf328c7a528e252893baeb3f4aa" dependencies = [ - "darling", + "darling 0.14.2", "proc-macro2", "quote", "syn", @@ -3215,6 +3388,12 @@ dependencies = [ "serde", ] +[[package]] +name = "tower-service" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" + [[package]] name = "tracing" version = "0.1.37" @@ -3289,6 +3468,12 @@ dependencies = [ "time 0.3.17", ] +[[package]] +name = "try-lock" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" + [[package]] name = "typenum" version = "1.16.0" @@ -3408,6 +3593,16 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" +[[package]] +name = "want" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" +dependencies = [ + "log", + "try-lock", +] + [[package]] name = "wasi" version = "0.10.0+wasi-snapshot-preview1" @@ -3636,6 +3831,15 @@ version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5" +[[package]] +name = "winreg" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" +dependencies = [ + "winapi", +] + [[package]] name = "zeroize" version = "1.5.7" diff --git a/server/Cargo.toml b/server/Cargo.toml index edc6295a..b2bed3e2 100644 --- a/server/Cargo.toml +++ b/server/Cargo.toml @@ -4,7 +4,7 @@ version = "0.3.2" edition = "2021" [workspace] -members = [".", "algorithms", "api", "migration", "model"] +members = [".", "algorithms", "api", "migration", "model", "nominatim"] [dependencies] api = { path = "api" } diff --git a/server/api/Cargo.toml b/server/api/Cargo.toml index e4de9c2d..43b38ebe 100644 --- a/server/api/Cargo.toml +++ b/server/api/Cargo.toml @@ -21,6 +21,7 @@ geojson = "0.24.0" log = "0.4.17" migration = { path = "../migration" } model = { path = "../model" } +nominatim = { path = "../nominatim" } sea-orm = { version = "0.9.3", features = [ "sqlx-mysql", "runtime-actix-native-tls", @@ -28,3 +29,4 @@ sea-orm = { version = "0.9.3", features = [ ] } serde = { version = "1.0.136", features = ["derive"] } serde_json = "1.0" +url = "2.3.1" diff --git a/server/api/src/lib.rs b/server/api/src/lib.rs index b101cfb5..97d2d4a0 100644 --- a/server/api/src/lib.rs +++ b/server/api/src/lib.rs @@ -11,6 +11,7 @@ use actix_web::{ use actix_web_httpauth::middleware::HttpAuthentication; use geojson::{Feature, FeatureCollection}; use log::LevelFilter; +use nominatim; use sea_orm::{ConnectOptions, Database, DbErr}; use algorithms; @@ -102,10 +103,23 @@ pub async fn main() -> io::Result<()> { .to_string() }; + let client = nominatim::Client::new( + url::Url::parse( + env::var("NOMINATIM_URL") + .unwrap_or("https://nominatim.openstreetmap.org/".to_string()) + .as_str(), + ) + .unwrap(), + "nominatim-rust/0.1.0 test-suite".to_string(), + None, + ) + .unwrap(); + HttpServer::new(move || { App::new() .app_data(web::Data::new(databases.clone())) .app_data(web::Data::new(scanner_type.clone())) + .app_data(web::Data::new(client.clone())) // increase max payload size to 20MB .app_data(web::JsonConfig::default().limit(20_971_520)) .wrap(middleware::Logger::new("%s | %r - %b bytes in %D ms (%a)")) @@ -119,7 +133,8 @@ pub async fn main() -> io::Result<()> { web::scope("/config") .service(private::misc::config) .service(private::misc::login) - .service(private::misc::logout), + .service(private::misc::logout) + .service(private::misc::search_nominatim), ) .service( web::scope("/internal") diff --git a/server/api/src/private/misc.rs b/server/api/src/private/misc.rs index 2c0f834e..a2ee834c 100644 --- a/server/api/src/private/misc.rs +++ b/server/api/src/private/misc.rs @@ -1,9 +1,12 @@ use super::*; +use crate::private::admin::Search; + use actix_session::Session; use actix_web::http::header; -use model::api::args::{Auth, ConfigResponse}; +use model::api::args::{Auth, ConfigResponse, Response}; +use serde_json::json; #[get("/")] async fn config(scanner_type: web::Data, session: Session) -> Result { @@ -51,3 +54,31 @@ async fn logout(session: Session) -> Result { .append_header((header::LOCATION, "/")) .finish()) } + +#[get("/nominatim")] +async fn search_nominatim( + nominatim_client: web::Data, + url: web::Query, +) -> Result { + let query = url.into_inner(); + let results = nominatim_client + .search( + nominatim::SearchQueryBuilder::default() + .address_details(true) + .location_query(nominatim::LocationQuery::Generalised { q: query.query }) + .dedupe(true) + .build() + .unwrap(), + ) + .await + .map_err(actix_web::error::ErrorInternalServerError)?; + + println!("Nominatim Results Length: {}", results.features.len()); + Ok(HttpResponse::Ok().json(Response { + data: Some(json!(results)), + message: "Success".to_string(), + status: "ok".to_string(), + stats: None, + status_code: 200, + })) +} diff --git a/server/nominatim/Cargo.toml b/server/nominatim/Cargo.toml new file mode 100644 index 00000000..70d40e5d --- /dev/null +++ b/server/nominatim/Cargo.toml @@ -0,0 +1,19 @@ +[package] +name = "nominatim" +version = "0.1.0" +edition = "2021" +publish = false + +[lib] +name = "nominatim" +path = "src/lib.rs" + +[dependencies] +geojson = "0.24.0" +reqwest = "0.11" +serde = { version = "1", features = ["derive"] } +serde_json = "1" +serde_urlencoded = "0.7" +url = "2" +derive_builder = "0.10" +thiserror = "1" diff --git a/server/nominatim/src/client.rs b/server/nominatim/src/client.rs new file mode 100644 index 00000000..c6437a5b --- /dev/null +++ b/server/nominatim/src/client.rs @@ -0,0 +1,51 @@ +use thiserror::Error; + +/// A nominatim client that is binded to the nominatim web api. +#[derive(Clone)] +pub struct Client { + /// The user agent of your service. This is required by the Nominatim + /// terms of service. + /// + /// Note that changing it does nothing unless respecified in the client. + pub user_agent: String, + /// ***Strongly Recommended***, your email so Nominatim can contact you + /// in case they dislike your usecase. + pub email: Option, + /// The base URL + pub base_url: reqwest::Url, + pub client: reqwest::Client, +} + +/// An error that may be returned when creating a new +/// client. +#[derive(Error, Debug)] +pub enum NewError { + #[error("reqwest error: {0}")] + Reqwest(#[from] reqwest::Error), +} + +impl Client { + /// Creates a new client base + /// + /// # User Agent + /// + /// The user agent of your service. This is required by the Nominatim + /// terms of service. + /// + /// # Email + /// + /// ***Strongly Recommended***, your email so Nominatim can contact you + /// in case they dislike your usecase. + pub fn new( + base_url: reqwest::Url, + user_agent: String, + email: Option, + ) -> Result { + Ok(Self { + client: reqwest::Client::builder().user_agent(&user_agent).build()?, + base_url, + user_agent, + email, + }) + } +} diff --git a/server/nominatim/src/error.rs b/server/nominatim/src/error.rs new file mode 100644 index 00000000..5b5c19c0 --- /dev/null +++ b/server/nominatim/src/error.rs @@ -0,0 +1,13 @@ +use thiserror::Error; + +#[derive(Error, Debug)] +pub enum Error { + #[error("reqwest error {0}")] + Reqwest(#[from] reqwest::Error), + #[error("url error {0}")] + Url(#[from] url::ParseError), + #[error("serde error {0}")] + Serde(#[from] serde_json::Error), + #[error("invalid status code in response")] + ResponseCode(reqwest::StatusCode), +} diff --git a/server/nominatim/src/lib.rs b/server/nominatim/src/lib.rs new file mode 100644 index 00000000..33f0c866 --- /dev/null +++ b/server/nominatim/src/lib.rs @@ -0,0 +1,27 @@ +#![warn(clippy::pedantic)] +#![allow(clippy::missing_errors_doc)] +#![allow(clippy::missing_panics_doc)] +#![allow(clippy::module_name_repetitions)] +#![allow(clippy::struct_excessive_bools)] + +/* + Borrowing for now while I need the changes + https://crates.io/crates/nominatim-rs +*/ + +pub mod client; +pub mod error; +pub mod lookup; +pub mod reverse; +pub mod search; +pub mod serde_utils; +pub mod types; +pub mod util; + +pub use client::Client; +pub use lookup::LookupQueryBuilder; +pub use reverse::ReverseQueryBuilder; +pub use reverse::Zoom; +pub use search::LocationQuery; +pub use search::SearchQueryBuilder; +pub use types::Response; diff --git a/server/nominatim/src/lookup.rs b/server/nominatim/src/lookup.rs new file mode 100644 index 00000000..d7e97bc2 --- /dev/null +++ b/server/nominatim/src/lookup.rs @@ -0,0 +1,109 @@ +use crate::client::Client; +use crate::error::Error; +use crate::serde_utils::{ + serialize_as_string_opt, serialize_bool_as_string, serialize_vector_as_string, + serialize_vector_as_string_opt, +}; +use crate::types::Response; +use crate::util::RequestBuilderHelper; +use derive_builder::Builder; +use serde::Serialize; + +#[derive(Builder, Debug, Clone, Serialize)] +pub struct LookupQuery { + /// `osm_ids` is mandatory and must contain a comma-seperated list of + /// OSM ids each prefixed with its type, on of node(N), way(W) or + /// relation(R). Up to 50 ids can be queried at the same time. + #[builder(default)] + #[serde(serialize_with = "serialize_vector_as_string")] + pub osm_ids: Vec, + /// Include a breakdown of the address into elements. (Default: false) + #[serde(rename = "addressdetails")] + #[serde(serialize_with = "serialize_bool_as_string")] + #[builder(default)] + pub address_details: bool, + /// Include additional information if the result is available + #[builder(default)] + #[serde(rename = "extratags")] + #[serde(serialize_with = "serialize_bool_as_string")] + pub extra_tags: bool, + /// Include a list of alternative names in the results. This may include + /// language variants, references, operator and brand. + #[builder(default)] + #[serde(rename = "namedetails")] + #[serde(serialize_with = "serialize_bool_as_string")] + pub name_details: bool, + /// Preferred language order for showing search results, overrides + /// the value specified in the "Accept-Languague" HTTP header. + /// Either use a standard RFC2616 accept-language string or + /// a simple comma-separated list of language codes. + #[builder(default)] + #[serde(rename = "accept-language")] + #[serde(serialize_with = "serialize_vector_as_string_opt")] + pub accept_language: Option>, + /// Include addition information if the result is available + /// Limit search results to one of more countries. The country code must + /// be the + /// [ISO-3166-1alpha2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) + /// code, e.g. `gb` for the United Kingdom, `de` for Germany. + /// + /// Each place in Nominatim is assigned to one country code based of OSM + /// country borders. In rare cases a place may not be in any country at + /// all, for example, in international waters. + #[builder(default)] + #[serde(rename = "countrycodes")] + #[serde(serialize_with = "serialize_vector_as_string_opt")] + pub country_codes: Option>, + /// If you do not want certain OSM objects to appear in the search + /// result, give a comma separated list of the `place_id`s you want to + /// skip. This can be used to retrieve additional search results. + /// For example, if a previous query only returned a few results, then + /// including those here would cause the search to return other, less + /// accurate, matches (if possible.) + #[builder(default)] + #[serde(serialize_with = "serialize_vector_as_string_opt")] + pub exclude_place_ids: Option>, + /// Limits the number of returned results. (Default: 10, Maximum: 50.) + #[builder(default)] + #[serde(serialize_with = "serialize_as_string_opt")] + pub limit: Option, + /// The preferred area to find search results. Any two corner + /// points of the box are accepted as long as they span a real box. + /// + /// ```http + /// viewbox=,,, + /// ``` + #[builder(default)] + #[serde(serialize_with = "serialize_vector_as_string_opt")] + pub viewbox: Option<[f64; 4]>, + /// When a viewbox is given, restrict the result to items contained + /// within the viewbox (see above). When `viewbox` and `bounded = true` + /// are given, an amenity only search is allowed. Give the special keyword + /// for the amenity in square brackets, e.g. `[pub]` and a selection of + /// objects of this type is returned. There is no guarantee that the result + /// is complete. (Default: 0) + #[builder(default)] + #[serde(serialize_with = "serialize_bool_as_string")] + pub bounded: bool, +} + +impl Client { + /// The lookup API allows to query the address and other details of one or + /// multiple OSM objects like node, way or relation. + pub async fn lookup(&self, query: LookupQuery) -> Result, Error> { + let mut url = self.base_url.join("lookup")?; + url.set_query(Some(&serde_urlencoded::to_string(&query).unwrap())); + + let builder = self.client.get(url).query_s("format", "json"); + let response = builder.send().await?; + + let status = response.status(); + if status != reqwest::StatusCode::OK { + return Err(Error::ResponseCode(status)); + } + + let text = response.text().await?; + + Ok(serde_json::from_str(&text)?) + } +} diff --git a/server/nominatim/src/reverse.rs b/server/nominatim/src/reverse.rs new file mode 100644 index 00000000..c0096305 --- /dev/null +++ b/server/nominatim/src/reverse.rs @@ -0,0 +1,121 @@ +use crate::client::Client; +use crate::error::Error; +use crate::serde_utils::{ + serialize_as_string, serialize_bool_as_string, + serialize_vector_as_string_opt, +}; +use crate::types::Response; +use crate::util::RequestBuilderHelper; +use derive_builder::Builder; +use serde::Serialize; +use std::fmt; + +#[derive(Debug, Clone)] +pub enum Zoom { + Country, + State, + County, + City, + Suburb, + MajorStreets, + MajorAndMinorStreets, + Building, +} + +impl fmt::Display for Zoom { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + Self::Country => write!(f, "3"), + Self::State => write!(f, "5"), + Self::County => write!(f, "8"), + Self::City => write!(f, "10"), + Self::Suburb => write!(f, "14"), + Self::MajorStreets => write!(f, "16"), + Self::MajorAndMinorStreets => write!(f, "17"), + Self::Building => write!(f, "18"), + } + } +} + +#[derive(Builder, Debug, Clone, Serialize)] +pub struct ReverseQuery { + #[serde(serialize_with = "serialize_as_string")] + pub lat: f64, + + #[serde(serialize_with = "serialize_as_string")] + pub lon: f64, + + /// Include a breakdown of the address into elements. (Default: true) + #[serde(rename = "addressdetails")] + #[serde(serialize_with = "serialize_bool_as_string")] + #[builder(default = "true")] + pub address_details: bool, + + /// Include additional information if the result is available + #[builder(default)] + #[serde(rename = "extratags")] + #[serde(serialize_with = "serialize_bool_as_string")] + pub extra_tags: bool, + + /// Include a list of alternative names in the results. This may include + /// language variants, references, operator and brand. + #[builder(default)] + #[serde(rename = "namedetails")] + #[serde(serialize_with = "serialize_bool_as_string")] + pub name_details: bool, + + /// Preferred language order for showing search results, overrides + /// the value specified in the "Accept-Languague" HTTP header. + /// Either use a standard RFC2616 accept-language string or + /// a simple comma-separated list of language codes. + #[builder(default)] + #[serde(rename = "accept-language")] + #[serde(serialize_with = "serialize_vector_as_string_opt")] + pub accept_language: Option>, + + #[serde(serialize_with = "serialize_as_string")] + pub zoom: Zoom, +} + +impl Client { + /// Reverse geocoding generates an address from a latitude and + /// longitude. + /// + /// ## How it works + /// + /// The reverse geocoding API does not exactly compute the address for the + /// coordinate it receives. It works by finding the closest suitable OSM + /// object and returning its address information. This may occasionally lead + /// to unexpected results. + /// + /// First of all, Nominatim only includes OSM objects in its index that are + /// suitable for searching. Small, unnamed paths for example are missing + /// from the database and can therefore not be used for reverse geocoding + /// either. + /// + /// The other issue to be aware of is that the closest OSM object may not + /// always have a similar enough address to the coordinate you were + /// requesting. For example, in dense city areas it may belong to a + /// completely different street. + pub async fn reverse( + &self, + query: ReverseQuery, + ) -> Result { + let mut url = self.base_url.join("reverse")?; + url.set_query(Some(&serde_urlencoded::to_string(&query).unwrap())); + + let builder = self.client.get(url).query_s("format", "json"); + let response = builder.send().await?; + + let status = response.status(); + if status != reqwest::StatusCode::OK { + return Err(Error::ResponseCode(status)); + } + + let text = response.text().await?; + + println!("{}", text); + + Ok(serde_json::from_str(&text)?) + } +} diff --git a/server/nominatim/src/search.rs b/server/nominatim/src/search.rs new file mode 100644 index 00000000..05b2fba4 --- /dev/null +++ b/server/nominatim/src/search.rs @@ -0,0 +1,144 @@ +use crate::client::Client; +use crate::error::Error; +use crate::serde_utils::{ + serialize_as_string_opt, serialize_bool_as_string, serialize_vector_as_string_opt, +}; +use crate::util::RequestBuilderHelper; +use derive_builder::Builder; +use serde::Serialize; + +#[derive(Debug, Default, Clone, Serialize)] +#[serde(into = "String")] +pub struct Street { + pub house_number: String, + pub street_name: String, +} + +impl From for String { + fn from(street: Street) -> Self { + format!("{} {}", street.house_number, street.street_name) + } +} + +/// Represents the different types of way that nominatim can request for a +/// location. +#[derive(Debug, Clone, Serialize)] +#[serde(untagged)] +pub enum LocationQuery { + /// Free-form query string to search for. Free-form queries are + /// processed first left-to-right and then right-to-left if that fails. + /// So you may search for `pilkington avenue, birmingham` as well as + /// for `birmingham, pikington avenue`. Commas are optional but + /// improve performance by reducing the complexity of the search. + Generalised { q: String }, + /// Alternative query string format split into several parameters + /// for structured requests. Structured requests are faster but + /// are less robust against alternative OSM tagging schemas. + Structured { + street: Option, + city: Option, + county: Option, + state: Option, + country: Option, + #[serde(rename = "postalcode")] + postal_code: Option, + }, +} + +#[derive(Builder, Debug, Clone, Serialize)] +pub struct SearchQuery { + #[serde(flatten)] + pub location_query: LocationQuery, + /// Include a breakdown of the address into elements + #[serde(rename = "addressdetails")] + #[serde(serialize_with = "serialize_bool_as_string")] + pub address_details: bool, + /// Include additional information if the result is available + #[builder(default)] + #[serde(rename = "extratags")] + #[serde(serialize_with = "serialize_bool_as_string")] + pub extra_tags: bool, + /// Include a list of alternative names in the results. This may include + /// language variants, references, operator and brand. + #[builder(default)] + #[serde(rename = "namedetails")] + #[serde(serialize_with = "serialize_bool_as_string")] + pub name_details: bool, + /// Preferred language order for showing search results, overrides + /// the value specified in the "Accept-Languague" HTTP header. + /// Either use a standard RFC2616 accept-language string or + /// a simple comma-separated list of language codes. + #[builder(default)] + #[serde(rename = "accept-language")] + #[serde(serialize_with = "serialize_vector_as_string_opt")] + pub accept_language: Option>, + /// Include addition information if the result is available + /// Limit search results to one of more countries. The country code must + /// be the + /// [ISO-3166-1alpha2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) + /// code, e.g. `gb` for the United Kingdom, `de` for Germany. + /// + /// Each place in Nominatim is assigned to one country code based of OSM + /// country borders. In rare cases a place may not be in any country at + /// all, for example, in international waters. + #[builder(default)] + #[serde(rename = "countrycodes")] + #[serde(serialize_with = "serialize_vector_as_string_opt")] + pub country_codes: Option>, + /// If you do not want certain OSM objects to appear in the search + /// result, give a comma separated list of the `place_id`s you want to + /// skip. This can be used to retrieve additional search results. + /// For example, if a previous query only returned a few results, then + /// including those here would cause the search to return other, less + /// accurate, matches (if possible.) + #[builder(default)] + #[serde(serialize_with = "serialize_vector_as_string_opt")] + pub exclude_place_ids: Option>, + /// Limits the number of returned results. (Default: 10, Maximum: 50.) + #[builder(default)] + #[serde(serialize_with = "serialize_as_string_opt")] + pub limit: Option, + /// The preferred area to find search results. Any two corner + /// points of the box are accepted as long as they span a real box. + /// + /// ```http + /// viewbox=,,, + /// ``` + #[builder(default)] + #[serde(serialize_with = "serialize_vector_as_string_opt")] + pub viewbox: Option<[f64; 4]>, + /// Sometimes you have several objects in OSM identifying the same place + /// or object in reality. The simplest case is a street being split into + /// many different OSM ways due to different characteristics. Nominatim + /// will attempt to detect such duplicates and only return on match + /// unless this parameter is set to `false`. (Default: `true`), + #[builder(default = "true")] + #[serde(serialize_with = "serialize_bool_as_string")] + pub dedupe: bool, +} + +impl Client { + /// The search API allows you to look up a location from a textual + /// description or addrses. Nominatim supports structured and + /// free-form search queries. + pub async fn search(&self, query: SearchQuery) -> Result { + let mut url = self.base_url.join("search")?; + url.set_query(Some(&serde_urlencoded::to_string(&query).unwrap())); + + let builder = self + .client + .get(url) + .query_s("format", "geojson") + .query_s("polygon_geojson", "1"); + let response = builder.send().await?; + + let status = response.status(); + if status != reqwest::StatusCode::OK { + return Err(Error::ResponseCode(status)); + } + + let text = response.text().await?; + + Ok(serde_json::from_str(&text)?) + } +} diff --git a/server/nominatim/src/serde_utils.rs b/server/nominatim/src/serde_utils.rs new file mode 100644 index 00000000..c0b75b52 --- /dev/null +++ b/server/nominatim/src/serde_utils.rs @@ -0,0 +1,210 @@ +use serde::{Deserializer, Serializer}; +use std::str::FromStr; + +pub fn serialize_vector_as_string( + vec: &[T], + s: S, +) -> Result +where + T: ToString, + S: Serializer, +{ + let mut string = String::new(); + + for item in vec { + string.push_str(&item.to_string()); + string.push(','); + } + string.pop(); + + s.serialize_str(&string) +} + +pub fn serialize_vector_as_string_opt<'a, I, T, S>( + vec: &'a Option, + s: S, +) -> Result +where + &'a I: IntoIterator + 'a, + T: ToString + 'a, + S: Serializer, +{ + match vec { + Some(ref vec) => { + let mut string = String::new(); + + for item in vec { + string.push_str(&item.to_string()); + string.push(','); + } + string.pop(); + + s.serialize_some(&string) + } + None => s.serialize_none(), + } +} + +pub fn serialize_as_string_opt( + t: &Option, + s: S, +) -> Result +where + T: ToString, + S: Serializer, +{ + match *t { + Some(ref t) => s.serialize_some(&t.to_string()), + None => s.serialize_none(), + } +} + +pub fn serialize_bool_as_string( + boolean: &bool, + s: S, +) -> Result +where + S: Serializer, +{ + match boolean { + true => s.serialize_str("1"), + false => s.serialize_str("0"), + } +} + +pub fn serialize_as_string(t: &T, s: S) -> Result +where + T: ToString, + S: Serializer, +{ + s.serialize_str(&t.to_string()) +} + +pub fn deserialize_from_string<'de, T, D>(d: D) -> Result +where + T: FromStr, + D: Deserializer<'de>, +{ + d.deserialize_string(string_visitor::FromStrVisitor::::default()) +} + +pub fn deserialize_from_string_opt<'de, T, D>( + d: D, +) -> Result, D::Error> +where + T: FromStr, + D: Deserializer<'de>, +{ + d.deserialize_option( + opt_string_visitor::OptionFromStrVisitor::::default(), + ) +} + +mod string_visitor { + use serde::de::{Error, Unexpected, Visitor}; + use std::fmt; + use std::marker::PhantomData; + use std::str; + use std::str::FromStr; + + pub struct FromStrVisitor { + _marker: PhantomData, + } + + impl Default for FromStrVisitor { + fn default() -> Self { + Self { + _marker: PhantomData::default(), + } + } + } + + impl<'de, T: FromStr> Visitor<'de> for FromStrVisitor { + type Value = T; + + fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result { + formatter.write_str("a type that parses from a string") + } + + fn visit_str(self, v: &str) -> Result + where + E: Error, + { + v.parse() + .map_err(|_| E::custom(format!("cannot be parsed: {}", v))) + } + + fn visit_string(self, v: String) -> Result + where + E: Error, + { + v.parse() + .map_err(|_| E::custom(format!("cannot be parsed: {}", v))) + } + + fn visit_bytes(self, v: &[u8]) -> Result + where + E: Error, + { + match str::from_utf8(v) { + Ok(s) => s + .parse() + .map_err(|_| E::custom(format!("cannot be parsed: {}", s))), + Err(_) => { + Err(Error::invalid_value(Unexpected::Bytes(v), &self)) + } + } + } + } +} + +mod opt_string_visitor { + use serde::de::{Deserializer, Error, Visitor}; + use std::fmt; + use std::marker::PhantomData; + use std::str::FromStr; + + pub struct OptionFromStrVisitor { + _marker: PhantomData, + } + + impl Default for OptionFromStrVisitor { + fn default() -> Self { + Self { + _marker: PhantomData::default(), + } + } + } + + impl<'de, T: FromStr> Visitor<'de> for OptionFromStrVisitor { + type Value = Option; + + fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result { + formatter.write_str("an optional type that parses from a string") + } + + #[inline] + fn visit_unit(self) -> Result + where + E: Error, + { + Ok(None) + } + + #[inline] + fn visit_none(self) -> Result + where + E: Error, + { + Ok(None) + } + + #[inline] + fn visit_some(self, deserializer: D) -> Result + where + D: Deserializer<'de>, + { + super::deserialize_from_string(deserializer).map(Some) + } + } +} diff --git a/server/nominatim/src/types.rs b/server/nominatim/src/types.rs new file mode 100644 index 00000000..738ee9ba --- /dev/null +++ b/server/nominatim/src/types.rs @@ -0,0 +1,271 @@ +pub use serde::{Deserialize, Serialize}; +pub use std::collections::HashMap; +use std::convert::Infallible; +use std::fmt; +use std::str::FromStr; + +#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)] +#[serde(from = "String")] +#[serde(into = "String")] +pub enum OsmType { + Node, + Way, + Relation, + Other(String), +} + +impl FromStr for OsmType { + type Err = Infallible; + + fn from_str(s: &str) -> Result { + Ok(match s { + "node" => Self::Node, + "way" => Self::Way, + "relation" => Self::Relation, + _ => Self::Other(s.to_string()), + }) + } +} + +impl fmt::Display for OsmType { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + Self::Node => write!(f, "node"), + Self::Way => write!(f, "way"), + Self::Relation => write!(f, "relation"), + Self::Other(s) => write!(f, "{}", s), + } + } +} + +impl From for OsmType { + fn from(s: String) -> Self { + match s.as_str() { + "node" => Self::Node, + "way" => Self::Way, + "relation" => Self::Relation, + _ => Self::Other(s), + } + } +} + +impl From for String { + fn from(osm_type: OsmType) -> Self { + match osm_type { + OsmType::Node => "node".to_string(), + OsmType::Way => "way".to_string(), + OsmType::Relation => "relation".to_string(), + OsmType::Other(s) => s, + } + } +} + +#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)] +pub struct Country { + #[serde(skip_serializing_if = "Option::is_none")] + pub country: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub country_code: Option, +} + +#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)] +pub struct Region { + #[serde(skip_serializing_if = "Option::is_none")] + pub region: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub state: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub state_district: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub county: Option, +} + +#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)] +pub struct Municipality { + #[serde(skip_serializing_if = "Option::is_none")] + pub municiplality: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub city: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub town: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub village: Option, +} + +#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)] +pub struct CityDistrict { + #[serde(skip_serializing_if = "Option::is_none")] + pub city_district: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub district: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub borough: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub suburb: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub subdivision: Option, +} + +#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)] +pub struct Hamlet { + #[serde(skip_serializing_if = "Option::is_none")] + pub hamlet: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub croft: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub isolated_dwelling: Option, +} + +#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)] +pub struct Neighbourhood { + #[serde(skip_serializing_if = "Option::is_none")] + pub neighbourhood: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub allotments: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub quarter: Option, +} + +#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)] +pub struct CityBlock { + #[serde(skip_serializing_if = "Option::is_none")] + pub city_block: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub residental: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub farm: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub farmyard: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub industrial: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub commercial: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub retail: Option, +} + +#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)] +pub struct House { + #[serde(skip_serializing_if = "Option::is_none")] + pub house_number: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub house_name: Option, +} + +#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)] +pub struct Place { + #[serde(skip_serializing_if = "Option::is_none")] + pub emergency: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub historic: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub military: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub natural: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub landuse: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub place: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub railway: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub manmade: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub aerialway: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub boundary: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub amenity: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub aeroway: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub club: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub leisure: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub office: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub moutainpass: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub shop: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub tourism: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub bridge: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub tunnel: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub waterway: Option, +} + +#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)] +pub struct Address { + pub continent: Option, + #[serde(flatten)] + pub country: Country, + #[serde(flatten)] + pub region: Region, + #[serde(flatten)] + pub municipality: Municipality, + #[serde(flatten)] + pub city_district: CityDistrict, + #[serde(flatten)] + pub hamlet: Hamlet, + #[serde(flatten)] + pub neighbourhood: Neighbourhood, + #[serde(flatten)] + pub city_block: CityBlock, + pub road: Option, + #[serde(flatten)] + pub house: House, + #[serde(flatten)] + pub place: Place, + pub postcode: Option, +} + +#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)] +#[serde(untagged)] +pub enum ID { + #[serde(deserialize_with = "crate::serde_utils::deserialize_from_string")] + #[serde(serialize_with = "crate::serde_utils::serialize_as_string")] + String(String), + Num(u64), +} + +#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)] +pub struct Response { + /// Reference to the Nominatim internal database ID. + pub place_id: Option, + /// The type of this response. Likely a `node`, `way` or `relation`. + pub osm_type: Option, + /// Reference to the OSM object + pub osm_id: Option, + #[serde( + deserialize_with = "crate::serde_utils::deserialize_from_string_opt" + )] + #[serde(serialize_with = "crate::serde_utils::serialize_as_string_opt")] + /// Longitude of the centroid of the object + pub lon: Option, + #[serde( + deserialize_with = "crate::serde_utils::deserialize_from_string_opt" + )] + #[serde(serialize_with = "crate::serde_utils::serialize_as_string_opt")] + /// Latitude of the centroid of the object + pub lat: Option, + /// A license + pub licence: Option, + /// Dictionary of address details. + pub address: Option
    , + /// Full comma-separated address + pub display_name: Option, + /// Link to class icon (if available) + pub icon: Option, + /// The main OSM tag + pub class: Option, + /// The main OSM tag + pub r#type: Option, + /// Computed importance rank + pub importance: Option, + /// Bounding box + pub boundingbox: [String; 4], +} diff --git a/server/nominatim/src/util.rs b/server/nominatim/src/util.rs new file mode 100644 index 00000000..44a529b7 --- /dev/null +++ b/server/nominatim/src/util.rs @@ -0,0 +1,28 @@ +pub trait RequestBuilderHelper { + fn query_s(self, key: &str, val: &str) -> Self; + fn query_opt<'a, S: Into>>( + self, + key: &str, + val: S, + ) -> Self; +} + +impl RequestBuilderHelper for reqwest::RequestBuilder { + fn query_s(self, key: &str, val: &str) -> Self { + self.query(&[(key, val)]) + } + + #[allow(clippy::option_if_let_else)] + fn query_opt<'a, S: Into>>( + self, + key: &str, + val: S, + ) -> Self { + let val: Option<&String> = val.into(); + if let Some(val) = val { + self.query_s(key, val) + } else { + self + } + } +} From fde5cc218d6468f88017d9416cdcabe0a2d8c603 Mon Sep 17 00:00:00 2001 From: Derick M <58572875+TurtIeSocks@users.noreply.github.com> Date: Tue, 10 Jan 2023 02:04:31 -0500 Subject: [PATCH 10/10] move stepper to only first tab --- .../dialogs/import/ImportWizard.tsx | 22 +++++++++---------- .../src/components/dialogs/import/MiniMap.tsx | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/client/src/components/dialogs/import/ImportWizard.tsx b/client/src/components/dialogs/import/ImportWizard.tsx index 989e2502..d9220051 100644 --- a/client/src/components/dialogs/import/ImportWizard.tsx +++ b/client/src/components/dialogs/import/ImportWizard.tsx @@ -204,6 +204,17 @@ export default function ImportWizard({ onClose }: { onClose?: () => void }) { ), 3: , }[step] || null} + + {['Import', 'Properties', 'Assign', 'Confirm'].map((label) => ( + + {label} + + ))} + void }) { - - {['Import', 'Properties', 'Assign', 'Confirm'].map((label) => ( - - {label} - - ))} - ) } diff --git a/client/src/components/dialogs/import/MiniMap.tsx b/client/src/components/dialogs/import/MiniMap.tsx index c0a2b97b..72f6e006 100644 --- a/client/src/components/dialogs/import/MiniMap.tsx +++ b/client/src/components/dialogs/import/MiniMap.tsx @@ -62,7 +62,7 @@ export default function MiniMap({ filtered }: { filtered: FeatureCollection }) { Projects:

    ${(feature?.properties?.projects || []) - ?.map((p: number) => useStatic.getState().projects[p]) + ?.map((p: number) => useStatic.getState().projects[p].name) .join(', ')}