@road-labs/map-sdk 0.0.28-rc.0 → 0.0.28-rc.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +9 -2
- package/dist/index.mjs.map +1 -1
- package/dist/types.d.ts +2 -0
- package/package.json +1 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../src/hooks/useOnScreen.ts","../src/i18n.ts","../src/utils/request.ts","../src/contexts/Map.tsx","../src/Boot.tsx","../node_modules/@googlemaps/js-api-loader/dist/index.mjs","../src/utils/loader.ts","../node_modules/latlon-geohash/latlon-geohash.js","../src/components/OverlayView/OverlayView.tsx","../src/utils/location.ts","../src/components/CustomMarker/CustomMarker.tsx","../src/components/MapMarkers/MapMarkers.tsx","../src/components/Map/Map.tsx","../node_modules/@babel/runtime/helpers/esm/extends.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","../node_modules/react-is/cjs/react-is.production.min.js","../node_modules/react-is/cjs/react-is.development.js","../node_modules/react-is/index.js","../node_modules/object-assign/index.js","../node_modules/prop-types/lib/ReactPropTypesSecret.js","../node_modules/prop-types/lib/has.js","../node_modules/prop-types/checkPropTypes.js","../node_modules/prop-types/factoryWithTypeCheckers.js","../node_modules/prop-types/factoryWithThrowingShims.js","../node_modules/prop-types/index.js","../node_modules/dom-helpers/esm/hasClass.js","../node_modules/dom-helpers/esm/addClass.js","../node_modules/dom-helpers/esm/removeClass.js","../node_modules/react-transition-group/esm/config.js","../node_modules/react-transition-group/esm/utils/PropTypes.js","../node_modules/react-transition-group/esm/TransitionGroupContext.js","../node_modules/react-transition-group/esm/utils/reflow.js","../node_modules/react-transition-group/esm/Transition.js","../node_modules/react-transition-group/esm/CSSTransition.js","../node_modules/react-transition-group/esm/SwitchTransition.js","../src/components/Stack/View.tsx","../src/components/Stack/Stack.tsx","../src/components/SearchInput/SearchInput.tsx","../src/components/Checkbox/Checkbox.tsx","../src/components/Range/Range.tsx","../src/components/MultiSelect/MultiSelect.tsx","../src/components/SelectField/SelectField.tsx","../src/assets/connectors/type2.svg","../src/assets/connectors/combo2.svg","../src/assets/connectors/type1.svg","../src/assets/connectors/combo1.svg","../src/assets/connectors/type3.svg","../src/assets/connectors/type3a.svg","../src/assets/connectors/schuko.svg","../src/assets/connectors/chademo.svg","../src/assets/connectors/catarc.svg","../src/components/connectorIcons.ts","../src/utils/filters.ts","../src/screens/Filters/index.tsx","../src/components/LocationPlaceholder/LocationPlaceholder.tsx","../src/components/Icons/Icons.tsx","../src/components/SidebarContainer/SidebarContainer.tsx","../src/components/Debug/Debug.tsx","../src/assets/station-icon.svg","../src/assets/building-icon.svg","../src/assets/car-icon.svg","../src/assets/bolt-icon.svg","../src/assets/pricing-icon.svg","../src/utils/formatters.ts","../src/utils/date.ts","../src/utils/ocpi.ts","../src/components/Price/Price.tsx","../src/components/PriceComponents/PriceComponents.tsx","../src/components/CdrPrice/CdrPrice.tsx","../src/components/ConnectorTariff/ConnectorTariff.tsx","../src/utils/notes.ts","../src/screens/Locations/LocationDetailsV1.tsx","../src/components/LocationRow/LocationRow.tsx","../src/screens/Locations/v2/LocationHeader.tsx","../src/components/StatusDot/StatusDot.tsx","../src/screens/Locations/v2/AvailabilitySummary.tsx","../src/screens/Locations/v2/OperatorSection.tsx","../src/utils/openingTimes.ts","../src/screens/Locations/v2/OpeningHours.tsx","../src/screens/Locations/v2/ParkingType.tsx","../src/screens/Locations/v2/ChargingAccessibility.tsx","../src/screens/Locations/v2/EvseHeader.tsx","../src/screens/Locations/v2/EvseStatus.tsx","../src/screens/Locations/v2/ConnectorSocket.tsx","../src/screens/Locations/v2/ConnectorPricing.tsx","../src/screens/Locations/v2/Tariff.tsx","../src/utils/activeTariff.ts","../src/screens/Locations/v2/TariffChips.tsx","../src/screens/Locations/v2/TariffLine.tsx","../src/screens/Locations/v2/ReportProblemButton.tsx","../src/screens/Locations/v2/NoTariff.tsx","../src/screens/Locations/v2/ActiveTariff.tsx","../src/screens/Locations/v2/Connector.tsx","../src/screens/Locations/v2/Evse.tsx","../src/screens/Locations/v2/Directions.tsx","../src/screens/Locations/v2/Location.tsx","../src/screens/Locations/Locations.tsx","../src/components/BackButton/BackButton.tsx","../src/screens/Locations/TariffNote.tsx","../src/screens/Locations/DynamicTariffs.tsx","../src/screens/Locations/v2/TariffDetails.tsx","../src/assets/close-icon.svg","../src/components/CloseButton/CloseButton.tsx","../src/screens/Locations/index.tsx","../src/assets/filter-icon.svg","../src/Router.tsx","../src/App.tsx"],"sourcesContent":["import { useEffect, useMemo, useState, RefObject } from \"react\";\n\nexport default function useOnScreen(ref: RefObject<HTMLElement>) {\n const [wasIntersecting, setWasIntersecting] = useState(false);\n\n const observer = useMemo(\n () =>\n new IntersectionObserver(([entry]) => {\n if (entry.isIntersecting) {\n setWasIntersecting(true);\n observer.disconnect();\n }\n }),\n [ref],\n );\n\n useEffect(() => {\n if (!ref.current) return;\n observer.observe(ref.current);\n return () => observer.disconnect();\n }, [ref.current]);\n\n return wasIntersecting;\n}\n","export function getLanguage(lng) {\n const language = lng || window.navigator.language.toLowerCase();\n\n const dutchLangCodes = [\"nl\", \"nl-be\", \"nl-nl\"];\n if (dutchLangCodes.includes(language)) {\n return \"nl\";\n }\n\n const englishLangCodes = [\n \"en\",\n \"en-us\",\n \"en-eg\",\n \"en-au\",\n \"en-gb\",\n \"en-ca\",\n \"en-nz\",\n \"en-ie\",\n \"en-za\",\n \"en-jm\",\n \"en-bz\",\n \"en-tt\",\n ];\n\n if (englishLangCodes.includes(language)) {\n return \"en\";\n }\n\n const germanLangCodes = [\"de\", \"de-ch\", \"de-at\", \"de-lu\", \"de-li\", \"de-de\"];\n if (germanLangCodes.includes(language)) {\n return \"de\";\n }\n\n const frenchLangCodes = [\"fr\", \"fr-be\", \"fr-ca\", \"fr-fr\", \"fr-lu\", \"fr-ch\"];\n if (frenchLangCodes.includes(language)) {\n return \"fr\";\n }\n\n const italianLangCodes = [\"it\", \"it-ch\", \"it-it\"];\n if (italianLangCodes.includes(language)) {\n return \"it\";\n }\n\n const spanishLangCodes = [\n \"es\",\n \"es-ar\",\n \"es-bo\",\n \"es-cl\",\n \"es-co\",\n \"es-cr\",\n \"es-do\",\n \"es-ec\",\n \"es-sv\",\n \"es-gt\",\n \"es-hn\",\n \"es-mx\",\n \"es-ni\",\n \"es-pa\",\n \"es-py\",\n \"es-pe\",\n \"es-pr\",\n \"es-es\",\n \"es-uy\",\n \"es-ve\",\n ];\n\n if (spanishLangCodes.includes(language)) {\n return \"es\";\n }\n\n return \"en\";\n}\n\nexport type LabelsType = {\n \"search.placeholder\": string;\n \"cdrPrice.flatFee\": string;\n \"tariffPriceComponent.dynamicTariffHeader\": string;\n \"tariffPriceComponent.noTariff\": string;\n \"tariffPriceComponent.energy\": string;\n \"tariffPriceComponent.time\": string;\n \"tariffPriceComponent.parkingTime\": string;\n \"tariffPriceComponent.parkingTimeWait\": string;\n \"tariffPriceComponent.flat\": string;\n \"tariffPriceComponent.baseTariff\": string;\n \"tariffPriceComponent.active\": string;\n \"tariffPriceComponent.currentPrice\": string;\n \"tariffPriceComponent.viewTariff\": string;\n \"tariffNote.subHeader\": string;\n \"tariffNote.eFluxScheduledTariffNote\";\n \"tariffNote.dynamicScheduledTariffNote\";\n \"tariffNote.scheduledTariffNote\";\n \"tariffNote.baseTariffNote\";\n \"tariff.congestionPricing\": string;\n \"tariff.fullDetailsHeader\": string;\n \"tariff.lastUpdated\": string;\n \"tariff.report\": string;\n \"tariff.reportThanks\": string;\n \"tariff.reportError\": string;\n \"evse.statusAvailable\": string;\n \"evse.statusCharging\": string;\n \"evse.statusUnavailable\": string;\n \"evse.statusRemoved\": string;\n \"evse.statusPlanned\": string;\n \"evse.statusReserved\": string;\n \"evse.statusInoperative\": string;\n \"evse.statusOutOfOrder\": string;\n \"evse.statusError\": string;\n \"evse.statusUnknown\": string;\n \"evse.pricing\": string;\n \"filters.header\": string;\n \"filters.dcChargers\": string;\n \"filters.efluxChargers\": string;\n \"filters.noAdditionalFee\": string;\n \"filters.available\": string;\n \"filters.charging\": string;\n \"filters.notAvailable\": string;\n \"filters.chargingPower\": string;\n \"filters.connectorType\": string;\n \"filters.apply\": string;\n \"filters.clearAll\": string;\n \"filters.onlyShow\": string;\n \"filters.statusHeading\": string;\n \"filters.chargingAccessibility\": string;\n \"filters.accessibilityAll\": string;\n \"filters.accessibilityTesla\": string;\n \"filters.allAccessibility\": string;\n \"filters.remoteStartStop\": string;\n \"filters.searchPhrase\": string;\n \"filters.searchPhrasePlaceholder\": string;\n \"filters.operator\": string;\n \"filters.excludeOperator\": string;\n \"filters.authMethodCapabilities\": string;\n \"filters.authCapability.rfid\": string;\n \"filters.authCapability.plugAndCharge\": string;\n \"filters.authCapability.creditCard\": string;\n \"filters.authCapability.remoteStartStop\": string;\n \"locationType.onStreet\": string;\n \"locationType.parkingGarage\": string;\n \"locationType.undergroundGarage\": string;\n \"locationType.parkingLot\": string;\n \"locationType.other\": string;\n \"locationType.unknown\": string;\n \"dynamicTariffs.subHeader\": string;\n \"location.viewAllHourlyPrices\": string;\n \"location.operatorInfo\": string;\n \"location.operator\": string;\n \"location.suboperator\": string;\n \"location.owner\": string;\n \"location.openingHours\": string;\n \"location.open24_7\": string;\n \"location.openNow\": string;\n \"location.closedNow\": string;\n \"location.closed\": string;\n \"location.opensAt\": string;\n \"location.closesAt\": string;\n \"location.chargingWhenClosed\": string;\n \"location.exceptionalClosings\": string;\n \"location.exceptionalOpenings\": string;\n \"location.visitWebsite\": string;\n \"weekday.mon\": string;\n \"weekday.tue\": string;\n \"weekday.wed\": string;\n \"weekday.thu\": string;\n \"weekday.fri\": string;\n \"weekday.sat\": string;\n \"weekday.sun\": string;\n \"backButton.backTo\": string;\n};\n\nexport const en: LabelsType = {\n \"search.placeholder\": \"Enter a location...\",\n \"cdrPrice.flatFee\": \"{{total}} additional fee\",\n \"tariffPriceComponent.dynamicTariffHeader\": \"Dynamic Tariff - {{date}}\",\n \"tariffPriceComponent.flat\": \"{{total}} session\",\n \"tariffPriceComponent.time\": \"{{total}} / hour\",\n \"tariffPriceComponent.energy\": \"{{total}} / kWh\",\n \"tariffPriceComponent.parkingTime\": \"{{total}} / hour idle fee\",\n \"tariffPriceComponent.parkingTimeWait\":\n \"{{minutes}} min. wait time before idle fee\",\n \"tariffPriceComponent.noTariff\": \"No tariff available\",\n \"tariffPriceComponent.baseTariff\": \"Base Tariff\",\n \"tariffPriceComponent.active\": \"Active now\",\n \"tariffPriceComponent.currentPrice\": \"Current price\",\n \"filters.header\": \"Filters\",\n \"filters.dcChargers\": \"Fast Chargers\",\n \"filters.efluxChargers\": \"E-Flux Chargers\",\n \"filters.noAdditionalFee\": \"Without additional fee per session\",\n \"filters.available\": \"Available\",\n \"filters.charging\": \"Charging\",\n \"filters.notAvailable\": \"Not Available\",\n \"filters.chargingPower\": \"Charging Power [kW]\",\n \"filters.connectorType\": \"Connector Type\",\n \"filters.apply\": \"Apply Filters\",\n \"filters.clearAll\": \"Clear All Filters\",\n \"filters.onlyShow\": \"Only Show\",\n \"filters.statusHeading\": \"Status\",\n \"filters.chargingAccessibility\": \"Vehicle Accessibility\",\n \"filters.accessibilityAll\": \"All vehicles\",\n \"filters.accessibilityTesla\": \"Tesla only\",\n \"filters.allAccessibility\": \"All accessibility types\",\n \"filters.remoteStartStop\": \"Supports remote charge\",\n \"filters.searchPhrase\": \"Search\",\n \"filters.searchPhrasePlaceholder\": \"EVSE ID or name\",\n \"filters.operator\": \"Include operator(s)\",\n \"filters.excludeOperator\": \"Exclude operator(s)\",\n \"filters.authMethodCapabilities\": \"Payment methods\",\n \"filters.authCapability.rfid\": \"RFID\",\n \"filters.authCapability.plugAndCharge\": \"Plug and Charge\",\n \"filters.authCapability.creditCard\": \"Credit / debit card\",\n \"filters.authCapability.remoteStartStop\": \"Remote start/stop\",\n \"evse.statusAvailable\": \"Available\",\n \"evse.statusCharging\": \"Charging\",\n \"evse.statusUnavailable\": \"Unavailable\",\n \"evse.statusRemoved\": \"Removed\",\n \"evse.statusPlanned\": \"Planned\",\n \"evse.statusReserved\": \"Reserved\",\n \"evse.statusInoperative\": \"Inoperative\",\n \"evse.statusOutOfOrder\": \"Out of Order\",\n \"evse.statusError\": \"Error\",\n \"evse.statusUnknown\": \"Unknown\",\n \"locationType.onStreet\": \"On Street\",\n \"locationType.parkingGarage\": \"Parking Garage\",\n \"locationType.undergroundGarage\": \"Underground Garage\",\n \"locationType.parkingLot\": \"Parking Lot\",\n \"locationType.other\": \"Other\",\n \"locationType.unknown\": \"Unknown\",\n \"tariffPriceComponent.viewTariff\": \"View Tariff notes\",\n \"tariffNote.subHeader\": \"Tariff notes\",\n \"tariffNote.eFluxScheduledTariffNote\":\n \"A scheduled tariff overrides base tariff prices for specific time period.\",\n \"tariffNote.dynamicScheduledTariffNote\":\n \"Dynamic price is adjusted automatically based on energy market price (1 hour interval).\",\n \"tariffNote.scheduledTariffNote\":\n \"A scheduled tariff overrides base tariff prices for specific time period.\",\n \"tariffNote.baseTariffNote\":\n \"Tariffs shown here have been sent to E-Flux by roaming partner. Accuracy may vary depending on provider.\",\n \"tariff.congestionPricing\": \"Congestion pricing may apply\",\n \"tariff.fullDetailsHeader\": \"Tariff details\",\n \"tariff.lastUpdated\": \"Last updated {{date}}\",\n \"tariff.report\": \"Report\",\n \"tariff.reportThanks\": \"Thanks for reporting\",\n \"tariff.reportError\": \"Couldn't send, try again\",\n \"evse.pricing\": \"Pricing\",\n \"dynamicTariffs.subHeader\": \"Hourly Prices\",\n \"location.viewAllHourlyPrices\": \"View All Hourly Prices\",\n \"location.operatorInfo\": \"Operator\",\n \"location.operator\": \"Operator\",\n \"location.suboperator\": \"Suboperator\",\n \"location.owner\": \"Owner\",\n \"location.openingHours\": \"Opening hours\",\n \"location.open24_7\": \"Open 24/7\",\n \"location.openNow\": \"Open now\",\n \"location.closedNow\": \"Closed\",\n \"location.closed\": \"Closed\",\n \"location.opensAt\": \"opens {{time}}\",\n \"location.closesAt\": \"until {{time}}\",\n \"location.chargingWhenClosed\": \"Charging available when closed\",\n \"location.exceptionalClosings\": \"Exceptional closings\",\n \"location.exceptionalOpenings\": \"Exceptional openings\",\n \"location.visitWebsite\": \"Website\",\n \"weekday.mon\": \"Mon\",\n \"weekday.tue\": \"Tue\",\n \"weekday.wed\": \"Wed\",\n \"weekday.thu\": \"Thu\",\n \"weekday.fri\": \"Fri\",\n \"weekday.sat\": \"Sat\",\n \"weekday.sun\": \"Sun\",\n \"backButton.backTo\": \"Back To\",\n};\n\nexport const nl: LabelsType = {\n \"search.placeholder\": \"Voer een locatie in...\",\n \"cdrPrice.flatFee\": \"{{total}} extra kosten\",\n \"tariffPriceComponent.dynamicTariffHeader\": \"Dynamisch Tarief - {{date}}\",\n \"tariffPriceComponent.flat\": \"{{total}} sessie\",\n \"tariffPriceComponent.time\": \"{{total}} / uur\",\n \"tariffPriceComponent.energy\": \"{{total}} / kWh\",\n \"tariffPriceComponent.parkingTime\": \"{{total}} / uur blokkeertarief\",\n \"tariffPriceComponent.parkingTimeWait\":\n \"{{minutes}} min. wachttijd voor blokkeertarief\",\n \"tariffPriceComponent.noTariff\": \"Geen beschikbaar tarief\",\n \"tariffPriceComponent.baseTariff\": \"Basistarief\",\n \"tariffPriceComponent.active\": \"Nu actief\",\n \"tariffPriceComponent.currentPrice\": \"Huidige prijs\",\n \"filters.header\": \"Filters\",\n \"filters.dcChargers\": \"DC-laders\",\n \"filters.efluxChargers\": \"E-Flux-laders\",\n \"filters.noAdditionalFee\": \"Zonder extra kosten per sessie\",\n \"filters.available\": \"Beschikbaar\",\n \"filters.charging\": \"Laden\",\n \"filters.notAvailable\": \"Niet beschikbaar\",\n \"filters.chargingPower\": \"Laadvermogen [kW]\",\n \"filters.connectorType\": \"Aansluitingstype\",\n \"filters.apply\": \"Filters toepassen\",\n \"filters.clearAll\": \"Alle filters wissen\",\n \"filters.onlyShow\": \"Alleen tonen\",\n \"filters.statusHeading\": \"Status\",\n \"filters.chargingAccessibility\": \"Voertuigtoegang\",\n \"filters.accessibilityAll\": \"Alle voertuigen\",\n \"filters.accessibilityTesla\": \"Alleen Tesla\",\n \"filters.allAccessibility\": \"Alle toegankelijkheidstypes\",\n \"filters.remoteStartStop\": \"Ondersteunt op afstand laden\",\n \"filters.searchPhrase\": \"Zoeken\",\n \"filters.searchPhrasePlaceholder\": \"EVSE-ID of naam\",\n \"filters.operator\": \"Operator(s) opnemen\",\n \"filters.excludeOperator\": \"Operator(s) uitsluiten\",\n \"filters.authMethodCapabilities\": \"Betaalmethoden\",\n \"filters.authCapability.rfid\": \"RFID\",\n \"filters.authCapability.plugAndCharge\": \"Plug and Charge\",\n \"filters.authCapability.creditCard\": \"Creditcard / pinpas\",\n \"filters.authCapability.remoteStartStop\": \"Op afstand starten/stoppen\",\n \"evse.statusAvailable\": \"Beschikbaar\",\n \"evse.statusCharging\": \"Laden\",\n \"evse.statusUnavailable\": \"Niet beschikbaar\",\n \"evse.statusError\": \"Fout\",\n \"evse.statusRemoved\": \"Verwijderd\",\n \"evse.statusPlanned\": \"Gepland\",\n \"evse.statusReserved\": \"Gereserveerd\",\n \"evse.statusInoperative\": \"Inoperative\",\n \"evse.statusOutOfOrder\": \"Uit van orde\",\n \"evse.statusUnknown\": \"Onbekend\",\n \"locationType.onStreet\": \"Op straat\",\n \"locationType.parkingGarage\": \"Parkeergarage\",\n \"locationType.undergroundGarage\": \"Ondergrondse garage\",\n \"locationType.parkingLot\": \"Parkeerterrein\",\n \"locationType.other\": \"Anders\",\n \"locationType.unknown\": \"Onbekend\",\n \"tariffPriceComponent.viewTariff\": \"Tariefnotitie bekijken\",\n \"tariffNote.subHeader\": \"Tariefnotities\",\n \"tariffNote.eFluxScheduledTariffNote\":\n \"Een gepland tarief overschrijft de basis tariefprijzen voor een specifieke periode.\",\n \"tariffNote.dynamicScheduledTariffNote\":\n \"De dynamische prijs wordt automatisch aangepast op basis van de energiemarktprijs (interval van 1 uur).\",\n \"tariffNote.scheduledTariffNote\":\n \"Een gepland tarief overschrijft de basis tariefprijzen voor een specifieke periode.\",\n \"tariffNote.baseTariffNote\":\n \"De hier getoonde tarieven zijn door de roamingpartner aan E-Flux verstrekt. De nauwkeurigheid kan variëren afhankelijk van de aanbieder.\",\n \"tariff.congestionPricing\": \"Congestietarief kan van toepassing zijn\",\n \"tariff.fullDetailsHeader\": \"Tariefdetails\",\n \"tariff.lastUpdated\": \"Laatst bijgewerkt {{date}}\",\n \"tariff.report\": \"Rapporteren\",\n \"tariff.reportThanks\": \"Bedankt voor de melding\",\n \"tariff.reportError\": \"Versturen mislukt, probeer opnieuw\",\n \"evse.pricing\": \"Tarieven\",\n \"dynamicTariffs.subHeader\": \"Uurtarieven\",\n \"location.viewAllHourlyPrices\": \"Bekijk Alle Uurprijzen\",\n \"location.operatorInfo\": \"Exploitant\",\n \"location.operator\": \"Exploitant\",\n \"location.suboperator\": \"Subexploitant\",\n \"location.owner\": \"Eigenaar\",\n \"location.openingHours\": \"Openingstijden\",\n \"location.open24_7\": \"24/7 geopend\",\n \"location.openNow\": \"Nu open\",\n \"location.closedNow\": \"Gesloten\",\n \"location.closed\": \"Gesloten\",\n \"location.opensAt\": \"opent om {{time}}\",\n \"location.closesAt\": \"tot {{time}}\",\n \"location.chargingWhenClosed\": \"Laden mogelijk wanneer gesloten\",\n \"location.exceptionalClosings\": \"Uitzonderlijke sluitingen\",\n \"location.exceptionalOpenings\": \"Uitzonderlijke openingen\",\n \"location.visitWebsite\": \"Website\",\n \"weekday.mon\": \"Ma\",\n \"weekday.tue\": \"Di\",\n \"weekday.wed\": \"Wo\",\n \"weekday.thu\": \"Do\",\n \"weekday.fri\": \"Vr\",\n \"weekday.sat\": \"Za\",\n \"weekday.sun\": \"Zo\",\n \"backButton.backTo\": \"Terug Naar\",\n};\n\nexport const de: LabelsType = {\n \"search.placeholder\": \"Geben Sie einen Ort ein...\",\n \"cdrPrice.flatFee\": \"{{total}} Zusatzgebühr\",\n \"tariffPriceComponent.dynamicTariffHeader\": \"Dynamischer Tarif - {{date}}\",\n \"tariffPriceComponent.flat\": \"{{total}} Sitzung\",\n \"tariffPriceComponent.time\": \"{{total}} / Stunde\",\n \"tariffPriceComponent.energy\": \"{{total}} / kWh\",\n \"tariffPriceComponent.parkingTime\": \"{{total}} / Stunde Blockiergebühr\",\n \"tariffPriceComponent.parkingTimeWait\":\n \"{{minutes}} Min. Wartezeit vor der Blockiergebühr\",\n \"tariffPriceComponent.noTariff\": \"Kein Tarif verfügbar\",\n \"tariffPriceComponent.baseTariff\": \"Grundtarif\",\n \"tariffPriceComponent.active\": \"Aktuell aktiv\",\n \"tariffPriceComponent.currentPrice\": \"Aktueller Preis\",\n \"filters.header\": \"Filter\",\n \"filters.dcChargers\": \"Gleichstrom-Ladegeräte\",\n \"filters.efluxChargers\": \"E-Flux-Ladegeräte\",\n \"filters.noAdditionalFee\": \"Ohne zusätzliche Gebühr pro Sitzung\",\n \"filters.available\": \"Verfügbar\",\n \"filters.charging\": \"Lädt\",\n \"filters.notAvailable\": \"Nicht verfügbar\",\n \"filters.chargingPower\": \"Ladeleistung [kW]\",\n \"filters.connectorType\": \"Steckertyp\",\n \"filters.apply\": \"Filter anwenden\",\n \"filters.clearAll\": \"Alle Filter löschen\",\n \"filters.onlyShow\": \"Nur anzeigen\",\n \"filters.statusHeading\": \"Status\",\n \"filters.chargingAccessibility\": \"Fahrzeugzugänglichkeit\",\n \"filters.accessibilityAll\": \"Alle Fahrzeuge\",\n \"filters.accessibilityTesla\": \"Nur Tesla\",\n \"filters.allAccessibility\": \"Alle Zugänglichkeitstypen\",\n \"filters.remoteStartStop\": \"Unterstützt Fernladen\",\n \"filters.searchPhrase\": \"Suche\",\n \"filters.searchPhrasePlaceholder\": \"EVSE-ID oder Name\",\n \"filters.operator\": \"Betreiber einschließen\",\n \"filters.excludeOperator\": \"Betreiber ausschließen\",\n \"filters.authMethodCapabilities\": \"Zahlungsmethoden\",\n \"filters.authCapability.rfid\": \"RFID\",\n \"filters.authCapability.plugAndCharge\": \"Plug and Charge\",\n \"filters.authCapability.creditCard\": \"Kredit- / Debitkarte\",\n \"filters.authCapability.remoteStartStop\": \"Fernstart/-stopp\",\n \"evse.statusAvailable\": \"Verfügbar\",\n \"evse.statusCharging\": \"Lädt\",\n \"evse.statusUnavailable\": \"Nicht verfügbar\",\n \"evse.statusRemoved\": \"Entfernt\",\n \"evse.statusPlanned\": \"Geplant\",\n \"evse.statusReserved\": \"Reserviert\",\n \"evse.statusInoperative\": \"Inoperative\",\n \"evse.statusOutOfOrder\": \"Ausgeschaltet\",\n \"evse.statusError\": \"Fehler\",\n \"evse.statusUnknown\": \"Unbekannt\",\n \"evse.pricing\": \"Preisbildung\",\n \"locationType.onStreet\": \"Straße\",\n \"locationType.parkingGarage\": \"Parkhaus\",\n \"locationType.undergroundGarage\": \"Tiefgarage\",\n \"locationType.parkingLot\": \"Parkplatz\",\n \"locationType.other\": \"Andere\",\n \"locationType.unknown\": \"Unbekannt\",\n \"tariffPriceComponent.viewTariff\": \"Tarif anzeigen\",\n \"tariffNote.subHeader\": \"Tarifhinweise\",\n \"tariffNote.eFluxScheduledTariffNote\":\n \"Ein geplanter Tarif überschreibt die Basistarifpreise für einen bestimmten Zeitraum.\",\n \"tariffNote.dynamicScheduledTariffNote\":\n \"Der dynamische Preis wird automatisch basierend auf dem Energiepreis auf dem Markt angepasst (im Intervall von 1 Stunde).\",\n \"tariffNote.scheduledTariffNote\":\n \"Ein geplanter Tarif überschreibt die Basistarifpreise für einen bestimmten Zeitraum.\",\n \"tariffNote.baseTariffNote\":\n \"Die hier angezeigten Tarife wurden von einem Roaming-Partner an E-Flux gesendet. Die Genauigkeit kann je nach Anbieter variieren.\",\n \"tariff.congestionPricing\": \"Überlastungstarif kann anfallen\",\n \"tariff.fullDetailsHeader\": \"Tarifdetails\",\n \"tariff.lastUpdated\": \"Zuletzt aktualisiert {{date}}\",\n \"tariff.report\": \"Melden\",\n \"tariff.reportThanks\": \"Danke für die Meldung\",\n \"tariff.reportError\": \"Senden fehlgeschlagen, erneut versuchen\",\n \"dynamicTariffs.subHeader\": \"Stundentarife\",\n \"location.viewAllHourlyPrices\": \"Alle Stundenpreise anzeigen\",\n \"location.operatorInfo\": \"Betreiber\",\n \"location.operator\": \"Betreiber\",\n \"location.suboperator\": \"Unterbetreiber\",\n \"location.owner\": \"Eigentümer\",\n \"location.openingHours\": \"Öffnungszeiten\",\n \"location.open24_7\": \"24/7 geöffnet\",\n \"location.openNow\": \"Jetzt geöffnet\",\n \"location.closedNow\": \"Geschlossen\",\n \"location.closed\": \"Geschlossen\",\n \"location.opensAt\": \"öffnet um {{time}}\",\n \"location.closesAt\": \"bis {{time}}\",\n \"location.chargingWhenClosed\": \"Laden auch außerhalb der Öffnungszeiten möglich\",\n \"location.exceptionalClosings\": \"Ausnahmsweise geschlossen\",\n \"location.exceptionalOpenings\": \"Ausnahmsweise geöffnet\",\n \"location.visitWebsite\": \"Website\",\n \"weekday.mon\": \"Mo\",\n \"weekday.tue\": \"Di\",\n \"weekday.wed\": \"Mi\",\n \"weekday.thu\": \"Do\",\n \"weekday.fri\": \"Fr\",\n \"weekday.sat\": \"Sa\",\n \"weekday.sun\": \"So\",\n \"backButton.backTo\": \"Zurück zu\",\n};\n\nexport const fr: LabelsType = {\n \"search.placeholder\": \"Entrez un lieu...\",\n \"cdrPrice.flatFee\": \"{{total}} frais supplémentaires\",\n \"tariffPriceComponent.dynamicTariffHeader\": \"Tarif Dynamique - {{date}}\",\n \"tariffPriceComponent.flat\": \"{{total}} session\",\n \"tariffPriceComponent.time\": \"{{total}} / heure\",\n \"tariffPriceComponent.energy\": \"{{total}} / kWh\",\n \"tariffPriceComponent.parkingTime\":\n \"{{total}} / frais d'occupation par heure\",\n \"tariffPriceComponent.parkingTimeWait\":\n \"{{minutes}} min. avant frais d'occupation\",\n \"tariffPriceComponent.noTariff\": \"Aucun tarif disponible\",\n \"tariffPriceComponent.baseTariff\": \"Tarif de base\",\n \"tariffPriceComponent.active\": \"Actuellement actif\",\n \"tariffPriceComponent.currentPrice\": \"Prix actuel\",\n \"filters.header\": \"Filtres\",\n \"filters.dcChargers\": \"Chargeurs à courant continu\",\n \"filters.efluxChargers\": \"Chargeurs E-Flux\",\n \"filters.noAdditionalFee\": \"Sans frais supplémentaires par séance\",\n \"filters.available\": \"Disponible\",\n \"filters.charging\": \"En charge\",\n \"filters.notAvailable\": \"Indisponible\",\n \"filters.chargingPower\": \"Puissance de charge [kW]\",\n \"filters.connectorType\": \"Type de connecteur\",\n \"filters.apply\": \"Appliquer les filtres\",\n \"filters.clearAll\": \"Effacer tous les filtres\",\n \"filters.onlyShow\": \"Afficher uniquement\",\n \"filters.statusHeading\": \"Statut\",\n \"filters.chargingAccessibility\": \"Accessibilité véhicule\",\n \"filters.accessibilityAll\": \"Tous véhicules\",\n \"filters.accessibilityTesla\": \"Tesla seulement\",\n \"filters.allAccessibility\": \"Tous types d'accessibilité\",\n \"filters.remoteStartStop\": \"Prend en charge la recharge à distance\",\n \"filters.searchPhrase\": \"Rechercher\",\n \"filters.searchPhrasePlaceholder\": \"ID EVSE ou nom\",\n \"filters.operator\": \"Inclure le(s) opérateur(s)\",\n \"filters.excludeOperator\": \"Exclure le(s) opérateur(s)\",\n \"filters.authMethodCapabilities\": \"Moyens de paiement\",\n \"filters.authCapability.rfid\": \"RFID\",\n \"filters.authCapability.plugAndCharge\": \"Plug and Charge\",\n \"filters.authCapability.creditCard\": \"Carte de crédit / débit\",\n \"filters.authCapability.remoteStartStop\": \"Démarrage/arrêt à distance\",\n \"evse.statusAvailable\": \"Disponible\",\n \"evse.statusCharging\": \"En charge\",\n \"evse.statusUnavailable\": \"Indisponible\",\n \"evse.statusRemoved\": \"Supprimé\",\n \"evse.statusPlanned\": \"Planifié\",\n \"evse.statusReserved\": \"Réservé\",\n \"evse.statusInoperative\": \"Hors service\",\n \"evse.statusOutOfOrder\": \"En panne\",\n \"evse.statusError\": \"Erreur\",\n \"evse.statusUnknown\": \"Inconnu\",\n \"evse.pricing\": \"Tarification\",\n \"locationType.onStreet\": \"Dans la rue\",\n \"locationType.parkingGarage\": \"Parking couvert\",\n \"locationType.undergroundGarage\": \"Parking souterrain\",\n \"locationType.parkingLot\": \"Parking\",\n \"locationType.other\": \"Autre\",\n \"locationType.unknown\": \"Inconnu\",\n \"tariffPriceComponent.viewTariff\": \"Voir le tarif\",\n \"tariffNote.subHeader\": \"Notes tarifaires\",\n \"tariffNote.eFluxScheduledTariffNote\":\n \"Un tarif programmé remplace les prix de base du tarif pour une période spécifique.\",\n \"tariffNote.dynamicScheduledTariffNote\":\n \"Le prix dynamique est ajusté automatiquement en fonction du prix du marché de l'énergie (intervalle d'une heure).\",\n \"tariffNote.scheduledTariffNote\":\n \"Un tarif programmé remplace les prix de base du tarif pour une période spécifique.\",\n \"tariffNote.baseTariffNote\":\n \"Les tarifs affichés ici ont été transmis à E-Flux par le partenaire d'itinérance. La précision peut varier en fonction du fournisseur.\",\n \"tariff.congestionPricing\": \"Tarification de congestion peut s'appliquer\",\n \"tariff.fullDetailsHeader\": \"Détails du tarif\",\n \"tariff.lastUpdated\": \"Mis à jour {{date}}\",\n \"tariff.report\": \"Signaler\",\n \"tariff.reportThanks\": \"Merci pour le signalement\",\n \"tariff.reportError\": \"Échec de l'envoi, réessayez\",\n \"dynamicTariffs.subHeader\": \"Tarifs horaires\",\n \"location.viewAllHourlyPrices\": \"Voir tous les tarifs horaires\",\n \"location.operatorInfo\": \"Opérateur\",\n \"location.operator\": \"Opérateur\",\n \"location.suboperator\": \"Sous-opérateur\",\n \"location.owner\": \"Propriétaire\",\n \"location.openingHours\": \"Heures d'ouverture\",\n \"location.open24_7\": \"Ouvert 24h/24, 7j/7\",\n \"location.openNow\": \"Ouvert\",\n \"location.closedNow\": \"Fermé\",\n \"location.closed\": \"Fermé\",\n \"location.opensAt\": \"ouvre à {{time}}\",\n \"location.closesAt\": \"jusqu'à {{time}}\",\n \"location.chargingWhenClosed\": \"Recharge possible hors des heures d'ouverture\",\n \"location.exceptionalClosings\": \"Fermetures exceptionnelles\",\n \"location.exceptionalOpenings\": \"Ouvertures exceptionnelles\",\n \"location.visitWebsite\": \"Site web\",\n \"weekday.mon\": \"Lun\",\n \"weekday.tue\": \"Mar\",\n \"weekday.wed\": \"Mer\",\n \"weekday.thu\": \"Jeu\",\n \"weekday.fri\": \"Ven\",\n \"weekday.sat\": \"Sam\",\n \"weekday.sun\": \"Dim\",\n \"backButton.backTo\": \"Retour à\",\n};\n\nexport const it: LabelsType = {\n \"search.placeholder\": \"Inserisci una posizione...\",\n \"cdrPrice.flatFee\": \"{{total}} costi aggiuntivi\",\n \"tariffPriceComponent.dynamicTariffHeader\": \"Tariffa dinamica - {{date}}\",\n \"tariffPriceComponent.flat\": \"{{total}} sessione\",\n \"tariffPriceComponent.time\": \"{{total}} / ora\",\n \"tariffPriceComponent.energy\": \"{{total}} / kWh\",\n \"tariffPriceComponent.parkingTime\": \"{{total}} / ora tariffa di inattività\",\n \"tariffPriceComponent.parkingTimeWait\":\n \"{{minutes}} min. tempo di attesa prima della tariffa di inattività\",\n \"tariffPriceComponent.noTariff\": \"Nessuna tariffa disponibile\",\n \"tariffPriceComponent.baseTariff\": \"Tariffa base\",\n \"tariffPriceComponent.active\": \"Attivo ora\",\n \"tariffPriceComponent.currentPrice\": \"Prezzo attuale\",\n \"filters.header\": \"Filtri\",\n \"filters.dcChargers\": \"Caricabatterie DC\",\n \"filters.efluxChargers\": \"Caricabatterie E-Flux\",\n \"filters.noAdditionalFee\": \"Senza costi aggiuntivi per sessione\",\n \"filters.available\": \"Disponibile\",\n \"filters.charging\": \"In carica\",\n \"filters.notAvailable\": \"Non disponibile\",\n \"filters.chargingPower\": \"Potenza di ricarica [kW]\",\n \"filters.connectorType\": \"Tipo di connettore\",\n \"filters.apply\": \"Applica filtri\",\n \"filters.clearAll\": \"Cancella tutti i filtri\",\n \"filters.onlyShow\": \"Mostra solo\",\n \"filters.statusHeading\": \"Stato\",\n \"filters.chargingAccessibility\": \"Accessibilità del veicolo\",\n \"filters.accessibilityAll\": \"Tutti i veicoli\",\n \"filters.accessibilityTesla\": \"Solo Tesla\",\n \"filters.allAccessibility\": \"Tutti i tipi di accessibilità\",\n \"filters.remoteStartStop\": \"Supporta la ricarica da remoto\",\n \"filters.searchPhrase\": \"Cerca\",\n \"filters.searchPhrasePlaceholder\": \"ID EVSE o nome\",\n \"filters.operator\": \"Includi operatore/i\",\n \"filters.excludeOperator\": \"Escludi operatore/i\",\n \"filters.authMethodCapabilities\": \"Metodi di pagamento\",\n \"filters.authCapability.rfid\": \"RFID\",\n \"filters.authCapability.plugAndCharge\": \"Plug and Charge\",\n \"filters.authCapability.creditCard\": \"Carta di credito / debito\",\n \"filters.authCapability.remoteStartStop\": \"Avvio/stop remoto\",\n \"evse.statusAvailable\": \"Disponibile\",\n \"evse.statusCharging\": \"In carica\",\n \"evse.statusUnavailable\": \"Non disponibile\",\n \"evse.statusRemoved\": \"Rimossa\",\n \"evse.statusPlanned\": \"Pianificata\",\n \"evse.statusReserved\": \"Réservé\",\n \"evse.statusInoperative\": \"Inoperativo\",\n \"evse.statusOutOfOrder\": \"Fuori servizio\",\n \"evse.statusError\": \"Errore\",\n \"evse.statusUnknown\": \"Sconosciuto\",\n \"locationType.onStreet\": \"In strada\",\n \"locationType.parkingGarage\": \"Garage per il parcheggio\",\n \"locationType.undergroundGarage\": \"Garage sotterraneo\",\n \"locationType.parkingLot\": \"Parcheggio\",\n \"locationType.other\": \"Altro\",\n \"locationType.unknown\": \"Sconosciuto\",\n \"tariffPriceComponent.viewTariff\": \"Visualizza note tariffarie\",\n \"tariffNote.subHeader\": \"Note tariffarie\",\n \"tariffNote.eFluxScheduledTariffNote\":\n \"Una tariffa programmata sostituisce i prezzi della tariffa base per un periodo di tempo specifico.\",\n \"tariffNote.dynamicScheduledTariffNote\":\n \"Il prezzo dinamico si regola automaticamente in base al prezzo del mercato dell'energia (intervallo di 1 ora).\",\n \"tariffNote.scheduledTariffNote\":\n \"Una tariffa programmata sostituisce i prezzi della tariffa base per un periodo di tempo specifico.\",\n \"tariffNote.baseTariffNote\":\n \"Le tariffe mostrate qui sono state inviate a E-Flux dal partner di roaming. L'accuratezza può variare a seconda del fornitore.\",\n \"tariff.congestionPricing\":\n \"Potrebbero essere applicate tariffe di congestione\",\n \"tariff.fullDetailsHeader\": \"Dettagli tariffa\",\n \"tariff.lastUpdated\": \"Ultimo aggiornamento {{date}}\",\n \"tariff.report\": \"Segnala\",\n \"tariff.reportThanks\": \"Grazie per la segnalazione\",\n \"tariff.reportError\": \"Invio non riuscito, riprova\",\n \"evse.pricing\": \"Prezzi\",\n \"dynamicTariffs.subHeader\": \"Prezzi orari\",\n \"location.viewAllHourlyPrices\": \"Visualizza tutti i prezzi orari\",\n \"location.operatorInfo\": \"Operatore\",\n \"location.operator\": \"Operatore\",\n \"location.suboperator\": \"Sub-operatore\",\n \"location.owner\": \"Proprietario\",\n \"location.openingHours\": \"Orari di apertura\",\n \"location.open24_7\": \"Aperto 24/7\",\n \"location.openNow\": \"Aperto ora\",\n \"location.closedNow\": \"Chiuso\",\n \"location.closed\": \"Chiuso\",\n \"location.opensAt\": \"apre alle {{time}}\",\n \"location.closesAt\": \"fino alle {{time}}\",\n \"location.chargingWhenClosed\": \"Ricarica disponibile anche da chiuso\",\n \"location.exceptionalClosings\": \"Chiusure eccezionali\",\n \"location.exceptionalOpenings\": \"Aperture eccezionali\",\n \"location.visitWebsite\": \"Sito web\",\n \"weekday.mon\": \"Lun\",\n \"weekday.tue\": \"Mar\",\n \"weekday.wed\": \"Mer\",\n \"weekday.thu\": \"Gio\",\n \"weekday.fri\": \"Ven\",\n \"weekday.sat\": \"Sab\",\n \"weekday.sun\": \"Dom\",\n \"backButton.backTo\": \"Torna a\",\n};\n\nexport const es: LabelsType = {\n \"search.placeholder\": \"Ingrese una ubicación...\",\n \"cdrPrice.flatFee\": \"{{total}} tarifa adicional\",\n \"tariffPriceComponent.dynamicTariffHeader\": \"Tarifa Dinámica - {{date}}\",\n \"tariffPriceComponent.flat\": \"{{total}} sesión\",\n \"tariffPriceComponent.time\": \"{{total}} / hora\",\n \"tariffPriceComponent.energy\": \"{{total}} / kWh\",\n \"tariffPriceComponent.parkingTime\": \"{{total}} / hora tarifa de inactividad\",\n \"tariffPriceComponent.parkingTimeWait\":\n \"{{minutes}} min. tiempo de espera antes de la tarifa de inactividad\",\n \"tariffPriceComponent.noTariff\": \"Tarifa no disponible\",\n \"tariffPriceComponent.baseTariff\": \"Tarifa Base\",\n \"tariffPriceComponent.active\": \"Activo ahora\",\n \"tariffPriceComponent.currentPrice\": \"Precio actual\",\n \"filters.header\": \"Filtros\",\n \"filters.dcChargers\": \"Cargadores DC\",\n \"filters.efluxChargers\": \"Cargadores E-Flux\",\n \"filters.noAdditionalFee\": \"Sin tarifa adicional por sesión\",\n \"filters.available\": \"Disponible\",\n \"filters.charging\": \"Cargando\",\n \"filters.notAvailable\": \"No Disponible\",\n \"filters.chargingPower\": \"Potencia de Carga [kW]\",\n \"filters.connectorType\": \"Tipo de Conector\",\n \"filters.apply\": \"Aplicar Filtros\",\n \"filters.clearAll\": \"Limpiar Todos los Filtros\",\n \"filters.onlyShow\": \"Mostrar Solo\",\n \"filters.statusHeading\": \"Estado\",\n \"filters.chargingAccessibility\": \"Accesibilidad del vehículo\",\n \"filters.accessibilityAll\": \"Todos los vehículos\",\n \"filters.accessibilityTesla\": \"Solo Tesla\",\n \"filters.allAccessibility\": \"Todos los tipos de accesibilidad\",\n \"filters.remoteStartStop\": \"Admite carga remota\",\n \"filters.searchPhrase\": \"Buscar\",\n \"filters.searchPhrasePlaceholder\": \"ID de EVSE o nombre\",\n \"filters.operator\": \"Incluir operador(es)\",\n \"filters.excludeOperator\": \"Excluir operador(es)\",\n \"filters.authMethodCapabilities\": \"Métodos de pago\",\n \"filters.authCapability.rfid\": \"RFID\",\n \"filters.authCapability.plugAndCharge\": \"Plug and Charge\",\n \"filters.authCapability.creditCard\": \"Tarjeta de crédito / débito\",\n \"filters.authCapability.remoteStartStop\": \"Inicio/parada remota\",\n \"evse.statusRemoved\": \"Eliminado\",\n \"evse.statusPlanned\": \"Planificado\",\n \"evse.statusReserved\": \"Reservado\",\n \"evse.statusInoperative\": \"Fuera de servicio\",\n \"evse.statusOutOfOrder\": \"Averiado\",\n \"evse.statusAvailable\": \"Disponible\",\n \"evse.statusCharging\": \"Cargando\",\n \"evse.statusUnavailable\": \"No Disponible\",\n \"evse.statusError\": \"Error\",\n \"evse.statusUnknown\": \"Desconocido\",\n \"locationType.onStreet\": \"En la calle\",\n \"locationType.parkingGarage\": \"Garaje para Estacionar\",\n \"locationType.undergroundGarage\": \"Garaje Subterráneo\",\n \"locationType.parkingLot\": \"Estacionamiento\",\n \"locationType.other\": \"Otro\",\n \"locationType.unknown\": \"Desconocido\",\n \"tariffPriceComponent.viewTariff\": \"Ver notas de tarifas\",\n \"tariffNote.subHeader\": \"Notas de Tarifas\",\n \"tariffNote.eFluxScheduledTariffNote\":\n \"Una tarifa programada anula los precios de la tarifa base para un período de tiempo específico.\",\n \"tariffNote.dynamicScheduledTariffNote\":\n \"El precio dinámico se ajusta automáticamente según el precio del mercado de la energía (intervalo de 1 hora).\",\n \"tariffNote.scheduledTariffNote\":\n \"Una tarifa programada anula los precios de la tarifa base para un período de tiempo específico.\",\n \"tariffNote.baseTariffNote\":\n \"Las tarifas mostradas aquí han sido enviadas a E-Flux por el socio de roaming. La precisión puede variar según el proveedor.\",\n \"tariff.congestionPricing\": \"Puede aplicarse tarifa por congestión\",\n \"tariff.fullDetailsHeader\": \"Detalles de la tarifa\",\n \"tariff.lastUpdated\": \"Última actualización {{date}}\",\n \"tariff.report\": \"Reportar\",\n \"tariff.reportThanks\": \"Gracias por reportarlo\",\n \"tariff.reportError\": \"Error al enviar, inténtalo de nuevo\",\n \"evse.pricing\": \"Precios\",\n \"dynamicTariffs.subHeader\": \"Precios por Hora\",\n \"location.viewAllHourlyPrices\": \"Ver Todos los Precios por Hora\",\n \"location.operatorInfo\": \"Operador\",\n \"location.operator\": \"Operador\",\n \"location.suboperator\": \"Suboperador\",\n \"location.owner\": \"Propietario\",\n \"location.openingHours\": \"Horario de apertura\",\n \"location.open24_7\": \"Abierto 24/7\",\n \"location.openNow\": \"Abierto ahora\",\n \"location.closedNow\": \"Cerrado\",\n \"location.closed\": \"Cerrado\",\n \"location.opensAt\": \"abre a las {{time}}\",\n \"location.closesAt\": \"hasta las {{time}}\",\n \"location.chargingWhenClosed\": \"Carga disponible cuando está cerrado\",\n \"location.exceptionalClosings\": \"Cierres excepcionales\",\n \"location.exceptionalOpenings\": \"Aperturas excepcionales\",\n \"location.visitWebsite\": \"Sitio web\",\n \"weekday.mon\": \"Lun\",\n \"weekday.tue\": \"Mar\",\n \"weekday.wed\": \"Mié\",\n \"weekday.thu\": \"Jue\",\n \"weekday.fri\": \"Vie\",\n \"weekday.sat\": \"Sáb\",\n \"weekday.sun\": \"Dom\",\n \"backButton.backTo\": \"Volver a\",\n};\n\nexport const strings = {\n en,\n nl,\n de,\n fr,\n it,\n es,\n};\n","import { RemoteConfig } from \"../types\";\n\ntype RequestOptionsType = {\n method?: string;\n body?: string;\n authorization?: string;\n version?: string;\n headers?: {\n \"Content-Type\": string;\n };\n};\n\nexport async function request(url: string, options?: RequestOptionsType) {\n try {\n const response = await fetch(url, {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...(options.version && {\n version: options.version,\n }),\n ...(options.authorization &&\n options.version === \"v2\" && {\n Authorization: `Bearer ${options.authorization}`,\n }),\n },\n ...options,\n });\n\n switch (response.status) {\n case 200:\n return response.json();\n case 400:\n throw new Error(\"Bad request\");\n case 404:\n throw new Error(\"Not Found\");\n case 500:\n throw new Error(\"Server Error\");\n case 503:\n throw new Error(\"Timeout!\");\n default:\n throw new Error(`Unexpected status: ${response.status}`);\n }\n } catch (e) {\n if (e instanceof DOMException) {\n return null;\n }\n throw e;\n }\n}\n\nexport async function _fetchGeohashes(\n apiRoot,\n version,\n authorization,\n limitToLocationIds,\n { precision, bbox, ...props },\n): Promise<any> {\n return request(`${apiRoot}/1/map/search`, {\n method: \"POST\",\n version,\n authorization,\n body: JSON.stringify({\n gridPrecision: precision,\n bbox,\n ...(limitToLocationIds?.length > 0 && {\n locationIds: limitToLocationIds,\n }),\n ...props,\n ...(props?.operatorOnly ? { operator: [props.operatorOnly] } : {}),\n ...(props?.chargingAccessibility &&\n props.chargingAccessibility !== \"ALL\" && {\n chargingAccessibility: props.chargingAccessibility,\n }),\n searchPhrase: props?.searchPhrase || undefined,\n excludeOperator: props?.excludeOperator?.length\n ? props.excludeOperator\n : undefined,\n authMethodCapabilities: props?.authMethodCapabilities?.length\n ? props.authMethodCapabilities\n : undefined,\n }),\n });\n}\n\nexport async function _fetchTariffs(\n apiRoot,\n version,\n authorization,\n { origin, ids },\n): Promise<any> {\n return request(`${apiRoot}/1/map/tariff`, {\n method: \"POST\",\n version,\n authorization,\n body: JSON.stringify({\n connection_id: origin.connectionId,\n country_code: origin.countryCode,\n party_id: origin.partyId,\n tariff_ids: ids,\n }),\n });\n}\n\nexport async function _fetchLocations(\n apiRoot,\n version,\n authorization,\n { ids, status },\n): Promise<any> {\n return request(`${apiRoot}/1/map/locations`, {\n method: \"POST\",\n version,\n authorization,\n body: JSON.stringify({\n ids,\n ...(version === \"v2\" ? { status } : {}),\n }),\n });\n}\n\nexport async function _reportProblem(\n apiRoot,\n version,\n authorization,\n {\n type,\n country_code,\n party_id,\n location_id,\n evse_uid,\n }: {\n type: string;\n country_code: string;\n party_id: string;\n location_id: string;\n evse_uid: string;\n },\n): Promise<any> {\n return request(`${apiRoot}/1/map/report-problem`, {\n method: \"POST\",\n version,\n authorization,\n body: JSON.stringify({\n type,\n country_code,\n party_id,\n location_id,\n evse_uid,\n }),\n });\n}\n\nexport async function loadRemoteConfig(\n apiRoot: string,\n version: string,\n authorization: string,\n): Promise<RemoteConfig> {\n const response = await request(`${apiRoot}/1/map/config`, {\n version: version,\n authorization: authorization,\n });\n\n return response?.data as RemoteConfig;\n}\n","import React, { useState, useMemo, useEffect, createContext } from \"react\";\nimport { LabelsType, strings, getLanguage } from \"../i18n\";\nimport {\n _fetchGeohashes,\n _fetchLocations,\n _fetchTariffs,\n _reportProblem,\n loadRemoteConfig,\n} from \"../utils/request\";\nimport {\n Location,\n Position,\n RoadMapOptions,\n Status,\n FilterConfiguration,\n} from \"../types\";\n\nexport type MapContextType = {\n t: (key: keyof LabelsType, props?: any) => string;\n isReady: boolean;\n options?: RoadMapOptions;\n setPlace: (place: any) => void;\n place?: google.maps.places.PlaceResult;\n fetchGeohashes?: ({ precision, bbox }) => Promise<any>;\n fetchLocations?: ({ ids }) => Promise<any>;\n fetchTariffs?: ({ origin, ids }) => Promise<any>;\n reportProblem?: (args: {\n type: string;\n country_code: string;\n party_id: string;\n location_id: string;\n evse_uid: string;\n }) => Promise<any>;\n filters?: any;\n setLocationsIds?: (ids: string[]) => void;\n locationIds?: string[];\n filterConfiguration?: FilterConfiguration;\n setFilters?: (filters: any) => void;\n language: string;\n position?: Position;\n locations?: Location[];\n locationsStatus?: Status;\n isSearching?: boolean;\n setIsSearching?: (isSearching: boolean) => void;\n};\n\n// MapContext is the context that is used to store the map data include the initial configuration\n// passed to the widget\nexport const MapContext = createContext<MapContextType>({\n isReady: false,\n setPlace: () => {},\n t: (key: string) => `Translate ${key}`,\n language: \"en\",\n});\n\ninterface Props {\n children: React.ReactNode;\n options: RoadMapOptions;\n language: string;\n}\n\nexport const MapProvider: React.FC<Props> = ({ children, ...props }) => {\n const [options, setOptions] = useState<RoadMapOptions>(props.options);\n const [filterConfiguration, setFilterConfiguration] =\n useState<FilterConfiguration>({\n preferredOperators: props.options.preferredOperators,\n showOperatorOnly: props.options.showOperatorOnly,\n showNoAdditionalFeeFilter: props.options.showNoAdditionalFeeFilter,\n showPublishingModeFilter: props.options.showPublishingModeFilter,\n showVehicleAvailabilityFilter:\n props.options.showVehicleAvailabilityFilter,\n ...(props.options.showSearchPhraseFilter !== undefined && {\n showSearchPhraseFilter: props.options.showSearchPhraseFilter,\n }),\n ...(props.options.showExcludeOperatorFilter !== undefined && {\n showExcludeOperatorFilter: props.options.showExcludeOperatorFilter,\n }),\n ...(props.options.showPaymentMethodFilter !== undefined && {\n showPaymentMethodFilter: props.options.showPaymentMethodFilter,\n }),\n });\n const [error, setError] = useState();\n const [place, setPlace] = useState();\n const [position, setPosition] = useState<Position>(props.options.position);\n const [filters, setFilters] = useState<{ status?: string }>({});\n const [locationIds, setLocationsIds] = useState<string[]>(\n [props.options.locationId].filter(Boolean),\n );\n const [locations, setLocations] = useState<Location[]>([]);\n const [locationsStatus, setLocationsStatus] = useState<Status>({\n type: \"success\",\n });\n const [isSearching, setIsSearching] = useState<boolean>(false);\n\n // check if debug flag\n const isDebug = window.location.search.includes(\"debug=true\");\n if (isDebug) {\n console.log(\"map-context options\", props.options);\n }\n\n const language = useMemo(\n () => getLanguage(props.options.language || \"en\"),\n [props.options.language],\n );\n const t = useMemo(() => {\n return (key: keyof LabelsType, props): string => {\n return strings[language][key].replace(/\\{\\{(\\w+)\\}\\}/g, (match, p1) => {\n return props[p1];\n });\n };\n }, [language]);\n\n const apiRoot = (() => {\n // if the apiRoot is set and contains `.dev`, use the configured value,\n // otherwise we use the default endpoint\n if (props.options.apiRoot && props.options.apiRoot.includes(\".dev\")) {\n return props.options.apiRoot;\n }\n switch (props.options.version) {\n case \"v2\":\n return \"https://roaming.road.io/v2/map-search\";\n default:\n return \"https://api.road.io\";\n }\n })();\n\n let version = props.options.version;\n let authorization = props.options.authorization;\n\n // if the request URL contains a map_key, override the authorization to enable\n // linking to bespoke map instances without multiple deployments\n const mapKey = window.location.search.split(\"map_key=\")[1];\n if (mapKey) {\n authorization = mapKey;\n version = \"v2\"; // force v2 for map key\n }\n\n const passThroughSearchOptions = {\n ...(props.options.infraProviderId && {\n infraProviderId: props.options.infraProviderId,\n }),\n ...(props.options.partyId && { partyId: props.options.partyId }),\n ...(props.options.partyIds?.length && {\n partyIds: props.options.partyIds,\n }),\n ...(props.options.evseId && { evseId: props.options.evseId }),\n ...(props.options.from && { from: props.options.from }),\n ...(props.options.to && { to: props.options.to }),\n };\n\n const fetchGeohashes = (args) =>\n _fetchGeohashes(\n apiRoot,\n version,\n authorization,\n props.options.limitToLocationIds || [],\n { ...passThroughSearchOptions, ...args },\n );\n\n const fetchLocations = _fetchLocations.bind(\n null,\n apiRoot,\n version,\n authorization,\n );\n\n const fetchTariffs = _fetchTariffs.bind(\n null,\n apiRoot,\n version,\n authorization,\n );\n\n const reportProblem = _reportProblem.bind(\n null,\n apiRoot,\n version,\n authorization,\n );\n\n async function onFetchLocations({ ids, status }) {\n setLocationsStatus({ type: \"loading\" });\n try {\n const { data } = await fetchLocations({\n ids,\n ...(version === \"v2\" ? { status } : {}),\n });\n setLocations(data.filter((location) => location?.evses?.length));\n setLocationsStatus({ type: \"success\" });\n return data;\n } catch (e) {\n setLocationsStatus({ type: \"error\", error: e });\n }\n }\n\n useEffect(() => {\n if (!props.options.locationId) {\n return;\n }\n onFetchLocations({\n ids: [props.options.locationId],\n status: filters.status,\n }).then((data) => {\n if (data?.length) {\n const location = data[0];\n if (location.geoLocation?.coordinates) {\n setPosition({\n lng: location.geoLocation?.coordinates[0],\n lat: location.geoLocation?.coordinates[1],\n });\n }\n }\n });\n }, [props.options.locationId]);\n\n useEffect(() => {\n loadRemoteConfig(apiRoot, version, authorization)\n .then((rc) => {\n if (isDebug) {\n console.log(\"retrieved remote config\", rc);\n }\n // merge the remote configuration, with the locally defined configuration\n setFilterConfiguration({\n ...rc,\n ...filterConfiguration,\n });\n setOptions({\n googleApiKey: rc.googleMapsApiKey,\n ...options,\n ...rc,\n });\n if (!options.locationId && !options?.position?.lat && rc.ipLatitude) {\n if (isDebug) {\n console.debug(\"setting position from ip latitude and longitude\");\n }\n setPosition({\n lat: rc.ipLatitude,\n lng: rc.ipLongitude,\n });\n // if the has not set a location id and we have a position\n } else if (!options.locationId) {\n if (isDebug) {\n console.debug(\"setting position from options position\");\n }\n setPosition(\n options?.position?.lat\n ? options.position\n : {\n lat: 52.3676,\n lng: 4.9041,\n },\n );\n }\n })\n .catch((err) => setError(err));\n }, []);\n\n useEffect(() => {\n if (locationIds?.length) {\n onFetchLocations({\n ids: locationIds,\n status: filters.status,\n });\n }\n }, [locationIds]);\n\n useEffect(() => {\n const { theming, shadowRoot } = props.options;\n\n if (shadowRoot) {\n const style =\n shadowRoot.querySelectorAll(\"#road-map-styles\")[0] ||\n document.createElement(\"style\");\n style.setAttribute(\"type\", \"text/css\");\n style.setAttribute(\"id\", \"road-map-styles\");\n style.innerHTML = `\n :host {\n --roadmap-brand-color: ${theming?.brandColor || \"#6102d3\"};\n --roadmap-background-color: ${theming?.backgroundColor || \"#ffffff\"};\n --roadmap-text-color: ${theming?.textColor || \"#2a2a2a\"};\n --roadmap-border-color: ${theming?.borderColor || \"#dddddd\"};\n --roadmap-font-family: ${theming?.fontFamily || \"Inter\"};\n }\n `;\n shadowRoot.appendChild(style);\n }\n }, [props.options.theming]);\n\n const isReady = Boolean(position && options?.googleApiKey);\n\n const providerValue = useMemo(() => {\n return {\n options,\n setPlace,\n place,\n t,\n language,\n fetchGeohashes,\n locations,\n locationsStatus,\n filterConfiguration,\n setFilters,\n setLocationsIds,\n locationIds,\n filters,\n fetchTariffs,\n reportProblem,\n fetchLocations,\n isReady,\n position,\n isSearching,\n setIsSearching,\n };\n }, [\n position,\n language,\n locations,\n locationsStatus,\n fetchTariffs,\n reportProblem,\n props.options,\n place,\n setPlace,\n setFilters,\n filters,\n filterConfiguration,\n locationIds,\n setLocationsIds,\n t,\n fetchGeohashes,\n fetchLocations,\n isReady,\n isSearching,\n ]);\n\n return (\n <MapContext.Provider value={providerValue}>{children}</MapContext.Provider>\n );\n};\n\nexport function useMapContext(): MapContextType {\n const context = React.useContext(MapContext);\n if (context === undefined) {\n throw new Error(\"useMapContext must be used within a MapProvider\");\n }\n return context;\n}\n","import React, { useRef, useContext } from \"react\";\nimport styles from \"./app.module.css\";\nimport useOnScreen from \"./hooks/useOnScreen\";\nimport { MapContext } from \"./contexts/Map\";\n\ninterface Props {\n children?: React.ReactNode;\n height?: number;\n}\n\nexport default function Boot(props: Props) {\n const { isReady } = useContext(MapContext);\n const ref = useRef(null);\n const isVisible = useOnScreen(ref);\n const loaded = isVisible && isReady;\n return (\n <div\n ref={ref}\n className={styles.container}\n style={{\n height: `${props.height}px`,\n }}\n >\n {!loaded && <div className={styles.loader}>Loading...</div>}\n {loaded && props.children}\n </div>\n );\n}\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol */\r\n\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\n\nfunction getDefaultExportFromCjs (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nvar fastDeepEqual = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n\nvar isEqual = /*@__PURE__*/getDefaultExportFromCjs(fastDeepEqual);\n\n/**\n * Copyright 2019 Google LLC. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at.\n *\n * Http://www.apache.org/licenses/LICENSE-2.0.\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst DEFAULT_ID = \"__googleMapsScriptId\";\n/**\n * The status of the [[Loader]].\n */\nvar LoaderStatus;\n(function (LoaderStatus) {\n LoaderStatus[LoaderStatus[\"INITIALIZED\"] = 0] = \"INITIALIZED\";\n LoaderStatus[LoaderStatus[\"LOADING\"] = 1] = \"LOADING\";\n LoaderStatus[LoaderStatus[\"SUCCESS\"] = 2] = \"SUCCESS\";\n LoaderStatus[LoaderStatus[\"FAILURE\"] = 3] = \"FAILURE\";\n})(LoaderStatus || (LoaderStatus = {}));\n/**\n * [[Loader]] makes it easier to add Google Maps JavaScript API to your application\n * dynamically using\n * [Promises](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise).\n * It works by dynamically creating and appending a script node to the the\n * document head and wrapping the callback function so as to return a promise.\n *\n * ```\n * const loader = new Loader({\n * apiKey: \"\",\n * version: \"weekly\",\n * libraries: [\"places\"]\n * });\n *\n * loader.load().then((google) => {\n * const map = new google.maps.Map(...)\n * })\n * ```\n */\nclass Loader {\n /**\n * Creates an instance of Loader using [[LoaderOptions]]. No defaults are set\n * using this library, instead the defaults are set by the Google Maps\n * JavaScript API server.\n *\n * ```\n * const loader = Loader({apiKey, version: 'weekly', libraries: ['places']});\n * ```\n */\n constructor({ apiKey, authReferrerPolicy, channel, client, id = DEFAULT_ID, language, libraries = [], mapIds, nonce, region, retries = 3, url = \"https://maps.googleapis.com/maps/api/js\", version, }) {\n this.callbacks = [];\n this.done = false;\n this.loading = false;\n this.errors = [];\n this.apiKey = apiKey;\n this.authReferrerPolicy = authReferrerPolicy;\n this.channel = channel;\n this.client = client;\n this.id = id || DEFAULT_ID; // Do not allow empty string\n this.language = language;\n this.libraries = libraries;\n this.mapIds = mapIds;\n this.nonce = nonce;\n this.region = region;\n this.retries = retries;\n this.url = url;\n this.version = version;\n if (Loader.instance) {\n if (!isEqual(this.options, Loader.instance.options)) {\n throw new Error(`Loader must not be called again with different options. ${JSON.stringify(this.options)} !== ${JSON.stringify(Loader.instance.options)}`);\n }\n return Loader.instance;\n }\n Loader.instance = this;\n }\n get options() {\n return {\n version: this.version,\n apiKey: this.apiKey,\n channel: this.channel,\n client: this.client,\n id: this.id,\n libraries: this.libraries,\n language: this.language,\n region: this.region,\n mapIds: this.mapIds,\n nonce: this.nonce,\n url: this.url,\n authReferrerPolicy: this.authReferrerPolicy,\n };\n }\n get status() {\n if (this.errors.length) {\n return LoaderStatus.FAILURE;\n }\n if (this.done) {\n return LoaderStatus.SUCCESS;\n }\n if (this.loading) {\n return LoaderStatus.LOADING;\n }\n return LoaderStatus.INITIALIZED;\n }\n get failed() {\n return this.done && !this.loading && this.errors.length >= this.retries + 1;\n }\n /**\n * CreateUrl returns the Google Maps JavaScript API script url given the [[LoaderOptions]].\n *\n * @ignore\n * @deprecated\n */\n createUrl() {\n let url = this.url;\n url += `?callback=__googleMapsCallback&loading=async`;\n if (this.apiKey) {\n url += `&key=${this.apiKey}`;\n }\n if (this.channel) {\n url += `&channel=${this.channel}`;\n }\n if (this.client) {\n url += `&client=${this.client}`;\n }\n if (this.libraries.length > 0) {\n url += `&libraries=${this.libraries.join(\",\")}`;\n }\n if (this.language) {\n url += `&language=${this.language}`;\n }\n if (this.region) {\n url += `®ion=${this.region}`;\n }\n if (this.version) {\n url += `&v=${this.version}`;\n }\n if (this.mapIds) {\n url += `&map_ids=${this.mapIds.join(\",\")}`;\n }\n if (this.authReferrerPolicy) {\n url += `&auth_referrer_policy=${this.authReferrerPolicy}`;\n }\n return url;\n }\n deleteScript() {\n const script = document.getElementById(this.id);\n if (script) {\n script.remove();\n }\n }\n /**\n * Load the Google Maps JavaScript API script and return a Promise.\n * @deprecated, use importLibrary() instead.\n */\n load() {\n return this.loadPromise();\n }\n /**\n * Load the Google Maps JavaScript API script and return a Promise.\n *\n * @ignore\n * @deprecated, use importLibrary() instead.\n */\n loadPromise() {\n return new Promise((resolve, reject) => {\n this.loadCallback((err) => {\n if (!err) {\n resolve(window.google);\n }\n else {\n reject(err.error);\n }\n });\n });\n }\n importLibrary(name) {\n this.execute();\n return google.maps.importLibrary(name);\n }\n /**\n * Load the Google Maps JavaScript API script with a callback.\n * @deprecated, use importLibrary() instead.\n */\n loadCallback(fn) {\n this.callbacks.push(fn);\n this.execute();\n }\n /**\n * Set the script on document.\n */\n setScript() {\n var _a, _b;\n if (document.getElementById(this.id)) {\n // TODO wrap onerror callback for cases where the script was loaded elsewhere\n this.callback();\n return;\n }\n const params = {\n key: this.apiKey,\n channel: this.channel,\n client: this.client,\n libraries: this.libraries.length && this.libraries,\n v: this.version,\n mapIds: this.mapIds,\n language: this.language,\n region: this.region,\n authReferrerPolicy: this.authReferrerPolicy,\n };\n // keep the URL minimal:\n Object.keys(params).forEach(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (key) => !params[key] && delete params[key]);\n if (!((_b = (_a = window === null || window === void 0 ? void 0 : window.google) === null || _a === void 0 ? void 0 : _a.maps) === null || _b === void 0 ? void 0 : _b.importLibrary)) {\n // tweaked copy of https://developers.google.com/maps/documentation/javascript/load-maps-js-api#dynamic-library-import\n // which also sets the base url, the id, and the nonce\n /* eslint-disable */\n ((g) => {\n // @ts-ignore\n let h, a, k, p = \"The Google Maps JavaScript API\", c = \"google\", l = \"importLibrary\", q = \"__ib__\", m = document, b = window;\n // @ts-ignore\n b = b[c] || (b[c] = {});\n // @ts-ignore\n const d = b.maps || (b.maps = {}), r = new Set(), e = new URLSearchParams(), u = () => \n // @ts-ignore\n h || (h = new Promise((f, n) => __awaiter(this, void 0, void 0, function* () {\n var _a;\n yield (a = m.createElement(\"script\"));\n a.id = this.id;\n e.set(\"libraries\", [...r] + \"\");\n // @ts-ignore\n for (k in g)\n e.set(k.replace(/[A-Z]/g, (t) => \"_\" + t[0].toLowerCase()), g[k]);\n e.set(\"callback\", c + \".maps.\" + q);\n a.src = this.url + `?` + e;\n d[q] = f;\n a.onerror = () => (h = n(Error(p + \" could not load.\")));\n // @ts-ignore\n a.nonce = this.nonce || ((_a = m.querySelector(\"script[nonce]\")) === null || _a === void 0 ? void 0 : _a.nonce) || \"\";\n m.head.append(a);\n })));\n // @ts-ignore\n d[l] ? console.warn(p + \" only loads once. Ignoring:\", g) : (d[l] = (f, ...n) => r.add(f) && u().then(() => d[l](f, ...n)));\n })(params);\n /* eslint-enable */\n }\n // While most libraries populate the global namespace when loaded via bootstrap params,\n // this is not the case for \"marker\" when used with the inline bootstrap loader\n // (and maybe others in the future). So ensure there is an importLibrary for each:\n const libraryPromises = this.libraries.map((library) => this.importLibrary(library));\n // ensure at least one library, to kick off loading...\n if (!libraryPromises.length) {\n libraryPromises.push(this.importLibrary(\"core\"));\n }\n Promise.all(libraryPromises).then(() => this.callback(), (error) => {\n const event = new ErrorEvent(\"error\", { error }); // for backwards compat\n this.loadErrorCallback(event);\n });\n }\n /**\n * Reset the loader state.\n */\n reset() {\n this.deleteScript();\n this.done = false;\n this.loading = false;\n this.errors = [];\n this.onerrorEvent = null;\n }\n resetIfRetryingFailed() {\n if (this.failed) {\n this.reset();\n }\n }\n loadErrorCallback(e) {\n this.errors.push(e);\n if (this.errors.length <= this.retries) {\n const delay = this.errors.length * Math.pow(2, this.errors.length);\n console.error(`Failed to load Google Maps script, retrying in ${delay} ms.`);\n setTimeout(() => {\n this.deleteScript();\n this.setScript();\n }, delay);\n }\n else {\n this.onerrorEvent = e;\n this.callback();\n }\n }\n callback() {\n this.done = true;\n this.loading = false;\n this.callbacks.forEach((cb) => {\n cb(this.onerrorEvent);\n });\n this.callbacks = [];\n }\n execute() {\n this.resetIfRetryingFailed();\n if (this.done) {\n this.callback();\n }\n else {\n // short circuit and warn if google.maps is already loaded\n if (window.google && window.google.maps && window.google.maps.version) {\n console.warn(\"Google Maps already loaded outside @googlemaps/js-api-loader.\" +\n \"This may result in undesirable behavior as options and script parameters may not match.\");\n this.callback();\n return;\n }\n if (this.loading) ;\n else {\n this.loading = true;\n this.setScript();\n }\n }\n }\n}\n\nexport { DEFAULT_ID, Loader, LoaderStatus };\n//# sourceMappingURL=index.mjs.map\n","import { Loader } from \"@googlemaps/js-api-loader\";\n\nlet instance;\nexport function getLoader(apiKey, language): Loader {\n if (instance) return instance;\n\n const loader = new Loader({\n apiKey: apiKey, // Replace with your Google Maps API key\n version: \"weekly\",\n language,\n });\n instance = loader;\n return loader;\n}\n","/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\n/* Geohash encoding/decoding and associated functions (c) Chris Veness 2014-2019 / MIT Licence */\n/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\n\nconst base32 = '0123456789bcdefghjkmnpqrstuvwxyz'; // (geohash-specific) Base32 map\n\n\n/**\n * Geohash: Gustavo Niemeyer’s geocoding system.\n */\nclass Geohash {\n\n /**\n * Encodes latitude/longitude to geohash, either to specified precision or to automatically\n * evaluated precision.\n *\n * @param {number} lat - Latitude in degrees.\n * @param {number} lon - Longitude in degrees.\n * @param {number} [precision] - Number of characters in resulting geohash.\n * @returns {string} Geohash of supplied latitude/longitude.\n * @throws Invalid geohash.\n *\n * @example\n * const geohash = Geohash.encode(52.205, 0.119, 7); // => 'u120fxw'\n */\n static encode(lat, lon, precision) {\n // infer precision?\n if (typeof precision == 'undefined') {\n // refine geohash until it matches precision of supplied lat/lon\n for (let p=1; p<=12; p++) {\n const hash = Geohash.encode(lat, lon, p);\n const posn = Geohash.decode(hash);\n if (posn.lat==lat && posn.lon==lon) return hash;\n }\n precision = 12; // set to maximum\n }\n\n lat = Number(lat);\n lon = Number(lon);\n precision = Number(precision);\n\n if (isNaN(lat) || isNaN(lon) || isNaN(precision)) throw new Error('Invalid geohash');\n\n let idx = 0; // index into base32 map\n let bit = 0; // each char holds 5 bits\n let evenBit = true;\n let geohash = '';\n\n let latMin = -90, latMax = 90;\n let lonMin = -180, lonMax = 180;\n\n while (geohash.length < precision) {\n if (evenBit) {\n // bisect E-W longitude\n const lonMid = (lonMin + lonMax) / 2;\n if (lon >= lonMid) {\n idx = idx*2 + 1;\n lonMin = lonMid;\n } else {\n idx = idx*2;\n lonMax = lonMid;\n }\n } else {\n // bisect N-S latitude\n const latMid = (latMin + latMax) / 2;\n if (lat >= latMid) {\n idx = idx*2 + 1;\n latMin = latMid;\n } else {\n idx = idx*2;\n latMax = latMid;\n }\n }\n evenBit = !evenBit;\n\n if (++bit == 5) {\n // 5 bits gives us a character: append it and start over\n geohash += base32.charAt(idx);\n bit = 0;\n idx = 0;\n }\n }\n\n return geohash;\n }\n\n\n /**\n * Decode geohash to latitude/longitude (location is approximate centre of geohash cell,\n * to reasonable precision).\n *\n * @param {string} geohash - Geohash string to be converted to latitude/longitude.\n * @returns {{lat:number, lon:number}} (Center of) geohashed location.\n * @throws Invalid geohash.\n *\n * @example\n * const latlon = Geohash.decode('u120fxw'); // => { lat: 52.205, lon: 0.1188 }\n */\n static decode(geohash) {\n\n const bounds = Geohash.bounds(geohash); // <-- the hard work\n // now just determine the centre of the cell...\n\n const latMin = bounds.sw.lat, lonMin = bounds.sw.lon;\n const latMax = bounds.ne.lat, lonMax = bounds.ne.lon;\n\n // cell centre\n let lat = (latMin + latMax)/2;\n let lon = (lonMin + lonMax)/2;\n\n // round to close to centre without excessive precision: ⌊2-log10(Δ°)⌋ decimal places\n lat = lat.toFixed(Math.floor(2-Math.log(latMax-latMin)/Math.LN10));\n lon = lon.toFixed(Math.floor(2-Math.log(lonMax-lonMin)/Math.LN10));\n\n return { lat: Number(lat), lon: Number(lon) };\n }\n\n\n /**\n * Returns SW/NE latitude/longitude bounds of specified geohash.\n *\n * @param {string} geohash - Cell that bounds are required of.\n * @returns {{sw: {lat: number, lon: number}, ne: {lat: number, lon: number}}}\n * @throws Invalid geohash.\n */\n static bounds(geohash) {\n if (geohash.length == 0) throw new Error('Invalid geohash');\n\n geohash = geohash.toLowerCase();\n\n let evenBit = true;\n let latMin = -90, latMax = 90;\n let lonMin = -180, lonMax = 180;\n\n for (let i=0; i<geohash.length; i++) {\n const chr = geohash.charAt(i);\n const idx = base32.indexOf(chr);\n if (idx == -1) throw new Error('Invalid geohash');\n\n for (let n=4; n>=0; n--) {\n const bitN = idx >> n & 1;\n if (evenBit) {\n // longitude\n const lonMid = (lonMin+lonMax) / 2;\n if (bitN == 1) {\n lonMin = lonMid;\n } else {\n lonMax = lonMid;\n }\n } else {\n // latitude\n const latMid = (latMin+latMax) / 2;\n if (bitN == 1) {\n latMin = latMid;\n } else {\n latMax = latMid;\n }\n }\n evenBit = !evenBit;\n }\n }\n\n const bounds = {\n sw: { lat: latMin, lon: lonMin },\n ne: { lat: latMax, lon: lonMax },\n };\n\n return bounds;\n }\n\n\n /**\n * Determines adjacent cell in given direction.\n *\n * @param geohash - Cell to which adjacent cell is required.\n * @param direction - Direction from geohash (N/S/E/W).\n * @returns {string} Geocode of adjacent cell.\n * @throws Invalid geohash.\n */\n static adjacent(geohash, direction) {\n // based on github.com/davetroy/geohash-js\n\n geohash = geohash.toLowerCase();\n direction = direction.toLowerCase();\n\n if (geohash.length == 0) throw new Error('Invalid geohash');\n if ('nsew'.indexOf(direction) == -1) throw new Error('Invalid direction');\n\n const neighbour = {\n n: [ 'p0r21436x8zb9dcf5h7kjnmqesgutwvy', 'bc01fg45238967deuvhjyznpkmstqrwx' ],\n s: [ '14365h7k9dcfesgujnmqp0r2twvyx8zb', '238967debc01fg45kmstqrwxuvhjyznp' ],\n e: [ 'bc01fg45238967deuvhjyznpkmstqrwx', 'p0r21436x8zb9dcf5h7kjnmqesgutwvy' ],\n w: [ '238967debc01fg45kmstqrwxuvhjyznp', '14365h7k9dcfesgujnmqp0r2twvyx8zb' ],\n };\n const border = {\n n: [ 'prxz', 'bcfguvyz' ],\n s: [ '028b', '0145hjnp' ],\n e: [ 'bcfguvyz', 'prxz' ],\n w: [ '0145hjnp', '028b' ],\n };\n\n const lastCh = geohash.slice(-1); // last character of hash\n let parent = geohash.slice(0, -1); // hash without last character\n\n const type = geohash.length % 2;\n\n // check for edge-cases which don't share common prefix\n if (border[direction][type].indexOf(lastCh) != -1 && parent != '') {\n parent = Geohash.adjacent(parent, direction);\n }\n\n // append letter for direction to parent\n return parent + base32.charAt(neighbour[direction][type].indexOf(lastCh));\n }\n\n\n /**\n * Returns all 8 adjacent cells to specified geohash.\n *\n * @param {string} geohash - Geohash neighbours are required of.\n * @returns {{n,ne,e,se,s,sw,w,nw: string}}\n * @throws Invalid geohash.\n */\n static neighbours(geohash) {\n return {\n 'n': Geohash.adjacent(geohash, 'n'),\n 'ne': Geohash.adjacent(Geohash.adjacent(geohash, 'n'), 'e'),\n 'e': Geohash.adjacent(geohash, 'e'),\n 'se': Geohash.adjacent(Geohash.adjacent(geohash, 's'), 'e'),\n 's': Geohash.adjacent(geohash, 's'),\n 'sw': Geohash.adjacent(Geohash.adjacent(geohash, 's'), 'w'),\n 'w': Geohash.adjacent(geohash, 'w'),\n 'nw': Geohash.adjacent(Geohash.adjacent(geohash, 'n'), 'w'),\n };\n }\n\n}\n\n/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\n\nexport default Geohash;\n","import { PropsWithChildren, useEffect, useMemo } from \"react\";\nimport { createPortal } from \"react-dom\";\n\nexport function createOverlay(\n container: HTMLElement,\n pane: keyof google.maps.MapPanes,\n position: google.maps.LatLng | google.maps.LatLngLiteral\n) {\n class Overlay extends google.maps.OverlayView {\n container: HTMLElement;\n pane: keyof google.maps.MapPanes;\n position: google.maps.LatLng | google.maps.LatLngLiteral;\n\n constructor(\n container: HTMLElement,\n pane: keyof google.maps.MapPanes,\n position: google.maps.LatLng | google.maps.LatLngLiteral\n ) {\n super();\n this.container = container;\n this.pane = pane;\n this.position = position;\n }\n\n onAdd(): void {\n const pane = this.getPanes()?.[this.pane];\n pane?.appendChild(this.container);\n }\n\n draw(): void {\n const projection = this.getProjection();\n const point = projection.fromLatLngToDivPixel(this.position);\n\n if (point === null) {\n return;\n }\n\n this.container.style.transform = `translate(${point.x}px, ${point.y}px)`;\n }\n\n onRemove(): void {\n if (this.container.parentNode !== null) {\n this.container.parentNode.removeChild(this.container);\n }\n }\n }\n return new Overlay(container, pane, position);\n}\n\ntype OverlayProps = PropsWithChildren<{\n position: {\n lat: number;\n lon: number;\n };\n pane?: keyof google.maps.MapPanes;\n map: google.maps.Map;\n zIndex?: number;\n}>;\n\nexport default function OverlayView({\n position,\n pane = \"floatPane\",\n map,\n zIndex,\n children,\n}: OverlayProps) {\n const container = useMemo(() => {\n const div = document.createElement(\"div\");\n div.style.position = \"absolute\";\n return div;\n }, []);\n\n const overlay = useMemo(() => {\n return createOverlay(container, pane, {\n lat: position.lat,\n lng: position.lon,\n });\n }, [container, pane, position]);\n\n useEffect(() => {\n overlay?.setMap(map);\n return () => {\n overlay?.setMap(null);\n };\n }, [map, overlay]);\n\n useEffect(() => {\n container.style.zIndex = `${zIndex}`;\n }, [zIndex, container]);\n\n return createPortal(children, container);\n}\n\n","export function getColorForStatus(status) {\n switch (status) {\n case \"AVAILABLE\":\n return \"#33AC19\";\n case \"CHARGING\":\n return \"#005CEE\";\n default:\n return \"#EB001B\";\n }\n}\n","import React, { useCallback, useMemo } from \"react\";\nimport { GeohashItem } from \"../../types\";\nimport OverlayView from \"../OverlayView/OverlayView\";\nimport { getColorForStatus } from \"../../utils/location\";\nimport styles from \"./CustomMarker.module.css\";\n\nconst formatter = new Intl.NumberFormat(undefined, {\n maximumSignificantDigits: 3,\n});\n\nconst formatNumber = (num: number) => {\n return formatter.format(num);\n};\n\ninterface Props {\n data: GeohashItem;\n map?: google.maps.Map;\n onClick: (payload: GeohashItem) => void;\n highlight?: boolean;\n}\n\nconst CustomMarker: React.FC<Props> = ({ data, map, onClick, highlight }) => {\n const handleClick = useCallback(() => {\n onClick(data);\n }, [onClick, data]);\n\n const styleColor = useMemo(() => {\n if (data.statuses.find((status) => status.name === \"AVAILABLE\")) {\n return { background: getColorForStatus(\"AVAILABLE\") };\n }\n if (data.statuses.find((status) => status.name === \"CHARGING\")) {\n return { background: getColorForStatus(\"CHARGING\") };\n }\n return { background: getColorForStatus(\"UNAVAILABLE\") };\n }, [data]);\n\n return (\n <OverlayView position={data.centroid} map={map} zIndex={highlight ? 99 : 0}>\n <button\n className={styles.container}\n onClick={handleClick}\n style={styleColor}\n // seems to be useful for ios safari\n onTouchEndCapture={handleClick}\n >\n {data.count > 1 ? formatNumber(data.count) : \"\"}\n </button>\n </OverlayView>\n );\n};\n\nexport default CustomMarker;\n","import { useCallback, useEffect, useState } from \"react\";\nimport Geohash from \"latlon-geohash\";\nimport CustomMarker from \"../CustomMarker/CustomMarker\";\nimport { GeohashItem } from \"../../types\";\nimport { useMapContext } from \"../../contexts/Map\";\n\nconst geoHashZoom = [\n 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 6, 6, 6, 7, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9,\n];\n\nfunction zoomToHashChars(zoom) {\n return geoHashZoom[zoom];\n}\n\nfunction getNormalizedBounds(bounds, zoomLevel) {\n const mapSWPoint = bounds.getSouthWest().toJSON();\n const mapNEPoint = bounds.getNorthEast().toJSON();\n\n const SWGeohash = Geohash.encode(mapSWPoint.lat, mapSWPoint.lng, zoomLevel);\n\n const geohashSWBounds = Geohash.bounds(SWGeohash);\n\n const latStep = Math.abs(geohashSWBounds.sw.lat - geohashSWBounds.ne.lat);\n const lngStep = Math.abs(geohashSWBounds.sw.lon - geohashSWBounds.ne.lon);\n\n let neLat = geohashSWBounds.sw.lat;\n while (neLat <= mapNEPoint.lat) {\n neLat = neLat + latStep;\n }\n\n let neLng = geohashSWBounds.sw.lon;\n while (neLng <= mapNEPoint.lng) {\n neLng = neLng + lngStep;\n }\n\n return {\n nwLat: neLat,\n nwLng: geohashSWBounds.sw.lon,\n seLat: geohashSWBounds.sw.lat,\n seLng: neLng,\n };\n}\n\nfunction isSameBounds(bounds1, bounds2) {\n return (\n bounds1.nwLat === bounds2.nwLat &&\n bounds1.nwLng === bounds2.nwLng &&\n bounds1.seLat === bounds2.seLat &&\n bounds1.seLng === bounds2.seLng\n );\n}\n\nexport default function MapMarkers({\n map,\n filters,\n fetchGeohashes,\n onMarkerClicked,\n}) {\n const { setIsSearching } = useMapContext();\n const [data, setData] = useState<GeohashItem[]>([]);\n\n const [mapConfig, setMapConfig] = useState({\n zoom: zoomToHashChars(map.getZoom()),\n normalizedBounds: getNormalizedBounds(\n map.getBounds(),\n zoomToHashChars(map.getZoom()),\n ),\n });\n\n useEffect(() => {\n let currentZoomLevel = mapConfig.zoom;\n let currentBounds = undefined;\n\n map.addListener(\"idle\", () => {\n const newZoomLevel = zoomToHashChars(map.getZoom());\n\n const newMapConfig = {\n ...mapConfig,\n zoom: newZoomLevel,\n };\n const bounds = getNormalizedBounds(map.getBounds(), currentZoomLevel);\n\n if (currentBounds && isSameBounds(currentBounds, bounds)) {\n return;\n }\n currentBounds = bounds;\n setMapConfig({\n ...newMapConfig,\n normalizedBounds: bounds,\n });\n });\n }, []);\n\n // appends the data to the existing data\n // make sure to not duplicate data\n // keeping the old object that are still availabe in the new data to prevert re-rendering\n function appendData(newData) {\n const oldData = data.filter((c) => {\n return newData.find((n) => n.key === c.key);\n });\n\n setData([\n ...oldData,\n ...newData.filter((c) => {\n return !oldData.find((o) => o.key === c.key);\n }),\n ]);\n }\n\n useEffect(() => {\n if (!mapConfig.normalizedBounds) return;\n let ignore = false;\n\n setIsSearching(true);\n fetchGeohashes({\n precision: mapConfig.zoom,\n bbox: mapConfig.normalizedBounds,\n ...filters,\n })\n .then(({ data }) => {\n if (ignore) return;\n appendData(data);\n setIsSearching(false);\n })\n .catch((e) => {\n // deal with error\n setIsSearching(false);\n });\n\n return () => {\n ignore = true;\n setIsSearching(false);\n };\n }, [mapConfig, filters]);\n\n const _onMarkerClicked = useCallback(\n (data: GeohashItem) => {\n const ids = data.ids;\n if (ids.length == 100) {\n map.setZoom(map.getZoom() + 2);\n }\n map.panTo({ lat: data.centroid.lat, lng: data.centroid.lon });\n if (ids.length !== 100) {\n onMarkerClicked(ids);\n }\n },\n [map, onMarkerClicked],\n );\n\n return (\n <>\n {data.filter(Boolean).map((item: GeohashItem, i) => (\n <CustomMarker\n map={map}\n key={item.key}\n data={item}\n onClick={_onMarkerClicked}\n />\n ))}\n </>\n );\n}\n","import React, { useEffect, useRef, useState } from \"react\";\n\nimport { useMapContext } from \"../../contexts/Map\";\n\nimport styles from \"./Map.module.css\";\nimport { getLoader } from \"../../utils/loader\";\n\nimport MapMarkers from \"../MapMarkers/MapMarkers\";\n\n/*\nconst gridParts = [];\n\nfunction eraseGrid() {\n for (var i = 0; i < gridParts.length; i++) {\n gridParts[i].setMap(null);\n }\n gridParts.length = 0;\n}\n\nconst defaults = {\n zoom: 3,\n maxDisplay: 2 * 10240,\n geohashPrecision: 12,\n};\n\n\nfunction drawGrid(map) {\n const level = zoomToHashChars(map.getZoom());\n console.log(level, map.getZoom());\n\n const bounds = map.getBounds();\n const ne = bounds.getNorthEast();\n const sw = bounds.getSouthWest();\n const neHash = Geohash.encode(ne.lat(), ne.lng(), level);\n const nwHash = Geohash.encode(ne.lat(), sw.lng(), level);\n const swHash = Geohash.encode(sw.lat(), sw.lng(), level);\n const seHash = Geohash.encode(sw.lat(), ne.lng(), level);\n\n let current = neHash;\n let eastBound = neHash;\n let westBound = nwHash;\n let maxHash = defaults.maxDisplay;\n\n eraseGrid();\n while (maxHash-- > 0) {\n drawBox(map, current);\n do {\n current = Geohash.adjacent(current, \"w\");\n drawBox(map, current);\n } while (maxHash-- > 0 && current != westBound);\n if (current == swHash) {\n return;\n }\n westBound = Geohash.adjacent(current, \"s\");\n current = eastBound = Geohash.adjacent(eastBound, \"s\");\n }\n alert(\"defaults.maxDisplay limit reached\");\n eraseGrid();\n}\n\n\nfunction drawBox(map, hash) {\n const b = Geohash.bounds(hash);\n const gb = new google.maps.LatLngBounds(\n new google.maps.LatLng(b.sw.lat, b.sw.lon),\n new google.maps.LatLng(b.ne.lat, b.ne.lon)\n );\n const rect = new google.maps.Rectangle({\n map: map,\n bounds: gb,\n strokeColor: \"#3333AA\",\n strokeOpacity: 0.8,\n strokeWeight: 1,\n fillColor: \"#222222\",\n fillOpacity: 0.1,\n });\n const marker = new google.maps.Marker({\n map: map,\n position: gb.getCenter(),\n icon: \" \",\n });\n gridParts.push(rect);\n gridParts.push(marker);\n}\n*/\n\nexport default function MapWrapper() {\n const {\n place,\n options,\n fetchGeohashes,\n setLocationsIds,\n language,\n filters,\n position,\n } = useMapContext();\n\n const apiKey = options.googleApiKey;\n const [map, setMap] = useState<google.maps.Map>();\n\n const mapContainerRef = useRef(null);\n const loader = getLoader(apiKey, language);\n\n useEffect(() => {\n if (map && place?.geometry?.viewport) {\n map.fitBounds(place.geometry.viewport);\n }\n if (map && place?.geometry?.location) {\n /*\n const icon = {\n url: place.icon as string,\n size: new google.maps.Size(71, 71),\n origin: new google.maps.Point(0, 0),\n anchor: new google.maps.Point(17, 34),\n scaledSize: new google.maps.Size(25, 25),\n };\n const marker = new google.maps.Marker({\n map,\n icon,\n title: place.name,\n position: place.geometry.location,\n });\n setMarker(marker);\n */\n map.setCenter(place.geometry.location);\n }\n }, [map, place]);\n\n useEffect(() => {\n loader.importLibrary(\"maps\").then(({ Map }) => {\n const map = new Map(mapContainerRef.current, {\n mapId: \"ced50d4165f3a695\",\n center: position as any, // Initial map center coordinates\n zoom: 12, // Initial zoom level,\n zoomControl: true,\n mapTypeControl: false,\n scaleControl: false,\n streetViewControl: false,\n rotateControl: false,\n fullscreenControl: false,\n controlSize: 32,\n clickableIcons: false,\n gestureHandling: options.gestureHandling || \"auto\",\n });\n map.addListener(\"idle\", () => {\n setMap(map);\n });\n return () => {\n console.log(\"unmounting\");\n };\n });\n }, [apiKey]);\n\n return (\n <div className={styles.container} ref={mapContainerRef}>\n {map && map.getBounds() && (\n <MapMarkers\n filters={filters}\n onMarkerClicked={(ids) => {\n setLocationsIds([...ids]);\n }}\n map={map}\n fetchGeohashes={fetchGeohashes}\n />\n )}\n </div>\n );\n}\n\n","function _extends() {\n return _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, _extends.apply(null, arguments);\n}\nexport { _extends as default };","function _objectWithoutPropertiesLoose(r, e) {\n if (null == r) return {};\n var t = {};\n for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n if (-1 !== e.indexOf(n)) continue;\n t[n] = r[n];\n }\n return t;\n}\nexport { _objectWithoutPropertiesLoose as default };","function _setPrototypeOf(t, e) {\n return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {\n return t.__proto__ = e, t;\n }, _setPrototypeOf(t, e);\n}\nexport { _setPrototypeOf as default };","import setPrototypeOf from \"./setPrototypeOf.js\";\nfunction _inheritsLoose(t, o) {\n t.prototype = Object.create(o.prototype), t.prototype.constructor = t, setPrototypeOf(t, o);\n}\nexport { _inheritsLoose as default };","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?\nSymbol.for(\"react.suspense_list\"):60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.block\"):60121,w=b?Symbol.for(\"react.fundamental\"):60117,x=b?Symbol.for(\"react.responder\"):60118,y=b?Symbol.for(\"react.scope\"):60119;\nfunction z(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n","/** @license React v16.13.1\n * react-is.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n'use strict';\n\n// The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar hasSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;\nvar REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;\nvar REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;\nvar REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;\nvar REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;\nvar REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;\nvar REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary\n// (unstable) APIs that have been removed. Can we remove the symbols?\n\nvar REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf;\nvar REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;\nvar REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;\nvar REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;\nvar REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;\nvar REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;\nvar REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;\nvar REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;\nvar REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5;\nvar REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6;\nvar REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7;\n\nfunction isValidElementType(type) {\n return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.\n type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE);\n}\n\nfunction typeOf(object) {\n if (typeof object === 'object' && object !== null) {\n var $$typeof = object.$$typeof;\n\n switch ($$typeof) {\n case REACT_ELEMENT_TYPE:\n var type = object.type;\n\n switch (type) {\n case REACT_ASYNC_MODE_TYPE:\n case REACT_CONCURRENT_MODE_TYPE:\n case REACT_FRAGMENT_TYPE:\n case REACT_PROFILER_TYPE:\n case REACT_STRICT_MODE_TYPE:\n case REACT_SUSPENSE_TYPE:\n return type;\n\n default:\n var $$typeofType = type && type.$$typeof;\n\n switch ($$typeofType) {\n case REACT_CONTEXT_TYPE:\n case REACT_FORWARD_REF_TYPE:\n case REACT_LAZY_TYPE:\n case REACT_MEMO_TYPE:\n case REACT_PROVIDER_TYPE:\n return $$typeofType;\n\n default:\n return $$typeof;\n }\n\n }\n\n case REACT_PORTAL_TYPE:\n return $$typeof;\n }\n }\n\n return undefined;\n} // AsyncMode is deprecated along with isAsyncMode\n\nvar AsyncMode = REACT_ASYNC_MODE_TYPE;\nvar ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;\nvar ContextConsumer = REACT_CONTEXT_TYPE;\nvar ContextProvider = REACT_PROVIDER_TYPE;\nvar Element = REACT_ELEMENT_TYPE;\nvar ForwardRef = REACT_FORWARD_REF_TYPE;\nvar Fragment = REACT_FRAGMENT_TYPE;\nvar Lazy = REACT_LAZY_TYPE;\nvar Memo = REACT_MEMO_TYPE;\nvar Portal = REACT_PORTAL_TYPE;\nvar Profiler = REACT_PROFILER_TYPE;\nvar StrictMode = REACT_STRICT_MODE_TYPE;\nvar Suspense = REACT_SUSPENSE_TYPE;\nvar hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated\n\nfunction isAsyncMode(object) {\n {\n if (!hasWarnedAboutDeprecatedIsAsyncMode) {\n hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint\n\n console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.');\n }\n }\n\n return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE;\n}\nfunction isConcurrentMode(object) {\n return typeOf(object) === REACT_CONCURRENT_MODE_TYPE;\n}\nfunction isContextConsumer(object) {\n return typeOf(object) === REACT_CONTEXT_TYPE;\n}\nfunction isContextProvider(object) {\n return typeOf(object) === REACT_PROVIDER_TYPE;\n}\nfunction isElement(object) {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n}\nfunction isForwardRef(object) {\n return typeOf(object) === REACT_FORWARD_REF_TYPE;\n}\nfunction isFragment(object) {\n return typeOf(object) === REACT_FRAGMENT_TYPE;\n}\nfunction isLazy(object) {\n return typeOf(object) === REACT_LAZY_TYPE;\n}\nfunction isMemo(object) {\n return typeOf(object) === REACT_MEMO_TYPE;\n}\nfunction isPortal(object) {\n return typeOf(object) === REACT_PORTAL_TYPE;\n}\nfunction isProfiler(object) {\n return typeOf(object) === REACT_PROFILER_TYPE;\n}\nfunction isStrictMode(object) {\n return typeOf(object) === REACT_STRICT_MODE_TYPE;\n}\nfunction isSuspense(object) {\n return typeOf(object) === REACT_SUSPENSE_TYPE;\n}\n\nexports.AsyncMode = AsyncMode;\nexports.ConcurrentMode = ConcurrentMode;\nexports.ContextConsumer = ContextConsumer;\nexports.ContextProvider = ContextProvider;\nexports.Element = Element;\nexports.ForwardRef = ForwardRef;\nexports.Fragment = Fragment;\nexports.Lazy = Lazy;\nexports.Memo = Memo;\nexports.Portal = Portal;\nexports.Profiler = Profiler;\nexports.StrictMode = StrictMode;\nexports.Suspense = Suspense;\nexports.isAsyncMode = isAsyncMode;\nexports.isConcurrentMode = isConcurrentMode;\nexports.isContextConsumer = isContextConsumer;\nexports.isContextProvider = isContextProvider;\nexports.isElement = isElement;\nexports.isForwardRef = isForwardRef;\nexports.isFragment = isFragment;\nexports.isLazy = isLazy;\nexports.isMemo = isMemo;\nexports.isPortal = isPortal;\nexports.isProfiler = isProfiler;\nexports.isStrictMode = isStrictMode;\nexports.isSuspense = isSuspense;\nexports.isValidElementType = isValidElementType;\nexports.typeOf = typeOf;\n })();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","module.exports = Function.call.bind(Object.prototype.hasOwnProperty);\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar printWarning = function() {};\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n var loggedTypeFailures = {};\n var has = require('./lib/has');\n\n printWarning = function(text) {\n var message = 'Warning: ' + text;\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) { /**/ }\n };\n}\n\n/**\n * Assert that the values match with the type specs.\n * Error messages are memorized and will only be shown once.\n *\n * @param {object} typeSpecs Map of name to a ReactPropType\n * @param {object} values Runtime values that need to be type-checked\n * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n * @param {string} componentName Name of the component for error messages.\n * @param {?Function} getStack Returns the component stack.\n * @private\n */\nfunction checkPropTypes(typeSpecs, values, location, componentName, getStack) {\n if (process.env.NODE_ENV !== 'production') {\n for (var typeSpecName in typeSpecs) {\n if (has(typeSpecs, typeSpecName)) {\n var error;\n // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n if (typeof typeSpecs[typeSpecName] !== 'function') {\n var err = Error(\n (componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' +\n 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' +\n 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.'\n );\n err.name = 'Invariant Violation';\n throw err;\n }\n error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);\n } catch (ex) {\n error = ex;\n }\n if (error && !(error instanceof Error)) {\n printWarning(\n (componentName || 'React class') + ': type specification of ' +\n location + ' `' + typeSpecName + '` is invalid; the type checker ' +\n 'function must return `null` or an `Error` but returned a ' + typeof error + '. ' +\n 'You may have forgotten to pass an argument to the type checker ' +\n 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' +\n 'shape all require an argument).'\n );\n }\n if (error instanceof Error && !(error.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error.message] = true;\n\n var stack = getStack ? getStack() : '';\n\n printWarning(\n 'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '')\n );\n }\n }\n }\n }\n}\n\n/**\n * Resets warning cache when testing.\n *\n * @private\n */\ncheckPropTypes.resetWarningCache = function() {\n if (process.env.NODE_ENV !== 'production') {\n loggedTypeFailures = {};\n }\n}\n\nmodule.exports = checkPropTypes;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactIs = require('react-is');\nvar assign = require('object-assign');\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\nvar has = require('./lib/has');\nvar checkPropTypes = require('./checkPropTypes');\n\nvar printWarning = function() {};\n\nif (process.env.NODE_ENV !== 'production') {\n printWarning = function(text) {\n var message = 'Warning: ' + text;\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n };\n}\n\nfunction emptyFunctionThatReturnsNull() {\n return null;\n}\n\nmodule.exports = function(isValidElement, throwOnDirectAccess) {\n /* global Symbol */\n var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\n var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.\n\n /**\n * Returns the iterator method function contained on the iterable object.\n *\n * Be sure to invoke the function with the iterable as context:\n *\n * var iteratorFn = getIteratorFn(myIterable);\n * if (iteratorFn) {\n * var iterator = iteratorFn.call(myIterable);\n * ...\n * }\n *\n * @param {?object} maybeIterable\n * @return {?function}\n */\n function getIteratorFn(maybeIterable) {\n var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);\n if (typeof iteratorFn === 'function') {\n return iteratorFn;\n }\n }\n\n /**\n * Collection of methods that allow declaration and validation of props that are\n * supplied to React components. Example usage:\n *\n * var Props = require('ReactPropTypes');\n * var MyArticle = React.createClass({\n * propTypes: {\n * // An optional string prop named \"description\".\n * description: Props.string,\n *\n * // A required enum prop named \"category\".\n * category: Props.oneOf(['News','Photos']).isRequired,\n *\n * // A prop named \"dialog\" that requires an instance of Dialog.\n * dialog: Props.instanceOf(Dialog).isRequired\n * },\n * render: function() { ... }\n * });\n *\n * A more formal specification of how these methods are used:\n *\n * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)\n * decl := ReactPropTypes.{type}(.isRequired)?\n *\n * Each and every declaration produces a function with the same signature. This\n * allows the creation of custom validation functions. For example:\n *\n * var MyLink = React.createClass({\n * propTypes: {\n * // An optional string or URI prop named \"href\".\n * href: function(props, propName, componentName) {\n * var propValue = props[propName];\n * if (propValue != null && typeof propValue !== 'string' &&\n * !(propValue instanceof URI)) {\n * return new Error(\n * 'Expected a string or an URI for ' + propName + ' in ' +\n * componentName\n * );\n * }\n * }\n * },\n * render: function() {...}\n * });\n *\n * @internal\n */\n\n var ANONYMOUS = '<<anonymous>>';\n\n // Important!\n // Keep this list in sync with production version in `./factoryWithThrowingShims.js`.\n var ReactPropTypes = {\n array: createPrimitiveTypeChecker('array'),\n bigint: createPrimitiveTypeChecker('bigint'),\n bool: createPrimitiveTypeChecker('boolean'),\n func: createPrimitiveTypeChecker('function'),\n number: createPrimitiveTypeChecker('number'),\n object: createPrimitiveTypeChecker('object'),\n string: createPrimitiveTypeChecker('string'),\n symbol: createPrimitiveTypeChecker('symbol'),\n\n any: createAnyTypeChecker(),\n arrayOf: createArrayOfTypeChecker,\n element: createElementTypeChecker(),\n elementType: createElementTypeTypeChecker(),\n instanceOf: createInstanceTypeChecker,\n node: createNodeChecker(),\n objectOf: createObjectOfTypeChecker,\n oneOf: createEnumTypeChecker,\n oneOfType: createUnionTypeChecker,\n shape: createShapeTypeChecker,\n exact: createStrictShapeTypeChecker,\n };\n\n /**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\n /*eslint-disable no-self-compare*/\n function is(x, y) {\n // SameValue algorithm\n if (x === y) {\n // Steps 1-5, 7-10\n // Steps 6.b-6.e: +0 != -0\n return x !== 0 || 1 / x === 1 / y;\n } else {\n // Step 6.a: NaN == NaN\n return x !== x && y !== y;\n }\n }\n /*eslint-enable no-self-compare*/\n\n /**\n * We use an Error-like object for backward compatibility as people may call\n * PropTypes directly and inspect their output. However, we don't use real\n * Errors anymore. We don't inspect their stack anyway, and creating them\n * is prohibitively expensive if they are created too often, such as what\n * happens in oneOfType() for any type before the one that matched.\n */\n function PropTypeError(message, data) {\n this.message = message;\n this.data = data && typeof data === 'object' ? data: {};\n this.stack = '';\n }\n // Make `instanceof Error` still work for returned errors.\n PropTypeError.prototype = Error.prototype;\n\n function createChainableTypeChecker(validate) {\n if (process.env.NODE_ENV !== 'production') {\n var manualPropTypeCallCache = {};\n var manualPropTypeWarningCount = 0;\n }\n function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {\n componentName = componentName || ANONYMOUS;\n propFullName = propFullName || propName;\n\n if (secret !== ReactPropTypesSecret) {\n if (throwOnDirectAccess) {\n // New behavior only for users of `prop-types` package\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use `PropTypes.checkPropTypes()` to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n } else if (process.env.NODE_ENV !== 'production' && typeof console !== 'undefined') {\n // Old behavior for people using React.PropTypes\n var cacheKey = componentName + ':' + propName;\n if (\n !manualPropTypeCallCache[cacheKey] &&\n // Avoid spamming the console because they are often not actionable except for lib authors\n manualPropTypeWarningCount < 3\n ) {\n printWarning(\n 'You are manually calling a React.PropTypes validation ' +\n 'function for the `' + propFullName + '` prop on `' + componentName + '`. This is deprecated ' +\n 'and will throw in the standalone `prop-types` package. ' +\n 'You may be seeing this warning due to a third-party PropTypes ' +\n 'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.'\n );\n manualPropTypeCallCache[cacheKey] = true;\n manualPropTypeWarningCount++;\n }\n }\n }\n if (props[propName] == null) {\n if (isRequired) {\n if (props[propName] === null) {\n return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.'));\n }\n return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.'));\n }\n return null;\n } else {\n return validate(props, propName, componentName, location, propFullName);\n }\n }\n\n var chainedCheckType = checkType.bind(null, false);\n chainedCheckType.isRequired = checkType.bind(null, true);\n\n return chainedCheckType;\n }\n\n function createPrimitiveTypeChecker(expectedType) {\n function validate(props, propName, componentName, location, propFullName, secret) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== expectedType) {\n // `propValue` being instance of, say, date/regexp, pass the 'object'\n // check, but we can offer a more precise error message here rather than\n // 'of type `object`'.\n var preciseType = getPreciseType(propValue);\n\n return new PropTypeError(\n 'Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'),\n {expectedType: expectedType}\n );\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createAnyTypeChecker() {\n return createChainableTypeChecker(emptyFunctionThatReturnsNull);\n }\n\n function createArrayOfTypeChecker(typeChecker) {\n function validate(props, propName, componentName, location, propFullName) {\n if (typeof typeChecker !== 'function') {\n return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');\n }\n var propValue = props[propName];\n if (!Array.isArray(propValue)) {\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));\n }\n for (var i = 0; i < propValue.length; i++) {\n var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret);\n if (error instanceof Error) {\n return error;\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createElementTypeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n if (!isValidElement(propValue)) {\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createElementTypeTypeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n if (!ReactIs.isValidElementType(propValue)) {\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement type.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createInstanceTypeChecker(expectedClass) {\n function validate(props, propName, componentName, location, propFullName) {\n if (!(props[propName] instanceof expectedClass)) {\n var expectedClassName = expectedClass.name || ANONYMOUS;\n var actualClassName = getClassName(props[propName]);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createEnumTypeChecker(expectedValues) {\n if (!Array.isArray(expectedValues)) {\n if (process.env.NODE_ENV !== 'production') {\n if (arguments.length > 1) {\n printWarning(\n 'Invalid arguments supplied to oneOf, expected an array, got ' + arguments.length + ' arguments. ' +\n 'A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z]).'\n );\n } else {\n printWarning('Invalid argument supplied to oneOf, expected an array.');\n }\n }\n return emptyFunctionThatReturnsNull;\n }\n\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n for (var i = 0; i < expectedValues.length; i++) {\n if (is(propValue, expectedValues[i])) {\n return null;\n }\n }\n\n var valuesString = JSON.stringify(expectedValues, function replacer(key, value) {\n var type = getPreciseType(value);\n if (type === 'symbol') {\n return String(value);\n }\n return value;\n });\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + String(propValue) + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));\n }\n return createChainableTypeChecker(validate);\n }\n\n function createObjectOfTypeChecker(typeChecker) {\n function validate(props, propName, componentName, location, propFullName) {\n if (typeof typeChecker !== 'function') {\n return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');\n }\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));\n }\n for (var key in propValue) {\n if (has(propValue, key)) {\n var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n if (error instanceof Error) {\n return error;\n }\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createUnionTypeChecker(arrayOfTypeCheckers) {\n if (!Array.isArray(arrayOfTypeCheckers)) {\n process.env.NODE_ENV !== 'production' ? printWarning('Invalid argument supplied to oneOfType, expected an instance of array.') : void 0;\n return emptyFunctionThatReturnsNull;\n }\n\n for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n var checker = arrayOfTypeCheckers[i];\n if (typeof checker !== 'function') {\n printWarning(\n 'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' +\n 'received ' + getPostfixForTypeWarning(checker) + ' at index ' + i + '.'\n );\n return emptyFunctionThatReturnsNull;\n }\n }\n\n function validate(props, propName, componentName, location, propFullName) {\n var expectedTypes = [];\n for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n var checker = arrayOfTypeCheckers[i];\n var checkerResult = checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret);\n if (checkerResult == null) {\n return null;\n }\n if (checkerResult.data && has(checkerResult.data, 'expectedType')) {\n expectedTypes.push(checkerResult.data.expectedType);\n }\n }\n var expectedTypesMessage = (expectedTypes.length > 0) ? ', expected one of type [' + expectedTypes.join(', ') + ']': '';\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`' + expectedTypesMessage + '.'));\n }\n return createChainableTypeChecker(validate);\n }\n\n function createNodeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n if (!isNode(props[propName])) {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function invalidValidatorError(componentName, location, propFullName, key, type) {\n return new PropTypeError(\n (componentName || 'React class') + ': ' + location + ' type `' + propFullName + '.' + key + '` is invalid; ' +\n 'it must be a function, usually from the `prop-types` package, but received `' + type + '`.'\n );\n }\n\n function createShapeTypeChecker(shapeTypes) {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n }\n for (var key in shapeTypes) {\n var checker = shapeTypes[key];\n if (typeof checker !== 'function') {\n return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker));\n }\n var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n if (error) {\n return error;\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createStrictShapeTypeChecker(shapeTypes) {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n }\n // We need to check all keys in case some are required but missing from props.\n var allKeys = assign({}, props[propName], shapeTypes);\n for (var key in allKeys) {\n var checker = shapeTypes[key];\n if (has(shapeTypes, key) && typeof checker !== 'function') {\n return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker));\n }\n if (!checker) {\n return new PropTypeError(\n 'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' +\n '\\nBad object: ' + JSON.stringify(props[propName], null, ' ') +\n '\\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, ' ')\n );\n }\n var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n if (error) {\n return error;\n }\n }\n return null;\n }\n\n return createChainableTypeChecker(validate);\n }\n\n function isNode(propValue) {\n switch (typeof propValue) {\n case 'number':\n case 'string':\n case 'undefined':\n return true;\n case 'boolean':\n return !propValue;\n case 'object':\n if (Array.isArray(propValue)) {\n return propValue.every(isNode);\n }\n if (propValue === null || isValidElement(propValue)) {\n return true;\n }\n\n var iteratorFn = getIteratorFn(propValue);\n if (iteratorFn) {\n var iterator = iteratorFn.call(propValue);\n var step;\n if (iteratorFn !== propValue.entries) {\n while (!(step = iterator.next()).done) {\n if (!isNode(step.value)) {\n return false;\n }\n }\n } else {\n // Iterator will provide entry [k,v] tuples rather than values.\n while (!(step = iterator.next()).done) {\n var entry = step.value;\n if (entry) {\n if (!isNode(entry[1])) {\n return false;\n }\n }\n }\n }\n } else {\n return false;\n }\n\n return true;\n default:\n return false;\n }\n }\n\n function isSymbol(propType, propValue) {\n // Native Symbol.\n if (propType === 'symbol') {\n return true;\n }\n\n // falsy value can't be a Symbol\n if (!propValue) {\n return false;\n }\n\n // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'\n if (propValue['@@toStringTag'] === 'Symbol') {\n return true;\n }\n\n // Fallback for non-spec compliant Symbols which are polyfilled.\n if (typeof Symbol === 'function' && propValue instanceof Symbol) {\n return true;\n }\n\n return false;\n }\n\n // Equivalent of `typeof` but with special handling for array and regexp.\n function getPropType(propValue) {\n var propType = typeof propValue;\n if (Array.isArray(propValue)) {\n return 'array';\n }\n if (propValue instanceof RegExp) {\n // Old webkits (at least until Android 4.0) return 'function' rather than\n // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\n // passes PropTypes.object.\n return 'object';\n }\n if (isSymbol(propType, propValue)) {\n return 'symbol';\n }\n return propType;\n }\n\n // This handles more types than `getPropType`. Only used for error messages.\n // See `createPrimitiveTypeChecker`.\n function getPreciseType(propValue) {\n if (typeof propValue === 'undefined' || propValue === null) {\n return '' + propValue;\n }\n var propType = getPropType(propValue);\n if (propType === 'object') {\n if (propValue instanceof Date) {\n return 'date';\n } else if (propValue instanceof RegExp) {\n return 'regexp';\n }\n }\n return propType;\n }\n\n // Returns a string that is postfixed to a warning about an invalid type.\n // For example, \"undefined\" or \"of type array\"\n function getPostfixForTypeWarning(value) {\n var type = getPreciseType(value);\n switch (type) {\n case 'array':\n case 'object':\n return 'an ' + type;\n case 'boolean':\n case 'date':\n case 'regexp':\n return 'a ' + type;\n default:\n return type;\n }\n }\n\n // Returns class name of the object, if any.\n function getClassName(propValue) {\n if (!propValue.constructor || !propValue.constructor.name) {\n return ANONYMOUS;\n }\n return propValue.constructor.name;\n }\n\n ReactPropTypes.checkPropTypes = checkPropTypes;\n ReactPropTypes.resetWarningCache = checkPropTypes.resetWarningCache;\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bigint: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Checks if a given element has a CSS class.\n * \n * @param element the element\n * @param className the CSS class name\n */\nexport default function hasClass(element, className) {\n if (element.classList) return !!className && element.classList.contains(className);\n return (\" \" + (element.className.baseVal || element.className) + \" \").indexOf(\" \" + className + \" \") !== -1;\n}","import hasClass from './hasClass';\n/**\n * Adds a CSS class to a given element.\n * \n * @param element the element\n * @param className the CSS class name\n */\n\nexport default function addClass(element, className) {\n if (element.classList) element.classList.add(className);else if (!hasClass(element, className)) if (typeof element.className === 'string') element.className = element.className + \" \" + className;else element.setAttribute('class', (element.className && element.className.baseVal || '') + \" \" + className);\n}","function replaceClassName(origClass, classToRemove) {\n return origClass.replace(new RegExp(\"(^|\\\\s)\" + classToRemove + \"(?:\\\\s|$)\", 'g'), '$1').replace(/\\s+/g, ' ').replace(/^\\s*|\\s*$/g, '');\n}\n/**\n * Removes a CSS class from a given element.\n * \n * @param element the element\n * @param className the CSS class name\n */\n\n\nexport default function removeClass(element, className) {\n if (element.classList) {\n element.classList.remove(className);\n } else if (typeof element.className === 'string') {\n element.className = replaceClassName(element.className, className);\n } else {\n element.setAttribute('class', replaceClassName(element.className && element.className.baseVal || '', className));\n }\n}","export default {\n disabled: false\n};","import PropTypes from 'prop-types';\nexport var timeoutsShape = process.env.NODE_ENV !== 'production' ? PropTypes.oneOfType([PropTypes.number, PropTypes.shape({\n enter: PropTypes.number,\n exit: PropTypes.number,\n appear: PropTypes.number\n}).isRequired]) : null;\nexport var classNamesShape = process.env.NODE_ENV !== 'production' ? PropTypes.oneOfType([PropTypes.string, PropTypes.shape({\n enter: PropTypes.string,\n exit: PropTypes.string,\n active: PropTypes.string\n}), PropTypes.shape({\n enter: PropTypes.string,\n enterDone: PropTypes.string,\n enterActive: PropTypes.string,\n exit: PropTypes.string,\n exitDone: PropTypes.string,\n exitActive: PropTypes.string\n})]) : null;","import React from 'react';\nexport default React.createContext(null);","export var forceReflow = function forceReflow(node) {\n return node.scrollTop;\n};","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport config from './config';\nimport { timeoutsShape } from './utils/PropTypes';\nimport TransitionGroupContext from './TransitionGroupContext';\nimport { forceReflow } from './utils/reflow';\nexport var UNMOUNTED = 'unmounted';\nexport var EXITED = 'exited';\nexport var ENTERING = 'entering';\nexport var ENTERED = 'entered';\nexport var EXITING = 'exiting';\n/**\n * The Transition component lets you describe a transition from one component\n * state to another _over time_ with a simple declarative API. Most commonly\n * it's used to animate the mounting and unmounting of a component, but can also\n * be used to describe in-place transition states as well.\n *\n * ---\n *\n * **Note**: `Transition` is a platform-agnostic base component. If you're using\n * transitions in CSS, you'll probably want to use\n * [`CSSTransition`](https://reactcommunity.org/react-transition-group/css-transition)\n * instead. It inherits all the features of `Transition`, but contains\n * additional features necessary to play nice with CSS transitions (hence the\n * name of the component).\n *\n * ---\n *\n * By default the `Transition` component does not alter the behavior of the\n * component it renders, it only tracks \"enter\" and \"exit\" states for the\n * components. It's up to you to give meaning and effect to those states. For\n * example we can add styles to a component when it enters or exits:\n *\n * ```jsx\n * import { Transition } from 'react-transition-group';\n *\n * const duration = 300;\n *\n * const defaultStyle = {\n * transition: `opacity ${duration}ms ease-in-out`,\n * opacity: 0,\n * }\n *\n * const transitionStyles = {\n * entering: { opacity: 1 },\n * entered: { opacity: 1 },\n * exiting: { opacity: 0 },\n * exited: { opacity: 0 },\n * };\n *\n * const Fade = ({ in: inProp }) => (\n * <Transition in={inProp} timeout={duration}>\n * {state => (\n * <div style={{\n * ...defaultStyle,\n * ...transitionStyles[state]\n * }}>\n * I'm a fade Transition!\n * </div>\n * )}\n * </Transition>\n * );\n * ```\n *\n * There are 4 main states a Transition can be in:\n * - `'entering'`\n * - `'entered'`\n * - `'exiting'`\n * - `'exited'`\n *\n * Transition state is toggled via the `in` prop. When `true` the component\n * begins the \"Enter\" stage. During this stage, the component will shift from\n * its current transition state, to `'entering'` for the duration of the\n * transition and then to the `'entered'` stage once it's complete. Let's take\n * the following example (we'll use the\n * [useState](https://reactjs.org/docs/hooks-reference.html#usestate) hook):\n *\n * ```jsx\n * function App() {\n * const [inProp, setInProp] = useState(false);\n * return (\n * <div>\n * <Transition in={inProp} timeout={500}>\n * {state => (\n * // ...\n * )}\n * </Transition>\n * <button onClick={() => setInProp(true)}>\n * Click to Enter\n * </button>\n * </div>\n * );\n * }\n * ```\n *\n * When the button is clicked the component will shift to the `'entering'` state\n * and stay there for 500ms (the value of `timeout`) before it finally switches\n * to `'entered'`.\n *\n * When `in` is `false` the same thing happens except the state moves from\n * `'exiting'` to `'exited'`.\n */\n\nvar Transition = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(Transition, _React$Component);\n\n function Transition(props, context) {\n var _this;\n\n _this = _React$Component.call(this, props, context) || this;\n var parentGroup = context; // In the context of a TransitionGroup all enters are really appears\n\n var appear = parentGroup && !parentGroup.isMounting ? props.enter : props.appear;\n var initialStatus;\n _this.appearStatus = null;\n\n if (props.in) {\n if (appear) {\n initialStatus = EXITED;\n _this.appearStatus = ENTERING;\n } else {\n initialStatus = ENTERED;\n }\n } else {\n if (props.unmountOnExit || props.mountOnEnter) {\n initialStatus = UNMOUNTED;\n } else {\n initialStatus = EXITED;\n }\n }\n\n _this.state = {\n status: initialStatus\n };\n _this.nextCallback = null;\n return _this;\n }\n\n Transition.getDerivedStateFromProps = function getDerivedStateFromProps(_ref, prevState) {\n var nextIn = _ref.in;\n\n if (nextIn && prevState.status === UNMOUNTED) {\n return {\n status: EXITED\n };\n }\n\n return null;\n } // getSnapshotBeforeUpdate(prevProps) {\n // let nextStatus = null\n // if (prevProps !== this.props) {\n // const { status } = this.state\n // if (this.props.in) {\n // if (status !== ENTERING && status !== ENTERED) {\n // nextStatus = ENTERING\n // }\n // } else {\n // if (status === ENTERING || status === ENTERED) {\n // nextStatus = EXITING\n // }\n // }\n // }\n // return { nextStatus }\n // }\n ;\n\n var _proto = Transition.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n this.updateStatus(true, this.appearStatus);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n var nextStatus = null;\n\n if (prevProps !== this.props) {\n var status = this.state.status;\n\n if (this.props.in) {\n if (status !== ENTERING && status !== ENTERED) {\n nextStatus = ENTERING;\n }\n } else {\n if (status === ENTERING || status === ENTERED) {\n nextStatus = EXITING;\n }\n }\n }\n\n this.updateStatus(false, nextStatus);\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n this.cancelNextCallback();\n };\n\n _proto.getTimeouts = function getTimeouts() {\n var timeout = this.props.timeout;\n var exit, enter, appear;\n exit = enter = appear = timeout;\n\n if (timeout != null && typeof timeout !== 'number') {\n exit = timeout.exit;\n enter = timeout.enter; // TODO: remove fallback for next major\n\n appear = timeout.appear !== undefined ? timeout.appear : enter;\n }\n\n return {\n exit: exit,\n enter: enter,\n appear: appear\n };\n };\n\n _proto.updateStatus = function updateStatus(mounting, nextStatus) {\n if (mounting === void 0) {\n mounting = false;\n }\n\n if (nextStatus !== null) {\n // nextStatus will always be ENTERING or EXITING.\n this.cancelNextCallback();\n\n if (nextStatus === ENTERING) {\n if (this.props.unmountOnExit || this.props.mountOnEnter) {\n var node = this.props.nodeRef ? this.props.nodeRef.current : ReactDOM.findDOMNode(this); // https://github.com/reactjs/react-transition-group/pull/749\n // With unmountOnExit or mountOnEnter, the enter animation should happen at the transition between `exited` and `entering`.\n // To make the animation happen, we have to separate each rendering and avoid being processed as batched.\n\n if (node) forceReflow(node);\n }\n\n this.performEnter(mounting);\n } else {\n this.performExit();\n }\n } else if (this.props.unmountOnExit && this.state.status === EXITED) {\n this.setState({\n status: UNMOUNTED\n });\n }\n };\n\n _proto.performEnter = function performEnter(mounting) {\n var _this2 = this;\n\n var enter = this.props.enter;\n var appearing = this.context ? this.context.isMounting : mounting;\n\n var _ref2 = this.props.nodeRef ? [appearing] : [ReactDOM.findDOMNode(this), appearing],\n maybeNode = _ref2[0],\n maybeAppearing = _ref2[1];\n\n var timeouts = this.getTimeouts();\n var enterTimeout = appearing ? timeouts.appear : timeouts.enter; // no enter animation skip right to ENTERED\n // if we are mounting and running this it means appear _must_ be set\n\n if (!mounting && !enter || config.disabled) {\n this.safeSetState({\n status: ENTERED\n }, function () {\n _this2.props.onEntered(maybeNode);\n });\n return;\n }\n\n this.props.onEnter(maybeNode, maybeAppearing);\n this.safeSetState({\n status: ENTERING\n }, function () {\n _this2.props.onEntering(maybeNode, maybeAppearing);\n\n _this2.onTransitionEnd(enterTimeout, function () {\n _this2.safeSetState({\n status: ENTERED\n }, function () {\n _this2.props.onEntered(maybeNode, maybeAppearing);\n });\n });\n });\n };\n\n _proto.performExit = function performExit() {\n var _this3 = this;\n\n var exit = this.props.exit;\n var timeouts = this.getTimeouts();\n var maybeNode = this.props.nodeRef ? undefined : ReactDOM.findDOMNode(this); // no exit animation skip right to EXITED\n\n if (!exit || config.disabled) {\n this.safeSetState({\n status: EXITED\n }, function () {\n _this3.props.onExited(maybeNode);\n });\n return;\n }\n\n this.props.onExit(maybeNode);\n this.safeSetState({\n status: EXITING\n }, function () {\n _this3.props.onExiting(maybeNode);\n\n _this3.onTransitionEnd(timeouts.exit, function () {\n _this3.safeSetState({\n status: EXITED\n }, function () {\n _this3.props.onExited(maybeNode);\n });\n });\n });\n };\n\n _proto.cancelNextCallback = function cancelNextCallback() {\n if (this.nextCallback !== null) {\n this.nextCallback.cancel();\n this.nextCallback = null;\n }\n };\n\n _proto.safeSetState = function safeSetState(nextState, callback) {\n // This shouldn't be necessary, but there are weird race conditions with\n // setState callbacks and unmounting in testing, so always make sure that\n // we can cancel any pending setState callbacks after we unmount.\n callback = this.setNextCallback(callback);\n this.setState(nextState, callback);\n };\n\n _proto.setNextCallback = function setNextCallback(callback) {\n var _this4 = this;\n\n var active = true;\n\n this.nextCallback = function (event) {\n if (active) {\n active = false;\n _this4.nextCallback = null;\n callback(event);\n }\n };\n\n this.nextCallback.cancel = function () {\n active = false;\n };\n\n return this.nextCallback;\n };\n\n _proto.onTransitionEnd = function onTransitionEnd(timeout, handler) {\n this.setNextCallback(handler);\n var node = this.props.nodeRef ? this.props.nodeRef.current : ReactDOM.findDOMNode(this);\n var doesNotHaveTimeoutOrListener = timeout == null && !this.props.addEndListener;\n\n if (!node || doesNotHaveTimeoutOrListener) {\n setTimeout(this.nextCallback, 0);\n return;\n }\n\n if (this.props.addEndListener) {\n var _ref3 = this.props.nodeRef ? [this.nextCallback] : [node, this.nextCallback],\n maybeNode = _ref3[0],\n maybeNextCallback = _ref3[1];\n\n this.props.addEndListener(maybeNode, maybeNextCallback);\n }\n\n if (timeout != null) {\n setTimeout(this.nextCallback, timeout);\n }\n };\n\n _proto.render = function render() {\n var status = this.state.status;\n\n if (status === UNMOUNTED) {\n return null;\n }\n\n var _this$props = this.props,\n children = _this$props.children,\n _in = _this$props.in,\n _mountOnEnter = _this$props.mountOnEnter,\n _unmountOnExit = _this$props.unmountOnExit,\n _appear = _this$props.appear,\n _enter = _this$props.enter,\n _exit = _this$props.exit,\n _timeout = _this$props.timeout,\n _addEndListener = _this$props.addEndListener,\n _onEnter = _this$props.onEnter,\n _onEntering = _this$props.onEntering,\n _onEntered = _this$props.onEntered,\n _onExit = _this$props.onExit,\n _onExiting = _this$props.onExiting,\n _onExited = _this$props.onExited,\n _nodeRef = _this$props.nodeRef,\n childProps = _objectWithoutPropertiesLoose(_this$props, [\"children\", \"in\", \"mountOnEnter\", \"unmountOnExit\", \"appear\", \"enter\", \"exit\", \"timeout\", \"addEndListener\", \"onEnter\", \"onEntering\", \"onEntered\", \"onExit\", \"onExiting\", \"onExited\", \"nodeRef\"]);\n\n return (\n /*#__PURE__*/\n // allows for nested Transitions\n React.createElement(TransitionGroupContext.Provider, {\n value: null\n }, typeof children === 'function' ? children(status, childProps) : React.cloneElement(React.Children.only(children), childProps))\n );\n };\n\n return Transition;\n}(React.Component);\n\nTransition.contextType = TransitionGroupContext;\nTransition.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /**\n * A React reference to DOM element that need to transition:\n * https://stackoverflow.com/a/51127130/4671932\n *\n * - When `nodeRef` prop is used, `node` is not passed to callback functions\n * (e.g. `onEnter`) because user already has direct access to the node.\n * - When changing `key` prop of `Transition` in a `TransitionGroup` a new\n * `nodeRef` need to be provided to `Transition` with changed `key` prop\n * (see\n * [test/CSSTransition-test.js](https://github.com/reactjs/react-transition-group/blob/13435f897b3ab71f6e19d724f145596f5910581c/test/CSSTransition-test.js#L362-L437)).\n */\n nodeRef: PropTypes.shape({\n current: typeof Element === 'undefined' ? PropTypes.any : function (propValue, key, componentName, location, propFullName, secret) {\n var value = propValue[key];\n return PropTypes.instanceOf(value && 'ownerDocument' in value ? value.ownerDocument.defaultView.Element : Element)(propValue, key, componentName, location, propFullName, secret);\n }\n }),\n\n /**\n * A `function` child can be used instead of a React element. This function is\n * called with the current transition status (`'entering'`, `'entered'`,\n * `'exiting'`, `'exited'`), which can be used to apply context\n * specific props to a component.\n *\n * ```jsx\n * <Transition in={this.state.in} timeout={150}>\n * {state => (\n * <MyComponent className={`fade fade-${state}`} />\n * )}\n * </Transition>\n * ```\n */\n children: PropTypes.oneOfType([PropTypes.func.isRequired, PropTypes.element.isRequired]).isRequired,\n\n /**\n * Show the component; triggers the enter or exit states\n */\n in: PropTypes.bool,\n\n /**\n * By default the child component is mounted immediately along with\n * the parent `Transition` component. If you want to \"lazy mount\" the component on the\n * first `in={true}` you can set `mountOnEnter`. After the first enter transition the component will stay\n * mounted, even on \"exited\", unless you also specify `unmountOnExit`.\n */\n mountOnEnter: PropTypes.bool,\n\n /**\n * By default the child component stays mounted after it reaches the `'exited'` state.\n * Set `unmountOnExit` if you'd prefer to unmount the component after it finishes exiting.\n */\n unmountOnExit: PropTypes.bool,\n\n /**\n * By default the child component does not perform the enter transition when\n * it first mounts, regardless of the value of `in`. If you want this\n * behavior, set both `appear` and `in` to `true`.\n *\n * > **Note**: there are no special appear states like `appearing`/`appeared`, this prop\n * > only adds an additional enter transition. However, in the\n * > `<CSSTransition>` component that first enter transition does result in\n * > additional `.appear-*` classes, that way you can choose to style it\n * > differently.\n */\n appear: PropTypes.bool,\n\n /**\n * Enable or disable enter transitions.\n */\n enter: PropTypes.bool,\n\n /**\n * Enable or disable exit transitions.\n */\n exit: PropTypes.bool,\n\n /**\n * The duration of the transition, in milliseconds.\n * Required unless `addEndListener` is provided.\n *\n * You may specify a single timeout for all transitions:\n *\n * ```jsx\n * timeout={500}\n * ```\n *\n * or individually:\n *\n * ```jsx\n * timeout={{\n * appear: 500,\n * enter: 300,\n * exit: 500,\n * }}\n * ```\n *\n * - `appear` defaults to the value of `enter`\n * - `enter` defaults to `0`\n * - `exit` defaults to `0`\n *\n * @type {number | { enter?: number, exit?: number, appear?: number }}\n */\n timeout: function timeout(props) {\n var pt = timeoutsShape;\n if (!props.addEndListener) pt = pt.isRequired;\n\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n return pt.apply(void 0, [props].concat(args));\n },\n\n /**\n * Add a custom transition end trigger. Called with the transitioning\n * DOM node and a `done` callback. Allows for more fine grained transition end\n * logic. Timeouts are still used as a fallback if provided.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * ```jsx\n * addEndListener={(node, done) => {\n * // use the css transitionend event to mark the finish of a transition\n * node.addEventListener('transitionend', done, false);\n * }}\n * ```\n */\n addEndListener: PropTypes.func,\n\n /**\n * Callback fired before the \"entering\" status is applied. An extra parameter\n * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement, isAppearing: bool) -> void\n */\n onEnter: PropTypes.func,\n\n /**\n * Callback fired after the \"entering\" status is applied. An extra parameter\n * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement, isAppearing: bool)\n */\n onEntering: PropTypes.func,\n\n /**\n * Callback fired after the \"entered\" status is applied. An extra parameter\n * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement, isAppearing: bool) -> void\n */\n onEntered: PropTypes.func,\n\n /**\n * Callback fired before the \"exiting\" status is applied.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExit: PropTypes.func,\n\n /**\n * Callback fired after the \"exiting\" status is applied.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExiting: PropTypes.func,\n\n /**\n * Callback fired after the \"exited\" status is applied.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExited: PropTypes.func\n} : {}; // Name the function so it is clearer in the documentation\n\nfunction noop() {}\n\nTransition.defaultProps = {\n in: false,\n mountOnEnter: false,\n unmountOnExit: false,\n appear: false,\n enter: true,\n exit: true,\n onEnter: noop,\n onEntering: noop,\n onEntered: noop,\n onExit: noop,\n onExiting: noop,\n onExited: noop\n};\nTransition.UNMOUNTED = UNMOUNTED;\nTransition.EXITED = EXITED;\nTransition.ENTERING = ENTERING;\nTransition.ENTERED = ENTERED;\nTransition.EXITING = EXITING;\nexport default Transition;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\nimport PropTypes from 'prop-types';\nimport addOneClass from 'dom-helpers/addClass';\nimport removeOneClass from 'dom-helpers/removeClass';\nimport React from 'react';\nimport Transition from './Transition';\nimport { classNamesShape } from './utils/PropTypes';\nimport { forceReflow } from './utils/reflow';\n\nvar _addClass = function addClass(node, classes) {\n return node && classes && classes.split(' ').forEach(function (c) {\n return addOneClass(node, c);\n });\n};\n\nvar removeClass = function removeClass(node, classes) {\n return node && classes && classes.split(' ').forEach(function (c) {\n return removeOneClass(node, c);\n });\n};\n/**\n * A transition component inspired by the excellent\n * [ng-animate](https://docs.angularjs.org/api/ngAnimate) library, you should\n * use it if you're using CSS transitions or animations. It's built upon the\n * [`Transition`](https://reactcommunity.org/react-transition-group/transition)\n * component, so it inherits all of its props.\n *\n * `CSSTransition` applies a pair of class names during the `appear`, `enter`,\n * and `exit` states of the transition. The first class is applied and then a\n * second `*-active` class in order to activate the CSS transition. After the\n * transition, matching `*-done` class names are applied to persist the\n * transition state.\n *\n * ```jsx\n * function App() {\n * const [inProp, setInProp] = useState(false);\n * return (\n * <div>\n * <CSSTransition in={inProp} timeout={200} classNames=\"my-node\">\n * <div>\n * {\"I'll receive my-node-* classes\"}\n * </div>\n * </CSSTransition>\n * <button type=\"button\" onClick={() => setInProp(true)}>\n * Click to Enter\n * </button>\n * </div>\n * );\n * }\n * ```\n *\n * When the `in` prop is set to `true`, the child component will first receive\n * the class `example-enter`, then the `example-enter-active` will be added in\n * the next tick. `CSSTransition` [forces a\n * reflow](https://github.com/reactjs/react-transition-group/blob/5007303e729a74be66a21c3e2205e4916821524b/src/CSSTransition.js#L208-L215)\n * between before adding the `example-enter-active`. This is an important trick\n * because it allows us to transition between `example-enter` and\n * `example-enter-active` even though they were added immediately one after\n * another. Most notably, this is what makes it possible for us to animate\n * _appearance_.\n *\n * ```css\n * .my-node-enter {\n * opacity: 0;\n * }\n * .my-node-enter-active {\n * opacity: 1;\n * transition: opacity 200ms;\n * }\n * .my-node-exit {\n * opacity: 1;\n * }\n * .my-node-exit-active {\n * opacity: 0;\n * transition: opacity 200ms;\n * }\n * ```\n *\n * `*-active` classes represent which styles you want to animate **to**, so it's\n * important to add `transition` declaration only to them, otherwise transitions\n * might not behave as intended! This might not be obvious when the transitions\n * are symmetrical, i.e. when `*-enter-active` is the same as `*-exit`, like in\n * the example above (minus `transition`), but it becomes apparent in more\n * complex transitions.\n *\n * **Note**: If you're using the\n * [`appear`](http://reactcommunity.org/react-transition-group/transition#Transition-prop-appear)\n * prop, make sure to define styles for `.appear-*` classes as well.\n */\n\n\nvar CSSTransition = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(CSSTransition, _React$Component);\n\n function CSSTransition() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n _this.appliedClasses = {\n appear: {},\n enter: {},\n exit: {}\n };\n\n _this.onEnter = function (maybeNode, maybeAppearing) {\n var _this$resolveArgument = _this.resolveArguments(maybeNode, maybeAppearing),\n node = _this$resolveArgument[0],\n appearing = _this$resolveArgument[1];\n\n _this.removeClasses(node, 'exit');\n\n _this.addClass(node, appearing ? 'appear' : 'enter', 'base');\n\n if (_this.props.onEnter) {\n _this.props.onEnter(maybeNode, maybeAppearing);\n }\n };\n\n _this.onEntering = function (maybeNode, maybeAppearing) {\n var _this$resolveArgument2 = _this.resolveArguments(maybeNode, maybeAppearing),\n node = _this$resolveArgument2[0],\n appearing = _this$resolveArgument2[1];\n\n var type = appearing ? 'appear' : 'enter';\n\n _this.addClass(node, type, 'active');\n\n if (_this.props.onEntering) {\n _this.props.onEntering(maybeNode, maybeAppearing);\n }\n };\n\n _this.onEntered = function (maybeNode, maybeAppearing) {\n var _this$resolveArgument3 = _this.resolveArguments(maybeNode, maybeAppearing),\n node = _this$resolveArgument3[0],\n appearing = _this$resolveArgument3[1];\n\n var type = appearing ? 'appear' : 'enter';\n\n _this.removeClasses(node, type);\n\n _this.addClass(node, type, 'done');\n\n if (_this.props.onEntered) {\n _this.props.onEntered(maybeNode, maybeAppearing);\n }\n };\n\n _this.onExit = function (maybeNode) {\n var _this$resolveArgument4 = _this.resolveArguments(maybeNode),\n node = _this$resolveArgument4[0];\n\n _this.removeClasses(node, 'appear');\n\n _this.removeClasses(node, 'enter');\n\n _this.addClass(node, 'exit', 'base');\n\n if (_this.props.onExit) {\n _this.props.onExit(maybeNode);\n }\n };\n\n _this.onExiting = function (maybeNode) {\n var _this$resolveArgument5 = _this.resolveArguments(maybeNode),\n node = _this$resolveArgument5[0];\n\n _this.addClass(node, 'exit', 'active');\n\n if (_this.props.onExiting) {\n _this.props.onExiting(maybeNode);\n }\n };\n\n _this.onExited = function (maybeNode) {\n var _this$resolveArgument6 = _this.resolveArguments(maybeNode),\n node = _this$resolveArgument6[0];\n\n _this.removeClasses(node, 'exit');\n\n _this.addClass(node, 'exit', 'done');\n\n if (_this.props.onExited) {\n _this.props.onExited(maybeNode);\n }\n };\n\n _this.resolveArguments = function (maybeNode, maybeAppearing) {\n return _this.props.nodeRef ? [_this.props.nodeRef.current, maybeNode] // here `maybeNode` is actually `appearing`\n : [maybeNode, maybeAppearing];\n };\n\n _this.getClassNames = function (type) {\n var classNames = _this.props.classNames;\n var isStringClassNames = typeof classNames === 'string';\n var prefix = isStringClassNames && classNames ? classNames + \"-\" : '';\n var baseClassName = isStringClassNames ? \"\" + prefix + type : classNames[type];\n var activeClassName = isStringClassNames ? baseClassName + \"-active\" : classNames[type + \"Active\"];\n var doneClassName = isStringClassNames ? baseClassName + \"-done\" : classNames[type + \"Done\"];\n return {\n baseClassName: baseClassName,\n activeClassName: activeClassName,\n doneClassName: doneClassName\n };\n };\n\n return _this;\n }\n\n var _proto = CSSTransition.prototype;\n\n _proto.addClass = function addClass(node, type, phase) {\n var className = this.getClassNames(type)[phase + \"ClassName\"];\n\n var _this$getClassNames = this.getClassNames('enter'),\n doneClassName = _this$getClassNames.doneClassName;\n\n if (type === 'appear' && phase === 'done' && doneClassName) {\n className += \" \" + doneClassName;\n } // This is to force a repaint,\n // which is necessary in order to transition styles when adding a class name.\n\n\n if (phase === 'active') {\n if (node) forceReflow(node);\n }\n\n if (className) {\n this.appliedClasses[type][phase] = className;\n\n _addClass(node, className);\n }\n };\n\n _proto.removeClasses = function removeClasses(node, type) {\n var _this$appliedClasses$ = this.appliedClasses[type],\n baseClassName = _this$appliedClasses$.base,\n activeClassName = _this$appliedClasses$.active,\n doneClassName = _this$appliedClasses$.done;\n this.appliedClasses[type] = {};\n\n if (baseClassName) {\n removeClass(node, baseClassName);\n }\n\n if (activeClassName) {\n removeClass(node, activeClassName);\n }\n\n if (doneClassName) {\n removeClass(node, doneClassName);\n }\n };\n\n _proto.render = function render() {\n var _this$props = this.props,\n _ = _this$props.classNames,\n props = _objectWithoutPropertiesLoose(_this$props, [\"classNames\"]);\n\n return /*#__PURE__*/React.createElement(Transition, _extends({}, props, {\n onEnter: this.onEnter,\n onEntered: this.onEntered,\n onEntering: this.onEntering,\n onExit: this.onExit,\n onExiting: this.onExiting,\n onExited: this.onExited\n }));\n };\n\n return CSSTransition;\n}(React.Component);\n\nCSSTransition.defaultProps = {\n classNames: ''\n};\nCSSTransition.propTypes = process.env.NODE_ENV !== \"production\" ? _extends({}, Transition.propTypes, {\n /**\n * The animation classNames applied to the component as it appears, enters,\n * exits or has finished the transition. A single name can be provided, which\n * will be suffixed for each stage, e.g. `classNames=\"fade\"` applies:\n *\n * - `fade-appear`, `fade-appear-active`, `fade-appear-done`\n * - `fade-enter`, `fade-enter-active`, `fade-enter-done`\n * - `fade-exit`, `fade-exit-active`, `fade-exit-done`\n *\n * A few details to note about how these classes are applied:\n *\n * 1. They are _joined_ with the ones that are already defined on the child\n * component, so if you want to add some base styles, you can use\n * `className` without worrying that it will be overridden.\n *\n * 2. If the transition component mounts with `in={false}`, no classes are\n * applied yet. You might be expecting `*-exit-done`, but if you think\n * about it, a component cannot finish exiting if it hasn't entered yet.\n *\n * 2. `fade-appear-done` and `fade-enter-done` will _both_ be applied. This\n * allows you to define different behavior for when appearing is done and\n * when regular entering is done, using selectors like\n * `.fade-enter-done:not(.fade-appear-done)`. For example, you could apply\n * an epic entrance animation when element first appears in the DOM using\n * [Animate.css](https://daneden.github.io/animate.css/). Otherwise you can\n * simply use `fade-enter-done` for defining both cases.\n *\n * Each individual classNames can also be specified independently like:\n *\n * ```js\n * classNames={{\n * appear: 'my-appear',\n * appearActive: 'my-active-appear',\n * appearDone: 'my-done-appear',\n * enter: 'my-enter',\n * enterActive: 'my-active-enter',\n * enterDone: 'my-done-enter',\n * exit: 'my-exit',\n * exitActive: 'my-active-exit',\n * exitDone: 'my-done-exit',\n * }}\n * ```\n *\n * If you want to set these classes using CSS Modules:\n *\n * ```js\n * import styles from './styles.css';\n * ```\n *\n * you might want to use camelCase in your CSS file, that way could simply\n * spread them instead of listing them one by one:\n *\n * ```js\n * classNames={{ ...styles }}\n * ```\n *\n * @type {string | {\n * appear?: string,\n * appearActive?: string,\n * appearDone?: string,\n * enter?: string,\n * enterActive?: string,\n * enterDone?: string,\n * exit?: string,\n * exitActive?: string,\n * exitDone?: string,\n * }}\n */\n classNames: classNamesShape,\n\n /**\n * A `<Transition>` callback fired immediately after the 'enter' or 'appear' class is\n * applied.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement, isAppearing: bool)\n */\n onEnter: PropTypes.func,\n\n /**\n * A `<Transition>` callback fired immediately after the 'enter-active' or\n * 'appear-active' class is applied.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement, isAppearing: bool)\n */\n onEntering: PropTypes.func,\n\n /**\n * A `<Transition>` callback fired immediately after the 'enter' or\n * 'appear' classes are **removed** and the `done` class is added to the DOM node.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement, isAppearing: bool)\n */\n onEntered: PropTypes.func,\n\n /**\n * A `<Transition>` callback fired immediately after the 'exit' class is\n * applied.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed\n *\n * @type Function(node: HtmlElement)\n */\n onExit: PropTypes.func,\n\n /**\n * A `<Transition>` callback fired immediately after the 'exit-active' is applied.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed\n *\n * @type Function(node: HtmlElement)\n */\n onExiting: PropTypes.func,\n\n /**\n * A `<Transition>` callback fired immediately after the 'exit' classes\n * are **removed** and the `exit-done` class is added to the DOM node.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed\n *\n * @type Function(node: HtmlElement)\n */\n onExited: PropTypes.func\n}) : {};\nexport default CSSTransition;","import _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\n\nvar _leaveRenders, _enterRenders;\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { ENTERED, ENTERING, EXITING } from './Transition';\nimport TransitionGroupContext from './TransitionGroupContext';\n\nfunction areChildrenDifferent(oldChildren, newChildren) {\n if (oldChildren === newChildren) return false;\n\n if (React.isValidElement(oldChildren) && React.isValidElement(newChildren) && oldChildren.key != null && oldChildren.key === newChildren.key) {\n return false;\n }\n\n return true;\n}\n/**\n * Enum of modes for SwitchTransition component\n * @enum { string }\n */\n\n\nexport var modes = {\n out: 'out-in',\n in: 'in-out'\n};\n\nvar callHook = function callHook(element, name, cb) {\n return function () {\n var _element$props;\n\n element.props[name] && (_element$props = element.props)[name].apply(_element$props, arguments);\n cb();\n };\n};\n\nvar leaveRenders = (_leaveRenders = {}, _leaveRenders[modes.out] = function (_ref) {\n var current = _ref.current,\n changeState = _ref.changeState;\n return React.cloneElement(current, {\n in: false,\n onExited: callHook(current, 'onExited', function () {\n changeState(ENTERING, null);\n })\n });\n}, _leaveRenders[modes.in] = function (_ref2) {\n var current = _ref2.current,\n changeState = _ref2.changeState,\n children = _ref2.children;\n return [current, React.cloneElement(children, {\n in: true,\n onEntered: callHook(children, 'onEntered', function () {\n changeState(ENTERING);\n })\n })];\n}, _leaveRenders);\nvar enterRenders = (_enterRenders = {}, _enterRenders[modes.out] = function (_ref3) {\n var children = _ref3.children,\n changeState = _ref3.changeState;\n return React.cloneElement(children, {\n in: true,\n onEntered: callHook(children, 'onEntered', function () {\n changeState(ENTERED, React.cloneElement(children, {\n in: true\n }));\n })\n });\n}, _enterRenders[modes.in] = function (_ref4) {\n var current = _ref4.current,\n children = _ref4.children,\n changeState = _ref4.changeState;\n return [React.cloneElement(current, {\n in: false,\n onExited: callHook(current, 'onExited', function () {\n changeState(ENTERED, React.cloneElement(children, {\n in: true\n }));\n })\n }), React.cloneElement(children, {\n in: true\n })];\n}, _enterRenders);\n/**\n * A transition component inspired by the [vue transition modes](https://vuejs.org/v2/guide/transitions.html#Transition-Modes).\n * You can use it when you want to control the render between state transitions.\n * Based on the selected mode and the child's key which is the `Transition` or `CSSTransition` component, the `SwitchTransition` makes a consistent transition between them.\n *\n * If the `out-in` mode is selected, the `SwitchTransition` waits until the old child leaves and then inserts a new child.\n * If the `in-out` mode is selected, the `SwitchTransition` inserts a new child first, waits for the new child to enter and then removes the old child.\n *\n * **Note**: If you want the animation to happen simultaneously\n * (that is, to have the old child removed and a new child inserted **at the same time**),\n * you should use\n * [`TransitionGroup`](https://reactcommunity.org/react-transition-group/transition-group)\n * instead.\n *\n * ```jsx\n * function App() {\n * const [state, setState] = useState(false);\n * return (\n * <SwitchTransition>\n * <CSSTransition\n * key={state ? \"Goodbye, world!\" : \"Hello, world!\"}\n * addEndListener={(node, done) => node.addEventListener(\"transitionend\", done, false)}\n * classNames='fade'\n * >\n * <button onClick={() => setState(state => !state)}>\n * {state ? \"Goodbye, world!\" : \"Hello, world!\"}\n * </button>\n * </CSSTransition>\n * </SwitchTransition>\n * );\n * }\n * ```\n *\n * ```css\n * .fade-enter{\n * opacity: 0;\n * }\n * .fade-exit{\n * opacity: 1;\n * }\n * .fade-enter-active{\n * opacity: 1;\n * }\n * .fade-exit-active{\n * opacity: 0;\n * }\n * .fade-enter-active,\n * .fade-exit-active{\n * transition: opacity 500ms;\n * }\n * ```\n */\n\nvar SwitchTransition = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(SwitchTransition, _React$Component);\n\n function SwitchTransition() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n _this.state = {\n status: ENTERED,\n current: null\n };\n _this.appeared = false;\n\n _this.changeState = function (status, current) {\n if (current === void 0) {\n current = _this.state.current;\n }\n\n _this.setState({\n status: status,\n current: current\n });\n };\n\n return _this;\n }\n\n var _proto = SwitchTransition.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n this.appeared = true;\n };\n\n SwitchTransition.getDerivedStateFromProps = function getDerivedStateFromProps(props, state) {\n if (props.children == null) {\n return {\n current: null\n };\n }\n\n if (state.status === ENTERING && props.mode === modes.in) {\n return {\n status: ENTERING\n };\n }\n\n if (state.current && areChildrenDifferent(state.current, props.children)) {\n return {\n status: EXITING\n };\n }\n\n return {\n current: React.cloneElement(props.children, {\n in: true\n })\n };\n };\n\n _proto.render = function render() {\n var _this$props = this.props,\n children = _this$props.children,\n mode = _this$props.mode,\n _this$state = this.state,\n status = _this$state.status,\n current = _this$state.current;\n var data = {\n children: children,\n current: current,\n changeState: this.changeState,\n status: status\n };\n var component;\n\n switch (status) {\n case ENTERING:\n component = enterRenders[mode](data);\n break;\n\n case EXITING:\n component = leaveRenders[mode](data);\n break;\n\n case ENTERED:\n component = current;\n }\n\n return /*#__PURE__*/React.createElement(TransitionGroupContext.Provider, {\n value: {\n isMounting: !this.appeared\n }\n }, component);\n };\n\n return SwitchTransition;\n}(React.Component);\n\nSwitchTransition.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /**\n * Transition modes.\n * `out-in`: Current element transitions out first, then when complete, the new element transitions in.\n * `in-out`: New element transitions in first, then when complete, the current element transitions out.\n *\n * @type {'out-in'|'in-out'}\n */\n mode: PropTypes.oneOf([modes.in, modes.out]),\n\n /**\n * Any `Transition` or `CSSTransition` component.\n */\n children: PropTypes.oneOfType([PropTypes.element.isRequired])\n} : {};\nSwitchTransition.defaultProps = {\n mode: modes.out\n};\nexport default SwitchTransition;","import React from \"react\";\n\nimport styles from \"./stack.module.css\";\n\nexport default function StackView({ name, children }) {\n return <div className={styles.stack}>{children}</div>;\n}\n","import React, {\n createRef,\n useEffect,\n useState,\n createContext,\n useMemo,\n} from \"react\";\nimport { SwitchTransition, CSSTransition } from \"react-transition-group\";\nimport View from \"./View\";\n\nimport styles from \"./stack.module.css\";\n\ntype StackProps = {\n name?: string;\n currentView: string;\n onViewChange: (view: string, args: any) => void;\n children: React.ReactNode;\n};\n\ntype MapContextType = {\n setView: (view: string, args?: any) => void;\n current: {\n name: string;\n args?: any;\n };\n};\n\nexport const StackContext = createContext<MapContextType>({\n setView: () => {},\n current: {\n name: \"none\",\n },\n});\n\nexport function useStackContext() {\n return React.useContext(StackContext);\n}\n\nexport default function Stack({\n name,\n currentView,\n onViewChange,\n children,\n}: StackProps) {\n const elements = {\n none: {\n name: \"none\",\n ref: createRef(),\n view: null,\n },\n };\n\n React.Children.forEach(children, (element) => {\n if (!React.isValidElement(element)) return;\n const { name } = element.props as any;\n if (!name) {\n throw new Error(\"name is required for Stack.View\");\n }\n elements[name] = {\n name: name,\n ref: createRef(),\n view: element,\n };\n });\n\n const [currentRef, setCurrentRef] = useState(elements[currentView].ref);\n\n useEffect(() => {\n setCurrentRef(elements[currentView].ref);\n }, [currentView]);\n\n const { view: View } = elements[currentView];\n\n const [args, setArgs] = useState<any>({});\n\n const contextValue = useMemo(() => {\n return {\n current: {\n name: currentView,\n args: args,\n },\n setView: (view, opt) => {\n setArgs(opt);\n onViewChange(view, opt);\n },\n };\n }, [currentView, onViewChange, args, setArgs]);\n\n return (\n <StackContext.Provider value={contextValue}>\n <SwitchTransition mode=\"out-in\">\n <CSSTransition\n classNames={{\n enter: styles.slideEnter,\n enterActive: styles.slideEnterActive,\n enterDone: styles.slideEnterDone,\n exit: styles.slideExit,\n exitActive: styles.slideExitActive,\n exitDone: styles.slideExitDone,\n }}\n mountOnEnter\n unmountOnExit\n timeout={300}\n key={currentView}\n nodeRef={currentRef}\n addEndListener={(done) => {\n currentRef.current.addEventListener(\"transitionend\", done, false);\n }}\n >\n <div className={styles.stack} ref={currentRef}>\n {View}\n </div>\n </CSSTransition>\n </SwitchTransition>\n </StackContext.Provider>\n );\n}\n\nStack.View = View;\n","import React, { useState, useRef, useEffect, useContext } from \"react\";\nimport { getLoader } from \"../../utils/loader\";\nimport { useMapContext } from \"../../contexts/Map\";\n\nimport styles from \"./SearchInput.module.css\";\n\nexport default function SearchInput({ onFocus }) {\n const { options, setPlace, t, language } = useMapContext();\n const apiKey = options.googleApiKey;\n\n const inputRef = useRef(null);\n\n const loader = getLoader(apiKey, language);\n\n useEffect(() => {\n if (!inputRef.current) return;\n loader.importLibrary(\"places\").then((places) => {\n const autocomplete = new places.Autocomplete(inputRef.current, {\n fields: [\"geometry\"],\n });\n autocomplete.addListener(\"place_changed\", () => {\n const place = autocomplete.getPlace();\n setPlace(place);\n });\n });\n }, [inputRef]);\n\n // Doc for styling the autocomplete\n // https://developers.google.com/maps/documentation/javascript/place-autocomplete#style-autocomplete\n return (\n <div className={styles.container}>\n <input\n onFocus={onFocus}\n ref={inputRef}\n className={styles.searchInput}\n type=\"text\"\n placeholder={t(\"search.placeholder\")}\n />\n </div>\n );\n}\n\n","import React, { useEffect } from \"react\";\n\nimport styles from \"./Checkbox.module.css\";\n\ntype CheckboxToggleProps = {\n id?: string;\n checked: boolean;\n name?: string;\n onChange: (value: boolean) => void;\n type?: \"checkbox\" | \"radio\";\n};\n\nexport default function CheckboxToggle({\n id,\n name,\n checked,\n onChange,\n type = \"checkbox\",\n}: CheckboxToggleProps) {\n const [isChecked, setIsChecked] = React.useState(checked || false);\n\n const onChangeCallback = React.useCallback(\n (e) => {\n setIsChecked(e.target.checked);\n onChange(e.target.checked);\n },\n [onChange],\n );\n\n useEffect(() => {\n setIsChecked(checked);\n }, [checked]);\n\n return (\n <div className={styles.container}>\n <input\n name={name}\n id={id}\n type={type}\n value={isChecked as any}\n checked={isChecked as any}\n onChange={onChangeCallback}\n />\n <span className={styles.box}>\n <svg\n className=\"checkmark\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n width=\"12\"\n height=\"12\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"20 6 9 17 4 12\"></polyline>\n </svg>\n </span>\n </div>\n );\n}\n","import React, { CSSProperties } from \"react\";\n\nimport styles from \"./Range.module.css\";\n\nexport default function Range({ ticks, value, onChange }) {\n const inputRef = React.useRef(null);\n\n const convertValue = ticks.findIndex((tick) => tick.value === value);\n\n const bgSize = (convertValue / (ticks.length - 1)) * 100;\n\n return (\n <div className={styles.container}>\n <input\n value={convertValue}\n onChange={(e) => {\n onChange(ticks[e.target.value].value);\n }}\n ref={inputRef}\n className={styles.input}\n type=\"range\"\n list=\"tickmarks\"\n step=\"1\"\n min=\"0\"\n max=\"8\"\n style={{ \"--roadmap-range-bgize\": `${bgSize}%` } as CSSProperties}\n />\n\n <div className={styles.ticksContainer}>\n {ticks.map((tick, i) => {\n return (\n <div\n onClick={(e) => {\n onChange(ticks[i].value);\n }}\n key={tick.label}\n className={styles.tick}\n >\n {tick.label}\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n\n","import React, { useState, useMemo, useRef, useEffect } from \"react\";\nimport styles from \"./MultiSelect.module.css\";\n\nexport interface MultiSelectOption {\n value: string | number;\n label: string;\n disabled?: boolean;\n}\n\nexport interface MultiSelectProps {\n id?: string;\n name?: string;\n options: MultiSelectOption[];\n value?: (string | number)[];\n preferredValues?: (string | number)[];\n placeholder?: string;\n disabled?: boolean;\n className?: string;\n onChange?: (values: (string | number)[]) => void;\n}\n\nconst MultiSelect: React.FC<MultiSelectProps> = ({\n id,\n name,\n options,\n value = [],\n preferredValues = [],\n placeholder = \"Select...\",\n disabled = false,\n className,\n onChange,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [inputValue, setInputValue] = useState(\"\");\n const [highlightedIndex, setHighlightedIndex] = useState(-1);\n const inputRef = useRef<HTMLInputElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n\n const preferredSet = useMemo(\n () => new Set(preferredValues),\n [preferredValues],\n );\n\n const { preferred, others } = useMemo(() => {\n const q = inputValue.toLowerCase();\n const filtered = options.filter((o) => o.label.toLowerCase().includes(q));\n return {\n preferred: filtered.filter((o) => preferredSet.has(o.value)),\n others: filtered.filter((o) => !preferredSet.has(o.value)),\n };\n }, [options, inputValue, preferredSet]);\n\n const flatItems = useMemo(() => [...preferred, ...others], [preferred, others]);\n\n const selectedOptions = useMemo(\n () => options.filter((o) => value.includes(o.value)),\n [options, value],\n );\n\n useEffect(() => {\n if (highlightedIndex >= flatItems.length) {\n setHighlightedIndex(flatItems.length > 0 ? 0 : -1);\n }\n }, [flatItems, highlightedIndex]);\n\n const openMenu = () => {\n if (disabled) return;\n setIsOpen(true);\n if (highlightedIndex < 0 && flatItems.length > 0) setHighlightedIndex(0);\n };\n\n const closeMenu = () => {\n setIsOpen(false);\n setInputValue(\"\");\n setHighlightedIndex(-1);\n };\n\n const selectItem = (item: MultiSelectOption) => {\n if (item.disabled) return;\n const next = value.includes(item.value)\n ? value.filter((v) => v !== item.value)\n : [...value, item.value];\n onChange?.(next);\n setInputValue(\"\");\n setIsOpen(true);\n inputRef.current?.focus();\n };\n\n const removeValue = (v: string | number) => {\n onChange?.(value.filter((x) => x !== v));\n };\n\n const handleInputKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (disabled) return;\n switch (e.key) {\n case \"Backspace\":\n if (inputValue === \"\" && value.length > 0) {\n e.preventDefault();\n onChange?.(value.slice(0, -1));\n }\n return;\n case \"ArrowDown\":\n e.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n if (flatItems.length > 0) setHighlightedIndex(0);\n } else if (flatItems.length > 0) {\n setHighlightedIndex((i) => (i + 1) % flatItems.length);\n }\n return;\n case \"ArrowUp\":\n e.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n if (flatItems.length > 0)\n setHighlightedIndex(flatItems.length - 1);\n } else if (flatItems.length > 0) {\n setHighlightedIndex(\n (i) => (i <= 0 ? flatItems.length : i) - 1,\n );\n }\n return;\n case \"Enter\":\n if (isOpen && highlightedIndex >= 0 && flatItems[highlightedIndex]) {\n e.preventDefault();\n selectItem(flatItems[highlightedIndex]);\n }\n return;\n case \"Escape\":\n if (isOpen) {\n e.preventDefault();\n closeMenu();\n }\n return;\n case \"Home\":\n if (isOpen && flatItems.length > 0) {\n e.preventDefault();\n setHighlightedIndex(0);\n }\n return;\n case \"End\":\n if (isOpen && flatItems.length > 0) {\n e.preventDefault();\n setHighlightedIndex(flatItems.length - 1);\n }\n return;\n default:\n return;\n }\n };\n\n const handleInputBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n const next = e.relatedTarget as Node | null;\n if (next && containerRef.current?.contains(next)) return;\n closeMenu();\n };\n\n const toggleDropdown = () => {\n if (disabled) return;\n if (isOpen) {\n setIsOpen(false);\n } else {\n openMenu();\n }\n inputRef.current?.focus();\n };\n\n const renderOption = (option: MultiSelectOption, idx: number, isLast: boolean) => {\n const selected = value.includes(option.value);\n return (\n <div\n key={option.value}\n className={`${styles.option} ${\n highlightedIndex === idx ? styles.optionFocused : \"\"\n } ${selected ? styles.optionSelected : \"\"} ${\n option.disabled ? styles.optionDisabled : \"\"\n } ${isLast ? styles.optionLast : \"\"}`}\n role=\"option\"\n aria-selected={selected}\n aria-disabled={option.disabled || undefined}\n onMouseDown={(e) => e.preventDefault()}\n onMouseMove={() => {\n if (highlightedIndex !== idx) setHighlightedIndex(idx);\n }}\n onClick={() => selectItem(option)}\n >\n <span className={styles.optionLabel}>{option.label}</span>\n {selected && (\n <svg\n className={styles.optionCheck}\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n )}\n </div>\n );\n };\n\n return (\n <div\n ref={containerRef}\n className={`${styles.multiSelect} ${className ?? \"\"}`}\n >\n <div className={`${styles.control} ${disabled ? styles.disabled : \"\"}`}>\n <div\n className={styles.valueContainer}\n onMouseDown={(e) => {\n if (e.target === e.currentTarget) {\n e.preventDefault();\n inputRef.current?.focus();\n openMenu();\n }\n }}\n >\n {selectedOptions.map((option) => (\n <div key={option.value} className={styles.multiValue}>\n <span className={styles.multiValueLabel}>{option.label}</span>\n <button\n type=\"button\"\n className={styles.multiValueRemove}\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => removeValue(option.value)}\n disabled={disabled}\n aria-label={`Remove ${option.label}`}\n >\n ×\n </button>\n </div>\n ))}\n <input\n ref={inputRef}\n id={id}\n name={name}\n className={styles.input}\n value={inputValue}\n onChange={(e) => {\n setInputValue(e.target.value);\n setIsOpen(true);\n setHighlightedIndex(0);\n }}\n onKeyDown={handleInputKeyDown}\n onFocus={openMenu}\n onBlur={handleInputBlur}\n placeholder={selectedOptions.length === 0 ? placeholder : \"\"}\n disabled={disabled}\n autoComplete=\"off\"\n role=\"combobox\"\n aria-expanded={isOpen}\n aria-autocomplete=\"list\"\n />\n </div>\n <button\n type=\"button\"\n className={styles.dropdownIndicator}\n onMouseDown={(e) => e.preventDefault()}\n onClick={toggleDropdown}\n disabled={disabled}\n aria-label=\"Toggle menu\"\n tabIndex={-1}\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"6,9 12,15 18,9\" />\n </svg>\n </button>\n </div>\n\n {isOpen && (\n <div className={`${styles.menu} ${styles.menuOpen}`} role=\"listbox\">\n <div className={styles.menuList}>\n {preferred.length > 0 && (\n <>\n <div className={styles.groupHeading}>Preferred</div>\n {preferred.map((option, i) =>\n renderOption(\n option,\n i,\n i === preferred.length - 1 && others.length === 0,\n ),\n )}\n </>\n )}\n {others.length > 0 && (\n <>\n {preferred.length > 0 && (\n <>\n <div className={styles.groupSeparator} />\n <div className={styles.groupHeading}>All</div>\n </>\n )}\n {others.map((option, i) =>\n renderOption(\n option,\n preferred.length + i,\n i === others.length - 1,\n ),\n )}\n </>\n )}\n {preferred.length === 0 && others.length === 0 && (\n <div className={styles.noOptions}>No options found</div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n};\n\nexport default MultiSelect;\n","import React from \"react\";\nimport styles from \"./SelectField.module.css\";\n\nexport interface SelectFieldOption {\n value: string | number;\n label: string;\n disabled?: boolean;\n}\n\nexport interface SelectFieldProps {\n id?: string;\n name?: string;\n value?: string | number;\n options: SelectFieldOption[];\n placeholder?: string;\n disabled?: boolean;\n className?: string;\n onChange?: (value: string | number) => void;\n onBlur?: (event: React.FocusEvent<HTMLSelectElement>) => void;\n onFocus?: (event: React.FocusEvent<HTMLSelectElement>) => void;\n}\n\nconst SelectField: React.FC<SelectFieldProps> = ({\n id,\n name,\n value,\n options = [],\n placeholder = \"Select an option\",\n disabled = false,\n className = \"\",\n onChange,\n onBlur,\n onFocus,\n}) => {\n const handleChange = (event: React.ChangeEvent<HTMLSelectElement>) => {\n const selectedValue = event.target.value;\n const option = options.find(\n (opt) => opt.value.toString() === selectedValue\n );\n\n if (option && onChange) {\n onChange(option.value);\n }\n };\n\n return (\n <div className={`${styles.selectField} ${className}`}>\n <select\n id={id}\n name={name}\n value={value || \"\"}\n disabled={disabled}\n onChange={handleChange}\n onBlur={onBlur}\n onFocus={onFocus}\n className={styles.select}\n >\n {placeholder && (\n <option value=\"\" disabled>\n {placeholder}\n </option>\n )}\n {options.map((option, i) => (\n <option key={`${i}`} value={option.value} disabled={option.disabled}>\n {option.label}\n </option>\n ))}\n </select>\n </div>\n );\n};\n\nexport default SelectField;\n\n","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3csvg%20version='1.1'%20id='Layer_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20600%20600'%20xml:space='preserve'%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20fill='currentColor'%20d='M353.286,163.919c16.464,0,29.815,13.351,29.815,29.822%20c0,16.467-13.351,29.819-29.815,29.819c-16.47,0-29.822-13.352-29.822-29.819C323.464,177.27,336.816,163.919,353.286,163.919%20L353.286,163.919z%20M245.838,163.919c16.47,0,29.822,13.351,29.822,29.822c0,16.467-13.352,29.819-29.822,29.819%20c-16.471,0-29.822-13.352-29.822-29.819C216.016,177.27,229.367,163.919,245.838,163.919L245.838,163.919z%20M354.093,338.178%20c22.575,0,40.874,18.299,40.874,40.87c0,22.571-18.299,40.87-40.874,40.87c-22.568,0-40.867-18.299-40.867-40.87%20C313.226,356.477,331.525,338.178,354.093,338.178L354.093,338.178z%20M245.024,338.178c22.575,0,40.874,18.299,40.874,40.87%20c0,22.571-18.299,40.87-40.874,40.87c-22.568,0-40.874-18.299-40.874-40.87C204.151,356.477,222.457,338.178,245.024,338.178%20L245.024,338.178z%20M406.906,244.769c22.575,0,40.874,18.299,40.874,40.87s-18.299,40.87-40.874,40.87%20c-22.568,0-40.867-18.299-40.867-40.87S384.338,244.769,406.906,244.769L406.906,244.769z%20M192.211,244.769%20c22.568,0,40.874,18.299,40.874,40.87s-18.306,40.87-40.874,40.87c-22.575,0-40.874-18.299-40.874-40.87%20S169.636,244.769,192.211,244.769L192.211,244.769z%20M299.559,244.769c22.575,0,40.874,18.299,40.874,40.87%20s-18.299,40.87-40.874,40.87c-22.569,0-40.868-18.299-40.868-40.87S276.99,244.769,299.559,244.769L299.559,244.769z%20M452.99,131.334H146.127c-32.625,37.291-50.332,84.551-50.332,134.107c0,112.541,91.226,203.765,203.764,203.765%20c112.544,0,203.764-91.223,203.764-203.765C503.323,215.889,485.608,168.622,452.99,131.334L452.99,131.334z%20M471.276,105.109%20l-4.672-4.998h-334.09l-4.672,4.998c-40.739,43.6-63.267,100.662-63.267,160.332c0,129.775,105.21,234.988,234.984,234.988%20c129.774,0,234.984-105.213,234.984-234.988C534.542,205.771,512.015,148.709,471.276,105.109L471.276,105.109z%20M480.204,60.027%20H118.914C61.952,110.158,26,183.596,26,265.441C26,416.523,148.48,539,299.559,539c151.085,0,273.558-122.477,273.558-273.559%20C573.117,183.596,537.165,110.158,480.204,60.027z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2022.0.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Layer_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20600%20600'%20enable-background='new%200%200%20600%20600'%20xml:space='preserve'%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20fill='currentColor'%20d='M228.887,396.793c20.779,0,37.62,16.841,37.62,37.617%20c0,20.773-16.841,37.617-37.62,37.617c-20.773,0-37.613-16.844-37.613-37.617C191.274,413.634,208.115,396.793,228.887,396.793%20L228.887,396.793z%20M366.03,396.793c20.773,0,37.614,16.841,37.614,37.617c0,20.773-16.841,37.617-37.614,37.617%20c-20.779,0-37.62-16.844-37.62-37.617C328.41,413.634,345.251,396.793,366.03,396.793L366.03,396.793z%20M228.375,325.684%20c-29.03,0-55.41,11.868-74.52,30.976c-41.566,41.573-41.566,113.923,0,155.497c19.111,19.111,45.49,30.979,74.52,30.979h138.168%20c29.023,0,55.41-11.868,74.521-30.979c41.565-41.566,41.565-113.928,0-155.497c-18.336-18.336-43.379-30.003-71.019-30.916%20c63.723-27.868,105.151-90.836,105.151-160.733c0-42.14-13.276-74.632-37.316-108.359H161.794%20c-24.033,33.747-37.309,66.2-37.309,108.359c0,69.852,41.359,132.758,105.012,160.674H228.375L228.375,325.684z%20M366.543,357.791%20H228.375c-20.163,0-38.513,8.265-51.824,21.569c-29.023,29.027-29.023,81.069,0,110.096c13.311,13.308,31.654,21.569,51.824,21.569%20h138.168c20.17,0,38.513-8.261,51.824-21.569c29.023-29.027,29.023-81.069,0-110.096%20C405.056,366.057,386.706,357.791,366.543,357.791L366.543,357.791z%20M421.17,88.762c14.523,23.018,21.915,49.024,21.915,76.248%20c0,79.121-64.131,143.245-143.248,143.245S156.595,244.127,156.595,165.01c0-27.234,7.392-53.222,21.915-76.248H421.17%20L421.17,88.762z%20M331.075,225.95c11.726,0,21.236,9.511,21.236,21.236c0,11.733-9.511,21.24-21.236,21.24%20c-11.733,0-21.236-9.507-21.236-21.24C309.839,235.461,319.342,225.95,331.075,225.95L331.075,225.95z%20M268.605,225.95%20c11.726,0,21.243,9.511,21.243,21.236c0,11.733-9.518,21.24-21.243,21.24c-11.726,0-21.236-9.507-21.236-21.24%20C247.369,235.461,256.879,225.95,268.605,225.95L268.605,225.95z%20M236.882,163.754c11.726,0,21.243,9.508,21.243,21.236%20c0,11.729-9.518,21.24-21.243,21.24c-11.726,0-21.236-9.511-21.236-21.24C215.646,173.261,225.156,163.754,236.882,163.754%20L236.882,163.754z%20M299.837,163.754c11.732,0,21.243,9.508,21.243,21.236c0,11.729-9.511,21.24-21.243,21.24%20c-11.726,0-21.236-9.511-21.236-21.24C278.6,173.261,288.111,163.754,299.837,163.754L299.837,163.754z%20M362.798,163.754%20c11.726,0,21.236,9.508,21.236,21.236c0,11.729-9.511,21.24-21.236,21.24c-11.733,0-21.236-9.511-21.236-21.24%20C341.562,173.261,351.065,163.754,362.798,163.754L362.798,163.754z%20M332.079,116.228c6.86,0,12.417,5.561,12.417,12.417%20c0,6.86-5.558,12.425-12.417,12.425s-12.424-5.566-12.424-12.425C319.654,121.79,325.219,116.228,332.079,116.228L332.079,116.228z%20M267.601,116.228c6.86,0,12.425,5.561,12.425,12.417c0,6.86-5.565,12.425-12.425,12.425c-6.86,0-12.417-5.566-12.417-12.425%20C255.184,121.79,260.742,116.228,267.601,116.228L267.601,116.228z%20M177.153,7.87C129.219,7.87,90,47.086,90,95.02v408.83%20c0,47.934,39.219,87.15,87.153,87.15h246.024c47.934,0,87.147-39.216,87.147-87.15V95.02c0-47.934-39.213-87.15-87.147-87.15%20H177.153z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2022.0.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Layer_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20600%20600'%20enable-background='new%200%200%20600%20600'%20xml:space='preserve'%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20fill='currentColor'%20d='M407.111,334.214c16.317,0,29.543,13.226,29.543,29.543%20c0,16.313-13.227,29.543-29.543,29.543c-16.31,0-29.536-13.229-29.536-29.543C377.576,347.44,390.802,334.214,407.111,334.214%20L407.111,334.214z%20M198.69,334.214c16.317,0,29.543,13.226,29.543,29.543c0,16.313-13.226,29.543-29.543,29.543%20s-29.543-13.229-29.543-29.543C169.147,347.44,182.373,334.214,198.69,334.214L198.69,334.214z%20M227.94,180.772%20c24.971,0,45.213,20.242,45.213,45.213c0,24.967-20.243,45.213-45.213,45.213s-45.213-20.245-45.213-45.213%20C182.727,201.014,202.969,180.772,227.94,180.772L227.94,180.772z%20M377.868,180.772c24.968,0,45.213,20.242,45.213,45.213%20c0,24.967-20.245,45.213-45.213,45.213c-24.974,0-45.213-20.245-45.213-45.213C332.655,201.014,352.894,180.772,377.868,180.772%20L377.868,180.772z%20M302.899,361.142c24.974,0,45.22,20.243,45.22,45.213s-20.245,45.213-45.22,45.213%20c-24.968,0-45.21-20.243-45.21-45.213S277.931,361.142,302.899,361.142L302.899,361.142z%20M302.899,100.142%20c-111.485,0-201.855,90.37-201.855,201.858c0,111.489,90.37,201.859,201.855,201.859c111.491,0,201.865-90.37,201.865-201.859%20C504.764,190.512,414.391,100.142,302.899,100.142L302.899,100.142z%20M302.899,69.21C174.338,69.21,70.113,173.44,70.113,302%20c0,128.561,104.226,232.79,232.787,232.79c128.56,0,232.793-104.229,232.793-232.79C535.692,173.44,431.459,69.21,302.899,69.21%20L302.899,69.21z%20M302.899,31C153.234,31,31.902,152.328,31.902,302c0,149.669,121.331,271,270.997,271%20c149.672,0,271.006-121.331,271.006-271C573.906,152.328,452.571,31,302.899,31z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2022.0.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Layer_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20600%20600'%20enable-background='new%200%200%20600%20600'%20xml:space='preserve'%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20fill='currentColor'%20d='M246.063,132.777c18.959,0,34.335,15.373,34.335,34.332%20c0,18.965-15.376,34.335-34.335,34.335c-18.961,0-34.332-15.37-34.332-34.335C211.731,148.15,227.102,132.777,246.063,132.777%20L246.063,132.777z%20M357.555,132.777c18.962,0,34.332,15.373,34.332,34.332c0,18.962-15.37,34.335-34.332,34.335%20c-18.961,0-34.331-15.373-34.331-34.335C323.224,148.15,338.594,132.777,357.555,132.777L357.555,132.777z%20M226.875,253.708%20c9.286,0,16.811,7.525,16.811,16.808c0,9.286-7.525,16.811-16.811,16.811c-9.283,0-16.808-7.525-16.808-16.811%20C210.066,261.234,217.592,253.708,226.875,253.708L226.875,253.708z%20M371.359,253.708c9.286,0,16.815,7.525,16.815,16.808%20c0,9.286-7.529,16.811-16.815,16.811c-9.279,0-16.808-7.525-16.808-16.811C354.552,261.234,362.08,253.708,371.359,253.708%20L371.359,253.708z%20M236.304,421.639c19.179,0,34.731,15.548,34.731,34.731c0,19.179-15.552,34.731-34.731,34.731%20c-19.179,0-34.731-15.552-34.731-34.731C201.573,437.187,217.126,421.639,236.304,421.639L236.304,421.639z%20M362.924,421.639%20c19.179,0,34.728,15.548,34.728,34.731c0,19.179-15.549,34.731-34.728,34.731c-19.186,0-34.735-15.552-34.735-34.731%20C328.189,437.187,343.738,421.639,362.924,421.639L362.924,421.639z%20M235.828,355.985c-26.801,0-51.159,10.958-68.804,28.6%20c-38.377,38.383-38.377,105.184,0,143.567c17.645,17.645,42.004,28.602,68.804,28.602h127.568c26.803,0,51.159-10.957,68.804-28.602%20c38.377-38.377,38.377-105.19,0-143.567c-16.91-16.91-39.994-27.679-65.481-28.542c57.148-25.011,97.033-82.036,97.033-148.405%20c0-88.133-70.984-161.938-161.945-161.938c-90.131,0-161.935,73.009-161.935,161.938c0,66.315,39.821,123.302,96.895,148.348%20H235.828L235.828,355.985z%20M159.969,344.666c-6.378,4.464-12.357,9.488-17.866,14.999c-52.137,52.134-52.137,141.271-0.003,193.407%20C167.008,577.982,200.589,592,235.828,592h127.568c35.24,0,68.823-14.018,93.729-38.927c52.137-52.134,52.137-141.276,0-193.41%20c-4.761-4.761-9.874-9.155-15.287-13.143c36.523-36.834,57.159-86.685,57.159-138.883c0-108.993-88.188-197.184-197.19-197.184%20c-108.977,0-197.181,88.207-197.181,197.184C104.627,258.933,124.557,307.996,159.969,344.666L159.969,344.666z%20M363.396,385.629%20H235.828c-18.617,0-35.559,7.631-47.846,19.914c-26.797,26.8-26.797,74.85,0,101.65c12.287,12.286,29.225,19.914,47.846,19.914%20h127.568c18.623,0,35.559-7.628,47.849-19.914c26.797-26.8,26.797-74.85,0-101.65C398.955,393.259,382.013,385.629,363.396,385.629%20L363.396,385.629z%20M301.808,75.381c-73.808,0-132.256,59.869-132.256,132.256c0,72.383,58.448,132.256,132.256,132.256%20c73.815,0,132.265-59.87,132.265-132.256C434.073,135.248,375.622,75.381,301.808,75.381L301.808,75.381z%20M301.808,271.807%20c13.689,0,24.784,11.098,24.784,24.781c0,13.686-11.094,24.78-24.784,24.78c-13.686,0-24.777-11.094-24.777-24.78%20C277.03,282.905,288.122,271.807,301.808,271.807z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3csvg%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20600%20600'%20xml:space='preserve'%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20fill='currentColor'%20d='M460.592,75.695C501.794,116.897,525,172.38,525,230.692v136.191%20c0,58.315-23.206,113.795-64.408,154.997c-86.029,86.032-228.158,86.032-314.186,0C105.203,480.679,82,425.199,82,366.884V230.692%20c0-58.312,23.203-113.795,64.405-154.997C232.433-10.337,374.563-10.337,460.592,75.695L460.592,75.695z%20M434.493,101.794%20c-71.625-71.628-190.365-71.628-261.989,0c-33.068,33.068-53.597,78.696-53.597,128.898v136.191%20c0,50.205,20.529,95.834,53.597,128.898c71.624,71.628,190.364,71.628,261.989,0c33.067-33.064,53.596-78.693,53.596-128.898%20V230.692C488.089,180.49,467.56,134.862,434.493,101.794L434.493,101.794z%20M195.699,124.99%20c-27.134,27.137-43.982,64.557-43.982,105.702v136.191c0,41.146,16.848,78.568,43.982,105.702%20c58.806,58.814,156.791,58.814,215.598,0c27.138-27.134,43.982-64.557,43.982-105.702V230.692%20c0-41.146-16.845-78.566-43.982-105.702C352.491,66.18,254.506,66.18,195.699,124.99L195.699,124.99z%20M303.497,401.594%20c-17.304,0-31.334,14.029-31.334,31.337c0,17.304,14.03,31.333,31.334,31.333c17.307,0,31.337-14.029,31.337-31.333%20C334.834,415.623,320.804,401.594,303.497,401.594L303.497,401.594z%20M223.204,305.993c-17.308,0-31.338,14.03-31.338,31.334%20c0,17.308,14.03,31.337,31.338,31.337c17.307,0,31.337-14.029,31.337-31.337C254.541,320.023,240.511,305.993,223.204,305.993%20L223.204,305.993z%20M223.204,208.881c-17.308,0-31.338,14.026-31.338,31.334c0,17.307,14.03,31.337,31.338,31.337%20c17.307,0,31.337-14.03,31.337-31.337C254.541,222.907,240.511,208.881,223.204,208.881L223.204,208.881z%20M383.796,305.993%20c-17.308,0-31.338,14.03-31.338,31.334c0,17.308,14.03,31.337,31.338,31.337c17.307,0,31.333-14.029,31.333-31.337%20C415.129,320.023,401.103,305.993,383.796,305.993L383.796,305.993z%20M383.796,208.881c-17.308,0-31.338,14.026-31.338,31.334%20c0,17.307,14.03,31.337,31.338,31.337c17.307,0,31.333-14.03,31.333-31.337C415.129,222.907,401.103,208.881,383.796,208.881%20L383.796,208.881z%20M354.769,129.256c-12.585,0-22.786,10.201-22.786,22.786s10.2,22.786,22.786,22.786%20c12.585,0,22.786-10.201,22.786-22.786S367.354,129.256,354.769,129.256L354.769,129.256z%20M252.228,129.256%20c-12.585,0-22.786,10.201-22.786,22.786s10.2,22.786,22.786,22.786c12.585,0,22.786-10.201,22.786-22.786%20S264.813,129.256,252.228,129.256z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20width='20'%20height='20'%20viewBox='0%200%2020%2020'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M17%2012.8108C17%2013.1901%2016.898%2013.5661%2016.6687%2013.8682C15.2357%2015.7558%2012.784%2017%2010%2017C7.21614%2017%204.76431%2015.7557%203.33134%2013.8681C3.10199%2013.566%203%2013.1901%203%2012.8108V7.18924C3%206.80993%203.10199%206.43401%203.33134%206.13189C4.76431%204.24428%207.21614%203%2010%203C12.784%203%2015.2357%204.24423%2016.6687%206.13183C16.898%206.43395%2017%206.80986%2017%207.18918V12.8108ZM10%207C10.5522%207%2011%206.55231%2011%206C11%205.44769%2010.5522%205%2010%205C9.44775%205%209%205.44769%209%206C9%206.55231%209.44775%207%2010%207ZM6.5%2011.5C7.32837%2011.5%208%2010.8284%208%2010C8%209.17157%207.32837%208.5%206.5%208.5C5.67163%208.5%205%209.17157%205%2010C5%2010.8284%205.67163%2011.5%206.5%2011.5ZM11.5%2013.5C11.5%2014.3284%2010.8284%2015%2010%2015C9.17163%2015%208.5%2014.3284%208.5%2013.5C8.5%2012.6716%209.17163%2012%2010%2012C10.8284%2012%2011.5%2012.6716%2011.5%2013.5ZM13.5%2011.5C14.3284%2011.5%2015%2010.8284%2015%2010C15%209.17157%2014.3284%208.5%2013.5%208.5C12.6716%208.5%2012%209.17157%2012%2010C12%2010.8284%2012.6716%2011.5%2013.5%2011.5Z'%20fill='currentColor'/%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M10%201C13.8106%201%2017.1182%202.95715%2018.7732%205.82595C18.9298%206.09752%2019%206.40872%2019%206.72224V13.2778C19%2013.5913%2018.9298%2013.9025%2018.7732%2014.1741C17.1182%2017.0429%2013.8106%2019%2010%2019C6.18943%2019%202.88177%2017.0429%201.22682%2014.1741C1.07016%2013.9025%201%2013.5913%201%2013.2778V6.72224C1%206.40872%201.07016%206.09752%201.22682%205.82595C2.88177%202.95715%206.18943%201%2010%201ZM17.6711%205.64554C17.8973%205.95002%2018%206.32536%2018%206.70467V13.2953C18%2013.6746%2017.8973%2014.05%2017.6711%2014.3545C16.0408%2016.5488%2013.214%2018%2010%2018C6.78594%2018%203.95915%2016.5488%202.32887%2014.3544C2.10268%2014.0499%202%2013.6746%202%2013.2953V6.70472C2%206.32542%202.10268%205.95008%202.32887%205.64561C3.95915%203.45116%206.78594%202%2010%202C13.214%202%2016.0408%203.45116%2017.6711%205.64554Z'%20fill='currentColor'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2022.0.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Layer_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20600%20600'%20enable-background='new%200%200%20600%20600'%20xml:space='preserve'%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20fill='currentColor'%20d='M395.264,259.724c21.074,0,38.157,17.083,38.157,38.158%20c0,21.074-17.083,38.164-38.157,38.164c-21.075,0-38.165-17.09-38.165-38.164C357.099,276.806,374.189,259.724,395.264,259.724%20L395.264,259.724z%20M206.743,259.724c21.075,0,38.158,17.083,38.158,38.158c0,21.074-17.083,38.164-38.158,38.164%20c-21.074,0-38.164-17.09-38.164-38.164C168.579,276.806,185.669,259.724,206.743,259.724L206.743,259.724z%20M317.092,89.755v29.841%20h-32.183V89.755c-67.083,5.031-127.459,41.741-163.107,98.796v223.399c35.648,57.055,96.024,93.765,163.107,98.802v-29.841h32.183%20v29.841c67.084-5.038,127.459-41.747,163.114-98.802V188.551C444.551,131.496,384.176,94.787,317.092,89.755L317.092,89.755z%20M301,56.962c-85.858,0-165.124,45.192-209.061,118.921l-2.328,3.902v90.784H58.612v59.364h30.999v90.784l2.328,3.902%20C135.876,498.348,215.143,543.539,301,543.539c85.857,0,165.123-45.184,209.06-118.921l2.328-3.902v-90.784h31.006v-59.364h-31.006%20v-90.784l-2.328-3.902C466.124,102.147,386.857,56.962,301,56.962L301,56.962z%20M301,18.251c-155.741,0-282,126.253-282,282%20c0,155.741,126.26,282,282,282c155.747,0,282-126.26,282-282C583,144.504,456.747,18.251,301,18.251z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2022.0.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Layer_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20600%20600'%20enable-background='new%200%200%20600%20600'%20xml:space='preserve'%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20fill='currentColor'%20d='M261.067,178.239c0,7.551,2.198,14.579,5.985,20.491l20.49-20.491%20l-20.49-20.491C263.265,163.659,261.067,170.694,261.067,178.239L261.067,178.239z%20M298.999,216.171%20c-7.545,0-14.58-2.198-20.488-5.981l20.488-20.491l20.491,20.491C313.581,213.972,306.55,216.171,298.999,216.171L298.999,216.171z%20M336.934,178.239c0-7.545-2.198-14.58-5.985-20.491l-20.491,20.491l20.491,20.491C334.736,192.818,336.934,185.79,336.934,178.239%20L336.934,178.239z%20M319.49,146.295l-20.491,20.484l-20.488-20.484c5.907-3.79,12.943-5.988,20.488-5.988%20C306.55,140.307,313.581,142.505,319.49,146.295L319.49,146.295z%20M298.999,124.101c29.864,0,54.141,24.281,54.141,54.138%20c0,29.864-24.277,54.145-54.141,54.145c-29.858,0-54.138-24.281-54.138-54.145C244.861,148.382,269.141,124.101,298.999,124.101%20L298.999,124.101z%20M261.067,417.863c0,7.551,2.198,14.579,5.985,20.491l20.49-20.491l-20.49-20.491%20C263.265,403.283,261.067,410.319,261.067,417.863L261.067,417.863z%20M298.999,455.795c-7.545,0-14.58-2.198-20.488-5.981%20l20.488-20.491l20.491,20.491C313.581,453.597,306.55,455.795,298.999,455.795L298.999,455.795z%20M336.934,417.863%20c0-7.545-2.198-14.58-5.985-20.491l-20.491,20.491l20.491,20.491C334.736,432.443,336.934,425.415,336.934,417.863L336.934,417.863z%20M319.49,385.92l-20.491,20.484l-20.488-20.484c5.907-3.79,12.943-5.988,20.488-5.988C306.55,379.931,313.581,382.13,319.49,385.92%20L319.49,385.92z%20M298.999,363.725c29.864,0,54.141,24.281,54.141,54.138c0,29.864-24.277,54.145-54.141,54.145%20c-29.858,0-54.138-24.281-54.138-54.145C244.861,388.007,269.141,363.725,298.999,363.725L298.999,363.725z%20M180.188,239.928%20c30.094,0,54.49,24.4,54.49,54.494c0,30.095-24.396,54.494-54.49,54.494c-30.095,0-54.494-24.399-54.494-54.494%20C125.694,264.327,150.093,239.928,180.188,239.928L180.188,239.928z%20M417.816,239.928c30.094,0,54.494,24.4,54.494,54.494%20c0,30.095-24.4,54.494-54.494,54.494c-30.095,0-54.494-24.399-54.494-54.494C363.323,264.327,387.722,239.928,417.816,239.928%20L417.816,239.928z%20M298.999,86.511c116.835,0,211.544,94.708,211.544,211.54c0,116.84-94.708,211.54-211.544,211.54%20c-116.836,0-211.54-94.708-211.54-211.54C87.458,181.219,182.163,86.511,298.999,86.511L298.999,86.511z%20M298.999,54.1%20c134.73,0,243.955,109.225,243.955,243.951c0,134.727-109.225,243.952-243.955,243.952c-134.727,0-243.952-109.225-243.952-243.952%20C55.047,163.324,164.271,54.1,298.999,54.1L298.999,54.1z%20M298.999,14.053C455.846,14.053,583,141.2,583,298.051%20c0,156.844-127.154,283.999-284.001,283.999C142.151,582.049,15,454.895,15,298.051C15,141.2,142.151,14.053,298.999,14.053z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2022.0.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Layer_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20600%20600'%20enable-background='new%200%200%20600%20600'%20xml:space='preserve'%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20fill='currentColor'%20d='M449.833,45.125C531.521,95.36,586,185.558,586,288.497%20c0,157.672-127.825,285.497-285.503,285.497C142.822,573.994,15,446.169,15,288.497C15,185.558,69.476,95.36,151.167,45.125H449.833%20L449.833,45.125z%20M193.639,256.195c-29.46,0-53.343,23.89-53.343,53.35c0,29.46,23.882,53.343,53.343,53.343%20c29.46,0,53.346-23.882,53.346-53.343C246.985,280.085,223.099,256.195,193.639,256.195L193.639,256.195z%20M407.365,256.195%20c-29.46,0-53.35,23.89-53.35,53.35c0,29.46,23.89,53.343,53.35,53.343c29.46,0,53.343-23.882,53.343-53.343%20C460.708,280.085,436.826,256.195,407.365,256.195L407.365,256.195z%20M442.248,88.407l-4.308-3.053H163.052l-4.304,3.053%20c-64.954,46.088-103.49,120.43-103.49,200.09c0,135.438,109.801,245.239,245.239,245.239c135.437,0,245.245-109.801,245.245-245.239%20C545.742,208.837,507.203,134.495,442.248,88.407L442.248,88.407z%20M427.607,117.937H173.391%20c-54.002,40.321-85.547,103.142-85.547,170.56c0,117.449,95.204,212.656,212.653,212.656c117.455,0,212.663-95.207,212.663-212.656%20C513.16,221.08,481.609,158.258,427.607,117.937L427.607,117.937z%20M300.497,215.65c-11.384,0-20.614,9.226-20.614,20.613%20c0,11.387,9.23,20.614,20.614,20.614c11.387,0,20.62-9.226,20.62-20.614C321.117,224.876,311.883,215.65,300.497,215.65%20L300.497,215.65z%20M300.497,146.275c-11.384,0-20.614,9.226-20.614,20.614c0,11.387,9.23,20.62,20.614,20.62%20c11.387,0,20.62-9.233,20.62-20.62C321.117,155.501,311.883,146.275,300.497,146.275L300.497,146.275z%20M381.735,146.275%20c-11.387,0-20.613,9.226-20.613,20.614c0,11.387,9.226,20.62,20.613,20.62c11.387,0,20.613-9.233,20.613-20.62%20C402.348,155.501,393.122,146.275,381.735,146.275L381.735,146.275z%20M219.265,146.275c-11.387,0-20.616,9.226-20.616,20.614%20c0,11.387,9.23,20.62,20.616,20.62c11.387,0,20.617-9.233,20.617-20.62C239.882,155.501,230.652,146.275,219.265,146.275%20L219.265,146.275z%20M300.497,400.094c-18.881,0-34.186,15.309-34.186,34.189c0,18.887,15.305,34.189,34.186,34.189%20c18.887,0,34.189-15.302,34.189-34.189C334.686,415.403,319.384,400.094,300.497,400.094L300.497,400.094z%20M381.735,417.199%20c-11.387,0-20.613,9.233-20.613,20.62c0,11.38,9.226,20.614,20.613,20.614c11.387,0,20.613-9.233,20.613-20.614%20C402.348,426.433,393.122,417.199,381.735,417.199L381.735,417.199z%20M219.265,417.199c-11.387,0-20.616,9.233-20.616,20.62%20c0,11.38,9.23,20.614,20.616,20.614c11.387,0,20.617-9.233,20.617-20.614C239.882,426.433,230.652,417.199,219.265,417.199z'/%3e%3c/svg%3e\"","import ICON_IEC_62196_T2 from \"../assets/connectors/type2.svg\";\nimport ICON_IEC_62196_T2_COMBO from \"../assets/connectors/combo2.svg\";\nimport ICON_IEC_62196_T1 from \"../assets/connectors/type1.svg\";\nimport ICON_IEC_62196_T1_COMBO from \"../assets/connectors/combo1.svg\";\nimport ICON_IEC_62196_T3 from \"../assets/connectors/type3.svg\";\nimport ICON_IEC_62196_T3A from \"../assets/connectors/type3a.svg\";\nimport ICON_SCHUKO from \"../assets/connectors/schuko.svg\";\nimport ICON_CHADEMO from \"../assets/connectors/chademo.svg\";\nimport ICON_CATARC from \"../assets/connectors/catarc.svg\";\n\nexport default {\n // IEC 62196 Types\n IEC_62196_T1: ICON_IEC_62196_T1,\n IEC_62196_T1_COMBO: ICON_IEC_62196_T1_COMBO,\n IEC_62196_T2: ICON_IEC_62196_T2,\n IEC_62196_T2_COMBO: ICON_IEC_62196_T2_COMBO,\n IEC_62196_T3: ICON_IEC_62196_T3,\n IEC_62196_T3A: ICON_IEC_62196_T3A,\n IEC_62196_T3B: ICON_IEC_62196_T3,\n IEC_62196_T3C: ICON_IEC_62196_T3, // Using T3 as fallback\n\n // DC Fast Charging\n CHADEMO: ICON_CHADEMO,\n CHAOJI: ICON_CHADEMO, // Using CHADEMO as fallback for CHAOJI\n CATARC: ICON_CATARC,\n GBT_AC: ICON_CATARC, // Using CATARC as fallback for GBT AC\n GBT_DC: ICON_CATARC, // Using CATARC as fallback for GBT DC\n\n // AC Domestic Types (using SCHUKO as fallback for most domestic types)\n SCHUKO: ICON_SCHUKO,\n DOMESTIC_A: ICON_SCHUKO,\n DOMESTIC_B: ICON_SCHUKO,\n DOMESTIC_C: ICON_SCHUKO,\n DOMESTIC_D: ICON_SCHUKO,\n DOMESTIC_E: ICON_SCHUKO,\n DOMESTIC_F: ICON_SCHUKO,\n DOMESTIC_G: ICON_SCHUKO,\n DOMESTIC_H: ICON_SCHUKO,\n DOMESTIC_I: ICON_SCHUKO,\n DOMESTIC_J: ICON_SCHUKO,\n DOMESTIC_K: ICON_SCHUKO,\n DOMESTIC_L: ICON_SCHUKO,\n DOMESTIC_M: ICON_SCHUKO,\n DOMESTIC_N: ICON_SCHUKO,\n DOMESTIC_O: ICON_SCHUKO,\n\n // IEC 60309 Industrial Types (using SCHUKO as fallback)\n IEC_60309_2_SINGLE_16: ICON_SCHUKO,\n IEC_60309_2_THREE_16: ICON_SCHUKO,\n IEC_60309_2_THREE_32: ICON_SCHUKO,\n IEC_60309_2_THREE_64: ICON_SCHUKO,\n\n // NEMA Types (using SCHUKO as fallback)\n NEMA_5_20: ICON_SCHUKO,\n NEMA_6_30: ICON_SCHUKO,\n NEMA_6_50: ICON_SCHUKO,\n NEMA_10_30: ICON_SCHUKO,\n NEMA_10_50: ICON_SCHUKO,\n NEMA_14_30: ICON_SCHUKO,\n NEMA_14_50: ICON_SCHUKO,\n\n // Pantograph Types (using CHADEMO as fallback)\n PANTOGRAPH_BOTTOM_UP: ICON_CHADEMO,\n PANTOGRAPH_TOP_DOWN: ICON_CHADEMO,\n\n // Tesla Types (using CHADEMO as fallback)\n TESLA_R: ICON_CHADEMO,\n TESLA_S: ICON_CHADEMO,\n\n // Legacy CONNECTOR_STANDARD_TYPE mappings\n CONNECTOR_STANDARD_TYPE_CHADEMO: ICON_CHADEMO,\n CONNECTOR_STANDARD_TYPE_CHAOJI: ICON_CHADEMO,\n CONNECTOR_STANDARD_TYPE_CATARC: ICON_CATARC,\n CONNECTOR_STANDARD_TYPE_SCHUKO: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_DOMESTIC_A: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_DOMESTIC_B: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_DOMESTIC_C: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_DOMESTIC_D: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_DOMESTIC_E: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_DOMESTIC_F: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_DOMESTIC_G: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_DOMESTIC_H: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_DOMESTIC_I: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_DOMESTIC_J: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_DOMESTIC_K: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_DOMESTIC_L: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_DOMESTIC_M: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_DOMESTIC_N: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_DOMESTIC_O: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_GBT_AC: ICON_CATARC,\n CONNECTOR_STANDARD_TYPE_GBT_DC: ICON_CATARC,\n CONNECTOR_STANDARD_TYPE_IEC_60309_2_SINGLE_16: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_IEC_60309_2_THREE_16: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_IEC_60309_2_THREE_32: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_IEC_60309_2_THREE_64: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_IEC_62196_T1: ICON_IEC_62196_T1,\n CONNECTOR_STANDARD_TYPE_IEC_62196_T1_COMBO: ICON_IEC_62196_T1_COMBO,\n CONNECTOR_STANDARD_TYPE_IEC_62196_T2: ICON_IEC_62196_T2,\n CONNECTOR_STANDARD_TYPE_IEC_62196_T2_COMBO: ICON_IEC_62196_T2_COMBO,\n CONNECTOR_STANDARD_TYPE_IEC_62196_T3A: ICON_IEC_62196_T3A,\n CONNECTOR_STANDARD_TYPE_IEC_62196_T3C: ICON_IEC_62196_T3,\n CONNECTOR_STANDARD_TYPE_NEMA_5_20: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_NEMA_6_30: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_NEMA_6_50: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_NEMA_10_30: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_NEMA_10_50: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_NEMA_14_30: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_NEMA_14_50: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_PANTOGRAPH_BOTTOM_UP: ICON_CHADEMO,\n CONNECTOR_STANDARD_TYPE_PANTOGRAPH_TOP_DOWN: ICON_CHADEMO,\n CONNECTOR_STANDARD_TYPE_TESLA_R: ICON_CHADEMO,\n CONNECTOR_STANDARD_TYPE_TESLA_S: ICON_CHADEMO,\n};\n","export const defaultFilter = {\n minPower: 7,\n operator: [],\n status: [],\n publishingMode: \"\",\n connectorTypes: [],\n chargingAccessibility: \"ALL\",\n noAdditionalCharges: false,\n powerType: undefined,\n operatorOnly: \"\",\n remoteStartStop: false,\n searchPhrase: \"\",\n excludeOperator: [],\n authMethodCapabilities: [],\n};\n\nexport function hasFilters(filter) {\n const hasFilters =\n (filter.minPower && filter.minPower !== defaultFilter.minPower) ||\n filter?.status?.length ||\n filter?.connectorTypes?.length ||\n (filter?.chargingAccessibility &&\n filter?.chargingAccessibility !== defaultFilter.chargingAccessibility) ||\n filter?.operator?.length ||\n filter?.powerType ||\n filter?.partyId ||\n filter?.noAdditionalCharges ||\n filter?.operatorOnly ||\n filter?.remoteStartStop ||\n filter?.searchPhrase ||\n filter?.excludeOperator?.length ||\n filter?.authMethodCapabilities?.length;\n\n return !!hasFilters;\n}\n","import React, { useEffect, useReducer } from \"react\";\n\nimport styles from \"./filters.module.css\";\nimport Checkbox from \"../../components/Checkbox/Checkbox\";\nimport Range from \"../../components/Range/Range\";\nimport MultiSelect from \"../../components/MultiSelect/MultiSelect\";\nimport SelectField from \"../../components/SelectField/SelectField\";\nimport { useMapContext } from \"../../contexts/Map\";\nimport connectorIcons from \"../../components/connectorIcons\";\nimport { useStackContext } from \"../../components/Stack/Stack\";\nimport { defaultFilter } from \"../../utils/filters\";\n\nconst authMethodCapabilityOptions = [\n {\n value: \"AUTH_METHOD_CAPABILITY_PLUG_AND_CHARGE\",\n labelKey: \"filters.authCapability.plugAndCharge\" as const,\n },\n {\n value: \"AUTH_METHOD_CAPABILITY_CREDIT_CARD_PAYABLE\",\n labelKey: \"filters.authCapability.creditCard\" as const,\n },\n];\n\n// confirm if this a correct,\nconst powerRanges = [\n {\n label: 3,\n value: 3,\n },\n {\n label: 7,\n value: 7,\n },\n {\n label: 11,\n value: 11,\n },\n {\n label: 22,\n value: 22,\n },\n {\n label: 43,\n value: 43,\n },\n {\n label: 50,\n value: 50,\n },\n {\n label: 100,\n value: 100,\n },\n {\n label: 150,\n value: 150,\n },\n {\n label: 200,\n value: 200,\n },\n {\n label: \"250+\",\n value: 250,\n },\n];\n\nconst toggleOption = (\n action: \"remove\" | \"add\",\n existingFilters: string[],\n optionFilters: string[],\n) => {\n switch (action) {\n case \"remove\":\n return existingFilters.filter(\n (filter) => !optionFilters.includes(filter),\n );\n case \"add\":\n return Array.from(new Set([...existingFilters, ...optionFilters]));\n }\n};\n\nfunction useLocalState(initialState) {\n return useReducer((currentState, updatedState) => {\n return { ...currentState, ...updatedState };\n }, initialState);\n}\n\nexport default function FiltersScreen() {\n const {\n setFilters: applyFilters,\n t,\n filters: contextFilters,\n filterConfiguration,\n options,\n } = useMapContext();\n const [filters, setFilters] = useLocalState(defaultFilter);\n\n const { setView: setParentView } = useStackContext();\n\n const showOperatorFilter =\n options.version === \"v2\" && filterConfiguration?.operators?.length > 1;\n\n useEffect(() => {\n setFilters(contextFilters);\n }, []);\n\n useEffect(() => {\n applyFilters(filters);\n }, [filters]);\n\n return (\n <>\n <div className={styles.headerContainer}>\n <div className={styles.header}>{t(\"filters.header\")}</div>\n </div>\n\n <div className={styles.container}>\n <button\n onClick={() => {\n setFilters(defaultFilter);\n applyFilters(defaultFilter);\n }}\n className={styles.actionLinkClearAll}\n >\n {t(\"filters.clearAll\")}\n </button>\n\n {options.version === \"v2\" &&\n filterConfiguration?.showSearchPhraseFilter && (\n <div className={styles.optionsGroup}>\n <div className={styles.heading}>{t(\"filters.searchPhrase\")}</div>\n <input\n type=\"text\"\n value={filters.searchPhrase || \"\"}\n placeholder={t(\"filters.searchPhrasePlaceholder\")}\n onChange={(e) => setFilters({ searchPhrase: e.target.value })}\n style={{\n width: \"100%\",\n boxSizing: \"border-box\",\n padding: \"8px 10px\",\n fontFamily: \"var(--roadmap-font-family, Inter), system-ui\",\n fontSize: 14,\n lineHeight: \"20px\",\n color: \"var(--roadmap-text-color, #2a2a2a)\",\n background: \"var(--roadmap-background-color, #fff)\",\n border: \"1px solid var(--roadmap-border-color, #ddd)\",\n borderRadius: 6,\n outline: \"none\",\n }}\n />\n </div>\n )}\n\n <div className={styles.optionsGroup}>\n <div className={styles.heading}>{t(\"filters.onlyShow\")}</div>\n <label htmlFor=\"dsChargers\" className={styles.rowLabel}>\n <div className={styles.label}>{t(\"filters.dcChargers\")}</div>\n <Checkbox\n id=\"dsChargers\"\n checked={filters.powerType === \"dc\"}\n onChange={(checked) => {\n setFilters({\n powerType: checked ? \"dc\" : undefined,\n });\n }}\n />\n </label>\n\n {options.version !== \"v2\" && (\n <label htmlFor=\"efluxChargers\" className={styles.rowLabel}>\n <div className={styles.label}>{t(\"filters.efluxChargers\")}</div>\n <Checkbox\n id=\"efluxChargers\"\n checked={filters.partyId === \"EFL\"}\n onChange={(checked) => {\n setFilters({\n partyId: checked ? \"EFL\" : undefined,\n });\n }}\n />\n </label>\n )}\n\n {(options.version !== \"v2\" ||\n filterConfiguration?.showNoAdditionalFeeFilter) && (\n <label htmlFor=\"noAdditionalFee\" className={styles.rowLabel}>\n <div className={styles.label}>{t(\"filters.noAdditionalFee\")}</div>\n <Checkbox\n id=\"noAdditionalFee\"\n checked={filters.noAdditionalCharges}\n onChange={(checked) => {\n setFilters({\n noAdditionalCharges: checked ? true : undefined,\n });\n }}\n />\n </label>\n )}\n\n <label htmlFor=\"remoteStartStop\" className={styles.rowLabel}>\n <div className={styles.label}>{t(\"filters.remoteStartStop\")}</div>\n <Checkbox\n id=\"remoteStartStop\"\n checked={filters.remoteStartStop}\n onChange={(checked) => {\n setFilters({\n remoteStartStop: checked ? true : undefined,\n });\n }}\n />\n </label>\n\n {filterConfiguration.showOperatorOnly && options.version === \"v2\" && (\n <label htmlFor=\"operatorOnly\" className={styles.rowLabel}>\n <div\n className={styles.label}\n >{`Show '${filterConfiguration.showOperatorOnly}' only`}</div>\n <Checkbox\n id=\"operatorOnly\"\n checked={\n filters.operatorOnly === filterConfiguration.showOperatorOnly\n }\n onChange={(checked) => {\n setFilters({\n operatorOnly: checked\n ? filterConfiguration.showOperatorOnly\n : undefined,\n });\n }}\n />\n </label>\n )}\n </div>\n\n {showOperatorFilter && (\n <div className={styles.optionsGroup}>\n <div className={styles.heading}>{t(\"filters.operator\")}</div>\n <MultiSelect\n id=\"operator\"\n preferredValues={options.preferredOperators}\n value={filters.operator}\n options={[\n ...(filterConfiguration?.operators?.map((operator: any) => ({\n value: operator?.connectionId,\n label: operator?.name,\n selected: filters.operators?.includes(operator?.connectionId),\n })) || []),\n ]}\n placeholder=\"Select operator\"\n onChange={(value) => {\n setFilters({\n operator: value,\n });\n }}\n />\n </div>\n )}\n\n {showOperatorFilter &&\n filterConfiguration?.showExcludeOperatorFilter && (\n <div className={styles.optionsGroup}>\n <div className={styles.heading}>\n {t(\"filters.excludeOperator\")}\n </div>\n <MultiSelect\n id=\"excludeOperator\"\n preferredValues={options.preferredOperators}\n value={filters.excludeOperator}\n options={[\n ...(filterConfiguration?.operators?.map((operator: any) => ({\n value: operator?.connectionId,\n label: operator?.name,\n selected: filters.excludeOperator?.includes(\n operator?.connectionId,\n ),\n })) || []),\n ]}\n placeholder={t(\"filters.excludeOperator\")}\n onChange={(value) => {\n setFilters({\n excludeOperator: value,\n });\n }}\n />\n </div>\n )}\n\n {filterConfiguration?.showPublishingModeFilter &&\n filterConfiguration?.publishingMode?.length > 1 && (\n <div className={styles.optionsGroup}>\n <div className={styles.heading}>{\"Visibility\"}</div>\n <SelectField\n id=\"publishingMode\"\n value={filters.publishingMode}\n options={[\n { value: \"\", label: \"All locations\" },\n {\n value: \"PUBLISHING_MODE_PUBLIC\",\n label: \"Public locations\",\n },\n {\n value: \"PUBLISHING_MODE_PRIVATE\",\n label: \"Private locations\",\n },\n ]}\n onChange={(value) => {\n setFilters({ publishingMode: value });\n }}\n />\n </div>\n )}\n\n <div className={styles.optionsGroup}>\n <div className={styles.heading}>{t(\"filters.statusHeading\")}</div>\n\n <label htmlFor=\"statusAvailable\" className={styles.rowLabel}>\n <div className={styles.label}>\n <div className={styles.dot} style={{ background: \"#33AC19\" }} />\n {t(\"filters.available\")}\n </div>\n <Checkbox\n id=\"statusAvailable\"\n name=\"status\"\n checked={filters.status.includes(\"AVAILABLE\")}\n onChange={(checked) => {\n setFilters({\n status: toggleOption(\n checked ? \"add\" : \"remove\",\n filters.status,\n [\"AVAILABLE\"],\n ),\n });\n }}\n />\n </label>\n\n <label htmlFor=\"statusCharging\" className={styles.rowLabel}>\n <div className={styles.label}>\n <div className={styles.dot} style={{ background: \"#005CEE\" }} />\n {t(\"filters.charging\")}\n </div>\n <Checkbox\n id=\"statusCharging\"\n checked={filters.status.includes(\"CHARGING\")}\n onChange={(checked) => {\n setFilters({\n status: toggleOption(\n checked ? \"add\" : \"remove\",\n filters.status,\n [\"CHARGING\"],\n ),\n });\n }}\n />\n </label>\n\n <label htmlFor=\"statusError\" className={styles.rowLabel}>\n <div className={styles.label}>\n <div className={styles.dot} style={{ background: \"#EB001B\" }} />\n {t(\"filters.notAvailable\")}\n </div>\n <Checkbox\n id=\"statusError\"\n name=\"status\"\n checked={\n filters.status.includes(\"INOPERATIVE\") &&\n filters.status.includes(\"UNKNOWN\")\n }\n onChange={(checked) => {\n setFilters({\n status: toggleOption(\n checked ? \"add\" : \"remove\",\n filters.status,\n [\"INOPERATIVE\", \"UNKNOWN\"],\n ),\n });\n }}\n />\n </label>\n </div>\n\n <div className={styles.optionsGroup}>\n <div className={styles.heading}>{t(\"filters.chargingPower\")}</div>\n <Range\n value={filters.minPower}\n onChange={(value) => {\n setFilters({ minPower: value });\n }}\n ticks={powerRanges}\n />\n </div>\n\n <div className={styles.optionsGroup}>\n <div className={styles.heading}>{t(\"filters.connectorType\")}</div>\n\n <label htmlFor=\"type1\" className={styles.rowLabel}>\n <div className={styles.label}>\n <img\n src={connectorIcons.IEC_62196_T1}\n className={styles.connectorIcon}\n />\n Type 1 (Yazaki)\n </div>\n <Checkbox\n id=\"type1\"\n checked={filters.connectorTypes.includes(\"IEC_62196_T1\")}\n onChange={(checked) => {\n setFilters({\n connectorTypes: checked\n ? [...filters.connectorTypes, \"IEC_62196_T1\"]\n : filters.connectorTypes.filter(\n (s) => s !== \"IEC_62196_T1\",\n ),\n });\n }}\n />\n </label>\n\n <label htmlFor=\"type2\" className={styles.rowLabel}>\n <div className={styles.label}>\n <img\n src={connectorIcons.IEC_62196_T2}\n className={styles.connectorIcon}\n />\n Type 2 (Mennekes)\n </div>\n <Checkbox\n id=\"type2\"\n checked={filters.connectorTypes.includes(\"IEC_62196_T2\")}\n onChange={(checked) => {\n setFilters({\n connectorTypes: checked\n ? [...filters.connectorTypes, \"IEC_62196_T2\"]\n : filters.connectorTypes.filter(\n (s) => s !== \"IEC_62196_T2\",\n ),\n });\n }}\n />\n </label>\n <label htmlFor=\"type3\" className={styles.rowLabel}>\n <div className={styles.label}>\n <img\n src={connectorIcons.IEC_62196_T3}\n className={styles.connectorIcon}\n />\n Type 3 (Le Grand)\n </div>\n <Checkbox\n id=\"type3\"\n checked={filters.connectorTypes.includes(\"IEC_62196_T3A\")}\n onChange={(checked) => {\n setFilters({\n connectorTypes: checked\n ? [...filters.connectorTypes, \"IEC_62196_T3A\"]\n : filters.connectorTypes.filter(\n (s) => s !== \"IEC_62196_T3A\",\n ),\n });\n }}\n />\n </label>\n <label htmlFor=\"CHAdeMo\" className={styles.rowLabel}>\n <div className={styles.label}>\n <img\n src={connectorIcons.CHADEMO}\n className={styles.connectorIcon}\n />\n CHAdeMo\n </div>\n <Checkbox\n id=\"CHAdeMo\"\n checked={filters.connectorTypes.includes(\"CHADEMO\")}\n onChange={(checked) => {\n setFilters({\n connectorTypes: checked\n ? [...filters.connectorTypes, \"CHADEMO\"]\n : filters.connectorTypes.filter((s) => s !== \"CHADEMO\"),\n });\n }}\n />\n </label>\n <label htmlFor=\"domestic\" className={styles.rowLabel}>\n <div className={styles.label}>\n <img\n src={connectorIcons.DOMESTIC_F}\n className={styles.connectorIcon}\n />\n Domestic\n </div>\n <Checkbox\n id=\"domestic\"\n checked={filters.connectorTypes.includes(\"DOMESTIC_F\")}\n onChange={(checked) => {\n setFilters({\n connectorTypes: checked\n ? [...filters.connectorTypes, \"DOMESTIC_F\"]\n : filters.connectorTypes.filter((s) => s !== \"DOMESTIC_F\"),\n });\n }}\n />\n </label>\n <label htmlFor=\"combo\" className={styles.rowLabel}>\n <div className={styles.label}>\n <img\n src={connectorIcons.IEC_62196_T2_COMBO}\n className={styles.connectorIcon}\n />\n Combo\n </div>\n <Checkbox\n id=\"combo\"\n checked={filters.connectorTypes.includes(\"IEC_62196_T2_COMBO\")}\n onChange={(checked) => {\n setFilters({\n connectorTypes: checked\n ? [...filters.connectorTypes, \"IEC_62196_T2_COMBO\"]\n : filters.connectorTypes.filter(\n (s) => s !== \"IEC_62196_T2_COMBO\",\n ),\n });\n }}\n />\n </label>\n </div>\n\n {options.version === \"v2\" &&\n filterConfiguration?.showPaymentMethodFilter && (\n <div className={styles.optionsGroup}>\n <div className={styles.heading}>\n {t(\"filters.authMethodCapabilities\")}\n </div>\n {authMethodCapabilityOptions.map((capability) => {\n const id = `auth-${capability.value}`;\n const checked =\n filters.authMethodCapabilities?.includes(capability.value) ??\n false;\n return (\n <label\n key={capability.value}\n htmlFor={id}\n className={styles.rowLabel}\n >\n <div className={styles.label}>{t(capability.labelKey)}</div>\n <Checkbox\n id={id}\n checked={checked}\n onChange={(isChecked) => {\n setFilters({\n authMethodCapabilities: toggleOption(\n isChecked ? \"add\" : \"remove\",\n filters.authMethodCapabilities || [],\n [capability.value],\n ),\n });\n }}\n />\n </label>\n );\n })}\n </div>\n )}\n\n {filterConfiguration?.showVehicleAvailabilityFilter && (\n <div className={styles.optionsGroup}>\n <div className={styles.heading}>\n {t(\"filters.chargingAccessibility\")}\n </div>\n <SelectField\n id=\"chargingAccessibility\"\n value={filters.chargingAccessibility || \"ALL\"}\n options={[\n { value: \"ALL\", label: t(\"filters.accessibilityAll\") },\n { value: \"TESLA\", label: t(\"filters.accessibilityTesla\") },\n ]}\n onChange={(value) => {\n setFilters({\n chargingAccessibility: value,\n });\n }}\n />\n </div>\n )}\n </div>\n </>\n );\n}\n","import React, { useEffect } from \"react\";\n\nimport styles from \"./LocationPlaceholder.module.css\";\n\nexport default function LocationPlaceholder() {\n return (\n <div className={styles.container}>\n {/* put in place holders */}\n <div className={styles.header} />\n\n <div className={styles.divider} style={{ marginTop: '15px', marginBottom: '23px' }} />\n\n <div className={styles.iconLine} style={{ width: '60%' }} />\n <div className={styles.iconLine} style={{ width: '45%' }} />\n <div className={styles.iconLine} style={{ width: '50%' }} />\n\n <div className={styles.divider} />\n\n <div className={styles.iconLine} style={{ width: '50%' }} />\n <div className={styles.iconLine} style={{ width: '62%' }} />\n\n <div className={styles.priceLine} />\n\n <div className={styles.divider} />\n\n <div className={styles.iconLine} style={{ width: '50%' }} />\n <div className={styles.iconLine} style={{ width: '57%' }} />\n\n <div className={styles.priceLine} style={{ width: '30%' }} />\n </div>\n );\n}\n\n","import React from \"react\";\n\nexport function ChevronLeft() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 320 512\"\n width=\"12\"\n height=\"12\"\n fill=\"currentColor\"\n >\n <path d=\"M9.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l192 192c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L77.3 256 246.6 86.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-192 192z\" />\n </svg>\n );\n}\n\nexport function ChevronRight() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 320 512\"\n width=\"12\"\n height=\"12\"\n fill=\"currentColor\"\n >\n <path d=\"M310.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-192 192c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L242.7 256 73.4 86.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l192 192z\" />\n </svg>\n );\n}\n\nexport function ChevronDown() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 512 320\"\n width=\"10\"\n height=\"10\"\n fill=\"currentColor\"\n >\n <path d=\"M233.4 310.6c12.5 12.5 32.8 12.5 45.3 0l192-192c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L256 242.7 86.6 73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l192 192z\" />\n </svg>\n );\n}\n\nexport function Clock() {\n return (\n <svg\n viewBox=\"0 0 16 16\"\n width=\"16\"\n height=\"16\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M8 0.25C3.72 0.25 0.25 3.72 0.25 8s3.47 7.75 7.75 7.75S15.75 12.28 15.75 8 12.28 0.25 8 0.25zm0 14C4.55 14.25 1.75 11.45 1.75 8S4.55 1.75 8 1.75 14.25 4.55 14.25 8 11.45 14.25 8 14.25zM8.75 4.25a0.75 0.75 0 0 0-1.5 0v4c0 0.2 0.08 0.39 0.22 0.53l2.5 2.5a0.75 0.75 0 1 0 1.06-1.06L8.75 7.94V4.25z\" />\n </svg>\n );\n}\n\nexport function Check() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 16 16\"\n width=\"16\"\n height=\"16\"\n fill=\"currentColor\"\n >\n <path d=\"M13.78 4.22a.75.75 0 0 1 0 1.06l-7.5 7.5a.75.75 0 0 1-1.06 0l-3-3a.75.75 0 1 1 1.06-1.06L5.75 11.19l6.97-6.97a.75.75 0 0 1 1.06 0z\" />\n </svg>\n );\n}\n\nexport function Info() {\n return (\n <svg\n viewBox=\"0 0 16 16\"\n width=\"16\"\n height=\"16\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g>\n <path d=\"M8 0.25C3.72009 0.25 0.25 3.72134 0.25 8C0.25 12.2812 3.72009 15.75 8 15.75C12.2799 15.75 15.75 12.2812 15.75 8C15.75 3.72134 12.2799 0.25 8 0.25ZM8 14.25C4.54588 14.25 1.75 11.4553 1.75 8C1.75 4.54703 4.546 1.75 8 1.75C11.4528 1.75 14.25 4.54597 14.25 8C14.25 11.4541 11.4553 14.25 8 14.25ZM8 3.6875C8.72487 3.6875 9.3125 4.27513 9.3125 5C9.3125 5.72487 8.72487 6.3125 8 6.3125C7.27513 6.3125 6.6875 5.72487 6.6875 5C6.6875 4.27513 7.27513 3.6875 8 3.6875ZM9.75 11.625C9.75 11.8321 9.58209 12 9.375 12H6.625C6.41791 12 6.25 11.8321 6.25 11.625V10.875C6.25 10.6679 6.41791 10.5 6.625 10.5H7V8.5H6.625C6.41791 8.5 6.25 8.33209 6.25 8.125V7.375C6.25 7.16791 6.41791 7 6.625 7H8.625C8.83209 7 9 7.16791 9 7.375V10.5H9.375C9.58209 10.5 9.75 10.6679 9.75 10.875V11.625Z\" />\n </g>\n </svg>\n );\n}\n\n","import React from \"react\";\n\nimport styles from \"./SidebarContainer.module.css\";\n\nexport default function SideBarContainer({ children }) {\n return <div className={styles.container}>{children}</div>;\n}\n\n","import SideBarContainer from \"../SidebarContainer/SidebarContainer\";\nimport styles from \"./Debug.module.css\";\n\nexport default function Debug({ location }) {\n return (\n <div className={styles.container}>\n <SideBarContainer>\n <div>\n <h3>Debug: {location.name}</h3>\n </div>\n <div style={{ marginBottom: \"5px\" }}>\n <button\n onClick={() => {\n navigator.clipboard.writeText(JSON.stringify(location, null, 2));\n }}\n >\n Copy location\n </button>\n </div>\n <div className={styles.content}>\n {location.evses.map((evse) => {\n return (\n <div className={styles.evse}>\n <div className={styles.connectorHeader}>\n Evse: {evse.evseId || evse.evse_id}\n </div>\n <div>\n {evse.connectors.map((connector, i) => {\n return (\n <div>\n <div className={styles.connectorHeader}>\n Connector #{i}\n </div>\n <pre className={styles.code}>\n {JSON.stringify(\n connector.tariff || Array.isArray(location.tariffs)\n ? location.tariffs?.find((t) =>\n connector.tariff_ids.includes(t.id),\n )\n : null,\n null,\n 2,\n )}\n </pre>\n </div>\n );\n })}\n </div>\n </div>\n );\n })}\n </div>\n </SideBarContainer>\n </div>\n );\n}\n","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='18'%20height='16'%20viewBox='0%200%2018%2016'%20fill='none'%3e%3cg%20clip-path='url(%23clip0_480_2466)'%3e%3cpath%20d='M3.76781%207H5.0925L4.81812%208.71156C4.77812%208.85969%204.9075%209%205.07875%209C5.17188%209%205.26156%208.95719%205.31063%208.88313L7.40219%205.78062C7.50531%205.62469%207.37656%205.42875%207.17031%205.42875H5.88219L6.14094%204.295C6.18625%204.14625%206.05781%204.00031%205.88219%204.00031H4.36438C4.23%204.00031%204.11656%204.08719%204.09875%204.20375L3.50187%206.735C3.48094%206.87531%203.60594%207%203.76781%207ZM17.5%204H17V2.5C17%202.22375%2016.7763%202%2016.5%202C16.2237%202%2016%202.22375%2016%202.5V4H15V2.5C15%202.22375%2014.7762%202%2014.5%202C14.2238%202%2014%202.22375%2014%202.5V4H13.5C13.2238%204%2013%204.22375%2013%204.5V6C13%207.1175%2013.7381%208.05281%2014.75%208.37281V11.625C14.75%2012.1075%2014.3575%2012.5%2013.875%2012.5C13.3925%2012.5%2013%2012.1075%2013%2011.625V10.75C13%209.23344%2011.7666%208%2010.25%208H10V1.5C10%200.671562%209.32844%200%208.5%200H2.5C1.67156%200%201%200.671562%201%201.5V14.5H0.25C0.111875%2014.5%200%2014.6119%200%2014.75V15.75C0%2015.8881%200.111875%2016%200.25%2016H10.75C10.8881%2016%2011%2015.8881%2011%2015.75V14.75C11%2014.6119%2010.8881%2014.5%2010.75%2014.5H10V9.5H10.25C10.9394%209.5%2011.5%2010.0606%2011.5%2010.75V11.625C11.5%2012.9347%2012.5653%2014%2013.875%2014C15.1847%2014%2016.25%2012.9347%2016.25%2011.625V8.37281C17.2619%208.05281%2018%207.1175%2018%206V4.5C18%204.22375%2017.7763%204%2017.5%204ZM8.5%2014.5H2.5V1.5H8.5V14.5ZM16.5%206C16.5%206.55125%2016.0513%207%2015.5%207C14.9487%207%2014.5%206.55125%2014.5%206V5.5H16.5V6Z'%20fill='black'/%3e%3c/g%3e%3cdefs%3e%3cclipPath%20id='clip0_480_2466'%3e%3crect%20width='18'%20height='16'%20fill='white'/%3e%3c/clipPath%3e%3c/defs%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20width='14'%20height='16'%20viewBox='0%200%2014%2016'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cg%20clip-path='url(%23clip0_480_2468)'%3e%3cpath%20d='M4%204.625V3.375C4%203.16875%204.16875%203%204.375%203H5.625C5.83125%203%206%203.16875%206%203.375V4.625C6%204.83125%205.83125%205%205.625%205H4.375C4.16875%205%204%204.83125%204%204.625ZM8.375%205H9.625C9.83125%205%2010%204.83125%2010%204.625V3.375C10%203.16875%209.83125%203%209.625%203H8.375C8.16875%203%208%203.16875%208%203.375V4.625C8%204.83125%208.16875%205%208.375%205ZM4.375%208H5.625C5.83125%208%206%207.83125%206%207.625V6.375C6%206.16875%205.83125%206%205.625%206H4.375C4.16875%206%204%206.16875%204%206.375V7.625C4%207.83125%204.16875%208%204.375%208ZM8.375%208H9.625C9.83125%208%2010%207.83125%2010%207.625V6.375C10%206.16875%209.83125%206%209.625%206H8.375C8.16875%206%208%206.16875%208%206.375V7.625C8%207.83125%208.16875%208%208.375%208ZM6%2010.625V9.375C6%209.16875%205.83125%209%205.625%209H4.375C4.16875%209%204%209.16875%204%209.375V10.625C4%2010.8313%204.16875%2011%204.375%2011H5.625C5.83125%2011%206%2010.8313%206%2010.625ZM8.375%2011H9.625C9.83125%2011%2010%2010.8313%2010%2010.625V9.375C10%209.16875%209.83125%209%209.625%209H8.375C8.16875%209%208%209.16875%208%209.375V10.625C8%2010.8313%208.16875%2011%208.375%2011ZM14%2014.875V16H0V14.875C0%2014.6687%200.16875%2014.5%200.375%2014.5H0.984375V0.75C0.984375%200.334375%201.31875%200%201.73438%200H12.2656C12.6812%200%2013.0156%200.334375%2013.0156%200.75V14.5H13.625C13.8313%2014.5%2014%2014.6687%2014%2014.875ZM2.48438%2014.4688H6V12.375C6%2012.1687%206.16875%2012%206.375%2012H7.625C7.83125%2012%208%2012.1687%208%2012.375V14.4688H11.5156V1.53125L2.5%201.5L2.48438%2014.4688Z'%20fill='black'/%3e%3c/g%3e%3cdefs%3e%3cclipPath%20id='clip0_480_2468'%3e%3crect%20width='14'%20height='16'%20fill='white'/%3e%3c/clipPath%3e%3c/defs%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20width='20'%20height='16'%20viewBox='0%200%2020%2016'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M17%206H16.5L13.1003%201.75063C12.913%201.51641%2012.6754%201.32734%2012.405%201.19741C12.1347%201.06747%2011.8387%201.00001%2011.5387%201H4.85406C4.03625%201%203.30094%201.49781%202.99719%202.25719L1.5%206V6.07062C0.63875%206.29375%200%207.06906%200%208V11.5C0%2011.7762%200.22375%2012%200.5%2012H2C2%2013.6569%203.34312%2015%205%2015C6.65688%2015%208%2013.6569%208%2012H12C12%2013.6569%2013.3431%2015%2015%2015C16.6569%2015%2018%2013.6569%2018%2012H19.5C19.7763%2012%2020%2011.7762%2020%2011.5V9C20%207.34312%2018.6569%206%2017%206ZM8.75%202.5H11.5387C11.6916%202.5%2011.8338%202.56844%2011.9291%202.6875L14.5791%206H8.75V2.5ZM4.38969%202.81437C4.46625%202.62344%204.64844%202.5%204.85406%202.5H7.25V6H3.11562L4.38969%202.81437ZM5%2013.5C4.17156%2013.5%203.5%2012.8284%203.5%2012C3.5%2011.1716%204.17156%2010.5%205%2010.5C5.82844%2010.5%206.5%2011.1716%206.5%2012C6.5%2012.8284%205.82844%2013.5%205%2013.5ZM15%2013.5C14.1716%2013.5%2013.5%2012.8284%2013.5%2012C13.5%2011.1716%2014.1716%2010.5%2015%2010.5C15.8284%2010.5%2016.5%2011.1716%2016.5%2012C16.5%2012.8284%2015.8284%2013.5%2015%2013.5ZM18.5%2010.5H17.5841C17.0644%209.60719%2016.1078%209%2015%209C13.8922%209%2012.9359%209.60719%2012.4159%2010.5H7.58406C7.06437%209.60719%206.10781%209%205%209C3.89219%209%202.93594%209.60719%202.41594%2010.5H1.5V8C1.5%207.72437%201.72438%207.5%202%207.5H17C17.8272%207.5%2018.5%208.17281%2018.5%209V10.5Z'%20fill='black'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20width='12'%20height='16'%20viewBox='0%200%2012%2016'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cg%20clip-path='url(%23clip0_480_2435)'%3e%3cpath%20d='M11.8068%205.24687C11.5506%204.8%2011.0849%204.53125%2010.5693%204.53125H7.61932L8.51619%201.79688C8.63182%201.36563%208.54119%200.9125%208.26932%200.55625C7.99432%200.203125%207.57869%200%207.13182%200H3.05369C2.34118%200%201.73181%200.534375%201.65368%201.15937L0.0161813%207.79063C-0.0431938%208.22188%200.0849314%208.65625%200.369307%208.98438C0.653682%209.3125%201.06618%209.5%201.50056%209.5H4.56619L3.47556%2014.2406C3.37556%2014.6688%203.47244%2015.1125%203.74431%2015.4563C4.01619%2015.8031%204.42556%2016%204.86619%2016C5.37556%2016%205.85057%2015.725%206.07869%2015.325L11.8037%206.67812C12.0662%206.23125%2012.0662%205.69375%2011.8068%205.24687ZM5.00369%2014.2937L6.45057%208H1.48493L3.05369%201.5L7.04119%201.47187L5.54744%206.03125H10.4381L5.00369%2014.2937Z'%20fill='%232A2A2A'/%3e%3c/g%3e%3cdefs%3e%3cclipPath%20id='clip0_480_2435'%3e%3crect%20width='12'%20height='16'%20fill='white'/%3e%3c/clipPath%3e%3c/defs%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20width='18'%20height='12'%20viewBox='0%200%2018%2012'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M16.2857%200H0.857143C0.383839%200%200%200.383839%200%200.857143V11.1429C0%2011.6162%200.383839%2012%200.857143%2012H16.2857C16.759%2012%2017.1429%2011.6162%2017.1429%2011.1429V0.857143C17.1429%200.383839%2016.759%200%2016.2857%200ZM15.8571%2010.7143H1.28571V1.28571H15.8571V10.7143ZM7.92857%207.71429H10.0714C10.1898%207.71429%2010.2857%207.61839%2010.2857%207.5V6.64286C10.2857%206.52446%2010.1898%206.42857%2010.0714%206.42857H7.92857C7.81018%206.42857%207.71429%206.52446%207.71429%206.64286V7.5C7.71429%207.61839%207.81018%207.71429%207.92857%207.71429ZM14.3571%206.42857H12.2143C12.0959%206.42857%2012%206.52446%2012%206.64286V7.5C12%207.61839%2012.0959%207.71429%2012.2143%207.71429H14.3571C14.4755%207.71429%2014.5714%207.61839%2014.5714%207.5V6.64286C14.5714%206.52446%2014.4755%206.42857%2014.3571%206.42857ZM7.92857%205.57143H14.3571C14.4755%205.57143%2014.5714%205.47554%2014.5714%205.35714V4.5C14.5714%204.38161%2014.4755%204.28571%2014.3571%204.28571H7.92857C7.81018%204.28571%207.71429%204.38161%207.71429%204.5V5.35714C7.71429%205.47554%207.81018%205.57143%207.92857%205.57143ZM3.60857%206.04607L4.73866%206.3525C4.85089%206.38304%204.92857%206.47437%204.92857%206.57482C4.92857%206.70339%204.80804%206.80786%204.65911%206.80786H3.95357C3.84241%206.80786%203.73312%206.78%203.6383%206.72884C3.5558%206.68411%203.45509%206.69214%203.3908%206.76045L3.0675%207.10143C2.9842%207.18929%202.99786%207.33286%203.09777%207.40116C3.32009%207.5525%203.58152%207.63902%203.85714%207.65616V7.92857C3.85714%208.04696%203.95304%208.14286%204.07143%208.14286H4.5C4.61839%208.14286%204.71429%208.04696%204.71429%207.92857V7.65402C5.30839%207.62455%205.78571%207.15661%205.78571%206.57455C5.78571%206.08786%205.44768%205.65634%204.96286%205.52536L3.83277%205.21893C3.72054%205.18839%203.64286%205.09705%203.64286%204.99661C3.64286%204.86804%203.76339%204.76357%203.91232%204.76357H4.61786C4.72902%204.76357%204.8383%204.79143%204.93312%204.84259C5.01562%204.88705%205.11634%204.87929%205.18062%204.81098L5.50393%204.47C5.58723%204.38214%205.57357%204.23857%205.47366%204.17027C5.25134%204.01893%204.98991%203.93241%204.71429%203.91527V3.64286C4.71429%203.52446%204.61839%203.42857%204.5%203.42857H4.07143C3.95304%203.42857%203.85714%203.52446%203.85714%203.64286V3.91741C3.26304%203.94688%202.78571%204.41482%202.78571%204.99688C2.78571%205.48357%203.12375%205.91509%203.60857%206.04607Z'%20fill='%232A2A2A'/%3e%3c/svg%3e\"","import connectorIcons from \"../components/connectorIcons\";\nimport { MapContextType } from \"../contexts/Map\";\nimport { getColorForStatus } from \"./location\";\n\nexport function getSocketIcon(connector) {\n return connectorIcons[connector.standard || connector.connectorStandardType];\n}\n\nexport function formatNumber(language, value) {\n return new Intl.NumberFormat(language, {\n maximumFractionDigits: 2,\n }).format(value);\n}\n\nexport const connectorPowerTypes = {\n CONNECTOR_POWER_TYPE_UNSPECIFIED: \"Unspecified\",\n CONNECTOR_POWER_TYPE_AC_1_PHASE: \"AC x 1\",\n CONNECTOR_POWER_TYPE_AC_2_PHASE: \"AC x 2\",\n CONNECTOR_POWER_TYPE_AC_2_PHASE_SPLIT: \"AC x 2 Split\",\n CONNECTOR_POWER_TYPE_AC_3_PHASE: \"AC x 3\",\n CONNECTOR_POWER_TYPE_DC: \"DC\",\n CONNECTOR_POWER_TYPE_AC: \"AC\",\n AC_3_PHASE: \"AC x 3\",\n AC_1_PHASE: \"AC x 1\",\n DC: \"DC\",\n};\n\nexport function getSocketText(connector) {\n return [\n formatConnectorStandard(\n connector.standard || connector.connectorStandardType,\n ),\n connectorPowerTypes[\n connector.powerType ||\n connector.power_type ||\n connector.connectorPowerType\n ],\n \"Socket\",\n ].join(\", \");\n}\n\nexport function formatConnectorStandard(value) {\n value = (value || \"\").replace(\"CONNECTOR_STANDARD_TYPE_\", \"\");\n\n if (value === \"IEC_62196_T1\") return \"Type 1\";\n if (value === \"IEC_62196_T1_COMBO\") return \"Type 1 Combo\";\n if (value === \"IEC_62196_T2\") return \"Type 2\";\n if (value === \"IEC_62196_T2_COMBO\") return \"Type 2 Combo\";\n if (value === \"IEC_62196_T3A\") return \"Type 3A\";\n if (value === \"IEC_62196_T3C\") return \"Type 3C\";\n if (value === \"CHADEMO\") return \"CHAdeMO\";\n if (value === \"DOMESTIC_F\") return \"Domestic F\";\n if (value === \"DOMESTIC_E\") return \"Domestic E\";\n if (value === \"DOMESTIC_B\") return \"Domestic B\";\n if (value === \"CATARC\") return \"Catarc\";\n return value;\n}\n\nexport function getStatusLabel(t: MapContextType[\"t\"], status) {\n switch (status) {\n case \"AVAILABLE\":\n return t(`evse.statusAvailable`);\n case \"CHARGING\":\n return t(`evse.statusCharging`);\n case \"UNAVAILABLE\":\n return t(`evse.statusUnavailable`);\n case \"ERROR\":\n return t(`evse.statusError`);\n case \"UNKNOWN\":\n return t(`evse.statusUnknown`);\n case \"REMOVED\":\n return t(`evse.statusRemoved`);\n case \"PLANNED\":\n return t(`evse.statusPlanned`);\n case \"RESERVED\":\n return t(`evse.statusReserved`);\n case \"INOPERATIVE\":\n return t(`evse.statusInoperative`);\n case \"OUTOFORDER\":\n return t(`evse.statusOutOfOrder`);\n default:\n return t(`evse.statusUnknown`);\n }\n}\n\nexport function getLocationLabel(t: MapContextType[\"t\"], location) {\n if (location?.type === \"ON_STREET\") {\n return t(`locationType.onStreet`);\n }\n if (location?.type === \"PARKING_GARAGE\") {\n return t(`locationType.parkingGarage`);\n }\n if (location?.type === \"UNDERGROUND_GARAGE\") {\n return t(`locationType.undergroundGarage`);\n }\n if (location?.type === \"PARKING_LOT\") {\n return t(`locationType.parkingLot`);\n }\n\n return t(`locationType.other`);\n}\n\nexport function getStatusColorFromEvses(evses: any[] = []) {\n if (evses.some((evse) => evse.status === \"AVAILABLE\")) {\n return getColorForStatus(\"AVAILABLE\");\n }\n\n if (evses.some((evse) => evse.status === \"CHARGING\")) {\n return getColorForStatus(\"CHARGING\");\n }\n\n return getColorForStatus(\"UNKNOWN\");\n}\n","/**\n * Note there could be bugs here. This is waiting for the Temporal API\n * Or if we cant wait use a library like moment-timezone or similar for more reliable timezone support\n */\n\n// Return offset on date for loc in ±H[:mm] format. Minutes only included if not zero\n// This is a bit special see https://stackoverflow.com/questions/62130983/get-offset-of-the-other-location-in-javascript for explanation\nexport function getTimezoneOffset(date, timeZone) {\n // Try English to get offset. If get abbreviation, use French\n let offset;\n [\"en\", \"fr\"].some((lang) => {\n // Get parts - can't get just timeZoneName, must get one other part at least\n let parts = new Intl.DateTimeFormat(lang, {\n minute: \"numeric\",\n timeZone,\n timeZoneName: \"short\",\n }).formatToParts(date);\n // Get offset from parts\n let tzName = parts.filter(\n (part) => part.type == \"timeZoneName\" && part.value\n );\n // timeZoneName starting with GMT or UTC is offset - keep and stop looping\n // Otherwise it's an abbreviation, keep looping\n if (/^(GMT|UTC)/.test(tzName[0].value)) {\n offset = tzName[0].value.replace(/GMT|UTC/, \"\") || \"+0\";\n return true;\n }\n });\n // Format offset as ±HH:mm\n // Normalise minus sign as ASCII minus (charCode 45)\n let sign = offset[0] == \"\\x2b\" ? \"\\x2b\" : \"\\x2d\";\n let [h, m] = offset.substring(1).split(\":\");\n return sign + h.padStart(2, \"0\") + \":\" + (m || \"00\");\n}\n\n// Convert offset string in ±HH:mm to minutes\nfunction offsetToMins(offset) {\n let sign = /^-/.test(offset) ? -1 : 1;\n let [h, m] = offset.match(/\\d\\d/g);\n return sign * (h * 60 + Number(m));\n}\n\nfunction formatYMD(timeZone, date) {\n const z = (n) => (\"0\" + n).slice(-2);\n const { year, month, day } = new Intl.DateTimeFormat(\"en\", {\n timeZone: timeZone,\n })\n .formatToParts(date)\n .reduce((acc, part) => {\n acc[part.type] = part.value;\n return part;\n }, Object.create(null));\n return `${year}-${z(month)}-${z(day)}`;\n}\n\nexport function tzDate(timeZone, date = new Date()) {\n const offset = getTimezoneOffset(date, timeZone);\n const offMins = offsetToMins(offset);\n const d = new Date(+date);\n d.setUTCMinutes(d.getUTCMinutes() + offMins);\n return d;\n}\n\nexport function startOfDay(timeZone, date = new Date()) {\n const offset = getTimezoneOffset(date, timeZone);\n const offMins = offsetToMins(offset);\n const d = new Date(+date);\n d.setUTCHours(0, -offMins, 0, 0);\n // If date is + or - original date, adjust\n const oDateTS = formatYMD(timeZone, date);\n const sodDateTS = formatYMD(timeZone, d);\n if (sodDateTS > oDateTS) {\n d.setUTCDate(d.getUTCDate() - 1);\n } else if (sodDateTS < oDateTS) {\n d.setUTCDate(d.getUTCDate() + 1);\n }\n return d;\n}\n\nexport function endOfDate(timeZone, date = new Date()) {\n return new Date(startOfDay(timeZone, date).valueOf() + 86399999);\n}\n\n// Could be bugs here\nexport function getNextDayOfWeek(\n date: Date,\n dayOfWeek: number,\n timeZone?: string\n) {\n const resultDate = tzDate(timeZone, date);\n if (resultDate.getUTCDate() !== dayOfWeek) {\n resultDate.setUTCDate(\n date.getUTCDate() + ((7 + dayOfWeek - date.getUTCDay() - 1) % 7) + 1\n );\n }\n\n return {\n start: startOfDay(timeZone, resultDate),\n end: endOfDate(timeZone, resultDate),\n };\n}\n\nexport function getDay(date: Date, timeZone?: string) {\n return tzDate(timeZone, date).getUTCDay();\n}\n","import {\n TariffElement,\n TariffRestrictions,\n DayOfWeek,\n PriceComponent,\n OcpiTariff,\n OcpiTariffElement,\n} from \"../types\";\n\nimport { getDay, getNextDayOfWeek } from \"../utils/date\";\n\nexport function convertTimeToMinutes(time: string) {\n const [hours, minutes] = time.split(\":\");\n return parseInt(hours) * 60 + parseInt(minutes);\n}\n\nfunction convertToTimeSlot(element: TariffElement): Timeslot {\n if (!element?.restrictions?.startTime || !element?.restrictions?.endTime) {\n return {\n elements: [element],\n priceComponents: element.priceComponents,\n startTime: 0,\n endTime: 24 * 60,\n isFullDay: true,\n };\n }\n\n const startTime = convertTimeToMinutes(element.restrictions.startTime);\n const endTime = convertTimeToMinutes(element.restrictions.endTime);\n\n return {\n elements: [element],\n priceComponents: element.priceComponents,\n isFullDay: startTime === 0 && endTime === 24 * 60,\n startTime,\n endTime,\n };\n}\n\ntype Timeslot = {\n isActive?: boolean;\n isFullDay: boolean;\n startTime: number;\n endTime: number;\n elements?: TariffElement[];\n priceComponents: PriceComponent[];\n};\n\n// TODO write this nicer\nexport function getScheduleItems(\n items: Timeslot[],\n isDayActive: boolean,\n now: Date,\n): Timeslot[] {\n const currentTime = (now.getHours() * 60 + now.getMinutes()) % 60;\n\n if (items.length <= 1) {\n return items.map((item) => {\n item.isActive =\n isDayActive &&\n item.startTime <= currentTime &&\n item.endTime >= currentTime;\n\n return item;\n });\n }\n items = items.sort((a, b) => a.startTime - b.startTime);\n\n let scheduleItems = [items[0]];\n for (let i = 1; i < items.length; i++) {\n const current = items[i];\n\n const refItem = scheduleItems.findLast(\n (item) => item.startTime <= current.startTime,\n );\n if (!refItem) {\n scheduleItems = scheduleItems.filter(\n (item) => item.endTime > current.endTime,\n );\n scheduleItems.unshift(current);\n } else {\n const oldEndTime = refItem.endTime;\n refItem.endTime = current.startTime;\n\n const toAppend = [current];\n if (oldEndTime > current.endTime) {\n toAppend.push({\n ...refItem,\n startTime: current.endTime,\n endTime: oldEndTime,\n });\n }\n scheduleItems.splice(scheduleItems.indexOf(refItem) + 1, 0, ...toAppend);\n }\n\n let maxEndTime = 0;\n scheduleItems = scheduleItems\n .map((item, i) => {\n const prevItem = scheduleItems[i - 1];\n\n if (item.endTime > maxEndTime) {\n maxEndTime = item.endTime;\n } else {\n return null;\n }\n if (prevItem && prevItem.endTime !== item.startTime) {\n item.startTime = prevItem.endTime;\n }\n return item;\n })\n .filter(Boolean);\n }\n\n return scheduleItems.map((item) => {\n item.isActive =\n isDayActive &&\n item.startTime <= currentTime &&\n item.endTime >= currentTime;\n\n item.isFullDay = item.startTime === 0 && item.endTime === 24 * 60;\n\n return item;\n });\n}\n\nexport function isBaseTariffOCPI(tariffElement: OcpiTariffElement) {\n return (\n //elements without restrictions are always base tariff\n !tariffElement?.restrictions ||\n // elements without time restirctions are also base tariff\n (!tariffElement?.restrictions?.start_date &&\n !tariffElement?.restrictions?.end_date &&\n !tariffElement?.restrictions?.start_time &&\n !tariffElement?.restrictions?.end_time &&\n !tariffElement?.restrictions?.day_of_week &&\n !tariffElement?.restrictions?.day_of_week)\n );\n}\n\nexport function isBaseTarif(tariffElement: TariffElement) {\n return (\n //elements without restrictions are always base tariff\n !tariffElement?.restrictions ||\n // elements without time restirctions are also base tariff\n (!tariffElement?.restrictions?.startDate &&\n !tariffElement?.restrictions?.endDate &&\n !tariffElement?.restrictions?.startTime &&\n !tariffElement?.restrictions?.startTime &&\n !tariffElement?.restrictions?.dayOfWeek)\n );\n}\n\ntype DynamicTariff = {\n date: Date;\n items: Timeslot[];\n};\n\ntype getDynamicTariffProps = {\n elements: TariffElement[];\n limit?: number;\n now: Date;\n};\n\nexport function getDynamicTariffOCPI(\n elements: OcpiTariffElement[],\n limit: number = 6,\n now: Date = new Date(),\n): DynamicTariff[] {\n const filteredElements = [...elements]\n .filter((c) => !isBaseTariffOCPI(c))\n .map((el) => {\n return {\n ...el,\n restrictions: {\n _startDate: new Date(\n `${el.restrictions.start_date}T${el.restrictions.start_time}`,\n ),\n ...el.restrictions,\n },\n };\n })\n .sort((a, b) => {\n return (\n a.restrictions._startDate.valueOf() -\n b.restrictions._startDate.valueOf()\n );\n })\n .filter((c) => {\n return (\n c.restrictions._startDate.valueOf() > now.valueOf() - 180 * 60 * 1000\n );\n })\n .slice(0, limit);\n\n const splitByDay = filteredElements.reduce((acc, curr) => {\n const day = curr.restrictions._startDate.getDate();\n acc[day] = {\n date: new Date(curr.restrictions.start_date),\n items: [...(acc[day]?.items || []), curr],\n };\n return acc;\n }, []);\n\n return Object.keys(splitByDay).map((key) => {\n const { date, items }: { date: Date; items: any[] } = splitByDay[key];\n const formattedItems = items\n .map(({ restrictions, ...c }) => {\n const { _startDate, ...partialRestrictions } = restrictions;\n return {\n ...c,\n restrictions: {\n ...partialRestrictions,\n },\n };\n })\n .map(convertToTimeSlot)\n .map((item) => {\n const isDayActive = getDay(now) === getDay(date);\n const currentTime = now.getHours() * 60 + now.getMinutes();\n\n const isActive =\n isDayActive &&\n item.startTime <= currentTime &&\n item.endTime - 1 >= currentTime;\n\n return {\n ...item,\n isActive,\n };\n });\n\n return {\n date,\n items: formattedItems,\n };\n });\n}\n\nexport function getDynamicTariff({\n elements,\n limit = 6,\n now = new Date(),\n}: getDynamicTariffProps): DynamicTariff[] {\n const filteredElements = [...elements]\n .filter((c) => !isBaseTarif(c))\n .map((el) => {\n // we are displaying these in the local timezone\n return {\n ...el,\n restrictions: {\n _startDate: new Date(\n `${el.restrictions.startDate}T${el.restrictions.startTime}`,\n ),\n ...el.restrictions,\n },\n };\n })\n .sort((a, b) => {\n return (\n a.restrictions._startDate.valueOf() -\n b.restrictions._startDate.valueOf()\n );\n })\n .filter((c) => {\n return (\n c.restrictions._startDate.valueOf() > now.valueOf() - 180 * 60 * 1000\n );\n })\n .slice(0, limit);\n\n const splitByDay = filteredElements.reduce((acc, curr) => {\n const day = curr.restrictions._startDate.getDate();\n acc[day] = {\n date: new Date(curr.restrictions.startDate),\n items: [...(acc[day]?.items || []), curr],\n };\n return acc;\n }, []);\n\n return Object.keys(splitByDay).map((key) => {\n const { date, items }: { date: Date; items: any[] } = splitByDay[key];\n const formattedItems = items\n .map(({ restrictions, ...c }) => {\n const { _startDate, ...partialRestrictions } = restrictions;\n return {\n ...c,\n restrictions: {\n ...partialRestrictions,\n },\n };\n })\n .map(convertToTimeSlot)\n .map((item) => {\n const isDayActive = getDay(now) === getDay(date);\n const currentTime = now.getHours() * 60 + now.getMinutes();\n\n const isActive =\n isDayActive &&\n item.startTime <= currentTime &&\n item.endTime - 1 >= currentTime;\n\n return {\n ...item,\n isActive,\n };\n });\n\n return {\n date,\n items: formattedItems,\n };\n });\n}\n\nexport function getScheduledTariff(\n elements: TariffElement[],\n locationTimezone: string,\n) {\n // TODO this timezone from locations\n const today = new Date();\n\n return [...elements].reduce(\n (acc, curr) => {\n const {\n startDate: start_date,\n endDate: end_date,\n dayOfWeek: day_of_week = [],\n } = (curr.restrictions as TariffRestrictions) || {};\n\n // filtering out elements without restrictions\n if (!Object.keys(curr.restrictions || {}).length) {\n return acc;\n }\n\n // TODO not sure this is correct consider timezone + should start_time be included\n const startDate = start_date ? new Date(start_date) : null;\n\n if (start_date) {\n if (startDate.valueOf() > Date.now()) {\n return acc;\n }\n }\n\n // TODO not sure this is correct consider timezone + should end_time be included\n const endDate = end_date ? new Date(end_date) : null;\n\n if (end_date) {\n if (endDate.valueOf() < Date.now()) {\n return acc;\n }\n }\n\n [\n \"SUNDAY\",\n \"MONDAY\",\n \"TUESDAY\",\n \"WEDNESDAY\",\n \"THURSDAY\",\n \"FRIDAY\",\n \"SATURDAY\",\n ].forEach((day: DayOfWeek, index) => {\n // note this does not work for timezones yet, until we load a timezone library\n const { start, end } = getNextDayOfWeek(today, index, locationTimezone);\n\n if (startDate) {\n if (startDate.valueOf() > start.valueOf()) {\n return;\n }\n }\n\n if (endDate) {\n if (endDate.valueOf() < end.valueOf()) {\n return;\n }\n }\n if (day_of_week.length && !day_of_week.includes(day)) return;\n\n acc[day] = [...acc[day], curr];\n });\n return acc;\n },\n {\n MONDAY: [],\n TUESDAY: [],\n WEDNESDAY: [],\n THURSDAY: [],\n FRIDAY: [],\n SATURDAY: [],\n SUNDAY: [],\n },\n );\n}\n\nfunction omitFields(obj, fields) {\n return Object.keys(obj).reduce((acc, curr) => {\n if (!fields.includes(curr)) {\n acc[curr] = obj[curr];\n }\n return acc;\n }, {});\n}\n\nfunction isSame(a, b) {\n const aWithoutActive = a.map((item) => omitFields(item, [\"isActive\"]));\n const bWithoutActive = b.map((item) => omitFields(item, [\"isActive\"]));\n return JSON.stringify(aWithoutActive) === JSON.stringify(bWithoutActive);\n}\n\n//merge timeslots that have the same start and end time\nfunction mergeDuplicatesTimeslots(timeslots: Timeslot[]) {\n return timeslots.reduce((acc, cur) => {\n const existing = acc.find((item) => {\n return item.startTime === cur.startTime && item.endTime === cur.endTime;\n });\n if (existing) {\n existing.elements.push(...cur.elements);\n } else {\n acc.push(cur);\n }\n return acc;\n }, []);\n}\n\ntype Schedule = {\n days: DayOfWeek[];\n isActive: boolean;\n items: Timeslot[];\n};\n\n// A base rate element fills the gaps between time-restricted elements.\n// Parking-only base elements (max/min duration) are excluded — they are shown separately.\nfunction isRateBaseTariff(el: TariffElement): boolean {\n if (!isBaseTarif(el)) return false;\n return (el.priceComponents || []).some(\n (pc) => pc.type !== \"PARKING_TIME\" && (pc.price || 0) > 0,\n );\n}\n\n// OCPI tariffs commonly use 00:01 / 23:59 to mean \"from start of day\" / \"to end of day\".\n// Treat these as midnight bounds so the algorithm doesn't produce 1-minute noise segments.\nfunction isEdgeNoise(item: Timeslot): boolean {\n return (\n (item.startTime === 0 && item.endTime <= 1) ||\n (item.startTime >= 1439 && item.endTime === 24 * 60)\n );\n}\n\nexport function getSchedule(\n elements: TariffElement[],\n locationTimezone,\n now,\n): Schedule[] {\n const days = getScheduledTariff(\n elements.concat().filter((c) => !isBaseTarif(c)),\n locationTimezone,\n );\n\n const baseRateElement = elements.find(isRateBaseTariff);\n\n const { SUNDAY, ...rest } = days;\n\n // fixing order sunday has to be first for the getDay function to work\n const [firstDay, ...restDays] = Object.keys({\n SUNDAY: days.SUNDAY,\n ...rest,\n }).map((key, index) => {\n const dayElements = days[key];\n const isActive = getDay(now, locationTimezone) === index;\n\n const dayTimeslots = mergeDuplicatesTimeslots(\n dayElements.map(convertToTimeSlot),\n );\n // Inject the base rate so gaps between time-restricted slots show the base price\n // instead of stretching the adjacent slot across the gap.\n if (baseRateElement && dayTimeslots.length > 0) {\n dayTimeslots.unshift(convertToTimeSlot(baseRateElement));\n }\n\n return {\n day: key,\n isActive,\n items: getScheduleItems(dayTimeslots, isActive, now).filter(\n (item) => !isEdgeNoise(item),\n ),\n };\n });\n\n // switching order back\n return [...restDays, firstDay]\n .reduce((acc, curr, index, items) => {\n const prevEntry = acc[acc.length - 1];\n const prevTimeslots = prevEntry?.items;\n if (!prevTimeslots || !isSame(prevTimeslots, curr.items)) {\n const { day, ...rest } = curr;\n acc.push({\n ...rest,\n days: [curr.day],\n });\n } else {\n prevEntry.days = [prevEntry.days[0], curr.day];\n prevEntry.isActive = prevEntry.isActive || curr.isActive;\n }\n return acc;\n }, [])\n .filter((c) => {\n return !!c.items.length;\n });\n}\n\nexport function getConnectorTariffTypeV2(tariff: OcpiTariff) {\n if (!tariff) {\n return \"none\";\n }\n\n const hasPriceComponents = tariff.elements?.some(\n (element) => element?.price_components?.length > 0,\n );\n if (!hasPriceComponents) {\n return \"none\";\n }\n\n const baseTarifElements = tariff.elements.filter(isBaseTariffOCPI);\n if (baseTarifElements.length === tariff.elements.length) {\n return \"base\";\n }\n\n const dynamicTariffs = getDynamicTariffOCPI(tariff.elements, 6, new Date());\n\n if (dynamicTariffs.length) {\n return \"dynamic\";\n }\n\n return \"scheduled\";\n}\n\nexport function getConnectorTariffType(connectorTarif) {\n const { elements = [] } = connectorTarif;\n const hasPriceComponents = elements?.some(\n (element) => element?.priceComponents?.length > 0,\n );\n\n if (!hasPriceComponents) {\n return \"none\";\n }\n\n const baseTarifElements = elements.filter(isBaseTarif);\n\n if (baseTarifElements.length === elements.length) {\n return \"base\";\n }\n\n const dynamicTariffs = getDynamicTariff({\n elements,\n limit: 6,\n now: new Date(),\n });\n if (dynamicTariffs.length) {\n return \"dynamic\";\n }\n return \"scheduled\";\n}\n\n// Connector Power Type constants\nexport const ConnectorPowerType = {\n CONNECTOR_POWER_TYPE_UNSPECIFIED: \"CONNECTOR_POWER_TYPE_UNSPECIFIED\",\n CONNECTOR_POWER_TYPE_AC_1_PHASE: \"CONNECTOR_POWER_TYPE_AC_1_PHASE\",\n CONNECTOR_POWER_TYPE_AC_2_PHASE: \"CONNECTOR_POWER_TYPE_AC_2_PHASE\",\n CONNECTOR_POWER_TYPE_AC_2_PHASE_SPLIT:\n \"CONNECTOR_POWER_TYPE_AC_2_PHASE_SPLIT\",\n CONNECTOR_POWER_TYPE_AC_3_PHASE: \"CONNECTOR_POWER_TYPE_AC_3_PHASE\",\n CONNECTOR_POWER_TYPE_DC: \"CONNECTOR_POWER_TYPE_DC\",\n CONNECTOR_POWER_TYPE_AC: \"CONNECTOR_POWER_TYPE_AC\",\n} as const;\n\nexport type ConnectorPowerType =\n (typeof ConnectorPowerType)[keyof typeof ConnectorPowerType];\n\nexport function calculateMaxPower(connector: {\n power: {\n maxWatts: number;\n maxVoltage: number;\n maxAmperage: number;\n };\n connectorPowerType: ConnectorPowerType;\n}): number {\n switch (connector.connectorPowerType) {\n case ConnectorPowerType.CONNECTOR_POWER_TYPE_AC_1_PHASE:\n case ConnectorPowerType.CONNECTOR_POWER_TYPE_DC:\n return (connector.power.maxVoltage * connector.power.maxAmperage) / 1000;\n\n case ConnectorPowerType.CONNECTOR_POWER_TYPE_AC_2_PHASE:\n case ConnectorPowerType.CONNECTOR_POWER_TYPE_AC_2_PHASE_SPLIT:\n return (\n (connector.power.maxVoltage * connector.power.maxAmperage * 2) / 1000\n );\n\n case ConnectorPowerType.CONNECTOR_POWER_TYPE_AC_3_PHASE:\n return (\n (connector.power.maxVoltage * connector.power.maxAmperage * 3) / 1000\n );\n\n default:\n return 0;\n }\n}\n","import React from \"react\";\nimport styles from \"./Price.module.css\";\nimport { useMapContext } from \"../../contexts/Map\";\nimport { PriceComponent as PriceComponentType, TariffElement } from \"../../types\";\n\nfunction formatCurrency(value, props) {\n return new Intl.NumberFormat(undefined, {\n style: \"currency\",\n currency: props.currency || \"EUR\",\n maximumFractionDigits: 2,\n }).format(value);\n}\n\ntype PriceComponentsProps = {\n priceComponent: PriceComponentType;\n restrictions?: TariffElement[\"restrictions\"];\n currency: string;\n};\n\nfunction getPrice(priceComponent: PriceComponentType) {\n const vat = !priceComponent.vat ? 0 : priceComponent.vat / 100;\n return priceComponent.price + priceComponent.price * vat;\n}\n\nexport default function PriceComponent({\n priceComponent,\n restrictions = {},\n currency,\n}: PriceComponentsProps) {\n const { t } = useMapContext();\n\n const stringByType = {\n ENERGY: \"tariffPriceComponent.energy\",\n TIME: \"tariffPriceComponent.time\",\n FLAT: \"tariffPriceComponent.flat\",\n PARKING_TIME: \"tariffPriceComponent.parkingTime\",\n };\n\n if (\n restrictions?.minDuration === 0 &&\n restrictions?.maxDuration &&\n priceComponent.type === \"PARKING_TIME\"\n ) {\n return (\n <div className={styles.tariffItem}>\n {t(\"tariffPriceComponent.parkingTimeWait\", {\n minutes: Math.floor(restrictions.maxDuration / 60),\n })}\n </div>\n );\n }\n\n if (!stringByType[priceComponent.type]) return null;\n\n return (\n <div className={styles.tariffItem}>\n {t(stringByType[priceComponent.type] as any, {\n total: formatCurrency(getPrice(priceComponent), {\n currency: currency,\n }),\n })}\n </div>\n );\n}\n\n","import React from \"react\";\n\nimport { PriceComponent, TariffElement } from \"../../types\";\n\nimport Price from \"../Price/Price\";\n\nimport styles from \"./PriceComponents.module.css\";\nimport { useMapContext } from \"../../contexts/Map\";\n\ntype PriceComponentsProps = {\n elements: TariffElement[];\n currency: string;\n};\n\nconst displayOrder = [\"ENERGY\", \"TIME\", \"FLAT\", \"PARKING_TIME\"];\n\ntype SortedElements = {\n type: PriceComponent[\"type\"];\n elements: {\n priceComponent: PriceComponent;\n restrictions: TariffElement[\"restrictions\"];\n }[];\n};\n\nexport default function PriceComponents({\n elements,\n currency,\n}: PriceComponentsProps) {\n const { t } = useMapContext();\n\n // get elements from by type\n const elementsByType = elements.reduce((acc, element) => {\n element.priceComponents.forEach((priceComponent) => {\n if (!acc[priceComponent.type]) acc[priceComponent.type] = [];\n acc[priceComponent.type].push({\n priceComponent,\n restrictions: element.restrictions,\n });\n });\n return acc;\n }, {});\n\n const sortedElements = Object.keys(elementsByType)\n .map((type) => {\n return {\n type,\n elements: elementsByType[type],\n };\n })\n .sort((a: any, b: any) => {\n const aIndex = displayOrder.indexOf(a.type);\n const bIndex = displayOrder.indexOf(b.type);\n if (aIndex === -1) return 1;\n if (bIndex === -1) return -1;\n return aIndex - bIndex;\n }) as SortedElements[];\n\n return (\n <div className={styles.container}>\n {sortedElements.map(({ type, elements }, i) => {\n return elements.reverse().map((element, q) => {\n return (\n <Price\n currency={currency}\n key={`${type}-${i}-${q}`}\n priceComponent={element.priceComponent}\n restrictions={element.restrictions}\n />\n );\n });\n })}\n </div>\n );\n}\n\n","import React from \"react\";\n\nimport { CdrAdditionalCharge, PriceComponent, TariffElement } from \"../../types\";\n\nfunction formatCurrency(value, props) {\n return new Intl.NumberFormat(undefined, {\n style: \"currency\",\n currency: props.currency || \"EUR\",\n maximumFractionDigits: 2,\n }).format(value);\n}\n\n// note reuse of price css module\nimport styles from \"../Price/Price.module.css\";\nimport { useMapContext } from \"../../contexts/Map\";\n\ntype CdrPriceComponentsProps = {\n cdrAdditionalCharge: CdrAdditionalCharge;\n currency: string;\n};\n\nfunction getPrice({ vat, price }: { vat?: number; price: number }) {\n const vatAmount = !vat ? 0 : vat / 100;\n return price + price * vatAmount;\n}\n\nexport default function CdrPriceComponent({\n cdrAdditionalCharge,\n currency,\n}: CdrPriceComponentsProps) {\n const { t } = useMapContext();\n\n const stringByType = {\n FLAT_FEE: t(\"cdrPrice.flatFee\", {\n total: formatCurrency(getPrice(cdrAdditionalCharge), {\n currency: currency,\n }),\n }),\n };\n\n return (\n <div className={styles.tariffItem}>\n {stringByType[cdrAdditionalCharge.type]}\n </div>\n );\n}\n\n","import React, { Fragment } from \"react\";\nimport { useMapContext } from \"../../contexts/Map\";\nimport { Tariff, CdrAdditionalCharge } from \"../../types\";\nimport { getSchedule, isBaseTarif, getDynamicTariff } from \"../../utils/ocpi\";\n\nimport styles from \"./ConnectorTariff.module.css\";\n\nimport PriceComponents from \"../PriceComponents/PriceComponents\";\nimport CdrPrice from \"../CdrPrice/CdrPrice\";\n\ntype ConnectorTariffProps = {\n tariff: Tariff;\n timezone?: string;\n compact?: boolean;\n cdrAdditionalCharges?: CdrAdditionalCharge[];\n};\n\nfunction formatTime(language, minutes: number) {\n const date = new Date(0);\n const hours = Math.floor(minutes / 60);\n const mins = minutes % 60;\n date.setHours(hours, mins, 0, 0);\n // hardcoding to nl for now, because i think people will understand it better in EU\n return date.toLocaleTimeString(\"nl\", {\n hour: \"2-digit\",\n minute: \"2-digit\",\n });\n}\n\nconst defaultTimeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n\nfunction daysForLocale(language: string) {\n const { format } = new Intl.DateTimeFormat(language, { weekday: \"long\" });\n return [\n \"SUNDAY\",\n \"MONDAY\",\n \"TUESDAY\",\n \"WEDNESDAY\",\n \"THURSDAY\",\n \"FRIDAY\",\n \"SATURDAY\",\n ].reduce((acc, day, index) => {\n acc[day] = format(new Date(Date.UTC(2023, 9, index + 1)));\n return acc;\n }, {});\n}\n\nfunction CdrAdditionalChargeComponent({\n currency,\n cdrAdditionalCharges,\n}: {\n currency: string;\n cdrAdditionalCharges: CdrAdditionalCharge[];\n}) {\n return cdrAdditionalCharges.map((c) => {\n return <CdrPrice key={c.id} currency={currency} cdrAdditionalCharge={c} />;\n });\n}\n\nexport default function ConnectorTariff({\n timezone = defaultTimeZone,\n tariff,\n compact = true,\n cdrAdditionalCharges = [],\n}: ConnectorTariffProps) {\n const { t, language } = useMapContext();\n const i18nDays = daysForLocale(language);\n\n if (!tariff) return null;\n\n const elements = tariff.elements || [];\n const currency = tariff.currency || \"\";\n\n const hasPriceComponents = elements.some(\n (element) => element.priceComponents && element.priceComponents.length > 0,\n );\n\n const dynamicTariffs = getDynamicTariff({\n elements,\n limit: compact ? 6 : 40,\n now: new Date(),\n });\n\n const scheduledTariffs = dynamicTariffs.length\n ? []\n : getSchedule(elements, timezone, new Date());\n\n const baseTarifElements = elements.filter(isBaseTarif);\n\n if (!hasPriceComponents) {\n return (\n <>\n <div className={styles.tariffNote}>\n {t(\"tariffPriceComponent.noTariff\")}\n </div>\n {cdrAdditionalCharges.length > 0 && (\n <div className={styles.container}>\n <CdrAdditionalChargeComponent\n currency={currency}\n cdrAdditionalCharges={cdrAdditionalCharges}\n />\n </div>\n )}\n </>\n );\n }\n\n const isBaseActive = !scheduledTariffs.some((element) => element.isActive);\n\n if (scheduledTariffs.length) {\n return (\n <div className={styles.container}>\n {baseTarifElements.length > 0 && (\n <div className={[styles.tariffList, styles.bold].join(\" \")}>\n <div className={styles.tariffHeader}>\n {t(\"tariffPriceComponent.baseTariff\")}\n\n {isBaseActive && (\n <span className={styles.activeNowLabel}>\n {t(\"tariffPriceComponent.active\")}\n </span>\n )}\n </div>\n <PriceComponents elements={baseTarifElements} currency={currency} />\n\n <CdrAdditionalChargeComponent\n currency={currency}\n cdrAdditionalCharges={cdrAdditionalCharges}\n />\n </div>\n )}\n\n {scheduledTariffs.map((schedule) => {\n return (\n <div key={schedule.days.join(\"-\")} className={styles.tariffList}>\n <div className={styles.tariffHeader}>\n {schedule.days.map((day) => i18nDays[day]).join(\" - \")}\n\n {schedule.isActive && (\n <span className={styles.activeNowLabel}>\n {t(\"tariffPriceComponent.active\")}\n </span>\n )}\n </div>\n {schedule.items.map((item) => {\n return (\n <div\n key={item.startTime}\n className={item.isActive && styles.bold}\n >\n {!item.isFullDay && (\n <div className={styles.tariffLabel}>\n {formatTime(language, item.startTime)} -{\" \"}\n {formatTime(language, item.endTime)}\n </div>\n )}\n <div>\n <PriceComponents\n elements={item.elements}\n currency={currency}\n />\n <CdrAdditionalChargeComponent\n currency={currency}\n cdrAdditionalCharges={cdrAdditionalCharges}\n />\n </div>\n </div>\n );\n })}\n </div>\n );\n })}\n </div>\n );\n }\n\n return (\n <div className={styles.container}>\n {baseTarifElements.length > 0 && !dynamicTariffs?.length && (\n <div className={styles.tariffList}>\n <PriceComponents elements={baseTarifElements} currency={currency} />\n <CdrAdditionalChargeComponent\n currency={currency}\n cdrAdditionalCharges={cdrAdditionalCharges}\n />\n </div>\n )}\n {dynamicTariffs.length > 0 && (\n <>\n {dynamicTariffs.map((dynamicTariff, index) => {\n return (\n <>\n <div className={styles.tariffHeader}>\n {t(\"tariffPriceComponent.dynamicTariffHeader\", {\n date: new Intl.DateTimeFormat(language, {\n weekday: \"long\",\n month: \"short\",\n day: \"numeric\",\n }).format(dynamicTariff.date),\n })}\n </div>\n <div className={styles.dynamicTariffList}>\n {dynamicTariff.items.map((item, index) => {\n return (\n <div\n key={[item.startTime, item.endTime, index].join()}\n className={[\n styles.dynamicTariffItem,\n item.isActive && styles.bold,\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n <div className={styles.dynamicTariffItemRange}>\n {formatTime(language, item.startTime)} –{\" \"}\n {formatTime(language, item.endTime)}\n </div>\n <PriceComponents\n elements={item.elements}\n currency={currency}\n />\n <CdrAdditionalChargeComponent\n currency={currency}\n cdrAdditionalCharges={cdrAdditionalCharges}\n />\n {item.isActive && (\n <span className={styles.activeNowLabel}>\n {t(\"tariffPriceComponent.active\")}\n </span>\n )}\n </div>\n );\n })}\n </div>\n </>\n );\n })}\n </>\n )}\n </div>\n );\n}\n","import { Location, OcpiLocation } from \"../types\";\n\nexport function getNotes(\n t,\n location: Location | OcpiLocation,\n type: \"dynamic\" | \"scheduled\" | \"base\" | \"none\",\n) {\n const notes = [];\n\n if ((location as Location)?.customNote) {\n notes.push((location as Location)?.customNote);\n }\n\n if (type === \"none\") {\n return notes.length ? notes : [t(\"tariffNote.baseTariffNote\")];\n }\n\n if (type === \"dynamic\") {\n notes.push(t(\"tariffNote.dynamicScheduledTariffNote\"));\n }\n\n // is e-flux location\n if (\n (location as Location)?.infraProviderId === \"NLEFL\" ||\n (location as OcpiLocation)?.party_id === \"EFL\"\n ) {\n if (type === \"scheduled\") {\n notes.push(t(\"tariffNote.eFluxScheduledTariffNote\"));\n }\n // if only base tariff\n return notes;\n }\n\n if (type === \"scheduled\") {\n notes.push(\n t(\"tariffNote.baseTariffNote\"),\n t(\"tariffNote.scheduledTariffNote\"),\n );\n } else {\n notes.push(t(\"tariffNote.baseTariffNote\"));\n }\n\n return notes;\n}\n","import React from \"react\";\nimport styles from \"./locations.module.css\";\nimport StationIcon from \"../../assets/station-icon.svg\";\nimport BuildingIcon from \"../../assets/building-icon.svg\";\nimport CarIcon from \"../../assets/car-icon.svg\";\nimport BoltIcon from \"../../assets/bolt-icon.svg\";\nimport PricingIcon from \"../../assets/pricing-icon.svg\";\nimport { Info } from \"../../components/Icons/Icons\";\nimport {\n getStatusColorFromEvses,\n getLocationLabel,\n getStatusLabel,\n getSocketIcon,\n getSocketText,\n} from \"../../utils/formatters\";\nimport ConnectorTariff from \"../../components/ConnectorTariff/ConnectorTariff\";\nimport { getColorForStatus } from \"../../utils/location\";\nimport { getConnectorTariffType } from \"../../utils/ocpi\";\nimport { getNotes } from \"../../utils/notes\";\nimport { formatNumber } from \"../../utils/formatters\";\nimport { useMapContext } from \"../../contexts/Map\";\n\ninterface Props {\n currentLocation: any;\n setView(view: string, args?: any): void;\n evses: any[];\n cdrAdditionalCharges: any[];\n}\n\nconst LocationDetailsV1: React.FC<Props> = ({\n currentLocation,\n evses,\n setView,\n cdrAdditionalCharges,\n}) => {\n const { options, t, language } = useMapContext();\n const availableEvse = evses.filter((evse) => evse.status === \"AVAILABLE\");\n return (\n <div className={styles.container}>\n <div className={styles.row}>\n <img className={styles.icon} src={StationIcon} alt=\"station icon\" />\n <div className={styles.text}>\n {options.locationBaseUrl && (\n <a href={`${options.locationBaseUrl}/${currentLocation.id}`}>\n {currentLocation.name || \"-\"}\n </a>\n )}\n {!options.locationBaseUrl && currentLocation.name}\n </div>\n </div>\n <div className={styles.row}>\n <div className={styles.icon}>\n <div\n style={{\n background: getStatusColorFromEvses(currentLocation.evses),\n }}\n className={styles.statusIcon}\n />\n </div>\n <div className={styles.text}>\n {availableEvse.length} / {evses.length} {t(\"evse.statusAvailable\")}\n </div>\n </div>\n {currentLocation.subOperator?.name && (\n <div className={styles.row}>\n <img className={styles.icon} src={BuildingIcon} alt=\"building icon\" />\n <div className={styles.text}>{currentLocation.subOperator?.name}</div>\n </div>\n )}\n\n {currentLocation.parkingType !== \"UNKNOWN\" && (\n <div className={styles.row}>\n <img className={styles.icon} src={CarIcon} alt=\"parking icon\" />\n <div className={styles.text}>\n {getLocationLabel(t, currentLocation.parkingType)}\n </div>\n </div>\n )}\n\n {evses.map((evse) => {\n return (\n <div key={evse.evseId}>\n <hr className={styles.divider} />\n <div className={styles.row}>\n <img className={styles.icon} src={BoltIcon} alt=\"power icon\" />\n <div className={styles.text}>{evse.evseId}</div>\n </div>\n <div className={styles.row}>\n <div\n style={{\n background: getColorForStatus(evse.status),\n }}\n className={styles.statusIcon}\n />\n <div className={styles.text}>\n {[\n getStatusLabel(t, evse.status),\n evse.maxPower &&\n `${formatNumber(language, Math.floor(evse.maxPower))}kW`,\n ]\n .filter(Boolean)\n .join(\", \")}\n </div>\n </div>\n {evse.connectors.map((connector, i) => {\n const connectorType = getConnectorTariffType(connector.tariff);\n const notes = getNotes(t, currentLocation, connectorType);\n return (\n <div key={`connector-${i}`}>\n {\" \"}\n <div className={styles.row}>\n <img\n className={styles.icon}\n src={getSocketIcon(connector)}\n alt=\"socket type\"\n />\n <div className={styles.text}>\n {getSocketText(connector)}\n </div>\n </div>\n <div className={styles.row}>\n <img\n className={styles.icon}\n src={PricingIcon}\n alt=\"pricing\"\n />\n <div className={styles.text}>{t(\"evse.pricing\")}</div>\n </div>\n <ConnectorTariff\n tariff={connector.tariff}\n cdrAdditionalCharges={cdrAdditionalCharges}\n />\n {connectorType === \"dynamic\" && (\n <div\n className={styles.tariffNoteLink}\n onClick={() => {\n setView(\"dynamicTariff\", {\n connector: connector,\n evseId: evse.evseId,\n notes: notes,\n locationName: currentLocation.name,\n });\n }}\n >\n {t(\"location.viewAllHourlyPrices\")}\n </div>\n )}\n {notes.length > 0 && (\n <div\n className={styles.tariffNoteLink}\n onClick={() => {\n setView(\"tariffNote\", {\n locationName: currentLocation.name,\n evseId: evse.evseId,\n notes: getNotes(t, currentLocation, connectorType),\n });\n }}\n >\n <Info /> {t(\"tariffPriceComponent.viewTariff\")}\n </div>\n )}\n </div>\n );\n })}\n </div>\n );\n })}\n </div>\n );\n};\n\nexport default LocationDetailsV1;\n","import React, { ReactNode, useState } from \"react\";\nimport styles from \"./LocationRow.module.css\";\nimport { ChevronDown } from \"../Icons/Icons\";\n\ninterface Props {\n icon: ReactNode;\n text: ReactNode;\n hint?: ReactNode;\n children?: ReactNode;\n defaultExpanded?: boolean;\n}\n\nconst rowStyle: React.CSSProperties = {\n display: \"flex\",\n flexDirection: \"row\",\n flexWrap: \"nowrap\",\n alignItems: \"center\",\n padding: \"5px 0\",\n minWidth: 0,\n};\n\nconst iconSlotStyle: React.CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n height: 16,\n width: 16,\n flex: \"0 0 auto\",\n marginRight: 14,\n overflow: \"hidden\",\n};\n\nconst textSlotStyle: React.CSSProperties = {\n flex: \"1 1 auto\",\n minWidth: 0,\n fontSize: 12,\n lineHeight: \"16px\",\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n};\n\nconst hintStyle: React.CSSProperties = {\n color: \"var(--roadmap-muted-color, #6a6a6a)\",\n fontWeight: \"normal\",\n};\n\nconst chevronSlotStyle: React.CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n height: 10,\n width: 10,\n flex: \"0 0 auto\",\n marginLeft: 8,\n transition: \"transform 0.15s ease\",\n color: \"var(--roadmap-text-color, #2a2a2a)\",\n};\n\nconst bodyStyle: React.CSSProperties = {\n padding: \"4px 0 6px 30px\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: 4,\n};\n\nexport const LocationRow: React.FC<Props> = ({\n icon,\n text,\n hint,\n children,\n defaultExpanded = false,\n}) => {\n const expandable = React.Children.count(children) > 0;\n const [expanded, setExpanded] = useState(defaultExpanded);\n\n const toggle = () => setExpanded((v) => !v);\n\n return (\n <>\n <div\n className={`${styles.row} ${expandable ? styles.expandable : \"\"}`}\n style={{\n ...rowStyle,\n cursor: expandable ? \"pointer\" : undefined,\n userSelect: expandable ? \"none\" : undefined,\n }}\n role={expandable ? \"button\" : undefined}\n tabIndex={expandable ? 0 : undefined}\n aria-expanded={expandable ? expanded : undefined}\n onClick={expandable ? toggle : undefined}\n onKeyDown={\n expandable\n ? (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n toggle();\n }\n }\n : undefined\n }\n >\n <span className={styles.icon} style={iconSlotStyle}>\n {React.isValidElement(icon)\n ? React.cloneElement(icon as React.ReactElement<any>, {\n style: {\n maxWidth: 16,\n maxHeight: 16,\n display: \"block\",\n ...((icon as React.ReactElement<any>).props?.style || {}),\n },\n })\n : icon}\n </span>\n <div className={styles.text} style={textSlotStyle}>\n {text}\n {hint != null && (\n <span className={styles.textHint} style={hintStyle}>\n {\" · \"}\n {hint}\n </span>\n )}\n </div>\n {expandable && (\n <span\n className={`${styles.chevron} ${\n expanded ? styles.chevronOpen : \"\"\n }`}\n style={{\n ...chevronSlotStyle,\n transform: expanded ? \"rotate(180deg)\" : undefined,\n }}\n >\n <ChevronDown />\n </span>\n )}\n </div>\n {expandable && expanded && (\n <div className={styles.body} style={bodyStyle}>\n {children}\n </div>\n )}\n </>\n );\n};\n\nexport default LocationRow;\n","import React from \"react\";\nimport StationIcon from \"../../../assets/station-icon.svg\";\nimport LocationRow from \"../../../components/LocationRow/LocationRow\";\nimport { useMapContext } from \"../../../contexts/Map\";\nimport { OcpiLocation } from \"../../../types\";\n\ninterface Props {\n location: OcpiLocation;\n}\n\nexport const LocationHeader: React.FC<Props> = ({ location }) => {\n const { options } = useMapContext();\n const name = location?.name || \"-\";\n const text = options.locationBaseUrl ? (\n <a href={`${options.locationBaseUrl}/${location?.id}`}>{name}</a>\n ) : (\n name\n );\n return (\n <LocationRow icon={<img src={StationIcon} alt=\"station icon\" />} text={text} />\n );\n};\n\nexport default LocationHeader;\n","import React from \"react\";\n\ninterface Props {\n color: string;\n size?: number;\n}\n\nexport const StatusDot: React.FC<Props> = ({ color, size = 10 }) => (\n <span\n style={{\n display: \"block\",\n width: size,\n height: size,\n borderRadius: size,\n background: color,\n }}\n />\n);\n\nexport default StatusDot;\n","import React from \"react\";\nimport LocationRow from \"../../../components/LocationRow/LocationRow\";\nimport StatusDot from \"../../../components/StatusDot/StatusDot\";\nimport { useMapContext } from \"../../../contexts/Map\";\nimport { getStatusColorFromEvses } from \"../../../utils/formatters\";\nimport { OcpiEvse } from \"../../../types\";\n\ninterface Props {\n evses: OcpiEvse[];\n}\n\nexport const AvailabilitySummary: React.FC<Props> = ({ evses }) => {\n const { t } = useMapContext();\n const available = evses?.filter((e) => e.status === \"AVAILABLE\") || [];\n return (\n <LocationRow\n icon={<StatusDot color={getStatusColorFromEvses(evses)} />}\n text={`${available.length} / ${evses?.length || 0} ${t(\"evse.statusAvailable\")}`}\n />\n );\n};\n\nexport default AvailabilitySummary;\n","import React from \"react\";\nimport BuildingIcon from \"../../../assets/building-icon.svg\";\nimport LocationRow from \"../../../components/LocationRow/LocationRow\";\nimport { useMapContext } from \"../../../contexts/Map\";\nimport { OcpiSuboperator } from \"../../../types\";\nimport { LabelsType } from \"../../../i18n\";\nimport styles from \"./OperatorSection.module.css\";\n\ninterface Props {\n operator?: OcpiSuboperator;\n suboperator?: OcpiSuboperator;\n fallbackOperatorName?: string;\n fallbackSuboperatorName?: string;\n}\n\ntype Role = {\n labelKey: keyof LabelsType;\n name?: string;\n website?: string;\n logoUrl?: string;\n};\n\nconst OperatorBlock: React.FC<{ role: Role; showRoleLabel: boolean }> = ({\n role,\n showRoleLabel,\n}) => {\n const { t } = useMapContext();\n if (!role.name) return null;\n return (\n <div\n className={styles.block}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 2,\n marginBottom: 8,\n }}\n >\n {showRoleLabel && (\n <div\n className={styles.role}\n style={{\n fontSize: 11,\n textTransform: \"uppercase\",\n color: \"var(--roadmap-muted-color, #6a6a6a)\",\n letterSpacing: \"0.04em\",\n }}\n >\n {t(role.labelKey)}\n </div>\n )}\n <div\n className={styles.header}\n style={{ display: \"flex\", alignItems: \"center\", gap: 8 }}\n >\n {role.logoUrl && (\n <img\n className={styles.logo}\n src={role.logoUrl}\n alt={`${role.name} logo`}\n style={{\n maxHeight: 20,\n maxWidth: 80,\n width: \"auto\",\n height: \"auto\",\n objectFit: \"contain\",\n display: \"block\",\n }}\n />\n )}\n <div\n className={styles.name}\n style={{ fontSize: 13, fontWeight: 600 }}\n >\n {role.name}\n </div>\n </div>\n {role.website && (\n <a\n className={styles.website}\n href={role.website}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{\n fontSize: 12,\n color: \"var(--roadmap-brand-color)\",\n textDecoration: \"none\",\n wordBreak: \"break-all\",\n }}\n >\n {t(\"location.visitWebsite\")}\n </a>\n )}\n </div>\n );\n};\n\nexport const OperatorSection: React.FC<Props> = ({\n operator,\n suboperator,\n fallbackOperatorName,\n fallbackSuboperatorName,\n}) => {\n const { t } = useMapContext();\n\n const subRole: Role = {\n labelKey: \"location.suboperator\",\n name: suboperator?.name || fallbackSuboperatorName,\n website: suboperator?.website,\n logoUrl: suboperator?.logo?.thumbnail || suboperator?.logo?.url,\n };\n const opRole: Role = {\n labelKey: \"location.operator\",\n name: operator?.name || fallbackOperatorName,\n website: operator?.website,\n logoUrl: operator?.logo?.thumbnail || operator?.logo?.url,\n };\n\n const role = subRole.name ? subRole : opRole.name ? opRole : null;\n if (!role) return null;\n\n return (\n <LocationRow\n icon={<img src={BuildingIcon} alt=\"building icon\" />}\n text={t(\"location.operatorInfo\")}\n hint={role.name}\n >\n <OperatorBlock role={role} showRoleLabel={false} />\n </LocationRow>\n );\n};\n\nexport default OperatorSection;\n","import { LabelsType } from \"../i18n\";\n\nexport type RegularHours = {\n weekday: number;\n period_begin: string;\n period_end: string;\n};\n\nexport type ExceptionalPeriod = {\n period_begin: string;\n period_end: string;\n};\n\nexport type OpeningTimes = {\n twentyfourseven: boolean;\n regular_hours?: RegularHours[];\n exceptional_openings?: ExceptionalPeriod[];\n exceptional_closings?: ExceptionalPeriod[];\n};\n\ntype Translate = (key: keyof LabelsType, args?: Record<string, string>) => string;\n\nconst WEEKDAY_KEYS: Array<keyof LabelsType> = [\n \"weekday.mon\",\n \"weekday.tue\",\n \"weekday.wed\",\n \"weekday.thu\",\n \"weekday.fri\",\n \"weekday.sat\",\n \"weekday.sun\",\n];\n\nexport function getWeekdayLabel(t: Translate, weekday: number): string {\n const key = WEEKDAY_KEYS[weekday - 1];\n return key ? t(key) : \"\";\n}\n\nexport function groupRegularHoursByWeekday(\n regularHours: RegularHours[] | undefined,\n): Record<number, RegularHours[]> {\n const grouped: Record<number, RegularHours[]> = {};\n for (let i = 1; i <= 7; i++) grouped[i] = [];\n (regularHours || []).forEach((entry) => {\n if (entry.weekday >= 1 && entry.weekday <= 7) {\n grouped[entry.weekday].push(entry);\n }\n });\n for (const day of Object.keys(grouped)) {\n grouped[Number(day)].sort((a, b) =>\n a.period_begin.localeCompare(b.period_begin),\n );\n }\n return grouped;\n}\n\nexport function formatPeriod(begin: string, end: string): string {\n return `${begin} – ${end}`;\n}\n\nfunction timeToMinutes(time: string): number {\n const [h, m] = time.split(\":\").map(Number);\n return h * 60 + (m || 0);\n}\n\nfunction jsDayToOcpiWeekday(jsDay: number): number {\n // JS: 0=Sun..6=Sat. OCPI: 1=Mon..7=Sun.\n return jsDay === 0 ? 7 : jsDay;\n}\n\nfunction dateToYMD(d: Date): string {\n const y = d.getFullYear();\n const m = String(d.getMonth() + 1).padStart(2, \"0\");\n const day = String(d.getDate()).padStart(2, \"0\");\n return `${y}-${m}-${day}`;\n}\n\nfunction isInExceptional(\n periods: ExceptionalPeriod[] | undefined,\n now: Date,\n): ExceptionalPeriod | null {\n if (!periods) return null;\n const t = now.getTime();\n for (const p of periods) {\n const begin = new Date(p.period_begin).getTime();\n const end = new Date(p.period_end).getTime();\n if (!isNaN(begin) && !isNaN(end) && t >= begin && t <= end) return p;\n }\n return null;\n}\n\nexport type OpenStatus = {\n open: boolean;\n nextChange?: { time: string; label: \"opens\" | \"closes\" };\n};\n\nexport function isOpenNow(\n openingTimes: OpeningTimes | undefined,\n now: Date = new Date(),\n): OpenStatus {\n if (!openingTimes) return { open: false };\n if (openingTimes.twentyfourseven) return { open: true };\n\n const closing = isInExceptional(openingTimes.exceptional_closings, now);\n if (closing) {\n return {\n open: false,\n nextChange: {\n time: new Date(closing.period_end).toISOString().slice(11, 16),\n label: \"opens\",\n },\n };\n }\n\n const opening = isInExceptional(openingTimes.exceptional_openings, now);\n if (opening) {\n return {\n open: true,\n nextChange: {\n time: new Date(opening.period_end).toISOString().slice(11, 16),\n label: \"closes\",\n },\n };\n }\n\n const grouped = groupRegularHoursByWeekday(openingTimes.regular_hours);\n const todayWeekday = jsDayToOcpiWeekday(now.getDay());\n const prevWeekday = todayWeekday === 1 ? 7 : todayWeekday - 1;\n const nowMinutes = now.getHours() * 60 + now.getMinutes();\n\n // Check overnight period from previous day still active\n for (const p of grouped[prevWeekday]) {\n const begin = timeToMinutes(p.period_begin);\n const end = timeToMinutes(p.period_end);\n if (end < begin || end === 0) {\n // wraps past midnight\n const endToday = end === 0 ? 24 * 60 : end;\n if (nowMinutes < endToday) {\n return {\n open: true,\n nextChange: { time: p.period_end, label: \"closes\" },\n };\n }\n }\n }\n\n // Check today's periods\n for (const p of grouped[todayWeekday]) {\n const begin = timeToMinutes(p.period_begin);\n const end = timeToMinutes(p.period_end);\n const wraps = end < begin || end === 0;\n const effectiveEnd = wraps ? 24 * 60 : end;\n if (nowMinutes >= begin && nowMinutes < effectiveEnd) {\n return {\n open: true,\n nextChange: { time: p.period_end, label: \"closes\" },\n };\n }\n if (nowMinutes < begin) {\n return {\n open: false,\n nextChange: { time: p.period_begin, label: \"opens\" },\n };\n }\n }\n\n // Find next opening across following days\n for (let i = 1; i <= 7; i++) {\n const wd = ((todayWeekday - 1 + i) % 7) + 1;\n const periods = grouped[wd];\n if (periods.length > 0) {\n return {\n open: false,\n nextChange: { time: periods[0].period_begin, label: \"opens\" },\n };\n }\n }\n\n return { open: false };\n}\n\nexport function getFutureExceptionalPeriods(\n periods: ExceptionalPeriod[] | undefined,\n now: Date = new Date(),\n): ExceptionalPeriod[] {\n if (!periods) return [];\n const t = now.getTime();\n return periods.filter((p) => {\n const end = new Date(p.period_end).getTime();\n return !isNaN(end) && end >= t;\n });\n}\n\nexport function formatExceptionalRange(p: ExceptionalPeriod): string {\n const begin = new Date(p.period_begin);\n const end = new Date(p.period_end);\n if (isNaN(begin.getTime()) || isNaN(end.getTime())) {\n return `${p.period_begin} – ${p.period_end}`;\n }\n const sameDay = dateToYMD(begin) === dateToYMD(end);\n const beginStr = `${dateToYMD(begin)} ${begin\n .toISOString()\n .slice(11, 16)}`;\n const endStr = sameDay\n ? end.toISOString().slice(11, 16)\n : `${dateToYMD(end)} ${end.toISOString().slice(11, 16)}`;\n return `${beginStr} – ${endStr}`;\n}\n","import React from \"react\";\nimport LocationRow from \"../../../components/LocationRow/LocationRow\";\nimport { Clock } from \"../../../components/Icons/Icons\";\nimport { useMapContext } from \"../../../contexts/Map\";\nimport {\n OpeningTimes,\n isOpenNow,\n groupRegularHoursByWeekday,\n formatPeriod,\n getWeekdayLabel,\n getFutureExceptionalPeriods,\n formatExceptionalRange,\n} from \"../../../utils/openingTimes\";\nimport styles from \"./OpeningHours.module.css\";\n\ninterface Props {\n openingTimes?: OpeningTimes;\n chargingWhenClosed?: boolean;\n}\n\nexport const OpeningHours: React.FC<Props> = ({\n openingTimes,\n chargingWhenClosed,\n}) => {\n const { t } = useMapContext();\n if (!openingTimes) return null;\n\n const status = isOpenNow(openingTimes);\n const grouped = groupRegularHoursByWeekday(openingTimes.regular_hours);\n const futureClosings = getFutureExceptionalPeriods(\n openingTimes.exceptional_closings,\n );\n const futureOpenings = getFutureExceptionalPeriods(\n openingTimes.exceptional_openings,\n );\n\n const headerText = openingTimes.twentyfourseven\n ? t(\"location.open24_7\")\n : status.open\n ? t(\"location.openNow\")\n : t(\"location.closedNow\");\n\n const headerHint =\n !openingTimes.twentyfourseven && status.nextChange\n ? status.nextChange.label === \"closes\"\n ? t(\"location.closesAt\", { time: status.nextChange.time })\n : t(\"location.opensAt\", { time: status.nextChange.time })\n : undefined;\n\n const hasBody =\n !openingTimes.twentyfourseven ||\n futureClosings.length > 0 ||\n futureOpenings.length > 0 ||\n !!chargingWhenClosed;\n\n const dayStyle: React.CSSProperties = {\n display: \"flex\",\n fontSize: 12,\n lineHeight: 1.5,\n };\n const dayLabelStyle: React.CSSProperties = {\n minWidth: 56,\n fontWeight: 600,\n };\n const dayValueStyle: React.CSSProperties = { flex: \"1 1 auto\" };\n const exceptionalStyle: React.CSSProperties = {\n fontSize: 11,\n color: \"var(--roadmap-muted-color, #6a6a6a)\",\n marginTop: 6,\n };\n const exceptionalHeaderStyle: React.CSSProperties = {\n fontWeight: 600,\n marginBottom: 2,\n };\n const footnoteStyle: React.CSSProperties = {\n fontSize: 11,\n fontStyle: \"italic\",\n color: \"var(--roadmap-muted-color, #6a6a6a)\",\n marginTop: 6,\n };\n\n return (\n <LocationRow icon={<Clock />} text={headerText} hint={headerHint}>\n {hasBody ? (\n <>\n {!openingTimes.twentyfourseven &&\n [1, 2, 3, 4, 5, 6, 7].map((wd) => {\n const periods = grouped[wd];\n const value =\n periods.length === 0\n ? t(\"location.closed\")\n : periods\n .map((p) => formatPeriod(p.period_begin, p.period_end))\n .join(\", \");\n return (\n <div key={wd} className={styles.day} style={dayStyle}>\n <div className={styles.dayLabel} style={dayLabelStyle}>\n {getWeekdayLabel(t, wd)}\n </div>\n <div className={styles.dayValue} style={dayValueStyle}>\n {value}\n </div>\n </div>\n );\n })}\n {futureClosings.length > 0 && (\n <div className={styles.exceptional} style={exceptionalStyle}>\n <div\n className={styles.exceptionalHeader}\n style={exceptionalHeaderStyle}\n >\n {t(\"location.exceptionalClosings\")}\n </div>\n {futureClosings.map((p, i) => (\n <div key={`c-${i}`}>{formatExceptionalRange(p)}</div>\n ))}\n </div>\n )}\n {futureOpenings.length > 0 && (\n <div className={styles.exceptional} style={exceptionalStyle}>\n <div\n className={styles.exceptionalHeader}\n style={exceptionalHeaderStyle}\n >\n {t(\"location.exceptionalOpenings\")}\n </div>\n {futureOpenings.map((p, i) => (\n <div key={`o-${i}`}>{formatExceptionalRange(p)}</div>\n ))}\n </div>\n )}\n {chargingWhenClosed && (\n <div className={styles.footnote} style={footnoteStyle}>\n {t(\"location.chargingWhenClosed\")}\n </div>\n )}\n </>\n ) : null}\n </LocationRow>\n );\n};\n\nexport default OpeningHours;\n","import React from \"react\";\nimport CarIcon from \"../../../assets/car-icon.svg\";\nimport LocationRow from \"../../../components/LocationRow/LocationRow\";\nimport { useMapContext } from \"../../../contexts/Map\";\nimport { getLocationLabel } from \"../../../utils/formatters\";\nimport { OcpiLocationType } from \"../../../types\";\n\ninterface Props {\n parkingType?: OcpiLocationType;\n}\n\nexport const ParkingType: React.FC<Props> = ({ parkingType }) => {\n const { t } = useMapContext();\n if (!parkingType || parkingType === \"PARKING_TYPE_UNKNOWN\") return null;\n return (\n <LocationRow\n icon={<img src={CarIcon} alt=\"parking icon\" />}\n text={getLocationLabel(t, parkingType)}\n />\n );\n};\n\nexport default ParkingType;\n","import React from \"react\";\nimport CarIcon from \"../../../assets/car-icon.svg\";\nimport LocationRow from \"../../../components/LocationRow/LocationRow\";\n\ninterface Props {\n accessibility?: string;\n}\n\nexport const ChargingAccessibility: React.FC<Props> = ({ accessibility }) => {\n if (!accessibility) return null;\n return (\n <LocationRow\n icon={<img src={CarIcon} alt=\"accessibility icon\" />}\n text={\n accessibility === \"TESLA\"\n ? \"Tesla vehicles only\"\n : \"All electric vehicles\"\n }\n />\n );\n};\n\nexport default ChargingAccessibility;\n","import React from \"react\";\nimport BoltIcon from \"../../../assets/bolt-icon.svg\";\nimport LocationRow from \"../../../components/LocationRow/LocationRow\";\nimport { OcpiEvse } from \"../../../types\";\n\ninterface Props {\n evse: OcpiEvse;\n}\n\nexport const EvseHeader: React.FC<Props> = ({ evse }) => (\n <LocationRow\n icon={<img src={BoltIcon} alt=\"power icon\" />}\n text={evse.evse_id || \"\"}\n hint={evse.physical_reference || undefined}\n />\n);\n\nexport default EvseHeader;\n","import React from \"react\";\nimport LocationRow from \"../../../components/LocationRow/LocationRow\";\nimport StatusDot from \"../../../components/StatusDot/StatusDot\";\nimport { useMapContext } from \"../../../contexts/Map\";\nimport { getStatusLabel, formatNumber } from \"../../../utils/formatters\";\nimport { getColorForStatus } from \"../../../utils/location\";\nimport {\n calculateMaxPower,\n ConnectorPowerType,\n} from \"../../../utils/ocpi\";\nimport { OcpiEvse } from \"../../../types\";\n\ninterface Props {\n evse: OcpiEvse;\n}\n\nexport const EvseStatus: React.FC<Props> = ({ evse }) => {\n const { t, language } = useMapContext();\n const first = evse.connectors[0];\n const maxKw =\n first?.power && first?.connectorPowerType\n ? `${formatNumber(\n language,\n Math.floor(\n calculateMaxPower(\n first as {\n power: {\n maxWatts: number;\n maxVoltage: number;\n maxAmperage: number;\n };\n connectorPowerType: ConnectorPowerType;\n },\n ),\n ),\n )}kW`\n : null;\n const text = [getStatusLabel(t, evse.status), maxKw].filter(Boolean).join(\", \");\n return (\n <LocationRow\n icon={<StatusDot color={getColorForStatus(evse.status)} />}\n text={text}\n />\n );\n};\n\nexport default EvseStatus;\n","import React from \"react\";\nimport LocationRow from \"../../../components/LocationRow/LocationRow\";\nimport { getSocketIcon, getSocketText } from \"../../../utils/formatters\";\nimport { OcpiConnector } from \"../../../types\";\n\ninterface Props {\n connector: OcpiConnector;\n}\n\nexport const ConnectorSocket: React.FC<Props> = ({ connector }) => (\n <LocationRow\n icon={<img src={getSocketIcon(connector)} alt=\"socket type\" />}\n text={getSocketText(connector)}\n />\n);\n\nexport default ConnectorSocket;\n","import React from \"react\";\nimport PricingIcon from \"../../../assets/pricing-icon.svg\";\nimport LocationRow from \"../../../components/LocationRow/LocationRow\";\nimport { useMapContext } from \"../../../contexts/Map\";\n\nexport const ConnectorPricing: React.FC = () => {\n const { t } = useMapContext();\n return (\n <LocationRow\n icon={<img src={PricingIcon} alt=\"pricing\" />}\n text={t(\"evse.pricing\")}\n />\n );\n};\n\nexport default ConnectorPricing;\n","import React from \"react\";\nimport ConnectorTariff from \"../../../components/ConnectorTariff/ConnectorTariff\";\nimport { CdrAdditionalCharge, OcpiTariff, Tariff } from \"../../../types\";\nimport { useMapContext } from \"../../../contexts/Map\";\n\nexport function transformTariff(tariff: OcpiTariff): Tariff {\n if (!tariff?.currency) return null;\n return {\n currency: tariff.currency,\n id: tariff.id,\n country_code: tariff.country_code,\n party_id: tariff.party_id,\n elements: (tariff?.elements || []).map((element) => ({\n priceComponents: (element?.price_components || []).map((component) => ({\n type: (() => {\n switch (component.type) {\n case \"FLAT\":\n return \"FLAT\";\n case \"TIME\":\n return \"TIME\";\n case \"ENERGY\":\n return \"ENERGY\";\n case \"PARKING_TIME\":\n return \"PARKING_TIME\";\n case \"CONGESTION_TIME\":\n return \"CONGESTION_TIME\";\n }\n })() as \"FLAT\" | \"TIME\" | \"ENERGY\" | \"PARKING_TIME\" | \"CONGESTION_TIME\",\n price: component.price,\n vat: component.vat,\n stepSize: component.step_size,\n })),\n ...(element?.restrictions\n ? {\n restrictions: {\n startTime: element?.restrictions?.start_time,\n endTime: element?.restrictions?.end_time,\n startDate: element?.restrictions?.start_date,\n endDate: element?.restrictions?.end_date,\n dayOfWeek: element?.restrictions?.day_of_week,\n minDuration: element?.restrictions?.min_duration,\n maxDuration: element?.restrictions?.max_duration,\n },\n }\n : {}),\n })),\n };\n}\n\ninterface Props {\n tariff: any;\n additionalCharges: CdrAdditionalCharge[];\n}\n\nconst TariffV2: React.FC<Props> = ({ tariff, additionalCharges }) => {\n const { t } = useMapContext();\n\n // Check if tariff has congestion pricing\n const hasCongestionPricing = tariff?.elements?.some((element: any) =>\n element?.price_components?.some((pc: any) => pc.type === \"CONGESTION_TIME\"),\n );\n\n return (\n <>\n {hasCongestionPricing && (\n <div\n style={{\n padding: \"0.8rem\",\n margin: \"0.8rem 0\",\n backgroundColor: \"#FFF4E5\",\n borderLeft: \"3px solid #FF9800\",\n borderRadius: \"4px\",\n fontSize: \"13px\",\n color: \"#663C00\",\n }}\n >\n {t(\"tariff.congestionPricing\")}\n </div>\n )}\n <ConnectorTariff\n tariff={transformTariff(tariff as any)}\n cdrAdditionalCharges={additionalCharges}\n />\n </>\n );\n};\n\nexport default TariffV2;\n","import { DayOfWeek, PriceComponent, Tariff, TariffElement } from \"../types\";\nimport { isBaseTarif } from \"./ocpi\";\n\nconst JS_DAY_TO_OCPI: DayOfWeek[] = [\n \"SUNDAY\",\n \"MONDAY\",\n \"TUESDAY\",\n \"WEDNESDAY\",\n \"THURSDAY\",\n \"FRIDAY\",\n \"SATURDAY\",\n];\n\nfunction timeToMinutes(time: string): number {\n const [h, m] = time.split(\":\").map(Number);\n return h * 60 + (m || 0);\n}\n\nfunction isInTimeWindow(start: string, end: string, now: Date): boolean {\n const cur = now.getHours() * 60 + now.getMinutes();\n const s = timeToMinutes(start);\n const e = timeToMinutes(end);\n if (e < s) return cur >= s || cur < e; // overnight wrap\n return cur >= s && cur < e;\n}\n\nexport function isElementActive(el: TariffElement, now: Date): boolean {\n if (isBaseTarif(el)) return true;\n const r = el.restrictions!;\n if (r.startTime && r.endTime && !isInTimeWindow(r.startTime, r.endTime, now)) {\n return false;\n }\n if (r.dayOfWeek && r.dayOfWeek.length > 0) {\n const today = JS_DAY_TO_OCPI[now.getDay()];\n if (!r.dayOfWeek.includes(today)) return false;\n }\n if (r.startDate) {\n const d = new Date(r.startDate);\n if (!isNaN(d.getTime()) && now < d) return false;\n }\n if (r.endDate) {\n const d = new Date(r.endDate);\n if (!isNaN(d.getTime()) && now > d) return false;\n }\n return true;\n}\n\nexport type ActiveTariffSelection = {\n elements: TariffElement[];\n currency: string;\n};\n\nfunction bucketKey(type: string, el: TariffElement): string {\n const minD = el.restrictions?.minDuration ?? 0;\n const maxD = el.restrictions?.maxDuration ?? 0;\n return `${type}:${minD}:${maxD}`;\n}\n\nexport function getActiveTariffElements(\n tariff: Tariff | null | undefined,\n now: Date = new Date(),\n): ActiveTariffSelection {\n if (!tariff) return { elements: [], currency: \"\" };\n const all = tariff.elements || [];\n const active = all.filter((el) => isElementActive(el, now));\n\n type Winner = { element: TariffElement; pc: PriceComponent; isBase: boolean };\n const byBucket: Record<string, Winner> = {};\n\n active.forEach((el) => {\n const isBase = isBaseTarif(el);\n (el.priceComponents || []).forEach((pc) => {\n const key = bucketKey(pc.type, el);\n const existing = byBucket[key];\n if (!existing || (existing.isBase && !isBase)) {\n byBucket[key] = { element: el, pc, isBase };\n }\n });\n });\n\n const elementToPcs = new Map<TariffElement, PriceComponent[]>();\n const order: TariffElement[] = [];\n Object.values(byBucket).forEach(({ element, pc }) => {\n if (!elementToPcs.has(element)) {\n elementToPcs.set(element, []);\n order.push(element);\n }\n elementToPcs.get(element)!.push(pc);\n });\n\n const elements: TariffElement[] = order.map((el) => ({\n ...el,\n priceComponents: elementToPcs.get(el)!,\n }));\n\n return { elements, currency: tariff.currency || \"\" };\n}\n","import React from \"react\";\nimport { useMapContext } from \"../../../contexts/Map\";\nimport { CdrAdditionalCharge, PriceComponent, TariffElement } from \"../../../types\";\nimport { LabelsType } from \"../../../i18n\";\n\nconst itemsRowStyle: React.CSSProperties = {\n display: \"flex\",\n flexWrap: \"wrap\",\n gap: 6,\n};\n\nconst itemStyle: React.CSSProperties = {\n fontSize: 12,\n lineHeight: 1.3,\n padding: \"1px 8px\",\n borderRadius: 6,\n background:\n \"color-mix(in srgb, var(--roadmap-brand-color, #6102d3) 12%, transparent)\",\n color: \"var(--roadmap-brand-color, #6102d3)\",\n border:\n \"1px solid color-mix(in srgb, var(--roadmap-brand-color, #6102d3) 30%, transparent)\",\n};\n\nconst itemHighlightStyle: React.CSSProperties = itemStyle;\n\nconst STRING_BY_TYPE: Record<string, keyof LabelsType> = {\n ENERGY: \"tariffPriceComponent.energy\",\n TIME: \"tariffPriceComponent.time\",\n FLAT: \"tariffPriceComponent.flat\",\n PARKING_TIME: \"tariffPriceComponent.parkingTime\",\n};\n\nconst DISPLAY_ORDER = [\"ENERGY\", \"TIME\", \"FLAT\", \"PARKING_TIME\"];\n\nfunction formatCurrency(value: number, currency: string): string {\n return new Intl.NumberFormat(undefined, {\n style: \"currency\",\n currency: currency || \"EUR\",\n maximumFractionDigits: 2,\n }).format(value);\n}\n\nfunction priceWithVat(pc: PriceComponent): number {\n const vat = pc.vat ? pc.vat / 100 : 0;\n return pc.price + pc.price * vat;\n}\n\ntype RenderablePc = {\n pc: PriceComponent;\n restrictions?: TariffElement[\"restrictions\"];\n};\n\nfunction isFreeParkingWindow(\n pc: PriceComponent,\n restrictions: TariffElement[\"restrictions\"] | undefined,\n): boolean {\n return (\n pc.type === \"PARKING_TIME\" &&\n (pc.price || 0) === 0 &&\n !!restrictions?.maxDuration &&\n (!restrictions.minDuration || restrictions.minDuration === 0)\n );\n}\n\nfunction collectAndSort(\n elements: TariffElement[],\n skipZero: boolean,\n): RenderablePc[] {\n const all: RenderablePc[] = [];\n elements.forEach((el) => {\n (el.priceComponents || []).forEach((pc) => {\n if (skipZero && (pc.price || 0) <= 0 && !isFreeParkingWindow(pc, el.restrictions)) {\n return;\n }\n all.push({ pc, restrictions: el.restrictions });\n });\n });\n return all.sort((a, b) => {\n const ai = DISPLAY_ORDER.indexOf(a.pc.type);\n const bi = DISPLAY_ORDER.indexOf(b.pc.type);\n if (ai === -1) return 1;\n if (bi === -1) return -1;\n return ai - bi;\n });\n}\n\ninterface Props {\n elements: TariffElement[];\n currency: string;\n skipZero?: boolean;\n highlight?: boolean;\n additionalCharges?: CdrAdditionalCharge[];\n}\n\nexport const TariffChips: React.FC<Props> = ({\n elements,\n currency,\n skipZero = true,\n highlight = false,\n additionalCharges = [],\n}) => {\n const { t } = useMapContext();\n const items = collectAndSort(elements, skipZero);\n const chipStyle = highlight ? itemHighlightStyle : itemStyle;\n if (items.length === 0 && additionalCharges.length === 0) return null;\n return (\n <div style={itemsRowStyle}>\n {items.map(({ pc, restrictions }, i) => {\n if (isFreeParkingWindow(pc, restrictions)) {\n return (\n <div key={`pc-${i}`} style={chipStyle}>\n {t(\"tariffPriceComponent.parkingTimeWait\", {\n minutes: String(Math.floor(restrictions!.maxDuration! / 60)),\n })}\n </div>\n );\n }\n const labelKey = STRING_BY_TYPE[pc.type];\n if (!labelKey) return null;\n return (\n <div key={`pc-${i}`} style={chipStyle}>\n {t(labelKey, {\n total: formatCurrency(priceWithVat(pc), currency),\n })}\n </div>\n );\n })}\n {additionalCharges.map((c) => {\n if (c.type !== \"FLAT_FEE\") return null;\n const total = c.price + (c.vat ? c.price * (c.vat / 100) : 0);\n return (\n <div key={`cdr-${c.id}`} style={chipStyle}>\n {t(\"cdrPrice.flatFee\", {\n total: formatCurrency(total, currency),\n })}\n </div>\n );\n })}\n </div>\n );\n};\n\nexport default TariffChips;\n","import React, { ReactNode } from \"react\";\nimport { CdrAdditionalCharge, TariffElement } from \"../../../types\";\nimport TariffChips from \"./TariffChips\";\n\ninterface Props {\n elements: TariffElement[];\n currency: string;\n label?: ReactNode;\n trailing?: ReactNode;\n highlight?: boolean;\n additionalCharges?: CdrAdditionalCharge[];\n onClick?: () => void;\n}\n\nconst containerStyle: React.CSSProperties = {\n display: \"flex\",\n flexDirection: \"column\",\n gap: 4,\n padding: \"6px 0\",\n};\n\nconst headerStyle: React.CSSProperties = {\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 8,\n fontSize: 12,\n color: \"var(--roadmap-muted-color, #6a6a6a)\",\n};\n\nconst rowStyle: React.CSSProperties = {\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 8,\n};\n\nexport const TariffLine: React.FC<Props> = ({\n elements,\n currency,\n label,\n trailing,\n highlight = false,\n additionalCharges,\n onClick,\n}) => {\n const interactive = !!onClick;\n const containerWithClick: React.CSSProperties = interactive\n ? { ...containerStyle, cursor: \"pointer\", userSelect: \"none\" }\n : containerStyle;\n\n const handleKey = (e: React.KeyboardEvent) => {\n if (!onClick) return;\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onClick();\n }\n };\n\n return (\n <div\n style={containerWithClick}\n role={interactive ? \"button\" : undefined}\n tabIndex={interactive ? 0 : undefined}\n onClick={onClick}\n onKeyDown={interactive ? handleKey : undefined}\n >\n {label != null && <div style={headerStyle}>{label}</div>}\n <div style={rowStyle}>\n <TariffChips\n elements={elements}\n currency={currency}\n highlight={highlight}\n additionalCharges={additionalCharges}\n />\n {trailing}\n </div>\n </div>\n );\n};\n\nexport default TariffLine;\n","import React, { useState } from \"react\";\nimport { useMapContext } from \"../../../contexts/Map\";\nimport { Check } from \"../../../components/Icons/Icons\";\n\ninterface Props {\n type: string;\n country_code: string;\n party_id: string;\n location_id: string;\n evse_uid: string;\n}\n\ntype Status = \"idle\" | \"submitting\" | \"done\" | \"error\";\n\nconst buttonStyle: React.CSSProperties = {\n fontSize: 12,\n fontWeight: 600,\n padding: \"4px 12px\",\n borderRadius: 6,\n cursor: \"pointer\",\n background: \"transparent\",\n color: \"var(--roadmap-brand-color, #6102d3)\",\n border:\n \"1px solid color-mix(in srgb, var(--roadmap-brand-color, #6102d3) 40%, transparent)\",\n};\n\nconst submittingStyle: React.CSSProperties = {\n ...buttonStyle,\n cursor: \"default\",\n opacity: 0.6,\n};\n\nconst doneStyle: React.CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n gap: 6,\n fontSize: 12,\n color: \"var(--roadmap-brand-color, #6102d3)\",\n};\n\nconst errorStyle: React.CSSProperties = {\n fontSize: 11,\n color: \"var(--roadmap-muted-color, #6a6a6a)\",\n marginTop: 6,\n};\n\nexport const ReportProblemButton: React.FC<Props> = ({\n type,\n country_code,\n party_id,\n location_id,\n evse_uid,\n}) => {\n const { t, reportProblem } = useMapContext();\n const [status, setStatus] = useState<Status>(\"idle\");\n\n const submit = async (e: React.MouseEvent) => {\n e.stopPropagation();\n if (status === \"submitting\" || status === \"done\") return;\n setStatus(\"submitting\");\n try {\n await reportProblem?.({\n type,\n country_code,\n party_id,\n location_id,\n evse_uid,\n });\n setStatus(\"done\");\n } catch {\n setStatus(\"error\");\n }\n };\n\n if (status === \"done\") {\n return (\n <div style={doneStyle}>\n <Check />\n <span>{t(\"tariff.reportThanks\")}</span>\n </div>\n );\n }\n\n return (\n <>\n <button\n type=\"button\"\n onClick={submit}\n disabled={status === \"submitting\"}\n style={status === \"submitting\" ? submittingStyle : buttonStyle}\n >\n {t(\"tariff.report\")}\n </button>\n {status === \"error\" && (\n <div style={errorStyle}>{t(\"tariff.reportError\")}</div>\n )}\n </>\n );\n};\n\nexport default ReportProblemButton;\n","import React from \"react\";\nimport { useMapContext } from \"../../../contexts/Map\";\nimport ReportProblemButton from \"./ReportProblemButton\";\n\ninterface Props {\n country_code: string;\n party_id: string;\n location_id: string;\n evse_uid: string;\n}\n\nconst containerStyle: React.CSSProperties = {\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"flex-start\",\n gap: 10,\n padding: \"14px 14px\",\n marginTop: 6,\n borderRadius: 8,\n background:\n \"color-mix(in srgb, var(--roadmap-text-color, #2a2a2a) 4%, transparent)\",\n};\n\nconst textStyle: React.CSSProperties = {\n fontSize: 12,\n fontStyle: \"italic\",\n color: \"var(--roadmap-muted-color, #6a6a6a)\",\n};\n\nexport const NoTariff: React.FC<Props> = ({\n country_code,\n party_id,\n location_id,\n evse_uid,\n}) => {\n const { t } = useMapContext();\n return (\n <div style={containerStyle}>\n <div style={textStyle}>{t(\"tariffPriceComponent.noTariff\")}</div>\n <ReportProblemButton\n type=\"missing_tariff\"\n country_code={country_code}\n party_id={party_id}\n location_id={location_id}\n evse_uid={evse_uid}\n />\n </div>\n );\n};\n\nexport default NoTariff;\n","import React from \"react\";\nimport { ChevronRight } from \"../../../components/Icons/Icons\";\nimport { CdrAdditionalCharge, OcpiTariff } from \"../../../types\";\nimport { transformTariff } from \"./Tariff\";\nimport { getActiveTariffElements } from \"../../../utils/activeTariff\";\nimport TariffLine from \"./TariffLine\";\nimport NoTariff from \"./NoTariff\";\n\ninterface Props {\n tariff?: OcpiTariff;\n additionalCharges?: CdrAdditionalCharge[];\n evseId?: string;\n evseUid: string;\n countryCode: string;\n partyId: string;\n locationId: string;\n locationName: string;\n setView: (view: string, args?: any) => void;\n}\n\nconst chevronStyle: React.CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n color: \"var(--roadmap-muted-color, #6a6a6a)\",\n flex: \"0 0 auto\",\n};\n\nexport const ActiveTariff: React.FC<Props> = ({\n tariff,\n additionalCharges = [],\n evseId,\n evseUid,\n countryCode,\n partyId,\n locationId,\n locationName,\n setView,\n}) => {\n const transformed = tariff ? transformTariff(tariff) : null;\n const { elements: rawElements, currency } =\n getActiveTariffElements(transformed);\n\n const activeElements = rawElements\n .map((el) => ({\n ...el,\n priceComponents: (el.priceComponents || []).filter((pc) => {\n if ((pc.price || 0) > 0) return true;\n if (\n pc.type === \"PARKING_TIME\" &&\n el.restrictions?.maxDuration &&\n (!el.restrictions.minDuration || el.restrictions.minDuration === 0)\n ) {\n return true;\n }\n return false;\n }),\n }))\n .filter((el) => el.priceComponents.length > 0);\n\n const hasActiveTariff = !!transformed && activeElements.length > 0;\n\n if (!hasActiveTariff) {\n return (\n <>\n <NoTariff\n country_code={countryCode}\n party_id={partyId}\n location_id={locationId}\n evse_uid={evseUid}\n />\n {additionalCharges.length > 0 && (\n <TariffLine\n elements={[]}\n currency={currency}\n additionalCharges={additionalCharges}\n />\n )}\n </>\n );\n }\n\n const navigate = () =>\n setView(\"tariffDetails\", {\n tariff,\n additionalCharges,\n locationName,\n evseId,\n evseUid,\n countryCode,\n partyId,\n locationId,\n });\n\n return (\n <TariffLine\n elements={activeElements}\n currency={currency}\n highlight\n additionalCharges={additionalCharges}\n onClick={navigate}\n trailing={\n <span style={chevronStyle}>\n <ChevronRight />\n </span>\n }\n />\n );\n};\n\nexport default ActiveTariff;\n","import React from \"react\";\nimport ConnectorSocket from \"./ConnectorSocket\";\nimport ConnectorPricing from \"./ConnectorPricing\";\nimport ActiveTariff from \"./ActiveTariff\";\nimport {\n CdrAdditionalCharge,\n OcpiConnector,\n OcpiLocation,\n OcpiTariff,\n Tariff as TariffType,\n} from \"../../../types\";\n\ninterface Props {\n connector: OcpiConnector;\n tariffs?: TariffType[];\n cdrAdditionalCharges: CdrAdditionalCharge[];\n location: OcpiLocation;\n evseId?: string;\n evseUid?: string;\n setView: (view: string, args?: any) => void;\n}\n\nexport const Connector: React.FC<Props> = ({\n connector,\n tariffs,\n cdrAdditionalCharges,\n location,\n evseId,\n evseUid,\n setView,\n}) => {\n const tariff = tariffs?.find((tr) => tr.id === connector?.tariff_ids?.[0]);\n\n return (\n <>\n <ConnectorSocket connector={connector} />\n <ConnectorPricing />\n <ActiveTariff\n tariff={tariff as unknown as OcpiTariff}\n additionalCharges={cdrAdditionalCharges}\n evseId={evseId}\n evseUid={evseUid || \"\"}\n countryCode={location.country_code}\n partyId={location.party_id}\n locationId={location.id}\n locationName={location.name}\n setView={setView}\n />\n </>\n );\n};\n\nexport default Connector;\n","import React from \"react\";\nimport EvseHeader from \"./EvseHeader\";\nimport EvseStatus from \"./EvseStatus\";\nimport Connector from \"./Connector\";\nimport { getColorForStatus } from \"../../../utils/location\";\nimport {\n CdrAdditionalCharge,\n OcpiEvse,\n OcpiLocation,\n Tariff as TariffType,\n} from \"../../../types\";\n\ninterface Props {\n evse: OcpiEvse;\n tariffs?: TariffType[];\n cdrAdditionalCharges: CdrAdditionalCharge[];\n location: OcpiLocation;\n setView: (view: string, args?: any) => void;\n}\n\nconst cardStyle: React.CSSProperties = {\n background:\n \"color-mix(in srgb, var(--roadmap-text-color, #2a2a2a) 4%, transparent)\",\n borderRadius: 8,\n padding: \"8px 12px\",\n marginTop: 12,\n};\n\nconst connectorBaseStyle: React.CSSProperties = {\n paddingLeft: 10,\n marginTop: 10,\n};\n\nexport const Evse: React.FC<Props> = ({\n evse,\n tariffs,\n cdrAdditionalCharges,\n location,\n setView,\n}) => {\n const statusColor = getColorForStatus(evse.status);\n const connectorStyle: React.CSSProperties = {\n ...connectorBaseStyle,\n borderLeft: `3px solid ${statusColor}`,\n borderRadius: 2,\n };\n\n return (\n <div style={cardStyle}>\n <EvseHeader evse={evse} />\n <EvseStatus evse={evse} />\n {evse.connectors.map((connector, i) => (\n <div key={`connector-${i}`} style={connectorStyle}>\n <Connector\n connector={connector}\n tariffs={tariffs}\n cdrAdditionalCharges={cdrAdditionalCharges}\n location={location}\n evseId={evse.evse_id}\n evseUid={evse.uid}\n setView={setView}\n />\n </div>\n ))}\n </div>\n );\n};\n\nexport default Evse;\n","import React from \"react\";\nimport { useMapContext } from \"../../../contexts/Map\";\nimport { OcpiDisplayText } from \"../../../types\";\n\ninterface Props {\n directions?: OcpiDisplayText[];\n}\n\nconst containerStyle: React.CSSProperties = {\n fontSize: 12,\n fontStyle: \"italic\",\n lineHeight: 1.5,\n color: \"var(--roadmap-text-color, #2a2a2a)\",\n padding: \"12px 0 12px 12px\",\n margin: \"8px 0\",\n borderLeft:\n \"3px solid color-mix(in srgb, var(--roadmap-text-color, #2a2a2a) 20%, transparent)\",\n};\n\nfunction pickText(\n directions: OcpiDisplayText[],\n language: string,\n): string | undefined {\n if (!directions || directions.length === 0) return undefined;\n const lang = (language || \"\").toLowerCase();\n const match = directions.find((d) => d.language?.toLowerCase() === lang);\n if (match) return match.text;\n const en = directions.find((d) => d.language?.toLowerCase() === \"en\");\n return (en || directions[0])?.text;\n}\n\nexport const Directions: React.FC<Props> = ({ directions }) => {\n const { language } = useMapContext();\n const text = pickText(directions || [], language);\n if (!text) return null;\n return <div style={containerStyle}>{text}</div>;\n};\n\nexport default Directions;\n","import React from \"react\";\nimport styles from \"../locations.module.css\";\nimport LocationHeader from \"./LocationHeader\";\nimport AvailabilitySummary from \"./AvailabilitySummary\";\nimport OperatorSection from \"./OperatorSection\";\nimport OpeningHours from \"./OpeningHours\";\nimport ParkingType from \"./ParkingType\";\nimport ChargingAccessibility from \"./ChargingAccessibility\";\nimport Evse from \"./Evse\";\nimport Directions from \"./Directions\";\nimport { useMapContext } from \"../../../contexts/Map\";\nimport { OcpiLocation } from \"../../../types\";\n\ninterface Props {\n currentLocation: OcpiLocation;\n setView: (view: string, args?: any) => void;\n}\n\nexport const Location: React.FC<Props> = ({ currentLocation, setView }) => {\n const { options } = useMapContext();\n\n return (\n <div className={styles.container}>\n {options.context === \"cpo\" && (\n <div className={styles.publishingMode}>\n {currentLocation?.publish ? \"Public location\" : \"Private location\"}\n </div>\n )}\n\n <Directions directions={currentLocation.directions} />\n <LocationHeader location={currentLocation} />\n <AvailabilitySummary evses={currentLocation.evses} />\n\n <OperatorSection\n operator={currentLocation.operator}\n suboperator={currentLocation.suboperator || currentLocation.subOperator}\n fallbackOperatorName={\n currentLocation.operator_name || currentLocation.operatorName\n }\n fallbackSuboperatorName={\n currentLocation.suboperator_name || currentLocation.suboperatorName\n }\n />\n\n <OpeningHours\n openingTimes={currentLocation.opening_times}\n chargingWhenClosed={currentLocation.charging_when_closed}\n />\n\n <ParkingType parkingType={currentLocation.parkingType} />\n <ChargingAccessibility accessibility={currentLocation.charging_accessibility} />\n\n {currentLocation.evses?.map((evse) => (\n <Evse\n key={`${evse.evse_id}-${evse.uid}`}\n evse={evse}\n tariffs={currentLocation.tariffs}\n cdrAdditionalCharges={currentLocation.cdrAdditionalCharges || []}\n location={currentLocation}\n setView={setView}\n />\n ))}\n </div>\n );\n};\n\nexport default Location;\n","import React, { useEffect, useState } from \"react\";\nimport styles from \"./locations.module.css\";\nimport LocationPlaceholder from \"../../components/LocationPlaceholder/LocationPlaceholder\";\nimport { ChevronLeft, ChevronRight } from \"../../components/Icons/Icons\";\nimport Debug from \"../../components/Debug/Debug\";\nimport { useMapContext } from \"../../contexts/Map\";\nimport { useStackContext } from \"../../components/Stack/Stack\";\nimport LocationDetailsV1 from \"./LocationDetailsV1\";\nimport Location from \"./v2/Location\";\nimport { OcpiLocation } from \"../../types\";\n\ninterface Props {}\n\nconst Locations: React.FC<Props> = () => {\n const { setView } = useStackContext();\n const { locations, locationsStatus, options } = useMapContext();\n const [locationIndex, setLocationIndex] = useState(0);\n\n useEffect(() => {\n setLocationIndex(0);\n }, [locations]);\n\n const currentLocation = locations[locationIndex];\n\n if (locationsStatus.type === \"loading\" || !currentLocation) {\n return (\n <div className={styles.container}>\n <LocationPlaceholder />\n </div>\n );\n }\n\n const { evses = [], cdrAdditionalCharges } = currentLocation;\n\n const canNext = locationIndex < locations.length - 1;\n const canPrev = locationIndex > 0;\n\n const debugMode = window.location?.search?.includes(\"debug\");\n\n const label = () => {\n switch (options.version) {\n case \"v2\":\n return [currentLocation?.address, currentLocation?.city];\n default:\n //@ts-ignore\n return [currentLocation?.address, currentLocation?.city];\n }\n };\n const isV2 = options.version === \"v2\";\n\n return (\n <>\n {debugMode && currentLocation && <Debug location={currentLocation} />}\n <div className={styles.headerContainer}>\n <div className={styles.header}>\n {locations.length > 1 && (\n <div className={styles.pagingation}>\n <span>\n {locationIndex + 1} / {locations.length}\n </span>\n\n <button\n disabled={!canPrev}\n onClick={() => {\n setLocationIndex(Math.max(0, locationIndex - 1));\n }}\n >\n <ChevronLeft />\n </button>\n <button\n disabled={!canNext}\n onClick={() =>\n setLocationIndex(\n Math.min(locations.length - 1, locationIndex + 1),\n )\n }\n >\n <ChevronRight />\n </button>\n </div>\n )}\n {label().filter(Boolean).join(\", \")}\n </div>\n </div>\n {!isV2 && (\n <LocationDetailsV1\n setView={setView}\n cdrAdditionalCharges={cdrAdditionalCharges}\n currentLocation={currentLocation}\n evses={evses}\n />\n )}\n {isV2 && (\n <Location\n setView={setView}\n currentLocation={currentLocation as unknown as OcpiLocation}\n />\n )}\n </>\n );\n};\n\nexport default Locations;\n","import React from \"react\";\n\nimport styles from \"./BackButton.module.css\";\n\nimport { ChevronLeft } from \"../Icons/Icons\";\nimport { useMapContext } from \"../../contexts/Map\";\n\nexport default function BackButton({ onClick = () => {} }) {\n const { t } = useMapContext();\n return (\n <button onClick={onClick} className={styles.backButton}>\n <ChevronLeft />\n {t(\"backButton.backTo\")}\n </button>\n );\n}\n","import React, { useEffect, useState, useTransition } from \"react\";\n\nimport { useStackContext } from \"../../components/Stack/Stack\";\n\nimport BackButton from \"../../components/BackButton/BackButton\";\nimport { useMapContext } from \"../../contexts/Map\";\nimport styles from \"./locations.module.css\";\n\nimport BoltIcon from \"../../assets/bolt-icon.svg\";\n\nexport default function TariffNote() {\n const { t } = useMapContext();\n const { current, setView } = useStackContext();\n const { notes = [], evseId, locationName } = current?.args || {};\n\n return (\n <>\n <div className={styles.headerContainer}>\n <div\n className={styles.header}\n onClick={() => setView(\"locations\")}\n style={{ cursor: \"pointer\" }}\n >\n <BackButton />\n {locationName?.text || locationName}\n </div>\n </div>\n <div className={styles.container}>\n <div className={styles.subheader}>{t(\"tariffNote.subHeader\")}</div>\n\n {evseId && (\n <div className={styles.row}>\n <img className={styles.icon} src={BoltIcon} alt=\"power icon\" />\n <div className={styles.text}>{evseId}</div>\n </div>\n )}\n\n {notes.map((note) => (\n <p className={styles.note} key={note}>\n {note}\n </p>\n ))}\n </div>\n </>\n );\n}\n","import { useStackContext } from \"../../components/Stack/Stack\";\n\nimport BackButton from \"../../components/BackButton/BackButton\";\nimport { useMapContext } from \"../../contexts/Map\";\nimport styles from \"./locations.module.css\";\nimport { Info } from \"../../components/Icons/Icons\";\nimport BoltIcon from \"../../assets/bolt-icon.svg\";\nimport ConnectorTariff from \"../../components/ConnectorTariff/ConnectorTariff\";\nimport TariffV2 from \"./v2/Tariff\";\n\nexport default function DynamicTariffs() {\n const { t } = useMapContext();\n const { current, setView } = useStackContext();\n const { connector, tariff, additionalCharges, locationName, evseId, notes } =\n current?.args || {};\n\n const connectorTariff = tariff || connector?.tariff;\n\n if (!connectorTariff) return null;\n\n return (\n <>\n <div className={styles.headerContainer}>\n <div\n className={styles.header}\n onClick={() => setView(\"locations\")}\n style={{ cursor: \"pointer\" }}\n >\n <BackButton />\n {locationName}\n </div>\n </div>\n <div className={styles.container}>\n <div className={styles.subheader}>{t(\"dynamicTariffs.subHeader\")}</div>\n <div className={styles.row}>\n <img className={styles.icon} src={BoltIcon} alt=\"power icon\" />\n <div className={styles.text}>{evseId}</div>\n </div>\n {tariff && (\n <TariffV2 tariff={tariff} additionalCharges={additionalCharges} />\n )}\n {connector.tariff && (\n <ConnectorTariff tariff={connector.tariff} compact={false} />\n )}\n <div\n className={styles.tariffNoteLink}\n onClick={() => {\n setView(\"tariffNote\", {\n locationName: locationName,\n evseId: evseId,\n notes: notes,\n });\n }}\n >\n <Info /> {t(\"tariffPriceComponent.viewTariff\")}\n </div>\n </div>\n </>\n );\n}\n","import React from \"react\";\nimport { useStackContext } from \"../../../components/Stack/Stack\";\nimport BackButton from \"../../../components/BackButton/BackButton\";\nimport LocationRow from \"../../../components/LocationRow/LocationRow\";\nimport BoltIcon from \"../../../assets/bolt-icon.svg\";\nimport { useMapContext } from \"../../../contexts/Map\";\nimport { transformTariff } from \"./Tariff\";\nimport TariffLine from \"./TariffLine\";\nimport NoTariff from \"./NoTariff\";\nimport { CdrAdditionalCharge, TariffElement } from \"../../../types\";\nimport {\n getSchedule,\n getDynamicTariff,\n isBaseTarif,\n} from \"../../../utils/ocpi\";\nimport styles from \"../locations.module.css\";\n\nconst defaultTimeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n\nconst sectionStyle: React.CSSProperties = {\n display: \"flex\",\n flexDirection: \"column\",\n gap: 4,\n marginTop: 14,\n};\n\nconst sectionHeaderStyle: React.CSSProperties = {\n fontSize: 12,\n fontWeight: 600,\n textTransform: \"capitalize\",\n lineHeight: 1.4,\n};\n\nconst descriptionStyle: React.CSSProperties = {\n fontSize: 12,\n lineHeight: 1.5,\n color: \"var(--roadmap-text-color, #2a2a2a)\",\n marginTop: 8,\n};\n\nconst metaStyle: React.CSSProperties = {\n fontSize: 11,\n color: \"var(--roadmap-muted-color, #6a6a6a)\",\n marginTop: 6,\n};\n\nfunction formatTime(minutes: number): string {\n const date = new Date(0);\n date.setHours(Math.floor(minutes / 60), minutes % 60, 0, 0);\n return date.toLocaleTimeString(\"nl\", {\n hour: \"2-digit\",\n minute: \"2-digit\",\n });\n}\n\nfunction daysForLocale(language: string): Record<string, string> {\n const { format } = new Intl.DateTimeFormat(language, { weekday: \"long\" });\n return [\n \"SUNDAY\",\n \"MONDAY\",\n \"TUESDAY\",\n \"WEDNESDAY\",\n \"THURSDAY\",\n \"FRIDAY\",\n \"SATURDAY\",\n ].reduce(\n (acc, day, index) => {\n acc[day] = format(new Date(Date.UTC(2023, 9, index + 1)));\n return acc;\n },\n {} as Record<string, string>,\n );\n}\n\nfunction elementHasPaidComponents(el: TariffElement): boolean {\n return (el.priceComponents || []).some((pc) => {\n if ((pc.price || 0) > 0) return true;\n // Keep zero-priced PARKING_TIME with maxDuration — it represents the free parking window.\n if (\n pc.type === \"PARKING_TIME\" &&\n el.restrictions?.maxDuration &&\n (!el.restrictions.minDuration || el.restrictions.minDuration === 0)\n ) {\n return true;\n }\n return false;\n });\n}\n\nfunction pickAltText(\n altTexts: Array<{ language: string; text: string }> | undefined,\n language: string,\n): string | undefined {\n if (!altTexts || altTexts.length === 0) return undefined;\n const match = altTexts.find(\n (a) => a.language?.toLowerCase() === language?.toLowerCase(),\n );\n return (match || altTexts[0])?.text;\n}\n\nfunction formatLastUpdated(iso: string | undefined, language: string): string | undefined {\n if (!iso) return undefined;\n const d = new Date(iso);\n if (isNaN(d.getTime())) return undefined;\n return new Intl.DateTimeFormat(language, {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n }).format(d);\n}\n\nexport default function TariffDetails() {\n const { t, language } = useMapContext();\n const { current, setView } = useStackContext();\n const {\n tariff,\n additionalCharges,\n locationName,\n evseId,\n evseUid,\n countryCode,\n partyId,\n locationId,\n } = current?.args || {};\n\n if (!tariff) return null;\n const transformed = transformTariff(tariff);\n const reportProps = {\n country_code: countryCode || tariff.country_code || \"\",\n party_id: partyId || tariff.party_id || \"\",\n location_id: locationId || \"\",\n evse_uid: evseUid || \"\",\n };\n\n const description = pickAltText(tariff.tariff_alt_text, language);\n const lastUpdated = formatLastUpdated(tariff.last_updated, language);\n\n const renderHeader = () => (\n <div className={styles.headerContainer}>\n <div\n className={styles.header}\n onClick={() => setView(\"locations\")}\n style={{ cursor: \"pointer\" }}\n >\n <BackButton />\n {locationName}\n </div>\n </div>\n );\n\n if (!transformed) {\n return (\n <>\n {renderHeader()}\n <div className={styles.container}>\n <NoTariff {...reportProps} />\n </div>\n </>\n );\n }\n\n const elements = (transformed.elements || []).filter(\n elementHasPaidComponents,\n );\n const currency = transformed.currency || \"\";\n const charges: CdrAdditionalCharge[] = additionalCharges || [];\n\n const baseElements = elements.filter(isBaseTarif);\n const dynamicTariffs = getDynamicTariff({\n elements,\n limit: 40,\n now: new Date(),\n });\n const scheduledTariffs = dynamicTariffs.length\n ? []\n : getSchedule(elements, defaultTimeZone, new Date());\n\n const isBaseActive = !scheduledTariffs.some((s) => s.isActive);\n const i18nDays = daysForLocale(language);\n\n return (\n <>\n {renderHeader()}\n <div className={styles.container}>\n <div className={styles.subheader}>{t(\"tariff.fullDetailsHeader\")}</div>\n {evseId && (\n <LocationRow\n icon={<img src={BoltIcon} alt=\"power icon\" />}\n text={evseId}\n />\n )}\n\n {description && <div style={descriptionStyle}>{description}</div>}\n {lastUpdated && (\n <div style={metaStyle}>\n {t(\"tariff.lastUpdated\", { date: lastUpdated })}\n </div>\n )}\n\n {baseElements.length > 0 && (\n <div style={sectionStyle}>\n <TariffLine\n elements={baseElements}\n currency={currency}\n highlight={scheduledTariffs.length > 0 && isBaseActive}\n additionalCharges={charges}\n />\n </div>\n )}\n\n {scheduledTariffs.map((schedule) => (\n <div key={schedule.days.join(\"-\")} style={sectionStyle}>\n <div style={sectionHeaderStyle}>\n {schedule.days.map((d) => i18nDays[d]).join(\" – \")}\n </div>\n {schedule.items.map((item, i) => (\n <TariffLine\n key={i}\n elements={item.elements || []}\n currency={currency}\n highlight={!!item.isActive}\n label={\n !item.isFullDay\n ? `${formatTime(item.startTime)} – ${formatTime(item.endTime)}`\n : undefined\n }\n />\n ))}\n </div>\n ))}\n\n {dynamicTariffs.map((dyn, i) => (\n <div key={i} style={sectionStyle}>\n <div style={sectionHeaderStyle}>\n {t(\"tariffPriceComponent.dynamicTariffHeader\", {\n date: new Intl.DateTimeFormat(language, {\n weekday: \"long\",\n month: \"short\",\n day: \"numeric\",\n }).format(dyn.date),\n })}\n </div>\n {dyn.items.map((item, j) => (\n <TariffLine\n key={j}\n elements={item.elements || []}\n currency={currency}\n highlight={!!item.isActive}\n label={`${formatTime(item.startTime)} – ${formatTime(item.endTime)}`}\n />\n ))}\n </div>\n ))}\n\n {scheduledTariffs.length === 0 &&\n dynamicTariffs.length === 0 &&\n baseElements.length === 0 && <NoTariff {...reportProps} />}\n </div>\n </>\n );\n}\n","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20width='10'%20height='11'%20viewBox='0%200%2010%2011'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M6.48751%205.99758L9.85376%202.63133C10.0484%202.43664%2010.0484%202.1207%209.85376%201.9257L9.07157%201.14351C8.87688%200.948826%208.56095%200.948826%208.36595%201.14351L5.00001%204.51008L1.63376%201.14383C1.43907%200.949138%201.12313%200.949138%200.928135%201.14383L0.14626%201.9257C-0.0484277%202.12039%20-0.0484277%202.43633%200.14626%202.63133L3.51251%205.99758L0.14626%209.36383C-0.0484277%209.55851%20-0.0484277%209.87445%200.14626%2010.0695L0.928447%2010.8516C1.12313%2011.0463%201.43907%2011.0463%201.63407%2010.8516L5.00001%207.48508L8.36626%2010.8513C8.56095%2011.046%208.87688%2011.046%209.07188%2010.8513L9.85407%2010.0691C10.0488%209.87445%2010.0488%209.55851%209.85407%209.36351L6.48751%205.99758Z'%20fill='black'/%3e%3c/svg%3e\"","import React from \"react\";\n\nimport CloseIcon from \"../../assets/close-icon.svg\";\nimport styles from \"./CloseButton.module.css\";\n\nexport default function CloseButton({ onClick }) {\n return (\n <button onClick={onClick} className={styles.closeButton}>\n <img src={CloseIcon} />\n </button>\n );\n}\n","import React, { useState } from \"react\";\n\nimport Locations from \"./Locations\";\nimport TariffNote from \"./TariffNote\";\nimport DynamicTariff from \"./DynamicTariffs\";\nimport TariffDetails from \"./v2/TariffDetails\";\nimport Stack from \"../../components/Stack\";\nimport CloseButton from \"../../components/CloseButton/CloseButton\";\nimport SideBarContainer from \"../../components/SidebarContainer/SidebarContainer\";\nimport { useStackContext } from \"../../components/Stack/Stack\";\n\nexport default function LocationsScreeen() {\n const [view, setView] = useState<string>(\"locations\");\n const { setView: setParentView } = useStackContext();\n\n return (\n <Stack name=\"locations\" currentView={view} onViewChange={setView}>\n <Stack.View name=\"locations\">\n <SideBarContainer>\n <CloseButton onClick={() => setParentView(\"none\")} />\n <Locations />\n </SideBarContainer>\n </Stack.View>\n\n <Stack.View name=\"tariffNote\">\n <SideBarContainer>\n <TariffNote />\n </SideBarContainer>\n </Stack.View>\n <Stack.View name=\"dynamicTariff\">\n <SideBarContainer>\n <DynamicTariff />\n </SideBarContainer>\n </Stack.View>\n <Stack.View name=\"tariffDetails\">\n <SideBarContainer>\n <TariffDetails />\n </SideBarContainer>\n </Stack.View>\n </Stack>\n );\n}\n","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20width='16'%20height='16'%20viewBox='0%200%2016%2016'%20fill='currentColor'%20xmlns='http://www.w3.org/2000/svg'%20%3e%3cpath%20d='M14.4985%200H1.50178C0.169343%200%20-0.502939%201.61659%200.441124%202.56066L5.5%207.62131V13C5.5%2013.4721%205.72228%2013.9167%206.1%2014.25L8.1%2015.7208C9.07728%2016.4038%2010.5%2015.7689%2010.5%2014.5208V7.62131L15.5592%202.56066C16.5013%201.6185%2015.8336%200%2014.4985%200ZM9%207V14.5L7%2013V7L1.5%201.5H14.5L9%207Z'%20fill='currentColor'%20/%3e%3c/svg%3e\"","import React, { useEffect } from \"react\";\n\nimport { useMapContext } from \"./contexts/Map\";\n\nimport Stack from \"./components/Stack\";\n\nimport styles from \"./router.module.css\";\nimport SearchInput from \"./components/SearchInput/SearchInput\";\n\nimport Filters from \"./screens/Filters\";\nimport Locations from \"./screens/Locations\";\n\nimport filterIcon from \"./assets/filter-icon.svg\";\n\nimport CloseButton from \"./components/CloseButton/CloseButton\";\nimport SideBarContainer from \"./components/SidebarContainer/SidebarContainer\";\n\nimport { hasFilters } from \"./utils/filters\";\n\nexport default function Controls() {\n const { locationIds, fetchLocations, filters, isSearching } = useMapContext();\n const [view, setView] = React.useState<string>(\"none\");\n\n useEffect(() => {\n if (locationIds.length > 0) {\n setView(\"locations\");\n }\n }, [locationIds, setView]);\n\n return (\n <div className={styles.container}>\n <div className={styles.controlsContainer}>\n <SearchInput\n onFocus={() => {\n setView(\"none\");\n }}\n />\n\n <div\n className={styles.filterButton}\n onClick={() => {\n setView(\"filters\");\n }}\n >\n {isSearching ?? false ? (\n <div className={styles.spinner}></div>\n ) : (\n <img className={styles.filterIcon} src={filterIcon} />\n )}\n {hasFilters(filters) && !(isSearching ?? false) && (\n <span className={styles.filterCounter}></span>\n )}\n </div>\n </div>\n\n <div className={styles.stackContainer}>\n <Stack\n name=\"router\"\n currentView={view}\n onViewChange={(view) => {\n setView(view);\n }}\n >\n <Stack.View name=\"locations\">\n <Locations />\n </Stack.View>\n <Stack.View name=\"filters\">\n <SideBarContainer>\n <CloseButton onClick={() => setView(\"none\")} />\n <Filters />\n </SideBarContainer>\n </Stack.View>\n </Stack>\n </div>\n </div>\n );\n}\n","import React, { useEffect } from \"react\";\nimport { createRoot, Root } from \"react-dom/client\";\nimport Boot from \"./Boot\";\nimport { MapProvider } from \"./contexts/Map\";\nimport Map from \"./components/Map/Map\";\nimport Router from \"./Router\";\nimport { RoadMapOptions } from \"./types\";\nimport { useRef } from \"react\";\n\nexport default function RoadMap(props: RoadMapOptions) {\n if (!props.shadowRoot && props?.theming?.backgroundColor) {\n return <ShadowMapWrapper {...props} />;\n }\n return (\n <MapProvider options={props} language={props.language}>\n <Boot height={props?.height}>\n <Router />\n <Map />\n </Boot>\n </MapProvider>\n );\n}\n\n// This wrapper is used to create a shadow root if one is not provided by the end user\nconst ShadowMapWrapper: React.FC<RoadMapOptions> = (props) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const rootRef = useRef<Root | null>(null);\n const shadowRootRef = useRef<ShadowRoot | null>(null);\n const isInitializedRef = useRef<boolean>(false);\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container || isInitializedRef.current) return;\n\n const shadowRoot = container.attachShadow({ mode: \"open\" });\n shadowRootRef.current = shadowRoot;\n\n // We default to the most recent version of the sdk stylesheet\n let styleHref = `https://mapsdk.road.io/styles.css`;\n if (props.sdkRoot) {\n styleHref = props.sdkRoot + \"/styles.css\";\n }\n\n const link = document.createElement(\"link\");\n link.rel = \"stylesheet\";\n link.type = \"text/css\";\n link.href = styleHref;\n\n // Append link to shadow root BEFORE rendering\n shadowRoot.appendChild(link);\n\n // Create React root\n const root = createRoot(shadowRoot);\n rootRef.current = root;\n isInitializedRef.current = true;\n\n return () => {\n if (rootRef.current) {\n rootRef.current.unmount();\n rootRef.current = null;\n }\n shadowRootRef.current = null;\n isInitializedRef.current = false;\n };\n }, []);\n\n useEffect(() => {\n if (!rootRef.current || !shadowRootRef.current) return;\n const roadMapElement = React.createElement(RoadMap, {\n ...props,\n shadowRoot: shadowRootRef.current,\n });\n rootRef.current.render(roadMapElement);\n }, [props]);\n\n return <div ref={containerRef} style={{ height: \"100%\", width: \"100%\" }} />;\n};\n"],"names":["useOnScreen","ref","wasIntersecting","setWasIntersecting","useState","observer","useMemo","entry","useEffect","getLanguage","lng","language","en","nl","de","fr","it","es","strings","request","url","options","response","e","_fetchGeohashes","apiRoot","version","authorization","limitToLocationIds","precision","bbox","props","_fetchTariffs","origin","ids","_fetchLocations","status","_reportProblem","type","country_code","party_id","location_id","evse_uid","loadRemoteConfig","MapContext","createContext","key","MapProvider","children","setOptions","filterConfiguration","setFilterConfiguration","error","setError","place","setPlace","position","setPosition","filters","setFilters","locationIds","setLocationsIds","locations","setLocations","locationsStatus","setLocationsStatus","isSearching","setIsSearching","isDebug","t","match","p1","mapKey","passThroughSearchOptions","fetchGeohashes","args","fetchLocations","fetchTariffs","reportProblem","onFetchLocations","data","location","rc","err","theming","shadowRoot","style","isReady","providerValue","useMapContext","context","React","Boot","useContext","useRef","loaded","jsxs","styles","jsx","__awaiter","thisArg","_arguments","P","generator","adopt","value","resolve","reject","fulfilled","step","rejected","result","getDefaultExportFromCjs","x","fastDeepEqual","equal","a","b","length","i","keys","isEqual","DEFAULT_ID","LoaderStatus","Loader","apiKey","authReferrerPolicy","channel","client","id","libraries","mapIds","nonce","region","retries","script","name","fn","_a","_b","params","g","h","k","p","c","l","q","m","d","r","u","f","n","libraryPromises","library","event","delay","cb","instance","getLoader","loader","base32","Geohash","lat","lon","hash","posn","idx","bit","evenBit","geohash","latMin","latMax","lonMin","lonMax","lonMid","latMid","bounds","chr","bitN","direction","neighbour","border","lastCh","parent","createOverlay","container","pane","Overlay","point","OverlayView","map","zIndex","div","overlay","createPortal","getColorForStatus","formatter","formatNumber","num","CustomMarker","onClick","highlight","handleClick","useCallback","styleColor","geoHashZoom","zoomToHashChars","zoom","getNormalizedBounds","zoomLevel","mapSWPoint","mapNEPoint","SWGeohash","geohashSWBounds","latStep","lngStep","neLat","neLng","isSameBounds","bounds1","bounds2","MapMarkers","onMarkerClicked","setData","mapConfig","setMapConfig","currentZoomLevel","currentBounds","newZoomLevel","newMapConfig","appendData","newData","oldData","o","ignore","_onMarkerClicked","Fragment","item","MapWrapper","setMap","mapContainerRef","Map","_extends","_objectWithoutPropertiesLoose","_setPrototypeOf","_inheritsLoose","setPrototypeOf","v","w","y","z","A","reactIs_production_min","hasSymbol","REACT_ELEMENT_TYPE","REACT_PORTAL_TYPE","REACT_FRAGMENT_TYPE","REACT_STRICT_MODE_TYPE","REACT_PROFILER_TYPE","REACT_PROVIDER_TYPE","REACT_CONTEXT_TYPE","REACT_ASYNC_MODE_TYPE","REACT_CONCURRENT_MODE_TYPE","REACT_FORWARD_REF_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_MEMO_TYPE","REACT_LAZY_TYPE","REACT_BLOCK_TYPE","REACT_FUNDAMENTAL_TYPE","REACT_RESPONDER_TYPE","REACT_SCOPE_TYPE","isValidElementType","typeOf","object","$$typeof","$$typeofType","AsyncMode","ConcurrentMode","ContextConsumer","ContextProvider","Element","ForwardRef","Lazy","Memo","Portal","Profiler","StrictMode","Suspense","hasWarnedAboutDeprecatedIsAsyncMode","isAsyncMode","isConcurrentMode","isContextConsumer","isContextProvider","isElement","isForwardRef","isFragment","isLazy","isMemo","isPortal","isProfiler","isStrictMode","isSuspense","reactIs_development","reactIsModule","require$$0","require$$1","getOwnPropertySymbols","hasOwnProperty","propIsEnumerable","toObject","val","shouldUseNative","test1","test2","order2","test3","letter","objectAssign","target","source","from","to","symbols","s","ReactPropTypesSecret","ReactPropTypesSecret_1","has","printWarning","loggedTypeFailures","text","message","checkPropTypes","typeSpecs","values","componentName","getStack","typeSpecName","ex","stack","checkPropTypes_1","ReactIs","assign","require$$2","require$$3","require$$4","emptyFunctionThatReturnsNull","factoryWithTypeCheckers","isValidElement","throwOnDirectAccess","ITERATOR_SYMBOL","FAUX_ITERATOR_SYMBOL","getIteratorFn","maybeIterable","iteratorFn","ANONYMOUS","ReactPropTypes","createPrimitiveTypeChecker","createAnyTypeChecker","createArrayOfTypeChecker","createElementTypeChecker","createElementTypeTypeChecker","createInstanceTypeChecker","createNodeChecker","createObjectOfTypeChecker","createEnumTypeChecker","createUnionTypeChecker","createShapeTypeChecker","createStrictShapeTypeChecker","is","PropTypeError","createChainableTypeChecker","validate","manualPropTypeCallCache","manualPropTypeWarningCount","checkType","isRequired","propName","propFullName","secret","cacheKey","chainedCheckType","expectedType","propValue","propType","getPropType","preciseType","getPreciseType","typeChecker","expectedClass","expectedClassName","actualClassName","getClassName","expectedValues","valuesString","arrayOfTypeCheckers","checker","getPostfixForTypeWarning","expectedTypes","checkerResult","expectedTypesMessage","isNode","invalidValidatorError","shapeTypes","allKeys","iterator","isSymbol","emptyFunction","emptyFunctionWithReset","factoryWithThrowingShims","shim","getShim","propTypesModule","hasClass","element","className","addClass","replaceClassName","origClass","classToRemove","removeClass","config","timeoutsShape","PropTypes","classNamesShape","TransitionGroupContext","forceReflow","node","UNMOUNTED","EXITED","ENTERING","ENTERED","EXITING","Transition","_React$Component","_this","parentGroup","appear","initialStatus","_ref","prevState","nextIn","_proto","prevProps","nextStatus","timeout","exit","enter","mounting","ReactDOM","_this2","appearing","_ref2","maybeNode","maybeAppearing","timeouts","enterTimeout","_this3","nextState","callback","_this4","active","handler","doesNotHaveTimeoutOrListener","_ref3","maybeNextCallback","_this$props","childProps","pt","_len","_key","noop","_addClass","classes","addOneClass","removeOneClass","CSSTransition","_this$resolveArgument","_this$resolveArgument2","_this$resolveArgument3","_this$resolveArgument4","_this$resolveArgument5","_this$resolveArgument6","classNames","isStringClassNames","prefix","baseClassName","activeClassName","doneClassName","phase","_this$getClassNames","_this$appliedClasses$","_leaveRenders","_enterRenders","areChildrenDifferent","oldChildren","newChildren","modes","callHook","_element$props","leaveRenders","current","changeState","enterRenders","_ref4","SwitchTransition","state","mode","_this$state","component","StackView","StackContext","useStackContext","Stack","currentView","onViewChange","elements","createRef","currentRef","setCurrentRef","View","setArgs","contextValue","view","opt","done","SearchInput","onFocus","inputRef","places","autocomplete","CheckboxToggle","checked","onChange","isChecked","setIsChecked","onChangeCallback","Range","ticks","convertValue","tick","bgSize","MultiSelect","preferredValues","placeholder","disabled","isOpen","setIsOpen","inputValue","setInputValue","highlightedIndex","setHighlightedIndex","containerRef","preferredSet","preferred","others","filtered","flatItems","selectedOptions","openMenu","closeMenu","selectItem","next","removeValue","handleInputKeyDown","handleInputBlur","toggleDropdown","renderOption","option","isLast","selected","SelectField","onBlur","handleChange","selectedValue","ICON_IEC_62196_T2","ICON_IEC_62196_T2_COMBO","ICON_IEC_62196_T1","ICON_IEC_62196_T1_COMBO","ICON_IEC_62196_T3","ICON_IEC_62196_T3A","ICON_SCHUKO","ICON_CHADEMO","ICON_CATARC","connectorIcons","defaultFilter","hasFilters","filter","authMethodCapabilityOptions","powerRanges","toggleOption","action","existingFilters","optionFilters","useLocalState","initialState","useReducer","currentState","updatedState","FiltersScreen","applyFilters","contextFilters","setParentView","showOperatorFilter","Checkbox","operator","capability","LocationPlaceholder","ChevronLeft","ChevronRight","ChevronDown","Clock","Check","Info","SideBarContainer","Debug","evse","connector","StationIcon","BuildingIcon","CarIcon","BoltIcon","PricingIcon","getSocketIcon","connectorPowerTypes","getSocketText","formatConnectorStandard","getStatusLabel","getLocationLabel","getStatusColorFromEvses","evses","getTimezoneOffset","date","timeZone","offset","lang","tzName","part","sign","offsetToMins","formatYMD","year","month","day","acc","tzDate","offMins","startOfDay","oDateTS","sodDateTS","endOfDate","getNextDayOfWeek","dayOfWeek","resultDate","getDay","convertTimeToMinutes","time","hours","minutes","convertToTimeSlot","startTime","endTime","getScheduleItems","items","isDayActive","now","currentTime","scheduleItems","refItem","oldEndTime","toAppend","maxEndTime","prevItem","isBaseTarif","tariffElement","getDynamicTariff","limit","splitByDay","el","curr","formattedItems","restrictions","_startDate","partialRestrictions","isActive","getScheduledTariff","locationTimezone","today","start_date","end_date","day_of_week","startDate","endDate","index","start","end","omitFields","obj","fields","isSame","aWithoutActive","bWithoutActive","mergeDuplicatesTimeslots","timeslots","cur","existing","isRateBaseTariff","pc","isEdgeNoise","getSchedule","days","baseRateElement","SUNDAY","rest","firstDay","restDays","dayElements","dayTimeslots","prevEntry","prevTimeslots","getConnectorTariffType","connectorTarif","ConnectorPowerType","calculateMaxPower","formatCurrency","getPrice","priceComponent","vat","PriceComponent","currency","stringByType","displayOrder","PriceComponents","elementsByType","sortedElements","aIndex","bIndex","Price","price","vatAmount","CdrPriceComponent","cdrAdditionalCharge","formatTime","mins","defaultTimeZone","daysForLocale","format","CdrAdditionalChargeComponent","cdrAdditionalCharges","CdrPrice","ConnectorTariff","timezone","tariff","compact","i18nDays","hasPriceComponents","dynamicTariffs","scheduledTariffs","baseTarifElements","isBaseActive","schedule","dynamicTariff","getNotes","notes","LocationDetailsV1","currentLocation","setView","availableEvse","connectorType","rowStyle","iconSlotStyle","textSlotStyle","hintStyle","chevronSlotStyle","bodyStyle","LocationRow","icon","hint","defaultExpanded","expandable","expanded","setExpanded","toggle","LocationHeader","StatusDot","color","size","AvailabilitySummary","available","OperatorBlock","role","showRoleLabel","OperatorSection","suboperator","fallbackOperatorName","fallbackSuboperatorName","subRole","opRole","WEEKDAY_KEYS","getWeekdayLabel","weekday","groupRegularHoursByWeekday","regularHours","grouped","formatPeriod","begin","timeToMinutes","jsDayToOcpiWeekday","jsDay","dateToYMD","isInExceptional","periods","isOpenNow","openingTimes","closing","opening","todayWeekday","prevWeekday","nowMinutes","effectiveEnd","wd","getFutureExceptionalPeriods","formatExceptionalRange","sameDay","beginStr","endStr","OpeningHours","chargingWhenClosed","futureClosings","futureOpenings","headerText","headerHint","hasBody","dayStyle","dayLabelStyle","dayValueStyle","exceptionalStyle","exceptionalHeaderStyle","footnoteStyle","ParkingType","parkingType","ChargingAccessibility","accessibility","EvseHeader","EvseStatus","first","maxKw","ConnectorSocket","ConnectorPricing","transformTariff","TariffV2","additionalCharges","hasCongestionPricing","JS_DAY_TO_OCPI","isInTimeWindow","isElementActive","bucketKey","minD","maxD","getActiveTariffElements","byBucket","isBase","elementToPcs","order","itemsRowStyle","itemStyle","itemHighlightStyle","STRING_BY_TYPE","DISPLAY_ORDER","priceWithVat","isFreeParkingWindow","collectAndSort","skipZero","all","ai","bi","TariffChips","chipStyle","labelKey","total","containerStyle","headerStyle","TariffLine","label","trailing","interactive","containerWithClick","buttonStyle","submittingStyle","doneStyle","errorStyle","ReportProblemButton","setStatus","submit","textStyle","NoTariff","chevronStyle","ActiveTariff","evseId","evseUid","countryCode","partyId","locationId","locationName","transformed","rawElements","activeElements","Connector","tariffs","tr","cardStyle","connectorBaseStyle","Evse","statusColor","connectorStyle","pickText","directions","Directions","Location","Locations","locationIndex","setLocationIndex","canNext","canPrev","debugMode","isV2","BackButton","TariffNote","note","DynamicTariffs","sectionStyle","sectionHeaderStyle","descriptionStyle","metaStyle","elementHasPaidComponents","pickAltText","altTexts","formatLastUpdated","iso","TariffDetails","reportProps","description","lastUpdated","renderHeader","charges","baseElements","dyn","j","CloseIcon","CloseButton","LocationsScreeen","DynamicTariff","filterIcon","Controls","Filters","RoadMap","ShadowMapWrapper","Router","rootRef","shadowRootRef","isInitializedRef","styleHref","link","root","createRoot","roadMapElement"],"mappings":"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","x_google_ignoreList":[5,7,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36]}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../src/hooks/useOnScreen.ts","../src/i18n.ts","../src/utils/request.ts","../src/contexts/Map.tsx","../src/Boot.tsx","../node_modules/@googlemaps/js-api-loader/dist/index.mjs","../src/utils/loader.ts","../node_modules/latlon-geohash/latlon-geohash.js","../src/components/OverlayView/OverlayView.tsx","../src/utils/location.ts","../src/components/CustomMarker/CustomMarker.tsx","../src/components/MapMarkers/MapMarkers.tsx","../src/components/Map/Map.tsx","../node_modules/@babel/runtime/helpers/esm/extends.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","../node_modules/react-is/cjs/react-is.production.min.js","../node_modules/react-is/cjs/react-is.development.js","../node_modules/react-is/index.js","../node_modules/object-assign/index.js","../node_modules/prop-types/lib/ReactPropTypesSecret.js","../node_modules/prop-types/lib/has.js","../node_modules/prop-types/checkPropTypes.js","../node_modules/prop-types/factoryWithTypeCheckers.js","../node_modules/prop-types/factoryWithThrowingShims.js","../node_modules/prop-types/index.js","../node_modules/dom-helpers/esm/hasClass.js","../node_modules/dom-helpers/esm/addClass.js","../node_modules/dom-helpers/esm/removeClass.js","../node_modules/react-transition-group/esm/config.js","../node_modules/react-transition-group/esm/utils/PropTypes.js","../node_modules/react-transition-group/esm/TransitionGroupContext.js","../node_modules/react-transition-group/esm/utils/reflow.js","../node_modules/react-transition-group/esm/Transition.js","../node_modules/react-transition-group/esm/CSSTransition.js","../node_modules/react-transition-group/esm/SwitchTransition.js","../src/components/Stack/View.tsx","../src/components/Stack/Stack.tsx","../src/components/SearchInput/SearchInput.tsx","../src/components/Checkbox/Checkbox.tsx","../src/components/Range/Range.tsx","../src/components/MultiSelect/MultiSelect.tsx","../src/components/SelectField/SelectField.tsx","../src/assets/connectors/type2.svg","../src/assets/connectors/combo2.svg","../src/assets/connectors/type1.svg","../src/assets/connectors/combo1.svg","../src/assets/connectors/type3.svg","../src/assets/connectors/type3a.svg","../src/assets/connectors/schuko.svg","../src/assets/connectors/chademo.svg","../src/assets/connectors/catarc.svg","../src/components/connectorIcons.ts","../src/utils/filters.ts","../src/screens/Filters/index.tsx","../src/components/LocationPlaceholder/LocationPlaceholder.tsx","../src/components/Icons/Icons.tsx","../src/components/SidebarContainer/SidebarContainer.tsx","../src/components/Debug/Debug.tsx","../src/assets/station-icon.svg","../src/assets/building-icon.svg","../src/assets/car-icon.svg","../src/assets/bolt-icon.svg","../src/assets/pricing-icon.svg","../src/utils/formatters.ts","../src/utils/date.ts","../src/utils/ocpi.ts","../src/components/Price/Price.tsx","../src/components/PriceComponents/PriceComponents.tsx","../src/components/CdrPrice/CdrPrice.tsx","../src/components/ConnectorTariff/ConnectorTariff.tsx","../src/utils/notes.ts","../src/screens/Locations/LocationDetailsV1.tsx","../src/components/LocationRow/LocationRow.tsx","../src/screens/Locations/v2/LocationHeader.tsx","../src/components/StatusDot/StatusDot.tsx","../src/screens/Locations/v2/AvailabilitySummary.tsx","../src/screens/Locations/v2/OperatorSection.tsx","../src/utils/openingTimes.ts","../src/screens/Locations/v2/OpeningHours.tsx","../src/screens/Locations/v2/ParkingType.tsx","../src/screens/Locations/v2/ChargingAccessibility.tsx","../src/screens/Locations/v2/EvseHeader.tsx","../src/screens/Locations/v2/EvseStatus.tsx","../src/screens/Locations/v2/ConnectorSocket.tsx","../src/screens/Locations/v2/ConnectorPricing.tsx","../src/screens/Locations/v2/Tariff.tsx","../src/utils/activeTariff.ts","../src/screens/Locations/v2/TariffChips.tsx","../src/screens/Locations/v2/TariffLine.tsx","../src/screens/Locations/v2/ReportProblemButton.tsx","../src/screens/Locations/v2/NoTariff.tsx","../src/screens/Locations/v2/ActiveTariff.tsx","../src/screens/Locations/v2/Connector.tsx","../src/screens/Locations/v2/Evse.tsx","../src/screens/Locations/v2/Directions.tsx","../src/screens/Locations/v2/Location.tsx","../src/screens/Locations/Locations.tsx","../src/components/BackButton/BackButton.tsx","../src/screens/Locations/TariffNote.tsx","../src/screens/Locations/DynamicTariffs.tsx","../src/screens/Locations/v2/TariffDetails.tsx","../src/assets/close-icon.svg","../src/components/CloseButton/CloseButton.tsx","../src/screens/Locations/index.tsx","../src/assets/filter-icon.svg","../src/Router.tsx","../src/App.tsx"],"sourcesContent":["import { useEffect, useMemo, useState, RefObject } from \"react\";\n\nexport default function useOnScreen(ref: RefObject<HTMLElement>) {\n const [wasIntersecting, setWasIntersecting] = useState(false);\n\n const observer = useMemo(\n () =>\n new IntersectionObserver(([entry]) => {\n if (entry.isIntersecting) {\n setWasIntersecting(true);\n observer.disconnect();\n }\n }),\n [ref],\n );\n\n useEffect(() => {\n if (!ref.current) return;\n observer.observe(ref.current);\n return () => observer.disconnect();\n }, [ref.current]);\n\n return wasIntersecting;\n}\n","export function getLanguage(lng) {\n const language = lng || window.navigator.language.toLowerCase();\n\n const dutchLangCodes = [\"nl\", \"nl-be\", \"nl-nl\"];\n if (dutchLangCodes.includes(language)) {\n return \"nl\";\n }\n\n const englishLangCodes = [\n \"en\",\n \"en-us\",\n \"en-eg\",\n \"en-au\",\n \"en-gb\",\n \"en-ca\",\n \"en-nz\",\n \"en-ie\",\n \"en-za\",\n \"en-jm\",\n \"en-bz\",\n \"en-tt\",\n ];\n\n if (englishLangCodes.includes(language)) {\n return \"en\";\n }\n\n const germanLangCodes = [\"de\", \"de-ch\", \"de-at\", \"de-lu\", \"de-li\", \"de-de\"];\n if (germanLangCodes.includes(language)) {\n return \"de\";\n }\n\n const frenchLangCodes = [\"fr\", \"fr-be\", \"fr-ca\", \"fr-fr\", \"fr-lu\", \"fr-ch\"];\n if (frenchLangCodes.includes(language)) {\n return \"fr\";\n }\n\n const italianLangCodes = [\"it\", \"it-ch\", \"it-it\"];\n if (italianLangCodes.includes(language)) {\n return \"it\";\n }\n\n const spanishLangCodes = [\n \"es\",\n \"es-ar\",\n \"es-bo\",\n \"es-cl\",\n \"es-co\",\n \"es-cr\",\n \"es-do\",\n \"es-ec\",\n \"es-sv\",\n \"es-gt\",\n \"es-hn\",\n \"es-mx\",\n \"es-ni\",\n \"es-pa\",\n \"es-py\",\n \"es-pe\",\n \"es-pr\",\n \"es-es\",\n \"es-uy\",\n \"es-ve\",\n ];\n\n if (spanishLangCodes.includes(language)) {\n return \"es\";\n }\n\n return \"en\";\n}\n\nexport type LabelsType = {\n \"search.placeholder\": string;\n \"cdrPrice.flatFee\": string;\n \"tariffPriceComponent.dynamicTariffHeader\": string;\n \"tariffPriceComponent.noTariff\": string;\n \"tariffPriceComponent.energy\": string;\n \"tariffPriceComponent.time\": string;\n \"tariffPriceComponent.parkingTime\": string;\n \"tariffPriceComponent.parkingTimeWait\": string;\n \"tariffPriceComponent.flat\": string;\n \"tariffPriceComponent.baseTariff\": string;\n \"tariffPriceComponent.active\": string;\n \"tariffPriceComponent.currentPrice\": string;\n \"tariffPriceComponent.viewTariff\": string;\n \"tariffNote.subHeader\": string;\n \"tariffNote.eFluxScheduledTariffNote\";\n \"tariffNote.dynamicScheduledTariffNote\";\n \"tariffNote.scheduledTariffNote\";\n \"tariffNote.baseTariffNote\";\n \"tariff.congestionPricing\": string;\n \"tariff.fullDetailsHeader\": string;\n \"tariff.lastUpdated\": string;\n \"tariff.report\": string;\n \"tariff.reportThanks\": string;\n \"tariff.reportError\": string;\n \"evse.statusAvailable\": string;\n \"evse.statusCharging\": string;\n \"evse.statusUnavailable\": string;\n \"evse.statusRemoved\": string;\n \"evse.statusPlanned\": string;\n \"evse.statusReserved\": string;\n \"evse.statusInoperative\": string;\n \"evse.statusOutOfOrder\": string;\n \"evse.statusError\": string;\n \"evse.statusUnknown\": string;\n \"evse.pricing\": string;\n \"filters.header\": string;\n \"filters.dcChargers\": string;\n \"filters.efluxChargers\": string;\n \"filters.noAdditionalFee\": string;\n \"filters.available\": string;\n \"filters.charging\": string;\n \"filters.notAvailable\": string;\n \"filters.chargingPower\": string;\n \"filters.connectorType\": string;\n \"filters.apply\": string;\n \"filters.clearAll\": string;\n \"filters.onlyShow\": string;\n \"filters.statusHeading\": string;\n \"filters.chargingAccessibility\": string;\n \"filters.accessibilityAll\": string;\n \"filters.accessibilityTesla\": string;\n \"filters.allAccessibility\": string;\n \"filters.remoteStartStop\": string;\n \"filters.searchPhrase\": string;\n \"filters.searchPhrasePlaceholder\": string;\n \"filters.operator\": string;\n \"filters.excludeOperator\": string;\n \"filters.authMethodCapabilities\": string;\n \"filters.authCapability.rfid\": string;\n \"filters.authCapability.plugAndCharge\": string;\n \"filters.authCapability.creditCard\": string;\n \"filters.authCapability.remoteStartStop\": string;\n \"locationType.onStreet\": string;\n \"locationType.parkingGarage\": string;\n \"locationType.undergroundGarage\": string;\n \"locationType.parkingLot\": string;\n \"locationType.other\": string;\n \"locationType.unknown\": string;\n \"dynamicTariffs.subHeader\": string;\n \"location.viewAllHourlyPrices\": string;\n \"location.operatorInfo\": string;\n \"location.operator\": string;\n \"location.suboperator\": string;\n \"location.owner\": string;\n \"location.openingHours\": string;\n \"location.open24_7\": string;\n \"location.openNow\": string;\n \"location.closedNow\": string;\n \"location.closed\": string;\n \"location.opensAt\": string;\n \"location.closesAt\": string;\n \"location.chargingWhenClosed\": string;\n \"location.exceptionalClosings\": string;\n \"location.exceptionalOpenings\": string;\n \"location.visitWebsite\": string;\n \"weekday.mon\": string;\n \"weekday.tue\": string;\n \"weekday.wed\": string;\n \"weekday.thu\": string;\n \"weekday.fri\": string;\n \"weekday.sat\": string;\n \"weekday.sun\": string;\n \"backButton.backTo\": string;\n};\n\nexport const en: LabelsType = {\n \"search.placeholder\": \"Enter a location...\",\n \"cdrPrice.flatFee\": \"{{total}} additional fee\",\n \"tariffPriceComponent.dynamicTariffHeader\": \"Dynamic Tariff - {{date}}\",\n \"tariffPriceComponent.flat\": \"{{total}} session\",\n \"tariffPriceComponent.time\": \"{{total}} / hour\",\n \"tariffPriceComponent.energy\": \"{{total}} / kWh\",\n \"tariffPriceComponent.parkingTime\": \"{{total}} / hour idle fee\",\n \"tariffPriceComponent.parkingTimeWait\":\n \"{{minutes}} min. wait time before idle fee\",\n \"tariffPriceComponent.noTariff\": \"No tariff available\",\n \"tariffPriceComponent.baseTariff\": \"Base Tariff\",\n \"tariffPriceComponent.active\": \"Active now\",\n \"tariffPriceComponent.currentPrice\": \"Current price\",\n \"filters.header\": \"Filters\",\n \"filters.dcChargers\": \"Fast Chargers\",\n \"filters.efluxChargers\": \"E-Flux Chargers\",\n \"filters.noAdditionalFee\": \"Without additional fee per session\",\n \"filters.available\": \"Available\",\n \"filters.charging\": \"Charging\",\n \"filters.notAvailable\": \"Not Available\",\n \"filters.chargingPower\": \"Charging Power [kW]\",\n \"filters.connectorType\": \"Connector Type\",\n \"filters.apply\": \"Apply Filters\",\n \"filters.clearAll\": \"Clear All Filters\",\n \"filters.onlyShow\": \"Only Show\",\n \"filters.statusHeading\": \"Status\",\n \"filters.chargingAccessibility\": \"Vehicle Accessibility\",\n \"filters.accessibilityAll\": \"All vehicles\",\n \"filters.accessibilityTesla\": \"Tesla only\",\n \"filters.allAccessibility\": \"All accessibility types\",\n \"filters.remoteStartStop\": \"Supports remote charge\",\n \"filters.searchPhrase\": \"Search\",\n \"filters.searchPhrasePlaceholder\": \"EVSE ID or name\",\n \"filters.operator\": \"Include operator(s)\",\n \"filters.excludeOperator\": \"Exclude operator(s)\",\n \"filters.authMethodCapabilities\": \"Payment methods\",\n \"filters.authCapability.rfid\": \"RFID\",\n \"filters.authCapability.plugAndCharge\": \"Plug and Charge\",\n \"filters.authCapability.creditCard\": \"Credit / debit card\",\n \"filters.authCapability.remoteStartStop\": \"Remote start/stop\",\n \"evse.statusAvailable\": \"Available\",\n \"evse.statusCharging\": \"Charging\",\n \"evse.statusUnavailable\": \"Unavailable\",\n \"evse.statusRemoved\": \"Removed\",\n \"evse.statusPlanned\": \"Planned\",\n \"evse.statusReserved\": \"Reserved\",\n \"evse.statusInoperative\": \"Inoperative\",\n \"evse.statusOutOfOrder\": \"Out of Order\",\n \"evse.statusError\": \"Error\",\n \"evse.statusUnknown\": \"Unknown\",\n \"locationType.onStreet\": \"On Street\",\n \"locationType.parkingGarage\": \"Parking Garage\",\n \"locationType.undergroundGarage\": \"Underground Garage\",\n \"locationType.parkingLot\": \"Parking Lot\",\n \"locationType.other\": \"Other\",\n \"locationType.unknown\": \"Unknown\",\n \"tariffPriceComponent.viewTariff\": \"View Tariff notes\",\n \"tariffNote.subHeader\": \"Tariff notes\",\n \"tariffNote.eFluxScheduledTariffNote\":\n \"A scheduled tariff overrides base tariff prices for specific time period.\",\n \"tariffNote.dynamicScheduledTariffNote\":\n \"Dynamic price is adjusted automatically based on energy market price (1 hour interval).\",\n \"tariffNote.scheduledTariffNote\":\n \"A scheduled tariff overrides base tariff prices for specific time period.\",\n \"tariffNote.baseTariffNote\":\n \"Tariffs shown here have been sent to E-Flux by roaming partner. Accuracy may vary depending on provider.\",\n \"tariff.congestionPricing\": \"Congestion pricing may apply\",\n \"tariff.fullDetailsHeader\": \"Tariff details\",\n \"tariff.lastUpdated\": \"Last updated {{date}}\",\n \"tariff.report\": \"Report\",\n \"tariff.reportThanks\": \"Thanks for reporting\",\n \"tariff.reportError\": \"Couldn't send, try again\",\n \"evse.pricing\": \"Pricing\",\n \"dynamicTariffs.subHeader\": \"Hourly Prices\",\n \"location.viewAllHourlyPrices\": \"View All Hourly Prices\",\n \"location.operatorInfo\": \"Operator\",\n \"location.operator\": \"Operator\",\n \"location.suboperator\": \"Suboperator\",\n \"location.owner\": \"Owner\",\n \"location.openingHours\": \"Opening hours\",\n \"location.open24_7\": \"Open 24/7\",\n \"location.openNow\": \"Open now\",\n \"location.closedNow\": \"Closed\",\n \"location.closed\": \"Closed\",\n \"location.opensAt\": \"opens {{time}}\",\n \"location.closesAt\": \"until {{time}}\",\n \"location.chargingWhenClosed\": \"Charging available when closed\",\n \"location.exceptionalClosings\": \"Exceptional closings\",\n \"location.exceptionalOpenings\": \"Exceptional openings\",\n \"location.visitWebsite\": \"Website\",\n \"weekday.mon\": \"Mon\",\n \"weekday.tue\": \"Tue\",\n \"weekday.wed\": \"Wed\",\n \"weekday.thu\": \"Thu\",\n \"weekday.fri\": \"Fri\",\n \"weekday.sat\": \"Sat\",\n \"weekday.sun\": \"Sun\",\n \"backButton.backTo\": \"Back To\",\n};\n\nexport const nl: LabelsType = {\n \"search.placeholder\": \"Voer een locatie in...\",\n \"cdrPrice.flatFee\": \"{{total}} extra kosten\",\n \"tariffPriceComponent.dynamicTariffHeader\": \"Dynamisch Tarief - {{date}}\",\n \"tariffPriceComponent.flat\": \"{{total}} sessie\",\n \"tariffPriceComponent.time\": \"{{total}} / uur\",\n \"tariffPriceComponent.energy\": \"{{total}} / kWh\",\n \"tariffPriceComponent.parkingTime\": \"{{total}} / uur blokkeertarief\",\n \"tariffPriceComponent.parkingTimeWait\":\n \"{{minutes}} min. wachttijd voor blokkeertarief\",\n \"tariffPriceComponent.noTariff\": \"Geen beschikbaar tarief\",\n \"tariffPriceComponent.baseTariff\": \"Basistarief\",\n \"tariffPriceComponent.active\": \"Nu actief\",\n \"tariffPriceComponent.currentPrice\": \"Huidige prijs\",\n \"filters.header\": \"Filters\",\n \"filters.dcChargers\": \"DC-laders\",\n \"filters.efluxChargers\": \"E-Flux-laders\",\n \"filters.noAdditionalFee\": \"Zonder extra kosten per sessie\",\n \"filters.available\": \"Beschikbaar\",\n \"filters.charging\": \"Laden\",\n \"filters.notAvailable\": \"Niet beschikbaar\",\n \"filters.chargingPower\": \"Laadvermogen [kW]\",\n \"filters.connectorType\": \"Aansluitingstype\",\n \"filters.apply\": \"Filters toepassen\",\n \"filters.clearAll\": \"Alle filters wissen\",\n \"filters.onlyShow\": \"Alleen tonen\",\n \"filters.statusHeading\": \"Status\",\n \"filters.chargingAccessibility\": \"Voertuigtoegang\",\n \"filters.accessibilityAll\": \"Alle voertuigen\",\n \"filters.accessibilityTesla\": \"Alleen Tesla\",\n \"filters.allAccessibility\": \"Alle toegankelijkheidstypes\",\n \"filters.remoteStartStop\": \"Ondersteunt op afstand laden\",\n \"filters.searchPhrase\": \"Zoeken\",\n \"filters.searchPhrasePlaceholder\": \"EVSE-ID of naam\",\n \"filters.operator\": \"Operator(s) opnemen\",\n \"filters.excludeOperator\": \"Operator(s) uitsluiten\",\n \"filters.authMethodCapabilities\": \"Betaalmethoden\",\n \"filters.authCapability.rfid\": \"RFID\",\n \"filters.authCapability.plugAndCharge\": \"Plug and Charge\",\n \"filters.authCapability.creditCard\": \"Creditcard / pinpas\",\n \"filters.authCapability.remoteStartStop\": \"Op afstand starten/stoppen\",\n \"evse.statusAvailable\": \"Beschikbaar\",\n \"evse.statusCharging\": \"Laden\",\n \"evse.statusUnavailable\": \"Niet beschikbaar\",\n \"evse.statusError\": \"Fout\",\n \"evse.statusRemoved\": \"Verwijderd\",\n \"evse.statusPlanned\": \"Gepland\",\n \"evse.statusReserved\": \"Gereserveerd\",\n \"evse.statusInoperative\": \"Inoperative\",\n \"evse.statusOutOfOrder\": \"Uit van orde\",\n \"evse.statusUnknown\": \"Onbekend\",\n \"locationType.onStreet\": \"Op straat\",\n \"locationType.parkingGarage\": \"Parkeergarage\",\n \"locationType.undergroundGarage\": \"Ondergrondse garage\",\n \"locationType.parkingLot\": \"Parkeerterrein\",\n \"locationType.other\": \"Anders\",\n \"locationType.unknown\": \"Onbekend\",\n \"tariffPriceComponent.viewTariff\": \"Tariefnotitie bekijken\",\n \"tariffNote.subHeader\": \"Tariefnotities\",\n \"tariffNote.eFluxScheduledTariffNote\":\n \"Een gepland tarief overschrijft de basis tariefprijzen voor een specifieke periode.\",\n \"tariffNote.dynamicScheduledTariffNote\":\n \"De dynamische prijs wordt automatisch aangepast op basis van de energiemarktprijs (interval van 1 uur).\",\n \"tariffNote.scheduledTariffNote\":\n \"Een gepland tarief overschrijft de basis tariefprijzen voor een specifieke periode.\",\n \"tariffNote.baseTariffNote\":\n \"De hier getoonde tarieven zijn door de roamingpartner aan E-Flux verstrekt. De nauwkeurigheid kan variëren afhankelijk van de aanbieder.\",\n \"tariff.congestionPricing\": \"Congestietarief kan van toepassing zijn\",\n \"tariff.fullDetailsHeader\": \"Tariefdetails\",\n \"tariff.lastUpdated\": \"Laatst bijgewerkt {{date}}\",\n \"tariff.report\": \"Rapporteren\",\n \"tariff.reportThanks\": \"Bedankt voor de melding\",\n \"tariff.reportError\": \"Versturen mislukt, probeer opnieuw\",\n \"evse.pricing\": \"Tarieven\",\n \"dynamicTariffs.subHeader\": \"Uurtarieven\",\n \"location.viewAllHourlyPrices\": \"Bekijk Alle Uurprijzen\",\n \"location.operatorInfo\": \"Exploitant\",\n \"location.operator\": \"Exploitant\",\n \"location.suboperator\": \"Subexploitant\",\n \"location.owner\": \"Eigenaar\",\n \"location.openingHours\": \"Openingstijden\",\n \"location.open24_7\": \"24/7 geopend\",\n \"location.openNow\": \"Nu open\",\n \"location.closedNow\": \"Gesloten\",\n \"location.closed\": \"Gesloten\",\n \"location.opensAt\": \"opent om {{time}}\",\n \"location.closesAt\": \"tot {{time}}\",\n \"location.chargingWhenClosed\": \"Laden mogelijk wanneer gesloten\",\n \"location.exceptionalClosings\": \"Uitzonderlijke sluitingen\",\n \"location.exceptionalOpenings\": \"Uitzonderlijke openingen\",\n \"location.visitWebsite\": \"Website\",\n \"weekday.mon\": \"Ma\",\n \"weekday.tue\": \"Di\",\n \"weekday.wed\": \"Wo\",\n \"weekday.thu\": \"Do\",\n \"weekday.fri\": \"Vr\",\n \"weekday.sat\": \"Za\",\n \"weekday.sun\": \"Zo\",\n \"backButton.backTo\": \"Terug Naar\",\n};\n\nexport const de: LabelsType = {\n \"search.placeholder\": \"Geben Sie einen Ort ein...\",\n \"cdrPrice.flatFee\": \"{{total}} Zusatzgebühr\",\n \"tariffPriceComponent.dynamicTariffHeader\": \"Dynamischer Tarif - {{date}}\",\n \"tariffPriceComponent.flat\": \"{{total}} Sitzung\",\n \"tariffPriceComponent.time\": \"{{total}} / Stunde\",\n \"tariffPriceComponent.energy\": \"{{total}} / kWh\",\n \"tariffPriceComponent.parkingTime\": \"{{total}} / Stunde Blockiergebühr\",\n \"tariffPriceComponent.parkingTimeWait\":\n \"{{minutes}} Min. Wartezeit vor der Blockiergebühr\",\n \"tariffPriceComponent.noTariff\": \"Kein Tarif verfügbar\",\n \"tariffPriceComponent.baseTariff\": \"Grundtarif\",\n \"tariffPriceComponent.active\": \"Aktuell aktiv\",\n \"tariffPriceComponent.currentPrice\": \"Aktueller Preis\",\n \"filters.header\": \"Filter\",\n \"filters.dcChargers\": \"Gleichstrom-Ladegeräte\",\n \"filters.efluxChargers\": \"E-Flux-Ladegeräte\",\n \"filters.noAdditionalFee\": \"Ohne zusätzliche Gebühr pro Sitzung\",\n \"filters.available\": \"Verfügbar\",\n \"filters.charging\": \"Lädt\",\n \"filters.notAvailable\": \"Nicht verfügbar\",\n \"filters.chargingPower\": \"Ladeleistung [kW]\",\n \"filters.connectorType\": \"Steckertyp\",\n \"filters.apply\": \"Filter anwenden\",\n \"filters.clearAll\": \"Alle Filter löschen\",\n \"filters.onlyShow\": \"Nur anzeigen\",\n \"filters.statusHeading\": \"Status\",\n \"filters.chargingAccessibility\": \"Fahrzeugzugänglichkeit\",\n \"filters.accessibilityAll\": \"Alle Fahrzeuge\",\n \"filters.accessibilityTesla\": \"Nur Tesla\",\n \"filters.allAccessibility\": \"Alle Zugänglichkeitstypen\",\n \"filters.remoteStartStop\": \"Unterstützt Fernladen\",\n \"filters.searchPhrase\": \"Suche\",\n \"filters.searchPhrasePlaceholder\": \"EVSE-ID oder Name\",\n \"filters.operator\": \"Betreiber einschließen\",\n \"filters.excludeOperator\": \"Betreiber ausschließen\",\n \"filters.authMethodCapabilities\": \"Zahlungsmethoden\",\n \"filters.authCapability.rfid\": \"RFID\",\n \"filters.authCapability.plugAndCharge\": \"Plug and Charge\",\n \"filters.authCapability.creditCard\": \"Kredit- / Debitkarte\",\n \"filters.authCapability.remoteStartStop\": \"Fernstart/-stopp\",\n \"evse.statusAvailable\": \"Verfügbar\",\n \"evse.statusCharging\": \"Lädt\",\n \"evse.statusUnavailable\": \"Nicht verfügbar\",\n \"evse.statusRemoved\": \"Entfernt\",\n \"evse.statusPlanned\": \"Geplant\",\n \"evse.statusReserved\": \"Reserviert\",\n \"evse.statusInoperative\": \"Inoperative\",\n \"evse.statusOutOfOrder\": \"Ausgeschaltet\",\n \"evse.statusError\": \"Fehler\",\n \"evse.statusUnknown\": \"Unbekannt\",\n \"evse.pricing\": \"Preisbildung\",\n \"locationType.onStreet\": \"Straße\",\n \"locationType.parkingGarage\": \"Parkhaus\",\n \"locationType.undergroundGarage\": \"Tiefgarage\",\n \"locationType.parkingLot\": \"Parkplatz\",\n \"locationType.other\": \"Andere\",\n \"locationType.unknown\": \"Unbekannt\",\n \"tariffPriceComponent.viewTariff\": \"Tarif anzeigen\",\n \"tariffNote.subHeader\": \"Tarifhinweise\",\n \"tariffNote.eFluxScheduledTariffNote\":\n \"Ein geplanter Tarif überschreibt die Basistarifpreise für einen bestimmten Zeitraum.\",\n \"tariffNote.dynamicScheduledTariffNote\":\n \"Der dynamische Preis wird automatisch basierend auf dem Energiepreis auf dem Markt angepasst (im Intervall von 1 Stunde).\",\n \"tariffNote.scheduledTariffNote\":\n \"Ein geplanter Tarif überschreibt die Basistarifpreise für einen bestimmten Zeitraum.\",\n \"tariffNote.baseTariffNote\":\n \"Die hier angezeigten Tarife wurden von einem Roaming-Partner an E-Flux gesendet. Die Genauigkeit kann je nach Anbieter variieren.\",\n \"tariff.congestionPricing\": \"Überlastungstarif kann anfallen\",\n \"tariff.fullDetailsHeader\": \"Tarifdetails\",\n \"tariff.lastUpdated\": \"Zuletzt aktualisiert {{date}}\",\n \"tariff.report\": \"Melden\",\n \"tariff.reportThanks\": \"Danke für die Meldung\",\n \"tariff.reportError\": \"Senden fehlgeschlagen, erneut versuchen\",\n \"dynamicTariffs.subHeader\": \"Stundentarife\",\n \"location.viewAllHourlyPrices\": \"Alle Stundenpreise anzeigen\",\n \"location.operatorInfo\": \"Betreiber\",\n \"location.operator\": \"Betreiber\",\n \"location.suboperator\": \"Unterbetreiber\",\n \"location.owner\": \"Eigentümer\",\n \"location.openingHours\": \"Öffnungszeiten\",\n \"location.open24_7\": \"24/7 geöffnet\",\n \"location.openNow\": \"Jetzt geöffnet\",\n \"location.closedNow\": \"Geschlossen\",\n \"location.closed\": \"Geschlossen\",\n \"location.opensAt\": \"öffnet um {{time}}\",\n \"location.closesAt\": \"bis {{time}}\",\n \"location.chargingWhenClosed\": \"Laden auch außerhalb der Öffnungszeiten möglich\",\n \"location.exceptionalClosings\": \"Ausnahmsweise geschlossen\",\n \"location.exceptionalOpenings\": \"Ausnahmsweise geöffnet\",\n \"location.visitWebsite\": \"Website\",\n \"weekday.mon\": \"Mo\",\n \"weekday.tue\": \"Di\",\n \"weekday.wed\": \"Mi\",\n \"weekday.thu\": \"Do\",\n \"weekday.fri\": \"Fr\",\n \"weekday.sat\": \"Sa\",\n \"weekday.sun\": \"So\",\n \"backButton.backTo\": \"Zurück zu\",\n};\n\nexport const fr: LabelsType = {\n \"search.placeholder\": \"Entrez un lieu...\",\n \"cdrPrice.flatFee\": \"{{total}} frais supplémentaires\",\n \"tariffPriceComponent.dynamicTariffHeader\": \"Tarif Dynamique - {{date}}\",\n \"tariffPriceComponent.flat\": \"{{total}} session\",\n \"tariffPriceComponent.time\": \"{{total}} / heure\",\n \"tariffPriceComponent.energy\": \"{{total}} / kWh\",\n \"tariffPriceComponent.parkingTime\":\n \"{{total}} / frais d'occupation par heure\",\n \"tariffPriceComponent.parkingTimeWait\":\n \"{{minutes}} min. avant frais d'occupation\",\n \"tariffPriceComponent.noTariff\": \"Aucun tarif disponible\",\n \"tariffPriceComponent.baseTariff\": \"Tarif de base\",\n \"tariffPriceComponent.active\": \"Actuellement actif\",\n \"tariffPriceComponent.currentPrice\": \"Prix actuel\",\n \"filters.header\": \"Filtres\",\n \"filters.dcChargers\": \"Chargeurs à courant continu\",\n \"filters.efluxChargers\": \"Chargeurs E-Flux\",\n \"filters.noAdditionalFee\": \"Sans frais supplémentaires par séance\",\n \"filters.available\": \"Disponible\",\n \"filters.charging\": \"En charge\",\n \"filters.notAvailable\": \"Indisponible\",\n \"filters.chargingPower\": \"Puissance de charge [kW]\",\n \"filters.connectorType\": \"Type de connecteur\",\n \"filters.apply\": \"Appliquer les filtres\",\n \"filters.clearAll\": \"Effacer tous les filtres\",\n \"filters.onlyShow\": \"Afficher uniquement\",\n \"filters.statusHeading\": \"Statut\",\n \"filters.chargingAccessibility\": \"Accessibilité véhicule\",\n \"filters.accessibilityAll\": \"Tous véhicules\",\n \"filters.accessibilityTesla\": \"Tesla seulement\",\n \"filters.allAccessibility\": \"Tous types d'accessibilité\",\n \"filters.remoteStartStop\": \"Prend en charge la recharge à distance\",\n \"filters.searchPhrase\": \"Rechercher\",\n \"filters.searchPhrasePlaceholder\": \"ID EVSE ou nom\",\n \"filters.operator\": \"Inclure le(s) opérateur(s)\",\n \"filters.excludeOperator\": \"Exclure le(s) opérateur(s)\",\n \"filters.authMethodCapabilities\": \"Moyens de paiement\",\n \"filters.authCapability.rfid\": \"RFID\",\n \"filters.authCapability.plugAndCharge\": \"Plug and Charge\",\n \"filters.authCapability.creditCard\": \"Carte de crédit / débit\",\n \"filters.authCapability.remoteStartStop\": \"Démarrage/arrêt à distance\",\n \"evse.statusAvailable\": \"Disponible\",\n \"evse.statusCharging\": \"En charge\",\n \"evse.statusUnavailable\": \"Indisponible\",\n \"evse.statusRemoved\": \"Supprimé\",\n \"evse.statusPlanned\": \"Planifié\",\n \"evse.statusReserved\": \"Réservé\",\n \"evse.statusInoperative\": \"Hors service\",\n \"evse.statusOutOfOrder\": \"En panne\",\n \"evse.statusError\": \"Erreur\",\n \"evse.statusUnknown\": \"Inconnu\",\n \"evse.pricing\": \"Tarification\",\n \"locationType.onStreet\": \"Dans la rue\",\n \"locationType.parkingGarage\": \"Parking couvert\",\n \"locationType.undergroundGarage\": \"Parking souterrain\",\n \"locationType.parkingLot\": \"Parking\",\n \"locationType.other\": \"Autre\",\n \"locationType.unknown\": \"Inconnu\",\n \"tariffPriceComponent.viewTariff\": \"Voir le tarif\",\n \"tariffNote.subHeader\": \"Notes tarifaires\",\n \"tariffNote.eFluxScheduledTariffNote\":\n \"Un tarif programmé remplace les prix de base du tarif pour une période spécifique.\",\n \"tariffNote.dynamicScheduledTariffNote\":\n \"Le prix dynamique est ajusté automatiquement en fonction du prix du marché de l'énergie (intervalle d'une heure).\",\n \"tariffNote.scheduledTariffNote\":\n \"Un tarif programmé remplace les prix de base du tarif pour une période spécifique.\",\n \"tariffNote.baseTariffNote\":\n \"Les tarifs affichés ici ont été transmis à E-Flux par le partenaire d'itinérance. La précision peut varier en fonction du fournisseur.\",\n \"tariff.congestionPricing\": \"Tarification de congestion peut s'appliquer\",\n \"tariff.fullDetailsHeader\": \"Détails du tarif\",\n \"tariff.lastUpdated\": \"Mis à jour {{date}}\",\n \"tariff.report\": \"Signaler\",\n \"tariff.reportThanks\": \"Merci pour le signalement\",\n \"tariff.reportError\": \"Échec de l'envoi, réessayez\",\n \"dynamicTariffs.subHeader\": \"Tarifs horaires\",\n \"location.viewAllHourlyPrices\": \"Voir tous les tarifs horaires\",\n \"location.operatorInfo\": \"Opérateur\",\n \"location.operator\": \"Opérateur\",\n \"location.suboperator\": \"Sous-opérateur\",\n \"location.owner\": \"Propriétaire\",\n \"location.openingHours\": \"Heures d'ouverture\",\n \"location.open24_7\": \"Ouvert 24h/24, 7j/7\",\n \"location.openNow\": \"Ouvert\",\n \"location.closedNow\": \"Fermé\",\n \"location.closed\": \"Fermé\",\n \"location.opensAt\": \"ouvre à {{time}}\",\n \"location.closesAt\": \"jusqu'à {{time}}\",\n \"location.chargingWhenClosed\": \"Recharge possible hors des heures d'ouverture\",\n \"location.exceptionalClosings\": \"Fermetures exceptionnelles\",\n \"location.exceptionalOpenings\": \"Ouvertures exceptionnelles\",\n \"location.visitWebsite\": \"Site web\",\n \"weekday.mon\": \"Lun\",\n \"weekday.tue\": \"Mar\",\n \"weekday.wed\": \"Mer\",\n \"weekday.thu\": \"Jeu\",\n \"weekday.fri\": \"Ven\",\n \"weekday.sat\": \"Sam\",\n \"weekday.sun\": \"Dim\",\n \"backButton.backTo\": \"Retour à\",\n};\n\nexport const it: LabelsType = {\n \"search.placeholder\": \"Inserisci una posizione...\",\n \"cdrPrice.flatFee\": \"{{total}} costi aggiuntivi\",\n \"tariffPriceComponent.dynamicTariffHeader\": \"Tariffa dinamica - {{date}}\",\n \"tariffPriceComponent.flat\": \"{{total}} sessione\",\n \"tariffPriceComponent.time\": \"{{total}} / ora\",\n \"tariffPriceComponent.energy\": \"{{total}} / kWh\",\n \"tariffPriceComponent.parkingTime\": \"{{total}} / ora tariffa di inattività\",\n \"tariffPriceComponent.parkingTimeWait\":\n \"{{minutes}} min. tempo di attesa prima della tariffa di inattività\",\n \"tariffPriceComponent.noTariff\": \"Nessuna tariffa disponibile\",\n \"tariffPriceComponent.baseTariff\": \"Tariffa base\",\n \"tariffPriceComponent.active\": \"Attivo ora\",\n \"tariffPriceComponent.currentPrice\": \"Prezzo attuale\",\n \"filters.header\": \"Filtri\",\n \"filters.dcChargers\": \"Caricabatterie DC\",\n \"filters.efluxChargers\": \"Caricabatterie E-Flux\",\n \"filters.noAdditionalFee\": \"Senza costi aggiuntivi per sessione\",\n \"filters.available\": \"Disponibile\",\n \"filters.charging\": \"In carica\",\n \"filters.notAvailable\": \"Non disponibile\",\n \"filters.chargingPower\": \"Potenza di ricarica [kW]\",\n \"filters.connectorType\": \"Tipo di connettore\",\n \"filters.apply\": \"Applica filtri\",\n \"filters.clearAll\": \"Cancella tutti i filtri\",\n \"filters.onlyShow\": \"Mostra solo\",\n \"filters.statusHeading\": \"Stato\",\n \"filters.chargingAccessibility\": \"Accessibilità del veicolo\",\n \"filters.accessibilityAll\": \"Tutti i veicoli\",\n \"filters.accessibilityTesla\": \"Solo Tesla\",\n \"filters.allAccessibility\": \"Tutti i tipi di accessibilità\",\n \"filters.remoteStartStop\": \"Supporta la ricarica da remoto\",\n \"filters.searchPhrase\": \"Cerca\",\n \"filters.searchPhrasePlaceholder\": \"ID EVSE o nome\",\n \"filters.operator\": \"Includi operatore/i\",\n \"filters.excludeOperator\": \"Escludi operatore/i\",\n \"filters.authMethodCapabilities\": \"Metodi di pagamento\",\n \"filters.authCapability.rfid\": \"RFID\",\n \"filters.authCapability.plugAndCharge\": \"Plug and Charge\",\n \"filters.authCapability.creditCard\": \"Carta di credito / debito\",\n \"filters.authCapability.remoteStartStop\": \"Avvio/stop remoto\",\n \"evse.statusAvailable\": \"Disponibile\",\n \"evse.statusCharging\": \"In carica\",\n \"evse.statusUnavailable\": \"Non disponibile\",\n \"evse.statusRemoved\": \"Rimossa\",\n \"evse.statusPlanned\": \"Pianificata\",\n \"evse.statusReserved\": \"Réservé\",\n \"evse.statusInoperative\": \"Inoperativo\",\n \"evse.statusOutOfOrder\": \"Fuori servizio\",\n \"evse.statusError\": \"Errore\",\n \"evse.statusUnknown\": \"Sconosciuto\",\n \"locationType.onStreet\": \"In strada\",\n \"locationType.parkingGarage\": \"Garage per il parcheggio\",\n \"locationType.undergroundGarage\": \"Garage sotterraneo\",\n \"locationType.parkingLot\": \"Parcheggio\",\n \"locationType.other\": \"Altro\",\n \"locationType.unknown\": \"Sconosciuto\",\n \"tariffPriceComponent.viewTariff\": \"Visualizza note tariffarie\",\n \"tariffNote.subHeader\": \"Note tariffarie\",\n \"tariffNote.eFluxScheduledTariffNote\":\n \"Una tariffa programmata sostituisce i prezzi della tariffa base per un periodo di tempo specifico.\",\n \"tariffNote.dynamicScheduledTariffNote\":\n \"Il prezzo dinamico si regola automaticamente in base al prezzo del mercato dell'energia (intervallo di 1 ora).\",\n \"tariffNote.scheduledTariffNote\":\n \"Una tariffa programmata sostituisce i prezzi della tariffa base per un periodo di tempo specifico.\",\n \"tariffNote.baseTariffNote\":\n \"Le tariffe mostrate qui sono state inviate a E-Flux dal partner di roaming. L'accuratezza può variare a seconda del fornitore.\",\n \"tariff.congestionPricing\":\n \"Potrebbero essere applicate tariffe di congestione\",\n \"tariff.fullDetailsHeader\": \"Dettagli tariffa\",\n \"tariff.lastUpdated\": \"Ultimo aggiornamento {{date}}\",\n \"tariff.report\": \"Segnala\",\n \"tariff.reportThanks\": \"Grazie per la segnalazione\",\n \"tariff.reportError\": \"Invio non riuscito, riprova\",\n \"evse.pricing\": \"Prezzi\",\n \"dynamicTariffs.subHeader\": \"Prezzi orari\",\n \"location.viewAllHourlyPrices\": \"Visualizza tutti i prezzi orari\",\n \"location.operatorInfo\": \"Operatore\",\n \"location.operator\": \"Operatore\",\n \"location.suboperator\": \"Sub-operatore\",\n \"location.owner\": \"Proprietario\",\n \"location.openingHours\": \"Orari di apertura\",\n \"location.open24_7\": \"Aperto 24/7\",\n \"location.openNow\": \"Aperto ora\",\n \"location.closedNow\": \"Chiuso\",\n \"location.closed\": \"Chiuso\",\n \"location.opensAt\": \"apre alle {{time}}\",\n \"location.closesAt\": \"fino alle {{time}}\",\n \"location.chargingWhenClosed\": \"Ricarica disponibile anche da chiuso\",\n \"location.exceptionalClosings\": \"Chiusure eccezionali\",\n \"location.exceptionalOpenings\": \"Aperture eccezionali\",\n \"location.visitWebsite\": \"Sito web\",\n \"weekday.mon\": \"Lun\",\n \"weekday.tue\": \"Mar\",\n \"weekday.wed\": \"Mer\",\n \"weekday.thu\": \"Gio\",\n \"weekday.fri\": \"Ven\",\n \"weekday.sat\": \"Sab\",\n \"weekday.sun\": \"Dom\",\n \"backButton.backTo\": \"Torna a\",\n};\n\nexport const es: LabelsType = {\n \"search.placeholder\": \"Ingrese una ubicación...\",\n \"cdrPrice.flatFee\": \"{{total}} tarifa adicional\",\n \"tariffPriceComponent.dynamicTariffHeader\": \"Tarifa Dinámica - {{date}}\",\n \"tariffPriceComponent.flat\": \"{{total}} sesión\",\n \"tariffPriceComponent.time\": \"{{total}} / hora\",\n \"tariffPriceComponent.energy\": \"{{total}} / kWh\",\n \"tariffPriceComponent.parkingTime\": \"{{total}} / hora tarifa de inactividad\",\n \"tariffPriceComponent.parkingTimeWait\":\n \"{{minutes}} min. tiempo de espera antes de la tarifa de inactividad\",\n \"tariffPriceComponent.noTariff\": \"Tarifa no disponible\",\n \"tariffPriceComponent.baseTariff\": \"Tarifa Base\",\n \"tariffPriceComponent.active\": \"Activo ahora\",\n \"tariffPriceComponent.currentPrice\": \"Precio actual\",\n \"filters.header\": \"Filtros\",\n \"filters.dcChargers\": \"Cargadores DC\",\n \"filters.efluxChargers\": \"Cargadores E-Flux\",\n \"filters.noAdditionalFee\": \"Sin tarifa adicional por sesión\",\n \"filters.available\": \"Disponible\",\n \"filters.charging\": \"Cargando\",\n \"filters.notAvailable\": \"No Disponible\",\n \"filters.chargingPower\": \"Potencia de Carga [kW]\",\n \"filters.connectorType\": \"Tipo de Conector\",\n \"filters.apply\": \"Aplicar Filtros\",\n \"filters.clearAll\": \"Limpiar Todos los Filtros\",\n \"filters.onlyShow\": \"Mostrar Solo\",\n \"filters.statusHeading\": \"Estado\",\n \"filters.chargingAccessibility\": \"Accesibilidad del vehículo\",\n \"filters.accessibilityAll\": \"Todos los vehículos\",\n \"filters.accessibilityTesla\": \"Solo Tesla\",\n \"filters.allAccessibility\": \"Todos los tipos de accesibilidad\",\n \"filters.remoteStartStop\": \"Admite carga remota\",\n \"filters.searchPhrase\": \"Buscar\",\n \"filters.searchPhrasePlaceholder\": \"ID de EVSE o nombre\",\n \"filters.operator\": \"Incluir operador(es)\",\n \"filters.excludeOperator\": \"Excluir operador(es)\",\n \"filters.authMethodCapabilities\": \"Métodos de pago\",\n \"filters.authCapability.rfid\": \"RFID\",\n \"filters.authCapability.plugAndCharge\": \"Plug and Charge\",\n \"filters.authCapability.creditCard\": \"Tarjeta de crédito / débito\",\n \"filters.authCapability.remoteStartStop\": \"Inicio/parada remota\",\n \"evse.statusRemoved\": \"Eliminado\",\n \"evse.statusPlanned\": \"Planificado\",\n \"evse.statusReserved\": \"Reservado\",\n \"evse.statusInoperative\": \"Fuera de servicio\",\n \"evse.statusOutOfOrder\": \"Averiado\",\n \"evse.statusAvailable\": \"Disponible\",\n \"evse.statusCharging\": \"Cargando\",\n \"evse.statusUnavailable\": \"No Disponible\",\n \"evse.statusError\": \"Error\",\n \"evse.statusUnknown\": \"Desconocido\",\n \"locationType.onStreet\": \"En la calle\",\n \"locationType.parkingGarage\": \"Garaje para Estacionar\",\n \"locationType.undergroundGarage\": \"Garaje Subterráneo\",\n \"locationType.parkingLot\": \"Estacionamiento\",\n \"locationType.other\": \"Otro\",\n \"locationType.unknown\": \"Desconocido\",\n \"tariffPriceComponent.viewTariff\": \"Ver notas de tarifas\",\n \"tariffNote.subHeader\": \"Notas de Tarifas\",\n \"tariffNote.eFluxScheduledTariffNote\":\n \"Una tarifa programada anula los precios de la tarifa base para un período de tiempo específico.\",\n \"tariffNote.dynamicScheduledTariffNote\":\n \"El precio dinámico se ajusta automáticamente según el precio del mercado de la energía (intervalo de 1 hora).\",\n \"tariffNote.scheduledTariffNote\":\n \"Una tarifa programada anula los precios de la tarifa base para un período de tiempo específico.\",\n \"tariffNote.baseTariffNote\":\n \"Las tarifas mostradas aquí han sido enviadas a E-Flux por el socio de roaming. La precisión puede variar según el proveedor.\",\n \"tariff.congestionPricing\": \"Puede aplicarse tarifa por congestión\",\n \"tariff.fullDetailsHeader\": \"Detalles de la tarifa\",\n \"tariff.lastUpdated\": \"Última actualización {{date}}\",\n \"tariff.report\": \"Reportar\",\n \"tariff.reportThanks\": \"Gracias por reportarlo\",\n \"tariff.reportError\": \"Error al enviar, inténtalo de nuevo\",\n \"evse.pricing\": \"Precios\",\n \"dynamicTariffs.subHeader\": \"Precios por Hora\",\n \"location.viewAllHourlyPrices\": \"Ver Todos los Precios por Hora\",\n \"location.operatorInfo\": \"Operador\",\n \"location.operator\": \"Operador\",\n \"location.suboperator\": \"Suboperador\",\n \"location.owner\": \"Propietario\",\n \"location.openingHours\": \"Horario de apertura\",\n \"location.open24_7\": \"Abierto 24/7\",\n \"location.openNow\": \"Abierto ahora\",\n \"location.closedNow\": \"Cerrado\",\n \"location.closed\": \"Cerrado\",\n \"location.opensAt\": \"abre a las {{time}}\",\n \"location.closesAt\": \"hasta las {{time}}\",\n \"location.chargingWhenClosed\": \"Carga disponible cuando está cerrado\",\n \"location.exceptionalClosings\": \"Cierres excepcionales\",\n \"location.exceptionalOpenings\": \"Aperturas excepcionales\",\n \"location.visitWebsite\": \"Sitio web\",\n \"weekday.mon\": \"Lun\",\n \"weekday.tue\": \"Mar\",\n \"weekday.wed\": \"Mié\",\n \"weekday.thu\": \"Jue\",\n \"weekday.fri\": \"Vie\",\n \"weekday.sat\": \"Sáb\",\n \"weekday.sun\": \"Dom\",\n \"backButton.backTo\": \"Volver a\",\n};\n\nexport const strings = {\n en,\n nl,\n de,\n fr,\n it,\n es,\n};\n","import { RemoteConfig } from \"../types\";\n\ntype RequestOptionsType = {\n method?: string;\n body?: string;\n authorization?: string;\n version?: string;\n headers?: {\n \"Content-Type\": string;\n };\n};\n\nexport async function request(url: string, options?: RequestOptionsType) {\n try {\n const response = await fetch(url, {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...(options.version && {\n version: options.version,\n }),\n ...(options.authorization &&\n options.version === \"v2\" && {\n Authorization: `Bearer ${options.authorization}`,\n }),\n },\n ...options,\n });\n\n switch (response.status) {\n case 200:\n return response.json();\n case 400:\n throw new Error(\"Bad request\");\n case 404:\n throw new Error(\"Not Found\");\n case 500:\n throw new Error(\"Server Error\");\n case 503:\n throw new Error(\"Timeout!\");\n default:\n throw new Error(`Unexpected status: ${response.status}`);\n }\n } catch (e) {\n if (e instanceof DOMException) {\n return null;\n }\n throw e;\n }\n}\n\nexport async function _fetchGeohashes(\n apiRoot,\n version,\n authorization,\n limitToLocationIds,\n { precision, bbox, ...props },\n): Promise<any> {\n return request(`${apiRoot}/1/map/search`, {\n method: \"POST\",\n version,\n authorization,\n body: JSON.stringify({\n gridPrecision: precision,\n bbox,\n ...(limitToLocationIds?.length > 0 && {\n locationIds: limitToLocationIds,\n }),\n ...props,\n ...(props?.operatorOnly ? { operator: [props.operatorOnly] } : {}),\n ...(props?.chargingAccessibility &&\n props.chargingAccessibility !== \"ALL\" && {\n chargingAccessibility: props.chargingAccessibility,\n }),\n searchPhrase: props?.searchPhrase || undefined,\n excludeOperator: props?.excludeOperator?.length\n ? props.excludeOperator\n : undefined,\n authMethodCapabilities: props?.authMethodCapabilities?.length\n ? props.authMethodCapabilities\n : undefined,\n }),\n });\n}\n\nexport async function _fetchTariffs(\n apiRoot,\n version,\n authorization,\n { origin, ids },\n): Promise<any> {\n return request(`${apiRoot}/1/map/tariff`, {\n method: \"POST\",\n version,\n authorization,\n body: JSON.stringify({\n connection_id: origin.connectionId,\n country_code: origin.countryCode,\n party_id: origin.partyId,\n tariff_ids: ids,\n }),\n });\n}\n\nexport async function _fetchLocations(\n apiRoot,\n version,\n authorization,\n { ids, status },\n): Promise<any> {\n return request(`${apiRoot}/1/map/locations`, {\n method: \"POST\",\n version,\n authorization,\n body: JSON.stringify({\n ids,\n ...(version === \"v2\" ? { status } : {}),\n }),\n });\n}\n\nexport async function _reportProblem(\n apiRoot,\n version,\n authorization,\n {\n type,\n country_code,\n party_id,\n location_id,\n evse_uid,\n }: {\n type: string;\n country_code: string;\n party_id: string;\n location_id: string;\n evse_uid: string;\n },\n): Promise<any> {\n return request(`${apiRoot}/1/map/report-problem`, {\n method: \"POST\",\n version,\n authorization,\n body: JSON.stringify({\n type,\n country_code,\n party_id,\n location_id,\n evse_uid,\n }),\n });\n}\n\nexport async function loadRemoteConfig(\n apiRoot: string,\n version: string,\n authorization: string,\n): Promise<RemoteConfig> {\n const response = await request(`${apiRoot}/1/map/config`, {\n version: version,\n authorization: authorization,\n });\n\n return response?.data as RemoteConfig;\n}\n","import React, { useState, useMemo, useEffect, createContext } from \"react\";\nimport { LabelsType, strings, getLanguage } from \"../i18n\";\nimport {\n _fetchGeohashes,\n _fetchLocations,\n _fetchTariffs,\n _reportProblem,\n loadRemoteConfig,\n} from \"../utils/request\";\nimport {\n Location,\n Position,\n RoadMapOptions,\n Status,\n FilterConfiguration,\n} from \"../types\";\n\nexport type MapContextType = {\n t: (key: keyof LabelsType, props?: any) => string;\n isReady: boolean;\n options?: RoadMapOptions;\n setPlace: (place: any) => void;\n place?: google.maps.places.PlaceResult;\n fetchGeohashes?: ({ precision, bbox }) => Promise<any>;\n fetchLocations?: ({ ids }) => Promise<any>;\n fetchTariffs?: ({ origin, ids }) => Promise<any>;\n reportProblem?: (args: {\n type: string;\n country_code: string;\n party_id: string;\n location_id: string;\n evse_uid: string;\n }) => Promise<any>;\n filters?: any;\n setLocationsIds?: (ids: string[]) => void;\n locationIds?: string[];\n filterConfiguration?: FilterConfiguration;\n setFilters?: (filters: any) => void;\n language: string;\n position?: Position;\n locations?: Location[];\n locationsStatus?: Status;\n isSearching?: boolean;\n setIsSearching?: (isSearching: boolean) => void;\n};\n\n// MapContext is the context that is used to store the map data include the initial configuration\n// passed to the widget\nexport const MapContext = createContext<MapContextType>({\n isReady: false,\n setPlace: () => {},\n t: (key: string) => `Translate ${key}`,\n language: \"en\",\n});\n\ninterface Props {\n children: React.ReactNode;\n options: RoadMapOptions;\n language: string;\n}\n\nexport const MapProvider: React.FC<Props> = ({ children, ...props }) => {\n const [options, setOptions] = useState<RoadMapOptions>(props.options);\n const [filterConfiguration, setFilterConfiguration] =\n useState<FilterConfiguration>({\n preferredOperators: props.options.preferredOperators,\n showOperatorOnly: props.options.showOperatorOnly,\n showNoAdditionalFeeFilter: props.options.showNoAdditionalFeeFilter,\n showPublishingModeFilter: props.options.showPublishingModeFilter,\n showVehicleAvailabilityFilter:\n props.options.showVehicleAvailabilityFilter,\n ...(props.options.showSearchPhraseFilter !== undefined && {\n showSearchPhraseFilter: props.options.showSearchPhraseFilter,\n }),\n ...(props.options.showExcludeOperatorFilter !== undefined && {\n showExcludeOperatorFilter: props.options.showExcludeOperatorFilter,\n }),\n ...(props.options.showPaymentMethodFilter !== undefined && {\n showPaymentMethodFilter: props.options.showPaymentMethodFilter,\n }),\n });\n const [error, setError] = useState();\n const [place, setPlace] = useState();\n const [position, setPosition] = useState<Position>(props.options.position);\n const [filters, setFilters] = useState<{ status?: string }>({});\n const [locationIds, setLocationsIds] = useState<string[]>(\n [props.options.locationId].filter(Boolean),\n );\n const [locations, setLocations] = useState<Location[]>([]);\n const [locationsStatus, setLocationsStatus] = useState<Status>({\n type: \"success\",\n });\n const [isSearching, setIsSearching] = useState<boolean>(false);\n\n // check if debug flag\n const isDebug = window.location.search.includes(\"debug=true\");\n if (isDebug) {\n console.log(\"map-context options\", props.options);\n }\n\n const language = useMemo(\n () => getLanguage(props.options.language || \"en\"),\n [props.options.language],\n );\n const t = useMemo(() => {\n return (key: keyof LabelsType, props): string => {\n return strings[language][key].replace(/\\{\\{(\\w+)\\}\\}/g, (match, p1) => {\n return props[p1];\n });\n };\n }, [language]);\n\n const apiRoot = (() => {\n // if the apiRoot is set and contains `.dev`, use the configured value,\n // otherwise we use the default endpoint\n if (props.options.apiRoot && props.options.apiRoot.includes(\".dev\")) {\n return props.options.apiRoot;\n }\n switch (props.options.version) {\n case \"v2\":\n return \"https://roaming.road.io/v2/map-search\";\n default:\n return \"https://api.road.io\";\n }\n })();\n\n let version = props.options.version;\n let authorization = props.options.authorization;\n\n // if the request URL contains a map_key, override the authorization to enable\n // linking to bespoke map instances without multiple deployments\n const mapKey = window.location.search.split(\"map_key=\")[1];\n if (mapKey) {\n authorization = mapKey;\n version = \"v2\"; // force v2 for map key\n }\n\n const passThroughSearchOptions = {\n ...(props.options.infraProviderId && {\n infraProviderId: props.options.infraProviderId,\n }),\n ...(props.options.partyId && { partyId: props.options.partyId }),\n ...(props.options.partyIds?.length && {\n partyIds: props.options.partyIds,\n }),\n ...(props.options.evseId && { evseId: props.options.evseId }),\n ...(props.options.from && { from: props.options.from }),\n ...(props.options.to && { to: props.options.to }),\n };\n\n const fetchGeohashes = (args) =>\n _fetchGeohashes(\n apiRoot,\n version,\n authorization,\n props.options.limitToLocationIds || [],\n { ...passThroughSearchOptions, ...args },\n );\n\n const fetchLocations = _fetchLocations.bind(\n null,\n apiRoot,\n version,\n authorization,\n );\n\n const fetchTariffs = _fetchTariffs.bind(\n null,\n apiRoot,\n version,\n authorization,\n );\n\n const reportProblem = _reportProblem.bind(\n null,\n apiRoot,\n version,\n authorization,\n );\n\n async function onFetchLocations({ ids, status }) {\n setLocationsStatus({ type: \"loading\" });\n try {\n const { data } = await fetchLocations({\n ids,\n ...(version === \"v2\" ? { status } : {}),\n });\n setLocations(data.filter((location) => location?.evses?.length));\n setLocationsStatus({ type: \"success\" });\n return data;\n } catch (e) {\n setLocationsStatus({ type: \"error\", error: e });\n }\n }\n\n useEffect(() => {\n if (!props.options.locationId) {\n return;\n }\n onFetchLocations({\n ids: [props.options.locationId],\n status: filters.status,\n }).then((data) => {\n if (data?.length) {\n const location = data[0];\n if (location.geoLocation?.coordinates) {\n setPosition({\n lng: location.geoLocation?.coordinates[0],\n lat: location.geoLocation?.coordinates[1],\n });\n }\n }\n });\n }, [props.options.locationId]);\n\n useEffect(() => {\n loadRemoteConfig(apiRoot, version, authorization)\n .then((rc) => {\n if (isDebug) {\n console.log(\"retrieved remote config\", rc);\n }\n // merge the remote configuration, with the locally defined configuration\n setFilterConfiguration({\n ...rc,\n ...filterConfiguration,\n });\n setOptions({\n googleApiKey: rc.googleMapsApiKey,\n ...options,\n ...rc,\n });\n if (!options.locationId && !options?.position?.lat && rc.ipLatitude) {\n if (isDebug) {\n console.debug(\"setting position from ip latitude and longitude\");\n }\n setPosition({\n lat: rc.ipLatitude,\n lng: rc.ipLongitude,\n });\n // if the has not set a location id and we have a position\n } else if (!options.locationId) {\n if (isDebug) {\n console.debug(\"setting position from options position\");\n }\n setPosition(\n options?.position?.lat\n ? options.position\n : {\n lat: 52.3676,\n lng: 4.9041,\n },\n );\n }\n })\n .catch((err) => setError(err));\n }, []);\n\n useEffect(() => {\n if (locationIds?.length) {\n onFetchLocations({\n ids: locationIds,\n status: filters.status,\n });\n }\n }, [locationIds]);\n\n useEffect(() => {\n const { theming, shadowRoot } = props.options;\n\n if (shadowRoot) {\n const style =\n shadowRoot.querySelectorAll(\"#road-map-styles\")[0] ||\n document.createElement(\"style\");\n style.setAttribute(\"type\", \"text/css\");\n style.setAttribute(\"id\", \"road-map-styles\");\n style.innerHTML = `\n :host {\n --roadmap-brand-color: ${theming?.brandColor || \"#6102d3\"};\n --roadmap-background-color: ${theming?.backgroundColor || \"#ffffff\"};\n --roadmap-text-color: ${theming?.textColor || \"#2a2a2a\"};\n --roadmap-border-color: ${theming?.borderColor || \"#dddddd\"};\n --roadmap-font-family: ${theming?.fontFamily || \"Inter\"};\n }\n `;\n shadowRoot.appendChild(style);\n }\n }, [props.options.theming]);\n\n const isReady = Boolean(position && options?.googleApiKey);\n\n const providerValue = useMemo(() => {\n return {\n options,\n setPlace,\n place,\n t,\n language,\n fetchGeohashes,\n locations,\n locationsStatus,\n filterConfiguration,\n setFilters,\n setLocationsIds,\n locationIds,\n filters,\n fetchTariffs,\n reportProblem,\n fetchLocations,\n isReady,\n position,\n isSearching,\n setIsSearching,\n };\n }, [\n position,\n language,\n locations,\n locationsStatus,\n fetchTariffs,\n reportProblem,\n props.options,\n place,\n setPlace,\n setFilters,\n filters,\n filterConfiguration,\n locationIds,\n setLocationsIds,\n t,\n fetchGeohashes,\n fetchLocations,\n isReady,\n isSearching,\n ]);\n\n return (\n <MapContext.Provider value={providerValue}>{children}</MapContext.Provider>\n );\n};\n\nexport function useMapContext(): MapContextType {\n const context = React.useContext(MapContext);\n if (context === undefined) {\n throw new Error(\"useMapContext must be used within a MapProvider\");\n }\n return context;\n}\n","import React, { useRef, useContext } from \"react\";\nimport styles from \"./app.module.css\";\nimport useOnScreen from \"./hooks/useOnScreen\";\nimport { MapContext } from \"./contexts/Map\";\n\ninterface Props {\n children?: React.ReactNode;\n height?: number;\n}\n\nexport default function Boot(props: Props) {\n const { isReady } = useContext(MapContext);\n const ref = useRef(null);\n const isVisible = useOnScreen(ref);\n const loaded = isVisible && isReady;\n return (\n <div\n ref={ref}\n className={styles.container}\n style={{\n height: `${props.height}px`,\n }}\n >\n {!loaded && <div className={styles.loader}>Loading...</div>}\n {loaded && props.children}\n </div>\n );\n}\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol */\r\n\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\n\nfunction getDefaultExportFromCjs (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nvar fastDeepEqual = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n\nvar isEqual = /*@__PURE__*/getDefaultExportFromCjs(fastDeepEqual);\n\n/**\n * Copyright 2019 Google LLC. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at.\n *\n * Http://www.apache.org/licenses/LICENSE-2.0.\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst DEFAULT_ID = \"__googleMapsScriptId\";\n/**\n * The status of the [[Loader]].\n */\nvar LoaderStatus;\n(function (LoaderStatus) {\n LoaderStatus[LoaderStatus[\"INITIALIZED\"] = 0] = \"INITIALIZED\";\n LoaderStatus[LoaderStatus[\"LOADING\"] = 1] = \"LOADING\";\n LoaderStatus[LoaderStatus[\"SUCCESS\"] = 2] = \"SUCCESS\";\n LoaderStatus[LoaderStatus[\"FAILURE\"] = 3] = \"FAILURE\";\n})(LoaderStatus || (LoaderStatus = {}));\n/**\n * [[Loader]] makes it easier to add Google Maps JavaScript API to your application\n * dynamically using\n * [Promises](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise).\n * It works by dynamically creating and appending a script node to the the\n * document head and wrapping the callback function so as to return a promise.\n *\n * ```\n * const loader = new Loader({\n * apiKey: \"\",\n * version: \"weekly\",\n * libraries: [\"places\"]\n * });\n *\n * loader.load().then((google) => {\n * const map = new google.maps.Map(...)\n * })\n * ```\n */\nclass Loader {\n /**\n * Creates an instance of Loader using [[LoaderOptions]]. No defaults are set\n * using this library, instead the defaults are set by the Google Maps\n * JavaScript API server.\n *\n * ```\n * const loader = Loader({apiKey, version: 'weekly', libraries: ['places']});\n * ```\n */\n constructor({ apiKey, authReferrerPolicy, channel, client, id = DEFAULT_ID, language, libraries = [], mapIds, nonce, region, retries = 3, url = \"https://maps.googleapis.com/maps/api/js\", version, }) {\n this.callbacks = [];\n this.done = false;\n this.loading = false;\n this.errors = [];\n this.apiKey = apiKey;\n this.authReferrerPolicy = authReferrerPolicy;\n this.channel = channel;\n this.client = client;\n this.id = id || DEFAULT_ID; // Do not allow empty string\n this.language = language;\n this.libraries = libraries;\n this.mapIds = mapIds;\n this.nonce = nonce;\n this.region = region;\n this.retries = retries;\n this.url = url;\n this.version = version;\n if (Loader.instance) {\n if (!isEqual(this.options, Loader.instance.options)) {\n throw new Error(`Loader must not be called again with different options. ${JSON.stringify(this.options)} !== ${JSON.stringify(Loader.instance.options)}`);\n }\n return Loader.instance;\n }\n Loader.instance = this;\n }\n get options() {\n return {\n version: this.version,\n apiKey: this.apiKey,\n channel: this.channel,\n client: this.client,\n id: this.id,\n libraries: this.libraries,\n language: this.language,\n region: this.region,\n mapIds: this.mapIds,\n nonce: this.nonce,\n url: this.url,\n authReferrerPolicy: this.authReferrerPolicy,\n };\n }\n get status() {\n if (this.errors.length) {\n return LoaderStatus.FAILURE;\n }\n if (this.done) {\n return LoaderStatus.SUCCESS;\n }\n if (this.loading) {\n return LoaderStatus.LOADING;\n }\n return LoaderStatus.INITIALIZED;\n }\n get failed() {\n return this.done && !this.loading && this.errors.length >= this.retries + 1;\n }\n /**\n * CreateUrl returns the Google Maps JavaScript API script url given the [[LoaderOptions]].\n *\n * @ignore\n * @deprecated\n */\n createUrl() {\n let url = this.url;\n url += `?callback=__googleMapsCallback&loading=async`;\n if (this.apiKey) {\n url += `&key=${this.apiKey}`;\n }\n if (this.channel) {\n url += `&channel=${this.channel}`;\n }\n if (this.client) {\n url += `&client=${this.client}`;\n }\n if (this.libraries.length > 0) {\n url += `&libraries=${this.libraries.join(\",\")}`;\n }\n if (this.language) {\n url += `&language=${this.language}`;\n }\n if (this.region) {\n url += `®ion=${this.region}`;\n }\n if (this.version) {\n url += `&v=${this.version}`;\n }\n if (this.mapIds) {\n url += `&map_ids=${this.mapIds.join(\",\")}`;\n }\n if (this.authReferrerPolicy) {\n url += `&auth_referrer_policy=${this.authReferrerPolicy}`;\n }\n return url;\n }\n deleteScript() {\n const script = document.getElementById(this.id);\n if (script) {\n script.remove();\n }\n }\n /**\n * Load the Google Maps JavaScript API script and return a Promise.\n * @deprecated, use importLibrary() instead.\n */\n load() {\n return this.loadPromise();\n }\n /**\n * Load the Google Maps JavaScript API script and return a Promise.\n *\n * @ignore\n * @deprecated, use importLibrary() instead.\n */\n loadPromise() {\n return new Promise((resolve, reject) => {\n this.loadCallback((err) => {\n if (!err) {\n resolve(window.google);\n }\n else {\n reject(err.error);\n }\n });\n });\n }\n importLibrary(name) {\n this.execute();\n return google.maps.importLibrary(name);\n }\n /**\n * Load the Google Maps JavaScript API script with a callback.\n * @deprecated, use importLibrary() instead.\n */\n loadCallback(fn) {\n this.callbacks.push(fn);\n this.execute();\n }\n /**\n * Set the script on document.\n */\n setScript() {\n var _a, _b;\n if (document.getElementById(this.id)) {\n // TODO wrap onerror callback for cases where the script was loaded elsewhere\n this.callback();\n return;\n }\n const params = {\n key: this.apiKey,\n channel: this.channel,\n client: this.client,\n libraries: this.libraries.length && this.libraries,\n v: this.version,\n mapIds: this.mapIds,\n language: this.language,\n region: this.region,\n authReferrerPolicy: this.authReferrerPolicy,\n };\n // keep the URL minimal:\n Object.keys(params).forEach(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (key) => !params[key] && delete params[key]);\n if (!((_b = (_a = window === null || window === void 0 ? void 0 : window.google) === null || _a === void 0 ? void 0 : _a.maps) === null || _b === void 0 ? void 0 : _b.importLibrary)) {\n // tweaked copy of https://developers.google.com/maps/documentation/javascript/load-maps-js-api#dynamic-library-import\n // which also sets the base url, the id, and the nonce\n /* eslint-disable */\n ((g) => {\n // @ts-ignore\n let h, a, k, p = \"The Google Maps JavaScript API\", c = \"google\", l = \"importLibrary\", q = \"__ib__\", m = document, b = window;\n // @ts-ignore\n b = b[c] || (b[c] = {});\n // @ts-ignore\n const d = b.maps || (b.maps = {}), r = new Set(), e = new URLSearchParams(), u = () => \n // @ts-ignore\n h || (h = new Promise((f, n) => __awaiter(this, void 0, void 0, function* () {\n var _a;\n yield (a = m.createElement(\"script\"));\n a.id = this.id;\n e.set(\"libraries\", [...r] + \"\");\n // @ts-ignore\n for (k in g)\n e.set(k.replace(/[A-Z]/g, (t) => \"_\" + t[0].toLowerCase()), g[k]);\n e.set(\"callback\", c + \".maps.\" + q);\n a.src = this.url + `?` + e;\n d[q] = f;\n a.onerror = () => (h = n(Error(p + \" could not load.\")));\n // @ts-ignore\n a.nonce = this.nonce || ((_a = m.querySelector(\"script[nonce]\")) === null || _a === void 0 ? void 0 : _a.nonce) || \"\";\n m.head.append(a);\n })));\n // @ts-ignore\n d[l] ? console.warn(p + \" only loads once. Ignoring:\", g) : (d[l] = (f, ...n) => r.add(f) && u().then(() => d[l](f, ...n)));\n })(params);\n /* eslint-enable */\n }\n // While most libraries populate the global namespace when loaded via bootstrap params,\n // this is not the case for \"marker\" when used with the inline bootstrap loader\n // (and maybe others in the future). So ensure there is an importLibrary for each:\n const libraryPromises = this.libraries.map((library) => this.importLibrary(library));\n // ensure at least one library, to kick off loading...\n if (!libraryPromises.length) {\n libraryPromises.push(this.importLibrary(\"core\"));\n }\n Promise.all(libraryPromises).then(() => this.callback(), (error) => {\n const event = new ErrorEvent(\"error\", { error }); // for backwards compat\n this.loadErrorCallback(event);\n });\n }\n /**\n * Reset the loader state.\n */\n reset() {\n this.deleteScript();\n this.done = false;\n this.loading = false;\n this.errors = [];\n this.onerrorEvent = null;\n }\n resetIfRetryingFailed() {\n if (this.failed) {\n this.reset();\n }\n }\n loadErrorCallback(e) {\n this.errors.push(e);\n if (this.errors.length <= this.retries) {\n const delay = this.errors.length * Math.pow(2, this.errors.length);\n console.error(`Failed to load Google Maps script, retrying in ${delay} ms.`);\n setTimeout(() => {\n this.deleteScript();\n this.setScript();\n }, delay);\n }\n else {\n this.onerrorEvent = e;\n this.callback();\n }\n }\n callback() {\n this.done = true;\n this.loading = false;\n this.callbacks.forEach((cb) => {\n cb(this.onerrorEvent);\n });\n this.callbacks = [];\n }\n execute() {\n this.resetIfRetryingFailed();\n if (this.done) {\n this.callback();\n }\n else {\n // short circuit and warn if google.maps is already loaded\n if (window.google && window.google.maps && window.google.maps.version) {\n console.warn(\"Google Maps already loaded outside @googlemaps/js-api-loader.\" +\n \"This may result in undesirable behavior as options and script parameters may not match.\");\n this.callback();\n return;\n }\n if (this.loading) ;\n else {\n this.loading = true;\n this.setScript();\n }\n }\n }\n}\n\nexport { DEFAULT_ID, Loader, LoaderStatus };\n//# sourceMappingURL=index.mjs.map\n","import { Loader } from \"@googlemaps/js-api-loader\";\n\nlet instance;\nexport function getLoader(apiKey, language): Loader {\n if (instance) return instance;\n\n const loader = new Loader({\n apiKey: apiKey, // Replace with your Google Maps API key\n version: \"weekly\",\n language,\n });\n instance = loader;\n return loader;\n}\n","/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\n/* Geohash encoding/decoding and associated functions (c) Chris Veness 2014-2019 / MIT Licence */\n/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\n\nconst base32 = '0123456789bcdefghjkmnpqrstuvwxyz'; // (geohash-specific) Base32 map\n\n\n/**\n * Geohash: Gustavo Niemeyer’s geocoding system.\n */\nclass Geohash {\n\n /**\n * Encodes latitude/longitude to geohash, either to specified precision or to automatically\n * evaluated precision.\n *\n * @param {number} lat - Latitude in degrees.\n * @param {number} lon - Longitude in degrees.\n * @param {number} [precision] - Number of characters in resulting geohash.\n * @returns {string} Geohash of supplied latitude/longitude.\n * @throws Invalid geohash.\n *\n * @example\n * const geohash = Geohash.encode(52.205, 0.119, 7); // => 'u120fxw'\n */\n static encode(lat, lon, precision) {\n // infer precision?\n if (typeof precision == 'undefined') {\n // refine geohash until it matches precision of supplied lat/lon\n for (let p=1; p<=12; p++) {\n const hash = Geohash.encode(lat, lon, p);\n const posn = Geohash.decode(hash);\n if (posn.lat==lat && posn.lon==lon) return hash;\n }\n precision = 12; // set to maximum\n }\n\n lat = Number(lat);\n lon = Number(lon);\n precision = Number(precision);\n\n if (isNaN(lat) || isNaN(lon) || isNaN(precision)) throw new Error('Invalid geohash');\n\n let idx = 0; // index into base32 map\n let bit = 0; // each char holds 5 bits\n let evenBit = true;\n let geohash = '';\n\n let latMin = -90, latMax = 90;\n let lonMin = -180, lonMax = 180;\n\n while (geohash.length < precision) {\n if (evenBit) {\n // bisect E-W longitude\n const lonMid = (lonMin + lonMax) / 2;\n if (lon >= lonMid) {\n idx = idx*2 + 1;\n lonMin = lonMid;\n } else {\n idx = idx*2;\n lonMax = lonMid;\n }\n } else {\n // bisect N-S latitude\n const latMid = (latMin + latMax) / 2;\n if (lat >= latMid) {\n idx = idx*2 + 1;\n latMin = latMid;\n } else {\n idx = idx*2;\n latMax = latMid;\n }\n }\n evenBit = !evenBit;\n\n if (++bit == 5) {\n // 5 bits gives us a character: append it and start over\n geohash += base32.charAt(idx);\n bit = 0;\n idx = 0;\n }\n }\n\n return geohash;\n }\n\n\n /**\n * Decode geohash to latitude/longitude (location is approximate centre of geohash cell,\n * to reasonable precision).\n *\n * @param {string} geohash - Geohash string to be converted to latitude/longitude.\n * @returns {{lat:number, lon:number}} (Center of) geohashed location.\n * @throws Invalid geohash.\n *\n * @example\n * const latlon = Geohash.decode('u120fxw'); // => { lat: 52.205, lon: 0.1188 }\n */\n static decode(geohash) {\n\n const bounds = Geohash.bounds(geohash); // <-- the hard work\n // now just determine the centre of the cell...\n\n const latMin = bounds.sw.lat, lonMin = bounds.sw.lon;\n const latMax = bounds.ne.lat, lonMax = bounds.ne.lon;\n\n // cell centre\n let lat = (latMin + latMax)/2;\n let lon = (lonMin + lonMax)/2;\n\n // round to close to centre without excessive precision: ⌊2-log10(Δ°)⌋ decimal places\n lat = lat.toFixed(Math.floor(2-Math.log(latMax-latMin)/Math.LN10));\n lon = lon.toFixed(Math.floor(2-Math.log(lonMax-lonMin)/Math.LN10));\n\n return { lat: Number(lat), lon: Number(lon) };\n }\n\n\n /**\n * Returns SW/NE latitude/longitude bounds of specified geohash.\n *\n * @param {string} geohash - Cell that bounds are required of.\n * @returns {{sw: {lat: number, lon: number}, ne: {lat: number, lon: number}}}\n * @throws Invalid geohash.\n */\n static bounds(geohash) {\n if (geohash.length == 0) throw new Error('Invalid geohash');\n\n geohash = geohash.toLowerCase();\n\n let evenBit = true;\n let latMin = -90, latMax = 90;\n let lonMin = -180, lonMax = 180;\n\n for (let i=0; i<geohash.length; i++) {\n const chr = geohash.charAt(i);\n const idx = base32.indexOf(chr);\n if (idx == -1) throw new Error('Invalid geohash');\n\n for (let n=4; n>=0; n--) {\n const bitN = idx >> n & 1;\n if (evenBit) {\n // longitude\n const lonMid = (lonMin+lonMax) / 2;\n if (bitN == 1) {\n lonMin = lonMid;\n } else {\n lonMax = lonMid;\n }\n } else {\n // latitude\n const latMid = (latMin+latMax) / 2;\n if (bitN == 1) {\n latMin = latMid;\n } else {\n latMax = latMid;\n }\n }\n evenBit = !evenBit;\n }\n }\n\n const bounds = {\n sw: { lat: latMin, lon: lonMin },\n ne: { lat: latMax, lon: lonMax },\n };\n\n return bounds;\n }\n\n\n /**\n * Determines adjacent cell in given direction.\n *\n * @param geohash - Cell to which adjacent cell is required.\n * @param direction - Direction from geohash (N/S/E/W).\n * @returns {string} Geocode of adjacent cell.\n * @throws Invalid geohash.\n */\n static adjacent(geohash, direction) {\n // based on github.com/davetroy/geohash-js\n\n geohash = geohash.toLowerCase();\n direction = direction.toLowerCase();\n\n if (geohash.length == 0) throw new Error('Invalid geohash');\n if ('nsew'.indexOf(direction) == -1) throw new Error('Invalid direction');\n\n const neighbour = {\n n: [ 'p0r21436x8zb9dcf5h7kjnmqesgutwvy', 'bc01fg45238967deuvhjyznpkmstqrwx' ],\n s: [ '14365h7k9dcfesgujnmqp0r2twvyx8zb', '238967debc01fg45kmstqrwxuvhjyznp' ],\n e: [ 'bc01fg45238967deuvhjyznpkmstqrwx', 'p0r21436x8zb9dcf5h7kjnmqesgutwvy' ],\n w: [ '238967debc01fg45kmstqrwxuvhjyznp', '14365h7k9dcfesgujnmqp0r2twvyx8zb' ],\n };\n const border = {\n n: [ 'prxz', 'bcfguvyz' ],\n s: [ '028b', '0145hjnp' ],\n e: [ 'bcfguvyz', 'prxz' ],\n w: [ '0145hjnp', '028b' ],\n };\n\n const lastCh = geohash.slice(-1); // last character of hash\n let parent = geohash.slice(0, -1); // hash without last character\n\n const type = geohash.length % 2;\n\n // check for edge-cases which don't share common prefix\n if (border[direction][type].indexOf(lastCh) != -1 && parent != '') {\n parent = Geohash.adjacent(parent, direction);\n }\n\n // append letter for direction to parent\n return parent + base32.charAt(neighbour[direction][type].indexOf(lastCh));\n }\n\n\n /**\n * Returns all 8 adjacent cells to specified geohash.\n *\n * @param {string} geohash - Geohash neighbours are required of.\n * @returns {{n,ne,e,se,s,sw,w,nw: string}}\n * @throws Invalid geohash.\n */\n static neighbours(geohash) {\n return {\n 'n': Geohash.adjacent(geohash, 'n'),\n 'ne': Geohash.adjacent(Geohash.adjacent(geohash, 'n'), 'e'),\n 'e': Geohash.adjacent(geohash, 'e'),\n 'se': Geohash.adjacent(Geohash.adjacent(geohash, 's'), 'e'),\n 's': Geohash.adjacent(geohash, 's'),\n 'sw': Geohash.adjacent(Geohash.adjacent(geohash, 's'), 'w'),\n 'w': Geohash.adjacent(geohash, 'w'),\n 'nw': Geohash.adjacent(Geohash.adjacent(geohash, 'n'), 'w'),\n };\n }\n\n}\n\n/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\n\nexport default Geohash;\n","import { PropsWithChildren, useEffect, useMemo } from \"react\";\nimport { createPortal } from \"react-dom\";\n\nexport function createOverlay(\n container: HTMLElement,\n pane: keyof google.maps.MapPanes,\n position: google.maps.LatLng | google.maps.LatLngLiteral\n) {\n class Overlay extends google.maps.OverlayView {\n container: HTMLElement;\n pane: keyof google.maps.MapPanes;\n position: google.maps.LatLng | google.maps.LatLngLiteral;\n\n constructor(\n container: HTMLElement,\n pane: keyof google.maps.MapPanes,\n position: google.maps.LatLng | google.maps.LatLngLiteral\n ) {\n super();\n this.container = container;\n this.pane = pane;\n this.position = position;\n }\n\n onAdd(): void {\n const pane = this.getPanes()?.[this.pane];\n pane?.appendChild(this.container);\n }\n\n draw(): void {\n const projection = this.getProjection();\n const point = projection.fromLatLngToDivPixel(this.position);\n\n if (point === null) {\n return;\n }\n\n this.container.style.transform = `translate(${point.x}px, ${point.y}px)`;\n }\n\n onRemove(): void {\n if (this.container.parentNode !== null) {\n this.container.parentNode.removeChild(this.container);\n }\n }\n }\n return new Overlay(container, pane, position);\n}\n\ntype OverlayProps = PropsWithChildren<{\n position: {\n lat: number;\n lon: number;\n };\n pane?: keyof google.maps.MapPanes;\n map: google.maps.Map;\n zIndex?: number;\n}>;\n\nexport default function OverlayView({\n position,\n pane = \"floatPane\",\n map,\n zIndex,\n children,\n}: OverlayProps) {\n const container = useMemo(() => {\n const div = document.createElement(\"div\");\n div.style.position = \"absolute\";\n return div;\n }, []);\n\n const overlay = useMemo(() => {\n return createOverlay(container, pane, {\n lat: position.lat,\n lng: position.lon,\n });\n }, [container, pane, position]);\n\n useEffect(() => {\n overlay?.setMap(map);\n return () => {\n overlay?.setMap(null);\n };\n }, [map, overlay]);\n\n useEffect(() => {\n container.style.zIndex = `${zIndex}`;\n }, [zIndex, container]);\n\n return createPortal(children, container);\n}\n\n","export function getColorForStatus(status) {\n switch (status) {\n case \"AVAILABLE\":\n return \"#33AC19\";\n case \"CHARGING\":\n return \"#005CEE\";\n default:\n return \"#EB001B\";\n }\n}\n","import React, { useCallback, useMemo } from \"react\";\nimport { GeohashItem } from \"../../types\";\nimport OverlayView from \"../OverlayView/OverlayView\";\nimport { getColorForStatus } from \"../../utils/location\";\nimport styles from \"./CustomMarker.module.css\";\n\nconst formatter = new Intl.NumberFormat(undefined, {\n maximumSignificantDigits: 3,\n});\n\nconst formatNumber = (num: number) => {\n return formatter.format(num);\n};\n\ninterface Props {\n data: GeohashItem;\n map?: google.maps.Map;\n onClick: (payload: GeohashItem) => void;\n highlight?: boolean;\n}\n\nconst CustomMarker: React.FC<Props> = ({ data, map, onClick, highlight }) => {\n const handleClick = useCallback(() => {\n onClick(data);\n }, [onClick, data]);\n\n const styleColor = useMemo(() => {\n if (data.statuses.find((status) => status.name === \"AVAILABLE\")) {\n return { background: getColorForStatus(\"AVAILABLE\") };\n }\n if (data.statuses.find((status) => status.name === \"CHARGING\")) {\n return { background: getColorForStatus(\"CHARGING\") };\n }\n return { background: getColorForStatus(\"UNAVAILABLE\") };\n }, [data]);\n\n return (\n <OverlayView position={data.centroid} map={map} zIndex={highlight ? 99 : 0}>\n <button\n className={styles.container}\n onClick={handleClick}\n style={styleColor}\n // seems to be useful for ios safari\n onTouchEndCapture={handleClick}\n >\n {data.count > 1 ? formatNumber(data.count) : \"\"}\n </button>\n </OverlayView>\n );\n};\n\nexport default CustomMarker;\n","import { useCallback, useEffect, useState } from \"react\";\nimport Geohash from \"latlon-geohash\";\nimport CustomMarker from \"../CustomMarker/CustomMarker\";\nimport { GeohashItem } from \"../../types\";\nimport { useMapContext } from \"../../contexts/Map\";\n\nconst geoHashZoom = [\n 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 6, 6, 6, 7, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9,\n];\n\nfunction zoomToHashChars(zoom) {\n return geoHashZoom[zoom];\n}\n\nfunction getNormalizedBounds(bounds, zoomLevel) {\n const mapSWPoint = bounds.getSouthWest().toJSON();\n const mapNEPoint = bounds.getNorthEast().toJSON();\n\n const SWGeohash = Geohash.encode(mapSWPoint.lat, mapSWPoint.lng, zoomLevel);\n\n const geohashSWBounds = Geohash.bounds(SWGeohash);\n\n const latStep = Math.abs(geohashSWBounds.sw.lat - geohashSWBounds.ne.lat);\n const lngStep = Math.abs(geohashSWBounds.sw.lon - geohashSWBounds.ne.lon);\n\n let neLat = geohashSWBounds.sw.lat;\n while (neLat <= mapNEPoint.lat) {\n neLat = neLat + latStep;\n }\n\n let neLng = geohashSWBounds.sw.lon;\n while (neLng <= mapNEPoint.lng) {\n neLng = neLng + lngStep;\n }\n\n return {\n nwLat: neLat,\n nwLng: geohashSWBounds.sw.lon,\n seLat: geohashSWBounds.sw.lat,\n seLng: neLng,\n };\n}\n\nfunction isSameBounds(bounds1, bounds2) {\n return (\n bounds1.nwLat === bounds2.nwLat &&\n bounds1.nwLng === bounds2.nwLng &&\n bounds1.seLat === bounds2.seLat &&\n bounds1.seLng === bounds2.seLng\n );\n}\n\nexport default function MapMarkers({\n map,\n filters,\n fetchGeohashes,\n onMarkerClicked,\n}) {\n const { setIsSearching } = useMapContext();\n const [data, setData] = useState<GeohashItem[]>([]);\n\n const [mapConfig, setMapConfig] = useState({\n zoom: zoomToHashChars(map.getZoom()),\n normalizedBounds: getNormalizedBounds(\n map.getBounds(),\n zoomToHashChars(map.getZoom()),\n ),\n });\n\n useEffect(() => {\n let currentZoomLevel = mapConfig.zoom;\n let currentBounds = undefined;\n\n map.addListener(\"idle\", () => {\n const newZoomLevel = zoomToHashChars(map.getZoom());\n\n const newMapConfig = {\n ...mapConfig,\n zoom: newZoomLevel,\n };\n const bounds = getNormalizedBounds(map.getBounds(), currentZoomLevel);\n\n if (currentBounds && isSameBounds(currentBounds, bounds)) {\n return;\n }\n currentBounds = bounds;\n setMapConfig({\n ...newMapConfig,\n normalizedBounds: bounds,\n });\n });\n }, []);\n\n // appends the data to the existing data\n // make sure to not duplicate data\n // keeping the old object that are still availabe in the new data to prevert re-rendering\n function appendData(newData) {\n const oldData = data.filter((c) => {\n return newData.find((n) => n.key === c.key);\n });\n\n setData([\n ...oldData,\n ...newData.filter((c) => {\n return !oldData.find((o) => o.key === c.key);\n }),\n ]);\n }\n\n useEffect(() => {\n if (!mapConfig.normalizedBounds) return;\n let ignore = false;\n\n setIsSearching(true);\n fetchGeohashes({\n precision: mapConfig.zoom,\n bbox: mapConfig.normalizedBounds,\n ...filters,\n })\n .then(({ data }) => {\n if (ignore) return;\n appendData(data);\n setIsSearching(false);\n })\n .catch((e) => {\n // deal with error\n setIsSearching(false);\n });\n\n return () => {\n ignore = true;\n setIsSearching(false);\n };\n }, [mapConfig, filters]);\n\n const _onMarkerClicked = useCallback(\n (data: GeohashItem) => {\n const ids = data.ids;\n if (ids.length == 100) {\n map.setZoom(map.getZoom() + 2);\n }\n map.panTo({ lat: data.centroid.lat, lng: data.centroid.lon });\n if (ids.length !== 100) {\n onMarkerClicked(ids);\n }\n },\n [map, onMarkerClicked],\n );\n\n return (\n <>\n {data.filter(Boolean).map((item: GeohashItem, i) => (\n <CustomMarker\n map={map}\n key={item.key}\n data={item}\n onClick={_onMarkerClicked}\n />\n ))}\n </>\n );\n}\n","import React, { useEffect, useRef, useState } from \"react\";\n\nimport { useMapContext } from \"../../contexts/Map\";\n\nimport styles from \"./Map.module.css\";\nimport { getLoader } from \"../../utils/loader\";\n\nimport MapMarkers from \"../MapMarkers/MapMarkers\";\n\n/*\nconst gridParts = [];\n\nfunction eraseGrid() {\n for (var i = 0; i < gridParts.length; i++) {\n gridParts[i].setMap(null);\n }\n gridParts.length = 0;\n}\n\nconst defaults = {\n zoom: 3,\n maxDisplay: 2 * 10240,\n geohashPrecision: 12,\n};\n\n\nfunction drawGrid(map) {\n const level = zoomToHashChars(map.getZoom());\n console.log(level, map.getZoom());\n\n const bounds = map.getBounds();\n const ne = bounds.getNorthEast();\n const sw = bounds.getSouthWest();\n const neHash = Geohash.encode(ne.lat(), ne.lng(), level);\n const nwHash = Geohash.encode(ne.lat(), sw.lng(), level);\n const swHash = Geohash.encode(sw.lat(), sw.lng(), level);\n const seHash = Geohash.encode(sw.lat(), ne.lng(), level);\n\n let current = neHash;\n let eastBound = neHash;\n let westBound = nwHash;\n let maxHash = defaults.maxDisplay;\n\n eraseGrid();\n while (maxHash-- > 0) {\n drawBox(map, current);\n do {\n current = Geohash.adjacent(current, \"w\");\n drawBox(map, current);\n } while (maxHash-- > 0 && current != westBound);\n if (current == swHash) {\n return;\n }\n westBound = Geohash.adjacent(current, \"s\");\n current = eastBound = Geohash.adjacent(eastBound, \"s\");\n }\n alert(\"defaults.maxDisplay limit reached\");\n eraseGrid();\n}\n\n\nfunction drawBox(map, hash) {\n const b = Geohash.bounds(hash);\n const gb = new google.maps.LatLngBounds(\n new google.maps.LatLng(b.sw.lat, b.sw.lon),\n new google.maps.LatLng(b.ne.lat, b.ne.lon)\n );\n const rect = new google.maps.Rectangle({\n map: map,\n bounds: gb,\n strokeColor: \"#3333AA\",\n strokeOpacity: 0.8,\n strokeWeight: 1,\n fillColor: \"#222222\",\n fillOpacity: 0.1,\n });\n const marker = new google.maps.Marker({\n map: map,\n position: gb.getCenter(),\n icon: \" \",\n });\n gridParts.push(rect);\n gridParts.push(marker);\n}\n*/\n\nexport default function MapWrapper() {\n const {\n place,\n options,\n fetchGeohashes,\n setLocationsIds,\n language,\n filters,\n position,\n } = useMapContext();\n\n const apiKey = options.googleApiKey;\n const [map, setMap] = useState<google.maps.Map>();\n\n const mapContainerRef = useRef(null);\n const loader = getLoader(apiKey, language);\n\n useEffect(() => {\n if (map && place?.geometry?.viewport) {\n map.fitBounds(place.geometry.viewport);\n }\n if (map && place?.geometry?.location) {\n /*\n const icon = {\n url: place.icon as string,\n size: new google.maps.Size(71, 71),\n origin: new google.maps.Point(0, 0),\n anchor: new google.maps.Point(17, 34),\n scaledSize: new google.maps.Size(25, 25),\n };\n const marker = new google.maps.Marker({\n map,\n icon,\n title: place.name,\n position: place.geometry.location,\n });\n setMarker(marker);\n */\n map.setCenter(place.geometry.location);\n }\n }, [map, place]);\n\n useEffect(() => {\n loader.importLibrary(\"maps\").then(({ Map }) => {\n const map = new Map(mapContainerRef.current, {\n mapId: \"ced50d4165f3a695\",\n center: position as any, // Initial map center coordinates\n zoom: 12, // Initial zoom level,\n zoomControl: true,\n mapTypeControl: false,\n scaleControl: false,\n streetViewControl: false,\n rotateControl: false,\n fullscreenControl: false,\n controlSize: 32,\n clickableIcons: false,\n gestureHandling: options.gestureHandling || \"auto\",\n });\n map.addListener(\"idle\", () => {\n setMap(map);\n });\n return () => {\n console.log(\"unmounting\");\n };\n });\n }, [apiKey]);\n\n return (\n <div className={styles.container} ref={mapContainerRef}>\n {map && map.getBounds() && (\n <MapMarkers\n filters={filters}\n onMarkerClicked={(ids) => {\n setLocationsIds([...ids]);\n }}\n map={map}\n fetchGeohashes={fetchGeohashes}\n />\n )}\n </div>\n );\n}\n\n","function _extends() {\n return _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, _extends.apply(null, arguments);\n}\nexport { _extends as default };","function _objectWithoutPropertiesLoose(r, e) {\n if (null == r) return {};\n var t = {};\n for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n if (-1 !== e.indexOf(n)) continue;\n t[n] = r[n];\n }\n return t;\n}\nexport { _objectWithoutPropertiesLoose as default };","function _setPrototypeOf(t, e) {\n return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {\n return t.__proto__ = e, t;\n }, _setPrototypeOf(t, e);\n}\nexport { _setPrototypeOf as default };","import setPrototypeOf from \"./setPrototypeOf.js\";\nfunction _inheritsLoose(t, o) {\n t.prototype = Object.create(o.prototype), t.prototype.constructor = t, setPrototypeOf(t, o);\n}\nexport { _inheritsLoose as default };","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?\nSymbol.for(\"react.suspense_list\"):60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.block\"):60121,w=b?Symbol.for(\"react.fundamental\"):60117,x=b?Symbol.for(\"react.responder\"):60118,y=b?Symbol.for(\"react.scope\"):60119;\nfunction z(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n","/** @license React v16.13.1\n * react-is.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n'use strict';\n\n// The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar hasSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;\nvar REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;\nvar REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;\nvar REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;\nvar REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;\nvar REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;\nvar REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary\n// (unstable) APIs that have been removed. Can we remove the symbols?\n\nvar REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf;\nvar REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;\nvar REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;\nvar REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;\nvar REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;\nvar REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;\nvar REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;\nvar REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;\nvar REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5;\nvar REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6;\nvar REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7;\n\nfunction isValidElementType(type) {\n return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.\n type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE);\n}\n\nfunction typeOf(object) {\n if (typeof object === 'object' && object !== null) {\n var $$typeof = object.$$typeof;\n\n switch ($$typeof) {\n case REACT_ELEMENT_TYPE:\n var type = object.type;\n\n switch (type) {\n case REACT_ASYNC_MODE_TYPE:\n case REACT_CONCURRENT_MODE_TYPE:\n case REACT_FRAGMENT_TYPE:\n case REACT_PROFILER_TYPE:\n case REACT_STRICT_MODE_TYPE:\n case REACT_SUSPENSE_TYPE:\n return type;\n\n default:\n var $$typeofType = type && type.$$typeof;\n\n switch ($$typeofType) {\n case REACT_CONTEXT_TYPE:\n case REACT_FORWARD_REF_TYPE:\n case REACT_LAZY_TYPE:\n case REACT_MEMO_TYPE:\n case REACT_PROVIDER_TYPE:\n return $$typeofType;\n\n default:\n return $$typeof;\n }\n\n }\n\n case REACT_PORTAL_TYPE:\n return $$typeof;\n }\n }\n\n return undefined;\n} // AsyncMode is deprecated along with isAsyncMode\n\nvar AsyncMode = REACT_ASYNC_MODE_TYPE;\nvar ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;\nvar ContextConsumer = REACT_CONTEXT_TYPE;\nvar ContextProvider = REACT_PROVIDER_TYPE;\nvar Element = REACT_ELEMENT_TYPE;\nvar ForwardRef = REACT_FORWARD_REF_TYPE;\nvar Fragment = REACT_FRAGMENT_TYPE;\nvar Lazy = REACT_LAZY_TYPE;\nvar Memo = REACT_MEMO_TYPE;\nvar Portal = REACT_PORTAL_TYPE;\nvar Profiler = REACT_PROFILER_TYPE;\nvar StrictMode = REACT_STRICT_MODE_TYPE;\nvar Suspense = REACT_SUSPENSE_TYPE;\nvar hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated\n\nfunction isAsyncMode(object) {\n {\n if (!hasWarnedAboutDeprecatedIsAsyncMode) {\n hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint\n\n console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.');\n }\n }\n\n return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE;\n}\nfunction isConcurrentMode(object) {\n return typeOf(object) === REACT_CONCURRENT_MODE_TYPE;\n}\nfunction isContextConsumer(object) {\n return typeOf(object) === REACT_CONTEXT_TYPE;\n}\nfunction isContextProvider(object) {\n return typeOf(object) === REACT_PROVIDER_TYPE;\n}\nfunction isElement(object) {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n}\nfunction isForwardRef(object) {\n return typeOf(object) === REACT_FORWARD_REF_TYPE;\n}\nfunction isFragment(object) {\n return typeOf(object) === REACT_FRAGMENT_TYPE;\n}\nfunction isLazy(object) {\n return typeOf(object) === REACT_LAZY_TYPE;\n}\nfunction isMemo(object) {\n return typeOf(object) === REACT_MEMO_TYPE;\n}\nfunction isPortal(object) {\n return typeOf(object) === REACT_PORTAL_TYPE;\n}\nfunction isProfiler(object) {\n return typeOf(object) === REACT_PROFILER_TYPE;\n}\nfunction isStrictMode(object) {\n return typeOf(object) === REACT_STRICT_MODE_TYPE;\n}\nfunction isSuspense(object) {\n return typeOf(object) === REACT_SUSPENSE_TYPE;\n}\n\nexports.AsyncMode = AsyncMode;\nexports.ConcurrentMode = ConcurrentMode;\nexports.ContextConsumer = ContextConsumer;\nexports.ContextProvider = ContextProvider;\nexports.Element = Element;\nexports.ForwardRef = ForwardRef;\nexports.Fragment = Fragment;\nexports.Lazy = Lazy;\nexports.Memo = Memo;\nexports.Portal = Portal;\nexports.Profiler = Profiler;\nexports.StrictMode = StrictMode;\nexports.Suspense = Suspense;\nexports.isAsyncMode = isAsyncMode;\nexports.isConcurrentMode = isConcurrentMode;\nexports.isContextConsumer = isContextConsumer;\nexports.isContextProvider = isContextProvider;\nexports.isElement = isElement;\nexports.isForwardRef = isForwardRef;\nexports.isFragment = isFragment;\nexports.isLazy = isLazy;\nexports.isMemo = isMemo;\nexports.isPortal = isPortal;\nexports.isProfiler = isProfiler;\nexports.isStrictMode = isStrictMode;\nexports.isSuspense = isSuspense;\nexports.isValidElementType = isValidElementType;\nexports.typeOf = typeOf;\n })();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","module.exports = Function.call.bind(Object.prototype.hasOwnProperty);\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar printWarning = function() {};\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n var loggedTypeFailures = {};\n var has = require('./lib/has');\n\n printWarning = function(text) {\n var message = 'Warning: ' + text;\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) { /**/ }\n };\n}\n\n/**\n * Assert that the values match with the type specs.\n * Error messages are memorized and will only be shown once.\n *\n * @param {object} typeSpecs Map of name to a ReactPropType\n * @param {object} values Runtime values that need to be type-checked\n * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n * @param {string} componentName Name of the component for error messages.\n * @param {?Function} getStack Returns the component stack.\n * @private\n */\nfunction checkPropTypes(typeSpecs, values, location, componentName, getStack) {\n if (process.env.NODE_ENV !== 'production') {\n for (var typeSpecName in typeSpecs) {\n if (has(typeSpecs, typeSpecName)) {\n var error;\n // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n if (typeof typeSpecs[typeSpecName] !== 'function') {\n var err = Error(\n (componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' +\n 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' +\n 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.'\n );\n err.name = 'Invariant Violation';\n throw err;\n }\n error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);\n } catch (ex) {\n error = ex;\n }\n if (error && !(error instanceof Error)) {\n printWarning(\n (componentName || 'React class') + ': type specification of ' +\n location + ' `' + typeSpecName + '` is invalid; the type checker ' +\n 'function must return `null` or an `Error` but returned a ' + typeof error + '. ' +\n 'You may have forgotten to pass an argument to the type checker ' +\n 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' +\n 'shape all require an argument).'\n );\n }\n if (error instanceof Error && !(error.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error.message] = true;\n\n var stack = getStack ? getStack() : '';\n\n printWarning(\n 'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '')\n );\n }\n }\n }\n }\n}\n\n/**\n * Resets warning cache when testing.\n *\n * @private\n */\ncheckPropTypes.resetWarningCache = function() {\n if (process.env.NODE_ENV !== 'production') {\n loggedTypeFailures = {};\n }\n}\n\nmodule.exports = checkPropTypes;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactIs = require('react-is');\nvar assign = require('object-assign');\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\nvar has = require('./lib/has');\nvar checkPropTypes = require('./checkPropTypes');\n\nvar printWarning = function() {};\n\nif (process.env.NODE_ENV !== 'production') {\n printWarning = function(text) {\n var message = 'Warning: ' + text;\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n };\n}\n\nfunction emptyFunctionThatReturnsNull() {\n return null;\n}\n\nmodule.exports = function(isValidElement, throwOnDirectAccess) {\n /* global Symbol */\n var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\n var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.\n\n /**\n * Returns the iterator method function contained on the iterable object.\n *\n * Be sure to invoke the function with the iterable as context:\n *\n * var iteratorFn = getIteratorFn(myIterable);\n * if (iteratorFn) {\n * var iterator = iteratorFn.call(myIterable);\n * ...\n * }\n *\n * @param {?object} maybeIterable\n * @return {?function}\n */\n function getIteratorFn(maybeIterable) {\n var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);\n if (typeof iteratorFn === 'function') {\n return iteratorFn;\n }\n }\n\n /**\n * Collection of methods that allow declaration and validation of props that are\n * supplied to React components. Example usage:\n *\n * var Props = require('ReactPropTypes');\n * var MyArticle = React.createClass({\n * propTypes: {\n * // An optional string prop named \"description\".\n * description: Props.string,\n *\n * // A required enum prop named \"category\".\n * category: Props.oneOf(['News','Photos']).isRequired,\n *\n * // A prop named \"dialog\" that requires an instance of Dialog.\n * dialog: Props.instanceOf(Dialog).isRequired\n * },\n * render: function() { ... }\n * });\n *\n * A more formal specification of how these methods are used:\n *\n * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)\n * decl := ReactPropTypes.{type}(.isRequired)?\n *\n * Each and every declaration produces a function with the same signature. This\n * allows the creation of custom validation functions. For example:\n *\n * var MyLink = React.createClass({\n * propTypes: {\n * // An optional string or URI prop named \"href\".\n * href: function(props, propName, componentName) {\n * var propValue = props[propName];\n * if (propValue != null && typeof propValue !== 'string' &&\n * !(propValue instanceof URI)) {\n * return new Error(\n * 'Expected a string or an URI for ' + propName + ' in ' +\n * componentName\n * );\n * }\n * }\n * },\n * render: function() {...}\n * });\n *\n * @internal\n */\n\n var ANONYMOUS = '<<anonymous>>';\n\n // Important!\n // Keep this list in sync with production version in `./factoryWithThrowingShims.js`.\n var ReactPropTypes = {\n array: createPrimitiveTypeChecker('array'),\n bigint: createPrimitiveTypeChecker('bigint'),\n bool: createPrimitiveTypeChecker('boolean'),\n func: createPrimitiveTypeChecker('function'),\n number: createPrimitiveTypeChecker('number'),\n object: createPrimitiveTypeChecker('object'),\n string: createPrimitiveTypeChecker('string'),\n symbol: createPrimitiveTypeChecker('symbol'),\n\n any: createAnyTypeChecker(),\n arrayOf: createArrayOfTypeChecker,\n element: createElementTypeChecker(),\n elementType: createElementTypeTypeChecker(),\n instanceOf: createInstanceTypeChecker,\n node: createNodeChecker(),\n objectOf: createObjectOfTypeChecker,\n oneOf: createEnumTypeChecker,\n oneOfType: createUnionTypeChecker,\n shape: createShapeTypeChecker,\n exact: createStrictShapeTypeChecker,\n };\n\n /**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\n /*eslint-disable no-self-compare*/\n function is(x, y) {\n // SameValue algorithm\n if (x === y) {\n // Steps 1-5, 7-10\n // Steps 6.b-6.e: +0 != -0\n return x !== 0 || 1 / x === 1 / y;\n } else {\n // Step 6.a: NaN == NaN\n return x !== x && y !== y;\n }\n }\n /*eslint-enable no-self-compare*/\n\n /**\n * We use an Error-like object for backward compatibility as people may call\n * PropTypes directly and inspect their output. However, we don't use real\n * Errors anymore. We don't inspect their stack anyway, and creating them\n * is prohibitively expensive if they are created too often, such as what\n * happens in oneOfType() for any type before the one that matched.\n */\n function PropTypeError(message, data) {\n this.message = message;\n this.data = data && typeof data === 'object' ? data: {};\n this.stack = '';\n }\n // Make `instanceof Error` still work for returned errors.\n PropTypeError.prototype = Error.prototype;\n\n function createChainableTypeChecker(validate) {\n if (process.env.NODE_ENV !== 'production') {\n var manualPropTypeCallCache = {};\n var manualPropTypeWarningCount = 0;\n }\n function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {\n componentName = componentName || ANONYMOUS;\n propFullName = propFullName || propName;\n\n if (secret !== ReactPropTypesSecret) {\n if (throwOnDirectAccess) {\n // New behavior only for users of `prop-types` package\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use `PropTypes.checkPropTypes()` to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n } else if (process.env.NODE_ENV !== 'production' && typeof console !== 'undefined') {\n // Old behavior for people using React.PropTypes\n var cacheKey = componentName + ':' + propName;\n if (\n !manualPropTypeCallCache[cacheKey] &&\n // Avoid spamming the console because they are often not actionable except for lib authors\n manualPropTypeWarningCount < 3\n ) {\n printWarning(\n 'You are manually calling a React.PropTypes validation ' +\n 'function for the `' + propFullName + '` prop on `' + componentName + '`. This is deprecated ' +\n 'and will throw in the standalone `prop-types` package. ' +\n 'You may be seeing this warning due to a third-party PropTypes ' +\n 'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.'\n );\n manualPropTypeCallCache[cacheKey] = true;\n manualPropTypeWarningCount++;\n }\n }\n }\n if (props[propName] == null) {\n if (isRequired) {\n if (props[propName] === null) {\n return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.'));\n }\n return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.'));\n }\n return null;\n } else {\n return validate(props, propName, componentName, location, propFullName);\n }\n }\n\n var chainedCheckType = checkType.bind(null, false);\n chainedCheckType.isRequired = checkType.bind(null, true);\n\n return chainedCheckType;\n }\n\n function createPrimitiveTypeChecker(expectedType) {\n function validate(props, propName, componentName, location, propFullName, secret) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== expectedType) {\n // `propValue` being instance of, say, date/regexp, pass the 'object'\n // check, but we can offer a more precise error message here rather than\n // 'of type `object`'.\n var preciseType = getPreciseType(propValue);\n\n return new PropTypeError(\n 'Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'),\n {expectedType: expectedType}\n );\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createAnyTypeChecker() {\n return createChainableTypeChecker(emptyFunctionThatReturnsNull);\n }\n\n function createArrayOfTypeChecker(typeChecker) {\n function validate(props, propName, componentName, location, propFullName) {\n if (typeof typeChecker !== 'function') {\n return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');\n }\n var propValue = props[propName];\n if (!Array.isArray(propValue)) {\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));\n }\n for (var i = 0; i < propValue.length; i++) {\n var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret);\n if (error instanceof Error) {\n return error;\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createElementTypeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n if (!isValidElement(propValue)) {\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createElementTypeTypeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n if (!ReactIs.isValidElementType(propValue)) {\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement type.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createInstanceTypeChecker(expectedClass) {\n function validate(props, propName, componentName, location, propFullName) {\n if (!(props[propName] instanceof expectedClass)) {\n var expectedClassName = expectedClass.name || ANONYMOUS;\n var actualClassName = getClassName(props[propName]);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createEnumTypeChecker(expectedValues) {\n if (!Array.isArray(expectedValues)) {\n if (process.env.NODE_ENV !== 'production') {\n if (arguments.length > 1) {\n printWarning(\n 'Invalid arguments supplied to oneOf, expected an array, got ' + arguments.length + ' arguments. ' +\n 'A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z]).'\n );\n } else {\n printWarning('Invalid argument supplied to oneOf, expected an array.');\n }\n }\n return emptyFunctionThatReturnsNull;\n }\n\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n for (var i = 0; i < expectedValues.length; i++) {\n if (is(propValue, expectedValues[i])) {\n return null;\n }\n }\n\n var valuesString = JSON.stringify(expectedValues, function replacer(key, value) {\n var type = getPreciseType(value);\n if (type === 'symbol') {\n return String(value);\n }\n return value;\n });\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + String(propValue) + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));\n }\n return createChainableTypeChecker(validate);\n }\n\n function createObjectOfTypeChecker(typeChecker) {\n function validate(props, propName, componentName, location, propFullName) {\n if (typeof typeChecker !== 'function') {\n return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');\n }\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));\n }\n for (var key in propValue) {\n if (has(propValue, key)) {\n var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n if (error instanceof Error) {\n return error;\n }\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createUnionTypeChecker(arrayOfTypeCheckers) {\n if (!Array.isArray(arrayOfTypeCheckers)) {\n process.env.NODE_ENV !== 'production' ? printWarning('Invalid argument supplied to oneOfType, expected an instance of array.') : void 0;\n return emptyFunctionThatReturnsNull;\n }\n\n for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n var checker = arrayOfTypeCheckers[i];\n if (typeof checker !== 'function') {\n printWarning(\n 'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' +\n 'received ' + getPostfixForTypeWarning(checker) + ' at index ' + i + '.'\n );\n return emptyFunctionThatReturnsNull;\n }\n }\n\n function validate(props, propName, componentName, location, propFullName) {\n var expectedTypes = [];\n for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n var checker = arrayOfTypeCheckers[i];\n var checkerResult = checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret);\n if (checkerResult == null) {\n return null;\n }\n if (checkerResult.data && has(checkerResult.data, 'expectedType')) {\n expectedTypes.push(checkerResult.data.expectedType);\n }\n }\n var expectedTypesMessage = (expectedTypes.length > 0) ? ', expected one of type [' + expectedTypes.join(', ') + ']': '';\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`' + expectedTypesMessage + '.'));\n }\n return createChainableTypeChecker(validate);\n }\n\n function createNodeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n if (!isNode(props[propName])) {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function invalidValidatorError(componentName, location, propFullName, key, type) {\n return new PropTypeError(\n (componentName || 'React class') + ': ' + location + ' type `' + propFullName + '.' + key + '` is invalid; ' +\n 'it must be a function, usually from the `prop-types` package, but received `' + type + '`.'\n );\n }\n\n function createShapeTypeChecker(shapeTypes) {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n }\n for (var key in shapeTypes) {\n var checker = shapeTypes[key];\n if (typeof checker !== 'function') {\n return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker));\n }\n var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n if (error) {\n return error;\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createStrictShapeTypeChecker(shapeTypes) {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n }\n // We need to check all keys in case some are required but missing from props.\n var allKeys = assign({}, props[propName], shapeTypes);\n for (var key in allKeys) {\n var checker = shapeTypes[key];\n if (has(shapeTypes, key) && typeof checker !== 'function') {\n return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker));\n }\n if (!checker) {\n return new PropTypeError(\n 'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' +\n '\\nBad object: ' + JSON.stringify(props[propName], null, ' ') +\n '\\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, ' ')\n );\n }\n var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n if (error) {\n return error;\n }\n }\n return null;\n }\n\n return createChainableTypeChecker(validate);\n }\n\n function isNode(propValue) {\n switch (typeof propValue) {\n case 'number':\n case 'string':\n case 'undefined':\n return true;\n case 'boolean':\n return !propValue;\n case 'object':\n if (Array.isArray(propValue)) {\n return propValue.every(isNode);\n }\n if (propValue === null || isValidElement(propValue)) {\n return true;\n }\n\n var iteratorFn = getIteratorFn(propValue);\n if (iteratorFn) {\n var iterator = iteratorFn.call(propValue);\n var step;\n if (iteratorFn !== propValue.entries) {\n while (!(step = iterator.next()).done) {\n if (!isNode(step.value)) {\n return false;\n }\n }\n } else {\n // Iterator will provide entry [k,v] tuples rather than values.\n while (!(step = iterator.next()).done) {\n var entry = step.value;\n if (entry) {\n if (!isNode(entry[1])) {\n return false;\n }\n }\n }\n }\n } else {\n return false;\n }\n\n return true;\n default:\n return false;\n }\n }\n\n function isSymbol(propType, propValue) {\n // Native Symbol.\n if (propType === 'symbol') {\n return true;\n }\n\n // falsy value can't be a Symbol\n if (!propValue) {\n return false;\n }\n\n // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'\n if (propValue['@@toStringTag'] === 'Symbol') {\n return true;\n }\n\n // Fallback for non-spec compliant Symbols which are polyfilled.\n if (typeof Symbol === 'function' && propValue instanceof Symbol) {\n return true;\n }\n\n return false;\n }\n\n // Equivalent of `typeof` but with special handling for array and regexp.\n function getPropType(propValue) {\n var propType = typeof propValue;\n if (Array.isArray(propValue)) {\n return 'array';\n }\n if (propValue instanceof RegExp) {\n // Old webkits (at least until Android 4.0) return 'function' rather than\n // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\n // passes PropTypes.object.\n return 'object';\n }\n if (isSymbol(propType, propValue)) {\n return 'symbol';\n }\n return propType;\n }\n\n // This handles more types than `getPropType`. Only used for error messages.\n // See `createPrimitiveTypeChecker`.\n function getPreciseType(propValue) {\n if (typeof propValue === 'undefined' || propValue === null) {\n return '' + propValue;\n }\n var propType = getPropType(propValue);\n if (propType === 'object') {\n if (propValue instanceof Date) {\n return 'date';\n } else if (propValue instanceof RegExp) {\n return 'regexp';\n }\n }\n return propType;\n }\n\n // Returns a string that is postfixed to a warning about an invalid type.\n // For example, \"undefined\" or \"of type array\"\n function getPostfixForTypeWarning(value) {\n var type = getPreciseType(value);\n switch (type) {\n case 'array':\n case 'object':\n return 'an ' + type;\n case 'boolean':\n case 'date':\n case 'regexp':\n return 'a ' + type;\n default:\n return type;\n }\n }\n\n // Returns class name of the object, if any.\n function getClassName(propValue) {\n if (!propValue.constructor || !propValue.constructor.name) {\n return ANONYMOUS;\n }\n return propValue.constructor.name;\n }\n\n ReactPropTypes.checkPropTypes = checkPropTypes;\n ReactPropTypes.resetWarningCache = checkPropTypes.resetWarningCache;\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bigint: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Checks if a given element has a CSS class.\n * \n * @param element the element\n * @param className the CSS class name\n */\nexport default function hasClass(element, className) {\n if (element.classList) return !!className && element.classList.contains(className);\n return (\" \" + (element.className.baseVal || element.className) + \" \").indexOf(\" \" + className + \" \") !== -1;\n}","import hasClass from './hasClass';\n/**\n * Adds a CSS class to a given element.\n * \n * @param element the element\n * @param className the CSS class name\n */\n\nexport default function addClass(element, className) {\n if (element.classList) element.classList.add(className);else if (!hasClass(element, className)) if (typeof element.className === 'string') element.className = element.className + \" \" + className;else element.setAttribute('class', (element.className && element.className.baseVal || '') + \" \" + className);\n}","function replaceClassName(origClass, classToRemove) {\n return origClass.replace(new RegExp(\"(^|\\\\s)\" + classToRemove + \"(?:\\\\s|$)\", 'g'), '$1').replace(/\\s+/g, ' ').replace(/^\\s*|\\s*$/g, '');\n}\n/**\n * Removes a CSS class from a given element.\n * \n * @param element the element\n * @param className the CSS class name\n */\n\n\nexport default function removeClass(element, className) {\n if (element.classList) {\n element.classList.remove(className);\n } else if (typeof element.className === 'string') {\n element.className = replaceClassName(element.className, className);\n } else {\n element.setAttribute('class', replaceClassName(element.className && element.className.baseVal || '', className));\n }\n}","export default {\n disabled: false\n};","import PropTypes from 'prop-types';\nexport var timeoutsShape = process.env.NODE_ENV !== 'production' ? PropTypes.oneOfType([PropTypes.number, PropTypes.shape({\n enter: PropTypes.number,\n exit: PropTypes.number,\n appear: PropTypes.number\n}).isRequired]) : null;\nexport var classNamesShape = process.env.NODE_ENV !== 'production' ? PropTypes.oneOfType([PropTypes.string, PropTypes.shape({\n enter: PropTypes.string,\n exit: PropTypes.string,\n active: PropTypes.string\n}), PropTypes.shape({\n enter: PropTypes.string,\n enterDone: PropTypes.string,\n enterActive: PropTypes.string,\n exit: PropTypes.string,\n exitDone: PropTypes.string,\n exitActive: PropTypes.string\n})]) : null;","import React from 'react';\nexport default React.createContext(null);","export var forceReflow = function forceReflow(node) {\n return node.scrollTop;\n};","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport config from './config';\nimport { timeoutsShape } from './utils/PropTypes';\nimport TransitionGroupContext from './TransitionGroupContext';\nimport { forceReflow } from './utils/reflow';\nexport var UNMOUNTED = 'unmounted';\nexport var EXITED = 'exited';\nexport var ENTERING = 'entering';\nexport var ENTERED = 'entered';\nexport var EXITING = 'exiting';\n/**\n * The Transition component lets you describe a transition from one component\n * state to another _over time_ with a simple declarative API. Most commonly\n * it's used to animate the mounting and unmounting of a component, but can also\n * be used to describe in-place transition states as well.\n *\n * ---\n *\n * **Note**: `Transition` is a platform-agnostic base component. If you're using\n * transitions in CSS, you'll probably want to use\n * [`CSSTransition`](https://reactcommunity.org/react-transition-group/css-transition)\n * instead. It inherits all the features of `Transition`, but contains\n * additional features necessary to play nice with CSS transitions (hence the\n * name of the component).\n *\n * ---\n *\n * By default the `Transition` component does not alter the behavior of the\n * component it renders, it only tracks \"enter\" and \"exit\" states for the\n * components. It's up to you to give meaning and effect to those states. For\n * example we can add styles to a component when it enters or exits:\n *\n * ```jsx\n * import { Transition } from 'react-transition-group';\n *\n * const duration = 300;\n *\n * const defaultStyle = {\n * transition: `opacity ${duration}ms ease-in-out`,\n * opacity: 0,\n * }\n *\n * const transitionStyles = {\n * entering: { opacity: 1 },\n * entered: { opacity: 1 },\n * exiting: { opacity: 0 },\n * exited: { opacity: 0 },\n * };\n *\n * const Fade = ({ in: inProp }) => (\n * <Transition in={inProp} timeout={duration}>\n * {state => (\n * <div style={{\n * ...defaultStyle,\n * ...transitionStyles[state]\n * }}>\n * I'm a fade Transition!\n * </div>\n * )}\n * </Transition>\n * );\n * ```\n *\n * There are 4 main states a Transition can be in:\n * - `'entering'`\n * - `'entered'`\n * - `'exiting'`\n * - `'exited'`\n *\n * Transition state is toggled via the `in` prop. When `true` the component\n * begins the \"Enter\" stage. During this stage, the component will shift from\n * its current transition state, to `'entering'` for the duration of the\n * transition and then to the `'entered'` stage once it's complete. Let's take\n * the following example (we'll use the\n * [useState](https://reactjs.org/docs/hooks-reference.html#usestate) hook):\n *\n * ```jsx\n * function App() {\n * const [inProp, setInProp] = useState(false);\n * return (\n * <div>\n * <Transition in={inProp} timeout={500}>\n * {state => (\n * // ...\n * )}\n * </Transition>\n * <button onClick={() => setInProp(true)}>\n * Click to Enter\n * </button>\n * </div>\n * );\n * }\n * ```\n *\n * When the button is clicked the component will shift to the `'entering'` state\n * and stay there for 500ms (the value of `timeout`) before it finally switches\n * to `'entered'`.\n *\n * When `in` is `false` the same thing happens except the state moves from\n * `'exiting'` to `'exited'`.\n */\n\nvar Transition = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(Transition, _React$Component);\n\n function Transition(props, context) {\n var _this;\n\n _this = _React$Component.call(this, props, context) || this;\n var parentGroup = context; // In the context of a TransitionGroup all enters are really appears\n\n var appear = parentGroup && !parentGroup.isMounting ? props.enter : props.appear;\n var initialStatus;\n _this.appearStatus = null;\n\n if (props.in) {\n if (appear) {\n initialStatus = EXITED;\n _this.appearStatus = ENTERING;\n } else {\n initialStatus = ENTERED;\n }\n } else {\n if (props.unmountOnExit || props.mountOnEnter) {\n initialStatus = UNMOUNTED;\n } else {\n initialStatus = EXITED;\n }\n }\n\n _this.state = {\n status: initialStatus\n };\n _this.nextCallback = null;\n return _this;\n }\n\n Transition.getDerivedStateFromProps = function getDerivedStateFromProps(_ref, prevState) {\n var nextIn = _ref.in;\n\n if (nextIn && prevState.status === UNMOUNTED) {\n return {\n status: EXITED\n };\n }\n\n return null;\n } // getSnapshotBeforeUpdate(prevProps) {\n // let nextStatus = null\n // if (prevProps !== this.props) {\n // const { status } = this.state\n // if (this.props.in) {\n // if (status !== ENTERING && status !== ENTERED) {\n // nextStatus = ENTERING\n // }\n // } else {\n // if (status === ENTERING || status === ENTERED) {\n // nextStatus = EXITING\n // }\n // }\n // }\n // return { nextStatus }\n // }\n ;\n\n var _proto = Transition.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n this.updateStatus(true, this.appearStatus);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n var nextStatus = null;\n\n if (prevProps !== this.props) {\n var status = this.state.status;\n\n if (this.props.in) {\n if (status !== ENTERING && status !== ENTERED) {\n nextStatus = ENTERING;\n }\n } else {\n if (status === ENTERING || status === ENTERED) {\n nextStatus = EXITING;\n }\n }\n }\n\n this.updateStatus(false, nextStatus);\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n this.cancelNextCallback();\n };\n\n _proto.getTimeouts = function getTimeouts() {\n var timeout = this.props.timeout;\n var exit, enter, appear;\n exit = enter = appear = timeout;\n\n if (timeout != null && typeof timeout !== 'number') {\n exit = timeout.exit;\n enter = timeout.enter; // TODO: remove fallback for next major\n\n appear = timeout.appear !== undefined ? timeout.appear : enter;\n }\n\n return {\n exit: exit,\n enter: enter,\n appear: appear\n };\n };\n\n _proto.updateStatus = function updateStatus(mounting, nextStatus) {\n if (mounting === void 0) {\n mounting = false;\n }\n\n if (nextStatus !== null) {\n // nextStatus will always be ENTERING or EXITING.\n this.cancelNextCallback();\n\n if (nextStatus === ENTERING) {\n if (this.props.unmountOnExit || this.props.mountOnEnter) {\n var node = this.props.nodeRef ? this.props.nodeRef.current : ReactDOM.findDOMNode(this); // https://github.com/reactjs/react-transition-group/pull/749\n // With unmountOnExit or mountOnEnter, the enter animation should happen at the transition between `exited` and `entering`.\n // To make the animation happen, we have to separate each rendering and avoid being processed as batched.\n\n if (node) forceReflow(node);\n }\n\n this.performEnter(mounting);\n } else {\n this.performExit();\n }\n } else if (this.props.unmountOnExit && this.state.status === EXITED) {\n this.setState({\n status: UNMOUNTED\n });\n }\n };\n\n _proto.performEnter = function performEnter(mounting) {\n var _this2 = this;\n\n var enter = this.props.enter;\n var appearing = this.context ? this.context.isMounting : mounting;\n\n var _ref2 = this.props.nodeRef ? [appearing] : [ReactDOM.findDOMNode(this), appearing],\n maybeNode = _ref2[0],\n maybeAppearing = _ref2[1];\n\n var timeouts = this.getTimeouts();\n var enterTimeout = appearing ? timeouts.appear : timeouts.enter; // no enter animation skip right to ENTERED\n // if we are mounting and running this it means appear _must_ be set\n\n if (!mounting && !enter || config.disabled) {\n this.safeSetState({\n status: ENTERED\n }, function () {\n _this2.props.onEntered(maybeNode);\n });\n return;\n }\n\n this.props.onEnter(maybeNode, maybeAppearing);\n this.safeSetState({\n status: ENTERING\n }, function () {\n _this2.props.onEntering(maybeNode, maybeAppearing);\n\n _this2.onTransitionEnd(enterTimeout, function () {\n _this2.safeSetState({\n status: ENTERED\n }, function () {\n _this2.props.onEntered(maybeNode, maybeAppearing);\n });\n });\n });\n };\n\n _proto.performExit = function performExit() {\n var _this3 = this;\n\n var exit = this.props.exit;\n var timeouts = this.getTimeouts();\n var maybeNode = this.props.nodeRef ? undefined : ReactDOM.findDOMNode(this); // no exit animation skip right to EXITED\n\n if (!exit || config.disabled) {\n this.safeSetState({\n status: EXITED\n }, function () {\n _this3.props.onExited(maybeNode);\n });\n return;\n }\n\n this.props.onExit(maybeNode);\n this.safeSetState({\n status: EXITING\n }, function () {\n _this3.props.onExiting(maybeNode);\n\n _this3.onTransitionEnd(timeouts.exit, function () {\n _this3.safeSetState({\n status: EXITED\n }, function () {\n _this3.props.onExited(maybeNode);\n });\n });\n });\n };\n\n _proto.cancelNextCallback = function cancelNextCallback() {\n if (this.nextCallback !== null) {\n this.nextCallback.cancel();\n this.nextCallback = null;\n }\n };\n\n _proto.safeSetState = function safeSetState(nextState, callback) {\n // This shouldn't be necessary, but there are weird race conditions with\n // setState callbacks and unmounting in testing, so always make sure that\n // we can cancel any pending setState callbacks after we unmount.\n callback = this.setNextCallback(callback);\n this.setState(nextState, callback);\n };\n\n _proto.setNextCallback = function setNextCallback(callback) {\n var _this4 = this;\n\n var active = true;\n\n this.nextCallback = function (event) {\n if (active) {\n active = false;\n _this4.nextCallback = null;\n callback(event);\n }\n };\n\n this.nextCallback.cancel = function () {\n active = false;\n };\n\n return this.nextCallback;\n };\n\n _proto.onTransitionEnd = function onTransitionEnd(timeout, handler) {\n this.setNextCallback(handler);\n var node = this.props.nodeRef ? this.props.nodeRef.current : ReactDOM.findDOMNode(this);\n var doesNotHaveTimeoutOrListener = timeout == null && !this.props.addEndListener;\n\n if (!node || doesNotHaveTimeoutOrListener) {\n setTimeout(this.nextCallback, 0);\n return;\n }\n\n if (this.props.addEndListener) {\n var _ref3 = this.props.nodeRef ? [this.nextCallback] : [node, this.nextCallback],\n maybeNode = _ref3[0],\n maybeNextCallback = _ref3[1];\n\n this.props.addEndListener(maybeNode, maybeNextCallback);\n }\n\n if (timeout != null) {\n setTimeout(this.nextCallback, timeout);\n }\n };\n\n _proto.render = function render() {\n var status = this.state.status;\n\n if (status === UNMOUNTED) {\n return null;\n }\n\n var _this$props = this.props,\n children = _this$props.children,\n _in = _this$props.in,\n _mountOnEnter = _this$props.mountOnEnter,\n _unmountOnExit = _this$props.unmountOnExit,\n _appear = _this$props.appear,\n _enter = _this$props.enter,\n _exit = _this$props.exit,\n _timeout = _this$props.timeout,\n _addEndListener = _this$props.addEndListener,\n _onEnter = _this$props.onEnter,\n _onEntering = _this$props.onEntering,\n _onEntered = _this$props.onEntered,\n _onExit = _this$props.onExit,\n _onExiting = _this$props.onExiting,\n _onExited = _this$props.onExited,\n _nodeRef = _this$props.nodeRef,\n childProps = _objectWithoutPropertiesLoose(_this$props, [\"children\", \"in\", \"mountOnEnter\", \"unmountOnExit\", \"appear\", \"enter\", \"exit\", \"timeout\", \"addEndListener\", \"onEnter\", \"onEntering\", \"onEntered\", \"onExit\", \"onExiting\", \"onExited\", \"nodeRef\"]);\n\n return (\n /*#__PURE__*/\n // allows for nested Transitions\n React.createElement(TransitionGroupContext.Provider, {\n value: null\n }, typeof children === 'function' ? children(status, childProps) : React.cloneElement(React.Children.only(children), childProps))\n );\n };\n\n return Transition;\n}(React.Component);\n\nTransition.contextType = TransitionGroupContext;\nTransition.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /**\n * A React reference to DOM element that need to transition:\n * https://stackoverflow.com/a/51127130/4671932\n *\n * - When `nodeRef` prop is used, `node` is not passed to callback functions\n * (e.g. `onEnter`) because user already has direct access to the node.\n * - When changing `key` prop of `Transition` in a `TransitionGroup` a new\n * `nodeRef` need to be provided to `Transition` with changed `key` prop\n * (see\n * [test/CSSTransition-test.js](https://github.com/reactjs/react-transition-group/blob/13435f897b3ab71f6e19d724f145596f5910581c/test/CSSTransition-test.js#L362-L437)).\n */\n nodeRef: PropTypes.shape({\n current: typeof Element === 'undefined' ? PropTypes.any : function (propValue, key, componentName, location, propFullName, secret) {\n var value = propValue[key];\n return PropTypes.instanceOf(value && 'ownerDocument' in value ? value.ownerDocument.defaultView.Element : Element)(propValue, key, componentName, location, propFullName, secret);\n }\n }),\n\n /**\n * A `function` child can be used instead of a React element. This function is\n * called with the current transition status (`'entering'`, `'entered'`,\n * `'exiting'`, `'exited'`), which can be used to apply context\n * specific props to a component.\n *\n * ```jsx\n * <Transition in={this.state.in} timeout={150}>\n * {state => (\n * <MyComponent className={`fade fade-${state}`} />\n * )}\n * </Transition>\n * ```\n */\n children: PropTypes.oneOfType([PropTypes.func.isRequired, PropTypes.element.isRequired]).isRequired,\n\n /**\n * Show the component; triggers the enter or exit states\n */\n in: PropTypes.bool,\n\n /**\n * By default the child component is mounted immediately along with\n * the parent `Transition` component. If you want to \"lazy mount\" the component on the\n * first `in={true}` you can set `mountOnEnter`. After the first enter transition the component will stay\n * mounted, even on \"exited\", unless you also specify `unmountOnExit`.\n */\n mountOnEnter: PropTypes.bool,\n\n /**\n * By default the child component stays mounted after it reaches the `'exited'` state.\n * Set `unmountOnExit` if you'd prefer to unmount the component after it finishes exiting.\n */\n unmountOnExit: PropTypes.bool,\n\n /**\n * By default the child component does not perform the enter transition when\n * it first mounts, regardless of the value of `in`. If you want this\n * behavior, set both `appear` and `in` to `true`.\n *\n * > **Note**: there are no special appear states like `appearing`/`appeared`, this prop\n * > only adds an additional enter transition. However, in the\n * > `<CSSTransition>` component that first enter transition does result in\n * > additional `.appear-*` classes, that way you can choose to style it\n * > differently.\n */\n appear: PropTypes.bool,\n\n /**\n * Enable or disable enter transitions.\n */\n enter: PropTypes.bool,\n\n /**\n * Enable or disable exit transitions.\n */\n exit: PropTypes.bool,\n\n /**\n * The duration of the transition, in milliseconds.\n * Required unless `addEndListener` is provided.\n *\n * You may specify a single timeout for all transitions:\n *\n * ```jsx\n * timeout={500}\n * ```\n *\n * or individually:\n *\n * ```jsx\n * timeout={{\n * appear: 500,\n * enter: 300,\n * exit: 500,\n * }}\n * ```\n *\n * - `appear` defaults to the value of `enter`\n * - `enter` defaults to `0`\n * - `exit` defaults to `0`\n *\n * @type {number | { enter?: number, exit?: number, appear?: number }}\n */\n timeout: function timeout(props) {\n var pt = timeoutsShape;\n if (!props.addEndListener) pt = pt.isRequired;\n\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n return pt.apply(void 0, [props].concat(args));\n },\n\n /**\n * Add a custom transition end trigger. Called with the transitioning\n * DOM node and a `done` callback. Allows for more fine grained transition end\n * logic. Timeouts are still used as a fallback if provided.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * ```jsx\n * addEndListener={(node, done) => {\n * // use the css transitionend event to mark the finish of a transition\n * node.addEventListener('transitionend', done, false);\n * }}\n * ```\n */\n addEndListener: PropTypes.func,\n\n /**\n * Callback fired before the \"entering\" status is applied. An extra parameter\n * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement, isAppearing: bool) -> void\n */\n onEnter: PropTypes.func,\n\n /**\n * Callback fired after the \"entering\" status is applied. An extra parameter\n * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement, isAppearing: bool)\n */\n onEntering: PropTypes.func,\n\n /**\n * Callback fired after the \"entered\" status is applied. An extra parameter\n * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement, isAppearing: bool) -> void\n */\n onEntered: PropTypes.func,\n\n /**\n * Callback fired before the \"exiting\" status is applied.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExit: PropTypes.func,\n\n /**\n * Callback fired after the \"exiting\" status is applied.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExiting: PropTypes.func,\n\n /**\n * Callback fired after the \"exited\" status is applied.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExited: PropTypes.func\n} : {}; // Name the function so it is clearer in the documentation\n\nfunction noop() {}\n\nTransition.defaultProps = {\n in: false,\n mountOnEnter: false,\n unmountOnExit: false,\n appear: false,\n enter: true,\n exit: true,\n onEnter: noop,\n onEntering: noop,\n onEntered: noop,\n onExit: noop,\n onExiting: noop,\n onExited: noop\n};\nTransition.UNMOUNTED = UNMOUNTED;\nTransition.EXITED = EXITED;\nTransition.ENTERING = ENTERING;\nTransition.ENTERED = ENTERED;\nTransition.EXITING = EXITING;\nexport default Transition;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\nimport PropTypes from 'prop-types';\nimport addOneClass from 'dom-helpers/addClass';\nimport removeOneClass from 'dom-helpers/removeClass';\nimport React from 'react';\nimport Transition from './Transition';\nimport { classNamesShape } from './utils/PropTypes';\nimport { forceReflow } from './utils/reflow';\n\nvar _addClass = function addClass(node, classes) {\n return node && classes && classes.split(' ').forEach(function (c) {\n return addOneClass(node, c);\n });\n};\n\nvar removeClass = function removeClass(node, classes) {\n return node && classes && classes.split(' ').forEach(function (c) {\n return removeOneClass(node, c);\n });\n};\n/**\n * A transition component inspired by the excellent\n * [ng-animate](https://docs.angularjs.org/api/ngAnimate) library, you should\n * use it if you're using CSS transitions or animations. It's built upon the\n * [`Transition`](https://reactcommunity.org/react-transition-group/transition)\n * component, so it inherits all of its props.\n *\n * `CSSTransition` applies a pair of class names during the `appear`, `enter`,\n * and `exit` states of the transition. The first class is applied and then a\n * second `*-active` class in order to activate the CSS transition. After the\n * transition, matching `*-done` class names are applied to persist the\n * transition state.\n *\n * ```jsx\n * function App() {\n * const [inProp, setInProp] = useState(false);\n * return (\n * <div>\n * <CSSTransition in={inProp} timeout={200} classNames=\"my-node\">\n * <div>\n * {\"I'll receive my-node-* classes\"}\n * </div>\n * </CSSTransition>\n * <button type=\"button\" onClick={() => setInProp(true)}>\n * Click to Enter\n * </button>\n * </div>\n * );\n * }\n * ```\n *\n * When the `in` prop is set to `true`, the child component will first receive\n * the class `example-enter`, then the `example-enter-active` will be added in\n * the next tick. `CSSTransition` [forces a\n * reflow](https://github.com/reactjs/react-transition-group/blob/5007303e729a74be66a21c3e2205e4916821524b/src/CSSTransition.js#L208-L215)\n * between before adding the `example-enter-active`. This is an important trick\n * because it allows us to transition between `example-enter` and\n * `example-enter-active` even though they were added immediately one after\n * another. Most notably, this is what makes it possible for us to animate\n * _appearance_.\n *\n * ```css\n * .my-node-enter {\n * opacity: 0;\n * }\n * .my-node-enter-active {\n * opacity: 1;\n * transition: opacity 200ms;\n * }\n * .my-node-exit {\n * opacity: 1;\n * }\n * .my-node-exit-active {\n * opacity: 0;\n * transition: opacity 200ms;\n * }\n * ```\n *\n * `*-active` classes represent which styles you want to animate **to**, so it's\n * important to add `transition` declaration only to them, otherwise transitions\n * might not behave as intended! This might not be obvious when the transitions\n * are symmetrical, i.e. when `*-enter-active` is the same as `*-exit`, like in\n * the example above (minus `transition`), but it becomes apparent in more\n * complex transitions.\n *\n * **Note**: If you're using the\n * [`appear`](http://reactcommunity.org/react-transition-group/transition#Transition-prop-appear)\n * prop, make sure to define styles for `.appear-*` classes as well.\n */\n\n\nvar CSSTransition = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(CSSTransition, _React$Component);\n\n function CSSTransition() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n _this.appliedClasses = {\n appear: {},\n enter: {},\n exit: {}\n };\n\n _this.onEnter = function (maybeNode, maybeAppearing) {\n var _this$resolveArgument = _this.resolveArguments(maybeNode, maybeAppearing),\n node = _this$resolveArgument[0],\n appearing = _this$resolveArgument[1];\n\n _this.removeClasses(node, 'exit');\n\n _this.addClass(node, appearing ? 'appear' : 'enter', 'base');\n\n if (_this.props.onEnter) {\n _this.props.onEnter(maybeNode, maybeAppearing);\n }\n };\n\n _this.onEntering = function (maybeNode, maybeAppearing) {\n var _this$resolveArgument2 = _this.resolveArguments(maybeNode, maybeAppearing),\n node = _this$resolveArgument2[0],\n appearing = _this$resolveArgument2[1];\n\n var type = appearing ? 'appear' : 'enter';\n\n _this.addClass(node, type, 'active');\n\n if (_this.props.onEntering) {\n _this.props.onEntering(maybeNode, maybeAppearing);\n }\n };\n\n _this.onEntered = function (maybeNode, maybeAppearing) {\n var _this$resolveArgument3 = _this.resolveArguments(maybeNode, maybeAppearing),\n node = _this$resolveArgument3[0],\n appearing = _this$resolveArgument3[1];\n\n var type = appearing ? 'appear' : 'enter';\n\n _this.removeClasses(node, type);\n\n _this.addClass(node, type, 'done');\n\n if (_this.props.onEntered) {\n _this.props.onEntered(maybeNode, maybeAppearing);\n }\n };\n\n _this.onExit = function (maybeNode) {\n var _this$resolveArgument4 = _this.resolveArguments(maybeNode),\n node = _this$resolveArgument4[0];\n\n _this.removeClasses(node, 'appear');\n\n _this.removeClasses(node, 'enter');\n\n _this.addClass(node, 'exit', 'base');\n\n if (_this.props.onExit) {\n _this.props.onExit(maybeNode);\n }\n };\n\n _this.onExiting = function (maybeNode) {\n var _this$resolveArgument5 = _this.resolveArguments(maybeNode),\n node = _this$resolveArgument5[0];\n\n _this.addClass(node, 'exit', 'active');\n\n if (_this.props.onExiting) {\n _this.props.onExiting(maybeNode);\n }\n };\n\n _this.onExited = function (maybeNode) {\n var _this$resolveArgument6 = _this.resolveArguments(maybeNode),\n node = _this$resolveArgument6[0];\n\n _this.removeClasses(node, 'exit');\n\n _this.addClass(node, 'exit', 'done');\n\n if (_this.props.onExited) {\n _this.props.onExited(maybeNode);\n }\n };\n\n _this.resolveArguments = function (maybeNode, maybeAppearing) {\n return _this.props.nodeRef ? [_this.props.nodeRef.current, maybeNode] // here `maybeNode` is actually `appearing`\n : [maybeNode, maybeAppearing];\n };\n\n _this.getClassNames = function (type) {\n var classNames = _this.props.classNames;\n var isStringClassNames = typeof classNames === 'string';\n var prefix = isStringClassNames && classNames ? classNames + \"-\" : '';\n var baseClassName = isStringClassNames ? \"\" + prefix + type : classNames[type];\n var activeClassName = isStringClassNames ? baseClassName + \"-active\" : classNames[type + \"Active\"];\n var doneClassName = isStringClassNames ? baseClassName + \"-done\" : classNames[type + \"Done\"];\n return {\n baseClassName: baseClassName,\n activeClassName: activeClassName,\n doneClassName: doneClassName\n };\n };\n\n return _this;\n }\n\n var _proto = CSSTransition.prototype;\n\n _proto.addClass = function addClass(node, type, phase) {\n var className = this.getClassNames(type)[phase + \"ClassName\"];\n\n var _this$getClassNames = this.getClassNames('enter'),\n doneClassName = _this$getClassNames.doneClassName;\n\n if (type === 'appear' && phase === 'done' && doneClassName) {\n className += \" \" + doneClassName;\n } // This is to force a repaint,\n // which is necessary in order to transition styles when adding a class name.\n\n\n if (phase === 'active') {\n if (node) forceReflow(node);\n }\n\n if (className) {\n this.appliedClasses[type][phase] = className;\n\n _addClass(node, className);\n }\n };\n\n _proto.removeClasses = function removeClasses(node, type) {\n var _this$appliedClasses$ = this.appliedClasses[type],\n baseClassName = _this$appliedClasses$.base,\n activeClassName = _this$appliedClasses$.active,\n doneClassName = _this$appliedClasses$.done;\n this.appliedClasses[type] = {};\n\n if (baseClassName) {\n removeClass(node, baseClassName);\n }\n\n if (activeClassName) {\n removeClass(node, activeClassName);\n }\n\n if (doneClassName) {\n removeClass(node, doneClassName);\n }\n };\n\n _proto.render = function render() {\n var _this$props = this.props,\n _ = _this$props.classNames,\n props = _objectWithoutPropertiesLoose(_this$props, [\"classNames\"]);\n\n return /*#__PURE__*/React.createElement(Transition, _extends({}, props, {\n onEnter: this.onEnter,\n onEntered: this.onEntered,\n onEntering: this.onEntering,\n onExit: this.onExit,\n onExiting: this.onExiting,\n onExited: this.onExited\n }));\n };\n\n return CSSTransition;\n}(React.Component);\n\nCSSTransition.defaultProps = {\n classNames: ''\n};\nCSSTransition.propTypes = process.env.NODE_ENV !== \"production\" ? _extends({}, Transition.propTypes, {\n /**\n * The animation classNames applied to the component as it appears, enters,\n * exits or has finished the transition. A single name can be provided, which\n * will be suffixed for each stage, e.g. `classNames=\"fade\"` applies:\n *\n * - `fade-appear`, `fade-appear-active`, `fade-appear-done`\n * - `fade-enter`, `fade-enter-active`, `fade-enter-done`\n * - `fade-exit`, `fade-exit-active`, `fade-exit-done`\n *\n * A few details to note about how these classes are applied:\n *\n * 1. They are _joined_ with the ones that are already defined on the child\n * component, so if you want to add some base styles, you can use\n * `className` without worrying that it will be overridden.\n *\n * 2. If the transition component mounts with `in={false}`, no classes are\n * applied yet. You might be expecting `*-exit-done`, but if you think\n * about it, a component cannot finish exiting if it hasn't entered yet.\n *\n * 2. `fade-appear-done` and `fade-enter-done` will _both_ be applied. This\n * allows you to define different behavior for when appearing is done and\n * when regular entering is done, using selectors like\n * `.fade-enter-done:not(.fade-appear-done)`. For example, you could apply\n * an epic entrance animation when element first appears in the DOM using\n * [Animate.css](https://daneden.github.io/animate.css/). Otherwise you can\n * simply use `fade-enter-done` for defining both cases.\n *\n * Each individual classNames can also be specified independently like:\n *\n * ```js\n * classNames={{\n * appear: 'my-appear',\n * appearActive: 'my-active-appear',\n * appearDone: 'my-done-appear',\n * enter: 'my-enter',\n * enterActive: 'my-active-enter',\n * enterDone: 'my-done-enter',\n * exit: 'my-exit',\n * exitActive: 'my-active-exit',\n * exitDone: 'my-done-exit',\n * }}\n * ```\n *\n * If you want to set these classes using CSS Modules:\n *\n * ```js\n * import styles from './styles.css';\n * ```\n *\n * you might want to use camelCase in your CSS file, that way could simply\n * spread them instead of listing them one by one:\n *\n * ```js\n * classNames={{ ...styles }}\n * ```\n *\n * @type {string | {\n * appear?: string,\n * appearActive?: string,\n * appearDone?: string,\n * enter?: string,\n * enterActive?: string,\n * enterDone?: string,\n * exit?: string,\n * exitActive?: string,\n * exitDone?: string,\n * }}\n */\n classNames: classNamesShape,\n\n /**\n * A `<Transition>` callback fired immediately after the 'enter' or 'appear' class is\n * applied.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement, isAppearing: bool)\n */\n onEnter: PropTypes.func,\n\n /**\n * A `<Transition>` callback fired immediately after the 'enter-active' or\n * 'appear-active' class is applied.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement, isAppearing: bool)\n */\n onEntering: PropTypes.func,\n\n /**\n * A `<Transition>` callback fired immediately after the 'enter' or\n * 'appear' classes are **removed** and the `done` class is added to the DOM node.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement, isAppearing: bool)\n */\n onEntered: PropTypes.func,\n\n /**\n * A `<Transition>` callback fired immediately after the 'exit' class is\n * applied.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed\n *\n * @type Function(node: HtmlElement)\n */\n onExit: PropTypes.func,\n\n /**\n * A `<Transition>` callback fired immediately after the 'exit-active' is applied.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed\n *\n * @type Function(node: HtmlElement)\n */\n onExiting: PropTypes.func,\n\n /**\n * A `<Transition>` callback fired immediately after the 'exit' classes\n * are **removed** and the `exit-done` class is added to the DOM node.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed\n *\n * @type Function(node: HtmlElement)\n */\n onExited: PropTypes.func\n}) : {};\nexport default CSSTransition;","import _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\n\nvar _leaveRenders, _enterRenders;\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { ENTERED, ENTERING, EXITING } from './Transition';\nimport TransitionGroupContext from './TransitionGroupContext';\n\nfunction areChildrenDifferent(oldChildren, newChildren) {\n if (oldChildren === newChildren) return false;\n\n if (React.isValidElement(oldChildren) && React.isValidElement(newChildren) && oldChildren.key != null && oldChildren.key === newChildren.key) {\n return false;\n }\n\n return true;\n}\n/**\n * Enum of modes for SwitchTransition component\n * @enum { string }\n */\n\n\nexport var modes = {\n out: 'out-in',\n in: 'in-out'\n};\n\nvar callHook = function callHook(element, name, cb) {\n return function () {\n var _element$props;\n\n element.props[name] && (_element$props = element.props)[name].apply(_element$props, arguments);\n cb();\n };\n};\n\nvar leaveRenders = (_leaveRenders = {}, _leaveRenders[modes.out] = function (_ref) {\n var current = _ref.current,\n changeState = _ref.changeState;\n return React.cloneElement(current, {\n in: false,\n onExited: callHook(current, 'onExited', function () {\n changeState(ENTERING, null);\n })\n });\n}, _leaveRenders[modes.in] = function (_ref2) {\n var current = _ref2.current,\n changeState = _ref2.changeState,\n children = _ref2.children;\n return [current, React.cloneElement(children, {\n in: true,\n onEntered: callHook(children, 'onEntered', function () {\n changeState(ENTERING);\n })\n })];\n}, _leaveRenders);\nvar enterRenders = (_enterRenders = {}, _enterRenders[modes.out] = function (_ref3) {\n var children = _ref3.children,\n changeState = _ref3.changeState;\n return React.cloneElement(children, {\n in: true,\n onEntered: callHook(children, 'onEntered', function () {\n changeState(ENTERED, React.cloneElement(children, {\n in: true\n }));\n })\n });\n}, _enterRenders[modes.in] = function (_ref4) {\n var current = _ref4.current,\n children = _ref4.children,\n changeState = _ref4.changeState;\n return [React.cloneElement(current, {\n in: false,\n onExited: callHook(current, 'onExited', function () {\n changeState(ENTERED, React.cloneElement(children, {\n in: true\n }));\n })\n }), React.cloneElement(children, {\n in: true\n })];\n}, _enterRenders);\n/**\n * A transition component inspired by the [vue transition modes](https://vuejs.org/v2/guide/transitions.html#Transition-Modes).\n * You can use it when you want to control the render between state transitions.\n * Based on the selected mode and the child's key which is the `Transition` or `CSSTransition` component, the `SwitchTransition` makes a consistent transition between them.\n *\n * If the `out-in` mode is selected, the `SwitchTransition` waits until the old child leaves and then inserts a new child.\n * If the `in-out` mode is selected, the `SwitchTransition` inserts a new child first, waits for the new child to enter and then removes the old child.\n *\n * **Note**: If you want the animation to happen simultaneously\n * (that is, to have the old child removed and a new child inserted **at the same time**),\n * you should use\n * [`TransitionGroup`](https://reactcommunity.org/react-transition-group/transition-group)\n * instead.\n *\n * ```jsx\n * function App() {\n * const [state, setState] = useState(false);\n * return (\n * <SwitchTransition>\n * <CSSTransition\n * key={state ? \"Goodbye, world!\" : \"Hello, world!\"}\n * addEndListener={(node, done) => node.addEventListener(\"transitionend\", done, false)}\n * classNames='fade'\n * >\n * <button onClick={() => setState(state => !state)}>\n * {state ? \"Goodbye, world!\" : \"Hello, world!\"}\n * </button>\n * </CSSTransition>\n * </SwitchTransition>\n * );\n * }\n * ```\n *\n * ```css\n * .fade-enter{\n * opacity: 0;\n * }\n * .fade-exit{\n * opacity: 1;\n * }\n * .fade-enter-active{\n * opacity: 1;\n * }\n * .fade-exit-active{\n * opacity: 0;\n * }\n * .fade-enter-active,\n * .fade-exit-active{\n * transition: opacity 500ms;\n * }\n * ```\n */\n\nvar SwitchTransition = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(SwitchTransition, _React$Component);\n\n function SwitchTransition() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n _this.state = {\n status: ENTERED,\n current: null\n };\n _this.appeared = false;\n\n _this.changeState = function (status, current) {\n if (current === void 0) {\n current = _this.state.current;\n }\n\n _this.setState({\n status: status,\n current: current\n });\n };\n\n return _this;\n }\n\n var _proto = SwitchTransition.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n this.appeared = true;\n };\n\n SwitchTransition.getDerivedStateFromProps = function getDerivedStateFromProps(props, state) {\n if (props.children == null) {\n return {\n current: null\n };\n }\n\n if (state.status === ENTERING && props.mode === modes.in) {\n return {\n status: ENTERING\n };\n }\n\n if (state.current && areChildrenDifferent(state.current, props.children)) {\n return {\n status: EXITING\n };\n }\n\n return {\n current: React.cloneElement(props.children, {\n in: true\n })\n };\n };\n\n _proto.render = function render() {\n var _this$props = this.props,\n children = _this$props.children,\n mode = _this$props.mode,\n _this$state = this.state,\n status = _this$state.status,\n current = _this$state.current;\n var data = {\n children: children,\n current: current,\n changeState: this.changeState,\n status: status\n };\n var component;\n\n switch (status) {\n case ENTERING:\n component = enterRenders[mode](data);\n break;\n\n case EXITING:\n component = leaveRenders[mode](data);\n break;\n\n case ENTERED:\n component = current;\n }\n\n return /*#__PURE__*/React.createElement(TransitionGroupContext.Provider, {\n value: {\n isMounting: !this.appeared\n }\n }, component);\n };\n\n return SwitchTransition;\n}(React.Component);\n\nSwitchTransition.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /**\n * Transition modes.\n * `out-in`: Current element transitions out first, then when complete, the new element transitions in.\n * `in-out`: New element transitions in first, then when complete, the current element transitions out.\n *\n * @type {'out-in'|'in-out'}\n */\n mode: PropTypes.oneOf([modes.in, modes.out]),\n\n /**\n * Any `Transition` or `CSSTransition` component.\n */\n children: PropTypes.oneOfType([PropTypes.element.isRequired])\n} : {};\nSwitchTransition.defaultProps = {\n mode: modes.out\n};\nexport default SwitchTransition;","import React from \"react\";\n\nimport styles from \"./stack.module.css\";\n\nexport default function StackView({ name, children }) {\n return <div className={styles.stack}>{children}</div>;\n}\n","import React, {\n createRef,\n useEffect,\n useState,\n createContext,\n useMemo,\n} from \"react\";\nimport { SwitchTransition, CSSTransition } from \"react-transition-group\";\nimport View from \"./View\";\n\nimport styles from \"./stack.module.css\";\n\ntype StackProps = {\n name?: string;\n currentView: string;\n onViewChange: (view: string, args: any) => void;\n children: React.ReactNode;\n};\n\ntype MapContextType = {\n setView: (view: string, args?: any) => void;\n current: {\n name: string;\n args?: any;\n };\n};\n\nexport const StackContext = createContext<MapContextType>({\n setView: () => {},\n current: {\n name: \"none\",\n },\n});\n\nexport function useStackContext() {\n return React.useContext(StackContext);\n}\n\nexport default function Stack({\n name,\n currentView,\n onViewChange,\n children,\n}: StackProps) {\n const elements = {\n none: {\n name: \"none\",\n ref: createRef(),\n view: null,\n },\n };\n\n React.Children.forEach(children, (element) => {\n if (!React.isValidElement(element)) return;\n const { name } = element.props as any;\n if (!name) {\n throw new Error(\"name is required for Stack.View\");\n }\n elements[name] = {\n name: name,\n ref: createRef(),\n view: element,\n };\n });\n\n const [currentRef, setCurrentRef] = useState(elements[currentView].ref);\n\n useEffect(() => {\n setCurrentRef(elements[currentView].ref);\n }, [currentView]);\n\n const { view: View } = elements[currentView];\n\n const [args, setArgs] = useState<any>({});\n\n const contextValue = useMemo(() => {\n return {\n current: {\n name: currentView,\n args: args,\n },\n setView: (view, opt) => {\n setArgs(opt);\n onViewChange(view, opt);\n },\n };\n }, [currentView, onViewChange, args, setArgs]);\n\n return (\n <StackContext.Provider value={contextValue}>\n <SwitchTransition mode=\"out-in\">\n <CSSTransition\n classNames={{\n enter: styles.slideEnter,\n enterActive: styles.slideEnterActive,\n enterDone: styles.slideEnterDone,\n exit: styles.slideExit,\n exitActive: styles.slideExitActive,\n exitDone: styles.slideExitDone,\n }}\n mountOnEnter\n unmountOnExit\n timeout={300}\n key={currentView}\n nodeRef={currentRef}\n addEndListener={(done) => {\n currentRef.current.addEventListener(\"transitionend\", done, false);\n }}\n >\n <div className={styles.stack} ref={currentRef}>\n {View}\n </div>\n </CSSTransition>\n </SwitchTransition>\n </StackContext.Provider>\n );\n}\n\nStack.View = View;\n","import React, { useState, useRef, useEffect, useContext } from \"react\";\nimport { getLoader } from \"../../utils/loader\";\nimport { useMapContext } from \"../../contexts/Map\";\n\nimport styles from \"./SearchInput.module.css\";\n\nexport default function SearchInput({ onFocus }) {\n const { options, setPlace, t, language } = useMapContext();\n const apiKey = options.googleApiKey;\n\n const inputRef = useRef(null);\n\n const loader = getLoader(apiKey, language);\n\n useEffect(() => {\n if (!inputRef.current) return;\n loader.importLibrary(\"places\").then((places) => {\n const autocomplete = new places.Autocomplete(inputRef.current, {\n fields: [\"geometry\"],\n });\n autocomplete.addListener(\"place_changed\", () => {\n const place = autocomplete.getPlace();\n setPlace(place);\n });\n });\n }, [inputRef]);\n\n // Doc for styling the autocomplete\n // https://developers.google.com/maps/documentation/javascript/place-autocomplete#style-autocomplete\n return (\n <div className={styles.container}>\n <input\n onFocus={onFocus}\n ref={inputRef}\n className={styles.searchInput}\n type=\"text\"\n placeholder={t(\"search.placeholder\")}\n />\n </div>\n );\n}\n\n","import React, { useEffect } from \"react\";\n\nimport styles from \"./Checkbox.module.css\";\n\ntype CheckboxToggleProps = {\n id?: string;\n checked: boolean;\n name?: string;\n onChange: (value: boolean) => void;\n type?: \"checkbox\" | \"radio\";\n};\n\nexport default function CheckboxToggle({\n id,\n name,\n checked,\n onChange,\n type = \"checkbox\",\n}: CheckboxToggleProps) {\n const [isChecked, setIsChecked] = React.useState(checked || false);\n\n const onChangeCallback = React.useCallback(\n (e) => {\n setIsChecked(e.target.checked);\n onChange(e.target.checked);\n },\n [onChange],\n );\n\n useEffect(() => {\n setIsChecked(checked);\n }, [checked]);\n\n return (\n <div className={styles.container}>\n <input\n name={name}\n id={id}\n type={type}\n value={isChecked as any}\n checked={isChecked as any}\n onChange={onChangeCallback}\n />\n <span className={styles.box}>\n <svg\n className=\"checkmark\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n width=\"12\"\n height=\"12\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"20 6 9 17 4 12\"></polyline>\n </svg>\n </span>\n </div>\n );\n}\n","import React, { CSSProperties } from \"react\";\n\nimport styles from \"./Range.module.css\";\n\nexport default function Range({ ticks, value, onChange }) {\n const inputRef = React.useRef(null);\n\n const convertValue = ticks.findIndex((tick) => tick.value === value);\n\n const bgSize = (convertValue / (ticks.length - 1)) * 100;\n\n return (\n <div className={styles.container}>\n <input\n value={convertValue}\n onChange={(e) => {\n onChange(ticks[e.target.value].value);\n }}\n ref={inputRef}\n className={styles.input}\n type=\"range\"\n list=\"tickmarks\"\n step=\"1\"\n min=\"0\"\n max=\"8\"\n style={{ \"--roadmap-range-bgize\": `${bgSize}%` } as CSSProperties}\n />\n\n <div className={styles.ticksContainer}>\n {ticks.map((tick, i) => {\n return (\n <div\n onClick={(e) => {\n onChange(ticks[i].value);\n }}\n key={tick.label}\n className={styles.tick}\n >\n {tick.label}\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n\n","import React, { useState, useMemo, useRef, useEffect } from \"react\";\nimport styles from \"./MultiSelect.module.css\";\n\nexport interface MultiSelectOption {\n value: string | number;\n label: string;\n disabled?: boolean;\n}\n\nexport interface MultiSelectProps {\n id?: string;\n name?: string;\n options: MultiSelectOption[];\n value?: (string | number)[];\n preferredValues?: (string | number)[];\n placeholder?: string;\n disabled?: boolean;\n className?: string;\n onChange?: (values: (string | number)[]) => void;\n}\n\nconst MultiSelect: React.FC<MultiSelectProps> = ({\n id,\n name,\n options,\n value = [],\n preferredValues = [],\n placeholder = \"Select...\",\n disabled = false,\n className,\n onChange,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [inputValue, setInputValue] = useState(\"\");\n const [highlightedIndex, setHighlightedIndex] = useState(-1);\n const inputRef = useRef<HTMLInputElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n\n const preferredSet = useMemo(\n () => new Set(preferredValues),\n [preferredValues],\n );\n\n const { preferred, others } = useMemo(() => {\n const q = inputValue.toLowerCase();\n const filtered = options.filter((o) => o.label.toLowerCase().includes(q));\n return {\n preferred: filtered.filter((o) => preferredSet.has(o.value)),\n others: filtered.filter((o) => !preferredSet.has(o.value)),\n };\n }, [options, inputValue, preferredSet]);\n\n const flatItems = useMemo(() => [...preferred, ...others], [preferred, others]);\n\n const selectedOptions = useMemo(\n () => options.filter((o) => value.includes(o.value)),\n [options, value],\n );\n\n useEffect(() => {\n if (highlightedIndex >= flatItems.length) {\n setHighlightedIndex(flatItems.length > 0 ? 0 : -1);\n }\n }, [flatItems, highlightedIndex]);\n\n const openMenu = () => {\n if (disabled) return;\n setIsOpen(true);\n if (highlightedIndex < 0 && flatItems.length > 0) setHighlightedIndex(0);\n };\n\n const closeMenu = () => {\n setIsOpen(false);\n setInputValue(\"\");\n setHighlightedIndex(-1);\n };\n\n const selectItem = (item: MultiSelectOption) => {\n if (item.disabled) return;\n const next = value.includes(item.value)\n ? value.filter((v) => v !== item.value)\n : [...value, item.value];\n onChange?.(next);\n setInputValue(\"\");\n setIsOpen(true);\n inputRef.current?.focus();\n };\n\n const removeValue = (v: string | number) => {\n onChange?.(value.filter((x) => x !== v));\n };\n\n const handleInputKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (disabled) return;\n switch (e.key) {\n case \"Backspace\":\n if (inputValue === \"\" && value.length > 0) {\n e.preventDefault();\n onChange?.(value.slice(0, -1));\n }\n return;\n case \"ArrowDown\":\n e.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n if (flatItems.length > 0) setHighlightedIndex(0);\n } else if (flatItems.length > 0) {\n setHighlightedIndex((i) => (i + 1) % flatItems.length);\n }\n return;\n case \"ArrowUp\":\n e.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n if (flatItems.length > 0)\n setHighlightedIndex(flatItems.length - 1);\n } else if (flatItems.length > 0) {\n setHighlightedIndex(\n (i) => (i <= 0 ? flatItems.length : i) - 1,\n );\n }\n return;\n case \"Enter\":\n if (isOpen && highlightedIndex >= 0 && flatItems[highlightedIndex]) {\n e.preventDefault();\n selectItem(flatItems[highlightedIndex]);\n }\n return;\n case \"Escape\":\n if (isOpen) {\n e.preventDefault();\n closeMenu();\n }\n return;\n case \"Home\":\n if (isOpen && flatItems.length > 0) {\n e.preventDefault();\n setHighlightedIndex(0);\n }\n return;\n case \"End\":\n if (isOpen && flatItems.length > 0) {\n e.preventDefault();\n setHighlightedIndex(flatItems.length - 1);\n }\n return;\n default:\n return;\n }\n };\n\n const handleInputBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n const next = e.relatedTarget as Node | null;\n if (next && containerRef.current?.contains(next)) return;\n closeMenu();\n };\n\n const toggleDropdown = () => {\n if (disabled) return;\n if (isOpen) {\n setIsOpen(false);\n } else {\n openMenu();\n }\n inputRef.current?.focus();\n };\n\n const renderOption = (option: MultiSelectOption, idx: number, isLast: boolean) => {\n const selected = value.includes(option.value);\n return (\n <div\n key={option.value}\n className={`${styles.option} ${\n highlightedIndex === idx ? styles.optionFocused : \"\"\n } ${selected ? styles.optionSelected : \"\"} ${\n option.disabled ? styles.optionDisabled : \"\"\n } ${isLast ? styles.optionLast : \"\"}`}\n role=\"option\"\n aria-selected={selected}\n aria-disabled={option.disabled || undefined}\n onMouseDown={(e) => e.preventDefault()}\n onMouseMove={() => {\n if (highlightedIndex !== idx) setHighlightedIndex(idx);\n }}\n onClick={() => selectItem(option)}\n >\n <span className={styles.optionLabel}>{option.label}</span>\n {selected && (\n <svg\n className={styles.optionCheck}\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n )}\n </div>\n );\n };\n\n return (\n <div\n ref={containerRef}\n className={`${styles.multiSelect} ${className ?? \"\"}`}\n >\n <div className={`${styles.control} ${disabled ? styles.disabled : \"\"}`}>\n <div\n className={styles.valueContainer}\n onMouseDown={(e) => {\n if (e.target === e.currentTarget) {\n e.preventDefault();\n inputRef.current?.focus();\n openMenu();\n }\n }}\n >\n {selectedOptions.map((option) => (\n <div key={option.value} className={styles.multiValue}>\n <span className={styles.multiValueLabel}>{option.label}</span>\n <button\n type=\"button\"\n className={styles.multiValueRemove}\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => removeValue(option.value)}\n disabled={disabled}\n aria-label={`Remove ${option.label}`}\n >\n ×\n </button>\n </div>\n ))}\n <input\n ref={inputRef}\n id={id}\n name={name}\n className={styles.input}\n value={inputValue}\n onChange={(e) => {\n setInputValue(e.target.value);\n setIsOpen(true);\n setHighlightedIndex(0);\n }}\n onKeyDown={handleInputKeyDown}\n onFocus={openMenu}\n onBlur={handleInputBlur}\n placeholder={selectedOptions.length === 0 ? placeholder : \"\"}\n disabled={disabled}\n autoComplete=\"off\"\n role=\"combobox\"\n aria-expanded={isOpen}\n aria-autocomplete=\"list\"\n />\n </div>\n <button\n type=\"button\"\n className={styles.dropdownIndicator}\n onMouseDown={(e) => e.preventDefault()}\n onClick={toggleDropdown}\n disabled={disabled}\n aria-label=\"Toggle menu\"\n tabIndex={-1}\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"6,9 12,15 18,9\" />\n </svg>\n </button>\n </div>\n\n {isOpen && (\n <div className={`${styles.menu} ${styles.menuOpen}`} role=\"listbox\">\n <div className={styles.menuList}>\n {preferred.length > 0 && (\n <>\n <div className={styles.groupHeading}>Preferred</div>\n {preferred.map((option, i) =>\n renderOption(\n option,\n i,\n i === preferred.length - 1 && others.length === 0,\n ),\n )}\n </>\n )}\n {others.length > 0 && (\n <>\n {preferred.length > 0 && (\n <>\n <div className={styles.groupSeparator} />\n <div className={styles.groupHeading}>All</div>\n </>\n )}\n {others.map((option, i) =>\n renderOption(\n option,\n preferred.length + i,\n i === others.length - 1,\n ),\n )}\n </>\n )}\n {preferred.length === 0 && others.length === 0 && (\n <div className={styles.noOptions}>No options found</div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n};\n\nexport default MultiSelect;\n","import React from \"react\";\nimport styles from \"./SelectField.module.css\";\n\nexport interface SelectFieldOption {\n value: string | number;\n label: string;\n disabled?: boolean;\n}\n\nexport interface SelectFieldProps {\n id?: string;\n name?: string;\n value?: string | number;\n options: SelectFieldOption[];\n placeholder?: string;\n disabled?: boolean;\n className?: string;\n onChange?: (value: string | number) => void;\n onBlur?: (event: React.FocusEvent<HTMLSelectElement>) => void;\n onFocus?: (event: React.FocusEvent<HTMLSelectElement>) => void;\n}\n\nconst SelectField: React.FC<SelectFieldProps> = ({\n id,\n name,\n value,\n options = [],\n placeholder = \"Select an option\",\n disabled = false,\n className = \"\",\n onChange,\n onBlur,\n onFocus,\n}) => {\n const handleChange = (event: React.ChangeEvent<HTMLSelectElement>) => {\n const selectedValue = event.target.value;\n const option = options.find(\n (opt) => opt.value.toString() === selectedValue\n );\n\n if (option && onChange) {\n onChange(option.value);\n }\n };\n\n return (\n <div className={`${styles.selectField} ${className}`}>\n <select\n id={id}\n name={name}\n value={value || \"\"}\n disabled={disabled}\n onChange={handleChange}\n onBlur={onBlur}\n onFocus={onFocus}\n className={styles.select}\n >\n {placeholder && (\n <option value=\"\" disabled>\n {placeholder}\n </option>\n )}\n {options.map((option, i) => (\n <option key={`${i}`} value={option.value} disabled={option.disabled}>\n {option.label}\n </option>\n ))}\n </select>\n </div>\n );\n};\n\nexport default SelectField;\n\n","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3csvg%20version='1.1'%20id='Layer_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20600%20600'%20xml:space='preserve'%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20fill='currentColor'%20d='M353.286,163.919c16.464,0,29.815,13.351,29.815,29.822%20c0,16.467-13.351,29.819-29.815,29.819c-16.47,0-29.822-13.352-29.822-29.819C323.464,177.27,336.816,163.919,353.286,163.919%20L353.286,163.919z%20M245.838,163.919c16.47,0,29.822,13.351,29.822,29.822c0,16.467-13.352,29.819-29.822,29.819%20c-16.471,0-29.822-13.352-29.822-29.819C216.016,177.27,229.367,163.919,245.838,163.919L245.838,163.919z%20M354.093,338.178%20c22.575,0,40.874,18.299,40.874,40.87c0,22.571-18.299,40.87-40.874,40.87c-22.568,0-40.867-18.299-40.867-40.87%20C313.226,356.477,331.525,338.178,354.093,338.178L354.093,338.178z%20M245.024,338.178c22.575,0,40.874,18.299,40.874,40.87%20c0,22.571-18.299,40.87-40.874,40.87c-22.568,0-40.874-18.299-40.874-40.87C204.151,356.477,222.457,338.178,245.024,338.178%20L245.024,338.178z%20M406.906,244.769c22.575,0,40.874,18.299,40.874,40.87s-18.299,40.87-40.874,40.87%20c-22.568,0-40.867-18.299-40.867-40.87S384.338,244.769,406.906,244.769L406.906,244.769z%20M192.211,244.769%20c22.568,0,40.874,18.299,40.874,40.87s-18.306,40.87-40.874,40.87c-22.575,0-40.874-18.299-40.874-40.87%20S169.636,244.769,192.211,244.769L192.211,244.769z%20M299.559,244.769c22.575,0,40.874,18.299,40.874,40.87%20s-18.299,40.87-40.874,40.87c-22.569,0-40.868-18.299-40.868-40.87S276.99,244.769,299.559,244.769L299.559,244.769z%20M452.99,131.334H146.127c-32.625,37.291-50.332,84.551-50.332,134.107c0,112.541,91.226,203.765,203.764,203.765%20c112.544,0,203.764-91.223,203.764-203.765C503.323,215.889,485.608,168.622,452.99,131.334L452.99,131.334z%20M471.276,105.109%20l-4.672-4.998h-334.09l-4.672,4.998c-40.739,43.6-63.267,100.662-63.267,160.332c0,129.775,105.21,234.988,234.984,234.988%20c129.774,0,234.984-105.213,234.984-234.988C534.542,205.771,512.015,148.709,471.276,105.109L471.276,105.109z%20M480.204,60.027%20H118.914C61.952,110.158,26,183.596,26,265.441C26,416.523,148.48,539,299.559,539c151.085,0,273.558-122.477,273.558-273.559%20C573.117,183.596,537.165,110.158,480.204,60.027z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2022.0.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Layer_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20600%20600'%20enable-background='new%200%200%20600%20600'%20xml:space='preserve'%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20fill='currentColor'%20d='M228.887,396.793c20.779,0,37.62,16.841,37.62,37.617%20c0,20.773-16.841,37.617-37.62,37.617c-20.773,0-37.613-16.844-37.613-37.617C191.274,413.634,208.115,396.793,228.887,396.793%20L228.887,396.793z%20M366.03,396.793c20.773,0,37.614,16.841,37.614,37.617c0,20.773-16.841,37.617-37.614,37.617%20c-20.779,0-37.62-16.844-37.62-37.617C328.41,413.634,345.251,396.793,366.03,396.793L366.03,396.793z%20M228.375,325.684%20c-29.03,0-55.41,11.868-74.52,30.976c-41.566,41.573-41.566,113.923,0,155.497c19.111,19.111,45.49,30.979,74.52,30.979h138.168%20c29.023,0,55.41-11.868,74.521-30.979c41.565-41.566,41.565-113.928,0-155.497c-18.336-18.336-43.379-30.003-71.019-30.916%20c63.723-27.868,105.151-90.836,105.151-160.733c0-42.14-13.276-74.632-37.316-108.359H161.794%20c-24.033,33.747-37.309,66.2-37.309,108.359c0,69.852,41.359,132.758,105.012,160.674H228.375L228.375,325.684z%20M366.543,357.791%20H228.375c-20.163,0-38.513,8.265-51.824,21.569c-29.023,29.027-29.023,81.069,0,110.096c13.311,13.308,31.654,21.569,51.824,21.569%20h138.168c20.17,0,38.513-8.261,51.824-21.569c29.023-29.027,29.023-81.069,0-110.096%20C405.056,366.057,386.706,357.791,366.543,357.791L366.543,357.791z%20M421.17,88.762c14.523,23.018,21.915,49.024,21.915,76.248%20c0,79.121-64.131,143.245-143.248,143.245S156.595,244.127,156.595,165.01c0-27.234,7.392-53.222,21.915-76.248H421.17%20L421.17,88.762z%20M331.075,225.95c11.726,0,21.236,9.511,21.236,21.236c0,11.733-9.511,21.24-21.236,21.24%20c-11.733,0-21.236-9.507-21.236-21.24C309.839,235.461,319.342,225.95,331.075,225.95L331.075,225.95z%20M268.605,225.95%20c11.726,0,21.243,9.511,21.243,21.236c0,11.733-9.518,21.24-21.243,21.24c-11.726,0-21.236-9.507-21.236-21.24%20C247.369,235.461,256.879,225.95,268.605,225.95L268.605,225.95z%20M236.882,163.754c11.726,0,21.243,9.508,21.243,21.236%20c0,11.729-9.518,21.24-21.243,21.24c-11.726,0-21.236-9.511-21.236-21.24C215.646,173.261,225.156,163.754,236.882,163.754%20L236.882,163.754z%20M299.837,163.754c11.732,0,21.243,9.508,21.243,21.236c0,11.729-9.511,21.24-21.243,21.24%20c-11.726,0-21.236-9.511-21.236-21.24C278.6,173.261,288.111,163.754,299.837,163.754L299.837,163.754z%20M362.798,163.754%20c11.726,0,21.236,9.508,21.236,21.236c0,11.729-9.511,21.24-21.236,21.24c-11.733,0-21.236-9.511-21.236-21.24%20C341.562,173.261,351.065,163.754,362.798,163.754L362.798,163.754z%20M332.079,116.228c6.86,0,12.417,5.561,12.417,12.417%20c0,6.86-5.558,12.425-12.417,12.425s-12.424-5.566-12.424-12.425C319.654,121.79,325.219,116.228,332.079,116.228L332.079,116.228z%20M267.601,116.228c6.86,0,12.425,5.561,12.425,12.417c0,6.86-5.565,12.425-12.425,12.425c-6.86,0-12.417-5.566-12.417-12.425%20C255.184,121.79,260.742,116.228,267.601,116.228L267.601,116.228z%20M177.153,7.87C129.219,7.87,90,47.086,90,95.02v408.83%20c0,47.934,39.219,87.15,87.153,87.15h246.024c47.934,0,87.147-39.216,87.147-87.15V95.02c0-47.934-39.213-87.15-87.147-87.15%20H177.153z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2022.0.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Layer_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20600%20600'%20enable-background='new%200%200%20600%20600'%20xml:space='preserve'%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20fill='currentColor'%20d='M407.111,334.214c16.317,0,29.543,13.226,29.543,29.543%20c0,16.313-13.227,29.543-29.543,29.543c-16.31,0-29.536-13.229-29.536-29.543C377.576,347.44,390.802,334.214,407.111,334.214%20L407.111,334.214z%20M198.69,334.214c16.317,0,29.543,13.226,29.543,29.543c0,16.313-13.226,29.543-29.543,29.543%20s-29.543-13.229-29.543-29.543C169.147,347.44,182.373,334.214,198.69,334.214L198.69,334.214z%20M227.94,180.772%20c24.971,0,45.213,20.242,45.213,45.213c0,24.967-20.243,45.213-45.213,45.213s-45.213-20.245-45.213-45.213%20C182.727,201.014,202.969,180.772,227.94,180.772L227.94,180.772z%20M377.868,180.772c24.968,0,45.213,20.242,45.213,45.213%20c0,24.967-20.245,45.213-45.213,45.213c-24.974,0-45.213-20.245-45.213-45.213C332.655,201.014,352.894,180.772,377.868,180.772%20L377.868,180.772z%20M302.899,361.142c24.974,0,45.22,20.243,45.22,45.213s-20.245,45.213-45.22,45.213%20c-24.968,0-45.21-20.243-45.21-45.213S277.931,361.142,302.899,361.142L302.899,361.142z%20M302.899,100.142%20c-111.485,0-201.855,90.37-201.855,201.858c0,111.489,90.37,201.859,201.855,201.859c111.491,0,201.865-90.37,201.865-201.859%20C504.764,190.512,414.391,100.142,302.899,100.142L302.899,100.142z%20M302.899,69.21C174.338,69.21,70.113,173.44,70.113,302%20c0,128.561,104.226,232.79,232.787,232.79c128.56,0,232.793-104.229,232.793-232.79C535.692,173.44,431.459,69.21,302.899,69.21%20L302.899,69.21z%20M302.899,31C153.234,31,31.902,152.328,31.902,302c0,149.669,121.331,271,270.997,271%20c149.672,0,271.006-121.331,271.006-271C573.906,152.328,452.571,31,302.899,31z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2022.0.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Layer_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20600%20600'%20enable-background='new%200%200%20600%20600'%20xml:space='preserve'%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20fill='currentColor'%20d='M246.063,132.777c18.959,0,34.335,15.373,34.335,34.332%20c0,18.965-15.376,34.335-34.335,34.335c-18.961,0-34.332-15.37-34.332-34.335C211.731,148.15,227.102,132.777,246.063,132.777%20L246.063,132.777z%20M357.555,132.777c18.962,0,34.332,15.373,34.332,34.332c0,18.962-15.37,34.335-34.332,34.335%20c-18.961,0-34.331-15.373-34.331-34.335C323.224,148.15,338.594,132.777,357.555,132.777L357.555,132.777z%20M226.875,253.708%20c9.286,0,16.811,7.525,16.811,16.808c0,9.286-7.525,16.811-16.811,16.811c-9.283,0-16.808-7.525-16.808-16.811%20C210.066,261.234,217.592,253.708,226.875,253.708L226.875,253.708z%20M371.359,253.708c9.286,0,16.815,7.525,16.815,16.808%20c0,9.286-7.529,16.811-16.815,16.811c-9.279,0-16.808-7.525-16.808-16.811C354.552,261.234,362.08,253.708,371.359,253.708%20L371.359,253.708z%20M236.304,421.639c19.179,0,34.731,15.548,34.731,34.731c0,19.179-15.552,34.731-34.731,34.731%20c-19.179,0-34.731-15.552-34.731-34.731C201.573,437.187,217.126,421.639,236.304,421.639L236.304,421.639z%20M362.924,421.639%20c19.179,0,34.728,15.548,34.728,34.731c0,19.179-15.549,34.731-34.728,34.731c-19.186,0-34.735-15.552-34.735-34.731%20C328.189,437.187,343.738,421.639,362.924,421.639L362.924,421.639z%20M235.828,355.985c-26.801,0-51.159,10.958-68.804,28.6%20c-38.377,38.383-38.377,105.184,0,143.567c17.645,17.645,42.004,28.602,68.804,28.602h127.568c26.803,0,51.159-10.957,68.804-28.602%20c38.377-38.377,38.377-105.19,0-143.567c-16.91-16.91-39.994-27.679-65.481-28.542c57.148-25.011,97.033-82.036,97.033-148.405%20c0-88.133-70.984-161.938-161.945-161.938c-90.131,0-161.935,73.009-161.935,161.938c0,66.315,39.821,123.302,96.895,148.348%20H235.828L235.828,355.985z%20M159.969,344.666c-6.378,4.464-12.357,9.488-17.866,14.999c-52.137,52.134-52.137,141.271-0.003,193.407%20C167.008,577.982,200.589,592,235.828,592h127.568c35.24,0,68.823-14.018,93.729-38.927c52.137-52.134,52.137-141.276,0-193.41%20c-4.761-4.761-9.874-9.155-15.287-13.143c36.523-36.834,57.159-86.685,57.159-138.883c0-108.993-88.188-197.184-197.19-197.184%20c-108.977,0-197.181,88.207-197.181,197.184C104.627,258.933,124.557,307.996,159.969,344.666L159.969,344.666z%20M363.396,385.629%20H235.828c-18.617,0-35.559,7.631-47.846,19.914c-26.797,26.8-26.797,74.85,0,101.65c12.287,12.286,29.225,19.914,47.846,19.914%20h127.568c18.623,0,35.559-7.628,47.849-19.914c26.797-26.8,26.797-74.85,0-101.65C398.955,393.259,382.013,385.629,363.396,385.629%20L363.396,385.629z%20M301.808,75.381c-73.808,0-132.256,59.869-132.256,132.256c0,72.383,58.448,132.256,132.256,132.256%20c73.815,0,132.265-59.87,132.265-132.256C434.073,135.248,375.622,75.381,301.808,75.381L301.808,75.381z%20M301.808,271.807%20c13.689,0,24.784,11.098,24.784,24.781c0,13.686-11.094,24.78-24.784,24.78c-13.686,0-24.777-11.094-24.777-24.78%20C277.03,282.905,288.122,271.807,301.808,271.807z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3csvg%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20600%20600'%20xml:space='preserve'%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20fill='currentColor'%20d='M460.592,75.695C501.794,116.897,525,172.38,525,230.692v136.191%20c0,58.315-23.206,113.795-64.408,154.997c-86.029,86.032-228.158,86.032-314.186,0C105.203,480.679,82,425.199,82,366.884V230.692%20c0-58.312,23.203-113.795,64.405-154.997C232.433-10.337,374.563-10.337,460.592,75.695L460.592,75.695z%20M434.493,101.794%20c-71.625-71.628-190.365-71.628-261.989,0c-33.068,33.068-53.597,78.696-53.597,128.898v136.191%20c0,50.205,20.529,95.834,53.597,128.898c71.624,71.628,190.364,71.628,261.989,0c33.067-33.064,53.596-78.693,53.596-128.898%20V230.692C488.089,180.49,467.56,134.862,434.493,101.794L434.493,101.794z%20M195.699,124.99%20c-27.134,27.137-43.982,64.557-43.982,105.702v136.191c0,41.146,16.848,78.568,43.982,105.702%20c58.806,58.814,156.791,58.814,215.598,0c27.138-27.134,43.982-64.557,43.982-105.702V230.692%20c0-41.146-16.845-78.566-43.982-105.702C352.491,66.18,254.506,66.18,195.699,124.99L195.699,124.99z%20M303.497,401.594%20c-17.304,0-31.334,14.029-31.334,31.337c0,17.304,14.03,31.333,31.334,31.333c17.307,0,31.337-14.029,31.337-31.333%20C334.834,415.623,320.804,401.594,303.497,401.594L303.497,401.594z%20M223.204,305.993c-17.308,0-31.338,14.03-31.338,31.334%20c0,17.308,14.03,31.337,31.338,31.337c17.307,0,31.337-14.029,31.337-31.337C254.541,320.023,240.511,305.993,223.204,305.993%20L223.204,305.993z%20M223.204,208.881c-17.308,0-31.338,14.026-31.338,31.334c0,17.307,14.03,31.337,31.338,31.337%20c17.307,0,31.337-14.03,31.337-31.337C254.541,222.907,240.511,208.881,223.204,208.881L223.204,208.881z%20M383.796,305.993%20c-17.308,0-31.338,14.03-31.338,31.334c0,17.308,14.03,31.337,31.338,31.337c17.307,0,31.333-14.029,31.333-31.337%20C415.129,320.023,401.103,305.993,383.796,305.993L383.796,305.993z%20M383.796,208.881c-17.308,0-31.338,14.026-31.338,31.334%20c0,17.307,14.03,31.337,31.338,31.337c17.307,0,31.333-14.03,31.333-31.337C415.129,222.907,401.103,208.881,383.796,208.881%20L383.796,208.881z%20M354.769,129.256c-12.585,0-22.786,10.201-22.786,22.786s10.2,22.786,22.786,22.786%20c12.585,0,22.786-10.201,22.786-22.786S367.354,129.256,354.769,129.256L354.769,129.256z%20M252.228,129.256%20c-12.585,0-22.786,10.201-22.786,22.786s10.2,22.786,22.786,22.786c12.585,0,22.786-10.201,22.786-22.786%20S264.813,129.256,252.228,129.256z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20width='20'%20height='20'%20viewBox='0%200%2020%2020'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M17%2012.8108C17%2013.1901%2016.898%2013.5661%2016.6687%2013.8682C15.2357%2015.7558%2012.784%2017%2010%2017C7.21614%2017%204.76431%2015.7557%203.33134%2013.8681C3.10199%2013.566%203%2013.1901%203%2012.8108V7.18924C3%206.80993%203.10199%206.43401%203.33134%206.13189C4.76431%204.24428%207.21614%203%2010%203C12.784%203%2015.2357%204.24423%2016.6687%206.13183C16.898%206.43395%2017%206.80986%2017%207.18918V12.8108ZM10%207C10.5522%207%2011%206.55231%2011%206C11%205.44769%2010.5522%205%2010%205C9.44775%205%209%205.44769%209%206C9%206.55231%209.44775%207%2010%207ZM6.5%2011.5C7.32837%2011.5%208%2010.8284%208%2010C8%209.17157%207.32837%208.5%206.5%208.5C5.67163%208.5%205%209.17157%205%2010C5%2010.8284%205.67163%2011.5%206.5%2011.5ZM11.5%2013.5C11.5%2014.3284%2010.8284%2015%2010%2015C9.17163%2015%208.5%2014.3284%208.5%2013.5C8.5%2012.6716%209.17163%2012%2010%2012C10.8284%2012%2011.5%2012.6716%2011.5%2013.5ZM13.5%2011.5C14.3284%2011.5%2015%2010.8284%2015%2010C15%209.17157%2014.3284%208.5%2013.5%208.5C12.6716%208.5%2012%209.17157%2012%2010C12%2010.8284%2012.6716%2011.5%2013.5%2011.5Z'%20fill='currentColor'/%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M10%201C13.8106%201%2017.1182%202.95715%2018.7732%205.82595C18.9298%206.09752%2019%206.40872%2019%206.72224V13.2778C19%2013.5913%2018.9298%2013.9025%2018.7732%2014.1741C17.1182%2017.0429%2013.8106%2019%2010%2019C6.18943%2019%202.88177%2017.0429%201.22682%2014.1741C1.07016%2013.9025%201%2013.5913%201%2013.2778V6.72224C1%206.40872%201.07016%206.09752%201.22682%205.82595C2.88177%202.95715%206.18943%201%2010%201ZM17.6711%205.64554C17.8973%205.95002%2018%206.32536%2018%206.70467V13.2953C18%2013.6746%2017.8973%2014.05%2017.6711%2014.3545C16.0408%2016.5488%2013.214%2018%2010%2018C6.78594%2018%203.95915%2016.5488%202.32887%2014.3544C2.10268%2014.0499%202%2013.6746%202%2013.2953V6.70472C2%206.32542%202.10268%205.95008%202.32887%205.64561C3.95915%203.45116%206.78594%202%2010%202C13.214%202%2016.0408%203.45116%2017.6711%205.64554Z'%20fill='currentColor'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2022.0.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Layer_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20600%20600'%20enable-background='new%200%200%20600%20600'%20xml:space='preserve'%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20fill='currentColor'%20d='M395.264,259.724c21.074,0,38.157,17.083,38.157,38.158%20c0,21.074-17.083,38.164-38.157,38.164c-21.075,0-38.165-17.09-38.165-38.164C357.099,276.806,374.189,259.724,395.264,259.724%20L395.264,259.724z%20M206.743,259.724c21.075,0,38.158,17.083,38.158,38.158c0,21.074-17.083,38.164-38.158,38.164%20c-21.074,0-38.164-17.09-38.164-38.164C168.579,276.806,185.669,259.724,206.743,259.724L206.743,259.724z%20M317.092,89.755v29.841%20h-32.183V89.755c-67.083,5.031-127.459,41.741-163.107,98.796v223.399c35.648,57.055,96.024,93.765,163.107,98.802v-29.841h32.183%20v29.841c67.084-5.038,127.459-41.747,163.114-98.802V188.551C444.551,131.496,384.176,94.787,317.092,89.755L317.092,89.755z%20M301,56.962c-85.858,0-165.124,45.192-209.061,118.921l-2.328,3.902v90.784H58.612v59.364h30.999v90.784l2.328,3.902%20C135.876,498.348,215.143,543.539,301,543.539c85.857,0,165.123-45.184,209.06-118.921l2.328-3.902v-90.784h31.006v-59.364h-31.006%20v-90.784l-2.328-3.902C466.124,102.147,386.857,56.962,301,56.962L301,56.962z%20M301,18.251c-155.741,0-282,126.253-282,282%20c0,155.741,126.26,282,282,282c155.747,0,282-126.26,282-282C583,144.504,456.747,18.251,301,18.251z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2022.0.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Layer_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20600%20600'%20enable-background='new%200%200%20600%20600'%20xml:space='preserve'%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20fill='currentColor'%20d='M261.067,178.239c0,7.551,2.198,14.579,5.985,20.491l20.49-20.491%20l-20.49-20.491C263.265,163.659,261.067,170.694,261.067,178.239L261.067,178.239z%20M298.999,216.171%20c-7.545,0-14.58-2.198-20.488-5.981l20.488-20.491l20.491,20.491C313.581,213.972,306.55,216.171,298.999,216.171L298.999,216.171z%20M336.934,178.239c0-7.545-2.198-14.58-5.985-20.491l-20.491,20.491l20.491,20.491C334.736,192.818,336.934,185.79,336.934,178.239%20L336.934,178.239z%20M319.49,146.295l-20.491,20.484l-20.488-20.484c5.907-3.79,12.943-5.988,20.488-5.988%20C306.55,140.307,313.581,142.505,319.49,146.295L319.49,146.295z%20M298.999,124.101c29.864,0,54.141,24.281,54.141,54.138%20c0,29.864-24.277,54.145-54.141,54.145c-29.858,0-54.138-24.281-54.138-54.145C244.861,148.382,269.141,124.101,298.999,124.101%20L298.999,124.101z%20M261.067,417.863c0,7.551,2.198,14.579,5.985,20.491l20.49-20.491l-20.49-20.491%20C263.265,403.283,261.067,410.319,261.067,417.863L261.067,417.863z%20M298.999,455.795c-7.545,0-14.58-2.198-20.488-5.981%20l20.488-20.491l20.491,20.491C313.581,453.597,306.55,455.795,298.999,455.795L298.999,455.795z%20M336.934,417.863%20c0-7.545-2.198-14.58-5.985-20.491l-20.491,20.491l20.491,20.491C334.736,432.443,336.934,425.415,336.934,417.863L336.934,417.863z%20M319.49,385.92l-20.491,20.484l-20.488-20.484c5.907-3.79,12.943-5.988,20.488-5.988C306.55,379.931,313.581,382.13,319.49,385.92%20L319.49,385.92z%20M298.999,363.725c29.864,0,54.141,24.281,54.141,54.138c0,29.864-24.277,54.145-54.141,54.145%20c-29.858,0-54.138-24.281-54.138-54.145C244.861,388.007,269.141,363.725,298.999,363.725L298.999,363.725z%20M180.188,239.928%20c30.094,0,54.49,24.4,54.49,54.494c0,30.095-24.396,54.494-54.49,54.494c-30.095,0-54.494-24.399-54.494-54.494%20C125.694,264.327,150.093,239.928,180.188,239.928L180.188,239.928z%20M417.816,239.928c30.094,0,54.494,24.4,54.494,54.494%20c0,30.095-24.4,54.494-54.494,54.494c-30.095,0-54.494-24.399-54.494-54.494C363.323,264.327,387.722,239.928,417.816,239.928%20L417.816,239.928z%20M298.999,86.511c116.835,0,211.544,94.708,211.544,211.54c0,116.84-94.708,211.54-211.544,211.54%20c-116.836,0-211.54-94.708-211.54-211.54C87.458,181.219,182.163,86.511,298.999,86.511L298.999,86.511z%20M298.999,54.1%20c134.73,0,243.955,109.225,243.955,243.951c0,134.727-109.225,243.952-243.955,243.952c-134.727,0-243.952-109.225-243.952-243.952%20C55.047,163.324,164.271,54.1,298.999,54.1L298.999,54.1z%20M298.999,14.053C455.846,14.053,583,141.2,583,298.051%20c0,156.844-127.154,283.999-284.001,283.999C142.151,582.049,15,454.895,15,298.051C15,141.2,142.151,14.053,298.999,14.053z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2022.0.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Layer_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20600%20600'%20enable-background='new%200%200%20600%20600'%20xml:space='preserve'%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20fill='currentColor'%20d='M449.833,45.125C531.521,95.36,586,185.558,586,288.497%20c0,157.672-127.825,285.497-285.503,285.497C142.822,573.994,15,446.169,15,288.497C15,185.558,69.476,95.36,151.167,45.125H449.833%20L449.833,45.125z%20M193.639,256.195c-29.46,0-53.343,23.89-53.343,53.35c0,29.46,23.882,53.343,53.343,53.343%20c29.46,0,53.346-23.882,53.346-53.343C246.985,280.085,223.099,256.195,193.639,256.195L193.639,256.195z%20M407.365,256.195%20c-29.46,0-53.35,23.89-53.35,53.35c0,29.46,23.89,53.343,53.35,53.343c29.46,0,53.343-23.882,53.343-53.343%20C460.708,280.085,436.826,256.195,407.365,256.195L407.365,256.195z%20M442.248,88.407l-4.308-3.053H163.052l-4.304,3.053%20c-64.954,46.088-103.49,120.43-103.49,200.09c0,135.438,109.801,245.239,245.239,245.239c135.437,0,245.245-109.801,245.245-245.239%20C545.742,208.837,507.203,134.495,442.248,88.407L442.248,88.407z%20M427.607,117.937H173.391%20c-54.002,40.321-85.547,103.142-85.547,170.56c0,117.449,95.204,212.656,212.653,212.656c117.455,0,212.663-95.207,212.663-212.656%20C513.16,221.08,481.609,158.258,427.607,117.937L427.607,117.937z%20M300.497,215.65c-11.384,0-20.614,9.226-20.614,20.613%20c0,11.387,9.23,20.614,20.614,20.614c11.387,0,20.62-9.226,20.62-20.614C321.117,224.876,311.883,215.65,300.497,215.65%20L300.497,215.65z%20M300.497,146.275c-11.384,0-20.614,9.226-20.614,20.614c0,11.387,9.23,20.62,20.614,20.62%20c11.387,0,20.62-9.233,20.62-20.62C321.117,155.501,311.883,146.275,300.497,146.275L300.497,146.275z%20M381.735,146.275%20c-11.387,0-20.613,9.226-20.613,20.614c0,11.387,9.226,20.62,20.613,20.62c11.387,0,20.613-9.233,20.613-20.62%20C402.348,155.501,393.122,146.275,381.735,146.275L381.735,146.275z%20M219.265,146.275c-11.387,0-20.616,9.226-20.616,20.614%20c0,11.387,9.23,20.62,20.616,20.62c11.387,0,20.617-9.233,20.617-20.62C239.882,155.501,230.652,146.275,219.265,146.275%20L219.265,146.275z%20M300.497,400.094c-18.881,0-34.186,15.309-34.186,34.189c0,18.887,15.305,34.189,34.186,34.189%20c18.887,0,34.189-15.302,34.189-34.189C334.686,415.403,319.384,400.094,300.497,400.094L300.497,400.094z%20M381.735,417.199%20c-11.387,0-20.613,9.233-20.613,20.62c0,11.38,9.226,20.614,20.613,20.614c11.387,0,20.613-9.233,20.613-20.614%20C402.348,426.433,393.122,417.199,381.735,417.199L381.735,417.199z%20M219.265,417.199c-11.387,0-20.616,9.233-20.616,20.62%20c0,11.38,9.23,20.614,20.616,20.614c11.387,0,20.617-9.233,20.617-20.614C239.882,426.433,230.652,417.199,219.265,417.199z'/%3e%3c/svg%3e\"","import ICON_IEC_62196_T2 from \"../assets/connectors/type2.svg\";\nimport ICON_IEC_62196_T2_COMBO from \"../assets/connectors/combo2.svg\";\nimport ICON_IEC_62196_T1 from \"../assets/connectors/type1.svg\";\nimport ICON_IEC_62196_T1_COMBO from \"../assets/connectors/combo1.svg\";\nimport ICON_IEC_62196_T3 from \"../assets/connectors/type3.svg\";\nimport ICON_IEC_62196_T3A from \"../assets/connectors/type3a.svg\";\nimport ICON_SCHUKO from \"../assets/connectors/schuko.svg\";\nimport ICON_CHADEMO from \"../assets/connectors/chademo.svg\";\nimport ICON_CATARC from \"../assets/connectors/catarc.svg\";\n\nexport default {\n // IEC 62196 Types\n IEC_62196_T1: ICON_IEC_62196_T1,\n IEC_62196_T1_COMBO: ICON_IEC_62196_T1_COMBO,\n IEC_62196_T2: ICON_IEC_62196_T2,\n IEC_62196_T2_COMBO: ICON_IEC_62196_T2_COMBO,\n IEC_62196_T3: ICON_IEC_62196_T3,\n IEC_62196_T3A: ICON_IEC_62196_T3A,\n IEC_62196_T3B: ICON_IEC_62196_T3,\n IEC_62196_T3C: ICON_IEC_62196_T3, // Using T3 as fallback\n\n // DC Fast Charging\n CHADEMO: ICON_CHADEMO,\n CHAOJI: ICON_CHADEMO, // Using CHADEMO as fallback for CHAOJI\n CATARC: ICON_CATARC,\n GBT_AC: ICON_CATARC, // Using CATARC as fallback for GBT AC\n GBT_DC: ICON_CATARC, // Using CATARC as fallback for GBT DC\n\n // AC Domestic Types (using SCHUKO as fallback for most domestic types)\n SCHUKO: ICON_SCHUKO,\n DOMESTIC_A: ICON_SCHUKO,\n DOMESTIC_B: ICON_SCHUKO,\n DOMESTIC_C: ICON_SCHUKO,\n DOMESTIC_D: ICON_SCHUKO,\n DOMESTIC_E: ICON_SCHUKO,\n DOMESTIC_F: ICON_SCHUKO,\n DOMESTIC_G: ICON_SCHUKO,\n DOMESTIC_H: ICON_SCHUKO,\n DOMESTIC_I: ICON_SCHUKO,\n DOMESTIC_J: ICON_SCHUKO,\n DOMESTIC_K: ICON_SCHUKO,\n DOMESTIC_L: ICON_SCHUKO,\n DOMESTIC_M: ICON_SCHUKO,\n DOMESTIC_N: ICON_SCHUKO,\n DOMESTIC_O: ICON_SCHUKO,\n\n // IEC 60309 Industrial Types (using SCHUKO as fallback)\n IEC_60309_2_SINGLE_16: ICON_SCHUKO,\n IEC_60309_2_THREE_16: ICON_SCHUKO,\n IEC_60309_2_THREE_32: ICON_SCHUKO,\n IEC_60309_2_THREE_64: ICON_SCHUKO,\n\n // NEMA Types (using SCHUKO as fallback)\n NEMA_5_20: ICON_SCHUKO,\n NEMA_6_30: ICON_SCHUKO,\n NEMA_6_50: ICON_SCHUKO,\n NEMA_10_30: ICON_SCHUKO,\n NEMA_10_50: ICON_SCHUKO,\n NEMA_14_30: ICON_SCHUKO,\n NEMA_14_50: ICON_SCHUKO,\n\n // Pantograph Types (using CHADEMO as fallback)\n PANTOGRAPH_BOTTOM_UP: ICON_CHADEMO,\n PANTOGRAPH_TOP_DOWN: ICON_CHADEMO,\n\n // Tesla Types (using CHADEMO as fallback)\n TESLA_R: ICON_CHADEMO,\n TESLA_S: ICON_CHADEMO,\n\n // Legacy CONNECTOR_STANDARD_TYPE mappings\n CONNECTOR_STANDARD_TYPE_CHADEMO: ICON_CHADEMO,\n CONNECTOR_STANDARD_TYPE_CHAOJI: ICON_CHADEMO,\n CONNECTOR_STANDARD_TYPE_CATARC: ICON_CATARC,\n CONNECTOR_STANDARD_TYPE_SCHUKO: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_DOMESTIC_A: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_DOMESTIC_B: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_DOMESTIC_C: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_DOMESTIC_D: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_DOMESTIC_E: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_DOMESTIC_F: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_DOMESTIC_G: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_DOMESTIC_H: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_DOMESTIC_I: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_DOMESTIC_J: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_DOMESTIC_K: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_DOMESTIC_L: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_DOMESTIC_M: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_DOMESTIC_N: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_DOMESTIC_O: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_GBT_AC: ICON_CATARC,\n CONNECTOR_STANDARD_TYPE_GBT_DC: ICON_CATARC,\n CONNECTOR_STANDARD_TYPE_IEC_60309_2_SINGLE_16: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_IEC_60309_2_THREE_16: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_IEC_60309_2_THREE_32: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_IEC_60309_2_THREE_64: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_IEC_62196_T1: ICON_IEC_62196_T1,\n CONNECTOR_STANDARD_TYPE_IEC_62196_T1_COMBO: ICON_IEC_62196_T1_COMBO,\n CONNECTOR_STANDARD_TYPE_IEC_62196_T2: ICON_IEC_62196_T2,\n CONNECTOR_STANDARD_TYPE_IEC_62196_T2_COMBO: ICON_IEC_62196_T2_COMBO,\n CONNECTOR_STANDARD_TYPE_IEC_62196_T3A: ICON_IEC_62196_T3A,\n CONNECTOR_STANDARD_TYPE_IEC_62196_T3C: ICON_IEC_62196_T3,\n CONNECTOR_STANDARD_TYPE_NEMA_5_20: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_NEMA_6_30: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_NEMA_6_50: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_NEMA_10_30: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_NEMA_10_50: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_NEMA_14_30: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_NEMA_14_50: ICON_SCHUKO,\n CONNECTOR_STANDARD_TYPE_PANTOGRAPH_BOTTOM_UP: ICON_CHADEMO,\n CONNECTOR_STANDARD_TYPE_PANTOGRAPH_TOP_DOWN: ICON_CHADEMO,\n CONNECTOR_STANDARD_TYPE_TESLA_R: ICON_CHADEMO,\n CONNECTOR_STANDARD_TYPE_TESLA_S: ICON_CHADEMO,\n};\n","export const defaultFilter = {\n minPower: 7,\n operator: [],\n status: [],\n publishingMode: \"\",\n connectorTypes: [],\n chargingAccessibility: \"ALL\",\n noAdditionalCharges: false,\n powerType: undefined,\n operatorOnly: \"\",\n remoteStartStop: false,\n searchPhrase: \"\",\n excludeOperator: [],\n authMethodCapabilities: [],\n};\n\nexport function hasFilters(filter) {\n const hasFilters =\n (filter.minPower && filter.minPower !== defaultFilter.minPower) ||\n filter?.status?.length ||\n filter?.connectorTypes?.length ||\n (filter?.chargingAccessibility &&\n filter?.chargingAccessibility !== defaultFilter.chargingAccessibility) ||\n filter?.operator?.length ||\n filter?.powerType ||\n filter?.partyId ||\n filter?.noAdditionalCharges ||\n filter?.operatorOnly ||\n filter?.remoteStartStop ||\n filter?.searchPhrase ||\n filter?.excludeOperator?.length ||\n filter?.authMethodCapabilities?.length;\n\n return !!hasFilters;\n}\n","import React, { useEffect, useReducer } from \"react\";\n\nimport styles from \"./filters.module.css\";\nimport Checkbox from \"../../components/Checkbox/Checkbox\";\nimport Range from \"../../components/Range/Range\";\nimport MultiSelect from \"../../components/MultiSelect/MultiSelect\";\nimport SelectField from \"../../components/SelectField/SelectField\";\nimport { useMapContext } from \"../../contexts/Map\";\nimport connectorIcons from \"../../components/connectorIcons\";\nimport { useStackContext } from \"../../components/Stack/Stack\";\nimport { defaultFilter } from \"../../utils/filters\";\n\nconst authMethodCapabilityOptions = [\n {\n value: \"AUTH_METHOD_CAPABILITY_PLUG_AND_CHARGE\",\n labelKey: \"filters.authCapability.plugAndCharge\" as const,\n },\n {\n value: \"AUTH_METHOD_CAPABILITY_CREDIT_CARD_PAYABLE\",\n labelKey: \"filters.authCapability.creditCard\" as const,\n },\n];\n\n// confirm if this a correct,\nconst powerRanges = [\n {\n label: 3,\n value: 3,\n },\n {\n label: 7,\n value: 7,\n },\n {\n label: 11,\n value: 11,\n },\n {\n label: 22,\n value: 22,\n },\n {\n label: 43,\n value: 43,\n },\n {\n label: 50,\n value: 50,\n },\n {\n label: 100,\n value: 100,\n },\n {\n label: 150,\n value: 150,\n },\n {\n label: 200,\n value: 200,\n },\n {\n label: \"250+\",\n value: 250,\n },\n];\n\nconst toggleOption = (\n action: \"remove\" | \"add\",\n existingFilters: string[],\n optionFilters: string[],\n) => {\n switch (action) {\n case \"remove\":\n return existingFilters.filter(\n (filter) => !optionFilters.includes(filter),\n );\n case \"add\":\n return Array.from(new Set([...existingFilters, ...optionFilters]));\n }\n};\n\nfunction useLocalState(initialState) {\n return useReducer((currentState, updatedState) => {\n return { ...currentState, ...updatedState };\n }, initialState);\n}\n\nexport default function FiltersScreen() {\n const {\n setFilters: applyFilters,\n t,\n filters: contextFilters,\n filterConfiguration,\n options,\n } = useMapContext();\n const [filters, setFilters] = useLocalState(defaultFilter);\n\n const { setView: setParentView } = useStackContext();\n\n const showOperatorFilter =\n options.version === \"v2\" && filterConfiguration?.operators?.length > 1;\n\n useEffect(() => {\n setFilters(contextFilters);\n }, []);\n\n useEffect(() => {\n applyFilters(filters);\n }, [filters]);\n\n return (\n <>\n <div className={styles.headerContainer}>\n <div className={styles.header}>{t(\"filters.header\")}</div>\n </div>\n\n <div className={styles.container}>\n <button\n onClick={() => {\n setFilters(defaultFilter);\n applyFilters(defaultFilter);\n }}\n className={styles.actionLinkClearAll}\n >\n {t(\"filters.clearAll\")}\n </button>\n\n {options.version === \"v2\" &&\n filterConfiguration?.showSearchPhraseFilter && (\n <div className={styles.optionsGroup}>\n <div className={styles.heading}>{t(\"filters.searchPhrase\")}</div>\n <input\n type=\"text\"\n value={filters.searchPhrase || \"\"}\n placeholder={t(\"filters.searchPhrasePlaceholder\")}\n onChange={(e) => setFilters({ searchPhrase: e.target.value })}\n style={{\n width: \"100%\",\n boxSizing: \"border-box\",\n padding: \"8px 10px\",\n fontFamily: \"var(--roadmap-font-family, Inter), system-ui\",\n fontSize: 14,\n lineHeight: \"20px\",\n color: \"var(--roadmap-text-color, #2a2a2a)\",\n background: \"var(--roadmap-background-color, #fff)\",\n border: \"1px solid var(--roadmap-border-color, #ddd)\",\n borderRadius: 6,\n outline: \"none\",\n }}\n />\n </div>\n )}\n\n <div className={styles.optionsGroup}>\n <div className={styles.heading}>{t(\"filters.onlyShow\")}</div>\n <label htmlFor=\"dsChargers\" className={styles.rowLabel}>\n <div className={styles.label}>{t(\"filters.dcChargers\")}</div>\n <Checkbox\n id=\"dsChargers\"\n checked={filters.powerType === \"dc\"}\n onChange={(checked) => {\n setFilters({\n powerType: checked ? \"dc\" : undefined,\n });\n }}\n />\n </label>\n\n {options.version !== \"v2\" && (\n <label htmlFor=\"efluxChargers\" className={styles.rowLabel}>\n <div className={styles.label}>{t(\"filters.efluxChargers\")}</div>\n <Checkbox\n id=\"efluxChargers\"\n checked={filters.partyId === \"EFL\"}\n onChange={(checked) => {\n setFilters({\n partyId: checked ? \"EFL\" : undefined,\n });\n }}\n />\n </label>\n )}\n\n {(options.version !== \"v2\" ||\n filterConfiguration?.showNoAdditionalFeeFilter) && (\n <label htmlFor=\"noAdditionalFee\" className={styles.rowLabel}>\n <div className={styles.label}>{t(\"filters.noAdditionalFee\")}</div>\n <Checkbox\n id=\"noAdditionalFee\"\n checked={filters.noAdditionalCharges}\n onChange={(checked) => {\n setFilters({\n noAdditionalCharges: checked ? true : undefined,\n });\n }}\n />\n </label>\n )}\n\n <label htmlFor=\"remoteStartStop\" className={styles.rowLabel}>\n <div className={styles.label}>{t(\"filters.remoteStartStop\")}</div>\n <Checkbox\n id=\"remoteStartStop\"\n checked={filters.remoteStartStop}\n onChange={(checked) => {\n setFilters({\n remoteStartStop: checked ? true : undefined,\n });\n }}\n />\n </label>\n\n {filterConfiguration.showOperatorOnly && options.version === \"v2\" && (\n <label htmlFor=\"operatorOnly\" className={styles.rowLabel}>\n <div\n className={styles.label}\n >{`Show '${filterConfiguration.showOperatorOnly}' only`}</div>\n <Checkbox\n id=\"operatorOnly\"\n checked={\n filters.operatorOnly === filterConfiguration.showOperatorOnly\n }\n onChange={(checked) => {\n setFilters({\n operatorOnly: checked\n ? filterConfiguration.showOperatorOnly\n : undefined,\n });\n }}\n />\n </label>\n )}\n </div>\n\n {showOperatorFilter && (\n <div className={styles.optionsGroup}>\n <div className={styles.heading}>{t(\"filters.operator\")}</div>\n <MultiSelect\n id=\"operator\"\n preferredValues={options.preferredOperators}\n value={filters.operator}\n options={[\n ...(filterConfiguration?.operators?.map((operator: any) => ({\n value: operator?.connectionId,\n label: operator?.name,\n selected: filters.operators?.includes(operator?.connectionId),\n })) || []),\n ]}\n placeholder=\"Select operator\"\n onChange={(value) => {\n setFilters({\n operator: value,\n });\n }}\n />\n </div>\n )}\n\n {showOperatorFilter &&\n filterConfiguration?.showExcludeOperatorFilter && (\n <div className={styles.optionsGroup}>\n <div className={styles.heading}>\n {t(\"filters.excludeOperator\")}\n </div>\n <MultiSelect\n id=\"excludeOperator\"\n preferredValues={options.preferredOperators}\n value={filters.excludeOperator}\n options={[\n ...(filterConfiguration?.operators?.map((operator: any) => ({\n value: operator?.connectionId,\n label: operator?.name,\n selected: filters.excludeOperator?.includes(\n operator?.connectionId,\n ),\n })) || []),\n ]}\n placeholder={t(\"filters.excludeOperator\")}\n onChange={(value) => {\n setFilters({\n excludeOperator: value,\n });\n }}\n />\n </div>\n )}\n\n {filterConfiguration?.showPublishingModeFilter &&\n filterConfiguration?.publishingMode?.length > 1 && (\n <div className={styles.optionsGroup}>\n <div className={styles.heading}>{\"Visibility\"}</div>\n <SelectField\n id=\"publishingMode\"\n value={filters.publishingMode}\n options={[\n { value: \"\", label: \"All locations\" },\n {\n value: \"PUBLISHING_MODE_PUBLIC\",\n label: \"Public locations\",\n },\n {\n value: \"PUBLISHING_MODE_PRIVATE\",\n label: \"Private locations\",\n },\n ]}\n onChange={(value) => {\n setFilters({ publishingMode: value });\n }}\n />\n </div>\n )}\n\n <div className={styles.optionsGroup}>\n <div className={styles.heading}>{t(\"filters.statusHeading\")}</div>\n\n <label htmlFor=\"statusAvailable\" className={styles.rowLabel}>\n <div className={styles.label}>\n <div className={styles.dot} style={{ background: \"#33AC19\" }} />\n {t(\"filters.available\")}\n </div>\n <Checkbox\n id=\"statusAvailable\"\n name=\"status\"\n checked={filters.status.includes(\"AVAILABLE\")}\n onChange={(checked) => {\n setFilters({\n status: toggleOption(\n checked ? \"add\" : \"remove\",\n filters.status,\n [\"AVAILABLE\"],\n ),\n });\n }}\n />\n </label>\n\n <label htmlFor=\"statusCharging\" className={styles.rowLabel}>\n <div className={styles.label}>\n <div className={styles.dot} style={{ background: \"#005CEE\" }} />\n {t(\"filters.charging\")}\n </div>\n <Checkbox\n id=\"statusCharging\"\n checked={filters.status.includes(\"CHARGING\")}\n onChange={(checked) => {\n setFilters({\n status: toggleOption(\n checked ? \"add\" : \"remove\",\n filters.status,\n [\"CHARGING\"],\n ),\n });\n }}\n />\n </label>\n\n <label htmlFor=\"statusError\" className={styles.rowLabel}>\n <div className={styles.label}>\n <div className={styles.dot} style={{ background: \"#EB001B\" }} />\n {t(\"filters.notAvailable\")}\n </div>\n <Checkbox\n id=\"statusError\"\n name=\"status\"\n checked={\n filters.status.includes(\"INOPERATIVE\") &&\n filters.status.includes(\"UNKNOWN\")\n }\n onChange={(checked) => {\n setFilters({\n status: toggleOption(\n checked ? \"add\" : \"remove\",\n filters.status,\n [\"INOPERATIVE\", \"UNKNOWN\"],\n ),\n });\n }}\n />\n </label>\n </div>\n\n <div className={styles.optionsGroup}>\n <div className={styles.heading}>{t(\"filters.chargingPower\")}</div>\n <Range\n value={filters.minPower}\n onChange={(value) => {\n setFilters({ minPower: value });\n }}\n ticks={powerRanges}\n />\n </div>\n\n <div className={styles.optionsGroup}>\n <div className={styles.heading}>{t(\"filters.connectorType\")}</div>\n\n <label htmlFor=\"type1\" className={styles.rowLabel}>\n <div className={styles.label}>\n <img\n src={connectorIcons.IEC_62196_T1}\n className={styles.connectorIcon}\n />\n Type 1 (Yazaki)\n </div>\n <Checkbox\n id=\"type1\"\n checked={filters.connectorTypes.includes(\"IEC_62196_T1\")}\n onChange={(checked) => {\n setFilters({\n connectorTypes: checked\n ? [...filters.connectorTypes, \"IEC_62196_T1\"]\n : filters.connectorTypes.filter(\n (s) => s !== \"IEC_62196_T1\",\n ),\n });\n }}\n />\n </label>\n\n <label htmlFor=\"type2\" className={styles.rowLabel}>\n <div className={styles.label}>\n <img\n src={connectorIcons.IEC_62196_T2}\n className={styles.connectorIcon}\n />\n Type 2 (Mennekes)\n </div>\n <Checkbox\n id=\"type2\"\n checked={filters.connectorTypes.includes(\"IEC_62196_T2\")}\n onChange={(checked) => {\n setFilters({\n connectorTypes: checked\n ? [...filters.connectorTypes, \"IEC_62196_T2\"]\n : filters.connectorTypes.filter(\n (s) => s !== \"IEC_62196_T2\",\n ),\n });\n }}\n />\n </label>\n <label htmlFor=\"type3\" className={styles.rowLabel}>\n <div className={styles.label}>\n <img\n src={connectorIcons.IEC_62196_T3}\n className={styles.connectorIcon}\n />\n Type 3 (Le Grand)\n </div>\n <Checkbox\n id=\"type3\"\n checked={filters.connectorTypes.includes(\"IEC_62196_T3A\")}\n onChange={(checked) => {\n setFilters({\n connectorTypes: checked\n ? [...filters.connectorTypes, \"IEC_62196_T3A\"]\n : filters.connectorTypes.filter(\n (s) => s !== \"IEC_62196_T3A\",\n ),\n });\n }}\n />\n </label>\n <label htmlFor=\"CHAdeMo\" className={styles.rowLabel}>\n <div className={styles.label}>\n <img\n src={connectorIcons.CHADEMO}\n className={styles.connectorIcon}\n />\n CHAdeMo\n </div>\n <Checkbox\n id=\"CHAdeMo\"\n checked={filters.connectorTypes.includes(\"CHADEMO\")}\n onChange={(checked) => {\n setFilters({\n connectorTypes: checked\n ? [...filters.connectorTypes, \"CHADEMO\"]\n : filters.connectorTypes.filter((s) => s !== \"CHADEMO\"),\n });\n }}\n />\n </label>\n <label htmlFor=\"domestic\" className={styles.rowLabel}>\n <div className={styles.label}>\n <img\n src={connectorIcons.DOMESTIC_F}\n className={styles.connectorIcon}\n />\n Domestic\n </div>\n <Checkbox\n id=\"domestic\"\n checked={filters.connectorTypes.includes(\"DOMESTIC_F\")}\n onChange={(checked) => {\n setFilters({\n connectorTypes: checked\n ? [...filters.connectorTypes, \"DOMESTIC_F\"]\n : filters.connectorTypes.filter((s) => s !== \"DOMESTIC_F\"),\n });\n }}\n />\n </label>\n <label htmlFor=\"combo\" className={styles.rowLabel}>\n <div className={styles.label}>\n <img\n src={connectorIcons.IEC_62196_T2_COMBO}\n className={styles.connectorIcon}\n />\n Combo\n </div>\n <Checkbox\n id=\"combo\"\n checked={filters.connectorTypes.includes(\"IEC_62196_T2_COMBO\")}\n onChange={(checked) => {\n setFilters({\n connectorTypes: checked\n ? [...filters.connectorTypes, \"IEC_62196_T2_COMBO\"]\n : filters.connectorTypes.filter(\n (s) => s !== \"IEC_62196_T2_COMBO\",\n ),\n });\n }}\n />\n </label>\n </div>\n\n {options.version === \"v2\" &&\n filterConfiguration?.showPaymentMethodFilter && (\n <div className={styles.optionsGroup}>\n <div className={styles.heading}>\n {t(\"filters.authMethodCapabilities\")}\n </div>\n {authMethodCapabilityOptions.map((capability) => {\n const id = `auth-${capability.value}`;\n const checked =\n filters.authMethodCapabilities?.includes(capability.value) ??\n false;\n return (\n <label\n key={capability.value}\n htmlFor={id}\n className={styles.rowLabel}\n >\n <div className={styles.label}>{t(capability.labelKey)}</div>\n <Checkbox\n id={id}\n checked={checked}\n onChange={(isChecked) => {\n setFilters({\n authMethodCapabilities: toggleOption(\n isChecked ? \"add\" : \"remove\",\n filters.authMethodCapabilities || [],\n [capability.value],\n ),\n });\n }}\n />\n </label>\n );\n })}\n </div>\n )}\n\n {filterConfiguration?.showVehicleAvailabilityFilter && (\n <div className={styles.optionsGroup}>\n <div className={styles.heading}>\n {t(\"filters.chargingAccessibility\")}\n </div>\n <SelectField\n id=\"chargingAccessibility\"\n value={filters.chargingAccessibility || \"ALL\"}\n options={[\n { value: \"ALL\", label: t(\"filters.accessibilityAll\") },\n { value: \"TESLA\", label: t(\"filters.accessibilityTesla\") },\n ]}\n onChange={(value) => {\n setFilters({\n chargingAccessibility: value,\n });\n }}\n />\n </div>\n )}\n </div>\n </>\n );\n}\n","import React, { useEffect } from \"react\";\n\nimport styles from \"./LocationPlaceholder.module.css\";\n\nexport default function LocationPlaceholder() {\n return (\n <div className={styles.container}>\n {/* put in place holders */}\n <div className={styles.header} />\n\n <div className={styles.divider} style={{ marginTop: '15px', marginBottom: '23px' }} />\n\n <div className={styles.iconLine} style={{ width: '60%' }} />\n <div className={styles.iconLine} style={{ width: '45%' }} />\n <div className={styles.iconLine} style={{ width: '50%' }} />\n\n <div className={styles.divider} />\n\n <div className={styles.iconLine} style={{ width: '50%' }} />\n <div className={styles.iconLine} style={{ width: '62%' }} />\n\n <div className={styles.priceLine} />\n\n <div className={styles.divider} />\n\n <div className={styles.iconLine} style={{ width: '50%' }} />\n <div className={styles.iconLine} style={{ width: '57%' }} />\n\n <div className={styles.priceLine} style={{ width: '30%' }} />\n </div>\n );\n}\n\n","import React from \"react\";\n\nexport function ChevronLeft() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 320 512\"\n width=\"12\"\n height=\"12\"\n fill=\"currentColor\"\n >\n <path d=\"M9.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l192 192c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L77.3 256 246.6 86.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-192 192z\" />\n </svg>\n );\n}\n\nexport function ChevronRight() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 320 512\"\n width=\"12\"\n height=\"12\"\n fill=\"currentColor\"\n >\n <path d=\"M310.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-192 192c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L242.7 256 73.4 86.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l192 192z\" />\n </svg>\n );\n}\n\nexport function ChevronDown() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 512 320\"\n width=\"10\"\n height=\"10\"\n fill=\"currentColor\"\n >\n <path d=\"M233.4 310.6c12.5 12.5 32.8 12.5 45.3 0l192-192c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L256 242.7 86.6 73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l192 192z\" />\n </svg>\n );\n}\n\nexport function Clock() {\n return (\n <svg\n viewBox=\"0 0 16 16\"\n width=\"16\"\n height=\"16\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M8 0.25C3.72 0.25 0.25 3.72 0.25 8s3.47 7.75 7.75 7.75S15.75 12.28 15.75 8 12.28 0.25 8 0.25zm0 14C4.55 14.25 1.75 11.45 1.75 8S4.55 1.75 8 1.75 14.25 4.55 14.25 8 11.45 14.25 8 14.25zM8.75 4.25a0.75 0.75 0 0 0-1.5 0v4c0 0.2 0.08 0.39 0.22 0.53l2.5 2.5a0.75 0.75 0 1 0 1.06-1.06L8.75 7.94V4.25z\" />\n </svg>\n );\n}\n\nexport function Check() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 16 16\"\n width=\"16\"\n height=\"16\"\n fill=\"currentColor\"\n >\n <path d=\"M13.78 4.22a.75.75 0 0 1 0 1.06l-7.5 7.5a.75.75 0 0 1-1.06 0l-3-3a.75.75 0 1 1 1.06-1.06L5.75 11.19l6.97-6.97a.75.75 0 0 1 1.06 0z\" />\n </svg>\n );\n}\n\nexport function Info() {\n return (\n <svg\n viewBox=\"0 0 16 16\"\n width=\"16\"\n height=\"16\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g>\n <path d=\"M8 0.25C3.72009 0.25 0.25 3.72134 0.25 8C0.25 12.2812 3.72009 15.75 8 15.75C12.2799 15.75 15.75 12.2812 15.75 8C15.75 3.72134 12.2799 0.25 8 0.25ZM8 14.25C4.54588 14.25 1.75 11.4553 1.75 8C1.75 4.54703 4.546 1.75 8 1.75C11.4528 1.75 14.25 4.54597 14.25 8C14.25 11.4541 11.4553 14.25 8 14.25ZM8 3.6875C8.72487 3.6875 9.3125 4.27513 9.3125 5C9.3125 5.72487 8.72487 6.3125 8 6.3125C7.27513 6.3125 6.6875 5.72487 6.6875 5C6.6875 4.27513 7.27513 3.6875 8 3.6875ZM9.75 11.625C9.75 11.8321 9.58209 12 9.375 12H6.625C6.41791 12 6.25 11.8321 6.25 11.625V10.875C6.25 10.6679 6.41791 10.5 6.625 10.5H7V8.5H6.625C6.41791 8.5 6.25 8.33209 6.25 8.125V7.375C6.25 7.16791 6.41791 7 6.625 7H8.625C8.83209 7 9 7.16791 9 7.375V10.5H9.375C9.58209 10.5 9.75 10.6679 9.75 10.875V11.625Z\" />\n </g>\n </svg>\n );\n}\n\n","import React from \"react\";\n\nimport styles from \"./SidebarContainer.module.css\";\n\nexport default function SideBarContainer({ children }) {\n return <div className={styles.container}>{children}</div>;\n}\n\n","import SideBarContainer from \"../SidebarContainer/SidebarContainer\";\nimport styles from \"./Debug.module.css\";\n\nexport default function Debug({ location }) {\n return (\n <div className={styles.container}>\n <SideBarContainer>\n <div>\n <h3>Debug: {location.name}</h3>\n </div>\n <div style={{ marginBottom: \"5px\" }}>\n <button\n onClick={() => {\n navigator.clipboard.writeText(JSON.stringify(location, null, 2));\n }}\n >\n Copy location\n </button>\n </div>\n <div className={styles.content}>\n {location.evses.map((evse) => {\n return (\n <div className={styles.evse}>\n <div className={styles.connectorHeader}>\n Evse: {evse.evseId || evse.evse_id}\n </div>\n <div>\n {evse.connectors.map((connector, i) => {\n return (\n <div>\n <div className={styles.connectorHeader}>\n Connector #{i}\n </div>\n <pre className={styles.code}>\n {JSON.stringify(\n connector.tariff || Array.isArray(location.tariffs)\n ? location.tariffs?.find((t) =>\n connector.tariff_ids.includes(t.id),\n )\n : null,\n null,\n 2,\n )}\n </pre>\n </div>\n );\n })}\n </div>\n </div>\n );\n })}\n </div>\n </SideBarContainer>\n </div>\n );\n}\n","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='18'%20height='16'%20viewBox='0%200%2018%2016'%20fill='none'%3e%3cg%20clip-path='url(%23clip0_480_2466)'%3e%3cpath%20d='M3.76781%207H5.0925L4.81812%208.71156C4.77812%208.85969%204.9075%209%205.07875%209C5.17188%209%205.26156%208.95719%205.31063%208.88313L7.40219%205.78062C7.50531%205.62469%207.37656%205.42875%207.17031%205.42875H5.88219L6.14094%204.295C6.18625%204.14625%206.05781%204.00031%205.88219%204.00031H4.36438C4.23%204.00031%204.11656%204.08719%204.09875%204.20375L3.50187%206.735C3.48094%206.87531%203.60594%207%203.76781%207ZM17.5%204H17V2.5C17%202.22375%2016.7763%202%2016.5%202C16.2237%202%2016%202.22375%2016%202.5V4H15V2.5C15%202.22375%2014.7762%202%2014.5%202C14.2238%202%2014%202.22375%2014%202.5V4H13.5C13.2238%204%2013%204.22375%2013%204.5V6C13%207.1175%2013.7381%208.05281%2014.75%208.37281V11.625C14.75%2012.1075%2014.3575%2012.5%2013.875%2012.5C13.3925%2012.5%2013%2012.1075%2013%2011.625V10.75C13%209.23344%2011.7666%208%2010.25%208H10V1.5C10%200.671562%209.32844%200%208.5%200H2.5C1.67156%200%201%200.671562%201%201.5V14.5H0.25C0.111875%2014.5%200%2014.6119%200%2014.75V15.75C0%2015.8881%200.111875%2016%200.25%2016H10.75C10.8881%2016%2011%2015.8881%2011%2015.75V14.75C11%2014.6119%2010.8881%2014.5%2010.75%2014.5H10V9.5H10.25C10.9394%209.5%2011.5%2010.0606%2011.5%2010.75V11.625C11.5%2012.9347%2012.5653%2014%2013.875%2014C15.1847%2014%2016.25%2012.9347%2016.25%2011.625V8.37281C17.2619%208.05281%2018%207.1175%2018%206V4.5C18%204.22375%2017.7763%204%2017.5%204ZM8.5%2014.5H2.5V1.5H8.5V14.5ZM16.5%206C16.5%206.55125%2016.0513%207%2015.5%207C14.9487%207%2014.5%206.55125%2014.5%206V5.5H16.5V6Z'%20fill='black'/%3e%3c/g%3e%3cdefs%3e%3cclipPath%20id='clip0_480_2466'%3e%3crect%20width='18'%20height='16'%20fill='white'/%3e%3c/clipPath%3e%3c/defs%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20width='14'%20height='16'%20viewBox='0%200%2014%2016'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cg%20clip-path='url(%23clip0_480_2468)'%3e%3cpath%20d='M4%204.625V3.375C4%203.16875%204.16875%203%204.375%203H5.625C5.83125%203%206%203.16875%206%203.375V4.625C6%204.83125%205.83125%205%205.625%205H4.375C4.16875%205%204%204.83125%204%204.625ZM8.375%205H9.625C9.83125%205%2010%204.83125%2010%204.625V3.375C10%203.16875%209.83125%203%209.625%203H8.375C8.16875%203%208%203.16875%208%203.375V4.625C8%204.83125%208.16875%205%208.375%205ZM4.375%208H5.625C5.83125%208%206%207.83125%206%207.625V6.375C6%206.16875%205.83125%206%205.625%206H4.375C4.16875%206%204%206.16875%204%206.375V7.625C4%207.83125%204.16875%208%204.375%208ZM8.375%208H9.625C9.83125%208%2010%207.83125%2010%207.625V6.375C10%206.16875%209.83125%206%209.625%206H8.375C8.16875%206%208%206.16875%208%206.375V7.625C8%207.83125%208.16875%208%208.375%208ZM6%2010.625V9.375C6%209.16875%205.83125%209%205.625%209H4.375C4.16875%209%204%209.16875%204%209.375V10.625C4%2010.8313%204.16875%2011%204.375%2011H5.625C5.83125%2011%206%2010.8313%206%2010.625ZM8.375%2011H9.625C9.83125%2011%2010%2010.8313%2010%2010.625V9.375C10%209.16875%209.83125%209%209.625%209H8.375C8.16875%209%208%209.16875%208%209.375V10.625C8%2010.8313%208.16875%2011%208.375%2011ZM14%2014.875V16H0V14.875C0%2014.6687%200.16875%2014.5%200.375%2014.5H0.984375V0.75C0.984375%200.334375%201.31875%200%201.73438%200H12.2656C12.6812%200%2013.0156%200.334375%2013.0156%200.75V14.5H13.625C13.8313%2014.5%2014%2014.6687%2014%2014.875ZM2.48438%2014.4688H6V12.375C6%2012.1687%206.16875%2012%206.375%2012H7.625C7.83125%2012%208%2012.1687%208%2012.375V14.4688H11.5156V1.53125L2.5%201.5L2.48438%2014.4688Z'%20fill='black'/%3e%3c/g%3e%3cdefs%3e%3cclipPath%20id='clip0_480_2468'%3e%3crect%20width='14'%20height='16'%20fill='white'/%3e%3c/clipPath%3e%3c/defs%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20width='20'%20height='16'%20viewBox='0%200%2020%2016'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M17%206H16.5L13.1003%201.75063C12.913%201.51641%2012.6754%201.32734%2012.405%201.19741C12.1347%201.06747%2011.8387%201.00001%2011.5387%201H4.85406C4.03625%201%203.30094%201.49781%202.99719%202.25719L1.5%206V6.07062C0.63875%206.29375%200%207.06906%200%208V11.5C0%2011.7762%200.22375%2012%200.5%2012H2C2%2013.6569%203.34312%2015%205%2015C6.65688%2015%208%2013.6569%208%2012H12C12%2013.6569%2013.3431%2015%2015%2015C16.6569%2015%2018%2013.6569%2018%2012H19.5C19.7763%2012%2020%2011.7762%2020%2011.5V9C20%207.34312%2018.6569%206%2017%206ZM8.75%202.5H11.5387C11.6916%202.5%2011.8338%202.56844%2011.9291%202.6875L14.5791%206H8.75V2.5ZM4.38969%202.81437C4.46625%202.62344%204.64844%202.5%204.85406%202.5H7.25V6H3.11562L4.38969%202.81437ZM5%2013.5C4.17156%2013.5%203.5%2012.8284%203.5%2012C3.5%2011.1716%204.17156%2010.5%205%2010.5C5.82844%2010.5%206.5%2011.1716%206.5%2012C6.5%2012.8284%205.82844%2013.5%205%2013.5ZM15%2013.5C14.1716%2013.5%2013.5%2012.8284%2013.5%2012C13.5%2011.1716%2014.1716%2010.5%2015%2010.5C15.8284%2010.5%2016.5%2011.1716%2016.5%2012C16.5%2012.8284%2015.8284%2013.5%2015%2013.5ZM18.5%2010.5H17.5841C17.0644%209.60719%2016.1078%209%2015%209C13.8922%209%2012.9359%209.60719%2012.4159%2010.5H7.58406C7.06437%209.60719%206.10781%209%205%209C3.89219%209%202.93594%209.60719%202.41594%2010.5H1.5V8C1.5%207.72437%201.72438%207.5%202%207.5H17C17.8272%207.5%2018.5%208.17281%2018.5%209V10.5Z'%20fill='black'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20width='12'%20height='16'%20viewBox='0%200%2012%2016'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cg%20clip-path='url(%23clip0_480_2435)'%3e%3cpath%20d='M11.8068%205.24687C11.5506%204.8%2011.0849%204.53125%2010.5693%204.53125H7.61932L8.51619%201.79688C8.63182%201.36563%208.54119%200.9125%208.26932%200.55625C7.99432%200.203125%207.57869%200%207.13182%200H3.05369C2.34118%200%201.73181%200.534375%201.65368%201.15937L0.0161813%207.79063C-0.0431938%208.22188%200.0849314%208.65625%200.369307%208.98438C0.653682%209.3125%201.06618%209.5%201.50056%209.5H4.56619L3.47556%2014.2406C3.37556%2014.6688%203.47244%2015.1125%203.74431%2015.4563C4.01619%2015.8031%204.42556%2016%204.86619%2016C5.37556%2016%205.85057%2015.725%206.07869%2015.325L11.8037%206.67812C12.0662%206.23125%2012.0662%205.69375%2011.8068%205.24687ZM5.00369%2014.2937L6.45057%208H1.48493L3.05369%201.5L7.04119%201.47187L5.54744%206.03125H10.4381L5.00369%2014.2937Z'%20fill='%232A2A2A'/%3e%3c/g%3e%3cdefs%3e%3cclipPath%20id='clip0_480_2435'%3e%3crect%20width='12'%20height='16'%20fill='white'/%3e%3c/clipPath%3e%3c/defs%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20width='18'%20height='12'%20viewBox='0%200%2018%2012'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M16.2857%200H0.857143C0.383839%200%200%200.383839%200%200.857143V11.1429C0%2011.6162%200.383839%2012%200.857143%2012H16.2857C16.759%2012%2017.1429%2011.6162%2017.1429%2011.1429V0.857143C17.1429%200.383839%2016.759%200%2016.2857%200ZM15.8571%2010.7143H1.28571V1.28571H15.8571V10.7143ZM7.92857%207.71429H10.0714C10.1898%207.71429%2010.2857%207.61839%2010.2857%207.5V6.64286C10.2857%206.52446%2010.1898%206.42857%2010.0714%206.42857H7.92857C7.81018%206.42857%207.71429%206.52446%207.71429%206.64286V7.5C7.71429%207.61839%207.81018%207.71429%207.92857%207.71429ZM14.3571%206.42857H12.2143C12.0959%206.42857%2012%206.52446%2012%206.64286V7.5C12%207.61839%2012.0959%207.71429%2012.2143%207.71429H14.3571C14.4755%207.71429%2014.5714%207.61839%2014.5714%207.5V6.64286C14.5714%206.52446%2014.4755%206.42857%2014.3571%206.42857ZM7.92857%205.57143H14.3571C14.4755%205.57143%2014.5714%205.47554%2014.5714%205.35714V4.5C14.5714%204.38161%2014.4755%204.28571%2014.3571%204.28571H7.92857C7.81018%204.28571%207.71429%204.38161%207.71429%204.5V5.35714C7.71429%205.47554%207.81018%205.57143%207.92857%205.57143ZM3.60857%206.04607L4.73866%206.3525C4.85089%206.38304%204.92857%206.47437%204.92857%206.57482C4.92857%206.70339%204.80804%206.80786%204.65911%206.80786H3.95357C3.84241%206.80786%203.73312%206.78%203.6383%206.72884C3.5558%206.68411%203.45509%206.69214%203.3908%206.76045L3.0675%207.10143C2.9842%207.18929%202.99786%207.33286%203.09777%207.40116C3.32009%207.5525%203.58152%207.63902%203.85714%207.65616V7.92857C3.85714%208.04696%203.95304%208.14286%204.07143%208.14286H4.5C4.61839%208.14286%204.71429%208.04696%204.71429%207.92857V7.65402C5.30839%207.62455%205.78571%207.15661%205.78571%206.57455C5.78571%206.08786%205.44768%205.65634%204.96286%205.52536L3.83277%205.21893C3.72054%205.18839%203.64286%205.09705%203.64286%204.99661C3.64286%204.86804%203.76339%204.76357%203.91232%204.76357H4.61786C4.72902%204.76357%204.8383%204.79143%204.93312%204.84259C5.01562%204.88705%205.11634%204.87929%205.18062%204.81098L5.50393%204.47C5.58723%204.38214%205.57357%204.23857%205.47366%204.17027C5.25134%204.01893%204.98991%203.93241%204.71429%203.91527V3.64286C4.71429%203.52446%204.61839%203.42857%204.5%203.42857H4.07143C3.95304%203.42857%203.85714%203.52446%203.85714%203.64286V3.91741C3.26304%203.94688%202.78571%204.41482%202.78571%204.99688C2.78571%205.48357%203.12375%205.91509%203.60857%206.04607Z'%20fill='%232A2A2A'/%3e%3c/svg%3e\"","import connectorIcons from \"../components/connectorIcons\";\nimport { MapContextType } from \"../contexts/Map\";\nimport { getColorForStatus } from \"./location\";\n\nexport function getSocketIcon(connector) {\n return connectorIcons[connector.standard || connector.connectorStandardType];\n}\n\nexport function formatNumber(language, value) {\n return new Intl.NumberFormat(language, {\n maximumFractionDigits: 2,\n }).format(value);\n}\n\nexport const connectorPowerTypes = {\n CONNECTOR_POWER_TYPE_UNSPECIFIED: \"Unspecified\",\n CONNECTOR_POWER_TYPE_AC_1_PHASE: \"AC x 1\",\n CONNECTOR_POWER_TYPE_AC_2_PHASE: \"AC x 2\",\n CONNECTOR_POWER_TYPE_AC_2_PHASE_SPLIT: \"AC x 2 Split\",\n CONNECTOR_POWER_TYPE_AC_3_PHASE: \"AC x 3\",\n CONNECTOR_POWER_TYPE_DC: \"DC\",\n CONNECTOR_POWER_TYPE_AC: \"AC\",\n AC_3_PHASE: \"AC x 3\",\n AC_1_PHASE: \"AC x 1\",\n DC: \"DC\",\n};\n\nexport function getSocketText(connector) {\n return [\n formatConnectorStandard(\n connector.standard || connector.connectorStandardType,\n ),\n connectorPowerTypes[\n connector.powerType ||\n connector.power_type ||\n connector.connectorPowerType\n ],\n \"Socket\",\n ].join(\", \");\n}\n\nexport function formatConnectorStandard(value) {\n value = (value || \"\").replace(\"CONNECTOR_STANDARD_TYPE_\", \"\");\n\n if (value === \"IEC_62196_T1\") return \"Type 1\";\n if (value === \"IEC_62196_T1_COMBO\") return \"Type 1 Combo\";\n if (value === \"IEC_62196_T2\") return \"Type 2\";\n if (value === \"IEC_62196_T2_COMBO\") return \"Type 2 Combo\";\n if (value === \"IEC_62196_T3A\") return \"Type 3A\";\n if (value === \"IEC_62196_T3C\") return \"Type 3C\";\n if (value === \"CHADEMO\") return \"CHAdeMO\";\n if (value === \"DOMESTIC_F\") return \"Domestic F\";\n if (value === \"DOMESTIC_E\") return \"Domestic E\";\n if (value === \"DOMESTIC_B\") return \"Domestic B\";\n if (value === \"CATARC\") return \"Catarc\";\n return value;\n}\n\nexport function getStatusLabel(t: MapContextType[\"t\"], status) {\n switch (status) {\n case \"AVAILABLE\":\n return t(`evse.statusAvailable`);\n case \"CHARGING\":\n return t(`evse.statusCharging`);\n case \"UNAVAILABLE\":\n return t(`evse.statusUnavailable`);\n case \"ERROR\":\n return t(`evse.statusError`);\n case \"UNKNOWN\":\n return t(`evse.statusUnknown`);\n case \"REMOVED\":\n return t(`evse.statusRemoved`);\n case \"PLANNED\":\n return t(`evse.statusPlanned`);\n case \"RESERVED\":\n return t(`evse.statusReserved`);\n case \"INOPERATIVE\":\n return t(`evse.statusInoperative`);\n case \"OUTOFORDER\":\n return t(`evse.statusOutOfOrder`);\n default:\n return t(`evse.statusUnknown`);\n }\n}\n\nexport function getLocationLabel(t: MapContextType[\"t\"], location) {\n if (location?.type === \"ON_STREET\") {\n return t(`locationType.onStreet`);\n }\n if (location?.type === \"PARKING_GARAGE\") {\n return t(`locationType.parkingGarage`);\n }\n if (location?.type === \"UNDERGROUND_GARAGE\") {\n return t(`locationType.undergroundGarage`);\n }\n if (location?.type === \"PARKING_LOT\") {\n return t(`locationType.parkingLot`);\n }\n\n return t(`locationType.other`);\n}\n\nexport function getStatusColorFromEvses(evses: any[] = []) {\n if (evses.some((evse) => evse.status === \"AVAILABLE\")) {\n return getColorForStatus(\"AVAILABLE\");\n }\n\n if (evses.some((evse) => evse.status === \"CHARGING\")) {\n return getColorForStatus(\"CHARGING\");\n }\n\n return getColorForStatus(\"UNKNOWN\");\n}\n","/**\n * Note there could be bugs here. This is waiting for the Temporal API\n * Or if we cant wait use a library like moment-timezone or similar for more reliable timezone support\n */\n\n// Return offset on date for loc in ±H[:mm] format. Minutes only included if not zero\n// This is a bit special see https://stackoverflow.com/questions/62130983/get-offset-of-the-other-location-in-javascript for explanation\nexport function getTimezoneOffset(date, timeZone) {\n // Try English to get offset. If get abbreviation, use French\n let offset;\n [\"en\", \"fr\"].some((lang) => {\n // Get parts - can't get just timeZoneName, must get one other part at least\n let parts = new Intl.DateTimeFormat(lang, {\n minute: \"numeric\",\n timeZone,\n timeZoneName: \"short\",\n }).formatToParts(date);\n // Get offset from parts\n let tzName = parts.filter(\n (part) => part.type == \"timeZoneName\" && part.value\n );\n // timeZoneName starting with GMT or UTC is offset - keep and stop looping\n // Otherwise it's an abbreviation, keep looping\n if (/^(GMT|UTC)/.test(tzName[0].value)) {\n offset = tzName[0].value.replace(/GMT|UTC/, \"\") || \"+0\";\n return true;\n }\n });\n // Format offset as ±HH:mm\n // Normalise minus sign as ASCII minus (charCode 45)\n let sign = offset[0] == \"\\x2b\" ? \"\\x2b\" : \"\\x2d\";\n let [h, m] = offset.substring(1).split(\":\");\n return sign + h.padStart(2, \"0\") + \":\" + (m || \"00\");\n}\n\n// Convert offset string in ±HH:mm to minutes\nfunction offsetToMins(offset) {\n let sign = /^-/.test(offset) ? -1 : 1;\n let [h, m] = offset.match(/\\d\\d/g);\n return sign * (h * 60 + Number(m));\n}\n\nfunction formatYMD(timeZone, date) {\n const z = (n) => (\"0\" + n).slice(-2);\n const { year, month, day } = new Intl.DateTimeFormat(\"en\", {\n timeZone: timeZone,\n })\n .formatToParts(date)\n .reduce((acc, part) => {\n acc[part.type] = part.value;\n return part;\n }, Object.create(null));\n return `${year}-${z(month)}-${z(day)}`;\n}\n\nexport function tzDate(timeZone, date = new Date()) {\n const offset = getTimezoneOffset(date, timeZone);\n const offMins = offsetToMins(offset);\n const d = new Date(+date);\n d.setUTCMinutes(d.getUTCMinutes() + offMins);\n return d;\n}\n\nexport function startOfDay(timeZone, date = new Date()) {\n const offset = getTimezoneOffset(date, timeZone);\n const offMins = offsetToMins(offset);\n const d = new Date(+date);\n d.setUTCHours(0, -offMins, 0, 0);\n // If date is + or - original date, adjust\n const oDateTS = formatYMD(timeZone, date);\n const sodDateTS = formatYMD(timeZone, d);\n if (sodDateTS > oDateTS) {\n d.setUTCDate(d.getUTCDate() - 1);\n } else if (sodDateTS < oDateTS) {\n d.setUTCDate(d.getUTCDate() + 1);\n }\n return d;\n}\n\nexport function endOfDate(timeZone, date = new Date()) {\n return new Date(startOfDay(timeZone, date).valueOf() + 86399999);\n}\n\n// Could be bugs here\nexport function getNextDayOfWeek(\n date: Date,\n dayOfWeek: number,\n timeZone?: string\n) {\n const resultDate = tzDate(timeZone, date);\n if (resultDate.getUTCDate() !== dayOfWeek) {\n resultDate.setUTCDate(\n date.getUTCDate() + ((7 + dayOfWeek - date.getUTCDay() - 1) % 7) + 1\n );\n }\n\n return {\n start: startOfDay(timeZone, resultDate),\n end: endOfDate(timeZone, resultDate),\n };\n}\n\nexport function getDay(date: Date, timeZone?: string) {\n return tzDate(timeZone, date).getUTCDay();\n}\n","import {\n TariffElement,\n TariffRestrictions,\n DayOfWeek,\n PriceComponent,\n OcpiTariff,\n OcpiTariffElement,\n} from \"../types\";\n\nimport { getDay, getNextDayOfWeek } from \"../utils/date\";\n\nexport function convertTimeToMinutes(time: string) {\n const [hours, minutes] = time.split(\":\");\n return parseInt(hours) * 60 + parseInt(minutes);\n}\n\nfunction convertToTimeSlot(element: TariffElement): Timeslot {\n if (!element?.restrictions?.startTime || !element?.restrictions?.endTime) {\n return {\n elements: [element],\n priceComponents: element.priceComponents,\n startTime: 0,\n endTime: 24 * 60,\n isFullDay: true,\n };\n }\n\n const startTime = convertTimeToMinutes(element.restrictions.startTime);\n const endTime = convertTimeToMinutes(element.restrictions.endTime);\n\n return {\n elements: [element],\n priceComponents: element.priceComponents,\n isFullDay: startTime === 0 && endTime === 24 * 60,\n startTime,\n endTime,\n };\n}\n\ntype Timeslot = {\n isActive?: boolean;\n isFullDay: boolean;\n startTime: number;\n endTime: number;\n elements?: TariffElement[];\n priceComponents: PriceComponent[];\n};\n\n// TODO write this nicer\nexport function getScheduleItems(\n items: Timeslot[],\n isDayActive: boolean,\n now: Date,\n): Timeslot[] {\n const currentTime = (now.getHours() * 60 + now.getMinutes()) % 60;\n\n if (items.length <= 1) {\n return items.map((item) => {\n item.isActive =\n isDayActive &&\n item.startTime <= currentTime &&\n item.endTime >= currentTime;\n\n return item;\n });\n }\n items = items.sort((a, b) => a.startTime - b.startTime);\n\n let scheduleItems = [items[0]];\n for (let i = 1; i < items.length; i++) {\n const current = items[i];\n\n const refItem = scheduleItems.findLast(\n (item) => item.startTime <= current.startTime,\n );\n if (!refItem) {\n scheduleItems = scheduleItems.filter(\n (item) => item.endTime > current.endTime,\n );\n scheduleItems.unshift(current);\n } else {\n const oldEndTime = refItem.endTime;\n refItem.endTime = current.startTime;\n\n const toAppend = [current];\n if (oldEndTime > current.endTime) {\n toAppend.push({\n ...refItem,\n startTime: current.endTime,\n endTime: oldEndTime,\n });\n }\n scheduleItems.splice(scheduleItems.indexOf(refItem) + 1, 0, ...toAppend);\n }\n\n let maxEndTime = 0;\n scheduleItems = scheduleItems\n .map((item, i) => {\n const prevItem = scheduleItems[i - 1];\n\n if (item.endTime > maxEndTime) {\n maxEndTime = item.endTime;\n } else {\n return null;\n }\n if (prevItem && prevItem.endTime !== item.startTime) {\n item.startTime = prevItem.endTime;\n }\n return item;\n })\n .filter(Boolean);\n }\n\n return scheduleItems.map((item) => {\n item.isActive =\n isDayActive &&\n item.startTime <= currentTime &&\n item.endTime >= currentTime;\n\n item.isFullDay = item.startTime === 0 && item.endTime === 24 * 60;\n\n return item;\n });\n}\n\nexport function isBaseTariffOCPI(tariffElement: OcpiTariffElement) {\n return (\n //elements without restrictions are always base tariff\n !tariffElement?.restrictions ||\n // elements without time restirctions are also base tariff\n (!tariffElement?.restrictions?.start_date &&\n !tariffElement?.restrictions?.end_date &&\n !tariffElement?.restrictions?.start_time &&\n !tariffElement?.restrictions?.end_time &&\n !tariffElement?.restrictions?.day_of_week &&\n !tariffElement?.restrictions?.day_of_week)\n );\n}\n\nexport function isBaseTarif(tariffElement: TariffElement) {\n return (\n //elements without restrictions are always base tariff\n !tariffElement?.restrictions ||\n // elements without time restirctions are also base tariff\n (!tariffElement?.restrictions?.startDate &&\n !tariffElement?.restrictions?.endDate &&\n !tariffElement?.restrictions?.startTime &&\n !tariffElement?.restrictions?.startTime &&\n !tariffElement?.restrictions?.dayOfWeek)\n );\n}\n\ntype DynamicTariff = {\n date: Date;\n items: Timeslot[];\n};\n\ntype getDynamicTariffProps = {\n elements: TariffElement[];\n limit?: number;\n now: Date;\n};\n\nexport function getDynamicTariffOCPI(\n elements: OcpiTariffElement[],\n limit: number = 6,\n now: Date = new Date(),\n): DynamicTariff[] {\n const filteredElements = [...elements]\n .filter((c) => !isBaseTariffOCPI(c))\n .map((el) => {\n return {\n ...el,\n restrictions: {\n _startDate: new Date(\n `${el.restrictions.start_date}T${el.restrictions.start_time}`,\n ),\n ...el.restrictions,\n },\n };\n })\n .sort((a, b) => {\n return (\n a.restrictions._startDate.valueOf() -\n b.restrictions._startDate.valueOf()\n );\n })\n .filter((c) => {\n return (\n c.restrictions._startDate.valueOf() > now.valueOf() - 180 * 60 * 1000\n );\n })\n .slice(0, limit);\n\n const splitByDay = filteredElements.reduce((acc, curr) => {\n const day = curr.restrictions._startDate.getDate();\n acc[day] = {\n date: new Date(curr.restrictions.start_date),\n items: [...(acc[day]?.items || []), curr],\n };\n return acc;\n }, []);\n\n return Object.keys(splitByDay).map((key) => {\n const { date, items }: { date: Date; items: any[] } = splitByDay[key];\n const formattedItems = items\n .map(({ restrictions, ...c }) => {\n const { _startDate, ...partialRestrictions } = restrictions;\n return {\n ...c,\n restrictions: {\n ...partialRestrictions,\n },\n };\n })\n .map(convertToTimeSlot)\n .map((item) => {\n const isDayActive = getDay(now) === getDay(date);\n const currentTime = now.getHours() * 60 + now.getMinutes();\n\n const isActive =\n isDayActive &&\n item.startTime <= currentTime &&\n item.endTime - 1 >= currentTime;\n\n return {\n ...item,\n isActive,\n };\n });\n\n return {\n date,\n items: formattedItems,\n };\n });\n}\n\nexport function getDynamicTariff({\n elements,\n limit = 6,\n now = new Date(),\n}: getDynamicTariffProps): DynamicTariff[] {\n const filteredElements = [...elements]\n .filter((c) => !isBaseTarif(c))\n .map((el) => {\n // we are displaying these in the local timezone\n return {\n ...el,\n restrictions: {\n _startDate: new Date(\n `${el.restrictions.startDate}T${el.restrictions.startTime}`,\n ),\n ...el.restrictions,\n },\n };\n })\n .sort((a, b) => {\n return (\n a.restrictions._startDate.valueOf() -\n b.restrictions._startDate.valueOf()\n );\n })\n .filter((c) => {\n return (\n c.restrictions._startDate.valueOf() > now.valueOf() - 180 * 60 * 1000\n );\n })\n .slice(0, limit);\n\n const splitByDay = filteredElements.reduce((acc, curr) => {\n const day = curr.restrictions._startDate.getDate();\n acc[day] = {\n date: new Date(curr.restrictions.startDate),\n items: [...(acc[day]?.items || []), curr],\n };\n return acc;\n }, []);\n\n return Object.keys(splitByDay).map((key) => {\n const { date, items }: { date: Date; items: any[] } = splitByDay[key];\n const formattedItems = items\n .map(({ restrictions, ...c }) => {\n const { _startDate, ...partialRestrictions } = restrictions;\n return {\n ...c,\n restrictions: {\n ...partialRestrictions,\n },\n };\n })\n .map(convertToTimeSlot)\n .map((item) => {\n const isDayActive = getDay(now) === getDay(date);\n const currentTime = now.getHours() * 60 + now.getMinutes();\n\n const isActive =\n isDayActive &&\n item.startTime <= currentTime &&\n item.endTime - 1 >= currentTime;\n\n return {\n ...item,\n isActive,\n };\n });\n\n return {\n date,\n items: formattedItems,\n };\n });\n}\n\nexport function getScheduledTariff(\n elements: TariffElement[],\n locationTimezone: string,\n) {\n // TODO this timezone from locations\n const today = new Date();\n\n return [...elements].reduce(\n (acc, curr) => {\n const {\n startDate: start_date,\n endDate: end_date,\n dayOfWeek: day_of_week = [],\n } = (curr.restrictions as TariffRestrictions) || {};\n\n // filtering out elements without restrictions\n if (!Object.keys(curr.restrictions || {}).length) {\n return acc;\n }\n\n // TODO not sure this is correct consider timezone + should start_time be included\n const startDate = start_date ? new Date(start_date) : null;\n\n if (start_date) {\n if (startDate.valueOf() > Date.now()) {\n return acc;\n }\n }\n\n // TODO not sure this is correct consider timezone + should end_time be included\n const endDate = end_date ? new Date(end_date) : null;\n\n if (end_date) {\n if (endDate.valueOf() < Date.now()) {\n return acc;\n }\n }\n\n [\n \"SUNDAY\",\n \"MONDAY\",\n \"TUESDAY\",\n \"WEDNESDAY\",\n \"THURSDAY\",\n \"FRIDAY\",\n \"SATURDAY\",\n ].forEach((day: DayOfWeek, index) => {\n // note this does not work for timezones yet, until we load a timezone library\n const { start, end } = getNextDayOfWeek(today, index, locationTimezone);\n\n if (startDate) {\n if (startDate.valueOf() > start.valueOf()) {\n return;\n }\n }\n\n if (endDate) {\n if (endDate.valueOf() < end.valueOf()) {\n return;\n }\n }\n if (day_of_week.length && !day_of_week.includes(day)) return;\n\n acc[day] = [...acc[day], curr];\n });\n return acc;\n },\n {\n MONDAY: [],\n TUESDAY: [],\n WEDNESDAY: [],\n THURSDAY: [],\n FRIDAY: [],\n SATURDAY: [],\n SUNDAY: [],\n },\n );\n}\n\nfunction omitFields(obj, fields) {\n return Object.keys(obj).reduce((acc, curr) => {\n if (!fields.includes(curr)) {\n acc[curr] = obj[curr];\n }\n return acc;\n }, {});\n}\n\nfunction isSame(a, b) {\n const aWithoutActive = a.map((item) => omitFields(item, [\"isActive\"]));\n const bWithoutActive = b.map((item) => omitFields(item, [\"isActive\"]));\n return JSON.stringify(aWithoutActive) === JSON.stringify(bWithoutActive);\n}\n\n//merge timeslots that have the same start and end time\nfunction mergeDuplicatesTimeslots(timeslots: Timeslot[]) {\n return timeslots.reduce((acc, cur) => {\n const existing = acc.find((item) => {\n return item.startTime === cur.startTime && item.endTime === cur.endTime;\n });\n if (existing) {\n existing.elements.push(...cur.elements);\n } else {\n acc.push(cur);\n }\n return acc;\n }, []);\n}\n\ntype Schedule = {\n days: DayOfWeek[];\n isActive: boolean;\n items: Timeslot[];\n};\n\n// A base rate element fills the gaps between time-restricted elements.\n// Parking-only base elements (max/min duration) are excluded — they are shown separately.\nfunction isRateBaseTariff(el: TariffElement): boolean {\n if (!isBaseTarif(el)) return false;\n return (el.priceComponents || []).some(\n (pc) => pc.type !== \"PARKING_TIME\" && (pc.price || 0) > 0,\n );\n}\n\n// OCPI tariffs commonly use 00:01 / 23:59 to mean \"from start of day\" / \"to end of day\".\n// Treat these as midnight bounds so the algorithm doesn't produce 1-minute noise segments.\nfunction isEdgeNoise(item: Timeslot): boolean {\n return (\n (item.startTime === 0 && item.endTime <= 1) ||\n (item.startTime >= 1439 && item.endTime === 24 * 60)\n );\n}\n\nexport function getSchedule(\n elements: TariffElement[],\n locationTimezone,\n now,\n): Schedule[] {\n const days = getScheduledTariff(\n elements.concat().filter((c) => !isBaseTarif(c)),\n locationTimezone,\n );\n\n const baseRateElement = elements.find(isRateBaseTariff);\n\n const { SUNDAY, ...rest } = days;\n\n // fixing order sunday has to be first for the getDay function to work\n const [firstDay, ...restDays] = Object.keys({\n SUNDAY: days.SUNDAY,\n ...rest,\n }).map((key, index) => {\n const dayElements = days[key];\n const isActive = getDay(now, locationTimezone) === index;\n\n const dayTimeslots = mergeDuplicatesTimeslots(\n dayElements.map(convertToTimeSlot),\n );\n // Inject the base rate so gaps between time-restricted slots show the base price\n // instead of stretching the adjacent slot across the gap.\n if (baseRateElement && dayTimeslots.length > 0) {\n dayTimeslots.unshift(convertToTimeSlot(baseRateElement));\n }\n\n return {\n day: key,\n isActive,\n items: getScheduleItems(dayTimeslots, isActive, now).filter(\n (item) => !isEdgeNoise(item),\n ),\n };\n });\n\n // switching order back\n return [...restDays, firstDay]\n .reduce((acc, curr, index, items) => {\n const prevEntry = acc[acc.length - 1];\n const prevTimeslots = prevEntry?.items;\n if (!prevTimeslots || !isSame(prevTimeslots, curr.items)) {\n const { day, ...rest } = curr;\n acc.push({\n ...rest,\n days: [curr.day],\n });\n } else {\n prevEntry.days = [prevEntry.days[0], curr.day];\n prevEntry.isActive = prevEntry.isActive || curr.isActive;\n }\n return acc;\n }, [])\n .filter((c) => {\n return !!c.items.length;\n });\n}\n\nexport function getConnectorTariffTypeV2(tariff: OcpiTariff) {\n if (!tariff) {\n return \"none\";\n }\n\n const hasPriceComponents = tariff.elements?.some(\n (element) => element?.price_components?.length > 0,\n );\n if (!hasPriceComponents) {\n return \"none\";\n }\n\n const baseTarifElements = tariff.elements.filter(isBaseTariffOCPI);\n if (baseTarifElements.length === tariff.elements.length) {\n return \"base\";\n }\n\n const dynamicTariffs = getDynamicTariffOCPI(tariff.elements, 6, new Date());\n\n if (dynamicTariffs.length) {\n return \"dynamic\";\n }\n\n return \"scheduled\";\n}\n\nexport function getConnectorTariffType(connectorTarif) {\n const { elements = [] } = connectorTarif;\n const hasPriceComponents = elements?.some(\n (element) => element?.priceComponents?.length > 0,\n );\n\n if (!hasPriceComponents) {\n return \"none\";\n }\n\n const baseTarifElements = elements.filter(isBaseTarif);\n\n if (baseTarifElements.length === elements.length) {\n return \"base\";\n }\n\n const dynamicTariffs = getDynamicTariff({\n elements,\n limit: 6,\n now: new Date(),\n });\n if (dynamicTariffs.length) {\n return \"dynamic\";\n }\n return \"scheduled\";\n}\n\n// Connector Power Type constants\nexport const ConnectorPowerType = {\n CONNECTOR_POWER_TYPE_UNSPECIFIED: \"CONNECTOR_POWER_TYPE_UNSPECIFIED\",\n CONNECTOR_POWER_TYPE_AC_1_PHASE: \"CONNECTOR_POWER_TYPE_AC_1_PHASE\",\n CONNECTOR_POWER_TYPE_AC_2_PHASE: \"CONNECTOR_POWER_TYPE_AC_2_PHASE\",\n CONNECTOR_POWER_TYPE_AC_2_PHASE_SPLIT:\n \"CONNECTOR_POWER_TYPE_AC_2_PHASE_SPLIT\",\n CONNECTOR_POWER_TYPE_AC_3_PHASE: \"CONNECTOR_POWER_TYPE_AC_3_PHASE\",\n CONNECTOR_POWER_TYPE_DC: \"CONNECTOR_POWER_TYPE_DC\",\n CONNECTOR_POWER_TYPE_AC: \"CONNECTOR_POWER_TYPE_AC\",\n} as const;\n\nexport type ConnectorPowerType =\n (typeof ConnectorPowerType)[keyof typeof ConnectorPowerType];\n\nexport function calculateMaxPower(connector: {\n power: {\n maxWatts: number;\n maxVoltage: number;\n maxAmperage: number;\n };\n connectorPowerType: ConnectorPowerType;\n}): number {\n switch (connector.connectorPowerType) {\n case ConnectorPowerType.CONNECTOR_POWER_TYPE_AC_1_PHASE:\n case ConnectorPowerType.CONNECTOR_POWER_TYPE_DC:\n return (connector.power.maxVoltage * connector.power.maxAmperage) / 1000;\n\n case ConnectorPowerType.CONNECTOR_POWER_TYPE_AC_2_PHASE:\n case ConnectorPowerType.CONNECTOR_POWER_TYPE_AC_2_PHASE_SPLIT:\n return (\n (connector.power.maxVoltage * connector.power.maxAmperage * 2) / 1000\n );\n\n case ConnectorPowerType.CONNECTOR_POWER_TYPE_AC_3_PHASE:\n return (\n (connector.power.maxVoltage * connector.power.maxAmperage * 3) / 1000\n );\n\n default:\n return 0;\n }\n}\n","import React from \"react\";\nimport styles from \"./Price.module.css\";\nimport { useMapContext } from \"../../contexts/Map\";\nimport { PriceComponent as PriceComponentType, TariffElement } from \"../../types\";\n\nfunction formatCurrency(value, props) {\n return new Intl.NumberFormat(undefined, {\n style: \"currency\",\n currency: props.currency || \"EUR\",\n maximumFractionDigits: 2,\n }).format(value);\n}\n\ntype PriceComponentsProps = {\n priceComponent: PriceComponentType;\n restrictions?: TariffElement[\"restrictions\"];\n currency: string;\n};\n\nfunction getPrice(priceComponent: PriceComponentType) {\n const vat = !priceComponent.vat ? 0 : priceComponent.vat / 100;\n return priceComponent.price + priceComponent.price * vat;\n}\n\nexport default function PriceComponent({\n priceComponent,\n restrictions = {},\n currency,\n}: PriceComponentsProps) {\n const { t } = useMapContext();\n\n const stringByType = {\n ENERGY: \"tariffPriceComponent.energy\",\n TIME: \"tariffPriceComponent.time\",\n FLAT: \"tariffPriceComponent.flat\",\n PARKING_TIME: \"tariffPriceComponent.parkingTime\",\n };\n\n if (\n restrictions?.minDuration === 0 &&\n restrictions?.maxDuration &&\n priceComponent.type === \"PARKING_TIME\"\n ) {\n return (\n <div className={styles.tariffItem}>\n {t(\"tariffPriceComponent.parkingTimeWait\", {\n minutes: Math.floor(restrictions.maxDuration / 60),\n })}\n </div>\n );\n }\n\n if (!stringByType[priceComponent.type]) return null;\n\n return (\n <div className={styles.tariffItem}>\n {t(stringByType[priceComponent.type] as any, {\n total: formatCurrency(getPrice(priceComponent), {\n currency: currency,\n }),\n })}\n </div>\n );\n}\n\n","import React from \"react\";\n\nimport { PriceComponent, TariffElement } from \"../../types\";\n\nimport Price from \"../Price/Price\";\n\nimport styles from \"./PriceComponents.module.css\";\nimport { useMapContext } from \"../../contexts/Map\";\n\ntype PriceComponentsProps = {\n elements: TariffElement[];\n currency: string;\n};\n\nconst displayOrder = [\"ENERGY\", \"TIME\", \"FLAT\", \"PARKING_TIME\"];\n\ntype SortedElements = {\n type: PriceComponent[\"type\"];\n elements: {\n priceComponent: PriceComponent;\n restrictions: TariffElement[\"restrictions\"];\n }[];\n};\n\nexport default function PriceComponents({\n elements,\n currency,\n}: PriceComponentsProps) {\n const { t } = useMapContext();\n\n // get elements from by type\n const elementsByType = elements.reduce((acc, element) => {\n element.priceComponents.forEach((priceComponent) => {\n if (!acc[priceComponent.type]) acc[priceComponent.type] = [];\n acc[priceComponent.type].push({\n priceComponent,\n restrictions: element.restrictions,\n });\n });\n return acc;\n }, {});\n\n const sortedElements = Object.keys(elementsByType)\n .map((type) => {\n return {\n type,\n elements: elementsByType[type],\n };\n })\n .sort((a: any, b: any) => {\n const aIndex = displayOrder.indexOf(a.type);\n const bIndex = displayOrder.indexOf(b.type);\n if (aIndex === -1) return 1;\n if (bIndex === -1) return -1;\n return aIndex - bIndex;\n }) as SortedElements[];\n\n return (\n <div className={styles.container}>\n {sortedElements.map(({ type, elements }, i) => {\n return elements.reverse().map((element, q) => {\n return (\n <Price\n currency={currency}\n key={`${type}-${i}-${q}`}\n priceComponent={element.priceComponent}\n restrictions={element.restrictions}\n />\n );\n });\n })}\n </div>\n );\n}\n\n","import React from \"react\";\n\nimport { CdrAdditionalCharge, PriceComponent, TariffElement } from \"../../types\";\n\nfunction formatCurrency(value, props) {\n return new Intl.NumberFormat(undefined, {\n style: \"currency\",\n currency: props.currency || \"EUR\",\n maximumFractionDigits: 2,\n }).format(value);\n}\n\n// note reuse of price css module\nimport styles from \"../Price/Price.module.css\";\nimport { useMapContext } from \"../../contexts/Map\";\n\ntype CdrPriceComponentsProps = {\n cdrAdditionalCharge: CdrAdditionalCharge;\n currency: string;\n};\n\nfunction getPrice({ vat, price }: { vat?: number; price: number }) {\n const vatAmount = !vat ? 0 : vat / 100;\n return price + price * vatAmount;\n}\n\nexport default function CdrPriceComponent({\n cdrAdditionalCharge,\n currency,\n}: CdrPriceComponentsProps) {\n const { t } = useMapContext();\n\n const stringByType = {\n FLAT_FEE: t(\"cdrPrice.flatFee\", {\n total: formatCurrency(getPrice(cdrAdditionalCharge), {\n currency: currency,\n }),\n }),\n };\n\n return (\n <div className={styles.tariffItem}>\n {stringByType[cdrAdditionalCharge.type]}\n </div>\n );\n}\n\n","import React, { Fragment } from \"react\";\nimport { useMapContext } from \"../../contexts/Map\";\nimport { Tariff, CdrAdditionalCharge } from \"../../types\";\nimport { getSchedule, isBaseTarif, getDynamicTariff } from \"../../utils/ocpi\";\n\nimport styles from \"./ConnectorTariff.module.css\";\n\nimport PriceComponents from \"../PriceComponents/PriceComponents\";\nimport CdrPrice from \"../CdrPrice/CdrPrice\";\n\ntype ConnectorTariffProps = {\n tariff: Tariff;\n timezone?: string;\n compact?: boolean;\n cdrAdditionalCharges?: CdrAdditionalCharge[];\n};\n\nfunction formatTime(language, minutes: number) {\n const date = new Date(0);\n const hours = Math.floor(minutes / 60);\n const mins = minutes % 60;\n date.setHours(hours, mins, 0, 0);\n // hardcoding to nl for now, because i think people will understand it better in EU\n return date.toLocaleTimeString(\"nl\", {\n hour: \"2-digit\",\n minute: \"2-digit\",\n });\n}\n\nconst defaultTimeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n\nfunction daysForLocale(language: string) {\n const { format } = new Intl.DateTimeFormat(language, { weekday: \"long\" });\n return [\n \"SUNDAY\",\n \"MONDAY\",\n \"TUESDAY\",\n \"WEDNESDAY\",\n \"THURSDAY\",\n \"FRIDAY\",\n \"SATURDAY\",\n ].reduce((acc, day, index) => {\n acc[day] = format(new Date(Date.UTC(2023, 9, index + 1)));\n return acc;\n }, {});\n}\n\nfunction CdrAdditionalChargeComponent({\n currency,\n cdrAdditionalCharges,\n}: {\n currency: string;\n cdrAdditionalCharges: CdrAdditionalCharge[];\n}) {\n return cdrAdditionalCharges.map((c) => {\n return <CdrPrice key={c.id} currency={currency} cdrAdditionalCharge={c} />;\n });\n}\n\nexport default function ConnectorTariff({\n timezone = defaultTimeZone,\n tariff,\n compact = true,\n cdrAdditionalCharges = [],\n}: ConnectorTariffProps) {\n const { t, language } = useMapContext();\n const i18nDays = daysForLocale(language);\n\n if (!tariff) return null;\n\n const elements = tariff.elements || [];\n const currency = tariff.currency || \"\";\n\n const hasPriceComponents = elements.some(\n (element) => element.priceComponents && element.priceComponents.length > 0,\n );\n\n const dynamicTariffs = getDynamicTariff({\n elements,\n limit: compact ? 6 : 40,\n now: new Date(),\n });\n\n const scheduledTariffs = dynamicTariffs.length\n ? []\n : getSchedule(elements, timezone, new Date());\n\n const baseTarifElements = elements.filter(isBaseTarif);\n\n if (!hasPriceComponents) {\n return (\n <>\n <div className={styles.tariffNote}>\n {t(\"tariffPriceComponent.noTariff\")}\n </div>\n {cdrAdditionalCharges.length > 0 && (\n <div className={styles.container}>\n <CdrAdditionalChargeComponent\n currency={currency}\n cdrAdditionalCharges={cdrAdditionalCharges}\n />\n </div>\n )}\n </>\n );\n }\n\n const isBaseActive = !scheduledTariffs.some((element) => element.isActive);\n\n if (scheduledTariffs.length) {\n return (\n <div className={styles.container}>\n {baseTarifElements.length > 0 && (\n <div className={[styles.tariffList, styles.bold].join(\" \")}>\n <div className={styles.tariffHeader}>\n {t(\"tariffPriceComponent.baseTariff\")}\n\n {isBaseActive && (\n <span className={styles.activeNowLabel}>\n {t(\"tariffPriceComponent.active\")}\n </span>\n )}\n </div>\n <PriceComponents elements={baseTarifElements} currency={currency} />\n\n <CdrAdditionalChargeComponent\n currency={currency}\n cdrAdditionalCharges={cdrAdditionalCharges}\n />\n </div>\n )}\n\n {scheduledTariffs.map((schedule) => {\n return (\n <div key={schedule.days.join(\"-\")} className={styles.tariffList}>\n <div className={styles.tariffHeader}>\n {schedule.days.map((day) => i18nDays[day]).join(\" - \")}\n\n {schedule.isActive && (\n <span className={styles.activeNowLabel}>\n {t(\"tariffPriceComponent.active\")}\n </span>\n )}\n </div>\n {schedule.items.map((item) => {\n return (\n <div\n key={item.startTime}\n className={item.isActive && styles.bold}\n >\n {!item.isFullDay && (\n <div className={styles.tariffLabel}>\n {formatTime(language, item.startTime)} -{\" \"}\n {formatTime(language, item.endTime)}\n </div>\n )}\n <div>\n <PriceComponents\n elements={item.elements}\n currency={currency}\n />\n <CdrAdditionalChargeComponent\n currency={currency}\n cdrAdditionalCharges={cdrAdditionalCharges}\n />\n </div>\n </div>\n );\n })}\n </div>\n );\n })}\n </div>\n );\n }\n\n return (\n <div className={styles.container}>\n {baseTarifElements.length > 0 && !dynamicTariffs?.length && (\n <div className={styles.tariffList}>\n <PriceComponents elements={baseTarifElements} currency={currency} />\n <CdrAdditionalChargeComponent\n currency={currency}\n cdrAdditionalCharges={cdrAdditionalCharges}\n />\n </div>\n )}\n {dynamicTariffs.length > 0 && (\n <>\n {dynamicTariffs.map((dynamicTariff, index) => {\n return (\n <>\n <div className={styles.tariffHeader}>\n {t(\"tariffPriceComponent.dynamicTariffHeader\", {\n date: new Intl.DateTimeFormat(language, {\n weekday: \"long\",\n month: \"short\",\n day: \"numeric\",\n }).format(dynamicTariff.date),\n })}\n </div>\n <div className={styles.dynamicTariffList}>\n {dynamicTariff.items.map((item, index) => {\n return (\n <div\n key={[item.startTime, item.endTime, index].join()}\n className={[\n styles.dynamicTariffItem,\n item.isActive && styles.bold,\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n <div className={styles.dynamicTariffItemRange}>\n {formatTime(language, item.startTime)} –{\" \"}\n {formatTime(language, item.endTime)}\n </div>\n <PriceComponents\n elements={item.elements}\n currency={currency}\n />\n <CdrAdditionalChargeComponent\n currency={currency}\n cdrAdditionalCharges={cdrAdditionalCharges}\n />\n {item.isActive && (\n <span className={styles.activeNowLabel}>\n {t(\"tariffPriceComponent.active\")}\n </span>\n )}\n </div>\n );\n })}\n </div>\n </>\n );\n })}\n </>\n )}\n </div>\n );\n}\n","import { Location, OcpiLocation } from \"../types\";\n\nexport function getNotes(\n t,\n location: Location | OcpiLocation,\n type: \"dynamic\" | \"scheduled\" | \"base\" | \"none\",\n) {\n const notes = [];\n\n if ((location as Location)?.customNote) {\n notes.push((location as Location)?.customNote);\n }\n\n if (type === \"none\") {\n return notes.length ? notes : [t(\"tariffNote.baseTariffNote\")];\n }\n\n if (type === \"dynamic\") {\n notes.push(t(\"tariffNote.dynamicScheduledTariffNote\"));\n }\n\n // is e-flux location\n if (\n (location as Location)?.infraProviderId === \"NLEFL\" ||\n (location as OcpiLocation)?.party_id === \"EFL\"\n ) {\n if (type === \"scheduled\") {\n notes.push(t(\"tariffNote.eFluxScheduledTariffNote\"));\n }\n // if only base tariff\n return notes;\n }\n\n if (type === \"scheduled\") {\n notes.push(\n t(\"tariffNote.baseTariffNote\"),\n t(\"tariffNote.scheduledTariffNote\"),\n );\n } else {\n notes.push(t(\"tariffNote.baseTariffNote\"));\n }\n\n return notes;\n}\n","import React from \"react\";\nimport styles from \"./locations.module.css\";\nimport StationIcon from \"../../assets/station-icon.svg\";\nimport BuildingIcon from \"../../assets/building-icon.svg\";\nimport CarIcon from \"../../assets/car-icon.svg\";\nimport BoltIcon from \"../../assets/bolt-icon.svg\";\nimport PricingIcon from \"../../assets/pricing-icon.svg\";\nimport { Info } from \"../../components/Icons/Icons\";\nimport {\n getStatusColorFromEvses,\n getLocationLabel,\n getStatusLabel,\n getSocketIcon,\n getSocketText,\n} from \"../../utils/formatters\";\nimport ConnectorTariff from \"../../components/ConnectorTariff/ConnectorTariff\";\nimport { getColorForStatus } from \"../../utils/location\";\nimport { getConnectorTariffType } from \"../../utils/ocpi\";\nimport { getNotes } from \"../../utils/notes\";\nimport { formatNumber } from \"../../utils/formatters\";\nimport { useMapContext } from \"../../contexts/Map\";\n\ninterface Props {\n currentLocation: any;\n setView(view: string, args?: any): void;\n evses: any[];\n cdrAdditionalCharges: any[];\n}\n\nconst LocationDetailsV1: React.FC<Props> = ({\n currentLocation,\n evses,\n setView,\n cdrAdditionalCharges,\n}) => {\n const { options, t, language } = useMapContext();\n const availableEvse = evses.filter((evse) => evse.status === \"AVAILABLE\");\n return (\n <div className={styles.container}>\n <div className={styles.row}>\n <img className={styles.icon} src={StationIcon} alt=\"station icon\" />\n <div className={styles.text}>\n {options.locationBaseUrl && (\n <a href={`${options.locationBaseUrl}/${currentLocation.id}`}>\n {currentLocation.name || \"-\"}\n </a>\n )}\n {!options.locationBaseUrl && currentLocation.name}\n </div>\n </div>\n <div className={styles.row}>\n <div className={styles.icon}>\n <div\n style={{\n background: getStatusColorFromEvses(currentLocation.evses),\n }}\n className={styles.statusIcon}\n />\n </div>\n <div className={styles.text}>\n {availableEvse.length} / {evses.length} {t(\"evse.statusAvailable\")}\n </div>\n </div>\n {currentLocation.subOperator?.name && (\n <div className={styles.row}>\n <img className={styles.icon} src={BuildingIcon} alt=\"building icon\" />\n <div className={styles.text}>{currentLocation.subOperator?.name}</div>\n </div>\n )}\n\n {currentLocation.parkingType !== \"UNKNOWN\" && (\n <div className={styles.row}>\n <img className={styles.icon} src={CarIcon} alt=\"parking icon\" />\n <div className={styles.text}>\n {getLocationLabel(t, currentLocation.parkingType)}\n </div>\n </div>\n )}\n\n {evses.map((evse) => {\n return (\n <div key={evse.evseId}>\n <hr className={styles.divider} />\n <div className={styles.row}>\n <img className={styles.icon} src={BoltIcon} alt=\"power icon\" />\n <div className={styles.text}>{evse.evseId}</div>\n </div>\n <div className={styles.row}>\n <div\n style={{\n background: getColorForStatus(evse.status),\n }}\n className={styles.statusIcon}\n />\n <div className={styles.text}>\n {[\n getStatusLabel(t, evse.status),\n evse.maxPower &&\n `${formatNumber(language, Math.floor(evse.maxPower))}kW`,\n ]\n .filter(Boolean)\n .join(\", \")}\n </div>\n </div>\n {evse.connectors.map((connector, i) => {\n const connectorType = getConnectorTariffType(connector.tariff);\n const notes = getNotes(t, currentLocation, connectorType);\n return (\n <div key={`connector-${i}`}>\n {\" \"}\n <div className={styles.row}>\n <img\n className={styles.icon}\n src={getSocketIcon(connector)}\n alt=\"socket type\"\n />\n <div className={styles.text}>\n {getSocketText(connector)}\n </div>\n </div>\n <div className={styles.row}>\n <img\n className={styles.icon}\n src={PricingIcon}\n alt=\"pricing\"\n />\n <div className={styles.text}>{t(\"evse.pricing\")}</div>\n </div>\n <ConnectorTariff\n tariff={connector.tariff}\n cdrAdditionalCharges={cdrAdditionalCharges}\n />\n {connectorType === \"dynamic\" && (\n <div\n className={styles.tariffNoteLink}\n onClick={() => {\n setView(\"dynamicTariff\", {\n connector: connector,\n evseId: evse.evseId,\n notes: notes,\n locationName: currentLocation.name,\n });\n }}\n >\n {t(\"location.viewAllHourlyPrices\")}\n </div>\n )}\n {notes.length > 0 && (\n <div\n className={styles.tariffNoteLink}\n onClick={() => {\n setView(\"tariffNote\", {\n locationName: currentLocation.name,\n evseId: evse.evseId,\n notes: getNotes(t, currentLocation, connectorType),\n });\n }}\n >\n <Info /> {t(\"tariffPriceComponent.viewTariff\")}\n </div>\n )}\n </div>\n );\n })}\n </div>\n );\n })}\n </div>\n );\n};\n\nexport default LocationDetailsV1;\n","import React, { ReactNode, useState } from \"react\";\nimport styles from \"./LocationRow.module.css\";\nimport { ChevronDown } from \"../Icons/Icons\";\n\ninterface Props {\n icon: ReactNode;\n text: ReactNode;\n hint?: ReactNode;\n children?: ReactNode;\n defaultExpanded?: boolean;\n}\n\nconst rowStyle: React.CSSProperties = {\n display: \"flex\",\n flexDirection: \"row\",\n flexWrap: \"nowrap\",\n alignItems: \"center\",\n padding: \"5px 0\",\n minWidth: 0,\n};\n\nconst iconSlotStyle: React.CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n height: 16,\n width: 16,\n flex: \"0 0 auto\",\n marginRight: 14,\n overflow: \"hidden\",\n};\n\nconst textSlotStyle: React.CSSProperties = {\n flex: \"1 1 auto\",\n minWidth: 0,\n fontSize: 12,\n lineHeight: \"16px\",\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n};\n\nconst hintStyle: React.CSSProperties = {\n color: \"var(--roadmap-muted-color, #6a6a6a)\",\n fontWeight: \"normal\",\n};\n\nconst chevronSlotStyle: React.CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n height: 10,\n width: 10,\n flex: \"0 0 auto\",\n marginLeft: 8,\n transition: \"transform 0.15s ease\",\n color: \"var(--roadmap-text-color, #2a2a2a)\",\n};\n\nconst bodyStyle: React.CSSProperties = {\n padding: \"4px 0 6px 30px\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: 4,\n};\n\nexport const LocationRow: React.FC<Props> = ({\n icon,\n text,\n hint,\n children,\n defaultExpanded = false,\n}) => {\n const expandable = React.Children.count(children) > 0;\n const [expanded, setExpanded] = useState(defaultExpanded);\n\n const toggle = () => setExpanded((v) => !v);\n\n return (\n <>\n <div\n className={`${styles.row} ${expandable ? styles.expandable : \"\"}`}\n style={{\n ...rowStyle,\n cursor: expandable ? \"pointer\" : undefined,\n userSelect: expandable ? \"none\" : undefined,\n }}\n role={expandable ? \"button\" : undefined}\n tabIndex={expandable ? 0 : undefined}\n aria-expanded={expandable ? expanded : undefined}\n onClick={expandable ? toggle : undefined}\n onKeyDown={\n expandable\n ? (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n toggle();\n }\n }\n : undefined\n }\n >\n <span className={styles.icon} style={iconSlotStyle}>\n {React.isValidElement(icon)\n ? React.cloneElement(icon as React.ReactElement<any>, {\n style: {\n maxWidth: 16,\n maxHeight: 16,\n display: \"block\",\n ...((icon as React.ReactElement<any>).props?.style || {}),\n },\n })\n : icon}\n </span>\n <div className={styles.text} style={textSlotStyle}>\n {text}\n {hint != null && (\n <span className={styles.textHint} style={hintStyle}>\n {\" · \"}\n {hint}\n </span>\n )}\n </div>\n {expandable && (\n <span\n className={`${styles.chevron} ${\n expanded ? styles.chevronOpen : \"\"\n }`}\n style={{\n ...chevronSlotStyle,\n transform: expanded ? \"rotate(180deg)\" : undefined,\n }}\n >\n <ChevronDown />\n </span>\n )}\n </div>\n {expandable && expanded && (\n <div className={styles.body} style={bodyStyle}>\n {children}\n </div>\n )}\n </>\n );\n};\n\nexport default LocationRow;\n","import React from \"react\";\nimport StationIcon from \"../../../assets/station-icon.svg\";\nimport LocationRow from \"../../../components/LocationRow/LocationRow\";\nimport { useMapContext } from \"../../../contexts/Map\";\nimport { OcpiLocation } from \"../../../types\";\n\ninterface Props {\n location: OcpiLocation;\n}\n\nexport const LocationHeader: React.FC<Props> = ({ location }) => {\n const { options } = useMapContext();\n const name = location?.name || \"-\";\n const id = location?.externalId || location?.id;\n\n let href: string | undefined;\n if (id && options.locationUrlTemplate && options.context === \"cpo\") {\n href = options.locationUrlTemplate.replace(/{{\\s*locationId\\s*}}/g, id);\n } else if (id && options.locationBaseUrl) {\n href = `${options.locationBaseUrl}/${id}`;\n }\n\n const text = href ? (\n <a href={href} target=\"_blank\" rel=\"noopener noreferrer\">\n {name}\n </a>\n ) : (\n name\n );\n return (\n <LocationRow\n icon={<img src={StationIcon} alt=\"station icon\" />}\n text={text}\n />\n );\n};\n\nexport default LocationHeader;\n","import React from \"react\";\n\ninterface Props {\n color: string;\n size?: number;\n}\n\nexport const StatusDot: React.FC<Props> = ({ color, size = 10 }) => (\n <span\n style={{\n display: \"block\",\n width: size,\n height: size,\n borderRadius: size,\n background: color,\n }}\n />\n);\n\nexport default StatusDot;\n","import React from \"react\";\nimport LocationRow from \"../../../components/LocationRow/LocationRow\";\nimport StatusDot from \"../../../components/StatusDot/StatusDot\";\nimport { useMapContext } from \"../../../contexts/Map\";\nimport { getStatusColorFromEvses } from \"../../../utils/formatters\";\nimport { OcpiEvse } from \"../../../types\";\n\ninterface Props {\n evses: OcpiEvse[];\n}\n\nexport const AvailabilitySummary: React.FC<Props> = ({ evses }) => {\n const { t } = useMapContext();\n const available = evses?.filter((e) => e.status === \"AVAILABLE\") || [];\n return (\n <LocationRow\n icon={<StatusDot color={getStatusColorFromEvses(evses)} />}\n text={`${available.length} / ${evses?.length || 0} ${t(\"evse.statusAvailable\")}`}\n />\n );\n};\n\nexport default AvailabilitySummary;\n","import React from \"react\";\nimport BuildingIcon from \"../../../assets/building-icon.svg\";\nimport LocationRow from \"../../../components/LocationRow/LocationRow\";\nimport { useMapContext } from \"../../../contexts/Map\";\nimport { OcpiSuboperator } from \"../../../types\";\nimport { LabelsType } from \"../../../i18n\";\nimport styles from \"./OperatorSection.module.css\";\n\ninterface Props {\n operator?: OcpiSuboperator;\n suboperator?: OcpiSuboperator;\n fallbackOperatorName?: string;\n fallbackSuboperatorName?: string;\n}\n\ntype Role = {\n labelKey: keyof LabelsType;\n name?: string;\n website?: string;\n logoUrl?: string;\n};\n\nconst OperatorBlock: React.FC<{ role: Role; showRoleLabel: boolean }> = ({\n role,\n showRoleLabel,\n}) => {\n const { t } = useMapContext();\n if (!role.name) return null;\n return (\n <div\n className={styles.block}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 2,\n marginBottom: 8,\n }}\n >\n {showRoleLabel && (\n <div\n className={styles.role}\n style={{\n fontSize: 11,\n textTransform: \"uppercase\",\n color: \"var(--roadmap-muted-color, #6a6a6a)\",\n letterSpacing: \"0.04em\",\n }}\n >\n {t(role.labelKey)}\n </div>\n )}\n <div\n className={styles.header}\n style={{ display: \"flex\", alignItems: \"center\", gap: 8 }}\n >\n {role.logoUrl && (\n <img\n className={styles.logo}\n src={role.logoUrl}\n alt={`${role.name} logo`}\n style={{\n maxHeight: 20,\n maxWidth: 80,\n width: \"auto\",\n height: \"auto\",\n objectFit: \"contain\",\n display: \"block\",\n }}\n />\n )}\n <div\n className={styles.name}\n style={{ fontSize: 13, fontWeight: 600 }}\n >\n {role.name}\n </div>\n </div>\n {role.website && (\n <a\n className={styles.website}\n href={role.website}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{\n fontSize: 12,\n color: \"var(--roadmap-brand-color)\",\n textDecoration: \"none\",\n wordBreak: \"break-all\",\n }}\n >\n {t(\"location.visitWebsite\")}\n </a>\n )}\n </div>\n );\n};\n\nexport const OperatorSection: React.FC<Props> = ({\n operator,\n suboperator,\n fallbackOperatorName,\n fallbackSuboperatorName,\n}) => {\n const { t } = useMapContext();\n\n const subRole: Role = {\n labelKey: \"location.suboperator\",\n name: suboperator?.name || fallbackSuboperatorName,\n website: suboperator?.website,\n logoUrl: suboperator?.logo?.thumbnail || suboperator?.logo?.url,\n };\n const opRole: Role = {\n labelKey: \"location.operator\",\n name: operator?.name || fallbackOperatorName,\n website: operator?.website,\n logoUrl: operator?.logo?.thumbnail || operator?.logo?.url,\n };\n\n const role = subRole.name ? subRole : opRole.name ? opRole : null;\n if (!role) return null;\n\n return (\n <LocationRow\n icon={<img src={BuildingIcon} alt=\"building icon\" />}\n text={t(\"location.operatorInfo\")}\n hint={role.name}\n >\n <OperatorBlock role={role} showRoleLabel={false} />\n </LocationRow>\n );\n};\n\nexport default OperatorSection;\n","import { LabelsType } from \"../i18n\";\n\nexport type RegularHours = {\n weekday: number;\n period_begin: string;\n period_end: string;\n};\n\nexport type ExceptionalPeriod = {\n period_begin: string;\n period_end: string;\n};\n\nexport type OpeningTimes = {\n twentyfourseven: boolean;\n regular_hours?: RegularHours[];\n exceptional_openings?: ExceptionalPeriod[];\n exceptional_closings?: ExceptionalPeriod[];\n};\n\ntype Translate = (key: keyof LabelsType, args?: Record<string, string>) => string;\n\nconst WEEKDAY_KEYS: Array<keyof LabelsType> = [\n \"weekday.mon\",\n \"weekday.tue\",\n \"weekday.wed\",\n \"weekday.thu\",\n \"weekday.fri\",\n \"weekday.sat\",\n \"weekday.sun\",\n];\n\nexport function getWeekdayLabel(t: Translate, weekday: number): string {\n const key = WEEKDAY_KEYS[weekday - 1];\n return key ? t(key) : \"\";\n}\n\nexport function groupRegularHoursByWeekday(\n regularHours: RegularHours[] | undefined,\n): Record<number, RegularHours[]> {\n const grouped: Record<number, RegularHours[]> = {};\n for (let i = 1; i <= 7; i++) grouped[i] = [];\n (regularHours || []).forEach((entry) => {\n if (entry.weekday >= 1 && entry.weekday <= 7) {\n grouped[entry.weekday].push(entry);\n }\n });\n for (const day of Object.keys(grouped)) {\n grouped[Number(day)].sort((a, b) =>\n a.period_begin.localeCompare(b.period_begin),\n );\n }\n return grouped;\n}\n\nexport function formatPeriod(begin: string, end: string): string {\n return `${begin} – ${end}`;\n}\n\nfunction timeToMinutes(time: string): number {\n const [h, m] = time.split(\":\").map(Number);\n return h * 60 + (m || 0);\n}\n\nfunction jsDayToOcpiWeekday(jsDay: number): number {\n // JS: 0=Sun..6=Sat. OCPI: 1=Mon..7=Sun.\n return jsDay === 0 ? 7 : jsDay;\n}\n\nfunction dateToYMD(d: Date): string {\n const y = d.getFullYear();\n const m = String(d.getMonth() + 1).padStart(2, \"0\");\n const day = String(d.getDate()).padStart(2, \"0\");\n return `${y}-${m}-${day}`;\n}\n\nfunction isInExceptional(\n periods: ExceptionalPeriod[] | undefined,\n now: Date,\n): ExceptionalPeriod | null {\n if (!periods) return null;\n const t = now.getTime();\n for (const p of periods) {\n const begin = new Date(p.period_begin).getTime();\n const end = new Date(p.period_end).getTime();\n if (!isNaN(begin) && !isNaN(end) && t >= begin && t <= end) return p;\n }\n return null;\n}\n\nexport type OpenStatus = {\n open: boolean;\n nextChange?: { time: string; label: \"opens\" | \"closes\" };\n};\n\nexport function isOpenNow(\n openingTimes: OpeningTimes | undefined,\n now: Date = new Date(),\n): OpenStatus {\n if (!openingTimes) return { open: false };\n if (openingTimes.twentyfourseven) return { open: true };\n\n const closing = isInExceptional(openingTimes.exceptional_closings, now);\n if (closing) {\n return {\n open: false,\n nextChange: {\n time: new Date(closing.period_end).toISOString().slice(11, 16),\n label: \"opens\",\n },\n };\n }\n\n const opening = isInExceptional(openingTimes.exceptional_openings, now);\n if (opening) {\n return {\n open: true,\n nextChange: {\n time: new Date(opening.period_end).toISOString().slice(11, 16),\n label: \"closes\",\n },\n };\n }\n\n const grouped = groupRegularHoursByWeekday(openingTimes.regular_hours);\n const todayWeekday = jsDayToOcpiWeekday(now.getDay());\n const prevWeekday = todayWeekday === 1 ? 7 : todayWeekday - 1;\n const nowMinutes = now.getHours() * 60 + now.getMinutes();\n\n // Check overnight period from previous day still active\n for (const p of grouped[prevWeekday]) {\n const begin = timeToMinutes(p.period_begin);\n const end = timeToMinutes(p.period_end);\n if (end < begin || end === 0) {\n // wraps past midnight\n const endToday = end === 0 ? 24 * 60 : end;\n if (nowMinutes < endToday) {\n return {\n open: true,\n nextChange: { time: p.period_end, label: \"closes\" },\n };\n }\n }\n }\n\n // Check today's periods\n for (const p of grouped[todayWeekday]) {\n const begin = timeToMinutes(p.period_begin);\n const end = timeToMinutes(p.period_end);\n const wraps = end < begin || end === 0;\n const effectiveEnd = wraps ? 24 * 60 : end;\n if (nowMinutes >= begin && nowMinutes < effectiveEnd) {\n return {\n open: true,\n nextChange: { time: p.period_end, label: \"closes\" },\n };\n }\n if (nowMinutes < begin) {\n return {\n open: false,\n nextChange: { time: p.period_begin, label: \"opens\" },\n };\n }\n }\n\n // Find next opening across following days\n for (let i = 1; i <= 7; i++) {\n const wd = ((todayWeekday - 1 + i) % 7) + 1;\n const periods = grouped[wd];\n if (periods.length > 0) {\n return {\n open: false,\n nextChange: { time: periods[0].period_begin, label: \"opens\" },\n };\n }\n }\n\n return { open: false };\n}\n\nexport function getFutureExceptionalPeriods(\n periods: ExceptionalPeriod[] | undefined,\n now: Date = new Date(),\n): ExceptionalPeriod[] {\n if (!periods) return [];\n const t = now.getTime();\n return periods.filter((p) => {\n const end = new Date(p.period_end).getTime();\n return !isNaN(end) && end >= t;\n });\n}\n\nexport function formatExceptionalRange(p: ExceptionalPeriod): string {\n const begin = new Date(p.period_begin);\n const end = new Date(p.period_end);\n if (isNaN(begin.getTime()) || isNaN(end.getTime())) {\n return `${p.period_begin} – ${p.period_end}`;\n }\n const sameDay = dateToYMD(begin) === dateToYMD(end);\n const beginStr = `${dateToYMD(begin)} ${begin\n .toISOString()\n .slice(11, 16)}`;\n const endStr = sameDay\n ? end.toISOString().slice(11, 16)\n : `${dateToYMD(end)} ${end.toISOString().slice(11, 16)}`;\n return `${beginStr} – ${endStr}`;\n}\n","import React from \"react\";\nimport LocationRow from \"../../../components/LocationRow/LocationRow\";\nimport { Clock } from \"../../../components/Icons/Icons\";\nimport { useMapContext } from \"../../../contexts/Map\";\nimport {\n OpeningTimes,\n isOpenNow,\n groupRegularHoursByWeekday,\n formatPeriod,\n getWeekdayLabel,\n getFutureExceptionalPeriods,\n formatExceptionalRange,\n} from \"../../../utils/openingTimes\";\nimport styles from \"./OpeningHours.module.css\";\n\ninterface Props {\n openingTimes?: OpeningTimes;\n chargingWhenClosed?: boolean;\n}\n\nexport const OpeningHours: React.FC<Props> = ({\n openingTimes,\n chargingWhenClosed,\n}) => {\n const { t } = useMapContext();\n if (!openingTimes) return null;\n\n const status = isOpenNow(openingTimes);\n const grouped = groupRegularHoursByWeekday(openingTimes.regular_hours);\n const futureClosings = getFutureExceptionalPeriods(\n openingTimes.exceptional_closings,\n );\n const futureOpenings = getFutureExceptionalPeriods(\n openingTimes.exceptional_openings,\n );\n\n const headerText = openingTimes.twentyfourseven\n ? t(\"location.open24_7\")\n : status.open\n ? t(\"location.openNow\")\n : t(\"location.closedNow\");\n\n const headerHint =\n !openingTimes.twentyfourseven && status.nextChange\n ? status.nextChange.label === \"closes\"\n ? t(\"location.closesAt\", { time: status.nextChange.time })\n : t(\"location.opensAt\", { time: status.nextChange.time })\n : undefined;\n\n const hasBody =\n !openingTimes.twentyfourseven ||\n futureClosings.length > 0 ||\n futureOpenings.length > 0 ||\n !!chargingWhenClosed;\n\n const dayStyle: React.CSSProperties = {\n display: \"flex\",\n fontSize: 12,\n lineHeight: 1.5,\n };\n const dayLabelStyle: React.CSSProperties = {\n minWidth: 56,\n fontWeight: 600,\n };\n const dayValueStyle: React.CSSProperties = { flex: \"1 1 auto\" };\n const exceptionalStyle: React.CSSProperties = {\n fontSize: 11,\n color: \"var(--roadmap-muted-color, #6a6a6a)\",\n marginTop: 6,\n };\n const exceptionalHeaderStyle: React.CSSProperties = {\n fontWeight: 600,\n marginBottom: 2,\n };\n const footnoteStyle: React.CSSProperties = {\n fontSize: 11,\n fontStyle: \"italic\",\n color: \"var(--roadmap-muted-color, #6a6a6a)\",\n marginTop: 6,\n };\n\n return (\n <LocationRow icon={<Clock />} text={headerText} hint={headerHint}>\n {hasBody ? (\n <>\n {!openingTimes.twentyfourseven &&\n [1, 2, 3, 4, 5, 6, 7].map((wd) => {\n const periods = grouped[wd];\n const value =\n periods.length === 0\n ? t(\"location.closed\")\n : periods\n .map((p) => formatPeriod(p.period_begin, p.period_end))\n .join(\", \");\n return (\n <div key={wd} className={styles.day} style={dayStyle}>\n <div className={styles.dayLabel} style={dayLabelStyle}>\n {getWeekdayLabel(t, wd)}\n </div>\n <div className={styles.dayValue} style={dayValueStyle}>\n {value}\n </div>\n </div>\n );\n })}\n {futureClosings.length > 0 && (\n <div className={styles.exceptional} style={exceptionalStyle}>\n <div\n className={styles.exceptionalHeader}\n style={exceptionalHeaderStyle}\n >\n {t(\"location.exceptionalClosings\")}\n </div>\n {futureClosings.map((p, i) => (\n <div key={`c-${i}`}>{formatExceptionalRange(p)}</div>\n ))}\n </div>\n )}\n {futureOpenings.length > 0 && (\n <div className={styles.exceptional} style={exceptionalStyle}>\n <div\n className={styles.exceptionalHeader}\n style={exceptionalHeaderStyle}\n >\n {t(\"location.exceptionalOpenings\")}\n </div>\n {futureOpenings.map((p, i) => (\n <div key={`o-${i}`}>{formatExceptionalRange(p)}</div>\n ))}\n </div>\n )}\n {chargingWhenClosed && (\n <div className={styles.footnote} style={footnoteStyle}>\n {t(\"location.chargingWhenClosed\")}\n </div>\n )}\n </>\n ) : null}\n </LocationRow>\n );\n};\n\nexport default OpeningHours;\n","import React from \"react\";\nimport CarIcon from \"../../../assets/car-icon.svg\";\nimport LocationRow from \"../../../components/LocationRow/LocationRow\";\nimport { useMapContext } from \"../../../contexts/Map\";\nimport { getLocationLabel } from \"../../../utils/formatters\";\nimport { OcpiLocationType } from \"../../../types\";\n\ninterface Props {\n parkingType?: OcpiLocationType;\n}\n\nexport const ParkingType: React.FC<Props> = ({ parkingType }) => {\n const { t } = useMapContext();\n if (!parkingType || parkingType === \"PARKING_TYPE_UNKNOWN\") return null;\n return (\n <LocationRow\n icon={<img src={CarIcon} alt=\"parking icon\" />}\n text={getLocationLabel(t, parkingType)}\n />\n );\n};\n\nexport default ParkingType;\n","import React from \"react\";\nimport CarIcon from \"../../../assets/car-icon.svg\";\nimport LocationRow from \"../../../components/LocationRow/LocationRow\";\n\ninterface Props {\n accessibility?: string;\n}\n\nexport const ChargingAccessibility: React.FC<Props> = ({ accessibility }) => {\n if (!accessibility) return null;\n return (\n <LocationRow\n icon={<img src={CarIcon} alt=\"accessibility icon\" />}\n text={\n accessibility === \"TESLA\"\n ? \"Tesla vehicles only\"\n : \"All electric vehicles\"\n }\n />\n );\n};\n\nexport default ChargingAccessibility;\n","import React from \"react\";\nimport BoltIcon from \"../../../assets/bolt-icon.svg\";\nimport LocationRow from \"../../../components/LocationRow/LocationRow\";\nimport { OcpiEvse } from \"../../../types\";\n\ninterface Props {\n evse: OcpiEvse;\n}\n\nexport const EvseHeader: React.FC<Props> = ({ evse }) => (\n <LocationRow\n icon={<img src={BoltIcon} alt=\"power icon\" />}\n text={evse.evse_id || \"\"}\n hint={evse.physical_reference || undefined}\n />\n);\n\nexport default EvseHeader;\n","import React from \"react\";\nimport LocationRow from \"../../../components/LocationRow/LocationRow\";\nimport StatusDot from \"../../../components/StatusDot/StatusDot\";\nimport { useMapContext } from \"../../../contexts/Map\";\nimport { getStatusLabel, formatNumber } from \"../../../utils/formatters\";\nimport { getColorForStatus } from \"../../../utils/location\";\nimport {\n calculateMaxPower,\n ConnectorPowerType,\n} from \"../../../utils/ocpi\";\nimport { OcpiEvse } from \"../../../types\";\n\ninterface Props {\n evse: OcpiEvse;\n}\n\nexport const EvseStatus: React.FC<Props> = ({ evse }) => {\n const { t, language } = useMapContext();\n const first = evse.connectors[0];\n const maxKw =\n first?.power && first?.connectorPowerType\n ? `${formatNumber(\n language,\n Math.floor(\n calculateMaxPower(\n first as {\n power: {\n maxWatts: number;\n maxVoltage: number;\n maxAmperage: number;\n };\n connectorPowerType: ConnectorPowerType;\n },\n ),\n ),\n )}kW`\n : null;\n const text = [getStatusLabel(t, evse.status), maxKw].filter(Boolean).join(\", \");\n return (\n <LocationRow\n icon={<StatusDot color={getColorForStatus(evse.status)} />}\n text={text}\n />\n );\n};\n\nexport default EvseStatus;\n","import React from \"react\";\nimport LocationRow from \"../../../components/LocationRow/LocationRow\";\nimport { getSocketIcon, getSocketText } from \"../../../utils/formatters\";\nimport { OcpiConnector } from \"../../../types\";\n\ninterface Props {\n connector: OcpiConnector;\n}\n\nexport const ConnectorSocket: React.FC<Props> = ({ connector }) => (\n <LocationRow\n icon={<img src={getSocketIcon(connector)} alt=\"socket type\" />}\n text={getSocketText(connector)}\n />\n);\n\nexport default ConnectorSocket;\n","import React from \"react\";\nimport PricingIcon from \"../../../assets/pricing-icon.svg\";\nimport LocationRow from \"../../../components/LocationRow/LocationRow\";\nimport { useMapContext } from \"../../../contexts/Map\";\n\nexport const ConnectorPricing: React.FC = () => {\n const { t } = useMapContext();\n return (\n <LocationRow\n icon={<img src={PricingIcon} alt=\"pricing\" />}\n text={t(\"evse.pricing\")}\n />\n );\n};\n\nexport default ConnectorPricing;\n","import React from \"react\";\nimport ConnectorTariff from \"../../../components/ConnectorTariff/ConnectorTariff\";\nimport { CdrAdditionalCharge, OcpiTariff, Tariff } from \"../../../types\";\nimport { useMapContext } from \"../../../contexts/Map\";\n\nexport function transformTariff(tariff: OcpiTariff): Tariff {\n if (!tariff?.currency) return null;\n return {\n currency: tariff.currency,\n id: tariff.id,\n country_code: tariff.country_code,\n party_id: tariff.party_id,\n elements: (tariff?.elements || []).map((element) => ({\n priceComponents: (element?.price_components || []).map((component) => ({\n type: (() => {\n switch (component.type) {\n case \"FLAT\":\n return \"FLAT\";\n case \"TIME\":\n return \"TIME\";\n case \"ENERGY\":\n return \"ENERGY\";\n case \"PARKING_TIME\":\n return \"PARKING_TIME\";\n case \"CONGESTION_TIME\":\n return \"CONGESTION_TIME\";\n }\n })() as \"FLAT\" | \"TIME\" | \"ENERGY\" | \"PARKING_TIME\" | \"CONGESTION_TIME\",\n price: component.price,\n vat: component.vat,\n stepSize: component.step_size,\n })),\n ...(element?.restrictions\n ? {\n restrictions: {\n startTime: element?.restrictions?.start_time,\n endTime: element?.restrictions?.end_time,\n startDate: element?.restrictions?.start_date,\n endDate: element?.restrictions?.end_date,\n dayOfWeek: element?.restrictions?.day_of_week,\n minDuration: element?.restrictions?.min_duration,\n maxDuration: element?.restrictions?.max_duration,\n },\n }\n : {}),\n })),\n };\n}\n\ninterface Props {\n tariff: any;\n additionalCharges: CdrAdditionalCharge[];\n}\n\nconst TariffV2: React.FC<Props> = ({ tariff, additionalCharges }) => {\n const { t } = useMapContext();\n\n // Check if tariff has congestion pricing\n const hasCongestionPricing = tariff?.elements?.some((element: any) =>\n element?.price_components?.some((pc: any) => pc.type === \"CONGESTION_TIME\"),\n );\n\n return (\n <>\n {hasCongestionPricing && (\n <div\n style={{\n padding: \"0.8rem\",\n margin: \"0.8rem 0\",\n backgroundColor: \"#FFF4E5\",\n borderLeft: \"3px solid #FF9800\",\n borderRadius: \"4px\",\n fontSize: \"13px\",\n color: \"#663C00\",\n }}\n >\n {t(\"tariff.congestionPricing\")}\n </div>\n )}\n <ConnectorTariff\n tariff={transformTariff(tariff as any)}\n cdrAdditionalCharges={additionalCharges}\n />\n </>\n );\n};\n\nexport default TariffV2;\n","import { DayOfWeek, PriceComponent, Tariff, TariffElement } from \"../types\";\nimport { isBaseTarif } from \"./ocpi\";\n\nconst JS_DAY_TO_OCPI: DayOfWeek[] = [\n \"SUNDAY\",\n \"MONDAY\",\n \"TUESDAY\",\n \"WEDNESDAY\",\n \"THURSDAY\",\n \"FRIDAY\",\n \"SATURDAY\",\n];\n\nfunction timeToMinutes(time: string): number {\n const [h, m] = time.split(\":\").map(Number);\n return h * 60 + (m || 0);\n}\n\nfunction isInTimeWindow(start: string, end: string, now: Date): boolean {\n const cur = now.getHours() * 60 + now.getMinutes();\n const s = timeToMinutes(start);\n const e = timeToMinutes(end);\n if (e < s) return cur >= s || cur < e; // overnight wrap\n return cur >= s && cur < e;\n}\n\nexport function isElementActive(el: TariffElement, now: Date): boolean {\n if (isBaseTarif(el)) return true;\n const r = el.restrictions!;\n if (r.startTime && r.endTime && !isInTimeWindow(r.startTime, r.endTime, now)) {\n return false;\n }\n if (r.dayOfWeek && r.dayOfWeek.length > 0) {\n const today = JS_DAY_TO_OCPI[now.getDay()];\n if (!r.dayOfWeek.includes(today)) return false;\n }\n if (r.startDate) {\n const d = new Date(r.startDate);\n if (!isNaN(d.getTime()) && now < d) return false;\n }\n if (r.endDate) {\n const d = new Date(r.endDate);\n if (!isNaN(d.getTime()) && now > d) return false;\n }\n return true;\n}\n\nexport type ActiveTariffSelection = {\n elements: TariffElement[];\n currency: string;\n};\n\nfunction bucketKey(type: string, el: TariffElement): string {\n const minD = el.restrictions?.minDuration ?? 0;\n const maxD = el.restrictions?.maxDuration ?? 0;\n return `${type}:${minD}:${maxD}`;\n}\n\nexport function getActiveTariffElements(\n tariff: Tariff | null | undefined,\n now: Date = new Date(),\n): ActiveTariffSelection {\n if (!tariff) return { elements: [], currency: \"\" };\n const all = tariff.elements || [];\n const active = all.filter((el) => isElementActive(el, now));\n\n type Winner = { element: TariffElement; pc: PriceComponent; isBase: boolean };\n const byBucket: Record<string, Winner> = {};\n\n active.forEach((el) => {\n const isBase = isBaseTarif(el);\n (el.priceComponents || []).forEach((pc) => {\n const key = bucketKey(pc.type, el);\n const existing = byBucket[key];\n if (!existing || (existing.isBase && !isBase)) {\n byBucket[key] = { element: el, pc, isBase };\n }\n });\n });\n\n const elementToPcs = new Map<TariffElement, PriceComponent[]>();\n const order: TariffElement[] = [];\n Object.values(byBucket).forEach(({ element, pc }) => {\n if (!elementToPcs.has(element)) {\n elementToPcs.set(element, []);\n order.push(element);\n }\n elementToPcs.get(element)!.push(pc);\n });\n\n const elements: TariffElement[] = order.map((el) => ({\n ...el,\n priceComponents: elementToPcs.get(el)!,\n }));\n\n return { elements, currency: tariff.currency || \"\" };\n}\n","import React from \"react\";\nimport { useMapContext } from \"../../../contexts/Map\";\nimport { CdrAdditionalCharge, PriceComponent, TariffElement } from \"../../../types\";\nimport { LabelsType } from \"../../../i18n\";\n\nconst itemsRowStyle: React.CSSProperties = {\n display: \"flex\",\n flexWrap: \"wrap\",\n gap: 6,\n};\n\nconst itemStyle: React.CSSProperties = {\n fontSize: 12,\n lineHeight: 1.3,\n padding: \"1px 8px\",\n borderRadius: 6,\n background:\n \"color-mix(in srgb, var(--roadmap-brand-color, #6102d3) 12%, transparent)\",\n color: \"var(--roadmap-brand-color, #6102d3)\",\n border:\n \"1px solid color-mix(in srgb, var(--roadmap-brand-color, #6102d3) 30%, transparent)\",\n};\n\nconst itemHighlightStyle: React.CSSProperties = itemStyle;\n\nconst STRING_BY_TYPE: Record<string, keyof LabelsType> = {\n ENERGY: \"tariffPriceComponent.energy\",\n TIME: \"tariffPriceComponent.time\",\n FLAT: \"tariffPriceComponent.flat\",\n PARKING_TIME: \"tariffPriceComponent.parkingTime\",\n};\n\nconst DISPLAY_ORDER = [\"ENERGY\", \"TIME\", \"FLAT\", \"PARKING_TIME\"];\n\nfunction formatCurrency(value: number, currency: string): string {\n return new Intl.NumberFormat(undefined, {\n style: \"currency\",\n currency: currency || \"EUR\",\n maximumFractionDigits: 2,\n }).format(value);\n}\n\nfunction priceWithVat(pc: PriceComponent): number {\n const vat = pc.vat ? pc.vat / 100 : 0;\n return pc.price + pc.price * vat;\n}\n\ntype RenderablePc = {\n pc: PriceComponent;\n restrictions?: TariffElement[\"restrictions\"];\n};\n\nfunction isFreeParkingWindow(\n pc: PriceComponent,\n restrictions: TariffElement[\"restrictions\"] | undefined,\n): boolean {\n return (\n pc.type === \"PARKING_TIME\" &&\n (pc.price || 0) === 0 &&\n !!restrictions?.maxDuration &&\n (!restrictions.minDuration || restrictions.minDuration === 0)\n );\n}\n\nfunction collectAndSort(\n elements: TariffElement[],\n skipZero: boolean,\n): RenderablePc[] {\n const all: RenderablePc[] = [];\n elements.forEach((el) => {\n (el.priceComponents || []).forEach((pc) => {\n if (skipZero && (pc.price || 0) <= 0 && !isFreeParkingWindow(pc, el.restrictions)) {\n return;\n }\n all.push({ pc, restrictions: el.restrictions });\n });\n });\n return all.sort((a, b) => {\n const ai = DISPLAY_ORDER.indexOf(a.pc.type);\n const bi = DISPLAY_ORDER.indexOf(b.pc.type);\n if (ai === -1) return 1;\n if (bi === -1) return -1;\n return ai - bi;\n });\n}\n\ninterface Props {\n elements: TariffElement[];\n currency: string;\n skipZero?: boolean;\n highlight?: boolean;\n additionalCharges?: CdrAdditionalCharge[];\n}\n\nexport const TariffChips: React.FC<Props> = ({\n elements,\n currency,\n skipZero = true,\n highlight = false,\n additionalCharges = [],\n}) => {\n const { t } = useMapContext();\n const items = collectAndSort(elements, skipZero);\n const chipStyle = highlight ? itemHighlightStyle : itemStyle;\n if (items.length === 0 && additionalCharges.length === 0) return null;\n return (\n <div style={itemsRowStyle}>\n {items.map(({ pc, restrictions }, i) => {\n if (isFreeParkingWindow(pc, restrictions)) {\n return (\n <div key={`pc-${i}`} style={chipStyle}>\n {t(\"tariffPriceComponent.parkingTimeWait\", {\n minutes: String(Math.floor(restrictions!.maxDuration! / 60)),\n })}\n </div>\n );\n }\n const labelKey = STRING_BY_TYPE[pc.type];\n if (!labelKey) return null;\n return (\n <div key={`pc-${i}`} style={chipStyle}>\n {t(labelKey, {\n total: formatCurrency(priceWithVat(pc), currency),\n })}\n </div>\n );\n })}\n {additionalCharges.map((c) => {\n if (c.type !== \"FLAT_FEE\") return null;\n const total = c.price + (c.vat ? c.price * (c.vat / 100) : 0);\n return (\n <div key={`cdr-${c.id}`} style={chipStyle}>\n {t(\"cdrPrice.flatFee\", {\n total: formatCurrency(total, currency),\n })}\n </div>\n );\n })}\n </div>\n );\n};\n\nexport default TariffChips;\n","import React, { ReactNode } from \"react\";\nimport { CdrAdditionalCharge, TariffElement } from \"../../../types\";\nimport TariffChips from \"./TariffChips\";\n\ninterface Props {\n elements: TariffElement[];\n currency: string;\n label?: ReactNode;\n trailing?: ReactNode;\n highlight?: boolean;\n additionalCharges?: CdrAdditionalCharge[];\n onClick?: () => void;\n}\n\nconst containerStyle: React.CSSProperties = {\n display: \"flex\",\n flexDirection: \"column\",\n gap: 4,\n padding: \"6px 0\",\n};\n\nconst headerStyle: React.CSSProperties = {\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 8,\n fontSize: 12,\n color: \"var(--roadmap-muted-color, #6a6a6a)\",\n};\n\nconst rowStyle: React.CSSProperties = {\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 8,\n};\n\nexport const TariffLine: React.FC<Props> = ({\n elements,\n currency,\n label,\n trailing,\n highlight = false,\n additionalCharges,\n onClick,\n}) => {\n const interactive = !!onClick;\n const containerWithClick: React.CSSProperties = interactive\n ? { ...containerStyle, cursor: \"pointer\", userSelect: \"none\" }\n : containerStyle;\n\n const handleKey = (e: React.KeyboardEvent) => {\n if (!onClick) return;\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onClick();\n }\n };\n\n return (\n <div\n style={containerWithClick}\n role={interactive ? \"button\" : undefined}\n tabIndex={interactive ? 0 : undefined}\n onClick={onClick}\n onKeyDown={interactive ? handleKey : undefined}\n >\n {label != null && <div style={headerStyle}>{label}</div>}\n <div style={rowStyle}>\n <TariffChips\n elements={elements}\n currency={currency}\n highlight={highlight}\n additionalCharges={additionalCharges}\n />\n {trailing}\n </div>\n </div>\n );\n};\n\nexport default TariffLine;\n","import React, { useState } from \"react\";\nimport { useMapContext } from \"../../../contexts/Map\";\nimport { Check } from \"../../../components/Icons/Icons\";\n\ninterface Props {\n type: string;\n country_code: string;\n party_id: string;\n location_id: string;\n evse_uid: string;\n}\n\ntype Status = \"idle\" | \"submitting\" | \"done\" | \"error\";\n\nconst buttonStyle: React.CSSProperties = {\n fontSize: 12,\n fontWeight: 600,\n padding: \"4px 12px\",\n borderRadius: 6,\n cursor: \"pointer\",\n background: \"transparent\",\n color: \"var(--roadmap-brand-color, #6102d3)\",\n border:\n \"1px solid color-mix(in srgb, var(--roadmap-brand-color, #6102d3) 40%, transparent)\",\n};\n\nconst submittingStyle: React.CSSProperties = {\n ...buttonStyle,\n cursor: \"default\",\n opacity: 0.6,\n};\n\nconst doneStyle: React.CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n gap: 6,\n fontSize: 12,\n color: \"var(--roadmap-brand-color, #6102d3)\",\n};\n\nconst errorStyle: React.CSSProperties = {\n fontSize: 11,\n color: \"var(--roadmap-muted-color, #6a6a6a)\",\n marginTop: 6,\n};\n\nexport const ReportProblemButton: React.FC<Props> = ({\n type,\n country_code,\n party_id,\n location_id,\n evse_uid,\n}) => {\n const { t, reportProblem } = useMapContext();\n const [status, setStatus] = useState<Status>(\"idle\");\n\n const submit = async (e: React.MouseEvent) => {\n e.stopPropagation();\n if (status === \"submitting\" || status === \"done\") return;\n setStatus(\"submitting\");\n try {\n await reportProblem?.({\n type,\n country_code,\n party_id,\n location_id,\n evse_uid,\n });\n setStatus(\"done\");\n } catch {\n setStatus(\"error\");\n }\n };\n\n if (status === \"done\") {\n return (\n <div style={doneStyle}>\n <Check />\n <span>{t(\"tariff.reportThanks\")}</span>\n </div>\n );\n }\n\n return (\n <>\n <button\n type=\"button\"\n onClick={submit}\n disabled={status === \"submitting\"}\n style={status === \"submitting\" ? submittingStyle : buttonStyle}\n >\n {t(\"tariff.report\")}\n </button>\n {status === \"error\" && (\n <div style={errorStyle}>{t(\"tariff.reportError\")}</div>\n )}\n </>\n );\n};\n\nexport default ReportProblemButton;\n","import React from \"react\";\nimport { useMapContext } from \"../../../contexts/Map\";\nimport ReportProblemButton from \"./ReportProblemButton\";\n\ninterface Props {\n country_code: string;\n party_id: string;\n location_id: string;\n evse_uid: string;\n}\n\nconst containerStyle: React.CSSProperties = {\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"flex-start\",\n gap: 10,\n padding: \"14px 14px\",\n marginTop: 6,\n borderRadius: 8,\n background:\n \"color-mix(in srgb, var(--roadmap-text-color, #2a2a2a) 4%, transparent)\",\n};\n\nconst textStyle: React.CSSProperties = {\n fontSize: 12,\n fontStyle: \"italic\",\n color: \"var(--roadmap-muted-color, #6a6a6a)\",\n};\n\nexport const NoTariff: React.FC<Props> = ({\n country_code,\n party_id,\n location_id,\n evse_uid,\n}) => {\n const { t } = useMapContext();\n return (\n <div style={containerStyle}>\n <div style={textStyle}>{t(\"tariffPriceComponent.noTariff\")}</div>\n <ReportProblemButton\n type=\"missing_tariff\"\n country_code={country_code}\n party_id={party_id}\n location_id={location_id}\n evse_uid={evse_uid}\n />\n </div>\n );\n};\n\nexport default NoTariff;\n","import React from \"react\";\nimport { ChevronRight } from \"../../../components/Icons/Icons\";\nimport { CdrAdditionalCharge, OcpiTariff } from \"../../../types\";\nimport { transformTariff } from \"./Tariff\";\nimport { getActiveTariffElements } from \"../../../utils/activeTariff\";\nimport TariffLine from \"./TariffLine\";\nimport NoTariff from \"./NoTariff\";\n\ninterface Props {\n tariff?: OcpiTariff;\n additionalCharges?: CdrAdditionalCharge[];\n evseId?: string;\n evseUid: string;\n countryCode: string;\n partyId: string;\n locationId: string;\n locationName: string;\n setView: (view: string, args?: any) => void;\n}\n\nconst chevronStyle: React.CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n color: \"var(--roadmap-muted-color, #6a6a6a)\",\n flex: \"0 0 auto\",\n};\n\nexport const ActiveTariff: React.FC<Props> = ({\n tariff,\n additionalCharges = [],\n evseId,\n evseUid,\n countryCode,\n partyId,\n locationId,\n locationName,\n setView,\n}) => {\n const transformed = tariff ? transformTariff(tariff) : null;\n const { elements: rawElements, currency } =\n getActiveTariffElements(transformed);\n\n const activeElements = rawElements\n .map((el) => ({\n ...el,\n priceComponents: (el.priceComponents || []).filter((pc) => {\n if ((pc.price || 0) > 0) return true;\n if (\n pc.type === \"PARKING_TIME\" &&\n el.restrictions?.maxDuration &&\n (!el.restrictions.minDuration || el.restrictions.minDuration === 0)\n ) {\n return true;\n }\n return false;\n }),\n }))\n .filter((el) => el.priceComponents.length > 0);\n\n const hasActiveTariff = !!transformed && activeElements.length > 0;\n\n if (!hasActiveTariff) {\n return (\n <>\n <NoTariff\n country_code={countryCode}\n party_id={partyId}\n location_id={locationId}\n evse_uid={evseUid}\n />\n {additionalCharges.length > 0 && (\n <TariffLine\n elements={[]}\n currency={currency}\n additionalCharges={additionalCharges}\n />\n )}\n </>\n );\n }\n\n const navigate = () =>\n setView(\"tariffDetails\", {\n tariff,\n additionalCharges,\n locationName,\n evseId,\n evseUid,\n countryCode,\n partyId,\n locationId,\n });\n\n return (\n <TariffLine\n elements={activeElements}\n currency={currency}\n highlight\n additionalCharges={additionalCharges}\n onClick={navigate}\n trailing={\n <span style={chevronStyle}>\n <ChevronRight />\n </span>\n }\n />\n );\n};\n\nexport default ActiveTariff;\n","import React from \"react\";\nimport ConnectorSocket from \"./ConnectorSocket\";\nimport ConnectorPricing from \"./ConnectorPricing\";\nimport ActiveTariff from \"./ActiveTariff\";\nimport {\n CdrAdditionalCharge,\n OcpiConnector,\n OcpiLocation,\n OcpiTariff,\n Tariff as TariffType,\n} from \"../../../types\";\n\ninterface Props {\n connector: OcpiConnector;\n tariffs?: TariffType[];\n cdrAdditionalCharges: CdrAdditionalCharge[];\n location: OcpiLocation;\n evseId?: string;\n evseUid?: string;\n setView: (view: string, args?: any) => void;\n}\n\nexport const Connector: React.FC<Props> = ({\n connector,\n tariffs,\n cdrAdditionalCharges,\n location,\n evseId,\n evseUid,\n setView,\n}) => {\n const tariff = tariffs?.find((tr) => tr.id === connector?.tariff_ids?.[0]);\n\n return (\n <>\n <ConnectorSocket connector={connector} />\n <ConnectorPricing />\n <ActiveTariff\n tariff={tariff as unknown as OcpiTariff}\n additionalCharges={cdrAdditionalCharges}\n evseId={evseId}\n evseUid={evseUid || \"\"}\n countryCode={location.country_code}\n partyId={location.party_id}\n locationId={location.id}\n locationName={location.name}\n setView={setView}\n />\n </>\n );\n};\n\nexport default Connector;\n","import React from \"react\";\nimport EvseHeader from \"./EvseHeader\";\nimport EvseStatus from \"./EvseStatus\";\nimport Connector from \"./Connector\";\nimport { getColorForStatus } from \"../../../utils/location\";\nimport {\n CdrAdditionalCharge,\n OcpiEvse,\n OcpiLocation,\n Tariff as TariffType,\n} from \"../../../types\";\n\ninterface Props {\n evse: OcpiEvse;\n tariffs?: TariffType[];\n cdrAdditionalCharges: CdrAdditionalCharge[];\n location: OcpiLocation;\n setView: (view: string, args?: any) => void;\n}\n\nconst cardStyle: React.CSSProperties = {\n background:\n \"color-mix(in srgb, var(--roadmap-text-color, #2a2a2a) 4%, transparent)\",\n borderRadius: 8,\n padding: \"8px 12px\",\n marginTop: 12,\n};\n\nconst connectorBaseStyle: React.CSSProperties = {\n paddingLeft: 10,\n marginTop: 10,\n};\n\nexport const Evse: React.FC<Props> = ({\n evse,\n tariffs,\n cdrAdditionalCharges,\n location,\n setView,\n}) => {\n const statusColor = getColorForStatus(evse.status);\n const connectorStyle: React.CSSProperties = {\n ...connectorBaseStyle,\n borderLeft: `3px solid ${statusColor}`,\n borderRadius: 2,\n };\n\n return (\n <div style={cardStyle}>\n <EvseHeader evse={evse} />\n <EvseStatus evse={evse} />\n {evse.connectors.map((connector, i) => (\n <div key={`connector-${i}`} style={connectorStyle}>\n <Connector\n connector={connector}\n tariffs={tariffs}\n cdrAdditionalCharges={cdrAdditionalCharges}\n location={location}\n evseId={evse.evse_id}\n evseUid={evse.uid}\n setView={setView}\n />\n </div>\n ))}\n </div>\n );\n};\n\nexport default Evse;\n","import React from \"react\";\nimport { useMapContext } from \"../../../contexts/Map\";\nimport { OcpiDisplayText } from \"../../../types\";\n\ninterface Props {\n directions?: OcpiDisplayText[];\n}\n\nconst containerStyle: React.CSSProperties = {\n fontSize: 12,\n fontStyle: \"italic\",\n lineHeight: 1.5,\n color: \"var(--roadmap-text-color, #2a2a2a)\",\n padding: \"12px 0 12px 12px\",\n margin: \"8px 0\",\n borderLeft:\n \"3px solid color-mix(in srgb, var(--roadmap-text-color, #2a2a2a) 20%, transparent)\",\n};\n\nfunction pickText(\n directions: OcpiDisplayText[],\n language: string,\n): string | undefined {\n if (!directions || directions.length === 0) return undefined;\n const lang = (language || \"\").toLowerCase();\n const match = directions.find((d) => d.language?.toLowerCase() === lang);\n if (match) return match.text;\n const en = directions.find((d) => d.language?.toLowerCase() === \"en\");\n return (en || directions[0])?.text;\n}\n\nexport const Directions: React.FC<Props> = ({ directions }) => {\n const { language } = useMapContext();\n const text = pickText(directions || [], language);\n if (!text) return null;\n return <div style={containerStyle}>{text}</div>;\n};\n\nexport default Directions;\n","import React from \"react\";\nimport styles from \"../locations.module.css\";\nimport LocationHeader from \"./LocationHeader\";\nimport AvailabilitySummary from \"./AvailabilitySummary\";\nimport OperatorSection from \"./OperatorSection\";\nimport OpeningHours from \"./OpeningHours\";\nimport ParkingType from \"./ParkingType\";\nimport ChargingAccessibility from \"./ChargingAccessibility\";\nimport Evse from \"./Evse\";\nimport Directions from \"./Directions\";\nimport { useMapContext } from \"../../../contexts/Map\";\nimport { OcpiLocation } from \"../../../types\";\n\ninterface Props {\n currentLocation: OcpiLocation;\n setView: (view: string, args?: any) => void;\n}\n\nexport const Location: React.FC<Props> = ({ currentLocation, setView }) => {\n const { options } = useMapContext();\n\n return (\n <div className={styles.container}>\n {options.context === \"cpo\" && (\n <div className={styles.publishingMode}>\n {currentLocation?.publish ? \"Public location\" : \"Private location\"}\n </div>\n )}\n\n <Directions directions={currentLocation.directions} />\n <LocationHeader location={currentLocation} />\n <AvailabilitySummary evses={currentLocation.evses} />\n\n <OperatorSection\n operator={currentLocation.operator}\n suboperator={currentLocation.suboperator || currentLocation.subOperator}\n fallbackOperatorName={\n currentLocation.operator_name || currentLocation.operatorName\n }\n fallbackSuboperatorName={\n currentLocation.suboperator_name || currentLocation.suboperatorName\n }\n />\n\n <OpeningHours\n openingTimes={currentLocation.opening_times}\n chargingWhenClosed={currentLocation.charging_when_closed}\n />\n\n <ParkingType parkingType={currentLocation.parkingType} />\n <ChargingAccessibility accessibility={currentLocation.charging_accessibility} />\n\n {currentLocation.evses?.map((evse) => (\n <Evse\n key={`${evse.evse_id}-${evse.uid}`}\n evse={evse}\n tariffs={currentLocation.tariffs}\n cdrAdditionalCharges={currentLocation.cdrAdditionalCharges || []}\n location={currentLocation}\n setView={setView}\n />\n ))}\n </div>\n );\n};\n\nexport default Location;\n","import React, { useEffect, useState } from \"react\";\nimport styles from \"./locations.module.css\";\nimport LocationPlaceholder from \"../../components/LocationPlaceholder/LocationPlaceholder\";\nimport { ChevronLeft, ChevronRight } from \"../../components/Icons/Icons\";\nimport Debug from \"../../components/Debug/Debug\";\nimport { useMapContext } from \"../../contexts/Map\";\nimport { useStackContext } from \"../../components/Stack/Stack\";\nimport LocationDetailsV1 from \"./LocationDetailsV1\";\nimport Location from \"./v2/Location\";\nimport { OcpiLocation } from \"../../types\";\n\ninterface Props {}\n\nconst Locations: React.FC<Props> = () => {\n const { setView } = useStackContext();\n const { locations, locationsStatus, options } = useMapContext();\n const [locationIndex, setLocationIndex] = useState(0);\n\n useEffect(() => {\n setLocationIndex(0);\n }, [locations]);\n\n const currentLocation = locations[locationIndex];\n\n if (locationsStatus.type === \"loading\" || !currentLocation) {\n return (\n <div className={styles.container}>\n <LocationPlaceholder />\n </div>\n );\n }\n\n const { evses = [], cdrAdditionalCharges } = currentLocation;\n\n const canNext = locationIndex < locations.length - 1;\n const canPrev = locationIndex > 0;\n\n const debugMode = window.location?.search?.includes(\"debug\");\n\n const label = () => {\n switch (options.version) {\n case \"v2\":\n return [currentLocation?.address, currentLocation?.city];\n default:\n //@ts-ignore\n return [currentLocation?.address, currentLocation?.city];\n }\n };\n const isV2 = options.version === \"v2\";\n\n return (\n <>\n {debugMode && currentLocation && <Debug location={currentLocation} />}\n <div className={styles.headerContainer}>\n <div className={styles.header}>\n {locations.length > 1 && (\n <div className={styles.pagingation}>\n <span>\n {locationIndex + 1} / {locations.length}\n </span>\n\n <button\n disabled={!canPrev}\n onClick={() => {\n setLocationIndex(Math.max(0, locationIndex - 1));\n }}\n >\n <ChevronLeft />\n </button>\n <button\n disabled={!canNext}\n onClick={() =>\n setLocationIndex(\n Math.min(locations.length - 1, locationIndex + 1),\n )\n }\n >\n <ChevronRight />\n </button>\n </div>\n )}\n {label().filter(Boolean).join(\", \")}\n </div>\n </div>\n {!isV2 && (\n <LocationDetailsV1\n setView={setView}\n cdrAdditionalCharges={cdrAdditionalCharges}\n currentLocation={currentLocation}\n evses={evses}\n />\n )}\n {isV2 && (\n <Location\n setView={setView}\n currentLocation={currentLocation as unknown as OcpiLocation}\n />\n )}\n </>\n );\n};\n\nexport default Locations;\n","import React from \"react\";\n\nimport styles from \"./BackButton.module.css\";\n\nimport { ChevronLeft } from \"../Icons/Icons\";\nimport { useMapContext } from \"../../contexts/Map\";\n\nexport default function BackButton({ onClick = () => {} }) {\n const { t } = useMapContext();\n return (\n <button onClick={onClick} className={styles.backButton}>\n <ChevronLeft />\n {t(\"backButton.backTo\")}\n </button>\n );\n}\n","import React, { useEffect, useState, useTransition } from \"react\";\n\nimport { useStackContext } from \"../../components/Stack/Stack\";\n\nimport BackButton from \"../../components/BackButton/BackButton\";\nimport { useMapContext } from \"../../contexts/Map\";\nimport styles from \"./locations.module.css\";\n\nimport BoltIcon from \"../../assets/bolt-icon.svg\";\n\nexport default function TariffNote() {\n const { t } = useMapContext();\n const { current, setView } = useStackContext();\n const { notes = [], evseId, locationName } = current?.args || {};\n\n return (\n <>\n <div className={styles.headerContainer}>\n <div\n className={styles.header}\n onClick={() => setView(\"locations\")}\n style={{ cursor: \"pointer\" }}\n >\n <BackButton />\n {locationName?.text || locationName}\n </div>\n </div>\n <div className={styles.container}>\n <div className={styles.subheader}>{t(\"tariffNote.subHeader\")}</div>\n\n {evseId && (\n <div className={styles.row}>\n <img className={styles.icon} src={BoltIcon} alt=\"power icon\" />\n <div className={styles.text}>{evseId}</div>\n </div>\n )}\n\n {notes.map((note) => (\n <p className={styles.note} key={note}>\n {note}\n </p>\n ))}\n </div>\n </>\n );\n}\n","import { useStackContext } from \"../../components/Stack/Stack\";\n\nimport BackButton from \"../../components/BackButton/BackButton\";\nimport { useMapContext } from \"../../contexts/Map\";\nimport styles from \"./locations.module.css\";\nimport { Info } from \"../../components/Icons/Icons\";\nimport BoltIcon from \"../../assets/bolt-icon.svg\";\nimport ConnectorTariff from \"../../components/ConnectorTariff/ConnectorTariff\";\nimport TariffV2 from \"./v2/Tariff\";\n\nexport default function DynamicTariffs() {\n const { t } = useMapContext();\n const { current, setView } = useStackContext();\n const { connector, tariff, additionalCharges, locationName, evseId, notes } =\n current?.args || {};\n\n const connectorTariff = tariff || connector?.tariff;\n\n if (!connectorTariff) return null;\n\n return (\n <>\n <div className={styles.headerContainer}>\n <div\n className={styles.header}\n onClick={() => setView(\"locations\")}\n style={{ cursor: \"pointer\" }}\n >\n <BackButton />\n {locationName}\n </div>\n </div>\n <div className={styles.container}>\n <div className={styles.subheader}>{t(\"dynamicTariffs.subHeader\")}</div>\n <div className={styles.row}>\n <img className={styles.icon} src={BoltIcon} alt=\"power icon\" />\n <div className={styles.text}>{evseId}</div>\n </div>\n {tariff && (\n <TariffV2 tariff={tariff} additionalCharges={additionalCharges} />\n )}\n {connector.tariff && (\n <ConnectorTariff tariff={connector.tariff} compact={false} />\n )}\n <div\n className={styles.tariffNoteLink}\n onClick={() => {\n setView(\"tariffNote\", {\n locationName: locationName,\n evseId: evseId,\n notes: notes,\n });\n }}\n >\n <Info /> {t(\"tariffPriceComponent.viewTariff\")}\n </div>\n </div>\n </>\n );\n}\n","import React from \"react\";\nimport { useStackContext } from \"../../../components/Stack/Stack\";\nimport BackButton from \"../../../components/BackButton/BackButton\";\nimport LocationRow from \"../../../components/LocationRow/LocationRow\";\nimport BoltIcon from \"../../../assets/bolt-icon.svg\";\nimport { useMapContext } from \"../../../contexts/Map\";\nimport { transformTariff } from \"./Tariff\";\nimport TariffLine from \"./TariffLine\";\nimport NoTariff from \"./NoTariff\";\nimport { CdrAdditionalCharge, TariffElement } from \"../../../types\";\nimport {\n getSchedule,\n getDynamicTariff,\n isBaseTarif,\n} from \"../../../utils/ocpi\";\nimport styles from \"../locations.module.css\";\n\nconst defaultTimeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n\nconst sectionStyle: React.CSSProperties = {\n display: \"flex\",\n flexDirection: \"column\",\n gap: 4,\n marginTop: 14,\n};\n\nconst sectionHeaderStyle: React.CSSProperties = {\n fontSize: 12,\n fontWeight: 600,\n textTransform: \"capitalize\",\n lineHeight: 1.4,\n};\n\nconst descriptionStyle: React.CSSProperties = {\n fontSize: 12,\n lineHeight: 1.5,\n color: \"var(--roadmap-text-color, #2a2a2a)\",\n marginTop: 8,\n};\n\nconst metaStyle: React.CSSProperties = {\n fontSize: 11,\n color: \"var(--roadmap-muted-color, #6a6a6a)\",\n marginTop: 6,\n};\n\nfunction formatTime(minutes: number): string {\n const date = new Date(0);\n date.setHours(Math.floor(minutes / 60), minutes % 60, 0, 0);\n return date.toLocaleTimeString(\"nl\", {\n hour: \"2-digit\",\n minute: \"2-digit\",\n });\n}\n\nfunction daysForLocale(language: string): Record<string, string> {\n const { format } = new Intl.DateTimeFormat(language, { weekday: \"long\" });\n return [\n \"SUNDAY\",\n \"MONDAY\",\n \"TUESDAY\",\n \"WEDNESDAY\",\n \"THURSDAY\",\n \"FRIDAY\",\n \"SATURDAY\",\n ].reduce(\n (acc, day, index) => {\n acc[day] = format(new Date(Date.UTC(2023, 9, index + 1)));\n return acc;\n },\n {} as Record<string, string>,\n );\n}\n\nfunction elementHasPaidComponents(el: TariffElement): boolean {\n return (el.priceComponents || []).some((pc) => {\n if ((pc.price || 0) > 0) return true;\n // Keep zero-priced PARKING_TIME with maxDuration — it represents the free parking window.\n if (\n pc.type === \"PARKING_TIME\" &&\n el.restrictions?.maxDuration &&\n (!el.restrictions.minDuration || el.restrictions.minDuration === 0)\n ) {\n return true;\n }\n return false;\n });\n}\n\nfunction pickAltText(\n altTexts: Array<{ language: string; text: string }> | undefined,\n language: string,\n): string | undefined {\n if (!altTexts || altTexts.length === 0) return undefined;\n const match = altTexts.find(\n (a) => a.language?.toLowerCase() === language?.toLowerCase(),\n );\n return (match || altTexts[0])?.text;\n}\n\nfunction formatLastUpdated(iso: string | undefined, language: string): string | undefined {\n if (!iso) return undefined;\n const d = new Date(iso);\n if (isNaN(d.getTime())) return undefined;\n return new Intl.DateTimeFormat(language, {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n }).format(d);\n}\n\nexport default function TariffDetails() {\n const { t, language } = useMapContext();\n const { current, setView } = useStackContext();\n const {\n tariff,\n additionalCharges,\n locationName,\n evseId,\n evseUid,\n countryCode,\n partyId,\n locationId,\n } = current?.args || {};\n\n if (!tariff) return null;\n const transformed = transformTariff(tariff);\n const reportProps = {\n country_code: countryCode || tariff.country_code || \"\",\n party_id: partyId || tariff.party_id || \"\",\n location_id: locationId || \"\",\n evse_uid: evseUid || \"\",\n };\n\n const description = pickAltText(tariff.tariff_alt_text, language);\n const lastUpdated = formatLastUpdated(tariff.last_updated, language);\n\n const renderHeader = () => (\n <div className={styles.headerContainer}>\n <div\n className={styles.header}\n onClick={() => setView(\"locations\")}\n style={{ cursor: \"pointer\" }}\n >\n <BackButton />\n {locationName}\n </div>\n </div>\n );\n\n if (!transformed) {\n return (\n <>\n {renderHeader()}\n <div className={styles.container}>\n <NoTariff {...reportProps} />\n </div>\n </>\n );\n }\n\n const elements = (transformed.elements || []).filter(\n elementHasPaidComponents,\n );\n const currency = transformed.currency || \"\";\n const charges: CdrAdditionalCharge[] = additionalCharges || [];\n\n const baseElements = elements.filter(isBaseTarif);\n const dynamicTariffs = getDynamicTariff({\n elements,\n limit: 40,\n now: new Date(),\n });\n const scheduledTariffs = dynamicTariffs.length\n ? []\n : getSchedule(elements, defaultTimeZone, new Date());\n\n const isBaseActive = !scheduledTariffs.some((s) => s.isActive);\n const i18nDays = daysForLocale(language);\n\n return (\n <>\n {renderHeader()}\n <div className={styles.container}>\n <div className={styles.subheader}>{t(\"tariff.fullDetailsHeader\")}</div>\n {evseId && (\n <LocationRow\n icon={<img src={BoltIcon} alt=\"power icon\" />}\n text={evseId}\n />\n )}\n\n {description && <div style={descriptionStyle}>{description}</div>}\n {lastUpdated && (\n <div style={metaStyle}>\n {t(\"tariff.lastUpdated\", { date: lastUpdated })}\n </div>\n )}\n\n {baseElements.length > 0 && (\n <div style={sectionStyle}>\n <TariffLine\n elements={baseElements}\n currency={currency}\n highlight={scheduledTariffs.length > 0 && isBaseActive}\n additionalCharges={charges}\n />\n </div>\n )}\n\n {scheduledTariffs.map((schedule) => (\n <div key={schedule.days.join(\"-\")} style={sectionStyle}>\n <div style={sectionHeaderStyle}>\n {schedule.days.map((d) => i18nDays[d]).join(\" – \")}\n </div>\n {schedule.items.map((item, i) => (\n <TariffLine\n key={i}\n elements={item.elements || []}\n currency={currency}\n highlight={!!item.isActive}\n label={\n !item.isFullDay\n ? `${formatTime(item.startTime)} – ${formatTime(item.endTime)}`\n : undefined\n }\n />\n ))}\n </div>\n ))}\n\n {dynamicTariffs.map((dyn, i) => (\n <div key={i} style={sectionStyle}>\n <div style={sectionHeaderStyle}>\n {t(\"tariffPriceComponent.dynamicTariffHeader\", {\n date: new Intl.DateTimeFormat(language, {\n weekday: \"long\",\n month: \"short\",\n day: \"numeric\",\n }).format(dyn.date),\n })}\n </div>\n {dyn.items.map((item, j) => (\n <TariffLine\n key={j}\n elements={item.elements || []}\n currency={currency}\n highlight={!!item.isActive}\n label={`${formatTime(item.startTime)} – ${formatTime(item.endTime)}`}\n />\n ))}\n </div>\n ))}\n\n {scheduledTariffs.length === 0 &&\n dynamicTariffs.length === 0 &&\n baseElements.length === 0 && <NoTariff {...reportProps} />}\n </div>\n </>\n );\n}\n","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20width='10'%20height='11'%20viewBox='0%200%2010%2011'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M6.48751%205.99758L9.85376%202.63133C10.0484%202.43664%2010.0484%202.1207%209.85376%201.9257L9.07157%201.14351C8.87688%200.948826%208.56095%200.948826%208.36595%201.14351L5.00001%204.51008L1.63376%201.14383C1.43907%200.949138%201.12313%200.949138%200.928135%201.14383L0.14626%201.9257C-0.0484277%202.12039%20-0.0484277%202.43633%200.14626%202.63133L3.51251%205.99758L0.14626%209.36383C-0.0484277%209.55851%20-0.0484277%209.87445%200.14626%2010.0695L0.928447%2010.8516C1.12313%2011.0463%201.43907%2011.0463%201.63407%2010.8516L5.00001%207.48508L8.36626%2010.8513C8.56095%2011.046%208.87688%2011.046%209.07188%2010.8513L9.85407%2010.0691C10.0488%209.87445%2010.0488%209.55851%209.85407%209.36351L6.48751%205.99758Z'%20fill='black'/%3e%3c/svg%3e\"","import React from \"react\";\n\nimport CloseIcon from \"../../assets/close-icon.svg\";\nimport styles from \"./CloseButton.module.css\";\n\nexport default function CloseButton({ onClick }) {\n return (\n <button onClick={onClick} className={styles.closeButton}>\n <img src={CloseIcon} />\n </button>\n );\n}\n","import React, { useState } from \"react\";\n\nimport Locations from \"./Locations\";\nimport TariffNote from \"./TariffNote\";\nimport DynamicTariff from \"./DynamicTariffs\";\nimport TariffDetails from \"./v2/TariffDetails\";\nimport Stack from \"../../components/Stack\";\nimport CloseButton from \"../../components/CloseButton/CloseButton\";\nimport SideBarContainer from \"../../components/SidebarContainer/SidebarContainer\";\nimport { useStackContext } from \"../../components/Stack/Stack\";\n\nexport default function LocationsScreeen() {\n const [view, setView] = useState<string>(\"locations\");\n const { setView: setParentView } = useStackContext();\n\n return (\n <Stack name=\"locations\" currentView={view} onViewChange={setView}>\n <Stack.View name=\"locations\">\n <SideBarContainer>\n <CloseButton onClick={() => setParentView(\"none\")} />\n <Locations />\n </SideBarContainer>\n </Stack.View>\n\n <Stack.View name=\"tariffNote\">\n <SideBarContainer>\n <TariffNote />\n </SideBarContainer>\n </Stack.View>\n <Stack.View name=\"dynamicTariff\">\n <SideBarContainer>\n <DynamicTariff />\n </SideBarContainer>\n </Stack.View>\n <Stack.View name=\"tariffDetails\">\n <SideBarContainer>\n <TariffDetails />\n </SideBarContainer>\n </Stack.View>\n </Stack>\n );\n}\n","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20width='16'%20height='16'%20viewBox='0%200%2016%2016'%20fill='currentColor'%20xmlns='http://www.w3.org/2000/svg'%20%3e%3cpath%20d='M14.4985%200H1.50178C0.169343%200%20-0.502939%201.61659%200.441124%202.56066L5.5%207.62131V13C5.5%2013.4721%205.72228%2013.9167%206.1%2014.25L8.1%2015.7208C9.07728%2016.4038%2010.5%2015.7689%2010.5%2014.5208V7.62131L15.5592%202.56066C16.5013%201.6185%2015.8336%200%2014.4985%200ZM9%207V14.5L7%2013V7L1.5%201.5H14.5L9%207Z'%20fill='currentColor'%20/%3e%3c/svg%3e\"","import React, { useEffect } from \"react\";\n\nimport { useMapContext } from \"./contexts/Map\";\n\nimport Stack from \"./components/Stack\";\n\nimport styles from \"./router.module.css\";\nimport SearchInput from \"./components/SearchInput/SearchInput\";\n\nimport Filters from \"./screens/Filters\";\nimport Locations from \"./screens/Locations\";\n\nimport filterIcon from \"./assets/filter-icon.svg\";\n\nimport CloseButton from \"./components/CloseButton/CloseButton\";\nimport SideBarContainer from \"./components/SidebarContainer/SidebarContainer\";\n\nimport { hasFilters } from \"./utils/filters\";\n\nexport default function Controls() {\n const { locationIds, fetchLocations, filters, isSearching } = useMapContext();\n const [view, setView] = React.useState<string>(\"none\");\n\n useEffect(() => {\n if (locationIds.length > 0) {\n setView(\"locations\");\n }\n }, [locationIds, setView]);\n\n return (\n <div className={styles.container}>\n <div className={styles.controlsContainer}>\n <SearchInput\n onFocus={() => {\n setView(\"none\");\n }}\n />\n\n <div\n className={styles.filterButton}\n onClick={() => {\n setView(\"filters\");\n }}\n >\n {isSearching ?? false ? (\n <div className={styles.spinner}></div>\n ) : (\n <img className={styles.filterIcon} src={filterIcon} />\n )}\n {hasFilters(filters) && !(isSearching ?? false) && (\n <span className={styles.filterCounter}></span>\n )}\n </div>\n </div>\n\n <div className={styles.stackContainer}>\n <Stack\n name=\"router\"\n currentView={view}\n onViewChange={(view) => {\n setView(view);\n }}\n >\n <Stack.View name=\"locations\">\n <Locations />\n </Stack.View>\n <Stack.View name=\"filters\">\n <SideBarContainer>\n <CloseButton onClick={() => setView(\"none\")} />\n <Filters />\n </SideBarContainer>\n </Stack.View>\n </Stack>\n </div>\n </div>\n );\n}\n","import React, { useEffect } from \"react\";\nimport { createRoot, Root } from \"react-dom/client\";\nimport Boot from \"./Boot\";\nimport { MapProvider } from \"./contexts/Map\";\nimport Map from \"./components/Map/Map\";\nimport Router from \"./Router\";\nimport { RoadMapOptions } from \"./types\";\nimport { useRef } from \"react\";\n\nexport default function RoadMap(props: RoadMapOptions) {\n if (!props.shadowRoot && props?.theming?.backgroundColor) {\n return <ShadowMapWrapper {...props} />;\n }\n return (\n <MapProvider options={props} language={props.language}>\n <Boot height={props?.height}>\n <Router />\n <Map />\n </Boot>\n </MapProvider>\n );\n}\n\n// This wrapper is used to create a shadow root if one is not provided by the end user\nconst ShadowMapWrapper: React.FC<RoadMapOptions> = (props) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const rootRef = useRef<Root | null>(null);\n const shadowRootRef = useRef<ShadowRoot | null>(null);\n const isInitializedRef = useRef<boolean>(false);\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container || isInitializedRef.current) return;\n\n const shadowRoot = container.attachShadow({ mode: \"open\" });\n shadowRootRef.current = shadowRoot;\n\n // We default to the most recent version of the sdk stylesheet\n let styleHref = `https://mapsdk.road.io/styles.css`;\n if (props.sdkRoot) {\n styleHref = props.sdkRoot + \"/styles.css\";\n }\n\n const link = document.createElement(\"link\");\n link.rel = \"stylesheet\";\n link.type = \"text/css\";\n link.href = styleHref;\n\n // Append link to shadow root BEFORE rendering\n shadowRoot.appendChild(link);\n\n // Create React root\n const root = createRoot(shadowRoot);\n rootRef.current = root;\n isInitializedRef.current = true;\n\n return () => {\n if (rootRef.current) {\n rootRef.current.unmount();\n rootRef.current = null;\n }\n shadowRootRef.current = null;\n isInitializedRef.current = false;\n };\n }, []);\n\n useEffect(() => {\n if (!rootRef.current || !shadowRootRef.current) return;\n const roadMapElement = React.createElement(RoadMap, {\n ...props,\n shadowRoot: shadowRootRef.current,\n });\n rootRef.current.render(roadMapElement);\n }, [props]);\n\n return <div ref={containerRef} style={{ height: \"100%\", width: \"100%\" }} />;\n};\n"],"names":["useOnScreen","ref","wasIntersecting","setWasIntersecting","useState","observer","useMemo","entry","useEffect","getLanguage","lng","language","en","nl","de","fr","it","es","strings","request","url","options","response","e","_fetchGeohashes","apiRoot","version","authorization","limitToLocationIds","precision","bbox","props","_fetchTariffs","origin","ids","_fetchLocations","status","_reportProblem","type","country_code","party_id","location_id","evse_uid","loadRemoteConfig","MapContext","createContext","key","MapProvider","children","setOptions","filterConfiguration","setFilterConfiguration","error","setError","place","setPlace","position","setPosition","filters","setFilters","locationIds","setLocationsIds","locations","setLocations","locationsStatus","setLocationsStatus","isSearching","setIsSearching","isDebug","t","match","p1","mapKey","passThroughSearchOptions","fetchGeohashes","args","fetchLocations","fetchTariffs","reportProblem","onFetchLocations","data","location","rc","err","theming","shadowRoot","style","isReady","providerValue","useMapContext","context","React","Boot","useContext","useRef","loaded","jsxs","styles","jsx","__awaiter","thisArg","_arguments","P","generator","adopt","value","resolve","reject","fulfilled","step","rejected","result","getDefaultExportFromCjs","x","fastDeepEqual","equal","a","b","length","i","keys","isEqual","DEFAULT_ID","LoaderStatus","Loader","apiKey","authReferrerPolicy","channel","client","id","libraries","mapIds","nonce","region","retries","script","name","fn","_a","_b","params","g","h","k","p","c","l","q","m","d","r","u","f","n","libraryPromises","library","event","delay","cb","instance","getLoader","loader","base32","Geohash","lat","lon","hash","posn","idx","bit","evenBit","geohash","latMin","latMax","lonMin","lonMax","lonMid","latMid","bounds","chr","bitN","direction","neighbour","border","lastCh","parent","createOverlay","container","pane","Overlay","point","OverlayView","map","zIndex","div","overlay","createPortal","getColorForStatus","formatter","formatNumber","num","CustomMarker","onClick","highlight","handleClick","useCallback","styleColor","geoHashZoom","zoomToHashChars","zoom","getNormalizedBounds","zoomLevel","mapSWPoint","mapNEPoint","SWGeohash","geohashSWBounds","latStep","lngStep","neLat","neLng","isSameBounds","bounds1","bounds2","MapMarkers","onMarkerClicked","setData","mapConfig","setMapConfig","currentZoomLevel","currentBounds","newZoomLevel","newMapConfig","appendData","newData","oldData","o","ignore","_onMarkerClicked","Fragment","item","MapWrapper","setMap","mapContainerRef","Map","_extends","_objectWithoutPropertiesLoose","_setPrototypeOf","_inheritsLoose","setPrototypeOf","v","w","y","z","A","reactIs_production_min","hasSymbol","REACT_ELEMENT_TYPE","REACT_PORTAL_TYPE","REACT_FRAGMENT_TYPE","REACT_STRICT_MODE_TYPE","REACT_PROFILER_TYPE","REACT_PROVIDER_TYPE","REACT_CONTEXT_TYPE","REACT_ASYNC_MODE_TYPE","REACT_CONCURRENT_MODE_TYPE","REACT_FORWARD_REF_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_MEMO_TYPE","REACT_LAZY_TYPE","REACT_BLOCK_TYPE","REACT_FUNDAMENTAL_TYPE","REACT_RESPONDER_TYPE","REACT_SCOPE_TYPE","isValidElementType","typeOf","object","$$typeof","$$typeofType","AsyncMode","ConcurrentMode","ContextConsumer","ContextProvider","Element","ForwardRef","Lazy","Memo","Portal","Profiler","StrictMode","Suspense","hasWarnedAboutDeprecatedIsAsyncMode","isAsyncMode","isConcurrentMode","isContextConsumer","isContextProvider","isElement","isForwardRef","isFragment","isLazy","isMemo","isPortal","isProfiler","isStrictMode","isSuspense","reactIs_development","reactIsModule","require$$0","require$$1","getOwnPropertySymbols","hasOwnProperty","propIsEnumerable","toObject","val","shouldUseNative","test1","test2","order2","test3","letter","objectAssign","target","source","from","to","symbols","s","ReactPropTypesSecret","ReactPropTypesSecret_1","has","printWarning","loggedTypeFailures","text","message","checkPropTypes","typeSpecs","values","componentName","getStack","typeSpecName","ex","stack","checkPropTypes_1","ReactIs","assign","require$$2","require$$3","require$$4","emptyFunctionThatReturnsNull","factoryWithTypeCheckers","isValidElement","throwOnDirectAccess","ITERATOR_SYMBOL","FAUX_ITERATOR_SYMBOL","getIteratorFn","maybeIterable","iteratorFn","ANONYMOUS","ReactPropTypes","createPrimitiveTypeChecker","createAnyTypeChecker","createArrayOfTypeChecker","createElementTypeChecker","createElementTypeTypeChecker","createInstanceTypeChecker","createNodeChecker","createObjectOfTypeChecker","createEnumTypeChecker","createUnionTypeChecker","createShapeTypeChecker","createStrictShapeTypeChecker","is","PropTypeError","createChainableTypeChecker","validate","manualPropTypeCallCache","manualPropTypeWarningCount","checkType","isRequired","propName","propFullName","secret","cacheKey","chainedCheckType","expectedType","propValue","propType","getPropType","preciseType","getPreciseType","typeChecker","expectedClass","expectedClassName","actualClassName","getClassName","expectedValues","valuesString","arrayOfTypeCheckers","checker","getPostfixForTypeWarning","expectedTypes","checkerResult","expectedTypesMessage","isNode","invalidValidatorError","shapeTypes","allKeys","iterator","isSymbol","emptyFunction","emptyFunctionWithReset","factoryWithThrowingShims","shim","getShim","propTypesModule","hasClass","element","className","addClass","replaceClassName","origClass","classToRemove","removeClass","config","timeoutsShape","PropTypes","classNamesShape","TransitionGroupContext","forceReflow","node","UNMOUNTED","EXITED","ENTERING","ENTERED","EXITING","Transition","_React$Component","_this","parentGroup","appear","initialStatus","_ref","prevState","nextIn","_proto","prevProps","nextStatus","timeout","exit","enter","mounting","ReactDOM","_this2","appearing","_ref2","maybeNode","maybeAppearing","timeouts","enterTimeout","_this3","nextState","callback","_this4","active","handler","doesNotHaveTimeoutOrListener","_ref3","maybeNextCallback","_this$props","childProps","pt","_len","_key","noop","_addClass","classes","addOneClass","removeOneClass","CSSTransition","_this$resolveArgument","_this$resolveArgument2","_this$resolveArgument3","_this$resolveArgument4","_this$resolveArgument5","_this$resolveArgument6","classNames","isStringClassNames","prefix","baseClassName","activeClassName","doneClassName","phase","_this$getClassNames","_this$appliedClasses$","_leaveRenders","_enterRenders","areChildrenDifferent","oldChildren","newChildren","modes","callHook","_element$props","leaveRenders","current","changeState","enterRenders","_ref4","SwitchTransition","state","mode","_this$state","component","StackView","StackContext","useStackContext","Stack","currentView","onViewChange","elements","createRef","currentRef","setCurrentRef","View","setArgs","contextValue","view","opt","done","SearchInput","onFocus","inputRef","places","autocomplete","CheckboxToggle","checked","onChange","isChecked","setIsChecked","onChangeCallback","Range","ticks","convertValue","tick","bgSize","MultiSelect","preferredValues","placeholder","disabled","isOpen","setIsOpen","inputValue","setInputValue","highlightedIndex","setHighlightedIndex","containerRef","preferredSet","preferred","others","filtered","flatItems","selectedOptions","openMenu","closeMenu","selectItem","next","removeValue","handleInputKeyDown","handleInputBlur","toggleDropdown","renderOption","option","isLast","selected","SelectField","onBlur","handleChange","selectedValue","ICON_IEC_62196_T2","ICON_IEC_62196_T2_COMBO","ICON_IEC_62196_T1","ICON_IEC_62196_T1_COMBO","ICON_IEC_62196_T3","ICON_IEC_62196_T3A","ICON_SCHUKO","ICON_CHADEMO","ICON_CATARC","connectorIcons","defaultFilter","hasFilters","filter","authMethodCapabilityOptions","powerRanges","toggleOption","action","existingFilters","optionFilters","useLocalState","initialState","useReducer","currentState","updatedState","FiltersScreen","applyFilters","contextFilters","setParentView","showOperatorFilter","Checkbox","operator","capability","LocationPlaceholder","ChevronLeft","ChevronRight","ChevronDown","Clock","Check","Info","SideBarContainer","Debug","evse","connector","StationIcon","BuildingIcon","CarIcon","BoltIcon","PricingIcon","getSocketIcon","connectorPowerTypes","getSocketText","formatConnectorStandard","getStatusLabel","getLocationLabel","getStatusColorFromEvses","evses","getTimezoneOffset","date","timeZone","offset","lang","tzName","part","sign","offsetToMins","formatYMD","year","month","day","acc","tzDate","offMins","startOfDay","oDateTS","sodDateTS","endOfDate","getNextDayOfWeek","dayOfWeek","resultDate","getDay","convertTimeToMinutes","time","hours","minutes","convertToTimeSlot","startTime","endTime","getScheduleItems","items","isDayActive","now","currentTime","scheduleItems","refItem","oldEndTime","toAppend","maxEndTime","prevItem","isBaseTarif","tariffElement","getDynamicTariff","limit","splitByDay","el","curr","formattedItems","restrictions","_startDate","partialRestrictions","isActive","getScheduledTariff","locationTimezone","today","start_date","end_date","day_of_week","startDate","endDate","index","start","end","omitFields","obj","fields","isSame","aWithoutActive","bWithoutActive","mergeDuplicatesTimeslots","timeslots","cur","existing","isRateBaseTariff","pc","isEdgeNoise","getSchedule","days","baseRateElement","SUNDAY","rest","firstDay","restDays","dayElements","dayTimeslots","prevEntry","prevTimeslots","getConnectorTariffType","connectorTarif","ConnectorPowerType","calculateMaxPower","formatCurrency","getPrice","priceComponent","vat","PriceComponent","currency","stringByType","displayOrder","PriceComponents","elementsByType","sortedElements","aIndex","bIndex","Price","price","vatAmount","CdrPriceComponent","cdrAdditionalCharge","formatTime","mins","defaultTimeZone","daysForLocale","format","CdrAdditionalChargeComponent","cdrAdditionalCharges","CdrPrice","ConnectorTariff","timezone","tariff","compact","i18nDays","hasPriceComponents","dynamicTariffs","scheduledTariffs","baseTarifElements","isBaseActive","schedule","dynamicTariff","getNotes","notes","LocationDetailsV1","currentLocation","setView","availableEvse","connectorType","rowStyle","iconSlotStyle","textSlotStyle","hintStyle","chevronSlotStyle","bodyStyle","LocationRow","icon","hint","defaultExpanded","expandable","expanded","setExpanded","toggle","LocationHeader","href","StatusDot","color","size","AvailabilitySummary","available","OperatorBlock","role","showRoleLabel","OperatorSection","suboperator","fallbackOperatorName","fallbackSuboperatorName","subRole","opRole","WEEKDAY_KEYS","getWeekdayLabel","weekday","groupRegularHoursByWeekday","regularHours","grouped","formatPeriod","begin","timeToMinutes","jsDayToOcpiWeekday","jsDay","dateToYMD","isInExceptional","periods","isOpenNow","openingTimes","closing","opening","todayWeekday","prevWeekday","nowMinutes","effectiveEnd","wd","getFutureExceptionalPeriods","formatExceptionalRange","sameDay","beginStr","endStr","OpeningHours","chargingWhenClosed","futureClosings","futureOpenings","headerText","headerHint","hasBody","dayStyle","dayLabelStyle","dayValueStyle","exceptionalStyle","exceptionalHeaderStyle","footnoteStyle","ParkingType","parkingType","ChargingAccessibility","accessibility","EvseHeader","EvseStatus","first","maxKw","ConnectorSocket","ConnectorPricing","transformTariff","TariffV2","additionalCharges","hasCongestionPricing","JS_DAY_TO_OCPI","isInTimeWindow","isElementActive","bucketKey","minD","maxD","getActiveTariffElements","byBucket","isBase","elementToPcs","order","itemsRowStyle","itemStyle","itemHighlightStyle","STRING_BY_TYPE","DISPLAY_ORDER","priceWithVat","isFreeParkingWindow","collectAndSort","skipZero","all","ai","bi","TariffChips","chipStyle","labelKey","total","containerStyle","headerStyle","TariffLine","label","trailing","interactive","containerWithClick","buttonStyle","submittingStyle","doneStyle","errorStyle","ReportProblemButton","setStatus","submit","textStyle","NoTariff","chevronStyle","ActiveTariff","evseId","evseUid","countryCode","partyId","locationId","locationName","transformed","rawElements","activeElements","Connector","tariffs","tr","cardStyle","connectorBaseStyle","Evse","statusColor","connectorStyle","pickText","directions","Directions","Location","Locations","locationIndex","setLocationIndex","canNext","canPrev","debugMode","isV2","BackButton","TariffNote","note","DynamicTariffs","sectionStyle","sectionHeaderStyle","descriptionStyle","metaStyle","elementHasPaidComponents","pickAltText","altTexts","formatLastUpdated","iso","TariffDetails","reportProps","description","lastUpdated","renderHeader","charges","baseElements","dyn","j","CloseIcon","CloseButton","LocationsScreeen","DynamicTariff","filterIcon","Controls","Filters","RoadMap","ShadowMapWrapper","Router","rootRef","shadowRootRef","isInitializedRef","styleHref","link","root","createRoot","roadMapElement"],"mappings":"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","x_google_ignoreList":[5,7,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36]}
|