diff --git a/ios/App/App/capacitor.config.json b/ios/App/App/capacitor.config.json index 091c11c..0cd908d 100644 --- a/ios/App/App/capacitor.config.json +++ b/ios/App/App/capacitor.config.json @@ -2,7 +2,5 @@ "appId": "de.reedu.senseboxbike", "appName": "senseBox:Bike", "webDir": "out", - "server": { - "url": "http://192.168.2.135:3000" - } + "server": {} } diff --git a/package.json b/package.json index fdb2dd1..6f4624a 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "@capacitor/haptics": "^5.0.6", "@capacitor/ios": "^5.5.1", "@capacitor/preferences": "^5.0.6", - "@felixerdy/background-geolocation": "1.2.17", + "@felixerdy/background-geolocation": "1.2.18", "@heroicons/react": "^2.0.18", "@hookform/resolvers": "^3.3.1", "@radix-ui/react-dialog": "^1.0.4", @@ -36,19 +36,20 @@ "@radix-ui/react-toggle": "^1.0.3", "@react-spring/web": "^9.7.3", "@tremor/react": "^3.11.1", - "@turf/circle": "^6.5.0", - "@turf/helpers": "^6.5.0", + "@turf/turf": "^6.5.0", "autoprefixer": "10.4.16", "axios": "^1.6.2", "class-variance-authority": "^0.7.0", "clsx": "^2.0.0", - "eslint": "8.53.0", - "eslint-config-next": "14.0.2", + "date-fns": "^2.30.0", + "eslint": "8.54.0", + "eslint-config-next": "14.0.3", + "eslint-config-prettier": "^9.0.0", "geist": "^1.1.0", "lodash.debounce": "^4.0.8", "lucide-react": "^0.292.0", "maplibre-gl": "^3.6.1", - "next": "14.0.2", + "next": "14.0.3", "next-themes": "^0.2.1", "postcss": "8.4.31", "react": "18.2.0", @@ -60,6 +61,7 @@ "tailwindcss": "3.3.5", "tailwindcss-animate": "^1.0.7", "typescript": "5.2.2", + "uuid": "^9.0.1", "vaul": "^0.7.9", "zod": "^3.22.2", "zustand": "^4.4.6" @@ -68,10 +70,11 @@ "@capacitor/assets": "^3.0.1", "@capacitor/cli": "^5.5.1", "@types/lodash.debounce": "^4.0.9", - "@types/node": "20.9.0", + "@types/node": "20.9.2", "@types/react": "18.2.37", "@types/react-dom": "18.2.15", - "eslint-config-prettier": "^9.0.0", + "@types/turf": "^3.5.32", + "@types/uuid": "^9.0.7", "eslint-plugin-unused-imports": "^3.0.0", "husky": "^8.0.3", "prettier": "^3.1.0", diff --git a/src/app/tracks/page.tsx b/src/app/tracks/page.tsx new file mode 100644 index 0000000..7262ccb --- /dev/null +++ b/src/app/tracks/page.tsx @@ -0,0 +1,9 @@ +import TrackWrapper from '@/components/Tracks/track-wrapper' + +export default function TracksPage() { + return ( +
+ +
+ ) +} diff --git a/src/components/Device/DeviceMapWrapper.tsx b/src/components/Device/DeviceMapWrapper.tsx index 7033cfb..7b1c6ab 100644 --- a/src/components/Device/DeviceMapWrapper.tsx +++ b/src/components/Device/DeviceMapWrapper.tsx @@ -1,54 +1,14 @@ -'use client' - -import MapComponent from '@/components/Map/Map' -import useSenseBox from '@/lib/useSenseBox' -import LocationMarker from '@/components/Map/LocationMarker' -import LocationHistory from '@/components/Map/LocationHistory' import MeasurementsGrid from '../Map/MeasurementsGrid' -import { useEffect, useRef } from 'react' -import { MapRef } from 'react-map-gl/dist/esm/exports-maplibre' +import TrajectoryMap from './TrajectoryMap' export default function DeviceMapWrapper() { - const { values } = useSenseBox() - - const mapRef = useRef(null) - - useEffect(() => { - const latestValue = values.at(-1) - if (latestValue && latestValue.gps_lat && latestValue.gps_lng) { - mapRef.current?.flyTo({ - center: [latestValue.gps_lng, latestValue.gps_lat], - zoom: mapRef.current?.getZoom() > 10 ? mapRef.current.getZoom() : 15, - }) - } - }, [values]) - return (
- - {values && values.length > 0 && ( - <> - - - - )} - +
) diff --git a/src/components/Device/SettingsDrawer.tsx b/src/components/Device/SettingsDrawer.tsx index d477f28..610d574 100644 --- a/src/components/Device/SettingsDrawer.tsx +++ b/src/components/Device/SettingsDrawer.tsx @@ -1,9 +1,18 @@ 'use client' +import { useSettingsStore } from '@/lib/store/useSettingsStore' +import { useUIStore } from '@/lib/store/useUIStore' +import useSenseBox, { BackgroundGeolocation } from '@/lib/useSenseBox' +import { App } from '@capacitor/app' +import { PluginListenerHandle } from '@capacitor/core' import { zodResolver } from '@hookform/resolvers/zod' +import { DialogClose } from '@radix-ui/react-dialog' import { Cog, ExternalLinkIcon } from 'lucide-react' +import { useEffect, useState } from 'react' import { useForm } from 'react-hook-form' +import { Drawer } from 'vaul' import * as z from 'zod' +import { Button } from '../ui/button' import { Form, FormControl, @@ -14,30 +23,39 @@ import { } from '../ui/form' import { Slider } from '../ui/slider' import { Switch } from '../ui/switch' -import { useSettingsStore } from '@/lib/store/useSettingsStore' -import { Button } from '../ui/button' -import { DialogClose } from '@radix-ui/react-dialog' -import useSenseBox, { BackgroundGeolocation } from '@/lib/useSenseBox' -import { Drawer } from 'vaul' -import { useEffect, useState } from 'react' const formSchema = z.object({ uploadInterval: z.number().min(1).max(60), switchUseSmartphoneGPS: z.boolean(), switchLiveMode: z.boolean(), + switchReducedMotion: z.boolean(), }) export default function SettingsDrawer() { const uploadInterval = useSettingsStore(state => state.uploadInterval) const useDeviceGPS = useSettingsStore(state => state.useSenseBoxGPS) + const { reducedMotion, setReducedMotion } = useUIStore() const { send } = useSenseBox() + useEffect(() => { + let listener: PluginListenerHandle | undefined + + App.addListener('backButton', () => { + setOpen(false) + }).then(l => (listener = l)) + + return () => { + if (listener) listener.remove() + } + }, []) + const form = useForm>({ resolver: zodResolver(formSchema), defaultValues: { uploadInterval: uploadInterval, switchUseSmartphoneGPS: !useDeviceGPS, switchLiveMode: false, + switchReducedMotion: reducedMotion, }, }) @@ -54,6 +72,7 @@ export default function SettingsDrawer() { uploadInterval: values.uploadInterval, useSenseBoxGPS: !values.switchUseSmartphoneGPS, }) + setReducedMotion(values.switchReducedMotion) setOpen(false) } const [open, setOpen] = useState(false) @@ -79,9 +98,9 @@ export default function SettingsDrawer() { +
-
-
+

Einstellungen

diff --git a/src/components/Device/TrajectoryMap.tsx b/src/components/Device/TrajectoryMap.tsx new file mode 100644 index 0000000..df22801 --- /dev/null +++ b/src/components/Device/TrajectoryMap.tsx @@ -0,0 +1,86 @@ +'use client' + +import { useUIStore } from '@/lib/store/useUIStore' +import useSenseBox from '@/lib/useSenseBox' +import { bearing, point } from '@turf/turf' +import { LngLatLike } from 'maplibre-gl' +import { useEffect, useRef } from 'react' +import { MapRef } from 'react-map-gl/dist/esm/exports-maplibre' +import LocationHistory from '../Map/LocationHistory' +import LocationMarker from '../Map/LocationMarker' +import MapComponent from '../Map/Map' + +export default function TrajectoryMap() { + const { values } = useSenseBox() + const { reducedMotion } = useUIStore() + + const mapRef = useRef(null) + + useEffect(() => { + const latestValue = values.at(-1) + if ( + latestValue && + latestValue.gps_lat && + latestValue.gps_lng && + mapRef.current + ) { + const center = [latestValue.gps_lng, latestValue.gps_lat] as LngLatLike + const zoom = + mapRef.current?.getZoom() > 10 ? mapRef.current.getZoom() : 18 + let mapBearing = mapRef.current?.getBearing() + let pitch = mapRef.current?.getPitch() + const valueBefore = values.at(-2) + if ( + valueBefore?.gps_lat && + valueBefore?.gps_lng && + (latestValue?.gps_spd ?? 0) > 5 + ) { + mapBearing = bearing( + point([valueBefore.gps_lng, valueBefore.gps_lat]), + point([latestValue.gps_lng, latestValue.gps_lat]), + ) + pitch = 60 + } else { + mapBearing = 0 + pitch = 0 + } + + if (reducedMotion) { + mapRef.current?.setCenter(center) + mapRef.current?.setZoom(zoom) + mapRef.current?.setBearing(mapBearing) + mapRef.current?.setPitch(pitch) + } else { + mapRef.current?.flyTo({ + center, + zoom, + bearing: mapBearing, + pitch, + }) + } + } + }, [values]) + + return ( + + {values && values.length > 0 && ( + <> + + + + )} + + ) +} diff --git a/src/components/Map/LocationMarker.tsx b/src/components/Map/LocationMarker.tsx index d93735a..d201388 100644 --- a/src/components/Map/LocationMarker.tsx +++ b/src/components/Map/LocationMarker.tsx @@ -1,16 +1,14 @@ import { Location } from '@felixerdy/background-geolocation' import { Source, Layer } from 'react-map-gl/maplibre' -// @ts-ignore -import circle from '@turf/circle' +import { point, circle } from '@turf/turf' export default function LocationMarker({ location }: { location: Location }) { const circlePoly = circle( - [location?.longitude, location?.latitude], - location.accuracy, - { - units: 'meters', - }, + point([location?.longitude, location?.latitude]), + location.accuracy / 1000, + 64, + 'kilometers', ) return ( @@ -41,6 +39,7 @@ export default function LocationMarker({ location }: { location: Location }) { 'circle-color': '#007cbf', 'circle-stroke-width': 2, 'circle-stroke-color': '#fff', + 'circle-pitch-alignment': 'map', }} /> diff --git a/src/components/Map/MeasurementsGrid.tsx b/src/components/Map/MeasurementsGrid.tsx index ca15b85..47b46ed 100644 --- a/src/components/Map/MeasurementsGrid.tsx +++ b/src/components/Map/MeasurementsGrid.tsx @@ -1,3 +1,5 @@ +'use client' + import { useAuthStore } from '@/lib/store/useAuthStore' import { useUIStore } from '@/lib/store/useUIStore' import useSenseBox from '@/lib/useSenseBox' @@ -35,119 +37,108 @@ export default function MeasurementsGrid() { !selectedBox || values.length === 0 ? '' : 'divide-y', )} > -
- ({ x: v.timestamp, y: v.gps_spd })), - index: 'x', - categories: ['y'], - }} - /> - ({ x: v.timestamp, y: v.temperature })), - index: 'x', - categories: ['y'], - }} - /> - ({ x: v.timestamp, y: v.humidity })), - index: 'x', - categories: ['y'], - }} - /> - e.pm1) - .map(v => ({ + {values.length > 0 && ( +
+ ({ x: v.timestamp, y: v.gps_spd })), + index: 'x', + categories: ['y'], + }} + /> + ({ x: v.timestamp, y: v.temperature })), + index: 'x', + categories: ['y'], + }} + /> + ({ x: v.timestamp, y: v.humidity })), + index: 'x', + categories: ['y'], + }} + /> + e.pm1) + .map(v => ({ + x: v.timestamp, + pm1: v.pm1, + pm2_5: v.pm2_5, + pm4: v.pm4, + pm10: v.pm10, + })), + index: 'x', + categories: ['pm1', 'pm2_5', 'pm4', 'pm10'], + colors: ['indigo', 'cyan', 'amber', 'emerald'], + }} + /> + ({ x: v.timestamp, y: v.distance_l })), + index: 'x', + categories: ['y'], + }} + decimals={0} + /> + + ({ x: v.timestamp, - pm1: v.pm1, - pm2_5: v.pm2_5, - pm4: v.pm4, - pm10: v.pm10, + acceleration_x: v.acceleration_x, + acceleration_y: v.acceleration_y, + acceleration_z: v.acceleration_z, })), - index: 'x', - categories: ['pm1', 'pm2_5', 'pm4', 'pm10'], - colors: ['indigo', 'cyan', 'amber', 'emerald'], - }} - /> - ({ x: v.timestamp, y: v.distance_l })), - index: 'x', - categories: ['y'], - }} - decimals={0} - /> - - ({ - x: v.timestamp, - acceleration_x: v.acceleration_x, - acceleration_y: v.acceleration_y, - acceleration_z: v.acceleration_z, - })), - index: 'x', - categories: [ - 'acceleration_x', - 'acceleration_y', - 'acceleration_z', - ], - colors: ['indigo', 'cyan', 'amber'], - }} - /> -
- {(!selectedBox || values.length === 0) && ( -
- {!selectedBox && ( -

- Bitte verknüpfen Sie eine senseBox über den Setup-Button. -

- )} - {selectedBox && !isConnected && ( -

- Sie können sich nun mit der senseBox verbinden und die Messwerte - aufzeichnen -

- )} - {selectedBox && isConnected && ( -

- Warten auf - Messwerte -

- )} + index: 'x', + categories: [ + 'acceleration_x', + 'acceleration_y', + 'acceleration_z', + ], + colors: ['indigo', 'cyan', 'amber'], + }} + /> +
+ )} + {selectedBox && isConnected && values.length === 0 && ( +
+

+ Warten auf + Messwerte +

)}
@@ -217,6 +208,7 @@ function GridItem({ unit, chartProps, decimals = 2, + chartType = 'area', }: { name: string value: number | (number | undefined)[] | undefined @@ -224,10 +216,13 @@ function GridItem({ unit: string chartProps: SparkAreaChartProps decimals?: number + chartType?: 'bar' | 'area' }) { const [selectedValue, setSelectedValue] = useState() const [labelIndex, setLabelIndex] = useState() + const { reducedMotion } = useUIStore() + useEffect(() => { if (value !== undefined && !Array.isArray(value)) { setSelectedValue(value) @@ -260,7 +255,7 @@ function GridItem({ } }} > - {chartProps && chartProps.data.length > 2 && ( + {chartProps && chartProps.data.length > 2 && !reducedMotion && (
+ + + + + + Track löschen + + + + + + + + + + ) +} diff --git a/src/components/Tracks/track-lib.ts b/src/components/Tracks/track-lib.ts new file mode 100644 index 0000000..d090b0f --- /dev/null +++ b/src/components/Tracks/track-lib.ts @@ -0,0 +1,26 @@ +import { Track } from '@/lib/store/useTracksStore' + +import { + bbox, + buffer, + point, + featureCollection, + lineString, + lineDistance, +} from '@turf/turf' + +export function getBBox(track: Track) { + return bbox( + buffer( + featureCollection( + track.measurements.map(m => point([m.gps_lng!, m.gps_lat!])), + ), + 0.2, + ), + ) +} + +export function getDistance(track: Track) { + const line = lineString(track.measurements.map(m => [m.gps_lng!, m.gps_lat!])) + return lineDistance(line, 'kilometers') +} diff --git a/src/components/Tracks/track-wrapper.tsx b/src/components/Tracks/track-wrapper.tsx new file mode 100644 index 0000000..aafed72 --- /dev/null +++ b/src/components/Tracks/track-wrapper.tsx @@ -0,0 +1,223 @@ +'use client' + +import { useTracksStore } from '@/lib/store/useTracksStore' +import { cn } from '@/lib/utils' +import { format, formatDuration, intervalToDuration, parseISO } from 'date-fns' +import { de } from 'date-fns/locale' +import { ClockIcon, GaugeIcon, RouteIcon, ThermometerIcon } from 'lucide-react' +import 'maplibre-gl/dist/maplibre-gl.css' +import Link from 'next/link' +import { Drawer } from 'vaul' +import LocationHistory from '../Map/LocationHistory' +import Map from '../Map/Map' +import { Button } from '../ui/button' +import { Card, CardContent, CardHeader, CardTitle } from '../ui/card' +import DeleteTrackDialog from './DeleteTrackDialog' +import { getBBox, getDistance } from './track-lib' + +export default function TrackWrapper() { + const { tracks } = useTracksStore() + + return ( +
+ {tracks.length === 0 && ( +
+
+

Keine Tracks

+

+ Verbinde dich mit deiner senseBox und Tracke deine nächste Fahrt +

+ + + +
+
+ )} + {tracks.map(track => { + return ( + + + +
+ + + +
+ {format(parseISO(track.start), 'PPpp', { + locale: de, + })} +
+
+
+
+ + + +
+
+
+
+ + + +
+
+ {track.start && track.end && ( + + + + Dauer + + + + +
+ {formatDuration( + intervalToDuration({ + start: parseISO(track.start), + end: parseISO(track.end), + }), + { + locale: de, + }, + )} +
+

+ Start:{' '} + {format(parseISO(track.start), 'PPpp', { + locale: de, + })} +
+ Ende:{' '} + {format(parseISO(track.end), 'PPpp', { + locale: de, + })} +

+
+
+ )} +
+
+ + + + Distanz + + + + +
+ {getDistance(track).toFixed(2)}{' '} + km +
+
+
+ + + + Ø Speed + + + + +
+ {( + track.measurements.reduce( + (p, c) => p + c.gps_spd!, + 0, + ) / track.measurements.length + ).toFixed(2)}{' '} + km/h +
+
+
+ + + + Temperatur + + + + +
+ {( + track.measurements.reduce( + (p, c) => p + c.temperature!, + 0, + ) / track.measurements.length + ).toFixed(2)}{' '} + °C +
+
+
+ + + + Luftfeuchte + + + + +
+ {( + track.measurements.reduce( + (p, c) => p + c.humidity!, + 0, + ) / track.measurements.length + ).toFixed(2)}{' '} + % +
+
+
+ + + + Abstand + + + + +
+ {( + track.measurements.reduce( + (p, c) => p + c.distance_l!, + 0, + ) / track.measurements.length + ).toFixed(2)}{' '} + cm +
+
+
+
+
+ +
+
+ + + + ) + })} +
+ ) +} diff --git a/src/components/Wizard/WizardDrawer.tsx b/src/components/Wizard/WizardDrawer.tsx index 31234f6..45b75ac 100644 --- a/src/components/Wizard/WizardDrawer.tsx +++ b/src/components/Wizard/WizardDrawer.tsx @@ -1,17 +1,19 @@ -import { Drawer } from 'vaul' -import { AlertOctagon, Check, ExternalLinkIcon, UserCog2 } from 'lucide-react' import ConnectionSelection from '@/components/Wizard/ConnectionSelection' -import { Swiper, SwiperSlide } from 'swiper/react' -import { Navigation } from 'swiper/modules' +import SelectDevice from '@/components/Wizard/SelectDevice' +import { signout } from '@/lib/api/openSenseMapClient' +import { useAuthStore } from '@/lib/store/useAuthStore' +import { useUIStore } from '@/lib/store/useUIStore' +import { App } from '@capacitor/app' +import { PluginListenerHandle } from '@capacitor/core' +import { AlertOctagon, Check, ExternalLinkIcon, UserCog2 } from 'lucide-react' +import { useEffect } from 'react' import 'swiper/css' import 'swiper/css/navigation' import 'swiper/css/pagination' -import SelectDevice from '@/components/Wizard/SelectDevice' -import { useEffect } from 'react' -import { useAuthStore } from '@/lib/store/useAuthStore' -import { signout } from '@/lib/api/openSenseMapClient' +import { Navigation } from 'swiper/modules' +import { Swiper, SwiperSlide } from 'swiper/react' +import { Drawer } from 'vaul' import { toast } from '../ui/use-toast' -import { useUIStore } from '@/lib/store/useUIStore' import LoginOrRegister from './LoginOrRegister' export default function WizardDrawer({ @@ -30,6 +32,18 @@ export default function WizardDrawer({ } }, [open]) + useEffect(() => { + let listener: PluginListenerHandle | undefined + + App.addListener('backButton', () => { + setOpen(false) + }).then(l => (listener = l)) + + return () => { + if (listener) listener.remove() + } + }, []) + return ( = { + '/': 'senseBox:bike', + '/tracks': 'Tracks', +} const TopBar = () => { + const pathname = usePathname() + + const isHome = pathname === '/' + return (
-

senseBox:bike

+
+ {!isHome && ( + + + + )} +

{titles[pathname]}

+
@@ -27,6 +45,11 @@ const TopBar = () => { + + + Tracks + + Privacy Policy diff --git a/src/components/ui/animated-number.tsx b/src/components/ui/animated-number.tsx index 3ef7421..c2e519b 100644 --- a/src/components/ui/animated-number.tsx +++ b/src/components/ui/animated-number.tsx @@ -1,5 +1,6 @@ 'use client' +import { useUIStore } from '@/lib/store/useUIStore' import { animated, useSpring } from '@react-spring/web' type AnimatedNumberProps = React.HTMLAttributes & { @@ -12,8 +13,19 @@ export default function AnimatedNumber({ decimals, ...props }: AnimatedNumberProps) { + const { reducedMotion } = useUIStore() + const springProps = useSpring({ val: children, from: { val: 0 } }) + if (reducedMotion) + return ( + + {new Intl.NumberFormat('de-DE', { + maximumFractionDigits: decimals || 0, + }).format(children)} + + ) + return ( {springProps.val.to(val => diff --git a/src/lib/SenseBoxDataParser.ts b/src/lib/SenseBoxDataParser.ts index 3a197cb..b22b626 100644 --- a/src/lib/SenseBoxDataParser.ts +++ b/src/lib/SenseBoxDataParser.ts @@ -2,6 +2,8 @@ import { senseBoxDataRecord, useSenseBoxValuesStore, } from './store/useSenseBoxValuesStore' +import { useTrackRecordStore } from './store/useTrackRecordStore' +import { useUploadStore } from './store/useUploadStore' export class SenseBoxDataParser { private static instance: SenseBoxDataParser @@ -78,6 +80,9 @@ export class SenseBoxDataParser { ) useSenseBoxValuesStore.getState().addValues(buckets) + if (useUploadStore.getState().isRecording) { + useTrackRecordStore.getState().addMeasurements(buckets) + } const completeTimestamps = buckets.map(b => b.timestamp) diff --git a/src/lib/store/useTrackRecordStore.ts b/src/lib/store/useTrackRecordStore.ts new file mode 100644 index 0000000..7e90344 --- /dev/null +++ b/src/lib/store/useTrackRecordStore.ts @@ -0,0 +1,23 @@ +import { create } from 'zustand' +import { senseBoxDataRecord } from './useSenseBoxValuesStore' + +interface TrackRecordStore { + start: Date | undefined + setStart: (_start: Date) => void + end: Date | undefined + setEnd: (_end: Date) => void + measurements: senseBoxDataRecord[] + addMeasurements: (_measurements: senseBoxDataRecord[]) => void + reset: () => void +} + +export const useTrackRecordStore = create(set => ({ + start: undefined, + setStart: start => set({ start }), + end: undefined, + setEnd: end => set({ end }), + measurements: [], + addMeasurements: measurements => + set(state => ({ measurements: [...state.measurements, ...measurements] })), + reset: () => set({ measurements: [], start: undefined, end: undefined }), +})) diff --git a/src/lib/store/useTracksStore.ts b/src/lib/store/useTracksStore.ts new file mode 100644 index 0000000..9fca3ea --- /dev/null +++ b/src/lib/store/useTracksStore.ts @@ -0,0 +1,32 @@ +import { create } from 'zustand' +import { senseBoxDataRecord } from './useSenseBoxValuesStore' +import { createJSONStorage, persist } from 'zustand/middleware' +import { capPreferencesStorage } from './capPreferencesZustandStorage' + +export type Track = { + id: string + start: string + end: string + measurements: senseBoxDataRecord[] +} + +interface TracksStore { + tracks: Track[] + addTrack: (_track: Track) => void + removeTrack: (_track: Track) => void +} + +export const useTracksStore = create()( + persist( + set => ({ + tracks: [], + addTrack: track => set(state => ({ tracks: [...state.tracks, track] })), + removeTrack: track => + set(state => ({ tracks: state.tracks.filter(t => t.id !== track.id) })), + }), + { + name: 'tracks-storage', + storage: createJSONStorage(() => capPreferencesStorage), + }, + ), +) diff --git a/src/lib/store/useUIStore.ts b/src/lib/store/useUIStore.ts index 8ac5559..1eb9183 100644 --- a/src/lib/store/useUIStore.ts +++ b/src/lib/store/useUIStore.ts @@ -2,10 +2,14 @@ import { create } from 'zustand' interface UIStoreInterface { showWizardDrawer: boolean - setShowWizardDrawer: (showWizardDrawer: boolean) => void + setShowWizardDrawer: (_showWizardDrawer: boolean) => void + reducedMotion: boolean + setReducedMotion: (_reducedMotion: boolean) => void } export const useUIStore = create()(set => ({ showWizardDrawer: false, setShowWizardDrawer: showWizardDrawer => set({ showWizardDrawer }), + reducedMotion: window.matchMedia('(prefers-reduced-motion: reduce)').matches, + setReducedMotion: reducedMotion => set({ reducedMotion }), })) diff --git a/src/lib/store/useUploadStore.ts b/src/lib/store/useUploadStore.ts index b0bd211..55f92c6 100644 --- a/src/lib/store/useUploadStore.ts +++ b/src/lib/store/useUploadStore.ts @@ -1,11 +1,15 @@ import { create } from 'zustand' interface UploadStoreInterface { + isRecording: boolean + setRecording: (_isRecording: boolean) => void lastUpload: Date | undefined - setLastUpload: (lastUpload: Date) => void + setLastUpload: (_lastUpload: Date) => void } export const useUploadStore = create()(set => ({ + isRecording: false, + setRecording: isRecording => set({ isRecording }), lastUpload: undefined, setLastUpload: lastUpload => set({ lastUpload }), })) diff --git a/src/lib/useSenseBox.ts b/src/lib/useSenseBox.ts index bd3a41e..093c6ff 100644 --- a/src/lib/useSenseBox.ts +++ b/src/lib/useSenseBox.ts @@ -1,17 +1,17 @@ -import { useEffect, useRef, useState } from 'react' +import { registerPlugin } from '@capacitor/core' import { BackgroundGeolocationPlugin, Location, } from '@felixerdy/background-geolocation' -import { registerPlugin } from '@capacitor/core' +import { useEffect, useRef, useState } from 'react' -import useBLEDevice from './useBLE' +import { SenseBoxDataParser } from './SenseBoxDataParser' import { senseBoxDataRecord, useSenseBoxValuesStore, } from './store/useSenseBoxValuesStore' import { useSettingsStore } from './store/useSettingsStore' -import { SenseBoxDataParser } from './SenseBoxDataParser' +import useBLEDevice from './useBLE' const BLE_SENSEBOX_SERVICE = 'CF06A218-F68E-E0BE-AD04-8EBC1EB0BC84' const BLE_TEMPERATURE_CHARACTERISTIC = '2CDF2174-35BE-FDC4-4CA2-6FD173F8B3A8' @@ -145,6 +145,16 @@ export default function useSenseBox(timestampInterval: number = 500) { listen(BLE_SENSEBOX_SERVICE, BLE_GPS_CHARACTERISTIC, async data => { const [gps_lat, gps_lng, gps_spd] = parsePackages(data) + // use smartphone GPS. no need to process the senseBox GPS data + if (!useSenseBoxGPSRef.current) { + pushDataToProcess({ + gps_lat, + gps_lng, + gps_spd, + }) + return + } + try { const { location } = await BackgroundGeolocation.processLocation({ location: { diff --git a/src/lib/useUploadToOpenSenseMap.ts b/src/lib/useUploadToOpenSenseMap.ts index 3e812c8..c357d13 100644 --- a/src/lib/useUploadToOpenSenseMap.ts +++ b/src/lib/useUploadToOpenSenseMap.ts @@ -5,6 +5,9 @@ import match from './senseBoxSensorIdMatcher' import { uploadData } from './api/openSenseMapClient' import { useUploadStore } from './store/useUploadStore' import { useSettingsStore } from './store/useSettingsStore' +import { useTracksStore } from './store/useTracksStore' +import { useTrackRecordStore } from './store/useTrackRecordStore' +import { v4 as uuidv4 } from 'uuid' const useUploadToOpenSenseMap = () => { const [isLoading, setIsLoading] = useState(false) @@ -15,6 +18,7 @@ const useUploadToOpenSenseMap = () => { const [intervalId, setIntervalId] = useState() const lastUpload = useUploadStore(state => state.lastUpload) + const setRecording = useUploadStore(state => state.setRecording) const lastUploadRef = useRef() lastUploadRef.current = lastUpload const setLastUpload = useUploadStore(state => state.setLastUpload) @@ -27,13 +31,23 @@ const useUploadToOpenSenseMap = () => { const uploadStartRef = useRef() uploadStartRef.current = uploadStart + const { + setStart, + setEnd, + measurements, + start: recordStart, + end, + reset, + } = useTrackRecordStore() + const addTrack = useTracksStore(state => state.addTrack) + useEffect(() => { if (!intervalId) { return } - stop() - start() + stop(true) + start(true) return () => { console.log('in effect cleanup') @@ -42,19 +56,41 @@ const useUploadToOpenSenseMap = () => { } }, [interval]) - function start() { + useEffect(() => { + if (end) { + addTrack({ + id: uuidv4(), + start: recordStart?.toISOString()!, + end: end.toISOString()!, + measurements, + }) + reset() + } + }, [end]) + + function start(intervalChange?: boolean) { setUploadStart(new Date()) const intervalId = setInterval(() => { uploadToOpenSenseMap() }, interval) setIntervalId(intervalId) + + if (!intervalChange) { + setRecording(true) + setStart(new Date()) + } } - function stop() { + function stop(intervalChange?: boolean) { clearInterval(intervalId) setIntervalId(undefined) setUploadStart(undefined) uploadToOpenSenseMap() // upload last data + + if (!intervalChange) { + setRecording(false) + setEnd(new Date()) + } } async function uploadToOpenSenseMap() { diff --git a/src/styles/globals.css b/src/styles/globals.css index 889650c..d656f18 100644 --- a/src/styles/globals.css +++ b/src/styles/globals.css @@ -58,6 +58,6 @@ } } -.maplibregl-ctrl-attrib { +/* .maplibregl-ctrl-attrib { margin-bottom: max(env(safe-area-inset-bottom), 0.5rem) !important; -} +} */ diff --git a/yarn.lock b/yarn.lock index c025138..c7263e4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -183,15 +183,15 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.53.0": - version "8.53.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.53.0.tgz#bea56f2ed2b5baea164348ff4d5a879f6f81f20d" - integrity sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w== +"@eslint/js@8.54.0": + version "8.54.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.54.0.tgz#4fab9a2ff7860082c304f750e94acd644cf984cf" + integrity sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ== -"@felixerdy/background-geolocation@1.2.17": - version "1.2.17" - resolved "https://registry.yarnpkg.com/@felixerdy/background-geolocation/-/background-geolocation-1.2.17.tgz#11f08c03cd379eb19347bf180ba612b7dc1a0a19" - integrity sha512-s2gtWJDNCJAYY+z2EvJsVeLE/+BB3wv9U6Zh+dhg5+apj5jALCxg0HCIE94lyAWIx49QCYEEHWKaRqAL5t6wNg== +"@felixerdy/background-geolocation@1.2.18": + version "1.2.18" + resolved "https://registry.yarnpkg.com/@felixerdy/background-geolocation/-/background-geolocation-1.2.18.tgz#564fb6d407adf2a2edf6101dd0adc85d5f395f7e" + integrity sha512-/RmOisFalv2iVpXzBVZmy82Cvya4JG3AZkGrgixXinWKGvsQJXIRT7go5QUu4Qb9j/rX+hyBGTY5ILyfvxV6ug== "@floating-ui/core@^1.4.2": version "1.5.0" @@ -458,62 +458,62 @@ rw "^1.3.3" sort-object "^3.0.3" -"@next/env@14.0.2": - version "14.0.2" - resolved "https://registry.yarnpkg.com/@next/env/-/env-14.0.2.tgz#c1fb535983bca768e7eccd7b9cf4636127fc6d25" - integrity sha512-HAW1sljizEaduEOes/m84oUqeIDAUYBR1CDwu2tobNlNDFP3cSm9d6QsOsGeNlIppU1p/p1+bWbYCbvwjFiceA== +"@next/env@14.0.3": + version "14.0.3" + resolved "https://registry.yarnpkg.com/@next/env/-/env-14.0.3.tgz#9a58b296e7ae04ffebce8a4e5bd0f87f71de86bd" + integrity sha512-7xRqh9nMvP5xrW4/+L0jgRRX+HoNRGnfJpD+5Wq6/13j3dsdzxO3BCXn7D3hMqsDb+vjZnJq+vI7+EtgrYZTeA== -"@next/eslint-plugin-next@14.0.2": - version "14.0.2" - resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-14.0.2.tgz#421799f46116d8032f1739ce5ce89822453c8f03" - integrity sha512-APrYFsXfAhnysycqxHcpg6Y4i7Ukp30GzVSZQRKT3OczbzkqGjt33vNhScmgoOXYBU1CfkwgtXmNxdiwv1jKmg== +"@next/eslint-plugin-next@14.0.3": + version "14.0.3" + resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-14.0.3.tgz#f32413be4db69f698538c38fd6f4091a2feb54c6" + integrity sha512-j4K0n+DcmQYCVnSAM+UByTVfIHnYQy2ODozfQP+4RdwtRDfobrIvKq1K4Exb2koJ79HSSa7s6B2SA8T/1YR3RA== dependencies: glob "7.1.7" -"@next/swc-darwin-arm64@14.0.2": - version "14.0.2" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.0.2.tgz#eba35a1425fee5d305903c85ae0d6d2b0d512c7b" - integrity sha512-i+jQY0fOb8L5gvGvojWyZMfQoQtDVB2kYe7fufOEiST6sicvzI2W5/EXo4lX5bLUjapHKe+nFxuVv7BA+Pd7LQ== - -"@next/swc-darwin-x64@14.0.2": - version "14.0.2" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-14.0.2.tgz#8adb4dfc3d596c0816da67df9b75603218cf2a42" - integrity sha512-zRCAO0d2hW6gBEa4wJaLn+gY8qtIqD3gYd9NjruuN98OCI6YyelmhWVVLlREjS7RYrm9OUQIp/iVJFeB6kP1hg== - -"@next/swc-linux-arm64-gnu@14.0.2": - version "14.0.2" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.0.2.tgz#1f88d066d44c9229a861815e3d449b0037dae14e" - integrity sha512-tSJmiaon8YaKsVhi7GgRizZoV0N1Sx5+i+hFTrCKKQN7s3tuqW0Rov+RYdPhAv/pJl4qiG+XfSX4eJXqpNg3dA== - -"@next/swc-linux-arm64-musl@14.0.2": - version "14.0.2" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.0.2.tgz#de9b2708abc35dd19429a662a11785d0c54d1ec7" - integrity sha512-dXJLMSEOwqJKcag1BeX1C+ekdPPJ9yXbWIt3nAadhbLx5CjACoB2NQj9Xcqu2tmdr5L6m34fR+fjGPs+ZVPLzA== - -"@next/swc-linux-x64-gnu@14.0.2": - version "14.0.2" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.0.2.tgz#64bd555dcbc7fd6c38cb86028baf7d7fc80bd4ac" - integrity sha512-WC9KAPSowj6as76P3vf1J3mf2QTm3Wv3FBzQi7UJ+dxWjK3MhHVWsWUo24AnmHx9qDcEtHM58okgZkXVqeLB+Q== - -"@next/swc-linux-x64-musl@14.0.2": - version "14.0.2" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.0.2.tgz#69e6abf0f516df69acbf663eeb8ed6fd8eebcc38" - integrity sha512-KSSAwvUcjtdZY4zJFa2f5VNJIwuEVnOSlqYqbQIawREJA+gUI6egeiRu290pXioQXnQHYYdXmnVNZ4M+VMB7KQ== - -"@next/swc-win32-arm64-msvc@14.0.2": - version "14.0.2" - resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.0.2.tgz#82bc49af0986f4b2c113b5f223a559fc51b49b9d" - integrity sha512-2/O0F1SqJ0bD3zqNuYge0ok7OEWCQwk55RPheDYD0va5ij7kYwrFkq5ycCRN0TLjLfxSF6xI5NM6nC5ux7svEQ== - -"@next/swc-win32-ia32-msvc@14.0.2": - version "14.0.2" - resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.0.2.tgz#2f1958ad82b7f7ec5da8ad8ac2f18ef7a8e7757f" - integrity sha512-vJI/x70Id0oN4Bq/R6byBqV1/NS5Dl31zC+lowO8SDu1fHmUxoAdILZR5X/sKbiJpuvKcCrwbYgJU8FF/Gh50Q== - -"@next/swc-win32-x64-msvc@14.0.2": - version "14.0.2" - resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.0.2.tgz#629174f587beb640a431a4a3fe4e26d5d4f8de52" - integrity sha512-Ut4LXIUvC5m8pHTe2j0vq/YDnTEyq6RSR9vHYPqnELrDapPhLNz9Od/L5Ow3J8RNDWpEnfCiQXuVdfjlNEJ7ug== +"@next/swc-darwin-arm64@14.0.3": + version "14.0.3" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.0.3.tgz#b1a0440ffbf69056451947c4aea5b6d887e9fbbc" + integrity sha512-64JbSvi3nbbcEtyitNn2LEDS/hcleAFpHdykpcnrstITFlzFgB/bW0ER5/SJJwUPj+ZPY+z3e+1jAfcczRLVGw== + +"@next/swc-darwin-x64@14.0.3": + version "14.0.3" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-14.0.3.tgz#48b527ef7eb5dbdcaf62fd107bc3a78371f36f09" + integrity sha512-RkTf+KbAD0SgYdVn1XzqE/+sIxYGB7NLMZRn9I4Z24afrhUpVJx6L8hsRnIwxz3ERE2NFURNliPjJ2QNfnWicQ== + +"@next/swc-linux-arm64-gnu@14.0.3": + version "14.0.3" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.0.3.tgz#0a36475a38b2855ab8ea0fe8b56899bc90184c0f" + integrity sha512-3tBWGgz7M9RKLO6sPWC6c4pAw4geujSwQ7q7Si4d6bo0l6cLs4tmO+lnSwFp1Tm3lxwfMk0SgkJT7EdwYSJvcg== + +"@next/swc-linux-arm64-musl@14.0.3": + version "14.0.3" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.0.3.tgz#25328a9f55baa09fde6364e7e47ade65c655034f" + integrity sha512-v0v8Kb8j8T23jvVUWZeA2D8+izWspeyeDGNaT2/mTHWp7+37fiNfL8bmBWiOmeumXkacM/AB0XOUQvEbncSnHA== + +"@next/swc-linux-x64-gnu@14.0.3": + version "14.0.3" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.0.3.tgz#594b747e3c8896b2da67bba54fcf8a6b5a410e5e" + integrity sha512-VM1aE1tJKLBwMGtyBR21yy+STfl0MapMQnNrXkxeyLs0GFv/kZqXS5Jw/TQ3TSUnbv0QPDf/X8sDXuMtSgG6eg== + +"@next/swc-linux-x64-musl@14.0.3": + version "14.0.3" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.0.3.tgz#a02da58fc6ecad8cf5c5a2a96a7f6030ec7f6215" + integrity sha512-64EnmKy18MYFL5CzLaSuUn561hbO1Gk16jM/KHznYP3iCIfF9e3yULtHaMy0D8zbHfxset9LTOv6cuYKJgcOxg== + +"@next/swc-win32-arm64-msvc@14.0.3": + version "14.0.3" + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.0.3.tgz#bf2be23d3ba2ebd0d4a9376a31f783efdb677b48" + integrity sha512-WRDp8QrmsL1bbGtsh5GqQ/KWulmrnMBgbnb+59qNTW1kVi1nG/2ndZLkcbs2GX7NpFLlToLRMWSQXmPzQm4tog== + +"@next/swc-win32-ia32-msvc@14.0.3": + version "14.0.3" + resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.0.3.tgz#839f8de85a4bf2c3c69242483ab87cb916427551" + integrity sha512-EKffQeqCrj+t6qFFhIFTRoqb2QwX1mU7iTOvMyLbYw3QtqTw9sMwjykyiMlZlrfm2a4fA84+/aeW+PMg1MjuTg== + +"@next/swc-win32-x64-msvc@14.0.3": + version "14.0.3" + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.0.3.tgz#27b623612b1d0cea6efe0a0d31aa1a335fc99647" + integrity sha512-ERhKPSJ1vQrPiwrs15Pjz/rvDHZmkmvbf/BjPN/UCOI++ODftT0GtasDPi0j+y6PPJi5HsXw+dpRaXUaw4vjuQ== "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -1088,33 +1088,1142 @@ resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== +"@turf/along@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/along/-/along-6.5.0.tgz#ab12eec58a14de60fe243a62d31a474f415c8fef" + integrity sha512-LLyWQ0AARqJCmMcIEAXF4GEu8usmd4Kbz3qk1Oy5HoRNpZX47+i5exQtmIWKdqJ1MMhW26fCTXgpsEs5zgJ5gw== + dependencies: + "@turf/bearing" "^6.5.0" + "@turf/destination" "^6.5.0" + "@turf/distance" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + +"@turf/angle@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/angle/-/angle-6.5.0.tgz#985934171284e109d41e19ed48ad91cf9709a928" + integrity sha512-4pXMbWhFofJJAOvTMCns6N4C8CMd5Ih4O2jSAG9b3dDHakj3O4yN1+Zbm+NUei+eVEZ9gFeVp9svE3aMDenIkw== + dependencies: + "@turf/bearing" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + "@turf/rhumb-bearing" "^6.5.0" + +"@turf/area@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/area/-/area-6.5.0.tgz#1d0d7aee01d8a4a3d4c91663ed35cc615f36ad56" + integrity sha512-xCZdiuojokLbQ+29qR6qoMD89hv+JAgWjLrwSEWL+3JV8IXKeNFl6XkEJz9HGkVpnXvQKJoRz4/liT+8ZZ5Jyg== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/meta" "^6.5.0" + +"@turf/bbox-clip@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/bbox-clip/-/bbox-clip-6.5.0.tgz#8e07d51ef8c875f9490d5c8699a2e51918587c94" + integrity sha512-F6PaIRF8WMp8EmgU/Ke5B1Y6/pia14UAYB5TiBC668w5rVVjy5L8rTm/m2lEkkDMHlzoP9vNY4pxpNthE7rLcQ== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + +"@turf/bbox-polygon@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/bbox-polygon/-/bbox-polygon-6.5.0.tgz#f18128b012eedfa860a521d8f2b3779cc0801032" + integrity sha512-+/r0NyL1lOG3zKZmmf6L8ommU07HliP4dgYToMoTxqzsWzyLjaj/OzgQ8rBmv703WJX+aS6yCmLuIhYqyufyuw== + dependencies: + "@turf/helpers" "^6.5.0" + +"@turf/bbox@*", "@turf/bbox@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/bbox/-/bbox-6.5.0.tgz#bec30a744019eae420dac9ea46fb75caa44d8dc5" + integrity sha512-RBbLaao5hXTYyyg577iuMtDB8ehxMlUqHEJiMs8jT1GHkFhr6sYre3lmLsPeYEi/ZKj5TP5tt7fkzNdJ4GIVyw== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/meta" "^6.5.0" + +"@turf/bearing@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/bearing/-/bearing-6.5.0.tgz#462a053c6c644434bdb636b39f8f43fb0cd857b0" + integrity sha512-dxINYhIEMzgDOztyMZc20I7ssYVNEpSv04VbMo5YPQsqa80KO3TFvbuCahMsCAW5z8Tncc8dwBlEFrmRjJG33A== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + +"@turf/bezier-spline@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/bezier-spline/-/bezier-spline-6.5.0.tgz#d1b1764948b0fa3d9aa6e4895aebeba24048b11f" + integrity sha512-vokPaurTd4PF96rRgGVm6zYYC5r1u98ZsG+wZEv9y3kJTuJRX/O3xIY2QnTGTdbVmAJN1ouOsD0RoZYaVoXORQ== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + +"@turf/boolean-clockwise@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/boolean-clockwise/-/boolean-clockwise-6.5.0.tgz#34573ecc18f900080f00e4ff364631a8b1135794" + integrity sha512-45+C7LC5RMbRWrxh3Z0Eihsc8db1VGBO5d9BLTOAwU4jR6SgsunTfRWR16X7JUwIDYlCVEmnjcXJNi/kIU3VIw== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + +"@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" + integrity sha512-4m8cJpbw+YQcKVGi8y0cHhBUnYT+QRfx6wzM4GI1IdtYH3p4oh/DOBJKrepQyiDzFDaNIjxuWXBh0ai1zVwOQQ== + dependencies: + "@turf/bbox" "^6.5.0" + "@turf/boolean-point-in-polygon" "^6.5.0" + "@turf/boolean-point-on-line" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + +"@turf/boolean-crosses@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/boolean-crosses/-/boolean-crosses-6.5.0.tgz#4a1981475b9d6e23b25721f9fb8ef20696ff1648" + integrity sha512-gvshbTPhAHporTlQwBJqyfW+2yV8q/mOTxG6PzRVl6ARsqNoqYQWkd4MLug7OmAqVyBzLK3201uAeBjxbGw0Ng== + dependencies: + "@turf/boolean-point-in-polygon" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + "@turf/line-intersect" "^6.5.0" + "@turf/polygon-to-line" "^6.5.0" + +"@turf/boolean-disjoint@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/boolean-disjoint/-/boolean-disjoint-6.5.0.tgz#e291d8f8f8cce7f7bb3c11e23059156a49afc5e4" + integrity sha512-rZ2ozlrRLIAGo2bjQ/ZUu4oZ/+ZjGvLkN5CKXSKBcu6xFO6k2bgqeM8a1836tAW+Pqp/ZFsTA5fZHsJZvP2D5g== + dependencies: + "@turf/boolean-point-in-polygon" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/line-intersect" "^6.5.0" + "@turf/meta" "^6.5.0" + "@turf/polygon-to-line" "^6.5.0" + +"@turf/boolean-equal@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/boolean-equal/-/boolean-equal-6.5.0.tgz#b1c0ce14e9d9fb7778cddcf22558c9f523fe9141" + integrity sha512-cY0M3yoLC26mhAnjv1gyYNQjn7wxIXmL2hBmI/qs8g5uKuC2hRWi13ydufE3k4x0aNRjFGlg41fjoYLwaVF+9Q== + dependencies: + "@turf/clean-coords" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + geojson-equality "0.1.6" + +"@turf/boolean-intersects@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/boolean-intersects/-/boolean-intersects-6.5.0.tgz#df2b831ea31a4574af6b2fefe391f097a926b9d6" + integrity sha512-nIxkizjRdjKCYFQMnml6cjPsDOBCThrt+nkqtSEcxkKMhAQj5OO7o2CecioNTaX8EayqwMGVKcsz27oP4mKPTw== + dependencies: + "@turf/boolean-disjoint" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/meta" "^6.5.0" + +"@turf/boolean-overlap@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/boolean-overlap/-/boolean-overlap-6.5.0.tgz#f27c85888c3665d42d613a91a83adf1657cd1385" + integrity sha512-8btMIdnbXVWUa1M7D4shyaSGxLRw6NjMcqKBcsTXcZdnaixl22k7ar7BvIzkaRYN3SFECk9VGXfLncNS3ckQUw== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + "@turf/line-intersect" "^6.5.0" + "@turf/line-overlap" "^6.5.0" + "@turf/meta" "^6.5.0" + geojson-equality "0.1.6" + +"@turf/boolean-parallel@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/boolean-parallel/-/boolean-parallel-6.5.0.tgz#4e8a9dafdccaf18aca95f1265a5eade3f330173f" + integrity sha512-aSHJsr1nq9e5TthZGZ9CZYeXklJyRgR5kCLm5X4urz7+MotMOp/LsGOsvKvK9NeUl9+8OUmfMn8EFTT8LkcvIQ== + dependencies: + "@turf/clean-coords" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/line-segment" "^6.5.0" + "@turf/rhumb-bearing" "^6.5.0" + +"@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" + integrity sha512-DtSuVFB26SI+hj0SjrvXowGTUCHlgevPAIsukssW6BG5MlNSBQAo70wpICBNJL6RjukXg8d2eXaAWuD/CqL00A== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + +"@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" + integrity sha512-A1BbuQ0LceLHvq7F/P7w3QvfpmZqbmViIUPHdNLvZimFNLo4e6IQunmzbe+8aSStH9QRZm3VOflyvNeXvvpZEQ== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + +"@turf/boolean-within@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/boolean-within/-/boolean-within-6.5.0.tgz#31a749d3be51065da8c470a1e5613f4d2efdee06" + integrity sha512-YQB3oU18Inx35C/LU930D36RAVe7LDXk1kWsQ8mLmuqYn9YdPsDQTMTkLJMhoQ8EbN7QTdy333xRQ4MYgToteQ== + dependencies: + "@turf/bbox" "^6.5.0" + "@turf/boolean-point-in-polygon" "^6.5.0" + "@turf/boolean-point-on-line" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + +"@turf/buffer@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/buffer/-/buffer-6.5.0.tgz#22bd0d05b4e1e73eaebc69b8f574a410ff704842" + integrity sha512-qeX4N6+PPWbKqp1AVkBVWFerGjMYMUyencwfnkCesoznU6qvfugFHNAngNqIBVnJjZ5n8IFyOf+akcxnrt9sNg== + dependencies: + "@turf/bbox" "^6.5.0" + "@turf/center" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/meta" "^6.5.0" + "@turf/projection" "^6.5.0" + d3-geo "1.7.1" + turf-jsts "*" + +"@turf/center-mean@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/center-mean/-/center-mean-6.5.0.tgz#2dc329c003f8012ba9ae7812a61b5647e1ae86a2" + integrity sha512-AAX6f4bVn12pTVrMUiB9KrnV94BgeBKpyg3YpfnEbBpkN/znfVhL8dG8IxMAxAoSZ61Zt9WLY34HfENveuOZ7Q== + dependencies: + "@turf/bbox" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/meta" "^6.5.0" + +"@turf/center-median@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/center-median/-/center-median-6.5.0.tgz#1b68e3f288af47f76c247d6bf671f30d8c25c974" + integrity sha512-dT8Ndu5CiZkPrj15PBvslpuf01ky41DEYEPxS01LOxp5HOUHXp1oJxsPxvc+i/wK4BwccPNzU1vzJ0S4emd1KQ== + dependencies: + "@turf/center-mean" "^6.5.0" + "@turf/centroid" "^6.5.0" + "@turf/distance" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/meta" "^6.5.0" + +"@turf/center-of-mass@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/center-of-mass/-/center-of-mass-6.5.0.tgz#f9e6988bc296b7f763a0137ad6095f54843cf06a" + integrity sha512-EWrriU6LraOfPN7m1jZi+1NLTKNkuIsGLZc2+Y8zbGruvUW+QV7K0nhf7iZWutlxHXTBqEXHbKue/o79IumAsQ== + dependencies: + "@turf/centroid" "^6.5.0" + "@turf/convex" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + "@turf/meta" "^6.5.0" + +"@turf/center@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/center/-/center-6.5.0.tgz#3bcb6bffcb8ba147430cfea84aabaed5dbdd4f07" + integrity sha512-T8KtMTfSATWcAX088rEDKjyvQCBkUsLnK/Txb6/8WUXIeOZyHu42G7MkdkHRoHtwieLdduDdmPLFyTdG5/e7ZQ== + dependencies: + "@turf/bbox" "^6.5.0" + "@turf/helpers" "^6.5.0" + +"@turf/centroid@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/centroid/-/centroid-6.5.0.tgz#ecaa365412e5a4d595bb448e7dcdacfb49eb0009" + integrity sha512-MwE1oq5E3isewPprEClbfU5pXljIK/GUOMbn22UM3IFPDJX0KeoyLNwghszkdmFp/qMGL/M13MMWvU+GNLXP/A== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/meta" "^6.5.0" + "@turf/circle@^6.5.0": version "6.5.0" - resolved "https://registry.yarnpkg.com/@turf/circle/-/circle-6.5.0.tgz#dc017d8c0131d1d212b7c06f76510c22bbeb093c" - integrity sha512-oU1+Kq9DgRnoSbWFHKnnUdTmtcRUMmHoV9DjTXu9vOLNV5OWtAAh1VZ+mzsioGGzoDNT/V5igbFOkMfBQc0B6A== + resolved "https://registry.yarnpkg.com/@turf/circle/-/circle-6.5.0.tgz#dc017d8c0131d1d212b7c06f76510c22bbeb093c" + integrity sha512-oU1+Kq9DgRnoSbWFHKnnUdTmtcRUMmHoV9DjTXu9vOLNV5OWtAAh1VZ+mzsioGGzoDNT/V5igbFOkMfBQc0B6A== + dependencies: + "@turf/destination" "^6.5.0" + "@turf/helpers" "^6.5.0" + +"@turf/clean-coords@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/clean-coords/-/clean-coords-6.5.0.tgz#6690adf764ec4b649710a8a20dab7005efbea53f" + integrity sha512-EMX7gyZz0WTH/ET7xV8MyrExywfm9qUi0/MY89yNffzGIEHuFfqwhcCqZ8O00rZIPZHUTxpmsxQSTfzJJA1CPw== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + +"@turf/clone@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/clone/-/clone-6.5.0.tgz#895860573881ae10a02dfff95f274388b1cda51a" + integrity sha512-mzVtTFj/QycXOn6ig+annKrM6ZlimreKYz6f/GSERytOpgzodbQyOgkfwru100O1KQhhjSudKK4DsQ0oyi9cTw== + dependencies: + "@turf/helpers" "^6.5.0" + +"@turf/clusters-dbscan@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/clusters-dbscan/-/clusters-dbscan-6.5.0.tgz#e01f854d24fac4899009fc6811854424ea8f0985" + integrity sha512-SxZEE4kADU9DqLRiT53QZBBhu8EP9skviSyl+FGj08Y01xfICM/RR9ACUdM0aEQimhpu+ZpRVcUK+2jtiCGrYQ== + dependencies: + "@turf/clone" "^6.5.0" + "@turf/distance" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/meta" "^6.5.0" + density-clustering "1.3.0" + +"@turf/clusters-kmeans@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/clusters-kmeans/-/clusters-kmeans-6.5.0.tgz#aca6f66858af6476b7352a2bbbb392f9ddb7f5b4" + integrity sha512-DwacD5+YO8kwDPKaXwT9DV46tMBVNsbi1IzdajZu1JDSWoN7yc7N9Qt88oi+p30583O0UPVkAK+A10WAQv4mUw== + dependencies: + "@turf/clone" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + "@turf/meta" "^6.5.0" + skmeans "0.9.7" + +"@turf/clusters@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/clusters/-/clusters-6.5.0.tgz#a5ee7b62cdf345db2f1eafe2eb382adc186163e1" + integrity sha512-Y6gfnTJzQ1hdLfCsyd5zApNbfLIxYEpmDibHUqR5z03Lpe02pa78JtgrgUNt1seeO/aJ4TG1NLN8V5gOrHk04g== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/meta" "^6.5.0" + +"@turf/collect@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/collect/-/collect-6.5.0.tgz#3749ca7d4b91fbcbe1b9b8858ed70df8b6290910" + integrity sha512-4dN/T6LNnRg099m97BJeOcTA5fSI8cu87Ydgfibewd2KQwBexO69AnjEFqfPX3Wj+Zvisj1uAVIZbPmSSrZkjg== + dependencies: + "@turf/bbox" "^6.5.0" + "@turf/boolean-point-in-polygon" "^6.5.0" + "@turf/helpers" "^6.5.0" + rbush "2.x" + +"@turf/combine@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/combine/-/combine-6.5.0.tgz#e0f3468ac9c09c24fa7184ebbd8a79d2e595ef81" + integrity sha512-Q8EIC4OtAcHiJB3C4R+FpB4LANiT90t17uOd851qkM2/o6m39bfN5Mv0PWqMZIHWrrosZqRqoY9dJnzz/rJxYQ== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/meta" "^6.5.0" + +"@turf/concave@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/concave/-/concave-6.5.0.tgz#19ab1a3f04087c478cebc5e631293f3eeb2e7ce4" + integrity sha512-I/sUmUC8TC5h/E2vPwxVht+nRt+TnXIPRoztDFvS8/Y0+cBDple9inLSo9nnPXMXidrBlGXZ9vQx/BjZUJgsRQ== + dependencies: + "@turf/clone" "^6.5.0" + "@turf/distance" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + "@turf/meta" "^6.5.0" + "@turf/tin" "^6.5.0" + topojson-client "3.x" + topojson-server "3.x" + +"@turf/convex@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/convex/-/convex-6.5.0.tgz#a7613e0d3795e2f5b9ce79a39271e86f54a3d354" + integrity sha512-x7ZwC5z7PJB0SBwNh7JCeCNx7Iu+QSrH7fYgK0RhhNop13TqUlvHMirMLRgf2db1DqUetrAO2qHJeIuasquUWg== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/meta" "^6.5.0" + concaveman "*" + +"@turf/destination@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/destination/-/destination-6.5.0.tgz#30a84702f9677d076130e0440d3223ae503fdae1" + integrity sha512-4cnWQlNC8d1tItOz9B4pmJdWpXqS0vEvv65bI/Pj/genJnsL7evI0/Xw42RvEGROS481MPiU80xzvwxEvhQiMQ== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + +"@turf/difference@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/difference/-/difference-6.5.0.tgz#677b0d5641a93bba2e82f2c683f0d880105b3197" + integrity sha512-l8iR5uJqvI+5Fs6leNbhPY5t/a3vipUF/3AeVLpwPQcgmedNXyheYuy07PcMGH5Jdpi5gItOiTqwiU/bUH4b3A== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + polygon-clipping "^0.15.3" + +"@turf/dissolve@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/dissolve/-/dissolve-6.5.0.tgz#65debed7ef185087d842b450ebd01e81cc2e80f6" + integrity sha512-WBVbpm9zLTp0Bl9CE35NomTaOL1c4TQCtEoO43YaAhNEWJOOIhZMFJyr8mbvYruKl817KinT3x7aYjjCMjTAsQ== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + "@turf/meta" "^6.5.0" + polygon-clipping "^0.15.3" + +"@turf/distance-weight@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/distance-weight/-/distance-weight-6.5.0.tgz#fe1fb45b5ae5ca4e09a898cb0a15c6c79ed0849e" + integrity sha512-a8qBKkgVNvPKBfZfEJZnC3DV7dfIsC3UIdpRci/iap/wZLH41EmS90nM+BokAJflUHYy8PqE44wySGWHN1FXrQ== + dependencies: + "@turf/centroid" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + "@turf/meta" "^6.5.0" + +"@turf/distance@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/distance/-/distance-6.5.0.tgz#21f04d5f86e864d54e2abde16f35c15b4f36149a" + integrity sha512-xzykSLfoURec5qvQJcfifw/1mJa+5UwByZZ5TZ8iaqjGYN0vomhV9aiSLeYdUGtYRESZ+DYC/OzY+4RclZYgMg== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + +"@turf/ellipse@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/ellipse/-/ellipse-6.5.0.tgz#1e20cc9eb968f35ab891572892a0bffcef5e552a" + integrity sha512-kuXtwFviw/JqnyJXF1mrR/cb496zDTSbGKtSiolWMNImYzGGkbsAsFTjwJYgD7+4FixHjp0uQPzo70KDf3AIBw== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + "@turf/rhumb-destination" "^6.5.0" + "@turf/transform-rotate" "^6.5.0" + +"@turf/envelope@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/envelope/-/envelope-6.5.0.tgz#73e81b9b7ed519bd8a614d36322d6f9fbeeb0579" + integrity sha512-9Z+FnBWvOGOU4X+fMZxYFs1HjFlkKqsddLuMknRaqcJd6t+NIv5DWvPtDL8ATD2GEExYDiFLwMdckfr1yqJgHA== + dependencies: + "@turf/bbox" "^6.5.0" + "@turf/bbox-polygon" "^6.5.0" + "@turf/helpers" "^6.5.0" + +"@turf/explode@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/explode/-/explode-6.5.0.tgz#02c292cc143dd629643da5b70bb5b19b9f0f1c6b" + integrity sha512-6cSvMrnHm2qAsace6pw9cDmK2buAlw8+tjeJVXMfMyY+w7ZUi1rprWMsY92J7s2Dar63Bv09n56/1V7+tcj52Q== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/meta" "^6.5.0" + +"@turf/flatten@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/flatten/-/flatten-6.5.0.tgz#0bd26161f4f1759bbad6ba9485e8ee65f3fa72a7" + integrity sha512-IBZVwoNLVNT6U/bcUUllubgElzpMsNoCw8tLqBw6dfYg9ObGmpEjf9BIYLr7a2Yn5ZR4l7YIj2T7kD5uJjZADQ== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/meta" "^6.5.0" + +"@turf/flip@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/flip/-/flip-6.5.0.tgz#04b38eae8a78f2cf9240140b25401b16b37d20e2" + integrity sha512-oyikJFNjt2LmIXQqgOGLvt70RgE2lyzPMloYWM7OR5oIFGRiBvqVD2hA6MNw6JewIm30fWZ8DQJw1NHXJTJPbg== + dependencies: + "@turf/clone" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/meta" "^6.5.0" + +"@turf/great-circle@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/great-circle/-/great-circle-6.5.0.tgz#2daccbdd1c609a13b00d566ea0ad95457cfc87c2" + integrity sha512-7ovyi3HaKOXdFyN7yy1yOMa8IyOvV46RC1QOQTT+RYUN8ke10eyqExwBpL9RFUPvlpoTzoYbM/+lWPogQlFncg== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + +"@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" + integrity sha512-VbI1dV5bLFzohYYdgqwikdMVpe7pJ9X3E+dlr425wa2/sMJqYDhTO++ec38/pcPvPE6oD9WEEeU3Xu3gza+VPw== + +"@turf/hex-grid@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/hex-grid/-/hex-grid-6.5.0.tgz#aa5ee46e291839d4405db74b7516c6da89ee56f7" + integrity sha512-Ln3tc2tgZT8etDOldgc6e741Smg1CsMKAz1/Mlel+MEL5Ynv2mhx3m0q4J9IB1F3a4MNjDeVvm8drAaf9SF33g== + dependencies: + "@turf/distance" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/intersect" "^6.5.0" + "@turf/invariant" "^6.5.0" + +"@turf/interpolate@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/interpolate/-/interpolate-6.5.0.tgz#9120def5d4498dd7b7d5e92a263aac3e1fd92886" + integrity sha512-LSH5fMeiGyuDZ4WrDJNgh81d2DnNDUVJtuFryJFup8PV8jbs46lQGfI3r1DJ2p1IlEJIz3pmAZYeTfMMoeeohw== + dependencies: + "@turf/bbox" "^6.5.0" + "@turf/centroid" "^6.5.0" + "@turf/clone" "^6.5.0" + "@turf/distance" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/hex-grid" "^6.5.0" + "@turf/invariant" "^6.5.0" + "@turf/meta" "^6.5.0" + "@turf/point-grid" "^6.5.0" + "@turf/square-grid" "^6.5.0" + "@turf/triangle-grid" "^6.5.0" + +"@turf/intersect@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/intersect/-/intersect-6.5.0.tgz#a14e161ddd0264d0f07ac4e325553c70c421f9e6" + integrity sha512-2legGJeKrfFkzntcd4GouPugoqPUjexPZnOvfez+3SfIMrHvulw8qV8u7pfVyn2Yqs53yoVCEjS5sEpvQ5YRQg== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + polygon-clipping "^0.15.3" + +"@turf/invariant@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/invariant/-/invariant-6.5.0.tgz#970afc988023e39c7ccab2341bd06979ddc7463f" + integrity sha512-Wv8PRNCtPD31UVbdJE/KVAWKe7l6US+lJItRR/HOEW3eh+U/JwRCSUl/KZ7bmjM/C+zLNoreM2TU6OoLACs4eg== + dependencies: + "@turf/helpers" "^6.5.0" + +"@turf/isobands@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/isobands/-/isobands-6.5.0.tgz#5e0929d9d8d53147074a5cfe4533768782e2a2ce" + integrity sha512-4h6sjBPhRwMVuFaVBv70YB7eGz+iw0bhPRnp+8JBdX1UPJSXhoi/ZF2rACemRUr0HkdVB/a1r9gC32vn5IAEkw== + dependencies: + "@turf/area" "^6.5.0" + "@turf/bbox" "^6.5.0" + "@turf/boolean-point-in-polygon" "^6.5.0" + "@turf/explode" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + "@turf/meta" "^6.5.0" + object-assign "*" + +"@turf/isolines@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/isolines/-/isolines-6.5.0.tgz#3435c7cb5a79411207a5657aa4095357cfd35831" + integrity sha512-6ElhiLCopxWlv4tPoxiCzASWt/jMRvmp6mRYrpzOm3EUl75OhHKa/Pu6Y9nWtCMmVC/RcWtiiweUocbPLZLm0A== + dependencies: + "@turf/bbox" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + "@turf/meta" "^6.5.0" + object-assign "*" + +"@turf/kinks@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/kinks/-/kinks-6.5.0.tgz#80e7456367535365012f658cf1a988b39a2c920b" + integrity sha512-ViCngdPt1eEL7hYUHR2eHR662GvCgTc35ZJFaNR6kRtr6D8plLaDju0FILeFFWSc+o8e3fwxZEJKmFj9IzPiIQ== + dependencies: + "@turf/helpers" "^6.5.0" + +"@turf/length@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/length/-/length-6.5.0.tgz#ff4e9072d5f997e1c32a1311d214d184463f83fa" + integrity sha512-5pL5/pnw52fck3oRsHDcSGrj9HibvtlrZ0QNy2OcW8qBFDNgZ4jtl6U7eATVoyWPKBHszW3dWETW+iLV7UARig== + dependencies: + "@turf/distance" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/meta" "^6.5.0" + +"@turf/line-arc@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/line-arc/-/line-arc-6.5.0.tgz#5ca35516ccf1f3a01149889d9facb39a77b07431" + integrity sha512-I6c+V6mIyEwbtg9P9zSFF89T7QPe1DPTG3MJJ6Cm1MrAY0MdejwQKOpsvNl8LDU2ekHOlz2kHpPVR7VJsoMllA== + dependencies: + "@turf/circle" "^6.5.0" + "@turf/destination" "^6.5.0" + "@turf/helpers" "^6.5.0" + +"@turf/line-chunk@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/line-chunk/-/line-chunk-6.5.0.tgz#02cefa74564b9cf533a3ac8a5109c97cb7170d10" + integrity sha512-i1FGE6YJaaYa+IJesTfyRRQZP31QouS+wh/pa6O3CC0q4T7LtHigyBSYjrbjSLfn2EVPYGlPCMFEqNWCOkC6zg== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/length" "^6.5.0" + "@turf/line-slice-along" "^6.5.0" + "@turf/meta" "^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" + integrity sha512-CS6R1tZvVQD390G9Ea4pmpM6mJGPWoL82jD46y0q1KSor9s6HupMIo1kY4Ny+AEYQl9jd21V3Scz20eldpbTVA== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + "@turf/line-segment" "^6.5.0" + "@turf/meta" "^6.5.0" + geojson-rbush "3.x" + +"@turf/line-offset@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/line-offset/-/line-offset-6.5.0.tgz#2bbd8fcf9ff82009b72890863da444b190e53689" + integrity sha512-CEXZbKgyz8r72qRvPchK0dxqsq8IQBdH275FE6o4MrBkzMcoZsfSjghtXzKaz9vvro+HfIXal0sTk2mqV1lQTw== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + "@turf/meta" "^6.5.0" + +"@turf/line-overlap@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/line-overlap/-/line-overlap-6.5.0.tgz#10ebb805c2d047463379fc1f997785fa8f3f4cc1" + integrity sha512-xHOaWLd0hkaC/1OLcStCpfq55lPHpPNadZySDXYiYjEz5HXr1oKmtMYpn0wGizsLwrOixRdEp+j7bL8dPt4ojQ== + dependencies: + "@turf/boolean-point-on-line" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + "@turf/line-segment" "^6.5.0" + "@turf/meta" "^6.5.0" + "@turf/nearest-point-on-line" "^6.5.0" + deep-equal "1.x" + geojson-rbush "3.x" + +"@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" + integrity sha512-jI625Ho4jSuJESNq66Mmi290ZJ5pPZiQZruPVpmHkUw257Pew0alMmb6YrqYNnLUuiVVONxAAKXUVeeUGtycfw== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + "@turf/meta" "^6.5.0" + +"@turf/line-slice-along@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/line-slice-along/-/line-slice-along-6.5.0.tgz#6e7a861d72c6f80caba2c4418b69a776f0292953" + integrity sha512-KHJRU6KpHrAj+BTgTNqby6VCTnDzG6a1sJx/I3hNvqMBLvWVA2IrkR9L9DtsQsVY63IBwVdQDqiwCuZLDQh4Ng== + dependencies: + "@turf/bearing" "^6.5.0" + "@turf/destination" "^6.5.0" + "@turf/distance" "^6.5.0" + "@turf/helpers" "^6.5.0" + +"@turf/line-slice@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/line-slice/-/line-slice-6.5.0.tgz#7b6e0c8e8e93fdb4e65c3b9a123a2ec93a21bdb0" + integrity sha512-vDqJxve9tBHhOaVVFXqVjF5qDzGtKWviyjbyi2QnSnxyFAmLlLnBfMX8TLQCAf2GxHibB95RO5FBE6I2KVPRuw== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + "@turf/nearest-point-on-line" "^6.5.0" + +"@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" + integrity sha512-/rwUMVr9OI2ccJjw7/6eTN53URtGThNSD5I0GgxyFXMtxWiloRJ9MTff8jBbtPWrRka/Sh2GkwucVRAEakx9Sw== + dependencies: + "@turf/bbox" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + "@turf/line-intersect" "^6.5.0" + "@turf/line-segment" "^6.5.0" + "@turf/meta" "^6.5.0" + "@turf/nearest-point-on-line" "^6.5.0" + "@turf/square" "^6.5.0" + "@turf/truncate" "^6.5.0" + geojson-rbush "3.x" + +"@turf/line-to-polygon@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/line-to-polygon/-/line-to-polygon-6.5.0.tgz#c919a03064a1cd5cef4c4e4d98dc786e12ffbc89" + integrity sha512-qYBuRCJJL8Gx27OwCD1TMijM/9XjRgXH/m/TyuND4OXedBpIWlK5VbTIO2gJ8OCfznBBddpjiObLBrkuxTpN4Q== + dependencies: + "@turf/bbox" "^6.5.0" + "@turf/clone" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + +"@turf/mask@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/mask/-/mask-6.5.0.tgz#a97f355ee071ac60d8d3782ae39e5bb4b4e26857" + integrity sha512-RQha4aU8LpBrmrkH8CPaaoAfk0Egj5OuXtv6HuCQnHeGNOQt3TQVibTA3Sh4iduq4EPxnZfDjgsOeKtrCA19lg== + dependencies: + "@turf/helpers" "^6.5.0" + polygon-clipping "^0.15.3" + +"@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" + integrity sha512-RrArvtsV0vdsCBegoBtOalgdSOfkBrTJ07VkpiCnq/491W67hnMWmDu7e6Ztw0C3WldRYTXkg3SumfdzZxLBHA== + dependencies: + "@turf/helpers" "^6.5.0" + +"@turf/midpoint@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/midpoint/-/midpoint-6.5.0.tgz#5f9428959309feccaf3f55873a8de70d4121bdce" + integrity sha512-MyTzV44IwmVI6ec9fB2OgZ53JGNlgOpaYl9ArKoF49rXpL84F9rNATndbe0+MQIhdkw8IlzA6xVP4lZzfMNVCw== dependencies: + "@turf/bearing" "^6.5.0" "@turf/destination" "^6.5.0" + "@turf/distance" "^6.5.0" "@turf/helpers" "^6.5.0" -"@turf/destination@^6.5.0": +"@turf/moran-index@^6.5.0": version "6.5.0" - resolved "https://registry.yarnpkg.com/@turf/destination/-/destination-6.5.0.tgz#30a84702f9677d076130e0440d3223ae503fdae1" - integrity sha512-4cnWQlNC8d1tItOz9B4pmJdWpXqS0vEvv65bI/Pj/genJnsL7evI0/Xw42RvEGROS481MPiU80xzvwxEvhQiMQ== + resolved "https://registry.yarnpkg.com/@turf/moran-index/-/moran-index-6.5.0.tgz#456264bfb014a7b5f527807c9dcf25df3c6b2efd" + integrity sha512-ItsnhrU2XYtTtTudrM8so4afBCYWNaB0Mfy28NZwLjB5jWuAsvyV+YW+J88+neK/ougKMTawkmjQqodNJaBeLQ== + dependencies: + "@turf/distance-weight" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/meta" "^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" + integrity sha512-WthrvddddvmymnC+Vf7BrkHGbDOUu6Z3/6bFYUGv1kxw8tiZ6n83/VG6kHz4poHOfS0RaNflzXSkmCi64fLBlg== dependencies: + "@turf/bearing" "^6.5.0" + "@turf/destination" "^6.5.0" + "@turf/distance" "^6.5.0" "@turf/helpers" "^6.5.0" "@turf/invariant" "^6.5.0" + "@turf/line-intersect" "^6.5.0" + "@turf/meta" "^6.5.0" -"@turf/helpers@^6.5.0": +"@turf/nearest-point-to-line@^6.5.0": version "6.5.0" - resolved "https://registry.yarnpkg.com/@turf/helpers/-/helpers-6.5.0.tgz#f79af094bd6b8ce7ed2bd3e089a8493ee6cae82e" - integrity sha512-VbI1dV5bLFzohYYdgqwikdMVpe7pJ9X3E+dlr425wa2/sMJqYDhTO++ec38/pcPvPE6oD9WEEeU3Xu3gza+VPw== + resolved "https://registry.yarnpkg.com/@turf/nearest-point-to-line/-/nearest-point-to-line-6.5.0.tgz#5549b48690d523f9af4765fe64a3cbebfbc6bb75" + integrity sha512-PXV7cN0BVzUZdjj6oeb/ESnzXSfWmEMrsfZSDRgqyZ9ytdiIj/eRsnOXLR13LkTdXVOJYDBuf7xt1mLhM4p6+Q== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + "@turf/meta" "^6.5.0" + "@turf/point-to-line-distance" "^6.5.0" + object-assign "*" -"@turf/invariant@^6.5.0": +"@turf/nearest-point@^6.5.0": version "6.5.0" - resolved "https://registry.yarnpkg.com/@turf/invariant/-/invariant-6.5.0.tgz#970afc988023e39c7ccab2341bd06979ddc7463f" - integrity sha512-Wv8PRNCtPD31UVbdJE/KVAWKe7l6US+lJItRR/HOEW3eh+U/JwRCSUl/KZ7bmjM/C+zLNoreM2TU6OoLACs4eg== + resolved "https://registry.yarnpkg.com/@turf/nearest-point/-/nearest-point-6.5.0.tgz#2f1781c26ff3f054005d4ff352042973318b92f1" + integrity sha512-fguV09QxilZv/p94s8SMsXILIAMiaXI5PATq9d7YWijLxWUj6Q/r43kxyoi78Zmwwh1Zfqz9w+bCYUAxZ5+euA== + dependencies: + "@turf/clone" "^6.5.0" + "@turf/distance" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/meta" "^6.5.0" + +"@turf/planepoint@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/planepoint/-/planepoint-6.5.0.tgz#5cb788670c31a6b064ae464180d51b4d550d87de" + integrity sha512-R3AahA6DUvtFbka1kcJHqZ7DMHmPXDEQpbU5WaglNn7NaCQg9HB0XM0ZfqWcd5u92YXV+Gg8QhC8x5XojfcM4Q== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + +"@turf/point-grid@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/point-grid/-/point-grid-6.5.0.tgz#f628d30afe29d60dcbf54b195e46eab48a4fbfaa" + integrity sha512-Iq38lFokNNtQJnOj/RBKmyt6dlof0yhaHEDELaWHuECm1lIZLY3ZbVMwbs+nXkwTAHjKfS/OtMheUBkw+ee49w== + dependencies: + "@turf/boolean-within" "^6.5.0" + "@turf/distance" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + +"@turf/point-on-feature@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/point-on-feature/-/point-on-feature-6.5.0.tgz#37d07afeb31896e53c0833aa404993ba7d500f0c" + integrity sha512-bDpuIlvugJhfcF/0awAQ+QI6Om1Y1FFYE8Y/YdxGRongivix850dTeXCo0mDylFdWFPGDo7Mmh9Vo4VxNwW/TA== + dependencies: + "@turf/boolean-point-in-polygon" "^6.5.0" + "@turf/center" "^6.5.0" + "@turf/explode" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/nearest-point" "^6.5.0" + +"@turf/point-to-line-distance@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/point-to-line-distance/-/point-to-line-distance-6.5.0.tgz#bc46fe09ea630aaf73f13c40b38a7df79050fff8" + integrity sha512-opHVQ4vjUhNBly1bob6RWy+F+hsZDH9SA0UW36pIRzfpu27qipU18xup0XXEePfY6+wvhF6yL/WgCO2IbrLqEA== + dependencies: + "@turf/bearing" "^6.5.0" + "@turf/distance" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + "@turf/meta" "^6.5.0" + "@turf/projection" "^6.5.0" + "@turf/rhumb-bearing" "^6.5.0" + "@turf/rhumb-distance" "^6.5.0" + +"@turf/points-within-polygon@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/points-within-polygon/-/points-within-polygon-6.5.0.tgz#d49f4d7cf19b7a440bf1e06f771ff4e1df13107f" + integrity sha512-YyuheKqjliDsBDt3Ho73QVZk1VXX1+zIA2gwWvuz8bR1HXOkcuwk/1J76HuFMOQI3WK78wyAi+xbkx268PkQzQ== + dependencies: + "@turf/boolean-point-in-polygon" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/meta" "^6.5.0" + +"@turf/polygon-smooth@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/polygon-smooth/-/polygon-smooth-6.5.0.tgz#00ca366871cb6ea3bee44ff3ea870aaf75711733" + integrity sha512-LO/X/5hfh/Rk4EfkDBpLlVwt3i6IXdtQccDT9rMjXEP32tRgy0VMFmdkNaXoGlSSKf/1mGqLl4y4wHd86DqKbg== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/meta" "^6.5.0" + +"@turf/polygon-tangents@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/polygon-tangents/-/polygon-tangents-6.5.0.tgz#dc025202727ba2f3347baa95dbca4e0ffdb2ddf5" + integrity sha512-sB4/IUqJMYRQH9jVBwqS/XDitkEfbyqRy+EH/cMRJURTg78eHunvJ708x5r6umXsbiUyQU4eqgPzEylWEQiunw== + dependencies: + "@turf/bbox" "^6.5.0" + "@turf/boolean-within" "^6.5.0" + "@turf/explode" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + "@turf/nearest-point" "^6.5.0" + +"@turf/polygon-to-line@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/polygon-to-line/-/polygon-to-line-6.5.0.tgz#4dc86db66168b32bb83ce448cf966208a447d952" + integrity sha512-5p4n/ij97EIttAq+ewSnKt0ruvuM+LIDzuczSzuHTpq4oS7Oq8yqg5TQ4nzMVuK41r/tALCk7nAoBuw3Su4Gcw== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + +"@turf/polygonize@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/polygonize/-/polygonize-6.5.0.tgz#8aa0f1e386e96c533a320c426aaf387020320fa3" + integrity sha512-a/3GzHRaCyzg7tVYHo43QUChCspa99oK4yPqooVIwTC61npFzdrmnywMv0S+WZjHZwK37BrFJGFrZGf6ocmY5w== + dependencies: + "@turf/boolean-point-in-polygon" "^6.5.0" + "@turf/envelope" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + "@turf/meta" "^6.5.0" + +"@turf/projection@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/projection/-/projection-6.5.0.tgz#d2aad862370bf03f2270701115464a8406c144b2" + integrity sha512-/Pgh9mDvQWWu8HRxqpM+tKz8OzgauV+DiOcr3FCjD6ubDnrrmMJlsf6fFJmggw93mtVPrZRL6yyi9aYCQBOIvg== + dependencies: + "@turf/clone" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/meta" "^6.5.0" + +"@turf/random@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/random/-/random-6.5.0.tgz#b19672cf4549557660034d4a303911656df7747e" + integrity sha512-8Q25gQ/XbA7HJAe+eXp4UhcXM9aOOJFaxZ02+XSNwMvY8gtWSCBLVqRcW4OhqilgZ8PeuQDWgBxeo+BIqqFWFQ== + dependencies: + "@turf/helpers" "^6.5.0" + +"@turf/rectangle-grid@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/rectangle-grid/-/rectangle-grid-6.5.0.tgz#c3ef38e8cfdb763012beb1f22e2b77288a37a5cf" + integrity sha512-yQZ/1vbW68O2KsSB3OZYK+72aWz/Adnf7m2CMKcC+aq6TwjxZjAvlbCOsNUnMAuldRUVN1ph6RXMG4e9KEvKvg== + dependencies: + "@turf/boolean-intersects" "^6.5.0" + "@turf/distance" "^6.5.0" + "@turf/helpers" "^6.5.0" + +"@turf/rewind@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/rewind/-/rewind-6.5.0.tgz#bc0088f8ec56f00c8eacd902bbe51e3786cb73a0" + integrity sha512-IoUAMcHWotBWYwSYuYypw/LlqZmO+wcBpn8ysrBNbazkFNkLf3btSDZMkKJO/bvOzl55imr/Xj4fi3DdsLsbzQ== + dependencies: + "@turf/boolean-clockwise" "^6.5.0" + "@turf/clone" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + "@turf/meta" "^6.5.0" + +"@turf/rhumb-bearing@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/rhumb-bearing/-/rhumb-bearing-6.5.0.tgz#8c41ad62b44fb4e57c14fe790488056684eee7b9" + integrity sha512-jMyqiMRK4hzREjQmnLXmkJ+VTNTx1ii8vuqRwJPcTlKbNWfjDz/5JqJlb5NaFDcdMpftWovkW5GevfnuzHnOYA== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + +"@turf/rhumb-destination@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/rhumb-destination/-/rhumb-destination-6.5.0.tgz#12da8c85e674b182e8b0ec8ea9c5fe2186716dae" + integrity sha512-RHNP1Oy+7xTTdRrTt375jOZeHceFbjwohPHlr9Hf68VdHHPMAWgAKqiX2YgSWDcvECVmiGaBKWus1Df+N7eE4Q== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + +"@turf/rhumb-distance@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/rhumb-distance/-/rhumb-distance-6.5.0.tgz#ed068004b1469512b857070fbf5cb7b7eabbe592" + integrity sha512-oKp8KFE8E4huC2Z1a1KNcFwjVOqa99isxNOwfo4g3SUABQ6NezjKDDrnvC4yI5YZ3/huDjULLBvhed45xdCrzg== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + +"@turf/sample@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/sample/-/sample-6.5.0.tgz#00cca024514989448e57fb1bf34e9a33ed3f0755" + integrity sha512-kSdCwY7el15xQjnXYW520heKUrHwRvnzx8ka4eYxX9NFeOxaFITLW2G7UtXb6LJK8mmPXI8Aexv23F2ERqzGFg== + dependencies: + "@turf/helpers" "^6.5.0" + +"@turf/sector@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/sector/-/sector-6.5.0.tgz#599a87ebbe6ee613b4e04c5928e0ef1fc78fc16c" + integrity sha512-cYUOkgCTWqa23SOJBqxoFAc/yGCUsPRdn/ovbRTn1zNTm/Spmk6hVB84LCKOgHqvSF25i0d2kWqpZDzLDdAPbw== + dependencies: + "@turf/circle" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + "@turf/line-arc" "^6.5.0" + "@turf/meta" "^6.5.0" + +"@turf/shortest-path@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/shortest-path/-/shortest-path-6.5.0.tgz#e1fdf9b4758bd20caf845fdc03d0dc2eede2ff0e" + integrity sha512-4de5+G7+P4hgSoPwn+SO9QSi9HY5NEV/xRJ+cmoFVRwv2CDsuOPDheHKeuIAhKyeKDvPvPt04XYWbac4insJMg== + dependencies: + "@turf/bbox" "^6.5.0" + "@turf/bbox-polygon" "^6.5.0" + "@turf/boolean-point-in-polygon" "^6.5.0" + "@turf/clean-coords" "^6.5.0" + "@turf/distance" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + "@turf/meta" "^6.5.0" + "@turf/transform-scale" "^6.5.0" + +"@turf/simplify@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/simplify/-/simplify-6.5.0.tgz#ec435460bde0985b781618b05d97146c32c8bc16" + integrity sha512-USas3QqffPHUY184dwQdP8qsvcVH/PWBYdXY5am7YTBACaQOMAlf6AKJs9FT8jiO6fQpxfgxuEtwmox+pBtlOg== + dependencies: + "@turf/clean-coords" "^6.5.0" + "@turf/clone" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/meta" "^6.5.0" + +"@turf/square-grid@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/square-grid/-/square-grid-6.5.0.tgz#3a517301b42ed98aa62d727786dc5290998ddbae" + integrity sha512-mlR0ayUdA+L4c9h7p4k3pX6gPWHNGuZkt2c5II1TJRmhLkW2557d6b/Vjfd1z9OVaajb1HinIs1FMSAPXuuUrA== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/rectangle-grid" "^6.5.0" + +"@turf/square@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/square/-/square-6.5.0.tgz#ab43eef99d39c36157ab5b80416bbeba1f6b2122" + integrity sha512-BM2UyWDmiuHCadVhHXKIx5CQQbNCpOxB6S/aCNOCLbhCeypKX5Q0Aosc5YcmCJgkwO5BERCC6Ee7NMbNB2vHmQ== + dependencies: + "@turf/distance" "^6.5.0" + "@turf/helpers" "^6.5.0" + +"@turf/standard-deviational-ellipse@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/standard-deviational-ellipse/-/standard-deviational-ellipse-6.5.0.tgz#775c7b9a2be6546bf64ea8ac08cdcd80563f2935" + integrity sha512-02CAlz8POvGPFK2BKK8uHGUk/LXb0MK459JVjKxLC2yJYieOBTqEbjP0qaWhiBhGzIxSMaqe8WxZ0KvqdnstHA== + dependencies: + "@turf/center-mean" "^6.5.0" + "@turf/ellipse" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + "@turf/meta" "^6.5.0" + "@turf/points-within-polygon" "^6.5.0" + +"@turf/tag@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/tag/-/tag-6.5.0.tgz#13eae85f36f9fd8c4e076714a894cb5b7716d381" + integrity sha512-XwlBvrOV38CQsrNfrxvBaAPBQgXMljeU0DV8ExOyGM7/hvuGHJw3y8kKnQ4lmEQcmcrycjDQhP7JqoRv8vFssg== + dependencies: + "@turf/boolean-point-in-polygon" "^6.5.0" + "@turf/clone" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/meta" "^6.5.0" + +"@turf/tesselate@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/tesselate/-/tesselate-6.5.0.tgz#de45b778f8e6a45535d8eb2aacea06f86c6b73fb" + integrity sha512-M1HXuyZFCfEIIKkglh/r5L9H3c5QTEsnMBoZOFQiRnGPGmJWcaBissGb7mTFX2+DKE7FNWXh4TDnZlaLABB0dQ== + dependencies: + "@turf/helpers" "^6.5.0" + earcut "^2.0.0" + +"@turf/tin@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/tin/-/tin-6.5.0.tgz#b77bebb48237e6613ac6bc0e37a6658be8c17a09" + integrity sha512-YLYikRzKisfwj7+F+Tmyy/LE3d2H7D4kajajIfc9mlik2+esG7IolsX/+oUz1biguDYsG0DUA8kVYXDkobukfg== + dependencies: + "@turf/helpers" "^6.5.0" + +"@turf/transform-rotate@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/transform-rotate/-/transform-rotate-6.5.0.tgz#e50e96a8779af91d58149eedb00ffd7f6395c804" + integrity sha512-A2Ip1v4246ZmpssxpcL0hhiVBEf4L8lGnSPWTgSv5bWBEoya2fa/0SnFX9xJgP40rMP+ZzRaCN37vLHbv1Guag== + dependencies: + "@turf/centroid" "^6.5.0" + "@turf/clone" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + "@turf/meta" "^6.5.0" + "@turf/rhumb-bearing" "^6.5.0" + "@turf/rhumb-destination" "^6.5.0" + "@turf/rhumb-distance" "^6.5.0" + +"@turf/transform-scale@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/transform-scale/-/transform-scale-6.5.0.tgz#dcccd8b0f139de32e32225a29c107a1279137120" + integrity sha512-VsATGXC9rYM8qTjbQJ/P7BswKWXHdnSJ35JlV4OsZyHBMxJQHftvmZJsFbOqVtQnIQIzf2OAly6rfzVV9QLr7g== + dependencies: + "@turf/bbox" "^6.5.0" + "@turf/center" "^6.5.0" + "@turf/centroid" "^6.5.0" + "@turf/clone" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + "@turf/meta" "^6.5.0" + "@turf/rhumb-bearing" "^6.5.0" + "@turf/rhumb-destination" "^6.5.0" + "@turf/rhumb-distance" "^6.5.0" + +"@turf/transform-translate@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/transform-translate/-/transform-translate-6.5.0.tgz#631b13aca6402898029e03fc2d1f4bc1c667fc3e" + integrity sha512-NABLw5VdtJt/9vSstChp93pc6oel4qXEos56RBMsPlYB8hzNTEKYtC146XJvyF4twJeeYS8RVe1u7KhoFwEM5w== + dependencies: + "@turf/clone" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + "@turf/meta" "^6.5.0" + "@turf/rhumb-destination" "^6.5.0" + +"@turf/triangle-grid@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/triangle-grid/-/triangle-grid-6.5.0.tgz#75664e8b9d9c7ca4c845673134a1e0d82b5e6887" + integrity sha512-2jToUSAS1R1htq4TyLQYPTIsoy6wg3e3BQXjm2rANzw4wPQCXGOxrur1Fy9RtzwqwljlC7DF4tg0OnWr8RjmfA== + dependencies: + "@turf/distance" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/intersect" "^6.5.0" + +"@turf/truncate@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/truncate/-/truncate-6.5.0.tgz#c3a16cad959f1be1c5156157d5555c64b19185d8" + integrity sha512-pFxg71pLk+eJj134Z9yUoRhIi8vqnnKvCYwdT4x/DQl/19RVdq1tV3yqOT3gcTQNfniteylL5qV1uTBDV5sgrg== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/meta" "^6.5.0" + +"@turf/turf@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/turf/-/turf-6.5.0.tgz#49cd07b942a757f3ebbdba6cb294bbb864825a83" + integrity sha512-ipMCPnhu59bh92MNt8+pr1VZQhHVuTMHklciQURo54heoxRzt1neNYZOBR6jdL+hNsbDGAECMuIpAutX+a3Y+w== + dependencies: + "@turf/along" "^6.5.0" + "@turf/angle" "^6.5.0" + "@turf/area" "^6.5.0" + "@turf/bbox" "^6.5.0" + "@turf/bbox-clip" "^6.5.0" + "@turf/bbox-polygon" "^6.5.0" + "@turf/bearing" "^6.5.0" + "@turf/bezier-spline" "^6.5.0" + "@turf/boolean-clockwise" "^6.5.0" + "@turf/boolean-contains" "^6.5.0" + "@turf/boolean-crosses" "^6.5.0" + "@turf/boolean-disjoint" "^6.5.0" + "@turf/boolean-equal" "^6.5.0" + "@turf/boolean-intersects" "^6.5.0" + "@turf/boolean-overlap" "^6.5.0" + "@turf/boolean-parallel" "^6.5.0" + "@turf/boolean-point-in-polygon" "^6.5.0" + "@turf/boolean-point-on-line" "^6.5.0" + "@turf/boolean-within" "^6.5.0" + "@turf/buffer" "^6.5.0" + "@turf/center" "^6.5.0" + "@turf/center-mean" "^6.5.0" + "@turf/center-median" "^6.5.0" + "@turf/center-of-mass" "^6.5.0" + "@turf/centroid" "^6.5.0" + "@turf/circle" "^6.5.0" + "@turf/clean-coords" "^6.5.0" + "@turf/clone" "^6.5.0" + "@turf/clusters" "^6.5.0" + "@turf/clusters-dbscan" "^6.5.0" + "@turf/clusters-kmeans" "^6.5.0" + "@turf/collect" "^6.5.0" + "@turf/combine" "^6.5.0" + "@turf/concave" "^6.5.0" + "@turf/convex" "^6.5.0" + "@turf/destination" "^6.5.0" + "@turf/difference" "^6.5.0" + "@turf/dissolve" "^6.5.0" + "@turf/distance" "^6.5.0" + "@turf/distance-weight" "^6.5.0" + "@turf/ellipse" "^6.5.0" + "@turf/envelope" "^6.5.0" + "@turf/explode" "^6.5.0" + "@turf/flatten" "^6.5.0" + "@turf/flip" "^6.5.0" + "@turf/great-circle" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/hex-grid" "^6.5.0" + "@turf/interpolate" "^6.5.0" + "@turf/intersect" "^6.5.0" + "@turf/invariant" "^6.5.0" + "@turf/isobands" "^6.5.0" + "@turf/isolines" "^6.5.0" + "@turf/kinks" "^6.5.0" + "@turf/length" "^6.5.0" + "@turf/line-arc" "^6.5.0" + "@turf/line-chunk" "^6.5.0" + "@turf/line-intersect" "^6.5.0" + "@turf/line-offset" "^6.5.0" + "@turf/line-overlap" "^6.5.0" + "@turf/line-segment" "^6.5.0" + "@turf/line-slice" "^6.5.0" + "@turf/line-slice-along" "^6.5.0" + "@turf/line-split" "^6.5.0" + "@turf/line-to-polygon" "^6.5.0" + "@turf/mask" "^6.5.0" + "@turf/meta" "^6.5.0" + "@turf/midpoint" "^6.5.0" + "@turf/moran-index" "^6.5.0" + "@turf/nearest-point" "^6.5.0" + "@turf/nearest-point-on-line" "^6.5.0" + "@turf/nearest-point-to-line" "^6.5.0" + "@turf/planepoint" "^6.5.0" + "@turf/point-grid" "^6.5.0" + "@turf/point-on-feature" "^6.5.0" + "@turf/point-to-line-distance" "^6.5.0" + "@turf/points-within-polygon" "^6.5.0" + "@turf/polygon-smooth" "^6.5.0" + "@turf/polygon-tangents" "^6.5.0" + "@turf/polygon-to-line" "^6.5.0" + "@turf/polygonize" "^6.5.0" + "@turf/projection" "^6.5.0" + "@turf/random" "^6.5.0" + "@turf/rewind" "^6.5.0" + "@turf/rhumb-bearing" "^6.5.0" + "@turf/rhumb-destination" "^6.5.0" + "@turf/rhumb-distance" "^6.5.0" + "@turf/sample" "^6.5.0" + "@turf/sector" "^6.5.0" + "@turf/shortest-path" "^6.5.0" + "@turf/simplify" "^6.5.0" + "@turf/square" "^6.5.0" + "@turf/square-grid" "^6.5.0" + "@turf/standard-deviational-ellipse" "^6.5.0" + "@turf/tag" "^6.5.0" + "@turf/tesselate" "^6.5.0" + "@turf/tin" "^6.5.0" + "@turf/transform-rotate" "^6.5.0" + "@turf/transform-scale" "^6.5.0" + "@turf/transform-translate" "^6.5.0" + "@turf/triangle-grid" "^6.5.0" + "@turf/truncate" "^6.5.0" + "@turf/union" "^6.5.0" + "@turf/unkink-polygon" "^6.5.0" + "@turf/voronoi" "^6.5.0" + +"@turf/union@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/union/-/union-6.5.0.tgz#82d28f55190608f9c7d39559b7f543393b03b82d" + integrity sha512-igYWCwP/f0RFHIlC2c0SKDuM/ObBaqSljI3IdV/x71805QbIvY/BYGcJdyNcgEA6cylIGl/0VSlIbpJHZ9ldhw== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + polygon-clipping "^0.15.3" + +"@turf/unkink-polygon@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/unkink-polygon/-/unkink-polygon-6.5.0.tgz#9e54186dcce08d7e62f608c8fa2d3f0342ebe826" + integrity sha512-8QswkzC0UqKmN1DT6HpA9upfa1HdAA5n6bbuzHy8NJOX8oVizVAqfEPY0wqqTgboDjmBR4yyImsdPGUl3gZ8JQ== + dependencies: + "@turf/area" "^6.5.0" + "@turf/boolean-point-in-polygon" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/meta" "^6.5.0" + rbush "^2.0.1" + +"@turf/voronoi@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/voronoi/-/voronoi-6.5.0.tgz#afe6715a5c7eff687434010cde45cd4822489434" + integrity sha512-C/xUsywYX+7h1UyNqnydHXiun4UPjK88VDghtoRypR9cLlb7qozkiLRphQxxsCM0KxyxpVPHBVQXdAL3+Yurow== dependencies: "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + d3-voronoi "1.1.2" "@types/d3-array@^3.0.3": version "3.0.9" @@ -1179,6 +2288,11 @@ resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.12.tgz#0307536218d32e6b970bccd1d148b9c4e5b6f10d" integrity sha512-uK2z1ZHJyC0nQRbuovXFt4mzXDwf27vQeUWNhfKGwRcWW429GOhP8HxUHlM6TLH4bzmlv/HlEjpvJh3JfmGsAA== +"@types/geojson@7946.0.8": + version "7946.0.8" + resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.8.tgz#30744afdb385e2945e22f3b033f897f76b1f12ca" + integrity sha512-1rkryxURpr6aWP7R786/UQOkJ3PcpQiWkAXBmdWc7ryFWqN6a4xfK7BtjXvFBKO9LjQ+MWQSWxYeZX1OApnArA== + "@types/geojson@^7946.0.13": version "7946.0.13" resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.13.tgz#e6e77ea9ecf36564980a861e24e62a095988775e" @@ -1239,10 +2353,10 @@ dependencies: undici-types "~5.25.1" -"@types/node@20.9.0": - version "20.9.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.9.0.tgz#bfcdc230583aeb891cf51e73cfdaacdd8deae298" - integrity sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw== +"@types/node@20.9.2": + version "20.9.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.9.2.tgz#002815c8e87fe0c9369121c78b52e800fadc0ac6" + integrity sha512-WHZXKFCEyIUJzAwh3NyyTHYSR35SevJ6mZ1nWwJafKtiQbqRTIKSRcw3Ma3acqgsent3RRDqeVwpHntMk+9irg== dependencies: undici-types "~5.26.4" @@ -1303,6 +2417,18 @@ dependencies: "@types/geojson" "*" +"@types/turf@^3.5.32": + version "3.5.32" + resolved "https://registry.yarnpkg.com/@types/turf/-/turf-3.5.32.tgz#15b39ad94e9b5c00e9e0ad97e9987253b5302b69" + integrity sha512-2Rtv0EIG7Tx1CC2ASzCPw63ugCwrqJCFqNL/Gk9QYE5iIyd+0/S/TlPTgQ+qeQC8NCEn/TncUeZp+aM9cg68rg== + dependencies: + "@types/geojson" "*" + +"@types/uuid@^9.0.7": + version "9.0.7" + resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-9.0.7.tgz#b14cebc75455eeeb160d5fe23c2fcc0c64f724d8" + integrity sha512-WUtIVRUZ9i5dYXefDEAI7sh9/O7jGvHg7Df/5O/gtH3Yabe5odI3UWopVR1qbPXQtvOxWu3mM4XxlYeZtMWF4g== + "@types/web-bluetooth@^0.0.16": version "0.0.16" resolved "https://registry.yarnpkg.com/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz#1d12873a8e49567371f2a75fe3e7f7edca6662d8" @@ -1966,6 +3092,11 @@ combined-stream@^1.0.8: dependencies: delayed-stream "~1.0.0" +commander@2: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + commander@8.3.0: version "8.3.0" resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" @@ -1994,6 +3125,16 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== +concaveman@*: + version "1.2.1" + resolved "https://registry.yarnpkg.com/concaveman/-/concaveman-1.2.1.tgz#47d20b4521125c15fabf453653c2696d9ee41e0b" + integrity sha512-PwZYKaM/ckQSa8peP5JpVr7IMJ4Nn/MHIaWUjP4be+KoZ7Botgs8seAZGpmaOM+UZXawcdYRao/px9ycrCihHw== + dependencies: + point-in-polygon "^1.1.0" + rbush "^3.0.1" + robust-predicates "^2.0.4" + tinyqueue "^2.0.3" + conventional-changelog-angular@^5.0.12: version "5.0.13" resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz#896885d63b914a70d4934b59d2fe7bde1832b28c" @@ -2195,6 +3336,11 @@ csstype@^3.0.2: resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== +d3-array@1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.4.tgz#635ce4d5eea759f6f605863dbcfc30edc737f71f" + integrity sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw== + "d3-array@2 - 3", "d3-array@2.10.0 - 3", d3-array@^3.1.6: version "3.2.4" resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-3.2.4.tgz#15fec33b237f97ac5d7c986dc77da273a8ed0bb5" @@ -2217,6 +3363,13 @@ d3-ease@^3.0.1: resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-3.1.0.tgz#9260e23a28ea5cb109e93b21a06e24e2ebd55641" integrity sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA== +d3-geo@1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/d3-geo/-/d3-geo-1.7.1.tgz#44bbc7a218b1fd859f3d8fd7c443ca836569ce99" + integrity sha512-O4AempWAr+P5qbk2bC2FuN/sDW4z+dN2wDf9QV3bxQt4M5HfOEeXLgJ/UKQW0+o1Dj8BE+L5kiDbdWUMjsmQpw== + dependencies: + d3-array "1" + "d3-interpolate@1.2.0 - 3", d3-interpolate@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-3.0.1.tgz#3c47aa5b32c5b3dfb56ef3fd4342078a632b400d" @@ -2266,6 +3419,11 @@ d3-timer@^3.0.1: resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-3.0.1.tgz#6284d2a2708285b1abb7e201eda4380af35e63b0" integrity sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA== +d3-voronoi@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/d3-voronoi/-/d3-voronoi-1.1.2.tgz#1687667e8f13a2d158c80c1480c5a29cb0d8973c" + integrity sha512-RhGS1u2vavcO7ay7ZNAPo4xeDh/VYeGof3x5ZLJBQgYhLegxr3s5IykvWmJ94FTU6mcbtp4sloqZ54mP6R4Utw== + damerau-levenshtein@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" @@ -2276,7 +3434,7 @@ dargs@^7.0.0: resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== -date-fns@^2.28.0: +date-fns@^2.28.0, date-fns@^2.30.0: version "2.30.0" resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0" integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw== @@ -2327,6 +3485,18 @@ decompress-response@^6.0.0: dependencies: mimic-response "^3.1.0" +deep-equal@1.x, deep-equal@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.2.tgz#78a561b7830eef3134c7f6f3a3d6af272a678761" + integrity sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg== + dependencies: + is-arguments "^1.1.1" + is-date-object "^1.0.5" + is-regex "^1.1.4" + object-is "^1.1.5" + object-keys "^1.1.1" + regexp.prototype.flags "^1.5.1" + deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" @@ -2379,6 +3549,11 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== +density-clustering@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/density-clustering/-/density-clustering-1.3.0.tgz#dc9f59c8f0ab97e1624ac64930fd3194817dcac5" + integrity sha512-icpmBubVTwLnsaor9qH/4tG5+7+f61VcqMN3V3pm9sxxSCt2Jcs0zWOgwZW9ARJYaKD3FumIgHiMOcIMRRAzFQ== + dequal@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" @@ -2487,7 +3662,7 @@ dot-prop@^5.1.0: dependencies: is-obj "^2.0.0" -earcut@^2.2.4: +earcut@^2.0.0, earcut@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/earcut/-/earcut-2.2.4.tgz#6d02fd4d68160c114825d06890a92ecaae60343a" integrity sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ== @@ -2656,12 +3831,12 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -eslint-config-next@14.0.2: - version "14.0.2" - resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-14.0.2.tgz#bbcd7af62ed9700d9dd74c1b8538fdb9495d46ce" - integrity sha512-CasWThlsyIcg/a+clU6KVOMTieuDhTztsrqvniP6AsRki9v7FnojTa7vKQOYM8QSOsQdZ/aElLD1Y2Oc8/PsIg== +eslint-config-next@14.0.3: + version "14.0.3" + resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-14.0.3.tgz#7a01d23e4ff143ef87b520fab9efc440fa5879f3" + integrity sha512-IKPhpLdpSUyKofmsXUfrvBC49JMUTdeaD8ZIH4v9Vk0sC1X6URTuTJCLtA0Vwuj7V/CQh0oISuSTvNn5//Buew== dependencies: - "@next/eslint-plugin-next" "14.0.2" + "@next/eslint-plugin-next" "14.0.3" "@rushstack/eslint-patch" "^1.3.3" "@typescript-eslint/parser" "^5.4.2 || ^6.0.0" eslint-import-resolver-node "^0.3.6" @@ -2802,15 +3977,15 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4 resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -eslint@8.53.0: - version "8.53.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.53.0.tgz#14f2c8244298fcae1f46945459577413ba2697ce" - integrity sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag== +eslint@8.54.0: + version "8.54.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.54.0.tgz#588e0dd4388af91a2e8fa37ea64924074c783537" + integrity sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.6.1" "@eslint/eslintrc" "^2.1.3" - "@eslint/js" "8.53.0" + "@eslint/js" "8.54.0" "@humanwhocodes/config-array" "^0.11.13" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" @@ -3102,6 +4277,24 @@ geist@^1.1.0: resolved "https://registry.yarnpkg.com/geist/-/geist-1.1.0.tgz#94bad7fce09939f269d3388af8b88940cc452eea" integrity sha512-UwZH+ekwAt1T5XYlviFD+jUXFeRRawDDT8RtpJ//IHTPXlVIO6BCcZ8M0Pxg1K/FT3H8HLn3KJqMsPLHbo1HNg== +geojson-equality@0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/geojson-equality/-/geojson-equality-0.1.6.tgz#a171374ef043e5d4797995840bae4648e0752d72" + integrity sha512-TqG8YbqizP3EfwP5Uw4aLu6pKkg6JQK9uq/XZ1lXQntvTHD1BBKJWhNpJ2M0ax6TuWMP3oyx6Oq7FCIfznrgpQ== + dependencies: + deep-equal "^1.0.0" + +geojson-rbush@3.x: + version "3.2.0" + resolved "https://registry.yarnpkg.com/geojson-rbush/-/geojson-rbush-3.2.0.tgz#8b543cf0d56f99b78faf1da52bb66acad6dfc290" + integrity sha512-oVltQTXolxvsz1sZnutlSuLDEcQAKYC/uXt9zDzJJ6bu0W+baTI8LZBaTup5afzibEH4N3jlq2p+a152wlBJ7w== + dependencies: + "@turf/bbox" "*" + "@turf/helpers" "6.x" + "@turf/meta" "6.x" + "@types/geojson" "7946.0.8" + rbush "^3.0.1" + geojson-vt@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/geojson-vt/-/geojson-vt-3.2.1.tgz#f8adb614d2c1d3f6ee7c4265cad4bbf3ad60c8b7" @@ -3502,6 +4695,14 @@ invariant@^2.2.4: dependencies: loose-envify "^1.0.0" +is-arguments@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" + integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" @@ -4246,12 +5447,12 @@ next-themes@^0.2.1: resolved "https://registry.yarnpkg.com/next-themes/-/next-themes-0.2.1.tgz#0c9f128e847979daf6c67f70b38e6b6567856e45" integrity sha512-B+AKNfYNIzh0vqQQKqQItTS8evEouKD7H5Hj3kmuPERwddR2TxvDSFZuTj6T7Jfn1oyeUyJMydPl1Bkxkh0W7A== -next@14.0.2: - version "14.0.2" - resolved "https://registry.yarnpkg.com/next/-/next-14.0.2.tgz#02ba6a1656edf14d3913c7a3553026e9d6e083c7" - integrity sha512-jsAU2CkYS40GaQYOiLl9m93RTv2DA/tTJ0NRlmZIBIL87YwQ/xR8k796z7IqgM3jydI8G25dXvyYMC9VDIevIg== +next@14.0.3: + version "14.0.3" + resolved "https://registry.yarnpkg.com/next/-/next-14.0.3.tgz#8d801a08eaefe5974203d71092fccc463103a03f" + integrity sha512-AbYdRNfImBr3XGtvnwOxq8ekVCwbFTv/UJoLwmaX89nk9i051AEY4/HAWzU0YpaTDw8IofUpmuIlvzWF13jxIw== dependencies: - "@next/env" "14.0.2" + "@next/env" "14.0.3" "@swc/helpers" "0.5.2" busboy "1.6.0" caniuse-lite "^1.0.30001406" @@ -4259,15 +5460,15 @@ next@14.0.2: styled-jsx "5.1.1" watchpack "2.4.0" optionalDependencies: - "@next/swc-darwin-arm64" "14.0.2" - "@next/swc-darwin-x64" "14.0.2" - "@next/swc-linux-arm64-gnu" "14.0.2" - "@next/swc-linux-arm64-musl" "14.0.2" - "@next/swc-linux-x64-gnu" "14.0.2" - "@next/swc-linux-x64-musl" "14.0.2" - "@next/swc-win32-arm64-msvc" "14.0.2" - "@next/swc-win32-ia32-msvc" "14.0.2" - "@next/swc-win32-x64-msvc" "14.0.2" + "@next/swc-darwin-arm64" "14.0.3" + "@next/swc-darwin-x64" "14.0.3" + "@next/swc-linux-arm64-gnu" "14.0.3" + "@next/swc-linux-arm64-musl" "14.0.3" + "@next/swc-linux-x64-gnu" "14.0.3" + "@next/swc-linux-x64-musl" "14.0.3" + "@next/swc-win32-arm64-msvc" "14.0.3" + "@next/swc-win32-ia32-msvc" "14.0.3" + "@next/swc-win32-x64-msvc" "14.0.3" node-abi@^3.3.0: version "3.51.0" @@ -4369,7 +5570,7 @@ nth-check@^2.0.1: dependencies: boolbase "^1.0.0" -object-assign@^4.0.1, object-assign@^4.1.1: +object-assign@*, object-assign@^4.0.1, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== @@ -4384,6 +5585,14 @@ object-inspect@^1.13.1, object-inspect@^1.9.0: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== +object-is@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" + integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" @@ -4648,6 +5857,18 @@ plist@^3.0.4, plist@^3.0.5, plist@^3.0.6: base64-js "^1.5.1" xmlbuilder "^15.1.1" +point-in-polygon@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/point-in-polygon/-/point-in-polygon-1.1.0.tgz#b0af2616c01bdee341cbf2894df643387ca03357" + integrity sha512-3ojrFwjnnw8Q9242TzgXuTD+eKiutbzyslcq1ydfu82Db2y+Ogbmyrkpv0Hgj31qwT3lbS9+QAAO/pIQM35XRw== + +polygon-clipping@^0.15.3: + version "0.15.3" + resolved "https://registry.yarnpkg.com/polygon-clipping/-/polygon-clipping-0.15.3.tgz#0215840438470ba2e9e6593625e4ea5c1087b4b7" + integrity sha512-ho0Xx5DLkgxRx/+n4O74XyJ67DcyN3Tu9bGYKsnTukGAW6ssnuak6Mwcyb1wHy9MZc9xsUWqIoiazkZB5weECg== + dependencies: + splaytree "^3.1.0" + postcss-import@^15.1.0: version "15.1.0" resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-15.1.0.tgz#41c64ed8cc0e23735a9698b3249ffdbf704adc70" @@ -4819,11 +6040,30 @@ quick-lru@^4.0.1: resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== +quickselect@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/quickselect/-/quickselect-1.1.1.tgz#852e412ce418f237ad5b660d70cffac647ae94c2" + integrity sha512-qN0Gqdw4c4KGPsBOQafj6yj/PA6c/L63f6CaZ/DCF/xF4Esu3jVmKLUDYxghFx8Kb/O7y9tI7x2RjTSXwdK1iQ== + quickselect@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/quickselect/-/quickselect-2.0.0.tgz#f19680a486a5eefb581303e023e98faaf25dd018" integrity sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw== +rbush@2.x, rbush@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/rbush/-/rbush-2.0.2.tgz#bb6005c2731b7ba1d5a9a035772927d16a614605" + integrity sha512-XBOuALcTm+O/H8G90b6pzu6nX6v2zCKiFG4BJho8a+bY6AER6t8uQUZdi5bomQc0AprCWhEGa7ncAbbRap0bRA== + dependencies: + quickselect "^1.0.1" + +rbush@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/rbush/-/rbush-3.0.1.tgz#5fafa8a79b3b9afdfe5008403a720cc1de882ecf" + integrity sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w== + dependencies: + quickselect "^2.0.0" + rc@^1.2.7: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" @@ -5146,6 +6386,11 @@ rimraf@^4.4.1: dependencies: glob "^9.2.0" +robust-predicates@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/robust-predicates/-/robust-predicates-2.0.4.tgz#0a2367a93abd99676d075981707f29cfb402248b" + integrity sha512-l4NwboJM74Ilm4VKfbAtFeGq7aEjWL+5kVFcmgFA2MrdnQWx9iE/tUGvxY5HyMI7o/WpSIUFLbC5fbeaHgSCYg== + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -5342,6 +6587,11 @@ sisteransi@^1.0.5: resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== +skmeans@0.9.7: + version "0.9.7" + resolved "https://registry.yarnpkg.com/skmeans/-/skmeans-0.9.7.tgz#72670cebb728508f56e29c0e10d11e623529ce5d" + integrity sha512-hNj1/oZ7ygsfmPZ7ZfN5MUBRoGg1gtpnImuJBgLO0ljQ67DtJuiQaiYdS4lUA6s0KCwnPhGivtC/WRwIZLkHyg== + slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" @@ -5414,6 +6664,11 @@ spdx-license-ids@^3.0.0: resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz#a14f64e0954f6e25cc6587bd4f392522db0d998f" integrity sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw== +splaytree@^3.1.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/splaytree/-/splaytree-3.1.2.tgz#d1db2691665a3c69d630de98d55145a6546dc166" + integrity sha512-4OM2BJgC5UzrhVnnJA4BkHKGtjXNzzUfpQjCO8I05xYPsfS/VuQDwjCGGMi8rYQilHEV4j8NBqTFbls/PZEE7A== + split-string@^3.0.1: version "3.1.0" resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" @@ -5798,6 +7053,20 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" +topojson-client@3.x: + version "3.1.0" + resolved "https://registry.yarnpkg.com/topojson-client/-/topojson-client-3.1.0.tgz#22e8b1ed08a2b922feeb4af6f53b6ef09a467b99" + integrity sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw== + dependencies: + commander "2" + +topojson-server@3.x: + version "3.0.1" + resolved "https://registry.yarnpkg.com/topojson-server/-/topojson-server-3.0.1.tgz#d2b3ec095b6732299be76a48406111b3201a34f5" + integrity sha512-/VS9j/ffKr2XAOjlZ9CgyyeLmgJ9dMwq6Y0YEON8O7p/tGGk+dCWnrE03zEdu7i4L7YsFZLEPZPzCvcB7lEEXw== + dependencies: + commander "2" + touch@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" @@ -5871,6 +7140,11 @@ tunnel-agent@^0.6.0: dependencies: safe-buffer "^5.0.1" +turf-jsts@*: + version "1.2.3" + resolved "https://registry.yarnpkg.com/turf-jsts/-/turf-jsts-1.2.3.tgz#59757f542afbff9a577bbf411f183b8f48d38aa4" + integrity sha512-Ja03QIJlPuHt4IQ2FfGex4F4JAr8m3jpaHbFbQrgwr7s7L6U8ocrHiF3J1+wf9jzhGKxvDeaCAnGDot8OjGFyA== + 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" @@ -6061,6 +7335,11 @@ uuid@^7.0.3: resolved "https://registry.yarnpkg.com/uuid/-/uuid-7.0.3.tgz#c5c9f2c8cf25dc0a372c4df1441c41f5bd0c680b" integrity sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg== +uuid@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" + integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== + v8-compile-cache-lib@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf"