{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./ts/components/Alerts.tsx","webpack:///./ts/models/route.ts","webpack:///./ts/helpers/prediction-helpers.tsx","webpack:///./ts/models/alert.ts","webpack:///./static/images/icon-shuttle-default.svg","webpack:///./static/images/icon-cancelled-default.svg","webpack:///./static/images/icon-snow-default.svg","webpack:///./ts/stop/components/RoutePillList.tsx","webpack:///./ts/schedule/store/ScheduleStore.tsx","webpack:///./ts/schedule/components/direction/reducer.ts","webpack:///./ts/schedule/components/line-diagram/CrowdingPill.tsx","webpack:///./ts/schedule/components/schedule-finder/ScheduleFinderModal.tsx","webpack:///./ts/helpers/fetch.ts","webpack:///./ts/components/Loading.tsx","webpack:///./ts/schedule/components/line-diagram/StopCard.tsx","webpack:////root/deps/phoenix/priv/static/phoenix.js","webpack:///./ts/models/vehicle.ts","webpack:///./ts/schedule/components/ScheduleNote.tsx","webpack:///./static/images/icon-down-arrow.svg","webpack:///./static/images/icon-checkmark.svg","webpack:///./ts/helpers/service.ts","webpack:///./ts/helpers/use-fetch.ts","webpack:///./ts/schedule/components/line-diagram/LineDiagramWithStops.tsx","webpack:///./ts/helpers/keyboard-events.ts","webpack:///./ts/helpers/render-svg.tsx","webpack:///./ts/schedule/components/Map.tsx","webpack:///./static/images/icon-schedule-finder.svg","webpack:///./ts/schedule/components/ScheduleFinder.tsx","webpack:///./ts/schedule/components/schedule-finder/ScheduleFinderForm.tsx","webpack:///./ts/schedule/components/schedule-finder/SelectContainer.tsx","webpack:///./ts/components/SearchBox.tsx","webpack:///./ts/schedule/components/line-diagram/LiveCrowdingIcon.tsx","webpack:///./ts/schedule/components/direction/menu-helpers.ts","webpack:///./ts/schedule/components/line-diagram/graphics/Line.tsx","webpack:///./ts/leaflet/bounds.ts","webpack:///./ts/leaflet/icon.ts","webpack:///./static/images/icon-green-line-small.svg","webpack:///./ts/leaflet/components/Map.tsx","webpack:///./ts/helpers/css.ts","webpack:///./ts/components/ExpandableBlock.tsx","webpack:///./static/images/icon-red-line-small.svg","webpack:///./static/images/icon-orange-line-small.svg","webpack:///./static/images/icon-mattapan-line-small.svg","webpack:///./static/images/icon-mode-commuter-rail-small.svg","webpack:///./static/images/icon-mode-bus-small.svg","webpack:///./static/images/icon-mode-ferry-small.svg","webpack:///./ts/schedule-entry.ts","webpack:///./ts/schedule/schedule-loader.tsx","webpack:///./ts/schedule/components/Channel.ts","webpack:///./static/images/icon-alerts-triangle.svg","webpack:///./ts/schedule/components/ScheduleLoader.tsx","webpack:///./ts/schedule/components/SchedulePage.tsx","webpack:///./ts/schedule/components/PDFSchedules.tsx","webpack:///./static/images/icon-pdf-default.svg","webpack:///./ts/schedule/components/Connections.tsx","webpack:///./ts/schedule/components/ContentTeasers.tsx","webpack:///./ts/schedule/components/HoursOfOperation.tsx","webpack:///./ts/schedule/components/Fares.tsx","webpack:///./ts/schedule/components/UpcomingHolidays.tsx","webpack:///./ts/components/Modal.tsx","webpack:///./ts/models/prediction.ts","webpack:///./ts/helpers/aria-props.ts","webpack:///./ts/schedule/components/schedule-finder/OriginModalContent.tsx","webpack:///./ts/schedule/components/schedule-finder/OriginListItem.tsx","webpack:///./ts/schedule/components/schedule-finder/ScheduleModalContent.tsx","webpack:///./ts/schedule/components/schedule-finder/daily-schedule/DailySchedule.tsx","webpack:///./ts/schedule/components/schedule-finder/daily-schedule/ScheduleTable.tsx","webpack:///./ts/schedule/components/schedule-finder/daily-schedule/TableRow.tsx","webpack:///./ts/helpers/text.ts","webpack:///./ts/schedule/components/schedule-finder/daily-schedule/AccordionRow.tsx","webpack:///./ts/schedule/components/schedule-finder/daily-schedule/TripDetails.tsx","webpack:///./ts/schedule/components/schedule-finder/daily-schedule/TripStop.tsx","webpack:///./ts/schedule/components/schedule-finder/daily-schedule/ServiceOptGroup.tsx","webpack:///./ts/schedule/components/schedule-finder/upcoming-departures/UpcomingDepartures.tsx","webpack:///./static/images/icon-live-clock.svg","webpack:///./ts/schedule/components/schedule-finder/upcoming-departures/LazyAccordion.tsx","webpack:///./ts/schedule/components/schedule-finder/upcoming-departures/TripDetails.tsx","webpack:///./ts/schedule/components/schedule-finder/upcoming-departures/TripStop.tsx","webpack:///./ts/schedule/components/ScheduleDirection.tsx","webpack:///./ts/schedule/components/direction/ScheduleDirectionMenu.tsx","webpack:///./ts/schedule/components/direction/GreenLineMenu.tsx","webpack:///./ts/schedule/components/direction/BusMenu.tsx","webpack:///./ts/schedule/components/direction/ScheduleDirectionButton.tsx","webpack:///./static/images/icon-change-direction.svg","webpack:///./ts/schedule/components/line-diagram/LineDiagram.tsx","webpack:///./ts/hooks/useFilteredList.ts","webpack:///./ts/schedule/components/line-diagram/reducer.ts","webpack:///./ts/schedule/components/line-diagram/StopConnections.tsx","webpack:///./ts/schedule/components/line-diagram/StopPredictions.tsx","webpack:///./ts/components/MatchHighlight.tsx","webpack:///./ts/schedule/components/line-diagram/StopFeatures.tsx","webpack:///./ts/schedule/components/line-diagram/graphics/Diagram.tsx","webpack:///./ts/schedule/components/line-diagram/graphics/Merge.tsx","webpack:///./ts/schedule/components/line-diagram/graphics/Stop.tsx","webpack:///./ts/schedule/components/line-diagram/VehicleIcons.tsx","webpack:///./ts/schedule/components/line-diagram/StopListWithBranches.tsx","webpack:///./ts/schedule/components/line-diagram/ExpandableBranch.tsx","webpack:///./ts/schedule/components/line-diagram/graphics/useStopPositions.ts","webpack:///./ts/helpers/date.ts","webpack:///./ts/schedule/components/line-diagram/graphics/graphic-helpers.tsx","webpack:///./static/images/icon-green-line-b-small.svg","webpack:///./static/images/icon-green-line-c-small.svg","webpack:///./static/images/icon-green-line-d-small.svg","webpack:///./static/images/icon-green-line-e-small.svg","webpack:///./ts/schedule/components/line-diagram/line-diagram-helpers.ts","webpack:///./ts/helpers/icon.tsx","webpack:///./static/images/icon-accessible-small.svg","webpack:///./static/images/icon-blue-line-default.svg","webpack:///./static/images/icon-mode-subway-default.svg","webpack:///./static/images/icon-parking-small.svg","webpack:///./static/images/icon-silver-line-small.svg","webpack:///./static/images/icon-vehicle-bordered-expanded.svg","webpack:///./static/images/icon-search-reverse-default.svg","webpack:///./static/images/icon-crowding.svg"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","installedChunks","push","Object","prototype","hasOwnProperty","call","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","7","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","react_1","__importStar","keyboard_events_1","icon_1","render_svg_1","__importDefault","icon_shuttle_default_svg_1","icon_cancelled_default_svg_1","icon_snow_default_svg_1","icon_alerts_triangle_svg_1","alertClassNames","_a","expanded","classNames","priority","description","iconForAlert","effect","humanLifecycle","lifecycle","humanLabelForAlert","severity","alertLabel","alert","alertClasses","createElement","className","join","effectNameForAlert","split","map","word","charAt","toUpperCase","alertDescription","tabIndex","role","aria-labelledby","id","ref","panel","focus","dangerouslySetInnerHTML","__html","updated_at","Alert","_b","useState","toggleExpanded","onClick","strippedAlertUrl","url","replace","headerContent","header","onKeyPress","e","handleReactEnterKeyPress","aria-expanded","noDescription","caret","caretIcon","alerts","isABusRoute","type","isCommuterRailRouteType","isACommuterRailRoute","routeOrType","isAGreenLineRoute","startsWith","isASilverLineRoute","routeOrRouteId","includes","prediction_1","timeForCommuterRail","delay","prediction","scheduledTime","scheduled_time","Fragment","time","delayForCommuterRail","statusForCommuterRail","status","isSkippedOrCancelled","trackForCommuterRail","track","isHighSeverityOrHighPriority","isDiversion","withLeadingZero","isCurrentAlert","currentDate","Date","active_period","isInARange","ap","datePattern","match","exec","year","rawMonth","rawDay","rawHour","min","some","range","start","end","text_1","css_1","modeBgClass","route","routeToCSSClass","busName","modeNameForBg","RoutePill","href","breakTextAtSlash","routes","showGroupName","typedRoute","group_name","routeWithDirections","redux_1","scheduleStoreReducer","state","action","newState","assign","selectedDirection","undefined","selectedOrigin","modalOpen","modalMode","__assign","newStoreValues","createScheduleStore","directionId","createStore","store","getCurrentState","getState","storeHandler","newValues","dispatch","mapStateToProps","use_query_params_1","toggleDirectionAction","setRoutePatternAction","routePattern","payload","toggleRoutePatternMenuAction","closeRoutePatternMenuAction","showAllRoutePatternsAction","updateDirectionAndVariantInURL","routePatternId","query","schedule_direction[direction_id]","toString","schedule_direction[variant]","newLoc","updateInLocation","location","history","replaceState","pathname","search","menuReducer","nextDirection","defaultRoutePatternForDirection","routePatternsByDirection","shape","shapesById","shape_id","itemFocus","toggleDirection","routePatternMenuOpen","toggleRoutePatternMenu","routePatternMenuAll","showAllRoutePatterns","newRoutePattern","setRoutePattern","vehicle_1","crowding","crowdingIcon","crowdingDescriptions","Modal_1","OriginModalContent_1","ScheduleModalContent_1","scheduleOrigin","closeModal","directionChanged","initialMode","initialDirection","initialOrigin","originChanged","scheduleNote","services","stops","today","updateURL","handleOriginSelectClick","handleChangeDirection","newDirection","handleChangeOrigin","newOrigin","direction","origin","focusElementId","ariaLabel","label","direction_names","originModalContent","reducer","isLoading","error","route_1","line_diagram_helpers_1","StopConnections_1","StopPredictions_1","alert_1","MatchHighlight_1","StopFeatures_1","LineDiagramWithStops_1","Alerts_1","props","stop","_onClick","liveData","searchQuery","stopData","stop_data","routeStop","route_stop","stopAlerts","isOrigin","isTerminus","isDestination","width","isMergeStop","diagramWidth","refs","useContext","StopRefContext","diversionAlert","find","hasLivePredictions","headsigns","hasPredictionTime","showPrediction","showDiversion","style","paddingLeft","branch","hasBranchLabel","lineName","filter","alertIcon","text","matchQuery","connections","isCommuterRail","_typeof","Phoenix","this","Function","eval","iterator","constructor","TypeError","a","configurable","writable","b","R","w","C","S","u","self","h","f","connecting","open","closing","closed","errored","joined","joining","leaving","v","close","reply","leave","y","g","longpoll","websocket","k","channel","event","receivedResp","timeout","timeoutTimer","recHooks","sent","reset","send","hasReceived","startTimeout","socket","topic","join_ref","joinRef","response","callback","cancelRefEvent","refEvent","forEach","off","clearTimeout","cancelTimeout","makeRef","replyEventName","on","matchReceive","setTimeout","trigger","params","bindings","bindingRef","joinedOnce","joinPush","pushBuffer","rejoinTimer","T","rejoinUntilConnected","reconnectAfterMs","receive","onClose","hasLogger","log","concat","remove","onError","isLeaving","isClosed","scheduleTimeout","isJoining","isConnected","rejoin","arguments","Error","isJoined","canPush","indexOf","isLifecycleEvent","resend","sendJoin","onMessage","encode","JSON","stringify","decode","Array","isArray","next","done","parse","stateChangeCallbacks","message","channels","sendBuffer","transport","WebSocket","defaultEncoder","defaultDecoder","heartbeatIntervalMs","logger","longpollerTimeout","endPoint","heartbeatTimer","pendingHeartbeatRef","reconnectTimer","teardown","connect","protocol","appendParams","vsn","host","console","conn","endPointURL","onopen","onConnOpen","onerror","onConnError","onmessage","onConnMessage","onclose","onConnClose","flushSendBuffer","resetHeartbeat","skipHeartbeat","clearInterval","setInterval","sendHeartbeat","triggerChanError","code","readyState","connectionState","isMember","token","pollEndpoint","normalizeEndpoint","poll","RegExp","closeAndRetry","request","endpointURL","ontimeout","messages","XDomainRequest","xdomainRequest","XMLHttpRequest","ActiveXObject","xhrRequest","onload","parseJSON","responseText","onprogress","setRequestHeader","onreadystatechange","states","complete","serialize","encodeURIComponent","keys","events","diff","pendingDiffs","caller","onJoin","onLeave","onSync","syncState","syncDiff","inPendingSyncState","list","clone","metas","phx_ref","joins","leaves","unshift","from","getOwnPropertyNames","timerCalc","timer","tries","define","__WEBPACK_AMD_DEFINE_RESULT__","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","vehicleName","routeType","0","1","2","3","4","vehicleRealtimeStatusText","in_transit","incoming","stopped","not_crowded","some_crowding","crowded","icon_schedule_finder_svg_1","service","serviceTime","peakOffPeakTimes","peakService","offpeakService","exceptions","offpeak","except","offPeak","exception","peak_service","offpeak_service","alternateText","alternate_text","alternateNote","ServiceGroupNames","lodash_1","date_1","serviceStartDateComparator","service1","service2","stringToDateObject","start_date","getTime","isInCurrentService","serviceStartDate","serviceEndDate","end_date","isInCurrentRating","rating_start_date","ratingStartDate","rating_end_date","ratingEndDate","isCurrentValidService","added_dates","dateObjectToString","isInAddedDates","removed_dates","isInRemovedDates","currentDay","getDay","valid_days","isOnValidDay","startToEnd","startDateObject","endDateObject","shortDate","isInFutureService","isInFutureRating","areSimilarServices","every","isEqual","dedupeServices","uniqWith","groupServicesByDateRating","groupBy","typicality","HOLIDAY","OTHER","CURRENT","FUTURE","rating_description","optGroupOrder","serviceTypeOrder","weekday","saturday","sunday","other","serviceTypicalityOrder","unplanned_disruption","planned_disruption","holiday_service","extra_service","typical_service","unknown","serviceComparator","type1","validDays1","typicality1","date1","type2","validDays2","typicality2","date2","optGroupComparator","groupA","groupB","optGroupNames","values","hasMultipleWeekdaySchedules","dayIntegerToString","day","serviceDays","validDays","daysAreConsecutive","days","nextDay","rest","FetchStatus","isNotStarted","NotStarted","Loading","hasData","Data","gotError","parseJsonResponse","ok","json","statusText","fetch","fetcher","parser","then","useReducer","Diagram_1","StopListWithBranches_1","useStopPositions_1","StopCard_1","createContext","handleStopClick","stopRefsMap","updateAllStopCoords","anyCrowding","time_data_with_crowding_list","Provider","lineDiagram","hasBranchLines","isEnter","isEscape","handleNativeEnterKeyPress","cb","keyCode","handleNativeEscapeKeyPress","handleReactExitKeyPress","svgText","ariaHide","aria-hidden","Channel_1","Map_1","bounds_1","CrowdingPill_1","iconOpts","icon","icon_size","icon_anchor","updateMarker","marker","tooltip","vehicle_crowding","tooltip_text","icon_opts","z_index","shouldVehicleDisplay","shapeIdsInDirection","shapeId","actionWithChannel","shapeIds","markers","isVehicleMarker","idHash","reduce","acc","bounds","useRef","useEffect","initChannel","setupChannels","stopChannel","stopChannels","stopMarkers","stop_markers","mapData","current","ScheduleFinderForm_1","ScheduleFinderModal_1","ScheduleStore_1","changeDirection","changeOrigin","onDirectionChange","onOriginChange","onOriginSelectClick","onSubmit","modalIsOpen","stopsByDirection","SelectContainer_1","directionInfo","directionNames","directionDestinations","direction_destinations","_c","originError","setOriginError","preventDefault","onChange","parseInt","target","dir","handleClick","icon_down_arrow_svg_1","children","onKeyUp","labelText","placeholder","setQuery","htmlFor","aria-label","searchIcon","TooltipWrapper","tooltipText","toLowerCase","tooltipOptions","placement","animation","html","routePatternIds","targetElId","shiftKey","nextIndex","currentId","index","nextRoutePatternIndex","nextElId","document","getElementById","prevIndex","prevRoutePatternIndex","prevElId","react_redux_1","graphic_helpers_1","to","fromCoords","useSelector","toCoords","x1","y1","y2","areOnDifferentBranchLines","lineProps","strokeWidth","BASE_LINE_WIDTH","x2","sd","stroke","branchLine","branchIndex","isBranchTerminusStop","BRANCH_LINE_WIDTH","BRANCH_SPACING","leaflet_1","points","latLng","latitude","longitude","latLngBounds","defaultIconOpts","iconAnchor","iconSize","popupAnchor","opts","popup_anchor","Icon","iconUrl","iconRetinaUrl","fast_deep_equal_1","defaultZoomOpts","maxZoom","minZoom","scrollWheelZoom","touchAction","memo","boundsByMarkers","defaultCenter","default_center","polylines","tileServerUrl","tile_server_url","zoom","leaflet","buildIcon_1","FullscreenControl","getBounds","Map","Marker_1","Marker","Polyline_1","Polyline","Popup_1","Popup","TileLayer","boundsOrByMarkers","position","mapCenter","nonNullZoom","center","attribution","polyline","Math","floor","random","positions","color","weight","dashArray","lineCap","lineJoin","_ref","markerEl","leafletElement","angle","rotation_angle","setRotationAngle","zIndexOffset","keyboard","maxHeight","busClass","routeToModeName","routeBgClass","iconSvgText","notifyExpanded","initiallyExpanded","initiallyFocused","panelClassName","preventScroll","initialState","focused","hookedState","headerId","panelId","aria-controls","react_dom_1","ScheduleLoader_1","newQuery","schedule_finder[direction_id]","schedule_finder[origin]","renderSchedulePage","schedulePageData","schedule_note","render","component","scheduleFinderRoot","renderDirectionOrMap","root","currentState","renderDirectionAndMap","route_patterns","direction_id","mapDataEl","getAttribute","mapEl","innerHTML","renderMap","schedulePageDataEl","routePatterns","isEmpty","phoenix_1","doInitChannel","Socket","reason","route_id","channelId","onData","SchedulePage_1","ScheduleNote_1","ScheduleDirection_1","ScheduleFinder_1","ScheduleLoader","useQueryParams","line_diagram","shape_map","initialSelectedRoutePatternId","variant","currentDirection","readjustedDirectionId","staticMapData","staticDataEl","PDFSchedules_1","Connections_1","ContentTeasers_1","HoursOfOperation_1","Fares_1","UpcomingHolidays_1","pdfs","teasers","hours","fares","holidays","fareLink","fare_link","ExpandableBlock_1","icon_pdf_default_svg_1","pdf","rel","title","link","RoutePillList_1","fare","price","holiday","date","focus_trap_1","aria_props_1","ModalContent","closeText","bodyPadding","scrollBarPadding","asideRef","scrollRef","scrollTo","top","useLayoutEffect","trap","initialFocus","clickOutsideDeactivates","activate","htmlElement","getElementsByTagName","bodyWrapper","setAttribute","classList","add","paddingRight","deactivate","createPortal","aria-modal","labelOrDescribedBy","onKeyDown","onClickAway","body","Modal","_d","priorPadding","innerWidth","clientWidth","schedule_relationship","timeDataList","time_data","isLabel","elementId","OriginListItem_1","SearchBox_1","originSearch","setOriginSearch","trim","cleanSearch","regExp","stopListSearchFilter","lastStop","icon_checkmark_svg_1","isDisabled","is_closed","zone","fetch_1","service_1","DailySchedule_1","UpcomingDepartures_1","fetchData","routeId","serviceToday","input","formattedDate","stopId","Loading_1","use_fetch_1","ScheduleTable_1","ServiceOptGroup_1","fetchJourneys","selectedService","isCurrent","parseResults","SchedulesSelect","sortedServices","todayServiceId","defaultSelectedServiceId","todayDate","onSelectService","servicesByOptGroup","defaultValue","sort","group","groupedServices","multipleWeekdays","DailySchedule","fetchState","currentServices","defaultSelectedService","setSelectedService","getJourneysForSelectedService","chosenService","journeys","TableRow_1","isSchoolTrip","routePatternsById","time_desc","accumulator","anySchoolTrips","trip","route_pattern_id","firstTrip","lastTrip","departure","scope","colSpan","journey","AccordionRow_1","TripDetails_1","fetchTripInfo","tripId","BusTableRow","modeIcon","backgroundClass","RouteIcon","headsign","CrTableRow","Accordion","contentComponent","setExpanded","toggle","showFare","str","TripStop_1","TripSummary","tripInfo","times","duration","TripDetailsTable","vehicle","schedule","allTimesHaveSchedule","route_type","ErrorLoadingTrip","formattedDepartureTimes","isMultipleWeekday","startDate","endDate","optionText","added_dates_notes","entries","entry","addedDate","addedNote","_this","prediction_helpers_1","icon_live_clock_svg_1","LazyAccordion_1","LiveCrowdingIcon_1","RoutePillSmall","crowdingInformation","showCrowding","trip_id","realtime","statusWithTrain","x","TableRow","adjustedState","AccordionRow","UpcomingDeparturesHeader","__awaiter","Promise","all","adjustedRoute","res","upcomingDeparturesTable","journeysWithTripInfo","someCrowdingInfoExists","idx","UpcomingDepartures","stateFromProps","origin_1","retrievedJourneysWithTripInfo","hasAPrediction","errorLoadingTrip","departures","ScheduleDirectionMenu_1","ScheduleDirectionButton_1","reducer_1","LineDiagram_1","fetchMapData","currentRoutePatternIdForData","baseURL","fetchLineData","routePatternsInCurrentDirection","defaultRoutePattern","reverseDirection","directionIsChangeable","mapState","dispatchMapData","currentShapeId","lineState","dispatchLineData","selectedRoutePatternId","menuOpen","src","img_src","alt","pdf_url","GreenLineMenu_1","BusMenu_1","clickToClose","closest","keyToClose","addEventListener","removeEventListener","BusMenuSelect","GreenLineSelect","ExpandedBusMenu","ExpandedGreenMenu","menu_helpers_1","icon_green_line_b_small_svg_1","icon_green_line_c_small_svg_1","icon_green_line_d_small_svg_1","icon_green_line_e_small_svg_1","icon_green_line_small_svg_1","greenRoutes","GreenLineItem","routeIds","selected","selectedClass","aria-current","item","greenRoute","RoutePatternItem","duplicated","UncommonDestinationsItem","hasMoreRoutePatterns","isDuplicateHeadsign","compareRoutePattern","filterRule","focusIndex","findIndex","determineFocusIndex","toggleButtonIds","isMenuClickable","linkClass","routePatternNameById","icon_change_direction_svg_1","swr_1","useFilteredList_1","stationsOrStops","lineDiagramReducer","lineDiagramCoordStore","createLineDiagramCoordStore","schedule_direction[origin]","useCallback","isBeginning","reversedDirectionId","stopQuery","setStopQuery","filteredStops","refreshInterval","filteredList","setFilteredList","listQuery","setListQuery","results","string","firstCRIndex","connection","firstFerryIndex","filteredConnections","connectingRoute","predictions","liveHeadsigns","enhancedTimeData","predictedOrScheduledTime","predictionTimeClass","predicted_schedule","texts","train_number","predictionTexts","capitalize","childNodes","setChildNodes","matched","precedingText","subsequentText","stop_features","parkingIcon","accessibleIcon","Line_1","Merge_1","Stop_1","VehicleIcons_1","LiveVehicleIconSet","vehicleData","vehicles","max","ld","xmlns","height","left","destinations","names","diagramDescription","mergeStop","branchingDescription","DiagonalHatchPattern","branchingOutward","getTreeDirection","stopGaps","lineDiagramIndexes","isStopOnMainLine","last","lineDiagramCoords","mergeBends","mergeStopIndex","mergeStopCoords","downBranch","first","nextStop","terminus","mX","mY","dx","abs","MERGE_RADIUS","dy","arc","pathProps","coords","CIRC_RADIUS","cx","cy","server_1","stopName","baseText","trip_name","CrowdingIconString","renderToString","tooltips","vehicleArrowIcon","ExpandableBranch_1","Branch","branchedDiagram","toggledStopIndices","__rest","lineDiagramWithBranches","isOnBranchLine","stopOrStops","BranchToggle","isExpanded","maxBranches","transform","CIRC_DIAMETER","rx","setIsExpanded","blockIsExpanded","useStopRef","prev","stopById","xCoordForStop","dispatchStopCoords","useDispatch","updateAllStops","coordinates","offsetTop","offsetHeight","unformatted","month","getFullYear","getMonth","getDate","toLocaleDateString","timeZone","coordReducer","allCoordinates","initialCoordState","__REDUX_DEVTOOLS_EXTENSION__","patternTransform","patternUnits","isOnBranch","isTerminusStop","subsetFn","mergeIndices_1","icon_accessible_small_svg_1","icon_blue_line_default_svg_1","icon_mode_bus_small_svg_1","icon_mode_commuter_rail_small_svg_1","icon_mode_ferry_small_svg_1","icon_mode_subway_default_svg_1","icon_mattapan_line_small_svg_1","icon_orange_line_small_svg_1","icon_parking_small_svg_1","icon_red_line_small_svg_1","icon_silver_line_small_svg_1","icon_vehicle_bordered_expanded_svg_1","icon_search_reverse_default_svg_1","icon_crowding_svg_1","blueLineIcon","busIcon","commuterRailIcon","ferryIcon","genericSubwayIcon","greenLineIcon","greenBLineIcon","greenCLineIcon","greenDLineIcon","greenELineIcon","mattapanLineIcon","orangeLineIcon","redLineIcon","silverLineIcon","unicodeCharacter","defaultTooltipOptions","options","Tag","data-toggle","data-trigger","data-placement","data-animation","data-html","data-selector","data-original-title"],"mappings":"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","file":"./schedule-a6ebf5e4b9d2e4a49e5f35f328f00305.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t7: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([539,0,1]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import React, { ReactElement, useState } from \"react\";\nimport { Alert as AlertType, Lifecycle } from \"../__v3api\";\nimport { handleReactEnterKeyPress } from \"../helpers/keyboard-events\";\nimport { caret } from \"../helpers/icon\";\nimport renderSVG from \"../helpers/render-svg\";\nimport shuttleIcon from \"../../static/images/icon-shuttle-default.svg\";\nimport cancelIcon from \"../../static/images/icon-cancelled-default.svg\";\nimport snowIcon from \"../../static/images/icon-snow-default.svg\";\nimport alertIcon from \"../../static/images/icon-alerts-triangle.svg\";\n\ninterface Props {\n  alerts: AlertType[];\n}\n\nconst alertClassNames = (\n  { priority, description }: AlertType,\n  expanded: boolean\n): string => {\n  const classNames = `c-alert-item c-alert-item--${priority}`;\n  if (description) {\n    if (expanded) {\n      return `${classNames} c-alert-item--expandable c-alert-item--open`;\n    }\n    return `${classNames} c-alert-item--expandable c-alert-item--closed`;\n  }\n  return classNames;\n};\n\nexport const iconForAlert = ({\n  priority,\n  effect\n}: AlertType): ReactElement<HTMLElement> | null => {\n  if (priority === \"low\") return null;\n  if (priority === \"system\")\n    return renderSVG(\"c-svg__icon-alerts-triangle\", alertIcon);\n  switch (effect) {\n    case \"suspension\":\n    case \"cancellation\":\n      return renderSVG(\"c-svg__icon-cancelled-default\", cancelIcon);\n    case \"snow_route\":\n      return renderSVG(\"c-svg__icon-snow-default\", snowIcon);\n    case \"shuttle\":\n      return renderSVG(\"c-svg__icon-shuttle-default\", shuttleIcon);\n    default:\n      return renderSVG(\"c-svg__icon-alerts-triangle\", alertIcon);\n  }\n};\n\nconst humanLifecycle = (lifecycle: Lifecycle): string | null => {\n  switch (lifecycle) {\n    case \"new\":\n    case \"unknown\":\n      return null;\n    case \"upcoming\":\n    case \"ongoing_upcoming\":\n      return \"Upcoming\";\n    case \"ongoing\":\n      return \"Ongoing\";\n    default:\n      return null;\n  }\n};\n\nexport const humanLabelForAlert = ({\n  effect,\n  severity,\n  lifecycle\n}: AlertType): string | null => {\n  if (effect === \"delay\") {\n    switch (severity) {\n      case 0:\n      case 1:\n      case 2:\n        return null;\n      case 3:\n        return \"up to 10 minutes\";\n      case 4:\n        return \"up to 15 minutes\";\n      case 5:\n        return \"up to 20 minutes\";\n      case 6:\n        return \"up to 25 minutes\";\n      case 7:\n        return \"up to 30 minutes\";\n      case 8:\n        return \"30+ minutes\";\n      case 9:\n        return \"more than an hour\";\n      default:\n        return humanLifecycle(lifecycle);\n    }\n  }\n  return humanLifecycle(lifecycle);\n};\n\nexport const alertLabel = (alert: AlertType): ReactElement<HTMLElement> => {\n  const alertClasses = [\"u-small-caps\", \"c-alert-item__badge\"];\n  if (alert.priority === \"system\") {\n    alertClasses.push(\"c-alert-item__badge--system\");\n  }\n  if (\n    alert.lifecycle === \"upcoming\" ||\n    alert.lifecycle === \"ongoing_upcoming\"\n  ) {\n    alertClasses.push(\"c-alert-item__badge--upcoming\");\n  }\n  return (\n    <span className={alertClasses.join(\" \")}>{humanLabelForAlert(alert)}</span>\n  );\n};\n\nexport const effectNameForAlert = (alert: AlertType): string =>\n  alert.effect\n    .split(\"_\")\n    .map(word => word.charAt(0).toUpperCase() + word.slice(1))\n    .join(\" \");\n\nconst caretIcon = (\n  noDescription: boolean,\n  expanded: boolean\n): ReactElement<HTMLElement> | null => {\n  if (noDescription) return null;\n  return caret(\"c-expandable-block__header-caret--black\", expanded);\n};\n\nconst alertDescription = (alert: AlertType): ReactElement<HTMLElement> => (\n  <div\n    className={`c-alert-item__bottom c-alert-item__buttom--${alert.priority}`}\n    // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex\n    tabIndex={0}\n    role=\"region\"\n    aria-labelledby={`alert-${alert.id}`}\n    ref={panel => panel && panel.focus()}\n  >\n    <div className=\"c-alert-item__description\">\n      <div\n        // eslint-disable-next-line react/no-danger\n        dangerouslySetInnerHTML={{\n          __html: alert.description\n        }}\n      />\n      <div className=\"c-alert-item__updated\">{alert.updated_at}</div>\n    </div>\n  </div>\n);\n\nconst Alert = ({ alert }: { alert: AlertType }): ReactElement<HTMLElement> => {\n  const [expanded, toggleExpanded] = useState(false);\n  const onClick = (): void => toggleExpanded(!expanded);\n\n  const alertUrl = alert.url ? alert.url : \"\";\n\n  // remove [http:// | https:// | www.] from alert URL:\n  let strippedAlertUrl = alertUrl.replace(/(https?:\\/\\/)?(www\\.)?/i, \"\");\n\n  // capitalize 'mbta' (special case):\n  strippedAlertUrl = strippedAlertUrl.replace(/mbta/gi, \"MBTA\");\n\n  const headerContent = alert.url\n    ? `${alert.header}<span>&nbsp;</span><a href=\"${\n        alert.url\n      }\" target=\"_blank\">${strippedAlertUrl}</a>`\n    : alert.header;\n\n  return (\n    <li\n      id={`alert-${alert.id}`}\n      tabIndex={0}\n      className={alertClassNames(alert, expanded)}\n      onClick={onClick}\n      onKeyPress={e => handleReactEnterKeyPress(e, onClick)}\n      aria-expanded={expanded}\n      // eslint-disable-next-line jsx-a11y/no-noninteractive-element-to-interactive-role\n      role=\"button\"\n    >\n      <div className=\"c-alert-item__icon\">{iconForAlert(alert)}</div>\n      <div className=\"c-alert-item__top\">\n        <div className=\"c-alert-item__top-text-container\">\n          <div className=\"c-alert-item__effect\">\n            {`${effectNameForAlert(alert)} `}\n            {humanLabelForAlert(alert) ? alertLabel(alert) : null}\n          </div>\n          {/* eslint-disable-next-line react/no-danger */}\n          <div dangerouslySetInnerHTML={{ __html: headerContent }} />\n        </div>\n        <div className=\"c-alert-item__top-caret-container\">\n          {caretIcon(alert.description === \"\", expanded)}\n        </div>\n      </div>\n      {expanded && alert.description ? alertDescription(alert) : null}\n      {/* No javascript support */}\n      {alert.description ? (\n        <noscript>{alertDescription(alert)}</noscript>\n      ) : null}\n    </li>\n  );\n};\n\nconst Alerts = ({ alerts }: Props): ReactElement<HTMLElement> => (\n  <div className=\"container\">\n    <div className=\"page-section\">\n      <ul className=\"c-alert-group\">\n        {alerts.map((alert: AlertType) => (\n          <Alert key={alert.id} alert={alert} />\n        ))}\n      </ul>\n    </div>\n  </div>\n);\n\nexport default Alerts;\n","import { Route, RouteType } from \"../__v3api\";\n\nconst isRouteType = (obj: Route | RouteType): obj is RouteType =>\n  typeof obj === \"number\";\n\nexport const isABusRoute = ({ type }: Route): boolean => type === 3;\n\nconst isCommuterRailRouteType = (type: RouteType): boolean => type === 2;\n\nexport const isACommuterRailRoute = (routeOrType: Route | RouteType): boolean =>\n  isRouteType(routeOrType)\n    ? isCommuterRailRouteType(routeOrType)\n    : isCommuterRailRouteType(routeOrType.type);\n\nexport const isAGreenLineRoute = ({ id }: Route): boolean =>\n  id.startsWith(\"Green\");\n\nexport const isASilverLineRoute = (routeOrRouteId: Route | string): boolean => {\n  const id =\n    typeof routeOrRouteId === \"string\" ? routeOrRouteId : routeOrRouteId.id;\n  return [\"741\", \"742\", \"743\", \"746\", \"749\", \"751\"].includes(id);\n};\n","import React, { ReactElement } from \"react\";\nimport { PredictedOrScheduledTime } from \"../__v3api\";\nimport { isSkippedOrCancelled } from \"../models/prediction\";\nimport { TripPrediction } from \"../schedule/components/__trips\";\n\nconst delayForCommuterRail = (\n  data: PredictedOrScheduledTime,\n  className = \"\"\n): ReactElement<HTMLElement> => (\n  <>\n    <div className={`${className ? `${className}--delayed` : \"\"}`}>\n      {data.scheduled_time!.join(\"\")}\n    </div>\n    <div className={className}>\n      {data.prediction && data.prediction.time.join(\"\")}\n    </div>\n  </>\n);\n\nexport const timeForCommuterRail = (\n  data: PredictedOrScheduledTime,\n  className = \"\"\n): ReactElement<HTMLElement> => {\n  const { delay, prediction, scheduled_time: scheduledTime } = data;\n\n  if (delay >= 5 && prediction) {\n    return delayForCommuterRail(data, className);\n  }\n\n  const time = prediction ? prediction.time : scheduledTime;\n\n  return <div className={className}>{time!.join(\"\")}</div>;\n};\n\nexport const statusForCommuterRail = ({\n  delay,\n  scheduled_time: scheduledTime,\n  prediction\n}: PredictedOrScheduledTime): string | null => {\n  // If there is a human-entered status string, prioritize that\n  if (prediction && prediction.status) return prediction.status;\n\n  if (isSkippedOrCancelled((prediction as unknown) as TripPrediction))\n    return \"Canceled\";\n\n  // Indicate \"Delayed\" if train is delayed 5+ minutes\n  if (delay >= 5) return `Delayed ${delay} min`;\n\n  // Indicate \"On time\" if train otherwise has a prediction\n  // Indicate \"Scheduled\" if train is not \"Delayed\" and we have a scheduled time\n  // (even if there is no real-time prediction)\n  if (scheduledTime && prediction) return \"On time\";\n  if (scheduledTime) return \"Scheduled\";\n\n  // We have just a prediction with no scheduled time, so we can't say whether\n  // the train is on time, delayed, etc.\n  return null;\n};\n\nexport const trackForCommuterRail = ({\n  prediction\n}: PredictedOrScheduledTime): string =>\n  prediction && prediction.track ? ` track ${prediction.track}` : \"\";\n","import { Alert, TimePeriodPairs } from \"../__v3api\";\n\nexport const isHighSeverityOrHighPriority = ({\n  priority,\n  severity\n}: Alert): boolean => priority === \"high\" || severity >= 7;\n\nexport const isDiversion = ({ effect }: Alert): boolean =>\n  effect === \"shuttle\" ||\n  effect === \"stop_closure\" ||\n  effect === \"station_closure\" ||\n  effect === \"detour\";\n\nconst withLeadingZero = (n: string): string => `0${n}`.slice(-2);\n\nconst activePeriodToDates = (\n  activePeriod: TimePeriodPairs\n): (Date | null)[] => {\n  const datePattern = /^(\\d{4})-(\\d{1,2})-(\\d{1,2})\\s(\\d{1,2}):(\\d{2})$/;\n\n  return activePeriod.map(\n    (d: string): Date | null => {\n      const match = datePattern.exec(d);\n      if (match) {\n        const [, year, rawMonth, rawDay, rawHour, min] = match;\n        return new Date(\n          `${year}-${withLeadingZero(rawMonth)}-${withLeadingZero(\n            rawDay\n          )}T${withLeadingZero(rawHour)}:${min}:00`\n        );\n      }\n      return null;\n    }\n  );\n};\n\nconst isCurrentLifecycle = ({ lifecycle }: Alert): boolean =>\n  lifecycle === \"new\" ||\n  lifecycle === \"ongoing\" ||\n  lifecycle === \"ongoing_upcoming\";\n\nexport const isCurrentAlert = (\n  alert: Alert,\n  currentDate: Date = new Date()\n): boolean => {\n  if (!alert.active_period) return false;\n  const dateRanges = alert.active_period.map(ap => activePeriodToDates(ap));\n  const isInARange = dateRanges.some(\n    (range): boolean => {\n      const [start, end] = range;\n      if (!start) return false; // end might be null for ongoing alerts\n      return currentDate >= start && (end ? currentDate <= end : true);\n    }\n  );\n  return isCurrentLifecycle(alert) && isInARange;\n};\n","module.exports = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 48 48\\\"><title>shuttle</title><path fill=\\\"#1c1e23\\\" d=\\\"M42.95 21.61L41.108 6.98c-.468-2.64-2.115-3.67-4.566-4.75A39.044 39.044 0 0 0 24.015-.09a39.217 39.217 0 0 0-12.548 2.32C9.047 3.29 7.4 4.34 6.902 6.98L5.05 21.61v20.24H8.3v3.525A2.655 2.655 0 0 0 10.969 48a2.655 2.655 0 0 0 2.67-2.625V41.85h20.82v3.525a2.67 2.67 0 0 0 5.338 0V41.85h3.152zm-26.734-18h15.66a1.18 1.18 0 1 1 0 2.36h-15.66a1.18 1.18 0 1 1 0-2.36zm-7.8 17.57L9.943 9.63a1.524 1.524 0 0 1 1.525-1.25h25.29a1.513 1.513 0 0 1 1.515 1.25l1.525 11.55a1.318 1.318 0 0 1 0 .4v.08a1.496 1.496 0 0 1-1.525 1.49H9.87a1.51 1.51 0 0 1-1.454-1.57 1.318 1.318 0 0 1 0-.4zm2.553 14.41a2.795 2.795 0 1 1 2.837-2.8 2.817 2.817 0 0 1-2.837 2.8zm26.153 0a2.795 2.795 0 1 1 2.848-2.8 2.817 2.817 0 0 1-2.848 2.8z\\\"></path></svg>\"","module.exports = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 48 48\\\"><title>cancelled</title><path fill=\\\"#1c1e23\\\" d=\\\"M14.29 0h19.43a1.05 1.05 0 0 1 .71.29l13.28 13.28a1.05 1.05 0 0 1 .29.71V33.2a1 1 0 0 1-.28.69l-13.29 13.8a1 1 0 0 1-.72.31H14.28a1.05 1.05 0 0 1-.71-.29L.29 34.43a1.05 1.05 0 0 1-.29-.71V14.8a1 1 0 0 1 .28-.69L13.57.31a1 1 0 0 1 .72-.31z\\\"></path><path fill=\\\"#fff\\\" d=\\\"M12.28 15.76l3.43-3.47a1 1 0 0 1 1.39 0l6.9 6.84 6.89-6.84a1 1 0 0 1 1.4 0l3.43 3.47a1 1 0 0 1 0 1.39L28.81 24l6.9 7a1 1 0 0 1 0 1.4l-3.4 3.33a1 1 0 0 1-1.39 0l-6.91-7-6.91 7a1 1 0 0 1-1.39 0l-3.4-3.33a1 1 0 0 1 0-1.4l6.9-7-6.9-6.85a1 1 0 0 1-.03-1.39z\\\"></path></svg>\"","module.exports = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 48 48\\\"><title>snow</title><path fill=\\\"#1c1e23\\\" d=\\\"M20.27 16.87l-6.54-3.81-1.56-5.86A1 1 0 0 0 11 6.5L5.92 7.87a1 1 0 0 0-.69 1.21l1 3.95-3.89 1.06a1 1 0 0 0-.69 1.22L3 20.4a1 1 0 0 0 1.2.7l6.12-1.66 6.35 3.7-5.78 3.37-7.19-1.94a1 1 0 0 0-1.2.7l-1.35 5.09a1 1 0 0 0 .69 1.21l4.44 1.2-1.22 4.6a1 1 0 0 0 .69 1.21L10.8 40a1 1 0 0 0 1.2-.7l1.58-5.94 6.69-3.89v7.71l-5.33 5.32a1 1 0 0 0 0 1.4l3.7 3.73a1 1 0 0 0 1.39 0L23.61 44l3.67 3.7a1 1 0 0 0 1.39 0l3.7-3.7a1 1 0 0 0 0-1.39l-4.92-5v-8.19l7.29 4.24 1.49 5.59a1 1 0 0 0 1.2.7l5-1.37a1 1 0 0 0 .7-1.21l-1.24-4.66 4.23-1.14a1 1 0 0 0 .7-1.21l-1.32-5.09a1 1 0 0 0-1.2-.7l-7.38 2-5.87-3.42 6.63-3.86 6.73 1.82a1 1 0 0 0 1.2-.7l1.39-5.1a1 1 0 0 0-.7-1.22l-4-1.07 1.05-3.94a1 1 0 0 0-.69-1.21l-5-1.37a1 1 0 0 0-1.2.7L35 12.47l-7.55 4.4V10.7l4.92-4.95a1 1 0 0 0 0-1.4L28.67.63a1 1 0 0 0-1.39 0l-3.52 3.55L20 .41a1 1 0 0 0-1.39 0l-3.7 3.73a1 1 0 0 0 0 1.39l5.33 5.37z\\\"></path></svg>\"","import React, { ReactElement } from \"react\";\nimport { EnhancedRoute, Route } from \"../../__v3api\";\nimport { TypedRoutes } from \"./__stop\";\nimport { breakTextAtSlash } from \"../../helpers/text\";\nimport { routeToCSSClass } from \"../../helpers/css\";\n\ninterface RoutePillListProps {\n  routes: TypedRoutes[];\n  showGroupName?: boolean;\n}\n\ninterface RoutePillProps {\n  route: Route | EnhancedRoute;\n}\n\nconst busName = (name: string): string =>\n  name.startsWith(\"SL\") ? \"silver-line\" : \"bus\";\n\nconst modeNameForBg = ({ name, type }: EnhancedRoute | Route): string => {\n  switch (type) {\n    case 0:\n    case 1:\n      return routeToCSSClass(name);\n    case 2:\n      return \"commuter-rail\";\n    case 4:\n      return \"ferry\";\n    default:\n      return busName(name);\n  }\n};\n\nexport const modeBgClass = (route: EnhancedRoute | Route): string =>\n  `u-bg--${modeNameForBg(route)}`;\n\nconst RoutePill = ({ route }: RoutePillProps): ReactElement<HTMLElement> => (\n  <a\n    href={`/schedules/${route.id}`}\n    className={`\n      m-stop-page__header-feature\n      m-stop-page__header-description\n      u-small-caps\n      ${modeBgClass(route)}\n    `}\n  >\n    {breakTextAtSlash(route.name)}\n  </a>\n);\n\nconst RoutePillList = ({\n  routes,\n  showGroupName\n}: RoutePillListProps): ReactElement<HTMLElement> => (\n  <div className=\"m-route-pills\">\n    {routes.map(typedRoute => (\n      <div\n        key={typedRoute.group_name}\n        className={`m-route-pills--${typedRoute.group_name}`}\n      >\n        {showGroupName && <h4 className=\"h4\">{typedRoute.group_name}</h4>}\n        {typedRoute.routes.map(routeWithDirections => (\n          <RoutePill\n            key={routeWithDirections.route.id}\n            route={routeWithDirections.route}\n          />\n        ))}\n      </div>\n    ))}\n  </div>\n);\n\nexport default RoutePillList;\n","import { Reducer, createStore, Store } from \"redux\";\nimport { StoreAction, SelectedOrigin } from \"../components/__schedule\";\nimport { DirectionId } from \"../../__v3api\";\nimport { Mode as ModalMode } from \"../components/schedule-finder/ScheduleFinderModal\";\n\nexport interface StoreProps {\n  selectedDirection: DirectionId;\n  selectedOrigin: SelectedOrigin | \"\";\n  modalOpen: boolean;\n  modalMode: ModalMode;\n}\n\ninterface ActionData {\n  selectedDirection?: DirectionId;\n  selectedOrigin?: SelectedOrigin | \"\";\n  modalOpen?: boolean;\n  modalMode?: ModalMode;\n}\n\nexport interface Action {\n  type: StoreAction;\n  newStoreValues: ActionData;\n}\n\nexport const scheduleStoreReducer: Reducer<StoreProps, Action> = (\n  state: StoreProps | undefined,\n  action: Action\n): StoreProps => {\n  const newState: StoreProps = Object.assign(\n    {\n      selectedDirection: undefined,\n      selectedOrigin: undefined,\n      modalOpen: false,\n      modalMode: \"schedule\"\n    },\n    state\n  );\n\n  switch (action.type) {\n    case \"INITIALIZE\":\n      return { ...newState, ...action.newStoreValues };\n    case \"CHANGE_DIRECTION\":\n      return {\n        ...newState,\n        selectedDirection: action.newStoreValues.selectedDirection!,\n        selectedOrigin: action.newStoreValues.selectedOrigin!\n      };\n    case \"CHANGE_ORIGIN\":\n      return {\n        ...newState,\n        selectedOrigin: action.newStoreValues.selectedOrigin!\n      };\n    case \"OPEN_MODAL\":\n      return {\n        ...newState,\n        modalMode: action.newStoreValues.modalMode!,\n        modalOpen: true\n      };\n    case \"CLOSE_MODAL\":\n      return {\n        ...newState,\n        modalOpen: false\n      };\n    default:\n      return newState;\n  }\n};\n\nexport const createScheduleStore = (directionId: DirectionId): Store =>\n  // create store with preloadedState:\n  createStore(scheduleStoreReducer, {\n    selectedDirection: directionId,\n    selectedOrigin: \"\",\n    modalOpen: false,\n    modalMode: \"schedule\"\n  });\n\n// initial 'dummy' value (will be overwritten when schedule-loader loads)\nexport const store: Store = createScheduleStore(0);\n\nexport const getCurrentState = (): StoreProps => store.getState();\n\nexport const storeHandler = (newValues: Action): void => {\n  store.dispatch(newValues);\n};\n\nexport const mapStateToProps = (state: StoreProps): StoreProps => ({\n  ...state\n});\n\nexport default mapStateToProps;\n","import { updateInLocation } from \"use-query-params\";\nimport { DirectionId, Shape } from \"../../../__v3api\";\nimport {\n  ShapesById,\n  RoutePatternsByDirection,\n  EnhancedRoutePattern\n} from \"../__schedule\";\nimport { MapData } from \"../../../leaflet/components/__mapdata\";\n\nexport interface State {\n  routePattern: EnhancedRoutePattern;\n  shape: Shape;\n  directionId: DirectionId;\n  shapesById: ShapesById;\n  routePatternsByDirection: RoutePatternsByDirection;\n  routePatternMenuOpen: boolean;\n  routePatternMenuAll: boolean;\n  itemFocus: string | null;\n}\n\nexport interface Payload {\n  routePattern?: EnhancedRoutePattern;\n}\n\nexport const toggleDirectionAction = (): MenuAction => ({\n  type: \"toggleDirection\"\n});\n\nexport const setRoutePatternAction = (\n  routePattern: EnhancedRoutePattern\n): MenuAction => ({\n  type: \"setRoutePattern\",\n  payload: { routePattern }\n});\n\nexport const toggleRoutePatternMenuAction = (): MenuAction => ({\n  type: \"toggleRoutePatternMenu\"\n});\n\nexport const closeRoutePatternMenuAction = (): MenuAction => ({\n  type: \"closeRoutePatternMenu\"\n});\n\nexport const showAllRoutePatternsAction = (): MenuAction => ({\n  type: \"showAllRoutePatterns\"\n});\n\nexport interface MenuAction {\n  type:\n    | \"toggleDirection\"\n    | \"setRoutePattern\"\n    | \"toggleRoutePatternMenu\"\n    | \"closeRoutePatternMenu\"\n    | \"showAllRoutePatterns\";\n  payload?: Payload;\n}\n\nexport type FetchAction =\n  | { type: \"FETCH_COMPLETE\"; payload: MapData[] }\n  | { type: \"FETCH_ERROR\" }\n  | { type: \"FETCH_STARTED\" };\n\nconst updateDirectionAndVariantInURL = (\n  directionId: DirectionId,\n  routePatternId: string\n): void => {\n  const query = {\n    // eslint-disable-next-line @typescript-eslint/camelcase\n    \"schedule_direction[direction_id]\": directionId.toString(),\n    \"schedule_direction[variant]\": routePatternId\n  };\n  const newLoc = updateInLocation(query, window.location);\n  // newLoc is not a true Location, so toString doesn't work\n  window.history.replaceState({}, \"\", `${newLoc.pathname}${newLoc.search}`);\n};\n\nconst toggleDirection = (state: State): State => {\n  const nextDirection = state.directionId === 0 ? 1 : 0;\n  const [defaultRoutePatternForDirection] = state.routePatternsByDirection[\n    nextDirection\n  ];\n  updateDirectionAndVariantInURL(\n    nextDirection,\n    defaultRoutePatternForDirection.id\n  );\n  return {\n    ...state,\n    directionId: nextDirection,\n    routePattern: defaultRoutePatternForDirection,\n    shape: state.shapesById[defaultRoutePatternForDirection.shape_id],\n    itemFocus: \"first\"\n  };\n};\n\nconst toggleRoutePatternMenu = (state: State): State => ({\n  ...state,\n  routePatternMenuOpen: !state.routePatternMenuOpen,\n  itemFocus: \"first\"\n});\n\nconst setRoutePattern = (state: State, data: Payload): State => {\n  const newRoutePattern = data!.routePattern!;\n  updateDirectionAndVariantInURL(state.directionId, newRoutePattern.id);\n  return {\n    ...state,\n    routePattern: newRoutePattern,\n    shape: state.shapesById[newRoutePattern.shape_id],\n    routePatternMenuOpen: false,\n    itemFocus: null\n  };\n};\n\nconst showAllRoutePatterns = (state: State): State => ({\n  ...state,\n  routePatternMenuAll: true,\n  itemFocus: \"first-uncommon\"\n});\n\nexport const menuReducer = (state: State, action: MenuAction): State => {\n  switch (action.type) {\n    case \"toggleDirection\":\n      return toggleDirection(state);\n\n    case \"toggleRoutePatternMenu\":\n      return toggleRoutePatternMenu(state);\n\n    case \"showAllRoutePatterns\":\n      return showAllRoutePatterns(state);\n\n    case \"closeRoutePatternMenu\":\n      return {\n        ...state,\n        routePatternMenuOpen: false,\n        itemFocus: null\n      };\n\n    case \"setRoutePattern\":\n      return setRoutePattern(state, action.payload!);\n\n    /* istanbul ignore next */\n    default:\n      return state;\n  }\n};\n","import React from \"react\";\nimport { CrowdingType } from \"../__schedule\";\nimport { crowdingIcon } from \"../../../helpers/icon\";\nimport { crowdingDescriptions } from \"../../../models/vehicle\";\n\nconst CrowdingPill = ({\n  crowding\n}: {\n  crowding: CrowdingType;\n}): JSX.Element | null => {\n  if (!crowding) return null;\n\n  return (\n    <div\n      className={`u-small-caps u-bold c-crowding-pill c-crowding-pill--${crowding}`}\n    >\n      {crowdingIcon(`c-icon__crowding--${crowding}`)}\n      <span className=\"c-crowding-pill__label\">\n        {crowdingDescriptions(crowding)}\n      </span>\n    </div>\n  );\n};\n\nexport default CrowdingPill;\n","import React, { ReactElement } from \"react\";\nimport { DirectionId, Route } from \"../../../__v3api\";\nimport {\n  SimpleStopMap,\n  RoutePatternsByDirection,\n  ServiceInSelector,\n  ScheduleNote as ScheduleNoteType,\n  SelectedOrigin\n} from \"../__schedule\";\nimport Modal from \"../../../components/Modal\";\nimport OriginModalContent from \"./OriginModalContent\";\nimport ScheduleModalContent from \"./ScheduleModalContent\";\n\nexport type Mode = \"origin\" | \"schedule\";\n\ninterface Props {\n  closeModal: () => void;\n  directionChanged?: (direction: DirectionId) => void;\n  initialMode: Mode;\n  initialDirection: DirectionId;\n  initialOrigin: SelectedOrigin;\n  originChanged?: (origin: SelectedOrigin) => void;\n  route: Route;\n  routePatternsByDirection: RoutePatternsByDirection;\n  scheduleNote: ScheduleNoteType | null;\n  services: ServiceInSelector[];\n  stops: SimpleStopMap;\n  today: string;\n  updateURL: (origin: SelectedOrigin, direction?: DirectionId) => void;\n  handleOriginSelectClick: () => void;\n}\n\nexport default ({\n  closeModal,\n  directionChanged,\n  initialMode,\n  initialDirection,\n  initialOrigin,\n  originChanged,\n  route,\n  routePatternsByDirection,\n  scheduleNote,\n  services,\n  stops,\n  today,\n  updateURL,\n  handleOriginSelectClick\n}: Props): ReactElement => {\n  const handleChangeDirection = (newDirection: DirectionId): void => {\n    if (directionChanged) directionChanged(newDirection);\n    if (originChanged) originChanged(null);\n    updateURL(initialOrigin, newDirection);\n  };\n\n  const handleChangeOrigin = (newOrigin: SelectedOrigin): void => {\n    if (originChanged) originChanged(newOrigin);\n    updateURL(newOrigin, initialDirection);\n  };\n\n  const originModalContent = (): ReactElement => {\n    const origin = initialOrigin;\n    const direction = initialDirection;\n    return (\n      <OriginModalContent\n        handleChangeOrigin={handleChangeOrigin}\n        selectedOrigin={origin}\n        stops={stops[direction] || []}\n      />\n    );\n  };\n\n  const scheduleModalContent = (scheduleOrigin: string): ReactElement => (\n    <ScheduleModalContent\n      handleChangeDirection={handleChangeDirection}\n      handleChangeOrigin={handleChangeOrigin}\n      handleOriginSelectClick={handleOriginSelectClick}\n      route={route}\n      routePatternsByDirection={routePatternsByDirection}\n      scheduleNote={scheduleNote}\n      selectedDirection={initialDirection}\n      selectedOrigin={scheduleOrigin}\n      services={services}\n      stops={stops}\n      today={today}\n    />\n  );\n\n  const direction = initialDirection;\n  const origin = initialOrigin;\n\n  return (\n    <Modal\n      focusElementId={\n        initialMode === \"origin\" ? \"origin-filter\" : \"modal-close\"\n      }\n      ariaLabel={{\n        label:\n          initialMode === \"origin\"\n            ? \"Choose Origin Stop\"\n            : `Schedules to ${route.direction_names[direction]}`\n      }}\n      className={\n        initialMode === \"origin\" ? \"schedule-finder__origin-modal\" : \"\"\n      }\n      closeModal={closeModal}\n    >\n      {initialMode === \"origin\" && originModalContent()}\n      {initialMode === \"schedule\" &&\n        origin !== null &&\n        scheduleModalContent(origin)}\n    </Modal>\n  );\n};\n","export type fetchAction =\n  // @ts-ignore should add a generic here\n  | { type: \"FETCH_COMPLETE\"; payload: any } // eslint-disable-line\n  | { type: \"FETCH_ERROR\" }\n  | { type: \"FETCH_STARTED\" };\n\nexport interface State {\n  // @ts-ignore should add a generic\n  data: any | null; // eslint-disable-line\n  isLoading: boolean;\n  error: boolean;\n}\n\nexport const reducer = (state: State, action: fetchAction): State => {\n  switch (action.type) {\n    case \"FETCH_STARTED\":\n      return { ...state, isLoading: true, error: false, data: null };\n    case \"FETCH_COMPLETE\":\n      return { ...state, data: action.payload, isLoading: false, error: false };\n    case \"FETCH_ERROR\":\n      return { ...state, error: true, isLoading: false };\n    default:\n      return state;\n  }\n};\n","import React, { ReactElement } from \"react\";\n\nconst Loading = (): ReactElement<HTMLElement> => (\n  <div className=\"c-spinner__container\">\n    <div className=\"c-spinner\">Loading...</div>\n  </div>\n);\n\nexport default Loading;\n","import React, { ReactElement, useContext } from \"react\";\nimport { LineDiagramStop, RouteStop } from \"../__schedule\";\nimport { isACommuterRailRoute, isAGreenLineRoute } from \"../../../models/route\";\nimport { LiveData } from \"./__line-diagram\";\nimport { isMergeStop, diagramWidth } from \"./line-diagram-helpers\";\nimport StopConnections from \"./StopConnections\";\nimport StopPredictions from \"./StopPredictions\";\nimport { hasPredictionTime } from \"../../../models/prediction\";\nimport { alertIcon } from \"../../../helpers/icon\";\nimport {\n  isHighSeverityOrHighPriority,\n  isDiversion,\n  isCurrentAlert\n} from \"../../../models/alert\";\nimport { Alert, Route } from \"../../../__v3api\";\nimport MatchHighlight from \"../../../components/MatchHighlight\";\nimport StopFeatures from \"./StopFeatures\";\nimport { StopRefContext } from \"./LineDiagramWithStops\";\nimport { effectNameForAlert } from \"../../../components/Alerts\";\n\ninterface StopCardProps {\n  stop: LineDiagramStop;\n  onClick: (stop: RouteStop) => void;\n  liveData?: LiveData;\n  searchQuery?: string;\n}\n\nconst hasBranchLabel = (stop: LineDiagramStop): boolean =>\n  stop.route_stop[\"is_terminus?\"] &&\n  !!stop.route_stop.branch &&\n  !!stop.route_stop.route;\n\nconst lineName = ({ name, route: routeStopRoute }: RouteStop): string => {\n  const route = routeStopRoute as Route;\n  const title = isAGreenLineRoute(route)\n    ? `Green Line ${route.id.split(\"-\")[1]}`\n    : name;\n  const lineOrBranch = isACommuterRailRoute(route) ? \"Line\" : \"Branch\";\n  return `${title} ${lineOrBranch}`;\n};\n\nconst MaybeAlert = (alerts: Alert[]): JSX.Element | null => {\n  const highPriorityAlerts = alerts.filter(isHighSeverityOrHighPriority);\n  if (highPriorityAlerts.length === 0) return null;\n  return (\n    <>\n      {alertIcon(\"c-svg__icon-alerts-triangle\")}\n      <span className=\"sr-only\">Service alert or delay</span>\n      &nbsp;\n    </>\n  );\n};\n\nconst StopCard = (props: StopCardProps): ReactElement<HTMLElement> => {\n  const { stop, onClick, liveData, searchQuery } = props;\n  const {\n    stop_data: stopData,\n    route_stop: routeStop,\n    alerts: stopAlerts,\n    route_stop: { \"is_beginning?\": isOrigin, \"is_terminus?\": isTerminus }\n  } = stop;\n\n  const isDestination = !isOrigin && isTerminus;\n  const width = isMergeStop(stop)\n    ? diagramWidth(1)\n    : diagramWidth(stopData.length);\n  const refs = useContext(StopRefContext)[0];\n\n  const diversionAlert = stopAlerts.find(\n    alert => isDiversion(alert) && isCurrentAlert(alert)\n  );\n  const hasLivePredictions =\n    liveData &&\n    liveData.headsigns.length &&\n    liveData.headsigns.some(hasPredictionTime);\n  const showPrediction = hasLivePredictions && !isDestination;\n  const showDiversion =\n    diversionAlert && !(hasLivePredictions && isDestination);\n\n  return (\n    <li\n      className=\"m-schedule-diagram__stop\"\n      style={{ paddingLeft: searchQuery ? \"0.5rem\" : `${width}px` }}\n    >\n      <section className=\"m-schedule-diagram__content\">\n        {hasBranchLabel(stop) && (\n          <div className=\"u-bold u-small-caps\">{lineName(routeStop)}</div>\n        )}\n        <header\n          className=\"m-schedule-diagram__stop-heading\"\n          ref={refs[routeStop.id]}\n        >\n          <h4 className=\"m-schedule-diagram__stop-link\">\n            <a href={`/stops/${routeStop.id}`}>\n              {MaybeAlert(stopAlerts)}\n              <MatchHighlight text={routeStop.name} matchQuery={searchQuery} />\n            </a>\n          </h4>\n          {StopFeatures(routeStop)}\n        </header>\n\n        <div className=\"m-schedule-diagram__stop-details\">\n          {StopConnections(routeStop.connections)}\n          {showPrediction ? (\n            <StopPredictions\n              headsigns={liveData!.headsigns}\n              isCommuterRail={\n                !!routeStop.route && isACommuterRailRoute(routeStop.route)\n              }\n            />\n          ) : (\n            showDiversion && (\n              <div\n                key={diversionAlert!.id}\n                className=\"m-schedule-diagram__alert\"\n              >\n                {effectNameForAlert(diversionAlert!)}\n              </div>\n            )\n          )}\n        </div>\n\n        <footer className=\"m-schedule-diagram__footer\">\n          <button\n            className=\"btn btn-link\"\n            type=\"button\"\n            onClick={() => onClick(routeStop)}\n          >\n            View schedule\n          </button>\n        </footer>\n      </section>\n    </li>\n  );\n};\n\nexport default StopCard;\n","!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof exports?exports.Phoenix=t():e.Phoenix=t()}(this,function(){return function(e){var t={};function n(i){if(t[i])return t[i].exports;var o=t[i]={i:i,l:!1,exports:{}};return e[i].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var o in e)n.d(i,o,function(t){return e[t]}.bind(null,o));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,\"a\",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p=\"\",n(n.s=0)}([function(e,t,n){(function(t){e.exports=t.Phoenix=n(2)}).call(this,n(1))},function(e,t){var n;n=function(){return this}();try{n=n||Function(\"return this\")()||(0,eval)(\"this\")}catch(e){\"object\"==typeof window&&(n=window)}e.exports=n},function(e,t,n){\"use strict\";function i(e){return function(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);t<e.length;t++)n[t]=e[t];return n}}(e)||function(e){if(Symbol.iterator in Object(e)||\"[object Arguments]\"===Object.prototype.toString.call(e))return Array.from(e)}(e)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance\")}()}function o(e){return(o=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function r(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=[],i=!0,o=!1,r=void 0;try{for(var s,a=e[Symbol.iterator]();!(i=(s=a.next()).done)&&(n.push(s.value),!t||n.length!==t);i=!0);}catch(e){o=!0,r=e}finally{try{i||null==a.return||a.return()}finally{if(o)throw r}}return n}(e,t)||function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}()}function s(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function a(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}function c(e,t,n){return t&&a(e.prototype,t),n&&a(e,n),e}n.r(t),n.d(t,\"Channel\",function(){return b}),n.d(t,\"Socket\",function(){return R}),n.d(t,\"LongPoll\",function(){return w}),n.d(t,\"Ajax\",function(){return C}),n.d(t,\"Presence\",function(){return S});var u=\"undefined\"!=typeof self?self:null,h=\"undefined\"!=typeof window?window:null,l=u||h||void 0,f={connecting:0,open:1,closing:2,closed:3},p=1e4,d={closed:\"closed\",errored:\"errored\",joined:\"joined\",joining:\"joining\",leaving:\"leaving\"},v={close:\"phx_close\",error:\"phx_error\",join:\"phx_join\",reply:\"phx_reply\",leave:\"phx_leave\"},y=[v.close,v.error,v.join,v.reply,v.leave],g={longpoll:\"longpoll\",websocket:\"websocket\"},m=function(e){if(\"function\"==typeof e)return e;return function(){return e}},k=function(){function e(t,n,i,o){s(this,e),this.channel=t,this.event=n,this.payload=i||function(){return{}},this.receivedResp=null,this.timeout=o,this.timeoutTimer=null,this.recHooks=[],this.sent=!1}return c(e,[{key:\"resend\",value:function(e){this.timeout=e,this.reset(),this.send()}},{key:\"send\",value:function(){this.hasReceived(\"timeout\")||(this.startTimeout(),this.sent=!0,this.channel.socket.push({topic:this.channel.topic,event:this.event,payload:this.payload(),ref:this.ref,join_ref:this.channel.joinRef()}))}},{key:\"receive\",value:function(e,t){return this.hasReceived(e)&&t(this.receivedResp.response),this.recHooks.push({status:e,callback:t}),this}},{key:\"reset\",value:function(){this.cancelRefEvent(),this.ref=null,this.refEvent=null,this.receivedResp=null,this.sent=!1}},{key:\"matchReceive\",value:function(e){var t=e.status,n=e.response;e.ref;this.recHooks.filter(function(e){return e.status===t}).forEach(function(e){return e.callback(n)})}},{key:\"cancelRefEvent\",value:function(){this.refEvent&&this.channel.off(this.refEvent)}},{key:\"cancelTimeout\",value:function(){clearTimeout(this.timeoutTimer),this.timeoutTimer=null}},{key:\"startTimeout\",value:function(){var e=this;this.timeoutTimer&&this.cancelTimeout(),this.ref=this.channel.socket.makeRef(),this.refEvent=this.channel.replyEventName(this.ref),this.channel.on(this.refEvent,function(t){e.cancelRefEvent(),e.cancelTimeout(),e.receivedResp=t,e.matchReceive(t)}),this.timeoutTimer=setTimeout(function(){e.trigger(\"timeout\",{})},this.timeout)}},{key:\"hasReceived\",value:function(e){return this.receivedResp&&this.receivedResp.status===e}},{key:\"trigger\",value:function(e,t){this.channel.trigger(this.refEvent,{status:e,response:t})}}]),e}(),b=function(){function e(t,n,i){var o=this;s(this,e),this.state=d.closed,this.topic=t,this.params=m(n||{}),this.socket=i,this.bindings=[],this.bindingRef=0,this.timeout=this.socket.timeout,this.joinedOnce=!1,this.joinPush=new k(this,v.join,this.params,this.timeout),this.pushBuffer=[],this.rejoinTimer=new T(function(){return o.rejoinUntilConnected()},this.socket.reconnectAfterMs),this.joinPush.receive(\"ok\",function(){o.state=d.joined,o.rejoinTimer.reset(),o.pushBuffer.forEach(function(e){return e.send()}),o.pushBuffer=[]}),this.onClose(function(){o.rejoinTimer.reset(),o.socket.hasLogger()&&o.socket.log(\"channel\",\"close \".concat(o.topic,\" \").concat(o.joinRef())),o.state=d.closed,o.socket.remove(o)}),this.onError(function(e){o.isLeaving()||o.isClosed()||(o.socket.hasLogger()&&o.socket.log(\"channel\",\"error \".concat(o.topic),e),o.state=d.errored,o.rejoinTimer.scheduleTimeout())}),this.joinPush.receive(\"timeout\",function(){o.isJoining()&&(o.socket.hasLogger()&&o.socket.log(\"channel\",\"timeout \".concat(o.topic,\" (\").concat(o.joinRef(),\")\"),o.joinPush.timeout),new k(o,v.leave,m({}),o.timeout).send(),o.state=d.errored,o.joinPush.reset(),o.rejoinTimer.scheduleTimeout())}),this.on(v.reply,function(e,t){o.trigger(o.replyEventName(t),e)})}return c(e,[{key:\"rejoinUntilConnected\",value:function(){this.rejoinTimer.scheduleTimeout(),this.socket.isConnected()&&this.rejoin()}},{key:\"join\",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.timeout;if(this.joinedOnce)throw new Error(\"tried to join multiple times. 'join' can only be called a single time per channel instance\");return this.joinedOnce=!0,this.rejoin(e),this.joinPush}},{key:\"onClose\",value:function(e){this.on(v.close,e)}},{key:\"onError\",value:function(e){return this.on(v.error,function(t){return e(t)})}},{key:\"on\",value:function(e,t){var n=this.bindingRef++;return this.bindings.push({event:e,ref:n,callback:t}),n}},{key:\"off\",value:function(e,t){this.bindings=this.bindings.filter(function(n){return!(n.event===e&&(void 0===t||t===n.ref))})}},{key:\"canPush\",value:function(){return this.socket.isConnected()&&this.isJoined()}},{key:\"push\",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.timeout;if(!this.joinedOnce)throw new Error(\"tried to push '\".concat(e,\"' to '\").concat(this.topic,\"' before joining. Use channel.join() before pushing events\"));var i=new k(this,e,function(){return t},n);return this.canPush()?i.send():(i.startTimeout(),this.pushBuffer.push(i)),i}},{key:\"leave\",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.timeout;this.state=d.leaving;var n=function(){e.socket.hasLogger()&&e.socket.log(\"channel\",\"leave \".concat(e.topic)),e.trigger(v.close,\"leave\")},i=new k(this,v.leave,m({}),t);return i.receive(\"ok\",function(){return n()}).receive(\"timeout\",function(){return n()}),i.send(),this.canPush()||i.trigger(\"ok\",{}),i}},{key:\"onMessage\",value:function(e,t,n){return t}},{key:\"isLifecycleEvent\",value:function(e){return y.indexOf(e)>=0}},{key:\"isMember\",value:function(e,t,n,i){return this.topic===e&&(!i||i===this.joinRef()||!this.isLifecycleEvent(t)||(this.socket.hasLogger()&&this.socket.log(\"channel\",\"dropping outdated message\",{topic:e,event:t,payload:n,joinRef:i}),!1))}},{key:\"joinRef\",value:function(){return this.joinPush.ref}},{key:\"sendJoin\",value:function(e){this.state=d.joining,this.joinPush.resend(e)}},{key:\"rejoin\",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.timeout;this.isLeaving()||this.sendJoin(e)}},{key:\"trigger\",value:function(e,t,n,i){var o=this.onMessage(e,t,n,i);if(t&&!o)throw new Error(\"channel onMessage callbacks must return the payload, modified or unmodified\");for(var r=0;r<this.bindings.length;r++){var s=this.bindings[r];s.event===e&&s.callback(o,n,i||this.joinRef())}}},{key:\"replyEventName\",value:function(e){return\"chan_reply_\".concat(e)}},{key:\"isClosed\",value:function(){return this.state===d.closed}},{key:\"isErrored\",value:function(){return this.state===d.errored}},{key:\"isJoined\",value:function(){return this.state===d.joined}},{key:\"isJoining\",value:function(){return this.state===d.joining}},{key:\"isLeaving\",value:function(){return this.state===d.leaving}}]),e}(),j={encode:function(e,t){var n=[e.join_ref,e.ref,e.topic,e.event,e.payload];return t(JSON.stringify(n))},decode:function(e,t){var n=r(JSON.parse(e),5);return t({join_ref:n[0],ref:n[1],topic:n[2],event:n[3],payload:n[4]})}},R=function(){function e(t){var n=this,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};s(this,e),this.stateChangeCallbacks={open:[],close:[],error:[],message:[]},this.channels=[],this.sendBuffer=[],this.ref=0,this.timeout=i.timeout||p,this.transport=i.transport||l.WebSocket||w,this.defaultEncoder=j.encode,this.defaultDecoder=j.decode,this.transport!==w?(this.encode=i.encode||this.defaultEncoder,this.decode=i.decode||this.defaultDecoder):(this.encode=this.defaultEncoder,this.decode=this.defaultDecoder),this.heartbeatIntervalMs=i.heartbeatIntervalMs||3e4,this.reconnectAfterMs=i.reconnectAfterMs||function(e){return[1e3,2e3,5e3,1e4][e-1]||1e4},this.logger=i.logger||null,this.longpollerTimeout=i.longpollerTimeout||2e4,this.params=m(i.params||{}),this.endPoint=\"\".concat(t,\"/\").concat(g.websocket),this.heartbeatTimer=null,this.pendingHeartbeatRef=null,this.reconnectTimer=new T(function(){n.teardown(function(){return n.connect()})},this.reconnectAfterMs)}return c(e,[{key:\"protocol\",value:function(){return location.protocol.match(/^https/)?\"wss\":\"ws\"}},{key:\"endPointURL\",value:function(){var e=C.appendParams(C.appendParams(this.endPoint,this.params()),{vsn:\"2.0.0\"});return\"/\"!==e.charAt(0)?e:\"/\"===e.charAt(1)?\"\".concat(this.protocol(),\":\").concat(e):\"\".concat(this.protocol(),\"://\").concat(location.host).concat(e)}},{key:\"disconnect\",value:function(e,t,n){this.reconnectTimer.reset(),this.teardown(e,t,n)}},{key:\"connect\",value:function(e){var t=this;e&&(console&&console.log(\"passing params to connect is deprecated. Instead pass :params to the Socket constructor\"),this.params=m(e)),this.conn||(this.conn=new this.transport(this.endPointURL()),this.conn.timeout=this.longpollerTimeout,this.conn.onopen=function(){return t.onConnOpen()},this.conn.onerror=function(e){return t.onConnError(e)},this.conn.onmessage=function(e){return t.onConnMessage(e)},this.conn.onclose=function(e){return t.onConnClose(e)})}},{key:\"log\",value:function(e,t,n){this.logger(e,t,n)}},{key:\"hasLogger\",value:function(){return null!==this.logger}},{key:\"onOpen\",value:function(e){this.stateChangeCallbacks.open.push(e)}},{key:\"onClose\",value:function(e){this.stateChangeCallbacks.close.push(e)}},{key:\"onError\",value:function(e){this.stateChangeCallbacks.error.push(e)}},{key:\"onMessage\",value:function(e){this.stateChangeCallbacks.message.push(e)}},{key:\"onConnOpen\",value:function(){this.hasLogger()&&this.log(\"transport\",\"connected to \".concat(this.endPointURL())),this.flushSendBuffer(),this.reconnectTimer.reset(),this.resetHeartbeat(),this.stateChangeCallbacks.open.forEach(function(e){return e()})}},{key:\"resetHeartbeat\",value:function(){var e=this;this.conn.skipHeartbeat||(this.pendingHeartbeatRef=null,clearInterval(this.heartbeatTimer),this.heartbeatTimer=setInterval(function(){return e.sendHeartbeat()},this.heartbeatIntervalMs))}},{key:\"teardown\",value:function(e,t,n){this.conn&&(this.conn.onclose=function(){},t?this.conn.close(t,n||\"\"):this.conn.close(),this.conn=null),e&&e()}},{key:\"onConnClose\",value:function(e){this.hasLogger()&&this.log(\"transport\",\"close\",e),this.triggerChanError(),clearInterval(this.heartbeatTimer),e&&1e3!==e.code&&this.reconnectTimer.scheduleTimeout(),this.stateChangeCallbacks.close.forEach(function(t){return t(e)})}},{key:\"onConnError\",value:function(e){this.hasLogger()&&this.log(\"transport\",e),this.triggerChanError(),this.stateChangeCallbacks.error.forEach(function(t){return t(e)})}},{key:\"triggerChanError\",value:function(){this.channels.forEach(function(e){return e.trigger(v.error)})}},{key:\"connectionState\",value:function(){switch(this.conn&&this.conn.readyState){case f.connecting:return\"connecting\";case f.open:return\"open\";case f.closing:return\"closing\";default:return\"closed\"}}},{key:\"isConnected\",value:function(){return\"open\"===this.connectionState()}},{key:\"remove\",value:function(e){this.channels=this.channels.filter(function(t){return t.joinRef()!==e.joinRef()})}},{key:\"channel\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=new b(e,t,this);return this.channels.push(n),n}},{key:\"push\",value:function(e){var t=this;if(this.hasLogger()){var n=e.topic,i=e.event,o=e.payload,r=e.ref,s=e.join_ref;this.log(\"push\",\"\".concat(n,\" \").concat(i,\" (\").concat(s,\", \").concat(r,\")\"),o)}this.isConnected()?this.encode(e,function(e){return t.conn.send(e)}):this.sendBuffer.push(function(){return t.encode(e,function(e){return t.conn.send(e)})})}},{key:\"makeRef\",value:function(){var e=this.ref+1;return e===this.ref?this.ref=0:this.ref=e,this.ref.toString()}},{key:\"sendHeartbeat\",value:function(){if(this.isConnected()){if(this.pendingHeartbeatRef)return this.pendingHeartbeatRef=null,this.hasLogger()&&this.log(\"transport\",\"heartbeat timeout. Attempting to re-establish connection\"),void this.conn.close(1e3,\"hearbeat timeout\");this.pendingHeartbeatRef=this.makeRef(),this.push({topic:\"phoenix\",event:\"heartbeat\",payload:{},ref:this.pendingHeartbeatRef})}}},{key:\"flushSendBuffer\",value:function(){this.isConnected()&&this.sendBuffer.length>0&&(this.sendBuffer.forEach(function(e){return e()}),this.sendBuffer=[])}},{key:\"onConnMessage\",value:function(e){var t=this;this.decode(e.data,function(e){var n=e.topic,i=e.event,o=e.payload,r=e.ref,s=e.join_ref;r&&r===t.pendingHeartbeatRef&&(t.pendingHeartbeatRef=null),t.hasLogger()&&t.log(\"receive\",\"\".concat(o.status||\"\",\" \").concat(n,\" \").concat(i,\" \").concat(r&&\"(\"+r+\")\"||\"\"),o);for(var a=0;a<t.channels.length;a++){var c=t.channels[a];c.isMember(n,i,o,s)&&c.trigger(i,o,r,s)}for(var u=0;u<t.stateChangeCallbacks.message.length;u++)t.stateChangeCallbacks.message[u](e)})}}]),e}(),w=function(){function e(t){s(this,e),this.endPoint=null,this.token=null,this.skipHeartbeat=!0,this.onopen=function(){},this.onerror=function(){},this.onmessage=function(){},this.onclose=function(){},this.pollEndpoint=this.normalizeEndpoint(t),this.readyState=f.connecting,this.poll()}return c(e,[{key:\"normalizeEndpoint\",value:function(e){return e.replace(\"ws://\",\"http://\").replace(\"wss://\",\"https://\").replace(new RegExp(\"(.*)/\"+g.websocket),\"$1/\"+g.longpoll)}},{key:\"endpointURL\",value:function(){return C.appendParams(this.pollEndpoint,{token:this.token})}},{key:\"closeAndRetry\",value:function(){this.close(),this.readyState=f.connecting}},{key:\"ontimeout\",value:function(){this.onerror(\"timeout\"),this.closeAndRetry()}},{key:\"poll\",value:function(){var e=this;this.readyState!==f.open&&this.readyState!==f.connecting||C.request(\"GET\",this.endpointURL(),\"application/json\",null,this.timeout,this.ontimeout.bind(this),function(t){if(t){var n=t.status,i=t.token,o=t.messages;e.token=i}else n=0;switch(n){case 200:o.forEach(function(t){return e.onmessage({data:t})}),e.poll();break;case 204:e.poll();break;case 410:e.readyState=f.open,e.onopen(),e.poll();break;case 0:case 500:e.onerror(),e.closeAndRetry();break;default:throw new Error(\"unhandled poll status \".concat(n))}})}},{key:\"send\",value:function(e){var t=this;C.request(\"POST\",this.endpointURL(),\"application/json\",e,this.timeout,this.onerror.bind(this,\"timeout\"),function(e){e&&200===e.status||(t.onerror(e&&e.status),t.closeAndRetry())})}},{key:\"close\",value:function(e,t){this.readyState=f.closed,this.onclose()}}]),e}(),C=function(){function e(){s(this,e)}return c(e,null,[{key:\"request\",value:function(e,t,n,i,o,r,s){if(l.XDomainRequest){var a=new XDomainRequest;this.xdomainRequest(a,e,t,i,o,r,s)}else{var c=l.XMLHttpRequest?new l.XMLHttpRequest:new ActiveXObject(\"Microsoft.XMLHTTP\");this.xhrRequest(c,e,t,n,i,o,r,s)}}},{key:\"xdomainRequest\",value:function(e,t,n,i,o,r,s){var a=this;e.timeout=o,e.open(t,n),e.onload=function(){var t=a.parseJSON(e.responseText);s&&s(t)},r&&(e.ontimeout=r),e.onprogress=function(){},e.send(i)}},{key:\"xhrRequest\",value:function(e,t,n,i,o,r,s,a){var c=this;e.open(t,n,!0),e.timeout=r,e.setRequestHeader(\"Content-Type\",i),e.onerror=function(){a&&a(null)},e.onreadystatechange=function(){if(e.readyState===c.states.complete&&a){var t=c.parseJSON(e.responseText);a(t)}},s&&(e.ontimeout=s),e.send(o)}},{key:\"parseJSON\",value:function(e){if(!e||\"\"===e)return null;try{return JSON.parse(e)}catch(t){return console&&console.log(\"failed to parse JSON response\",e),null}}},{key:\"serialize\",value:function(e,t){var n=[];for(var i in e)if(e.hasOwnProperty(i)){var r=t?\"\".concat(t,\"[\").concat(i,\"]\"):i,s=e[i];\"object\"===o(s)?n.push(this.serialize(s,r)):n.push(encodeURIComponent(r)+\"=\"+encodeURIComponent(s))}return n.join(\"&\")}},{key:\"appendParams\",value:function(e,t){if(0===Object.keys(t).length)return e;var n=e.match(/\\?/)?\"&\":\"?\";return\"\".concat(e).concat(n).concat(this.serialize(t))}}]),e}();C.states={complete:4};var S=function(){function e(t){var n=this,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};s(this,e);var o=i.events||{state:\"presence_state\",diff:\"presence_diff\"};this.state={},this.pendingDiffs=[],this.channel=t,this.joinRef=null,this.caller={onJoin:function(){},onLeave:function(){},onSync:function(){}},this.channel.on(o.state,function(t){var i=n.caller,o=i.onJoin,r=i.onLeave,s=i.onSync;n.joinRef=n.channel.joinRef(),n.state=e.syncState(n.state,t,o,r),n.pendingDiffs.forEach(function(t){n.state=e.syncDiff(n.state,t,o,r)}),n.pendingDiffs=[],s()}),this.channel.on(o.diff,function(t){var i=n.caller,o=i.onJoin,r=i.onLeave,s=i.onSync;n.inPendingSyncState()?n.pendingDiffs.push(t):(n.state=e.syncDiff(n.state,t,o,r),s())})}return c(e,[{key:\"onJoin\",value:function(e){this.caller.onJoin=e}},{key:\"onLeave\",value:function(e){this.caller.onLeave=e}},{key:\"onSync\",value:function(e){this.caller.onSync=e}},{key:\"list\",value:function(t){return e.list(this.state,t)}},{key:\"inPendingSyncState\",value:function(){return!this.joinRef||this.joinRef!==this.channel.joinRef()}}],[{key:\"syncState\",value:function(e,t,n,i){var o=this,r=this.clone(e),s={},a={};return this.map(r,function(e,n){t[e]||(a[e]=n)}),this.map(t,function(e,t){var n=r[e];if(n){var i=t.metas.map(function(e){return e.phx_ref}),c=n.metas.map(function(e){return e.phx_ref}),u=t.metas.filter(function(e){return c.indexOf(e.phx_ref)<0}),h=n.metas.filter(function(e){return i.indexOf(e.phx_ref)<0});u.length>0&&(s[e]=t,s[e].metas=u),h.length>0&&(a[e]=o.clone(n),a[e].metas=h)}else s[e]=t}),this.syncDiff(r,{joins:s,leaves:a},n,i)}},{key:\"syncDiff\",value:function(e,t,n,o){var r=t.joins,s=t.leaves,a=this.clone(e);return n||(n=function(){}),o||(o=function(){}),this.map(r,function(e,t){var o=a[e];if(a[e]=t,o){var r,s=a[e].metas.map(function(e){return e.phx_ref}),c=o.metas.filter(function(e){return s.indexOf(e.phx_ref)<0});(r=a[e].metas).unshift.apply(r,i(c))}n(e,o,t)}),this.map(s,function(e,t){var n=a[e];if(n){var i=t.metas.map(function(e){return e.phx_ref});n.metas=n.metas.filter(function(e){return i.indexOf(e.phx_ref)<0}),o(e,n,t),0===n.metas.length&&delete a[e]}}),a}},{key:\"list\",value:function(e,t){return t||(t=function(e,t){return t}),this.map(e,function(e,n){return t(e,n)})}},{key:\"map\",value:function(e,t){return Object.getOwnPropertyNames(e).map(function(n){return t(n,e[n])})}},{key:\"clone\",value:function(e){return JSON.parse(JSON.stringify(e))}}]),e}(),T=function(){function e(t,n){s(this,e),this.callback=t,this.timerCalc=n,this.timer=null,this.tries=0}return c(e,[{key:\"reset\",value:function(){this.tries=0,clearTimeout(this.timer)}},{key:\"scheduleTimeout\",value:function(){var e=this;clearTimeout(this.timer),this.timer=setTimeout(function(){e.tries=e.tries+1,e.callback()},this.timerCalc(this.tries+1))}}]),e}()}])});","import {\n  LineDiagramVehicle,\n  CrowdingType\n} from \"../schedule/components/__schedule\";\nimport { RouteType } from \"../__v3api\";\n\n// See also Routes.Route.vehicle_name/1\nexport const vehicleName = (routeType: RouteType): string =>\n  ({\n    0: \"Train\",\n    1: \"Train\",\n    2: \"Train\",\n    3: \"Bus\",\n    4: \"Ferry\"\n  }[routeType]);\n\n// See also VehicleHelpers.realtime_status_text/1\nexport const vehicleRealtimeStatusText = ({\n  status\n}: LineDiagramVehicle): string =>\n  ({\n    // eslint-disable-next-line @typescript-eslint/camelcase\n    in_transit: \"is on the way to\",\n    incoming: \"is arriving at\",\n    stopped: \"has arrived at\"\n  }[status]);\n\nexport const crowdingDescriptions = (crowding: CrowdingType): string =>\n  crowding\n    ? {\n        // eslint-disable-next-line @typescript-eslint/camelcase\n        not_crowded: \"Not crowded\",\n        // eslint-disable-next-line @typescript-eslint/camelcase\n        some_crowding: \"Some crowding\",\n        crowded: \"Crowded\"\n      }[crowding]\n    : \"\";\n","import React, { ReactElement } from \"react\";\nimport {\n  ScheduleNote as ScheduleNoteType,\n  ServiceException\n} from \"./__schedule\";\nimport scheduleIcon from \"../../../static/images/icon-schedule-finder.svg\";\n\nconst service = (serviceTime: string): ReactElement<HTMLElement> => (\n  <p className=\"m-schedule-page__service-note-time\" key={serviceTime}>\n    Trains arrive every {serviceTime}\n  </p>\n);\n\nconst offPeak = (\n  offpeak: string,\n  exceptions: ServiceException[]\n): ReactElement<HTMLElement> => {\n  const except =\n    exceptions.length > 0\n      ? `except ${exceptions.map(e => e.type).join(\", \")}`\n      : \"\";\n  return service(`${offpeak} ${except}`);\n};\n\nconst alternateNote = (alternateText: string): ReactElement<HTMLElement> => (\n  /* eslint-disable react/no-danger */\n  <div className=\"m-schedule-page__schedule-note m-schedule-page__schedule-note--alternate\">\n    <div dangerouslySetInnerHTML={{ __html: alternateText }} />\n  </div> /* eslint-enable react/no-danger */\n);\n\nconst peakOffPeakTimes = ({\n  peakService,\n  offpeakService,\n  exceptions\n}: {\n  peakService: string;\n  offpeakService: string;\n  exceptions: ServiceException[];\n}): ReactElement<HTMLElement> => (\n  <>\n    <div className=\"m-schedule-page__schedule-note\">\n      <h4 className=\"m-schedule-page__service\">Peak Service</h4>\n      <div className=\"m-schedule-page__service-subheading\">\n        Weekdays 7 AM - 9 AM, 4 PM - 6:30 PM\n      </div>\n      {service(peakService)}\n    </div>\n    <div className=\"m-schedule-page__schedule-note\">\n      <h4 className=\"m-schedule-page__service\">Off Peak / Weekends</h4>\n      {offPeak(offpeakService, exceptions)}\n      {exceptions.map(exception =>\n        service(`${exception.service} ${exception.type}`)\n      )}\n    </div>\n  </>\n);\n\ninterface Props {\n  scheduleNote: ScheduleNoteType;\n  className: string;\n}\n\nconst ScheduleNote = ({\n  scheduleNote: {\n    peak_service: peakService,\n    offpeak_service: offpeakService,\n    exceptions,\n    alternate_text: alternateText\n  },\n  className\n}: Props): ReactElement<HTMLElement> => (\n  <div className={`m-schedule-page__schedule-notes ${className}`}>\n    <h3 className=\"m-schedule-page__schedule-note-title\">\n      <div\n        className=\"m-schedule-page__schedule-note-icon\"\n        dangerouslySetInnerHTML={{ __html: scheduleIcon }} // eslint-disable-line react/no-danger\n      />\n      Schedule Note\n    </h3>\n    {alternateText\n      ? alternateNote(alternateText)\n      : peakOffPeakTimes({ peakService, offpeakService, exceptions })}\n  </div>\n);\n\nexport default ScheduleNote;\n","module.exports = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" data-name=\\\"Layer 1\\\" viewBox=\\\"0 0 48 48\\\"><title>down arrow</title><defs><style>.cls-1{fill:none;clip-rule:evenodd}</style><clipPath><path d=\\\"M80.17-26.74q19.32-18 19.32-28.68a19.32 19.32 0 0 0-19.32-19.32 19.32 19.32 0 0 0-19.32 19.32q0 10.67 19.32 28.68z\\\" class=\\\"cls-1\\\"></path></clipPath><clipPath><path d=\\\"M25-26.74q19.32-18 19.32-28.68A19.32 19.32 0 0 0 25-74.74 19.32 19.32 0 0 0 5.64-55.42q0 10.67 19.36 28.68z\\\" class=\\\"cls-1\\\"></path></clipPath><clipPath><path d=\\\"M-42.62-26.74q19.32-18 19.32-28.68a19.32 19.32 0 0 0-19.32-19.32 19.32 19.32 0 0 0-19.32 19.32q0 10.67 19.32 28.68z\\\" class=\\\"cls-1\\\"></path></clipPath></defs><title>icon-small-arrow-down</title><path d=\\\"M35.55 19.8l-10.5 10.5a1.45 1.45 0 0 1-2.1 0l-10.5-10.5a1.44 1.44 0 0 1-.45-1.05 1.51 1.51 0 0 1 1.5-1.5h21a1.51 1.51 0 0 1 1.5 1.5 1.44 1.44 0 0 1-.45 1.05z\\\" fill=\\\"#1c1e23\\\"></path></svg>\"","module.exports = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 48 48\\\"><title>checkmark</title><path d=\\\"M47.13 14.89L24.71 37.32l-4.21 4.21a3 3 0 0 1-4.21 0l-4.21-4.21L.87 26.11a3 3 0 0 1 0-4.22l4.21-4.21a3 3 0 0 1 4.21 0l9.11 9.14L38.71 6.47a3 3 0 0 1 4.21 0l4.21 4.21a3 3 0 0 1 .87 2.11 3 3 0 0 1-.87 2.1z\\\"></path></svg>\"","import _, { Dictionary } from \"lodash\";\nimport {\n  Service,\n  DayInteger,\n  ServiceType,\n  ServiceTypicality\n} from \"../__v3api\";\nimport { shortDate, stringToDateObject, dateObjectToString } from \"./date\";\n\nexport enum ServiceGroupNames {\n  HOLIDAY = \"Holiday Schedules\",\n  CURRENT = \"Current Schedules\",\n  FUTURE = \"Future Schedules\",\n  OTHER = \"Other Schedules\"\n}\n\nexport const serviceStartDateComparator = (\n  service1: Service,\n  service2: Service\n): number =>\n  stringToDateObject(service1.start_date).getTime() -\n  stringToDateObject(service2.start_date).getTime();\n\nconst isInRemovedDates = (\n  service: Service,\n  currentDate: Date = new Date()\n): boolean => service.removed_dates.includes(dateObjectToString(currentDate));\n\nconst isInAddedDates = (\n  service: Service,\n  currentDate: Date = new Date()\n): boolean => service.added_dates.includes(dateObjectToString(currentDate));\n\nconst isOnValidDay = (\n  service: Service,\n  currentDate: Date = new Date()\n): boolean => {\n  let currentDay = currentDate.getDay();\n  // different numbering from valid_days for sunday\n  currentDay = currentDay === 0 ? 7 : currentDay;\n  return service.valid_days.includes(currentDay as DayInteger);\n};\n\nexport const isInCurrentService = (\n  service: Service,\n  currentDate: Date = new Date()\n): boolean => {\n  const serviceStartDate = stringToDateObject(service.start_date);\n  const serviceEndDate = stringToDateObject(service.end_date);\n  return currentDate >= serviceStartDate && currentDate <= serviceEndDate;\n};\n\nexport const isInCurrentRating = (\n  service: Service,\n  currentDate: Date = new Date()\n): boolean => {\n  if (!service.rating_start_date) {\n    return false;\n  }\n  const ratingStartDate = stringToDateObject(service.rating_start_date!);\n  if (!service.rating_end_date) {\n    // this might be a commuter rail or ferry. treat null rating end as infinite?\n    return currentDate >= ratingStartDate;\n  }\n  const ratingEndDate = stringToDateObject(service.rating_end_date!);\n  return currentDate >= ratingStartDate && currentDate <= ratingEndDate;\n};\n\nexport const isCurrentValidService = (\n  service: Service,\n  currentDate: Date = new Date()\n): boolean => {\n  // check against added dates\n  if (isInAddedDates(service, currentDate)) {\n    return true;\n  }\n\n  // check against removed dates\n  if (isInRemovedDates(service, currentDate)) {\n    return false;\n  }\n\n  // check on valid_days\n  if (!isOnValidDay(service, currentDate)) {\n    return false;\n  }\n\n  // check within rating dates\n  return (\n    isInCurrentRating(service, currentDate) &&\n    isInCurrentService(service, currentDate)\n  );\n};\n\nexport const startToEnd = (\n  startDateObject: Date,\n  endDateObject: Date\n): string => `${shortDate(startDateObject)} to ${shortDate(endDateObject)}`;\n\nexport const isInFutureService = (\n  service: Service,\n  currentDate: Date = new Date()\n): boolean => {\n  const serviceStartDate = stringToDateObject(service.start_date);\n  const serviceEndDate = stringToDateObject(service.end_date);\n  return currentDate < serviceStartDate && currentDate < serviceEndDate;\n};\n\nexport const isInFutureRating = (\n  service: Service,\n  currentDate: Date = new Date()\n): boolean => {\n  if (!service.rating_end_date) {\n    if (service.rating_start_date) {\n      return currentDate < stringToDateObject(service.rating_start_date!);\n    }\n    return false;\n  }\n\n  const ratingStartDate = stringToDateObject(service.rating_start_date!);\n  const ratingEndDate = stringToDateObject(service.rating_end_date!);\n  return currentDate < ratingStartDate && currentDate < ratingEndDate;\n};\n\nconst areSimilarServices = (service1: Service, service2: Service): boolean => {\n  const properties = [\n    \"valid_days\",\n    \"typicality\",\n    \"type\",\n    \"rating_start_date\",\n    \"rating_end_date\",\n    \"name\",\n    \"description\"\n  ];\n  return _.every(properties, (p: keyof Service) =>\n    _.isEqual(service2[p], service1[p])\n  );\n};\n\n// If two similar services are present, show only one. Choose the first\n// sequentially (this depends on the input list already being sorted by\n// start_date).\nexport const dedupeServices = (services: Service[]): Service[] =>\n  _.uniqWith(services, areSimilarServices);\n\nexport const groupServicesByDateRating = (\n  services: Service[],\n  currentDate: Date = new Date()\n): Dictionary<Service[]> =>\n  _.groupBy(services, (service: Service) => {\n    if (service.typicality === \"holiday_service\") {\n      return ServiceGroupNames.HOLIDAY;\n    }\n\n    if (service.type === \"other\") {\n      return ServiceGroupNames.OTHER;\n    }\n\n    // if there's no rating end date, this is probably a CR or Ferry\n    // don't use the rating dates in the returned text in that case.\n    // additionally, prioritize current service/rating in grouping\n    if (!service.rating_end_date) {\n      if (\n        isInCurrentService(service, currentDate) ||\n        isInCurrentRating(service, currentDate)\n      ) {\n        return ServiceGroupNames.CURRENT;\n      }\n      if (isInFutureRating(service, currentDate)) {\n        return ServiceGroupNames.FUTURE;\n      }\n    }\n\n    const ratingStartDate = stringToDateObject(service.rating_start_date!);\n    const ratingEndDate = stringToDateObject(service.rating_end_date!);\n\n    if (isInCurrentRating(service, currentDate)) {\n      return `${ServiceGroupNames.CURRENT} (${\n        service.rating_description\n      }, ends ${shortDate(ratingEndDate)})`;\n    }\n\n    if (isInFutureRating(service, currentDate)) {\n      return `${ServiceGroupNames.FUTURE} (${\n        service.rating_description\n      }, starts ${shortDate(ratingStartDate)})`;\n    }\n\n    return ServiceGroupNames.OTHER;\n  });\n\n// sort the option groups\nconst optGroupOrder: { [key: string]: number } = {\n  [ServiceGroupNames.CURRENT]: 4,\n  [ServiceGroupNames.HOLIDAY]: 3,\n  [ServiceGroupNames.FUTURE]: 2,\n  [ServiceGroupNames.OTHER]: 1\n};\n\n// sort the service types\nconst serviceTypeOrder: { [key in ServiceType]: number } = {\n  weekday: 4,\n  saturday: 3,\n  sunday: 2,\n  other: 1\n};\n\n/* eslint-disable @typescript-eslint/camelcase */\n// sort the service typicalities\nconst serviceTypicalityOrder: { [key in ServiceTypicality]: number } = {\n  unplanned_disruption: 4,\n  planned_disruption: 3,\n  holiday_service: 2,\n  extra_service: 1,\n  typical_service: 0,\n  unknown: 0\n};\n/* eslint-enable @typescript-eslint/camelcase */\n\n// enable sorting of services by rating dates,\n// service type, service typicality, and service dates\nexport const serviceComparator = (\n  {\n    type: type1,\n    valid_days: validDays1,\n    typicality: typicality1,\n    start_date: date1\n  }: Service,\n  {\n    type: type2,\n    valid_days: validDays2,\n    typicality: typicality2,\n    start_date: date2\n  }: Service\n): number =>\n  serviceTypeOrder[type2] - serviceTypeOrder[type1] ||\n  validDays1[0] - validDays2[0] ||\n  serviceTypicalityOrder[typicality2] - serviceTypicalityOrder[typicality1] ||\n  stringToDateObject(date1).getTime() - stringToDateObject(date2).getTime();\n\n// group names may have extra verbiage\nexport const optGroupComparator = (groupA: string, groupB: string): number => {\n  const optGroupNames = Object.values(ServiceGroupNames);\n  const a = optGroupNames.find(name => groupA.includes(name));\n  const b = optGroupNames.find(name => groupB.includes(name));\n  return optGroupOrder[b!] - optGroupOrder[a!];\n};\n\nexport const hasMultipleWeekdaySchedules = (services: Service[]): boolean =>\n  services.filter(\n    service =>\n      service.type === \"weekday\" && service.typicality !== \"holiday_service\"\n  ).length > 1;\n\nconst dayIntegerToString = (day: DayInteger): string =>\n  [\n    \"Monday\",\n    \"Tuesday\",\n    \"Wednesday\",\n    \"Thursday\",\n    \"Friday\",\n    \"Saturday\",\n    \"Sunday\"\n  ][day - 1];\n\nconst daysAreConsecutive = (days: DayInteger[]): boolean => {\n  const [day, nextDay, ...rest] = days;\n  if (rest.length === 0) return day + 1 === nextDay;\n  if (day + 1 !== nextDay) return false;\n  return daysAreConsecutive([nextDay, ...rest]);\n};\n\nexport const serviceDays = ({\n  type,\n  valid_days: validDays\n}: Service): string => {\n  if (type === \"saturday\" || type === \"sunday\") return \"\";\n\n  if (validDays.length === 1) return `${dayIntegerToString(validDays[0])}`;\n\n  if (daysAreConsecutive(validDays)) {\n    return validDays[0] === 1 && validDays[validDays.length - 1] === 5\n      ? \"Weekday\"\n      : `${dayIntegerToString(validDays[0])} - ${dayIntegerToString(\n          validDays[validDays.length - 1]\n        )}`;\n  }\n\n  return `${validDays.map(dayIntegerToString).join(\", \")}`;\n};\n","import { useReducer } from \"react\";\n\n/**\n * Fetching comprises a simple state machine flow:\n *\n * NotStarted → Loading → Data\n *                      ↳ Error\n */\n// Exported just for testing\nexport enum FetchStatus {\n  NotStarted = 1,\n  Loading,\n  Data,\n  Error\n}\n\ninterface StartFetchAction {\n  type: \"FETCH_STARTED\";\n}\n\nconst startFetch = (): StartFetchAction => ({ type: \"FETCH_STARTED\" });\n\ninterface CompleteFetchAction<T> {\n  type: \"FETCH_COMPLETE\";\n  payload: T;\n}\n\nconst completeFetch = <T>(payload: T): CompleteFetchAction<T> => ({\n  type: \"FETCH_COMPLETE\",\n  payload\n});\n\ninterface ErrorFetchAction {\n  type: \"FETCH_ERROR\";\n}\n\nconst errorFetch = (): ErrorFetchAction => ({ type: \"FETCH_ERROR\" });\n\nexport type FetchAction<T> =\n  | StartFetchAction\n  | CompleteFetchAction<T>\n  | ErrorFetchAction;\n\nexport interface FetchState<T> {\n  status: FetchStatus;\n  data?: T;\n}\n\nconst createInitialState = <T>(): FetchState<T> => ({\n  status: FetchStatus.NotStarted,\n  data: undefined\n});\n\nexport const isNotStarted = <T>({ status }: FetchState<T>): boolean =>\n  status === FetchStatus.NotStarted;\n\nexport const isLoading = <T>({ status }: FetchState<T>): boolean =>\n  status === FetchStatus.Loading;\n\nexport const hasData = <T>({ status }: FetchState<T>): boolean =>\n  status === FetchStatus.Data;\n\nexport const gotError = <T>({ status }: FetchState<T>): boolean =>\n  status === FetchStatus.Error;\n\ntype Reducer<T> = (\n  state: FetchState<T>,\n  action: FetchAction<T>\n) => FetchState<T>;\n\nconst createFetchReducer = <T>(): Reducer<T> => (state, action) => {\n  switch (action.type) {\n    case \"FETCH_STARTED\":\n      return { ...state, status: FetchStatus.Loading, data: undefined };\n    case \"FETCH_COMPLETE\":\n      return { ...state, status: FetchStatus.Data, data: action.payload };\n    case \"FETCH_ERROR\":\n      return { ...state, status: FetchStatus.Error };\n    default:\n      return state;\n  }\n};\n\nexport type Fetcher = () => Promise<Response>;\n\nexport type Parser<T> = (json: JSON) => T;\n\ninterface FetchProps<T> {\n  fetcher: Fetcher;\n  parser: Parser<T>;\n}\n\nexport type Fetch<T> = ({ fetcher, parser }: FetchProps<T>) => Promise<void>;\n\nconst parseJsonResponse = (response: Response): Promise<JSON> => {\n  if (response.ok) return response.json();\n  throw new Error(response.statusText);\n};\n\nexport const fetch = <T>(\n  dispatch: (action: FetchAction<T>) => void\n): Fetch<T> => ({ fetcher, parser }) => {\n  dispatch(startFetch());\n\n  return fetcher()\n    .then(parseJsonResponse)\n    .then((json: JSON) => dispatch(completeFetch<T>(parser(json))))\n    .catch(() => dispatch(errorFetch()));\n};\n\nconst useFetch = <T>(): [FetchState<T>, Fetch<T>] => {\n  const [state, dispatch] = useReducer(\n    createFetchReducer<T>(),\n    createInitialState<T>()\n  );\n\n  return [state, fetch<T>(dispatch)];\n};\n\nexport default useFetch;\n","import React, { ReactElement } from \"react\";\nimport { hasBranchLines } from \"./line-diagram-helpers\";\nimport Diagram from \"./graphics/Diagram\";\nimport StopListWithBranches from \"./StopListWithBranches\";\nimport { CommonLineDiagramProps } from \"./__line-diagram\";\nimport useStopPositions, { RefList } from \"./graphics/useStopPositions\";\nimport StopCard from \"./StopCard\";\nimport { hasPredictionTime } from \"../../../models/prediction\";\n\nexport const StopRefContext = React.createContext<[RefList, () => void]>([\n  {},\n  () => {}\n]);\n\nconst LineDiagramWithStops = (\n  props: CommonLineDiagramProps\n): ReactElement<HTMLElement> => {\n  const { stops, handleStopClick, liveData } = props;\n\n  // create a ref for each stop - we will use this to track the location of the stop so we can place the line diagram bubbles\n  const [stopRefsMap, updateAllStopCoords] = useStopPositions(stops);\n\n  const anyCrowding = Object.values(liveData).some(\n    ({ headsigns }): boolean =>\n      headsigns\n        ? headsigns\n            .filter(hasPredictionTime)\n            .some(\n              ({ time_data_with_crowding_list: timeData }): boolean =>\n                !!timeData[0].crowding\n            )\n        : false\n  );\n\n  return (\n    <StopRefContext.Provider value={[stopRefsMap, updateAllStopCoords]}>\n      <div\n        className={`m-schedule-diagram ${\n          !anyCrowding ? \"u-no-crowding-data\" : \"\"\n        }`}\n      >\n        <Diagram lineDiagram={stops} liveData={liveData} />\n        {hasBranchLines(stops) ? (\n          <StopListWithBranches {...props} />\n        ) : (\n          <ol>\n            {stops.map(stop => (\n              <StopCard\n                key={stop.route_stop.id}\n                stop={stop}\n                onClick={handleStopClick}\n                liveData={liveData[stop.route_stop.id]}\n              />\n            ))}\n          </ol>\n        )}\n      </div>\n    </StopRefContext.Provider>\n  );\n};\n\nexport default LineDiagramWithStops;\n","import { KeyboardEvent as ReactKeyboardEvent } from \"react\";\n\nexport const isEnter = (key: number | string): boolean =>\n  key === \"Enter\" || key === 13;\n\nexport const isEscape = (key: number | string): boolean =>\n  key === \"Escape\" || key === 27;\n\n// for vanilla JS\nexport const handleNativeEnterKeyPress = (\n  e: KeyboardEvent,\n  cb: Function\n): void => (isEnter(e.key || e.keyCode) ? cb(e) : () => {});\n\nexport const handleNativeEscapeKeyPress = (\n  e: KeyboardEvent,\n  cb: Function\n): void => (isEscape(e.key || e.keyCode) ? cb(e) : () => {});\n\n// for React\nexport const handleReactEnterKeyPress = (\n  e: ReactKeyboardEvent,\n  onClick: Function\n): void => {\n  if (e.key === \"Enter\") {\n    onClick();\n  }\n};\n\nexport const handleReactExitKeyPress = (\n  e: ReactKeyboardEvent,\n  onClick: Function\n): void => {\n  if (e.key === \"Escape\") {\n    onClick();\n  }\n};\n","import React from \"react\";\n\nexport default (\n  className: string,\n  svgText: string,\n  ariaHide: boolean = true\n): JSX.Element => (\n  <span\n    className={className ? `notranslate ${className}` : \"notranslate\"}\n    aria-hidden={ariaHide ? \"true\" : \"false\"}\n    // eslint-disable-next-line react/no-danger\n    dangerouslySetInnerHTML={{ __html: svgText }}\n  />\n);\n","import React, {\n  ReactElement,\n  useReducer,\n  useEffect,\n  Dispatch,\n  useRef\n} from \"react\";\nimport { initChannel, stopChannel, SocketEvent } from \"./Channel\";\nimport Map from \"../../leaflet/components/Map\";\nimport getBounds from \"../../leaflet/bounds\";\nimport {\n  MapData,\n  MapMarker as Marker\n} from \"../../leaflet/components/__mapdata\";\nimport CrowdingPill from \"./line-diagram/CrowdingPill\";\n\ninterface Props {\n  channel: string;\n  data: MapData;\n  shapeIds: string[];\n}\n\ninterface EventData {\n  marker: Marker;\n}\n\ntype Action = SocketEvent<EventData[]>;\n\ninterface ActionWithChannel {\n  action: Action;\n  channel: string;\n}\n\nconst setupChannels = (\n  channel: string,\n  dispatch: Dispatch<ActionWithChannel>\n): void => {\n  dispatch({ action: { event: \"setChannel\", data: [] }, channel });\n  /* istanbul ignore next */\n  initChannel<EventData[]>(channel, (action: Action) =>\n    dispatch({ action, channel })\n  );\n  /* istanbul ignore next */\n  initChannel<EventData[]>(\"vehicles:remove\", (action: Action) =>\n    dispatch({ action, channel })\n  );\n};\n\nconst stopChannels = (channel: string): void => {\n  stopChannel(channel);\n  stopChannel(\"vehicles:remove\");\n};\n\nexport const iconOpts = (\n  icon: string | null\n): {\n  icon_size?: [number, number];\n  icon_anchor?: [number, number];\n} => {\n  switch (icon) {\n    case null:\n      return {};\n\n    case \"vehicle-bordered-expanded\":\n      return {\n        icon_size: [18, 18], // eslint-disable-line @typescript-eslint/camelcase\n        icon_anchor: [6, 6] // eslint-disable-line @typescript-eslint/camelcase\n      };\n\n    case \"stop-circle-bordered-expanded\":\n      return {\n        icon_size: [12, 12], // eslint-disable-line @typescript-eslint/camelcase\n        icon_anchor: [6, 6] // eslint-disable-line @typescript-eslint/camelcase\n      };\n\n    default:\n      throw new Error(`unexpected icon type: ${icon}`);\n  }\n};\n\nconst zIndex = (icon: string | null): number | undefined =>\n  icon === \"vehicle-bordered-expanded\" ? 1000 : undefined;\n\nconst updateMarker = (marker: Marker): Marker => ({\n  ...marker,\n  tooltip: (\n    <div>\n      {marker.vehicle_crowding && (\n        <>\n          <CrowdingPill crowding={marker.vehicle_crowding} />\n          <br />\n        </>\n      )}\n      {marker.tooltip_text}\n    </div>\n  ),\n  icon_opts: iconOpts(marker.icon), // eslint-disable-line @typescript-eslint/camelcase\n  z_index: zIndex(marker.icon) // eslint-disable-line @typescript-eslint/camelcase\n});\n\nconst isVehicleMarker = (marker: Marker): boolean =>\n  marker.icon ? marker.icon.includes(\"vehicle\") : false;\n\nconst shouldVehicleDisplay = (\n  marker: Marker,\n  shapeIdsInDirection: string[]\n): boolean => {\n  if (marker.shape_id) {\n    return shapeIdsInDirection.some(shapeId => shapeId === marker.shape_id);\n  }\n  return true;\n};\n\ninterface IdHash {\n  [id: string]: true;\n}\n\nconst shouldRemoveMarker = (id: string | null, idHash: IdHash): boolean =>\n  id !== null && idHash[id] === true;\n\ninterface State {\n  channel: string;\n  markers: Marker[];\n  shapeIds: string[];\n}\n\nexport const reducer = (\n  state: State,\n  actionWithChannel: ActionWithChannel\n): State => {\n  const { action, channel } = actionWithChannel;\n  const { shapeIds } = state;\n  if (channel !== state.channel && action.event !== \"setChannel\") return state;\n  switch (action.event) {\n    case \"setChannel\":\n      return { ...state, channel, markers: [] };\n    case \"reset\":\n      return {\n        ...state,\n        markers: state.markers\n          .filter(marker => !isVehicleMarker(marker))\n          .concat(\n            action.data\n              .filter(({ marker }: EventData) =>\n                shouldVehicleDisplay(marker, shapeIds)\n              )\n              .map(({ marker }: EventData) => updateMarker(marker))\n          )\n      };\n\n    case \"add\":\n      return {\n        ...state,\n        markers: state.markers.concat(\n          action.data\n            .filter(({ marker }) => shouldVehicleDisplay(marker, shapeIds))\n            .map(({ marker }) => updateMarker(marker))\n        )\n      };\n\n    case \"update\":\n      if (action.data.length === 0) {\n        return state;\n      }\n      if (!shouldVehicleDisplay(action.data[0].marker, shapeIds)) return state;\n      // Filter out the existing marker if necessary, always add new marker\n      return {\n        ...state,\n        markers: [\n          updateMarker(action.data[0].marker),\n          ...state.markers.filter(\n            marker => marker.id !== action.data[0].marker.id\n          )\n        ]\n      };\n    case \"remove\":\n      return {\n        ...state,\n        markers: state.markers.filter(\n          marker =>\n            !shouldRemoveMarker(\n              marker.id,\n              action.data.reduce((acc: IdHash, id: string) => {\n                acc[id] = true;\n                return acc;\n              }, {})\n            )\n        )\n      };\n    default:\n      /* istanbul ignore next */\n      throw new Error(`unexpected event: ${action}`);\n  }\n};\n\nexport default ({\n  data,\n  channel,\n  shapeIds\n}: Props): ReactElement<HTMLElement> | null => {\n  const bounds = useRef(getBounds(data.markers));\n  const [state, dispatch] = useReducer(reducer, {\n    channel,\n    markers: data.markers,\n    shapeIds\n  });\n  useEffect(\n    () => {\n      setupChannels(channel, dispatch);\n      return () => stopChannels(channel);\n    },\n    [channel, dispatch]\n  );\n  const stopMarkers = data.stop_markers\n    ? data.stop_markers.map(marker => updateMarker(marker))\n    : [];\n  const mapData = {\n    ...data,\n    markers: state.markers.concat(stopMarkers)\n  };\n  return (\n    <div className=\"m-schedule__map\">\n      <Map bounds={bounds.current} mapData={mapData} />\n    </div>\n  );\n};\n","module.exports = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 48 48\\\"><title>calendar</title><g fill=\\\"none\\\"><path d=\\\"M36.65 32.47h6.09v6.8h-6.09zM28.53 23.41h6.77v7.55h-6.77zM35.3 11.33h1.35a.75.75 0 0 0 .68-.76V3.78a.74.74 0 0 0-.68-.78H35.3a.74.74 0 0 0-.68.76v6.79a.75.75 0 0 0 .68.78zM36.65 15.1h6.09v6.8h-6.09zM36.65 23.41h6.09v7.55h-6.09zM20.41 23.41h6.77v7.55h-6.77zM21.55 39.26h5.63v-6.79h-6.51a10.82 10.82 0 0 1 .88 6.79zM19.05 30v-6.59H13v3.13A10.82 10.82 0 0 1 19.05 30zM28.53 32.47h6.77v6.8h-6.77zM28.53 15.1h6.77v6.8h-6.77zM12.96 15.1h6.09v6.8h-6.09zM19.05 11.33h1.36a.74.74 0 0 0 .67-.76V3.78a.73.73 0 0 0-.67-.78h-1.36a.73.73 0 0 0-.67.76v6.79a.74.74 0 0 0 .67.78zM20.41 15.1h6.77v6.8h-6.77z\\\"></path></g><path fill=\\\"#165c96\\\" d=\\\"M42.75 6H40V3.78A3.61 3.61 0 0 0 36.65 0H35.3a3.61 3.61 0 0 0-3.38 3.78V6h-8.13V3.78A3.61 3.61 0 0 0 20.41 0h-1.36a3.61 3.61 0 0 0-3.38 3.78V6H13a2.9 2.9 0 0 0-2.71 3v17.38a10.82 10.82 0 1 0 2 21.54 11 11 0 0 0 8.21-5.63h22.25a2.9 2.9 0 0 0 2.71-3V9.06A2.9 2.9 0 0 0 42.75 6zM18.3 39.26a7.64 7.64 0 0 1-1.67 3 7.67 7.67 0 1 1 1.67-3zm.75-9.26A10.82 10.82 0 0 0 13 26.54v-3.13h6.09zm0-8.13H13V15.1h6.09zm-.67-11.33V3.78a.73.73 0 0 1 .67-.78h1.36a.73.73 0 0 1 .67.76v6.79a.74.74 0 0 1-.67.76h-1.36a.74.74 0 0 1-.67-.74zm8.8 28.69h-5.63a10.82 10.82 0 0 0-.88-6.79h6.51zm0-8.3h-6.77v-7.52h6.77zm0-9.06h-6.77V15.1h6.77zm8.12 17.39h-6.77v-6.79h6.77zm0-8.3h-6.77v-7.55h6.77zm0-9.06h-6.77v-6.8h6.77zm-.68-11.33V3.78A.74.74 0 0 1 35.3 3h1.35a.74.74 0 0 1 .68.76v6.79a.75.75 0 0 1-.68.76H35.3a.75.75 0 0 1-.68-.74zm8.13 28.69h-6.1v-6.79h6.1zm0-8.3h-6.1v-7.55h6.1zm0-9.06h-6.1v-6.8h6.1z\\\"></path><path fill=\\\"#165c96\\\" d=\\\"M12.28 31.76h-.9a.45.45 0 0 0-.45.45v5H7.77a.45.45 0 0 0-.45.45v.91a.45.45 0 0 0 .45.45h4.51a.44.44 0 0 0 .45-.45v-6.36a.44.44 0 0 0-.45-.45z\\\"></path></svg>\"","import React, { ReactElement } from \"react\";\nimport { Route, DirectionId } from \"../../__v3api\";\nimport {\n  SimpleStopMap,\n  RoutePatternsByDirection,\n  ServiceInSelector,\n  ScheduleNote as ScheduleNoteType,\n  SelectedOrigin\n} from \"./__schedule\";\nimport ScheduleFinderForm from \"./schedule-finder/ScheduleFinderForm\";\nimport ScheduleFinderModal, {\n  Mode as ModalMode\n} from \"./schedule-finder/ScheduleFinderModal\";\nimport { getCurrentState, storeHandler } from \"../store/ScheduleStore\";\n\ninterface Props {\n  updateURL: (origin: SelectedOrigin, direction?: DirectionId) => void;\n  services: ServiceInSelector[];\n  directionId: DirectionId;\n  route: Route;\n  stops: SimpleStopMap;\n  routePatternsByDirection: RoutePatternsByDirection;\n  today: string;\n  scheduleNote: ScheduleNoteType | null;\n  changeDirection: (direction: DirectionId) => void;\n  selectedOrigin: SelectedOrigin;\n  changeOrigin: (origin: SelectedOrigin) => void;\n  closeModal: () => void;\n  modalMode: ModalMode;\n  modalOpen: boolean;\n}\n\nconst ScheduleFinder = ({\n  updateURL,\n  directionId,\n  route,\n  services,\n  stops,\n  routePatternsByDirection,\n  today,\n  scheduleNote,\n  modalMode,\n  selectedOrigin,\n  changeDirection,\n  changeOrigin,\n  modalOpen,\n  closeModal\n}: Props): ReactElement<HTMLElement> => {\n  const openOriginModal = (): void => {\n    const currentState = getCurrentState();\n    const { modalOpen: modalIsOpen } = currentState;\n    if (!modalIsOpen) {\n      storeHandler({\n        type: \"OPEN_MODAL\",\n        newStoreValues: {\n          modalMode: \"origin\"\n        }\n      });\n    }\n  };\n\n  const openScheduleModal = (): void => {\n    const currentState = getCurrentState();\n    const { modalOpen: modalIsOpen } = currentState;\n    if (selectedOrigin !== undefined && !modalIsOpen) {\n      storeHandler({\n        type: \"OPEN_MODAL\",\n        newStoreValues: {\n          modalMode: \"schedule\"\n        }\n      });\n    }\n  };\n\n  const handleOriginSelectClick = (): void => {\n    storeHandler({\n      type: \"OPEN_MODAL\",\n      newStoreValues: {\n        modalMode: \"origin\"\n      }\n    });\n  };\n\n  return (\n    <div className=\"schedule-finder\">\n      <ScheduleFinderForm\n        onDirectionChange={changeDirection}\n        onOriginChange={changeOrigin}\n        onOriginSelectClick={openOriginModal}\n        onSubmit={openScheduleModal}\n        route={route}\n        selectedDirection={directionId}\n        selectedOrigin={selectedOrigin}\n        stopsByDirection={stops}\n      />\n\n      {modalOpen && (\n        <ScheduleFinderModal\n          closeModal={closeModal}\n          directionChanged={changeDirection}\n          initialMode={modalMode}\n          initialDirection={directionId}\n          initialOrigin={selectedOrigin}\n          handleOriginSelectClick={handleOriginSelectClick}\n          originChanged={changeOrigin}\n          route={route}\n          routePatternsByDirection={routePatternsByDirection}\n          scheduleNote={scheduleNote}\n          services={services}\n          stops={stops}\n          today={today}\n          updateURL={updateURL}\n        />\n      )}\n    </div>\n  );\n};\n\nexport default ScheduleFinder;\n","import React, { FormEvent, ReactElement, useState } from \"react\";\nimport { DirectionId, DirectionInfo, Route } from \"../../../__v3api\";\nimport { SimpleStopMap, SelectedOrigin } from \"../__schedule\";\nimport icon from \"../../../../static/images/icon-schedule-finder.svg\";\nimport renderSvg from \"../../../helpers/render-svg\";\nimport SelectContainer from \"./SelectContainer\";\n\nconst validDirections = (directionInfo: DirectionInfo): DirectionId[] =>\n  ([0, 1] as DirectionId[]).filter(dir => directionInfo[dir] !== null);\n\ninterface Props {\n  onDirectionChange: (direction: DirectionId) => void;\n  onOriginChange: (origin: SelectedOrigin) => void;\n  onOriginSelectClick: () => void;\n  onSubmit?: () => void;\n  route: Route;\n  selectedDirection: DirectionId;\n  selectedOrigin: SelectedOrigin;\n  stopsByDirection: SimpleStopMap;\n}\n\nexport default ({\n  onDirectionChange,\n  onOriginChange,\n  onSubmit = () => {},\n  onOriginSelectClick,\n  route,\n  selectedDirection,\n  selectedOrigin,\n  stopsByDirection\n}: Props): ReactElement => {\n  const {\n    direction_names: directionNames,\n    direction_destinations: directionDestinations\n  } = route;\n\n  const [originError, setOriginError] = useState(false);\n\n  const handleOriginClick = (): void => {\n    setOriginError(false);\n    onOriginSelectClick();\n  };\n\n  const handleSubmit = (event: FormEvent): void => {\n    event.preventDefault();\n\n    if (!selectedOrigin) {\n      setOriginError(true);\n    } else {\n      setOriginError(false);\n      onSubmit();\n    }\n  };\n\n  return (\n    <form onSubmit={handleSubmit}>\n      <h2 className=\"h3 schedule-finder__heading\">\n        {renderSvg(\"c-svg__icon\", icon)} Schedule Finder\n      </h2>\n\n      <div className=\"schedule-finder__prompt\">\n        Choose a stop to get schedule information and real-time departure\n        predictions.\n      </div>\n\n      {originError && (\n        <div className=\"error-container\">\n          <span role=\"alert\">Please provide an origin</span>\n        </div>\n      )}\n\n      <div className=\"schedule-finder__inputs\">\n        <label className=\"schedule-finder__label\">\n          Choose a direction\n          <SelectContainer>\n            <select\n              className=\"c-select-custom\"\n              value={selectedDirection}\n              onChange={e =>\n                onDirectionChange(parseInt(e.target.value, 10) as DirectionId)\n              }\n            >\n              {validDirections(directionNames).map(direction => (\n                <option key={direction} value={direction}>\n                  {directionNames[direction]!.toUpperCase()}{\" \"}\n                  {directionDestinations[direction]!}\n                </option>\n              ))}\n            </select>\n          </SelectContainer>\n        </label>\n\n        <label className=\"schedule-finder__label\">\n          Choose an origin stop\n          <SelectContainer error={originError} handleClick={handleOriginClick}>\n            <select\n              className=\"c-select-custom c-select-custom--noclick\"\n              value={selectedOrigin || \"\"}\n              onChange={e => onOriginChange(e.target.value || null)}\n            >\n              <option value=\"\">Select</option>\n              {stopsByDirection[selectedDirection].map(({ id, name }) => (\n                <option key={id} value={id}>\n                  {name}\n                </option>\n              ))}\n            </select>\n          </SelectContainer>\n        </label>\n      </div>\n\n      <div className=\"schedule-finder__submit text-right\">\n        <input\n          className=\"btn btn-primary\"\n          type=\"submit\"\n          value=\"Get schedules\"\n        />\n      </div>\n    </form>\n  );\n};\n","import React, { ReactElement, ReactNode } from \"react\";\nimport { handleReactEnterKeyPress } from \"../../../helpers/keyboard-events\";\nimport renderSvg from \"../../../helpers/render-svg\";\nimport arrowIcon from \"../../../../static/images/icon-down-arrow.svg\";\n\ninterface SelectContainerProps {\n  children: ReactNode;\n  error?: boolean;\n  handleClick?: Function;\n}\n\nconst SelectContainer = ({\n  children,\n  error = false,\n  handleClick\n}: SelectContainerProps): ReactElement<HTMLElement> => (\n  <div\n    tabIndex={0}\n    className={`c-select-custom__container ${error ? \"error\" : \"\"}`}\n    role=\"button\"\n    onClick={e => {\n      if (handleClick) {\n        handleClick(e);\n      }\n    }}\n    onKeyUp={e =>\n      handleReactEnterKeyPress(e, () => {\n        if (handleClick) {\n          handleClick(e);\n        }\n      })\n    }\n  >\n    {children}\n    {renderSvg(\"c-svg__icon c-select-custom__arrow\", arrowIcon)}\n  </div>\n);\n\nexport default SelectContainer;\n","import React, { ReactElement, useState, useEffect } from \"react\";\nimport { searchIcon } from \"../helpers/icon\";\n\ninterface Props {\n  id: string;\n  labelText: string;\n  onChange: (q: string) => void;\n  placeholder?: string;\n  className?: string;\n}\n\nconst SearchBox = ({\n  id,\n  labelText,\n  onChange,\n  placeholder,\n  className\n}: Props): ReactElement<HTMLElement> | null => {\n  const [query, setQuery] = useState(\"\");\n\n  useEffect(\n    () => {\n      onChange(query);\n    },\n    [query, onChange]\n  );\n\n  return (\n    <div className={`${className} c-form__input-container`}>\n      <label htmlFor={id} className=\"sr-only\">\n        {labelText}\n      </label>\n      <input\n        className=\"c-form__input\"\n        id={id}\n        type=\"text\"\n        onChange={event => {\n          setQuery(event.target.value);\n        }}\n        value={query}\n        placeholder={placeholder || labelText}\n      />\n      {query !== \"\" && (\n        <button\n          className=\"c-form__reset-btn btn-link\"\n          aria-label=\"reset\"\n          type=\"button\"\n          onClick={() => {\n            setQuery(\"\");\n          }}\n        >\n          <i\n            aria-hidden=\"true\"\n            className=\"c-form__reset-icon fa fa-times-circle\"\n          />\n        </button>\n      )}\n      <button\n        className=\"c-form__submit-btn\"\n        aria-label=\"search\"\n        type=\"button\"\n        onClick={() => {\n          setQuery(query);\n        }}\n      >\n        {searchIcon(\"c-svg__icon-search-reverse-default\")}\n      </button>\n    </div>\n  );\n};\n\nexport default SearchBox;\n","import React from \"react\";\nimport { TooltipWrapper, crowdingIcon } from \"../../../helpers/icon\";\nimport { crowdingDescriptions } from \"../../../models/vehicle\";\nimport { CrowdingType } from \"../__schedule\";\n\ninterface LiveCrowdingIconProps {\n  crowding: CrowdingType;\n}\n\nconst LiveCrowdingIcon = ({ crowding }: LiveCrowdingIconProps): JSX.Element => (\n  <div className=\"m-schedule-diagram__prediction-crowding\">\n    {crowding ? (\n      <TooltipWrapper\n        tooltipText={`Currently <strong>${crowdingDescriptions(\n          crowding\n        ).toLowerCase()}</strong>`}\n        tooltipOptions={{\n          placement: \"left\",\n          animation: false,\n          html: true\n        }}\n      >\n        {crowdingIcon(`c-icon__crowding--${crowding}`)}\n      </TooltipWrapper>\n    ) : (\n      crowdingIcon(\"c-icon__crowding--crowding_unavailable\")\n    )}\n  </div>\n);\n\nexport default LiveCrowdingIcon;\n","import { KeyboardEvent as ReactKeyboardEvent } from \"react\";\n\nconst nextRoutePatternIndex = (\n  currentId: string,\n  routePatternIds: string[]\n): number => {\n  const index = routePatternIds.indexOf(currentId);\n  return index === routePatternIds.length - 1 ? 0 : index + 1;\n};\n\nconst prevRoutePatternIndex = (\n  currentId: string,\n  routePatternIds: string[]\n): number => {\n  const index = routePatternIds.indexOf(currentId);\n  return index === 0 ? routePatternIds.length - 1 : index - 1;\n};\n\nexport default (e: ReactKeyboardEvent, routePatternIds: string[]): void => {\n  if (\n    e.key !== \"Tab\" &&\n    e.key !== \"ArrowRight\" &&\n    e.key !== \"ArrowLeft\" &&\n    e.key !== \"ArrowDown\" &&\n    e.key !== \"ArrowUp\"\n  )\n    return;\n\n  e.preventDefault();\n\n  const targetEl = e.target as HTMLDivElement;\n  const targetElId = targetEl.id.replace(\"route-pattern_\", \"\");\n\n  // forward\n  if (\n    (e.key === \"Tab\" && !e.shiftKey) ||\n    e.key === \"ArrowRight\" ||\n    e.key === \"ArrowDown\"\n  ) {\n    const nextIndex = nextRoutePatternIndex(targetElId, routePatternIds);\n    const nextElId = `route-pattern_${routePatternIds[nextIndex]}`;\n    // eslint-disable-next-line no-unused-expressions\n    document.getElementById(nextElId) &&\n      /* istanbul ignore next */\n      document.getElementById(nextElId)!.focus();\n  }\n\n  // backwards\n  if (\n    (e.key === \"Tab\" && e.shiftKey) ||\n    e.key === \"ArrowLeft\" ||\n    e.key === \"ArrowUp\"\n  ) {\n    const prevIndex = prevRoutePatternIndex(targetElId, routePatternIds);\n    const prevElId = `route-pattern_${routePatternIds[prevIndex]}`;\n    // eslint-disable-next-line no-unused-expressions\n    document.getElementById(prevElId) &&\n      /* istanbul ignore next */\n      document.getElementById(prevElId)!.focus();\n  }\n};\n","import React, { ReactElement } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { LineDiagramStop } from \"../../__schedule\";\nimport {\n  areOnDifferentBranchLines,\n  isMergeStop,\n  isBranchTerminusStop\n} from \"../line-diagram-helpers\";\nimport {\n  StopCoord,\n  CoordState,\n  BRANCH_LINE_WIDTH,\n  BASE_LINE_WIDTH,\n  BRANCH_SPACING\n} from \"./graphic-helpers\";\n\ninterface PathGraphicsProps {\n  from: LineDiagramStop;\n  to: LineDiagramStop;\n}\nconst Line = ({ from, to }: PathGraphicsProps): ReactElement | null => {\n  const fromCoords: StopCoord | null = useSelector(\n    (state: CoordState) => state[from.route_stop.id]\n  );\n  const toCoords: StopCoord | null = useSelector(\n    (state: CoordState) => state[to.route_stop.id]\n  );\n  if (!fromCoords || !toCoords) return null;\n  if (isMergeStop(to) && from.stop_data.length === to.stop_data.length) {\n    return null;\n  }\n\n  const [x1, y1] = fromCoords;\n  const y2 = toCoords[1];\n\n  if (isMergeStop(from) && !areOnDifferentBranchLines(from, to)) {\n    // just draw one line.\n    const lineProps: React.SVGProps<SVGLineElement> = {\n      key: `${from.route_stop.id}-${to.route_stop.id}`\n    };\n    lineProps.strokeWidth = `${BASE_LINE_WIDTH}px`;\n    lineProps.x1 = `${x1}px`;\n    lineProps.x2 = lineProps.x1;\n    lineProps.y1 = `${y1}px`;\n    lineProps.y2 = `${y2}px`;\n    if (\n      from.stop_data.some(sd => sd[\"has_disruption?\"]) &&\n      to.stop_data.some(sd => sd[\"has_disruption?\"])\n    ) {\n      lineProps.stroke = \"url(#diagonalHatch)\";\n    }\n    return <line className=\"line-diagram-svg__line\" {...lineProps} />;\n  }\n\n  // otherwise let's just show all the lines...\n  return (\n    <>\n      {from.stop_data.map((branchLine, branchIndex) => {\n        const lineProps: React.SVGProps<SVGLineElement> = {\n          key: `${from.route_stop.id}-${to.route_stop.id}-${\n            branchLine.type\n          }-${branchIndex}`\n        };\n        lineProps.strokeWidth = `${\n          branchIndex >= 1 &&\n          !(isBranchTerminusStop(from) || isBranchTerminusStop(to)) &&\n          (branchLine.type === \"stop\" ||\n            to.stop_data[branchIndex].type === \"stop\")\n            ? BRANCH_LINE_WIDTH\n            : BASE_LINE_WIDTH\n        }px`;\n        lineProps.x1 = `${BRANCH_SPACING * branchIndex +\n          BASE_LINE_WIDTH +\n          1}px`;\n        lineProps.x2 = lineProps.x1;\n        lineProps.y1 = `${y1}px`;\n        lineProps.y2 = `${y2}px`;\n        if (branchLine[\"has_disruption?\"]) {\n          lineProps.stroke = \"url(#diagonalHatch)\";\n        }\n        return <line className=\"line-diagram-svg__line\" {...lineProps} />;\n      })}\n    </>\n  );\n};\n\nexport default Line;\n","import { LatLng, latLng, LatLngBounds, latLngBounds } from \"leaflet\";\nimport { MapMarker as Marker } from \"./components/__mapdata\";\n\nconst getBounds = (markers: Marker[]): LatLngBounds => {\n  const points: LatLng[] = markers.map(m => latLng(m.latitude, m.longitude));\n  return latLngBounds(points);\n};\n\nexport default getBounds;\n","import { Icon } from \"leaflet\";\nimport { IconOpts } from \"../leaflet/components/__mapdata\";\n\nexport type IconType = (\n  icon: string | null,\n  opts: IconOpts | undefined\n) => Icon | undefined;\n\ninterface LeafletOpts {\n  iconSize: [number, number];\n  iconAnchor: [number, number];\n  popupAnchor: [number, number];\n}\n\nexport const defaultIconOpts: LeafletOpts = {\n  iconAnchor: [22, 55],\n  iconSize: [45, 75],\n  popupAnchor: [0, -37]\n};\n\nexport default (\n  icon: string | null,\n  opts?: IconOpts | null\n): Icon | undefined => {\n  const iconOpts =\n    opts !== null && opts\n      ? {\n          iconAnchor: opts.icon_anchor || defaultIconOpts.iconAnchor,\n          iconSize: opts.icon_size || defaultIconOpts.iconSize,\n          popupAnchor: opts.popup_anchor || defaultIconOpts.popupAnchor\n        }\n      : defaultIconOpts;\n  return icon === null\n    ? undefined\n    : new Icon({\n        ...iconOpts,\n        iconUrl: `/images/icon-${icon}.svg`,\n        iconRetinaUrl: `/images/icon-${icon}.svg`\n      });\n};\n","module.exports = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 16 16\\\"><title>green line</title><path fill=\\\"#00843d\\\" d=\\\"M8 0a8 8 0 1 0 8 8 8 8 0 0 0-8-8\\\"></path><g fill=\\\"#fff\\\"><path d=\\\"M6.083 11.534a2.638 2.638 0 0 1-1.034.216 3.677 3.677 0 0 1-1.48-.286 3.181 3.181 0 0 1-1.11-.789 3.488 3.488 0 0 1-.693-1.18 4.327 4.327 0 0 1-.241-1.46 4.474 4.474 0 0 1 .241-1.49 3.592 3.592 0 0 1 .692-1.2 3.18 3.18 0 0 1 1.11-.804 3.62 3.62 0 0 1 1.48-.291 3.49 3.49 0 0 1 1.07.166 3.037 3.037 0 0 1 .934.486 2.631 2.631 0 0 1 1.02 1.878H6.564a1.51 1.51 0 0 0-.542-.903 1.578 1.578 0 0 0-.974-.302 1.84 1.84 0 0 0-.903.206 1.706 1.706 0 0 0-.603.552 2.428 2.428 0 0 0-.337.788 3.96 3.96 0 0 0-.105.914 3.683 3.683 0 0 0 .105.879 2.378 2.378 0 0 0 .337.768 1.723 1.723 0 0 0 .603.547 1.835 1.835 0 0 0 .903.206 1.711 1.711 0 0 0 1.21-.397 1.725 1.725 0 0 0 .497-1.15H5.169V7.715h3.012v3.875H7.177l-.16-.813a2.357 2.357 0 0 1-.934.758zM11.032 4.42v5.844h3.495v1.325h-5.07V4.421z\\\"></path></g></svg>\"","import React, { ReactElement } from \"react\";\nimport deepEqual from \"fast-deep-equal\";\nimport {\n  Icon,\n  LatLngBounds,\n  Marker as LeafletMarker,\n  MarkerOptions\n} from \"leaflet\";\nimport Leaflet from \"react-leaflet\";\nimport { MapData, MapMarker, IconOpts } from \"./__mapdata\";\n\nexport interface ZoomOpts {\n  maxZoom: number;\n  minZoom: number;\n  scrollWheelZoom: boolean;\n  style: object;\n}\n\nexport const defaultZoomOpts: ZoomOpts = {\n  maxZoom: 18,\n  minZoom: 9,\n  scrollWheelZoom: false,\n  style: { touchAction: \"none\" } // fix for chrome-android to prevent zooming page\n};\n\ninterface Props {\n  bounds?: LatLngBounds;\n  boundsByMarkers?: boolean;\n  mapData: MapData;\n}\n\nconst mapCenter = (\n  markers: MapMarker[],\n  { latitude, longitude }: { latitude: number; longitude: number }\n): [number, number] | undefined => {\n  if (markers.length === 1) return [markers[0].latitude, markers[0].longitude];\n  return [latitude, longitude];\n};\n\nconst rotateMarker = (\n  markerEl: LeafletMarker<MarkerOptions>,\n  { rotation_angle: angle }: MapMarker\n): void => {\n  // TS does not recognize setRotationAngle, which\n  // is added by the leaflet-rotatedmarker plugin\n  // @ts-ignore\n  markerEl.setRotationAngle(angle);\n};\n\nconst Component = ({\n  bounds,\n  boundsByMarkers,\n  mapData: {\n    default_center: defaultCenter,\n    markers,\n    polylines,\n    tile_server_url: tileServerUrl,\n    zoom\n  }\n}: Props): ReactElement<HTMLElement> | null => {\n  if (typeof window !== \"undefined\" && tileServerUrl !== \"\") {\n    /* eslint-disable */\n    const leaflet: typeof Leaflet = require(\"react-leaflet\");\n    const buildIcon: (\n      icon: string | null,\n      opts?: IconOpts\n    ) => Icon | undefined = require(\"../icon\").default;\n    require(\"leaflet-rotatedmarker\");\n    const FullscreenControl = require(\"react-leaflet-fullscreen\");\n    const getBounds = require(\"../bounds\").default;\n    /* eslint-enable */\n    const { Map, Marker, Polyline, Popup, TileLayer } = leaflet;\n    /* istanbul ignore next */\n    const boundsOrByMarkers = bounds || (boundsByMarkers && getBounds(markers));\n    const position = mapCenter(markers, defaultCenter);\n    const nonNullZoom = zoom === null ? undefined : zoom;\n    return (\n      <Map\n        bounds={boundsOrByMarkers}\n        center={position}\n        zoom={nonNullZoom}\n        {...defaultZoomOpts}\n      >\n        <TileLayer\n          attribution='&amp;copy <a href=\"http://osm.org/copyright\">OpenStreetMap</a> contributors'\n          url={`${tileServerUrl}/osm_tiles/{z}/{x}/{y}.png`}\n        />\n        {polylines.map(\n          /* istanbul ignore next */\n          polyline => (\n            <Polyline\n              key={\n                polyline.id || `polyline-${Math.floor(Math.random() * 1000)}`\n              }\n              positions={polyline.positions}\n              color={polyline.color}\n              weight={polyline.weight}\n              dashArray={polyline[\"dotted?\"] ? \"4px 8px\" : \"none\"}\n              lineCap={polyline[\"dotted?\"] ? \"butt\" : \"round\"}\n              lineJoin={polyline[\"dotted?\"] ? \"miter\" : \"round\"}\n            />\n          )\n        )}\n        {markers.map(marker => (\n          <Marker\n            icon={buildIcon(marker.icon, marker.icon_opts)}\n            key={\n              marker.id ||\n              /* istanbul ignore next */ `marker-${Math.floor(\n                Math.random() * 1000\n              )}`\n            }\n            position={[marker.latitude, marker.longitude]}\n            ref={ref => ref && rotateMarker(ref.leafletElement, marker)}\n            zIndexOffset={marker.z_index}\n            keyboard={false}\n          >\n            {marker.tooltip && <Popup maxHeight={175}>{marker.tooltip}</Popup>}\n          </Marker>\n        ))}\n        <FullscreenControl />\n      </Map>\n    );\n  }\n  return null;\n};\n\nexport default React.memo(Component, deepEqual);\n","import {\n  isABusRoute,\n  isACommuterRailRoute,\n  isAGreenLineRoute,\n  isASilverLineRoute\n} from \"../models/route\";\nimport { Route } from \"../__v3api\";\n\nexport const routeToCSSClass = (route: string): string =>\n  route.toLowerCase().replace(/[ _]/g, \"-\");\n\nexport const busClass = (route: Route): string =>\n  isABusRoute(route) && !isASilverLineRoute(route) ? \"bus-route-sign\" : \"\";\n\nexport const routeToModeName = (route: Route): string => {\n  if (isACommuterRailRoute(route)) return \"commuter-rail\";\n  if (route.type === 4) return \"ferry\";\n  if (route.id === \"Red\" || route.id === \"Mattapan\") return \"red-line\";\n  if (route.id === \"Orange\") return \"orange-line\";\n  if (route.id === \"Blue\") return \"blue-line\";\n  if (isAGreenLineRoute(route)) return \"green-line\";\n  if (isASilverLineRoute(route)) return \"silver-line\";\n  if (isABusRoute(route)) return \"bus\";\n  return \"unknown\";\n};\n\nexport const routeBgClass = (route: Route): string =>\n  `u-bg--${routeToModeName(route)}`;\n","import React, { ReactElement, useState } from \"react\";\nimport { handleReactEnterKeyPress } from \"../helpers/keyboard-events\";\nimport renderSvg from \"../helpers/render-svg\";\nimport { caret } from \"../helpers/icon\";\n\nexport interface ExpandableBlockHeader {\n  text: string | ReactElement<HTMLElement>;\n  iconSvgText: string | null;\n}\n\n// If dispatch is provided in Props, the block will not\n// track its own state -- the parent is fully responsible\n// for tracking the expanded/collapsed state.\n// If dispatch is not provided, the block will\n// track its own state.\ninterface Props {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  dispatch?: React.Dispatch<any>;\n  notifyExpanded?: (isExpanded: boolean) => void;\n  initiallyExpanded: boolean;\n  initiallyFocused?: boolean;\n  header: ExpandableBlockHeader;\n  children: ReactElement<HTMLElement>;\n  id: string;\n  panelClassName?: string;\n  preventScroll?: boolean;\n}\n\ninterface State {\n  expanded: boolean;\n  focused?: boolean;\n}\n\nexport interface ClickExpandableBlockAction {\n  type: \"CLICK_EXPANDABLE_BLOCK\";\n  payload: {\n    expanded: boolean;\n    focused: boolean;\n    id: string;\n  };\n}\n\nconst ExpandableBlock = (props: Props): ReactElement<HTMLElement> => {\n  const {\n    header: { text, iconSvgText },\n    dispatch,\n    notifyExpanded,\n    initiallyExpanded,\n    initiallyFocused,\n    children,\n    id,\n    panelClassName,\n    preventScroll\n  } = props;\n\n  const initialState = {\n    expanded: initiallyExpanded,\n    focused: initiallyFocused\n  };\n\n  const action: ClickExpandableBlockAction = {\n    type: \"CLICK_EXPANDABLE_BLOCK\",\n    payload: {\n      expanded: initiallyExpanded === true,\n      focused: initiallyFocused === true,\n      id\n    }\n  };\n\n  const [hookedState, toggleExpanded] = useState(initialState);\n  const { state, onClick } = dispatch\n    ? {\n        state: initialState,\n        onClick: () => dispatch(action)\n      }\n    : {\n        state: hookedState,\n        onClick: () => {\n          const expanded = !hookedState.expanded;\n          toggleExpanded({ expanded, focused: true });\n          if (notifyExpanded) notifyExpanded(expanded);\n        }\n      };\n  const { expanded, focused }: State = state;\n  const headerId = `header-${id}`;\n  const panelId = `panel-${id}`;\n\n  return (\n    <>\n      <h3\n        className=\"c-expandable-block__header\"\n        tabIndex={0}\n        id={headerId}\n        aria-expanded={expanded}\n        aria-controls={panelId}\n        // eslint-disable-next-line jsx-a11y/no-noninteractive-element-to-interactive-role\n        role=\"button\"\n        onClick={onClick}\n        onKeyPress={e => handleReactEnterKeyPress(e, onClick)}\n      >\n        {iconSvgText\n          ? renderSvg(\"c-expandable-block__header-icon\", iconSvgText)\n          : null}\n        <div className=\"c-expandable-block__header-text\">\n          {text}\n          {caret(\"c-expandable-block__header-caret\", expanded)}\n        </div>\n      </h3>\n      {expanded ? (\n        <div\n          className={`c-expandable-block__panel ${panelClassName || \"\"}`}\n          // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex\n          tabIndex={0}\n          role=\"region\"\n          id={panelId}\n          aria-labelledby={headerId}\n          ref={panel =>\n            panel &&\n            focused &&\n            panel.focus({\n              preventScroll: !!preventScroll\n            })\n          }\n        >\n          {children}\n        </div>\n      ) : null}\n      {/* No javascript support */}\n      <noscript>\n        <style>{`#${headerId} { display: none; }`}</style>\n        <h3 className=\"c-expandable-block__header\">\n          {iconSvgText\n            ? renderSvg(\"c-expandable-block__header-icon\", iconSvgText)\n            : null}\n          {text}\n          {caret(\"c-expandable-block__header-caret\", true)}\n        </h3>\n        <div className=\"c-expandable-block__panel\" role=\"region\">\n          {children}\n        </div>\n      </noscript>\n    </>\n  );\n};\n\nexport default ExpandableBlock;\n","module.exports = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 16 16\\\"><title>red line</title><path fill=\\\"#da291c\\\" d=\\\"M8 0a8 8 0 1 0 8 8 8 8 0 0 0-8-8\\\"></path><g fill=\\\"#fff\\\"><path d=\\\"M6.015 4.25a2.397 2.397 0 0 1 .909.163 2.097 2.097 0 0 1 .694.446 1.935 1.935 0 0 1 .44.657 2.098 2.098 0 0 1 .153.803 2.262 2.262 0 0 1-.278 1.145 1.747 1.747 0 0 1-.91.735v.022a1.265 1.265 0 0 1 .505.257 1.421 1.421 0 0 1 .325.41 1.912 1.912 0 0 1 .184.52 4.563 4.563 0 0 1 .08.567l.02.42c.007.161.02.326.037.493a3.412 3.412 0 0 0 .084.478 1.113 1.113 0 0 0 .174.384h-1.65a2.914 2.914 0 0 1-.168-.851 12.616 12.616 0 0 0-.095-.945 1.5 1.5 0 0 0-.356-.862 1.233 1.233 0 0 0-.893-.273H3.62v2.931H1.971v-7.5zm-.587 3.392a1.247 1.247 0 0 0 .85-.251 1.045 1.045 0 0 0 .284-.82.998.998 0 0 0-.284-.793 1.264 1.264 0 0 0-.85-.246H3.62v2.11zM11.204 4.25v6.113h3.656v1.387H9.555v-7.5z\\\"></path></g></svg>\"","module.exports = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 16 16\\\"><title>orange line</title><path fill=\\\"#ed8b00\\\" d=\\\"M8 0a8 8 0 1 0 8 8 8 8 0 0 0-8-8\\\"></path><g fill=\\\"#fff\\\"><path d=\\\"M1.818 6.544a3.592 3.592 0 0 1 .693-1.2 3.18 3.18 0 0 1 1.11-.803A3.62 3.62 0 0 1 5.1 4.25a3.613 3.613 0 0 1 1.486.291 3.175 3.175 0 0 1 1.104.803 3.594 3.594 0 0 1 .693 1.2 4.474 4.474 0 0 1 .242 1.491 4.327 4.327 0 0 1-.242 1.46 3.49 3.49 0 0 1-.693 1.18 3.176 3.176 0 0 1-1.104.789 3.67 3.67 0 0 1-1.486.286 3.677 3.677 0 0 1-1.48-.286 3.181 3.181 0 0 1-1.11-.789 3.488 3.488 0 0 1-.693-1.18 4.327 4.327 0 0 1-.24-1.46 4.474 4.474 0 0 1 .24-1.49zm1.44 2.37a2.377 2.377 0 0 0 .337.768 1.723 1.723 0 0 0 .603.547 1.835 1.835 0 0 0 .903.206 1.842 1.842 0 0 0 .904-.206 1.729 1.729 0 0 0 .602-.547 2.357 2.357 0 0 0 .336-.768 3.634 3.634 0 0 0 .106-.879 3.907 3.907 0 0 0-.106-.914 2.407 2.407 0 0 0-.336-.788 1.711 1.711 0 0 0-.602-.552 1.847 1.847 0 0 0-.904-.206 1.84 1.84 0 0 0-.903.206 1.706 1.706 0 0 0-.603.552 2.428 2.428 0 0 0-.336.788 3.96 3.96 0 0 0-.105.914 3.683 3.683 0 0 0 .105.879zM11.276 4.42v5.844h3.494v1.325H9.7V4.421z\\\"></path></g></svg>\"","module.exports = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 16 16\\\"><title>mattapan line</title><path fill=\\\"#da291c\\\" d=\\\"M8 0a8 8 0 1 0 8 8 8 8 0 0 0-8-8\\\"></path><path fill=\\\"#fff\\\" d=\\\"M6.168 4L8.04 9.501h.022L9.831 4h2.477v8H10.66V6.33h-.023L8.678 12H7.321L5.36 6.387h-.022V12H3.692V4z\\\"></path></svg>\"","module.exports = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 16 16\\\"><title>commuter rail</title><path fill=\\\"#80276c\\\" d=\\\"M6.212 11.848l3.627.145-.04 1-3.628-.146z\\\"></path><path fill=\\\"#80276c\\\" d=\\\"M8 0A8.021 8.021 0 0 0 .342 10.376a7.784 7.784 0 0 0 5.282 5.282A8.008 8.008 0 1 0 8 0\\\"></path><g fill=\\\"#fff\\\"><path d=\\\"M10.33 11.75l1.15-.85a1.47 1.47 0 0 0 .52-.84V5.24a.889.889 0 0 0-.3-.66.793.793 0 0 1-.31-.6l-.01-1.19a.82.82 0 0 0-.65-.79 20.918 20.918 0 0 0-2.5-.52 1.065 1.065 0 0 0-.47 0c-.7.15-1.55.3-2.24.48-.42.12-.85.35-.85.85v1.18a.803.803 0 0 1-.33.61.851.851 0 0 0-.31.66v4.8a1.41 1.41 0 0 0 .48.84l1.1.81-1.74 2.84H5l.24-.39h5.53l.13.22.02.03.08.14h1.05zm.95-2.3a.73.73 0 1 1-.73-.73.728.728 0 0 1 .73.73zM9.84 12.6H6.19l.41-.68h2.84l.03.06.35.58zM8.7 2.95a.245.245 0 0 1 .3-.24l1.21.25a.254.254 0 0 1 .2.24v.73a.25.25 0 0 1-.3.24L8.9 3.93a.238.238 0 0 1-.2-.24zm-.72 2.26a.82.82 0 1 1-.82.82.824.824 0 0 1 .82-.82zM5.66 3.2a.254.254 0 0 1 .2-.24l1.21-.25a.249.249 0 0 1 .3.24v.74a.247.247 0 0 1-.2.24l-1.22.24a.246.246 0 0 1-.29-.24zm-.2 6.98a.73.73 0 1 1 .73-.73.728.728 0 0 1-.73.73zm0 3.61l.5-.82h4.1l.49.82z\\\"></path><path d=\\\"M11 14.55h-.01l-.07-.14z\\\"></path></g></svg>\"","module.exports = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 16 16\\\"><title>bus</title><path fill=\\\"#ffc72c\\\" d=\\\"M8.035 0a8.04 8.04 0 0 0-8 8 8 8 0 1 0 8-8\\\"></path><path fill=\\\"#1c1e23\\\" d=\\\"M12.552 6.955l-.44-3.298c-.115-.594-.506-.83-1.088-1.074a9.948 9.948 0 0 0-2.993-.52 9.941 9.941 0 0 0-2.987.52c-.575.243-.973.48-1.095 1.074l-.433 3.298v4.555h.808v.777a.567.567 0 0 0 .297.487c.04.02.081.04.115.054a.689.689 0 0 0 .095.027.576.576 0 0 0 .155.02h.23a.636.636 0 0 0 .669-.588v-.777h4.363v.777a.567.567 0 0 0 .297.487c.04.02.081.04.115.054a.689.689 0 0 0 .095.027.576.576 0 0 0 .155.02h.23a.636.636 0 0 0 .669-.588v-.777h.743zm-6.643-3.94h4.25c.203 0 .372.231.372.508s-.169.508-.372.508H5.91c-.203 0-.372-.23-.372-.508s.169-.507.372-.507zM4.869 7.57l.3-2.334a.314.314 0 0 1 .323-.267h5.125a.318.318 0 0 1 .322.267l.344 2.334v.104A.326.326 0 0 1 10.96 8H5.179a.332.332 0 0 1-.31-.339.233.233 0 0 1 0-.091zm.647 2.753a.829.829 0 1 1-.037-1.654.831.831 0 1 1 .037 1.654zm5.015 0a.829.829 0 1 1-.037-1.654.831.831 0 1 1 .037 1.654z\\\"></path></svg>\"","module.exports = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 16 16\\\"><title>ferry</title><path fill=\\\"#008eaa\\\" d=\\\"M14.14 13.11v-2.78H12.6v4.21a.01.01 0 0 1-.01.01 7.967 7.967 0 0 1-9.18-.01c-.08-.06-.16-.11-.24-.18l-1.53-1.52A7.916 7.916 0 0 1 0 8a8 8 0 0 1 16 0 7.895 7.895 0 0 1-1.86 5.11z\\\"></path><path fill=\\\"#008eaa\\\" d=\\\"M14.14 10.33v2.78a2.338 2.338 0 0 1-.29.35 7.576 7.576 0 0 1-1.25 1.08v-4.21z\\\"></path><g fill=\\\"#fff\\\"><path d=\\\"M12.6 13.07v1.1a.817.817 0 0 1-.19-.09 1.085 1.085 0 0 0-1.15-.03 1.327 1.327 0 0 1-1.36.03 1.113 1.113 0 0 0-1.19-.04 1.457 1.457 0 0 1-1.43 0 1.093 1.093 0 0 0-1.19.04 1.305 1.305 0 0 1-1.36-.04 1.125 1.125 0 0 0-1.16.04.25.25 0 0 0-.07.04v-1.09a.076.076 0 0 0 .04-.02 1.229 1.229 0 0 1 1.4.08 1.38 1.38 0 0 0 1.19-.07 1.186 1.186 0 0 1 1.29.04 1.314 1.314 0 0 0 1.16 0 1.186 1.186 0 0 1 1.29-.04 1.383 1.383 0 0 0 1.19.07 1.247 1.247 0 0 1 1.4-.08.351.351 0 0 0 .14.06zM11.06 10.98a.878.878 0 0 1-.15.05 3.517 3.517 0 0 1-.16-1.49 10.814 10.814 0 0 1 1.85-2.66l-.6-.24V3h-1V2H9.01v.01H9V2h.01v-.99h-2V2H5v1H4v3.64l-.59.24a10.467 10.467 0 0 1 1.83 2.64 3.75 3.75 0 0 1-.15 1.5.418.418 0 0 1-.15-.04 1.226 1.226 0 0 0-1.4-.07c-.01.01-.03.01-.04.02v1.08c.02-.01.05-.03.07-.04a1.102 1.102 0 0 1 1.16-.03 1.327 1.327 0 0 0 1.36.03 1.092 1.092 0 0 1 1.19-.03 1.457 1.457 0 0 0 1.43 0 1.093 1.093 0 0 1 1.19.04 1.328 1.328 0 0 0 1.36-.04 1.129 1.129 0 0 1 1.15.03 1.737 1.737 0 0 0 .19.1v-1.1a.423.423 0 0 1-.14-.06 1.262 1.262 0 0 0-1.4.07zM8 2h.01v.01H8zm2.01 3.84V5H9V4H7v1H6v.84l-1 .4V4h1V3h4v1h1v2.24z\\\"></path><path d=\\\"M8 2h.01v.01H8zM9 2h.01v.01H9z\\\"></path><path d=\\\"M8 2h.01v.01H8zM9 2h.01v.01H9z\\\"></path></g></svg>\"","import schedule from \"./schedule/schedule-loader\";\n\nschedule();\n","import React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { Provider } from \"react-redux\";\nimport { isEmpty } from \"lodash\";\nimport { updateInLocation } from \"use-query-params\";\nimport Map from \"./components/Map\";\nimport { SchedulePageData, SelectedOrigin } from \"./components/__schedule\";\nimport { MapData } from \"../leaflet/components/__mapdata\";\nimport { DirectionId } from \"../__v3api\";\nimport ScheduleLoader from \"./components/ScheduleLoader\";\nimport {\n  store,\n  createScheduleStore,\n  getCurrentState\n} from \"./store/ScheduleStore\";\n\ninterface Props {\n  schedulePageData: SchedulePageData;\n}\n\nconst renderMap = ({\n  route_patterns: routePatternsByDirection,\n  direction_id: directionId\n}: SchedulePageData): void => {\n  const routePatterns = routePatternsByDirection[directionId];\n  const shapeIds = routePatterns.map(routePattern => routePattern.shape_id);\n  const mapDataEl = document.getElementById(\"js-map-data\");\n  if (!mapDataEl) return;\n  const channel = mapDataEl.getAttribute(\"data-channel-id\");\n  if (!channel) throw new Error(\"data-channel-id attribute not set\");\n  const mapEl = document.getElementById(\"map-root\");\n  if (!mapEl) throw new Error(\"cannot find #map-root\");\n  const mapData: MapData = JSON.parse(mapDataEl.innerHTML);\n  ReactDOM.render(\n    <Map data={mapData} channel={channel} shapeIds={shapeIds} />,\n    mapEl\n  );\n};\n\nconst updateURL = (origin: SelectedOrigin, direction?: DirectionId): void => {\n  if (window) {\n    // eslint-disable-next-line @typescript-eslint/camelcase\n    const newQuery = {\n      \"schedule_finder[direction_id]\":\n        direction !== undefined ? direction.toString() : \"\",\n      \"schedule_finder[origin]\": origin\n    };\n    const newLoc = updateInLocation(newQuery, window.location);\n    // newLoc is not a true Location, so toString doesn't work\n    window.history.replaceState({}, \"\", `${newLoc.pathname}${newLoc.search}`);\n  }\n};\n\nexport const renderSchedulePage = (\n  schedulePageData: SchedulePageData\n): void => {\n  const { schedule_note: scheduleNote } = schedulePageData;\n\n  ReactDOM.render(\n    <Provider store={store}>\n      <ScheduleLoader\n        component=\"MAIN\"\n        schedulePageData={schedulePageData}\n        updateURL={updateURL}\n      />\n    </Provider>,\n    document.getElementById(\"react-root\")\n  );\n  // Now we (conditionally) render \"secondary\" widgets:\n  // (only one will be shown at a time, depending on whether mobile or desktop)\n  if (scheduleNote) {\n    ReactDOM.render(\n      <Provider store={store}>\n        <ScheduleLoader\n          component=\"SCHEDULE_NOTE\"\n          schedulePageData={schedulePageData}\n          updateURL={updateURL}\n        />\n      </Provider>,\n      document.getElementById(\"react-schedule-note-root\")\n    );\n  } else {\n    const scheduleFinderRoot = document.getElementById(\n      \"react-schedule-finder-root\"\n    );\n    if (scheduleFinderRoot) {\n      ReactDOM.render(\n        <Provider store={store}>\n          <ScheduleLoader\n            component=\"SCHEDULE_FINDER\"\n            schedulePageData={schedulePageData}\n            updateURL={updateURL}\n          />\n        </Provider>,\n        scheduleFinderRoot\n      );\n    }\n  }\n};\n\nconst renderDirectionAndMap = (\n  schedulePageData: SchedulePageData,\n  root: HTMLElement\n): void => {\n  const currentState = getCurrentState();\n  if (!!currentState && Object.keys(currentState).length !== 0) {\n    ReactDOM.render(\n      <Provider store={store}>\n        <ScheduleLoader\n          component=\"SCHEDULE_DIRECTION\"\n          schedulePageData={schedulePageData}\n          updateURL={updateURL}\n        />\n      </Provider>,\n      root\n    );\n  }\n};\n\nexport const renderDirectionOrMap = (\n  schedulePageData: SchedulePageData\n): void => {\n  const root = document.getElementById(\"react-schedule-direction-root\");\n  if (!root) {\n    renderMap(schedulePageData);\n    return;\n  }\n  renderDirectionAndMap(schedulePageData, root);\n};\n\nconst render = (): void => {\n  const schedulePageDataEl = document.getElementById(\"js-schedule-page-data\");\n  if (!schedulePageDataEl) return;\n  const schedulePageData = JSON.parse(\n    schedulePageDataEl.innerHTML\n  ) as SchedulePageData;\n  const {\n    direction_id: directionId,\n    route_patterns: routePatterns\n  } = schedulePageData;\n  createScheduleStore(directionId);\n\n  if (!isEmpty(routePatterns)) {\n    renderSchedulePage(schedulePageData);\n    renderDirectionOrMap(schedulePageData);\n  }\n};\n\nconst onLoad = (): void => {\n  render();\n};\n\nexport default onLoad;\n","import { Socket, Channel } from \"phoenix\";\n\ndeclare global {\n  interface Window {\n    channels: { [id: string]: Channel };\n    socket?: Socket;\n  }\n}\n\ntype UpdateEventName = \"reset\" | \"add\" | \"update\" | \"setChannel\";\n\ninterface UpdateEvent<T> {\n  event: UpdateEventName;\n  data: T;\n}\n\ninterface RemoveEvent {\n  event: \"remove\";\n  data: string[];\n}\n\nexport type SocketEvent<T> = UpdateEvent<T> | RemoveEvent;\n\nexport const doInitChannel = (id: string): Channel => {\n  if (!window.socket) {\n    window.socket = new Socket(\"/socket\", {});\n    window.socket.connect();\n  }\n\n  if (!window.channels) {\n    window.channels = {};\n  }\n\n  if (window.channels[id]) return window.channels[id];\n\n  const channel = window.socket.channel(id, {});\n  window.channels[id] = channel;\n\n  channel\n    .join()\n    .receive(\"error\", ({ reason }) =>\n      // eslint-disable-next-line no-console\n      console.error(`failed to join ${id}`, reason)\n    )\n    // eslint-disable-next-line no-console\n    .receive(\"timeout\", () => console.error(`timeout joining ${id}`))\n    .receive(\"ok\", () => {\n      if (id !== \"vehicles:remove\") {\n        const route = id.split(\":\");\n        channel.push(\"init\", {\n          // eslint-disable-next-line @typescript-eslint/camelcase\n          route_id: route[1],\n          // eslint-disable-next-line @typescript-eslint/camelcase\n          direction_id: route[2]\n        });\n      }\n    });\n\n  return channel;\n};\n\nexport const initChannel = <T>(\n  channelId: string,\n  onData: (data: SocketEvent<T>) => void\n): void => {\n  const channel = doInitChannel(channelId);\n  channel.on(\"data\", onData);\n};\n\n// NB: this removes *all* handlers from the channel. We're currently throwing\n// away the reference returned by `channel.on`, so we can't remove a specific\n// handler, but we don't have a use case for that yet.\nexport const stopChannel = (id: string): void => {\n  if (window.channels && window.channels[id]) {\n    window.channels[id].off(\"data\");\n  }\n};\n","module.exports = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 48 48\\\"><title>alert</title><path fill=\\\"#1c1e23\\\" d=\\\"M47.55 42.537L27.01 1.934a3.61 3.61 0 0 0-1.27-1.4 3.083 3.083 0 0 0-3.47 0 3.572 3.572 0 0 0-1.253 1.4L.477 42.537a3.715 3.715 0 0 0 0 3.642 3.473 3.473 0 0 0 1.252 1.323A3.217 3.217 0 0 0 3.436 48h41.118a3.161 3.161 0 0 0 1.688-.498 3.472 3.472 0 0 0 1.252-1.323 3.715 3.715 0 0 0 .057-3.642z\\\"></path><g fill=\\\"#fff\\\"><path d=\\\"M27.043 39.223a.713.713 0 0 1-.22.544.733.733 0 0 1-.54.233h-4.568a.733.733 0 0 1-.54-.233.772.772 0 0 1-.218-.544v-4.446a.772.772 0 0 1 .219-.544.733.733 0 0 1 .54-.233h4.568a.734.734 0 0 1 .54.233.714.714 0 0 1 .22.544zM26.738 30.359a.625.625 0 0 1-.235.457.706.706 0 0 1-.516.183H21.86a.734.734 0 0 1-.516-.183.535.535 0 0 1-.219-.457l-1.121-14.482a.71.71 0 0 1 .218-.585.76.76 0 0 1 .516-.292h6.512a.814.814 0 0 1 .532.292.704.704 0 0 1 .219.53z\\\"></path></g></svg>\"","import React, { ReactElement } from \"react\";\nimport { connect } from \"react-redux\";\nimport { useQueryParams, StringParam } from \"use-query-params\";\nimport SchedulePage from \"../components/SchedulePage\";\nimport ScheduleNote from \"../components/ScheduleNote\";\nimport ScheduleDirection from \"../components/ScheduleDirection\";\nimport {\n  SchedulePageData,\n  SelectedOrigin,\n  ComponentToRender\n} from \"../components/__schedule\";\nimport { MapData, StaticMapData } from \"../../leaflet/components/__mapdata\";\nimport ScheduleFinder from \"../components/ScheduleFinder\";\nimport ScheduleFinderModal from \"../components/schedule-finder/ScheduleFinderModal\";\nimport { DirectionId } from \"../../__v3api\";\nimport {\n  mapStateToProps,\n  getCurrentState,\n  storeHandler\n} from \"../store/ScheduleStore\";\n\ninterface Props {\n  schedulePageData: SchedulePageData;\n  component: ComponentToRender;\n  updateURL: (origin: SelectedOrigin, direction?: DirectionId) => void;\n}\n\nexport const ScheduleLoader = ({\n  component,\n  schedulePageData,\n  updateURL\n}: Props): ReactElement<HTMLElement> => {\n  const [query] = useQueryParams({\n    // eslint-disable-next-line @typescript-eslint/camelcase\n    \"schedule_finder[direction_id]\": StringParam,\n    \"schedule_finder[origin]\": StringParam\n  });\n\n  const changeDirection = (direction: DirectionId): void => {\n    storeHandler({\n      type: \"CHANGE_DIRECTION\",\n      newStoreValues: {\n        selectedDirection: direction,\n        selectedOrigin: null\n      }\n    });\n  };\n\n  const changeOrigin = (origin: SelectedOrigin): void => {\n    storeHandler({\n      type: \"CHANGE_ORIGIN\",\n      newStoreValues: {\n        selectedOrigin: origin\n      }\n    });\n    // reopen modal depending on choice:\n    storeHandler({\n      type: \"OPEN_MODAL\",\n      newStoreValues: {\n        modalMode: origin ? \"schedule\" : \"origin\"\n      }\n    });\n  };\n\n  const closeModal = (): void => {\n    storeHandler({\n      type: \"CLOSE_MODAL\",\n      newStoreValues: {}\n    });\n    // clear parameters from URL when closing the modal:\n    updateURL(\"\");\n  };\n\n  React.useEffect(() => {\n    // get initial values from the store:\n    const currentState = getCurrentState();\n    const { selectedDirection, selectedOrigin } = currentState;\n    let { modalOpen, modalMode } = currentState;\n\n    let newDirection: DirectionId | undefined;\n    let newOrigin: SelectedOrigin | undefined;\n\n    // modify the store values in case URL has parameters:\n    if (query[\"schedule_finder[direction_id]\"] !== undefined) {\n      newDirection = query[\"schedule_finder[direction_id]\"] === \"0\" ? 0 : 1;\n    }\n    if (query[\"schedule_finder[origin]\"] !== undefined) {\n      newOrigin = query[\"schedule_finder[origin]\"];\n    }\n\n    if (newDirection !== undefined && newOrigin !== undefined) {\n      modalMode = \"schedule\";\n      modalOpen = true;\n    }\n\n    storeHandler({\n      type: \"INITIALIZE\",\n      newStoreValues: {\n        selectedDirection: newDirection || selectedDirection,\n        selectedOrigin: newOrigin || selectedOrigin,\n        modalMode,\n        modalOpen\n      }\n    });\n    // we disable linting in this next line because we DO want to specify an empty array since we want this piece to run only once\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n\n  const handleOriginSelectClick = (): void => {\n    storeHandler({\n      type: \"OPEN_MODAL\",\n      newStoreValues: {\n        modalMode: \"origin\"\n      }\n    });\n  };\n\n  const {\n    route,\n    stops,\n    services,\n    route_patterns: routePatternsByDirection,\n    schedule_note: scheduleNote,\n    today,\n    line_diagram: lineDiagram,\n    shape_map: shapesById,\n    variant: initialSelectedRoutePatternId\n  } = schedulePageData;\n\n  const currentState = getCurrentState();\n  if (!!currentState && Object.keys(currentState).length !== 0) {\n    const {\n      selectedDirection: currentDirection,\n      selectedOrigin,\n      modalOpen,\n      modalMode\n    } = currentState;\n\n    // check first if this is a unidirectional route:\n    let readjustedDirectionId: DirectionId = currentDirection;\n    if (\n      !Object.keys(routePatternsByDirection).includes(\n        currentDirection.toString()\n      )\n    ) {\n      // This route doesn't have this direction, so pick first existing direction\n      readjustedDirectionId = parseInt(\n        Object.keys(routePatternsByDirection)[0],\n        10\n      ) as DirectionId;\n      changeDirection(readjustedDirectionId);\n      updateURL(selectedOrigin, readjustedDirectionId);\n    }\n\n    if (component === \"MAIN\") {\n      return (\n        <SchedulePage\n          updateURL={updateURL}\n          schedulePageData={schedulePageData}\n          closeModal={closeModal}\n          selectedDirection={readjustedDirectionId}\n          changeDirection={changeDirection}\n          selectedOrigin={selectedOrigin}\n          changeOrigin={changeOrigin}\n          modalOpen={modalOpen}\n          modalMode={modalMode}\n        />\n      );\n    }\n\n    if (component === \"SCHEDULE_NOTE\" && scheduleNote) {\n      return (\n        <>\n          <ScheduleNote\n            className=\"m-schedule-page__schedule-notes--mobile\"\n            scheduleNote={scheduleNote}\n          />\n          {modalOpen && (\n            <ScheduleFinderModal\n              closeModal={closeModal}\n              directionChanged={changeDirection}\n              initialMode={modalMode}\n              initialDirection={readjustedDirectionId}\n              initialOrigin={selectedOrigin}\n              handleOriginSelectClick={handleOriginSelectClick}\n              originChanged={changeOrigin}\n              route={route}\n              routePatternsByDirection={routePatternsByDirection}\n              scheduleNote={scheduleNote}\n              services={services}\n              stops={stops}\n              today={today}\n              updateURL={updateURL}\n            />\n          )}\n        </>\n      );\n    }\n\n    if (component === \"SCHEDULE_FINDER\") {\n      return (\n        <ScheduleFinder\n          updateURL={updateURL}\n          route={route}\n          stops={stops}\n          services={services}\n          routePatternsByDirection={routePatternsByDirection}\n          today={today}\n          scheduleNote={null}\n          modalMode={modalMode}\n          modalOpen={modalOpen}\n          directionId={readjustedDirectionId}\n          changeDirection={changeDirection}\n          selectedOrigin={selectedOrigin}\n          changeOrigin={changeOrigin}\n          closeModal={closeModal}\n        />\n      );\n    }\n\n    if (component === \"SCHEDULE_DIRECTION\") {\n      let mapData: MapData | undefined;\n      const mapDataEl = document.getElementById(\"js-map-data\");\n      if (mapDataEl) {\n        mapData = JSON.parse(mapDataEl.innerHTML);\n      }\n\n      let staticMapData: StaticMapData | undefined;\n      const staticDataEl = document.getElementById(\"static-map-data\");\n      if (staticDataEl) {\n        staticMapData = JSON.parse(staticDataEl.innerHTML);\n      }\n\n      return (\n        <ScheduleDirection\n          directionId={readjustedDirectionId}\n          route={route}\n          routePatternsByDirection={routePatternsByDirection}\n          shapesById={shapesById}\n          mapData={mapData}\n          staticMapData={staticMapData}\n          lineDiagram={lineDiagram}\n          services={services}\n          stops={stops}\n          today={today}\n          scheduleNote={scheduleNote}\n          initialSelectedRoutePatternId={initialSelectedRoutePatternId}\n        />\n      );\n    }\n  }\n  return <></>;\n};\n\nexport default connect(mapStateToProps)(ScheduleLoader);\n","import React, { ReactElement } from \"react\";\nimport { SchedulePageData, SelectedOrigin } from \"./__schedule\";\nimport { DirectionId } from \"../../__v3api\";\nimport PDFSchedules from \"./PDFSchedules\";\nimport Connections from \"./Connections\";\nimport ContentTeasers from \"./ContentTeasers\";\nimport HoursOfOperation from \"./HoursOfOperation\";\nimport Fares from \"./Fares\";\nimport UpcomingHolidays from \"./UpcomingHolidays\";\nimport ScheduleNote from \"./ScheduleNote\";\nimport ScheduleFinder from \"./ScheduleFinder\";\nimport ScheduleFinderModal, {\n  Mode as ModalMode\n} from \"./schedule-finder/ScheduleFinderModal\";\nimport { storeHandler } from \"../store/ScheduleStore\";\n\ninterface Props {\n  updateURL: (origin: SelectedOrigin, direction?: DirectionId) => void;\n  schedulePageData: SchedulePageData;\n  modalOpen: boolean;\n  modalMode: ModalMode;\n  closeModal: () => void;\n  changeDirection: (direction: DirectionId) => void;\n  selectedDirection: DirectionId;\n  selectedOrigin: SelectedOrigin;\n  changeOrigin: (origin: SelectedOrigin) => void;\n}\n\n// don't show Schedule Finder for subway\nconst SchedulePage = ({\n  schedulePageData: {\n    connections,\n    pdfs,\n    teasers,\n    hours,\n    fares,\n    holidays,\n    fare_link: fareLink,\n    route,\n    schedule_note: scheduleNote,\n    services,\n    stops,\n    route_patterns: routePatternsByDirection,\n    today\n  },\n  updateURL,\n  closeModal,\n  changeDirection,\n  changeOrigin,\n  modalOpen,\n  modalMode,\n  selectedDirection,\n  selectedOrigin\n}: Props): ReactElement<HTMLElement> => {\n  const handleOriginSelectClick = (): void => {\n    storeHandler({\n      type: \"OPEN_MODAL\",\n      newStoreValues: {\n        modalMode: \"origin\"\n      }\n    });\n  };\n  return (\n    <>\n      {scheduleNote ? (\n        <>\n          <ScheduleNote\n            className=\"m-schedule-page__schedule-notes--desktop\"\n            scheduleNote={scheduleNote}\n          />\n          {modalOpen && (\n            <ScheduleFinderModal\n              closeModal={closeModal}\n              directionChanged={changeDirection}\n              initialMode={modalMode}\n              initialDirection={selectedDirection}\n              initialOrigin={selectedOrigin}\n              handleOriginSelectClick={handleOriginSelectClick}\n              originChanged={changeOrigin}\n              route={route}\n              routePatternsByDirection={routePatternsByDirection}\n              scheduleNote={scheduleNote}\n              services={services}\n              stops={stops}\n              today={today}\n              updateURL={updateURL}\n            />\n          )}\n        </>\n      ) : (\n        <ScheduleFinder\n          updateURL={updateURL}\n          route={route}\n          services={services}\n          stops={stops}\n          routePatternsByDirection={routePatternsByDirection}\n          today={today}\n          scheduleNote={null}\n          directionId={selectedDirection}\n          selectedOrigin={selectedOrigin}\n          changeDirection={changeDirection}\n          changeOrigin={changeOrigin}\n          closeModal={closeModal}\n          modalMode={modalMode}\n          modalOpen={modalOpen}\n        />\n      )}\n      <ContentTeasers teasers={teasers} />\n      <PDFSchedules pdfs={pdfs} />\n      <Connections connections={connections} />\n      <Fares fares={fares} fareLink={fareLink} routeType={route.type} />\n      <HoursOfOperation hours={hours} />\n      <UpcomingHolidays holidays={holidays} />\n    </>\n  );\n};\nexport default SchedulePage;\n","import React, { ReactElement } from \"react\";\nimport ExpandableBlock from \"../../components/ExpandableBlock\";\nimport { SchedulePDF } from \"./__schedule\";\nimport renderSvg from \"../../helpers/render-svg\";\nimport pdfIcon from \"../../../static/images/icon-pdf-default.svg\";\n\nconst link = (pdf: SchedulePDF): ReactElement<HTMLElement> => (\n  <a\n    key={pdf.url}\n    href={pdf.url}\n    rel=\"noopener noreferrer\"\n    target=\"_blank\"\n    className=\"m-schedule-page__sidebar-pdfs\"\n  >\n    {renderSvg(\"c-svg__icon-pdf\", pdfIcon)}\n    {pdf.title}\n  </a>\n);\n\ninterface Props {\n  pdfs: SchedulePDF[];\n}\n\nconst PDFSchedules = ({ pdfs }: Props): ReactElement<HTMLElement> | null =>\n  pdfs.length > 0 ? (\n    <ExpandableBlock\n      header={{ text: \"PDF Schedules\", iconSvgText: null }}\n      initiallyExpanded\n      id=\"pdfs\"\n    >\n      <>{pdfs.map(pdf => link(pdf))}</>\n    </ExpandableBlock>\n  ) : null;\n\nexport default PDFSchedules;\n","module.exports = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 48 48\\\"><title>pdf</title><path d=\\\"M40.82 11.75L29.71.63A2.18 2.18 0 0 0 28.19 0H10.55a4 4 0 0 0-4 4v40a4 4 0 0 0 4 4h26.9a4 4 0 0 0 4-4V13.27a2.12 2.12 0 0 0-.63-1.52zM29.08 4.47L37 12.38h-6.94a1 1 0 0 1-1-1zM38.45 44a1 1 0 0 1-1 1h-26.9a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h15.53v8.39a4 4 0 0 0 4 4h8.39z\\\"></path><path d=\\\"M16.31 21.05h-3.7v8.64h1.79v-3.11h1.8a3.27 3.27 0 0 0 2.16-.58 2.66 2.66 0 0 0 .76-2.16 2.59 2.59 0 0 0-.76-2.07 3 3 0 0 0-2.05-.72zm.69 3.73a1.37 1.37 0 0 1-1 .31h-1.6v-2.54H16a1.47 1.47 0 0 1 1 .29 1.21 1.21 0 0 1 .34 1 1.28 1.28 0 0 1-.34.94zM27.1 22.33a2.81 2.81 0 0 0-1.47-1.09 4.54 4.54 0 0 0-1.34-.19h-3.72v8.64h3.72a3.13 3.13 0 0 0 2.9-1.61 5.76 5.76 0 0 0 .69-2.92 6.6 6.6 0 0 0-.16-1.43 3.91 3.91 0 0 0-.62-1.4zm-1.33 4.6A1.79 1.79 0 0 1 24 28.19h-1.68v-5.64H24a1.73 1.73 0 0 1 1.64.71 4 4 0 0 1 .42 2 4.32 4.32 0 0 1-.29 1.67zM29.23 29.69h1.8v-3.62h3.82v-1.5h-3.82v-1.99h4.36v-1.52h-6.16z\\\"></path></svg>\"","import React, { ReactElement } from \"react\";\nimport ExpandableBlock from \"../../components/ExpandableBlock\";\nimport RoutePillList from \"../../stop/components/RoutePillList\";\nimport { TypedRoutes } from \"../../stop/components/__stop\";\n\ninterface Props {\n  connections: TypedRoutes[];\n}\n\nconst Connections = ({\n  connections\n}: Props): ReactElement<HTMLDivElement> | null =>\n  connections.length ? (\n    <ExpandableBlock\n      header={{ text: \"Connections\", iconSvgText: null }}\n      initiallyExpanded={false}\n      id=\"connections\"\n    >\n      <RoutePillList routes={connections} showGroupName />\n    </ExpandableBlock>\n  ) : null;\n\nexport default Connections;\n","import React, { ReactElement } from \"react\";\n\ninterface Props {\n  teasers: string | null;\n}\n\nconst ContentTeasers = ({ teasers }: Props): ReactElement<HTMLElement> | null =>\n  // eslint-disable-next-line react/no-danger\n  teasers ? <div dangerouslySetInnerHTML={{ __html: teasers }} /> : null;\n\nexport default ContentTeasers;\n","import React, { ReactElement } from \"react\";\nimport ExpandableBlock from \"../../components/ExpandableBlock\";\n\nconst HoursOfOperation = ({\n  hours\n}: {\n  hours: string;\n}): ReactElement<HTMLElement> | null =>\n  hours ? (\n    <ExpandableBlock\n      header={{ text: \"Hours of Operation\", iconSvgText: null }}\n      initiallyExpanded={false}\n      id=\"hours\"\n    >\n      <div\n        className=\"m-schedule-page__sidebar-hours\"\n        // eslint-disable-next-line react/no-danger\n        dangerouslySetInnerHTML={{ __html: hours }}\n      />\n    </ExpandableBlock>\n  ) : null;\n\nexport default HoursOfOperation;\n","import React, { ReactElement } from \"react\";\nimport ExpandableBlock from \"../../components/ExpandableBlock\";\nimport { Fare } from \"./__schedule\";\nimport { RouteType } from \"../../__v3api\";\n\nconst fareItem = (fare: Fare): ReactElement<HTMLElement> => (\n  <p key={fare.title} className=\"m-schedule-page__fare\">\n    <span>{fare.title}</span>\n    <span>{fare.price}</span>\n  </p>\n);\n\ninterface Props {\n  fares: Fare[];\n  fareLink: string;\n  routeType: RouteType;\n}\n\nconst Fares = ({\n  fares,\n  fareLink,\n  routeType\n}: Props): ReactElement<HTMLElement> | null =>\n  fares.length > 0 ? (\n    <ExpandableBlock\n      header={{ text: \"Fares\", iconSvgText: null }}\n      initiallyExpanded={false}\n      id=\"fares\"\n    >\n      <>\n        {fares.map(f => fareItem(f))}\n        {routeType === 2 && (\n          <p>\n            <a className=\"c-call-to-action\" href=\"/fares/commuter-rail-fares\">\n              Commuter Rail Fares\n            </a>\n          </p>\n        )}\n        <p className=\"m-schedule-page__link\">\n          <a className=\"c-call-to-action\" href={fareLink}>\n            More about fares\n          </a>\n        </p>\n      </>\n    </ExpandableBlock>\n  ) : null;\n\nexport default Fares;\n","import React, { ReactElement } from \"react\";\nimport ExpandableBlock from \"../../components/ExpandableBlock\";\nimport { Holiday } from \"./__schedule\";\n\ninterface Props {\n  holidays: Holiday[];\n}\n\nconst UpcomingHolidays = ({\n  holidays\n}: Props): ReactElement<HTMLElement> | null =>\n  holidays.length > 0 ? (\n    <ExpandableBlock\n      header={{ text: \"Upcoming Holidays\", iconSvgText: null }}\n      initiallyExpanded={false}\n      id=\"holidays\"\n    >\n      <>\n        <ul className=\"c-unordered-list m-schedule-page__sidebar-list\">\n          {holidays.map(\n            (holiday: Holiday): ReactElement<HTMLElement> => (\n              <li key={holiday.date} className=\"c-unordered-list-item\">\n                {holiday.name} ({holiday.date})\n              </li>\n            )\n          )}\n        </ul>\n        <a className=\"c-call-to-action\" href=\"/holiday\">\n          View holiday schedules\n        </a>\n      </>\n    </ExpandableBlock>\n  ) : null;\n\nexport default UpcomingHolidays;\n","import React, {\n  MouseEvent,\n  ReactElement,\n  ReactNode,\n  useEffect,\n  useLayoutEffect,\n  useRef\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport createFocusTrap from \"focus-trap\";\nimport { handleReactExitKeyPress } from \"../helpers/keyboard-events\";\nimport {\n  AriaLabel,\n  AriaLabelledBy,\n  labelOrDescribedBy\n} from \"../helpers/aria-props\";\n\ninterface Props {\n  children: ReactNode;\n  closeText?: string | ReactElement<HTMLElement>;\n  role?: \"dialog\" | \"alertdialog\";\n  ariaLabel: AriaLabel | AriaLabelledBy;\n  focusElementId?: string; // a selector string to the DOM node that will receive focus when the model is first opened\n  className?: string;\n  closeModal: Function;\n}\n\ninterface ModalContentProps {\n  children: ReactNode;\n  closeText: string | ReactElement<HTMLElement>;\n  role: string;\n  ariaLabel: AriaLabel | AriaLabelledBy;\n  closeModal: Function;\n  focusElementId: string;\n  bodyPadding: string;\n  scrollBarPadding: number;\n  className?: string;\n}\n\nconst ModalContent = ({\n  children,\n  closeText,\n  closeModal,\n  role,\n  ariaLabel,\n  focusElementId,\n  bodyPadding,\n  scrollBarPadding,\n  className = \"\"\n}: ModalContentProps): ReactElement<HTMLElement> => {\n  const asideRef = useRef<HTMLElement>(null);\n  const onClickAway = (e: MouseEvent): void => {\n    if (e.target === asideRef.current) closeModal();\n  };\n\n  // In Chrome (and others?), swapping out the modal content doesn't reset the\n  // scroll position. Here we reset it manually whenever the content changes.\n  const scrollRef = useRef<HTMLDivElement>(null);\n  useEffect(\n    () => {\n      if (scrollRef.current && scrollRef.current.scrollTo) {\n        scrollRef.current.scrollTo({ top: 0 });\n      }\n    },\n    [children]\n  );\n\n  useLayoutEffect(() => {\n    // Activate trap and disable scroll on background body\n    const trap = createFocusTrap(\"#modal-cover\", {\n      initialFocus: `#${focusElementId}`,\n      clickOutsideDeactivates: true\n    });\n    trap.activate();\n\n    const htmlElement = document.getElementsByTagName(\"html\")[0];\n    const bodyWrapper = document.getElementById(\"body-wrapper\");\n    if (bodyWrapper) {\n      // aria-hidden for mobile devices where we want to emulate \"focus\" behavior\n      bodyWrapper.setAttribute(\"aria-hidden\", \"true\");\n      htmlElement.classList.add(\"modal-open\");\n      bodyWrapper.style.paddingRight = `${scrollBarPadding}px`;\n    }\n\n    // Deactivate\n    return () => {\n      if (bodyWrapper) {\n        bodyWrapper.setAttribute(\"aria-hidden\", \"false\");\n        htmlElement.classList.remove(\"modal-open\");\n        bodyWrapper.style.paddingRight = bodyPadding;\n      }\n      trap.deactivate();\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n\n  return createPortal(\n    // This does have a role\n    // eslint-disable-next-line jsx-a11y/no-static-element-interactions\n    <aside\n      ref={asideRef}\n      aria-modal\n      {...labelOrDescribedBy(ariaLabel)}\n      role={role}\n      id=\"modal-cover\"\n      className=\"c-modal__cover\"\n      tabIndex={-1}\n      onKeyDown={e => handleReactExitKeyPress(e, closeModal)}\n      onClick={e => onClickAway(e)}\n    >\n      <div ref={scrollRef} className={`c-modal ${className}`}>\n        <button\n          id=\"modal-close\"\n          className=\"btn btn-secondary c-modal__close\"\n          onClick={() => closeModal()}\n          type=\"button\"\n        >\n          {closeText}\n        </button>\n        <div className=\"c-modal__content\">{children}</div>\n      </div>\n    </aside>,\n    document.body\n  );\n};\n\ninterface ModalWithNoScrollProps extends Props {\n  priorPadding: string;\n  paddingRight: number;\n}\n\nconst Modal = ({\n  children,\n  closeText = \"Close\",\n  role = \"dialog\",\n  ariaLabel,\n  focusElementId = \"modal-close\",\n  priorPadding,\n  paddingRight,\n  className,\n  closeModal\n}: ModalWithNoScrollProps): ReactElement<HTMLElement> | null => (\n  <ModalContent\n    bodyPadding={priorPadding}\n    scrollBarPadding={paddingRight}\n    closeText={closeText}\n    role={role}\n    ariaLabel={ariaLabel}\n    focusElementId={focusElementId}\n    className={className}\n    closeModal={closeModal}\n  >\n    {children}\n  </ModalContent>\n);\n\n// Wrap modal to account for disabling scroll bar on background body\nconst WrappedModal = (props: Props): ReactElement<HTMLElement> | null => {\n  if (typeof document !== \"undefined\") {\n    const bodyWrapper = document.getElementById(\"body-wrapper\");\n    const priorPadding =\n      (bodyWrapper && bodyWrapper.style.paddingRight) || \"0px\";\n    const paddingRight = bodyWrapper\n      ? window.innerWidth - bodyWrapper.clientWidth\n      : 0;\n    return (\n      <Modal\n        {...props}\n        priorPadding={priorPadding}\n        paddingRight={paddingRight}\n      />\n    );\n  }\n  return null;\n};\n\nexport default WrappedModal;\n","import { TripPrediction } from \"../schedule/components/__trips\";\nimport { HeadsignWithCrowding } from \"../__v3api\";\n\n// eslint-disable-next-line import/prefer-default-export\nexport const isSkippedOrCancelled = (\n  prediction: TripPrediction | null\n): boolean =>\n  prediction\n    ? prediction.schedule_relationship === \"skipped\" ||\n      prediction.schedule_relationship === \"cancelled\"\n    : false;\n\nexport const hasPredictionTime = ({\n  time_data_with_crowding_list: timeDataList\n}: HeadsignWithCrowding): boolean =>\n  !!(\n    timeDataList &&\n    timeDataList[0] &&\n    timeDataList[0].time_data &&\n    timeDataList[0].time_data.prediction &&\n    timeDataList[0].time_data.prediction.time\n  );\n","export type AriaLabelling = AriaLabel | AriaLabelledBy;\n\nexport interface AriaLabel {\n  label: string;\n}\n\nexport interface AriaLabelledBy {\n  elementId: string;\n}\n\ninterface AriaLabelProp {\n  \"aria-label\": string;\n}\n\ninterface AriaLabelledByProp {\n  \"aria-labelledby\": string;\n}\n\nconst isLabel = (label: AriaLabelling): label is AriaLabel =>\n  (label as AriaLabel).label !== undefined;\n\nexport const labelOrDescribedBy = (\n  label: AriaLabel | AriaLabelledBy\n): AriaLabelProp | AriaLabelledByProp => {\n  if (isLabel(label)) {\n    return { \"aria-label\": label.label };\n  }\n  return { \"aria-labelledby\": label.elementId };\n};\n","import React, { ReactElement, useState } from \"react\";\nimport { SimpleStop, SelectedOrigin } from \"../__schedule\";\nimport OriginListItem from \"./OriginListItem\";\nimport SearchBox from \"../../../components/SearchBox\";\n\nconst stopListSearchFilter = (\n  stops: SimpleStop[],\n  originSearch: string\n): SimpleStop[] => {\n  if (originSearch.trim() === \"\") {\n    return stops;\n  }\n\n  const streetSuffixRegExp = /( s| st| | st\\.| str| stre| stree| street)$/gi;\n  const cleanSearch = originSearch.trim().replace(streetSuffixRegExp, \"\");\n\n  const regExp = new RegExp(cleanSearch, \"gi\");\n  return stops.filter(stop => (stop.name.match(regExp) || []).length > 0);\n};\n\ninterface Props {\n  selectedOrigin: SelectedOrigin;\n  stops: SimpleStop[];\n  handleChangeOrigin: Function;\n}\n\nconst OriginModalContent = ({\n  selectedOrigin,\n  stops,\n  handleChangeOrigin\n}: Props): ReactElement<HTMLElement> => {\n  const [originSearch, setOriginSearch] = useState(\"\");\n\n  return (\n    <>\n      <br />\n      <h3 className=\"schedule-finder__origin-text\">Choose an origin stop</h3>\n      <SearchBox\n        id=\"origin-filter\"\n        labelText=\"Choose an origin stop\"\n        className=\"schedule-finder__origin-search-container\"\n        placeholder=\"Filter stops and stations\"\n        onChange={setOriginSearch}\n      />\n      <p className=\"schedule-finder__origin-text\">\n        Select from the list below.\n      </p>\n      <div className=\"schedule-finder__origin-list\">\n        {stopListSearchFilter(stops, originSearch).map((stop: SimpleStop) => (\n          <OriginListItem\n            key={stop.id}\n            stop={stop}\n            changeOrigin={handleChangeOrigin}\n            selectedOrigin={selectedOrigin}\n            lastStop={stops[stops.length - 1]}\n          />\n        ))}\n      </div>\n    </>\n  );\n};\n\nexport default OriginModalContent;\n","import React, { ReactElement } from \"react\";\nimport { handleReactEnterKeyPress } from \"../../../helpers/keyboard-events\";\nimport renderSvg from \"../../../helpers/render-svg\";\nimport checkIcon from \"../../../../static/images/icon-checkmark.svg\";\nimport { SimpleStop, SelectedOrigin } from \"../__schedule\";\n\ninterface OriginListItemProps {\n  changeOrigin: Function;\n  stop: SimpleStop;\n  selectedOrigin: SelectedOrigin;\n  lastStop: SimpleStop;\n}\n\nconst OriginListItem = ({\n  changeOrigin,\n  stop,\n  selectedOrigin,\n  lastStop\n}: OriginListItemProps): ReactElement<HTMLElement> => {\n  const isDisabled = stop.is_closed || stop.id === lastStop.id;\n  const handleClick = (): void => {\n    if (isDisabled) return;\n    changeOrigin(stop.id);\n  };\n\n  return (\n    <div\n      tabIndex={0}\n      role=\"button\"\n      className={`schedule-finder__origin-list-item ${\n        stop.id === selectedOrigin ? \"active\" : \"\"\n      } ${isDisabled ? \"disabled\" : \"\"}`}\n      onClick={() => {\n        handleClick();\n      }}\n      onKeyUp={e =>\n        handleReactEnterKeyPress(e, () => {\n          handleClick();\n        })\n      }\n    >\n      <div className=\"schedule-finder__origin-list-leftpad\">\n        {stop.id === selectedOrigin\n          ? renderSvg(\"schedule-finder__check\", checkIcon)\n          : \"\"}{\" \"}\n      </div>\n      {stop.name}{\" \"}\n      {stop.zone && (\n        <span className=\"schedule-finder__zone\">Zone {stop.zone}</span>\n      )}\n    </div>\n  );\n};\n\nexport default OriginListItem;\n","import React, { ReactElement, useReducer, useEffect } from \"react\";\nimport { DirectionId, Route } from \"../../../__v3api\";\nimport { formattedDate } from \"../../../helpers/date\";\nimport { reducer } from \"../../../helpers/fetch\";\nimport { isInCurrentService } from \"../../../helpers/service\";\nimport {\n  SimpleStopMap,\n  RoutePatternsByDirection,\n  ServiceInSelector,\n  ScheduleNote as ScheduleNoteType,\n  SelectedOrigin,\n  UserInput\n} from \"../__schedule\";\nimport { EnhancedJourney } from \"../__trips\";\nimport ScheduleNote from \"../ScheduleNote\";\nimport ScheduleFinderForm from \"./ScheduleFinderForm\";\nimport DailySchedule from \"./daily-schedule/DailySchedule\";\nimport UpcomingDepartures from \"./upcoming-departures/UpcomingDepartures\";\n\ntype fetchAction =\n  | { type: \"FETCH_COMPLETE\"; payload: EnhancedJourney[] }\n  | { type: \"FETCH_ERROR\" }\n  | { type: \"FETCH_STARTED\" };\n\nexport const fetchData = (\n  routeId: string,\n  selectedOrigin: string,\n  selectedDirection: DirectionId,\n  dispatch: (action: fetchAction) => void\n): Promise<void> => {\n  dispatch({ type: \"FETCH_STARTED\" });\n  return (\n    window.fetch &&\n    window\n      .fetch(\n        `/schedules/finder_api/departures?id=${routeId}&stop=${selectedOrigin}&direction=${selectedDirection}`\n      )\n      .then(response => {\n        if (response.ok) return response.json();\n        throw new Error(response.statusText);\n      })\n      .then(json => dispatch({ type: \"FETCH_COMPLETE\", payload: json }))\n      // @ts-ignore\n      .catch(() => dispatch({ type: \"FETCH_ERROR\" }))\n  );\n};\n\ninterface Props {\n  handleChangeDirection: (direction: DirectionId) => void;\n  handleChangeOrigin: (origin: SelectedOrigin) => void;\n  handleOriginSelectClick: () => void;\n  route: Route;\n  selectedDirection: DirectionId;\n  selectedOrigin: string;\n  services: ServiceInSelector[];\n  stops: SimpleStopMap;\n  routePatternsByDirection: RoutePatternsByDirection;\n  today: string;\n  scheduleNote: ScheduleNoteType | null;\n}\n\nconst ScheduleModalContent = ({\n  handleChangeDirection,\n  handleChangeOrigin,\n  handleOriginSelectClick,\n  route,\n  selectedDirection,\n  selectedOrigin,\n  services,\n  stops,\n  routePatternsByDirection,\n  today,\n  scheduleNote\n}: Props): ReactElement<HTMLElement> | null => {\n  const { id: routeId } = route;\n\n  const [state, dispatch] = useReducer(reducer, {\n    data: null,\n    isLoading: true,\n    error: false\n  });\n\n  useEffect(\n    () => {\n      if (\n        routeId !== undefined &&\n        selectedOrigin !== undefined &&\n        selectedDirection !== undefined\n      ) {\n        fetchData(routeId, selectedOrigin, selectedDirection, dispatch);\n      }\n    },\n    [routeId, selectedDirection, selectedOrigin]\n  );\n\n  const serviceToday = services.some(service =>\n    isInCurrentService(service, new Date(today))\n  );\n\n  const input: UserInput = {\n    route: routeId,\n    origin: selectedOrigin,\n    date: today,\n    direction: selectedDirection\n  };\n\n  return (\n    <>\n      <div className=\"schedule-finder schedule-finder--modal\">\n        <ScheduleFinderForm\n          onDirectionChange={handleChangeDirection}\n          onOriginChange={handleChangeOrigin}\n          onOriginSelectClick={handleOriginSelectClick}\n          route={route}\n          selectedDirection={selectedDirection}\n          selectedOrigin={selectedOrigin}\n          stopsByDirection={stops}\n        />\n      </div>\n\n      {serviceToday ? (\n        <UpcomingDepartures state={state} input={input} />\n      ) : (\n        <div className=\"callout text-center u-bold\">\n          There are no scheduled trips for {formattedDate(today)}.\n        </div>\n      )}\n\n      {scheduleNote ? (\n        <ScheduleNote\n          className=\"m-schedule-page__schedule-notes--modal\"\n          scheduleNote={scheduleNote}\n        />\n      ) : (\n        <DailySchedule\n          stopId={selectedOrigin}\n          services={services}\n          routeId={routeId}\n          directionId={selectedDirection}\n          routePatterns={routePatternsByDirection[selectedDirection]}\n          today={today}\n        />\n      )}\n    </>\n  );\n};\n\nexport default ScheduleModalContent;\n","import React, { ReactElement, useEffect, useState } from \"react\";\nimport { Dictionary } from \"lodash\";\nimport { DirectionId, Service } from \"../../../../__v3api\";\nimport Loading from \"../../../../components/Loading\";\nimport { stringToDateObject } from \"../../../../helpers/date\";\nimport {\n  hasMultipleWeekdaySchedules,\n  groupServicesByDateRating,\n  isCurrentValidService,\n  serviceStartDateComparator,\n  optGroupComparator,\n  serviceComparator\n} from \"../../../../helpers/service\";\nimport useFetch, {\n  isLoading,\n  isNotStarted\n} from \"../../../../helpers/use-fetch\";\nimport { EnhancedRoutePattern, ServiceInSelector } from \"../../__schedule\";\nimport { Journey } from \"../../__trips\";\nimport SelectContainer from \"../SelectContainer\";\nimport ScheduleTable from \"./ScheduleTable\";\nimport ServiceOptGroup from \"./ServiceOptGroup\";\n\n// until we come up with a good integration test for async with loading\n// some lines in this file have been ignored from codecov\n\ninterface Props {\n  stopId: string;\n  services: ServiceInSelector[];\n  routeId: string;\n  directionId: DirectionId;\n  routePatterns: EnhancedRoutePattern[];\n  today: string;\n}\n\n// Exported solely for testing\nexport const fetchJourneys = (\n  routeId: string,\n  stopId: string,\n  selectedService: Service,\n  selectedDirection: DirectionId,\n  isCurrent: boolean\n): (() => Promise<Response>) => () =>\n  window.fetch &&\n  window.fetch(\n    `/schedules/finder_api/journeys?id=${routeId}&date=${\n      selectedService.end_date\n    }&direction=${selectedDirection}&stop=${stopId}&is_current=${isCurrent}`\n  );\n\n// Exported solely for testing\nexport const parseResults = (json: JSON): Journey[] =>\n  (json as unknown) as Journey[];\n\nconst SchedulesSelect = ({\n  sortedServices,\n  todayServiceId,\n  defaultSelectedServiceId,\n  todayDate,\n  onSelectService\n}: {\n  sortedServices: ServiceInSelector[];\n  defaultSelectedServiceId: string;\n  todayServiceId: string;\n  todayDate: Date;\n  onSelectService: (service: ServiceInSelector | undefined) => void;\n}): ReactElement<HTMLElement> => {\n  const servicesByOptGroup: Dictionary<Service[]> = groupServicesByDateRating(\n    sortedServices,\n    todayDate\n  );\n\n  return (\n    <div className=\"schedule-finder__service-selector\">\n      <label htmlFor=\"service_selector\" className=\"sr-only\">\n        Schedules\n      </label>\n      <SelectContainer>\n        <select\n          id=\"service_selector\"\n          className=\"c-select-custom text-center u-bold\"\n          defaultValue={defaultSelectedServiceId}\n          onChange={e =>\n            onSelectService(sortedServices.find(s => s.id === e.target.value))\n          }\n        >\n          {Object.keys(servicesByOptGroup)\n            .sort(optGroupComparator)\n            .map((group: string) => {\n              const groupedServices = servicesByOptGroup[group];\n              /* istanbul ignore next */\n              if (groupedServices.length <= 0) return null;\n\n              return (\n                <ServiceOptGroup\n                  key={group}\n                  label={group}\n                  services={groupedServices.sort(serviceComparator)}\n                  multipleWeekdays={hasMultipleWeekdaySchedules(\n                    groupedServices\n                  )}\n                  todayServiceId={todayServiceId}\n                />\n              );\n            })}\n        </select>\n      </SelectContainer>\n    </div>\n  );\n};\n\nexport const DailySchedule = ({\n  stopId,\n  services,\n  routeId,\n  directionId,\n  routePatterns,\n  today\n}: Props): ReactElement<HTMLElement> | null => {\n  const [fetchState, fetch] = useFetch<Journey[]>();\n\n  const todayDate = stringToDateObject(today);\n\n  // By default, show the current day's service\n  const sortedServices = services.sort(serviceStartDateComparator);\n  const currentServices = sortedServices.filter(service =>\n    isCurrentValidService(service, todayDate)\n  );\n  const todayServiceId =\n    currentServices.length > 0 ? currentServices[0].id : \"\";\n  const [defaultSelectedService] = currentServices.length\n    ? currentServices\n    : sortedServices;\n\n  const [selectedService, setSelectedService] = useState(\n    defaultSelectedService\n  );\n\n  const getJourneysForSelectedService = (service: Service): void => {\n    fetch({\n      fetcher: fetchJourneys(routeId, stopId, service, directionId, false),\n      parser: parseResults\n    });\n  };\n\n  useEffect(\n    () => {\n      /* istanbul ignore next */\n      if (selectedService && isNotStarted(fetchState)) {\n        getJourneysForSelectedService(selectedService);\n      }\n    },\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    []\n  );\n\n  if (services.length <= 0) return null;\n\n  return (\n    <>\n      <h3>Daily Schedule</h3>\n\n      <SchedulesSelect\n        sortedServices={sortedServices}\n        todayServiceId={todayServiceId}\n        defaultSelectedServiceId={defaultSelectedService.id}\n        todayDate={todayDate}\n        onSelectService={chosenService => {\n          if (chosenService) {\n            setSelectedService(chosenService);\n            getJourneysForSelectedService(chosenService);\n          }\n        }}\n      />\n\n      {isLoading(fetchState) && <Loading />}\n\n      {/* istanbul ignore next */ !isLoading(fetchState) &&\n        /* istanbul ignore next */ fetchState.data && (\n          /* istanbul ignore next */ <ScheduleTable\n            journeys={fetchState.data}\n            routePatterns={routePatterns}\n            input={{\n              route: routeId,\n              origin: stopId,\n              direction: directionId,\n              date: selectedService!.end_date\n            }}\n          />\n        )}\n    </>\n  );\n};\n\nexport default DailySchedule;\n","import React, { ReactElement } from \"react\";\nimport { isACommuterRailRoute } from \"../../../../models/route\";\nimport { EnhancedRoutePattern, UserInput } from \"../../__schedule\";\nimport { Journey } from \"../../__trips\";\nimport TableRow from \"./TableRow\";\n\ninterface Props {\n  journeys: Journey[];\n  routePatterns: EnhancedRoutePattern[];\n  input: UserInput;\n}\n\ninterface RoutePatternsById {\n  [key: string]: EnhancedRoutePattern;\n}\n\nconst isSchoolTrip = (\n  routePatternsById: RoutePatternsById,\n  routePatternId: string\n): boolean =>\n  (\n    (routePatternsById[routePatternId] &&\n      routePatternsById[routePatternId].time_desc) ||\n    \"\"\n  ).match(/school/gi) !== null;\n\nconst ScheduleTable = ({\n  journeys,\n  routePatterns,\n  input\n}: Props): ReactElement<HTMLElement> => {\n  if (journeys.length === 0) {\n    return (\n      <div className=\"callout u-bold text-center\">\n        There is no scheduled service for this time period.\n      </div>\n    );\n  }\n\n  const routePatternsById = routePatterns.reduce(\n    (accumulator, routePattern) => ({\n      ...accumulator,\n      [routePattern.id]: routePattern\n    }),\n    {}\n  ) as RoutePatternsById;\n  const anySchoolTrips = Object.values(journeys).some(\n    ({ trip: { route_pattern_id: routePatternId } }) =>\n      isSchoolTrip(routePatternsById, routePatternId)\n  );\n\n  const firstTrip = journeys[0];\n  const lastTrip = journeys.length > 1 ? journeys[journeys.length - 1] : null;\n\n  return (\n    <>\n      <div className=\"schedule-finder__first-last-trip\">\n        <div className=\"u-small-caps u-bold\">First Trip</div>\n        {firstTrip.departure.time}\n        {lastTrip && (\n          <>\n            <div className=\"u-small-caps u-bold\">Last Trip</div>\n            {lastTrip.departure.time}\n          </>\n        )}\n      </div>\n\n      {anySchoolTrips && (\n        <p className=\"text-center\">\n          <strong>S</strong> - Does NOT run on school vacation\n        </p>\n      )}\n\n      <table className=\"schedule-table\">\n        <thead className=\"schedule-table__header\">\n          <tr>\n            {anySchoolTrips && (\n              <th scope=\"col\" className=\"schedule-table__cell\" />\n            )}\n            <th scope=\"col\" className=\"schedule-table__cell\">\n              Departs\n            </th>\n            {isACommuterRailRoute(firstTrip.route) && (\n              <th scope=\"col\" className=\"schedule-table__cell\">\n                Train\n              </th>\n            )}\n            <th scope=\"col\" colSpan={2} className=\"schedule-table__cell\">\n              <span className=\"pull-left\">Destination</span>\n              Trip Details\n            </th>\n          </tr>\n        </thead>\n        <tbody>\n          {journeys.map((journey: Journey) => (\n            <TableRow\n              key={journey.trip.id}\n              input={input}\n              journey={journey}\n              isSchoolTrip={isSchoolTrip(\n                routePatternsById,\n                journey.trip.route_pattern_id\n              )}\n              anySchoolTrips={anySchoolTrips}\n            />\n          ))}\n        </tbody>\n      </table>\n    </>\n  );\n};\n\nexport default ScheduleTable;\n","import React, { useEffect, useState, ReactElement } from \"react\";\nimport { modeIcon } from \"../../../../helpers/icon\";\nimport { breakTextAtSlash } from \"../../../../helpers/text\";\nimport useFetch, { isNotStarted } from \"../../../../helpers/use-fetch\";\nimport { isACommuterRailRoute } from \"../../../../models/route\";\nimport { UserInput } from \"../../__schedule\";\nimport { Journey, TripInfo } from \"../../__trips\";\nimport AccordionRow from \"./AccordionRow\";\nimport TripDetails from \"./TripDetails\";\n\ninterface TableRowProps {\n  input: UserInput;\n  journey: Journey;\n  isSchoolTrip: boolean;\n  anySchoolTrips: boolean;\n}\n\ninterface AccordionProps {\n  input: UserInput;\n  journey: Journey;\n  contentComponent: () => ReactElement<HTMLElement>;\n}\n\n// Exported solely for testing\nexport const fetchTripInfo = (\n  tripId: string,\n  { route, direction, date, origin }: UserInput\n): (() => Promise<Response>) => () =>\n  window.fetch &&\n  window.fetch(\n    `/schedules/finder_api/trip?id=${tripId}&route=${route}&date=${date}&direction=${direction}&stop=${origin}`\n  );\n\n// Exported solely for testing\nexport const parseResults = (json: JSON): TripInfo =>\n  (json as unknown) as TripInfo;\n\nconst RouteIcon = ({\n  route: { type, name, id }\n}: Journey): ReactElement<HTMLElement> | undefined => {\n  if (type !== 3) {\n    return modeIcon(id);\n  }\n\n  const backgroundClass = name.startsWith(\"SL\")\n    ? \"u-bg--silver-line\"\n    : \"u-bg--bus\";\n  return (\n    <span className={`c-icon__bus-pill--small ${backgroundClass}`}>{name}</span>\n  );\n};\n\nconst BusTableRow = ({\n  journey,\n  anySchoolTrips,\n  isSchoolTrip\n}: {\n  journey: Journey;\n  anySchoolTrips: boolean;\n  isSchoolTrip: boolean;\n}): ReactElement<HTMLElement> => (\n  <>\n    {anySchoolTrips && (\n      <td className=\"schedule-table__cell schedule-table__cell--tiny\">\n        {isSchoolTrip && <strong>S</strong>}\n      </td>\n    )}\n    <td className=\"schedule-table__cell schedule-table__cell--time u-nowrap u-tabular-nums\">\n      {journey.departure.time}\n    </td>\n    <td className=\"schedule-table__cell schedule-table__cell--headsign\">\n      <span className=\"schedule-table__route-pill m-route-pills\">\n        {RouteIcon(journey)}\n      </span>\n      {breakTextAtSlash(journey.trip.headsign)}\n    </td>\n  </>\n);\n\nconst CrTableRow = ({\n  journey\n}: {\n  journey: Journey;\n}): ReactElement<HTMLElement> => (\n  <>\n    <td className=\"schedule-table__cell schedule-table__cell--time u-nowrap u-tabular-nums\">\n      {journey.departure.time}\n    </td>\n    {journey.trip.name && (\n      <td className=\"schedule-table__cell u-tabular-nums\">\n        {journey.trip.name}\n      </td>\n    )}\n    <td className=\"schedule-table__cell schedule-table__cell--headsign\">\n      {modeIcon(journey.route.id)} {breakTextAtSlash(journey.trip.headsign)}\n    </td>\n  </>\n);\n\nconst Accordion = ({\n  input,\n  journey,\n  contentComponent\n}: AccordionProps): ReactElement<HTMLElement> => {\n  const [expanded, setExpanded] = useState(false);\n  const [fetchState, fetch] = useFetch<TripInfo>();\n\n  const toggle = (): void => setExpanded(!expanded);\n  const tripId = journey.trip.id;\n\n  useEffect(\n    () => {\n      if (expanded && isNotStarted(fetchState)) {\n        fetch({\n          fetcher: fetchTripInfo(tripId, input),\n          parser: parseResults\n        });\n      }\n    },\n    [tripId, input, expanded, fetchState, fetch]\n  );\n\n  const isCommuterRail = isACommuterRailRoute(journey.route);\n\n  return (\n    <AccordionRow\n      id={`trip-${tripId}`}\n      colSpan={isCommuterRail ? 4 : 3}\n      contentComponent={contentComponent}\n      expanded={expanded}\n      toggle={toggle}\n    >\n      <TripDetails fetchState={fetchState} showFare={isCommuterRail} />\n    </AccordionRow>\n  );\n};\n\nconst TableRow = ({\n  input,\n  journey,\n  anySchoolTrips,\n  isSchoolTrip\n}: TableRowProps): ReactElement<HTMLElement> | null => {\n  const contentComponent =\n    journey.route.type !== 2 &&\n    journey.route.description !== \"rail_replacement_bus\"\n      ? () => (\n          <BusTableRow\n            journey={journey}\n            anySchoolTrips={anySchoolTrips}\n            isSchoolTrip={isSchoolTrip}\n          />\n        )\n      : () => <CrTableRow journey={journey} />;\n\n  return (\n    <Accordion\n      input={input}\n      journey={journey}\n      contentComponent={contentComponent}\n    />\n  );\n};\n\nexport default TableRow;\n","/**\n * Replaces slashes in a given string with a slash + ZERO_WIDTH_SPACE.\n * It's visually the same, but allows browsers to break the text into multiple lines.\n */\n// eslint-disable-next-line import/prefer-default-export\nexport const breakTextAtSlash = (str: string): string =>\n  str.replace(/\\//g, \"/​\");\n","import React, { ReactElement, ReactNode } from \"react\";\nimport { caret } from \"../../../../helpers/icon\";\nimport { handleReactEnterKeyPress } from \"../../../../helpers/keyboard-events\";\n\ninterface Props {\n  id: string;\n  colSpan: number;\n  contentComponent: () => ReactElement<HTMLElement>;\n  expanded: boolean;\n  toggle: () => void;\n  children: ReactNode;\n}\n\nconst AccordionRow = ({\n  id,\n  colSpan,\n  contentComponent,\n  expanded,\n  toggle,\n  children\n}: Props): ReactElement<HTMLElement> => (\n  <>\n    <tr\n      className={\n        expanded ? \"schedule-table__row--expanded\" : \"schedule-table__row\"\n      }\n      aria-controls={id}\n      aria-expanded={expanded}\n      role=\"button\"\n      onClick={toggle}\n      onKeyPress={e => handleReactEnterKeyPress(e, toggle)}\n      tabIndex={0}\n    >\n      {contentComponent()}\n      <td className=\"schedule-table__cell schedule-table__cell--tiny\">\n        {expanded\n          ? caret(\"c-expandable-block__header-caret--white\", expanded)\n          : caret(\"c-expandable-block__header-caret\", expanded)}\n      </td>\n    </tr>\n    {expanded && (\n      <tr id={`${id}-expanded`}>\n        <td\n          colSpan={colSpan}\n          className=\"schedule-table__cell schedule-table__cell--expanded\"\n        >\n          {children}\n        </td>\n      </tr>\n    )}\n  </>\n);\n\nexport default AccordionRow;\n","import React, { ReactElement } from \"react\";\nimport Loading from \"../../../../components/Loading\";\nimport { FetchState, hasData, isLoading } from \"../../../../helpers/use-fetch\";\nimport { TripInfo } from \"../../__trips\";\nimport CrowdingPill from \"../../line-diagram/CrowdingPill\";\nimport TripStop from \"./TripStop\";\n\ninterface Props {\n  fetchState: FetchState<TripInfo>;\n  showFare: boolean;\n}\n\nconst TripSummary = ({\n  tripInfo\n}: {\n  tripInfo: TripInfo;\n}): ReactElement<HTMLElement> => (\n  <tr className=\"trip-details-table__summary\">\n    <td colSpan={3} className=\"schedule-table__cell\">\n      <div>\n        <span className=\"trip-details-table__title u-small-caps u-bold\">\n          Trip length\n        </span>\n        {tripInfo.times.length} stops, {tripInfo.duration} minutes total\n      </div>\n      <div>\n        <span className=\"trip-details-table__title u-small-caps u-bold\">\n          Fare\n        </span>\n\n        {tripInfo.fare && tripInfo.fare.price}\n        <a className=\"trip-details-table__link\" href={tripInfo.fare.fare_link}>\n          View fares\n        </a>\n      </div>\n    </td>\n  </tr>\n);\n\nconst allTimesHaveSchedule = (tripInfo: TripInfo): boolean =>\n  tripInfo.times.every(time => !!time.schedule);\n\nconst TripDetailsTable = ({\n  tripInfo,\n  showFare\n}: {\n  tripInfo: TripInfo;\n  showFare: boolean;\n}): ReactElement<HTMLElement> => {\n  const crowding = tripInfo.vehicle ? tripInfo.vehicle.crowding : null;\n\n  return (\n    <table className=\"trip-details-table\">\n      <thead>\n        {crowding && (\n          <tr>\n            <th>\n              <CrowdingPill crowding={crowding} />\n            </th>\n          </tr>\n        )}\n        <TripSummary tripInfo={tripInfo} />\n        <tr>\n          <th scope=\"col\" className=\"schedule-table__cell\">\n            Stops\n          </th>\n          {showFare && (\n            <th\n              scope=\"col\"\n              className=\"schedule-table__cell schedule-table__cell--right-adjusted\"\n            >\n              Fare\n            </th>\n          )}\n          <th\n            scope=\"col\"\n            className=\"schedule-table__cell schedule-table__cell--right-adjusted\"\n          >\n            Arrival\n          </th>\n        </tr>\n      </thead>\n      <tbody>\n        {allTimesHaveSchedule(tripInfo) ? (\n          tripInfo.times.map((departure, index: number) => (\n            <TripStop\n              departure={departure}\n              index={index}\n              showFare={showFare}\n              routeType={tripInfo.route_type}\n              key={departure.schedule.stop.id}\n            />\n          ))\n        ) : (\n          <ErrorLoadingTrip />\n        )}\n      </tbody>\n    </table>\n  );\n};\n\nconst ErrorLoadingTrip = (): ReactElement<HTMLElement> => (\n  <p>\n    <em>Error loading trip details. Please try again later.</em>\n  </p>\n);\n\nconst TripDetails = ({\n  fetchState,\n  showFare\n}: Props): ReactElement<HTMLElement> => {\n  if (hasData(fetchState) && !!fetchState.data) {\n    return <TripDetailsTable tripInfo={fetchState.data} showFare={showFare} />;\n  }\n\n  if (isLoading(fetchState)) {\n    return <Loading />;\n  }\n\n  return <ErrorLoadingTrip />;\n};\n\nexport default TripDetails;\n","import React, { ReactElement } from \"react\";\nimport { RouteType } from \"../../../../__v3api\";\nimport { alertIcon } from \"../../../../helpers/icon\";\nimport { breakTextAtSlash } from \"../../../../helpers/text\";\nimport { isSkippedOrCancelled } from \"../../../../models/prediction\";\nimport { isACommuterRailRoute } from \"../../../../models/route\";\nimport { TripDeparture } from \"../../__trips\";\n\ninterface Props {\n  departure: TripDeparture;\n  index: number;\n  showFare: boolean;\n  routeType: RouteType;\n}\n\nconst formattedDepartureTimes = (\n  departure: TripDeparture,\n  routeType: RouteType\n): ReactElement<HTMLElement> => {\n  const { schedule, prediction, delay } = departure;\n\n  if (isACommuterRailRoute(routeType)) {\n    if (delay && delay >= 300 && prediction && prediction.time) {\n      return (\n        <>\n          <span className=\"schedule-table__times--delayed schedule-table__times--delayed-future_stop\">\n            {schedule.time}\n          </span>\n          <br className=\"hidden-sm-up\" />\n          {prediction.time}\n        </>\n      );\n    }\n\n    return <>{schedule.time}</>;\n  }\n\n  return <>{prediction && prediction.time ? prediction.time : schedule.time}</>;\n};\n\nconst TripStop = ({\n  departure,\n  index,\n  showFare,\n  routeType\n}: Props): ReactElement<HTMLElement> | null => {\n  const { schedule } = departure;\n\n  /* istanbul ignore next */\n  if (!schedule || !schedule.stop) return null;\n\n  return (\n    <tr key={`${schedule.stop.id}`}>\n      <th className=\"schedule-table__cell\" scope=\"row\">\n        <a\n          href={`/stops/${schedule.stop.id}`}\n          className={\n            isSkippedOrCancelled(departure.prediction) ? \"strikethrough\" : \"\"\n          }\n        >\n          {isSkippedOrCancelled(departure.prediction) && (\n            <>\n              {alertIcon(\"c-svg__icon-alerts-triangle\")}\n              <span className=\"sr-only\">This trip skips this stop at</span>\n            </>\n          )}\n          {breakTextAtSlash(schedule.stop.name)}\n        </a>\n      </th>\n      {showFare && (\n        <td className=\"schedule-table__cell schedule-table__cell--right-adjusted u-tabular-nums\">\n          {index === 0 ? \"\" : schedule.fare.price}\n        </td>\n      )}\n      <td className=\"schedule-table__cell schedule-table__cell--right-adjusted u-tabular-nums\">\n        {formattedDepartureTimes(departure, routeType)}\n      </td>\n    </tr>\n  );\n};\n\nexport default TripStop;\n","import React, { ReactElement } from \"react\";\nimport { Service } from \"../../../../__v3api\";\nimport { shortDate } from \"../../../../helpers/date\";\nimport {\n  ServiceGroupNames,\n  serviceDays,\n  dedupeServices\n} from \"../../../../helpers/service\";\n\ninterface Props {\n  label: string;\n  services: Service[];\n  multipleWeekdays: boolean;\n  todayServiceId: string;\n}\n\nconst ServiceOptGroup = ({\n  label,\n  services,\n  multipleWeekdays,\n  todayServiceId\n}: Props): ReactElement<HTMLElement> | null =>\n  services.length === 0 ? null : (\n    <optgroup label={label}>\n      {dedupeServices(services).map(service => {\n        const isMultipleWeekday =\n          multipleWeekdays &&\n          service.type === \"weekday\" &&\n          service.typicality !== \"holiday_service\";\n\n        const startDate = new Date(service.start_date);\n        const endDate = new Date(service.end_date);\n        let optionText = \"\";\n\n        if (service.typicality === \"unplanned_disruption\") {\n          optionText = service.description;\n        } else if (\n          service.typicality === \"holiday_service\" &&\n          service.added_dates_notes\n        ) {\n          optionText = Object.entries(service.added_dates_notes)\n            .map(entry => {\n              const [addedDate, addedNote] = entry;\n              if (addedNote === \"\") {\n                return `${shortDate(new Date(addedDate))}`;\n              }\n              return `${addedNote}, ${shortDate(new Date(addedDate))}`;\n            })\n            .join(\", \");\n        } else if (label === ServiceGroupNames.OTHER) {\n          optionText = isMultipleWeekday\n            ? `${serviceDays(service)} schedule`\n            : service.description;\n          optionText += `, ${shortDate(startDate)} to ${shortDate(endDate)}`;\n        } else {\n          optionText = isMultipleWeekday\n            ? `${serviceDays(service)} schedule`\n            : service.description;\n          if (service.rating_description) {\n            optionText += `, ${service.rating_description}`;\n          }\n        }\n\n        return (\n          <option key={service.id} value={service.id}>\n            {optionText}\n            {service.id === todayServiceId && \" (now)\"}\n          </option>\n        );\n      })}\n    </optgroup>\n  );\n\nexport default ServiceOptGroup;\n","import React, { ReactElement, useEffect, useReducer, useState } from \"react\";\nimport { get, isEmpty } from \"lodash\";\nimport { Route } from \"../../../../__v3api\";\nimport Loading from \"../../../../components/Loading\";\nimport { reducer } from \"../../../../helpers/fetch\";\nimport { modeIcon } from \"../../../../helpers/icon\";\nimport {\n  timeForCommuterRail,\n  trackForCommuterRail,\n  statusForCommuterRail\n} from \"../../../../helpers/prediction-helpers\";\nimport { breakTextAtSlash } from \"../../../../helpers/text\";\nimport { isABusRoute } from \"../../../../models/route\";\nimport liveClockSvg from \"../../../../../static/images/icon-live-clock.svg\";\nimport { modeBgClass } from \"../../../../stop/components/RoutePillList\";\nimport { UserInput } from \"../../__schedule\";\nimport { EnhancedJourney } from \"../../__trips\";\nimport LazyAccordion, { AccordionRow } from \"./LazyAccordion\";\nimport LiveCrowdingIcon from \"../../line-diagram/LiveCrowdingIcon\";\n\ninterface State {\n  data: EnhancedJourney[] | null;\n  isLoading: boolean;\n  error: boolean;\n}\n\ninterface Props {\n  state: State;\n  input: UserInput;\n}\n\ninterface AccordionProps {\n  state: State;\n  journey: EnhancedJourney;\n  contentComponent: () => ReactElement<HTMLElement>;\n}\n\ntype FetchAction =\n  | { type: \"FETCH_COMPLETE\"; payload: EnhancedJourney[] }\n  | { type: \"FETCH_ERROR\" }\n  | { type: \"FETCH_STARTED\" };\n\n// Predictions are nil unless they have a time. This helps\n// prevent far-future trips from appearing in Upcoming Departures.\nconst hasPredictions = (journeys: EnhancedJourney[]): boolean =>\n  journeys.filter(journey => journey.realtime.prediction !== null).length > 0;\n\nconst RoutePillSmall = ({\n  route\n}: {\n  route: Route;\n}): ReactElement<HTMLElement> | null => (\n  <span className=\"schedule-table__route-pill m-route-pills\">\n    <span className={`c-icon__bus-pill--small ${modeBgClass(route)}`}>\n      {route.name}\n    </span>\n  </span>\n);\n\nexport const crowdingInformation = (\n  journey: EnhancedJourney,\n  tripId: string\n): ReactElement<HTMLElement> | null => {\n  const { tripInfo } = journey;\n  if (tripInfo) {\n    // Only display the crowding information if the trip ID of the vehicle matches the trip ID of the prediction being displayed.\n    const showCrowding =\n      !!tripInfo.vehicle &&\n      !!tripInfo.vehicle.crowding &&\n      tripInfo.vehicle.trip_id === tripId;\n\n    return (\n      <LiveCrowdingIcon\n        crowding={showCrowding ? tripInfo!.vehicle!.crowding! : null}\n      />\n    );\n  }\n\n  return null;\n};\n\nexport const BusTableRow = ({\n  journey\n}: {\n  journey: EnhancedJourney;\n}): ReactElement<HTMLElement> | null => {\n  const { trip, route, realtime } = journey;\n\n  return (\n    <>\n      <td className=\"schedule-table__cell schedule-table__cell--headsign\">\n        {isABusRoute(route) ? (\n          <RoutePillSmall route={route} />\n        ) : (\n          <span className=\"schedule-table__row-route-pill m-route-pills\">\n            {modeIcon(route.id)}\n          </span>\n        )}\n        {trip.headsign}\n      </td>\n      <td className=\"schedule-table__cell schedule-table__cell--time u-nowrap u-bold text-right\">\n        {realtime.prediction!.time}\n        {crowdingInformation(journey, trip.id)}\n      </td>\n    </>\n  );\n};\n\nexport const CrTableRow = ({\n  journey\n}: {\n  journey: EnhancedJourney;\n}): ReactElement<HTMLElement> | null => {\n  const { trip, route, realtime } = journey;\n\n  if (realtime.prediction === null) return null;\n\n  const status = statusForCommuterRail(realtime);\n  const track = trackForCommuterRail(realtime);\n  const trainNumber = trip.name ? `Train ${trip.name}` : null;\n\n  const statusWithTrain = [trainNumber, status].filter(x => x).join(\" · \");\n\n  return (\n    <>\n      <td className=\"schedule-table__cell schedule-table__cell--headsign\">\n        {modeIcon(route.id)} {breakTextAtSlash(trip.headsign)}\n      </td>\n      <td className=\"schedule-table__cell text-right\">\n        {timeForCommuterRail(\n          realtime,\n          \"u-tabular-nums u-nowrap schedule-table__times\"\n        )}\n        <div className=\"u-nowrap\">\n          {statusWithTrain}\n          {track && (\n            <span className=\"schedule-table__track\">{` · ${track}`}</span>\n          )}\n        </div>\n      </td>\n    </>\n  );\n};\n\nconst TableRow = ({\n  state,\n  input,\n  journey\n}: {\n  state: State;\n  input: UserInput;\n  journey: EnhancedJourney;\n}): ReactElement<HTMLElement> | null => {\n  const { realtime } = journey;\n\n  if (realtime.prediction === null) return null;\n\n  const contentComponent =\n    journey.route.type !== 2\n      ? () => <BusTableRow journey={journey} />\n      : () => <CrTableRow journey={journey} />;\n\n  if (isABusRoute(journey.route)) {\n    return (\n      <Accordion\n        state={state}\n        journey={journey}\n        contentComponent={contentComponent}\n      />\n    );\n  }\n\n  return (\n    <LazyAccordion\n      input={input}\n      journey={journey}\n      contentComponent={contentComponent}\n    />\n  );\n};\n\nconst Accordion = ({\n  state,\n  journey,\n  contentComponent\n}: AccordionProps): ReactElement<HTMLElement> => {\n  const adjustedState = {\n    data: journey.tripInfo,\n    isLoading: state.isLoading,\n    error: state.error\n  };\n\n  const [expanded, setExpanded] = useState(false);\n  const toggle = (): void => setExpanded(!expanded);\n\n  return (\n    <AccordionRow\n      state={adjustedState}\n      journey={journey}\n      contentComponent={contentComponent}\n      expanded={expanded}\n      toggle={toggle}\n    />\n  );\n};\n\nconst UpcomingDeparturesHeader = (\n  <div className=\"schedule-table__upcoming-departures-header\">\n    <h3>Upcoming Departures</h3>\n    <span className=\"schedule-table__live-clock\" aria-hidden>\n      <span className=\"icon-realtime animate notranslate\">\n        <span\n          className=\"c-svg__icon-live-clock\"\n          // eslint-disable-next-line react/no-danger\n          dangerouslySetInnerHTML={{ __html: liveClockSvg }}\n        />\n        <span className=\"icon-realtime-text\">live</span>\n      </span>\n    </span>\n  </div>\n);\n\nexport const fetchData = async (\n  input: UserInput,\n  journeys: EnhancedJourney[],\n  dispatch: (action: FetchAction) => void\n): Promise<EnhancedJourney[]> => {\n  const { route, origin, direction, date } = input;\n\n  dispatch({ type: \"FETCH_STARTED\" });\n\n  return Promise.all(\n    journeys\n      .filter(journey => journey.realtime.prediction !== null)\n      .map(async journey => {\n        // Sometimes using the route.id from the journey is desired over the route.id\n        // from input (e.g. so we can get trips for \"Green-D\" instead of \"Green\")\n        const adjustedRoute = journey.route.id;\n\n        const tripId = journey.trip.id;\n\n        const tripInfo = await await fetch(\n          `/schedules/finder_api/trip?id=${tripId}&route=${adjustedRoute ||\n            route}&date=${date}&direction=${direction}&stop=${origin}`\n        )\n          .then(res => res.json())\n          .catch(() => {\n            dispatch({ type: \"FETCH_ERROR\" });\n          });\n\n        return { ...journey, tripInfo };\n      })\n  );\n};\n\nexport const upcomingDeparturesTable = (\n  journeysWithTripInfo: EnhancedJourney[],\n  state: State,\n  input: UserInput\n): ReactElement<HTMLElement> => {\n  const headerLabel = \"Trip Details\";\n\n  // We use this condition for cosmetic purposes: if there's no crowding information for _any_ of the upcoming departures, we don't want to show a gap/empty column.\n  const someCrowdingInfoExists =\n    !isEmpty(journeysWithTripInfo) && isABusRoute(journeysWithTripInfo[0].route)\n      ? journeysWithTripInfo.some(journey => {\n          const { tripInfo } = journey;\n          if (!tripInfo) return false;\n          const crowding = get(tripInfo, \"vehicle.crowding\", null);\n          return crowding !== null;\n        })\n      : false;\n\n  return (\n    <>\n      {UpcomingDeparturesHeader}\n      {journeysWithTripInfo !== null && hasPredictions(journeysWithTripInfo) ? (\n        <table\n          className={`schedule-table schedule-table--upcoming ${\n            !someCrowdingInfoExists ? \"u-no-crowding-data\" : \"\"\n          }`}\n        >\n          <thead className=\"schedule-table__header\">\n            <tr className=\"schedule-table__row-header\">\n              <th scope=\"col\" className=\"schedule-table__cell\">\n                Destinations\n              </th>\n              <th scope=\"col\" colSpan={2} className=\"schedule-table__cell\">\n                {someCrowdingInfoExists ? (\n                  <span className=\"trip-details-table__title\">\n                    {headerLabel}\n                  </span>\n                ) : (\n                  headerLabel\n                )}\n              </th>\n            </tr>\n          </thead>\n          <tbody>\n            {journeysWithTripInfo.map(\n              (journey: EnhancedJourney, idx: number) => (\n                <TableRow\n                  state={state}\n                  input={input}\n                  journey={journey}\n                  // eslint-disable-next-line react/no-array-index-key\n                  key={idx}\n                />\n              )\n            )}\n          </tbody>\n        </table>\n      ) : (\n        <div className=\"callout text-center u-bold\">\n          There are currently no realtime departures available.\n        </div>\n      )}\n    </>\n  );\n};\n\nexport const UpcomingDepartures = ({\n  state: stateFromProps,\n  input\n}: Props): ReactElement<HTMLElement> | null => {\n  const [state, dispatch] = useReducer(reducer, {\n    data: null,\n    isLoading: false,\n    error: false\n  });\n\n  const { error, isLoading } = stateFromProps;\n\n  useEffect(\n    () => {\n      if (\n        stateFromProps.data !== null &&\n        !stateFromProps.isLoading &&\n        !stateFromProps.error &&\n        (state.data === null && !state.isLoading && !state.error)\n      ) {\n        const journeys = stateFromProps.data;\n\n        const { route, origin, direction, date } = input;\n\n        if (\n          journeys.length > 0 &&\n          isABusRoute(journeys[0].route) &&\n          (route !== undefined &&\n            origin !== undefined &&\n            direction !== undefined &&\n            date !== undefined)\n        ) {\n          fetchData(input, journeys, dispatch)\n            .then((retrievedJourneysWithTripInfo: EnhancedJourney[]) => {\n              dispatch({\n                type: \"FETCH_COMPLETE\",\n                payload: retrievedJourneysWithTripInfo\n              });\n            })\n            .catch(() => dispatch({ type: \"FETCH_ERROR\" }));\n        } else {\n          dispatch({\n            type: \"FETCH_COMPLETE\",\n            payload: journeys\n          });\n        }\n      }\n    },\n    // including 'input' will call 'fetch' again so it should not be included\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [\n      state.data,\n      state.error,\n      state.isLoading,\n      stateFromProps.data,\n      stateFromProps.error,\n      stateFromProps.isLoading\n    ]\n  );\n\n  if (error || isLoading || state.error) return null;\n\n  if (state.isLoading) return <Loading />;\n\n  const journeysWithTripInfo = state.data;\n\n  return <>{upcomingDeparturesTable(journeysWithTripInfo, state, input)}</>;\n};\n\nexport default UpcomingDepartures;\n","module.exports = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\"><title>clock</title><path fill-rule=\\\"evenodd\\\" d=\\\"M5 4V1.5a.5.5 0 0 0-1 0v3a.498.498 0 0 0 .5.5h2a.5.5 0 0 0 0-1H5zm-.5 5a4.5 4.5 0 1 1 0-9 4.5 4.5 0 0 1 0 9z\\\"></path></svg>\"","import React, { ReactElement, useEffect, useReducer, useState } from \"react\";\nimport { reducer } from \"../../../../helpers/fetch\";\nimport { caret } from \"../../../../helpers/icon\";\nimport { handleReactEnterKeyPress } from \"../../../../helpers/keyboard-events\";\nimport { isACommuterRailRoute } from \"../../../../models/route\";\nimport { UserInput } from \"../../__schedule\";\nimport { EnhancedJourney, Journey, TripInfo } from \"../../__trips\";\nimport TripDetails, { State } from \"./TripDetails\";\n\ninterface Props {\n  input: UserInput;\n  journey: Journey | EnhancedJourney;\n  contentComponent: () => ReactElement<HTMLElement>;\n}\n\ntype fetchAction =\n  | { type: \"FETCH_COMPLETE\"; payload: TripInfo }\n  | { type: \"FETCH_ERROR\" }\n  | { type: \"FETCH_STARTED\" };\n\nexport const fetchData = (\n  tripId: string,\n  { route, direction, date, origin }: UserInput,\n  dispatch: (action: fetchAction) => void\n): Promise<void> => {\n  dispatch({ type: \"FETCH_STARTED\" });\n  return (\n    window.fetch &&\n    window\n      .fetch(\n        `/schedules/finder_api/trip?id=${tripId}&route=${route}&date=${date}&direction=${direction}&stop=${origin}`\n      )\n      .then(response => {\n        if (response.ok) return response.json();\n        throw new Error(response.statusText);\n      })\n      .then(json => dispatch({ type: \"FETCH_COMPLETE\", payload: json }))\n      // @ts-ignore\n      .catch(() => dispatch({ type: \"FETCH_ERROR\" }))\n  );\n};\n\nexport const AccordionRow = ({\n  state,\n  journey,\n  contentComponent,\n  expanded,\n  toggle\n}: {\n  state: State;\n  journey: Journey | EnhancedJourney;\n  contentComponent: () => ReactElement<HTMLElement>;\n  expanded: boolean;\n  toggle: () => void;\n}): ReactElement<HTMLElement> => {\n  const tripId = journey.trip.id;\n  const isCommuterRail = isACommuterRailRoute(journey.route);\n\n  return (\n    <>\n      <tr\n        className={\n          expanded ? \"schedule-table__row--expanded\" : \"schedule-table__row\"\n        }\n        aria-controls={`trip-${tripId}`}\n        aria-expanded={expanded}\n        role=\"button\"\n        onClick={toggle}\n        onKeyPress={e => handleReactEnterKeyPress(e, toggle)}\n        tabIndex={0}\n      >\n        {contentComponent()}\n        <td className=\"schedule-table__cell schedule-table__cell--tiny\">\n          {expanded\n            ? caret(\"c-expandable-block__header-caret--white\", expanded)\n            : caret(\"c-expandable-block__header-caret\", expanded)}\n        </td>\n      </tr>\n      {expanded && (\n        <tr id={`trip-${tripId}-expanded`}>\n          <td\n            colSpan={isCommuterRail ? 4 : 3}\n            className=\"schedule-table__cell schedule-table__cell--expanded\"\n          >\n            <TripDetails state={state} showFare={isCommuterRail} />\n          </td>\n        </tr>\n      )}\n    </>\n  );\n};\n\nconst LazyAccordion = ({\n  input,\n  journey,\n  contentComponent\n}: Props): ReactElement<HTMLElement> => {\n  const [expanded, setExpanded] = useState(false);\n  const [state, dispatch] = useReducer(reducer, {\n    data: null,\n    isLoading: false,\n    error: false\n  });\n\n  const toggle = (): void => setExpanded(!expanded);\n  const tripId = journey.trip.id;\n\n  useEffect(\n    () => {\n      if (expanded && state.data === null && !state.isLoading && !state.error) {\n        fetchData(tripId, input, dispatch);\n      }\n    },\n    [tripId, input, expanded, state]\n  );\n\n  return (\n    <AccordionRow\n      state={state}\n      journey={journey}\n      contentComponent={contentComponent}\n      expanded={expanded}\n      toggle={toggle}\n    />\n  );\n};\n\nexport default LazyAccordion;\n","import React, { ReactElement } from \"react\";\nimport {\n  TripDeparture,\n  TripDepartureWithPrediction,\n  TripInfo\n} from \"../../__trips\";\nimport Loading from \"../../../../components/Loading\";\nimport CrowdingPill from \"../../line-diagram/CrowdingPill\";\nimport TripStop from \"./TripStop\";\n\nexport interface State {\n  data: TripInfo | null;\n  isLoading: boolean;\n  error: boolean;\n}\n\ninterface Props {\n  state: State;\n  showFare: boolean;\n}\n\nconst hasAPrediction = (\n  departure: TripDeparture\n): departure is TripDepartureWithPrediction => departure.prediction !== null;\n\nconst departuresWithPredictions = (\n  departures: TripDeparture[]\n): TripDepartureWithPrediction[] => departures.filter(hasAPrediction);\n\nconst TripSummary = ({\n  tripInfo\n}: {\n  tripInfo: TripInfo;\n}): ReactElement<HTMLElement> => (\n  <tr className=\"trip-details-table__summary\">\n    <td colSpan={3} className=\"schedule-table__cell\">\n      <div>\n        <span className=\"trip-details-table__title u-small-caps u-bold\">\n          Trip length\n        </span>\n        {tripInfo.times.length} stops, {tripInfo.duration} minutes total\n      </div>\n      <div>\n        <span className=\"trip-details-table__title u-small-caps u-bold\">\n          Fare\n        </span>\n\n        {tripInfo.fare && tripInfo.fare.price}\n        <a className=\"trip-details-table__link\" href={tripInfo.fare.fare_link}>\n          View fares\n        </a>\n      </div>\n    </td>\n  </tr>\n);\n\nconst TripDetails = ({\n  state,\n  showFare\n}: Props): ReactElement<HTMLElement> | null => {\n  const { data: tripInfo, error, isLoading } = state;\n\n  if (isLoading) {\n    return <Loading />;\n  }\n\n  const errorLoadingTrip = (\n    <p>\n      <em>Error loading trip details. Please try again later.</em>\n    </p>\n  );\n\n  if (error) {\n    return errorLoadingTrip;\n  }\n\n  if (!tripInfo) return null;\n\n  const crowding = tripInfo.vehicle ? tripInfo.vehicle.crowding : null;\n\n  return (\n    <table className=\"trip-details-table\">\n      <thead>\n        {crowding && (\n          <tr>\n            <th>\n              <CrowdingPill crowding={crowding} />\n            </th>\n          </tr>\n        )}\n        <TripSummary tripInfo={tripInfo} />\n        <tr>\n          <th scope=\"col\" className=\"schedule-table__cell\">\n            Stops\n          </th>\n          {showFare && (\n            <th\n              scope=\"col\"\n              className=\"schedule-table__cell schedule-table__cell--right-adjusted\"\n            >\n              Fare\n            </th>\n          )}\n          <th\n            scope=\"col\"\n            className=\"schedule-table__cell schedule-table__cell--right-adjusted\"\n          >\n            Arrival\n          </th>\n        </tr>\n      </thead>\n      <tbody>\n        {departuresWithPredictions(tripInfo.times).map(\n          (departure, index: number) => (\n            <TripStop\n              departure={departure}\n              index={index}\n              showFare={showFare}\n              routeType={tripInfo.route_type}\n              key={\n                (departure.prediction.stop && departure.prediction.stop.id) ||\n                departure.schedule.stop.id\n              }\n            />\n          )\n        )}\n      </tbody>\n    </table>\n  );\n};\n\nexport default TripDetails;\n","import React, { ReactElement } from \"react\";\nimport { RouteType } from \"../../../../__v3api\";\nimport { alertIcon } from \"../../../../helpers/icon\";\nimport { breakTextAtSlash } from \"../../../../helpers/text\";\nimport { isSkippedOrCancelled } from \"../../../../models/prediction\";\nimport { isACommuterRailRoute } from \"../../../../models/route\";\nimport { TripDepartureWithPrediction } from \"../../__trips\";\n\ninterface Props {\n  departure: TripDepartureWithPrediction;\n  index: number;\n  showFare: boolean;\n  routeType: RouteType;\n}\n\nconst formattedDepartureTimes = (\n  departure: TripDepartureWithPrediction,\n  routeType: RouteType\n): ReactElement<HTMLElement> => {\n  const { schedule, prediction, delay } = departure;\n  if (isACommuterRailRoute(routeType)) {\n    if (delay && delay >= 300 && prediction && prediction.time) {\n      return (\n        <>\n          <span className=\"schedule-table__times--delayed schedule-table__times--delayed-future_stop\">\n            {schedule.time}\n          </span>\n          <br className=\"hidden-sm-up\" />\n          {prediction.time}\n        </>\n      );\n    }\n\n    return <>{schedule.time}</>;\n  }\n\n  return <>{prediction && prediction.time ? prediction.time : schedule.time}</>;\n};\n\nconst TripStop = ({\n  departure,\n  index,\n  showFare,\n  routeType\n}: Props): ReactElement<HTMLElement> | null => {\n  const { prediction, schedule } = departure;\n\n  /* istanbul ignore next */\n  if (!prediction.stop) return null;\n\n  return (\n    <tr key={`${prediction.stop.id}`}>\n      <th className=\"schedule-table__cell\" scope=\"row\">\n        <a\n          href={`/stops/${prediction.stop.id}`}\n          className={isSkippedOrCancelled(prediction) ? \"strikethrough\" : \"\"}\n        >\n          {isSkippedOrCancelled(prediction) && (\n            <>\n              {alertIcon(\"c-svg__icon-alerts-triangle\")}\n              <span className=\"sr-only\">This trip skips this stop at</span>\n            </>\n          )}\n          {breakTextAtSlash(prediction.stop.name)}\n        </a>\n      </th>\n      {showFare && (\n        <td className=\"schedule-table__cell schedule-table__cell--right-adjusted u-tabular-nums\">\n          {index === 0 ? \"\" : schedule.fare.price}\n        </td>\n      )}\n      <td className=\"schedule-table__cell schedule-table__cell--right-adjusted u-tabular-nums\">\n        {formattedDepartureTimes(departure, routeType)}\n      </td>\n    </tr>\n  );\n};\n\nexport default TripStop;\n","import React, { ReactElement, useReducer, useEffect, Dispatch } from \"react\";\nimport { DirectionId, EnhancedRoute } from \"../../__v3api\";\nimport {\n  ShapesById,\n  RoutePatternsByDirection,\n  LineDiagramStop,\n  SimpleStopMap,\n  ServiceInSelector,\n  ScheduleNote as ScheduleNoteType\n} from \"./__schedule\";\nimport ScheduleDirectionMenu from \"./direction/ScheduleDirectionMenu\";\nimport ScheduleDirectionButton from \"./direction/ScheduleDirectionButton\";\nimport { reducer as fetchReducer } from \"../../helpers/fetch\";\nimport { menuReducer, FetchAction } from \"./direction/reducer\";\nimport { MapData, StaticMapData } from \"../../leaflet/components/__mapdata\";\nimport Map from \"../components/Map\";\nimport LineDiagramAndStopListPage from \"../components/line-diagram/LineDiagram\";\nimport { isABusRoute } from \"../../models/route\";\n\nexport interface Props {\n  route: EnhancedRoute;\n  directionId: DirectionId;\n  shapesById: ShapesById;\n  routePatternsByDirection: RoutePatternsByDirection;\n  mapData?: MapData;\n  staticMapData?: StaticMapData;\n  lineDiagram: LineDiagramStop[];\n  services: ServiceInSelector[];\n  stops: SimpleStopMap;\n  today: string;\n  scheduleNote: ScheduleNoteType | null;\n  initialSelectedRoutePatternId: string | null;\n}\n\nexport const fetchMapData = (\n  routeId: string,\n  directionId: DirectionId,\n  currentRoutePatternIdForData: string | undefined,\n  dispatch: Dispatch<FetchAction>\n): Promise<void> => {\n  dispatch({ type: \"FETCH_STARTED\" });\n  const baseURL = `/schedules/map_api?id=${routeId}&direction_id=${directionId}`;\n  const url = currentRoutePatternIdForData\n    ? `${baseURL}&shape_id=${currentRoutePatternIdForData}`\n    : baseURL;\n\n  return (\n    window.fetch &&\n    window\n      .fetch(url)\n      .then(response => {\n        if (response.ok) return response.json();\n        throw new Error(response.statusText);\n      })\n      .then(json => dispatch({ type: \"FETCH_COMPLETE\", payload: json }))\n      // @ts-ignore\n      .catch(() => dispatch({ type: \"FETCH_ERROR\" }))\n  );\n};\n\nexport const fetchLineData = (\n  routeId: string,\n  directionId: DirectionId,\n  currentRoutePatternIdForData: string | undefined,\n  dispatch: Dispatch<FetchAction>\n): Promise<void> => {\n  dispatch({ type: \"FETCH_STARTED\" });\n\n  const baseURL = `/schedules/line_api?id=${routeId}&direction_id=${directionId}`;\n  const url = currentRoutePatternIdForData\n    ? `${baseURL}&route_pattern=${currentRoutePatternIdForData}`\n    : baseURL;\n\n  return (\n    window.fetch &&\n    window\n      .fetch(url)\n      .then(response => {\n        if (response.ok) return response.json();\n        throw new Error(response.statusText);\n      })\n      .then(json => dispatch({ type: \"FETCH_COMPLETE\", payload: json }))\n      // @ts-ignore\n      .catch(() => dispatch({ type: \"FETCH_ERROR\" }))\n  );\n};\n\nconst ScheduleDirection = ({\n  route,\n  directionId,\n  shapesById,\n  routePatternsByDirection,\n  mapData,\n  staticMapData,\n  lineDiagram,\n  services,\n  stops,\n  today,\n  scheduleNote,\n  initialSelectedRoutePatternId\n}: Props): ReactElement<HTMLElement> => {\n  const routePatternsInCurrentDirection = routePatternsByDirection[directionId];\n  const defaultRoutePattern =\n    routePatternsInCurrentDirection.find(\n      routePattern => routePattern.id === initialSelectedRoutePatternId\n    ) || routePatternsInCurrentDirection.slice(0, 1)[0];\n\n  const reverseDirection = directionId === 0 ? 1 : 0;\n  const directionIsChangeable = route.direction_names[reverseDirection] != null;\n\n  const [state, dispatch] = useReducer(menuReducer, {\n    routePattern: defaultRoutePattern,\n    shape: shapesById[defaultRoutePattern.shape_id],\n    directionId,\n    shapesById,\n    routePatternsByDirection,\n    routePatternMenuOpen: false,\n    routePatternMenuAll: false,\n    itemFocus: null\n  });\n\n  const [mapState, dispatchMapData] = useReducer(fetchReducer, {\n    data: mapData,\n    isLoading: false,\n    error: false\n  });\n\n  const currentShapeId = state.shape\n    ? state.shape.id\n    : defaultRoutePattern.shape_id;\n  const shapeIds = state.routePatternsByDirection[state.directionId].map(\n    routePattern => routePattern.shape_id\n  );\n  const currentRoutePatternIdForData =\n    isABusRoute(route) && routePatternsInCurrentDirection.length > 1\n      ? state.routePattern.id\n      : undefined;\n\n  useEffect(\n    () => {\n      if (!staticMapData) {\n        fetchMapData(\n          route.id,\n          state.directionId,\n          currentRoutePatternIdForData,\n          dispatchMapData\n        );\n      }\n    },\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [route, state.directionId, currentShapeId, staticMapData]\n  );\n\n  const [lineState, dispatchLineData] = useReducer(fetchReducer, {\n    data: lineDiagram,\n    isLoading: false,\n    error: false\n  });\n\n  useEffect(\n    () => {\n      fetchLineData(\n        route.id,\n        state.directionId,\n        currentRoutePatternIdForData,\n        dispatchLineData\n      );\n    },\n    [route, state.directionId, currentShapeId, currentRoutePatternIdForData]\n  );\n\n  return (\n    <>\n      <div className=\"m-schedule-direction\">\n        <div id=\"direction-name\" className=\"m-schedule-direction__direction\">\n          {route.direction_names[state.directionId]}\n        </div>\n        <ScheduleDirectionMenu\n          route={route}\n          directionId={state.directionId}\n          routePatternsByDirection={routePatternsByDirection}\n          selectedRoutePatternId={state.routePattern.id}\n          menuOpen={state.routePatternMenuOpen}\n          showAllRoutePatterns={state.routePatternMenuAll}\n          itemFocus={state.itemFocus}\n          dispatch={dispatch}\n        />\n        {directionIsChangeable ? (\n          <ScheduleDirectionButton dispatch={dispatch} />\n        ) : null}\n      </div>\n      {!staticMapData && mapState.data && (\n        <Map\n          channel={`vehicles:${route.id}:${state.directionId}`}\n          data={mapState.data}\n          shapeIds={shapeIds}\n        />\n      )}\n      {staticMapData && (\n        <>\n          <img\n            src={staticMapData.img_src}\n            alt={`${route.name} route map`}\n            className=\"img-fluid\"\n          />\n          <a\n            href={staticMapData.pdf_url}\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n          >\n            <i className=\"fa fa-search-plus\" aria-hidden=\"true\" />\n            View map as a PDF\n          </a>\n        </>\n      )}\n      {lineState.data && (\n        <LineDiagramAndStopListPage\n          lineDiagram={lineState.data}\n          route={route}\n          directionId={state.directionId}\n          routePatternsByDirection={routePatternsByDirection}\n          services={services}\n          stops={stops}\n          today={today}\n          scheduleNote={scheduleNote}\n        />\n      )}\n    </>\n  );\n};\n\nexport default ScheduleDirection;\n","import React, { ReactElement, Dispatch, useEffect } from \"react\";\nimport { DirectionId, EnhancedRoute } from \"../../../__v3api\";\nimport { RoutePatternsByDirection } from \"../__schedule\";\nimport { MenuAction, closeRoutePatternMenuAction } from \"./reducer\";\nimport { GreenLineSelect, ExpandedGreenMenu } from \"./GreenLineMenu\";\nimport { BusMenuSelect, ExpandedBusMenu } from \"./BusMenu\";\nimport { handleNativeEscapeKeyPress } from \"../../../helpers/keyboard-events\";\nimport { isABusRoute, isAGreenLineRoute } from \"../../../models/route\";\n\ninterface Props {\n  route: EnhancedRoute;\n  routePatternsByDirection: RoutePatternsByDirection;\n  directionId: DirectionId;\n  selectedRoutePatternId: string;\n  menuOpen: boolean;\n  showAllRoutePatterns: boolean;\n  itemFocus: string | null;\n  dispatch: Dispatch<MenuAction>;\n}\n\nconst ScheduleDirectionMenu = ({\n  route,\n  routePatternsByDirection,\n  directionId,\n  selectedRoutePatternId,\n  menuOpen,\n  showAllRoutePatterns,\n  itemFocus,\n  dispatch\n}: Props): ReactElement<HTMLElement> => {\n  const routePatterns = routePatternsByDirection[directionId];\n\n  useEffect(\n    () => {\n      if (!menuOpen) return () => {};\n      // if the menu is open, add event listeners to enable closing the menu by\n      // clicking outside the menu or with keypress\n      const clickToClose = (event: Event): void => {\n        if (!event.target) return;\n        const element = event.target as HTMLElement;\n        if (element.closest(\".js-m-schedule-click-boundary\")) return;\n        dispatch(closeRoutePatternMenuAction());\n      };\n\n      const keyToClose = (event: KeyboardEvent): void => {\n        handleNativeEscapeKeyPress(event, () => {\n          dispatch(closeRoutePatternMenuAction());\n        });\n      };\n\n      document.addEventListener(\"click\", clickToClose, true);\n      document.addEventListener(\"keydown\", keyToClose);\n\n      return () => {\n        // remove the event listeners\n        document.removeEventListener(\"click\", clickToClose, true);\n        document.removeEventListener(\"keydown\", keyToClose);\n      };\n    },\n    [menuOpen, dispatch]\n  );\n\n  return (\n    <div className=\"js-m-schedule-click-boundary\">\n      {// bus mode\n      isABusRoute(route) && (\n        <BusMenuSelect\n          routePatterns={routePatternsByDirection[directionId]}\n          selectedRoutePatternId={selectedRoutePatternId}\n          dispatch={dispatch}\n        />\n      )}\n      {// Green Line\n      isAGreenLineRoute(route) && (\n        <GreenLineSelect\n          routeId={route.id}\n          dispatch={dispatch}\n          directionId={directionId}\n        />\n      )}\n      {// Mattapan Trolley\n      route.id === \"Mattapan\" && (\n        <div className=\"m-schedule-direction__route-pattern\">\n          {route.direction_destinations[directionId]}\n        </div>\n      )}\n      {// Subway, CR, Ferry\n      [1, 2, 4].indexOf(route.type) !== -1 && (\n        <div className=\"m-schedule-direction__route-pattern\">\n          {route.direction_destinations[directionId]}\n        </div>\n      )}\n      {menuOpen && isABusRoute(route) && (\n        <ExpandedBusMenu\n          routePatterns={routePatterns}\n          selectedRoutePatternId={selectedRoutePatternId}\n          showAllRoutePatterns={showAllRoutePatterns}\n          itemFocus={itemFocus}\n          dispatch={dispatch}\n        />\n      )}\n      {menuOpen && isAGreenLineRoute(route) && (\n        <ExpandedGreenMenu directionId={directionId} route={route} />\n      )}\n    </div>\n  );\n};\n\nexport default ScheduleDirectionMenu;\n","import React, {\n  ReactElement,\n  Dispatch,\n  KeyboardEvent as ReactKeyboardEvent\n} from \"react\";\nimport { DirectionId, EnhancedRoute } from \"../../../__v3api\";\nimport { MenuAction, toggleRoutePatternMenuAction } from \"./reducer\";\nimport renderSvg from \"../../../helpers/render-svg\";\nimport handleNavigation from \"./menu-helpers\";\nimport arrowIcon from \"../../../../static/images/icon-down-arrow.svg\";\nimport checkIcon from \"../../../../static/images/icon-checkmark.svg\";\nimport iconGreenB from \"../../../../static/images/icon-green-line-b-small.svg\";\nimport iconGreenC from \"../../../../static/images/icon-green-line-c-small.svg\";\nimport iconGreenD from \"../../../../static/images/icon-green-line-d-small.svg\";\nimport iconGreenE from \"../../../../static/images/icon-green-line-e-small.svg\";\nimport iconGreen from \"../../../../static/images/icon-green-line-small.svg\";\n\nimport { handleReactEnterKeyPress } from \"../../../helpers/keyboard-events\";\n\ninterface GreenLineSelectProps {\n  routeId: string;\n  dispatch: Dispatch<MenuAction>;\n  directionId: DirectionId;\n}\n\ninterface ExpandedGreenMenuProps {\n  route: EnhancedRoute;\n  directionId: DirectionId;\n}\n\ninterface GreenRoute {\n  id: string;\n  name: string;\n  direction_destinations: string[];\n  icon: string;\n}\n\ninterface GreenLineItem {\n  routeIds: string[];\n  route: GreenRoute;\n  selected: boolean;\n  focused: boolean;\n  directionId: DirectionId;\n}\n\n/* eslint-disable @typescript-eslint/camelcase */\nconst greenRoutes: GreenRoute[] = [\n  {\n    id: \"Green\",\n    name: \"Green Line\",\n    direction_destinations: [\"All branches\", \"All branches\"],\n    icon: iconGreen\n  },\n  {\n    id: \"Green-B\",\n    name: \"Green Line B\",\n    direction_destinations: [\"Boston College\", \"Park Street\"],\n    icon: iconGreenB\n  },\n  {\n    id: \"Green-C\",\n    name: \"Green Line C\",\n    direction_destinations: [\"Cleveland Circle\", \"North Station\"],\n    icon: iconGreenC\n  },\n  {\n    id: \"Green-D\",\n    name: \"Green Line D\",\n    direction_destinations: [\"Riverside\", \"Government Center\"],\n    icon: iconGreenD\n  },\n  {\n    id: \"Green-E\",\n    name: \"Green Line E\",\n    direction_destinations: [\"Heath Street\", \"Lechmere\"],\n    icon: iconGreenE\n  }\n];\n\nexport const GreenLineItem = ({\n  directionId,\n  routeIds,\n  route,\n  selected,\n  focused\n}: GreenLineItem): ReactElement<HTMLElement> => {\n  const selectedClass = selected ? \" m-schedule-direction__menu--selected\" : \"\";\n  const icon = selected ? (\n    <div className=\"m-schedule-direction__checkmark\">\n      {renderSvg(\"c-svg__icon\", checkIcon)}\n    </div>\n  ) : null;\n  const handleClick = (): void => {\n    window.location.assign(\n      `/schedules/${route.id}?direction_id=${directionId}`\n    );\n  };\n\n  return (\n    <div\n      aria-current={selected ? \"page\" : undefined}\n      id={`route-pattern_${route.id}`}\n      tabIndex={0}\n      role=\"menuitem\"\n      className={`m-schedule-direction__menu-item${selectedClass}`}\n      onClick={handleClick}\n      onKeyUp={(e: ReactKeyboardEvent) => {\n        handleReactEnterKeyPress(e, () => {\n          handleClick();\n        });\n      }}\n      onKeyDown={(e: ReactKeyboardEvent) => {\n        handleNavigation(e, routeIds);\n      }}\n      ref={item => item && focused && item.focus()}\n    >\n      <div className=\"m-schedule-direction__menu-item-headsign\">\n        {icon}\n        {renderSvg(\n          \"c-svg__icon m-schedule-direction__menu-item-icon\",\n          route.icon\n        )}\n        <span className=\"sr-only\">{route.name}</span>\n        {route.direction_destinations[directionId]}\n      </div>\n    </div>\n  );\n};\n\nexport const ExpandedGreenMenu = ({\n  route,\n  directionId\n}: ExpandedGreenMenuProps): ReactElement<HTMLElement> => {\n  const routeIds = greenRoutes.map(greenRoute => greenRoute.id);\n  return (\n    <div className=\"m-schedule-direction__menu\" role=\"menu\">\n      {greenRoutes.map((greenRoute: GreenRoute, index: number) => (\n        <GreenLineItem\n          directionId={directionId}\n          key={greenRoute.id}\n          routeIds={routeIds}\n          route={greenRoute}\n          selected={route.id === greenRoute.id}\n          focused={index === 0}\n        />\n      ))}\n    </div>\n  );\n};\n\nexport const GreenLineSelect = ({\n  routeId,\n  dispatch,\n  directionId\n}: GreenLineSelectProps): ReactElement<HTMLElement> => {\n  const handleClick = (): void => {\n    dispatch(toggleRoutePatternMenuAction());\n  };\n\n  const route = greenRoutes.find(greenRoute => greenRoute.id === routeId)!;\n\n  return (\n    // eslint-disable-next-line jsx-a11y/no-static-element-interactions\n    <div\n      // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex\n      tabIndex={0}\n      role=\"button\"\n      className=\"m-schedule-direction__route-pattern m-schedule-direction__route-pattern--clickable\"\n      onClick={handleClick}\n      onKeyUp={e =>\n        handleReactEnterKeyPress(e, () => {\n          handleClick();\n        })\n      }\n    >\n      {route.direction_destinations[directionId]}{\" \"}\n      {renderSvg(\n        \"c-svg__icon m-schedule-direction__route-pattern-arrow\",\n        arrowIcon\n      )}\n    </div>\n  );\n};\n","import React, {\n  ReactElement,\n  Dispatch,\n  KeyboardEvent as ReactKeyboardEvent\n} from \"react\";\nimport {\n  MenuAction,\n  setRoutePatternAction,\n  showAllRoutePatternsAction,\n  toggleRoutePatternMenuAction\n} from \"./reducer\";\nimport { EnhancedRoutePattern } from \"../__schedule\";\nimport handleNavigation from \"./menu-helpers\";\nimport renderSvg from \"../../../helpers/render-svg\";\nimport arrowIcon from \"../../../../static/images/icon-down-arrow.svg\";\nimport checkIcon from \"../../../../static/images/icon-checkmark.svg\";\nimport { handleReactEnterKeyPress } from \"../../../helpers/keyboard-events\";\n\ninterface ExpandedBusMenuProps {\n  routePatterns: EnhancedRoutePattern[];\n  selectedRoutePatternId: string;\n  showAllRoutePatterns: boolean;\n  itemFocus: string | null;\n  dispatch: Dispatch<MenuAction>;\n}\n\ninterface RoutePatternItem {\n  routePatternIds: string[];\n  routePattern: EnhancedRoutePattern;\n  selected: boolean;\n  focused: boolean;\n  duplicated: boolean;\n  dispatch: Dispatch<MenuAction>;\n}\n\ninterface UncommonDestinationsItem {\n  routePatternIds: string[];\n  dispatch: Dispatch<MenuAction>;\n}\n\ninterface BusMenuSelectProps {\n  routePatterns: EnhancedRoutePattern[];\n  selectedRoutePatternId: string;\n  dispatch: Dispatch<MenuAction>;\n}\n\nconst typicalityDefaultText = (typicality: number): string => {\n  if (typicality === 1) return \"typical route\";\n  if (typicality === 2) return \"less common route\";\n  return \"\";\n};\n\nconst RoutePatternItem = ({\n  routePatternIds,\n  routePattern,\n  selected,\n  focused,\n  duplicated,\n  dispatch\n}: RoutePatternItem): ReactElement<HTMLElement> => {\n  const selectedClass = selected ? \" m-schedule-direction__menu--selected\" : \"\";\n\n  const icon = selected ? (\n    <div className=\"m-schedule-direction__checkmark\">\n      {renderSvg(\"c-svg__icon\", checkIcon)}\n    </div>\n  ) : null;\n\n  const handleClick = (): void => dispatch(setRoutePatternAction(routePattern));\n\n  return (\n    <div\n      aria-current={selected ? \"page\" : undefined}\n      id={`route-pattern_${routePattern.id}`}\n      tabIndex={0}\n      role=\"menuitem\"\n      className={`m-schedule-direction__menu-item${selectedClass}`}\n      onClick={handleClick}\n      ref={item => item && focused && item.focus()}\n      onKeyUp={(e: ReactKeyboardEvent) => {\n        handleReactEnterKeyPress(e, () => {\n          handleClick();\n        });\n      }}\n      onKeyDown={(e: ReactKeyboardEvent) => {\n        handleNavigation(e, routePatternIds);\n      }}\n    >\n      <div className=\"m-schedule-direction__menu-item-headsign\">\n        {icon}\n        {routePattern.headsign}\n      </div>\n      <div className=\"m-schedule-direction__menu-item-description\">\n        {duplicated && `from ${routePattern.name.split(\" - \")[0]}, `}\n        {routePattern.time_desc ||\n          typicalityDefaultText(routePattern.typicality)}\n      </div>\n    </div>\n  );\n};\n\nconst UncommonDestinationsItem = ({\n  routePatternIds,\n  dispatch\n}: UncommonDestinationsItem): ReactElement<HTMLElement> => {\n  const handleClick = (): void => dispatch(showAllRoutePatternsAction());\n\n  return (\n    <div\n      id=\"route-pattern_uncommon\"\n      role=\"menuitem\"\n      tabIndex={0}\n      aria-label=\"click for additional routes\"\n      className=\"m-schedule-direction__menu-item\"\n      onClick={handleClick}\n      onKeyUp={(e: ReactKeyboardEvent) =>\n        handleReactEnterKeyPress(e, () => {\n          handleClick();\n        })\n      }\n      onKeyDown={(e: ReactKeyboardEvent) => {\n        handleNavigation(e, routePatternIds);\n      }}\n    >\n      <div className=\"m-schedule-direction__menu-item-more\">\n        Uncommon destinations{\" \"}\n        {renderSvg(\n          \"c-svg__icon m-schedule-direction__route-pattern-arrow\",\n          arrowIcon\n        )}\n      </div>\n    </div>\n  );\n};\n\nconst hasMoreRoutePatterns = (routePatterns: EnhancedRoutePattern[]): boolean =>\n  routePatterns.some(\n    (routePattern: EnhancedRoutePattern) => routePattern.typicality > 2\n  );\n\nconst determineFocusIndex = (\n  itemFocus: string | null,\n  routePatterns: EnhancedRoutePattern[]\n): number => {\n  if (itemFocus === \"first\") return 0;\n  return routePatterns.findIndex(\n    (routePattern: EnhancedRoutePattern) => routePattern.typicality > 2\n  );\n};\n\nconst isDuplicateHeadsign = (\n  compareRoutePattern: EnhancedRoutePattern,\n  routePatterns: EnhancedRoutePattern[]\n): boolean =>\n  routePatterns.filter(\n    (routePattern: EnhancedRoutePattern) =>\n      routePattern.id !== compareRoutePattern.id &&\n      routePattern.headsign === compareRoutePattern.headsign\n  ).length > 0;\n\nexport const ExpandedBusMenu = ({\n  routePatterns,\n  selectedRoutePatternId,\n  showAllRoutePatterns,\n  itemFocus,\n  dispatch\n}: ExpandedBusMenuProps): ReactElement<HTMLElement> => {\n  const filterRule = (routePattern: EnhancedRoutePattern): boolean =>\n    showAllRoutePatterns ? true : routePattern.typicality < 3;\n\n  const focusIndex = determineFocusIndex(itemFocus, routePatterns);\n\n  const toggleButtonIds =\n    hasMoreRoutePatterns(routePatterns) && showAllRoutePatterns === false\n      ? [\"uncommon\"]\n      : [];\n\n  const routePatternIds = routePatterns\n    .filter(filterRule)\n    .map((routePattern: EnhancedRoutePattern) => routePattern.id)\n    .concat(toggleButtonIds);\n\n  return (\n    <div className=\"m-schedule-direction__menu\" role=\"menu\">\n      {routePatterns\n        .filter(filterRule)\n        .map((routePattern: EnhancedRoutePattern, index: number) => (\n          <RoutePatternItem\n            key={routePattern.id}\n            routePatternIds={routePatternIds}\n            routePattern={routePattern}\n            selected={selectedRoutePatternId === routePattern.id}\n            focused={index === focusIndex}\n            duplicated={isDuplicateHeadsign(routePattern, routePatterns)}\n            dispatch={dispatch}\n          />\n        ))}\n      {hasMoreRoutePatterns(routePatterns) &&\n        showAllRoutePatterns === false && (\n          <UncommonDestinationsItem\n            routePatternIds={routePatternIds}\n            dispatch={dispatch}\n          />\n        )}\n    </div>\n  );\n};\n\nconst routePatternNameById = (\n  routePatterns: EnhancedRoutePattern[],\n  selectedRoutePatternId: string\n): string =>\n  routePatterns.find(\n    (routePattern: EnhancedRoutePattern) =>\n      routePattern.id === selectedRoutePatternId\n  )!.headsign;\n\nexport const BusMenuSelect = ({\n  routePatterns,\n  selectedRoutePatternId,\n  dispatch\n}: BusMenuSelectProps): ReactElement<HTMLElement> => {\n  const isMenuClickable = routePatterns.length > 1;\n\n  const handleClick = isMenuClickable\n    ? () => {\n        dispatch(toggleRoutePatternMenuAction());\n      }\n    : /* istanbul ignore next */\n      () => {};\n\n  const linkClass = isMenuClickable\n    ? \" m-schedule-direction__route-pattern--clickable\"\n    : \"\";\n\n  return (\n    // eslint-disable-next-line jsx-a11y/no-static-element-interactions\n    <div\n      // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex\n      tabIndex={isMenuClickable ? 0 : undefined}\n      role={isMenuClickable ? \"button\" : undefined}\n      className={`m-schedule-direction__route-pattern${linkClass}`}\n      onClick={handleClick}\n      onKeyUp={e =>\n        handleReactEnterKeyPress(e, () => {\n          handleClick();\n        })\n      }\n    >\n      {routePatternNameById(routePatterns, selectedRoutePatternId)}{\" \"}\n      {isMenuClickable &&\n        renderSvg(\n          \"c-svg__icon m-schedule-direction__route-pattern-arrow\",\n          arrowIcon\n        )}\n    </div>\n  );\n};\n","import React, { ReactElement, Dispatch } from \"react\";\nimport renderSVG from \"../../../helpers/render-svg\";\nimport icon from \"../../../../static/images/icon-change-direction.svg\";\nimport { MenuAction, toggleDirectionAction } from \"./reducer\";\n\ninterface Props {\n  dispatch: Dispatch<MenuAction>;\n}\n\nconst ScheduleDirectionButton = ({\n  dispatch\n}: Props): ReactElement<HTMLElement> => (\n  <button\n    type=\"button\"\n    className=\"m-schedule-direction__button btn btn-primary\"\n    onClick={() => {\n      dispatch(toggleDirectionAction());\n    }}\n  >\n    {renderSVG(\"m-schedule-direction__icon\", icon)}Change Direction\n  </button>\n);\n\nexport default ScheduleDirectionButton;\n","module.exports = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 48 48\\\"><title>change direction</title><path d=\\\"M31.93 7.28H17.54l1.2-5.87A1.37 1.37 0 0 0 16.63.23L1.77 10.11a1.44 1.44 0 0 0 0 2.38l14.86 9.88a1.37 1.37 0 0 0 2.11-1.19l-1.2-5.86h14.39c3.94 0 7.14 2.82 7.14 6.3v12c0 3.48-3.2 6.3-7.14 6.3h-8.2v8h8.2c8.23 0 14.93-6.43 14.93-14.34v-12c0-7.91-6.7-14.34-14.93-14.34\\\"></path></svg>\"","import React, { ReactElement, useReducer, useCallback } from \"react\";\nimport { Provider } from \"react-redux\";\nimport {\n  useQueryParams,\n  StringParam,\n  updateInLocation\n} from \"use-query-params\";\nimport useSWR from \"swr\";\nimport useFilteredList from \"../../../hooks/useFilteredList\";\nimport SearchBox from \"../../../components/SearchBox\";\nimport {\n  LineDiagramStop,\n  RoutePatternsByDirection,\n  ScheduleNote as ScheduleNoteType,\n  ServiceInSelector,\n  SimpleStopMap,\n  SelectedOrigin,\n  RouteStop\n} from \"../__schedule\";\nimport { DirectionId, Route } from \"../../../__v3api\";\nimport { createLineDiagramCoordStore } from \"./graphics/graphic-helpers\";\nimport { lineDiagramReducer } from \"./reducer\";\nimport { LiveDataByStop } from \"./__line-diagram\";\nimport ScheduleFinderModal from \"../schedule-finder/ScheduleFinderModal\";\nimport StopCard from \"./StopCard\";\nimport LineDiagramWithStops from \"./LineDiagramWithStops\";\n\ninterface LineDiagramProps {\n  lineDiagram: LineDiagramStop[];\n  route: Route;\n  directionId: DirectionId;\n  routePatternsByDirection: RoutePatternsByDirection;\n  services: ServiceInSelector[];\n  stops: SimpleStopMap;\n  today: string;\n  scheduleNote: ScheduleNoteType | null;\n}\n\nconst stationsOrStops = (routeType: number): string =>\n  [0, 1, 2].includes(routeType) ? \"Stations\" : \"Stops\";\n\nconst directionIdToNumber = (direction: string): DirectionId =>\n  direction === \"0\" ? 0 : 1;\n\nconst reversedDirectionId = (direction: DirectionId): DirectionId =>\n  direction === 0 ? 1 : 0;\n\nconst LineDiagramAndStopListPage = ({\n  lineDiagram,\n  route,\n  directionId,\n  routePatternsByDirection,\n  services,\n  stops,\n  today,\n  scheduleNote\n}: LineDiagramProps): ReactElement<HTMLElement> | null => {\n  /**\n   * Setup state handling etc\n   */\n  const [state, dispatch] = useReducer(lineDiagramReducer, {\n    direction: directionId,\n    origin: lineDiagram[0].route_stop.id,\n    modalMode: \"schedule\",\n    modalOpen: false\n  });\n\n  // also track the location of text to align the diagram points to\n  const lineDiagramCoordStore = createLineDiagramCoordStore(lineDiagram);\n\n  /**\n   * Handle URL params\n   */\n  const [query] = useQueryParams({\n    // eslint-disable-next-line @typescript-eslint/camelcase\n    \"schedule_direction[direction_id]\": StringParam,\n    \"schedule_direction[origin]\": StringParam\n  });\n\n  React.useEffect(\n    () => {\n      const newDirection = query[\"schedule_direction[direction_id]\"];\n      const newOrigin = query[\"schedule_direction[origin]\"];\n      // modify values in case URL either parameters:\n      if (newDirection !== undefined && newOrigin !== undefined) {\n        dispatch({\n          type: \"initialize\",\n          origin: newOrigin,\n          direction: directionIdToNumber(newDirection)\n        });\n      }\n    },\n    [query]\n  );\n  const updateURL = (origin: SelectedOrigin, direction?: DirectionId): void => {\n    if (window) {\n      // eslint-disable-next-line @typescript-eslint/camelcase\n      const newQuery = {\n        \"schedule_direction[direction_id]\":\n          direction !== undefined ? direction.toString() : \"\",\n        \"schedule_direction[origin]\": origin\n      };\n      const newLoc = updateInLocation(newQuery, window.location);\n      // newLoc is not a true Location, so toString doesn't work\n      window.history.replaceState({}, \"\", `${newLoc.pathname}${newLoc.search}`);\n    }\n  };\n\n  /**\n   * Events - clicking a stop, changing various params for the resulting modal\n   */\n  const handleStopClick = useCallback(\n    (stop: RouteStop): void => {\n      const { \"is_beginning?\": isBeginning, \"is_terminus?\": isTerminus } = stop;\n      const isDestination = isTerminus && !isBeginning;\n      const direction = isDestination\n        ? reversedDirectionId(directionId)\n        : directionId;\n      dispatch({ type: \"initialize\", origin: stop.id, direction });\n      // modify URL:\n      updateURL(stop.id, directionId);\n    },\n    [directionId]\n  ); // only update function when stop or directionId changes\n  const handleOriginSelectClick = (): void => {\n    dispatch({ type: \"set_origin\", origin: null });\n    dispatch({ type: \"toggle_modal\", modalOpen: true });\n  };\n  const directionChanged = (direction: DirectionId): void => {\n    dispatch({ type: \"set_direction\", direction });\n  };\n  const originChanged = (origin: SelectedOrigin): void => {\n    dispatch({ type: \"set_origin\", origin });\n  };\n  const closeModal = (): void => {\n    dispatch({ type: \"toggle_modal\", modalOpen: false });\n    // clear parameters from URL when closing the modal:\n    updateURL(\"\");\n  };\n\n  /**\n   * Provide a search box for filtering stops\n   */\n  const [stopQuery, setStopQuery, filteredStops] = useFilteredList(\n    lineDiagram,\n    \"route_stop.name\"\n  );\n\n  /**\n   * Live data, including realtime vehicle locations and predictions\n   */\n  const { data: maybeLiveData } = useSWR(\n    `/schedules/line_api/realtime?id=${route.id}&direction_id=${directionId}`,\n    url => fetch(url).then(response => response.json()),\n    { refreshInterval: 15000 }\n  );\n  const liveData = (maybeLiveData || {}) as LiveDataByStop;\n\n  /**\n   * Putting it all together\n   */\n  return (\n    <>\n      <h3 className=\"m-schedule-diagram__heading\">\n        {stationsOrStops(route.type)}\n      </h3>\n      <SearchBox\n        id=\"stop-search\"\n        labelText={`Search for a ${stationsOrStops(route.type)\n          .toLowerCase()\n          .slice(0, -1)}`}\n        onChange={setStopQuery}\n        className=\"m-schedule-diagram__filter\"\n      />\n      {stopQuery !== \"\" ? (\n        <ol className=\"m-schedule-diagram m-schedule-diagram--searched\">\n          {filteredStops.length ? (\n            (filteredStops as LineDiagramStop[]).map(\n              (stop: LineDiagramStop) => (\n                <StopCard\n                  key={stop.route_stop.id}\n                  stop={stop}\n                  onClick={handleStopClick}\n                  liveData={liveData[stop.route_stop.id]}\n                  searchQuery={stopQuery}\n                />\n              )\n            )\n          ) : (\n            <div className=\"c-alert-item c-alert-item--low c-alert-item__top-text-container\">\n              No stops {route.direction_names[directionId]} to{\" \"}\n              {route.direction_destinations[directionId]} matching{\" \"}\n              <b className=\"u-highlight\">{stopQuery}</b>. Try changing your\n              direction or adjusting your search.\n            </div>\n          )}\n        </ol>\n      ) : (\n        <Provider store={lineDiagramCoordStore}>\n          <LineDiagramWithStops\n            stops={lineDiagram}\n            handleStopClick={handleStopClick}\n            liveData={liveData}\n          />\n        </Provider>\n      )}\n\n      {state.modalOpen && (\n        <ScheduleFinderModal\n          closeModal={closeModal}\n          initialMode={state.modalMode}\n          initialDirection={state.direction}\n          initialOrigin={state.origin}\n          handleOriginSelectClick={handleOriginSelectClick}\n          directionChanged={directionChanged}\n          originChanged={originChanged}\n          route={route}\n          routePatternsByDirection={routePatternsByDirection}\n          scheduleNote={scheduleNote}\n          services={services}\n          stops={stops}\n          today={today}\n          updateURL={updateURL}\n        />\n      )}\n    </>\n  );\n};\n\nexport default LineDiagramAndStopListPage;\n","import { get } from \"lodash\";\nimport { useState, useEffect } from \"react\";\n\n// React hook for filtering lists via case-insensitive text matching. takes a\n// list and a key. Key can use any path supported by\n// https://lodash.com/docs/4.17.15#get e.g. 'route_stop.name'\nconst useFilteredList = (\n  list: (string | object)[],\n  key: string = \"\"\n): [\n  string,\n  React.Dispatch<React.SetStateAction<string>>,\n  (string | object)[]\n] => {\n  const [filteredList, setFilteredList] = useState([...list]);\n  const [listQuery, setListQuery] = useState(\"\");\n\n  useEffect(\n    () => {\n      const results = [...list].filter(item => {\n        const string = get(item, key, item);\n        if (typeof string !== \"string\") {\n          return true;\n        }\n        return string.toLowerCase().includes(listQuery.toLowerCase());\n      });\n      setFilteredList(results);\n    },\n    [list, key, listQuery, setFilteredList]\n  );\n\n  return [listQuery, setListQuery, filteredList];\n};\n\nexport default useFilteredList;\n","import { DirectionId } from \"../../../__v3api\";\nimport { SelectedOrigin } from \"../__schedule\";\nimport { Mode as ModalMode } from \"../schedule-finder/ScheduleFinderModal\";\n\nexport interface LineDiagramState {\n  direction: DirectionId;\n  origin: SelectedOrigin;\n  modalMode: ModalMode;\n  modalOpen: boolean;\n}\n\nexport type LineDiagramStateAction =\n  | { type: \"initialize\"; direction: DirectionId; origin: SelectedOrigin }\n  | { type: \"toggle_modal\"; modalOpen: boolean }\n  | { type: \"set_direction\"; direction: DirectionId }\n  | { type: \"set_origin\"; origin: SelectedOrigin };\n\nexport const lineDiagramReducer = (\n  state: LineDiagramState,\n  action: LineDiagramStateAction\n): LineDiagramState => {\n  switch (action.type) {\n    case \"initialize\":\n      return {\n        ...state,\n        direction: action.direction,\n        origin: action.origin,\n        modalMode: \"schedule\",\n        modalOpen: true\n      };\n    case \"set_direction\":\n      return {\n        ...state,\n        direction: action.direction\n      };\n    case \"set_origin\":\n      if (action.origin) {\n        // back to schedule modal\n        return {\n          ...state,\n          origin: action.origin,\n          modalMode: \"schedule\"\n        };\n      }\n      // origin modal (but don't overwrite current origin)\n      return {\n        ...state,\n        modalMode: \"origin\"\n      };\n    case \"toggle_modal\":\n      return {\n        ...state,\n        modalOpen: action.modalOpen\n      };\n    default:\n      return state;\n  }\n};\n","import React from \"react\";\nimport { RouteStopRoute } from \"../__schedule\";\nimport { TooltipWrapper, modeIcon } from \"../../../helpers/icon\";\nimport { isABusRoute, isACommuterRailRoute } from \"../../../models/route\";\nimport { routeBgClass } from \"../../../helpers/css\";\nimport { Route } from \"../../../__v3api\";\n\nconst filteredConnections = (\n  connections: RouteStopRoute[]\n): RouteStopRoute[] => {\n  const firstCRIndex = connections.findIndex(\n    connection => connection.type === 2\n  );\n  const firstFerryIndex = connections.findIndex(\n    connection => connection.type === 4\n  );\n\n  return connections.filter(\n    (connection, index) =>\n      (connection.type !== 2 && connection.type !== 4) ||\n      (connection.type === 2 && index === firstCRIndex) ||\n      (connection.type === 4 && index === firstFerryIndex)\n  );\n};\n\nconst connectionName = (connection: Route): string => {\n  if (isABusRoute(connection)) {\n    return connection.name.startsWith(\"SL\")\n      ? `Silver Line ${connection.name}`\n      : `Route ${connection.name}`;\n  }\n\n  if (isACommuterRailRoute(connection)) {\n    return \"Commuter Rail\";\n  }\n\n  return connection.name;\n};\n\nconst StopConnections = (connections: RouteStopRoute[]): JSX.Element => (\n  <div className=\"m-schedule-diagram__connections\">\n    {filteredConnections(connections).map((connectingRoute: Route) => (\n      <TooltipWrapper\n        key={connectingRoute.id}\n        href={`/schedules/${connectingRoute.id}/line`}\n        tooltipText={connectionName(connectingRoute)}\n        tooltipOptions={{\n          placement: \"bottom\",\n          animation: false\n        }}\n      >\n        {isABusRoute(connectingRoute) ? (\n          <span\n            key={connectingRoute.id}\n            className={`c-icon__bus-pill--small m-schedule-diagram__connection ${routeBgClass(\n              connectingRoute\n            )}`}\n          >\n            {connectingRoute.name}\n          </span>\n        ) : (\n          <span\n            key={connectingRoute.id}\n            className=\"m-schedule-diagram__connection\"\n          >\n            {modeIcon(connectingRoute.id)}\n          </span>\n        )}\n      </TooltipWrapper>\n    ))}\n  </div>\n);\n\nexport default StopConnections;\n","import React from \"react\";\nimport { capitalize } from \"lodash\";\nimport { HeadsignWithCrowding } from \"../../../__v3api\";\nimport {\n  timeForCommuterRail,\n  statusForCommuterRail\n} from \"../../../helpers/prediction-helpers\";\nimport {\n  isSkippedOrCancelled,\n  hasPredictionTime\n} from \"../../../models/prediction\";\nimport LiveCrowdingIcon from \"./LiveCrowdingIcon\";\n\ninterface StopPredictions {\n  headsigns: HeadsignWithCrowding[];\n  isCommuterRail: boolean;\n}\n\nconst predictionTexts = (headsign: HeadsignWithCrowding): string[] => {\n  const texts = [headsign.name];\n  if (headsign.train_number) {\n    texts.push(` · Train ${headsign.train_number}`);\n  }\n\n  const predictedOrScheduledTime =\n    headsign.time_data_with_crowding_list[0].time_data;\n  const { prediction } = predictedOrScheduledTime;\n\n  if (prediction && prediction.track) {\n    texts.push(` · Track ${prediction.track}`);\n  }\n\n  const status = statusForCommuterRail(predictedOrScheduledTime);\n  if (status) {\n    texts.push(` · ${status}`);\n  }\n  return texts;\n};\n\nconst StopPredictions = ({\n  headsigns,\n  isCommuterRail\n}: StopPredictions): JSX.Element => {\n  let predictions: JSX.Element[];\n  const liveHeadsigns = headsigns.filter(hasPredictionTime);\n\n  if (isCommuterRail) {\n    // Display at most 1 prediction for Commuter Rail\n    predictions = liveHeadsigns.slice(0, 1).map(headsign => {\n      const enhancedTimeData = headsign.time_data_with_crowding_list[0];\n      const predictedOrScheduledTime = enhancedTimeData.time_data;\n      const predictionTimeClass = isSkippedOrCancelled(\n        enhancedTimeData.predicted_schedule.prediction\n      )\n        ? \"m-schedule-diagram__cr-prediction-time strikethrough\"\n        : \"m-schedule-diagram__cr-prediction-time\";\n\n      return (\n        <div key={`${headsign.name}-cr`}>\n          <div className=\"m-schedule-diagram__cr-prediction\">\n            {timeForCommuterRail(predictedOrScheduledTime, predictionTimeClass)}\n          </div>\n          <div className=\"m-schedule-diagram__cr-prediction-details\">\n            {predictionTexts(headsign).map((text: string) => (\n              <span key={text}>{text}</span>\n            ))}\n          </div>\n        </div>\n      );\n    });\n  } else {\n    predictions = liveHeadsigns.map((headsign, index) => {\n      const { crowding } = headsign.time_data_with_crowding_list[0];\n      return (\n        <div\n          // eslint-disable-next-line react/no-array-index-key\n          key={`headsign.name-${index}`}\n          className=\"m-schedule-diagram__prediction\"\n        >\n          <div>{headsign.name}</div>\n          <div className=\"m-schedule-diagram__prediction-time\">\n            {capitalize(\n              headsign.time_data_with_crowding_list[0].time_data.prediction!.time.join(\n                \" \"\n              )\n            )}\n          </div>\n          <LiveCrowdingIcon crowding={crowding} />\n        </div>\n      );\n    });\n  }\n\n  return <div className=\"m-schedule-diagram__predictions\">{predictions}</div>;\n};\n\nexport default StopPredictions;\n","import React, { DetailedReactHTMLElement, useEffect, useState } from \"react\";\n\n// React.createElement is used as opposed to the dangerouslySetInnerHTML prop to\n// make the component contents easier to parse in testing\n\ninterface Props {\n  text: string;\n  matchQuery?: string;\n}\n\n// React component for highlighting matching text will wrap the first substring\n// matching the matchQuery in a <b></b> and return the HTML result\nconst MatchHighlight = ({\n  text,\n  matchQuery\n}: Props): DetailedReactHTMLElement<{}, HTMLElement> => {\n  const [childNodes, setChildNodes] = useState<\n    (DetailedReactHTMLElement<{}, HTMLElement> | string)[]\n  >([text]);\n\n  useEffect(\n    () => {\n      if (matchQuery && matchQuery !== \"\") {\n        const matched = text.match(new RegExp(matchQuery, \"i\"));\n        if (matched && matched[0]) {\n          // split text on first instance of match only\n          const [precedingText, ...moreTexts] = text.split(matched[0]);\n          const subsequentText = moreTexts.join(matched[0]);\n          setChildNodes([\n            precedingText,\n            React.createElement(\"b\", { className: \"u-highlight\" }, matched[0]),\n            subsequentText\n          ]);\n        }\n      } else {\n        setChildNodes([text]);\n      }\n    },\n    [text, matchQuery, setChildNodes]\n  );\n\n  return React.createElement(\"span\", {}, ...childNodes);\n};\n\nexport default MatchHighlight;\n","import React from \"react\";\nimport { RouteStop } from \"../__schedule\";\nimport {\n  TooltipWrapper,\n  parkingIcon,\n  accessibleIcon\n} from \"../../../helpers/icon\";\nimport { isACommuterRailRoute } from \"../../../models/route\";\n\nconst StopFeatures = (routeStop: RouteStop): JSX.Element => (\n  <div className=\"m-schedule-diagram__features\">\n    {routeStop.stop_features.includes(\"parking_lot\") ? (\n      <TooltipWrapper\n        tooltipText=\"Parking\"\n        tooltipOptions={{ placement: \"bottom\" }}\n      >\n        {parkingIcon(\n          \"c-svg__icon-parking-default m-schedule-diagram__feature-icon\"\n        )}\n      </TooltipWrapper>\n    ) : null}\n    {routeStop.stop_features.includes(\"access\") ? (\n      <TooltipWrapper\n        tooltipText=\"Accessible\"\n        tooltipOptions={{ placement: \"bottom\" }}\n      >\n        {accessibleIcon(\n          \"c-svg__icon-acessible-default m-schedule-diagram__feature-icon\"\n        )}\n      </TooltipWrapper>\n    ) : null}\n    {routeStop.zone &&\n      routeStop.route &&\n      isACommuterRailRoute(routeStop.route) && (\n        <span className=\"c-icon__cr-zone m-schedule-diagram__feature-icon\">{`Zone ${\n          routeStop.zone\n        }`}</span>\n      )}\n  </div>\n);\n\nexport default StopFeatures;\n","import { max } from \"lodash\";\nimport React, { ReactElement } from \"react\";\nimport { LineDiagramStop } from \"../../__schedule\";\nimport {\n  hasBranchLines,\n  isBranchTerminusStop,\n  areOnDifferentBranchLines,\n  diagramWidth,\n  isMergeStop\n} from \"../line-diagram-helpers\";\nimport Line from \"./Line\";\nimport Merges from \"./Merge\";\nimport Stop from \"./Stop\";\nimport { routeToModeName } from \"../../../../helpers/css\";\nimport { LiveDataByStop } from \"../__line-diagram\";\nimport VehicleIcons from \"../VehicleIcons\";\nimport { getCurrentState } from \"../../../store/ScheduleStore\";\nimport { DirectionId } from \"../../../../__v3api\";\nimport { isAGreenLineRoute } from \"../../../../models/route\";\nimport { BASE_LINE_WIDTH, DiagonalHatchPattern } from \"./graphic-helpers\";\n\ninterface DiagramProps {\n  lineDiagram: LineDiagramStop[];\n  liveData: LiveDataByStop | null;\n}\n\nconst branchingDescription = (lineDiagram: LineDiagramStop[]): string => {\n  const mergeStops = lineDiagram.filter(isMergeStop);\n  const branchText = mergeStops.map(mergeStop => {\n    const mergeStopName = mergeStop.route_stop.name;\n    const branchNames = mergeStop.stop_data\n      .filter(sd => sd.branch)\n      .map(sd => sd.branch);\n    return `Use ${mergeStopName} to transfer to trains on ${branchNames.join(\n      \" or \"\n    )} branches. `;\n  });\n  return branchText.join(\"\");\n};\nconst diagramDescription = (\n  lineDiagram: LineDiagramStop[],\n  direction: DirectionId\n): string => {\n  const text = `${lineDiagram.length} stops`;\n  const {\n    direction_destinations: destinations,\n    direction_names: names\n  } = lineDiagram[0].route_stop.route!;\n  if (destinations) {\n    return `${text} going ${names[direction]} to ${destinations[direction]}`;\n  }\n  return text;\n};\n\ninterface VehicleIconSetProps {\n  stop: LineDiagramStop;\n  liveData: LiveDataByStop | null;\n}\n\nconst LiveVehicleIconSet = ({\n  stop,\n  liveData\n}: VehicleIconSetProps): ReactElement<HTMLElement> | null => {\n  const stopId = stop.route_stop.id;\n  if (!liveData || !liveData[stopId]) return null;\n  // Hide vehicles arriving to the origin from 'off the line'\n  const vehicleData = stop.route_stop[\"is_beginning?\"]\n    ? liveData[stopId].vehicles.filter(vehicle => vehicle.status === \"stopped\")\n    : liveData[stopId].vehicles;\n  return (\n    <VehicleIcons\n      key={`${stopId}-vehicles`}\n      stop={stop.route_stop}\n      vehicles={vehicleData}\n    />\n  );\n};\n\nconst Diagram = (props: DiagramProps): ReactElement<HTMLElement> | null => {\n  const { lineDiagram, liveData } = props;\n  const { selectedDirection } = getCurrentState();\n  const width = diagramWidth(\n    max(lineDiagram.map(ld => ld.stop_data.length)) || 1\n  );\n\n  return (\n    <>\n      {lineDiagram.map(stop => (\n        <LiveVehicleIconSet\n          key={stop.route_stop.id}\n          stop={stop}\n          liveData={liveData}\n        />\n      ))}\n      <svg\n        xmlns=\"http://www.w3.org/2000/svg\"\n        role=\"img\"\n        aria-labelledby=\"diagram-title diagram-desc\"\n        className={`line-diagram-svg ${routeToModeName(\n          lineDiagram[0].route_stop.route!\n        )}`}\n        width={`${width + 4}px`}\n        height=\"100%\"\n        style={{ left: BASE_LINE_WIDTH / 2 }}\n      >\n        <title id=\"diagram-title\">\n          Line diagram for{\" \"}\n          {isAGreenLineRoute(lineDiagram[0].route_stop.route!)\n            ? \"Green Line\"\n            : lineDiagram[0].route_stop.route!.name}\n        </title>\n        <desc id=\"diagram-desc\">\n          {diagramDescription(lineDiagram, selectedDirection)}\n          {hasBranchLines(lineDiagram) && branchingDescription(lineDiagram)}\n        </desc>\n\n        <defs>{DiagonalHatchPattern}</defs>\n        {/* If there are multiple branches, draw the lines and curves for those */\n        hasBranchLines(lineDiagram) && <Merges lineDiagram={lineDiagram} />}\n\n        {/* Draw lines between stops */\n        lineDiagram.map((current, idx, self) => {\n          if (self[idx + 1]) {\n            if (\n              isBranchTerminusStop(current) &&\n              areOnDifferentBranchLines(current, self[idx + 1])\n            )\n              return null; // don't draw a line from a branch end to the main line\n\n            return (\n              <Line\n                key={`${current.route_stop.id}-${self[idx + 1].route_stop.id}`}\n                from={current}\n                to={self[idx + 1]}\n              />\n            );\n          }\n          return null; // this is the end of the line, nothing to draw a line to\n        })}\n\n        {/* Draw circles for each stop */\n        lineDiagram.map(stop => (\n          <Stop key={stop.route_stop.id} stop={stop} />\n        ))}\n      </svg>\n    </>\n  );\n};\n\nexport default Diagram;\n","import { first, last } from \"lodash\";\nimport React, { ReactElement } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { LineDiagramStop } from \"../../__schedule\";\nimport {\n  getTreeDirection,\n  isBranchTerminusStop,\n  isMergeStop,\n  lineDiagramIndexes,\n  isStopOnMainLine\n} from \"../line-diagram-helpers\";\nimport {\n  CoordState,\n  StopCoord,\n  BASE_LINE_WIDTH,\n  MERGE_RADIUS\n} from \"./graphic-helpers\";\nimport Line from \"./Line\";\n\ninterface MergeGraphicsProps {\n  lineDiagram: LineDiagramStop[];\n}\nconst Merges = ({ lineDiagram }: MergeGraphicsProps): ReactElement | null => {\n  const branchingOutward = getTreeDirection(lineDiagram) === \"outward\";\n  const mergeIndices = lineDiagramIndexes(lineDiagram, isMergeStop);\n  // walk through the diagram to find where all the merges go.\n  const stopGaps = mergeIndices.map(i => {\n    let from: LineDiagramStop;\n    let to: LineDiagramStop;\n    if (branchingOutward) {\n      from = lineDiagram[i];\n      [to] = lineDiagram.slice(i).filter(isStopOnMainLine);\n    } else {\n      to = lineDiagram[i];\n      from = last(lineDiagram.slice(0, i - 1).filter(isStopOnMainLine))!;\n    }\n\n    return [from, to];\n  });\n\n  const lineDiagramCoords: CoordState = useSelector(\n    (state: CoordState) => state\n  );\n  if (!lineDiagramCoords) return null;\n\n  const mergeBends = stopGaps.map(([from, to]) => {\n    // if outward, start with from and construct array of tos\n    // if inward, start with to and construct array of froms\n    const mergeStop = branchingOutward ? from : to;\n    const mergeStopIndex = lineDiagram.indexOf(mergeStop);\n    const mergeStopCoords = lineDiagramCoords[mergeStop.route_stop.id];\n    if (!mergeStopCoords) return null;\n\n    // usually there's just one terminus to draw the merge to... except for the GL at Kenmore.\n    const mergeEnds = mergeStop.stop_data.slice(1).map(({ branch }) => {\n      // along the branch might be subsequent stops or prior stops\n      const downBranch = (branchingOutward\n        ? lineDiagram.slice(mergeStopIndex)\n        : lineDiagram.slice(0, mergeStopIndex)\n      ).filter(stop => stop.route_stop.branch === branch);\n      const nextStopOnBranch = branchingOutward\n        ? first(downBranch)\n        : last(downBranch);\n      const terminusOnBranch = branchingOutward\n        ? first(downBranch.filter(isBranchTerminusStop))\n        : last(downBranch.filter(isBranchTerminusStop));\n      return [nextStopOnBranch, terminusOnBranch];\n    });\n\n    return mergeEnds.map(([nextStop, terminus]) => {\n      if (!nextStop && !terminus) return null;\n      // try the next stop on the branch first. if the branch is collapsed the\n      // coordinates will be null as the next stop is hidden, so use terminus\n      const nextStopVisible = !!lineDiagramCoords[nextStop!.route_stop.id];\n      const nextStopCoords = nextStopVisible\n        ? lineDiagramCoords[nextStop!.route_stop.id]\n        : lineDiagramCoords[terminus!.route_stop.id];\n\n      const [x, y] = nextStopCoords as StopCoord;\n      const [mX, mY] = mergeStopCoords;\n      const dx = (Math.abs(mX - x) - MERGE_RADIUS) * -1;\n      const dy =\n        (Math.abs(mY - y) - MERGE_RADIUS - (branchingOutward ? 60 : 20)) *\n        (branchingOutward ? -1 : 1);\n      const arc = branchingOutward\n        ? `-${MERGE_RADIUS},-${MERGE_RADIUS} 0 0 0 -${MERGE_RADIUS},-${MERGE_RADIUS}`\n        : `-${MERGE_RADIUS},${MERGE_RADIUS} 0 0 1 -${MERGE_RADIUS},${MERGE_RADIUS}`;\n      const pathProps: React.SVGProps<SVGPathElement> = {\n        key: `${mergeStop.route_stop.id}-${terminus!.route_stop.id}-merge`,\n        strokeWidth: `${BASE_LINE_WIDTH}px`,\n        d: `M${x},${y} v${dy} a${arc} h${dx}`\n      };\n      if (nextStop!.stop_data.some(sd => sd[\"has_disruption?\"])) {\n        pathProps.stroke = \"url(#diagonalHatch)\";\n      }\n      return <path {...pathProps} />;\n    });\n  });\n\n  if (!stopGaps.length && !mergeBends.length) return null;\n\n  return (\n    <g className=\"line-diagram-svg__merge\">\n      {stopGaps.map(\n        ([from, to]) =>\n          from &&\n          to && (\n            <Line\n              key={`${from.route_stop.id}-${to.route_stop.id}-line`}\n              from={from}\n              to={to}\n            />\n          )\n      )}\n      {mergeBends}\n    </g>\n  );\n};\n\nexport default Merges;\n","import React, { ReactElement } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { LineDiagramStop } from \"../../__schedule\";\nimport { StopCoord, CoordState, CIRC_RADIUS } from \"./graphic-helpers\";\n\nconst Stop = ({\n  stop\n}: {\n  stop: LineDiagramStop;\n}): ReactElement<SVGCircleElement> | null => {\n  const coords: StopCoord | null = useSelector(\n    (state: CoordState) => state[stop.route_stop.id]\n  );\n  if (!coords) return null;\n  const [x, y] = coords;\n  return (\n    <circle\n      className=\"line-diagram-svg__stop\"\n      r={`${CIRC_RADIUS}px`}\n      cx={`${x}px`}\n      cy={`${y}px`}\n    />\n  );\n};\n\nexport default Stop;\n","import React from \"react\";\nimport { renderToString } from \"react-dom/server\";\nimport { useSelector } from \"react-redux\";\nimport { RouteStop, LineDiagramVehicle } from \"../__schedule\";\nimport CrowdingPill from \"./CrowdingPill\";\nimport { TooltipWrapper, vehicleArrowIcon } from \"../../../helpers/icon\";\nimport { StopCoord, CoordState, CIRC_RADIUS } from \"./graphics/graphic-helpers\";\nimport { RouteType } from \"../../../__v3api\";\nimport {\n  vehicleRealtimeStatusText,\n  vehicleName\n} from \"../../../models/vehicle\";\n\ninterface VehicleIconsProps {\n  stop: RouteStop;\n  vehicles: LineDiagramVehicle[] | null;\n}\n\nconst tooltipText = (\n  routeType: RouteType | null,\n  stopName: string | null,\n  vehicle: LineDiagramVehicle\n): string => {\n  const status =\n    stopName && stopName.length\n      ? `${vehicleRealtimeStatusText(vehicle)} ${stopName}`\n      : \"\";\n\n  if (routeType !== null) {\n    let baseText = vehicleName(routeType);\n    if (routeType === 2) baseText += ` ${vehicle.trip_name}`;\n\n    if (vehicle.headsign) {\n      return `${vehicle.headsign} ${baseText.toLowerCase()} ${status}`;\n    }\n\n    return `${baseText} ${status}`;\n  }\n\n  return `Vehicle ${status}`;\n};\n\nconst CrowdingIconString = (vehicle: LineDiagramVehicle): string =>\n  renderToString(<CrowdingPill crowding={vehicle.crowding} />);\n\nconst VehicleIcons = ({\n  stop,\n  vehicles\n}: VehicleIconsProps): JSX.Element | null => {\n  const coords: StopCoord | null = useSelector(\n    (state: CoordState) => state[stop.id]\n  );\n  if (!vehicles || !coords) return null;\n  const [x, y] = coords;\n  const left = `${x - CIRC_RADIUS}px`;\n  const routeType = stop.route ? stop.route.type : null;\n  const tooltips = vehicles.map(vehicle => {\n    const top = `${{\n      // eslint-disable-next-line @typescript-eslint/camelcase\n      in_transit: y - 50,\n      incoming: y - 25,\n      stopped: y - 10\n    }[vehicle.status] || y}px`;\n\n    return (\n      <div\n        key={vehicle.id}\n        className=\"m-schedule-diagram__vehicle\"\n        style={{ top, left }}\n      >\n        <TooltipWrapper\n          tooltipText={`<div class=\"m-schedule-diagram__vehicle-tooltip\">${\n            vehicle.crowding ? `${CrowdingIconString(vehicle)}<br/>` : \"\"\n          }${tooltipText(routeType, stop.name, vehicle)}</div>`}\n          tooltipOptions={{ placement: \"right\", animation: false, html: true }}\n        >\n          {vehicleArrowIcon(\"m-schedule-diagram__vehicle--icon\")}\n        </TooltipWrapper>\n      </div>\n    );\n  });\n\n  return <>{tooltips}</>;\n};\n\nexport default VehicleIcons;\n","import { isArray, last } from \"lodash\";\nimport React from \"react\";\nimport StopCard from \"./StopCard\";\nimport ExpandableBranch from \"./ExpandableBranch\";\nimport { CommonLineDiagramProps } from \"./__line-diagram\";\nimport { LineDiagramStop } from \"../__schedule\";\nimport { lineDiagramIndexes, isOnBranchLine } from \"./line-diagram-helpers\";\n\n// build branched diagram structure\nconst buildBranchedLineDiagram = (\n  lineDiagram: LineDiagramStop[]\n): (LineDiagramStop | LineDiagramStop[])[] => {\n  const branchedDiagram: (LineDiagramStop | LineDiagramStop[])[] = [];\n  // determine if the diagram will collect branches (\"inward\")\n  // or split into branches (\"outward\") going down the page\n  // const direction = getTreeDirection(lineDiagram);\n\n  // identify where in the list to branch out or in, e.g.\n  // [stop, stop, stop, stop, stop, #, stop, stop]\n  // # = on an \"inward\" direction tree, join the branch to the main line\n  // [stop, stop, ^, stop, stop, stop, stop, stop]\n  // ^ = on an \"outward\" direction tree, split the branch from the main line\n  const toggledStopIndices = lineDiagramIndexes(\n    lineDiagram,\n    (stop: LineDiagramStop): boolean =>\n      isOnBranchLine(stop) && last(stop.stop_data)!.type === \"stop\"\n  );\n\n  // iterate through the list, constructing branches as needed\n  // branches will be grouped together, e.g.:\n  // [stop, stop, [stop#, stop, stop], stop, stop]\n  // # = branch terminus for a tree with \"inward\" direction\n  // [stop, stop, [stop, stop, stop^], stop, stop]\n  // ^ = branch terminus for a tree with \"outward\" direction\n  lineDiagram.forEach((ld, i) => {\n    if (toggledStopIndices.includes(i)) {\n      // either place on branch or initialize new branch\n      if (isArray(last(branchedDiagram))) {\n        (last(branchedDiagram) as LineDiagramStop[]).push(ld);\n      } else {\n        branchedDiagram.push([ld]);\n      }\n    } else {\n      branchedDiagram.push(ld);\n    }\n  });\n\n  return branchedDiagram;\n};\n\nexport const Branch = (props: CommonLineDiagramProps): React.ReactElement => {\n  const { stops, handleStopClick, liveData } = props;\n  return (\n    <li>\n      {stops.length > 2 ? (\n        <ExpandableBranch key={`${stops[0].route_stop.id}-branch`} {...props} />\n      ) : (\n        <ol>\n          {stops.map(stop => (\n            <StopCard\n              key={stop.route_stop.id}\n              stop={stop}\n              onClick={handleStopClick}\n              liveData={liveData[stop.route_stop.id]}\n            />\n          ))}\n        </ol>\n      )}\n    </li>\n  );\n};\n\nconst StopListWithBranches = (\n  props: CommonLineDiagramProps\n): React.ReactElement => {\n  const { stops, ...other } = props;\n  const lineDiagramWithBranches = buildBranchedLineDiagram(stops);\n  return (\n    <ol>\n      {lineDiagramWithBranches.map(stopOrStops => {\n        if (isArray(stopOrStops)) {\n          return (\n            <Branch\n              key={stopOrStops[0].route_stop.id}\n              stops={stopOrStops}\n              {...other}\n            />\n          );\n        }\n\n        // it's a stop, just render it\n        return (\n          <StopCard\n            key={stopOrStops.route_stop.id}\n            stop={stopOrStops}\n            onClick={props.handleStopClick}\n            liveData={props.liveData[stopOrStops.route_stop.id]}\n          />\n        );\n      })}\n    </ol>\n  );\n};\n\nexport default StopListWithBranches;\n","import { max, times } from \"lodash\";\nimport React, { ReactElement, useState, useContext } from \"react\";\nimport ExpandableBlock from \"../../../components/ExpandableBlock\";\nimport { LineDiagramStop } from \"../__schedule\";\nimport { CommonLineDiagramProps } from \"./__line-diagram\";\nimport { StopRefContext } from \"./LineDiagramWithStops\";\nimport { diagramWidth } from \"./line-diagram-helpers\";\nimport {\n  CIRC_DIAMETER,\n  CIRC_RADIUS,\n  BRANCH_LINE_WIDTH\n} from \"./graphics/graphic-helpers\";\nimport { routeToModeName } from \"../../../helpers/css\";\nimport StopCard from \"./StopCard\";\n\nconst BranchToggle = (\n  stops: LineDiagramStop[],\n  isExpanded: boolean\n): JSX.Element => {\n  const maxBranches = max(stops.map(ld => ld.stop_data.length - 1)) || 1;\n  const width = diagramWidth(maxBranches) + 2;\n  return (\n    <div className=\"m-schedule-diagram__expander-header\">\n      <div style={{ width }}>\n        {!isExpanded && (\n          <svg\n            className={`line-diagram-svg__toggle ${routeToModeName(\n              stops[0].route_stop.route!\n            )}`}\n            width={width}\n            height=\"100%\"\n          >\n            <g\n              transform={`translate(${maxBranches * BRANCH_LINE_WIDTH - 1}, 1)`}\n            >\n              <rect width={CIRC_DIAMETER * 2} height=\"42\" rx={CIRC_DIAMETER} />\n              {times(3, i => (\n                <circle\n                  key={i}\n                  cx={CIRC_DIAMETER}\n                  cy={10 * (i + 1) + 1}\n                  r={CIRC_RADIUS}\n                />\n              ))}\n            </g>\n          </svg>\n        )}\n      </div>\n      <button className=\"btn btn-link m-schedule-diagram__toggle\" type=\"button\">\n        {stops.length} stops\n      </button>\n    </div>\n  );\n};\n\nconst ExpandableBranch = (\n  props: CommonLineDiagramProps\n): ReactElement<HTMLElement> => {\n  const { stops, handleStopClick, liveData } = props;\n  const [isExpanded, setIsExpanded] = useState(false);\n  const updateAllStopCoords = useContext(StopRefContext)[1];\n\n  // reset all the coordinates.\n  React.useEffect(\n    () => {\n      updateAllStopCoords();\n    },\n    [isExpanded, updateAllStopCoords]\n  );\n\n  return (\n    <div className=\"m-schedule-diagram__expander\">\n      <ExpandableBlock\n        header={{\n          iconSvgText: null,\n          text: BranchToggle(stops, isExpanded)\n        }}\n        initiallyExpanded={isExpanded}\n        notifyExpanded={(blockIsExpanded: boolean) => {\n          setIsExpanded(blockIsExpanded);\n        }}\n        preventScroll\n        id={`${stops[0].route_stop.branch}`}\n      >\n        <>\n          {stops.map(stop => (\n            <StopCard\n              key={stop.route_stop.id}\n              stop={stop}\n              onClick={handleStopClick}\n              liveData={liveData[stop.route_stop.id]}\n            />\n          ))}\n        </>\n      </ExpandableBlock>\n    </div>\n  );\n};\n\nexport default ExpandableBranch;\n","import { useDispatch } from \"react-redux\";\nimport { useRef, useEffect, useCallback } from \"react\";\nimport { LineDiagramStop } from \"../../__schedule\";\nimport { isMergeStop } from \"../line-diagram-helpers\";\nimport { BASE_LINE_WIDTH, BRANCH_SPACING } from \"./graphic-helpers\";\n\nexport interface RefList {\n  [key: string]: React.MutableRefObject<HTMLElement | null>;\n}\n\nfunction useStopRef(prev: RefList, stop: LineDiagramStop): RefList {\n  return {\n    ...prev,\n    [stop.route_stop.id]: useRef<HTMLElement>(null)\n  };\n}\n\nconst stopById = (stopId: string): ((stop: LineDiagramStop) => boolean) =>\n  // eslint-disable-next-line @typescript-eslint/camelcase\n  ({ route_stop }) => stopId === route_stop.id;\n\nconst xCoordForStop = (stop: LineDiagramStop): number => {\n  if (isMergeStop(stop)) {\n    return BASE_LINE_WIDTH + 1;\n  }\n  // usually just a function of stop_data length\n  return BRANCH_SPACING * (stop.stop_data.length - 1) + BASE_LINE_WIDTH + 1;\n};\n\nexport default function useStopPositions(\n  stops: LineDiagramStop[]\n): [RefList, () => void] {\n  const stopRefsMap: RefList = stops.reduce(useStopRef, {});\n  const dispatchStopCoords = useDispatch();\n  const updateAllStops = useCallback(\n    (): void => {\n      Object.entries(stopRefsMap).forEach(([stopId, ref]) => {\n        const x = xCoordForStop(stops.find(stopById(stopId))!);\n        let coordinates = null;\n        if (ref && ref.current) {\n          const { offsetTop, offsetHeight } = ref.current;\n          const y = offsetTop + offsetHeight / 2;\n          coordinates = [x, y];\n        }\n        dispatchStopCoords({\n          type: \"set\",\n          stop: stopId,\n          coords: coordinates\n        });\n      });\n    },\n    [dispatchStopCoords, stopRefsMap, stops]\n  );\n\n  useEffect(\n    () => {\n      updateAllStops();\n      window.addEventListener(\"resize\", updateAllStops);\n      return () => window.removeEventListener(\"resize\", updateAllStops);\n    },\n    [updateAllStops]\n  );\n\n  return [stopRefsMap, updateAllStops];\n}\n","export const stringToDateObject = (unformatted: string): Date => {\n  const [year, month, day] = unformatted\n    .split(/-/)\n    .map(part => Number.parseInt(part, 10));\n\n  // Remember that months in JS are 0-indexed for some reason, hence \"month - 1\".\n  const parsedDate = new Date(year, month - 1, day);\n  return parsedDate;\n};\n\n// Returns a date in the form of \"2019-08-07\"\nexport const dateObjectToString = (date: Date): string =>\n  [\n    date.getFullYear(),\n    `0${date.getMonth() + 1}`.slice(-2),\n    `0${date.getDate()}`.slice(-2)\n  ].join(\"-\");\n\n// Returns a date in the form of \"August 7, 2019\"\nexport const formattedDate = (unformatted: string): string => {\n  const parsedDate = stringToDateObject(unformatted);\n  return parsedDate.toLocaleDateString(\"en-US\", {\n    year: \"numeric\",\n    month: \"long\",\n    day: \"numeric\",\n    timeZone: \"UTC\"\n  });\n};\n\n// Returns a date in the form of \"Aug 7\"\nexport const shortDate = (date: Date): string =>\n  date.toLocaleDateString(\"en-US\", {\n    month: \"short\",\n    day: \"numeric\",\n    timeZone: \"UTC\"\n  });\n\nexport default formattedDate;\n","import React from \"react\";\nimport { AnyAction, Reducer, Store, createStore } from \"redux\";\nimport { LineDiagramStop } from \"../../__schedule\";\n\nexport const CIRC_RADIUS = 4;\nexport const CIRC_DIAMETER = CIRC_RADIUS * 2;\nexport const BASE_LINE_WIDTH = CIRC_DIAMETER + 2;\nexport const BRANCH_LINE_WIDTH = BASE_LINE_WIDTH + 6;\nexport const BRANCH_SPACING = 16;\nexport const MERGE_RADIUS = 6;\n\nexport type StopCoord = [number, number];\nexport interface CoordState {\n  [key: string]: StopCoord | null;\n}\n\nexport interface CoordAction extends AnyAction {\n  stop: string;\n  coords: StopCoord | null;\n}\n\nexport const coordReducer: Reducer<CoordState, CoordAction> = (\n  allCoordinates: CoordState | undefined,\n  action: CoordAction\n): CoordState => {\n  const { stop, coords } = action;\n  return {\n    ...allCoordinates,\n    [stop]: coords\n  };\n};\n\nexport const createLineDiagramCoordStore = (\n  lineDiagram: LineDiagramStop[]\n): Store<CoordState, CoordAction> => {\n  const stopIds = lineDiagram.map(ld => ld.route_stop.id);\n  const initialCoordState: CoordState = stopIds.reduce(\n    (state, id) => ({ ...state, [id]: null }),\n    {}\n  );\n  const store = createStore(\n    coordReducer,\n    initialCoordState,\n    /* eslint-disable no-underscore-dangle, @typescript-eslint/no-explicit-any */\n    (window as any).__REDUX_DEVTOOLS_EXTENSION__ &&\n      (window as any).__REDUX_DEVTOOLS_EXTENSION__()\n    /* eslint-enable no-underscore-dangle, @typescript-eslint/no-explicit-any */\n  );\n\n  return store;\n};\n\nexport const DiagonalHatchPattern = (\n  <pattern\n    id=\"diagonalHatch\"\n    width=\"10\"\n    height=\"10\"\n    patternTransform=\"rotate(45 0 0)\"\n    patternUnits=\"userSpaceOnUse\"\n  >\n    <line\n      className=\"line-diagram-svg__line\"\n      y2={CIRC_DIAMETER}\n      strokeWidth={`${BRANCH_LINE_WIDTH}px`}\n    />\n  </pattern>\n);\n","module.exports = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 16 16\\\"><title>green line B</title><path fill=\\\"#00843d\\\" d=\\\"M8 0a8 8 0 1 0 8 8 8 8 0 0 0-8-8\\\"></path><path fill=\\\"#fff\\\" d=\\\"M8.59 4a5.398 5.398 0 0 1 1.086.101 2.392 2.392 0 0 1 .84.33 1.558 1.558 0 0 1 .542.611 2.068 2.068 0 0 1 .192.941 1.701 1.701 0 0 1-.286 1.008 2.06 2.06 0 0 1-.845.662 2.004 2.004 0 0 1 1.148.745 2.152 2.152 0 0 1 .38 1.283 2.137 2.137 0 0 1-.245 1.048 2.058 2.058 0 0 1-.66.722 2.957 2.957 0 0 1-.944.414 4.423 4.423 0 0 1-1.09.135H4.672V4zm-.233 3.238a1.352 1.352 0 0 0 .805-.224.832.832 0 0 0 .315-.728.892.892 0 0 0-.105-.46.752.752 0 0 0-.28-.28 1.224 1.224 0 0 0-.402-.14 2.757 2.757 0 0 0-.472-.039H6.502v1.871zm.106 3.395a2.51 2.51 0 0 0 .512-.05 1.29 1.29 0 0 0 .432-.168.86.86 0 0 0 .297-.32 1.06 1.06 0 0 0 .111-.515 1.017 1.017 0 0 0-.361-.88 1.59 1.59 0 0 0-.957-.263H6.502v2.196z\\\"></path></svg>\"","module.exports = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 16 16\\\"><title>green line C</title><path fill=\\\"#00843d\\\" d=\\\"M8 0a8 8 0 1 0 8 8 8 8 0 0 0-8-8\\\"></path><path fill=\\\"#fff\\\" d=\\\"M9.912 6.222a1.685 1.685 0 0 0-.374-.423 1.754 1.754 0 0 0-1.103-.386 1.963 1.963 0 0 0-.964.22 1.82 1.82 0 0 0-.643.59 2.59 2.59 0 0 0-.358.84 4.224 4.224 0 0 0-.112.974 3.928 3.928 0 0 0 .112.937 2.536 2.536 0 0 0 .358.82 1.838 1.838 0 0 0 .643.583 1.957 1.957 0 0 0 .964.22 1.554 1.554 0 0 0 1.204-.471 2.174 2.174 0 0 0 .53-1.243h1.629a3.878 3.878 0 0 1-.333 1.296 3.088 3.088 0 0 1-.707.985 2.998 2.998 0 0 1-1.028.622A3.764 3.764 0 0 1 8.435 12a3.922 3.922 0 0 1-1.58-.305 3.393 3.393 0 0 1-1.183-.841 3.72 3.72 0 0 1-.739-1.258 4.615 4.615 0 0 1-.257-1.559 4.773 4.773 0 0 1 .257-1.59 3.831 3.831 0 0 1 .739-1.28 3.391 3.391 0 0 1 1.183-.856A3.862 3.862 0 0 1 8.435 4a3.853 3.853 0 0 1 1.194.182 3.254 3.254 0 0 1 1.007.53 2.862 2.862 0 0 1 .733.863 3.09 3.09 0 0 1 .364 1.177h-1.627a1.378 1.378 0 0 0-.194-.53z\\\"></path></svg>\"","module.exports = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 16 16\\\"><title>green line D</title><path fill=\\\"#00843d\\\" d=\\\"M8 0a8 8 0 1 0 8 8 8 8 0 0 0-8-8\\\"></path><path fill=\\\"#fff\\\" d=\\\"M7.91 4a4.12 4.12 0 0 1 1.44.247 3.124 3.124 0 0 1 1.154.74 3.404 3.404 0 0 1 .762 1.231 4.968 4.968 0 0 1 .274 1.737 5.524 5.524 0 0 1-.224 1.614 3.552 3.552 0 0 1-.677 1.277 3.186 3.186 0 0 1-1.132.846A3.837 3.837 0 0 1 7.91 12H4.46V4zm-.123 6.521a2.252 2.252 0 0 0 .74-.123 1.622 1.622 0 0 0 .638-.41 2.043 2.043 0 0 0 .448-.744 3.287 3.287 0 0 0 .169-1.12 4.647 4.647 0 0 0-.118-1.093 2.185 2.185 0 0 0-.387-.835 1.718 1.718 0 0 0-.71-.532 2.837 2.837 0 0 0-1.094-.185H6.218v5.042z\\\"></path></svg>\"","module.exports = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 16 16\\\"><title>green line E</title><path fill=\\\"#00843d\\\" d=\\\"M8 0a8 8 0 1 0 8 8 8 8 0 0 0-8-8\\\"></path><path fill=\\\"#fff\\\" d=\\\"M11.184 4v1.48H6.959v1.713h3.877V8.56H6.959v1.961h4.314V12H5.201V4z\\\"></path></svg>\"","import { BranchDirection } from \"./__line-diagram\";\nimport { LineDiagramStop } from \"../__schedule\";\nimport { BRANCH_SPACING, BASE_LINE_WIDTH } from \"./graphics/graphic-helpers\";\n\nexport const isMergeStop = (stop: LineDiagramStop): boolean =>\n  stop.stop_data.some(sd => sd.type === \"merge\"); // always on branch\n\nexport const isOnBranchLine = (stop: LineDiagramStop): boolean =>\n  stop.stop_data.length > 1 && !isMergeStop(stop); // merge stops show on main line, not branch line\n\nexport const hasBranchLines = (lineDiagram: LineDiagramStop[]): boolean =>\n  lineDiagram.some(isOnBranchLine);\n\nconst isOnBranch = (stop: LineDiagramStop): boolean =>\n  isOnBranchLine(stop) || !!stop.route_stop.branch;\n\nexport const areOnDifferentBranchLines = (\n  from: LineDiagramStop,\n  to: LineDiagramStop\n): boolean =>\n  !isMergeStop(from) &&\n  !isMergeStop(to) &&\n  from.stop_data.length !== to.stop_data.length &&\n  from.route_stop.branch !== to.route_stop.branch;\n\nconst isTerminusStop = (stop: LineDiagramStop): boolean =>\n  stop.route_stop[\"is_terminus?\"];\n\nexport const isBranchTerminusStop = (stop: LineDiagramStop): boolean =>\n  isOnBranch(stop) && isTerminusStop(stop);\n\nexport const lineDiagramIndexes = (\n  lineDiagram: LineDiagramStop[],\n  subsetFn: (stop: LineDiagramStop) => boolean\n): number[] => {\n  const subset = lineDiagram.filter(subsetFn);\n  return subset.map(s => lineDiagram.indexOf(s));\n};\n\nexport const getTreeDirection = (\n  lineDiagram: LineDiagramStop[]\n): BranchDirection => {\n  // determines if tree should fan out or collect branches as we go down the page\n  // use the position of the merge stop to find this. assume default of outward\n  let direction: BranchDirection = \"outward\";\n  if (lineDiagram.some(isMergeStop)) {\n    const mergeIndices = lineDiagramIndexes(lineDiagram, isMergeStop);\n    const branchTerminiIndices = lineDiagramIndexes(\n      lineDiagram,\n      isBranchTerminusStop\n    );\n    direction = branchTerminiIndices.some(i => mergeIndices[0] > i)\n      ? \"inward\"\n      : \"outward\";\n  }\n\n  return direction;\n};\n\n// eslint-disable-next-line @typescript-eslint/camelcase\nexport const isStopOnMainLine = ({ stop_data }: LineDiagramStop): boolean =>\n  // eslint-disable-next-line @typescript-eslint/camelcase\n  stop_data[0].type === \"stop\" || stop_data[0].type === \"terminus\";\n\nexport const diagramWidth = (maxBranches: number): number =>\n  BASE_LINE_WIDTH + maxBranches * BRANCH_SPACING + BASE_LINE_WIDTH;\n","import React, { ReactElement } from \"react\";\nimport renderSvg from \"./render-svg\";\nimport { isASilverLineRoute } from \"../models/route\";\nimport accessibleIconSvg from \"../../static/images/icon-accessible-small.svg\";\nimport alertIconSvg from \"../../static/images/icon-alerts-triangle.svg\";\nimport blueLineIconSvg from \"../../static/images/icon-blue-line-default.svg\";\nimport busIconSvg from \"../../static/images/icon-mode-bus-small.svg\";\nimport commuterRailIconSvg from \"../../static/images/icon-mode-commuter-rail-small.svg\";\nimport ferryIconSvg from \"../../static/images/icon-mode-ferry-small.svg\";\nimport genericSubwayIconSvg from \"../../static/images/icon-mode-subway-default.svg\";\nimport greenLineIconSvg from \"../../static/images/icon-green-line-small.svg\";\nimport greenBLineIconSvg from \"../../static/images/icon-green-line-b-small.svg\";\nimport greenCLineIconSvg from \"../../static/images/icon-green-line-c-small.svg\";\nimport greenDLineIconSvg from \"../../static/images/icon-green-line-d-small.svg\";\nimport greenELineIconSvg from \"../../static/images/icon-green-line-e-small.svg\";\nimport mattapanLineIconSvg from \"../../static/images/icon-mattapan-line-small.svg\";\nimport orangeLineIconSvg from \"../../static/images/icon-orange-line-small.svg\";\nimport parkingIconSvg from \"../../static/images/icon-parking-small.svg\";\nimport redLineIconSvg from \"../../static/images/icon-red-line-small.svg\";\nimport silverLineIconSvg from \"../../static/images/icon-silver-line-small.svg\";\nimport vehicleArrowSvg from \"../../static/images/icon-vehicle-bordered-expanded.svg\";\nimport searchIconSvg from \"../../static/images/icon-search-reverse-default.svg\";\nimport crowdingIconSvg from \"../../static/images/icon-crowding.svg\";\n\nexport const accessibleIcon = (className: string = \"\"): JSX.Element =>\n  renderSvg(className, accessibleIconSvg, false);\n\nexport const alertIcon = (className: string = \"\"): JSX.Element =>\n  renderSvg(className, alertIconSvg, false);\n\nexport const blueLineIcon = (className: string = \"\"): JSX.Element =>\n  renderSvg(className, blueLineIconSvg, false);\n\nexport const busIcon = (className: string = \"\"): JSX.Element =>\n  renderSvg(className, busIconSvg, false);\n\nexport const commuterRailIcon = (className: string = \"\"): JSX.Element =>\n  renderSvg(className, commuterRailIconSvg, false);\n\nexport const ferryIcon = (className: string = \"\"): JSX.Element =>\n  renderSvg(className, ferryIconSvg, false);\n\nexport const genericSubwayIcon = (className: string = \"\"): JSX.Element =>\n  renderSvg(className, genericSubwayIconSvg, false);\n\nexport const greenLineIcon = (className: string = \"\"): JSX.Element =>\n  renderSvg(className, greenLineIconSvg, false);\n\nexport const greenBLineIcon = (className: string = \"\"): JSX.Element =>\n  renderSvg(className, greenBLineIconSvg, false);\n\nexport const greenCLineIcon = (className: string = \"\"): JSX.Element =>\n  renderSvg(className, greenCLineIconSvg, false);\n\nexport const greenDLineIcon = (className: string = \"\"): JSX.Element =>\n  renderSvg(className, greenDLineIconSvg, false);\n\nexport const greenELineIcon = (className: string = \"\"): JSX.Element =>\n  renderSvg(className, greenELineIconSvg, false);\n\nexport const mattapanLineIcon = (className: string = \"\"): JSX.Element =>\n  renderSvg(className, mattapanLineIconSvg, false);\n\nexport const orangeLineIcon = (className: string = \"\"): JSX.Element =>\n  renderSvg(className, orangeLineIconSvg, false);\n\nexport const parkingIcon = (className: string = \"\"): JSX.Element =>\n  renderSvg(className, parkingIconSvg, false);\n\nexport const redLineIcon = (className: string = \"\"): JSX.Element =>\n  renderSvg(className, redLineIconSvg, false);\n\nexport const silverLineIcon = (className: string = \"\"): JSX.Element =>\n  renderSvg(className, silverLineIconSvg, false);\n\nexport const vehicleArrowIcon = (className: string = \"\"): JSX.Element =>\n  renderSvg(className, vehicleArrowSvg, false);\n\nexport const searchIcon = (className: string = \"\"): JSX.Element =>\n  renderSvg(className, searchIconSvg, false);\n\nexport const modeIcon = (routeId: string): JSX.Element | undefined => {\n  if (routeId.startsWith(\"CR-\")) return commuterRailIcon(\"c-svg__icon\");\n  if (routeId.startsWith(\"Boat-\")) return ferryIcon(\"c-svg__icon\");\n  if (routeId === \"Blue\") return blueLineIcon(\"c-svg__icon\");\n  if (routeId === \"Green\") return greenLineIcon(\"c-svg__icon\");\n  if (routeId === \"Green-B\") return greenBLineIcon(\"c-svg__icon\");\n  if (routeId === \"Green-C\") return greenCLineIcon(\"c-svg__icon\");\n  if (routeId === \"Green-D\") return greenDLineIcon(\"c-svg__icon\");\n  if (routeId === \"Green-E\") return greenELineIcon(\"c-svg__icon\");\n  if (routeId === \"Mattapan\") return mattapanLineIcon(\"c-svg__icon\");\n  if (routeId === \"Orange\") return orangeLineIcon(\"c-svg__icon\");\n  if (routeId === \"Red\") return redLineIcon(\"c-svg__icon\");\n  if (isASilverLineRoute(routeId)) return silverLineIcon(\"c-svg__icon\");\n\n  return busIcon(\"c-svg__icon-bus-small\");\n};\n\nexport const caret = (\n  className: string,\n  expanded: boolean\n): ReactElement<HTMLElement> => {\n  const unicodeCharacter = expanded ? \"&#xF106;\" : \"&#xF107;\";\n  return (\n    <span\n      className={className}\n      // eslint-disable-next-line react/no-danger\n      dangerouslySetInnerHTML={{ __html: unicodeCharacter }}\n    />\n  );\n};\n\n/*\nA minimal component that gives its child component\na basic tooltip containing the specified text. Has no\nvisual appearance itself.\n\nNote: data-selector=\"true\" and data-original-title are\nspecified here in order to preserve `title` text post-trigger\n*/\n\n// Corresponds to Bootstrap's tooltip options\ninterface TooltipOptions {\n  animation?: boolean;\n  container?: string | HTMLElement | false;\n  delay?: number | object;\n  html?: boolean;\n  placement?: string | Function;\n  selector?: string;\n  template?: string;\n  title?: string | HTMLElement | Function;\n  trigger?: string;\n  constraints?: [];\n  offset?: string;\n}\n\nconst defaultTooltipOptions: TooltipOptions = {\n  animation: true,\n  html: false,\n  placement: \"top\",\n  trigger: \"hover focus\"\n};\n\nexport const TooltipWrapper: React.FC<{\n  children: JSX.Element;\n  tooltipText: string;\n  tooltipOptions?: TooltipOptions;\n  href?: string;\n}> = ({ children, tooltipText, tooltipOptions, href }): JSX.Element => {\n  const options = Object.assign({}, defaultTooltipOptions, tooltipOptions);\n\n  const Tag = href ? \"a\" : \"span\";\n\n  return (\n    <Tag\n      href={href}\n      data-toggle=\"tooltip\"\n      data-trigger={options.trigger}\n      data-placement={options.placement}\n      data-animation={options.animation}\n      data-html={options.html}\n      data-selector=\"true\"\n      data-original-title={tooltipText}\n      title={tooltipText}\n    >\n      {children}\n    </Tag>\n  );\n};\n\nexport const crowdingIcon = (className: string = \"\"): JSX.Element =>\n  renderSvg(`c-svg__icon c-icon__crowding ${className}`, crowdingIconSvg, true);\n","module.exports = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 16 16\\\"><title>accessible</title><rect width=\\\"16\\\" height=\\\"16\\\" fill=\\\"#165c96\\\" rx=\\\"3.748\\\"></rect><g fill=\\\"#fff\\\"><path d=\\\"M6.906 13a3.28 3.28 0 0 1-1.367-6.264l.074.971A2.385 2.385 0 1 0 9.264 10l.582 1.19A3.331 3.331 0 0 1 6.906 13z\\\"></path><path d=\\\"M10.62 11.938L9.278 8.794l-3.271-.001-.318-4.47a.926.926 0 0 1-.111-.432.891.891 0 1 1 .978.888l.094 1.668h2.293l.007.72H6.73l.053.81 3.042-.021 1.298 2.997.986-.356.273.65z\\\"></path></g></svg>\"","module.exports = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 48 48\\\"><title>blue line</title><path fill=\\\"#003da5\\\" d=\\\"M24 0a24 24 0 1 0 24 24A24 24 0 0 0 24 0\\\"></path><g fill=\\\"#fff\\\"><path d=\\\"M16.213 13.647a12.878 12.878 0 0 1 2.698.261 5.83 5.83 0 0 1 2.088.856 3.983 3.983 0 0 1 1.348 1.58 5.562 5.562 0 0 1 .479 2.436 4.537 4.537 0 0 1-.711 2.61 5.161 5.161 0 0 1-2.103 1.711 4.977 4.977 0 0 1 2.857 1.928 5.744 5.744 0 0 1 .942 3.321 5.707 5.707 0 0 1-.608 2.712 5.287 5.287 0 0 1-1.639 1.87 7.25 7.25 0 0 1-2.35 1.073 10.589 10.589 0 0 1-2.71.348H6.468V13.647zm-.58 8.38a3.275 3.275 0 0 0 2.001-.579 2.19 2.19 0 0 0 .783-1.885 2.41 2.41 0 0 0-.26-1.189 1.942 1.942 0 0 0-.697-.725 2.945 2.945 0 0 0-1-.362 6.663 6.663 0 0 0-1.174-.102h-4.264v4.843zm.261 8.788a6.09 6.09 0 0 0 1.276-.13 3.128 3.128 0 0 0 1.074-.435 2.202 2.202 0 0 0 .739-.827 2.846 2.846 0 0 0 .275-1.334 2.677 2.677 0 0 0-.9-2.276 3.836 3.836 0 0 0-2.377-.682h-4.959v5.684zM31.438 13.647v16.878h10.093v3.828H26.885V13.647z\\\"></path></g></svg>\"","module.exports = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 48 48\\\"><title>subway</title><path fill=\\\"#494f5b\\\" d=\\\"M24 0a24 24 0 1 0 24 24A24 24 0 0 0 24 0\\\"></path><g fill=\\\"#fff\\\"><path d=\\\"M25.889 5.822a1.411 1.411 0 1 0-1.411-1.41 1.411 1.411 0 0 0 1.41 1.41zM31.456 34.211a4.978 4.978 0 0 0 3.889-4.822V11.244a5.011 5.011 0 0 0-5.078-4.91H17.733a5.011 5.011 0 0 0-5.1 4.9v18.155a4.978 4.978 0 0 0 3.89 4.822L10.666 43h3.4l4.189-6.144H29.81L34 43h3.333zM20.7 8.222a.845.845 0 0 1 .845-.81H26.5a.844.844 0 0 1 .833.81v1.479a.833.833 0 0 1-.866.799l-4.922-.011a.833.833 0 0 1-.845-.822zm-3.111 23.334a2.222 2.222 0 1 1 2.222-2.223 2.222 2.222 0 0 1-2.222 2.223zm.289-11.812a2.4 2.4 0 0 1-.228 0 2.422 2.422 0 0 1-2.305-2.533v-3.267a2.41 2.41 0 0 1 2.533-2.544H30.1a2.411 2.411 0 0 1 2.533 2.544v3.267q.006.114 0 .228a2.422 2.422 0 0 1-2.533 2.305zM30.31 31.556a2.233 2.233 0 1 1 .022 0zM22.145 5.822h-.034.034a1.411 1.411 0 1 0-1.412-1.411 1.411 1.411 0 0 0 1.412 1.412z\\\"></path></g></svg>\"","module.exports = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 16 16\\\"><title>parking</title><rect width=\\\"16\\\" height=\\\"16\\\" rx=\\\"3.748\\\" ry=\\\"3.748\\\" fill=\\\"#788093\\\"></rect><path d=\\\"M8.719 3.5h-4.4v9h1.763V9.544h2.54a2.843 2.843 0 0 0 3.058-2.986A2.81 2.81 0 0 0 8.72 3.5zm-.14 4.39H6.11V5.17h2.498c.81-.002 1.208.582 1.208 1.371 0 .79-.342 1.347-1.236 1.35z\\\" fill=\\\"#fff\\\"></path></svg>\"","module.exports = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 16 16\\\"><title>silver line</title><path fill=\\\"#1c1e23\\\" d=\\\"M14.245 6.955l-.439-3.298c-.115-.594-.507-.83-1.088-1.074a9.948 9.948 0 0 0-2.994-.52 9.942 9.942 0 0 0-2.987.52c-.574.243-.973.48-1.094 1.074L5.21 6.955v4.555h.807v.777a.567.567 0 0 0 .298.487c.04.02.081.04.115.054a.69.69 0 0 0 .094.027.576.576 0 0 0 .156.02h.23a.636.636 0 0 0 .669-.588v-.777h4.363v.777a.567.567 0 0 0 .297.487c.04.02.081.04.115.054a.689.689 0 0 0 .095.027.577.577 0 0 0 .155.02h.23a.636.636 0 0 0 .67-.588v-.777h.742zm-6.643-3.94h4.251c.203 0 .372.231.372.508s-.17.508-.372.508h-4.25c-.203 0-.372-.23-.372-.508s.169-.507.371-.507zM6.562 7.57l.301-2.334a.314.314 0 0 1 .323-.267h5.124a.318.318 0 0 1 .322.267l.344 2.334v.104a.326.326 0 0 1-.322.326h-5.78a.332.332 0 0 1-.31-.339.233.233 0 0 1-.001-.091zm.647 2.753a.829.829 0 1 1-.037-1.654.831.831 0 1 1 .037 1.654zm5.016 0a.829.829 0 1 1-.037-1.654.831.831 0 1 1 .037 1.654z\\\"></path><path fill=\\\"#7c878e\\\" d=\\\"M8 0A8.04 8.04 0 0 0 .003 8 8 8 0 1 0 8 0\\\"></path><g fill=\\\"#fff\\\"><path d=\\\"M3.638 9.822a1.14 1.14 0 0 0 .346.407 1.493 1.493 0 0 0 .507.23 2.397 2.397 0 0 0 .603.076 3.116 3.116 0 0 0 .451-.035 1.571 1.571 0 0 0 .452-.135.992.992 0 0 0 .352-.277.694.694 0 0 0 .14-.446.629.629 0 0 0-.186-.472 1.472 1.472 0 0 0-.486-.301 4.88 4.88 0 0 0-.683-.211q-.382-.09-.773-.2a6.8 6.8 0 0 1-.783-.247 2.688 2.688 0 0 1-.683-.376 1.775 1.775 0 0 1-.487-.578 1.753 1.753 0 0 1-.186-.838 1.876 1.876 0 0 1 .236-.959 2.136 2.136 0 0 1 .618-.678 2.69 2.69 0 0 1 .863-.401 3.684 3.684 0 0 1 .964-.13 4.568 4.568 0 0 1 1.08.125 2.699 2.699 0 0 1 .918.407 2.062 2.062 0 0 1 .638.717 2.204 2.204 0 0 1 .235 1.06H6.248a1.27 1.27 0 0 0-.135-.533.888.888 0 0 0-.307-.331 1.297 1.297 0 0 0-.436-.17 2.696 2.696 0 0 0-.537-.05 1.86 1.86 0 0 0-.382.04 1.022 1.022 0 0 0-.346.14.868.868 0 0 0-.256.25.675.675 0 0 0-.1.382.644.644 0 0 0 .08.341.714.714 0 0 0 .316.241 4.025 4.025 0 0 0 .653.22q.416.111 1.089.282.2.04.557.145a2.677 2.677 0 0 1 .708.337 2.14 2.14 0 0 1 .607.617 1.757 1.757 0 0 1 .256.99 2.191 2.191 0 0 1-.19.913 1.986 1.986 0 0 1-.568.728 2.725 2.725 0 0 1-.933.477 4.415 4.415 0 0 1-1.29.17 4.531 4.531 0 0 1-1.15-.145 2.887 2.887 0 0 1-.984-.456 2.253 2.253 0 0 1-.678-.794 2.367 2.367 0 0 1-.24-1.144h1.525a1.314 1.314 0 0 0 .13.612zM10.525 4.42v5.844h3.494v1.325H8.95V4.421z\\\"></path></g></svg>\"","module.exports = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 48 48\\\"><title>vehicle</title><path fill=\\\"#fff\\\" d=\\\"M42.88 45.83a2.1 2.1 0 0 1-.87-.19l-15.92-7.17A5.23 5.23 0 0 0 24 38a5.14 5.14 0 0 0-2.08.44L6 45.64a2.1 2.1 0 0 1-.87.19 2.14 2.14 0 0 1-1.76-1 2 2 0 0 1-.12-2L22.11 2a2.08 2.08 0 0 1 3.78 0l18.87 40.87a2 2 0 0 1-.12 2 2.14 2.14 0 0 1-1.76.96z\\\"></path><path d=\\\"M24 2.34a.55.55 0 0 1 .53.33L43.39 43.5a.49.49 0 0 1 0 .53.61.61 0 0 1-.49.3.65.65 0 0 1-.25-.06L26.7 37.11a6.57 6.57 0 0 0-5.4 0L5.37 44.27a.65.65 0 0 1-.25.06.61.61 0 0 1-.49-.3.49.49 0 0 1 0-.53L23.47 2.67a.55.55 0 0 1 .53-.33m0-3a3.53 3.53 0 0 0-3.25 2.07L1.88 42.24a3.59 3.59 0 0 0 3.24 5.09A3.74 3.74 0 0 0 6.61 47l15.92-7.17a3.64 3.64 0 0 1 2.94 0L41.39 47a3.74 3.74 0 0 0 1.49.32 3.59 3.59 0 0 0 3.24-5.09L27.25 1.41A3.53 3.53 0 0 0 24-.66z\\\"></path></svg>\"","module.exports = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 48 48\\\"><title>search</title><path fill=\\\"#fff\\\" d=\\\"M27.92 1.002a19.07 19.07 0 1 1-10.851 34.702L6.754 45.999a3.366 3.366 0 0 1-4.77-4.75l10.315-10.315A18.899 18.899 0 0 1 8.86 20.062a19.115 19.115 0 0 1 19.06-19.06zm0 6.718a12.342 12.342 0 1 0 12.342 12.342A12.287 12.287 0 0 0 27.92 7.72z\\\"></path></svg>\"","module.exports = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 48 48\\\"><title>vehicle crowding status</title><path class=\\\"person person-left\\\" d=\\\"M6.86 16.05A6.86 6.86 0 0 0 0 22.91v17.77a3.43 3.43 0 0 0 3.43 3.42h6.86a3.42 3.42 0 0 0 3.42-3.42V22.91a6.86 6.86 0 0 0-6.85-6.86zM6.9 13.23A4.93 4.93 0 1 0 2 8.3a4.93 4.93 0 0 0 4.9 4.93z\\\"></path><path class=\\\"person person-middle\\\" d=\\\"M24 16.05a6.86 6.86 0 0 0-6.86 6.86v17.77a3.43 3.43 0 0 0 3.43 3.42h6.86a3.43 3.43 0 0 0 3.43-3.42V22.91A6.86 6.86 0 0 0 24 16.05zM24.05 13.23a4.93 4.93 0 1 0-4.93-4.93 4.93 4.93 0 0 0 4.93 4.93z\\\"></path><path class=\\\"person person-right\\\" d=\\\"M41.14 16.05a6.86 6.86 0 0 0-6.85 6.86v17.77a3.42 3.42 0 0 0 3.42 3.42h6.86A3.43 3.43 0 0 0 48 40.68V22.91a6.86 6.86 0 0 0-6.86-6.86zM41.19 13.23a4.93 4.93 0 1 0-4.93-4.93 4.93 4.93 0 0 0 4.93 4.93z\\\"></path></svg>\""],"sourceRoot":""}