@opentripplanner/map-popup 6.1.0-alpha.3 → 7.0.0
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/esm/index.js +20 -10
- package/esm/index.js.map +1 -1
- package/esm/util.js +10 -6
- package/esm/util.js.map +1 -1
- package/i18n/es.yml +1 -1
- package/i18n/fr.yml +1 -1
- package/i18n/ko.yml +1 -1
- package/i18n/pl.yml +10 -1
- package/i18n/ta.yml +8 -9
- package/i18n/vi.yml +1 -1
- package/i18n/zh_Hans.yml +1 -1
- package/lib/index.d.ts +13 -5
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +18 -10
- package/lib/index.js.map +1 -1
- package/lib/util.d.ts +5 -2
- package/lib/util.d.ts.map +1 -1
- package/lib/util.js +12 -6
- package/lib/util.js.map +1 -1
- package/package.json +6 -6
- package/src/MapPopup.story.tsx +54 -13
- package/src/__snapshots__/MapPopup.story.tsx.snap +66 -1
- package/src/index.tsx +51 -18
- package/src/util.ts +30 -13
- package/tsconfig.json +0 -1
- package/tsconfig.tsbuildinfo +1 -1
- package/README.md +0 -6
package/esm/index.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import React, { useCallback } from "react";
|
|
2
2
|
import FromToLocationPicker from "@opentripplanner/from-to-location-picker";
|
|
3
|
-
import coreUtils from "@opentripplanner/core-utils";
|
|
4
3
|
|
|
5
4
|
// eslint-disable-next-line prettier/prettier
|
|
6
5
|
|
|
@@ -8,11 +7,11 @@ import { FocusTrapWrapper } from "@opentripplanner/building-blocks";
|
|
|
8
7
|
import { flatten } from "flat";
|
|
9
8
|
import { FormattedMessage, useIntl } from "react-intl";
|
|
10
9
|
import { Styled } from "@opentripplanner/base-map";
|
|
10
|
+
import { getNetwork, makeDefaultGetEntityName } from "./util";
|
|
11
11
|
import { ViewStopButton } from "./styled";
|
|
12
12
|
|
|
13
13
|
// Load the default messages.
|
|
14
14
|
import defaultEnglishMessages from "../i18n/en-US.yml";
|
|
15
|
-
import { makeDefaultGetEntityName } from "./util";
|
|
16
15
|
|
|
17
16
|
// HACK: We should flatten the messages loaded above because
|
|
18
17
|
// the YAML loaders behave differently between webpack and our version of jest:
|
|
@@ -41,7 +40,7 @@ var StationHubDetails = function StationHubDetails(_ref) {
|
|
|
41
40
|
description: "Label text for the number of bikes available",
|
|
42
41
|
id: "otpUi.MapPopup.availableBikes",
|
|
43
42
|
values: {
|
|
44
|
-
value: station.
|
|
43
|
+
value: station.vehiclesAvailable
|
|
45
44
|
}
|
|
46
45
|
})), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(FormattedMessage, {
|
|
47
46
|
defaultMessage: defaultMessages["otpUi.MapPopup.availableDocks"],
|
|
@@ -72,14 +71,13 @@ var StopDetails = function StopDetails(_ref2) {
|
|
|
72
71
|
})));
|
|
73
72
|
};
|
|
74
73
|
function entityIsStation(entity) {
|
|
75
|
-
return "
|
|
74
|
+
return "vehiclesAvailable" in entity;
|
|
76
75
|
}
|
|
77
76
|
|
|
78
77
|
/**
|
|
79
78
|
* Renders a map popup for a stop, scooter, or shared bike
|
|
80
79
|
*/
|
|
81
80
|
export function MapPopup(_ref3) {
|
|
82
|
-
var _entity$networks;
|
|
83
81
|
var _ref3$closePopup = _ref3.closePopup,
|
|
84
82
|
closePopup = _ref3$closePopup === void 0 ? function () {} : _ref3$closePopup,
|
|
85
83
|
configCompanies = _ref3.configCompanies,
|
|
@@ -87,15 +85,27 @@ export function MapPopup(_ref3) {
|
|
|
87
85
|
getEntityName = _ref3.getEntityName,
|
|
88
86
|
getEntityPrefix = _ref3.getEntityPrefix,
|
|
89
87
|
setLocation = _ref3.setLocation,
|
|
90
|
-
setViewedStop = _ref3.setViewedStop
|
|
88
|
+
setViewedStop = _ref3.setViewedStop,
|
|
89
|
+
feeds = _ref3.feeds;
|
|
91
90
|
var intl = useIntl();
|
|
92
91
|
if (!entity) return /*#__PURE__*/React.createElement(React.Fragment, null);
|
|
93
92
|
var getNameFunc = getEntityName || makeDefaultGetEntityName(intl, defaultMessages);
|
|
94
|
-
|
|
95
|
-
|
|
93
|
+
|
|
94
|
+
// Find the feed name using the logic from generateLabel in otp.ts
|
|
95
|
+
var feedName;
|
|
96
|
+
if (feeds && entity.id) {
|
|
97
|
+
var _feed$publisher;
|
|
98
|
+
var feedId = entity.id.split(":")[0];
|
|
99
|
+
var feed = feeds.find(function (f) {
|
|
100
|
+
return f.feedId === feedId;
|
|
101
|
+
});
|
|
102
|
+
feedName = feed === null || feed === void 0 || (_feed$publisher = feed.publisher) === null || _feed$publisher === void 0 ? void 0 : _feed$publisher.name;
|
|
103
|
+
}
|
|
104
|
+
var name = getNameFunc(entity, configCompanies, feedName);
|
|
105
|
+
var stationNetwork = getNetwork(entity, configCompanies);
|
|
96
106
|
var bikesAvailablePresent = entityIsStation(entity);
|
|
97
|
-
var entityIsStationHub = bikesAvailablePresent &&
|
|
98
|
-
var stopId = !bikesAvailablePresent &&
|
|
107
|
+
var entityIsStationHub = bikesAvailablePresent && entity.vehiclesAvailable !== undefined && !entity.isFloatingBike;
|
|
108
|
+
var stopId = !bikesAvailablePresent && "code" in entity && entity.code;
|
|
99
109
|
var id = "focus-".concat(encodeURIComponent(entity.id).replace(/%/g, ""), "-popup");
|
|
100
110
|
return /*#__PURE__*/React.createElement(Styled.MapOverlayPopup, null, /*#__PURE__*/React.createElement(FocusTrapWrapper, {
|
|
101
111
|
closePopup: closePopup,
|
package/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["React","useCallback","FromToLocationPicker","coreUtils","FocusTrapWrapper","flatten","FormattedMessage","useIntl","Styled","ViewStopButton","defaultEnglishMessages","makeDefaultGetEntityName","defaultMessages","generateLocation","entity","name","entityLon","lon","entityLat","lat","x","y","StationHubDetails","_ref","station","createElement","PopupRow","defaultMessage","description","id","values","value","bikesAvailable","spacesAvailable","StopDetails","_ref2","setViewedStop","stopId","onClick","entityIsStation","MapPopup","_ref3","_entity$networks","_ref3$closePopup","closePopup","configCompanies","getEntityName","getEntityPrefix","setLocation","intl","Fragment","getNameFunc","stationNetwork","itinerary","getCompaniesLabelFromNetworks","networks","bikesAvailablePresent","entityIsStationHub","undefined","isFloatingBike","code","concat","encodeURIComponent","replace","MapOverlayPopup","PopupTitle","label","location"],"sources":["../src/index.tsx"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport FromToLocationPicker from \"@opentripplanner/from-to-location-picker\";\nimport coreUtils from \"@opentripplanner/core-utils\";\n\n// eslint-disable-next-line prettier/prettier\nimport type { Company, ConfiguredCompany, Location, Station, Stop, StopEventHandler } from \"@opentripplanner/types\";\n\nimport { FocusTrapWrapper } from \"@opentripplanner/building-blocks\";\nimport { flatten } from \"flat\";\nimport { FormattedMessage, useIntl } from \"react-intl\";\nimport { Styled } from \"@opentripplanner/base-map\";\n\nimport { ViewStopButton } from \"./styled\";\n\n// Load the default messages.\nimport defaultEnglishMessages from \"../i18n/en-US.yml\";\nimport { makeDefaultGetEntityName } from \"./util\";\n\n// HACK: We should flatten the messages loaded above because\n// the YAML loaders behave differently between webpack and our version of jest:\n// - the yaml loader for webpack returns a nested object,\n// - the yaml loader for jest returns messages with flattened ids.\nexport const defaultMessages: { [key: string]: string } = flatten(defaultEnglishMessages);\n\nconst generateLocation = (entity: Entity, name: string) => {\n // @ts-expect-error some of these values may be null, but that's ok\n const { lon: entityLon, lat: entityLat, x, y } = entity\n\n const lat = entityLat || y\n const lon = entityLon || x\n if (!lat || !lon) return null\n\n return { lat, lon, name };\n}\n\nconst StationHubDetails = ({ station }: { station: Station }) => {\n return (\n <Styled.PopupRow>\n <div>\n <FormattedMessage\n defaultMessage={\n defaultMessages[\"otpUi.MapPopup.availableBikes\"]\n }\n description=\"Label text for the number of bikes available\"\n id=\"otpUi.MapPopup.availableBikes\"\n values={{ value: station.bikesAvailable }}\n />\n </div>\n <div>\n <FormattedMessage\n defaultMessage={\n defaultMessages[\"otpUi.MapPopup.availableDocks\"]\n }\n description=\"Label text for the number of docks available\"\n id=\"otpUi.MapPopup.availableDocks\"\n values={{ value: station.spacesAvailable }}\n />\n </div>\n </Styled.PopupRow>\n )\n}\n\nconst StopDetails = ({ id, setViewedStop }: { id: string, setViewedStop: () => void; }) => {\n return (\n <Styled.PopupRow>\n {id &&\n <strong>\n <FormattedMessage\n defaultMessage={defaultMessages[\"otpUi.MapPopup.stopId\"]}\n description=\"Displays the stop id\"\n id=\"otpUi.MapPopup.stopId\"\n values={{\n stopId: id\n }}\n />\n </strong>}\n <ViewStopButton onClick={setViewedStop} stopId={id}> \n <FormattedMessage\n defaultMessage={defaultMessages[\"otpUi.MapPopup.stopViewer\"]}\n description=\"Text for link that opens the stop viewer\"\n id=\"otpUi.MapPopup.stopViewer\"\n />\n </ViewStopButton>\n </Styled.PopupRow>\n )\n}\n\ntype Entity = Stop | Station\ntype Props = {\n closePopup?: (arg?: any) => void\n configCompanies?: ConfiguredCompany[];\n entity: Entity\n getEntityName?: (entity: Entity, configCompanies: Company[],) => string;\n getEntityPrefix?: (entity: Entity) => JSX.Element\n setLocation?: ({ location, locationType }: { location: Location, locationType: string }) => void;\n setViewedStop?: StopEventHandler;\n};\n\nfunction entityIsStation(entity: Entity): entity is Station {\n return \"bikesAvailable\" in entity\n}\n\n/**\n * Renders a map popup for a stop, scooter, or shared bike\n */\nexport function MapPopup({ closePopup = () => {}, configCompanies, entity, getEntityName, getEntityPrefix, setLocation, setViewedStop }: Props): JSX.Element {\n\n const intl = useIntl()\n if (!entity) return <></>\n\n const getNameFunc = getEntityName || makeDefaultGetEntityName(intl, defaultMessages);\n const name = getNameFunc(entity, configCompanies);\n\n const stationNetwork = \"networks\" in entity && (coreUtils.itinerary.getCompaniesLabelFromNetworks(entity?.networks || [], configCompanies) || entity?.networks?.[0]);\n\n const bikesAvailablePresent = entityIsStation(entity)\n const entityIsStationHub = bikesAvailablePresent && entity?.bikesAvailable !== undefined && !entity?.isFloatingBike;\n const stopId = !bikesAvailablePresent && entity?.code;\n const id = `focus-${encodeURIComponent(entity.id).replace(/%/g, \"\")}-popup`\n\n return (\n <Styled.MapOverlayPopup>\n <FocusTrapWrapper closePopup={closePopup} id={id}>\n <Styled.PopupTitle>\n {getEntityPrefix && getEntityPrefix(entity)}\n <FormattedMessage\n defaultMessage={defaultMessages[\"otpUi.MapPopup.popupTitle\"]}\n description=\"Text for title of the popup, contains an optional company name\"\n id=\"otpUi.MapPopup.popupTitle\"\n values={{ name, stationNetwork }}\n />\n </Styled.PopupTitle>\n {/* render dock info if it is available */}\n {entityIsStationHub && <StationHubDetails station={entity} />}\n\n {/* render stop viewer link if available */}\n {setViewedStop && !bikesAvailablePresent && (\n <StopDetails\n id={stopId}\n setViewedStop={useCallback(() => setViewedStop(entity), [entity])}\n />\n )}\n\n {/* The \"Set as [from/to]\" ButtonGroup */}\n {setLocation && (\n <Styled.PopupRow>\n <FromToLocationPicker\n label\n location={generateLocation(entity, name)}\n setLocation={setLocation}\n />\n </Styled.PopupRow>\n )}\n </FocusTrapWrapper>\n \n </Styled.MapOverlayPopup>\n );\n}\n\nexport default MapPopup;"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["React","useCallback","FromToLocationPicker","FocusTrapWrapper","flatten","FormattedMessage","useIntl","Styled","getNetwork","makeDefaultGetEntityName","ViewStopButton","defaultEnglishMessages","defaultMessages","generateLocation","entity","name","entityLon","lon","entityLat","lat","x","y","StationHubDetails","_ref","station","createElement","PopupRow","defaultMessage","description","id","values","value","vehiclesAvailable","spacesAvailable","StopDetails","_ref2","setViewedStop","stopId","onClick","entityIsStation","MapPopup","_ref3","_ref3$closePopup","closePopup","configCompanies","getEntityName","getEntityPrefix","setLocation","feeds","intl","Fragment","getNameFunc","feedName","_feed$publisher","feedId","split","feed","find","f","publisher","stationNetwork","bikesAvailablePresent","entityIsStationHub","undefined","isFloatingBike","code","concat","encodeURIComponent","replace","MapOverlayPopup","PopupTitle","label","location"],"sources":["../src/index.tsx"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport FromToLocationPicker from \"@opentripplanner/from-to-location-picker\";\n\n// eslint-disable-next-line prettier/prettier\nimport type {\n Company,\n ConfiguredCompany,\n Location,\n Stop,\n StopEventHandler,\n TileLayerStation\n} from \"@opentripplanner/types\";\n\nimport { FocusTrapWrapper } from \"@opentripplanner/building-blocks\";\nimport { flatten } from \"flat\";\nimport { FormattedMessage, useIntl } from \"react-intl\";\nimport { Styled } from \"@opentripplanner/base-map\";\n\nimport { Entity, getNetwork, makeDefaultGetEntityName, type StopIdAgencyMap } from \"./util\";\nimport { ViewStopButton } from \"./styled\";\n\n// Load the default messages.\nimport defaultEnglishMessages from \"../i18n/en-US.yml\";\n\n// HACK: We should flatten the messages loaded above because\n// the YAML loaders behave differently between webpack and our version of jest:\n// - the yaml loader for webpack returns a nested object,\n// - the yaml loader for jest returns messages with flattened ids.\nexport const defaultMessages: { [key: string]: string } = flatten(defaultEnglishMessages);\n\nexport type Feed = {\n feedId: string;\n publisher: {\n name: string;\n };\n};\n\n\nconst generateLocation = (entity: Entity, name: string) => {\n // @ts-expect-error some of these values may be null, but that's ok\n const { lon: entityLon, lat: entityLat, x, y } = entity\n\n const lat = entityLat || y\n const lon = entityLon || x\n if (!lat || !lon) return null\n\n return { lat, lon, name };\n}\n\nconst StationHubDetails = ({ station }: { station: TileLayerStation }) => {\n return (\n <Styled.PopupRow>\n <div>\n <FormattedMessage\n defaultMessage={\n defaultMessages[\"otpUi.MapPopup.availableBikes\"]\n }\n description=\"Label text for the number of bikes available\"\n id=\"otpUi.MapPopup.availableBikes\"\n values={{ value: station.vehiclesAvailable }}\n />\n </div>\n <div>\n <FormattedMessage\n defaultMessage={\n defaultMessages[\"otpUi.MapPopup.availableDocks\"]\n }\n description=\"Label text for the number of docks available\"\n id=\"otpUi.MapPopup.availableDocks\"\n values={{ value: station.spacesAvailable }}\n />\n </div>\n </Styled.PopupRow>\n )\n}\n\nconst StopDetails = ({ id, setViewedStop }: { id: string, setViewedStop: () => void; }) => {\n return (\n <Styled.PopupRow>\n {id &&\n <strong>\n <FormattedMessage\n defaultMessage={defaultMessages[\"otpUi.MapPopup.stopId\"]}\n description=\"Displays the stop id\"\n id=\"otpUi.MapPopup.stopId\"\n values={{\n stopId: id\n }}\n />\n </strong>}\n <ViewStopButton onClick={setViewedStop} stopId={id}> \n <FormattedMessage\n defaultMessage={defaultMessages[\"otpUi.MapPopup.stopViewer\"]}\n description=\"Text for link that opens the stop viewer\"\n id=\"otpUi.MapPopup.stopViewer\"\n />\n </ViewStopButton>\n </Styled.PopupRow>\n )\n}\n\ntype Props = {\n closePopup?: (arg?: boolean) => void\n configCompanies?: ConfiguredCompany[];\n entity: Entity\n getEntityName?: (entity: Entity, configCompanies: Company[], feedName?: string) => string;\n getEntityPrefix?: (entity: Entity) => JSX.Element\n feeds?: Feed[]\n setLocation?: ({ location, locationType }: { location: Location, locationType: string }) => void;\n setViewedStop?: StopEventHandler;\n};\n\nfunction entityIsStation(entity: Entity): entity is TileLayerStation {\n return \"vehiclesAvailable\" in entity\n}\n\n/**\n * Renders a map popup for a stop, scooter, or shared bike\n */\nexport function MapPopup({ \n closePopup = () => {}, \n configCompanies, \n entity, \n getEntityName, \n getEntityPrefix, \n setLocation, \n setViewedStop, \n feeds,\n}: Props): JSX.Element {\n\n const intl = useIntl()\n if (!entity) return <></>\n\n const getNameFunc = getEntityName || makeDefaultGetEntityName(intl, defaultMessages);\n \n // Find the feed name using the logic from generateLabel in otp.ts\n let feedName: string | undefined;\n if (feeds && entity.id) {\n const feedId = entity.id.split(\":\")[0];\n const feed = feeds.find(f => f.feedId === feedId);\n feedName = feed?.publisher?.name;\n }\n \n const name = getNameFunc(entity, configCompanies, feedName);\n\n const stationNetwork = getNetwork(entity, configCompanies);\n\n const bikesAvailablePresent = entityIsStation(entity)\n const entityIsStationHub = bikesAvailablePresent && entity.vehiclesAvailable !== undefined && !entity.isFloatingBike;\n const stopId = !bikesAvailablePresent && \"code\" in entity && entity.code;\n const id = `focus-${encodeURIComponent(entity.id).replace(/%/g, \"\")}-popup`\n\n return (\n <Styled.MapOverlayPopup>\n <FocusTrapWrapper closePopup={closePopup} id={id}>\n <Styled.PopupTitle>\n {getEntityPrefix && getEntityPrefix(entity)}\n <FormattedMessage\n defaultMessage={defaultMessages[\"otpUi.MapPopup.popupTitle\"]}\n description=\"Text for title of the popup, contains an optional company name\"\n id=\"otpUi.MapPopup.popupTitle\"\n values={{ name, stationNetwork }}\n />\n </Styled.PopupTitle>\n {/* render dock info if it is available */}\n {entityIsStationHub && <StationHubDetails station={entity} />}\n\n {/* render stop viewer link if available */}\n {setViewedStop && !bikesAvailablePresent && (\n <StopDetails\n id={stopId}\n setViewedStop={useCallback(() => setViewedStop(entity as Stop), [entity])}\n />\n )}\n\n {/* The \"Set as [from/to]\" ButtonGroup */}\n {setLocation && (\n <Styled.PopupRow>\n <FromToLocationPicker\n label\n location={generateLocation(entity, name)}\n setLocation={setLocation}\n />\n </Styled.PopupRow>\n )}\n </FocusTrapWrapper>\n \n </Styled.MapOverlayPopup>\n );\n}\n\nexport default MapPopup;\nexport { type StopIdAgencyMap };"],"mappings":"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","ignoreList":[]}
|
package/esm/util.js
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import coreUtils from "@opentripplanner/core-utils";
|
|
2
|
+
export function getNetwork(entity, configCompanies) {
|
|
3
|
+
return "network" in entity && (coreUtils.itinerary.getCompaniesLabelFromNetworks([entity.network] || [], configCompanies) || entity.network);
|
|
4
|
+
}
|
|
2
5
|
|
|
3
6
|
// eslint-disable-next-line import/prefer-default-export
|
|
4
7
|
export function makeDefaultGetEntityName(intl, defaultEnglishMessages) {
|
|
5
|
-
return function defaultGetEntityName(entity, configCompanies) {
|
|
6
|
-
var _entity$networks;
|
|
7
|
-
// TODO: Stop generating this / passing it to the car string? Is it needed?
|
|
8
|
-
// In English we say "Car: " instead
|
|
9
|
-
var stationNetworks = "networks" in entity && (coreUtils.itinerary.getCompaniesLabelFromNetworks((entity === null || entity === void 0 ? void 0 : entity.networks) || [], configCompanies) || (entity === null || entity === void 0 || (_entity$networks = entity.networks) === null || _entity$networks === void 0 ? void 0 : _entity$networks[0]));
|
|
8
|
+
return function defaultGetEntityName(entity, configCompanies, feedName) {
|
|
10
9
|
var stationName = entity.name || entity.id;
|
|
11
10
|
// If the station name or id is a giant UUID (with more than 3 "-" characters)
|
|
12
11
|
// best not to show that at all. The company name will still be shown.
|
|
@@ -23,12 +22,15 @@ export function makeDefaultGetEntityName(intl, defaultEnglishMessages) {
|
|
|
23
22
|
name: stationName
|
|
24
23
|
});
|
|
25
24
|
} else if ("isFloatingCar" in entity && entity.isFloatingCar) {
|
|
25
|
+
// TODO: Stop generating this / passing it to the car string? Is it needed?
|
|
26
|
+
// In English we say "Car: " instead
|
|
27
|
+
var stationNetwork = getNetwork(entity, configCompanies);
|
|
26
28
|
stationName = intl.formatMessage({
|
|
27
29
|
defaultMessage: defaultEnglishMessages["otpUi.MapPopup.floatingCar"],
|
|
28
30
|
description: "Popup title for a free-floating car",
|
|
29
31
|
id: "otpUi.MapPopup.floatingCar"
|
|
30
32
|
}, {
|
|
31
|
-
company:
|
|
33
|
+
company: stationNetwork,
|
|
32
34
|
name: stationName
|
|
33
35
|
});
|
|
34
36
|
} else if ("isFloatingVehicle" in entity && entity.isFloatingVehicle) {
|
|
@@ -40,6 +42,8 @@ export function makeDefaultGetEntityName(intl, defaultEnglishMessages) {
|
|
|
40
42
|
}, {
|
|
41
43
|
name: stationName
|
|
42
44
|
});
|
|
45
|
+
} else if (feedName && "code" in entity) {
|
|
46
|
+
stationName = "".concat(stationName, " (").concat(feedName, " ").concat(entity.code, ")");
|
|
43
47
|
}
|
|
44
48
|
return stationName;
|
|
45
49
|
};
|
package/esm/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","names":["coreUtils","
|
|
1
|
+
{"version":3,"file":"util.js","names":["coreUtils","getNetwork","entity","configCompanies","itinerary","getCompaniesLabelFromNetworks","network","makeDefaultGetEntityName","intl","defaultEnglishMessages","defaultGetEntityName","feedName","stationName","name","id","match","length","isFloatingBike","formatMessage","defaultMessage","description","isFloatingCar","stationNetwork","company","isFloatingVehicle","concat","code"],"sources":["../src/util.ts"],"sourcesContent":["import {\n Agency,\n Company,\n Station,\n Stop,\n TileLayerStation\n} from \"@opentripplanner/types\";\nimport { IntlShape } from \"react-intl\";\nimport coreUtils from \"@opentripplanner/core-utils\";\n\nexport type StopIdAgencyMap = Record<string, Agency>;\nexport type Entity = Station | Stop | TileLayerStation;\n\nexport function getNetwork(entity: Entity, configCompanies: Company[]): string {\n return (\n \"network\" in entity &&\n (coreUtils.itinerary.getCompaniesLabelFromNetworks(\n [entity.network] || [],\n configCompanies\n ) ||\n entity.network)\n );\n}\n\n// eslint-disable-next-line import/prefer-default-export\nexport function makeDefaultGetEntityName(\n intl: IntlShape,\n defaultEnglishMessages: { [key: string]: string }\n) {\n return function defaultGetEntityName(\n entity: Entity,\n configCompanies: Company[],\n feedName?: string\n ): string | null {\n let stationName: string | null = entity.name || entity.id;\n // If the station name or id is a giant UUID (with more than 3 \"-\" characters)\n // best not to show that at all. The company name will still be shown.\n // Also ignore \"Default Vehicle Type\"\n if (\n (stationName.match(/-/g) || []).length > 3 ||\n stationName === \"Default vehicle type\"\n ) {\n stationName = null;\n }\n\n if (\"isFloatingBike\" in entity && entity.isFloatingBike) {\n stationName = intl.formatMessage(\n {\n defaultMessage: defaultEnglishMessages[\"otpUi.MapPopup.floatingBike\"],\n description: \"Popup title for a free-floating bike\",\n id: \"otpUi.MapPopup.floatingBike\"\n },\n { name: stationName }\n );\n } else if (\"isFloatingCar\" in entity && entity.isFloatingCar) {\n // TODO: Stop generating this / passing it to the car string? Is it needed?\n // In English we say \"Car: \" instead\n const stationNetwork = getNetwork(entity, configCompanies);\n stationName = intl.formatMessage(\n {\n defaultMessage: defaultEnglishMessages[\"otpUi.MapPopup.floatingCar\"],\n description: \"Popup title for a free-floating car\",\n id: \"otpUi.MapPopup.floatingCar\"\n },\n {\n company: stationNetwork,\n name: stationName\n }\n );\n } else if (\"isFloatingVehicle\" in entity && entity.isFloatingVehicle) {\n // assumes that all floating vehicles are E-scooters\n stationName = intl.formatMessage(\n {\n defaultMessage:\n defaultEnglishMessages[\"otpUi.MapPopup.floatingEScooter\"],\n description: \"Popup title for a free-floating e-scooter\",\n id: \"otpUi.MapPopup.floatingEScooter\"\n },\n { name: stationName }\n );\n } else if (feedName && \"code\" in entity) {\n stationName = `${stationName} (${feedName} ${entity.code})`;\n }\n return stationName;\n };\n}\n"],"mappings":"AAQA,OAAOA,SAAS,MAAM,6BAA6B;AAKnD,OAAO,SAASC,UAAUA,CAACC,MAAc,EAAEC,eAA0B,EAAU;EAC7E,OACE,SAAS,IAAID,MAAM,KAClBF,SAAS,CAACI,SAAS,CAACC,6BAA6B,CAChD,CAACH,MAAM,CAACI,OAAO,CAAC,IAAI,EAAE,EACtBH,eACF,CAAC,IACCD,MAAM,CAACI,OAAO,CAAC;AAErB;;AAEA;AACA,OAAO,SAASC,wBAAwBA,CACtCC,IAAe,EACfC,sBAAiD,EACjD;EACA,OAAO,SAASC,oBAAoBA,CAClCR,MAAc,EACdC,eAA0B,EAC1BQ,QAAiB,EACF;IACf,IAAIC,WAA0B,GAAGV,MAAM,CAACW,IAAI,IAAIX,MAAM,CAACY,EAAE;IACzD;IACA;IACA;IACA,IACE,CAACF,WAAW,CAACG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EAAEC,MAAM,GAAG,CAAC,IAC1CJ,WAAW,KAAK,sBAAsB,EACtC;MACAA,WAAW,GAAG,IAAI;IACpB;IAEA,IAAI,gBAAgB,IAAIV,MAAM,IAAIA,MAAM,CAACe,cAAc,EAAE;MACvDL,WAAW,GAAGJ,IAAI,CAACU,aAAa,CAC9B;QACEC,cAAc,EAAEV,sBAAsB,CAAC,6BAA6B,CAAC;QACrEW,WAAW,EAAE,sCAAsC;QACnDN,EAAE,EAAE;MACN,CAAC,EACD;QAAED,IAAI,EAAED;MAAY,CACtB,CAAC;IACH,CAAC,MAAM,IAAI,eAAe,IAAIV,MAAM,IAAIA,MAAM,CAACmB,aAAa,EAAE;MAC5D;MACA;MACA,IAAMC,cAAc,GAAGrB,UAAU,CAACC,MAAM,EAAEC,eAAe,CAAC;MAC1DS,WAAW,GAAGJ,IAAI,CAACU,aAAa,CAC9B;QACEC,cAAc,EAAEV,sBAAsB,CAAC,4BAA4B,CAAC;QACpEW,WAAW,EAAE,qCAAqC;QAClDN,EAAE,EAAE;MACN,CAAC,EACD;QACES,OAAO,EAAED,cAAc;QACvBT,IAAI,EAAED;MACR,CACF,CAAC;IACH,CAAC,MAAM,IAAI,mBAAmB,IAAIV,MAAM,IAAIA,MAAM,CAACsB,iBAAiB,EAAE;MACpE;MACAZ,WAAW,GAAGJ,IAAI,CAACU,aAAa,CAC9B;QACEC,cAAc,EACZV,sBAAsB,CAAC,iCAAiC,CAAC;QAC3DW,WAAW,EAAE,2CAA2C;QACxDN,EAAE,EAAE;MACN,CAAC,EACD;QAAED,IAAI,EAAED;MAAY,CACtB,CAAC;IACH,CAAC,MAAM,IAAID,QAAQ,IAAI,MAAM,IAAIT,MAAM,EAAE;MACvCU,WAAW,MAAAa,MAAA,CAAMb,WAAW,QAAAa,MAAA,CAAKd,QAAQ,OAAAc,MAAA,CAAIvB,MAAM,CAACwB,IAAI,MAAG;IAC7D;IACA,OAAOd,WAAW;EACpB,CAAC;AACH","ignoreList":[]}
|
package/i18n/es.yml
CHANGED
|
@@ -4,7 +4,7 @@ otpUi:
|
|
|
4
4
|
availableDocks: "Estaciones de carga disponibles: {value}"
|
|
5
5
|
floatingBike: "Bicicleta flotante: {name}"
|
|
6
6
|
floatingCar: "Coche: {name}"
|
|
7
|
-
floatingEScooter:
|
|
7
|
+
floatingEScooter: 'Scooter eléctrico: {name}'
|
|
8
8
|
popupTitle: "{stationNetwork, select, false {{name}} other {{stationNetwork} {name}}}"
|
|
9
9
|
stopId: Parada n°{stopId}
|
|
10
10
|
stopViewer: Visor de paradas
|
package/i18n/fr.yml
CHANGED
|
@@ -4,7 +4,7 @@ otpUi:
|
|
|
4
4
|
availableDocks: "Bornes disponibles : {value}"
|
|
5
5
|
floatingBike: "Vélo flottant : {name}"
|
|
6
6
|
floatingCar: "Voiture : {name}"
|
|
7
|
-
floatingEScooter:
|
|
7
|
+
floatingEScooter: 'Trottinette : {name}'
|
|
8
8
|
popupTitle: "{stationNetwork, select, false {{name}} other {{stationNetwork} {name}}}"
|
|
9
9
|
stopId: Arrêt n°{stopId}
|
|
10
10
|
stopViewer: Info arrêt
|
package/i18n/ko.yml
CHANGED
|
@@ -4,7 +4,7 @@ otpUi:
|
|
|
4
4
|
availableDocks: "사용 가능한 도크: {value}"
|
|
5
5
|
floatingBike: "프리-플로팅 자전거: {name}"
|
|
6
6
|
floatingCar: "자동차: {name}"
|
|
7
|
-
floatingEScooter: 전동스쿠터:{name}
|
|
7
|
+
floatingEScooter: "전동스쿠터:{name}"
|
|
8
8
|
popupTitle: "{stationNetwork, select, false {{name}} other {{stationNetwork} {name}}}"
|
|
9
9
|
stopId: "정류장 ID: {stopId}"
|
|
10
10
|
stopViewer: 정류장 뷰어
|
package/i18n/pl.yml
CHANGED
|
@@ -1 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
otpUi:
|
|
2
|
+
MapPopup:
|
|
3
|
+
availableBikes: "Dostępne rowery: {value}"
|
|
4
|
+
availableDocks: "Dostępne stanowiska: {value}"
|
|
5
|
+
floatingBike: "Wolnostojące rowery: {name}"
|
|
6
|
+
floatingCar: "Samochód: {name}"
|
|
7
|
+
floatingEScooter: "Hulajnoga elektryczna: {name}"
|
|
8
|
+
popupTitle: "{stationNetwork, select, false {{name}} other {{stationNetwork} {name}}}"
|
|
9
|
+
stopId: "Numer przystanku: {stopId}"
|
|
10
|
+
stopViewer: Podgląd przystanku
|
package/i18n/ta.yml
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
otpUi:
|
|
2
2
|
MapPopup:
|
|
3
|
-
availableBikes:
|
|
4
|
-
availableDocks:
|
|
5
|
-
floatingBike:
|
|
6
|
-
floatingCar:
|
|
7
|
-
floatingEScooter:
|
|
8
|
-
popupTitle:
|
|
9
|
-
{
|
|
10
|
-
|
|
11
|
-
stopId: "ஐடியை நிறுத்து: {stopId}"
|
|
3
|
+
availableBikes: 'கிடைக்கும் பைக்குகள்: {value}'
|
|
4
|
+
availableDocks: 'கிடைக்கும் கப்பல்துறைகள்: {value}'
|
|
5
|
+
floatingBike: 'இலவச-மிதக்கும் பைக்: {name}'
|
|
6
|
+
floatingCar: 'கார்: {name}'
|
|
7
|
+
floatingEScooter: 'மின்-ச்கூட்டர்: {name}'
|
|
8
|
+
popupTitle: '{ச்டேசனெட்ட்வொர்க், தேர்ந்தெடுக்கவும், பொய் {{name}} பிற {{stationNetwork}
|
|
9
|
+
{name}}}}'
|
|
10
|
+
stopId: 'ஐடியை நிறுத்து: {stopId}'
|
|
12
11
|
stopViewer: பார்வையாளரை நிறுத்துங்கள்
|
package/i18n/vi.yml
CHANGED
|
@@ -4,7 +4,7 @@ otpUi:
|
|
|
4
4
|
availableDocks: "Chỗ dựng xe đạp có sẵn: {value}"
|
|
5
5
|
floatingBike: "Xe đạp để tự do: {name}"
|
|
6
6
|
floatingCar: "Xe hơi: {name}"
|
|
7
|
-
floatingEScooter:
|
|
7
|
+
floatingEScooter: 'Xe tay ga điện: {name}'
|
|
8
8
|
popupTitle: "{stationNetwork, select, false {{name}} other {{stationNetwork} {name}}}"
|
|
9
9
|
stopId: Điểm dừng số {stopId}
|
|
10
10
|
stopViewer: Xem điểm dừng
|
package/i18n/zh_Hans.yml
CHANGED
|
@@ -4,7 +4,7 @@ otpUi:
|
|
|
4
4
|
availableDocks: "可用的充电座: {value}"
|
|
5
5
|
floatingBike: "自由浮动的自行车: {name}"
|
|
6
6
|
floatingCar: "汽车: {name}"
|
|
7
|
-
floatingEScooter: 电动滑板车:{name}
|
|
7
|
+
floatingEScooter: "电动滑板车:{name}"
|
|
8
8
|
popupTitle: "{stationNetwork, select, false {{name}} other {{stationNetwork} {name}}}"
|
|
9
9
|
stopId: "车站 ID: {stopId}"
|
|
10
10
|
stopViewer: 车站查看器
|
package/lib/index.d.ts
CHANGED
|
@@ -1,15 +1,22 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
import type { Company, ConfiguredCompany, Location,
|
|
2
|
+
import type { Company, ConfiguredCompany, Location, StopEventHandler } from "@opentripplanner/types";
|
|
3
|
+
import { Entity, type StopIdAgencyMap } from "./util";
|
|
3
4
|
export declare const defaultMessages: {
|
|
4
5
|
[key: string]: string;
|
|
5
6
|
};
|
|
6
|
-
type
|
|
7
|
+
export type Feed = {
|
|
8
|
+
feedId: string;
|
|
9
|
+
publisher: {
|
|
10
|
+
name: string;
|
|
11
|
+
};
|
|
12
|
+
};
|
|
7
13
|
type Props = {
|
|
8
|
-
closePopup?: (arg?:
|
|
14
|
+
closePopup?: (arg?: boolean) => void;
|
|
9
15
|
configCompanies?: ConfiguredCompany[];
|
|
10
16
|
entity: Entity;
|
|
11
|
-
getEntityName?: (entity: Entity, configCompanies: Company[]) => string;
|
|
17
|
+
getEntityName?: (entity: Entity, configCompanies: Company[], feedName?: string) => string;
|
|
12
18
|
getEntityPrefix?: (entity: Entity) => JSX.Element;
|
|
19
|
+
feeds?: Feed[];
|
|
13
20
|
setLocation?: ({ location, locationType }: {
|
|
14
21
|
location: Location;
|
|
15
22
|
locationType: string;
|
|
@@ -19,6 +26,7 @@ type Props = {
|
|
|
19
26
|
/**
|
|
20
27
|
* Renders a map popup for a stop, scooter, or shared bike
|
|
21
28
|
*/
|
|
22
|
-
export declare function MapPopup({ closePopup, configCompanies, entity, getEntityName, getEntityPrefix, setLocation, setViewedStop }: Props): JSX.Element;
|
|
29
|
+
export declare function MapPopup({ closePopup, configCompanies, entity, getEntityName, getEntityPrefix, setLocation, setViewedStop, feeds, }: Props): JSX.Element;
|
|
23
30
|
export default MapPopup;
|
|
31
|
+
export { type StopIdAgencyMap };
|
|
24
32
|
//# sourceMappingURL=index.d.ts.map
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":";AAIA,OAAO,KAAK,EACV,OAAO,EACP,iBAAiB,EACjB,QAAQ,EAER,gBAAgB,EAEjB,MAAM,wBAAwB,CAAC;AAOhC,OAAO,EAAE,MAAM,EAAwC,KAAK,eAAe,EAAE,MAAM,QAAQ,CAAC;AAU5F,eAAO,MAAM,eAAe,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;CAAoC,CAAC;AAE1F,MAAM,MAAM,IAAI,GAAG;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE;QACT,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH,CAAC;AAkEF,KAAK,KAAK,GAAG;IACX,UAAU,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;IACpC,eAAe,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACtC,MAAM,EAAE,MAAM,CAAA;IACd,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAC1F,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,GAAG,CAAC,OAAO,CAAA;IACjD,KAAK,CAAC,EAAE,IAAI,EAAE,CAAA;IACd,WAAW,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE;QAAE,QAAQ,EAAE,QAAQ,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACjG,aAAa,CAAC,EAAE,gBAAgB,CAAC;CAClC,CAAC;AAMF;;GAEG;AACH,wBAAgB,QAAQ,CAAC,EACvB,UAAqB,EACrB,eAAe,EACf,MAAM,EACN,aAAa,EACb,eAAe,EACf,WAAW,EACX,aAAa,EACb,KAAK,GACN,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CA6DrB;AAED,eAAe,QAAQ,CAAC;AACxB,OAAO,EAAE,KAAK,eAAe,EAAE,CAAC"}
|
package/lib/index.js
CHANGED
|
@@ -8,14 +8,13 @@ exports.MapPopup = MapPopup;
|
|
|
8
8
|
exports.defaultMessages = exports.default = void 0;
|
|
9
9
|
var _react = _interopRequireWildcard(require("react"));
|
|
10
10
|
var _fromToLocationPicker = _interopRequireDefault(require("@opentripplanner/from-to-location-picker"));
|
|
11
|
-
var _coreUtils = _interopRequireDefault(require("@opentripplanner/core-utils"));
|
|
12
11
|
var _buildingBlocks = require("@opentripplanner/building-blocks");
|
|
13
12
|
var _flat = require("flat");
|
|
14
13
|
var _reactIntl = require("react-intl");
|
|
15
14
|
var _baseMap = require("@opentripplanner/base-map");
|
|
15
|
+
var _util = require("./util");
|
|
16
16
|
var _styled = require("./styled");
|
|
17
17
|
var _enUS = _interopRequireDefault(require("../i18n/en-US.yml"));
|
|
18
|
-
var _util = require("./util");
|
|
19
18
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
20
19
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
21
20
|
// eslint-disable-next-line prettier/prettier
|
|
@@ -52,7 +51,7 @@ const StationHubDetails = ({
|
|
|
52
51
|
description: "Label text for the number of bikes available",
|
|
53
52
|
id: "otpUi.MapPopup.availableBikes",
|
|
54
53
|
values: {
|
|
55
|
-
value: station.
|
|
54
|
+
value: station.vehiclesAvailable
|
|
56
55
|
}
|
|
57
56
|
})), /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_reactIntl.FormattedMessage, {
|
|
58
57
|
defaultMessage: defaultMessages["otpUi.MapPopup.availableDocks"],
|
|
@@ -84,7 +83,7 @@ const StopDetails = ({
|
|
|
84
83
|
})));
|
|
85
84
|
};
|
|
86
85
|
function entityIsStation(entity) {
|
|
87
|
-
return "
|
|
86
|
+
return "vehiclesAvailable" in entity;
|
|
88
87
|
}
|
|
89
88
|
|
|
90
89
|
/**
|
|
@@ -97,17 +96,26 @@ function MapPopup({
|
|
|
97
96
|
getEntityName,
|
|
98
97
|
getEntityPrefix,
|
|
99
98
|
setLocation,
|
|
100
|
-
setViewedStop
|
|
99
|
+
setViewedStop,
|
|
100
|
+
feeds
|
|
101
101
|
}) {
|
|
102
|
-
var _entity$networks;
|
|
103
102
|
const intl = (0, _reactIntl.useIntl)();
|
|
104
103
|
if (!entity) return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null);
|
|
105
104
|
const getNameFunc = getEntityName || (0, _util.makeDefaultGetEntityName)(intl, defaultMessages);
|
|
106
|
-
|
|
107
|
-
|
|
105
|
+
|
|
106
|
+
// Find the feed name using the logic from generateLabel in otp.ts
|
|
107
|
+
let feedName;
|
|
108
|
+
if (feeds && entity.id) {
|
|
109
|
+
var _feed$publisher;
|
|
110
|
+
const feedId = entity.id.split(":")[0];
|
|
111
|
+
const feed = feeds.find(f => f.feedId === feedId);
|
|
112
|
+
feedName = feed === null || feed === void 0 || (_feed$publisher = feed.publisher) === null || _feed$publisher === void 0 ? void 0 : _feed$publisher.name;
|
|
113
|
+
}
|
|
114
|
+
const name = getNameFunc(entity, configCompanies, feedName);
|
|
115
|
+
const stationNetwork = (0, _util.getNetwork)(entity, configCompanies);
|
|
108
116
|
const bikesAvailablePresent = entityIsStation(entity);
|
|
109
|
-
const entityIsStationHub = bikesAvailablePresent &&
|
|
110
|
-
const stopId = !bikesAvailablePresent &&
|
|
117
|
+
const entityIsStationHub = bikesAvailablePresent && entity.vehiclesAvailable !== undefined && !entity.isFloatingBike;
|
|
118
|
+
const stopId = !bikesAvailablePresent && "code" in entity && entity.code;
|
|
111
119
|
const id = `focus-${encodeURIComponent(entity.id).replace(/%/g, "")}-popup`;
|
|
112
120
|
return /*#__PURE__*/_react.default.createElement(_baseMap.Styled.MapOverlayPopup, null, /*#__PURE__*/_react.default.createElement(_buildingBlocks.FocusTrapWrapper, {
|
|
113
121
|
closePopup: closePopup,
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_react","_interopRequireWildcard","require","_fromToLocationPicker","_interopRequireDefault","_coreUtils","_buildingBlocks","_flat","_reactIntl","_baseMap","_styled","_enUS","_util","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","defaultMessages","exports","flatten","defaultEnglishMessages","generateLocation","entity","name","lon","entityLon","lat","entityLat","x","y","StationHubDetails","station","createElement","Styled","PopupRow","FormattedMessage","defaultMessage","description","id","values","value","bikesAvailable","spacesAvailable","StopDetails","setViewedStop","stopId","ViewStopButton","onClick","entityIsStation","MapPopup","closePopup","configCompanies","getEntityName","getEntityPrefix","setLocation","_entity$networks","intl","useIntl","Fragment","getNameFunc","makeDefaultGetEntityName","stationNetwork","coreUtils","itinerary","getCompaniesLabelFromNetworks","networks","bikesAvailablePresent","entityIsStationHub","undefined","isFloatingBike","code","encodeURIComponent","replace","MapOverlayPopup","FocusTrapWrapper","PopupTitle","useCallback","label","location","_default"],"sources":["../src/index.tsx"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport FromToLocationPicker from \"@opentripplanner/from-to-location-picker\";\nimport coreUtils from \"@opentripplanner/core-utils\";\n\n// eslint-disable-next-line prettier/prettier\nimport type { Company, ConfiguredCompany, Location, Station, Stop, StopEventHandler } from \"@opentripplanner/types\";\n\nimport { FocusTrapWrapper } from \"@opentripplanner/building-blocks\";\nimport { flatten } from \"flat\";\nimport { FormattedMessage, useIntl } from \"react-intl\";\nimport { Styled } from \"@opentripplanner/base-map\";\n\nimport { ViewStopButton } from \"./styled\";\n\n// Load the default messages.\nimport defaultEnglishMessages from \"../i18n/en-US.yml\";\nimport { makeDefaultGetEntityName } from \"./util\";\n\n// HACK: We should flatten the messages loaded above because\n// the YAML loaders behave differently between webpack and our version of jest:\n// - the yaml loader for webpack returns a nested object,\n// - the yaml loader for jest returns messages with flattened ids.\nexport const defaultMessages: { [key: string]: string } = flatten(defaultEnglishMessages);\n\nconst generateLocation = (entity: Entity, name: string) => {\n // @ts-expect-error some of these values may be null, but that's ok\n const { lon: entityLon, lat: entityLat, x, y } = entity\n\n const lat = entityLat || y\n const lon = entityLon || x\n if (!lat || !lon) return null\n\n return { lat, lon, name };\n}\n\nconst StationHubDetails = ({ station }: { station: Station }) => {\n return (\n <Styled.PopupRow>\n <div>\n <FormattedMessage\n defaultMessage={\n defaultMessages[\"otpUi.MapPopup.availableBikes\"]\n }\n description=\"Label text for the number of bikes available\"\n id=\"otpUi.MapPopup.availableBikes\"\n values={{ value: station.bikesAvailable }}\n />\n </div>\n <div>\n <FormattedMessage\n defaultMessage={\n defaultMessages[\"otpUi.MapPopup.availableDocks\"]\n }\n description=\"Label text for the number of docks available\"\n id=\"otpUi.MapPopup.availableDocks\"\n values={{ value: station.spacesAvailable }}\n />\n </div>\n </Styled.PopupRow>\n )\n}\n\nconst StopDetails = ({ id, setViewedStop }: { id: string, setViewedStop: () => void; }) => {\n return (\n <Styled.PopupRow>\n {id &&\n <strong>\n <FormattedMessage\n defaultMessage={defaultMessages[\"otpUi.MapPopup.stopId\"]}\n description=\"Displays the stop id\"\n id=\"otpUi.MapPopup.stopId\"\n values={{\n stopId: id\n }}\n />\n </strong>}\n <ViewStopButton onClick={setViewedStop} stopId={id}> \n <FormattedMessage\n defaultMessage={defaultMessages[\"otpUi.MapPopup.stopViewer\"]}\n description=\"Text for link that opens the stop viewer\"\n id=\"otpUi.MapPopup.stopViewer\"\n />\n </ViewStopButton>\n </Styled.PopupRow>\n )\n}\n\ntype Entity = Stop | Station\ntype Props = {\n closePopup?: (arg?: any) => void\n configCompanies?: ConfiguredCompany[];\n entity: Entity\n getEntityName?: (entity: Entity, configCompanies: Company[],) => string;\n getEntityPrefix?: (entity: Entity) => JSX.Element\n setLocation?: ({ location, locationType }: { location: Location, locationType: string }) => void;\n setViewedStop?: StopEventHandler;\n};\n\nfunction entityIsStation(entity: Entity): entity is Station {\n return \"bikesAvailable\" in entity\n}\n\n/**\n * Renders a map popup for a stop, scooter, or shared bike\n */\nexport function MapPopup({ closePopup = () => {}, configCompanies, entity, getEntityName, getEntityPrefix, setLocation, setViewedStop }: Props): JSX.Element {\n\n const intl = useIntl()\n if (!entity) return <></>\n\n const getNameFunc = getEntityName || makeDefaultGetEntityName(intl, defaultMessages);\n const name = getNameFunc(entity, configCompanies);\n\n const stationNetwork = \"networks\" in entity && (coreUtils.itinerary.getCompaniesLabelFromNetworks(entity?.networks || [], configCompanies) || entity?.networks?.[0]);\n\n const bikesAvailablePresent = entityIsStation(entity)\n const entityIsStationHub = bikesAvailablePresent && entity?.bikesAvailable !== undefined && !entity?.isFloatingBike;\n const stopId = !bikesAvailablePresent && entity?.code;\n const id = `focus-${encodeURIComponent(entity.id).replace(/%/g, \"\")}-popup`\n\n return (\n <Styled.MapOverlayPopup>\n <FocusTrapWrapper closePopup={closePopup} id={id}>\n <Styled.PopupTitle>\n {getEntityPrefix && getEntityPrefix(entity)}\n <FormattedMessage\n defaultMessage={defaultMessages[\"otpUi.MapPopup.popupTitle\"]}\n description=\"Text for title of the popup, contains an optional company name\"\n id=\"otpUi.MapPopup.popupTitle\"\n values={{ name, stationNetwork }}\n />\n </Styled.PopupTitle>\n {/* render dock info if it is available */}\n {entityIsStationHub && <StationHubDetails station={entity} />}\n\n {/* render stop viewer link if available */}\n {setViewedStop && !bikesAvailablePresent && (\n <StopDetails\n id={stopId}\n setViewedStop={useCallback(() => setViewedStop(entity), [entity])}\n />\n )}\n\n {/* The \"Set as [from/to]\" ButtonGroup */}\n {setLocation && (\n <Styled.PopupRow>\n <FromToLocationPicker\n label\n location={generateLocation(entity, name)}\n setLocation={setLocation}\n />\n </Styled.PopupRow>\n )}\n </FocusTrapWrapper>\n \n </Styled.MapOverlayPopup>\n );\n}\n\nexport default MapPopup;"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["_react","_interopRequireWildcard","require","_fromToLocationPicker","_interopRequireDefault","_buildingBlocks","_flat","_reactIntl","_baseMap","_util","_styled","_enUS","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","defaultMessages","exports","flatten","defaultEnglishMessages","generateLocation","entity","name","lon","entityLon","lat","entityLat","x","y","StationHubDetails","station","createElement","Styled","PopupRow","FormattedMessage","defaultMessage","description","id","values","value","vehiclesAvailable","spacesAvailable","StopDetails","setViewedStop","stopId","ViewStopButton","onClick","entityIsStation","MapPopup","closePopup","configCompanies","getEntityName","getEntityPrefix","setLocation","feeds","intl","useIntl","Fragment","getNameFunc","makeDefaultGetEntityName","feedName","_feed$publisher","feedId","split","feed","find","f","publisher","stationNetwork","getNetwork","bikesAvailablePresent","entityIsStationHub","undefined","isFloatingBike","code","encodeURIComponent","replace","MapOverlayPopup","FocusTrapWrapper","PopupTitle","useCallback","label","location","_default"],"sources":["../src/index.tsx"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport FromToLocationPicker from \"@opentripplanner/from-to-location-picker\";\n\n// eslint-disable-next-line prettier/prettier\nimport type {\n Company,\n ConfiguredCompany,\n Location,\n Stop,\n StopEventHandler,\n TileLayerStation\n} from \"@opentripplanner/types\";\n\nimport { FocusTrapWrapper } from \"@opentripplanner/building-blocks\";\nimport { flatten } from \"flat\";\nimport { FormattedMessage, useIntl } from \"react-intl\";\nimport { Styled } from \"@opentripplanner/base-map\";\n\nimport { Entity, getNetwork, makeDefaultGetEntityName, type StopIdAgencyMap } from \"./util\";\nimport { ViewStopButton } from \"./styled\";\n\n// Load the default messages.\nimport defaultEnglishMessages from \"../i18n/en-US.yml\";\n\n// HACK: We should flatten the messages loaded above because\n// the YAML loaders behave differently between webpack and our version of jest:\n// - the yaml loader for webpack returns a nested object,\n// - the yaml loader for jest returns messages with flattened ids.\nexport const defaultMessages: { [key: string]: string } = flatten(defaultEnglishMessages);\n\nexport type Feed = {\n feedId: string;\n publisher: {\n name: string;\n };\n};\n\n\nconst generateLocation = (entity: Entity, name: string) => {\n // @ts-expect-error some of these values may be null, but that's ok\n const { lon: entityLon, lat: entityLat, x, y } = entity\n\n const lat = entityLat || y\n const lon = entityLon || x\n if (!lat || !lon) return null\n\n return { lat, lon, name };\n}\n\nconst StationHubDetails = ({ station }: { station: TileLayerStation }) => {\n return (\n <Styled.PopupRow>\n <div>\n <FormattedMessage\n defaultMessage={\n defaultMessages[\"otpUi.MapPopup.availableBikes\"]\n }\n description=\"Label text for the number of bikes available\"\n id=\"otpUi.MapPopup.availableBikes\"\n values={{ value: station.vehiclesAvailable }}\n />\n </div>\n <div>\n <FormattedMessage\n defaultMessage={\n defaultMessages[\"otpUi.MapPopup.availableDocks\"]\n }\n description=\"Label text for the number of docks available\"\n id=\"otpUi.MapPopup.availableDocks\"\n values={{ value: station.spacesAvailable }}\n />\n </div>\n </Styled.PopupRow>\n )\n}\n\nconst StopDetails = ({ id, setViewedStop }: { id: string, setViewedStop: () => void; }) => {\n return (\n <Styled.PopupRow>\n {id &&\n <strong>\n <FormattedMessage\n defaultMessage={defaultMessages[\"otpUi.MapPopup.stopId\"]}\n description=\"Displays the stop id\"\n id=\"otpUi.MapPopup.stopId\"\n values={{\n stopId: id\n }}\n />\n </strong>}\n <ViewStopButton onClick={setViewedStop} stopId={id}> \n <FormattedMessage\n defaultMessage={defaultMessages[\"otpUi.MapPopup.stopViewer\"]}\n description=\"Text for link that opens the stop viewer\"\n id=\"otpUi.MapPopup.stopViewer\"\n />\n </ViewStopButton>\n </Styled.PopupRow>\n )\n}\n\ntype Props = {\n closePopup?: (arg?: boolean) => void\n configCompanies?: ConfiguredCompany[];\n entity: Entity\n getEntityName?: (entity: Entity, configCompanies: Company[], feedName?: string) => string;\n getEntityPrefix?: (entity: Entity) => JSX.Element\n feeds?: Feed[]\n setLocation?: ({ location, locationType }: { location: Location, locationType: string }) => void;\n setViewedStop?: StopEventHandler;\n};\n\nfunction entityIsStation(entity: Entity): entity is TileLayerStation {\n return \"vehiclesAvailable\" in entity\n}\n\n/**\n * Renders a map popup for a stop, scooter, or shared bike\n */\nexport function MapPopup({ \n closePopup = () => {}, \n configCompanies, \n entity, \n getEntityName, \n getEntityPrefix, \n setLocation, \n setViewedStop, \n feeds,\n}: Props): JSX.Element {\n\n const intl = useIntl()\n if (!entity) return <></>\n\n const getNameFunc = getEntityName || makeDefaultGetEntityName(intl, defaultMessages);\n \n // Find the feed name using the logic from generateLabel in otp.ts\n let feedName: string | undefined;\n if (feeds && entity.id) {\n const feedId = entity.id.split(\":\")[0];\n const feed = feeds.find(f => f.feedId === feedId);\n feedName = feed?.publisher?.name;\n }\n \n const name = getNameFunc(entity, configCompanies, feedName);\n\n const stationNetwork = getNetwork(entity, configCompanies);\n\n const bikesAvailablePresent = entityIsStation(entity)\n const entityIsStationHub = bikesAvailablePresent && entity.vehiclesAvailable !== undefined && !entity.isFloatingBike;\n const stopId = !bikesAvailablePresent && \"code\" in entity && entity.code;\n const id = `focus-${encodeURIComponent(entity.id).replace(/%/g, \"\")}-popup`\n\n return (\n <Styled.MapOverlayPopup>\n <FocusTrapWrapper closePopup={closePopup} id={id}>\n <Styled.PopupTitle>\n {getEntityPrefix && getEntityPrefix(entity)}\n <FormattedMessage\n defaultMessage={defaultMessages[\"otpUi.MapPopup.popupTitle\"]}\n description=\"Text for title of the popup, contains an optional company name\"\n id=\"otpUi.MapPopup.popupTitle\"\n values={{ name, stationNetwork }}\n />\n </Styled.PopupTitle>\n {/* render dock info if it is available */}\n {entityIsStationHub && <StationHubDetails station={entity} />}\n\n {/* render stop viewer link if available */}\n {setViewedStop && !bikesAvailablePresent && (\n <StopDetails\n id={stopId}\n setViewedStop={useCallback(() => setViewedStop(entity as Stop), [entity])}\n />\n )}\n\n {/* The \"Set as [from/to]\" ButtonGroup */}\n {setLocation && (\n <Styled.PopupRow>\n <FromToLocationPicker\n label\n location={generateLocation(entity, name)}\n setLocation={setLocation}\n />\n </Styled.PopupRow>\n )}\n </FocusTrapWrapper>\n \n </Styled.MapOverlayPopup>\n );\n}\n\nexport default MapPopup;\nexport { type StopIdAgencyMap };"],"mappings":"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","ignoreList":[]}
|
package/lib/util.d.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
import { Company, Station, Stop } from "@opentripplanner/types";
|
|
1
|
+
import { Agency, Company, Station, Stop, TileLayerStation } from "@opentripplanner/types";
|
|
2
2
|
import { IntlShape } from "react-intl";
|
|
3
|
+
export type StopIdAgencyMap = Record<string, Agency>;
|
|
4
|
+
export type Entity = Station | Stop | TileLayerStation;
|
|
5
|
+
export declare function getNetwork(entity: Entity, configCompanies: Company[]): string;
|
|
3
6
|
export declare function makeDefaultGetEntityName(intl: IntlShape, defaultEnglishMessages: {
|
|
4
7
|
[key: string]: string;
|
|
5
|
-
}): (entity:
|
|
8
|
+
}): (entity: Entity, configCompanies: Company[], feedName?: string) => string | null;
|
|
6
9
|
//# sourceMappingURL=util.d.ts.map
|
package/lib/util.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,OAAO,EACP,OAAO,EACP,IAAI,EACJ,gBAAgB,EACjB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACrD,MAAM,MAAM,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,gBAAgB,CAAC;AAEvD,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,GAAG,MAAM,CAS7E;AAGD,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,SAAS,EACf,sBAAsB,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,YAGvC,MAAM,mBACG,OAAO,EAAE,aACf,MAAM,KAChB,MAAM,GAAG,IAAI,CAoDjB"}
|
package/lib/util.js
CHANGED
|
@@ -4,15 +4,16 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
+
exports.getNetwork = getNetwork;
|
|
7
8
|
exports.makeDefaultGetEntityName = makeDefaultGetEntityName;
|
|
8
9
|
var _coreUtils = _interopRequireDefault(require("@opentripplanner/core-utils"));
|
|
10
|
+
function getNetwork(entity, configCompanies) {
|
|
11
|
+
return "network" in entity && (_coreUtils.default.itinerary.getCompaniesLabelFromNetworks([entity.network] || [], configCompanies) || entity.network);
|
|
12
|
+
}
|
|
13
|
+
|
|
9
14
|
// eslint-disable-next-line import/prefer-default-export
|
|
10
15
|
function makeDefaultGetEntityName(intl, defaultEnglishMessages) {
|
|
11
|
-
return function defaultGetEntityName(entity, configCompanies) {
|
|
12
|
-
var _entity$networks;
|
|
13
|
-
// TODO: Stop generating this / passing it to the car string? Is it needed?
|
|
14
|
-
// In English we say "Car: " instead
|
|
15
|
-
const stationNetworks = "networks" in entity && (_coreUtils.default.itinerary.getCompaniesLabelFromNetworks((entity === null || entity === void 0 ? void 0 : entity.networks) || [], configCompanies) || (entity === null || entity === void 0 || (_entity$networks = entity.networks) === null || _entity$networks === void 0 ? void 0 : _entity$networks[0]));
|
|
16
|
+
return function defaultGetEntityName(entity, configCompanies, feedName) {
|
|
16
17
|
let stationName = entity.name || entity.id;
|
|
17
18
|
// If the station name or id is a giant UUID (with more than 3 "-" characters)
|
|
18
19
|
// best not to show that at all. The company name will still be shown.
|
|
@@ -29,12 +30,15 @@ function makeDefaultGetEntityName(intl, defaultEnglishMessages) {
|
|
|
29
30
|
name: stationName
|
|
30
31
|
});
|
|
31
32
|
} else if ("isFloatingCar" in entity && entity.isFloatingCar) {
|
|
33
|
+
// TODO: Stop generating this / passing it to the car string? Is it needed?
|
|
34
|
+
// In English we say "Car: " instead
|
|
35
|
+
const stationNetwork = getNetwork(entity, configCompanies);
|
|
32
36
|
stationName = intl.formatMessage({
|
|
33
37
|
defaultMessage: defaultEnglishMessages["otpUi.MapPopup.floatingCar"],
|
|
34
38
|
description: "Popup title for a free-floating car",
|
|
35
39
|
id: "otpUi.MapPopup.floatingCar"
|
|
36
40
|
}, {
|
|
37
|
-
company:
|
|
41
|
+
company: stationNetwork,
|
|
38
42
|
name: stationName
|
|
39
43
|
});
|
|
40
44
|
} else if ("isFloatingVehicle" in entity && entity.isFloatingVehicle) {
|
|
@@ -46,6 +50,8 @@ function makeDefaultGetEntityName(intl, defaultEnglishMessages) {
|
|
|
46
50
|
}, {
|
|
47
51
|
name: stationName
|
|
48
52
|
});
|
|
53
|
+
} else if (feedName && "code" in entity) {
|
|
54
|
+
stationName = `${stationName} (${feedName} ${entity.code})`;
|
|
49
55
|
}
|
|
50
56
|
return stationName;
|
|
51
57
|
};
|
package/lib/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","names":["_coreUtils","_interopRequireDefault","require","
|
|
1
|
+
{"version":3,"file":"util.js","names":["_coreUtils","_interopRequireDefault","require","getNetwork","entity","configCompanies","coreUtils","itinerary","getCompaniesLabelFromNetworks","network","makeDefaultGetEntityName","intl","defaultEnglishMessages","defaultGetEntityName","feedName","stationName","name","id","match","length","isFloatingBike","formatMessage","defaultMessage","description","isFloatingCar","stationNetwork","company","isFloatingVehicle","code"],"sources":["../src/util.ts"],"sourcesContent":["import {\n Agency,\n Company,\n Station,\n Stop,\n TileLayerStation\n} from \"@opentripplanner/types\";\nimport { IntlShape } from \"react-intl\";\nimport coreUtils from \"@opentripplanner/core-utils\";\n\nexport type StopIdAgencyMap = Record<string, Agency>;\nexport type Entity = Station | Stop | TileLayerStation;\n\nexport function getNetwork(entity: Entity, configCompanies: Company[]): string {\n return (\n \"network\" in entity &&\n (coreUtils.itinerary.getCompaniesLabelFromNetworks(\n [entity.network] || [],\n configCompanies\n ) ||\n entity.network)\n );\n}\n\n// eslint-disable-next-line import/prefer-default-export\nexport function makeDefaultGetEntityName(\n intl: IntlShape,\n defaultEnglishMessages: { [key: string]: string }\n) {\n return function defaultGetEntityName(\n entity: Entity,\n configCompanies: Company[],\n feedName?: string\n ): string | null {\n let stationName: string | null = entity.name || entity.id;\n // If the station name or id is a giant UUID (with more than 3 \"-\" characters)\n // best not to show that at all. The company name will still be shown.\n // Also ignore \"Default Vehicle Type\"\n if (\n (stationName.match(/-/g) || []).length > 3 ||\n stationName === \"Default vehicle type\"\n ) {\n stationName = null;\n }\n\n if (\"isFloatingBike\" in entity && entity.isFloatingBike) {\n stationName = intl.formatMessage(\n {\n defaultMessage: defaultEnglishMessages[\"otpUi.MapPopup.floatingBike\"],\n description: \"Popup title for a free-floating bike\",\n id: \"otpUi.MapPopup.floatingBike\"\n },\n { name: stationName }\n );\n } else if (\"isFloatingCar\" in entity && entity.isFloatingCar) {\n // TODO: Stop generating this / passing it to the car string? Is it needed?\n // In English we say \"Car: \" instead\n const stationNetwork = getNetwork(entity, configCompanies);\n stationName = intl.formatMessage(\n {\n defaultMessage: defaultEnglishMessages[\"otpUi.MapPopup.floatingCar\"],\n description: \"Popup title for a free-floating car\",\n id: \"otpUi.MapPopup.floatingCar\"\n },\n {\n company: stationNetwork,\n name: stationName\n }\n );\n } else if (\"isFloatingVehicle\" in entity && entity.isFloatingVehicle) {\n // assumes that all floating vehicles are E-scooters\n stationName = intl.formatMessage(\n {\n defaultMessage:\n defaultEnglishMessages[\"otpUi.MapPopup.floatingEScooter\"],\n description: \"Popup title for a free-floating e-scooter\",\n id: \"otpUi.MapPopup.floatingEScooter\"\n },\n { name: stationName }\n );\n } else if (feedName && \"code\" in entity) {\n stationName = `${stationName} (${feedName} ${entity.code})`;\n }\n return stationName;\n };\n}\n"],"mappings":";;;;;;;;AAQA,IAAAA,UAAA,GAAAC,sBAAA,CAAAC,OAAA;AAKO,SAASC,UAAUA,CAACC,MAAc,EAAEC,eAA0B,EAAU;EAC7E,OACE,SAAS,IAAID,MAAM,KAClBE,kBAAS,CAACC,SAAS,CAACC,6BAA6B,CAChD,CAACJ,MAAM,CAACK,OAAO,CAAC,IAAI,EAAE,EACtBJ,eACF,CAAC,IACCD,MAAM,CAACK,OAAO,CAAC;AAErB;;AAEA;AACO,SAASC,wBAAwBA,CACtCC,IAAe,EACfC,sBAAiD,EACjD;EACA,OAAO,SAASC,oBAAoBA,CAClCT,MAAc,EACdC,eAA0B,EAC1BS,QAAiB,EACF;IACf,IAAIC,WAA0B,GAAGX,MAAM,CAACY,IAAI,IAAIZ,MAAM,CAACa,EAAE;IACzD;IACA;IACA;IACA,IACE,CAACF,WAAW,CAACG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EAAEC,MAAM,GAAG,CAAC,IAC1CJ,WAAW,KAAK,sBAAsB,EACtC;MACAA,WAAW,GAAG,IAAI;IACpB;IAEA,IAAI,gBAAgB,IAAIX,MAAM,IAAIA,MAAM,CAACgB,cAAc,EAAE;MACvDL,WAAW,GAAGJ,IAAI,CAACU,aAAa,CAC9B;QACEC,cAAc,EAAEV,sBAAsB,CAAC,6BAA6B,CAAC;QACrEW,WAAW,EAAE,sCAAsC;QACnDN,EAAE,EAAE;MACN,CAAC,EACD;QAAED,IAAI,EAAED;MAAY,CACtB,CAAC;IACH,CAAC,MAAM,IAAI,eAAe,IAAIX,MAAM,IAAIA,MAAM,CAACoB,aAAa,EAAE;MAC5D;MACA;MACA,MAAMC,cAAc,GAAGtB,UAAU,CAACC,MAAM,EAAEC,eAAe,CAAC;MAC1DU,WAAW,GAAGJ,IAAI,CAACU,aAAa,CAC9B;QACEC,cAAc,EAAEV,sBAAsB,CAAC,4BAA4B,CAAC;QACpEW,WAAW,EAAE,qCAAqC;QAClDN,EAAE,EAAE;MACN,CAAC,EACD;QACES,OAAO,EAAED,cAAc;QACvBT,IAAI,EAAED;MACR,CACF,CAAC;IACH,CAAC,MAAM,IAAI,mBAAmB,IAAIX,MAAM,IAAIA,MAAM,CAACuB,iBAAiB,EAAE;MACpE;MACAZ,WAAW,GAAGJ,IAAI,CAACU,aAAa,CAC9B;QACEC,cAAc,EACZV,sBAAsB,CAAC,iCAAiC,CAAC;QAC3DW,WAAW,EAAE,2CAA2C;QACxDN,EAAE,EAAE;MACN,CAAC,EACD;QAAED,IAAI,EAAED;MAAY,CACtB,CAAC;IACH,CAAC,MAAM,IAAID,QAAQ,IAAI,MAAM,IAAIV,MAAM,EAAE;MACvCW,WAAW,GAAG,GAAGA,WAAW,KAAKD,QAAQ,IAAIV,MAAM,CAACwB,IAAI,GAAG;IAC7D;IACA,OAAOb,WAAW;EACpB,CAAC;AACH","ignoreList":[]}
|