8227.js.map (12196B)
1 {"version":3,"file":"bundles/9cacd6575f4c8ee1aedb/8227.js","mappings":"wbA8BA,MAAMA,EAGDA,EAAGC,UAASC,eACb,MAAOC,EAAWC,IAAgBC,EAAAA,EAAAA,WAAS,GAC3C,IAAKJ,EACD,OAAOK,EAAAA,cAAAA,EAAAA,SAAA,KAAGJ,GAWd,OACII,EAAAA,cAAA,OAAKC,aATIC,IAAYJ,GAAa,GASTK,QAPHC,IAEtBA,EAAEC,kBACFP,GAAcD,IAIsCS,aAR3CC,IAAYT,GAAa,IAS7BF,EACAC,GAAaF,IAqC1B,EA7Bea,EAAGC,KAAIC,aAAYC,iBAAgBhB,UAASiB,UACvD,MAAMC,EAAmBF,GAAkBD,GAAaI,EAAAA,EAAAA,IAAsBJ,EAAWK,QAAU,GACnG,OACIf,EAAAA,cAAA,OACIY,IAAKA,EACLH,GAAIA,EACJO,UAAWC,IAAW,YAAaJ,EAAkB,CACjDK,wBAAyBL,KAG7Bb,EAAAA,cAACN,EAAe,CAACC,QAASA,GACtBK,EAAAA,cAAA,OAAKgB,UAAU,oBACVN,EACGV,EAAAA,cAACmB,EAAAA,EAAY,CACTC,OAAQV,EACRW,KAAK,OACLC,iBAAiB,EAEjBC,YAAa5B,IAGjBK,EAAAA,cAACwB,EAAAA,EAAY,CAACR,UAAU,sB,4PC/DhD,MAgFA,EArBgDS,EAAGhB,KAAIiB,MAAKC,SAAQjB,aAAYC,iBAAgBhB,cAC5F,MAAM,aAAEiC,GA5DSC,EACjBH,EACAC,KAEA,MAAOG,EAAQC,IAAahC,EAAAA,EAAAA,YAEtB6B,GAAeI,EAAAA,EAAAA,aAChBC,IACG,GAAIH,IAAWG,EACX,OAEJ,MAAMC,GAASC,EAAAA,EAAAA,IAAYR,GAC3B,GAAIO,EAAQ,CACR,MAAME,GAAYC,EAAAA,EAAAA,GAAaH,EAAQD,GACvCG,EAAUE,MAAMZ,GAChBK,EAAUK,EACd,GAEJ,CAACN,EAAQH,EAAQD,IAqBrB,OAlBAa,EAAAA,EAAAA,WAAU,KACN,GAAIT,EAAQ,CACR,MAAMI,GAASC,EAAAA,EAAAA,IAAYR,GACvBO,GACAJ,EAAOU,UAAU,CAAEC,IAAKP,EAAOQ,UAAWC,IAAKT,EAAOU,UAE9D,GACD,CAACd,EAAQH,KAEZY,EAAAA,EAAAA,WACI,IAAM,KACET,GACAA,EAAOe,UAGf,CAACf,IAGE,CACHA,SACAF,iBAmBqBC,CAAaH,EAAKC,GAE3C,OAMI3B,EAAAA,cAAA,YACIA,EAAAA,cAACQ,EAAAA,EAAM,CACHI,IAAKgB,EACLnB,GAAIA,EACJC,WAAYA,EACZC,eAAgBA,EAChBhB,QAASA,K,+SC1ElB,MAAMmD,EAAYA,CACrBC,EACAC,EACAC,EACAC,KAEA,IACI,MAAMC,GAAWC,EAAAA,EAAAA,GAAgBL,GAE3BrB,EAAM,IAAI2B,EAAAA,IAAe,CAC3BC,UAAWL,EACXM,MAAOJ,EACPK,KAAM,GACNR,cACAS,oBAAoB,EACpBC,OAAQ,CACJ,wCAAwCC,EAAAA,EAAAA,IAAG,uCAC3C,kCAAkCA,EAAAA,EAAAA,IAAG,iCACrC,2BAA2BA,EAAAA,EAAAA,IAAG,2BAC9B,0BAA0BA,EAAAA,EAAAA,IAAG,2BAC7B,mCAAmCA,EAAAA,EAAAA,IAAG,qCACtC,yCAAyCA,EAAAA,EAAAA,IAAG,2CAC5C,qBAAqBA,EAAAA,EAAAA,IAAG,gCACxB,kCAAkCA,EAAAA,EAAAA,IAAG,kCACrC,4BAA4BA,EAAAA,EAAAA,IAAG,kBAC/B,6BAA6BA,EAAAA,EAAAA,IAAG,sBAUxC,OAPAjC,EAAIkC,WAAW,IAAIP,EAAAA,mBAAiC,aAEpD3B,EAAImC,GAAG,QAAUzD,IACb0D,EAAAA,GAAOC,MAAM,qFAAsF3D,EAAE2D,OACrGb,SAAAA,EAAU,IAAIc,MAAMC,EAAAA,EAAmBC,4BAGpCxC,CACX,CAAE,MAAOtB,GACL0D,EAAAA,GAAOC,MAAM,uBAAwB3D,GAErC,IADsBA,aAAC,EAADA,EAAa+D,SAClBC,SAAS,8BAA+B,MAAM,IAAIJ,MAAMC,EAAAA,EAAmBI,iBAC5F,MAAMjE,CACV,GAGSiC,EAAeA,CAACH,EAAgCD,IAC1C,IAAIoB,EAAAA,OAAkB,CACjCpB,UACAqC,OAAQ,SACRC,OAAQ,CAAC,GAAI,KACd/B,UAAU,CAAEC,IAAKP,EAAOQ,UAAWC,IAAKT,EAAOU,U","sources":["webpack://element-web/./src/components/views/location/Marker.tsx","webpack://element-web/./src/components/views/location/SmartMarker.tsx","webpack://element-web/./src/utils/location/map.ts"],"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, { 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 * 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"],"names":["OptionalTooltip","tooltip","children","isVisible","setIsVisible","useState","React","onMouseEnter","show","onClick","e","stopPropagation","onMouseLeave","hide","Marker","id","roomMember","useMemberColor","ref","memberColorClass","getUserNameColorClass","userId","className","classNames","mx_Marker_defaultColor","MemberAvatar","member","size","viewUserOnClick","hideTitle","LocationIcon","SmartMarker","map","geoUri","onElementRef","useMapMarker","marker","setMarker","useCallback","element","coords","parseGeoUri","newMarker","createMarker","addTo","useEffect","setLngLat","lon","longitude","lat","latitude","remove","createMap","client","interactive","bodyId","onError","styleUrl","findMapStyleUrl","maplibregl","container","style","zoom","attributionControl","locale","_t","addControl","on","logger","error","Error","LocationShareError","MapStyleUrlNotReachable","message","includes","WebGLNotEnabled","anchor","offset"],"sourceRoot":""}