diff --git a/__snapshots__/storybook.test.ts.snap b/__snapshots__/storybook.test.ts.snap index 1ad56a326..7d3527fcd 100644 --- a/__snapshots__/storybook.test.ts.snap +++ b/__snapshots__/storybook.test.ts.snap @@ -4565,7 +4565,7 @@ exports[`Storyshots ItineraryBody/otp-react-redux Bike Only Itinerary 2`] = ` className="c21" >
+
  1. Galleria/SW 10th Ave MAX Station
    @@ -163634,7 +164536,7 @@ exports[`Storyshots ItineraryBody/otp-ui Walk Transit Walk Itinerary With Custom title="View on map" >
    +
    + + MAX Blue Line + +
    MAX Blue Line to @@ -165303,12 +166217,12 @@ exports[`Storyshots ItineraryBody/otp-ui Walk Transit Walk Itinerary With Custom role="group" >
    @@ -165524,21 +166438,21 @@ exports[`Storyshots ItineraryBody/otp-ui Walk Transit Walk Itinerary With Custom style={Object {}} >
    1. Galleria/SW 10th Ave MAX Station
      @@ -165565,7 +166479,7 @@ exports[`Storyshots ItineraryBody/otp-ui Walk Transit Walk Itinerary With Custom title="View on map" >
      51 @@ -168820,7 +169734,7 @@ exports[`Storyshots ItineraryBody/otp-ui Zero Alerts Always Collapsing 2`] = ` className="c12" >
      40 @@ -169308,7 +170222,7 @@ exports[`Storyshots ItineraryBody/otp-ui Zero Alerts Always Collapsing 2`] = ` className="c12" >
      E @@ -169925,7 +170839,7 @@ exports[`Storyshots ItineraryBody/otp-ui Zero Alerts Always Collapsing 2`] = ` className="c12" >
      51 @@ -173487,7 +174401,7 @@ exports[`Storyshots ItineraryBody/otp-ui Zero Alerts Not Always Collapsing 2`] = className="c12" >
      40 @@ -173975,7 +174889,7 @@ exports[`Storyshots ItineraryBody/otp-ui Zero Alerts Not Always Collapsing 2`] = className="c12" >
      E @@ -174592,7 +175506,7 @@ exports[`Storyshots ItineraryBody/otp-ui Zero Alerts Not Always Collapsing 2`] = className="c12" >
      51 @@ -178153,7 +179067,7 @@ exports[`Storyshots ItineraryBody/otp-ui Zero Alerts Without Collapsing Prop 2`] className="c12" >
      40 @@ -178641,7 +179555,7 @@ exports[`Storyshots ItineraryBody/otp-ui Zero Alerts Without Collapsing Prop 2`] className="c12" >
      E @@ -179258,7 +180172,7 @@ exports[`Storyshots ItineraryBody/otp-ui Zero Alerts Without Collapsing Prop 2`] className="c12" >
      - + + MAX Blue Line + - + + MAX Blue Line + - + + MAX Blue Line + - + + MAX Blue Line + - + + 20 + + > + Burnside/Stark +
      - + + MAX Blue Line + + > + 347 + @@ -243081,7 +244016,9 @@ exports[`Storyshots TripDetails Leg Fare Products Itinerary 2`] = ` + > + 1-Line + @@ -243165,7 +244102,9 @@ exports[`Storyshots TripDetails Leg Fare Products Itinerary 2`] = ` + > + 347 + @@ -243180,7 +244119,9 @@ exports[`Storyshots TripDetails Leg Fare Products Itinerary 2`] = ` + > + 1-Line + @@ -243229,7 +244170,9 @@ exports[`Storyshots TripDetails Leg Fare Products Itinerary 2`] = ` + > + 347 + @@ -243244,7 +244187,9 @@ exports[`Storyshots TripDetails Leg Fare Products Itinerary 2`] = ` + > + 1-Line + diff --git a/packages/base-map/package.json b/packages/base-map/package.json index b3438788c..b131afb79 100644 --- a/packages/base-map/package.json +++ b/packages/base-map/package.json @@ -1,6 +1,6 @@ { "name": "@opentripplanner/base-map", - "version": "3.0.14", + "version": "3.0.15", "description": "Base Map Component", "author": "@binh-dam-ibigroup", "homepage": "https://github.com/opentripplanner/otp-ui/#readme", @@ -14,7 +14,7 @@ "react-map-gl": "^7.0.15" }, "peerDependencies": { - "@opentripplanner/types": "^6.0.0", + "@opentripplanner/types": "^6.1.0", "react": "^16.14.0", "styled-components": "^5.3.0" }, diff --git a/packages/core-utils/package.json b/packages/core-utils/package.json index f2f01892a..57f9045c6 100644 --- a/packages/core-utils/package.json +++ b/packages/core-utils/package.json @@ -1,6 +1,6 @@ { "name": "@opentripplanner/core-utils", - "version": "11.0.3", + "version": "11.0.6", "description": "Core functionality that is shared among numerous UI components", "engines": { "node": ">=13" @@ -14,10 +14,9 @@ "dependencies": { "@conveyal/lonlat": "^1.4.1", "@mapbox/polyline": "^1.1.0", - "@opentripplanner/geocoder": "^1.4.1", + "@opentripplanner/geocoder": "^1.4.2", "@styled-icons/foundation": "^10.34.0", "@turf/along": "^6.0.1", - "bowser": "^2.7.0", "chroma-js": "^2.4.2", "date-fns": "^2.28.0", "date-fns-tz": "^1.2.2", diff --git a/packages/core-utils/src/ui.ts b/packages/core-utils/src/ui.ts index aeb77d027..a9f1f4dd5 100644 --- a/packages/core-utils/src/ui.ts +++ b/packages/core-utils/src/ui.ts @@ -1,19 +1,9 @@ -import bowser from "bowser"; - export function isMobile(): boolean { // TODO: consider using 3rd-party library? return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test( navigator.userAgent ); } - -/** - * Returns true if the user is using a [redacted] browser - */ -export function isIE(): boolean { - return bowser.parse(navigator.userAgent).browser === "Internet Explorer"; -} - /** * Enables scrolling for a specified selector, while disabling scrolling for all * other targets. This is adapted from https://stackoverflow.com/a/41601290/915811 diff --git a/packages/endpoints-overlay/package.json b/packages/endpoints-overlay/package.json index 5d433c123..46fbf4fbc 100644 --- a/packages/endpoints-overlay/package.json +++ b/packages/endpoints-overlay/package.json @@ -1,6 +1,6 @@ { "name": "@opentripplanner/endpoints-overlay", - "version": "2.0.8", + "version": "2.0.9", "description": "A map overlay to show the from and to locations of an itinerary", "main": "lib/index.js", "module": "esm/index.js", @@ -21,7 +21,7 @@ "dependencies": { "@opentripplanner/base-map": "^3.0.14", "@opentripplanner/location-icon": "^1.4.1", - "@opentripplanner/core-utils": "^9.0.2", + "@opentripplanner/core-utils": "^11.0.2", "flat": "^5.0.2", "@styled-icons/fa-solid": "^10.34.0" }, @@ -29,7 +29,7 @@ "@types/flat": "^5.0.2" }, "peerDependencies": { - "@opentripplanner/types": "^6.0.0", + "@opentripplanner/types": "^6.1.0", "react": "^16.14.0", "react-dom": "^16.8.6", "react-intl": "^5.24.6", diff --git a/packages/from-to-location-picker/package.json b/packages/from-to-location-picker/package.json index 6b9b55eab..e447d0412 100644 --- a/packages/from-to-location-picker/package.json +++ b/packages/from-to-location-picker/package.json @@ -1,6 +1,6 @@ { "name": "@opentripplanner/from-to-location-picker", - "version": "2.1.8", + "version": "2.1.9", "description": "Location Picker Component", "author": "@binh-dam-ibigroup", "homepage": "https://github.com/opentripplanner/otp-ui/#readme", @@ -13,7 +13,7 @@ "flat": "^5.0.2" }, "devDependencies": { - "@opentripplanner/types": "^6.0.0" + "@opentripplanner/types": "^6.1.0" }, "peerDependencies": { "react": "^16.14.0", diff --git a/packages/icons/package.json b/packages/icons/package.json index 9ce232c67..cb9683400 100644 --- a/packages/icons/package.json +++ b/packages/icons/package.json @@ -1,6 +1,6 @@ { "name": "@opentripplanner/icons", - "version": "2.0.5", + "version": "2.0.6", "description": "Icons for otp-ui", "main": "lib/index.js", "module": "esm/index.js", @@ -10,7 +10,7 @@ "license": "MIT", "private": false, "dependencies": { - "@opentripplanner/core-utils": "^9.0.2", + "@opentripplanner/core-utils": "^11.0.2", "prop-types": "^15.7.2" }, "peerDependencies": { diff --git a/packages/icons/src/trimet-leg-icon.js b/packages/icons/src/trimet-leg-icon.js index d9dfcf230..a0b8bb765 100644 --- a/packages/icons/src/trimet-leg-icon.js +++ b/packages/icons/src/trimet-leg-icon.js @@ -1,12 +1,14 @@ import React from "react"; +import { getLegRouteLongName } from "@opentripplanner/core-utils/lib/itinerary"; import LegIcon from "./leg-icon"; import TriMetModeIcon from "./trimet-mode-icon"; import BiketownIcon from "./companies/biketown-icon"; const TriMetLegIcon = ({ leg, ...props }) => { // Custom TriMet icon logic. - if (leg.routeLongName && leg.routeLongName.startsWith("Portland Streetcar")) { + const routeLongName = getLegRouteLongName(leg); + if (routeLongName && routeLongName.startsWith("Portland Streetcar")) { return ; } if (leg.rentedBike) { diff --git a/packages/itinerary-body/package.json b/packages/itinerary-body/package.json index 6f5d08df4..917723c7f 100644 --- a/packages/itinerary-body/package.json +++ b/packages/itinerary-body/package.json @@ -1,6 +1,6 @@ { "name": "@opentripplanner/itinerary-body", - "version": "5.0.6", + "version": "5.0.9", "description": "A component for displaying an itinerary body of a trip planning result", "main": "lib/index.js", "module": "esm/index.js", @@ -10,9 +10,9 @@ "license": "MIT", "private": false, "dependencies": { - "@opentripplanner/core-utils": "^9.0.2", + "@opentripplanner/core-utils": "^11.0.2", "@opentripplanner/humanize-distance": "^1.2.0", - "@opentripplanner/icons": "^2.0.4", + "@opentripplanner/icons": "^2.0.5", "@opentripplanner/location-icon": "^1.4.1", "@styled-icons/fa-solid": "^10.34.0", "@styled-icons/foundation": "^10.34.0", @@ -24,7 +24,7 @@ "string-similarity": "^4.0.4" }, "devDependencies": { - "@opentripplanner/types": "^7.0.0-alpha.6", + "@opentripplanner/types": "^6.1.0", "@types/flat": "^5.0.2" }, "peerDependencies": { diff --git a/packages/itinerary-body/src/AccessLegBody/index.tsx b/packages/itinerary-body/src/AccessLegBody/index.tsx index fdfd3f2ab..257137385 100644 --- a/packages/itinerary-body/src/AccessLegBody/index.tsx +++ b/packages/itinerary-body/src/AccessLegBody/index.tsx @@ -72,8 +72,8 @@ class AccessLegBody extends Component { mapillaryKey, setLegDiagram, showElevationProfile, - TransitLegSubheader, - showLegIcon + showLegIcon, + TransitLegSubheader } = this.props; const { expanded } = this.state; diff --git a/packages/itinerary-body/src/ItineraryBody/index.tsx b/packages/itinerary-body/src/ItineraryBody/index.tsx index f6362f431..8bc960db7 100755 --- a/packages/itinerary-body/src/ItineraryBody/index.tsx +++ b/packages/itinerary-body/src/ItineraryBody/index.tsx @@ -28,6 +28,7 @@ const ItineraryBody = ({ mapillaryKey, PlaceName, RouteDescription, + RouteDescriptionFooter, routingType = "ITINERARY", setActiveLeg, setLegDiagram, @@ -76,6 +77,7 @@ const ItineraryBody = ({ mapillaryKey={mapillaryKey} PlaceName={PlaceName} RouteDescription={RouteDescription} + RouteDescriptionFooter={RouteDescriptionFooter} routingType={routingType} setActiveLeg={setActiveLeg} setLegDiagram={setLegDiagram} diff --git a/packages/itinerary-body/src/ItineraryBody/place-row.tsx b/packages/itinerary-body/src/ItineraryBody/place-row.tsx index 0d6d38bd4..73d6168b0 100755 --- a/packages/itinerary-body/src/ItineraryBody/place-row.tsx +++ b/packages/itinerary-body/src/ItineraryBody/place-row.tsx @@ -35,6 +35,7 @@ export default function PlaceRow({ mapillaryKey, PlaceName, RouteDescription, + RouteDescriptionFooter, setActiveLeg, setLegDiagram, setViewedTrip, @@ -141,6 +142,7 @@ export default function PlaceRow({ LegIcon={LegIcon} legIndex={legIndex} RouteDescription={RouteDescription} + RouteDescriptionFooter={RouteDescriptionFooter} setActiveLeg={setActiveLeg} setViewedTrip={setViewedTrip} showAgencyInfo={showAgencyInfo} diff --git a/packages/itinerary-body/src/TransitLegBody/index.tsx b/packages/itinerary-body/src/TransitLegBody/index.tsx index ca248ec64..f643b31ac 100644 --- a/packages/itinerary-body/src/TransitLegBody/index.tsx +++ b/packages/itinerary-body/src/TransitLegBody/index.tsx @@ -20,6 +20,7 @@ import { Duration } from "../defaults"; import * as S from "../styled"; import { RouteDescriptionProps, + RouteDescriptionFooterProps, SetActiveLegFunction, SetViewedTripFunction, TransitLegSubheaderProps, @@ -42,6 +43,7 @@ interface Props { LegIcon: LegIconComponent; legIndex: number; RouteDescription: FunctionComponent; + RouteDescriptionFooter: FunctionComponent; setActiveLeg: SetActiveLegFunction; setViewedTrip: SetViewedTripFunction; showAgencyInfo: boolean; @@ -135,6 +137,7 @@ class TransitLegBody extends Component { legDestination, LegIcon, RouteDescription, + RouteDescriptionFooter, setViewedTrip, showAgencyInfo, showViewTripButton, @@ -228,6 +231,7 @@ class TransitLegBody extends Component { + {RouteDescriptionFooter && }
      @@ -78,7 +82,7 @@ export default function LineColumnContent({ parseInt(routeShortName, 10) || routeShortName )} color={routeColor} - name={routeLongName || ""} + name={getLegRouteLongName(leg) || ""} /> )} {!interline && !isDestination && !transitLeg && ( diff --git a/packages/itinerary-body/src/defaults/route-description.tsx b/packages/itinerary-body/src/defaults/route-description.tsx index 530b1a24b..cccfe2c79 100644 --- a/packages/itinerary-body/src/defaults/route-description.tsx +++ b/packages/itinerary-body/src/defaults/route-description.tsx @@ -1,3 +1,4 @@ +import { getLegRouteShortName } from "@opentripplanner/core-utils/lib/itinerary"; import React, { ReactElement } from "react"; import * as S from "../styled"; @@ -8,7 +9,7 @@ import RouteLongName from "./route-long-name"; export default function RouteDescription({ leg }: RouteDescriptionProps): ReactElement { - const { routeShortName } = leg; + const routeShortName = getLegRouteShortName(leg); return ( {routeShortName && ( diff --git a/packages/itinerary-body/src/defaults/route-long-name.tsx b/packages/itinerary-body/src/defaults/route-long-name.tsx index 7a5cc36f2..89718becd 100644 --- a/packages/itinerary-body/src/defaults/route-long-name.tsx +++ b/packages/itinerary-body/src/defaults/route-long-name.tsx @@ -1,3 +1,4 @@ +import { getLegRouteLongName } from "@opentripplanner/core-utils/lib/itinerary"; import { Leg } from "@opentripplanner/types"; import React, { HTMLAttributes, ReactElement } from "react"; import { FormattedMessage } from "react-intl"; @@ -24,7 +25,9 @@ export default function RouteLongName({ leg, style }: Props): ReactElement { - const { headsign, routeLongName } = leg; + const { headsign: otp1Headsign, trip } = leg; + const headsign = trip?.tripHeadsign || otp1Headsign; + const routeLongName = getLegRouteLongName(leg); // Hide route long name if it contains similar information to the headsign const hideRouteLongName = compareTwoStrings(headsign || "", routeLongName || "") > 0.25 || diff --git a/packages/itinerary-body/src/otp-react-redux/route-description.tsx b/packages/itinerary-body/src/otp-react-redux/route-description.tsx index 23aae2385..55bb64024 100644 --- a/packages/itinerary-body/src/otp-react-redux/route-description.tsx +++ b/packages/itinerary-body/src/otp-react-redux/route-description.tsx @@ -1,3 +1,4 @@ +import { getLegRouteShortName } from "@opentripplanner/core-utils/lib/itinerary"; import React, { ReactElement } from "react"; import RouteLongName from "../defaults/route-long-name"; @@ -8,7 +9,7 @@ export default function RouteDescription({ leg, LegIcon }: RouteDescriptionProps): ReactElement { - const { routeShortName } = leg; + const routeShortName = getLegRouteShortName(leg); return ( diff --git a/packages/itinerary-body/src/stories/OtpRrItineraryBody.story.tsx b/packages/itinerary-body/src/stories/OtpRrItineraryBody.story.tsx index 020e731e1..913d32538 100644 --- a/packages/itinerary-body/src/stories/OtpRrItineraryBody.story.tsx +++ b/packages/itinerary-body/src/stories/OtpRrItineraryBody.story.tsx @@ -1,5 +1,6 @@ +import { convertGraphQLResponseToLegacy } from "@opentripplanner/core-utils/lib/itinerary"; import { FareProductSelector, Itinerary } from "@opentripplanner/types"; -import React, { ReactElement } from "react"; +import React, { FunctionComponent, ReactElement } from "react"; import ItineraryBody from ".."; import { @@ -33,6 +34,13 @@ const walkTransitWalkTransitWalkA11yItinerary = require("../__mocks__/itinerarie const otp2ScooterItinerary = require("../__mocks__/itineraries/otp2-scooter.json"); const flexItinerary = require("../__mocks__/itineraries/flex-itinerary.json"); +function withLegacyLegs(itinerary) { + return { + ...itinerary, + legs: itinerary.legs.map(convertGraphQLResponseToLegacy) + }; +} + if (!isRunningJest()) { // Generate same-day/next day alerts at a fixed time for the walk-transit-walk itinerary // for illustration outside of the CI environment. @@ -136,7 +144,9 @@ export const EScooterRentalTransitItinerary = (): ReactElement => ( ); export const TncTransitItinerary = (): ReactElement => ( - + ); export const OTP2ScooterItinerary = (): ReactElement => ( @@ -153,7 +163,7 @@ export const IndividualLegFareComponents = (): ReactElement => ( mediumId: "orca:cash", riderCategoryId: "orca:regular" }} - itinerary={fareProductsItinerary} + itinerary={withLegacyLegs(fareProductsItinerary)} /> ); diff --git a/packages/itinerary-body/src/stories/OtpUiItineraryBody.story.tsx b/packages/itinerary-body/src/stories/OtpUiItineraryBody.story.tsx index a4eaba97c..29b0a15b1 100644 --- a/packages/itinerary-body/src/stories/OtpUiItineraryBody.story.tsx +++ b/packages/itinerary-body/src/stories/OtpUiItineraryBody.story.tsx @@ -2,6 +2,7 @@ import React, { ReactElement } from "react"; import { Bomb } from "@styled-icons/fa-solid/Bomb"; import { Bolt } from "@styled-icons/fa-solid/Bolt"; import styled from "styled-components"; +import RouteDescriptionFooterWithWaitTimes from "./footer-with-wait-times"; import ItineraryBody from ".."; import { @@ -47,12 +48,16 @@ export const BikeOnlyItinerary = (): ReactElement => ( ); export const WalkTransitWalkItinerary = (): ReactElement => ( - + ); export const WalkTransitTransferWithA11yItinerary = (): ReactElement => ( ); @@ -147,7 +152,10 @@ export const OTP2FlexItinerary = (): ReactElement => ( ); export const IndividualLegFareComponents = (): ReactElement => ( - + ); export const CustomAlertIconsItinerary = (): ReactElement => ( diff --git a/packages/itinerary-body/src/stories/footer-with-wait-times.tsx b/packages/itinerary-body/src/stories/footer-with-wait-times.tsx new file mode 100644 index 000000000..405c349a6 --- /dev/null +++ b/packages/itinerary-body/src/stories/footer-with-wait-times.tsx @@ -0,0 +1,28 @@ +import React, { ReactElement } from "react"; +import { differenceInMinutes } from "date-fns"; +import { Leg } from "@opentripplanner/types"; + +import { RouteDescriptionFooterProps } from "../types"; +import { DefaultRouteDescriptionFooter } from "./route-description-footer"; + +/** + * This method returns a RouteDescriptionFooter element with falsy wait-times + * generated from legs' to and from arrival-times. It is only meant for + * illustrative purposes. + */ +const RouteDescriptionFooterWithWaitTimes = ({ + leg +}: { + leg: Leg; +}): ReactElement => { + const toTime = leg.to.arrival || 0; + const fromTime = leg.from.arrival || 0; + const waitMinutes = differenceInMinutes(new Date(toTime), new Date(fromTime)); + const TypedRouteDescriptionFooter = DefaultRouteDescriptionFooter as React.FC< + RouteDescriptionFooterProps + >; + + return ; +}; + +export default RouteDescriptionFooterWithWaitTimes; diff --git a/packages/itinerary-body/src/stories/itinerary-body-defaults-wrapper.tsx b/packages/itinerary-body/src/stories/itinerary-body-defaults-wrapper.tsx index 92aabdbac..341bd7cb0 100644 --- a/packages/itinerary-body/src/stories/itinerary-body-defaults-wrapper.tsx +++ b/packages/itinerary-body/src/stories/itinerary-body-defaults-wrapper.tsx @@ -9,6 +9,7 @@ import ItineraryBody from ".."; import DefaultLineColumnContent from "../defaults/line-column-content"; import DefaultPlaceName from "../defaults/place-name"; import DefaultRouteDescription from "../defaults/route-description"; +import { DefaultRouteDescriptionFooter } from "./route-description-footer"; import DefaultTransitLegSummary from "../defaults/transit-leg-summary"; import { StyledItineraryBody } from "../demos"; import OtpRRStyledItineraryBody from "../otp-react-redux/itinerary-body"; @@ -48,6 +49,7 @@ export default class ItineraryBodyDefaultsWrapper extends Component< LineColumnContent, PlaceName, RouteDescription, + RouteDescriptionFooter = undefined, showAgencyInfo, showLegIcon, showMapButtonColumn = true, @@ -87,6 +89,9 @@ export default class ItineraryBodyDefaultsWrapper extends Component< mapillaryKey="fake key, but ok because the api response is also fake" PlaceName={PlaceName || DefaultPlaceName} RouteDescription={RouteDescription || DefaultRouteDescription} + RouteDescriptionFooter={ + RouteDescriptionFooter || DefaultRouteDescriptionFooter + } routingType="ITINERARY" setActiveLeg={action("setActiveLeg")} setLegDiagram={this.setLegDiagram} diff --git a/packages/itinerary-body/src/stories/route-description-footer.tsx b/packages/itinerary-body/src/stories/route-description-footer.tsx new file mode 100644 index 000000000..60bce0cb0 --- /dev/null +++ b/packages/itinerary-body/src/stories/route-description-footer.tsx @@ -0,0 +1,15 @@ +/* eslint-disable import/prefer-default-export */ +import React, { ReactElement } from "react"; +import * as S from "../styled"; +import { RouteDescriptionFooterProps } from "../types"; + +export function DefaultRouteDescriptionFooter({ + onClick = null, + waitMinutes +}: RouteDescriptionFooterProps): ReactElement { + return waitMinutes > 0 ? ( + + Arrives in {waitMinutes} minutes + + ) : null; +} diff --git a/packages/itinerary-body/src/styled.tsx b/packages/itinerary-body/src/styled.tsx index 6df3196de..876f263b3 100755 --- a/packages/itinerary-body/src/styled.tsx +++ b/packages/itinerary-body/src/styled.tsx @@ -131,6 +131,22 @@ export const AccessBadge = styled.div` /* Add in border for dark mode */ `; +export const ArrivalTimeContainer = styled.button` + align-items: center; + background: none; + border: none; + color: #007899; + cursor: pointer; + display: flex; + font-size: 0.9em; + font-family: inherit; + margin: 0; + margin-top: 5px; + outline: inherit; + padding: 0; + text-align: inherit; +`; + export const CallAheadWarning = styled.div` color: #b22727; margin-top: 5px; diff --git a/packages/itinerary-body/src/types.ts b/packages/itinerary-body/src/types.ts index 1eaa6b833..934a6829a 100644 --- a/packages/itinerary-body/src/types.ts +++ b/packages/itinerary-body/src/types.ts @@ -21,6 +21,15 @@ export interface RouteDescriptionProps { transitOperator: TransitOperator; } +export interface RouteDescriptionFooterProps { + /* Contains details about the leg object */ + leg?: Leg; + /** Method for navigating to arrival vehicle if available */ + onClick?: () => void; + /** Number of minutes for the arrival time */ + waitMinutes?: number; +} + export type ToRouteAbbreviationFunction = (route: string | number) => string; export interface LegDestination { @@ -174,6 +183,11 @@ interface ItineraryBodySharedProps { * - transitOperator: the transit operator associated with the route if available */ RouteDescription: FunctionComponent; + /** + * A component to render the footer and contained elements + * therein + */ + RouteDescriptionFooter: FunctionComponent; /** TODO: Routing Type is usually 'ITINERARY' but we should get more details on what this does */ routingType?: string; /** diff --git a/packages/itinerary-body/src/util.ts b/packages/itinerary-body/src/util.ts index c5d99ef24..7692873da 100644 --- a/packages/itinerary-body/src/util.ts +++ b/packages/itinerary-body/src/util.ts @@ -152,7 +152,10 @@ export function getPlaceName( // Other times, it can be a name with relevant information for the user. // Here we detect if the name is just a UUID and generate a better name. // It is also possible to configure station name overrides in the config using overridePlaceNames. - const company = getCompanyForNetwork(place.networks?.[0], companies); + const company = getCompanyForNetwork( + place.networks?.[0] || place?.rentalVehicle?.network, + companies + ); if ( (place.name.match(/-/g) || []).length > 3 || company?.overridePlaceNames diff --git a/packages/location-field/package.json b/packages/location-field/package.json index 598d7cad8..48c25b176 100644 --- a/packages/location-field/package.json +++ b/packages/location-field/package.json @@ -1,6 +1,6 @@ { "name": "@opentripplanner/location-field", - "version": "2.0.8", + "version": "2.0.10", "description": "A component for display and finding a location", "main": "lib/index.js", "module": "esm/index.js", @@ -10,7 +10,7 @@ "private": false, "dependencies": { "@conveyal/geocoder-arcgis-geojson": "^0.0.3", - "@opentripplanner/core-utils": "^9.0.2", + "@opentripplanner/core-utils": "^11.0.2", "@opentripplanner/geocoder": "^1.4.2", "@opentripplanner/humanize-distance": "^1.2.0", "@opentripplanner/location-icon": "^1.4.1", diff --git a/packages/location-field/src/options.tsx b/packages/location-field/src/options.tsx index 5f41326cb..b8588c235 100644 --- a/packages/location-field/src/options.tsx +++ b/packages/location-field/src/options.tsx @@ -1,4 +1,3 @@ -import coreUtils from "@opentripplanner/core-utils"; import { humanizeDistanceStringImperial } from "@opentripplanner/humanize-distance"; import { Stop, UserLocation } from "@opentripplanner/types"; import React from "react"; @@ -90,29 +89,18 @@ export function Option({ }): React.ReactElement { return ( - {coreUtils.ui.isIE() ? ( - // In internet explorer 11, some really weird stuff is happening where it - // is not possible to click the text of the title, but if you click just - // above it, then it works. So, if using IE 11, just return the title text - // and avoid all the extra fancy stuff. - // See https://github.com/ibi-group/trimet-mod-otp/issues/237 - title - ) : ( - - - {icon} - - - {title} - {subTitle && ( - - , - {subTitle} - - )} - - - )} + + {icon} + + {title} + {subTitle && ( + + , + {subTitle} + + )} + + ); } diff --git a/packages/map-popup/package.json b/packages/map-popup/package.json index 2c4c30a93..50d96f410 100644 --- a/packages/map-popup/package.json +++ b/packages/map-popup/package.json @@ -1,6 +1,6 @@ { "name": "@opentripplanner/map-popup", - "version": "2.0.5", + "version": "2.0.6", "description": "A component for displaying map popup contents", "main": "lib/index.js", "module": "esm/index.js", @@ -12,12 +12,12 @@ "private": false, "dependencies": { "@opentripplanner/base-map": "^3.0.14", - "@opentripplanner/core-utils": "^9.0.2", + "@opentripplanner/core-utils": "^11.0.2", "@opentripplanner/from-to-location-picker": "^2.1.8", "flat": "^5.0.2" }, "devDependencies": { - "@opentripplanner/types": "^6.0.0" + "@opentripplanner/types": "^6.1.0" }, "peerDependencies": { "react": "^16.14.0", diff --git a/packages/otp2-tile-overlay/package.json b/packages/otp2-tile-overlay/package.json index c6b82b2ed..b4ca7e04a 100644 --- a/packages/otp2-tile-overlay/package.json +++ b/packages/otp2-tile-overlay/package.json @@ -1,6 +1,6 @@ { "name": "@opentripplanner/otp2-tile-overlay", - "version": "1.0.5", + "version": "1.0.6", "description": "Render data from OTP2's vector tile server", "main": "lib/index.js", "module": "esm/index.js", @@ -20,6 +20,6 @@ }, "devDependencies": { "@opentripplanner/base-map": "^3.0.14", - "@opentripplanner/types": "^6.0.0" + "@opentripplanner/types": "^6.1.0" } } diff --git a/packages/printable-itinerary/package.json b/packages/printable-itinerary/package.json index f91133d5c..653ecf688 100644 --- a/packages/printable-itinerary/package.json +++ b/packages/printable-itinerary/package.json @@ -1,6 +1,6 @@ { "name": "@opentripplanner/printable-itinerary", - "version": "2.0.12", + "version": "2.0.14", "description": "A component for displaying a printable itinerary body of a trip planning result", "main": "lib/index.js", "module": "esm/index.js", @@ -10,11 +10,11 @@ "license": "MIT", "private": false, "dependencies": { - "@opentripplanner/core-utils": "^9.0.2", - "@opentripplanner/itinerary-body": "^5.0.2" + "@opentripplanner/core-utils": "^11.0.2", + "@opentripplanner/itinerary-body": "^5.0.7" }, "devDependencies": { - "@opentripplanner/icons": "^2.0.4" + "@opentripplanner/icons": "^2.0.5" }, "peerDependencies": { "react": "^16.14.0", diff --git a/packages/printable-itinerary/src/transit-leg.tsx b/packages/printable-itinerary/src/transit-leg.tsx index 2fbec9b5c..badac28d8 100644 --- a/packages/printable-itinerary/src/transit-leg.tsx +++ b/packages/printable-itinerary/src/transit-leg.tsx @@ -1,4 +1,7 @@ -import coreUtils from "@opentripplanner/core-utils"; +import { + getDisplayedStopId, + getLegRouteShortName +} from "@opentripplanner/core-utils/lib/itinerary"; import { Defaults } from "@opentripplanner/itinerary-body"; import { GradationMap, Leg, LegIconComponent } from "@opentripplanner/types"; import React, { ReactElement } from "react"; @@ -8,8 +11,6 @@ import AccessibilityAnnotation from "./accessibility-annotation"; import * as S from "./styled"; import { defaultMessages, strongText } from "./util"; -const { getDisplayedStopId } = coreUtils.itinerary; - interface Props { accessibilityScoreGradationMap?: GradationMap; interlineFollows?: boolean; @@ -28,7 +29,7 @@ export default function TransitLeg({ const routeDescription = ( <> - {leg.routeShortName} + {getLegRouteShortName(leg)} ); diff --git a/packages/route-viewer-overlay/package.json b/packages/route-viewer-overlay/package.json index c1c0a92a6..67c5d5c15 100644 --- a/packages/route-viewer-overlay/package.json +++ b/packages/route-viewer-overlay/package.json @@ -1,6 +1,6 @@ { "name": "@opentripplanner/route-viewer-overlay", - "version": "2.0.13", + "version": "2.0.14", "description": "A map overlay to show a transit route", "main": "lib/index.js", "module": "esm/index.js", @@ -21,11 +21,11 @@ "dependencies": { "@mapbox/polyline": "^1.1.0", "@opentripplanner/base-map": "^3.0.14", - "@opentripplanner/core-utils": "^9.0.2", + "@opentripplanner/core-utils": "^11.0.2", "point-in-polygon": "^1.1.0" }, "devDependencies": { - "@opentripplanner/types": "^6.0.0", + "@opentripplanner/types": "^6.1.0", "point-in-polygon": "^1.1.0" }, "peerDependencies": { diff --git a/packages/stop-viewer-overlay/package.json b/packages/stop-viewer-overlay/package.json index 4458cfb2c..9e1568913 100644 --- a/packages/stop-viewer-overlay/package.json +++ b/packages/stop-viewer-overlay/package.json @@ -1,6 +1,6 @@ { "name": "@opentripplanner/stop-viewer-overlay", - "version": "2.0.6", + "version": "2.0.7", "description": "A map overlay to show a stop", "main": "lib/index.js", "module": "esm/index.js", @@ -20,10 +20,10 @@ }, "dependencies": { "@opentripplanner/base-map": "^3.0.14", - "@opentripplanner/core-utils": "^9.0.2" + "@opentripplanner/core-utils": "^11.0.2" }, "devDependencies": { - "@opentripplanner/types": "^6.0.0" + "@opentripplanner/types": "^6.1.0" }, "peerDependencies": { "react": "^16.14.0", diff --git a/packages/stops-overlay/package.json b/packages/stops-overlay/package.json index f0ad21f77..8721a8beb 100644 --- a/packages/stops-overlay/package.json +++ b/packages/stops-overlay/package.json @@ -1,6 +1,6 @@ { "name": "@opentripplanner/stops-overlay", - "version": "5.1.1", + "version": "5.1.2", "description": "A map overlay to show transit stops", "main": "lib/index.js", "module": "esm/index.js", @@ -25,7 +25,7 @@ "flat": "^5.0.2" }, "devDependencies": { - "@opentripplanner/types": "^6.0.0", + "@opentripplanner/types": "^6.1.0", "styled-icons": "^10.34.0" }, "peerDependencies": { diff --git a/packages/transit-vehicle-overlay/package.json b/packages/transit-vehicle-overlay/package.json index 587608dfc..0d2ea5268 100644 --- a/packages/transit-vehicle-overlay/package.json +++ b/packages/transit-vehicle-overlay/package.json @@ -1,6 +1,6 @@ { "name": "@opentripplanner/transit-vehicle-overlay", - "version": "4.0.5", + "version": "4.0.6", "description": "Realtime Transit Vehicles Component", "author": "Frank Purcell", "homepage": "https://github.com/opentripplanner/otp-ui/tree/master/packages/transit-vehicle-overlay/#readme", @@ -10,12 +10,12 @@ "private": false, "dependencies": { "@opentripplanner/base-map": "^3.0.14", - "@opentripplanner/core-utils": "^9.0.2", - "@opentripplanner/icons": "^2.0.4", + "@opentripplanner/core-utils": "^11.0.2", + "@opentripplanner/icons": "^2.0.5", "flat": "^5.0.2" }, "devDependencies": { - "@opentripplanner/types": "^6.0.0" + "@opentripplanner/types": "^6.1.0" }, "peerDependencies": { "react": "^16.14.0", diff --git a/packages/transitive-overlay/package.json b/packages/transitive-overlay/package.json index 9f0076298..919c5e29a 100644 --- a/packages/transitive-overlay/package.json +++ b/packages/transitive-overlay/package.json @@ -1,6 +1,6 @@ { "name": "@opentripplanner/transitive-overlay", - "version": "3.0.14", + "version": "3.0.16", "description": "A map overlay to show an itinerary based on transitive.js", "main": "lib/index.js", "module": "esm/index.js", @@ -21,7 +21,7 @@ "dependencies": { "@mapbox/polyline": "^1.1.1", "@opentripplanner/base-map": "^3.0.14", - "@opentripplanner/core-utils": "^9.0.2", + "@opentripplanner/core-utils": "^11.0.2", "@opentripplanner/itinerary-body": "^5.0.2", "@turf/bbox": "^6.5.0", "@turf/bearing": "^6.5.0", @@ -33,7 +33,7 @@ }, "devDependencies": { "@opentripplanner/endpoints-overlay": "^2.0.8", - "@opentripplanner/types": "^6.0.0" + "@opentripplanner/types": "^6.1.0" }, "peerDependencies": { "react": "^16.14.0", diff --git a/packages/transitive-overlay/src/util.ts b/packages/transitive-overlay/src/util.ts index 6be088f47..6cd9fff7f 100644 --- a/packages/transitive-overlay/src/util.ts +++ b/packages/transitive-overlay/src/util.ts @@ -7,6 +7,16 @@ import destination from "@turf/destination"; import bearing from "@turf/bearing"; import distance from "@turf/distance"; +import { + getLegBounds, + getLegRouteLongName, + getLegRouteShortName, + isAccessMode, + isFlex, + isRideshareLeg, + isTransit +} from "@opentripplanner/core-utils/lib/itinerary"; +import { getPlaceName } from "@opentripplanner/itinerary-body"; import { Company, Itinerary, @@ -16,18 +26,8 @@ import { TransitivePlace, TransitiveStop } from "@opentripplanner/types"; -import coreUtils from "@opentripplanner/core-utils"; -import { getPlaceName } from "@opentripplanner/itinerary-body"; import { IntlShape } from "react-intl"; -const { - getLegBounds, - isAccessMode, - isFlex, - isRideshareLeg, - isTransit -} = coreUtils.itinerary; - const CAR_PARK_ITIN_PREFIX = "itin_car_"; /** @@ -385,12 +385,12 @@ export function itineraryToTransitive( const routeLabel = typeof getRouteLabel === "function" ? getRouteLabel(leg) - : leg.routeShortName; + : getLegRouteShortName(leg); routes[leg.routeId] = { agency_id: leg.agencyId, route_id: leg.routeId, route_short_name: routeLabel || "", - route_long_name: leg.routeLongName || "", + route_long_name: getLegRouteLongName(leg) || "", route_type: leg.routeType, route_color: leg.routeColor, route_text_color: leg.routeTextColor diff --git a/packages/trip-details/package.json b/packages/trip-details/package.json index 184cd5081..2f9f69bfb 100644 --- a/packages/trip-details/package.json +++ b/packages/trip-details/package.json @@ -1,6 +1,6 @@ { "name": "@opentripplanner/trip-details", - "version": "5.0.2", + "version": "5.0.4", "description": "A component for displaying details about a trip planning itinerary", "main": "lib/index.js", "module": "esm/index.js", @@ -11,13 +11,13 @@ "license": "MIT", "private": false, "dependencies": { - "@opentripplanner/core-utils": "^9.0.3", + "@opentripplanner/core-utils": "^11.0.2", "@styled-icons/fa-solid": "^10.34.0", "flat": "^5.0.2", "react-animate-height": "^3.0.4" }, "devDependencies": { - "@opentripplanner/types": "^6.0.0-alpha.9", + "@opentripplanner/types": "^6.0.0", "@types/flat": "^5.0.2" }, "peerDependencies": { diff --git a/packages/trip-details/src/fare-table.tsx b/packages/trip-details/src/fare-table.tsx index d516be8a4..02b1d8c49 100644 --- a/packages/trip-details/src/fare-table.tsx +++ b/packages/trip-details/src/fare-table.tsx @@ -5,7 +5,8 @@ import { Transfer } from "@styled-icons/boxicons-regular/Transfer"; import { getItineraryCost, - getLegCost + getLegCost, + getLegRouteName } from "@opentripplanner/core-utils/lib/itinerary"; import { useIntl } from "react-intl"; import { flatten } from "flat"; @@ -119,9 +120,7 @@ const FareTypeTable = ({ {filteredLegs.map((leg, index) => ( - - {leg.routeShortName || leg.routeLongName} - + {getLegRouteName(leg)} {colsToRender.map(col => { const fare = getLegCost(leg, col.mediumId, col.riderCategoryId); return ( diff --git a/packages/trip-form/package.json b/packages/trip-form/package.json index f240087db..23bab275b 100644 --- a/packages/trip-form/package.json +++ b/packages/trip-form/package.json @@ -1,6 +1,6 @@ { "name": "@opentripplanner/trip-form", - "version": "3.3.1", + "version": "3.3.2", "description": "Trip Settings Form and Related Components", "author": "@binh-dam-ibigroup", "homepage": "https://github.com/opentripplanner/otp-ui/#readme", @@ -10,7 +10,7 @@ "types": "lib/index.d.ts", "private": false, "dependencies": { - "@opentripplanner/core-utils": "^10.0.0", + "@opentripplanner/core-utils": "^11.0.2", "@floating-ui/react": "^0.19.2", "@styled-icons/bootstrap": "^10.34.0", "@styled-icons/boxicons-regular": "^10.38.0", diff --git a/packages/trip-form/src/MetroModeSelector/MetroModeSelector.story.tsx b/packages/trip-form/src/MetroModeSelector/MetroModeSelector.story.tsx index 93e2509d7..a4ec9d0b6 100644 --- a/packages/trip-form/src/MetroModeSelector/MetroModeSelector.story.tsx +++ b/packages/trip-form/src/MetroModeSelector/MetroModeSelector.story.tsx @@ -7,7 +7,7 @@ import { TrainSubway, TrainTram } from "@styled-icons/fa-solid"; -import { ClassicBike } from "@opentripplanner/icons/lib/classic"; +import { ClassicBike } from "@opentripplanner/icons/src/classic"; import React, { ReactElement, useState } from "react"; import * as Core from ".."; import { QueryParamChangeEvent } from "../types"; diff --git a/packages/trip-viewer-overlay/package.json b/packages/trip-viewer-overlay/package.json index 248e35656..cd58d495c 100644 --- a/packages/trip-viewer-overlay/package.json +++ b/packages/trip-viewer-overlay/package.json @@ -1,6 +1,6 @@ { "name": "@opentripplanner/trip-viewer-overlay", - "version": "2.0.6", + "version": "2.0.7", "description": "A map overlay to show a trip of a route", "main": "lib/index.js", "module": "esm/index.js", @@ -21,7 +21,7 @@ "dependencies": { "@mapbox/polyline": "^1.1.0", "@opentripplanner/base-map": "^3.0.14", - "@opentripplanner/core-utils": "^9.0.2" + "@opentripplanner/core-utils": "^11.0.2" }, "peerDependencies": { "react": "^16.14.0", diff --git a/packages/vehicle-rental-overlay/package.json b/packages/vehicle-rental-overlay/package.json index bafed8412..29d45bc08 100644 --- a/packages/vehicle-rental-overlay/package.json +++ b/packages/vehicle-rental-overlay/package.json @@ -1,6 +1,6 @@ { "name": "@opentripplanner/vehicle-rental-overlay", - "version": "2.1.2", + "version": "2.1.3", "description": "A map overlay to show vehicle rentals from a specific company", "main": "lib/index.js", "module": "esm/index.js", @@ -20,7 +20,7 @@ }, "dependencies": { "@opentripplanner/base-map": "^3.0.14", - "@opentripplanner/core-utils": "^9.0.2", + "@opentripplanner/core-utils": "^11.0.2", "@opentripplanner/from-to-location-picker": "^2.1.8", "@opentripplanner/map-popup": "^2.0.5", "@styled-icons/fa-solid": "^10.34.0", @@ -28,7 +28,7 @@ "lodash.memoize": "^4.1.2" }, "devDependencies": { - "@opentripplanner/types": "^6.0.0" + "@opentripplanner/types": "^6.1.0" }, "peerDependencies": { "react": "^16.14.0", diff --git a/packages/zoom-based-markers/package.json b/packages/zoom-based-markers/package.json index 459d24c84..a40e2eeb9 100644 --- a/packages/zoom-based-markers/package.json +++ b/packages/zoom-based-markers/package.json @@ -1,6 +1,6 @@ { "name": "@opentripplanner/zoom-based-markers", - "version": "2.0.6", + "version": "2.0.7", "description": "A component that renders objects differently based on a zoom level.", "main": "lib/index.js", "module": "esm/index.js", @@ -19,11 +19,11 @@ "url": "https://github.com/opentripplanner/otp-ui/issues" }, "dependencies": { - "@opentripplanner/core-utils": "^9.0.2", + "@opentripplanner/core-utils": "^11.0.2", "@opentripplanner/base-map": "^3.0.14" }, "devDependencies": { - "@opentripplanner/types": "^6.0.0" + "@opentripplanner/types": "^6.1.0" }, "peerDependencies": { "react": "^16.14.0", diff --git a/yarn.lock b/yarn.lock index fcddd6088..917932aaa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3241,54 +3241,11 @@ resolved "https://registry.yarnpkg.com/@open-draft/until/-/until-1.0.3.tgz#db9cc719191a62e7d9200f6e7bab21c5b848adca" integrity sha512-Aq58f5HiWdyDlFffbbSjAlv596h/cOnt2DO1w3DOC7OJ5EHs0hd/nycJfiu9RJbT6Yk6F1knnRRXNSpxoIVZ9Q== -"@opentripplanner/core-utils@^10.0.0": - version "10.0.0" - resolved "https://registry.yarnpkg.com/@opentripplanner/core-utils/-/core-utils-10.0.0.tgz#ab5cba39097e2b15e634b1e70141076f3a5614d3" - integrity sha512-3T+P9GlBmeL8AHATUXbOouDtr3eYNv6VYMbVagFV9MBhYf3wSCJ3kAdBEWK+TQGfiWRfcxVJueuy8kvmVrkJtA== - dependencies: - "@conveyal/lonlat" "^1.4.1" - "@mapbox/polyline" "^1.1.0" - "@opentripplanner/geocoder" "^1.4.1" - "@styled-icons/foundation" "^10.34.0" - "@turf/along" "^6.0.1" - bowser "^2.7.0" - chroma-js "^2.4.2" - date-fns "^2.28.0" - date-fns-tz "^1.2.2" - graphql "^16.6.0" - lodash.clonedeep "^4.5.0" - lodash.isequal "^4.5.0" - qs "^6.9.1" - -"@opentripplanner/core-utils@^9.0.2", "@opentripplanner/core-utils@^9.0.3": - version "9.0.3" - resolved "https://registry.yarnpkg.com/@opentripplanner/core-utils/-/core-utils-9.0.3.tgz#c1ebdcc3ad5999fb28427102c9be7d7268f6bd37" - integrity sha512-8P3Bi41jF7z18P/soo6lEw+nrqarsyGMAxivsF1/kMJdRo4wnakp0zcrVZjDXTxoR6LPtj6Kkuxv3JQFO9jKiw== - dependencies: - "@conveyal/lonlat" "^1.4.1" - "@mapbox/polyline" "^1.1.0" - "@opentripplanner/geocoder" "^1.4.1" - "@styled-icons/foundation" "^10.34.0" - "@turf/along" "^6.0.1" - bowser "^2.7.0" - chroma-js "^2.4.2" - date-fns "^2.28.0" - date-fns-tz "^1.2.2" - graphql "^16.6.0" - lodash.clonedeep "^4.5.0" - lodash.isequal "^4.5.0" - qs "^6.9.1" - "@opentripplanner/types@7.0.0-alpha.2": version "7.0.0-alpha.2" resolved "https://registry.yarnpkg.com/@opentripplanner/types/-/types-7.0.0-alpha.2.tgz#d10c69f99b2da6d1e80ab5989520bde8e558627b" integrity sha512-IzQwBcxkoyM+r/W7u+nzICf/6QnreLKppkrZZNl0yVxFiT6RBOd0U2UxMxLPYuRd/3awQabI3/qQ3/6ZxMWPfA== -"@opentripplanner/types@^7.0.0-alpha.6": - version "7.0.0-alpha.6" - resolved "https://registry.yarnpkg.com/@opentripplanner/types/-/types-7.0.0-alpha.6.tgz#11c1ccfe479ac66a96f5b529728bbdfad58b6a81" - integrity sha512-nck8RRvn4/h0XBwD7ij5OOw/W+fRP4GdJo4XVtUWX4TYjBv5SLRb8T/OpkBkETW63LN5gi/qcrdnIdLg6W1aYA== - "@opentripplanner/types@^7.0.0-alpha.9": version "7.0.0-alpha.9" resolved "https://registry.yarnpkg.com/@opentripplanner/types/-/types-7.0.0-alpha.9.tgz#175ede990d9b08815779a65d4e2bd24c97e3c33d" @@ -6607,11 +6564,6 @@ bottleneck@^2.18.1: resolved "https://registry.yarnpkg.com/bottleneck/-/bottleneck-2.19.5.tgz#5df0b90f59fd47656ebe63c78a98419205cadd91" integrity sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw== -bowser@^2.7.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.11.0.tgz#5ca3c35757a7aa5771500c70a73a9f91ef420a8f" - integrity sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA== - boxen@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50" @@ -7018,9 +6970,9 @@ camelize@^1.0.0: integrity sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs= caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001219: - version "1.0.30001431" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz" - integrity sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ== + version "1.0.30001534" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001534.tgz" + integrity sha512-vlPVrhsCS7XaSh2VvWluIQEzVhefrUQcEsQWSS5A5V+dM07uv1qHeQzAOTGIMy9i3e9bH15+muvI/UHojVgS/Q== capture-exit@^2.0.0: version "2.0.0"