diff --git a/web/src/ui/composer/MessageComposer.tsx b/web/src/ui/composer/MessageComposer.tsx index 6e71f6a..f89337c 100644 --- a/web/src/ui/composer/MessageComposer.tsx +++ b/web/src/ui/composer/MessageComposer.tsx @@ -27,6 +27,7 @@ import type { RoomID, } from "@/api/types" import { PartialEmoji, emojiToMarkdown } from "@/util/emoji" +import { isMobileDevice } from "@/util/ismobile.ts" import { escapeMarkdown } from "@/util/markdown.ts" import useEvent from "@/util/useEvent.ts" import ClientContext from "../ClientContext.ts" @@ -62,7 +63,6 @@ export interface ComposerState { uninited?: boolean } -const isMobileDevice = window.ontouchstart !== undefined && window.innerWidth < 800 const MAX_TEXTAREA_ROWS = 10 const emptyComposer: ComposerState = { text: "", media: null, replyTo: null, location: null } diff --git a/web/src/ui/emojipicker/EmojiPicker.css b/web/src/ui/emojipicker/EmojiPicker.css index fc7c61f..fc74c95 100644 --- a/web/src/ui/emojipicker/EmojiPicker.css +++ b/web/src/ui/emojipicker/EmojiPicker.css @@ -199,3 +199,28 @@ div.emoji-picker { margin-bottom: .25rem; } } + +@media screen and (max-width: 37.5rem) { + div.emoji-picker, div.gif-picker { + inset: 0 0 40px 0 !important; + width: 100%; + height: calc(100% - 40px); + border-radius: 0; + } + + div.gif-picker > div.gif-list > div.gif-entry { + max-width: 33%; + } +} + +@media screen and (max-width: 30rem) { + div.gif-picker > div.gif-list > div.gif-entry { + max-width: 50%; + } +} + +@media screen and (max-width: 20rem) { + div.gif-picker > div.gif-list > div.gif-entry { + max-width: 100%; + } +} diff --git a/web/src/ui/emojipicker/EmojiPicker.tsx b/web/src/ui/emojipicker/EmojiPicker.tsx index e366283..16a8638 100644 --- a/web/src/ui/emojipicker/EmojiPicker.tsx +++ b/web/src/ui/emojipicker/EmojiPicker.tsx @@ -18,6 +18,7 @@ import { getMediaURL } from "@/api/media.ts" import { RoomStateStore, useCustomEmojis } from "@/api/statestore" import { roomStateGUIDToString } from "@/api/types" import { CATEGORY_FREQUENTLY_USED, Emoji, PartialEmoji, categories, useFilteredEmojis } from "@/util/emoji" +import { isMobileDevice } from "@/util/ismobile.ts" import useEvent from "@/util/useEvent.ts" import ClientContext from "../ClientContext.ts" import { ModalCloseContext } from "../modal/Modal.tsx" @@ -118,7 +119,13 @@ const EmojiPicker = ({ style, selected, onSelect, room, allowFreeform, closeOnSe )}
- + diff --git a/web/src/ui/emojipicker/GIFPicker.tsx b/web/src/ui/emojipicker/GIFPicker.tsx index d3dfbce..8b4443b 100644 --- a/web/src/ui/emojipicker/GIFPicker.tsx +++ b/web/src/ui/emojipicker/GIFPicker.tsx @@ -16,6 +16,7 @@ import React, { CSSProperties, use, useCallback, useEffect, useState } from "react" import { RoomStateStore, usePreference } from "@/api/statestore" import { MediaMessageEventContent } from "@/api/types" +import { isMobileDevice } from "@/util/ismobile.ts" import ClientContext from "../ClientContext.ts" import { ModalCloseContext } from "../modal/Modal.tsx" import { GIF, getTrendingGIFs, searchGIF } from "./gifsource.ts" @@ -104,7 +105,7 @@ const GIFPicker = ({ style, onSelect, room }: GIFPickerProps) => { return
. +export const isMobileDevice = window.ontouchstart !== undefined && window.innerWidth < 800