diff --git a/lib/actions/api.js b/lib/actions/api.js index 759f95711..7c4f8a40c 100644 --- a/lib/actions/api.js +++ b/lib/actions/api.js @@ -317,50 +317,19 @@ export function parkAndRideQuery( // bike rental station query -export const bikeRentalError = createAction('BIKE_RENTAL_ERROR') -export const bikeRentalResponse = createAction('BIKE_RENTAL_RESPONSE') - -export function bikeRentalQuery( - params, - responseAction = bikeRentalResponse, - errorAction = bikeRentalError, - options = {} -) { - const paramsString = qs.stringify(params) - const endpoint = `bike_rental${paramsString ? `?${paramsString}` : ''}` - return createQueryAction(endpoint, responseAction, errorAction, options) +export function bikeRentalQuery() { + return executeOTPAction('findBikeRentalStations') } // Car rental (e.g. car2go) locations lookup query -export const carRentalResponse = createAction('CAR_RENTAL_RESPONSE') -export const carRentalError = createAction('CAR_RENTAL_ERROR') - -export function carRentalQuery(params) { - return createQueryAction('car_rental', carRentalResponse, carRentalError) +export function carRentalQuery() { + return executeOTPAction('findCarRentalStations') } -// Vehicle rental locations lookup query. For now, there are 3 separate -// "vehicle" rental endpoints - 1 for cars, 1 for bicycle rentals and another -// for micromobility. In the future, the hope is to consolidate these 3 -// endpoints into one. - -export const vehicleRentalResponse = createAction('VEHICLE_RENTAL_RESPONSE') -export const vehicleRentalError = createAction('VEHICLE_RENTAL_ERROR') - -export function vehicleRentalQuery( - params, - responseAction = vehicleRentalResponse, - errorAction = vehicleRentalError, - options = {} -) { - return executeOTPAction( - 'vehicleRentalQuery', - params, - responseAction, - errorAction, - options - ) +// Free-floating rental vehicles lookup query +export function rentalVehicleQuery() { + return executeOTPAction('findRentalVehicles') } // Nearby view lookup query diff --git a/lib/actions/apiV2.js b/lib/actions/apiV2.js index c3be9c2eb..d9b222d35 100644 --- a/lib/actions/apiV2.js +++ b/lib/actions/apiV2.js @@ -182,60 +182,6 @@ const findTrip = (params) => } ) -export const vehicleRentalQuery = ( - params, - responseAction, - errorAction, - options -) => - // TODO: ErrorsByNetwork is missing - createGraphQLQueryAction( - `{ - rentalVehicles { - vehicleId - id - name - lat - lon - allowPickupNow - vehicleType { - formFactor - } - network - } - } - `, - {}, - responseAction, - errorAction, - { - noThrottle: true, - postprocess: (payload, dispatch) => { - if (payload.errors) { - return errorAction(payload.errors) - } - }, - // TODO: most of this rewrites the OTP2 response to match OTP1. - // we should re-write the rest of the UI to match OTP's behavior instead - rewritePayload: (payload) => { - return { - stations: payload?.data?.rentalVehicles?.map((vehicle) => { - return { - allowPickup: vehicle.allowPickupNow, - id: vehicle.vehicleId, - isFloatingBike: vehicle?.vehicleType?.formFactor === 'BICYCLE', - isFloatingVehicle: vehicle?.vehicleType?.formFactor === 'SCOOTER', - name: vehicle.name, - networks: [vehicle.network], - x: vehicle.lon, - y: vehicle.lat - } - }) - } - } - } - ) - // TODO: numberOfDepartures needs to come from config! const stopTimeGraphQLQuery = ` stopTimes: stoptimesForPatterns(numberOfDepartures: 3) { @@ -685,6 +631,127 @@ const getVehiclePositionsForRoute = (routeId) => ) } +const vehicleRentalStationsQuery = ` + query VehicleRentalStations { + vehicleRentalStations { + id + name + lat + lon + allowDropoff + allowPickup + rentalNetwork { + networkId + } + availableVehicles { + total + byType { + vehicleType { + formFactor + } + } + } + availableSpaces { + total + byType { + vehicleType { + formFactor + } + } + } + realtime + } + }` + +const vehicleRentalStationFilter = (formFactor) => (station) => + (station.availableVehicles && + station.availableVehicles.byType.some( + (av) => av.vehicleType.formFactor === formFactor + )) || + (station.availableSpaces && + station.availableSpaces.byType.some( + (as) => as.vehicleType.formFactor === formFactor + )) + +const bikeRentalError = createAction('BIKE_RENTAL_ERROR') +const bikeRentalResponse = createAction('BIKE_RENTAL_RESPONSE') + +export function findBikeRentalStations() { + return function (dispatch) { + dispatch( + createGraphQLQueryAction( + vehicleRentalStationsQuery, + {}, + bikeRentalResponse, + bikeRentalError, + { + rewritePayload: (payload) => + payload.data.vehicleRentalStations.filter( + vehicleRentalStationFilter('BICYCLE') + ) + } + ) + ) + } +} + +export const carRentalResponse = createAction('CAR_RENTAL_RESPONSE') +export const carRentalError = createAction('CAR_RENTAL_ERROR') + +export function findCarRentalStations() { + return function (dispatch) { + dispatch( + createGraphQLQueryAction( + vehicleRentalStationsQuery, + {}, + carRentalResponse, + carRentalError, + { + rewritePayload: (payload) => + payload.data.vehicleRentalStations.filter( + vehicleRentalStationFilter('CAR') + ) + } + ) + ) + } +} + +const rentalVehiclesQuery = ` + query RentalVehicles { + rentalVehicles { + allowPickupNow + id + lat + lon + name + operative + rentalNetwork { + networkId + } + vehicleType { + formFactor + } + } + }` + +const vehicleRentalResponse = createAction('VEHICLE_RENTAL_RESPONSE') +const vehicleRentalError = createAction('VEHICLE_RENTAL_ERROR') + +export function findRentalVehicles() { + return function (dispatch) { + dispatch( + createGraphQLQueryAction( + rentalVehiclesQuery, + {}, + vehicleRentalResponse, + vehicleRentalError, + {} + ) + ) + } +} + export const findRoute = (params) => function (dispatch, getState) { const { routeId } = params @@ -1324,7 +1391,10 @@ const retrieveServiceTimeRangeIfNeeded = () => export default { fetchNearby, + findBikeRentalStations, + findCarRentalStations, findPatternsForRoute, + findRentalVehicles, findRoute, findRoutes, findStopsWithinBBox, @@ -1332,6 +1402,5 @@ export default { findTrip, getVehiclePositionsForRoute, retrieveServiceTimeRangeIfNeeded, - routingQuery, - vehicleRentalQuery + routingQuery } diff --git a/lib/components/app/responsive-webapp.js b/lib/components/app/responsive-webapp.js index e3d98f835..5c486e58c 100644 --- a/lib/components/app/responsive-webapp.js +++ b/lib/components/app/responsive-webapp.js @@ -5,13 +5,13 @@ import { Col, Grid, Row } from 'react-bootstrap' import { connect } from 'react-redux' import { ConnectedRouter } from 'connected-react-router' import { createHashHistory } from 'history' -import { getFitBoundsPadding } from '@opentripplanner/base-map/lib/util' import { injectIntl, IntlProvider } from 'react-intl' -import { MapProvider } from 'react-map-gl' +import { MapProvider } from 'react-map-gl/maplibre' import { QueryParamProvider } from 'use-query-params' import { ReactRouter5Adapter } from 'use-query-params/adapters/react-router-5' import { Route, Switch, withRouter } from 'react-router' import { Toaster } from 'react-hot-toast' +import { util } from '@opentripplanner/base-map' import coreUtils from '@opentripplanner/core-utils' import isEqual from 'lodash.isequal' import PropTypes from 'prop-types' @@ -107,11 +107,14 @@ class ResponsiveWebapp extends Component { autoFly !== false && activeItinerary === null ) { - if (query.from && query.to) { - map?.fitBounds([query.from, query.to], { - duration: 600, - padding: getFitBoundsPadding(map, 0.2) - }) + if ( + query.from && + query.to && + query.from !== prevProps.query.from && + query.to !== prevProps.query.to && + map + ) { + util.fitMapToPoints(map, query.from, query.to, 0.2, 600) } else if (query.from && !query.to) { setMapCenter(map, query.from) } else if (query.to && !query.from) { diff --git a/lib/components/map/default-map.tsx b/lib/components/map/default-map.tsx index e88fa5211..0a2ecf765 100644 --- a/lib/components/map/default-map.tsx +++ b/lib/components/map/default-map.tsx @@ -2,7 +2,12 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-nocheck import { connect } from 'react-redux' -import { GeolocateControl, NavigationControl } from 'react-map-gl' +import { + FormFactor, + RentalVehicle, + VehicleRentalStation +} from '@opentripplanner/types/otp2' +import { GeolocateControl, NavigationControl } from 'react-map-gl/maplibre' import { getCurrentDate } from '@opentripplanner/core-utils/lib/time' import { injectIntl } from 'react-intl' import BaseMap from '@opentripplanner/base-map' @@ -15,7 +20,7 @@ import { bikeRentalQuery, carRentalQuery, findStopTimesForStop, - vehicleRentalQuery + rentalVehicleQuery } from '../../actions/api' import { ComponentContext } from '../../util/contexts' import { getActiveItinerary, getActiveSearch } from '../../util/state' @@ -139,10 +144,31 @@ function getLayerName(overlay, config, intl) { } } -class DefaultMap extends Component { +interface DefaultMapProps { + bikeRentalQuery: any + bikeRentalStations: VehicleRentalStation[] + carRentalQuery: any + carRentalStations: VehicleRentalStation[] + config: any + getCurrentPosition: any + intl: any + itinerary: any + mapConfig: any + nearbyViewActive: any + pending: any + // need to update usages to reflect name change: + // vehicleRentalStations: RentalVehicle[] + rentalVehicleQuery: any + rentalVehicles: RentalVehicle[] + setLocation: any + setViewedStop: any + viewedRouteStops: any +} + +class DefaultMap extends Component { static contextType = ComponentContext - constructor(props) { + constructor(props: DefaultMapProps) { super(props) // We have to maintain the map state because the underlying map also (incorrectly?) uses a state. // Not maintaining a state causes re-renders to the map's configured coordinates. @@ -284,10 +310,10 @@ class DefaultMap extends Component { mapConfig, nearbyViewActive, pending, + rentalVehicleQuery, + rentalVehicles, setLocation, setViewedStop, - vehicleRentalQuery, - vehicleRentalStations, viewedRouteStops } = this.props const { getCustomMapOverlays, getTransitiveRouteLabel, ModeIcon } = @@ -299,17 +325,21 @@ class DefaultMap extends Component { config.api?.path }/vectorTiles` - const bikeStations = [ - ...bikeRentalStations.filter( - (station) => - !station.isFloatingVehicle || station.isFloatingVehicle === false - ), - ...vehicleRentalStations.filter( - (station) => station.isFloatingBike === true + const bikeStationsAndFloatingBikes = [ + ...bikeRentalStations, + ...rentalVehicles.filter( + (station) => station.vehicleType?.formFactor === FormFactor.BICYCLE ) ] - const scooterStations = vehicleRentalStations.filter( - (station) => station.isFloatingBike === false && station.isFloatingVehicle + + const scooters = rentalVehicles.filter( + (vehicle) => vehicle.vehicleType?.formFactor === FormFactor.SCOOTER + ) + + const micromobility = rentalVehicles.filter( + (vehicle) => + vehicle.vehicleType && + vehicle.vehicleType?.formFactor !== FormFactor.CAR ) const baseLayersWithNames = baseLayers?.map((baseLayer) => ({ @@ -383,16 +413,16 @@ class DefaultMap extends Component { return ( ) case 'car-rental': return ( ) case 'park-and-ride': @@ -403,8 +433,8 @@ class DefaultMap extends Component { return ( ) case 'otp2-micromobility-rental': @@ -412,8 +442,8 @@ class DefaultMap extends Component { ) case 'otp2-bike-rental': @@ -421,8 +451,8 @@ class DefaultMap extends Component { ) case 'otp2': @@ -492,7 +522,7 @@ const mapStateToProps = (state) => { state.otp.ui.mainPanelContent === MainPanelContent.NEARBY_VIEW, pending: activeSearch ? Boolean(activeSearch.pending) : false, query: state.otp.currentQuery, - vehicleRentalStations: state.otp.overlay.vehicleRental.stations, + rentalVehicles: state.otp.overlay.vehicleRental.stations, viewedRouteStops } } @@ -502,11 +532,11 @@ const mapDispatchToProps = { carRentalQuery, findStopTimesForStop, getCurrentPosition, + rentalVehicleQuery, setLocation, setMapPopupLocationAndGeocode, setViewedStop, - updateOverlayVisibility, - vehicleRentalQuery + updateOverlayVisibility } export default connect( diff --git a/lib/components/map/elevation-point-marker.tsx b/lib/components/map/elevation-point-marker.tsx index 842a0ec1b..083f85530 100644 --- a/lib/components/map/elevation-point-marker.tsx +++ b/lib/components/map/elevation-point-marker.tsx @@ -2,7 +2,7 @@ import { connect } from 'react-redux' import { ELEVATION_BLUE } from '../util/colors' import { Leg } from '@opentripplanner/types' -import { Marker } from 'react-map-gl' +import { Marker } from 'react-map-gl/maplibre' import coreUtils from '@opentripplanner/core-utils' import React from 'react' import styled from 'styled-components' diff --git a/lib/components/map/itinerary-summary-overlay.tsx b/lib/components/map/itinerary-summary-overlay.tsx index e1441f57e..ffc526e11 100644 --- a/lib/components/map/itinerary-summary-overlay.tsx +++ b/lib/components/map/itinerary-summary-overlay.tsx @@ -1,7 +1,7 @@ import { connect } from 'react-redux' import { Feature, lineString, LineString, Position } from '@turf/helpers' import { Itinerary, Location } from '@opentripplanner/types' -import { Marker } from 'react-map-gl' +import { Marker } from 'react-map-gl/maplibre' import centroid from '@turf/centroid' import distance from '@turf/distance' import polyline from '@mapbox/polyline' diff --git a/lib/components/map/nearby-view-dot-overlay.tsx b/lib/components/map/nearby-view-dot-overlay.tsx index 2bf65a49b..be9b10eb2 100644 --- a/lib/components/map/nearby-view-dot-overlay.tsx +++ b/lib/components/map/nearby-view-dot-overlay.tsx @@ -1,6 +1,6 @@ import { connect } from 'react-redux' import { Location } from '@opentripplanner/types' -import { Marker } from 'react-map-gl' +import { Marker } from 'react-map-gl/maplibre' import React from 'react' import styled from 'styled-components' diff --git a/lib/components/map/point-popup.tsx b/lib/components/map/point-popup.tsx index 071901434..f3783821e 100644 --- a/lib/components/map/point-popup.tsx +++ b/lib/components/map/point-popup.tsx @@ -3,7 +3,7 @@ import { FocusTrapWrapper } from '@opentripplanner/building-blocks' import { Popup } from '@opentripplanner/base-map' import { Search } from '@styled-icons/fa-solid/Search' import { useIntl, WrappedComponentProps } from 'react-intl' -import { useMap } from 'react-map-gl' +import { useMap } from 'react-map-gl/maplibre' import FromToLocationPicker from '@opentripplanner/from-to-location-picker' import React, { useCallback } from 'react' import styled from 'styled-components' diff --git a/lib/components/map/route-preview-overlay.tsx b/lib/components/map/route-preview-overlay.tsx index 1e071c0c3..87c8c6cf0 100644 --- a/lib/components/map/route-preview-overlay.tsx +++ b/lib/components/map/route-preview-overlay.tsx @@ -1,10 +1,11 @@ import { connect } from 'react-redux' -import { getFitBoundsPadding } from '@opentripplanner/base-map/lib/util' import { Itinerary, Location } from '@opentripplanner/types' -import { Layer, Source, useMap } from 'react-map-gl' +import { Layer, Source, useMap } from 'react-map-gl/maplibre' +import { util } from '@opentripplanner/base-map' import polyline from '@mapbox/polyline' import React, { useEffect } from 'react' +import { AppReduxState } from '../../util/state-types' import { DARK_TEXT_GREY } from '../util/colors' import { getActiveItinerary, @@ -15,7 +16,6 @@ import { type Props = { from: Location geometries: string[] - mainPanelContent: number | null to: Location visible?: boolean } @@ -23,23 +23,14 @@ type Props = { * This overlay will display thin gray lines for a set of geometries. It's to be used * as a stopgap until we make full use of Transitive! */ -const RoutePreviewOverlay = ({ - from, - geometries, - mainPanelContent, - to, - visible -}: Props) => { +const RoutePreviewOverlay = ({ from, geometries, to, visible }: Props) => { // Center the map over the endpoints when this overlay is shown. const { current: map } = useMap() useEffect(() => { - if (visible && mainPanelContent === null) { - map?.fitBounds([from, to], { - duration: 600, - padding: getFitBoundsPadding(map, 0.2) - }) + if (visible && map) { + util.fitMapToPoints(map, from, to, 0.2, 600) } - }, [map, visible, from, to, mainPanelContent]) + }, [map, visible, from, to]) if (!geometries || !visible) return <> @@ -82,8 +73,7 @@ const RoutePreviewOverlay = ({ } } -// TODO: Typescript state -const mapStateToProps = (state: any) => { +const mapStateToProps = (state: AppReduxState) => { const { activeSearchId, config, ui } = state.otp // Only show this overlay if the metro UI is explicitly enabled if (config.itinerary?.showFirstResultByDefault !== false) { @@ -110,11 +100,11 @@ const mapStateToProps = (state: any) => { return { from, geometries, - mainPanelContent: ui.mainPanelContent, to, visible: // We need an explicit check for undefined and null because 0 // is for us true + ui.mainPanelContent && (visibleItinerary === undefined || visibleItinerary === null) && (activeItinerary === undefined || activeItinerary === null) } diff --git a/lib/components/map/simple-map.tsx b/lib/components/map/simple-map.tsx index f9312a9a4..b1cbe7de0 100644 --- a/lib/components/map/simple-map.tsx +++ b/lib/components/map/simple-map.tsx @@ -1,5 +1,5 @@ import { connect } from 'react-redux' -import { GeolocateControl, NavigationControl } from 'react-map-gl' +import { GeolocateControl, NavigationControl } from 'react-map-gl/maplibre' import { Itinerary } from '@opentripplanner/types' import { useIntl } from 'react-intl' import BaseMap from '@opentripplanner/base-map' diff --git a/lib/components/map/with-map.tsx b/lib/components/map/with-map.tsx index c694b8553..51518931c 100644 --- a/lib/components/map/with-map.tsx +++ b/lib/components/map/with-map.tsx @@ -1,4 +1,4 @@ -import { MapRef, useMap } from 'react-map-gl' +import { MapRef, useMap } from 'react-map-gl/maplibre' import React, { ComponentType, FC } from 'react' /** diff --git a/lib/components/mobile/batch-results-screen.js b/lib/components/mobile/batch-results-screen.js index 69119f1c3..3cb41c7c9 100644 --- a/lib/components/mobile/batch-results-screen.js +++ b/lib/components/mobile/batch-results-screen.js @@ -4,7 +4,7 @@ import { Button } from 'react-bootstrap' import { connect } from 'react-redux' import { FormattedMessage } from 'react-intl' import { ListUl } from '@styled-icons/fa-solid/ListUl' -import { useMap } from 'react-map-gl' +import { useMap } from 'react-map-gl/maplibre' import coreUtils from '@opentripplanner/core-utils' import React, { useEffect } from 'react' import styled, { css } from 'styled-components' diff --git a/lib/components/util/types.ts b/lib/components/util/types.ts index 83bcd7930..125405636 100644 --- a/lib/components/util/types.ts +++ b/lib/components/util/types.ts @@ -5,7 +5,7 @@ import { Route, Stop } from '@opentripplanner/types' -import { MapRef } from 'react-map-gl' +import { MapRef } from 'react-map-gl/maplibre' export interface StopTimeTrip { blockId?: string diff --git a/lib/components/viewers/nearby/nearby-view.tsx b/lib/components/viewers/nearby/nearby-view.tsx index ddc03c0d4..a18458745 100644 --- a/lib/components/viewers/nearby/nearby-view.tsx +++ b/lib/components/viewers/nearby/nearby-view.tsx @@ -2,8 +2,9 @@ import { connect } from 'react-redux' import { FormattedMessage, useIntl } from 'react-intl' import { Location } from '@opentripplanner/types' import { LonLatInput } from '@conveyal/lonlat' -import { MapRef, useMap } from 'react-map-gl' +import { MapRef, useMap, ViewStateChangeEvent } from 'react-map-gl/maplibre' import { Search } from '@styled-icons/fa-solid/Search' +import { throttle } from '@tanstack/pacer' import coreUtils from '@opentripplanner/core-utils' import getGeocoder from '@opentripplanner/geocoder' import LocationField from '@opentripplanner/location-field' @@ -182,7 +183,8 @@ function NearbyView({ }, [location, setHighlightedLocation]) useEffect(() => { - const moveListener = (e: mapboxgl.EventData) => { + const moveListener = (e: ViewStateChangeEvent) => { + // @ts-expect-error TODO: What is this condition supposed to capture? if (e.geolocateSource) { const coords = { lat: e.viewState.latitude, @@ -193,7 +195,7 @@ function NearbyView({ } } - const dragListener = (e: mapboxgl.EventData) => { + const dragListener = (e: ViewStateChangeEvent) => { const coords = { lat: e.viewState.latitude, lon: e.viewState.longitude @@ -245,13 +247,22 @@ function NearbyView({ const onMouseEnter = useCallback( (location: Location) => { setHighlightedLocation(location) - map && zoomToPlace(map, location) + map && location && zoomToPlace(map, location) }, [setHighlightedLocation, map, zoomToPlace] ) - const onMouseLeave = useCallback(() => { - setHighlightedLocation(null) - }, [setHighlightedLocation]) + + // onMouseLeave is throttled because of a bug on Firefox where + // two mouseleave events are triggered when moving cursor quickly from one card to the next. + const onMouseLeave = useCallback( + throttle( + (e) => { + setHighlightedLocation(null) + }, + { trailing: false, wait: 1000 } + ), + [setHighlightedLocation] + ) // Determine whether the data we have is stale based on whether the coords match the URL // Sometimes Redux could have data from a previous load of the nearby view diff --git a/lib/components/viewers/stop-schedule-viewer.tsx b/lib/components/viewers/stop-schedule-viewer.tsx index 02d5e37fb..82254f961 100644 --- a/lib/components/viewers/stop-schedule-viewer.tsx +++ b/lib/components/viewers/stop-schedule-viewer.tsx @@ -5,7 +5,7 @@ import { ExclamationCircle } from '@styled-icons/fa-solid/ExclamationCircle' import { format, parse } from 'date-fns' import { FormattedMessage, injectIntl, IntlShape } from 'react-intl' import { Location } from '@styled-icons/fa-solid/Location' -import { MapRef } from 'react-map-gl' +import { MapRef } from 'react-map-gl/maplibre' import { utcToZonedTime } from 'date-fns-tz' import coreUtils from '@opentripplanner/core-utils' import React, { Component, FormEvent } from 'react' @@ -23,7 +23,7 @@ import PageTitle from '../util/page-title' import ServiceTimeRangeRetriever from '../util/service-time-range-retriever' import withMap from '../map/with-map' -import { CardBody, CardHeader } from './nearby/styled' +import { CardHeader } from './nearby/styled' import FavoriteStopToggle from './favorite-stop-toggle' import FromToPicker from './nearby/from-to-picker' import StopCardHeader from './nearby/stop-card-header' diff --git a/lib/reducers/create-otp-reducer.js b/lib/reducers/create-otp-reducer.js index deca2ae42..79d448db7 100644 --- a/lib/reducers/create-otp-reducer.js +++ b/lib/reducers/create-otp-reducer.js @@ -452,7 +452,7 @@ function createOtpReducer(config) { overlay: { bikeRental: { pending: { $set: false }, - stations: { $set: action.payload.stations } + stations: { $set: action.payload } } } }) @@ -488,7 +488,7 @@ function createOtpReducer(config) { overlay: { vehicleRental: { pending: { $set: false }, - stations: { $set: action.payload.stations } + stations: { $set: action.payload.data.rentalVehicles } } } }) diff --git a/lib/util/config-types.ts b/lib/util/config-types.ts index cbd465d2b..cfdbb2d9f 100644 --- a/lib/util/config-types.ts +++ b/lib/util/config-types.ts @@ -15,7 +15,7 @@ import { TransitOperator, VehicleRentalMapOverlaySymbol } from '@opentripplanner/types' -import { ControlPosition } from 'react-map-gl' +import { ControlPosition } from 'react-map-gl/maplibre' import { GeocoderConfig as GeocoderConfigOtpUI } from '@opentripplanner/geocoder' /** Accessibility threshold settings */ diff --git a/package.json b/package.json index 4d7220a8d..39ca565fe 100644 --- a/package.json +++ b/package.json @@ -65,6 +65,7 @@ "@opentripplanner/vehicle-rental-overlay": "4.0.2", "@styled-icons/fa-regular": "^10.34.0", "@styled-icons/fa-solid": "^10.34.0", + "@tanstack/react-pacer": "^0.8.0", "@turf/centroid": "^6.5.0", "@turf/helpers": "^6.5.0", "@types/react-transition-group": "^4.4.10", @@ -91,7 +92,7 @@ "lodash.isempty": "^4.4.0", "lodash.isequal": "^4.5.0", "lodash.memoize": "^4.1.2", - "maplibre-gl": "^2.1.9", + "maplibre-gl": "^5.6.1", "object-hash": "^3.0.0", "object-path": "^0.11.8", "object-to-formdata": "^4.1.0", @@ -107,7 +108,7 @@ "react-hot-toast": "^2.4.1", "react-intl": "^5.20.10", "react-loading-skeleton": "^2.1.1", - "react-map-gl": "^7.0.15", + "react-map-gl": "^8.0.4", "react-phone-number-input": "^3.1.0", "react-redux": "^7.1.0", "react-resize-detector": "^2.1.0", diff --git a/yarn.lock b/yarn.lock index be65ea6b3..b74e6e69b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2319,7 +2319,7 @@ resolved "https://registry.yarnpkg.com/dry-uninstall/-/dry-uninstall-0.3.0.tgz#29847a27ed3b3bb94e6212547a677e37f4427011" integrity sha512-b8h94RVpETWkVV59x62NsY++79bM7Si6Dxq7a4iVxRcJU3ZJJ4vaiC7wUZwM8WDK0ySRL+i+T/1SMAzbJLejYA== -"@mapbox/geojson-rewind@^0.5.1": +"@mapbox/geojson-rewind@^0.5.2": version "0.5.2" resolved "https://registry.yarnpkg.com/@mapbox/geojson-rewind/-/geojson-rewind-0.5.2.tgz#591a5d71a9cd1da1a0bf3420b3bea31b0fc7946a" integrity sha512-tJaT+RbYGJYStt7wI3cq4Nl4SXxG8W7JDG5DMJu97V25RnbNg3QtQtf+KD+VLjNpWKYsRvXDNmNrBgEETr1ifA== @@ -2327,16 +2327,11 @@ get-stream "^6.0.1" minimist "^1.2.6" -"@mapbox/jsonlint-lines-primitives@^2.0.2": +"@mapbox/jsonlint-lines-primitives@^2.0.2", "@mapbox/jsonlint-lines-primitives@~2.0.2": version "2.0.2" resolved "https://registry.yarnpkg.com/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz#ce56e539f83552b58d10d672ea4d6fc9adc7b234" integrity sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ== -"@mapbox/mapbox-gl-supported@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-2.0.1.tgz#c15367178d8bfe4765e6b47b542fe821ce259c7b" - integrity sha512-HP6XvfNIzfoMVfyGjBckjiAOQK9WfX0ywdLubuPMPv+Vqf5fj0uCbgBQYpiqcWZT6cbyyRnTSXDheT1ugvF6UQ== - "@mapbox/point-geometry@0.1.0", "@mapbox/point-geometry@^0.1.0", "@mapbox/point-geometry@~0.1.0": version "0.1.0" resolved "https://registry.yarnpkg.com/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz#8a83f9335c7860effa2eeeca254332aa0aeed8f2" @@ -2349,10 +2344,10 @@ dependencies: meow "^6.1.1" -"@mapbox/tiny-sdf@^2.0.4": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@mapbox/tiny-sdf/-/tiny-sdf-2.0.5.tgz#cdba698d3d65087643130f9af43a2b622ce0b372" - integrity sha512-OhXt2lS//WpLdkqrzo/KwB7SRD8AiNTFFzuo9n14IBupzIMa67yGItcK7I2W9D8Ghpa4T04Sw9FWsKCJG50Bxw== +"@mapbox/tiny-sdf@^2.0.6": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@mapbox/tiny-sdf/-/tiny-sdf-2.0.6.tgz#9a1d33e5018093e88f6a4df2343e886056287282" + integrity sha512-qMqa27TLw+ZQz5Jk+RcwZGH7BQf5G/TrutJhspsca/3SHwmgKQ1iq+d3Jxz5oysPVYTGP6aXxCo5Lk9Er6YBAA== "@mapbox/unitbezier@^0.0.1": version "0.0.1" @@ -2371,6 +2366,31 @@ resolved "https://registry.yarnpkg.com/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz#497c67a1cef50d1a2459ba60f315e448d2ad87fe" integrity sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q== +"@maplibre/maplibre-gl-style-spec@^19.2.1": + version "19.3.3" + resolved "https://registry.yarnpkg.com/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-19.3.3.tgz#a106248bd2e25e77c963a362aeaf630e00f924e9" + integrity sha512-cOZZOVhDSulgK0meTsTkmNXb1ahVvmTmWmfx9gRBwc6hq98wS9JP35ESIoNq3xqEan+UN+gn8187Z6E4NKhLsw== + dependencies: + "@mapbox/jsonlint-lines-primitives" "~2.0.2" + "@mapbox/unitbezier" "^0.0.1" + json-stringify-pretty-compact "^3.0.0" + minimist "^1.2.8" + rw "^1.3.3" + sort-object "^3.0.3" + +"@maplibre/maplibre-gl-style-spec@^23.3.0": + version "23.3.0" + resolved "https://registry.yarnpkg.com/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-23.3.0.tgz#b69ab48cb3abead4e49213396c8f83492638b97c" + integrity sha512-IGJtuBbaGzOUgODdBRg66p8stnwj9iDXkgbYKoYcNiiQmaez5WVRfXm4b03MCDwmZyX93csbfHFWEJJYHnn5oA== + dependencies: + "@mapbox/jsonlint-lines-primitives" "~2.0.2" + "@mapbox/unitbezier" "^0.0.1" + json-stringify-pretty-compact "^4.0.0" + minimist "^1.2.8" + quickselect "^3.0.0" + rw "^1.3.3" + tinyqueue "^3.0.0" + "@modyfi/vite-plugin-yaml@^1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@modyfi/vite-plugin-yaml/-/vite-plugin-yaml-1.1.1.tgz#f3d85a76aebbbe3c143e8f783a59ce1dcf391670" @@ -2653,42 +2673,12 @@ dependencies: "@octokit/openapi-types" "^10.0.0" -"@opentripplanner/base-map@5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@opentripplanner/base-map/-/base-map-5.0.1.tgz#53fd0989ea2ab8b207fa450710af64de4e03bb40" - integrity sha512-IJPrQbajzDhscMGtVmLwti3wk9y5zW0buvyQxFZ2v0xccyVvDrakis/IxK4HaO8ht/MUQIe7TC5TCF3NK0bUew== - dependencies: - "@opentripplanner/building-blocks" "3.0.0" - mapbox-gl "npm:empty-npm-package@1.0.0" - maplibre-gl "^2.1.9" - react-map-gl "^7.0.15" - -"@opentripplanner/base-map@5.0.2": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@opentripplanner/base-map/-/base-map-5.0.2.tgz#4eb7bd86b33185c1844f50434f73346ae24ab3c5" - integrity sha512-Ov1Sdc28upEbJJkXpKsDdqGo48zVng3284x3SMHh1GrHUr/xlIQrXXujgr6M1gPIEmUZZo7sQrw5+3qmDUGl6w== - dependencies: - "@opentripplanner/building-blocks" "3.0.0" - mapbox-gl "npm:empty-npm-package@1.0.0" - maplibre-gl "^2.1.9" - react-map-gl "^7.0.15" - -"@opentripplanner/base-map@5.2.0": +"@opentripplanner/base-map@5.2.0", "@opentripplanner/base-map@file:../../../../tmp/otp-ui-pkg/base-map": version "5.2.0" - resolved "https://registry.yarnpkg.com/@opentripplanner/base-map/-/base-map-5.2.0.tgz#67992efcf9ed492d478e03d1e505f9a03b189028" - integrity sha512-UoPkmbDyiKO7Fm3vtsEFFgTLa6SLN6cFd9UdPjoJbhpjXB36ihEreE+DKvVUGPOdzBeT4EY+Hl2NNzkLRSYrtg== dependencies: "@opentripplanner/building-blocks" "3.0.1" - mapbox-gl "npm:empty-npm-package@1.0.0" - maplibre-gl "^2.1.9" - react-map-gl "^7.0.15" - -"@opentripplanner/building-blocks@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@opentripplanner/building-blocks/-/building-blocks-3.0.0.tgz#79952990a3ea8fdcbc4ac718d2d5e8793605aa9a" - integrity sha512-ThwCeWL4qZalayM3zg/D+Vzl4a+xY+289WWAU2D5lwI5f8/CAj8XDlLWuU6vcEYPI7pEf/GWnz01hBJ7KLeMrg== - dependencies: - "@styled-icons/bootstrap" "^10.47.0" + maplibre-gl "^5.6.1" + react-map-gl "^8.0.4" "@opentripplanner/building-blocks@3.0.1": version "3.0.1" @@ -2697,6 +2687,11 @@ dependencies: "@styled-icons/bootstrap" "^10.47.0" +"@opentripplanner/building-blocks@file:../../../../tmp/otp-ui-pkg/building-blocks": + version "3.0.1" + dependencies: + "@styled-icons/bootstrap" "^10.47.0" + "@opentripplanner/core-utils@13.0.0": version "13.0.0" resolved "https://registry.yarnpkg.com/@opentripplanner/core-utils/-/core-utils-13.0.0.tgz#33d7640161f4dbe8eebaad99faf97de33d939ada" @@ -2715,10 +2710,8 @@ lodash.isequal "^4.5.0" qs "^6.9.1" -"@opentripplanner/core-utils@13.0.1": +"@opentripplanner/core-utils@13.0.1", "@opentripplanner/core-utils@file:../../../../tmp/otp-ui-pkg/core-utils": version "13.0.1" - resolved "https://registry.yarnpkg.com/@opentripplanner/core-utils/-/core-utils-13.0.1.tgz#53c222bbe7f72cf6cda50046daab1480b5b3aa3e" - integrity sha512-377rE/5y/9cLJfyrCaXBYJopdA4MzJpepdyc7Wr05xxexM6xj7H/MhAgNyM14XXfF/Kz2I08RioD87QX6iTQLA== dependencies: "@conveyal/lonlat" "^1.4.1" "@mapbox/polyline" "^1.1.1" @@ -2733,14 +2726,12 @@ lodash.isequal "^4.5.0" qs "^6.9.1" -"@opentripplanner/endpoints-overlay@4.0.1": +"@opentripplanner/endpoints-overlay@file:../../../../tmp/otp-ui-pkg/endpoints-overlay": version "4.0.1" - resolved "https://registry.yarnpkg.com/@opentripplanner/endpoints-overlay/-/endpoints-overlay-4.0.1.tgz#ecc62b729db876ed3e331b7cab1a638c77a9ebf5" - integrity sha512-QIgEBBIzxGLVtiPBHXh1s+gu7QHvAyJzQ7Tlu8lzjSndx2d0zB/Mk+npZMM+rryjELGLqouse4OZ/ep6JsEyLw== dependencies: - "@opentripplanner/base-map" "5.0.1" - "@opentripplanner/building-blocks" "3.0.0" - "@opentripplanner/core-utils" "13.0.0" + "@opentripplanner/base-map" "5.2.0" + "@opentripplanner/building-blocks" "3.0.1" + "@opentripplanner/core-utils" "13.0.1" "@opentripplanner/location-icon" "2.0.0" "@styled-icons/fa-solid" "^10.34.0" flat "^5.0.2" @@ -2772,7 +2763,7 @@ isomorphic-mapzen-search "^1.6.1" lodash.memoize "^4.1.2" -"@opentripplanner/geocoder@3.0.5", "@opentripplanner/geocoder@^3.0.5": +"@opentripplanner/geocoder@3.0.5": version "3.0.5" resolved "https://registry.yarnpkg.com/@opentripplanner/geocoder/-/geocoder-3.0.5.tgz#e1faacc0bfe76060b7a08f8c835232f611fa4bf3" integrity sha512-bxFO42xlV3utyI/wwQIPzkL9osiUMAvyfdVfIvYDvabcKEFyYNAVOerz8vjOHryViZ3p7eALWeC77HBMOIYdHg== @@ -2783,6 +2774,15 @@ isomorphic-mapzen-search "^1.6.1" lodash.memoize "^4.1.2" +"@opentripplanner/geocoder@file:../../../../tmp/otp-ui-pkg/geocoder": + version "3.0.5" + dependencies: + "@conveyal/geocoder-arcgis-geojson" "^0.0.3" + "@conveyal/lonlat" "^1.4.1" + "@leeoniya/ufuzzy" "^1.0.14" + isomorphic-mapzen-search "^1.6.1" + lodash.memoize "^4.1.2" + "@opentripplanner/humanize-distance@2.0.0", "@opentripplanner/humanize-distance@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@opentripplanner/humanize-distance/-/humanize-distance-2.0.0.tgz#a898a63c5ec881972e82b308622b2351659e0f83" @@ -2796,24 +2796,6 @@ "@opentripplanner/core-utils" "13.0.0" prop-types "^15.7.2" -"@opentripplanner/itinerary-body@7.0.3": - version "7.0.3" - resolved "https://registry.yarnpkg.com/@opentripplanner/itinerary-body/-/itinerary-body-7.0.3.tgz#35e23c275c57ee5444d368fc8c59c10d055d6ab1" - integrity sha512-7btQvQWNTVMXyGe34+zgsehPlZAb6oq53ujPwCEXbcdXzhBjz9T4GG5pQ1FLH0XpbVsePMZCEgFjiKLlzk3dfw== - dependencies: - "@opentripplanner/core-utils" "13.0.1" - "@opentripplanner/humanize-distance" "2.0.0" - "@opentripplanner/icons" "4.0.0" - "@opentripplanner/location-icon" "2.0.0" - "@styled-icons/fa-solid" "^10.34.0" - "@styled-icons/foundation" "^10.34.0" - date-fns "^2.28.0" - date-fns-tz "^1.2.2" - flat "^5.0.2" - react-animate-height "^3.0.4" - react-resize-detector "^4.2.1" - string-similarity "^4.0.4" - "@opentripplanner/itinerary-body@7.0.4": version "7.0.4" resolved "https://registry.yarnpkg.com/@opentripplanner/itinerary-body/-/itinerary-body-7.0.4.tgz#d4d2022707f776cb26108a228c09da839dc264fc" @@ -2853,21 +2835,8 @@ "@styled-icons/fa-regular" "^10.34.0" "@styled-icons/fa-solid" "^10.34.0" -"@opentripplanner/map-popup@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@opentripplanner/map-popup/-/map-popup-6.0.1.tgz#480e1512287a01ab515f7d9d900e5209ee0934b0" - integrity sha512-TUGc+pFYHPfy/tUL5SPDGv64MT/nj9SlHrd8lNQmn4Z/LVAXmXSbRhbcaIA9zgfoPQ9YFS488wvWwAzyucYd9A== - dependencies: - "@opentripplanner/base-map" "5.0.1" - "@opentripplanner/building-blocks" "3.0.0" - "@opentripplanner/core-utils" "13.0.0" - "@opentripplanner/from-to-location-picker" "4.0.0" - flat "^5.0.2" - -"@opentripplanner/map-popup@6.0.4": +"@opentripplanner/map-popup@6.0.4", "@opentripplanner/map-popup@file:../../../../tmp/otp-ui-pkg/map-popup": version "6.0.4" - resolved "https://registry.yarnpkg.com/@opentripplanner/map-popup/-/map-popup-6.0.4.tgz#e9641b7c56a26767c5cf1841aec866e3bafb6720" - integrity sha512-vf/OcX1kkleIPlHWDZPky0SVUJJXW+cGAJxuQEEwhG8etrsvS5730Yeoy0jgs8+p/JyZmIaz7HnxIaEmLZncTQ== dependencies: "@opentripplanner/base-map" "5.2.0" "@opentripplanner/building-blocks" "3.0.1" @@ -2875,21 +2844,17 @@ "@opentripplanner/from-to-location-picker" "4.0.1" flat "^5.0.2" -"@opentripplanner/otp2-tile-overlay@3.1.0": +"@opentripplanner/otp2-tile-overlay@file:../../../../tmp/otp-ui-pkg/otp2-tile-overlay": version "3.1.0" - resolved "https://registry.yarnpkg.com/@opentripplanner/otp2-tile-overlay/-/otp2-tile-overlay-3.1.0.tgz#125b524347ee2eca2e3ee3f636247549ad68e3fb" - integrity sha512-2326ORn+CvnedVm8HLjb+nc/Nmt7/w54I8NmmBY6kHdU38ui8CmnZVNFrWwJ+IsZ9CqSkAZSwFXgDhQPoRBl7Q== dependencies: "@opentripplanner/map-popup" "6.0.4" -"@opentripplanner/park-and-ride-overlay@4.0.1": +"@opentripplanner/park-and-ride-overlay@file:../../../../tmp/otp-ui-pkg/park-and-ride-overlay": version "4.0.1" - resolved "https://registry.yarnpkg.com/@opentripplanner/park-and-ride-overlay/-/park-and-ride-overlay-4.0.1.tgz#7c4920b3103e29f12f75527d069f539770bfb07f" - integrity sha512-QzGSTEi0Jq+R1iYgYU8qEEhtIpTswh28Iv/q7qKsg4NmuSq7SPEUL2n7X47MxZDEQg932yqvdzq+7aMt2zjY8Q== dependencies: - "@opentripplanner/base-map" "5.0.1" - "@opentripplanner/from-to-location-picker" "4.0.0" - "@opentripplanner/types" "6.5.2" + "@opentripplanner/base-map" "5.2.0" + "@opentripplanner/from-to-location-picker" "4.0.1" + "@opentripplanner/types" "6.5.3" "@opentripplanner/printable-itinerary@4.0.1": version "4.0.1" @@ -2899,14 +2864,12 @@ "@opentripplanner/core-utils" "13.0.1" "@opentripplanner/itinerary-body" "7.0.4" -"@opentripplanner/route-viewer-overlay@4.0.1": +"@opentripplanner/route-viewer-overlay@file:../../../../tmp/otp-ui-pkg/route-viewer-overlay": version "4.0.1" - resolved "https://registry.yarnpkg.com/@opentripplanner/route-viewer-overlay/-/route-viewer-overlay-4.0.1.tgz#e797dbe28d75ab8322b09b7f9922803004bee899" - integrity sha512-p+Tyql9S89PEsJ5RCx8MOWj2PC7mutDKzQIYWkiJlHQ/GtQBlCzD8rNS3/vsQkQcEJQiXkAtXCY25MdGnZBCgw== dependencies: - "@mapbox/polyline" "^1.1.0" - "@opentripplanner/base-map" "5.0.1" - "@opentripplanner/core-utils" "13.0.0" + "@mapbox/polyline" "^1.1.1" + "@opentripplanner/base-map" "5.2.0" + "@opentripplanner/core-utils" "13.0.1" point-in-polygon "^1.1.0" "@opentripplanner/scripts@^1.2.0": @@ -2920,43 +2883,35 @@ glob-promise "^4.2.2" js-yaml "^4.1.0" -"@opentripplanner/stop-viewer-overlay@4.0.1": +"@opentripplanner/stop-viewer-overlay@file:../../../../tmp/otp-ui-pkg/stop-viewer-overlay": version "4.0.1" - resolved "https://registry.yarnpkg.com/@opentripplanner/stop-viewer-overlay/-/stop-viewer-overlay-4.0.1.tgz#2a24c6626002820bd44ad98197a7163eceff03a9" - integrity sha512-isQ31GvYVb2MDqQecdV7q2g6XlsAutqV+eefKwkWCH2pRc7wNpKi1jGe1uwh6TztgAZAOO+5kPTGbQ0cQFXPzQ== dependencies: - "@opentripplanner/base-map" "5.0.1" - "@opentripplanner/core-utils" "13.0.0" + "@opentripplanner/base-map" "5.2.0" + "@opentripplanner/core-utils" "13.0.1" -"@opentripplanner/stops-overlay@7.0.2": +"@opentripplanner/stops-overlay@file:../../../../tmp/otp-ui-pkg/stops-overlay": version "7.0.2" - resolved "https://registry.yarnpkg.com/@opentripplanner/stops-overlay/-/stops-overlay-7.0.2.tgz#0f69de84c3ee228f8d5118e8c17faabb67000882" - integrity sha512-CDrKilmwJcPhLwPzu27IqyPROPF75fO0ZRfgGaRn64Zgzlk1DE3cX1xQjXlb9qRkwykhnLQ6SoGRaQkStfet6w== dependencies: - "@opentripplanner/base-map" "5.0.1" - "@opentripplanner/from-to-location-picker" "4.0.0" - "@opentripplanner/map-popup" "6.0.1" + "@opentripplanner/base-map" "5.2.0" + "@opentripplanner/from-to-location-picker" "4.0.1" + "@opentripplanner/map-popup" "6.0.4" flat "^5.0.2" -"@opentripplanner/transit-vehicle-overlay@6.0.2": +"@opentripplanner/transit-vehicle-overlay@file:../../../../tmp/otp-ui-pkg/transit-vehicle-overlay": version "6.0.2" - resolved "https://registry.yarnpkg.com/@opentripplanner/transit-vehicle-overlay/-/transit-vehicle-overlay-6.0.2.tgz#bd2fd194b52a8195e2cafcefdb38a0a81339bc88" - integrity sha512-4D4qMkvTig4X9U9iiHjAP++vcbGnehA1Y87wjClAkkm/i4XS9y5UgvskbkicPlaIsmMe9kVUO6USb0Pp5o65sQ== dependencies: "@opentripplanner/base-map" "5.2.0" "@opentripplanner/core-utils" "13.0.1" "@opentripplanner/icons" "4.0.0" flat "^5.0.2" -"@opentripplanner/transitive-overlay@6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@opentripplanner/transitive-overlay/-/transitive-overlay-6.0.0.tgz#be041140ec852253a4c9128169878e7ba0303cf9" - integrity sha512-2wPTIZDmcmq9Ar+6i6to8puAZIdUt3CGgNOEyLHL11ocyo54LW8mZMp5Jh/Hk6N2wTUvMi5DraRwlDxUKYn8nw== +"@opentripplanner/transitive-overlay@file:../../../../tmp/otp-ui-pkg/transitive-overlay": + version "6.0.1" dependencies: "@mapbox/polyline" "^1.1.1" - "@opentripplanner/base-map" "5.0.2" + "@opentripplanner/base-map" "5.2.0" "@opentripplanner/core-utils" "13.0.1" - "@opentripplanner/itinerary-body" "7.0.3" + "@opentripplanner/itinerary-body" "7.0.4" "@turf/bbox" "^6.5.0" "@turf/bearing" "^6.5.0" "@turf/destination" "^6.5.0" @@ -2965,7 +2920,7 @@ "@turf/midpoint" "^6.5.0" lodash.isequal "^4.5.0" -"@opentripplanner/trip-details@^8.0.1": +"@opentripplanner/trip-details@8.0.1": version "8.0.1" resolved "https://registry.yarnpkg.com/@opentripplanner/trip-details/-/trip-details-8.0.1.tgz#bae7e22f4bcc805a906e7daf570a10bd0d2cc9e9" integrity sha512-eCp2zI/VmE/RvD8JyGvrD8wBJeGNcJjh+QP2XTEXuwxZO+ZrubPOAwPI1n/NUXje5K7pUFRJUUrd7NeaLEnk/w== @@ -2975,10 +2930,10 @@ flat "^5.0.2" react-animate-height "^3.0.4" -"@opentripplanner/trip-form@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@opentripplanner/trip-form/-/trip-form-6.0.1.tgz#262079589e056bf49c285a5b38257c54c59f088f" - integrity sha512-7o8frpL7rhieQmkrSaAxj+kqp8ocHyxmyB2l2LH8jJmoGgGevtQ5VxEmXaVctwpGJ12Fi1P/yiqD08PqnPG49w== +"@opentripplanner/trip-form@6.0.2": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@opentripplanner/trip-form/-/trip-form-6.0.2.tgz#8db1dbf7da12957f718289e3030a68cc16969e89" + integrity sha512-cn0FqCIwtkSELng9a3Br4ispd6BNC/VAw6S3UPC850mt9BkCKK4RdBhtSitX0FGiwLy50cERKxJFA68xNka9ew== dependencies: "@floating-ui/react" "^0.19.2" "@opentripplanner/building-blocks" "3.0.1" @@ -2994,34 +2949,25 @@ react-indiana-drag-scroll "^2.0.1" react-inlinesvg "^2.3.0" -"@opentripplanner/trip-viewer-overlay@4.0.1": +"@opentripplanner/trip-viewer-overlay@file:../../../../tmp/otp-ui-pkg/trip-viewer-overlay": version "4.0.1" - resolved "https://registry.yarnpkg.com/@opentripplanner/trip-viewer-overlay/-/trip-viewer-overlay-4.0.1.tgz#6d221c4e0b88f6d7701b58d1bbf743ae1ceb8120" - integrity sha512-N++4BAP75fEhR1sAT41Q46SHbmrV0zQCZnbbg89Vjs/wZuTHOjXYnsJvJ/xj7nZopCnl0baKzaUj/UBTpABtAg== dependencies: - "@mapbox/polyline" "^1.1.0" - "@opentripplanner/base-map" "5.0.1" - "@opentripplanner/core-utils" "13.0.0" - -"@opentripplanner/types@6.5.2": - version "6.5.2" - resolved "https://registry.yarnpkg.com/@opentripplanner/types/-/types-6.5.2.tgz#1373d738479568d880a3b13670b0ec53a1a75bd5" - integrity sha512-2qDcKOrsLoXdwjRAdi4xcdDUsZGTnwBM+vfEf8TTuuWSnA+WYav3ldlMB4sugxIdLaVKXlOfe3F5lCEh9jAHWA== + "@mapbox/polyline" "^1.1.1" + "@opentripplanner/base-map" "5.2.0" + "@opentripplanner/core-utils" "13.0.1" -"@opentripplanner/types@^6.5.3": +"@opentripplanner/types@6.5.3", "@opentripplanner/types@^6.5.3": version "6.5.3" resolved "https://registry.yarnpkg.com/@opentripplanner/types/-/types-6.5.3.tgz#cde99b1b5a1f16b88cfd1baa7005918151cebde3" integrity sha512-zcr/IIkZ9P9U5G0j9IsT4nbxplIEc1NQRpfgvEqqI3GPAkr7wTPe2KtyjgxcTIszZ2qLzUwwhmVWkNYjekcMyA== -"@opentripplanner/vehicle-rental-overlay@4.0.2": +"@opentripplanner/vehicle-rental-overlay@file:../../../../tmp/otp-ui-pkg/vehicle-rental-overlay": version "4.0.2" - resolved "https://registry.yarnpkg.com/@opentripplanner/vehicle-rental-overlay/-/vehicle-rental-overlay-4.0.2.tgz#4f37417e8e5cb98806a5c2b29766608fa21e0aea" - integrity sha512-BXYY2fpEQ9EMFZLhACFsnxIWyfQVeHcGX6OK0f/BtIux07NzMvOcZJQS/gFWQBm6r4XAZcm5VPwQc/ck83L5Cw== dependencies: - "@opentripplanner/base-map" "5.0.1" - "@opentripplanner/core-utils" "13.0.0" - "@opentripplanner/from-to-location-picker" "4.0.0" - "@opentripplanner/map-popup" "6.0.1" + "@opentripplanner/base-map" "5.2.0" + "@opentripplanner/core-utils" "13.0.1" + "@opentripplanner/from-to-location-picker" "4.0.1" + "@opentripplanner/map-popup" "6.0.4" "@styled-icons/fa-solid" "^10.34.0" flat "^5.0.2" lodash.memoize "^4.1.2" @@ -3676,6 +3622,18 @@ "@svgr/plugin-svgo" "^5.5.0" loader-utils "^2.0.0" +"@tanstack/pacer@0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@tanstack/pacer/-/pacer-0.8.0.tgz#1c29c3863af65bbab6fef4ebb71a440a256af9ed" + integrity sha512-wh9um4sF37woA9M/Pf05eyl30/V8RYN5x06yDQIhdJ+dB4YsQUR7qt+gIyGmygutFvqTMKDERXSC7NLIBZND9Q== + +"@tanstack/react-pacer@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@tanstack/react-pacer/-/react-pacer-0.8.0.tgz#0a3733eaff6a5a1ede54f49e5f5b892153bcb480" + integrity sha512-nQX5ACRHdOiZjPOudA3Ii64mPfRkeRkSYtjQaRMD3FqY9AQKuQJgPglAFA7U4UenLOXJvqXiKMWzFDi1Bw9EZQ== + dependencies: + "@tanstack/pacer" "0.8.0" + "@tootallnate/once@1": version "1.1.2" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" @@ -3896,11 +3854,23 @@ dependencies: "@types/node" "*" -"@types/geojson@*", "@types/geojson@^7946.0.8": +"@types/geojson-vt@3.2.5": + version "3.2.5" + resolved "https://registry.yarnpkg.com/@types/geojson-vt/-/geojson-vt-3.2.5.tgz#b6c356874991d9ab4207533476dfbcdb21e38408" + integrity sha512-qDO7wqtprzlpe8FfQ//ClPV9xiuoh2nkIgiouIptON9w5jvD/fA4szvP9GBlDVdJ5dldAl0kX/sy3URbWwLx0g== + dependencies: + "@types/geojson" "*" + +"@types/geojson@*": 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.16": + version "7946.0.16" + resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.16.tgz#8ebe53d69efada7044454e3305c19017d97ced2a" + integrity sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg== + "@types/glob@^7.1.1", "@types/glob@^7.1.3": version "7.2.0" resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" @@ -4001,18 +3971,16 @@ resolved "https://registry.yarnpkg.com/@types/long/-/long-3.0.32.tgz#f4e5af31e9e9b196d8e5fca8a5e2e20aa3d60b69" integrity sha512-ZXyOOm83p7X8p3s0IYM3VeueNmHpkk/yMlP8CLeOnEcu6hIwPH7YjZBvhQkR0ZFS2DqZAxKtJ/M5fcuv3OU5BA== -"@types/mapbox-gl@^2.6.0": - version "2.7.3" - resolved "https://registry.yarnpkg.com/@types/mapbox-gl/-/mapbox-gl-2.7.3.tgz#d75049251f1cb5f5a5453d6c20ffb9d2de6cbd75" - integrity sha512-XdveeJptNNZw7ZoeiAJ2/dupNtWaV6qpBG/SOFEpQNQAc+oiO6qUznX85n+W1XbLeD8SVRVfVORKuR+I4CHDZw== - dependencies: - "@types/geojson" "*" - -"@types/mapbox__point-geometry@*", "@types/mapbox__point-geometry@^0.1.2": +"@types/mapbox__point-geometry@*": version "0.1.2" resolved "https://registry.yarnpkg.com/@types/mapbox__point-geometry/-/mapbox__point-geometry-0.1.2.tgz#488a9b76e8457d6792ea2504cdd4ecdd9860a27e" integrity sha512-D0lgCq+3VWV85ey1MZVkE8ZveyuvW5VAfuahVTQRpXFQTxw03SuIf1/K4UQ87MMIXVKzpFjXFiFMZzLj2kU+iA== +"@types/mapbox__point-geometry@^0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@types/mapbox__point-geometry/-/mapbox__point-geometry-0.1.4.tgz#0ef017b75eedce02ff6243b4189210e2e6d5e56d" + integrity sha512-mUWlSxAmYLfwnRBmgYV86tgYmMIICX4kza8YnE/eIlywGe2XoOxlpVnXWwir92xRLjwyarqwpu2EJKD2pk0IUA== + "@types/mapbox__polyline@^1.0.2": version "1.0.2" resolved "https://registry.yarnpkg.com/@types/mapbox__polyline/-/mapbox__polyline-1.0.2.tgz#788cf4d72326961eacf44cb1abca435860ec4673" @@ -4020,10 +3988,10 @@ dependencies: "@types/geojson" "*" -"@types/mapbox__vector-tile@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@types/mapbox__vector-tile/-/mapbox__vector-tile-1.3.0.tgz#8fa1379dbaead1e1b639b8d96cfd174404c379d6" - integrity sha512-kDwVreQO5V4c8yAxzZVQLE5tyWF+IPToAanloQaSnwfXmIcJ7cyOrv8z4Ft4y7PsLYmhWXmON8MBV8RX0Rgr8g== +"@types/mapbox__vector-tile@^1.3.4": + version "1.3.4" + resolved "https://registry.yarnpkg.com/@types/mapbox__vector-tile/-/mapbox__vector-tile-1.3.4.tgz#ad757441ef1d34628d9e098afd9c91423c1f8734" + integrity sha512-bpd8dRn9pr6xKvuEBQup8pwQfD4VUyqO/2deGjfpe6AwC8YRlyEipvefyRJUSiCJTZuCb8Pl1ciVV5ekqJ96Bg== dependencies: "@types/geojson" "*" "@types/mapbox__point-geometry" "*" @@ -4064,11 +4032,16 @@ resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== -"@types/pbf@*", "@types/pbf@^3.0.2": +"@types/pbf@*": version "3.0.2" resolved "https://registry.yarnpkg.com/@types/pbf/-/pbf-3.0.2.tgz#8d291ad68b4b8c533e96c174a2e3e6399a59ed61" integrity sha512-EDrLIPaPXOZqDjrkzxxbX7UlJSeQVgah3i0aA4pOSzmK9zq3BIh7/MZIQxED7slJByvKM4Gc6Hypyu2lJzh3SQ== +"@types/pbf@^3.0.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@types/pbf/-/pbf-3.0.5.tgz#a9495a58d8c75be4ffe9a0bd749a307715c07404" + integrity sha512-j3pOPiEcWZ34R6a6mN07mUkM4o4Lwf6hPNt8eilOeZhTFbxFXmKhvXl9Y28jotFPaI1bpPDJsbCprUoNke6OrA== + "@types/prettier@^2.0.0", "@types/prettier@^2.1.5": version "2.3.2" resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.3.2.tgz#fc8c2825e4ed2142473b4a81064e6e081463d1b3" @@ -4187,6 +4160,13 @@ "@types/react" "*" csstype "^3.0.2" +"@types/supercluster@^7.1.3": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@types/supercluster/-/supercluster-7.1.3.tgz#1a1bc2401b09174d9c9e44124931ec7874a72b27" + integrity sha512-Z0pOY34GDFl3Q6hUFYf3HkTwKEE02e7QgtJppBt+beEAxnyOpJua+voGFvxINBHa06GwLFFym7gRPY2SiKIfIA== + dependencies: + "@types/geojson" "*" + "@types/tapable@^1", "@types/tapable@^1.0.5": version "1.0.8" resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.8.tgz#b94a4391c85666c7b73299fd3ad79d4faa435310" @@ -4357,6 +4337,18 @@ "@typescript-eslint/types" "4.30.0" eslint-visitor-keys "^2.0.0" +"@vis.gl/react-mapbox@8.0.4": + version "8.0.4" + resolved "https://registry.yarnpkg.com/@vis.gl/react-mapbox/-/react-mapbox-8.0.4.tgz#f87fc26fa89ccf62f39e04cea690a1faa0b23178" + integrity sha512-NFk0vsWcNzSs0YCsVdt2100Zli9QWR+pje8DacpLkkGEAXFaJsFtI1oKD0Hatiate4/iAIW39SQHhgfhbeEPfQ== + +"@vis.gl/react-maplibre@8.0.4": + version "8.0.4" + resolved "https://registry.yarnpkg.com/@vis.gl/react-maplibre/-/react-maplibre-8.0.4.tgz#f7c4c38aa57d03510c9456667ba36dbeab0cfeda" + integrity sha512-HwZyfLjEu+y1mUFvwDAkVxinGm8fEegaWN+O8np/WZ2Sqe5Lv6OXFpV6GWz9LOEvBYMbGuGk1FQdejo+4HCJ5w== + dependencies: + "@maplibre/maplibre-gl-style-spec" "^19.2.1" + "@vitejs/plugin-react@^4.3.4": version "4.4.1" resolved "https://registry.yarnpkg.com/@vitejs/plugin-react/-/plugin-react-4.4.1.tgz#d7d1e9c9616d7536b0953637edfee7c6cbe2fe0f" @@ -4695,9 +4687,9 @@ acorn@^7.0.0, acorn@^7.1.0, acorn@^7.1.1, acorn@^7.4.0: integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== acorn@^8.2.4: - version "8.14.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0" - integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== + version "8.14.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.1.tgz#721d5dc10f7d5b5609a891773d47731796935dfb" + integrity sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg== address@1.1.2, address@^1.0.1: version "1.1.2" @@ -5964,6 +5956,21 @@ bytes@3.1.2: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== +bytewise-core@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/bytewise-core/-/bytewise-core-1.2.3.tgz#3fb410c7e91558eb1ab22a82834577aa6bd61d42" + integrity sha512-nZD//kc78OOxeYtRlVk8/zXqTB4gf/nlguL1ggWA8FuchMyOxcyHR4QPQZMUmA7czC+YnaBrPUCubqAWe50DaA== + dependencies: + typewise-core "^1.2" + +bytewise@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/bytewise/-/bytewise-1.1.0.tgz#1d13cbff717ae7158094aa881b35d081b387253e" + integrity sha512-rHuuseJ9iQ0na6UDhnrRVDh8YnWVlU6xM3VH6q/+yHDeUH2zIhUzP+2/h3LIrhLDBtTqzWpE3p3tP/boefskKQ== + dependencies: + bytewise-core "^1.2.2" + typewise "^1.0.3" + cacache@^12.0.2: version "12.0.4" resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" @@ -7167,11 +7174,6 @@ css@^2.0.0: source-map-resolve "^0.5.2" urix "^0.1.0" -csscolorparser@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/csscolorparser/-/csscolorparser-1.0.3.tgz#b34f391eea4da8f3e98231e2ccd8df9c041f171b" - integrity sha512-umPSgYwZkdFoUrH5hIq5kf0wPSXiro51nPw0j2K/c83KflkPSTBGMz6NJvMB+07VlL0y7VPo6QJcDjcgKTTm3w== - cssdb@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-4.4.0.tgz#3bf2f2a68c10f5c6a08abd92378331ee803cddb0" @@ -7868,10 +7870,10 @@ duplexify@^3.4.2, duplexify@^3.6.0: readable-stream "^2.0.0" stream-shift "^1.0.0" -earcut@^2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/earcut/-/earcut-2.2.3.tgz#d44ced2ff5a18859568e327dd9c7d46b16f55cf4" - integrity sha512-iRDI1QeCQIhMCZk48DRDMVgQSSBDmbzzNhnxIo+pwx3swkfjMh6vh0nWLq1NdvGHLKH6wIrAM3vQWeTj6qeoug== +earcut@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/earcut/-/earcut-3.0.1.tgz#f60b3f671c5657cca9d3e131c5527c5dde00ef38" + integrity sha512-0l1/0gOjESMeQyYaK5IDiPNvFeu93Z/cO0TjZh9eZ1vyCtZnA7KMZ8rQggpsJHIbGSdrqYq9OhuveadOVHCshw== easy-bem@^1.1.1: version "1.1.1" @@ -9524,10 +9526,10 @@ geocoder-arcgis@^2.0.5: lodash.isobject "^3.0.2" lodash.isstring "^4.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" - integrity sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg== +geojson-vt@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/geojson-vt/-/geojson-vt-4.0.2.tgz#1162f6c7d61a0ba305b1030621e6e111f847828a" + integrity sha512-AV9ROqlNqoZEIJGfm1ncNjEXfkz2hdFlZf0qkVfmkwdKa8vj7H16YUOT81rJw1rdFhyEDlN2Tds91p/glzbl5A== get-assigned-identifiers@^1.1.0: version "1.2.0" @@ -9613,7 +9615,7 @@ get-stream@^6.0.0, get-stream@^6.0.1: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== -get-value@^2.0.3, get-value@^2.0.6: +get-value@^2.0.2, get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= @@ -9742,6 +9744,15 @@ global-prefix@^3.0.0: kind-of "^6.0.2" which "^1.3.1" +global-prefix@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-4.0.0.tgz#e9cc79aab9be1d03287e156a3f912dd0895463ed" + integrity sha512-w0Uf9Y9/nyHinEk5vMJKRie+wa4kR5hmDbEhGGds/kG1PwGLLHKRoNMeJOyCQjjBkANlnScqgzcFwGHgmgLkVA== + dependencies: + ini "^4.1.3" + kind-of "^6.0.3" + which "^4.0.0" + globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" @@ -10484,6 +10495,11 @@ ini@^2.0.0: resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== +ini@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/ini/-/ini-4.1.3.tgz#4c359675a6071a46985eb39b14e4a2c0ec98a795" + integrity sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg== + init-package-json@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-2.0.4.tgz#9f9f66cd5934e6d5f645150e15013d384d0b90d2" @@ -11076,6 +11092,11 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= +isexe@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-3.1.1.tgz#4a407e2bd78ddfb14bea0c27c6f7072dde775f0d" + integrity sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ== + isobject@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" @@ -12221,6 +12242,16 @@ json-stringify-nice@^1.1.4: resolved "https://registry.yarnpkg.com/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz#2c937962b80181d3f317dd39aa323e14f5a60a67" integrity sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw== +json-stringify-pretty-compact@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-stringify-pretty-compact/-/json-stringify-pretty-compact-3.0.0.tgz#f71ef9d82ef16483a407869556588e91b681d9ab" + integrity sha512-Rc2suX5meI0S3bfdZuA7JMFBGkJ875ApfVyq2WHELjBiiG22My/l7/8zPpH/CfFVQHuVLd8NLR0nv6vi0BYYKA== + +json-stringify-pretty-compact@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/json-stringify-pretty-compact/-/json-stringify-pretty-compact-4.0.0.tgz#cf4844770bddee3cb89a6170fe4b00eee5dbf1d4" + integrity sha512-3CNZ2DnrpByG9Nqj6Xo8vqbjT4F6N+tb4Gb28ESAZjYZ5yqvmc56J+/kuIwkaAMOyblTQhUW7PxMkUb8Q36N3Q== + json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" @@ -12304,10 +12335,10 @@ just-diff@^3.0.1: resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-3.1.1.tgz#d50c597c6fd4776495308c63bdee1b6839082647" integrity sha512-sdMWKjRq8qWZEjDcVA6llnUT8RDEBIfOiGpYFPYa9u+2c39JCsejktSP7mj5eRid5EIvTzIpQ2kDOCw1Nq9BjQ== -kdbush@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/kdbush/-/kdbush-3.0.0.tgz#f8484794d47004cc2d85ed3a79353dbe0abc2bf0" - integrity sha512-hRkd6/XW4HTsA9vjVpY9tuXJYLSlelnkTmVFu4M9/7MIYQtFcHpbugAU7UbOfjOiVSVYl2fqgBuJ32JUmRo5Ew== +kdbush@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/kdbush/-/kdbush-4.0.2.tgz#2f7b7246328b4657dd122b6c7f025fbc2c868e39" + integrity sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA== keycode@^2.2.0: version "2.2.0" @@ -12947,38 +12978,36 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" -"mapbox-gl@npm:empty-npm-package@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/empty-npm-package/-/empty-npm-package-1.0.0.tgz#fda29eb6de5efa391f73d578697853af55f6793a" - integrity sha512-q4Mq/+XO7UNDdMiPpR/LIBIW1Zl4V0Z6UT9aKGqIAnBCtCb3lvZJM1KbDbdzdC8fKflwflModfjR29Nt0EpcwA== - -maplibre-gl@^2.1.9: - version "2.1.9" - resolved "https://registry.yarnpkg.com/maplibre-gl/-/maplibre-gl-2.1.9.tgz#042f3ef4224fa890ecf7a410145243f1fc943dcd" - integrity sha512-pnWJmILeZpgA5QSI7K7xFK3yrkyYTd9srw3fCi2Ca52Phm78hsznPwUErEQcZLfxXKn/1h9t8IPdj0TH0NBNbg== +maplibre-gl@^5.6.1: + version "5.6.1" + resolved "https://registry.yarnpkg.com/maplibre-gl/-/maplibre-gl-5.6.1.tgz#d6fd215f14274aef9b695cd2a34eb3b4ad788049" + integrity sha512-TTSfoTaF7RqKUR9wR5qDxCHH2J1XfZ1E85luiLOx0h8r50T/LnwAwwfV0WVNh9o8dA7rwt57Ucivf1emyeukXg== dependencies: - "@mapbox/geojson-rewind" "^0.5.1" + "@mapbox/geojson-rewind" "^0.5.2" "@mapbox/jsonlint-lines-primitives" "^2.0.2" - "@mapbox/mapbox-gl-supported" "^2.0.1" "@mapbox/point-geometry" "^0.1.0" - "@mapbox/tiny-sdf" "^2.0.4" + "@mapbox/tiny-sdf" "^2.0.6" "@mapbox/unitbezier" "^0.0.1" "@mapbox/vector-tile" "^1.3.1" "@mapbox/whoots-js" "^3.1.0" - "@types/geojson" "^7946.0.8" - "@types/mapbox__point-geometry" "^0.1.2" - "@types/mapbox__vector-tile" "^1.3.0" - "@types/pbf" "^3.0.2" - csscolorparser "~1.0.3" - earcut "^2.2.3" - geojson-vt "^3.2.1" + "@maplibre/maplibre-gl-style-spec" "^23.3.0" + "@types/geojson" "^7946.0.16" + "@types/geojson-vt" "3.2.5" + "@types/mapbox__point-geometry" "^0.1.4" + "@types/mapbox__vector-tile" "^1.3.4" + "@types/pbf" "^3.0.5" + "@types/supercluster" "^7.1.3" + earcut "^3.0.1" + geojson-vt "^4.0.2" gl-matrix "^3.4.3" + global-prefix "^4.0.0" + kdbush "^4.0.2" murmurhash-js "^1.0.0" - pbf "^3.2.1" - potpack "^1.0.2" - quickselect "^2.0.0" - supercluster "^7.1.4" - tinyqueue "^2.0.3" + pbf "^3.3.0" + potpack "^2.0.0" + quickselect "^3.0.0" + supercluster "^8.0.1" + tinyqueue "^3.0.0" vt-pbf "^3.1.3" marked-terminal@^4.1.1: @@ -13244,6 +13273,11 @@ minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5, minimist@^1. resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== +minimist@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + minipass-collect@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" @@ -14563,6 +14597,14 @@ pbf@^3.2.1: ieee754 "^1.1.12" resolve-protobuf-schema "^2.1.0" +pbf@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/pbf/-/pbf-3.3.0.tgz#1790f3d99118333cc7f498de816028a346ef367f" + integrity sha512-XDF38WCH3z5OV/OVa8GKUNtLAyneuzbCisx7QUCF8Q6Nutx0WnJrQe5O+kOtBlLfRNUws98Y58Lblp+NJG5T4Q== + dependencies: + ieee754 "^1.1.12" + resolve-protobuf-schema "^2.1.0" + pbkdf2@^3.0.3, pbkdf2@^3.1.2: version "3.1.3" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.3.tgz#8be674d591d65658113424592a95d1517318dd4b" @@ -15407,10 +15449,10 @@ postcss@^8.1.0, postcss@^8.1.10, postcss@^8.5.3: picocolors "^1.1.1" source-map-js "^1.2.1" -potpack@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/potpack/-/potpack-1.0.2.tgz#23b99e64eb74f5741ffe7656b5b5c4ddce8dfc14" - integrity sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ== +potpack@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/potpack/-/potpack-2.0.0.tgz#61f4dd2dc4b3d5e996e3698c0ec9426d0e169104" + integrity sha512-Q+/tYsFU9r7xoOJ+y/ZTtdVQwTWfzjbiXBDMM/JKUux3+QPP02iUuIoeBQ+Ot6oEDlC+/PGjB/5A3K7KKb7hcw== prelude-ls@^1.2.1: version "1.2.1" @@ -15791,10 +15833,10 @@ quick-lru@^4.0.1: resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== -quickselect@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/quickselect/-/quickselect-2.0.0.tgz#f19680a486a5eefb581303e023e98faaf25dd018" - integrity sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw== +quickselect@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/quickselect/-/quickselect-3.0.0.tgz#a37fc953867d56f095a20ac71c6d27063d2de603" + integrity sha512-XdjUArbK4Bm5fLLvlm5KpTFOiOThgfWWI4axAZDWg4E/0mKdZyI9tNEfds27qCi1ze/vwTR16kvmmGhRra3c2g== quote-stream@^1.0.1: version "1.0.2" @@ -16044,12 +16086,13 @@ react-loading-skeleton@^2.1.1: dependencies: "@emotion/core" "^10.0.22" -react-map-gl@^7.0.15: - version "7.0.15" - resolved "https://registry.yarnpkg.com/react-map-gl/-/react-map-gl-7.0.15.tgz#ded08ccff49012099a9945b6c2ef7f266dfbde49" - integrity sha512-l7x8lBhIEcHTreSgrc7hsKv5HsMY1wQg2PVXuKAPmQtgRZc9C3NGwurVJFe24gOlAwzta5UavAHWDiZdU1ZNCw== +react-map-gl@^8.0.4: + version "8.0.4" + resolved "https://registry.yarnpkg.com/react-map-gl/-/react-map-gl-8.0.4.tgz#7eebcb83e281ffd86820befe27d030a071e4c980" + integrity sha512-SHdpvFIvswsZBg6BCPcwY/nbKuCo3sJM1Cj7Sd+gA3gFRFOixD+KtZ2XSuUWq2WySL2emYEXEgrLZoXsV4Ut4Q== dependencies: - "@types/mapbox-gl" "^2.6.0" + "@vis.gl/react-mapbox" "8.0.4" + "@vis.gl/react-maplibre" "8.0.4" react-modal@^3.12.1: version "3.14.3" @@ -17003,6 +17046,11 @@ run-queue@^1.0.0, run-queue@^1.0.3: dependencies: aproba "^1.1.1" +rw@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4" + integrity sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ== + rxjs@^6.4.0, rxjs@^6.6.7: version "6.6.7" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" @@ -17606,6 +17654,16 @@ socks@^2.6.1: ip "^1.1.5" smart-buffer "^4.1.0" +sort-asc@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/sort-asc/-/sort-asc-0.2.0.tgz#00a49e947bc25d510bfde2cbb8dffda9f50eb2fc" + integrity sha512-umMGhjPeHAI6YjABoSTrFp2zaBtXBej1a0yKkuMUyjjqu6FJsTF+JYwCswWDg+zJfk/5npWUUbd33HH/WLzpaA== + +sort-desc@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/sort-desc/-/sort-desc-0.2.0.tgz#280c1bdafc6577887cedbad1ed2e41c037976646" + integrity sha512-NqZqyvL4VPW+RAxxXnB8gvE1kyikh8+pR+T+CXLksVRN9eiQqkQlPwqWYU0mF9Jm7UnctShlxLyAt1CaBOTL1w== + sort-keys@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" @@ -17613,6 +17671,18 @@ sort-keys@^1.0.0: dependencies: is-plain-obj "^1.0.0" +sort-object@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/sort-object/-/sort-object-3.0.3.tgz#945727165f244af9dc596ad4c7605a8dee80c269" + integrity sha512-nK7WOY8jik6zaG9CRwZTaD5O7ETWDLZYMM12pqY8htll+7dYeqGfEUPcUBHOpSJg2vJOrvFIY2Dl5cX2ih1hAQ== + dependencies: + bytewise "^1.1.0" + get-value "^2.0.2" + is-extendable "^0.1.1" + sort-asc "^0.2.0" + sort-desc "^0.2.0" + union-value "^1.0.1" + source-list-map@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" @@ -18181,12 +18251,12 @@ stylehacks@^4.0.0: postcss "^7.0.0" postcss-selector-parser "^3.0.0" -supercluster@^7.1.4: - version "7.1.5" - resolved "https://registry.yarnpkg.com/supercluster/-/supercluster-7.1.5.tgz#65a6ce4a037a972767740614c19051b64b8be5a3" - integrity sha512-EulshI3pGUM66o6ZdH3ReiFcvHpM3vAigyK+vcxdjpJyEbIIrtbmBdY23mGgnI24uXiGFvrGq9Gkum/8U7vJWg== +supercluster@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/supercluster/-/supercluster-8.0.1.tgz#9946ba123538e9e9ab15de472531f604e7372df5" + integrity sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ== dependencies: - kdbush "^3.0.0" + kdbush "^4.0.2" supports-color@^5.3.0, supports-color@^5.5.0: version "5.5.0" @@ -18516,10 +18586,10 @@ tinyglobby@^0.2.13: fdir "^6.4.4" picomatch "^4.0.2" -tinyqueue@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/tinyqueue/-/tinyqueue-2.0.3.tgz#64d8492ebf39e7801d7bd34062e29b45b2035f08" - integrity sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA== +tinyqueue@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/tinyqueue/-/tinyqueue-3.0.0.tgz#101ea761ccc81f979e29200929e78f1556e3661e" + integrity sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g== tmp@^0.0.33: version "0.0.33" @@ -18904,6 +18974,18 @@ typescript@^4.4.2, typescript@^4.5: resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== +typewise-core@^1.2, typewise-core@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/typewise-core/-/typewise-core-1.2.0.tgz#97eb91805c7f55d2f941748fa50d315d991ef195" + integrity sha512-2SCC/WLzj2SbUwzFOzqMCkz5amXLlxtJqDKTICqg30x+2DZxcfZN2MvQZmGfXWKNWaKK9pBPsvkcwv8bF/gxKg== + +typewise@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typewise/-/typewise-1.0.3.tgz#1067936540af97937cc5dcf9922486e9fa284651" + integrity sha512-aXofE06xGhaQSPzt8hlTY+/YWQhm9P0jYUp1f2XtmW/3Bk0qzXcyFWAtPoo2uTGQj1ZwbDuSyuxicq+aDo8lCQ== + dependencies: + typewise-core "^1.2.0" + uglify-js@^3.1.4: version "3.14.1" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.14.1.tgz#e2cb9fe34db9cb4cf7e35d1d26dfea28e09a7d06" @@ -18994,7 +19076,7 @@ unicode-trie@^2.0.0: pako "^0.2.5" tiny-inflate "^1.0.0" -union-value@^1.0.0: +union-value@^1.0.0, union-value@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== @@ -19597,6 +19679,13 @@ which@^2.0.1, which@^2.0.2: dependencies: isexe "^2.0.0" +which@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/which/-/which-4.0.0.tgz#cd60b5e74503a3fbcfbf6cd6b4138a8bae644c1a" + integrity sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg== + dependencies: + isexe "^3.1.1" + wide-align@^1.1.0, wide-align@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"