1422.js.map (81232B)
1 {"version":3,"file":"bundles/9cacd6575f4c8ee1aedb/1422.js","mappings":"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","sources":["webpack://element-web/./node_modules/@vector-im/compound-design-tokens/assets/web/icons/location-pin.js","webpack://element-web/./src/components/views/location/LiveDurationDropdown.tsx","webpack://element-web/./src/components/views/location/shareLocation.ts","webpack://element-web/./src/components/views/location/LocationPicker.tsx","webpack://element-web/./src/components/views/location/ShareDialogButtons.tsx","webpack://element-web/./src/components/views/location/ShareType.tsx","webpack://element-web/./src/components/views/location/EnableLiveShare.tsx","webpack://element-web/./src/components/views/location/LocationShareMenu.tsx","webpack://element-web/./src/components/views/location/LocationButton.tsx","webpack://element-web/./src/components/views/location/Marker.tsx","webpack://element-web/./src/components/views/rooms/CollapsibleButton.tsx","webpack://element-web/./src/components/views/rooms/EmojiButton.tsx","webpack://element-web/./src/components/views/rooms/MessageComposerButtons.tsx","webpack://element-web/./node_modules/@vector-im/compound-design-tokens/assets/web/icons/mic-on.js","webpack://element-web/./node_modules/@vector-im/compound-design-tokens/assets/web/icons/reaction.js","webpack://element-web/./node_modules/@vector-im/compound-design-tokens/assets/web/icons/sticker.js","webpack://element-web/./node_modules/@vector-im/compound-design-tokens/assets/web/icons/text-formatting.js"],"sourcesContent":["import { forwardRef } from \"react\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction LocationPinIcon(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: \"M12 19.35q3.05-2.8 4.525-5.088Q18 11.976 18 10.2q0-2.725-1.738-4.462Q14.526 4 12 4T7.738 5.737Q6 7.476 6 10.2q0 1.775 1.475 4.063Q8.95 16.549 12 19.35m0 1.975a2.1 2.1 0 0 1-.7-.125 1.8 1.8 0 0 1-.625-.375A39 39 0 0 1 7.8 17.9q-1.25-1.425-2.087-2.762-.838-1.338-1.275-2.575Q4 11.325 4 10.2q0-3.75 2.412-5.975T12 2t5.587 2.225T20 10.2q0 1.125-.437 2.363-.438 1.237-1.275 2.574A22 22 0 0 1 16.2 17.9a39 39 0 0 1-2.875 2.925 1.8 1.8 0 0 1-.625.375 2.1 2.1 0 0 1-.7.125M12 12q.825 0 1.412-.588Q14 10.826 14 10t-.588-1.412A1.93 1.93 0 0 0 12 8q-.825 0-1.412.588A1.93 1.93 0 0 0 10 10q0 .825.588 1.412Q11.175 12 12 12\"\n })\n });\n}\n;\nLocationPinIcon.displayName = \"LocationPinIcon\";\nexport default forwardRef(LocationPinIcon);","/*\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 ReactElement } from \"react\";\n\nimport { formatDuration } from \"../../../DateUtils\";\nimport { _t } from \"../../../languageHandler\";\nimport Dropdown from \"../elements/Dropdown\";\nimport { type NonEmptyArray } from \"../../../@types/common\";\n\nconst DURATION_MS = {\n fifteenMins: 900000,\n oneHour: 3600000,\n eightHours: 28800000,\n};\n\nexport const DEFAULT_DURATION_MS = DURATION_MS.fifteenMins;\n\ninterface Props {\n timeout: number;\n onChange: (timeout: number) => void;\n}\n\nconst getLabel = (durationMs: number): string => {\n return _t(\"location_sharing|live_share_button\", { duration: formatDuration(durationMs) });\n};\n\nconst LiveDurationDropdown: React.FC<Props> = ({ timeout, onChange }) => {\n const options = Object.values(DURATION_MS).map((duration) => ({\n key: duration.toString(),\n duration,\n label: getLabel(duration),\n }));\n\n // timeout is not one of our default values\n // eg it was set by another client\n if (!Object.values(DURATION_MS).includes(timeout)) {\n options.push({\n key: timeout.toString(),\n duration: timeout,\n label: getLabel(timeout),\n });\n }\n\n const onOptionChange = (key: string): void => {\n // stringified value back to number\n onChange(+key);\n };\n\n return (\n <Dropdown\n id=\"live-duration\"\n data-testid=\"live-duration-dropdown\"\n label={getLabel(timeout)}\n value={timeout.toString()}\n onOptionChange={onOptionChange}\n className=\"mx_LiveDurationDropdown\"\n >\n {\n options.map(({ key, label }) => (\n <div data-testid={`live-duration-option-${key}`} key={key}>\n {label}\n </div>\n )) as NonEmptyArray<ReactElement & { key: string }>\n }\n </Dropdown>\n );\n};\n\nexport default LiveDurationDropdown;\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 {\n type MatrixClient,\n type IEventRelation,\n type MatrixError,\n THREAD_RELATION_TYPE,\n ContentHelpers,\n LocationAssetType,\n} from \"matrix-js-sdk/src/matrix\";\nimport { type RoomMessageEventContent } from \"matrix-js-sdk/src/types\";\nimport { logger } from \"matrix-js-sdk/src/logger\";\n\nimport { _t } from \"../../../languageHandler\";\nimport Modal from \"../../../Modal\";\nimport QuestionDialog, { type IQuestionDialogProps } from \"../dialogs/QuestionDialog\";\nimport SdkConfig from \"../../../SdkConfig\";\nimport { OwnBeaconStore } from \"../../../stores/OwnBeaconStore\";\nimport { doMaybeLocalRoomAction } from \"../../../utils/local-room\";\n\nexport enum LocationShareType {\n Own = \"Own\",\n Pin = \"Pin\",\n Live = \"Live\",\n}\n\nexport type LocationShareProps = {\n timeout?: number;\n uri?: string;\n timestamp?: number;\n};\n\n// default duration to 5min for now\nconst DEFAULT_LIVE_DURATION = 300000;\n\nexport type ShareLocationFn = (props: LocationShareProps) => Promise<void>;\n\nconst getPermissionsErrorParams = (\n shareType: LocationShareType,\n): {\n errorMessage: string;\n modalParams: IQuestionDialogProps;\n} => {\n const errorMessage =\n shareType === LocationShareType.Live\n ? \"Insufficient permissions to start sharing your live location\"\n : \"Insufficient permissions to send your location\";\n\n const modalParams = {\n title: _t(\"location_sharing|error_no_perms_title\"),\n description: _t(\"location_sharing|error_no_perms_description\"),\n button: _t(\"action|ok\"),\n hasCancelButton: false,\n onFinished: () => {}, // NOOP\n };\n return { modalParams, errorMessage };\n};\n\nconst getDefaultErrorParams = (\n shareType: LocationShareType,\n openMenu: () => void,\n): {\n errorMessage: string;\n modalParams: IQuestionDialogProps;\n} => {\n const errorMessage =\n shareType === LocationShareType.Live\n ? \"We couldn't start sharing your live location\"\n : \"We couldn't send your location\";\n const modalParams = {\n title: _t(\"location_sharing|error_send_title\"),\n description: _t(\"location_sharing|error_send_description\", {\n brand: SdkConfig.get().brand,\n }),\n button: _t(\"action|try_again\"),\n cancelButton: _t(\"action|cancel\"),\n onFinished: (tryAgain: boolean) => {\n if (tryAgain) {\n openMenu();\n }\n },\n };\n return { modalParams, errorMessage };\n};\n\nconst handleShareError = (error: unknown, openMenu: () => void, shareType: LocationShareType): void => {\n const { modalParams, errorMessage } =\n (error as MatrixError).errcode === \"M_FORBIDDEN\"\n ? getPermissionsErrorParams(shareType)\n : getDefaultErrorParams(shareType, openMenu);\n\n logger.error(errorMessage, error);\n\n Modal.createDialog(QuestionDialog, modalParams);\n};\n\nexport const shareLiveLocation =\n (client: MatrixClient, roomId: string, displayName: string, openMenu: () => void): ShareLocationFn =>\n async ({ timeout }): Promise<void> => {\n const description = _t(\"location_sharing|live_description\", { displayName });\n try {\n await OwnBeaconStore.instance.createLiveBeacon(\n roomId,\n ContentHelpers.makeBeaconInfoContent(\n timeout ?? DEFAULT_LIVE_DURATION,\n true /* isLive */,\n description,\n LocationAssetType.Self,\n ),\n );\n } catch (error) {\n handleShareError(error, openMenu, LocationShareType.Live);\n }\n };\n\nexport const shareLocation =\n (\n client: MatrixClient,\n roomId: string,\n shareType: LocationShareType,\n relation: IEventRelation | undefined,\n openMenu: () => void,\n ): ShareLocationFn =>\n async ({ uri, timestamp }): Promise<void> => {\n if (!uri) return;\n try {\n const threadId = (relation?.rel_type === THREAD_RELATION_TYPE.name && relation?.event_id) || null;\n const assetType = shareType === LocationShareType.Pin ? LocationAssetType.Pin : LocationAssetType.Self;\n const content = ContentHelpers.makeLocationContent(\n undefined,\n uri,\n timestamp,\n undefined,\n assetType,\n ) as RoomMessageEventContent;\n await doMaybeLocalRoomAction(\n roomId,\n (actualRoomId: string) => client.sendMessage(actualRoomId, threadId, content),\n client,\n );\n } catch (error) {\n handleShareError(error, openMenu, shareType);\n }\n };\n","/*\nCopyright 2024 New Vector Ltd.\nCopyright 2021 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 SyntheticEvent } from \"react\";\nimport maplibregl, { type MapMouseEvent } from \"maplibre-gl\";\nimport { logger } from \"matrix-js-sdk/src/logger\";\nimport { type RoomMember, ClientEvent, type IClientWellKnown } from \"matrix-js-sdk/src/matrix\";\n\nimport { _t } from \"../../../languageHandler\";\nimport MatrixClientContext from \"../../../contexts/MatrixClientContext\";\nimport Modal from \"../../../Modal\";\nimport { tileServerFromWellKnown } from \"../../../utils/WellKnownUtils\";\nimport { type GenericPosition, genericPositionFromGeolocation, getGeoUri } from \"../../../utils/beacon\";\nimport { LocationShareError, findMapStyleUrl, positionFailureMessage } from \"../../../utils/location\";\nimport ErrorDialog from \"../dialogs/ErrorDialog\";\nimport AccessibleButton from \"../elements/AccessibleButton\";\nimport { MapError } from \"./MapError\";\nimport LiveDurationDropdown, { DEFAULT_DURATION_MS } from \"./LiveDurationDropdown\";\nimport { LocationShareType, type ShareLocationFn } from \"./shareLocation\";\nimport Marker from \"./Marker\";\n\nexport interface ILocationPickerProps {\n sender: RoomMember;\n shareType: LocationShareType;\n onChoose: ShareLocationFn;\n onFinished(ev?: SyntheticEvent): void;\n}\n\ninterface IState {\n timeout: number;\n position?: GenericPosition;\n error?: LocationShareError;\n}\n\nconst isSharingOwnLocation = (shareType: LocationShareType): boolean =>\n shareType === LocationShareType.Own || shareType === LocationShareType.Live;\n\nclass LocationPicker extends React.Component<ILocationPickerProps, IState> {\n public static contextType = MatrixClientContext;\n declare public context: React.ContextType<typeof MatrixClientContext>;\n private map?: maplibregl.Map;\n private geolocate?: maplibregl.GeolocateControl;\n private marker?: maplibregl.Marker;\n\n public constructor(props: ILocationPickerProps) {\n super(props);\n\n this.state = {\n position: undefined,\n timeout: DEFAULT_DURATION_MS,\n error: undefined,\n };\n }\n\n private getMarkerId = (): string => {\n return \"mx_MLocationPicker_marker\";\n };\n\n public componentDidMount(): void {\n this.context.on(ClientEvent.ClientWellKnown, this.updateStyleUrl);\n\n try {\n this.map = new maplibregl.Map({\n container: \"mx_LocationPicker_map\",\n style: findMapStyleUrl(this.context),\n center: [0, 0],\n zoom: 1,\n });\n\n // Add geolocate control to the map.\n this.geolocate = new maplibregl.GeolocateControl({\n positionOptions: {\n enableHighAccuracy: true,\n },\n trackUserLocation: false,\n });\n\n this.map.addControl(this.geolocate);\n\n this.map.on(\"error\", (e) => {\n logger.error(\n \"Failed to load map: check map_style_url in config.json has a valid URL and API key\",\n e.error,\n );\n this.setState({ error: LocationShareError.MapStyleUrlNotReachable });\n });\n\n this.map.on(\"load\", () => {\n this.geolocate?.trigger();\n });\n\n this.geolocate.on(\"error\", this.onGeolocateError);\n\n if (isSharingOwnLocation(this.props.shareType)) {\n this.geolocate.on(\"geolocate\", this.onGeolocate);\n }\n\n if (this.props.shareType === LocationShareType.Pin) {\n const navigationControl = new maplibregl.NavigationControl({\n showCompass: false,\n showZoom: true,\n });\n this.map.addControl(navigationControl, \"bottom-right\");\n this.map.on(\"click\", this.onClick);\n }\n } catch (e) {\n logger.error(\"Failed to render map\", e);\n const errorMessage = (e as Error)?.message;\n let errorType;\n if (errorMessage === LocationShareError.MapStyleUrlNotConfigured)\n errorType = LocationShareError.MapStyleUrlNotConfigured;\n else if (errorMessage.includes(\"Failed to initialize WebGL\"))\n errorType = LocationShareError.WebGLNotEnabled;\n else errorType = LocationShareError.Default;\n this.setState({ error: errorType });\n }\n }\n\n public componentWillUnmount(): void {\n this.geolocate?.off(\"error\", this.onGeolocateError);\n this.geolocate?.off(\"geolocate\", this.onGeolocate);\n this.map?.off(\"click\", this.onClick);\n this.context.off(ClientEvent.ClientWellKnown, this.updateStyleUrl);\n }\n\n private addMarkerToMap = (): void => {\n this.marker = new maplibregl.Marker({\n element: document.getElementById(this.getMarkerId()) ?? undefined,\n anchor: \"bottom\",\n offset: [0, -1],\n })\n .setLngLat(new maplibregl.LngLat(0, 0))\n .addTo(this.map!);\n };\n\n private updateStyleUrl = (clientWellKnown: IClientWellKnown): void => {\n const style = tileServerFromWellKnown(clientWellKnown)?.[\"map_style_url\"];\n if (style) {\n this.map?.setStyle(style);\n }\n };\n\n private onGeolocate = (position: GeolocationPosition): void => {\n if (!this.marker) {\n this.addMarkerToMap();\n }\n this.setState({ position: genericPositionFromGeolocation(position) });\n this.marker?.setLngLat(new maplibregl.LngLat(position.coords.longitude, position.coords.latitude));\n };\n\n private onClick = (event: MapMouseEvent): void => {\n if (!this.marker) {\n this.addMarkerToMap();\n }\n this.marker?.setLngLat(event.lngLat);\n this.setState({\n position: {\n timestamp: Date.now(),\n latitude: event.lngLat.lat,\n longitude: event.lngLat.lng,\n },\n });\n };\n\n private onGeolocateError = (e: GeolocationPositionError): void => {\n logger.error(\"Could not fetch location\", e);\n // close the dialog and show an error when trying to share own location\n // pin drop location without permissions is ok\n if (isSharingOwnLocation(this.props.shareType)) {\n this.props.onFinished();\n Modal.createDialog(ErrorDialog, {\n title: _t(\"location_sharing|error_fetch_location\"),\n description: positionFailureMessage(e.code),\n });\n }\n\n if (this.geolocate) {\n this.map?.removeControl(this.geolocate);\n }\n };\n\n private onTimeoutChange = (timeout: number): void => {\n this.setState({ timeout });\n };\n\n private onOk = (): void => {\n const { timeout, position } = this.state;\n\n this.props.onChoose(\n position\n ? { uri: getGeoUri(position), timestamp: position.timestamp, timeout }\n : {\n timeout,\n },\n );\n this.props.onFinished();\n };\n\n public render(): React.ReactNode {\n if (this.state.error) {\n return (\n <div className=\"mx_LocationPicker mx_LocationPicker_hasError\">\n <MapError error={this.state.error} onFinished={this.props.onFinished} />\n </div>\n );\n }\n\n return (\n <div className=\"mx_LocationPicker\">\n <div id=\"mx_LocationPicker_map\" />\n\n {this.props.shareType === LocationShareType.Pin && (\n <div className=\"mx_LocationPicker_pinText\">\n <span>\n {this.state.position\n ? _t(\"location_sharing|click_move_pin\")\n : _t(\"location_sharing|click_drop_pin\")}\n </span>\n </div>\n )}\n <div className=\"mx_LocationPicker_footer\">\n <form onSubmit={this.onOk}>\n {this.props.shareType === LocationShareType.Live && (\n <LiveDurationDropdown onChange={this.onTimeoutChange} timeout={this.state.timeout} />\n )}\n <AccessibleButton\n data-testid=\"location-picker-submit-button\"\n type=\"submit\"\n element=\"button\"\n kind=\"primary\"\n className=\"mx_LocationPicker_submitButton\"\n disabled={!this.state.position}\n onClick={this.onOk}\n >\n {_t(\"location_sharing|share_button\")}\n </AccessibleButton>\n </form>\n </div>\n <div id={this.getMarkerId()}>\n {/*\n maplibregl hijacks the div above to style the marker\n it must be in the dom when the map is initialised\n and keep a consistent class\n we want to hide the marker until it is set in the case of pin drop\n so hide the internal visible elements\n */}\n\n {!!this.marker && (\n <Marker\n roomMember={isSharingOwnLocation(this.props.shareType) ? this.props.sender : undefined}\n useMemberColor={this.props.shareType === LocationShareType.Live}\n />\n )}\n </div>\n </div>\n );\n }\n}\n\nexport default LocationPicker;\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 CloseIcon from \"@vector-im/compound-design-tokens/assets/web/icons/close\";\nimport BackIcon from \"@vector-im/compound-design-tokens/assets/web/icons/chevron-left\";\n\nimport AccessibleButton from \"../elements/AccessibleButton\";\nimport { _t } from \"../../../languageHandler\";\n\ninterface Props {\n onCancel: () => void;\n onBack: () => void;\n displayBack?: boolean;\n}\n\nconst ShareDialogButtons: React.FC<Props> = ({ onBack, onCancel, displayBack }) => {\n return (\n <div className=\"mx_ShareDialogButtons\">\n {displayBack && (\n <AccessibleButton\n className=\"mx_ShareDialogButtons_button left\"\n data-testid=\"share-dialog-buttons-back\"\n aria-label={_t(\"action|back\")}\n onClick={onBack}\n element=\"button\"\n >\n <BackIcon className=\"mx_ShareDialogButtons_button-icon\" />\n </AccessibleButton>\n )}\n <AccessibleButton\n className=\"mx_ShareDialogButtons_button right\"\n data-testid=\"share-dialog-buttons-cancel\"\n aria-label={_t(\"action|close\")}\n onClick={onCancel}\n element=\"button\"\n >\n <CloseIcon className=\"mx_ShareDialogButtons_button-icon\" />\n </AccessibleButton>\n </div>\n );\n};\n\nexport default ShareDialogButtons;\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 HTMLAttributes, useContext } from \"react\";\nimport LocationIcon from \"@vector-im/compound-design-tokens/assets/web/icons/location-pin-solid\";\n\nimport MatrixClientContext from \"../../../contexts/MatrixClientContext\";\nimport { _t } from \"../../../languageHandler\";\nimport { OwnProfileStore } from \"../../../stores/OwnProfileStore\";\nimport BaseAvatar from \"../avatars/BaseAvatar\";\nimport AccessibleButton, { type ButtonEvent } from \"../elements/AccessibleButton\";\nimport Heading from \"../typography/Heading\";\nimport { LocationShareType } from \"./shareLocation\";\nimport StyledLiveBeaconIcon from \"../beacon/StyledLiveBeaconIcon\";\n\nconst UserAvatar: React.FC = () => {\n const matrixClient = useContext(MatrixClientContext);\n const userId = matrixClient.getSafeUserId();\n const displayName = OwnProfileStore.instance.displayName ?? undefined;\n // 40 - 2px border\n const avatarSize = \"36px\";\n const avatarUrl = OwnProfileStore.instance.getHttpAvatarUrl(parseInt(avatarSize, 10)) ?? undefined;\n\n return (\n <div className={`mx_ShareType_option-icon ${LocationShareType.Own}`}>\n <BaseAvatar\n idName={userId}\n name={displayName}\n url={avatarUrl}\n size={avatarSize}\n className=\"mx_UserMenu_userAvatar_BaseAvatar\"\n />\n </div>\n );\n};\n\ntype ShareTypeOptionProps = HTMLAttributes<Element> & {\n label: string;\n shareType: LocationShareType;\n onClick?: ((e: ButtonEvent) => void | Promise<void>) | null;\n};\nconst ShareTypeOption: React.FC<ShareTypeOptionProps> = ({ onClick, label, shareType, ...rest }) => (\n <AccessibleButton element=\"button\" className=\"mx_ShareType_option\" onClick={onClick ?? null} {...rest}>\n {shareType === LocationShareType.Own && <UserAvatar />}\n {shareType === LocationShareType.Pin && (\n <LocationIcon className={`mx_ShareType_option-icon ${LocationShareType.Pin}`} />\n )}\n {shareType === LocationShareType.Live && (\n <StyledLiveBeaconIcon className={`mx_ShareType_option-icon ${LocationShareType.Live}`} />\n )}\n\n {label}\n </AccessibleButton>\n);\n\ninterface Props {\n setShareType: (shareType: LocationShareType) => void;\n enabledShareTypes: LocationShareType[];\n}\nconst ShareType: React.FC<Props> = ({ setShareType, enabledShareTypes }) => {\n const labels = {\n [LocationShareType.Own]: _t(\"location_sharing|share_type_own\"),\n [LocationShareType.Live]: _t(\"location_sharing|share_type_live\"),\n [LocationShareType.Pin]: _t(\"location_sharing|share_type_pin\"),\n };\n return (\n <div className=\"mx_ShareType\">\n <LocationIcon className=\"mx_ShareType_badge\" />\n <Heading className=\"mx_ShareType_heading\" size=\"3\">\n {_t(\"location_sharing|share_type_prompt\")}\n </Heading>\n <div className=\"mx_ShareType_wrapper_options\">\n {enabledShareTypes.map((type) => (\n <ShareTypeOption\n key={type}\n onClick={() => setShareType(type)}\n label={labels[type]}\n shareType={type}\n data-testid={`share-location-option-${type}`}\n />\n ))}\n </div>\n </div>\n );\n};\n\nexport default ShareType;\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 ChangeEventHandler, type FormEventHandler, useCallback, useState } from \"react\";\nimport { SettingsToggleInput, Form, Button } from \"@vector-im/compound-web\";\n\nimport { _t } from \"../../../languageHandler\";\nimport StyledLiveBeaconIcon from \"../beacon/StyledLiveBeaconIcon\";\nimport Heading from \"../typography/Heading\";\n\ninterface Props {\n onSubmit: () => void;\n}\n\nexport const EnableLiveShare: React.FC<Props> = ({ onSubmit }) => {\n const [isEnabled, setEnabled] = useState(false);\n\n const onEnabledChanged = useCallback<ChangeEventHandler<HTMLInputElement>>(\n (e) => setEnabled(e.target.checked),\n [setEnabled],\n );\n\n const onSubmitForm = useCallback<FormEventHandler>(\n (evt) => {\n evt.preventDefault();\n evt.stopPropagation();\n if (isEnabled) {\n onSubmit();\n }\n },\n [isEnabled, onSubmit],\n );\n\n return (\n <div data-testid=\"location-picker-enable-live-share\" className=\"mx_EnableLiveShare\">\n <StyledLiveBeaconIcon className=\"mx_EnableLiveShare_icon\" />\n <Heading className=\"mx_EnableLiveShare_heading\" size=\"3\">\n {_t(\"location_sharing|live_enable_heading\")}\n </Heading>\n <p className=\"mx_EnableLiveShare_description\">{_t(\"location_sharing|live_enable_description\")}</p>\n <Form.Root onSubmit={onSubmitForm}>\n <SettingsToggleInput\n name=\"enable-live-share-toggle\"\n checked={isEnabled}\n onChange={onEnabledChanged}\n label={_t(\"location_sharing|live_toggle_label\")}\n />\n <Button className=\"mx_EnableLiveShare_button\" kind=\"primary\" disabled={!isEnabled}>\n {_t(\"action|ok\")}\n </Button>\n </Form.Root>\n </div>\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 SyntheticEvent, useContext, useState } from \"react\";\nimport { type Room, type IEventRelation } from \"matrix-js-sdk/src/matrix\";\n\nimport MatrixClientContext from \"../../../contexts/MatrixClientContext\";\nimport ContextMenu, { type MenuProps } from \"../../structures/ContextMenu\";\nimport LocationPicker, { type ILocationPickerProps } from \"./LocationPicker\";\nimport { shareLiveLocation, shareLocation, LocationShareType } from \"./shareLocation\";\nimport SettingsStore from \"../../../settings/SettingsStore\";\nimport ShareDialogButtons from \"./ShareDialogButtons\";\nimport ShareType from \"./ShareType\";\nimport { OwnProfileStore } from \"../../../stores/OwnProfileStore\";\nimport { EnableLiveShare } from \"./EnableLiveShare\";\nimport { useFeatureEnabled } from \"../../../hooks/useSettings\";\nimport { SettingLevel } from \"../../../settings/SettingLevel\";\n\ntype Props = Omit<ILocationPickerProps, \"onChoose\" | \"shareType\"> & {\n onFinished: (ev?: SyntheticEvent) => void;\n menuPosition: MenuProps;\n openMenu: () => void;\n roomId: Room[\"roomId\"];\n relation?: IEventRelation;\n};\n\nconst getEnabledShareTypes = (relation?: IEventRelation): LocationShareType[] => {\n const enabledShareTypes = [LocationShareType.Own];\n\n // live locations cannot have a relation\n // hide the option when composer has a relation\n if (!relation) {\n enabledShareTypes.push(LocationShareType.Live);\n }\n\n enabledShareTypes.push(LocationShareType.Pin);\n\n return enabledShareTypes;\n};\n\nconst LocationShareMenu: React.FC<Props> = ({ menuPosition, onFinished, sender, roomId, openMenu, relation }) => {\n const matrixClient = useContext(MatrixClientContext);\n const enabledShareTypes = getEnabledShareTypes(relation);\n const isLiveShareEnabled = useFeatureEnabled(\"feature_location_share_live\");\n\n const multipleShareTypesEnabled = enabledShareTypes.length > 1;\n\n const [shareType, setShareType] = useState<LocationShareType | undefined>(\n multipleShareTypesEnabled ? undefined : LocationShareType.Own,\n );\n\n const displayName = OwnProfileStore.instance.displayName;\n const userId = matrixClient.getSafeUserId();\n\n const onLocationSubmit =\n shareType === LocationShareType.Live\n ? shareLiveLocation(matrixClient, roomId, displayName || userId, openMenu)\n : shareLocation(matrixClient, roomId, shareType ?? LocationShareType.Own, relation, openMenu);\n\n const onLiveShareEnableSubmit = (): void => {\n SettingsStore.setValue(\"feature_location_share_live\", null, SettingLevel.DEVICE, true);\n };\n\n const shouldAdvertiseLiveLabsFlag = shareType === LocationShareType.Live && !isLiveShareEnabled;\n\n return (\n <ContextMenu {...menuPosition} onFinished={onFinished} managed={false}>\n <div className=\"mx_LocationShareMenu\">\n {shouldAdvertiseLiveLabsFlag && <EnableLiveShare onSubmit={onLiveShareEnableSubmit} />}\n {!shouldAdvertiseLiveLabsFlag && !!shareType && (\n <LocationPicker\n sender={sender}\n shareType={shareType}\n onChoose={onLocationSubmit}\n onFinished={onFinished}\n />\n )}\n {!shareType && <ShareType setShareType={setShareType} enabledShareTypes={enabledShareTypes} />}\n <ShareDialogButtons\n displayBack={!!shareType && multipleShareTypesEnabled}\n onBack={() => setShareType(undefined)}\n onCancel={onFinished}\n />\n </div>\n </ContextMenu>\n );\n};\n\nexport default LocationShareMenu;\n","/*\nCopyright 2024 New Vector Ltd.\nCopyright 2021 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, type SyntheticEvent, useContext } from \"react\";\nimport classNames from \"classnames\";\nimport { type RoomMember, type IEventRelation } from \"matrix-js-sdk/src/matrix\";\nimport { LocationPinIcon } from \"@vector-im/compound-design-tokens/assets/web/icons\";\n\nimport { _t } from \"../../../languageHandler\";\nimport { CollapsibleButton } from \"../rooms/CollapsibleButton\";\nimport { aboveLeftOf, useContextMenu, type MenuProps } from \"../../structures/ContextMenu\";\nimport { OverflowMenuContext } from \"../rooms/MessageComposerButtons\";\nimport LocationShareMenu from \"./LocationShareMenu\";\n\nexport interface IProps {\n roomId: string;\n sender: RoomMember;\n menuPosition?: MenuProps;\n relation?: IEventRelation;\n}\n\nconst LocationButton: React.FC<IProps> = ({ roomId, sender, menuPosition, relation }) => {\n const overflowMenuCloser = useContext(OverflowMenuContext);\n const [menuDisplayed, button, openMenu, closeMenu] = useContextMenu();\n\n const _onFinished = (ev?: SyntheticEvent): void => {\n closeMenu(ev);\n overflowMenuCloser?.();\n };\n\n let contextMenu: ReactNode = null;\n if (menuDisplayed) {\n const position = menuPosition ?? (button.current && aboveLeftOf(button.current.getBoundingClientRect())) ?? {};\n\n contextMenu = (\n <LocationShareMenu\n menuPosition={position}\n onFinished={_onFinished}\n sender={sender}\n roomId={roomId}\n openMenu={openMenu}\n relation={relation}\n />\n );\n }\n\n const className = classNames(\"mx_MessageComposer_button\", {\n mx_MessageComposer_button_highlight: menuDisplayed,\n });\n\n return (\n <React.Fragment>\n <CollapsibleButton className={className} onClick={openMenu} title={_t(\"common|location\")} inputRef={button}>\n <LocationPinIcon />\n </CollapsibleButton>\n\n {contextMenu}\n </React.Fragment>\n );\n};\n\nexport default LocationButton;\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 2021 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 RefObject, useContext } from \"react\";\n\nimport AccessibleButton, { type ButtonProps } from \"../elements/AccessibleButton\";\nimport { OverflowMenuContext } from \"./MessageComposerButtons\";\nimport { IconizedContextMenuOption } from \"../context_menus/IconizedContextMenu\";\n\ninterface Props extends Omit<ButtonProps<\"div\">, \"element\"> {\n inputRef?: RefObject<HTMLElement | null>;\n title: string;\n}\n\nexport const CollapsibleButton: React.FC<Props> = ({ title, children, className, inputRef, ...props }) => {\n const inOverflowMenu = !!useContext(OverflowMenuContext);\n if (inOverflowMenu) {\n return <IconizedContextMenuOption {...props} icon={children} label={title} inputRef={inputRef} />;\n }\n\n return (\n <AccessibleButton {...props} title={title} className={className} ref={inputRef}>\n {children}\n </AccessibleButton>\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 classNames from \"classnames\";\nimport React, { type JSX, useContext } from \"react\";\nimport { ReactionIcon } from \"@vector-im/compound-design-tokens/assets/web/icons\";\n\nimport { _t } from \"../../../languageHandler\";\nimport ContextMenu, { aboveLeftOf, type MenuProps, useContextMenu } from \"../../structures/ContextMenu\";\nimport EmojiPicker from \"../emojipicker/EmojiPicker\";\nimport { CollapsibleButton } from \"./CollapsibleButton\";\nimport { OverflowMenuContext } from \"./MessageComposerButtons\";\n\ninterface IEmojiButtonProps {\n addEmoji: (unicode: string) => boolean;\n menuPosition?: MenuProps;\n className?: string;\n}\n\nexport function EmojiButton({ addEmoji, menuPosition, className }: IEmojiButtonProps): JSX.Element {\n const overflowMenuCloser = useContext(OverflowMenuContext);\n const [menuDisplayed, button, openMenu, closeMenu] = useContextMenu();\n\n let contextMenu: React.ReactElement | null = null;\n if (menuDisplayed && button.current) {\n const position = menuPosition ?? aboveLeftOf(button.current.getBoundingClientRect());\n const onFinished = (): void => {\n closeMenu();\n overflowMenuCloser?.();\n };\n\n contextMenu = (\n <ContextMenu {...position} onFinished={onFinished} managed={false} focusLock>\n <EmojiPicker onChoose={addEmoji} onFinished={onFinished} />\n </ContextMenu>\n );\n }\n\n const computedClassName = classNames(\"mx_EmojiButton\", className, {\n mx_EmojiButton_highlight: menuDisplayed,\n });\n\n // TODO: replace ContextMenuTooltipButton with a unified representation of\n // the header buttons and the right panel buttons\n return (\n <>\n <CollapsibleButton\n className={computedClassName}\n onClick={openMenu}\n title={_t(\"common|emoji\")}\n inputRef={button}\n >\n <ReactionIcon />\n </CollapsibleButton>\n\n {contextMenu}\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 classNames from \"classnames\";\nimport {\n type IEventRelation,\n type Room,\n type MatrixClient,\n THREAD_RELATION_TYPE,\n M_POLL_START,\n} from \"matrix-js-sdk/src/matrix\";\nimport React, { type JSX, createContext, type ReactElement, type ReactNode, useContext, useRef } from \"react\";\nimport {\n AttachmentIcon,\n MicOnIcon,\n OverflowHorizontalIcon,\n PollsIcon,\n StickerIcon,\n TextFormattingIcon,\n} from \"@vector-im/compound-design-tokens/assets/web/icons\";\n\nimport { _t } from \"../../../languageHandler\";\nimport { CollapsibleButton } from \"./CollapsibleButton\";\nimport { type MenuProps } from \"../../structures/ContextMenu\";\nimport dis from \"../../../dispatcher/dispatcher\";\nimport ErrorDialog from \"../dialogs/ErrorDialog\";\nimport { LocationButton } from \"../location\";\nimport Modal from \"../../../Modal\";\nimport PollCreateDialog from \"../elements/PollCreateDialog\";\nimport { MatrixClientPeg } from \"../../../MatrixClientPeg\";\nimport ContentMessages from \"../../../ContentMessages\";\nimport MatrixClientContext from \"../../../contexts/MatrixClientContext\";\nimport { useDispatcher } from \"../../../hooks/useDispatcher\";\nimport { chromeFileInputFix } from \"../../../utils/BrowserWorkarounds\";\nimport IconizedContextMenu, { IconizedContextMenuOptionList } from \"../context_menus/IconizedContextMenu\";\nimport { EmojiButton } from \"./EmojiButton\";\nimport { filterBoolean } from \"../../../utils/arrays\";\nimport { useSettingValue } from \"../../../hooks/useSettings\";\nimport AccessibleButton, { type ButtonEvent } from \"../elements/AccessibleButton\";\nimport { useScopedRoomContext } from \"../../../contexts/ScopedRoomContext.tsx\";\n\ninterface IProps {\n addEmoji: (emoji: string) => boolean;\n haveRecording: boolean;\n isMenuOpen: boolean;\n isStickerPickerOpen: boolean;\n menuPosition?: MenuProps;\n onRecordStartEndClick: () => void;\n relation?: IEventRelation;\n setStickerPickerOpen: (isStickerPickerOpen: boolean) => void;\n showLocationButton: boolean;\n showPollsButton: boolean;\n showStickersButton: boolean;\n toggleButtonMenu: () => void;\n isRichTextEnabled: boolean;\n onComposerModeClick: () => void;\n}\n\ntype OverflowMenuCloser = () => void;\nexport const OverflowMenuContext = createContext<OverflowMenuCloser | null>(null);\n\nconst MessageComposerButtons: React.FC<IProps> = (props: IProps) => {\n const matrixClient = useContext(MatrixClientContext);\n const { room, narrow } = useScopedRoomContext(\"room\", \"narrow\");\n\n const isWysiwygLabEnabled = useSettingValue(\"feature_wysiwyg_composer\");\n\n if (!matrixClient || !room || props.haveRecording) {\n return null;\n }\n\n let mainButtons: ReactNode[];\n let moreButtons: ReactNode[];\n if (narrow) {\n mainButtons = [\n isWysiwygLabEnabled ? (\n <ComposerModeButton\n key=\"composerModeButton\"\n isRichTextEnabled={props.isRichTextEnabled}\n onClick={props.onComposerModeClick}\n />\n ) : (\n emojiButton(props)\n ),\n ];\n moreButtons = [\n uploadButton(), // props passed via UploadButtonContext\n showStickersButton(props),\n voiceRecordingButton(props, narrow),\n props.showPollsButton ? pollButton(room, props.relation) : null,\n showLocationButton(props, room, matrixClient),\n ];\n } else {\n mainButtons = [\n isWysiwygLabEnabled ? (\n <ComposerModeButton\n key=\"composerModeButton\"\n isRichTextEnabled={props.isRichTextEnabled}\n onClick={props.onComposerModeClick}\n />\n ) : (\n emojiButton(props)\n ),\n uploadButton(), // props passed via UploadButtonContext\n ];\n moreButtons = [\n showStickersButton(props),\n voiceRecordingButton(props, narrow),\n props.showPollsButton ? pollButton(room, props.relation) : null,\n showLocationButton(props, room, matrixClient),\n ];\n }\n\n mainButtons = filterBoolean(mainButtons);\n moreButtons = filterBoolean(moreButtons);\n\n const moreOptionsClasses = classNames({\n mx_MessageComposer_button: true,\n mx_MessageComposer_buttonMenu: true,\n mx_MessageComposer_closeButtonMenu: props.isMenuOpen,\n });\n\n return (\n <UploadButtonContextProvider roomId={room.roomId} relation={props.relation}>\n {mainButtons}\n {moreButtons.length > 0 && (\n <AccessibleButton\n className={moreOptionsClasses}\n onClick={props.toggleButtonMenu}\n title={_t(\"quick_settings|sidebar_settings\")}\n >\n <OverflowHorizontalIcon />\n </AccessibleButton>\n )}\n {props.isMenuOpen && (\n <IconizedContextMenu\n onFinished={props.toggleButtonMenu}\n {...props.menuPosition}\n wrapperClassName=\"mx_MessageComposer_Menu\"\n compact={true}\n >\n <OverflowMenuContext.Provider value={props.toggleButtonMenu}>\n <IconizedContextMenuOptionList>{moreButtons}</IconizedContextMenuOptionList>\n </OverflowMenuContext.Provider>\n </IconizedContextMenu>\n )}\n </UploadButtonContextProvider>\n );\n};\n\nfunction emojiButton(props: IProps): ReactElement {\n return (\n <EmojiButton\n key=\"emoji_button\"\n addEmoji={props.addEmoji}\n menuPosition={props.menuPosition}\n className=\"mx_MessageComposer_button\"\n />\n );\n}\n\nfunction uploadButton(): ReactElement {\n return <UploadButton key=\"controls_upload\" />;\n}\n\ntype UploadButtonFn = () => void;\nexport const UploadButtonContext = createContext<UploadButtonFn | null>(null);\n\ninterface IUploadButtonProps {\n roomId: string;\n relation?: IEventRelation;\n children: ReactNode;\n}\n\n// We put the file input outside the UploadButton component so that it doesn't get killed when the context menu closes.\nconst UploadButtonContextProvider: React.FC<IUploadButtonProps> = ({ roomId, relation, children }) => {\n const cli = useContext(MatrixClientContext);\n const roomContext = useScopedRoomContext(\"timelineRenderingType\", \"replyToEvent\");\n const uploadInput = useRef<HTMLInputElement>(null);\n\n const onUploadClick = (): void => {\n if (cli?.isGuest()) {\n dis.dispatch({ action: \"require_registration\" });\n return;\n }\n uploadInput.current?.click();\n };\n\n useDispatcher(dis, (payload) => {\n if (roomContext.timelineRenderingType === payload.context && payload.action === \"upload_file\") {\n onUploadClick();\n }\n });\n\n const onUploadFileInputChange = (ev: React.ChangeEvent<HTMLInputElement>): void => {\n if (ev.target.files?.length === 0) return;\n\n // Take a copy, so we can safely reset the value of the form control\n ContentMessages.sharedInstance().sendContentListToRoom(\n Array.from(ev.target.files!),\n roomId,\n relation,\n roomContext.replyToEvent,\n cli,\n roomContext.timelineRenderingType,\n );\n\n // This is the onChange handler for a file form control, but we're\n // not keeping any state, so reset the value of the form control\n // to empty.\n // NB. we need to set 'value': the 'files' property is immutable.\n ev.target.value = \"\";\n };\n\n const uploadInputStyle = { display: \"none\" };\n return (\n <UploadButtonContext.Provider value={onUploadClick}>\n {children}\n\n <input\n ref={uploadInput}\n type=\"file\"\n style={uploadInputStyle}\n multiple\n onClick={chromeFileInputFix}\n onChange={onUploadFileInputChange}\n />\n </UploadButtonContext.Provider>\n );\n};\n\n// Must be rendered within an UploadButtonContextProvider\nconst UploadButton: React.FC = () => {\n const overflowMenuCloser = useContext(OverflowMenuContext);\n const uploadButtonFn = useContext(UploadButtonContext);\n\n const onClick = (): void => {\n uploadButtonFn?.();\n overflowMenuCloser?.(); // close overflow menu\n };\n\n return (\n <CollapsibleButton className=\"mx_MessageComposer_button\" onClick={onClick} title={_t(\"common|attachment\")}>\n <AttachmentIcon />\n </CollapsibleButton>\n );\n};\n\nfunction showStickersButton(props: IProps): ReactElement | null {\n return props.showStickersButton ? (\n <CollapsibleButton\n id=\"stickersButton\"\n key=\"controls_stickers\"\n className=\"mx_MessageComposer_button\"\n onClick={() => props.setStickerPickerOpen(!props.isStickerPickerOpen)}\n title={props.isStickerPickerOpen ? _t(\"composer|close_sticker_picker\") : _t(\"common|sticker\")}\n >\n <StickerIcon />\n </CollapsibleButton>\n ) : null;\n}\n\nfunction voiceRecordingButton(props: IProps, narrow: boolean): ReactElement | null {\n // XXX: recording UI does not work well in narrow mode, so hide for now\n return narrow ? null : (\n <CollapsibleButton\n key=\"voice_message_send\"\n className=\"mx_MessageComposer_button\"\n onClick={props.onRecordStartEndClick}\n title={_t(\"composer|voice_message_button\")}\n >\n <MicOnIcon />\n </CollapsibleButton>\n );\n}\n\nfunction pollButton(room: Room, relation?: IEventRelation): ReactElement {\n return <PollButton key=\"polls\" room={room} relation={relation} />;\n}\n\ninterface IPollButtonProps {\n room: Room;\n relation?: IEventRelation;\n}\n\nclass PollButton extends React.PureComponent<IPollButtonProps> {\n public static contextType = OverflowMenuContext;\n declare public context: React.ContextType<typeof OverflowMenuContext>;\n\n private onCreateClick = (): void => {\n this.context?.(); // close overflow menu\n const canSend = this.props.room.currentState.maySendEvent(\n M_POLL_START.name,\n MatrixClientPeg.safeGet().getSafeUserId(),\n );\n if (!canSend) {\n Modal.createDialog(ErrorDialog, {\n title: _t(\"composer|poll_button_no_perms_title\"),\n description: _t(\"composer|poll_button_no_perms_description\"),\n });\n } else {\n const threadId =\n this.props.relation?.rel_type === THREAD_RELATION_TYPE.name ? this.props.relation.event_id : undefined;\n\n Modal.createDialog(\n PollCreateDialog,\n {\n room: this.props.room,\n threadId,\n },\n \"mx_CompoundDialog\",\n false, // isPriorityModal\n true, // isStaticModal\n );\n }\n };\n\n public render(): React.ReactNode {\n // do not allow sending polls within threads at this time\n if (this.props.relation?.rel_type === THREAD_RELATION_TYPE.name) return null;\n\n return (\n <CollapsibleButton\n className=\"mx_MessageComposer_button\"\n onClick={this.onCreateClick}\n title={_t(\"composer|poll_button\")}\n >\n <PollsIcon />\n </CollapsibleButton>\n );\n }\n}\n\nfunction showLocationButton(props: IProps, room: Room, matrixClient: MatrixClient): ReactElement | null {\n const sender = room.getMember(matrixClient.getSafeUserId());\n\n return props.showLocationButton && sender ? (\n <LocationButton\n key=\"location\"\n roomId={room.roomId}\n relation={props.relation}\n sender={sender}\n menuPosition={props.menuPosition}\n />\n ) : null;\n}\n\ninterface WysiwygToggleButtonProps {\n isRichTextEnabled: boolean;\n onClick: (ev: ButtonEvent) => void;\n}\n\nfunction ComposerModeButton({ isRichTextEnabled, onClick }: WysiwygToggleButtonProps): JSX.Element {\n const title = isRichTextEnabled ? _t(\"composer|mode_plain\") : _t(\"composer|mode_rich_text\");\n\n return (\n <CollapsibleButton className=\"mx_MessageComposer_button\" onClick={onClick} title={title}>\n <TextFormattingIcon />\n </CollapsibleButton>\n );\n}\n\nexport default MessageComposerButtons;\n","import { forwardRef } from \"react\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction MicOnIcon(props, ref) {\n return /*#__PURE__*/_jsxs(\"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 12a1 1 0 1 0-2 0 8 8 0 0 0 7 7.938V21a1 1 0 1 0 2 0v-1.062A8 8 0 0 0 20 12a1 1 0 1 0-2 0 6 6 0 0 1-12 0\"\n }), /*#__PURE__*/_jsx(\"path\", {\n fillRule: \"evenodd\",\n d: \"M14 12V6a2 2 0 1 0-4 0v6a2 2 0 1 0 4 0M12 2a4 4 0 0 0-4 4v6a4 4 0 0 0 8 0V6a4 4 0 0 0-4-4\",\n clipRule: \"evenodd\"\n })]\n });\n}\n;\nMicOnIcon.displayName = \"MicOnIcon\";\nexport default forwardRef(MicOnIcon);","import { forwardRef } from \"react\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction ReactionIcon(props, ref) {\n return /*#__PURE__*/_jsxs(\"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: \"M15.536 15.536a1 1 0 0 0-1.415-1.415 3 3 0 0 1-2.12.879 3 3 0 0 1-2.122-.879 1 1 0 1 0-1.414 1.415A5 5 0 0 0 12 17c1.38 0 2.632-.56 3.536-1.464M10 10.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0m5.5 1.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3\"\n }), /*#__PURE__*/_jsx(\"path\", {\n d: \"M22 12c0 5.523-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2s10 4.477 10 10m-2 0a8 8 0 1 0-16 0 8 8 0 0 0 16 0\"\n })]\n });\n}\n;\nReactionIcon.displayName = \"ReactionIcon\";\nexport default forwardRef(ReactionIcon);","import { forwardRef } from \"react\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction StickerIcon(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 fillRule: \"evenodd\",\n d: \"M17 2a5 5 0 0 1 5 4.999v5.335a5 5 0 0 1-1.58 3.647l-4.978 4.667A5 5 0 0 1 12.023 22H7l-.258-.007A5 5 0 0 1 2 17V7a5 5 0 0 1 5-5zM7 4a3 3 0 0 0-3 3v10a3 3 0 0 0 2.999 3H12v-4a4 4 0 0 1 4-4h4V6.999A3 3 0 0 0 17 4zm9 10a2 2 0 0 0-2 2v3.251l.074-.062 4.978-4.666q.252-.238.441-.523z\",\n clipRule: \"evenodd\"\n })\n });\n}\n;\nStickerIcon.displayName = \"StickerIcon\";\nexport default forwardRef(StickerIcon);","import { forwardRef } from \"react\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction TextFormattingIcon(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 19a.97.97 0 0 1-.713-.288A.97.97 0 0 1 5 18q0-.424.287-.712A.97.97 0 0 1 6 17h12q.424 0 .712.288.288.287.288.712 0 .424-.288.712A.97.97 0 0 1 18 19zm1.35-5.2 3.425-9.2a.9.9 0 0 1 .338-.437A.93.93 0 0 1 11.65 4h.7q.3 0 .537.162.238.163.338.438l3.425 9.225q.15.425-.1.8a.8.8 0 0 1-.7.375.9.9 0 0 1-.512-.162A.9.9 0 0 1 15 14.4l-.75-2.2H9.8L9 14.425a.84.84 0 0 1-.325.425q-.225.15-.5.15a.84.84 0 0 1-.738-.387.82.82 0 0 1-.087-.813m3-3.2h3.3l-1.6-4.55h-.1z\"\n })\n });\n}\n;\nTextFormattingIcon.displayName = \"TextFormattingIcon\";\nexport default forwardRef(TextFormattingIcon);"],"names":["LocationPinIcon","props","ref","xmlns","width","height","fill","viewBox","children","d","displayName","forwardRef","DURATION_MS","fifteenMins","oneHour","eightHours","DEFAULT_DURATION_MS","getLabel","durationMs","_t","duration","formatDuration","LiveDurationDropdown","timeout","onChange","options","Object","values","map","key","toString","label","includes","push","React","Dropdown","id","value","onOptionChange","className","LocationShareType","handleShareError","error","openMenu","shareType","modalParams","errorMessage","errcode","Live","title","description","button","hasCancelButton","onFinished","getPermissionsErrorParams","getDefaultErrorParams","brand","SdkConfig","get","cancelButton","tryAgain","logger","Modal","createDialog","QuestionDialog","isSharingOwnLocation","Own","LocationPicker","constructor","super","_defineProperty","_document$getElementB","this","marker","maplibregl","element","document","getElementById","getMarkerId","undefined","anchor","offset","setLngLat","addTo","clientWellKnown","_tileServerFromWellKn","style","tileServerFromWellKnown","_this$map","setStyle","position","_this$marker","addMarkerToMap","setState","genericPositionFromGeolocation","coords","longitude","latitude","event","_this$marker2","lngLat","timestamp","Date","now","lat","lng","e","_this$map2","ErrorDialog","positionFailureMessage","code","geolocate","removeControl","state","onChoose","uri","getGeoUri","componentDidMount","context","on","ClientEvent","ClientWellKnown","updateStyleUrl","container","findMapStyleUrl","center","zoom","positionOptions","enableHighAccuracy","trackUserLocation","addControl","LocationShareError","MapStyleUrlNotReachable","_this$geolocate","trigger","onGeolocateError","onGeolocate","Pin","navigationControl","showCompass","showZoom","onClick","message","errorType","MapStyleUrlNotConfigured","WebGLNotEnabled","Default","componentWillUnmount","_this$geolocate2","_this$geolocate3","_this$map3","off","render","MapError","onSubmit","onOk","onTimeoutChange","AccessibleButton","type","kind","disabled","Marker","roomMember","sender","useMemberColor","MatrixClientContext","ShareDialogButtons","onBack","onCancel","displayBack","BackIcon","CloseIcon","UserAvatar","_OwnProfileStore$inst","_OwnProfileStore$inst2","userId","useContext","getSafeUserId","OwnProfileStore","instance","avatarSize","avatarUrl","getHttpAvatarUrl","parseInt","BaseAvatar","idName","name","url","size","ShareTypeOption","_ref","rest","_objectWithoutProperties","_excluded","_extends","LocationIcon","StyledLiveBeaconIcon","ShareType","setShareType","enabledShareTypes","labels","Heading","EnableLiveShare","isEnabled","setEnabled","useState","onEnabledChanged","useCallback","target","checked","onSubmitForm","evt","preventDefault","stopPropagation","Form","SettingsToggleInput","Button","LocationShareMenu","menuPosition","roomId","relation","matrixClient","getEnabledShareTypes","isLiveShareEnabled","useFeatureEnabled","multipleShareTypesEnabled","length","onLocationSubmit","shareLiveLocation","client","async","OwnBeaconStore","createLiveBeacon","ContentHelpers","LocationAssetType","Self","shareLocation","threadId","rel_type","THREAD_RELATION_TYPE","event_id","assetType","content","doMaybeLocalRoomAction","actualRoomId","sendMessage","shouldAdvertiseLiveLabsFlag","ContextMenu","managed","onLiveShareEnableSubmit","SettingsStore","setValue","SettingLevel","DEVICE","LocationButton","overflowMenuCloser","OverflowMenuContext","menuDisplayed","closeMenu","useContextMenu","_onFinished","ev","contextMenu","current","aboveLeftOf","getBoundingClientRect","classNames","mx_MessageComposer_button_highlight","CollapsibleButton","inputRef","OptionalTooltip","tooltip","isVisible","setIsVisible","onMouseEnter","show","onMouseLeave","hide","memberColorClass","getUserNameColorClass","mx_Marker_defaultColor","MemberAvatar","member","viewUserOnClick","hideTitle","IconizedContextMenuOption","icon","EmojiButton","addEmoji","focusLock","EmojiPicker","computedClassName","mx_EmojiButton_highlight","ReactionIcon","createContext","emojiButton","uploadButton","UploadButton","UploadButtonContext","UploadButtonContextProvider","cli","roomContext","useScopedRoomContext","uploadInput","useRef","onUploadClick","_uploadInput$current","isGuest","dis","dispatch","action","click","useDispatcher","payload","timelineRenderingType","Provider","display","multiple","chromeFileInputFix","_ev$target$files","files","ContentMessages","sharedInstance","sendContentListToRoom","Array","from","replyToEvent","uploadButtonFn","AttachmentIcon","showStickersButton","setStickerPickerOpen","isStickerPickerOpen","StickerIcon","voiceRecordingButton","narrow","onRecordStartEndClick","MicOnIcon","pollButton","room","PollButton","args","_this$context","call","currentState","maySendEvent","M_POLL_START","MatrixClientPeg","safeGet","_this$props$relation","PollCreateDialog","_this$props$relation2","onCreateClick","PollsIcon","showLocationButton","getMember","ComposerModeButton","isRichTextEnabled","TextFormattingIcon","isWysiwygLabEnabled","useSettingValue","haveRecording","mainButtons","moreButtons","onComposerModeClick","showPollsButton","filterBoolean","moreOptionsClasses","mx_MessageComposer_button","mx_MessageComposer_buttonMenu","mx_MessageComposer_closeButtonMenu","isMenuOpen","toggleButtonMenu","OverflowHorizontalIcon","IconizedContextMenu","wrapperClassName","compact","IconizedContextMenuOptionList","fillRule","clipRule"],"sourceRoot":""}