{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./ts/helpers/icon.tsx","webpack:///./static/images/icon-search-reverse-default.svg","webpack:///./static/images/icon-crowding.svg","webpack:///./ts/stop/state.ts","webpack:///./ts/components/Alerts.tsx","webpack:///./ts/models/route.ts","webpack:///./ts/components/FilterButton.tsx","webpack:///./static/images/icon-circle-t-small.svg","webpack:///./ts/helpers/prediction-helpers.tsx","webpack:///./ts/models/alert.ts","webpack:///./static/images/icon-blue-line-small.svg","webpack:///./static/images/icon-mode-subway-small.svg","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/stop/components/StopCard.tsx","webpack:///./ts/stop/components/StopAccessibilityIcon.tsx","webpack:///./ts/components/Direction.tsx","webpack:///./ts/leaflet/components/MapTooltip.tsx","webpack:///./ts/components/Headsign.tsx","webpack:///./ts/components/RouteCardHeader.tsx","webpack:///./js/google-maps-loaded.js","webpack:///./ts/helpers/keyboard-events.ts","webpack:///./ts/helpers/render-svg.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:///./ts/stop-entry.ts","webpack:///./static/images/icon-mode-commuter-rail-small.svg","webpack:///./ts/stop/stop-loader.tsx","webpack:///./ts/stop/components/StopPage.tsx","webpack:///./ts/stop/components/StopMapContainer.tsx","webpack:///./ts/stop/components/StopMap.tsx","webpack:///./ts/stop/components/StopPageHeader.tsx","webpack:///./ts/stop/components/BreadcrumbContainer.tsx","webpack:///./ts/stop/components/Header.tsx","webpack:///./ts/stop/components/Tab.tsx","webpack:///./ts/stop/components/AlertsTab.tsx","webpack:///./ts/stop/components/Sidebar.tsx","webpack:///./static/images/icon-mode-bus-small.svg","webpack:///./ts/stop/components/sidebar/Accessibility.tsx","webpack:///./static/images/icon-accessible-default.svg","webpack:///./ts/stop/components/sidebar/Parking.tsx","webpack:///./static/images/icon-parking-default.svg","webpack:///./ts/stop/components/sidebar/BikeStorage.tsx","webpack:///./static/images/icon-bikes-default.svg","webpack:///./ts/stop/components/sidebar/Fares.tsx","webpack:///./static/images/icon-fares-default.svg","webpack:///./ts/components/Feedback.tsx","webpack:///./ts/stop/components/LocationBlock.tsx","webpack:///./static/images/icon-mode-ferry-small.svg","webpack:///./static/images/icon-street-view-default.svg","webpack:///./ts/stop/components/Departures.tsx","webpack:///./ts/stop/components/RouteCard.tsx","webpack:///./ts/stop/components/SuggestedTransfers.tsx","webpack:///./static/images/icon-alerts-triangle.svg","webpack:///./ts/models/prediction.ts","webpack:///./ts/helpers/text.ts","webpack:///./ts/components/ModeFilter.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/tnm/components/ModeIcon.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"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","8","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","accessibleIcon","className","alertIcon","blueLineIcon","busIcon","commuterRailIcon","ferryIcon","genericSubwayIcon","greenLineIcon","greenBLineIcon","greenCLineIcon","greenDLineIcon","greenELineIcon","mattapanLineIcon","orangeLineIcon","parkingIcon","redLineIcon","silverLineIcon","vehicleArrowIcon","searchIcon","modeIcon","routeId","startsWith","isASilverLineRoute","caret","expanded","unicodeCharacter","dangerouslySetInnerHTML","__html","defaultTooltipOptions","animation","html","placement","trigger","TooltipWrapper","children","tooltipText","tooltipOptions","href","options","assign","Tag","title","crowdingIcon","clickMarkerAction","stopId","type","payload","clickModeAction","clickRoutePillAction","clickTabAction","tab","clickFeaturePillAction","updateRoutesAction","routes","stopReducer","state","action","target","selectedStopId","focusedBlock","undefined","shouldFilterStopCards","modeReducer","selectedTab","selectedModes","includes","filter","existingMode","tabReducer","sidebarReducer","expandedBlocks","id","routesReducer","reducer","reduce","acc","fn","initialState","accessibility","parking","alertClassNames","classNames","iconForAlert","priority","effect","humanLifecycle","lifecycle","humanLabelForAlert","severity","alertLabel","alert","alertClasses","join","effectNameForAlert","split","map","word","charAt","toUpperCase","alertDescription","tabIndex","role","ref","panel","description","Alert","useState","toggleExpanded","onClick","strippedAlertUrl","url","replace","headerContent","header","onKeyPress","e","handleReactEnterKeyPress","noDescription","caretIcon","alerts","isABusRoute","isCommuterRailRouteType","isACommuterRailRoute","routeOrType","isAGreenLineRoute","routeOrRouteId","identifier","icon","isSelected","timeForCommuterRail","delay","prediction","scheduledTime","scheduled_time","time","delayForCommuterRail","statusForCommuterRail","status","isSkippedOrCancelled","trackForCommuterRail","track","isHighSeverityOrHighPriority","isDiversion","alertsByStop","entities","stop","some","uniqueByEffect","index","findIndex","a","withLeadingZero","isCurrentAlert","currentDate","Date","active_period","isInARange","ap","datePattern","match","exec","year","rawMonth","rawDay","rawHour","min","range","start","end","modeBgClass","route","routeToCSSClass","busName","modeNameForBg","RoutePill","breakTextAtSlash","showGroupName","typedRoute","group_name","routeWithDirections","renderDistance","distance","distanceFormatted","miles","Math","floor","routesWithDirection","routesToRender","direction_id","directionId","long_name","destination","direction_destinations","routeNameBasedOnDirection","dispatch","directionIsEmpty","dir","headsigns","Direction","direction","condensed","hideDirectionDestination","direction_names","headsign","routeType","headsignClass","renderTime","tnmTime","headsignName","idx","modifier","classModifier","renderTimeDefault","props","trainName","headsignNameClass","renderHeadsignName","train_number","times","hasAlert","routeBgClass","busClass","callbacks","doWhenGoogleMapsIsReady","callback","isMapReady","setTimeout","mapsCallback","forEach","isEnter","isEscape","handleNativeEnterKeyPress","cb","keyCode","handleNativeEscapeKeyPress","handleReactExitKeyPress","svgText","ariaHide","markers","points","latLng","latitude","latLngBounds","defaultIconOpts","iconAnchor","iconSize","popupAnchor","opts","iconOpts","icon_anchor","icon_size","popup_anchor","Icon","iconUrl","iconRetinaUrl","defaultZoomOpts","maxZoom","minZoom","scrollWheelZoom","style","touchAction","memo","bounds","boundsByMarkers","mapData","defaultCenter","polylines","tileServerUrl","zoom","leaflet","FullscreenControl","getBounds","TileLayer","boundsOrByMarkers","position","longitude","mapCenter","nonNullZoom","center","attribution","polyline","random","positions","color","weight","dashArray","lineCap","lineJoin","marker","icon_opts","markerEl","angle","setRotationAngle","rotateMarker","leafletElement","zIndexOffset","z_index","keyboard","tooltip","maxHeight","toLowerCase","routeToModeName","text","iconSvgText","notifyExpanded","initiallyExpanded","initiallyFocused","panelClassName","preventScroll","focused","hookedState","headerId","panelId","focus","onLoad","stopPageDataEl","document","getElementById","mapDataEl","stopPageData","JSON","parse","innerHTML","mapId","getAttribute","render","encoder","encodeURIComponent","fetchData","fetch","then","response","ok","json","Error","statusText","streetViewUrl","retailLocations","suggestedTransfers","alertsTab","routesAndAlerts","useReducer","highPriorityAlerts","initialData","accumulator","groupedRoutes","concat","address","rel","alt","srcSet","map_srcset","sizes","src","map_url","tabs","zoneNumber","subwayModeIds","doSplitSilverLine","silverLine","bus","iconableRoutesForType","splitSilverLine","modes","typedRoutes","typeAndRoutes","iconableRoutes","modeId","modeByV3ModeType","modeIconFeature","features","crZone","nameUpcaseClass","dispatchOrEmptyFunc","selected","selectedClass","badge","aria_label","timeFilter","currentFilter","initialFilter","initial_selected","changeFilter","empty_message","isExpanded","isFocused","accessibilityNames","tty_phone","escalator_both","escalator_up","escalator_down","ramp","fully_elevated_platform","elevated_subplatform","elevator","portable_boarding_lift","isSpecialCase","maybeRenderBusAccess","accessKnown","Access","access","accessName","formatAccess","renderAccessibilityContact","specialCase","renderSpecialCase","isAccessible","accessibilityKnown","renderAccessibilityLevel","routeGroup","hasBus","hasAccessibilityFeatures","renderFeaturesList","maybeAddLinkPrefix","renderPayment","lot","payment","methods","mobileApp","dailyRate","monthlyRate","mobile","mobileId","renderMobileApp","Lot","utilization","capacity","total","typical","arrive_before","message","renderUtilization","accessible","overnight","renderCapacity","manager","contact","phone","renderManager","note","renderNote","parking_lots","stopOrStation","bikeStorageType","bike_storage_rack","bike_storage_rack_covered","bike_storage_cage","renderStorage","bike_storage","storage","bikeStorage","fareNames","ticket_window","fare_media_assistance_facility","fare_media_assistant","fare_vending_machine","fare_vending_retailer","locationGoogleLink","location","nearbyLocations","locations","loc","retailLocation","facilities","fare_facilities","fareVendingDescription","latLngString","directionLink","locationQuery","streetViewLink","municipality","addressOrMunicipality","availableModes","filteredRoutes","filteredByModes","includesMultipleModes","ModeFilter","isModeSelected","onModeClickAction","modeButtonsToShow","directions","schedule_relationship","hasPredictionTime","timeDataList","time_data","str","0","1","2","3","ModeButton","shouldShowModeButton","icons"],"mappings":"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","file":"./stop-feb285571af018458d7d7acb35c7df31.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(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && 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\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\t8: 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([538,0,1]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\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 48 48\\\"><title>search</title><path fill=\\\"#fff\\\" d=\\\"M27.92 1.002a19.07 19.07 0 11-10.851 34.702L6.754 45.999a3.366 3.366 0 01-4.77-4.75l10.315-10.315A18.899 18.899 0 018.86 20.062a19.115 19.115 0 0119.06-19.06zm0 6.718a12.342 12.342 0 1012.342 12.342A12.287 12.287 0 0027.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 000 22.91v17.77a3.43 3.43 0 003.43 3.42h6.86a3.42 3.42 0 003.42-3.42V22.91a6.86 6.86 0 00-6.85-6.86zM6.9 13.23A4.93 4.93 0 102 8.3a4.93 4.93 0 004.9 4.93z\\\"></path><path class=\\\"person person-middle\\\" d=\\\"M24 16.05a6.86 6.86 0 00-6.86 6.86v17.77a3.43 3.43 0 003.43 3.42h6.86a3.43 3.43 0 003.43-3.42V22.91A6.86 6.86 0 0024 16.05zM24.05 13.23a4.93 4.93 0 10-4.93-4.93 4.93 4.93 0 004.93 4.93z\\\"></path><path class=\\\"person person-right\\\" d=\\\"M41.14 16.05a6.86 6.86 0 00-6.85 6.86v17.77a3.42 3.42 0 003.42 3.42h6.86A3.43 3.43 0 0048 40.68V22.91a6.86 6.86 0 00-6.86-6.86zM41.19 13.23a4.93 4.93 0 10-4.93-4.93 4.93 4.93 0 004.93 4.93z\\\"></path></svg>\"","import { Mode } from \"../__v3api\";\nimport { ClickExpandableBlockAction } from \"../components/ExpandableBlock\";\nimport { TypedRoutes } from \"./components/__stop\";\n\nexport type SelectedStopType = string | null;\nexport type SelectedTabType = string;\nexport type Dispatch = (action: Action) => void;\nexport type ExpandableBlockName = \"parking\" | \"accessibility\";\nexport interface ExpandableBlockState {\n  parking: boolean;\n  accessibility: boolean;\n}\n\nexport interface State {\n  expandedBlocks: ExpandableBlockState;\n  focusedBlock?: ExpandableBlockName;\n  routes: TypedRoutes[];\n  selectedStopId: SelectedStopType;\n  selectedModes: Mode[];\n  shouldFilterStopCards: boolean;\n  selectedTab: string;\n}\n\ntype StopActionType = \"CLICK_MARKER\";\ntype ModeActionType = \"CLICK_MODE_FILTER\";\ntype RoutePillActionType = \"CLICK_ROUTE_PILL\";\ntype TabActionType = \"SWITCH_TAB\";\ntype FeaturePillActionType = \"CLICK_FEATURE_PILL\";\ntype UpdateRoutesType = \"UPDATE_ROUTES\";\n\nexport interface StopAction {\n  type: StopActionType;\n  payload: {\n    stopId: SelectedStopType;\n  };\n}\n\nexport interface ModeAction {\n  type: ModeActionType;\n  payload: {\n    mode: Mode;\n  };\n}\n\nexport interface RoutePillAction {\n  type: RoutePillActionType;\n  payload: {\n    mode: Mode;\n  };\n}\n\nexport interface TabAction {\n  type: TabActionType;\n  payload: {\n    tab: SelectedTabType;\n  };\n}\n\nexport interface FeaturePillAction {\n  type: FeaturePillActionType;\n  payload: {\n    name: ExpandableBlockName;\n  };\n}\nexport interface UpdateRoutesAction {\n  type: UpdateRoutesType;\n  payload: {\n    routes: TypedRoutes[];\n  };\n}\n\ntype Action =\n  | StopAction\n  | ModeAction\n  | RoutePillAction\n  | FeaturePillAction\n  | ClickExpandableBlockAction\n  | UpdateRoutesAction\n  | TabAction;\n\nexport const clickMarkerAction = (stopId: SelectedStopType): StopAction => ({\n  type: \"CLICK_MARKER\",\n  payload: { stopId }\n});\n\nexport const clickModeAction = (mode: Mode): ModeAction => ({\n  type: \"CLICK_MODE_FILTER\",\n  payload: { mode }\n});\n\nexport const clickRoutePillAction = (mode: Mode): RoutePillAction => ({\n  type: \"CLICK_ROUTE_PILL\",\n  payload: { mode }\n});\n\nexport const clickTabAction = (tab: string): TabAction => ({\n  type: \"SWITCH_TAB\",\n  payload: { tab }\n});\n\nexport const clickFeaturePillAction = (\n  name: ExpandableBlockName\n): FeaturePillAction => ({\n  type: \"CLICK_FEATURE_PILL\",\n  payload: { name }\n});\n\nexport const updateRoutesAction = (\n  routes: TypedRoutes[]\n): UpdateRoutesAction => ({\n  type: \"UPDATE_ROUTES\",\n  payload: { routes }\n});\n\nconst stopReducer = (state: State, action: Action): State => {\n  switch (action.type) {\n    case \"CLICK_MARKER\": {\n      const target =\n        state.selectedStopId === action.payload.stopId\n          ? null\n          : action.payload.stopId;\n\n      return {\n        ...state,\n        focusedBlock: undefined,\n        selectedStopId: target,\n        shouldFilterStopCards: !!target\n      };\n    }\n    default:\n      return state;\n  }\n};\n\nconst updateModes = (selectedModes: Mode[], mode: Mode): Mode[] =>\n  selectedModes.includes(mode)\n    ? selectedModes.filter(existingMode => !(existingMode === mode))\n    : [...selectedModes, mode];\n\nconst modeReducer = (state: State, action: Action): State => {\n  switch (action.type) {\n    case \"CLICK_MODE_FILTER\":\n      return {\n        ...state,\n        focusedBlock: undefined,\n        selectedTab: \"info\",\n        selectedModes: updateModes(state.selectedModes, action.payload.mode),\n        shouldFilterStopCards: true\n      };\n\n    case \"CLICK_ROUTE_PILL\":\n      return {\n        ...state,\n        focusedBlock: undefined,\n        selectedTab: \"info\",\n        selectedModes: [action.payload.mode],\n        shouldFilterStopCards: true\n      };\n\n    default:\n      return state;\n  }\n};\n\nconst tabReducer = (state: State, action: Action): State => {\n  switch (action.type) {\n    case \"SWITCH_TAB\":\n      return {\n        ...state,\n        focusedBlock: undefined,\n        selectedTab: action.payload.tab\n      };\n\n    default:\n      return state;\n  }\n};\nconst sidebarReducer = (state: State, action: Action): State => {\n  const { expandedBlocks } = state;\n\n  switch (action.type) {\n    case \"CLICK_FEATURE_PILL\":\n      expandedBlocks[action.payload.name] = true;\n      return {\n        ...state,\n        expandedBlocks,\n        focusedBlock: action.payload.name,\n        selectedTab: \"info\"\n      };\n\n    case \"CLICK_EXPANDABLE_BLOCK\":\n      if (\n        action.payload.id === \"parking\" ||\n        action.payload.id === \"accessibility\"\n      ) {\n        expandedBlocks[action.payload.id] = !action.payload.expanded;\n        return {\n          ...state,\n          expandedBlocks,\n          selectedTab: \"info\"\n        };\n      }\n\n      return state;\n\n    default:\n      return state;\n  }\n};\n\nconst routesReducer = (state: State, action: Action): State => {\n  switch (action.type) {\n    case \"UPDATE_ROUTES\":\n      return {\n        ...state,\n        routes: action.payload.routes\n      };\n\n    default:\n      return state;\n  }\n};\n\nexport const reducer = (state: State, action: Action): State =>\n  [tabReducer, stopReducer, modeReducer, routesReducer, sidebarReducer].reduce(\n    (acc, fn) => fn(acc, action),\n    state\n  );\n\nexport const initialState = (tab: string, routes: TypedRoutes[]): State => ({\n  expandedBlocks: {\n    accessibility: true,\n    parking: false\n  },\n  routes,\n  selectedStopId: null,\n  selectedModes: [],\n  shouldFilterStopCards: false,\n  selectedTab: tab\n});\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\";\n\ntype IsSelectedFunction<T> = (identifier: T) => boolean;\n\ninterface Props<T> {\n  identifier: T;\n  icon: ReactElement<HTMLElement> | string | null;\n  name: string;\n  isSelected: IsSelectedFunction<T>;\n  onClick: (identifier: T) => () => void;\n}\n\n// The second, dummy type parameter below works around a quirk of using\n// generics in TSX files. In a TSX file, if you have a single type parameter\n// in angle brackets like <TypeName>, the compiler will try to interpret that\n// as an opening \"TypeName\" TSX tag. The dummy type parameter keeps the compiler\n// from trying to interpret the type params as a tag.\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst FilterButton = <T, _>({\n  identifier,\n  icon,\n  name,\n  isSelected,\n  onClick\n}: Props<T>): ReactElement<HTMLElement> => (\n  <button\n    className={`btn btn-secondary btn-sm m-tnm-sidebar__filter-btn ${\n      isSelected(identifier) ? \"active\" : \"inactive\"\n    }`}\n    id={`mode-button__${identifier}`}\n    onClick={onClick(identifier)}\n    type=\"button\"\n    aria-label={\n      isSelected(identifier)\n        ? `remove filter by ${identifier}`\n        : `add filter by ${identifier}`\n    }\n  >\n    {icon}\n    {name}\n  </button>\n);\n\nexport default FilterButton;\n","module.exports = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 16 16\\\"><title>T</title><path d=\\\"M8 15.3C4 15.3.7 12 .7 8S4 .7 8 .7 15.3 4 15.3 8 12 15.3 8 15.3\\\" fill=\\\"#fff\\\"></path><g fill=\\\"#1c1e23\\\"><path d=\\\"M8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8m0 15.3C4 15.3.7 12 .7 8S4 .7 8 .7 15.3 4 15.3 8 12 15.3 8 15.3\\\"></path><path d=\\\"M6.7 13.2h2.5V7H13V4.4H2.9V7h3.8v6.2z\\\"></path></g></svg>\"","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\nexport const alertsByStop = (alerts: Alert[], stopId: string): Alert[] =>\n  alerts.filter(\n    ({ informed_entity: entities }: Alert): boolean =>\n      !!entities.stop && entities.stop!.some((id: string) => id === stopId)\n  );\n\nexport const uniqueByEffect = (\n  alert: Alert,\n  index: number,\n  alerts: Alert[]\n): boolean => alerts.findIndex(a => a.effect === alert.effect) === index;\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 16 16\\\"><title>blue line</title><path fill=\\\"#003da5\\\" d=\\\"M8 0a8 8 0 108 8 8 8 0 00-8-8\\\"></path><path fill=\\\"#fff\\\" d=\\\"M5.45 4.25a4.664 4.664 0 01.977.095 2.112 2.112 0 01.756.31 1.443 1.443 0 01.488.572 2.015 2.015 0 01.174.882 1.643 1.643 0 01-.258.946 1.87 1.87 0 01-.761.62 1.803 1.803 0 011.034.698 2.08 2.08 0 01.342 1.203 2.067 2.067 0 01-.22.982 1.915 1.915 0 01-.594.677 2.626 2.626 0 01-.851.389 3.835 3.835 0 01-.982.126H1.92v-7.5zm-.21 3.036a1.186 1.186 0 00.724-.21.793.793 0 00.284-.683.873.873 0 00-.095-.43.703.703 0 00-.252-.263 1.067 1.067 0 00-.362-.132 2.413 2.413 0 00-.425-.036H3.569v1.754zm.094 3.182a2.206 2.206 0 00.462-.047 1.133 1.133 0 00.389-.157.798.798 0 00.268-.3 1.03 1.03 0 00.1-.483.97.97 0 00-.326-.825 1.39 1.39 0 00-.862-.246H3.57v2.058zm5.63-6.218v6.113h3.656v1.387H9.315v-7.5z\\\"></path></svg>\"","module.exports = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 16 16\\\"><title>subway</title><path fill=\\\"#494f5b\\\" d=\\\"M8 0a8 8 0 108 8 8 8 0 00-8-8\\\"></path><g fill=\\\"#fff\\\"><path d=\\\"M6.67 1.41a.57.57 0 01.57-.57.58.58 0 110 1.16h-.02a.577.577 0 01-.55-.59zM12.01 9.84V3.93a1.438 1.438 0 00-1.44-1.43H5.44a1.43 1.43 0 00-1.43 1.43v5.9a1.88 1.88 0 001.53 1.85L4 14h1.02l1.26-1.84h3.46L11 14h1l-1.54-2.32a1.877 1.877 0 001.55-1.84zM7 2.91h2v.84H7zm-.58 8.3a.77.77 0 11.77-.77.77.77 0 01-.77.77zm3.15 0a.77.77 0 110-1.54.77.77 0 110 1.54zm1.44-4.71a.523.523 0 01-.52.52H5.53a.516.516 0 01-.52-.52V4.54a.516.516 0 01.52-.52h4.96a.523.523 0 01.52.52zM8.19 1.41a.578.578 0 01.58-.57.57.57 0 01.57.57.574.574 0 01-.57.59.583.583 0 01-.58-.59z\\\"></path></g></svg>\"","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 0024.015-.09a39.217 39.217 0 00-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 0010.969 48a2.655 2.655 0 002.67-2.625V41.85h20.82v3.525a2.67 2.67 0 005.338 0V41.85h3.152zm-26.734-18h15.66a1.18 1.18 0 110 2.36h-15.66a1.18 1.18 0 110-2.36zm-7.8 17.57L9.943 9.63a1.524 1.524 0 011.525-1.25h25.29a1.513 1.513 0 011.515 1.25l1.525 11.55a1.318 1.318 0 010 .4v.08a1.496 1.496 0 01-1.525 1.49H9.87a1.51 1.51 0 01-1.454-1.57 1.318 1.318 0 010-.4zm2.553 14.41a2.795 2.795 0 112.837-2.8 2.817 2.817 0 01-2.837 2.8zm26.153 0a2.795 2.795 0 112.848-2.8 2.817 2.817 0 01-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 01.71.29l13.28 13.28a1.05 1.05 0 01.29.71V33.2a1 1 0 01-.28.69l-13.29 13.8a1 1 0 01-.72.31H14.28a1.05 1.05 0 01-.71-.29L.29 34.43a1.05 1.05 0 01-.29-.71V14.8a1 1 0 01.28-.69L13.57.31a1 1 0 01.72-.31z\\\"></path><path fill=\\\"#fff\\\" d=\\\"M12.28 15.76l3.43-3.47a1 1 0 011.39 0l6.9 6.84 6.89-6.84a1 1 0 011.4 0l3.43 3.47a1 1 0 010 1.39L28.81 24l6.9 7a1 1 0 010 1.4l-3.4 3.33a1 1 0 01-1.39 0l-6.91-7-6.91 7a1 1 0 01-1.39 0l-3.4-3.33a1 1 0 010-1.4l6.9-7-6.9-6.85a1 1 0 01-.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 0011 6.5L5.92 7.87a1 1 0 00-.69 1.21l1 3.95-3.89 1.06a1 1 0 00-.69 1.22L3 20.4a1 1 0 001.2.7l6.12-1.66 6.35 3.7-5.78 3.37-7.19-1.94a1 1 0 00-1.2.7l-1.35 5.09a1 1 0 00.69 1.21l4.44 1.2-1.22 4.6a1 1 0 00.69 1.21L10.8 40a1 1 0 001.2-.7l1.58-5.94 6.69-3.89v7.71l-5.33 5.32a1 1 0 000 1.4l3.7 3.73a1 1 0 001.39 0L23.61 44l3.67 3.7a1 1 0 001.39 0l3.7-3.7a1 1 0 000-1.39l-4.92-5v-8.19l7.29 4.24 1.49 5.59a1 1 0 001.2.7l5-1.37a1 1 0 00.7-1.21l-1.24-4.66 4.23-1.14a1 1 0 00.7-1.21l-1.32-5.09a1 1 0 00-1.2-.7l-7.38 2-5.87-3.42 6.63-3.86 6.73 1.82a1 1 0 001.2-.7l1.39-5.1a1 1 0 00-.7-1.22l-4-1.07 1.05-3.94a1 1 0 00-.69-1.21l-5-1.37a1 1 0 00-1.2.7L35 12.47l-7.55 4.4V10.7l4.92-4.95a1 1 0 000-1.4L28.67.63a1 1 0 00-1.39 0l-3.52 3.55L20 .41a1 1 0 00-1.39 0l-3.7 3.73a1 1 0 000 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 React, { ReactElement } from \"react\";\nimport { Stop, EnhancedRoute, DirectionId } from \"../../__v3api\";\nimport { RouteWithDirection } from \"./__stop\";\nimport { modeIcon } from \"../../helpers/icon\";\nimport { isABusRoute } from \"../../models/route\";\nimport accessible from \"./StopAccessibilityIcon\";\n\nconst formatMilesToFeet = (miles: number): number => Math.floor(miles * 5280.0);\n\nconst routeNameBasedOnDirection = (\n  route: EnhancedRoute,\n  directionId: DirectionId | null\n): string => {\n  if (directionId === null || route.type !== 3) {\n    return route.long_name;\n  }\n\n  const destination = route.direction_destinations[directionId];\n  return destination === null ? route.long_name : destination;\n};\n\ninterface Props {\n  stop: Stop;\n  routesWithDirection?: RouteWithDirection[];\n  routes?: EnhancedRoute[];\n  distance?: number;\n  distanceFormatted?: string;\n}\n\nconst renderDistance = (\n  distance: number | undefined,\n  distanceFormatted: string | undefined\n): ReactElement<HTMLElement> | null => {\n  if (distance) {\n    return (\n      <span className=\"c-stop-card__distance\">\n        {formatMilesToFeet(distance)} ft\n      </span>\n    );\n  }\n  if (distanceFormatted) {\n    return <span className=\"c-stop-card__distance\">{distanceFormatted}</span>;\n  }\n  return null;\n};\n\nconst StopCard = ({\n  stop,\n  distance,\n  distanceFormatted,\n  routesWithDirection = [],\n  routes = []\n}: Props): ReactElement<HTMLElement> => {\n  const routesToRender =\n    routesWithDirection.length === 0 && routes.length > 0\n      ? routes.map(route => ({\n          route,\n          // eslint-disable-next-line camelcase\n          direction_id: null\n        }))\n      : routesWithDirection;\n\n  return (\n    <div className=\"c-stop-card\">\n      {renderDistance(distance, distanceFormatted)}\n      <a className=\"c-stop-card__stop-name\" href={`/stops/${stop.id}`}>\n        {stop.name}\n      </a>\n      {accessible(stop)}\n      {routesToRender &&\n        routesToRender.map(({ route, direction_id: directionId }) => (\n          <div\n            className=\"c-stop-card__route\"\n            key={`suggestedTransferRoute${route.id}`}\n          >\n            {isABusRoute(route) && !route.name.startsWith(\"SL\") ? (\n              <div className=\"c-stop-card__bus-pill u-bg--bus u-small-class\">\n                {route.name}\n              </div>\n            ) : (\n              modeIcon(route.id)\n            )}\n            <a\n              href={`/schedules/${route.id}${\n                directionId !== null ? `?direction_id=${directionId}` : \"\"\n              }`}\n              className=\"c-stop-card__route-link\"\n            >\n              {routeNameBasedOnDirection(route, directionId)}\n            </a>\n          </div>\n        ))}\n    </div>\n  );\n};\n\nexport default StopCard;\n","import React, { ReactElement } from \"react\";\nimport { Stop } from \"../../__v3api\";\nimport { accessibleIcon } from \"../../helpers/icon\";\nimport { Dispatch, clickFeaturePillAction } from \"../state\";\n\nexport default (\n  { accessibility }: Stop,\n  dispatch?: Dispatch\n): ReactElement<HTMLElement> | false =>\n  accessibility.includes(\"accessible\") && (\n    <a\n      className=\"m-stop-page__access-icon\"\n      href=\"#header-accessibility\"\n      onClick={() =>\n        dispatch && dispatch(clickFeaturePillAction(\"accessibility\"))\n      }\n    >\n      <span className=\"m-stop-page__icon\">\n        {accessibleIcon(\"c-svg__icon-accessible-default\")}\n      </span>\n    </a>\n  );\n","import React, { ReactElement } from \"react\";\nimport Headsign from \"./Headsign\";\nimport { Direction as DirectionType, EnhancedRoute } from \"../__v3api\";\n\ninterface Props {\n  direction: DirectionType;\n  route: EnhancedRoute;\n}\n\nexport const directionIsEmpty = (dir: DirectionType): boolean =>\n  dir.headsigns.length === 0;\n\nexport const Direction = ({\n  direction,\n  route\n}: Props): ReactElement<HTMLElement> | null => {\n  if (directionIsEmpty(direction)) {\n    return null;\n  }\n\n  const condensed = direction.headsigns.length === 1;\n\n  const hideDirectionDestination =\n    condensed || route.type === 0 || route.type === 1 || route.type === 2;\n\n  return (\n    <div className=\"m-tnm-sidebar__direction\">\n      <div className=\"m-tnm-sidebar__direction-name u-small-caps\">\n        {route.direction_names[direction.direction_id]}\n      </div>\n      {!hideDirectionDestination && (\n        <div className=\"m-tnm-sidebar__direction-destination\">\n          {route.direction_destinations[direction.direction_id]}\n        </div>\n      )}\n      <div className=\"m-tnm-sidebar__direction-headsigns\">\n        {direction.headsigns.map(headsign => (\n          <Headsign\n            key={headsign.name}\n            headsign={headsign}\n            routeType={route.type}\n            condensed={condensed}\n          />\n        ))}\n      </div>\n    </div>\n  );\n};\n\nexport default Direction;\n","import React, { ReactElement } from \"react\";\nimport { Stop, EnhancedRoute } from \"../../__v3api\";\nimport StopCard from \"../../stop/components/StopCard\";\nimport { RouteWithDirection } from \"../../stop/components/__stop\";\n\nexport interface Props {\n  stop: Stop;\n  routesWithDirection?: RouteWithDirection[];\n  routes: EnhancedRoute[];\n  distanceFormatted?: string;\n}\n\nconst MapTooltip = ({\n  stop,\n  routesWithDirection,\n  routes,\n  distanceFormatted\n}: Props): ReactElement<HTMLElement> => (\n  <StopCard\n    routes={routes}\n    routesWithDirection={routesWithDirection}\n    stop={stop}\n    distanceFormatted={distanceFormatted}\n  />\n);\n\nexport default MapTooltip;\n","import React, { ReactElement } from \"react\";\nimport { RouteType, PredictedOrScheduledTime, Headsign } from \"../__v3api\";\nimport {\n  timeForCommuterRail,\n  statusForCommuterRail,\n  trackForCommuterRail\n} from \"../helpers/prediction-helpers\";\n\ninterface Props {\n  headsign: Headsign;\n  routeType: RouteType;\n  condensed: boolean;\n}\n\nconst headsignClass = (condensed: boolean): string => {\n  if (condensed === true) {\n    return \"m-tnm-sidebar__headsign-schedule m-tnm-sidebar__headsign-schedule--condensed\";\n  }\n  return \"m-tnm-sidebar__headsign-schedule\";\n};\n\nconst renderHeadsignName = ({\n  headsign,\n  routeType,\n  condensed\n}: Props): ReactElement<HTMLElement> => {\n  const modifier = !condensed && routeType === 3 ? \"small\" : \"large\";\n\n  const headsignNameClass = `m-tnm-sidebar__headsign-name m-tnm-sidebar__headsign-name--${modifier}`;\n\n  const headsignName = headsign.headsign || headsign.name;\n  if (headsignName && headsignName.includes(\" via \")) {\n    const split = headsignName.split(\" via \");\n    return (\n      <>\n        <div className={headsignNameClass}>{split[0]}</div>\n        <div className=\"m-tnm-sidebar__via\">{`via ${split[1]}`}</div>\n      </>\n    );\n  }\n  return <div className={headsignNameClass}>{headsignName}</div>;\n};\n\nconst renderTrainName = (trainName: string): ReactElement<HTMLElement> => (\n  <div className=\"m-tnm-sidebar__headsign-train\">{trainName}</div>\n);\n\nconst renderTimeCommuterRail = (\n  data: PredictedOrScheduledTime,\n  modifier: string\n): ReactElement<HTMLElement> => {\n  const status = statusForCommuterRail(data) || \"\";\n  return (\n    <div\n      className={`m-tnm-sidebar__time m-tnm-sidebar__time--commuter-rail ${modifier} ${\n        status === \"Scheduled\" ? \"text-muted\" : \"\"\n      }`}\n    >\n      {timeForCommuterRail(\n        data,\n        `${\n          status === \"Canceled\" ? \"strikethrough\" : \"\"\n        } m-tnm-sidebar__time-number`\n      )}\n      <div className=\"m-tnm-sidebar__status\">\n        {`${status}${trackForCommuterRail(data)}`}\n      </div>\n    </div>\n  );\n};\n\nconst renderTimeDefault = (\n  time: string[],\n  modifier: string\n): ReactElement<HTMLElement> => (\n  <div className={`m-tnm-sidebar__time ${modifier}`}>\n    <div className=\"m-tnm-sidebar__time-number\">{time[0]}</div>\n    <div className=\"m-tnm-sidebar__time-mins\">{time[2]}</div>\n  </div>\n);\n\nconst renderTime = (\n  tnmTime: PredictedOrScheduledTime,\n  headsignName: string,\n  routeType: RouteType,\n  idx: number\n): ReactElement<HTMLElement> => {\n  // eslint-disable-next-line camelcase\n  const { prediction, scheduled_time } = tnmTime;\n  // eslint-disable-next-line camelcase\n  const time = prediction ? prediction.time : scheduled_time!;\n\n  const classModifier =\n    !prediction && [0, 1, 3].includes(routeType)\n      ? \"m-tnm-sidebar__time--schedule\"\n      : \"\";\n\n  return (\n    <div\n      // eslint-disable-next-line camelcase\n      key={`${headsignName}-${idx}`}\n      className=\"m-tnm-sidebar__schedule\"\n    >\n      {routeType === 2\n        ? renderTimeCommuterRail(tnmTime, classModifier)\n        : renderTimeDefault(time, classModifier)}\n    </div>\n  );\n};\n\nconst HeadsignComponent = (props: Props): ReactElement<HTMLElement> => {\n  const { headsign, routeType, condensed } = props;\n  return (\n    <div className={headsignClass(condensed)}>\n      <div className=\"m-tnm-sidebar__headsign\">\n        {renderHeadsignName(props)}\n\n        {routeType === 2 && renderTrainName(`Train ${headsign.train_number}`)}\n      </div>\n      <div className=\"m-tnm-sidebar__schedules\">\n        {headsign.times.map((time, idx) => {\n          if (routeType === 2 && idx > 0) return null; // limit to 1 headsign\n          return renderTime(time, headsign.name, routeType, idx);\n        })}\n      </div>\n    </div>\n  );\n};\n\nexport default HeadsignComponent;\n","import React, { ReactElement } from \"react\";\nimport { EnhancedRoute } from \"../__v3api\";\nimport { routeBgClass, busClass } from \"../helpers/css\";\nimport { isASilverLineRoute } from \"../models/route\";\nimport { alertIcon } from \"../helpers/icon\";\nimport { breakTextAtSlash } from \"../helpers/text\";\n\nconst RouteCardHeader = ({\n  route,\n  hasAlert\n}: {\n  route: EnhancedRoute;\n  hasAlert?: boolean;\n}): ReactElement<HTMLElement> => (\n  <div\n    className={`c-link-block h3 m-tnm-sidebar__route-name ${routeBgClass(\n      route\n    )}`}\n  >\n    <a className=\"c-link-block__outer-link\" href={`/schedules/${route.id}`}>\n      <span className=\"sr-only\">Go to route</span>\n    </a>\n    <div className=\"c-link-block__inner\">\n      <span className={busClass(route)}>\n        {isASilverLineRoute(route.id)\n          ? `Silver Line ${route.name}`\n          : breakTextAtSlash(route.name)}\n      </span>\n      {hasAlert && (\n        <a\n          className=\"c-link-block__inner-link\"\n          href={`/schedules/${route.id}/alerts`}\n          title=\"alert\"\n        >\n          {alertIcon(\"c-svg__icon-alerts-triangle m-tnm-sidebar__route-alert\")}\n        </a>\n      )}\n    </div>\n  </div>\n);\n\nexport default RouteCardHeader;\n","let callbacks = [];\n\nexport default function() {\n  callbacks = [];\n  window.mapsCallback = function() {\n    window.isMapReady = true;\n    callbacks.forEach(callback => callback());\n    callbacks = [];\n  };\n}\n\nexport function doWhenGoogleMapsIsReady(callback) {\n  // If the map is not ready, add it to an array of callback that will get called soon.\n  // If the map is ready, call the callback, but with a timeout.\n  // The reason for the timeout is so that this function works similar in both cases -- always with a delay, never\n  // immediately.\n  window.isMapReady ? window.setTimeout(callback, 0) : callbacks.push(callback);\n}\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 { 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 108 8 8 8 0 00-8-8\\\"></path><g fill=\\\"#fff\\\"><path d=\\\"M6.083 11.534a2.638 2.638 0 01-1.034.216 3.677 3.677 0 01-1.48-.286 3.181 3.181 0 01-1.11-.789 3.488 3.488 0 01-.693-1.18 4.327 4.327 0 01-.241-1.46 4.474 4.474 0 01.241-1.49 3.592 3.592 0 01.692-1.2 3.18 3.18 0 011.11-.804 3.62 3.62 0 011.48-.291 3.49 3.49 0 011.07.166 3.037 3.037 0 01.934.486 2.631 2.631 0 011.02 1.878H6.564a1.51 1.51 0 00-.542-.903 1.578 1.578 0 00-.974-.302 1.84 1.84 0 00-.903.206 1.706 1.706 0 00-.603.552 2.428 2.428 0 00-.337.788 3.96 3.96 0 00-.105.914 3.683 3.683 0 00.105.879 2.378 2.378 0 00.337.768 1.723 1.723 0 00.603.547 1.835 1.835 0 00.903.206 1.711 1.711 0 001.21-.397 1.725 1.725 0 00.497-1.15H5.169V7.715h3.012v3.875H7.177l-.16-.813a2.357 2.357 0 01-.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 108 8 8 8 0 00-8-8\\\"></path><g fill=\\\"#fff\\\"><path d=\\\"M6.015 4.25a2.397 2.397 0 01.909.163 2.097 2.097 0 01.694.446 1.935 1.935 0 01.44.657 2.098 2.098 0 01.153.803 2.262 2.262 0 01-.278 1.145 1.747 1.747 0 01-.91.735v.022a1.265 1.265 0 01.505.257 1.421 1.421 0 01.325.41 1.912 1.912 0 01.184.52 4.563 4.563 0 01.08.567l.02.42c.007.161.02.326.037.493a3.412 3.412 0 00.084.478 1.113 1.113 0 00.174.384h-1.65a2.914 2.914 0 01-.168-.851 12.616 12.616 0 00-.095-.945 1.5 1.5 0 00-.356-.862 1.233 1.233 0 00-.893-.273H3.62v2.931H1.971v-7.5zm-.587 3.392a1.247 1.247 0 00.85-.251 1.045 1.045 0 00.284-.82.998.998 0 00-.284-.793 1.264 1.264 0 00-.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 108 8 8 8 0 00-8-8\\\"></path><g fill=\\\"#fff\\\"><path d=\\\"M1.818 6.544a3.592 3.592 0 01.693-1.2 3.18 3.18 0 011.11-.803A3.62 3.62 0 015.1 4.25a3.613 3.613 0 011.486.291 3.175 3.175 0 011.104.803 3.594 3.594 0 01.693 1.2 4.474 4.474 0 01.242 1.491 4.327 4.327 0 01-.242 1.46 3.49 3.49 0 01-.693 1.18 3.176 3.176 0 01-1.104.789 3.67 3.67 0 01-1.486.286 3.677 3.677 0 01-1.48-.286 3.181 3.181 0 01-1.11-.789 3.488 3.488 0 01-.693-1.18 4.327 4.327 0 01-.24-1.46 4.474 4.474 0 01.24-1.49zm1.44 2.37a2.377 2.377 0 00.337.768 1.723 1.723 0 00.603.547 1.835 1.835 0 00.903.206 1.842 1.842 0 00.904-.206 1.729 1.729 0 00.602-.547 2.357 2.357 0 00.336-.768 3.634 3.634 0 00.106-.879 3.907 3.907 0 00-.106-.914 2.407 2.407 0 00-.336-.788 1.711 1.711 0 00-.602-.552 1.847 1.847 0 00-.904-.206 1.84 1.84 0 00-.903.206 1.706 1.706 0 00-.603.552 2.428 2.428 0 00-.336.788 3.96 3.96 0 00-.105.914 3.683 3.683 0 00.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 108 8 8 8 0 00-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>\"","import googleMapsLoaded from \"../js/google-maps-loaded\";\nimport stop from \"./stop/stop-loader\";\n\ngoogleMapsLoaded();\nstop();\n","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 00.342 10.376a7.784 7.784 0 005.282 5.282A8.008 8.008 0 108 0\\\"></path><g fill=\\\"#fff\\\"><path d=\\\"M10.33 11.75l1.15-.85a1.47 1.47 0 00.52-.84V5.24a.889.889 0 00-.3-.66.793.793 0 01-.31-.6l-.01-1.19a.82.82 0 00-.65-.79 20.918 20.918 0 00-2.5-.52 1.065 1.065 0 00-.47 0c-.7.15-1.55.3-2.24.48-.42.12-.85.35-.85.85v1.18a.803.803 0 01-.33.61.851.851 0 00-.31.66v4.8a1.41 1.41 0 00.48.84l1.1.81-1.74 2.84H5l.24-.39h5.53l.13.22.02.03.08.14h1.05zm.95-2.3a.73.73 0 11-.73-.73.728.728 0 01.73.73zM9.84 12.6H6.19l.41-.68h2.84l.03.06.35.58zM8.7 2.95a.245.245 0 01.3-.24l1.21.25a.254.254 0 01.2.24v.73a.25.25 0 01-.3.24L8.9 3.93a.238.238 0 01-.2-.24zm-.72 2.26a.82.82 0 11-.82.82.824.824 0 01.82-.82zM5.66 3.2a.254.254 0 01.2-.24l1.21-.25a.249.249 0 01.3.24v.74a.247.247 0 01-.2.24l-1.22.24a.246.246 0 01-.29-.24zm-.2 6.98a.73.73 0 11.73-.73.728.728 0 01-.73.73zm0 3.61l.5-.82h4.1l.49.82z\\\"></path><path d=\\\"M11 14.55h-.01l-.07-.14z\\\"></path></g></svg>\"","import React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport StopPage from \"./components/StopPage\";\nimport { StopPageData, StopMapData } from \"./components/__stop\";\n\nconst render = (): void => {\n  const stopPageDataEl = document.getElementById(\"js-stop-page-data\");\n  const mapDataEl = document.getElementById(\"js-stop-map-data\");\n  if (!stopPageDataEl || !mapDataEl) return;\n  const stopPageData = JSON.parse(stopPageDataEl.innerHTML) as StopPageData;\n  const mapId = stopPageDataEl.getAttribute(\"data-for\") as string;\n  const mapData = JSON.parse(mapDataEl.innerHTML) as StopMapData;\n  ReactDOM.render(\n    <StopPage\n      stopPageData={stopPageData}\n      mapId={mapId}\n      mapData={mapData}\n      encoder={window.encodeURIComponent}\n    />,\n    document.getElementById(\"react-root\")\n  );\n};\n\nexport const onLoad = (): void => {\n  render();\n};\n\nexport default onLoad;\n","import React, { ReactElement, useReducer } from \"react\";\nimport useInterval from \"use-interval\";\nimport StopMapContainer from \"./StopMapContainer\";\nimport { StopPageData, StopMapData, TypedRoutes } from \"./__stop\";\nimport { EnhancedRoute } from \"../../__v3api\";\nimport StopPageHeader from \"./StopPageHeader\";\nimport { reducer, initialState, Dispatch, updateRoutesAction } from \"../state\";\nimport Alerts from \"../../components/Alerts\";\nimport AlertsTab from \"./AlertsTab\";\nimport Sidebar from \"./Sidebar\";\nimport LocationBlock from \"./LocationBlock\";\nimport Departures from \"./Departures\";\nimport SuggestedTransfers from \"./SuggestedTransfers\";\nimport { isHighSeverityOrHighPriority } from \"../../models/alert\";\n\ninterface Props {\n  stopPageData: StopPageData;\n  mapData: StopMapData;\n  mapId: string;\n  encoder?: (component: string) => string;\n}\n\nexport const fetchData = (stopId: string, dispatch: Dispatch): Promise<void> =>\n  window.fetch &&\n  window\n    .fetch(`/stops/api?id=${stopId}`)\n    .then((response: Response) => {\n      if (response.ok) return response.json();\n      throw new Error(response.statusText);\n    })\n    .then((routes: TypedRoutes[]) => dispatch(updateRoutesAction(routes)))\n    .catch(() => {});\n\nexport default ({\n  stopPageData,\n  mapData,\n  mapId,\n  encoder\n}: Props): ReactElement<HTMLElement> => {\n  const {\n    stop,\n    street_view_url: streetViewUrl,\n    routes,\n    // eslint-disable-next-line camelcase\n    routes_with_direction: routesWithDirection,\n    // eslint-disable-next-line camelcase\n    retail_locations: retailLocations,\n    // eslint-disable-next-line camelcase\n    suggested_transfers: suggestedTransfers,\n    alerts,\n    alerts_tab: alertsTab,\n    routes_and_alerts: routesAndAlerts,\n    tab\n  } = stopPageData;\n\n  const [state, dispatch] = useReducer(reducer, initialState(tab, routes));\n\n  useInterval(() => {\n    // temporarily disabled while we debug CPU issues\n    // fetchData(stop.id, dispatch);\n  }, 15000);\n\n  const highPriorityAlerts = alerts.filter(isHighSeverityOrHighPriority);\n\n  return (\n    <>\n      <StopPageHeader\n        stopPageData={stopPageData}\n        dispatch={dispatch}\n        selectedTab={state.selectedTab}\n      />\n      {state.selectedTab === \"alerts\" ? (\n        <AlertsTab alertsTab={alertsTab} />\n      ) : (\n        <>\n          <Alerts alerts={highPriorityAlerts} />\n          <div className=\"container\">\n            <h2>Station Information</h2>\n            <p>\n              See upcoming departures, maps, and other features at this\n              location.\n            </p>\n          </div>\n          <div className=\"m-stop-page__hero\">\n            <StopMapContainer\n              initialData={mapData}\n              mapId={mapId}\n              stop={stop}\n              routes={routes.reduce(\n                (\n                  accumulator: EnhancedRoute[],\n                  groupedRoutes: TypedRoutes\n                ): EnhancedRoute[] =>\n                  accumulator.concat(\n                    groupedRoutes.routes.map(typedRoute => typedRoute.route)\n                  ),\n                []\n              )}\n              routesWithDirection={routesWithDirection}\n            />\n            <div className=\"m-stop-page__hero-photo\" />\n          </div>\n          <div className=\"container\">\n            <div className=\"page-section\">\n              <div className=\"row\">\n                <div className=\"col-12 col-sm-10 col-sm-offset-1 col-lg-7 col-lg-offset-0\">\n                  <LocationBlock\n                    stop={stop}\n                    routes={routes}\n                    encoder={encoder}\n                    streetViewUrl={streetViewUrl}\n                  />\n                  <Departures\n                    routes={state.routes}\n                    routesAndAlerts={routesAndAlerts}\n                    stop={stop}\n                    selectedModes={state.selectedModes}\n                    dispatch={dispatch}\n                  />\n                  <SuggestedTransfers suggestedTransfers={suggestedTransfers} />\n                </div>\n                <div className=\"col-12 col-sm-10 col-sm-offset-1 col-lg-4 col-lg-offset-1\">\n                  <Sidebar\n                    dispatch={dispatch}\n                    expandedBlocks={state.expandedBlocks}\n                    focusedBlock={state.focusedBlock}\n                    stop={stop}\n                    routes={routes}\n                    retailLocations={retailLocations}\n                  />\n                </div>\n              </div>\n            </div>\n          </div>\n        </>\n      )}\n    </>\n  );\n};\n","import React, { ReactElement } from \"react\";\nimport StopMap from \"./StopMap\";\nimport { Stop, EnhancedRoute } from \"../../__v3api\";\nimport { StopMapData, RouteWithDirection } from \"../components/__stop\";\n\ninterface Props {\n  initialData: StopMapData;\n  mapId: string;\n  stop: Stop;\n  routesWithDirection?: RouteWithDirection[];\n  routes: EnhancedRoute[];\n}\n\nconst StopMapContainer = ({\n  initialData,\n  mapId,\n  stop,\n  routesWithDirection,\n  routes\n}: Props): ReactElement<HTMLElement> => (\n  <div className=\"m-stop-page__hero-map\">\n    <h3 className=\"sr-only\">Map</h3>\n    <div\n      id={mapId}\n      role=\"application\"\n      aria-label=\"Map with stop\"\n      className=\"m-stop-page__hero-map-container\"\n    >\n      <noscript>\n        <div className=\"m-stop-page__hero-map-container\">\n          <a\n            href={`https://maps.google.com/?q=${stop.address}`}\n            rel=\"noopener noreferrer\"\n            target=\"_blank\"\n          >\n            <img\n              className=\"map-static map-static-img\"\n              alt={`Map of ${stop.name} and surrounding area`}\n              srcSet={initialData.map_srcset}\n              sizes=\"(min-width: 1344px) 1099w,\n        (min-width: 1088px) 734w,\n        (min-width: 800px) 694w,\n        calc(100vw - 1.5rem)\"\n              src={initialData.map_url}\n            />\n          </a>\n        </div>\n      </noscript>\n\n      <StopMap\n        initialData={initialData}\n        stop={stop}\n        routes={routes}\n        routesWithDirection={routesWithDirection}\n      />\n    </div>\n  </div>\n);\n\nexport default StopMapContainer;\n","import React, { ReactElement } from \"react\";\nimport { StopMapData, RouteWithDirection } from \"./__stop\";\nimport Map from \"../../leaflet/components/Map\";\nimport MapTooltip from \"../../leaflet/components/MapTooltip\";\nimport { EnhancedRoute, Stop } from \"../../__v3api\";\n\ninterface Props {\n  initialData: StopMapData;\n  stop: Stop;\n  routesWithDirection?: RouteWithDirection[];\n  routes: EnhancedRoute[];\n}\n\nexport default ({\n  // eslint-disable-next-line camelcase\n  initialData: { map_data: mapData },\n  stop,\n  routes,\n  routesWithDirection\n}: Props): ReactElement<HTMLElement> => (\n  <Map\n    mapData={{\n      ...mapData,\n      zoom: mapData.zoom || 12,\n      markers: mapData.markers.map(marker => ({\n        ...marker,\n        tooltip: (\n          <MapTooltip\n            stop={stop}\n            routes={routes}\n            routesWithDirection={routesWithDirection}\n          />\n        )\n      }))\n    }}\n  />\n);\n","import React, { ReactElement } from \"react\";\nimport { StopPageData } from \"./__stop\";\nimport BreadcrumbContainer from \"./BreadcrumbContainer\";\nimport Header from \"./Header\";\nimport { Dispatch } from \"../state\";\n\ninterface Props {\n  stopPageData: StopPageData;\n  selectedTab: string;\n  dispatch: Dispatch;\n}\n\nexport default ({\n  stopPageData: { stop, routes, tabs, zone_number: zoneNumber },\n  selectedTab,\n  dispatch\n}: Props): ReactElement<HTMLElement> => (\n  <>\n    <BreadcrumbContainer stop={stop} />\n    <Header\n      dispatch={dispatch}\n      stop={stop}\n      routes={routes}\n      zoneNumber={zoneNumber}\n      tabs={tabs}\n      selectedTab={selectedTab}\n    />\n  </>\n);\n","import React, { ReactElement } from \"react\";\nimport { Stop } from \"../../__v3api\";\n\ninterface Props {\n  stop: Stop;\n}\n\nconst BreadcrumbContainer = ({ stop }: Props): ReactElement<HTMLElement> => (\n  <div className=\"breadcrumb-container\">\n    <div className=\"container\">\n      <span className=\"focusable-sm-down\">\n        <a href=\"/\">Home</a>\n        <i className=\"fa fa-angle-right\" aria-hidden=\"true\" />\n      </span>\n      <span>\n        <a href=\"/stops/subway\">Stations</a>\n        <i className=\"fa fa-angle-right\" aria-hidden=\"true\" />\n      </span>\n      {stop.name}\n    </div>\n  </div>\n);\n\nexport default BreadcrumbContainer;\n","import React, { ReactElement } from \"react\";\nimport { Stop, EnhancedRoute } from \"../../__v3api\";\nimport TabComponent from \"./Tab\";\nimport { Tab, TypedRoutes, RouteWithDirections } from \"./__stop\";\nimport { parkingIcon, modeIcon } from \"../../helpers/icon\";\nimport { isASilverLineRoute } from \"../../models/route\";\nimport accessible from \"./StopAccessibilityIcon\";\nimport {\n  Dispatch,\n  clickRoutePillAction,\n  clickFeaturePillAction\n} from \"../state\";\nimport { modeByV3ModeType } from \"../../components/ModeFilter\";\n\ninterface Props {\n  stop: Stop;\n  routes: TypedRoutes[];\n  tabs: Tab[];\n  zoneNumber: string;\n  dispatch: Dispatch | undefined;\n  selectedTab: string;\n}\n\nconst subwayModeIds = [\n  \"Blue\",\n  \"Green\",\n  \"Green-B\",\n  \"Green-C\",\n  \"Green-D\",\n  \"Green-E\",\n  \"Mattapan\",\n  \"Orange\",\n  \"Red\"\n];\n\nconst parking = (\n  { parking_lots: parkingLots }: Stop,\n  dispatch?: Dispatch\n): ReactElement<HTMLElement> | false =>\n  parkingLots.length > 0 && (\n    <a\n      className=\"m-stop-page__header-feature\"\n      href=\"#header-parking\"\n      onClick={() => dispatch && dispatch(clickFeaturePillAction(\"parking\"))}\n    >\n      <span className=\"m-stop-page__icon\">\n        {parkingIcon(\"c-svg__icon-parking-default\")}\n      </span>\n    </a>\n  );\n\nconst modeType = (modeId: string): string => {\n  if (modeId.startsWith(\"CR-\")) return \"CR\";\n\n  if (subwayModeIds.includes(modeId)) return modeId;\n\n  return \"Bus\";\n};\n\nconst modeIconFeature = (\n  { id, type }: EnhancedRoute,\n  dispatch: Dispatch\n): ReactElement<HTMLElement> => (\n  <a\n    href=\"#route-card-list\"\n    onClick={() => dispatch(clickRoutePillAction(modeByV3ModeType[type]))}\n    key={modeType(id)}\n    className=\"m-stop-page__header-feature\"\n  >\n    <span className=\"m-stop-page__icon\">{modeIcon(id)}</span>\n  </a>\n);\n\ninterface BusRoutesAcc {\n  bus: RouteWithDirections[];\n  silverLine: RouteWithDirections[];\n}\n\nconst doSplitSilverLine = (\n  acc: BusRoutesAcc,\n  route: RouteWithDirections\n): BusRoutesAcc =>\n  isASilverLineRoute(route.route.id)\n    ? { ...acc, silverLine: acc.silverLine.concat([route]) }\n    : { ...acc, bus: acc.bus.concat([route]) };\n\nconst splitSilverLine = (\n  routes: RouteWithDirections[]\n): RouteWithDirections[] => {\n  const acc: BusRoutesAcc = { bus: [], silverLine: [] };\n  const { bus, silverLine } = routes.reduce(doSplitSilverLine, acc);\n  return bus.slice(0, 1).concat(silverLine.slice(0, 1));\n};\n\nconst iconableRoutesForType = ({\n  // eslint-disable-next-line camelcase\n  group_name,\n  routes\n}: TypedRoutes): RouteWithDirections[] => {\n  // eslint-disable-next-line camelcase\n  if (group_name === \"subway\") return routes;\n\n  // eslint-disable-next-line camelcase\n  if (group_name === \"bus\") return splitSilverLine(routes);\n\n  return routes.length ? [routes[0]] : [];\n};\n\nconst iconableRoutes = (typedRoutes: TypedRoutes[]): RouteWithDirections[] =>\n  typedRoutes.reduce(\n    (acc: RouteWithDirections[], typeAndRoutes: TypedRoutes) =>\n      acc.concat(iconableRoutesForType(typeAndRoutes)),\n    []\n  );\n\nconst modes = (\n  typedRoutes: TypedRoutes[],\n  dispatch: Dispatch\n): ReactElement<HTMLElement> | null => (\n  <>\n    {iconableRoutes(typedRoutes).map(({ route }) =>\n      modeIconFeature(route, dispatch)\n    )}\n  </>\n);\n\nconst crZone = (\n  zoneNumber: string,\n  dispatch: Dispatch\n): ReactElement<HTMLElement> | false =>\n  !!zoneNumber &&\n  zoneNumber.length > 0 && (\n    <a\n      href=\"#route-card-list\"\n      onClick={() => dispatch(clickRoutePillAction(\"commuter_rail\"))}\n      className=\"m-stop-page__header-feature\"\n    >\n      <span className=\"m-stop-page__icon c-icon__cr-zone\">\n        {`Zone ${zoneNumber}`}\n      </span>\n    </a>\n  );\n\nconst features = (\n  stop: Stop,\n  routes: TypedRoutes[],\n  zoneNumber: string,\n  dispatch: Dispatch\n): ReactElement<HTMLElement> => (\n  <div className=\"m-stop-page__header-features\">\n    {modes(routes, dispatch)}\n    {crZone(zoneNumber, dispatch)}\n    {accessible(stop, dispatch)}\n    {parking(stop, dispatch)}\n  </div>\n);\n\nconst nameUpcaseClass = (routes: TypedRoutes[]): string =>\n  routes.length === 1 && routes[0].group_name === \"bus\"\n    ? \"\"\n    : \"m-stop-page__name--upcase\";\n\nconst Header = ({\n  stop,\n  routes,\n  tabs,\n  zoneNumber,\n  dispatch,\n  selectedTab\n}: Props): ReactElement<HTMLElement> => {\n  const emptyFunc = (): void => {};\n  const dispatchOrEmptyFunc = dispatch || emptyFunc;\n  return (\n    <div className=\"m-stop-page__header\">\n      <div className=\"m-stop-page__header-container\">\n        <h1 className={`m-stop-page__name ${nameUpcaseClass(routes)}`}>\n          {stop.name}\n        </h1>\n\n        {features(stop, routes, zoneNumber, dispatchOrEmptyFunc)}\n\n        <div className=\"header-tabs\">\n          {tabs.map(tab => (\n            <TabComponent\n              selected={selectedTab === tab.id}\n              dispatch={dispatchOrEmptyFunc}\n              key={tab.id}\n              tab={tab}\n            />\n          ))}\n        </div>\n      </div>\n    </div>\n  );\n};\n\nexport default Header;\n","import React, { ReactElement } from \"react\";\nimport { Tab, TabBadge } from \"./__stop\";\nimport { Dispatch, clickTabAction } from \"../state\";\nimport { handleReactEnterKeyPress } from \"../../helpers/keyboard-events\";\n\ninterface Props {\n  tab: Tab;\n  selected: boolean;\n  dispatch: Dispatch;\n}\n\nconst selectedClass = (selected: boolean): string =>\n  selected ? \"header-tab--selected\" : \"\";\n\nconst BadgeComponent = (badge: TabBadge): ReactElement<HTMLElement> => (\n  <div className={badge.class} aria-label={badge.aria_label}>\n    {badge.content}\n  </div>\n);\n\nconst onClick = (id: string, dispatch: Dispatch): void => {\n  dispatch(clickTabAction(id));\n};\n\nconst TabComponent = ({\n  tab,\n  dispatch,\n  selected\n}: Props): ReactElement<HTMLElement> => (\n  <div\n    role=\"button\"\n    tabIndex={0}\n    className={`\n      header-tab\n      header-tab--dark\n      ${selectedClass(selected)}\n      ${tab.class}\n      ${tab.id}\n    `}\n    onClick={() => onClick(tab.id, dispatch)}\n    onKeyPress={e =>\n      handleReactEnterKeyPress(e, () => onClick(tab.id, dispatch))\n    }\n  >\n    {tab.name}\n    {tab.badge && BadgeComponent(tab.badge)}\n  </div>\n);\n\nexport default TabComponent;\n","import React, { useState, ReactElement } from \"react\";\nimport { AlertsTab as AlertsTabType, AlertData } from \"./__stop\";\nimport Alerts from \"../../components/Alerts\";\nimport { handleReactEnterKeyPress } from \"../../helpers/keyboard-events\";\n\ninterface Props {\n  alertsTab: AlertsTabType;\n}\n\nconst selectedClass = (filter: string, selected: string): string =>\n  selected === filter ? \"m-alerts__time-filter--selected\" : \"\";\n\nconst timeFilter = (\n  name: string,\n  title: string,\n  currentFilter: string,\n  onClick: React.MouseEventHandler\n): ReactElement<HTMLElement> => (\n  <div\n    role=\"button\"\n    id={name}\n    tabIndex={0}\n    className={`m-alerts__time-filter ${selectedClass(name, currentFilter)}`}\n    onClick={onClick}\n    onKeyPress={e => handleReactEnterKeyPress(e, onClick)}\n  >\n    {title}\n  </div>\n);\n\nconst AlertsTab = ({ alertsTab }: Props): ReactElement<HTMLElement> => {\n  // eslint-disable-next-line camelcase\n  const initialFilter: string = alertsTab.initial_selected || \"all\";\n  const [filter, changeFilter] = useState(initialFilter);\n\n  return (\n    <div className=\"container\">\n      <div className=\"page-section station\">\n        <div className=\"page-section\">\n          <div className=\"row\">\n            <div className=\"col-xs-12 col-lg-3\">\n              <h3 className=\"h3\">Filter by type</h3>\n              <div className=\"m-alerts__time-filters\">\n                {timeFilter(\"all\", \"All Alerts\", filter, () =>\n                  changeFilter(\"all\")\n                )}\n                {timeFilter(\"current\", \"Current Alerts\", filter, () =>\n                  changeFilter(\"current\")\n                )}\n                {timeFilter(\"upcoming\", \"Planned Service Alerts\", filter, () =>\n                  changeFilter(\"upcoming\")\n                )}\n              </div>\n            </div>\n            <div className=\"col-xs-12 col-lg-8 col-lg-offset-1\">\n              <h2 className=\"h2\">Alerts</h2>\n              <div>\n                {/* eslint-disable */}\n                {(alertsTab[filter] as AlertData).alerts.length ? (\n                  <Alerts alerts={(alertsTab[filter] as AlertData).alerts} />\n                ) : (\n                  <div className=\"callout\">\n                    {(alertsTab[filter] as AlertData).empty_message}\n                  </div>\n                )}\n                {/* eslint-enable */}\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n};\n\nexport default AlertsTab;\n","import React, { ReactElement } from \"react\";\nimport RoutePillList from \"./RoutePillList\";\nimport Accessibility from \"./sidebar/Accessibility\";\nimport Parking from \"./sidebar/Parking\";\nimport BikeStorage from \"./sidebar/BikeStorage\";\nimport Fares from \"./sidebar/Fares\";\nimport { Stop } from \"../../__v3api\";\nimport { TypedRoutes, RetailLocationWithDistance } from \"./__stop\";\nimport Feedback from \"../../components/Feedback\";\nimport { Dispatch, ExpandableBlockState, ExpandableBlockName } from \"../state\";\n\ninterface Props {\n  dispatch: Dispatch;\n  expandedBlocks: ExpandableBlockState;\n  focusedBlock?: ExpandableBlockName;\n  stop: Stop;\n  routes: TypedRoutes[];\n  retailLocations: RetailLocationWithDistance[];\n}\n\nconst Sidebar = ({\n  dispatch,\n  expandedBlocks,\n  focusedBlock,\n  stop,\n  routes,\n  retailLocations\n}: Props): ReactElement<HTMLElement> => (\n  <>\n    <div className=\"m-stop-page__sidebar-pills\">\n      <RoutePillList routes={routes} />\n    </div>\n    <h2>Features</h2>\n    <Accessibility\n      stop={stop}\n      routes={routes}\n      dispatch={dispatch}\n      isExpanded={expandedBlocks.accessibility}\n      isFocused={focusedBlock === \"accessibility\"}\n    />\n    <Parking\n      stop={stop}\n      dispatch={dispatch}\n      isExpanded={expandedBlocks.parking}\n      isFocused={focusedBlock === \"parking\"}\n    />\n    <BikeStorage stop={stop} />\n    <Fares stop={stop} retailLocations={retailLocations} />\n    <Feedback />\n  </>\n);\n\nexport default Sidebar;\n","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 00-8 8 8 8 0 108-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 00-2.993-.52 9.941 9.941 0 00-2.987.52c-.575.243-.973.48-1.095 1.074l-.433 3.298v4.555h.808v.777a.567.567 0 00.297.487c.04.02.081.04.115.054a.689.689 0 00.095.027.576.576 0 00.155.02h.23a.636.636 0 00.669-.588v-.777h4.363v.777a.567.567 0 00.297.487c.04.02.081.04.115.054a.689.689 0 00.095.027.576.576 0 00.155.02h.23a.636.636 0 00.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 01.323-.267h5.125a.318.318 0 01.322.267l.344 2.334v.104A.326.326 0 0110.96 8H5.179a.332.332 0 01-.31-.339.233.233 0 010-.091zm.647 2.753a.829.829 0 11-.037-1.654.831.831 0 11.037 1.654zm5.015 0a.829.829 0 11-.037-1.654.831.831 0 11.037 1.654z\\\"></path></svg>\"","import React, { ReactElement } from \"react\";\nimport ExpandableBlock from \"../../../components/ExpandableBlock\";\nimport accessibleIcon from \"../../../../static/images/icon-accessible-default.svg\";\nimport { Stop, AccessibilityType } from \"../../../__v3api\";\nimport { TypedRoutes } from \"../__stop\";\nimport { Dispatch } from \"../../state\";\n\ninterface Props {\n  dispatch: Dispatch;\n  isExpanded: boolean;\n  isFocused: boolean;\n  stop: Stop;\n  routes: TypedRoutes[];\n}\n\n/* eslint-disable camelcase */\nexport const accessibilityNames: {\n  [accessibilityName in AccessibilityType]: string\n} = {\n  tty_phone: \"TTY Phone\",\n  escalator_both: \"Escalator (up and down)\",\n  escalator_up: \"Escalator (up only)\",\n  escalator_down: \"Escalator (down only)\",\n  ramp: \"Long ramp\",\n  fully_elevated_platform:\n    \"Full high level platform to provide level boarding to every car in a train set\",\n  elevated_subplatform:\n    \"Mini high level platform to provide level boarding to certain cars in a train set\",\n  elevator: \"Elevator\",\n  portable_boarding_lift: \"Portable boarding lift\"\n};\n\nconst hasBus = (routes: TypedRoutes[]): boolean =>\n  routes.some(routeGroup => routeGroup.group_name === \"bus\");\n\n/* eslint-enable camelcase */\nconst isAccessible = (stop: Stop): boolean =>\n  stop.accessibility.includes(\"accessible\");\nconst accessibilityKnown = (stop: Stop): boolean =>\n  !stop.accessibility.includes(\"unknown\");\n\nconst isSpecialCase = (stop: Stop): boolean => {\n  if (\n    [\"place-lech\", \"place-brkhl\", \"place-newtn\", \"place-asmnl\"].includes(\n      stop.id\n    )\n  )\n    return true;\n  return false;\n};\n\nconst maybeRenderBusAccess = (bus: boolean, accessKnown: boolean): string => {\n  if (!bus) return \"\";\n  if (accessKnown) {\n    return \" Customers using wheeled mobility devices may need to board at street level. Bus operator will need to relocate bus for safe boarding and exiting.\";\n  }\n  return \" Bus operator may need to relocate bus for safe boarding and exiting.\";\n};\n\nconst renderSpecialCase = (stop: Stop): string => {\n  const specialCase = stop.id === \"place-asmnl\" ? \"Mattapan Trolley\" : \"train\";\n  return `Significant accessibility barriers exist at ${\n    stop.name\n  } but customers can board or exit the ${specialCase} using a mobile lift. `;\n};\n\nconst renderAccessibilityLevel = (stop: Stop, bus: boolean): string => {\n  if (isSpecialCase(stop)) return renderSpecialCase(stop);\n  if (isAccessible(stop)) return `${stop.name} is accessible. `;\n  if (accessibilityKnown(stop)) {\n    return `Significant accessibility barriers exist at ${\n      stop.name\n    }.${maybeRenderBusAccess(bus, true)}`;\n  }\n  return `Minor to moderate accessibility barriers exist at ${\n    stop.name\n  }.${maybeRenderBusAccess(bus, false)}`;\n};\n\nconst formatAccess = (access: string): string => access.split(\"_\").join(\" \");\n\nconst Access = ({\n  access\n}: {\n  access: AccessibilityType;\n}): ReactElement<HTMLElement> | null => {\n  if (access === \"unknown\" || access === \"accessible\") return null;\n  const accessName = accessibilityNames[access] || formatAccess(access);\n\n  return <li className=\"c-unordered-list-item\">{accessName}</li>;\n};\n\nconst hasAccessibilityFeatures = (stop: Stop): boolean =>\n  stop.accessibility.filter(\n    access => access !== \"unknown\" && access !== \"accessible\"\n  ).length > 0;\n\nconst renderFeaturesList = (stop: Stop): ReactElement<HTMLElement> | null =>\n  hasAccessibilityFeatures(stop) ? (\n    <div id=\"accessibility-features\">\n      {isSpecialCase(stop) ? `${stop.name} ` : \"It \"}\n      has the following features:\n      <ul className=\"m-stop-page__sidebar-list\">\n        {stop.accessibility.map(access => (\n          <Access access={access} key={access} />\n        ))}\n      </ul>\n    </div>\n  ) : null;\n\nconst renderReportLink = (title: string): ReactElement<HTMLElement> => {\n  const href =\n    typeof document !== \"undefined\"\n      ? `/customer-support?comments=${document.title} | Accessibility issue `\n      : \"/customer-support\";\n  return (\n    <p>\n      <a href={href} className=\"c-call-to-action\">\n        {title}\n      </a>\n    </p>\n  );\n};\n\nconst renderAccessibilityContact = (): ReactElement<HTMLElement> =>\n  renderReportLink(\n    \"Report an elevator, escalator, or other accessibility issue\"\n  );\n\nconst renderLearnMore = (): ReactElement<HTMLElement> => (\n  <p>\n    <a href=\"/accessibility\" className=\"c-call-to-action\">\n      Learn more about accessibility\n    </a>\n  </p>\n);\n\nconst Accessibility = ({\n  dispatch,\n  isExpanded,\n  isFocused,\n  stop,\n  routes\n}: Props): ReactElement<HTMLElement> => (\n  <ExpandableBlock\n    dispatch={dispatch}\n    initiallyExpanded={isExpanded}\n    initiallyFocused={isFocused}\n    id=\"accessibility\"\n    header={{\n      text: \"Accessibility\",\n      iconSvgText: accessibleIcon\n    }}\n  >\n    <>\n      <p id=\"accessibility-level\">\n        {renderAccessibilityLevel(stop, hasBus(routes))}\n      </p>\n      {renderFeaturesList(stop)}\n      {renderAccessibilityContact()}\n      {renderLearnMore()}\n    </>\n  </ExpandableBlock>\n);\n\nexport default Accessibility;\n","module.exports = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 48 48\\\"><title>accessible</title><path fill=\\\"#165c96\\\" d=\\\"M42.71.005S5.365-.007 5.377.005C1.935.005 0 1.782 0 5.411v37.416C0 46.222 1.74 48 5.179 48h37.64C46.257 48 48 46.31 48 42.827V5.411c0-3.54-1.742-5.406-5.29-5.406z\\\"></path><g fill=\\\"#fff\\\"><path d=\\\"M21.498 40a10.493 10.493 0 01-4.374-20.043l.238 3.107a7.633 7.633 0 1011.684 7.332l1.862 3.81A10.66 10.66 0 0121.498 40z\\\"></path><path d=\\\"M33.384 36.6L29.09 26.54l-10.469-.003-1.016-14.303a2.963 2.963 0 01-.357-1.381 2.853 2.853 0 113.131 2.841l.301 5.338h7.338l.021 2.302h-7.102l.168 2.59 9.734-.066 4.154 9.592 3.155-1.139.873 2.079z\\\"></path></g></svg>\"","import React, { ReactElement } from \"react\";\nimport ExpandableBlock from \"../../../components/ExpandableBlock\";\nimport parkingIconSvg from \"../../../../static/images/icon-parking-default.svg\";\nimport { Stop, ParkingLot } from \"../../../__v3api\";\nimport { Dispatch } from \"../../state\";\n\nconst renderUtilization = (\n  lot: ParkingLot\n): ReactElement<HTMLElement> | null => {\n  if (lot.utilization && lot.capacity) {\n    const {\n      name,\n      capacity: { total },\n      // eslint-disable-next-line camelcase\n      utilization: { typical, arrive_before }\n    } = lot;\n    if (typical && total) {\n      let message;\n      // eslint-disable-next-line camelcase\n      if (arrive_before) {\n        // eslint-disable-next-line camelcase\n        message = `Parking spots at ${name} fill up quickly. We recommend arriving before ${arrive_before}.`;\n      } else {\n        message = `Parking at ${name} is generally available throughout the weekday.`;\n      }\n      return <p id=\"parking-utilization\">{message}</p>;\n    }\n  }\n  return null;\n};\n\nconst renderCapacity = (lot: ParkingLot): ReactElement<HTMLElement> => {\n  if (lot.capacity) {\n    const { total, accessible, overnight, type } = lot.capacity;\n    return (\n      <div id=\"parking-capacity\">\n        <div className=\"u-small-caps\">Capacity</div>\n        <ul className=\"list-unstyled\">\n          <li>\n            <strong>Total parking spaces: </strong>\n            {total}\n          </li>\n          <li>\n            <strong>Accessible spaces: </strong>\n            {accessible}\n          </li>\n          <li>\n            <strong>Overnight Parking: </strong>\n            {overnight}\n          </li>\n          <li>\n            <strong>Type: </strong>\n            {type}\n          </li>\n        </ul>\n      </div>\n    );\n  }\n  return (\n    <div id=\"parking-capacity\">\n      No MBTA parking. Street or private parking may exist.\n    </div>\n  );\n};\n\nexport const maybeAddLinkPrefix = (url: string): string =>\n  url.includes(\"http://\") || url.includes(\"https://\") ? url : `https://${url}`;\n\nconst renderMobileApp = (\n  // @ts-ignore eslint-disable-next-line camelcase\n  mobile: ParkingLot[\"payment\"][\"mobile_app\"]\n): ReactElement<HTMLElement> | null => {\n  if (mobile) {\n    const mobileId = mobile.id ? ` #${mobile.id}` : \"\";\n    const { url } = mobile;\n    return (\n      <li id=\"parking-mobile-app\">\n        <strong>Mobile app: </strong>\n        {url ? (\n          <a href={maybeAddLinkPrefix(url)}>{mobile.name}</a>\n        ) : (\n          mobile.name\n        )}\n        {mobileId}\n      </li>\n    );\n  }\n  return null;\n};\n\nconst renderPayment = (lot: ParkingLot): ReactElement<HTMLElement> => {\n  if (lot.payment) {\n    const {\n      methods,\n      mobile_app: mobileApp,\n      daily_rate: dailyRate,\n      monthly_rate: monthlyRate\n    } = lot.payment;\n\n    return (\n      <div id=\"parking-payment\">\n        <div className=\"u-small-caps\">Payment</div>\n        <ul className=\"list-unstyled\">\n          {methods.length ? (\n            <li>\n              <strong>Payment Methods: </strong>\n              {methods.join(\", \")}\n            </li>\n          ) : null}\n          {renderMobileApp(mobileApp)}\n          <li>\n            <strong>Daily fee: </strong>\n            {dailyRate}\n          </li>\n          {monthlyRate ? (\n            <li>\n              <strong>Monthly pass: </strong>\n              {monthlyRate}\n            </li>\n          ) : null}\n        </ul>\n      </div>\n    );\n  }\n  return <div id=\"parking-payment\">No payment information available</div>;\n};\n\nconst renderManager = (lot: ParkingLot): ReactElement<HTMLElement> => {\n  if (lot.manager) {\n    const {\n      manager: { name, url, contact, phone }\n    } = lot;\n    return (\n      <div id=\"parking-manager\">\n        <div className=\"u-small-caps\">Management</div>\n        <ul className=\"list-unstyled\">\n          <li>\n            <strong>Managed by: </strong>\n            {name}\n          </li>\n          <li>\n            <strong>Contact: </strong>\n            {contact && url ? <a href={url}>{`${contact}`}</a> : contact}\n          </li>\n          {phone ? (\n            <li>\n              <strong>Contact phone: </strong>\n              {phone.includes(\"tel\") ? (\n                <a href={phone}>{phone.split(\"tel:+\")[1]}</a>\n              ) : (\n                phone\n              )}\n            </li>\n          ) : null}\n        </ul>\n      </div>\n    );\n  }\n  return <em id=\"parking-manager\">No contact information available</em>;\n};\n\nconst renderNote = (lot: ParkingLot): ReactElement<HTMLElement> | null => {\n  if (lot.note) {\n    return (\n      <div className=\"callout\" id=\"parking-note\">\n        <strong>Note: </strong>\n        {lot.note}\n      </div>\n    );\n  }\n  return null;\n};\n\nconst Lot = ({ lot }: { lot: ParkingLot }): ReactElement<HTMLElement> => (\n  <div>\n    <h4>{lot.name}</h4>\n    <p>\n      <a\n        href={`https://maps.google.com/?q=${lot.latitude},${lot.longitude}`}\n        target=\"_blank\"\n        rel=\"noopener noreferrer\"\n        className=\"c-call-to-action\"\n      >\n        Get directions to this parking facility\n      </a>\n    </p>\n    {renderUtilization(lot)}\n    {renderCapacity(lot)}\n    {renderPayment(lot)}\n    {renderManager(lot)}\n    {renderNote(lot)}\n  </div>\n);\n\nconst stopOrStation = (stop: Stop): string =>\n  stop[\"station?\"] ? \"station\" : \"stop\";\n\ninterface Props {\n  dispatch: Dispatch;\n  isExpanded: boolean;\n  isFocused: boolean;\n  stop: Stop;\n}\n\nconst Parking = ({\n  dispatch,\n  isExpanded,\n  isFocused,\n  stop\n}: Props): ReactElement<HTMLElement> => (\n  <>\n    <ExpandableBlock\n      dispatch={dispatch}\n      initiallyExpanded={isExpanded}\n      initiallyFocused={isFocused}\n      id=\"parking\"\n      header={{\n        text: \"Parking\",\n        iconSvgText: parkingIconSvg\n      }}\n    >\n      <>\n        {stop.parking_lots.length > 0 ? (\n          stop.parking_lots.map((lot: ParkingLot) => (\n            <Lot key={lot.name} lot={lot} />\n          ))\n        ) : (\n          <p>{`No parking information is available for this ${stopOrStation(\n            stop\n          )}.`}</p>\n        )}\n        <p>\n          <a href=\"/parking\" className=\"c-call-to-action\">\n            Learn more about parking\n          </a>\n        </p>\n      </>\n    </ExpandableBlock>\n  </>\n);\n\nexport default Parking;\n","module.exports = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 48 48\\\"><title>parking</title><path fill=\\\"#788093\\\" d=\\\"M42.71.005S5.365-.007 5.377.005C1.935.005 0 1.782 0 5.411v37.416C0 46.222 1.74 48 5.179 48h37.64C46.257 48 48 46.31 48 42.827V5.411c0-3.54-1.742-5.406-5.29-5.406z\\\"></path><path fill=\\\"#fff\\\" d=\\\"M25.886 8H10.201v32h7.13V29.5h8.228c6.227 0 12.24-4.588 12.24-10.73C37.8 13.308 32.745 8 25.886 8zm-.45 15.606H17.42v-9.674h8.104a5.217 5.217 0 015.26 4.914c0 2.81-2.462 4.76-5.35 4.76z\\\"></path></svg>\"","import React, { ReactElement } from \"react\";\nimport ExpandableBlock from \"../../../components/ExpandableBlock\";\nimport { BikeStorageType, Stop } from \"../../../__v3api\";\nimport bikeIconSvg from \"../../../../static/images/icon-bikes-default.svg\";\n\ninterface Props {\n  stop: Stop;\n}\n\n/* eslint-disable camelcase */\nconst bikeStorageType: { [BikeStorage in BikeStorageType]: string } = {\n  bike_storage_rack: \"Regular bike racks\",\n  bike_storage_rack_covered: \"Covered bike racks\",\n  bike_storage_cage: \"Pedal and Park\"\n};\n/* eslint-enable camelcase */\n\nconst pedalAndParkInfo = (): ReactElement<HTMLElement> => (\n  <div className=\"m-stop-page__pedal-and-park\">\n    Access to secure bike parking is available for registered CharlieCard\n    holders.\n    <div>\n      <a href=\"https://bc.mbta.com/riding_the_t/bikes/register/Default.asp\">\n        Register your CharlieCard for bike parking\n      </a>\n    </div>\n  </div>\n);\nconst renderStorage = (stop: Stop): ReactElement<HTMLElement> => (\n  <>\n    <p>{`${stop.name} has the following bike storage features:`}</p>\n    <ul className=\"c-unordered-list\">\n      {stop.bike_storage.map((storage: BikeStorageType) => {\n        const bikeStorage = bikeStorageType[storage];\n        if (bikeStorage === \"Pedal and Park\") {\n          return (\n            <div key=\"pedal-and-park\">\n              <li className=\"c-unordered-list-item\">{bikeStorage}</li>\n              {pedalAndParkInfo()}\n            </div>\n          );\n        }\n        return (\n          <li className=\"c-unordered-list-item\" key={storage}>\n            {bikeStorage}\n          </li>\n        );\n      })}\n    </ul>\n  </>\n);\n\nconst stopOrStation = (stop: Stop): string =>\n  stop[\"station?\"] ? \"station\" : \"stop\";\n\nconst BikeStorageInfo = ({ stop }: Props): ReactElement<HTMLElement> => (\n  <ExpandableBlock\n    initiallyExpanded={false}\n    id=\"bikes\"\n    header={{\n      text: \"Bikes\",\n      iconSvgText: bikeIconSvg\n    }}\n  >\n    <>\n      {stop.bike_storage.length > 0 ? (\n        renderStorage(stop)\n      ) : (\n        <p>{`There is no bike parking information available for this ${stopOrStation(\n          stop\n        )}.`}</p>\n      )}\n      <a href=\"/bikes\" className=\"c-call-to-action\">\n        Learn more about bikes and the T\n      </a>\n    </>\n  </ExpandableBlock>\n);\n\nexport default BikeStorageInfo;\n","module.exports = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 48 48\\\"><title>bike</title><path fill=\\\"#1c1e23\\\" d=\\\"M48 28.2c.1-5.2-4.1-9.6-9.3-9.7-1 0-2 .2-3 .5-.7-1.7-1.6-3.6-2.6-5.9l.6-1.8h2.2V9.4h-8.2c-.7 1 .3 1 3.9 1.9l-.6 1.8H14.8c1.1-4 .5-3.7 5.4-3.7V7.5c-6.7.1-5.6-.7-9.2 11.4-.6-.1-1.1-.2-1.7-.2-5.2.1-9.4 4.4-9.3 9.7-.1 5.2 4.1 9.6 9.3 9.7 5.2-.1 9.4-4.4 9.3-9.7 0-3.8-2.2-7.3-5.7-8.9.2-.7.4-1.4.7-2.1 13.6 14.9 8.5 12.5 15.8 12.8h.1c.8 5.1 5.6 8.5 10.7 7.7 4.7-.8 8-4.9 7.8-9.7zm-31.6.2c.1 4-3.1 7.3-7.1 7.4-4.1-.2-7.3-3.6-7.1-7.7.1-3.9 3.3-7 7.1-7.1.3 0 .7 0 1 .1-2.3 7.4-2 6.6-2 7.2 0 .5.4 1 .9 1 .9-.1.7.1 3-7.6 2.6 1.2 4.2 3.8 4.2 6.7zm9.2-.4L14.4 15.2h15.9zm3.8.2h-1.7L32.1 16l1.8 4c-2.8 1.8-4.5 4.9-4.5 8.2zm5.4-6.2l2.7 6.2h-5.9c-.1-2.5 1.1-4.8 3.2-6.2zm3.9 13.6c-3.3 0-6.1-2.3-6.9-5.5 7.4 0 8.1.4 8.2-.9 0-.4-.1-.7-3.4-8.1.7-.2 1.4-.3 2.1-.3 4.1.2 7.3 3.6 7.1 7.7-.1 3.9-3.2 7-7.1 7.1z\\\"></path></svg>\"","import React, { ReactElement } from \"react\";\nimport { Stop, FareFacilityType } from \"../../../__v3api\";\nimport ExpandableBlock from \"../../../components/ExpandableBlock\";\nimport { RetailLocationWithDistance, RetailLocation } from \"../__stop\";\nimport fareIconSvg from \"../../../../static/images/icon-fares-default.svg\";\n\n/* eslint-disable camelcase */\ninterface Props {\n  stop: Stop;\n  retailLocations: RetailLocationWithDistance[];\n}\n\nexport const fareNames: { [fareTypeName in FareFacilityType]: string } = {\n  ticket_window: \"Commuter Rail ticket window\",\n  fare_media_assistance_facility: \"CharlieCard Store\",\n  fare_media_assistant: \"Service agent with blank CharlieCards\",\n  fare_vending_machine: \"Fare vending machines are available\",\n  fare_vending_retailer: \"Fare vending retailer\"\n};\n\nconst fareVendingDescription = (stop: Stop): string =>\n  stop.fare_facilities.length\n    ? `You may purchase fares at ${stop.name}.`\n    : `Fares cannot be purchased at ${stop.name}.`;\n\nconst fareFacilityList = (\n  facilities: FareFacilityType[]\n): ReactElement<HTMLUListElement> => (\n  <>\n    <ul className=\"c-unordered-list\">\n      {facilities.map(type => (\n        <li key={type} className=\"c-unordered-list-item\">\n          {fareNames[type]}\n        </li>\n      ))}\n    </ul>\n    <a className=\"c-call-to-action\" href=\"/fares\">\n      For fare prices see fares overview\n    </a>\n  </>\n);\n\nconst locationGoogleLink = (location: RetailLocation, stop: Stop): string =>\n  `https://maps.google.com/maps/dir/${stop.latitude},${stop.longitude}/${\n    location.latitude\n  },${location.longitude}/`;\n\nconst retailLocation = (\n  { distance, location }: RetailLocationWithDistance,\n  stop: Stop\n): ReactElement<HTMLAnchorElement> => (\n  <a\n    key={location.address}\n    className=\"c-location-card m-stop-page__retail-location\"\n    href={locationGoogleLink(location, stop)}\n    target=\"blank\"\n  >\n    <div className=\"clearfix\">\n      <div className=\"c-location-card__name m-stop-page__retail-location-name\">\n        {location.name}\n      </div>\n      <div className=\"c-location-card__distance m-stop-page__retail-location-distance\">\n        {distance}\n      </div>\n    </div>\n    <div className=\"c-location-card__address m-stop-page__retail-location-distance\">\n      {location.address}\n    </div>\n  </a>\n);\n\nconst nearbyLocations = (\n  locations: RetailLocationWithDistance[],\n  stop: Stop\n): ReactElement<HTMLDivElement> => (\n  <div className=\"c-location-cards m-stop-page__retail-locations\">\n    <h4 className=\"m-stop-page__sidebar-header\">Retail Sales Locations</h4>\n    <p>\n      MBTA riders can purchase tickets and passes for the Commuter Rail, bus,\n      subway, and ferry at stores located throughout the Greater Boston and\n      Providence areas.\n    </p>\n    <h5 className=\"u-small-caps\">Stores near {stop.name}</h5>\n    {locations.map(loc => retailLocation(loc, stop))}\n  </div>\n);\n\nconst Fares = ({\n  stop,\n  retailLocations\n}: Props): ReactElement<HTMLDivElement> => (\n  <ExpandableBlock\n    id=\"fares\"\n    header={{\n      text: \"Fare Sales\",\n      iconSvgText: fareIconSvg\n    }}\n    initiallyExpanded={false}\n  >\n    <>\n      <h4 className=\"m-stop-page__sidebar-header\">Fare Vending</h4>\n      <p>{fareVendingDescription(stop)}</p>\n      {stop.fare_facilities.length\n        ? fareFacilityList(stop.fare_facilities)\n        : null}\n      {retailLocations && retailLocations.length\n        ? nearbyLocations(retailLocations, stop)\n        : null}\n    </>\n  </ExpandableBlock>\n);\n\nexport default Fares;\n","module.exports = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 48 48\\\"><title>fares</title><path fill=\\\"none\\\" d=\\\"M18.25 35.85l-5.59 2.7.59 2.65 33.21-7.39-.9-4.04zM37.81 17.01L7.19 31.83l1.8 3.72 1.6-.77 29.03-14.05z\\\"></path><path fill=\\\"#1c1e23\\\" d=\\\"M47.93 34.86l-.23-1-.06-.29-.9-4-.13-.59-2.77-12.52a2.91 2.91 0 00-3.54-2.08l-2.19.48-5-10.41a2.91 2.91 0 00-3.92-1.22L1.76 16.49a2.91 2.91 0 00-1.48 3.83l5.56 11.5.26.54 1.8 3.72.59 1.2.17.36a2.93 2.93 0 002.81 1.3l.56 2.54.29 1.31.09.38A2.94 2.94 0 0015.9 45l29.78-6.62a3 3 0 002.25-3.52zm-37.34-.08L9 35.55l-1.8-3.72L37.81 17l1.8 3.72zm2.66 6.41l-.59-2.64 5.59-2.7 27.31-6.08.9 4z\\\"></path></svg>\"","import React, { ReactElement } from \"react\";\n\nconst Feedback = (): ReactElement<HTMLElement> => {\n  const url =\n    typeof document !== \"undefined\"\n      ? `/customer-support?comments=${document.title}`\n      : `/customer-support`;\n  return (\n    <div className=\"c-feedback\">\n      <h3>Feedback</h3>\n      Please report issues with cleanliness, signage, and any other concerns you\n      may have. We will do our best to address the issues as soon as possible.\n      <a href={url} className=\"btn btn-secondary c-feedback__button\">\n        Contact us\n      </a>\n    </div>\n  );\n};\n\nexport default Feedback;\n","import React, { ReactElement } from \"react\";\nimport RoutePillList from \"./RoutePillList\";\nimport { Stop } from \"../../__v3api\";\nimport { TypedRoutes } from \"./__stop\";\nimport renderSvg from \"../../helpers/render-svg\";\n\nimport streetViewSvg from \"../../../static/images/icon-street-view-default.svg\";\n\ninterface Props {\n  routes: TypedRoutes[];\n  stop: Stop;\n  encoder?: (str: string) => string;\n  streetViewUrl: string | null;\n}\n\nconst addressOrMunicipality = (stop: Stop): ReactElement | null => {\n  if (stop.address)\n    return (\n      <div className=\"m-stop-page__location\">\n        <h3 className=\"u-small-caps\">Address</h3>\n        <div className=\"h3\">{stop.address}</div>\n      </div>\n    );\n\n  if (stop.municipality)\n    return (\n      <div className=\"m-stop-page__location\">\n        <h3 className=\"u-small-caps\">City</h3>\n        <div className=\"h3\">{stop.municipality}</div>\n      </div>\n    );\n\n  return null;\n};\n\nconst latLngString = (stop: Stop): string =>\n  `${stop.latitude},${stop.longitude}`;\n\nconst locationQuery = (stop: Stop, encoder?: (str: string) => string): string =>\n  stop.address && encoder ? encoder(stop.address) : latLngString(stop);\n\nconst directionLink = (stop: Stop, encoder?: (str: string) => string): string =>\n  `https://www.google.com/maps/dir/?api=1&destination=${locationQuery(\n    stop,\n    encoder\n  )}`;\n\nconst streetViewLink = (stop: Stop): string =>\n  `https://www.google.com/maps/@?api=1&map_action=pano&viewpoint=${latLngString(\n    stop\n  )}`;\n\nconst LocationBlock = ({\n  routes,\n  stop,\n  encoder,\n  streetViewUrl\n}: Props): ReactElement<HTMLElement> => (\n  <div className=\"m-stop-page__location-block\">\n    {addressOrMunicipality(stop)}\n    <div className=\"m-stop-page__location-links\">\n      <div className=\"m-stop-page__location-link\">\n        <a\n          href={directionLink(stop, encoder)}\n          className=\"btn btn-primary\"\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n        >\n          Get directions to this station\n        </a>\n      </div>\n      <div className=\"m-stop-page__location-link\">\n        <a\n          href={streetViewUrl || streetViewLink(stop)}\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n        >\n          {renderSvg(\n            \"c-svg__icon-street-view m-stop-page__street-view-icon\",\n            streetViewSvg\n          )}\n          Street View\n        </a>\n      </div>\n    </div>\n    <RoutePillList routes={routes} />\n  </div>\n);\n\nexport default LocationBlock;\n","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 01-.01.01 7.967 7.967 0 01-9.18-.01c-.08-.06-.16-.11-.24-.18l-1.53-1.52A7.916 7.916 0 010 8a8 8 0 0116 0 7.895 7.895 0 01-1.86 5.11z\\\"></path><path fill=\\\"#008eaa\\\" d=\\\"M14.14 10.33v2.78a2.338 2.338 0 01-.29.35 7.576 7.576 0 01-1.25 1.08v-4.21z\\\"></path><g fill=\\\"#fff\\\"><path d=\\\"M12.6 13.07v1.1a.817.817 0 01-.19-.09 1.085 1.085 0 00-1.15-.03 1.327 1.327 0 01-1.36.03 1.113 1.113 0 00-1.19-.04 1.457 1.457 0 01-1.43 0 1.093 1.093 0 00-1.19.04 1.305 1.305 0 01-1.36-.04 1.125 1.125 0 00-1.16.04.25.25 0 00-.07.04v-1.09a.076.076 0 00.04-.02 1.229 1.229 0 011.4.08 1.38 1.38 0 001.19-.07 1.186 1.186 0 011.29.04 1.314 1.314 0 001.16 0 1.186 1.186 0 011.29-.04 1.383 1.383 0 001.19.07 1.247 1.247 0 011.4-.08.351.351 0 00.14.06zM11.06 10.98a.878.878 0 01-.15.05 3.517 3.517 0 01-.16-1.49 10.814 10.814 0 011.85-2.66l-.6-.24V3h-1V2H9.01v.01H9V2h.01v-.99h-2V2H5v1H4v3.64l-.59.24a10.467 10.467 0 011.83 2.64 3.75 3.75 0 01-.15 1.5.418.418 0 01-.15-.04 1.226 1.226 0 00-1.4-.07c-.01.01-.03.01-.04.02v1.08c.02-.01.05-.03.07-.04a1.102 1.102 0 011.16-.03 1.327 1.327 0 001.36.03 1.092 1.092 0 011.19-.03 1.457 1.457 0 001.43 0 1.093 1.093 0 011.19.04 1.328 1.328 0 001.36-.04 1.129 1.129 0 011.15.03 1.737 1.737 0 00.19.1v-1.1a.423.423 0 01-.14-.06 1.262 1.262 0 00-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>\"","module.exports = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 48 48\\\"><title>street view</title><g fill=\\\"#165c96\\\"><path d=\\\"M22.94 32a3.62 3.62 0 00-1.34 2.8V48h16.8a4.81 4.81 0 004.8-4.8V28.85A21.53 21.53 0 0022.94 32z\\\"></path><circle cx=\\\"36\\\" cy=\\\"12\\\" r=\\\"12\\\"></circle><path d=\\\"M20.4 12a15.5 15.5 0 011.78-7.2H4.8A4.81 4.81 0 000 9.6v33.6a4.75 4.75 0 001.42 3.38L25 23a15.46 15.46 0 01-4.6-11z\\\"></path></g></svg>\"","import React, { ReactElement } from \"react\";\nimport { Stop, Mode, Alert } from \"../../__v3api\";\nimport { Dispatch, clickModeAction } from \"../state\";\nimport { TypedRoutes, RouteWithDirections } from \"./__stop\";\nimport RouteCard from \"./RouteCard\";\nimport { ModeFilter, modeByV3ModeType } from \"../../components/ModeFilter\";\n\ninterface Props {\n  routes: TypedRoutes[];\n  routesAndAlerts?: { [key: string]: Alert[] };\n  stop: Stop;\n  selectedModes: Mode[];\n  dispatch: Dispatch;\n}\n\nconst includesMultipleModes = (typedRoutes: TypedRoutes[]): boolean =>\n  typedRoutes.length > 1;\n\nconst allRoutes = (typedRoutes: TypedRoutes[]): RouteWithDirections[] =>\n  typedRoutes.reduce(\n    (acc: RouteWithDirections[], typeAndRoutes: TypedRoutes) =>\n      acc.concat(typeAndRoutes.routes),\n    []\n  );\n\nconst availableModes = (typedRoutes: TypedRoutes[]): string[] =>\n  // eslint-disable-next-line camelcase\n  typedRoutes.map(({ group_name }) => group_name);\n\nconst filteredByModes = (\n  routes: RouteWithDirections[],\n  modes: Mode[]\n): RouteWithDirections[] => {\n  // If there are no selections or all selections, do not filter\n  if (modes.length === 0 || modes.length === 3) return routes;\n\n  return routes.filter(route =>\n    modes.some(mode => modeByV3ModeType[route.route.type] === mode)\n  );\n};\n\nconst Departures = ({\n  routes,\n  routesAndAlerts,\n  stop,\n  selectedModes,\n  dispatch\n}: Props): ReactElement<HTMLElement> => {\n  const isModeSelected = (mode: Mode): boolean => selectedModes.includes(mode);\n\n  const handleModeClick = (mode: Mode): void => dispatch(clickModeAction(mode));\n\n  const filteredRoutes = filteredByModes(allRoutes(routes), selectedModes);\n\n  return (\n    <div id=\"route-card-list\">\n      <h2>Departures</h2>\n\n      <div className=\"m-stop-page__departures\">\n        {includesMultipleModes(routes) && (\n          <ModeFilter\n            isModeSelected={isModeSelected}\n            onModeClickAction={handleModeClick}\n            modeButtonsToShow={availableModes(routes)}\n          />\n        )}\n\n        {filteredRoutes.map(routeWithDirections => (\n          <RouteCard\n            key={routeWithDirections.route.id}\n            route={routeWithDirections.route}\n            directions={routeWithDirections.directions}\n            stop={stop}\n            alerts={\n              routesAndAlerts\n                ? routesAndAlerts[routeWithDirections.route.id]\n                : []\n            }\n          />\n        ))}\n      </div>\n    </div>\n  );\n};\n\nexport default Departures;\n","import React, { ReactElement } from \"react\";\nimport {\n  Direction as DirectionType,\n  EnhancedRoute,\n  Stop,\n  Alert\n} from \"../../__v3api\";\nimport Direction from \"../../components/Direction\";\nimport RouteCardHeader from \"../../components/RouteCardHeader\";\nimport { alertIcon } from \"../../helpers/icon\";\nimport { effectNameForAlert } from \"../../components/Alerts\";\nimport {\n  isHighSeverityOrHighPriority,\n  isDiversion,\n  alertsByStop,\n  uniqueByEffect\n} from \"../../models/alert\";\n\ninterface Props {\n  route: EnhancedRoute;\n  directions: DirectionType[];\n  stop: Stop;\n  alerts: Alert[];\n}\n\nconst RouteCard = ({\n  route,\n  directions,\n  stop,\n  alerts\n}: Props): ReactElement<HTMLElement> => (\n  <div className=\"m-stop-page__departures-route\">\n    <RouteCardHeader\n      route={route}\n      hasAlert={\n        alerts && alerts.filter(isHighSeverityOrHighPriority).length > 0\n      }\n    />\n    {alertsByStop(alerts.filter(isDiversion), stop.id)\n      .filter(uniqueByEffect)\n      .map(alert => (\n        <a\n          key={alert.id}\n          className=\"m-stop-page__departures-alert\"\n          href={`/schedules/${route.id}/alerts`}\n        >\n          {alertIcon(\"c-svg__icon-alerts-triangle\")}\n          {effectNameForAlert(alert)}\n        </a>\n      ))}\n    {directions.length === 0 && (\n      <div className=\"m-stop-page__no-departures\">\n        <div>No departures within 24 hours</div>\n        <div>\n          <a href={`/schedules/${route.id}`} className=\"c-call-to-action\">\n            View {route.name} schedule\n          </a>\n        </div>\n      </div>\n    )}\n\n    {directions.map(direction => (\n      <Direction\n        key={`${route.id}-${direction.direction_id}`}\n        direction={direction}\n        route={route}\n      />\n    ))}\n  </div>\n);\n\nexport default RouteCard;\n","import React, { ReactElement } from \"react\";\nimport { SuggestedTransfer } from \"./__stop\";\nimport StopCard from \"./StopCard\";\n\ninterface Props {\n  suggestedTransfers: SuggestedTransfer[];\n}\n\nexport default ({\n  suggestedTransfers\n}: Props): ReactElement<HTMLElement> | null =>\n  suggestedTransfers.length === 0 ? null : (\n    <div>\n      <h2>Suggested Transfers Nearby</h2>\n      <div className=\"m-stop-page__transfers\">\n        {suggestedTransfers.map(\n          ({\n            stop,\n            distance,\n            routes_with_direction: routesWithDirection\n          }: SuggestedTransfer) => (\n            <StopCard\n              key={`transfer${stop.id}`}\n              stop={stop}\n              distance={distance}\n              routesWithDirection={routesWithDirection}\n            />\n          )\n        )}\n      </div>\n    </div>\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 00-1.27-1.4 3.083 3.083 0 00-3.47 0 3.572 3.572 0 00-1.253 1.4L.477 42.537a3.715 3.715 0 000 3.642 3.473 3.473 0 001.252 1.323A3.217 3.217 0 003.436 48h41.118a3.161 3.161 0 001.688-.498 3.472 3.472 0 001.252-1.323 3.715 3.715 0 00.057-3.642z\\\"></path><g fill=\\\"#fff\\\"><path d=\\\"M27.043 39.223a.713.713 0 01-.22.544.733.733 0 01-.54.233h-4.568a.733.733 0 01-.54-.233.772.772 0 01-.218-.544v-4.446a.772.772 0 01.219-.544.733.733 0 01.54-.233h4.568a.734.734 0 01.54.233.714.714 0 01.22.544zM26.738 30.359a.625.625 0 01-.235.457.706.706 0 01-.516.183H21.86a.734.734 0 01-.516-.183.535.535 0 01-.219-.457l-1.121-14.482a.71.71 0 01.218-.585.76.76 0 01.516-.292h6.512a.814.814 0 01.532.292.704.704 0 01.219.53z\\\"></path></g></svg>\"","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","/**\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 } from \"react\";\nimport { Mode } from \"../__v3api\";\nimport FilterButton from \"./FilterButton\";\nimport ModeIcon from \"../tnm/components/ModeIcon\";\n\ntype IsModeSelectedFunction = (mode: Mode) => boolean;\n\ninterface Props {\n  isModeSelected: IsModeSelectedFunction;\n  onModeClickAction: (mode: Mode) => void;\n  modeButtonsToShow?: string[];\n}\n\ninterface ModeButtonProps {\n  mode: Mode;\n  icon: string;\n  name: string;\n  isModeSelected: IsModeSelectedFunction;\n  onClick: (mode: Mode) => () => void;\n}\n\ninterface ModeByV3ModeType {\n  [s: number]: Mode;\n}\n\nexport const modeByV3ModeType: ModeByV3ModeType = {\n  0: \"subway\",\n  1: \"subway\",\n  2: \"commuter_rail\",\n  3: \"bus\"\n};\n\nconst ModeButton = ({\n  mode,\n  icon,\n  name,\n  isModeSelected,\n  onClick\n}: ModeButtonProps): ReactElement<HTMLElement> => (\n  <FilterButton\n    identifier={mode}\n    icon={<ModeIcon type={icon} />}\n    name={name}\n    isSelected={isModeSelected}\n    onClick={onClick}\n  />\n);\n\nconst shouldShowModeButton = (\n  mode: string,\n  modeButtonsToShow?: string[]\n): boolean => {\n  if (modeButtonsToShow) {\n    return modeButtonsToShow.includes(mode);\n  }\n\n  // By default, show all available modes except ferry.\n\n  if (mode === \"ferry\") {\n    return false;\n  }\n  return true;\n};\n\nexport const ModeFilter = ({\n  isModeSelected,\n  onModeClickAction,\n  modeButtonsToShow\n}: Props): ReactElement<HTMLElement> => (\n  <div className=\"m-tnm-sidebar__filter-bar\">\n    <span className=\"m-tnm-sidebar__filter-header u-small-caps\">Filter</span>\n\n    <div className=\"c-mode-filter__filter-btn-group\">\n      {shouldShowModeButton(\"subway\", modeButtonsToShow) && (\n        <ModeButton\n          mode=\"subway\"\n          icon=\"subway\"\n          name=\"Subway\"\n          isModeSelected={isModeSelected}\n          onClick={mode => () => onModeClickAction(mode)}\n        />\n      )}\n      {shouldShowModeButton(\"bus\", modeButtonsToShow) && (\n        <ModeButton\n          mode=\"bus\"\n          icon=\"bus\"\n          name=\"Bus\"\n          isModeSelected={isModeSelected}\n          onClick={mode => () => onModeClickAction(mode)}\n        />\n      )}\n    </div>\n\n    <div className=\"c-mode-filter__filter-btn-group\">\n      {shouldShowModeButton(\"commuter_rail\", modeButtonsToShow) && (\n        <ModeButton\n          mode=\"commuter_rail\"\n          icon=\"commuter_rail\"\n          name=\"Rail\"\n          isModeSelected={isModeSelected}\n          onClick={mode => () => onModeClickAction(mode)}\n        />\n      )}\n      {shouldShowModeButton(\"ferry\", modeButtonsToShow) && (\n        <ModeButton\n          mode=\"ferry\"\n          icon=\"ferry\"\n          name=\"Ferry\"\n          isModeSelected={isModeSelected}\n          onClick={mode => () => onModeClickAction(mode)}\n        />\n      )}\n    </div>\n  </div>\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 108 8 8 8 0 00-8-8\\\"></path><path fill=\\\"#fff\\\" d=\\\"M8.59 4a5.398 5.398 0 011.086.101 2.392 2.392 0 01.84.33 1.558 1.558 0 01.542.611 2.068 2.068 0 01.192.941 1.701 1.701 0 01-.286 1.008 2.06 2.06 0 01-.845.662 2.004 2.004 0 011.148.745 2.152 2.152 0 01.38 1.283 2.137 2.137 0 01-.245 1.048 2.058 2.058 0 01-.66.722 2.957 2.957 0 01-.944.414 4.423 4.423 0 01-1.09.135H4.672V4zm-.233 3.238a1.352 1.352 0 00.805-.224.832.832 0 00.315-.728.892.892 0 00-.105-.46.752.752 0 00-.28-.28 1.224 1.224 0 00-.402-.14 2.757 2.757 0 00-.472-.039H6.502v1.871zm.106 3.395a2.51 2.51 0 00.512-.05 1.29 1.29 0 00.432-.168.86.86 0 00.297-.32 1.06 1.06 0 00.111-.515 1.017 1.017 0 00-.361-.88 1.59 1.59 0 00-.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 108 8 8 8 0 00-8-8\\\"></path><path fill=\\\"#fff\\\" d=\\\"M9.912 6.222a1.685 1.685 0 00-.374-.423 1.754 1.754 0 00-1.103-.386 1.963 1.963 0 00-.964.22 1.82 1.82 0 00-.643.59 2.59 2.59 0 00-.358.84 4.224 4.224 0 00-.112.974 3.928 3.928 0 00.112.937 2.536 2.536 0 00.358.82 1.838 1.838 0 00.643.583 1.957 1.957 0 00.964.22 1.554 1.554 0 001.204-.471 2.174 2.174 0 00.53-1.243h1.629a3.878 3.878 0 01-.333 1.296 3.088 3.088 0 01-.707.985 2.998 2.998 0 01-1.028.622A3.764 3.764 0 018.435 12a3.922 3.922 0 01-1.58-.305 3.393 3.393 0 01-1.183-.841 3.72 3.72 0 01-.739-1.258 4.615 4.615 0 01-.257-1.559 4.773 4.773 0 01.257-1.59 3.831 3.831 0 01.739-1.28 3.391 3.391 0 011.183-.856A3.862 3.862 0 018.435 4a3.853 3.853 0 011.194.182 3.254 3.254 0 011.007.53 2.862 2.862 0 01.733.863 3.09 3.09 0 01.364 1.177h-1.627a1.378 1.378 0 00-.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 108 8 8 8 0 00-8-8\\\"></path><path fill=\\\"#fff\\\" d=\\\"M7.91 4a4.12 4.12 0 011.44.247 3.124 3.124 0 011.154.74 3.404 3.404 0 01.762 1.231 4.968 4.968 0 01.274 1.737 5.524 5.524 0 01-.224 1.614 3.552 3.552 0 01-.677 1.277 3.186 3.186 0 01-1.132.846A3.837 3.837 0 017.91 12H4.46V4zm-.123 6.521a2.252 2.252 0 00.74-.123 1.622 1.622 0 00.638-.41 2.043 2.043 0 00.448-.744 3.287 3.287 0 00.169-1.12 4.647 4.647 0 00-.118-1.093 2.185 2.185 0 00-.387-.835 1.718 1.718 0 00-.71-.532 2.837 2.837 0 00-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 108 8 8 8 0 00-8-8\\\"></path><path fill=\\\"#fff\\\" d=\\\"M11.184 4v1.48H6.959v1.713h3.877V8.56H6.959v1.961h4.314V12H5.201V4z\\\"></path></svg>\"","import React, { ReactElement } from \"react\";\nimport GreenLineIconSmall from \"../../../static/images/icon-green-line-small.svg\";\nimport RedLineIconSmall from \"../../../static/images/icon-red-line-small.svg\";\nimport OrangeLineIconSmall from \"../../../static/images/icon-orange-line-small.svg\";\nimport BlueLineIconSmall from \"../../../static/images/icon-blue-line-small.svg\";\nimport MattapanSmall from \"../../../static/images/icon-mattapan-line-small.svg\";\nimport CommuterRailIconSmall from \"../../../static/images/icon-mode-commuter-rail-small.svg\";\nimport BusIconSmall from \"../../../static/images/icon-mode-bus-small.svg\";\nimport FerryIconSmall from \"../../../static/images/icon-mode-ferry-small.svg\";\nimport StationSmall from \"../../../static/images/icon-circle-t-small.svg\";\nimport SubwaySmall from \"../../../static/images/icon-mode-subway-small.svg\";\n\ninterface Props {\n  type: string;\n}\n\nconst icons = {\n  \"green_line-small\": GreenLineIconSmall,\n  \"red_line-small\": RedLineIconSmall,\n  \"orange_line-small\": OrangeLineIconSmall,\n  \"blue_line-small\": BlueLineIconSmall,\n  \"mattapan_line-small\": MattapanSmall,\n  \"commuter_rail-small\": CommuterRailIconSmall,\n  \"bus-small\": BusIconSmall,\n  \"ferry-small\": FerryIconSmall,\n  \"subway-small\": SubwaySmall\n};\n\nconst ModeIcon = ({ type }: Props): ReactElement<HTMLElement> => {\n  // @ts-ignore\n  const icon = icons[`${type}-small`] || StationSmall;\n\n  return (\n    <span\n      className=\"m-tnm-sidebar__mode-icon\"\n      // eslint-disable-next-line react/no-danger\n      dangerouslySetInnerHTML={{ __html: icon }}\n    />\n  );\n};\n\nexport default ModeIcon;\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 01-1.367-6.264l.074.971A2.385 2.385 0 109.264 10l.582 1.19A3.331 3.331 0 016.906 13z\\\"></path><path d=\\\"M10.62 11.938L9.278 8.794l-3.271-.001-.318-4.47a.926.926 0 01-.111-.432.891.891 0 11.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 1024 24A24 24 0 0024 0\\\"></path><g fill=\\\"#fff\\\"><path d=\\\"M16.213 13.647a12.878 12.878 0 012.698.261 5.83 5.83 0 012.088.856 3.983 3.983 0 011.348 1.58 5.562 5.562 0 01.479 2.436 4.537 4.537 0 01-.711 2.61 5.161 5.161 0 01-2.103 1.711 4.977 4.977 0 012.857 1.928 5.744 5.744 0 01.942 3.321 5.707 5.707 0 01-.608 2.712 5.287 5.287 0 01-1.639 1.87 7.25 7.25 0 01-2.35 1.073 10.589 10.589 0 01-2.71.348H6.468V13.647zm-.58 8.38a3.275 3.275 0 002.001-.579 2.19 2.19 0 00.783-1.885 2.41 2.41 0 00-.26-1.189 1.942 1.942 0 00-.697-.725 2.945 2.945 0 00-1-.362 6.663 6.663 0 00-1.174-.102h-4.264v4.843zm.261 8.788a6.09 6.09 0 001.276-.13 3.128 3.128 0 001.074-.435 2.202 2.202 0 00.739-.827 2.846 2.846 0 00.275-1.334 2.677 2.677 0 00-.9-2.276 3.836 3.836 0 00-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 1024 24A24 24 0 0024 0\\\"></path><g fill=\\\"#fff\\\"><path d=\\\"M25.889 5.822a1.411 1.411 0 10-1.411-1.41 1.411 1.411 0 001.41 1.41zM31.456 34.211a4.978 4.978 0 003.889-4.822V11.244a5.011 5.011 0 00-5.078-4.91H17.733a5.011 5.011 0 00-5.1 4.9v18.155a4.978 4.978 0 003.89 4.822L10.666 43h3.4l4.189-6.144H29.81L34 43h3.333zM20.7 8.222a.845.845 0 01.845-.81H26.5a.844.844 0 01.833.81v1.479a.833.833 0 01-.866.799l-4.922-.011a.833.833 0 01-.845-.822zm-3.111 23.334a2.222 2.222 0 112.222-2.223 2.222 2.222 0 01-2.222 2.223zm.289-11.812a2.4 2.4 0 01-.228 0 2.422 2.422 0 01-2.305-2.533v-3.267a2.41 2.41 0 012.533-2.544H30.1a2.411 2.411 0 012.533 2.544v3.267q.006.114 0 .228a2.422 2.422 0 01-2.533 2.305zM30.31 31.556a2.233 2.233 0 11.022 0zM22.145 5.822h-.034.034a1.411 1.411 0 10-1.412-1.411 1.411 1.411 0 001.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 003.058-2.986A2.81 2.81 0 008.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 00-2.994-.52 9.942 9.942 0 00-2.987.52c-.574.243-.973.48-1.094 1.074L5.21 6.955v4.555h.807v.777a.567.567 0 00.298.487c.04.02.081.04.115.054a.69.69 0 00.094.027.576.576 0 00.156.02h.23a.636.636 0 00.669-.588v-.777h4.363v.777a.567.567 0 00.297.487c.04.02.081.04.115.054a.689.689 0 00.095.027.577.577 0 00.155.02h.23a.636.636 0 00.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 01.323-.267h5.124a.318.318 0 01.322.267l.344 2.334v.104a.326.326 0 01-.322.326h-5.78a.332.332 0 01-.31-.339.233.233 0 01-.001-.091zm.647 2.753a.829.829 0 11-.037-1.654.831.831 0 11.037 1.654zm5.016 0a.829.829 0 11-.037-1.654.831.831 0 11.037 1.654z\\\"></path><path fill=\\\"#7c878e\\\" d=\\\"M8 0A8.04 8.04 0 00.003 8 8 8 0 108 0\\\"></path><g fill=\\\"#fff\\\"><path d=\\\"M3.638 9.822a1.14 1.14 0 00.346.407 1.493 1.493 0 00.507.23 2.397 2.397 0 00.603.076 3.116 3.116 0 00.451-.035 1.571 1.571 0 00.452-.135.992.992 0 00.352-.277.694.694 0 00.14-.446.629.629 0 00-.186-.472 1.472 1.472 0 00-.486-.301 4.88 4.88 0 00-.683-.211q-.382-.09-.773-.2a6.8 6.8 0 01-.783-.247 2.688 2.688 0 01-.683-.376 1.775 1.775 0 01-.487-.578 1.753 1.753 0 01-.186-.838 1.876 1.876 0 01.236-.959 2.136 2.136 0 01.618-.678 2.69 2.69 0 01.863-.401 3.684 3.684 0 01.964-.13 4.568 4.568 0 011.08.125 2.699 2.699 0 01.918.407 2.062 2.062 0 01.638.717 2.204 2.204 0 01.235 1.06H6.248a1.27 1.27 0 00-.135-.533.888.888 0 00-.307-.331 1.297 1.297 0 00-.436-.17 2.696 2.696 0 00-.537-.05 1.86 1.86 0 00-.382.04 1.022 1.022 0 00-.346.14.868.868 0 00-.256.25.675.675 0 00-.1.382.644.644 0 00.08.341.714.714 0 00.316.241 4.025 4.025 0 00.653.22q.416.111 1.089.282.2.04.557.145a2.677 2.677 0 01.708.337 2.14 2.14 0 01.607.617 1.757 1.757 0 01.256.99 2.191 2.191 0 01-.19.913 1.986 1.986 0 01-.568.728 2.725 2.725 0 01-.933.477 4.415 4.415 0 01-1.29.17 4.531 4.531 0 01-1.15-.145 2.887 2.887 0 01-.984-.456 2.253 2.253 0 01-.678-.794 2.367 2.367 0 01-.24-1.144h1.525a1.314 1.314 0 00.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 01-.87-.19l-15.92-7.17A5.23 5.23 0 0024 38a5.14 5.14 0 00-2.08.44L6 45.64a2.1 2.1 0 01-.87.19 2.14 2.14 0 01-1.76-1 2 2 0 01-.12-2L22.11 2a2.08 2.08 0 013.78 0l18.87 40.87a2 2 0 01-.12 2 2.14 2.14 0 01-1.76.96z\\\"></path><path d=\\\"M24 2.34a.55.55 0 01.53.33L43.39 43.5a.49.49 0 010 .53.61.61 0 01-.49.3.65.65 0 01-.25-.06L26.7 37.11a6.57 6.57 0 00-5.4 0L5.37 44.27a.65.65 0 01-.25.06.61.61 0 01-.49-.3.49.49 0 010-.53L23.47 2.67a.55.55 0 01.53-.33m0-3a3.53 3.53 0 00-3.25 2.07L1.88 42.24a3.59 3.59 0 003.24 5.09A3.74 3.74 0 006.61 47l15.92-7.17a3.64 3.64 0 012.94 0L41.39 47a3.74 3.74 0 001.49.32 3.59 3.59 0 003.24-5.09L27.25 1.41A3.53 3.53 0 0024-.66z\\\"></path></svg>\""],"sourceRoot":""}