element-web-synapse01pim.gr.jp

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

4006.js.map (29555B)


      1 {"version":3,"file":"bundles/c63939549511ecf2b427/4006.js","mappings":"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","sources":["webpack://element-web/./node_modules/@vector-im/compound-design-tokens/assets/web/icons/minus.js","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"],"sourcesContent":["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);","/*\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"],"names":["MinusIcon","props","ref","xmlns","width","height","fill","viewBox","children","d","displayName","forwardRef","LocationViewDialog","React","constructor","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","onClick","classNames","event","target","classList","contains","OptionalTooltip","tooltip","isVisible","setIsVisible","onMouseEnter","show","stopPropagation","onMouseLeave","hide","Marker","useMemberColor","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","client","styleUrl","findMapStyleUrl","container","style","zoom","attributionControl","locale","LocationShareError","MapStyleUrlNotReachable","message","includes","WebGLNotEnabled","anchor","offset"],"ignoreList":[],"sourceRoot":""}