diff --git a/__tests__/components/viewers/__snapshots__/stop-viewer.js.snap b/__tests__/components/viewers/__snapshots__/stop-viewer.js.snap index a3c820713..ae2ae0a98 100644 --- a/__tests__/components/viewers/__snapshots__/stop-viewer.js.snap +++ b/__tests__/components/viewers/__snapshots__/stop-viewer.js.snap @@ -197,6 +197,7 @@ exports[`components > viewers > stop viewer should render countdown times after } timeFormat="HH:mm" toggleAutoRefresh={[Function]} + transitOperators={Array []} viewedStop={ Object { "stopId": "TriMet:9860", @@ -932,6 +933,7 @@ exports[`components > viewers > stop viewer should render countdown times for st } timeFormat="HH:mm" toggleAutoRefresh={[Function]} + transitOperators={Array []} viewedStop={ Object { "stopId": "TriMet:9860", @@ -1676,6 +1678,7 @@ exports[`components > viewers > stop viewer should render times after midnight w } timeFormat="HH:mm" toggleAutoRefresh={[Function]} + transitOperators={Array []} viewedStop={ Object { "stopId": "TriMet:9860", @@ -2777,6 +2780,7 @@ exports[`components > viewers > stop viewer should render with OTP transit index } timeFormat="HH:mm" toggleAutoRefresh={[Function]} + transitOperators={Array []} viewedStop={ Object { "stopId": "TriMet:715", @@ -3591,12 +3595,12 @@ exports[`components > viewers > stop viewer should render with OTP transit index viewers > stop viewer should render with OTP transit index Array [ Object { "arrivalDelay": 0, - "blockId": "9468", - "departureDelay": 0, - "headsign": "Sherwood", - "realtime": false, - "realtimeArrival": 52080, - "realtimeDeparture": 52080, - "realtimeState": "SCHEDULED", - "scheduledArrival": 52080, - "scheduledDeparture": 52080, - "serviceDay": 1565074800, - "stopCount": 40, - "stopId": "TriMet:715", - "stopIndex": 0, - "timepoint": true, - "tripId": "TriMet:9238187", - }, - Object { - "arrivalDelay": 0, - "blockId": "9372", - "departureDelay": 0, - "headsign": "Sherwood", - "realtime": false, - "realtimeArrival": 54120, - "realtimeDeparture": 54120, - "realtimeState": "SCHEDULED", - "scheduledArrival": 54120, - "scheduledDeparture": 54120, - "serviceDay": 1565074800, - "stopCount": 40, - "stopId": "TriMet:715", - "stopIndex": 0, - "timepoint": true, - "tripId": "TriMet:9238189", - }, - Object { - "arrivalDelay": 0, - "blockId": "9474", - "departureDelay": 0, - "headsign": "Sherwood", - "realtime": false, - "realtimeArrival": 56880, - "realtimeDeparture": 56880, - "realtimeState": "SCHEDULED", - "scheduledArrival": 56880, - "scheduledDeparture": 56880, - "serviceDay": 1565074800, - "stopCount": 40, - "stopId": "TriMet:715", - "stopIndex": 0, - "timepoint": true, - "tripId": "TriMet:9238194", - }, - Object { - "arrivalDelay": 0, - "blockId": "9470", + "blockId": "9472", "departureDelay": 0, - "headsign": "Sherwood", + "headsign": "King City", "realtime": false, - "realtimeArrival": 54720, - "realtimeDeparture": 54720, + "realtimeArrival": 55320, + "realtimeDeparture": 55320, "realtimeState": "SCHEDULED", - "scheduledArrival": 54720, - "scheduledDeparture": 54720, + "scheduledArrival": 55320, + "scheduledDeparture": 55320, "serviceDay": 1565074800, - "stopCount": 34, + "stopCount": 23, "stopId": "TriMet:715", "stopIndex": 0, "timepoint": true, - "tripId": "TriMet:9238190", + "tripId": "TriMet:9238192", }, Object { "arrivalDelay": 0, - "blockId": "9470", + "blockId": "9472", "departureDelay": 0, - "headsign": "Sherwood", + "headsign": "King City", "realtime": false, - "realtimeArrival": 54720, - "realtimeDeparture": 54720, + "realtimeArrival": 55320, + "realtimeDeparture": 55320, "realtimeState": "SCHEDULED", - "scheduledArrival": 54720, - "scheduledDeparture": 54720, + "scheduledArrival": 55320, + "scheduledDeparture": 55320, "serviceDay": 1565161200, - "stopCount": 34, + "stopCount": 23, "stopId": "TriMet:715", "stopIndex": 0, "timepoint": true, - "tripId": "TriMet:9238190", + "tripId": "TriMet:9238192", }, Object { "arrivalDelay": 0, - "blockId": "9470", + "blockId": "9472", "departureDelay": 0, - "headsign": "Sherwood", + "headsign": "King City", "realtime": false, - "realtimeArrival": 54720, - "realtimeDeparture": 54720, + "realtimeArrival": 55320, + "realtimeDeparture": 55320, "realtimeState": "SCHEDULED", - "scheduledArrival": 54720, - "scheduledDeparture": 54720, + "scheduledArrival": 55320, + "scheduledDeparture": 55320, "serviceDay": 1565247600, - "stopCount": 34, + "stopCount": 23, "stopId": "TriMet:715", "stopIndex": 0, "timepoint": true, - "tripId": "TriMet:9238190", + "tripId": "TriMet:9238192", }, ] } @@ -3743,7 +3693,7 @@ exports[`components > viewers > stop viewer should render with OTP transit index 94 To - Sherwood + King City
viewers > stop viewer should render with OTP transit index Tuesday
- 14:28 + 15:22
@@ -3875,12 +3825,12 @@ exports[`components > viewers > stop viewer should render with OTP transit index
viewers > stop viewer should render with OTP transit index Array [ Object { "arrivalDelay": 0, - "blockId": "9472", + "blockId": "9468", "departureDelay": 0, - "headsign": "King City", + "headsign": "Sherwood", "realtime": false, - "realtimeArrival": 55320, - "realtimeDeparture": 55320, + "realtimeArrival": 52080, + "realtimeDeparture": 52080, "realtimeState": "SCHEDULED", - "scheduledArrival": 55320, - "scheduledDeparture": 55320, + "scheduledArrival": 52080, + "scheduledDeparture": 52080, "serviceDay": 1565074800, - "stopCount": 23, + "stopCount": 40, "stopId": "TriMet:715", "stopIndex": 0, "timepoint": true, - "tripId": "TriMet:9238192", + "tripId": "TriMet:9238187", }, Object { "arrivalDelay": 0, - "blockId": "9472", + "blockId": "9372", "departureDelay": 0, - "headsign": "King City", + "headsign": "Sherwood", "realtime": false, - "realtimeArrival": 55320, - "realtimeDeparture": 55320, + "realtimeArrival": 54120, + "realtimeDeparture": 54120, "realtimeState": "SCHEDULED", - "scheduledArrival": 55320, - "scheduledDeparture": 55320, + "scheduledArrival": 54120, + "scheduledDeparture": 54120, + "serviceDay": 1565074800, + "stopCount": 40, + "stopId": "TriMet:715", + "stopIndex": 0, + "timepoint": true, + "tripId": "TriMet:9238189", + }, + Object { + "arrivalDelay": 0, + "blockId": "9474", + "departureDelay": 0, + "headsign": "Sherwood", + "realtime": false, + "realtimeArrival": 56880, + "realtimeDeparture": 56880, + "realtimeState": "SCHEDULED", + "scheduledArrival": 56880, + "scheduledDeparture": 56880, + "serviceDay": 1565074800, + "stopCount": 40, + "stopId": "TriMet:715", + "stopIndex": 0, + "timepoint": true, + "tripId": "TriMet:9238194", + }, + Object { + "arrivalDelay": 0, + "blockId": "9470", + "departureDelay": 0, + "headsign": "Sherwood", + "realtime": false, + "realtimeArrival": 54720, + "realtimeDeparture": 54720, + "realtimeState": "SCHEDULED", + "scheduledArrival": 54720, + "scheduledDeparture": 54720, + "serviceDay": 1565074800, + "stopCount": 34, + "stopId": "TriMet:715", + "stopIndex": 0, + "timepoint": true, + "tripId": "TriMet:9238190", + }, + Object { + "arrivalDelay": 0, + "blockId": "9470", + "departureDelay": 0, + "headsign": "Sherwood", + "realtime": false, + "realtimeArrival": 54720, + "realtimeDeparture": 54720, + "realtimeState": "SCHEDULED", + "scheduledArrival": 54720, + "scheduledDeparture": 54720, "serviceDay": 1565161200, - "stopCount": 23, + "stopCount": 34, "stopId": "TriMet:715", "stopIndex": 0, "timepoint": true, - "tripId": "TriMet:9238192", + "tripId": "TriMet:9238190", }, Object { "arrivalDelay": 0, - "blockId": "9472", + "blockId": "9470", "departureDelay": 0, - "headsign": "King City", + "headsign": "Sherwood", "realtime": false, - "realtimeArrival": 55320, - "realtimeDeparture": 55320, + "realtimeArrival": 54720, + "realtimeDeparture": 54720, "realtimeState": "SCHEDULED", - "scheduledArrival": 55320, - "scheduledDeparture": 55320, + "scheduledArrival": 54720, + "scheduledDeparture": 54720, "serviceDay": 1565247600, - "stopCount": 23, + "stopCount": 34, "stopId": "TriMet:715", "stopIndex": 0, "timepoint": true, - "tripId": "TriMet:9238192", + "tripId": "TriMet:9238190", }, ] } @@ -3973,7 +3977,7 @@ exports[`components > viewers > stop viewer should render with OTP transit index 94 To - King City + Sherwood
viewers > stop viewer should render with OTP transit index Tuesday
- 15:22 + 14:28
@@ -4615,6 +4619,7 @@ exports[`components > viewers > stop viewer should render with TriMet transit in } timeFormat="HH:mm" toggleAutoRefresh={[Function]} + transitOperators={Array []} viewedStop={ Object { "stopId": "TriMet:715", @@ -5293,6 +5298,7 @@ exports[`components > viewers > stop viewer should render with initial stop id a } timeFormat="HH:mm" toggleAutoRefresh={[Function]} + transitOperators={Array []} viewedStop={ Object { "stopId": "TriMet:13170", diff --git a/example-config.yml b/example-config.yml index 85722e6d8..b7346a146 100644 --- a/example-config.yml +++ b/example-config.yml @@ -29,7 +29,7 @@ persistence: ### If using the OTP Middleware to store user profiles ### with Auth0 as the authentication mechanism, -### then use the otp_middleware strategy below instead: +### then use the otp_middleware strategy below instead: # persistence: # enabled: true # strategy: otp_middleware @@ -130,6 +130,57 @@ itinerary: # (Requires using LineItinerary.) showRouteFares: false +# The transitOperators key is a list of transit operators that can be used to +# order transit agencies when sorting by route. Also, this can optionally +# provide operator logos that appear in the the route viewer and itineraries). +# Note: these logos will override the values found in +# agency.txt#agency_branding_url. +# +# When sorting routes, otp-react-redux uses otp-ui's route-comparator which uses +# multiple criteria to sort routes. (See https://git.io/Jk2Ia). The routes are +# first sorted according to a comparator value based off of the agency. After +# sorting routes by the agency, additional sorting criteria is used for routes +# that yield the same agency comparator value. +# +# If the transitOperators key is not defined, route sorting will fall back to +# using the agency name. If the transitOperators key is defined, the order field +# defined for each agency is used as a comparator value. Agencies are matched +# according to both the feedId and agencyId. If no match is found or the order +# field is not undefined, the associated routes will be placed after all other +# agencies which did have a match with a defined order value. +# +# This works best with the IBI fork of OTP which returns the necessary +# information in the route index API. Check the build logs of OTP to see what +# feedIds and agencyIds were found as these IDs can sometimes be auto-generated. +# +# Shown below is an example transitOperators config setting for the Portland, OR +# area which uses 2 GTFS files (from TriMet and C-TRAN). +# +# transitOperators: +# - feedId: TriMet +# agencyId: PSC +# logo: https://d2tyb7byn1fef9.cloudfront.net/psc.png +# order: 1 +# - feedId: TriMet +# agencyId: TRIMET +# name: TriMet +# logo: http://news.trimet.org/wordpress/wp-content/uploads/2019/04/TriMet-logo-300x300.png +# order: 1 +# - feedId: TriMet +# agencyId: TRAM +# logo: https://d2tyb7byn1fef9.cloudfront.net/tram.png +# order: 1 +# # The C-TRAN GTFS feed does not come with feed_id or agency_id filled. The +# # value of '1' is a feed_id and agency_id that OTP auto-generated. +# - feedId: '1' +# agencyId: '1' +# name: C-TRAN +# logo: https://d2tyb7byn1fef9.cloudfront.net/ctran.png +# defaultRouteColor: ffffff +# defaultRouteTextColor: '000000' +# longNameSplitter: ' - ' +# order: 2 + ### Use this config for the standard mode selector # modeGroups: # - name: Transit diff --git a/lib/components/app/batch-routing-panel.js b/lib/components/app/batch-routing-panel.js index 80c4c95b4..cf477869f 100644 --- a/lib/components/app/batch-routing-panel.js +++ b/lib/components/app/batch-routing-panel.js @@ -33,12 +33,13 @@ class BatchRoutingPanel extends Component { activeSearch, itineraryFooter, LegIcon, + ModeIcon, mobile, showUserSettings } = this.props const actionText = mobile ? 'tap' : 'click' return ( - + = 3 const addIntermediateDisabled = !from || !to || maxPlacesDefined return ( - + {/* FIXME: should this be a styled component */}
+
{ return { - languageConfig: state.otp.config.language + languageConfig: state.otp.config.language, + stop: ownProps.entity } } diff --git a/lib/components/map/connected-stops-overlay.js b/lib/components/map/connected-stops-overlay.js index ff77d1a07..d52f845f1 100644 --- a/lib/components/map/connected-stops-overlay.js +++ b/lib/components/map/connected-stops-overlay.js @@ -8,8 +8,13 @@ import { findStopsWithinBBox } from '../../actions/api' const mapStateToProps = (state, ownProps) => { return { - StopMarker, - stops: state.otp.overlay.transit.stops + stops: state.otp.overlay.transit.stops, + symbols: [ + { + minZoom: 15, + symbol: StopMarker + } + ] } } diff --git a/lib/components/mobile/main.js b/lib/components/mobile/main.js index abec5db02..0eb07e688 100644 --- a/lib/components/mobile/main.js +++ b/lib/components/mobile/main.js @@ -50,7 +50,7 @@ class MobileMain extends Component { // check for route viewer if (uiState.mainPanelContent === MainPanelContent.ROUTE_VIEWER) { - return + return } // check for viewed stop diff --git a/lib/components/mobile/route-viewer.js b/lib/components/mobile/route-viewer.js index 6293747b9..2c0f77715 100644 --- a/lib/components/mobile/route-viewer.js +++ b/lib/components/mobile/route-viewer.js @@ -12,6 +12,7 @@ import { setViewedRoute, setMainPanelContent } from '../../actions/ui' class MobileRouteViewer extends Component { static propTypes = { + ModeIcon: PropTypes.element.isRequired, setViewedRoute: PropTypes.func, setMainPanelContent: PropTypes.func } @@ -22,6 +23,7 @@ class MobileRouteViewer extends Component { } render () { + const { ModeIcon } = this.props return (
- +
) diff --git a/lib/components/viewers/route-viewer.js b/lib/components/viewers/route-viewer.js index cf3a51a83..597040a60 100644 --- a/lib/components/viewers/route-viewer.js +++ b/lib/components/viewers/route-viewer.js @@ -4,19 +4,13 @@ import PropTypes from 'prop-types' import { Label, Button } from 'react-bootstrap' import { VelocityTransitionGroup } from 'velocity-react' import { connect } from 'react-redux' +import styled from 'styled-components' import Icon from '../narrative/icon' import { setMainPanelContent, setViewedRoute } from '../../actions/ui' import { findRoutes, findRoute } from '../../actions/api' - -function operatorIndexForRoute (transitOperators, route) { - if (!route.agency) return 0 - const index = transitOperators.findIndex(o => - o.id.toLowerCase() === route.agency.id.split(':')[0].toLowerCase()) - if (index !== -1 && typeof transitOperators[index].order !== 'undefined') return transitOperators[index].order - else return 0 -} +import { getModeFromRoute } from '../../util/viewer' /** * Determine the appropriate contrast color for text (white or black) based on @@ -38,6 +32,7 @@ function getContrastYIQ (hexcolor) { class RouteViewer extends Component { static propTypes = { hideBackButton: PropTypes.bool, + ModeIcon: PropTypes.element.isRequired, routes: PropTypes.object } @@ -52,19 +47,17 @@ class RouteViewer extends Component { findRoute, hideBackButton, languageConfig, + ModeIcon, transitOperators, routes, setViewedRoute, viewedRoute } = this.props const sortedRoutes = routes - ? Object.values(routes).sort(coreUtils.route.routeComparator) + ? Object.values(routes).sort( + coreUtils.route.makeRouteComparator(transitOperators) + ) : [] - const agencySortedRoutes = transitOperators.length > 0 - ? sortedRoutes.sort((a, b) => { - return operatorIndexForRoute(transitOperators, a) - operatorIndexForRoute(transitOperators, b) - }) - : sortedRoutes return (
{/* Header Block */} @@ -90,17 +83,20 @@ class RouteViewer extends Component {
- {agencySortedRoutes + {sortedRoutes .map(route => { // Find operator based on agency_id (extracted from OTP route ID). - // TODO: re-implement multi-agency logos for route viewer. - // const operator = operatorForRoute(transitOperators, route) || {} + const operator = coreUtils.route.getTransitOperatorFromOtpRoute( + route, + transitOperators + ) || {} return ( @@ -113,6 +109,54 @@ class RouteViewer extends Component { } } +const StyledRouteRow = styled.div` + background-color: ${props => props.isActive ? '#f6f8fa' : 'white'}; + border-bottom: 1px solid gray; +` + +const RouteRowButton = styled(Button)` + padding: 8px; + width: 100%; +` + +const RouteRowElement = styled.div` + display: inline-block; + vertical-align: middle; +` + +const OperatorImg = styled.img` + height: 25px; + margin-right: 8px; +` + +const ModeIconElement = styled(RouteRowElement)` + height: 22px; +` + +const RouteNameElement = styled(RouteRowElement)` + margin-top: 2px; +` + +const StyledLabel = styled(Label)` + background-color: ${props => ( + props.backgroundColor === '#ffffff' + ? 'rgba(0,0,0,0)' + : props.backgroundColor + )}; + color: ${props => props.color}; + margin-left: ${props => ( + props.backgroundColor === '#ffffff' || props.backgroundColor === 'white' + ? 0 + : '8px' + )}; + font-size: medium; + font-weight: 400; +` + +const RouteDetails = styled.div` + padding: 8px; +` + class RouteRow extends PureComponent { _onClick = () => { const { findRoute, isActive, route, setViewedRoute } = this.props @@ -126,17 +170,7 @@ class RouteRow extends PureComponent { } } - render () { - const {isActive, route, operator} = this.props - const {defaultRouteColor, defaultRouteTextColor, longNameSplitter} = operator || {} - const backgroundColor = `#${defaultRouteColor || route.color || 'ffffff'}` - // NOTE: text color is not a part of short response route object, so there - // is no way to determine from OTP what the text color should be if the - // background color is, say, black. Instead, determine the appropriate - // contrast color and use that if no text color is available. - const contrastColor = getContrastYIQ(backgroundColor) - const color = `#${defaultRouteTextColor || route.textColor || contrastColor}` - // Default long name is empty string (long name is an optional GTFS value). + getCleanRouteLongName ({ route, longNameSplitter }) { let longName = '' if (route.longName) { // Attempt to split route name if splitter is defined for operator (to @@ -149,46 +183,55 @@ class RouteRow extends PureComponent { // string. if (longName === route.shortName) longName = '' } + return longName + } + + render () { + const {isActive, ModeIcon, route, operator} = this.props + const {defaultRouteColor, defaultRouteTextColor, longNameSplitter} = operator || {} + const backgroundColor = `#${defaultRouteColor || route.color || 'ffffff'}` + // NOTE: text color is not a part of short response route object, so there + // is no way to determine from OTP what the text color should be if the + // background color is, say, black. Instead, determine the appropriate + // contrast color and use that if no text color is available. + const contrastColor = getContrastYIQ(backgroundColor) + const color = `#${defaultRouteTextColor || route.textColor || contrastColor}` + // Default long name is empty string (long name is an optional GTFS value). + const longName = this.getCleanRouteLongName({ route, longNameSplitter }) return ( -
- + + + {isActive && ( -
+ {route.url ? Route Details : 'No route URL provided.' } -
+ )}
-
+ ) } } diff --git a/lib/components/viewers/stop-viewer.js b/lib/components/viewers/stop-viewer.js index 242c12533..5efc37347 100644 --- a/lib/components/viewers/stop-viewer.js +++ b/lib/components/viewers/stop-viewer.js @@ -250,12 +250,31 @@ class StopViewer extends Component { stopData, stopViewerArriving, stopViewerConfig, - timeFormat + timeFormat, + transitOperators } = this.props const { scheduleView, spin } = this.state const hasStopTimesAndRoutes = !!(stopData && stopData.stopTimes && stopData.stopTimes.length > 0 && stopData.routes) - // construct a lookup table mapping pattern (e.g. 'ROUTE_ID-HEADSIGN') to an array of stoptimes + // construct a lookup table mapping pattern (e.g. 'ROUTE_ID-HEADSIGN') to + // an array of stoptimes const stopTimesByPattern = getStopTimesByPattern(stopData) + const routeComparator = coreUtils.route.makeRouteComparator( + transitOperators + ) + const patternHeadsignComparator = coreUtils.route.makeStringValueComparator( + pattern => pattern.pattern.headsign + ) + const patternComparator = (patternA, patternB) => { + // first sort by routes + const routeCompareValue = routeComparator( + patternA.route, + patternB.route + ) + if (routeCompareValue !== 0) return routeCompareValue + + // if same route, sort by headsign + return patternHeadsignComparator(patternA, patternB) + } return (
{/* Header Block */} @@ -268,7 +287,7 @@ class StopViewer extends Component { ? <>
{Object.values(stopTimesByPattern) - .sort((a, b) => coreUtils.route.routeComparator(a.route, b.route)) + .sort(patternComparator) .map(patternTimes => { // Only add pattern row if route is found. // FIXME: there is currently a bug with the alernative transit index @@ -344,7 +363,8 @@ const mapStateToProps = (state, ownProps) => { stopData: state.otp.transitIndex.stops[state.otp.ui.viewedStop.stopId], stopViewerArriving: state.otp.config.language.stopViewerArriving, stopViewerConfig, - timeFormat: getTimeFormat(state.otp.config) + timeFormat: getTimeFormat(state.otp.config), + transitOperators: state.otp.config.transitOperators } } diff --git a/lib/components/viewers/viewer-container.js b/lib/components/viewers/viewer-container.js index 0deb6b713..20fd071d2 100644 --- a/lib/components/viewers/viewer-container.js +++ b/lib/components/viewers/viewer-container.js @@ -9,15 +9,16 @@ import { MainPanelContent } from '../../actions/ui' class ViewerContainer extends Component { static propTypes = { + ModeIcon: PropTypes.element.isRequired, uiState: PropTypes.object } render () { - const { uiState } = this.props + const { ModeIcon, uiState } = this.props // check for main panel content if (uiState.mainPanelContent === MainPanelContent.ROUTE_VIEWER) { - return + return } // check for stop viewer diff --git a/lib/util/viewer.js b/lib/util/viewer.js index 359dffefe..c1f8d1aaf 100644 --- a/lib/util/viewer.js +++ b/lib/util/viewer.js @@ -162,3 +162,26 @@ export function getStopTimesByPattern (stopData) { } return stopTimesByPattern } + +/** + * Gets the mode string from either an OTP Route or RouteShort model. The OTP + * Route model returns the mode as an integer type whereas the RouteShort model + * returns the mode string. + */ +export function getModeFromRoute (route) { + const modeLookup = { + 0: 'TRAM', // - Tram, Streetcar, Light rail. + 1: 'SUBWAY', // - Subway, Metro. + 2: 'RAIL', // - Rail. Used for intercity or long-distance travel. + 3: 'BUS', // - Bus. + 4: 'FERRY', // - Ferry. + 5: 'CABLE_CAR', // - Cable tram. + 6: 'GONDOLA', // - Gondola, etc. + 7: 'FUNICULAR', // - Funicular. + // TODO: 11 and 12 are not a part of OTP as of 2019-02-14, but for now just + // associate them with bus/rail. + 11: 'BUS', // - Trolleybus. + 12: 'RAIL' // - Monorail. + } + return route.mode || modeLookup[route.type] +} diff --git a/package.json b/package.json index 597e4172b..238be1831 100644 --- a/package.json +++ b/package.json @@ -28,26 +28,26 @@ "homepage": "https://github.com/opentripplanner/otp-react-redux#readme", "dependencies": { "@auth0/auth0-react": "^1.1.0", - "@opentripplanner/base-map": "^1.0.2", - "@opentripplanner/core-utils": "^2.1.2", - "@opentripplanner/endpoints-overlay": "^1.0.2", - "@opentripplanner/from-to-location-picker": "^1.0.1", + "@opentripplanner/base-map": "^1.0.4", + "@opentripplanner/core-utils": "^3.0.3", + "@opentripplanner/endpoints-overlay": "^1.0.4", + "@opentripplanner/from-to-location-picker": "^1.0.3", "@opentripplanner/geocoder": "^1.0.2", "@opentripplanner/humanize-distance": "^0.0.22", - "@opentripplanner/icons": "^1.0.1", - "@opentripplanner/itinerary-body": "^1.2.0", - "@opentripplanner/location-field": "^1.0.2", + "@opentripplanner/icons": "^1.0.4", + "@opentripplanner/itinerary-body": "^2.0.0", + "@opentripplanner/location-field": "^1.0.5", "@opentripplanner/location-icon": "^1.0.1", - "@opentripplanner/park-and-ride-overlay": "^1.0.1", - "@opentripplanner/printable-itinerary": "^1.0.0", - "@opentripplanner/route-viewer-overlay": "^1.0.1", - "@opentripplanner/stop-viewer-overlay": "^1.0.1", - "@opentripplanner/stops-overlay": "^1.0.1", - "@opentripplanner/transitive-overlay": "^1.0.2", - "@opentripplanner/trip-details": "^1.1.1", - "@opentripplanner/trip-form": "^1.0.2", - "@opentripplanner/trip-viewer-overlay": "^1.0.1", - "@opentripplanner/vehicle-rental-overlay": "^1.0.1", + "@opentripplanner/park-and-ride-overlay": "^1.0.3", + "@opentripplanner/printable-itinerary": "^1.0.3", + "@opentripplanner/route-viewer-overlay": "^1.0.3", + "@opentripplanner/stop-viewer-overlay": "^1.0.3", + "@opentripplanner/stops-overlay": "^3.0.1", + "@opentripplanner/transitive-overlay": "^1.0.4", + "@opentripplanner/trip-details": "^1.1.3", + "@opentripplanner/trip-form": "^1.0.4", + "@opentripplanner/trip-viewer-overlay": "^1.0.3", + "@opentripplanner/vehicle-rental-overlay": "^1.0.5", "bootstrap": "^3.3.7", "bowser": "^1.9.3", "clone": "^2.1.0", diff --git a/yarn.lock b/yarn.lock index 29c7785ee..33597890f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1440,34 +1440,21 @@ universal-user-agent "^3.0.0" url-template "^2.0.8" -"@opentripplanner/base-map@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@opentripplanner/base-map/-/base-map-1.0.2.tgz#039dfdb11116ebb5d330a859f5ee33cfa6b8d768" - integrity sha512-QkNDJrZqGgiafO8fxJhnOFPWcpUIsDszlBZIh8q0B3ztFRPZeQA8cFX/c429PhXXmCbpYx5JkerhnxMKz140XA== - dependencies: - "@opentripplanner/core-utils" "^2.1.0" - prop-types "^15.7.2" - -"@opentripplanner/core-utils@^1.2.0": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@opentripplanner/core-utils/-/core-utils-1.2.2.tgz#c943983d92c67b1aba2ad7b47f199fb46bbedc02" - integrity sha512-xISq454TA/mTu5wjMVvNRszHmeAKppS+jk5E3LRl+TaMWas5ovaNdKwlOXU62djGb41VOty4KYTnECliDPYDJw== +"@opentripplanner/base-map@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@opentripplanner/base-map/-/base-map-1.0.4.tgz#7a9e16c4c4aca0e6a0277ad2cbc48f2df8ecbead" + integrity sha512-yb6NIuPjas9Mo5/mXp6BnJMeJduIiZNbuM9ILxQT1W+Al1nQ3qhQD0GlQ6nv4hsAx6Vkbig899rfNjIZOe60Ew== dependencies: - "@mapbox/polyline" "^1.1.0" - "@turf/along" "^6.0.1" - bowser "^2.7.0" - lodash.isequal "^4.5.0" - moment "^2.24.0" - moment-timezone "^0.5.27" + "@opentripplanner/core-utils" "^3.0.0" prop-types "^15.7.2" - qs "^6.9.1" -"@opentripplanner/core-utils@^2.1.0", "@opentripplanner/core-utils@^2.1.1", "@opentripplanner/core-utils@^2.1.2": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@opentripplanner/core-utils/-/core-utils-2.1.2.tgz#a19d5d788704f0a6c2aece5206a2c8997c251d16" - integrity sha512-i+ADDdHhC+oJNYPrk7o9eu3F/2IMMZ5YAOXR2QGBJbS97kQOYeTAN4pVGfWKTm7ClTTIBG9/NDnVyQMzGuYInw== +"@opentripplanner/core-utils@^3.0.0", "@opentripplanner/core-utils@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@opentripplanner/core-utils/-/core-utils-3.0.3.tgz#cee56325a975ee09f7a6c6cc9c42362b82183daf" + integrity sha512-7x8eZj0v0fQJ5L32P/CGG1NjydmuD1O2edMRClx65LSrm0SwHQb3CgEQsBmZTxCmZ5kMgp87p+GcAB7k6kZxdw== dependencies: "@mapbox/polyline" "^1.1.0" + "@opentripplanner/geocoder" "^1.0.2" "@turf/along" "^6.0.1" bowser "^2.7.0" lodash.isequal "^4.5.0" @@ -1476,23 +1463,23 @@ prop-types "^15.7.2" qs "^6.9.1" -"@opentripplanner/endpoints-overlay@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@opentripplanner/endpoints-overlay/-/endpoints-overlay-1.0.2.tgz#165817533832399c8e8c276fba2ec4fafe038853" - integrity sha512-ccwvaRYmkzz4VKlM52jVXklSAwu+5UfLiTB8q6lTN/sP3gdPPCWJMUVu4u00R9xNFPVVk6NOB/y6A3NUJzBVlA== +"@opentripplanner/endpoints-overlay@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@opentripplanner/endpoints-overlay/-/endpoints-overlay-1.0.4.tgz#6a3acb6b202a6e58cfd30767ed9279261bde4660" + integrity sha512-72GVw1oqslmH2Rqva8An9E+fkacefwuBEupYUoQQT67hd8NMAKNVjVX+7+4N+5xnzmvAiF1esfyoJ6MXANpP4g== dependencies: - "@opentripplanner/core-utils" "^1.2.0" + "@opentripplanner/core-utils" "^3.0.0" "@opentripplanner/location-icon" "^1.0.1" prop-types "^15.7.2" styled-icons "^9.1.0" -"@opentripplanner/from-to-location-picker@^1.0.0", "@opentripplanner/from-to-location-picker@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@opentripplanner/from-to-location-picker/-/from-to-location-picker-1.0.1.tgz#c66c44931ddf501a64063344af2a236fea0f704a" - integrity sha512-2Zs3sEPHJa1k8vgMBUEJlvxA0dV2ws7kN+VCzvFB5GqW6P/YaBWo7Isi+NMkyAjFEpKNeAtUG2dA5Y7+u5uhTg== +"@opentripplanner/from-to-location-picker@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@opentripplanner/from-to-location-picker/-/from-to-location-picker-1.0.3.tgz#871ac07485e6a1bbda4d4371ce2b8684a4a3ff53" + integrity sha512-BiI1wpb74QPvZMalyW/sexdSj0V4ASP+5pBYO+c9nmSpsAcw0m393821QjSimKBEfhY5j7YsnWBmt2hrNyQQtA== dependencies: - "@opentripplanner/core-utils" "^1.2.0" - "@opentripplanner/location-icon" "^1.0.0" + "@opentripplanner/core-utils" "^3.0.0" + "@opentripplanner/location-icon" "^1.0.1" prop-types "^15.7.2" "@opentripplanner/geocoder@^1.0.2": @@ -1510,142 +1497,151 @@ resolved "https://registry.yarnpkg.com/@opentripplanner/humanize-distance/-/humanize-distance-0.0.22.tgz#6e2d1b4ae938e45be4eae3ddb41729e55222d741" integrity sha512-50FREAdjyAbsARPeii1TJHVPNoF0VqPuOZixYs+KYo/e5T9f6x+tX6ypEVIoh+cVxms5cWwM91HVg0XfA5AZ2Q== -"@opentripplanner/icons@^1.0.0", "@opentripplanner/icons@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@opentripplanner/icons/-/icons-1.0.1.tgz#ac24da52fc44b06e28e7eb47f469d29e59a6e657" - integrity sha512-I2slSKzwqKgxmn5SfA8r/0RYsp8TNzpMrh0YjS4a7lgbBl9Eb8aA+GCdkW76UpVQnH5v9I+g8J3Kf4cEqzGU/g== +"@opentripplanner/icons@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@opentripplanner/icons/-/icons-1.0.4.tgz#e8106c5c2a9115a86ac5a385cc9d778423fb0ad4" + integrity sha512-UP6plpdviYrLYxJ/N0jlQLMZviXbnYXhAFe/3YgOvG5g5tLmdzoBpDa0QNUeryXIYa5tEEiV/K9lpJ705paEKA== dependencies: - "@opentripplanner/core-utils" "^1.2.0" + "@opentripplanner/core-utils" "^3.0.0" prop-types "^15.7.2" -"@opentripplanner/itinerary-body@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@opentripplanner/itinerary-body/-/itinerary-body-1.2.0.tgz#96d8b832f26c6918ee2c0e122fce6a57a6e5df1a" - integrity sha512-LG8SRTTXdYD8M/7+peJPfuqRFbZlbxilqUBRyGw60efZcnWbAenQW/o5aznuucLHiafDUzVUQpy9SEd0gIqRSQ== +"@opentripplanner/itinerary-body@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@opentripplanner/itinerary-body/-/itinerary-body-2.0.0.tgz#42e990f3f0da10fe57a7314ca6d3611c050cb797" + integrity sha512-cXe9znEoGkMRbSjMtHk2QEApXfzJuswwftMTj99juqPwxC2dk2PyS6I4GB02P2VPVxo06s9vtd9DWowns5Y5SA== dependencies: - "@opentripplanner/core-utils" "^2.1.1" + "@opentripplanner/core-utils" "^3.0.0" "@opentripplanner/humanize-distance" "^0.0.22" - "@opentripplanner/icons" "^1.0.0" - "@opentripplanner/location-icon" "^1.0.0" + "@opentripplanner/icons" "^1.0.4" + "@opentripplanner/location-icon" "^1.0.1" currency-formatter "^1.5.5" moment "^2.24.0" prop-types "^15.7.2" react-resize-detector "^4.2.1" velocity-react "^1.4.3" -"@opentripplanner/location-field@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@opentripplanner/location-field/-/location-field-1.0.2.tgz#16daeac83be8f10b157fc8c51f32e2a8eb0a8db8" - integrity sha512-+YIXXltw6ZuHyvCzbDL97Wfhq+C/FaT2utmWAf1O1g6BGpkF6dHjh8+ZHoH0al/4/t6AyhSVlPMXOEyaj2xERA== +"@opentripplanner/location-field@^1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@opentripplanner/location-field/-/location-field-1.0.5.tgz#0683d434b02d61a1cefad4c3af8a1a9d83ab48fe" + integrity sha512-+hhT4v49gBDmzMJxioiJSFs5Xg88kECi4J/G2Yr5ihXWAEtE3TsvHOmIwjJNQ4ilV03oe/zrxYh+Wa/L4n03Aw== dependencies: - "@opentripplanner/core-utils" "^2.1.0" + "@opentripplanner/core-utils" "^3.0.0" "@opentripplanner/geocoder" "^1.0.2" "@opentripplanner/humanize-distance" "^0.0.22" - "@opentripplanner/location-icon" "^1.0.0" + "@opentripplanner/location-icon" "^1.0.1" prop-types "^15.7.2" styled-icons "^9.1.0" throttle-debounce "^2.1.0" -"@opentripplanner/location-icon@^1.0.0", "@opentripplanner/location-icon@^1.0.1": +"@opentripplanner/location-icon@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@opentripplanner/location-icon/-/location-icon-1.0.1.tgz#5a72f697eeebfb21202bfc205ca0da7c32dfe1d0" integrity sha512-esHrqZBKxJNNPiZyb4XtrWYZhdVrUHcpAr4eCydf8pSDRUX9QVM/YqAPPn2SEwJiH2hi14CYLMMV5SjEHwwJMg== dependencies: styled-icons "^9.1.0" -"@opentripplanner/park-and-ride-overlay@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@opentripplanner/park-and-ride-overlay/-/park-and-ride-overlay-1.0.1.tgz#83ce83c321dbd4d14ad847198ea53951a6e59b31" - integrity sha512-J41j0nyxErHkK8YBZCrpkh8uTlpQ/q4dT9Cr66ymIvSZf98ddMvpYkqPgAuWM7Q9HTeNwbSyOLy49r3Qcsmb6A== +"@opentripplanner/park-and-ride-overlay@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@opentripplanner/park-and-ride-overlay/-/park-and-ride-overlay-1.0.3.tgz#0d5365d0632f8f4c06e9250ec840654211303c9e" + integrity sha512-r4iWyL1ckfWudNfWADsSFjKAQq5s5bJ/4HwO3HV379UgV00paLGLRgtvp6HetqK2+w4Yd0Pr4pjZ0pkRJsU5rg== dependencies: - "@opentripplanner/core-utils" "^1.2.0" - "@opentripplanner/from-to-location-picker" "^1.0.0" + "@opentripplanner/core-utils" "^3.0.0" + "@opentripplanner/from-to-location-picker" "^1.0.3" prop-types "^15.7.2" -"@opentripplanner/printable-itinerary@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@opentripplanner/printable-itinerary/-/printable-itinerary-1.0.0.tgz#d6d90fd22d535cfabf72df79ae9779647a923444" - integrity sha512-V+hv7AgD+Ep3HIOW6sl++YaWnsX8yl2B5WNI5GBQmGE+HbEiUplFo0xHvKTEsTzM4N4yA5d5PCeQX9LM3swU2Q== +"@opentripplanner/printable-itinerary@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@opentripplanner/printable-itinerary/-/printable-itinerary-1.0.3.tgz#b26473dcf87711eb48bba0d9e52edba3ad65101f" + integrity sha512-6Z/7l+FXvBMzi4o/6J+hf2IfO9qRt6YPyqTT+8YUMrlT9lqqimaFnStCwZqBZC4xsefwYrazUW9auPcayJ9HRg== dependencies: - "@opentripplanner/core-utils" "^1.2.0" + "@opentripplanner/core-utils" "^3.0.0" "@opentripplanner/humanize-distance" "^0.0.22" prop-types "^15.7.2" -"@opentripplanner/route-viewer-overlay@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@opentripplanner/route-viewer-overlay/-/route-viewer-overlay-1.0.1.tgz#f60e61eb8a0fe05ff6d3a31bba04700d34ae0fad" - integrity sha512-1RLB4O6zYQ6B7YceMt8w7KWXsvBUJER0fP5S9pp8SNnLU028bTybJxghHeJQ5sW2yMaGtCkixK2TsDIrE2HbWg== +"@opentripplanner/route-viewer-overlay@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@opentripplanner/route-viewer-overlay/-/route-viewer-overlay-1.0.3.tgz#55fec109b9989a5d95cde463526ff12cb36b36d5" + integrity sha512-4SY0GieyqoTNBMKX9nefwDRsBO3ivVA1FTbRZGCHOmtoz90HQiN9pCrtlAb4sg54mfTEc7c/segItHZ3UrA6/A== dependencies: "@mapbox/polyline" "^1.1.0" - "@opentripplanner/core-utils" "^1.2.0" + "@opentripplanner/core-utils" "^3.0.0" prop-types "^15.7.2" -"@opentripplanner/stop-viewer-overlay@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@opentripplanner/stop-viewer-overlay/-/stop-viewer-overlay-1.0.1.tgz#d8d31d569fa022d88e8870613c2aa89356aed58c" - integrity sha512-QpV8AZbU98O0GqD/ZqoI/hk6okNJZaxF9JDZ/jhllhLXhdkk8Lfo6b1sfDtSf6Zk5e3BpUGV6MC9cHBInz5dng== +"@opentripplanner/stop-viewer-overlay@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@opentripplanner/stop-viewer-overlay/-/stop-viewer-overlay-1.0.3.tgz#b10e3cdfd20c49e0427c2e391ab802f987056f3d" + integrity sha512-Nvp1/ts/BbfAXaFrdXdS9JyPrGSSlD/o/yPfVRENysxN/7GtZ3nofTZJxYEZe02xr8GNs7/KRxN+ypGGrV6pQA== dependencies: - "@opentripplanner/core-utils" "^1.2.0" + "@opentripplanner/core-utils" "^3.0.0" prop-types "^15.7.2" -"@opentripplanner/stops-overlay@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@opentripplanner/stops-overlay/-/stops-overlay-1.0.1.tgz#d69118010750de7b054bae0e79b32360f35ef8ab" - integrity sha512-4BtxzakERLxEHlCn8yclV593B8bK02spySY+tW7hSv36MZRScwR3ZvmkJHbXzTt/GGDRjDn7N4qY82QvG65Xlg== +"@opentripplanner/stops-overlay@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@opentripplanner/stops-overlay/-/stops-overlay-3.0.1.tgz#caaf664bbdc9ba88cf899c7e0877c51604b68a59" + integrity sha512-ighL3xcGAlMbTTItSS/YFl1hVPjSFQ9INZey9g2aULB9Tw9V0esBhN/4r55puM660MO7e7sVC+yaDdXhWPNInA== dependencies: - "@opentripplanner/core-utils" "^1.2.0" - "@opentripplanner/from-to-location-picker" "^1.0.0" + "@opentripplanner/core-utils" "^3.0.0" + "@opentripplanner/from-to-location-picker" "^1.0.3" + "@opentripplanner/zoom-based-markers" "^1.0.1" -"@opentripplanner/transitive-overlay@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@opentripplanner/transitive-overlay/-/transitive-overlay-1.0.2.tgz#b2a0d8fb160abfc012a5badd0097f9b99268e088" - integrity sha512-JIZ9FRpXwKH9Rh1xEFLGWFrQe0V+x6Zyp7R8U2MFIdUqHx6l44xIlVRRMJC7Ta3zCrFfK1UHa8l2smmRGPnc5A== +"@opentripplanner/transitive-overlay@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@opentripplanner/transitive-overlay/-/transitive-overlay-1.0.4.tgz#490f4dfcd8a7267e3a24f41f153704b2ff4077c7" + integrity sha512-zfzpiGCh/7LQZGQIL/Z9mqpSv8ozr088oaZxUxAALbnkw5WDv3RFg6nH5vQy+WSYb7fw9uEj1SeAm5dDM+xJNw== dependencies: - "@opentripplanner/core-utils" "^1.2.0" + "@opentripplanner/core-utils" "^3.0.0" lodash.isequal "^4.5.0" transitive-js "^0.13.3" -"@opentripplanner/trip-details@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@opentripplanner/trip-details/-/trip-details-1.1.1.tgz#9c078a95e05f048ac9874fe192236506ce2a8c00" - integrity sha512-bQ1EdUImE5tFzu84NAVcJH59LsXvXJoJiCi3EvwYuRoU0kf4YyABKlxak6juehNFxQwPyvepGyVLf3jRDM9Rig== +"@opentripplanner/trip-details@^1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@opentripplanner/trip-details/-/trip-details-1.1.3.tgz#113b969eb389ed69e8f51519c364ca862252f0bb" + integrity sha512-XH4EDVDbdLCKRoorElFnzF8OQ5mKvppCh0ZO+i73dr5QdJUgKz24Eqlowkhb68wkx+k2HaI60fesR8Qi7qsuJA== dependencies: - "@opentripplanner/core-utils" "^1.2.0" + "@opentripplanner/core-utils" "^3.0.0" "@opentripplanner/humanize-distance" "^0.0.22" moment "^2.24.0" prop-types "^15.7.2" styled-icons "^9.1.0" velocity-react "^1.4.3" -"@opentripplanner/trip-form@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@opentripplanner/trip-form/-/trip-form-1.0.2.tgz#1283dcb92ed5295dbb055c0ab99cc5fe55b90b30" - integrity sha512-RPS3JBNUN5gMXVebDgMwdjMCiU8tb2s9+8sy1gGGFHDNiesNKEVdLXmUAqpg//gxNriLDQ0UtKfBZnHQpagPqw== +"@opentripplanner/trip-form@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@opentripplanner/trip-form/-/trip-form-1.0.4.tgz#dcc39e1f06567cd7e7e0183c2cbbb8ec3428ea61" + integrity sha512-SUu26PxuJk+BJbJB74R0F4m4DsVLkxn5/DRy+4SfVfbA8Fou893FyI5jxQZywOH8PDgmW9rOG2PMhwCdz/JzBg== dependencies: - "@opentripplanner/core-utils" "^1.2.0" - "@opentripplanner/icons" "^1.0.0" + "@opentripplanner/core-utils" "^3.0.0" + "@opentripplanner/icons" "^1.0.4" moment "^2.17.1" -"@opentripplanner/trip-viewer-overlay@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@opentripplanner/trip-viewer-overlay/-/trip-viewer-overlay-1.0.1.tgz#b6f5a89c6cdca27428556d84b630e45587f700fb" - integrity sha512-t/Et54CGKtL1tRxWRASMN/6KBOEkidVbRvW3qvuiSrH5RvZ/gXguiuslqlPnB7rsQaV6ONji/oQBtZH0wsReSQ== +"@opentripplanner/trip-viewer-overlay@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@opentripplanner/trip-viewer-overlay/-/trip-viewer-overlay-1.0.3.tgz#af3c1043273134f681d250b2d6f31d2189601658" + integrity sha512-TYXKPorgnzgFkdb8ZMaJNeNXWfdxxyVT1eRGvv4LrtpPF788tzx9IUqn8QYAUuDRZ7poAwERHMZcBf0AM942Sw== dependencies: "@mapbox/polyline" "^1.1.0" - "@opentripplanner/core-utils" "^1.2.0" + "@opentripplanner/core-utils" "^3.0.0" prop-types "^15.7.2" -"@opentripplanner/vehicle-rental-overlay@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@opentripplanner/vehicle-rental-overlay/-/vehicle-rental-overlay-1.0.1.tgz#c8d6c7f1926f4f24e4f8bbe4c600be1f86dbc385" - integrity sha512-FX4h48l4sCIQP1KflhtvhNoBp/TFl4Iia/HdfByJE3n27w8Sw4lSTZEYGNNj+b36NSIFsU/fbHPK8utrp5Wdgg== +"@opentripplanner/vehicle-rental-overlay@^1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@opentripplanner/vehicle-rental-overlay/-/vehicle-rental-overlay-1.0.5.tgz#d8cbc8995c0438847d7dec3570df4f4521b3372a" + integrity sha512-pX5WriQSmbQfGCrx+hjm6IIfFaWjjFbMCXES1aTXT2p7My3WOS2wU01liKTyCIUc05sGCWNSFm0ZC6g4b95n+g== dependencies: - "@opentripplanner/core-utils" "^1.2.0" - "@opentripplanner/from-to-location-picker" "^1.0.0" + "@opentripplanner/core-utils" "^3.0.0" + "@opentripplanner/from-to-location-picker" "^1.0.3" + "@opentripplanner/zoom-based-markers" "^1.0.1" lodash.memoize "^4.1.2" prop-types "^15.7.2" styled-icons "^9.1.0" +"@opentripplanner/zoom-based-markers@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@opentripplanner/zoom-based-markers/-/zoom-based-markers-1.0.1.tgz#fafebef05300c589dd2d1835a96bd3b7f411838f" + integrity sha512-SaJ1m7SM0HGSBMjEwudoJnOGzAeWNRi8V7fDeHLfjWoOM3ofHz1uxrHlZHyktoHtw8/wt019HABHxuE4uHdTKA== + dependencies: + "@opentripplanner/core-utils" "^3.0.0" + "@semantic-release/commit-analyzer@^6.1.0": version "6.2.0" resolved "https://registry.yarnpkg.com/@semantic-release/commit-analyzer/-/commit-analyzer-6.2.0.tgz#5cd25ce67ba9ba5b46e47457505e63629e186695" @@ -3717,9 +3713,9 @@ bowser@^1.9.3: integrity sha512-9IdMmj2KjigRq6oWhmwv1W36pDuA4STQZ8q6YO9um+x07xgYNCD3Oou+WP/3L1HNz7iqythGet3/p4wvc8AAwQ== bowser@^2.7.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.10.0.tgz#be3736f161c4bb8b10958027ab99465d2a811198" - integrity sha512-OCsqTQboTEWWsUjcp5jLSw2ZHsBiv2C105iFs61bOT0Hnwi9p7/uuXdd7mu8RYcarREfdjNN+8LitmEHATsLYg== + version "2.11.0" + resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.11.0.tgz#5ca3c35757a7aa5771500c70a73a9f91ef420a8f" + integrity sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA== boxen@^1.2.1: version "1.3.0" @@ -5398,9 +5394,9 @@ csstype@^2.5.7, csstype@^2.6.7: integrity sha512-D34BqZU4cIlMCY93rZHbrq9pjTAQJ3U8S8rfBqjwHxkGPThWFjzZDQpgMJY0QViLxth6ZKYiwFBo14RdN44U/w== currency-formatter@^1.4.2, currency-formatter@^1.5.5: - version "1.5.5" - resolved "https://registry.yarnpkg.com/currency-formatter/-/currency-formatter-1.5.5.tgz#907790bb0b7f129c4a64d2924e0d7fa36db0cf52" - integrity sha512-PEsZ9fK2AwPBYgzWTtqpSckam7hFDkT8ZKFAOrsooR0XbydZEKuFioUzcc3DoT2mCDkscjf1XdT6Qq53ababZQ== + version "1.5.6" + resolved "https://registry.yarnpkg.com/currency-formatter/-/currency-formatter-1.5.6.tgz#efe6eea7881c3ac7aaa6b24f307c71197a077987" + integrity sha512-c8VV6bvRg+kwIvz5UYgWb2wNY7LN3bXcZqXgXn4vcdlcFTLSoh53RSa1kvruusxwlr6scu2BtF/cGEjkyL0tbg== dependencies: accounting "^0.4.1" locale-currency "0.0.2" @@ -10685,9 +10681,9 @@ moment-timezone@^0.5.23, moment-timezone@^0.5.27: moment ">= 2.9.0" "moment@>= 2.9.0", moment@>=1.6.0, moment@^2.17.1, moment@^2.24.0: - version "2.27.0" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.27.0.tgz#8bff4e3e26a236220dfe3e36de756b6ebaa0105d" - integrity sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ== + version "2.29.1" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3" + integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ== moo@^0.4.3: version "0.4.3" @@ -15626,9 +15622,9 @@ throat@^4.0.0: integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo= throttle-debounce@^2.1.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-2.2.1.tgz#fbd933ae6793448816f7d5b3cae259d464c98137" - integrity sha512-i9hAVld1f+woAiyNGqWelpDD5W1tpMroL3NofTz9xzwq6acWBlO2dC8k5EFSZepU6oOINtV5Q3aSPoRg7o4+fA== + version "2.3.0" + resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-2.3.0.tgz#fd31865e66502071e411817e241465b3e9c372e2" + integrity sha512-H7oLPV0P7+jgvrk+6mwwwBDmxTaxnu9HMXmloNLXwnNO0ZxZ31Orah2n8lU1eMPvsaowP2CX+USCgyovXfdOFQ== through2-filter@^3.0.0: version "3.0.0" @@ -15904,9 +15900,9 @@ trough@^1.0.0: integrity sha512-tdzBRDGWcI1OpPVmChbdSKhvSVurznZ8X36AYURAcl+0o2ldlCY2XPzyXNNxwJwwyIU+rIglTCG4kxtNKBQH7Q== tslib@^1.10.0, tslib@^1.9.0, tslib@^1.9.3: - version "1.13.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" - integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== tty-browserify@0.0.0: version "0.0.0"