4006.js.map (29544B)
1 {"version":3,"file":"bundles/9cacd6575f4c8ee1aedb/4006.js","mappings":"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","sources":["webpack://element-web/./src/components/views/location/LocationViewDialog.tsx","webpack://element-web/./src/components/views/location/Map.tsx","webpack://element-web/./src/utils/location/useMap.ts","webpack://element-web/./src/components/views/location/Marker.tsx","webpack://element-web/./src/components/views/location/SmartMarker.tsx","webpack://element-web/./src/components/views/location/ZoomButtons.tsx","webpack://element-web/./src/utils/location/map.ts","webpack://element-web/./node_modules/@vector-im/compound-design-tokens/assets/web/icons/minus.js"],"sourcesContent":["/*\nCopyright 2024 New Vector Ltd.\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nSPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE files in the repository root for full details.\n*/\n\nimport React from \"react\";\nimport { type MatrixEvent, type MatrixClient } from \"matrix-js-sdk/src/matrix\";\n\nimport BaseDialog from \"../dialogs/BaseDialog\";\nimport { locationEventGeoUri, isSelfLocation } from \"../../../utils/location\";\nimport Map from \"./Map\";\nimport SmartMarker from \"./SmartMarker\";\nimport ZoomButtons from \"./ZoomButtons\";\n\ninterface IProps {\n matrixClient: MatrixClient;\n mxEvent: MatrixEvent;\n onFinished(): void;\n}\n\ninterface IState {\n error?: Error;\n}\n\n/**\n * Dialog to view m.location events maximised\n */\nexport default class LocationViewDialog extends React.Component<IProps, IState> {\n public constructor(props: IProps) {\n super(props);\n\n this.state = {\n error: undefined,\n };\n }\n\n private getBodyId = (): string => {\n return `mx_LocationViewDialog_${this.props.mxEvent.getId()}`;\n };\n\n private onError = (error: Error): void => {\n this.setState({ error });\n };\n\n public render(): React.ReactNode {\n const { mxEvent } = this.props;\n\n // only pass member to marker when should render avatar marker\n const markerRoomMember = (isSelfLocation(mxEvent.getContent()) && mxEvent.sender) || undefined;\n const geoUri = locationEventGeoUri(mxEvent);\n return (\n <BaseDialog className=\"mx_LocationViewDialog\" onFinished={this.props.onFinished} fixedWidth={false}>\n <Map\n id={this.getBodyId()}\n centerGeoUri={geoUri}\n onError={this.onError}\n interactive\n className=\"mx_LocationViewDialog_map\"\n allowGeolocate\n >\n {({ map }) => (\n <>\n <SmartMarker\n map={map}\n id={`${this.getBodyId()}-marker`}\n geoUri={geoUri}\n roomMember={markerRoomMember}\n />\n <ZoomButtons map={map} />\n </>\n )}\n </Map>\n </BaseDialog>\n );\n }\n}\n","/*\nCopyright 2024 New Vector Ltd.\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nSPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE files in the repository root for full details.\n*/\n\nimport React, { type ReactNode, useContext, useEffect, useState } from \"react\";\nimport classNames from \"classnames\";\nimport * as maplibregl from \"maplibre-gl\";\nimport { ClientEvent, type IClientWellKnown } from \"matrix-js-sdk/src/matrix\";\nimport { logger } from \"matrix-js-sdk/src/logger\";\n\nimport MatrixClientContext from \"../../../contexts/MatrixClientContext\";\nimport { useEventEmitterState } from \"../../../hooks/useEventEmitter\";\nimport { parseGeoUri, positionFailureMessage } from \"../../../utils/location\";\nimport { tileServerFromWellKnown } from \"../../../utils/WellKnownUtils\";\nimport { useMap } from \"../../../utils/location/useMap\";\nimport { type Bounds } from \"../../../utils/beacon/bounds\";\nimport Modal from \"../../../Modal\";\nimport ErrorDialog from \"../dialogs/ErrorDialog\";\nimport { _t } from \"../../../languageHandler\";\n\nconst useMapWithStyle = ({\n id,\n centerGeoUri,\n onError,\n interactive,\n bounds,\n allowGeolocate,\n}: {\n id: string;\n centerGeoUri?: string;\n onError?(error: Error): void;\n interactive?: boolean;\n bounds?: Bounds;\n allowGeolocate?: boolean;\n}): {\n map: maplibregl.Map | undefined;\n bodyId: string;\n} => {\n const bodyId = `mx_Map_${id}`;\n\n // style config\n const context = useContext(MatrixClientContext);\n const mapStyleUrl = useEventEmitterState(\n context,\n ClientEvent.ClientWellKnown,\n (clientWellKnown: IClientWellKnown) => tileServerFromWellKnown(clientWellKnown)?.[\"map_style_url\"],\n );\n\n const map = useMap({ interactive, bodyId, onError });\n\n useEffect(() => {\n if (mapStyleUrl && map) {\n map.setStyle(mapStyleUrl);\n }\n }, [mapStyleUrl, map]);\n\n useEffect(() => {\n if (map && centerGeoUri) {\n try {\n const coords = parseGeoUri(centerGeoUri);\n if (!coords) {\n throw new Error(\"Invalid geo URI\");\n }\n map.setCenter({ lon: coords.longitude, lat: coords.latitude });\n } catch (e) {\n logger.error(\"Could not set map center\", e);\n }\n }\n }, [map, centerGeoUri]);\n\n useEffect(() => {\n if (map && bounds) {\n try {\n const lngLatBounds = new maplibregl.LngLatBounds(\n [bounds.west, bounds.south],\n [bounds.east, bounds.north],\n );\n map.fitBounds(lngLatBounds, { padding: 100, maxZoom: 15 });\n } catch (e) {\n logger.error(\"Invalid map bounds\", e);\n }\n }\n }, [map, bounds]);\n\n const [geolocate, setGeolocate] = useState<maplibregl.GeolocateControl | null>(null);\n\n useEffect(() => {\n if (!map) {\n return;\n }\n if (allowGeolocate && !geolocate) {\n const geolocate = new maplibregl.GeolocateControl({\n positionOptions: {\n enableHighAccuracy: true,\n },\n trackUserLocation: false,\n });\n setGeolocate(geolocate);\n map.addControl(geolocate);\n }\n if (!allowGeolocate && geolocate) {\n map.removeControl(geolocate);\n setGeolocate(null);\n }\n }, [map, geolocate, allowGeolocate]);\n\n useEffect(() => {\n if (geolocate) {\n geolocate.on(\"error\", onGeolocateError);\n return () => {\n geolocate.off(\"error\", onGeolocateError);\n };\n }\n }, [geolocate]);\n\n return {\n map,\n bodyId,\n };\n};\n\nconst onGeolocateError = (e: GeolocationPositionError): void => {\n logger.error(\"Could not fetch location\", e);\n Modal.createDialog(ErrorDialog, {\n title: _t(\"location_sharing|error_fetch_location\"),\n description: positionFailureMessage(e.code) ?? \"\",\n });\n};\n\nexport interface MapProps {\n id: string;\n interactive?: boolean;\n /**\n * set map center to geoUri coords\n * Center will only be set to valid geoUri\n * this prop is only simply diffed by useEffect, so to trigger *recentering* of the same geoUri\n * append the uri with a var not used by the geoUri spec\n * eg a timestamp: `geo:54,42;mxTs=123`\n */\n centerGeoUri?: string;\n bounds?: Bounds;\n className?: string;\n allowGeolocate?: boolean;\n onClick?: () => void;\n onError?: (error: Error) => void;\n children?: (renderProps: { map: maplibregl.Map }) => ReactNode;\n}\n\nconst MapComponent: React.FC<MapProps> = ({\n bounds,\n centerGeoUri,\n children,\n className,\n allowGeolocate,\n id,\n interactive,\n onError,\n onClick,\n}) => {\n const { map, bodyId } = useMapWithStyle({ centerGeoUri, onError, id, interactive, bounds, allowGeolocate });\n\n const onMapClick = (event: React.MouseEvent<HTMLDivElement, MouseEvent>): void => {\n // Eat click events when clicking the attribution button\n const target = event.target as Element;\n if (target.classList.contains(\"maplibregl-ctrl-attrib-button\")) {\n return;\n }\n\n onClick?.();\n };\n\n return (\n <div className={classNames(\"mx_Map\", className)} id={bodyId} onClick={onMapClick}>\n {!!children && !!map && children({ map })}\n </div>\n );\n};\n\nexport default MapComponent;\n","/*\nCopyright 2024 New Vector Ltd.\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nSPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE files in the repository root for full details.\n*/\n\nimport { useEffect, useState } from \"react\";\n\nimport type { Map as MapLibreMap } from \"maplibre-gl\";\nimport { createMap } from \"./map\";\nimport { useMatrixClientContext } from \"../../contexts/MatrixClientContext\";\n\ninterface UseMapProps {\n bodyId: string;\n onError?: (error: Error) => void;\n interactive?: boolean;\n}\n\n/**\n * Create a map instance\n * Add listeners for errors\n * Make sure `onError` has a stable reference\n * As map is recreated on changes to it\n */\nexport const useMap = ({ interactive, bodyId, onError }: UseMapProps): MapLibreMap | undefined => {\n const cli = useMatrixClientContext();\n const [map, setMap] = useState<MapLibreMap>();\n\n useEffect(\n () => {\n let map: MapLibreMap | undefined;\n try {\n map = createMap(cli, !!interactive, bodyId, onError);\n setMap(map);\n } catch (error) {\n console.error(\"Error encountered in useMap\", error);\n if (error instanceof Error) {\n onError?.(error);\n }\n }\n return () => {\n if (map) {\n map.remove();\n setMap(undefined);\n }\n };\n },\n // map is excluded as a dependency\n [cli, interactive, bodyId, onError],\n );\n\n return map;\n};\n","/*\nCopyright 2024 New Vector Ltd.\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nSPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE files in the repository root for full details.\n*/\n\nimport React, { type JSX, type ReactNode, type Ref, useState } from \"react\";\nimport classNames from \"classnames\";\nimport { type RoomMember } from \"matrix-js-sdk/src/matrix\";\nimport LocationIcon from \"@vector-im/compound-design-tokens/assets/web/icons/location-pin-solid\";\n\nimport { getUserNameColorClass } from \"../../../utils/FormattingUtils\";\nimport MemberAvatar from \"../avatars/MemberAvatar\";\n\ninterface Props {\n id?: string;\n // renders MemberAvatar when provided\n roomMember?: RoomMember;\n // use member text color as background\n useMemberColor?: boolean;\n tooltip?: ReactNode;\n ref?: Ref<HTMLDivElement>;\n}\n\n/**\n * Wrap with tooltip handlers when\n * tooltip is truthy\n */\nconst OptionalTooltip: React.FC<{\n tooltip?: ReactNode;\n children: ReactNode;\n}> = ({ tooltip, children }) => {\n const [isVisible, setIsVisible] = useState(false);\n if (!tooltip) {\n return <>{children}</>;\n }\n\n const show = (): void => setIsVisible(true);\n const hide = (): void => setIsVisible(false);\n const toggleVisibility = (e: React.MouseEvent<HTMLDivElement, MouseEvent>): void => {\n // stop map from zooming in on click\n e.stopPropagation();\n setIsVisible(!isVisible);\n };\n\n return (\n <div onMouseEnter={show} onClick={toggleVisibility} onMouseLeave={hide}>\n {children}\n {isVisible && tooltip}\n </div>\n );\n};\n\n/**\n * Generic location marker\n */\nconst Marker = ({ id, roomMember, useMemberColor, tooltip, ref }: Props): JSX.Element => {\n const memberColorClass = useMemberColor && roomMember ? getUserNameColorClass(roomMember.userId) : \"\";\n return (\n <div\n ref={ref}\n id={id}\n className={classNames(\"mx_Marker\", memberColorClass, {\n mx_Marker_defaultColor: !memberColorClass,\n })}\n >\n <OptionalTooltip tooltip={tooltip}>\n <div className=\"mx_Marker_border\">\n {roomMember ? (\n <MemberAvatar\n member={roomMember}\n size=\"36px\"\n viewUserOnClick={false}\n // no mxid on hover when marker has tooltip\n hideTitle={!!tooltip}\n />\n ) : (\n <LocationIcon className=\"mx_Marker_icon\" />\n )}\n </div>\n </OptionalTooltip>\n </div>\n );\n};\n\nexport default Marker;\n","/*\nCopyright 2024 New Vector Ltd.\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nSPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE files in the repository root for full details.\n*/\n\nimport React, { type ReactNode, useCallback, useEffect, useState } from \"react\";\nimport { type RoomMember } from \"matrix-js-sdk/src/matrix\";\n\nimport type * as maplibregl from \"maplibre-gl\";\nimport { parseGeoUri } from \"../../../utils/location\";\nimport { createMarker } from \"../../../utils/location/map\";\nimport Marker from \"./Marker\";\n\nconst useMapMarker = (\n map: maplibregl.Map,\n geoUri: string,\n): { marker?: maplibregl.Marker; onElementRef: (el: HTMLDivElement) => void } => {\n const [marker, setMarker] = useState<maplibregl.Marker>();\n\n const onElementRef = useCallback(\n (element: HTMLDivElement) => {\n if (marker || !element) {\n return;\n }\n const coords = parseGeoUri(geoUri);\n if (coords) {\n const newMarker = createMarker(coords, element);\n newMarker.addTo(map);\n setMarker(newMarker);\n }\n },\n [marker, geoUri, map],\n );\n\n useEffect(() => {\n if (marker) {\n const coords = parseGeoUri(geoUri);\n if (coords) {\n marker.setLngLat({ lon: coords.longitude, lat: coords.latitude });\n }\n }\n }, [marker, geoUri]);\n\n useEffect(\n () => () => {\n if (marker) {\n marker.remove();\n }\n },\n [marker],\n );\n\n return {\n marker,\n onElementRef,\n };\n};\n\nexport interface SmartMarkerProps {\n map: maplibregl.Map;\n geoUri: string;\n id?: string;\n // renders MemberAvatar when provided\n roomMember?: RoomMember;\n // use member text color as background\n useMemberColor?: boolean;\n tooltip?: ReactNode;\n}\n\n/**\n * Generic location marker\n */\nconst SmartMarker: React.FC<SmartMarkerProps> = ({ id, map, geoUri, roomMember, useMemberColor, tooltip }) => {\n const { onElementRef } = useMapMarker(map, geoUri);\n\n return (\n // maplibregl hijacks the Marker dom element\n // and removes it from the dom when the maplibregl.Marker instance\n // is removed\n // wrap in a span so that react doesn't get confused\n // when trying to unmount this component\n <span>\n <Marker\n ref={onElementRef}\n id={id}\n roomMember={roomMember}\n useMemberColor={useMemberColor}\n tooltip={tooltip}\n />\n </span>\n );\n};\n\nexport default SmartMarker;\n","/*\nCopyright 2024 New Vector Ltd.\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nSPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE files in the repository root for full details.\n*/\n\nimport React from \"react\";\nimport { PlusIcon, MinusIcon } from \"@vector-im/compound-design-tokens/assets/web/icons\";\n\nimport type * as maplibregl from \"maplibre-gl\";\nimport { _t } from \"../../../languageHandler\";\nimport AccessibleButton from \"../elements/AccessibleButton\";\n\ninterface Props {\n map: maplibregl.Map;\n}\n\nconst ZoomButtons: React.FC<Props> = ({ map }) => {\n const onZoomIn = (): void => {\n map.zoomIn();\n };\n\n const onZoomOut = (): void => {\n map.zoomOut();\n };\n\n return (\n <div className=\"mx_ZoomButtons\">\n <AccessibleButton\n onClick={onZoomIn}\n data-testid=\"map-zoom-in-button\"\n title={_t(\"action|zoom_in\")}\n className=\"mx_ZoomButtons_button\"\n >\n <PlusIcon className=\"mx_ZoomButtons_icon\" />\n </AccessibleButton>\n <AccessibleButton\n onClick={onZoomOut}\n data-testid=\"map-zoom-out-button\"\n title={_t(\"action|zoom_out\")}\n className=\"mx_ZoomButtons_button\"\n >\n <MinusIcon className=\"mx_ZoomButtons_icon\" />\n </AccessibleButton>\n </div>\n );\n};\n\nexport default ZoomButtons;\n","/*\nCopyright 2024 New Vector Ltd.\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nSPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE files in the repository root for full details.\n*/\n\nimport * as maplibregl from \"maplibre-gl\";\nimport { type MatrixClient } from \"matrix-js-sdk/src/matrix\";\nimport { logger } from \"matrix-js-sdk/src/logger\";\n\nimport { _t } from \"../../languageHandler\";\nimport { findMapStyleUrl } from \"./findMapStyleUrl\";\nimport { LocationShareError } from \"./LocationShareErrors\";\n\nexport const createMap = (\n client: MatrixClient,\n interactive: boolean,\n bodyId: string,\n onError?: (error: Error) => void,\n): maplibregl.Map => {\n try {\n const styleUrl = findMapStyleUrl(client);\n\n const map = new maplibregl.Map({\n container: bodyId,\n style: styleUrl,\n zoom: 15,\n interactive,\n attributionControl: false,\n locale: {\n \"AttributionControl.ToggleAttribution\": _t(\"location_sharing|toggle_attribution\"),\n \"AttributionControl.MapFeedback\": _t(\"location_sharing|map_feedback\"),\n \"FullscreenControl.Enter\": _t(\"action|enter_fullscreen\"),\n \"FullscreenControl.Exit\": _t(\"action|exit_fullscreeen\"),\n \"GeolocateControl.FindMyLocation\": _t(\"location_sharing|find_my_location\"),\n \"GeolocateControl.LocationNotAvailable\": _t(\"location_sharing|location_not_available\"),\n \"LogoControl.Title\": _t(\"location_sharing|mapbox_logo\"),\n \"NavigationControl.ResetBearing\": _t(\"location_sharing|reset_bearing\"),\n \"NavigationControl.ZoomIn\": _t(\"action|zoom_in\"),\n \"NavigationControl.ZoomOut\": _t(\"action|zoom_out\"),\n },\n });\n map.addControl(new maplibregl.AttributionControl(), \"top-right\");\n\n map.on(\"error\", (e) => {\n logger.error(\"Failed to load map: check map_style_url in config.json has a valid URL and API key\", e.error);\n onError?.(new Error(LocationShareError.MapStyleUrlNotReachable));\n });\n\n return map;\n } catch (e) {\n logger.error(\"Failed to render map\", e);\n const errorMessage = (e as Error)?.message;\n if (errorMessage.includes(\"Failed to initialize WebGL\")) throw new Error(LocationShareError.WebGLNotEnabled);\n throw e;\n }\n};\n\nexport const createMarker = (coords: GeolocationCoordinates, element: HTMLElement): maplibregl.Marker => {\n const marker = new maplibregl.Marker({\n element,\n anchor: \"bottom\",\n offset: [0, -1],\n }).setLngLat({ lon: coords.longitude, lat: coords.latitude });\n return marker;\n};\n","import { forwardRef } from \"react\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction MinusIcon(props, ref) {\n return /*#__PURE__*/_jsx(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n ref: ref,\n ...props,\n children: /*#__PURE__*/_jsx(\"path\", {\n d: \"M6 13a.97.97 0 0 1-.713-.287A.97.97 0 0 1 5 12q0-.424.287-.713A.97.97 0 0 1 6 11h12q.424 0 .712.287.288.288.288.713 0 .424-.288.713A.97.97 0 0 1 18 13z\"\n })\n });\n}\n;\nMinusIcon.displayName = \"MinusIcon\";\nexport default forwardRef(MinusIcon);"],"names":["LocationViewDialog","React","constructor","props","super","_defineProperty","this","mxEvent","getId","error","setState","state","undefined","render","markerRoomMember","isSelfLocation","getContent","sender","geoUri","locationEventGeoUri","BaseDialog","className","onFinished","fixedWidth","Map","id","getBodyId","centerGeoUri","onError","interactive","allowGeolocate","map","SmartMarker","roomMember","ZoomButtons","useMapWithStyle","bounds","bodyId","context","useContext","MatrixClientContext","mapStyleUrl","useEventEmitterState","ClientEvent","ClientWellKnown","clientWellKnown","_tileServerFromWellKn","tileServerFromWellKnown","useMap","cli","useMatrixClientContext","setMap","useState","useEffect","createMap","console","Error","remove","setStyle","coords","parseGeoUri","setCenter","lon","longitude","lat","latitude","e","logger","lngLatBounds","maplibregl","west","south","east","north","fitBounds","padding","maxZoom","geolocate","setGeolocate","positionOptions","enableHighAccuracy","trackUserLocation","addControl","removeControl","on","onGeolocateError","off","_positionFailureMessa","Modal","createDialog","ErrorDialog","title","_t","description","positionFailureMessage","code","MapComponent","children","onClick","classNames","event","target","classList","contains","OptionalTooltip","tooltip","isVisible","setIsVisible","onMouseEnter","show","stopPropagation","onMouseLeave","hide","Marker","useMemberColor","ref","memberColorClass","getUserNameColorClass","userId","mx_Marker_defaultColor","MemberAvatar","member","size","viewUserOnClick","hideTitle","LocationIcon","onElementRef","useMapMarker","marker","setMarker","useCallback","element","newMarker","createMarker","addTo","setLngLat","AccessibleButton","onZoomIn","zoomIn","PlusIcon","onZoomOut","zoomOut","MinusIcon","client","styleUrl","findMapStyleUrl","container","style","zoom","attributionControl","locale","LocationShareError","MapStyleUrlNotReachable","message","includes","WebGLNotEnabled","anchor","offset","xmlns","width","height","fill","viewBox","d","displayName","forwardRef"],"sourceRoot":""}