@adminide-stack/yantra-mobile 12.0.105-alpha.0 → 12.0.106-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/features/messaging/BlockedContactsScreen.js +127 -0
- package/lib/features/messaging/BlockedContactsScreen.js.map +1 -0
- package/lib/features/messaging/ChatAttachments.js +4 -2
- package/lib/features/messaging/ChatAttachments.js.map +1 -1
- package/lib/features/messaging/ChatComponents.js +194 -10
- package/lib/features/messaging/ChatComponents.js.map +1 -1
- package/lib/features/messaging/ChatInfoScreen.js +173 -17
- package/lib/features/messaging/ChatInfoScreen.js.map +1 -1
- package/lib/features/messaging/ConversationListScreen.js +17 -1
- package/lib/features/messaging/ConversationListScreen.js.map +1 -1
- package/lib/features/messaging/MediaGalleryScreen.js +264 -0
- package/lib/features/messaging/MediaGalleryScreen.js.map +1 -0
- package/lib/features/messaging/NativeChatExperience.js +137 -18
- package/lib/features/messaging/NativeChatExperience.js.map +1 -1
- package/lib/features/messaging/NewGroupScreen.js +191 -0
- package/lib/features/messaging/NewGroupScreen.js.map +1 -0
- package/lib/features/messaging/PollComposer.js +137 -0
- package/lib/features/messaging/PollComposer.js.map +1 -0
- package/lib/features/messaging/PollVotesScreen.js +122 -0
- package/lib/features/messaging/PollVotesScreen.js.map +1 -0
- package/lib/features/messaging/ThreadScreen.js +180 -13
- package/lib/features/messaging/ThreadScreen.js.map +1 -1
- package/lib/features/messaging/chatLinks.js +39 -2
- package/lib/features/messaging/chatLinks.js.map +1 -1
- package/lib/features/messaging/chatModel.js +186 -19
- package/lib/features/messaging/chatModel.js.map +1 -1
- package/lib/features/messaging/chatOperations.js +111 -2
- package/lib/features/messaging/chatOperations.js.map +1 -1
- package/lib/features/messaging/nativeChatChannelQuery.js +7 -2
- package/lib/features/messaging/nativeChatChannelQuery.js.map +1 -1
- package/lib/features/messaging/useChatData.js +248 -10
- package/lib/features/messaging/useChatData.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatComponents.js","sources":["../../../src/features/messaging/ChatComponents.tsx"],"sourcesContent":["/**\n * Presentational pieces for the chat surface, laid out the way WhatsApp is:\n * a warm wallpaper, bubbles with a tail on the first message of a run, the\n * time and ticks INSIDE the bubble's bottom corner, centered date chips, and a\n * chat list whose rows carry ticks, mute and a green unread badge.\n *\n * Plain react-native only - no gluestack, no NativeWind, no reanimated beyond\n * what the host already shares. A federated remote may only use what the host\n * provides, and every extra dependency is another way for the bundle to fail to\n * load on a device that the simulator will not reproduce. The tail is a\n * border-drawn triangle for the same reason (no react-native-svg in the share).\n *\n * `expo-image` IS available (it is a shared singleton), so avatars get real\n * caching rather than RN's `Image`.\n *\n * Layout notes:\n * - NativeWind's Metro interop can drop `gap` and flatten away `flexDirection`\n * from StyleSheet.create. Critical row layouts therefore set\n * `flexDirection: 'row'` as an inline style and use margins instead of gap.\n * - Lazily loaded native experiences DROP `style={({ pressed }) => …}` on\n * Pressable (the button renders unsized). Pressed feedback here is state set\n * from onPressIn/onPressOut, never a style callback.\n */\nimport * as React from 'react';\nimport { ActivityIndicator, Pressable, StyleSheet, Text, View } from 'react-native';\nimport { Image } from 'expo-image';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport {\n initialsOf,\n isMuted,\n relativeLabel,\n timeLabel,\n type ChatConversation,\n type ChatMessage,\n type ChatMessageStatus,\n type ChatReplyRef,\n} from './chatModel';\nimport { MessageAttachments } from './ChatAttachments';\nimport type { ChatAudioSeam } from './chatHost';\nimport { firstLink, isOnlyALink, splitLinks } from './chatLinks';\nimport { LinkPreviewCard, useLinkPreview } from './LinkPreviewCard';\nimport type { LinkPreviewLoader } from './linkPreview';\nimport { usePressed } from './usePressed';\n\nexport interface ChatTheme {\n isDark: boolean;\n bg: string;\n surface: string;\n border: string;\n text: string;\n textMuted: string;\n accent: string;\n onAccent: string;\n bubbleMine: string;\n bubbleTheirs: string;\n bubbleMineText: string;\n bubbleTheirsText: string;\n /** The time / \"Edited\" inside a bubble. */\n metaMine: string;\n metaTheirs: string;\n /** Two blue ticks. */\n readTick: string;\n /** The transcript wallpaper. */\n threadBg: string;\n composerBar: string;\n composerField: string;\n /** Date chip and unread band over the wallpaper. */\n chipBg: string;\n chipText: string;\n /** A quoted message inside a bubble. */\n quoteBg: string;\n danger: string;\n unread: string;\n headerBg: string;\n}\n\n/** WhatsApp's own palette, light and dark. One place, so a rebrand is a one-file change. */\nexport const chatThemes: { light: ChatTheme; dark: ChatTheme } = {\n light: {\n isDark: false,\n bg: '#ffffff',\n surface: '#f0f2f5',\n border: '#e9edef',\n text: '#111b21',\n textMuted: '#667781',\n accent: '#00a884',\n onAccent: '#ffffff',\n bubbleMine: '#d9fdd3',\n bubbleTheirs: '#ffffff',\n bubbleMineText: '#111b21',\n bubbleTheirsText: '#111b21',\n metaMine: '#667781',\n metaTheirs: '#667781',\n readTick: '#53bdeb',\n threadBg: '#efeae2',\n composerBar: '#f0f2f5',\n composerField: '#ffffff',\n chipBg: '#ffffff',\n chipText: '#54656f',\n quoteBg: 'rgba(11, 20, 26, 0.05)',\n danger: '#ea0038',\n unread: '#25d366',\n headerBg: '#f0f2f5',\n },\n dark: {\n isDark: true,\n bg: '#111b21',\n surface: '#202c33',\n border: '#222d34',\n text: '#e9edef',\n textMuted: '#8696a0',\n accent: '#00a884',\n onAccent: '#111b21',\n bubbleMine: '#005c4b',\n bubbleTheirs: '#202c33',\n bubbleMineText: '#e9edef',\n bubbleTheirsText: '#e9edef',\n metaMine: 'rgba(233, 237, 239, 0.6)',\n metaTheirs: '#8696a0',\n readTick: '#53bdeb',\n threadBg: '#0b141a',\n composerBar: '#1f2c34',\n composerField: '#2a3942',\n chipBg: '#182229',\n chipText: '#8696a0',\n quoteBg: 'rgba(0, 0, 0, 0.2)',\n danger: '#f15c6d',\n unread: '#00a884',\n headerBg: '#1f2c34',\n },\n};\n\n/** Per-person colors for group sender names and quote bars (WhatsApp tints each participant). */\nconst PERSON_COLORS_LIGHT = ['#1fa855', '#d88e00', '#b05cc2', '#0f7ec5', '#e2546b', '#029d95', '#7f66ff', '#c76f00'];\nconst PERSON_COLORS_DARK = ['#53bdeb', '#ffb84d', '#e28af0', '#5bc0f8', '#ff7a93', '#3fd3c6', '#a391ff', '#f0a43a'];\n/** Avatar plates when there is no photo. */\nconst AVATAR_COLORS = ['#7e57c2', '#26a69a', '#ef6c00', '#5c6bc0', '#ec407a', '#43a047', '#8d6e63', '#00897b'];\n\n/** A small stable hash for picking a color; not for anything that needs to be secure. */\nfunction hashOf(key: string): number {\n let h = 7;\n for (let i = 0; i < key.length; i += 1) h = (h * 31 + key.charCodeAt(i)) % 1_000_000_007;\n return h;\n}\n\n/** A stable color for one person, from their id (or name when the id is unknown). */\nexport function personColor(key: string | null | undefined, theme: ChatTheme): string {\n const palette = theme.isDark ? PERSON_COLORS_DARK : PERSON_COLORS_LIGHT;\n return palette[hashOf(key || '?') % palette.length];\n}\n\nconst AVATAR_PLATE = '#dfe5e7';\nconst AVATAR_ICON = '#ffffff';\n\nexport function Avatar({\n name,\n uri,\n size = 49,\n theme,\n variant = 'silhouette',\n}: {\n name: string;\n uri?: string | null;\n size?: number;\n theme: ChatTheme;\n /** `silhouette` is the gray person; `initials` is a colored plate with initials. */\n variant?: 'silhouette' | 'initials';\n}) {\n const [failed, setFailed] = React.useState(false);\n const radius = size / 2;\n\n if (uri && !failed) {\n return (\n <Image\n source={{ uri }}\n style={{ width: size, height: size, borderRadius: radius, backgroundColor: AVATAR_PLATE }}\n contentFit=\"cover\"\n transition={120}\n onError={() => setFailed(true)}\n accessibilityIgnoresInvertColors\n />\n );\n }\n if (variant === 'initials') {\n return (\n <View\n style={{\n width: size,\n height: size,\n borderRadius: radius,\n backgroundColor: AVATAR_COLORS[hashOf(name) % AVATAR_COLORS.length],\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <Text style={{ color: '#fff', fontWeight: '600', fontSize: Math.round(size * 0.38) }}>\n {initialsOf(name)}\n </Text>\n </View>\n );\n }\n return (\n <View\n style={{\n width: size,\n height: size,\n borderRadius: radius,\n backgroundColor: theme.isDark ? '#6a7175' : AVATAR_PLATE,\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <MaterialCommunityIcons name=\"account\" size={Math.round(size * 0.62)} color={AVATAR_ICON} />\n </View>\n );\n}\n\nexport function UnreadBadge({ count, theme, muted }: { count: number; theme: ChatTheme; muted?: boolean }) {\n if (count <= 0) return null;\n return (\n <View style={[styles.badge, { backgroundColor: muted ? theme.textMuted : theme.unread }]}>\n <Text style={[styles.badgeText, { color: theme.isDark ? '#111b21' : '#ffffff' }]}>\n {count > 999 ? '999+' : count}\n </Text>\n </View>\n );\n}\n\n/** Clock while sending, one gray tick when the server has it, two blue ticks when read. */\nexport function MessageTicks({\n status,\n theme,\n mine = true,\n size = 16,\n}: {\n status: ChatMessageStatus;\n theme: ChatTheme;\n mine?: boolean;\n size?: number;\n}) {\n const gray = mine ? theme.metaMine : theme.metaTheirs;\n if (status === 'sending') {\n return (\n <MaterialCommunityIcons\n name=\"clock-outline\"\n size={size - 3}\n color={gray}\n accessibilityLabel=\"Sending\"\n style={styles.tick}\n />\n );\n }\n if (status === 'failed') {\n return (\n <MaterialCommunityIcons\n name=\"alert-circle\"\n size={size - 2}\n color={theme.danger}\n accessibilityLabel=\"Not sent\"\n style={styles.tick}\n />\n );\n }\n const read = status === 'read';\n const delivered = status === 'delivered';\n let label = 'Sent';\n if (read) label = 'Read';\n else if (delivered) label = 'Delivered';\n return (\n <MaterialCommunityIcons\n name={read || delivered ? 'check-all' : 'check'}\n size={size}\n color={read ? theme.readTick : gray}\n accessibilityLabel={label}\n style={styles.tick}\n />\n );\n}\n\nexport function ConversationRow({\n conversation,\n theme,\n now,\n onPress,\n onLongPress,\n}: {\n conversation: ChatConversation;\n theme: ChatTheme;\n now: number;\n onPress: () => void;\n /** The chat's options (pin, archive). */\n onLongPress?: () => void;\n}) {\n const [pressed, pressHandlers] = usePressed();\n const unread = conversation.unreadCount > 0;\n const muted = isMuted(conversation, now);\n const preview = conversation.subtitle.trim();\n const draft = (conversation.draft ?? '').trim();\n const author = !conversation.isDirect && conversation.lastAuthorName ? `${conversation.lastAuthorName}: ` : '';\n const at = conversation.lastMessageAt;\n let status: ChatMessageStatus = 'sent';\n if (at > 0 && conversation.readWatermark > 0 && at <= conversation.readWatermark) status = 'read';\n else if (at > 0 && conversation.deliveredWatermark > 0 && at <= conversation.deliveredWatermark) {\n status = 'delivered';\n }\n\n return (\n <Pressable\n onPress={onPress}\n onLongPress={onLongPress}\n delayLongPress={350}\n {...pressHandlers}\n accessibilityRole=\"button\"\n accessibilityHint={onLongPress ? 'Long press for options' : undefined}\n accessibilityLabel={[\n conversation.title,\n unread ? `${conversation.unreadCount} unread messages` : '',\n muted ? 'muted' : '',\n ]\n .filter(Boolean)\n .join(', ')}\n style={{ backgroundColor: pressed ? theme.surface : theme.bg, width: '100%' }}\n testID={`chat-conversation-${conversation.id}`}\n >\n {/* Inner wrapper: NativeWind can strip flexDirection from Pressable styles. */}\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n width: '100%',\n paddingLeft: 16,\n paddingRight: 16,\n paddingVertical: 10,\n minHeight: 76,\n }}\n >\n <Avatar\n name={conversation.title}\n uri={conversation.avatarUrl}\n theme={theme}\n size={52}\n variant=\"initials\"\n />\n <View style={{ flex: 1, marginLeft: 14, minWidth: 0, justifyContent: 'center' }}>\n <View style={{ flexDirection: 'row', alignItems: 'center', width: '100%' }}>\n <Text\n numberOfLines={1}\n style={{ flex: 1, fontSize: 17, fontWeight: '600', color: theme.text, marginRight: 8 }}\n >\n {conversation.title}\n </Text>\n <Text\n style={{\n fontSize: 13,\n color: unread && !muted ? theme.unread : theme.textMuted,\n fontWeight: unread ? '600' : '400',\n flexShrink: 0,\n }}\n >\n {relativeLabel(conversation.lastActivity, now)}\n </Text>\n </View>\n <View style={{ flexDirection: 'row', alignItems: 'flex-start', marginTop: 2, width: '100%' }}>\n {draft ? (\n // An unsent draft wins over the last message, as in WhatsApp.\n <Text\n numberOfLines={2}\n style={{\n flex: 1,\n fontSize: 15,\n lineHeight: 20,\n color: theme.textMuted,\n marginRight: 8,\n }}\n testID={`chat-conversation-draft-${conversation.id}`}\n >\n <Text style={{ color: theme.accent, fontWeight: '600' }}>Draft: </Text>\n {draft}\n </Text>\n ) : (\n <View style={{ flex: 1, flexDirection: 'row', alignItems: 'flex-start', marginRight: 8 }}>\n {conversation.lastMessageMine && preview && !conversation.lastMessageDeleted ? (\n <View style={{ marginTop: 2, marginRight: 2 }}>\n <MessageTicks status={status} theme={theme} mine={false} size={17} />\n </View>\n ) : null}\n {conversation.lastMessageDeleted ? (\n <MaterialCommunityIcons\n name=\"cancel\"\n size={15}\n color={theme.textMuted}\n style={{ marginTop: 2, marginRight: 4 }}\n />\n ) : null}\n <Text\n numberOfLines={2}\n style={{\n flex: 1,\n fontSize: 15,\n lineHeight: 20,\n color: theme.textMuted,\n fontStyle: conversation.lastMessageDeleted ? 'italic' : 'normal',\n }}\n >\n {author ? (\n <Text style={{ color: theme.textMuted, fontWeight: '500' }}>{author}</Text>\n ) : null}\n {preview}\n </Text>\n </View>\n )}\n <View style={{ flexDirection: 'row', alignItems: 'center', marginTop: 2 }}>\n {muted ? (\n <MaterialCommunityIcons\n name=\"bell-off\"\n size={16}\n color={theme.textMuted}\n accessibilityLabel=\"Muted\"\n style={{ marginLeft: 4 }}\n />\n ) : null}\n {conversation.pinnedAt > 0 ? (\n <MaterialCommunityIcons\n name=\"pin\"\n size={16}\n color={theme.textMuted}\n accessibilityLabel=\"Pinned\"\n style={styles.pinIcon}\n />\n ) : null}\n <UnreadBadge count={conversation.unreadCount} theme={theme} muted={muted} />\n </View>\n </View>\n </View>\n </View>\n </Pressable>\n );\n}\n\n/** The quoted message at the top of a reply, and above the composer while replying. */\nexport function ReplyQuote({\n reply,\n theme,\n viewerId,\n onPress,\n compact,\n}: {\n reply: ChatReplyRef;\n theme: ChatTheme;\n /** The quote of the viewer's own message is labelled \"You\", as WhatsApp does. */\n viewerId?: string | null;\n onPress?: () => void;\n /** Composer variant: no bubble-relative margins. */\n compact?: boolean;\n}) {\n const color = personColor(reply.authorId ?? reply.authorName, theme);\n const isYou = Boolean(viewerId && reply.authorId && reply.authorId === viewerId);\n return (\n <Pressable\n onPress={onPress}\n disabled={!onPress}\n accessibilityRole={onPress ? 'button' : undefined}\n accessibilityLabel={`Reply to ${isYou ? 'you' : reply.authorName}: ${reply.body}`}\n style={[\n styles.quote,\n compact ? null : styles.quoteInBubble,\n { backgroundColor: theme.quoteBg, flexDirection: 'row' },\n ]}\n >\n <View style={[styles.quoteBar, { backgroundColor: color }]} />\n <View style={styles.quoteBody}>\n <Text numberOfLines={1} style={[styles.quoteAuthor, { color }]}>\n {isYou ? 'You' : reply.authorName}\n </Text>\n <Text numberOfLines={2} style={[styles.quoteText, { color: theme.textMuted }]}>\n {reply.body || 'Message'}\n </Text>\n </View>\n </Pressable>\n );\n}\n\n/** The bubble's tail: a border triangle on the outer top corner of the first message in a run. */\nfunction BubbleTail({ mine, color }: { mine: boolean; color: string }) {\n return (\n <View\n pointerEvents=\"none\"\n style={\n mine\n ? [styles.tail, styles.tailMine, { borderTopColor: color }]\n : [styles.tail, styles.tailTheirs, { borderTopColor: color }]\n }\n />\n );\n}\n\nexport function MessageBubble({\n message,\n theme,\n status,\n showAuthor,\n groupWithPrevious,\n viewerId,\n onRetry,\n onLongPress,\n onPressQuote,\n highlighted,\n fileBaseUrl,\n audio,\n onOpenImage,\n linkPreviews,\n onOpenLink,\n}: {\n message: ChatMessage;\n theme: ChatTheme;\n /** Ticks for the viewer's own message; ignored for everyone else's. */\n status?: ChatMessageStatus;\n /** Group chats: the sender's name on the first message of their run. */\n showAuthor: boolean;\n viewerId?: string | null;\n /** Reads a link's card from the gateway; without it links are tappable but show no card. */\n linkPreviews?: LinkPreviewLoader;\n /** Opens a tapped link (in the app or a browser sheet - linkPreview.ts `openChatLink`). */\n onOpenLink?: (url: string) => void;\n /** Where attachments are served from (see ChatMediaSeam.fileBaseUrl). */\n fileBaseUrl?: string | null;\n /** Plays voice notes; without it they show but cannot play. */\n audio?: ChatAudioSeam;\n onOpenImage?: (url: string) => void;\n /** Same sender, message visually above (older): no tail, tighter spacing. */\n groupWithPrevious?: boolean;\n onRetry?: () => void;\n /** Long-press: where the bubble sits on screen, so the reaction overlay can anchor to it. */\n onLongPress?: (frame: { x: number; y: number; width: number; height: number }) => void;\n /** Tapping the quote jumps to the quoted message. */\n onPressQuote?: (messageId: string) => void;\n /** Briefly tinted after a jump from a quote, so the eye finds it. */\n highlighted?: boolean;\n}) {\n const bubbleRef = React.useRef<View>(null);\n const reactions = message.reactions ?? [];\n const mine = message.isMine;\n const failed = message.sendState === 'failed';\n const body = message.body.trim();\n const parts = React.useMemo(() => splitLinks(body), [body]);\n const cardUrl = React.useMemo(() => (message.isDeleted ? null : firstLink(body)), [body, message.isDeleted]);\n const preview = useLinkPreview(cardUrl, linkPreviews);\n // A message that is only a link shows as its card; the raw URL stays when there is no card.\n const onlyLink = Boolean(preview) && !message.attachments.length && isOnlyALink(body);\n const textColor = mine ? theme.bubbleMineText : theme.bubbleTheirsText;\n const metaColor = mine ? theme.metaMine : theme.metaTheirs;\n const fill = mine ? theme.bubbleMine : theme.bubbleTheirs;\n const firstInRun = !groupWithPrevious;\n const time = timeLabel(message.createdAt);\n const meta = `${message.isEdited ? 'Edited ' : ''}${time}`;\n const showTicks = mine && Boolean(status);\n const attachmentOnly = message.attachments.length > 0 && !body && !onlyLink;\n // A photo with no caption: the time sits on the photo in a dark pill, as WhatsApp does.\n // A voice note or file gets its own line for the time instead.\n const metaOnMedia = attachmentOnly && message.attachments.every((a) => a.kind === 'image');\n\n if (message.isDeleted) {\n return (\n <View\n style={[styles.bubbleWrap, mine ? styles.alignEnd : styles.alignStart, firstInRun && styles.runStart]}\n >\n <View style={[styles.bubble, { backgroundColor: fill, flexDirection: 'row', alignItems: 'center' }]}>\n <MaterialCommunityIcons name=\"cancel\" size={15} color={metaColor} />\n <Text style={[styles.deletedText, { color: metaColor }]}>\n {mine ? 'You deleted this message' : 'This message was deleted'}\n </Text>\n </View>\n </View>\n );\n }\n\n return (\n <View style={[styles.bubbleWrap, mine ? styles.alignEnd : styles.alignStart, firstInRun && styles.runStart]}>\n <Pressable\n onLongPress={\n onLongPress\n ? () =>\n bubbleRef.current?.measureInWindow((x, y, width, height) =>\n onLongPress({ x, y, width, height }),\n )\n : undefined\n }\n delayLongPress={280}\n disabled={!onLongPress}\n accessibilityHint={onLongPress ? 'Long press for reactions and options' : undefined}\n style={[styles.bubblePress, reactions.length ? styles.bubbleReacted : null]}\n >\n <View\n ref={bubbleRef}\n collapsable={false}\n style={[\n styles.bubble,\n firstInRun && (mine ? styles.cornerMine : styles.cornerTheirs),\n { backgroundColor: fill },\n highlighted && { opacity: 0.75 },\n failed && { borderWidth: 1, borderColor: theme.danger },\n message.attachments.length || onlyLink ? styles.bubbleWithMedia : null,\n ]}\n >\n {firstInRun ? <BubbleTail mine={mine} color={fill} /> : null}\n {message.forwarded ? (\n <View style={[styles.forwarded, { flexDirection: 'row', alignItems: 'center' }]}>\n <MaterialCommunityIcons name=\"share\" size={14} color={metaColor} />\n <Text style={[styles.forwardedText, { color: metaColor }]}>Forwarded</Text>\n </View>\n ) : null}\n {showAuthor && !mine ? (\n <Text\n numberOfLines={1}\n style={[\n styles.author,\n message.attachments.length || onlyLink ? styles.authorOverMedia : null,\n { color: personColor(message.authorId ?? message.authorName, theme) },\n ]}\n >\n {message.authorName}\n </Text>\n ) : null}\n {message.replyTo ? (\n <ReplyQuote\n reply={message.replyTo}\n theme={theme}\n viewerId={viewerId}\n onPress={onPressQuote ? () => onPressQuote(message.replyTo!.id) : undefined}\n />\n ) : null}\n {message.attachments.length ? (\n <MessageAttachments\n attachments={message.attachments}\n mine={mine}\n theme={theme}\n fileBaseUrl={fileBaseUrl}\n audio={audio}\n uploading={message.sendState === 'sending'}\n onOpenImage={onOpenImage}\n />\n ) : null}\n {body && !onlyLink ? (\n <Text\n style={[\n styles.bubbleText,\n { color: textColor },\n message.attachments.length ? styles.bubbleCaption : null,\n ]}\n >\n {parts.map((part, i) =>\n part.kind === 'link' ? (\n <Text\n key={i}\n style={[styles.linkText, { color: theme.isDark ? '#53bdeb' : '#027eb5' }]}\n onPress={onOpenLink ? () => onOpenLink(part.url) : undefined}\n accessibilityRole=\"link\"\n >\n {part.text}\n </Text>\n ) : (\n part.text\n ),\n )}\n {/* Reserves room on the last line for the time + ticks drawn over the corner. */}\n <Text\n style={styles.metaSpacer}\n >{`\\u2002\\u2002${message.starred ? '\\u2003' : ''}${meta}${showTicks ? '\\u2003\\u2002' : ''}`}</Text>\n </Text>\n ) : null}\n {preview ? (\n <View style={onlyLink ? null : styles.cardBelowText}>\n <LinkPreviewCard preview={preview} theme={theme} onOpen={onOpenLink} />\n </View>\n ) : null}\n {onlyLink || (attachmentOnly && !metaOnMedia) ? <View style={styles.metaRowSpace} /> : null}\n <View\n style={[\n styles.meta,\n metaOnMedia ? styles.metaOnMedia : null,\n { flexDirection: 'row', alignItems: 'center' },\n ]}\n pointerEvents=\"none\"\n >\n {message.starred ? (\n <MaterialCommunityIcons\n name=\"star\"\n size={11}\n color={metaOnMedia ? '#ffffff' : metaColor}\n accessibilityLabel=\"Starred\"\n style={styles.metaStar}\n />\n ) : null}\n <Text style={[styles.metaText, { color: metaOnMedia ? '#ffffff' : metaColor }]}>{meta}</Text>\n {showTicks && status ? (\n <MessageTicks\n status={status}\n theme={metaOnMedia ? { ...theme, metaMine: '#ffffff' } : theme}\n />\n ) : null}\n </View>\n </View>\n {reactions.length ? (\n <View\n style={[\n styles.reactionPill,\n mine ? styles.reactionPillMine : styles.reactionPillTheirs,\n {\n backgroundColor: theme.isDark ? theme.surface : theme.bg,\n borderColor: theme.threadBg,\n flexDirection: 'row',\n },\n ]}\n accessibilityLabel={reactions.map((r) => `${r.reaction} ${r.count}`).join(', ')}\n >\n {reactions.map((r) => (\n <Text key={r.reaction} style={styles.reactionEmoji}>\n {r.reaction}\n </Text>\n ))}\n {reactions.reduce((n, r) => n + r.count, 0) > 1 ? (\n <Text style={[styles.reactionCount, { color: theme.textMuted }]}>\n {reactions.reduce((n, r) => n + r.count, 0)}\n </Text>\n ) : null}\n </View>\n ) : null}\n </Pressable>\n {failed ? (\n <Pressable\n onPress={onRetry}\n accessibilityRole=\"button\"\n hitSlop={8}\n style={[styles.retry, { flexDirection: 'row', alignItems: 'center' }]}\n >\n <MaterialCommunityIcons name=\"refresh\" size={13} color={theme.danger} />\n <Text style={[styles.retryText, { color: theme.danger }]}>Not sent. Tap to try again.</Text>\n </Pressable>\n ) : null}\n </View>\n );\n}\n\n/** WhatsApp's centered date chip (\"Today\", \"Yesterday\", \"Oct 12\"). */\nexport function DaySeparator({ label, theme }: { label: string; theme: ChatTheme }) {\n if (!label) return null;\n return (\n <View style={[styles.daySep, { flexDirection: 'row', justifyContent: 'center' }]}>\n <View style={[styles.dayChip, { backgroundColor: theme.chipBg }]}>\n <Text style={[styles.dayText, { color: theme.chipText }]}>{label}</Text>\n </View>\n </View>\n );\n}\n\n/** The band above the first message that arrived while the chat was closed. */\nexport function UnreadDivider({ count, theme }: { count: number; theme: ChatTheme }) {\n if (count <= 0) return null;\n return (\n <View\n style={[\n styles.unreadBand,\n { backgroundColor: theme.isDark ? 'rgba(32, 44, 51, 0.85)' : 'rgba(255, 255, 255, 0.7)' },\n ]}\n testID=\"chat-unread-divider\"\n >\n <Text style={[styles.unreadBandText, { color: theme.chipText }]}>\n {count === 1 ? '1 unread message' : `${count} unread messages`}\n </Text>\n </View>\n );\n}\n\nexport function InlineBanner({\n message,\n theme,\n onDismiss,\n}: {\n message: string | null;\n theme: ChatTheme;\n onDismiss?: () => void;\n}) {\n if (!message) return null;\n return (\n <View style={[styles.banner, { backgroundColor: theme.danger, flexDirection: 'row', alignItems: 'center' }]}>\n <Text style={styles.bannerText} numberOfLines={2}>\n {message}\n </Text>\n {onDismiss ? (\n <Pressable onPress={onDismiss} hitSlop={8} accessibilityRole=\"button\" accessibilityLabel=\"Dismiss\">\n <MaterialCommunityIcons name=\"close\" size={16} color=\"#fff\" />\n </Pressable>\n ) : null}\n </View>\n );\n}\n\nexport function ConnectionBanner({ state, theme }: { state: string; theme: ChatTheme }) {\n if (state === 'connected') return null;\n const offline = state === 'offline';\n return (\n <View\n style={[\n styles.connBanner,\n { backgroundColor: offline ? theme.danger : theme.textMuted, flexDirection: 'row' },\n ]}\n >\n {offline ? null : <ActivityIndicator size=\"small\" color=\"#fff\" style={{ marginRight: 8 }} />}\n <Text style={styles.connText}>{offline ? 'Waiting for network' : 'Connecting…'}</Text>\n </View>\n );\n}\n\nexport function EmptyState({\n icon,\n title,\n detail,\n theme,\n action,\n}: {\n icon: React.ComponentProps<typeof MaterialCommunityIcons>['name'];\n title: string;\n detail: string;\n theme: ChatTheme;\n action?: { label: string; onPress: () => void };\n}) {\n return (\n <View style={styles.empty}>\n <View style={[styles.emptyIcon, { backgroundColor: theme.surface }]}>\n <MaterialCommunityIcons name={icon} size={34} color={theme.accent} />\n </View>\n <Text style={[styles.emptyTitle, { color: theme.text }]}>{title}</Text>\n <Text style={[styles.emptyDetail, { color: theme.textMuted }]}>{detail}</Text>\n {action ? (\n <Pressable\n onPress={action.onPress}\n accessibilityRole=\"button\"\n style={[styles.emptyAction, { backgroundColor: theme.accent }]}\n >\n <Text style={[styles.emptyActionText, { color: theme.onAccent }]}>{action.label}</Text>\n </Pressable>\n ) : null}\n </View>\n );\n}\n\nconst TAIL_W = 8;\nconst TAIL_H = 13;\n\nconst styles = StyleSheet.create({\n badge: {\n minWidth: 20,\n height: 20,\n borderRadius: 10,\n paddingHorizontal: 6,\n alignItems: 'center',\n justifyContent: 'center',\n marginLeft: 6,\n },\n badgeText: { fontSize: 12, fontWeight: '700' },\n tick: { marginLeft: 3 },\n pinIcon: { marginLeft: 4, transform: [{ rotate: '45deg' }] },\n forwarded: { marginBottom: 2 },\n forwardedText: { fontSize: 13, fontStyle: 'italic', marginLeft: 3 },\n metaStar: { marginRight: 3 },\n\n bubbleWrap: { paddingHorizontal: 16, marginTop: 2, maxWidth: '100%' },\n /** A new sender's run starts a little lower, as in WhatsApp. */\n runStart: { marginTop: 8 },\n alignEnd: { alignItems: 'flex-end' },\n alignStart: { alignItems: 'flex-start' },\n bubblePress: { maxWidth: '82%' },\n bubble: {\n maxWidth: '100%',\n minWidth: 64,\n borderRadius: 8,\n paddingHorizontal: 8,\n paddingTop: 6,\n paddingBottom: 7,\n shadowColor: '#0b141a',\n shadowOpacity: 0.13,\n shadowRadius: 0.5,\n shadowOffset: { width: 0, height: 1 },\n elevation: 1,\n },\n /** The tail replaces the rounded outer top corner. */\n cornerMine: { borderTopRightRadius: 0 },\n cornerTheirs: { borderTopLeftRadius: 0 },\n tail: {\n position: 'absolute',\n top: 0,\n width: 0,\n height: 0,\n borderTopWidth: TAIL_H,\n borderStyle: 'solid',\n },\n tailMine: { right: -TAIL_W, borderRightWidth: TAIL_W, borderRightColor: 'transparent' },\n tailTheirs: { left: -TAIL_W, borderLeftWidth: TAIL_W, borderLeftColor: 'transparent' },\n /** Room under the bubble for the reaction pill. */\n bubbleReacted: { marginBottom: 16 },\n reactionPill: {\n position: 'absolute',\n bottom: -18,\n alignItems: 'center',\n paddingHorizontal: 6,\n height: 26,\n borderRadius: 13,\n borderWidth: 2,\n },\n reactionPillMine: { right: 10 },\n reactionPillTheirs: { left: 10 },\n reactionEmoji: { fontSize: 14, marginHorizontal: 1 },\n reactionCount: { fontSize: 12, fontWeight: '600', marginLeft: 3, marginRight: 1 },\n deletedText: { fontSize: 15, fontStyle: 'italic', marginLeft: 6, marginRight: 4 },\n author: { fontSize: 13, fontWeight: '600', marginBottom: 2 },\n authorOverMedia: { marginHorizontal: 4, marginTop: 2 },\n bubbleText: { fontSize: 16, lineHeight: 21 },\n linkText: { textDecorationLine: 'underline' },\n /** Invisible copy of the meta, sized like it, so text never runs under the time. */\n metaSpacer: { fontSize: 11, color: 'transparent' },\n meta: { position: 'absolute', right: 7, bottom: 4 },\n metaOnMedia: {\n right: 10,\n bottom: 10,\n backgroundColor: 'rgba(11, 20, 26, 0.45)',\n borderRadius: 10,\n paddingHorizontal: 6,\n paddingVertical: 1,\n },\n metaText: { fontSize: 11 },\n metaRowSpace: { height: 16 },\n /** A card under the text keeps the bubble's padding and sits a line below it. */\n cardBelowText: { marginTop: 8, marginBottom: 18 },\n /** Photos sit close to the bubble edge. */\n bubbleWithMedia: { paddingHorizontal: 3, paddingTop: 3, paddingBottom: 3 },\n bubbleCaption: { paddingHorizontal: 5, paddingTop: 4, paddingBottom: 2 },\n retry: { marginTop: 3, marginRight: 4 },\n retryText: { fontSize: 12, marginLeft: 4 },\n\n quote: { borderRadius: 6, overflow: 'hidden', minHeight: 44 },\n quoteInBubble: { marginBottom: 4 },\n quoteBar: { width: 4 },\n quoteBody: { flex: 1, paddingHorizontal: 8, paddingVertical: 5 },\n quoteAuthor: { fontSize: 13, fontWeight: '600' },\n quoteText: { fontSize: 13, lineHeight: 17, marginTop: 1 },\n\n daySep: { marginVertical: 10 },\n dayChip: {\n paddingHorizontal: 12,\n paddingVertical: 5,\n borderRadius: 8,\n shadowColor: '#0b141a',\n shadowOpacity: 0.1,\n shadowRadius: 0.5,\n shadowOffset: { width: 0, height: 1 },\n elevation: 1,\n },\n dayText: { fontSize: 12.5, fontWeight: '500' },\n unreadBand: { marginVertical: 10, paddingVertical: 6, alignItems: 'center' },\n unreadBandText: { fontSize: 12.5, fontWeight: '500' },\n\n banner: { paddingHorizontal: 14, paddingVertical: 8 },\n bannerText: { flex: 1, color: '#fff', fontSize: 12, fontWeight: '500' },\n connBanner: { paddingHorizontal: 14, paddingVertical: 6, alignItems: 'center', justifyContent: 'center' },\n connText: { color: '#fff', fontSize: 12, fontWeight: '500' },\n\n empty: { flex: 1, alignItems: 'center', justifyContent: 'center', padding: 32 },\n emptyIcon: {\n width: 72,\n height: 72,\n borderRadius: 36,\n alignItems: 'center',\n justifyContent: 'center',\n marginBottom: 12,\n },\n emptyTitle: { fontSize: 20, fontWeight: '700', marginTop: 4, textAlign: 'center' },\n emptyDetail: { fontSize: 14, textAlign: 'center', lineHeight: 20, marginTop: 8 },\n emptyAction: { marginTop: 18, paddingHorizontal: 22, paddingVertical: 12, borderRadius: 24 },\n emptyActionText: { fontSize: 15, fontWeight: '700' },\n});\n"],"names":["_a"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ChatComponents.js","sources":["../../../src/features/messaging/ChatComponents.tsx"],"sourcesContent":["/**\n * Presentational pieces for the chat surface, laid out the way WhatsApp is:\n * a warm wallpaper, bubbles with a tail on the first message of a run, the\n * time and ticks INSIDE the bubble's bottom corner, centered date chips, and a\n * chat list whose rows carry ticks, mute and a green unread badge.\n *\n * Plain react-native only - no gluestack, no NativeWind, no reanimated beyond\n * what the host already shares. A federated remote may only use what the host\n * provides, and every extra dependency is another way for the bundle to fail to\n * load on a device that the simulator will not reproduce. The tail is a\n * border-drawn triangle for the same reason (no react-native-svg in the share).\n *\n * `expo-image` IS available (it is a shared singleton), so avatars get real\n * caching rather than RN's `Image`.\n *\n * Layout notes:\n * - NativeWind's Metro interop can drop `gap` and flatten away `flexDirection`\n * from StyleSheet.create. Critical row layouts therefore set\n * `flexDirection: 'row'` as an inline style and use margins instead of gap.\n * - Lazily loaded native experiences DROP `style={({ pressed }) => …}` on\n * Pressable (the button renders unsized). Pressed feedback here is state set\n * from onPressIn/onPressOut, never a style callback.\n */\nimport * as React from 'react';\nimport { ActivityIndicator, Pressable, StyleSheet, Text, View } from 'react-native';\nimport { Image } from 'expo-image';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport {\n initialsOf,\n isMuted,\n relativeLabel,\n timeLabel,\n type ChatConversation,\n type ChatMessage,\n type ChatMessageStatus,\n type ChatPoll,\n type ChatReplyRef,\n} from './chatModel';\nimport { MessageAttachments } from './ChatAttachments';\nimport type { ChatAudioSeam } from './chatHost';\nimport { firstLink, isOnlyALink, splitChatParts } from './chatLinks';\nimport { LinkPreviewCard, useLinkPreview } from './LinkPreviewCard';\nimport type { LinkPreviewLoader } from './linkPreview';\nimport { usePressed } from './usePressed';\n\nexport interface ChatTheme {\n isDark: boolean;\n bg: string;\n surface: string;\n border: string;\n text: string;\n textMuted: string;\n accent: string;\n onAccent: string;\n bubbleMine: string;\n bubbleTheirs: string;\n bubbleMineText: string;\n bubbleTheirsText: string;\n /** The time / \"Edited\" inside a bubble. */\n metaMine: string;\n metaTheirs: string;\n /** Two blue ticks. */\n readTick: string;\n /** The transcript wallpaper. */\n threadBg: string;\n composerBar: string;\n composerField: string;\n /** Date chip and unread band over the wallpaper. */\n chipBg: string;\n chipText: string;\n /** A quoted message inside a bubble. */\n quoteBg: string;\n danger: string;\n unread: string;\n headerBg: string;\n}\n\n/** WhatsApp's own palette, light and dark. One place, so a rebrand is a one-file change. */\nexport const chatThemes: { light: ChatTheme; dark: ChatTheme } = {\n light: {\n isDark: false,\n bg: '#ffffff',\n surface: '#f0f2f5',\n border: '#e9edef',\n text: '#111b21',\n textMuted: '#667781',\n accent: '#00a884',\n onAccent: '#ffffff',\n bubbleMine: '#d9fdd3',\n bubbleTheirs: '#ffffff',\n bubbleMineText: '#111b21',\n bubbleTheirsText: '#111b21',\n metaMine: '#667781',\n metaTheirs: '#667781',\n readTick: '#53bdeb',\n threadBg: '#efeae2',\n composerBar: '#f0f2f5',\n composerField: '#ffffff',\n chipBg: '#ffffff',\n chipText: '#54656f',\n quoteBg: 'rgba(11, 20, 26, 0.05)',\n danger: '#ea0038',\n unread: '#25d366',\n headerBg: '#f0f2f5',\n },\n dark: {\n isDark: true,\n bg: '#111b21',\n surface: '#202c33',\n border: '#222d34',\n text: '#e9edef',\n textMuted: '#8696a0',\n accent: '#00a884',\n onAccent: '#111b21',\n bubbleMine: '#005c4b',\n bubbleTheirs: '#202c33',\n bubbleMineText: '#e9edef',\n bubbleTheirsText: '#e9edef',\n metaMine: 'rgba(233, 237, 239, 0.6)',\n metaTheirs: '#8696a0',\n readTick: '#53bdeb',\n threadBg: '#0b141a',\n composerBar: '#1f2c34',\n composerField: '#2a3942',\n chipBg: '#182229',\n chipText: '#8696a0',\n quoteBg: 'rgba(0, 0, 0, 0.2)',\n danger: '#f15c6d',\n unread: '#00a884',\n headerBg: '#1f2c34',\n },\n};\n\n/** Per-person colors for group sender names and quote bars (WhatsApp tints each participant). */\nconst PERSON_COLORS_LIGHT = ['#1fa855', '#d88e00', '#b05cc2', '#0f7ec5', '#e2546b', '#029d95', '#7f66ff', '#c76f00'];\nconst PERSON_COLORS_DARK = ['#53bdeb', '#ffb84d', '#e28af0', '#5bc0f8', '#ff7a93', '#3fd3c6', '#a391ff', '#f0a43a'];\n/** Avatar plates when there is no photo. */\nconst AVATAR_COLORS = ['#7e57c2', '#26a69a', '#ef6c00', '#5c6bc0', '#ec407a', '#43a047', '#8d6e63', '#00897b'];\n\n/** A small stable hash for picking a color; not for anything that needs to be secure. */\nfunction hashOf(key: string): number {\n let h = 7;\n for (let i = 0; i < key.length; i += 1) h = (h * 31 + key.charCodeAt(i)) % 1_000_000_007;\n return h;\n}\n\n/** A stable color for one person, from their id (or name when the id is unknown). */\nexport function personColor(key: string | null | undefined, theme: ChatTheme): string {\n const palette = theme.isDark ? PERSON_COLORS_DARK : PERSON_COLORS_LIGHT;\n return palette[hashOf(key || '?') % palette.length];\n}\n\nconst AVATAR_PLATE = '#dfe5e7';\nconst AVATAR_ICON = '#ffffff';\n\nexport function Avatar({\n name,\n uri,\n size = 49,\n theme,\n variant = 'silhouette',\n}: {\n name: string;\n uri?: string | null;\n size?: number;\n theme: ChatTheme;\n /** `silhouette` is the gray person; `initials` is a colored plate with initials. */\n variant?: 'silhouette' | 'initials';\n}) {\n const [failed, setFailed] = React.useState(false);\n const radius = size / 2;\n\n if (uri && !failed) {\n return (\n <Image\n source={{ uri }}\n style={{ width: size, height: size, borderRadius: radius, backgroundColor: AVATAR_PLATE }}\n contentFit=\"cover\"\n transition={120}\n onError={() => setFailed(true)}\n accessibilityIgnoresInvertColors\n />\n );\n }\n if (variant === 'initials') {\n return (\n <View\n style={{\n width: size,\n height: size,\n borderRadius: radius,\n backgroundColor: AVATAR_COLORS[hashOf(name) % AVATAR_COLORS.length],\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <Text style={{ color: '#fff', fontWeight: '600', fontSize: Math.round(size * 0.38) }}>\n {initialsOf(name)}\n </Text>\n </View>\n );\n }\n return (\n <View\n style={{\n width: size,\n height: size,\n borderRadius: radius,\n backgroundColor: theme.isDark ? '#6a7175' : AVATAR_PLATE,\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <MaterialCommunityIcons name=\"account\" size={Math.round(size * 0.62)} color={AVATAR_ICON} />\n </View>\n );\n}\n\nexport function UnreadBadge({ count, theme, muted }: { count: number; theme: ChatTheme; muted?: boolean }) {\n if (count <= 0) return null;\n return (\n <View style={[styles.badge, { backgroundColor: muted ? theme.textMuted : theme.unread }]}>\n <Text style={[styles.badgeText, { color: theme.isDark ? '#111b21' : '#ffffff' }]}>\n {count > 999 ? '999+' : count}\n </Text>\n </View>\n );\n}\n\n/** Clock while sending, one gray tick when the server has it, two blue ticks when read. */\nexport function MessageTicks({\n status,\n theme,\n mine = true,\n size = 16,\n}: {\n status: ChatMessageStatus;\n theme: ChatTheme;\n mine?: boolean;\n size?: number;\n}) {\n const gray = mine ? theme.metaMine : theme.metaTheirs;\n if (status === 'sending') {\n return (\n <MaterialCommunityIcons\n name=\"clock-outline\"\n size={size - 3}\n color={gray}\n accessibilityLabel=\"Sending\"\n style={styles.tick}\n />\n );\n }\n if (status === 'failed') {\n return (\n <MaterialCommunityIcons\n name=\"alert-circle\"\n size={size - 2}\n color={theme.danger}\n accessibilityLabel=\"Not sent\"\n style={styles.tick}\n />\n );\n }\n const read = status === 'read';\n const delivered = status === 'delivered';\n let label = 'Sent';\n if (read) label = 'Read';\n else if (delivered) label = 'Delivered';\n return (\n <MaterialCommunityIcons\n name={read || delivered ? 'check-all' : 'check'}\n size={size}\n color={read ? theme.readTick : gray}\n accessibilityLabel={label}\n style={styles.tick}\n />\n );\n}\n\nexport function ConversationRow({\n conversation,\n theme,\n now,\n onPress,\n onLongPress,\n}: {\n conversation: ChatConversation;\n theme: ChatTheme;\n now: number;\n onPress: () => void;\n /** The chat's options (pin, archive). */\n onLongPress?: () => void;\n}) {\n const [pressed, pressHandlers] = usePressed();\n const unread = conversation.unreadCount > 0;\n const muted = isMuted(conversation, now);\n const preview = conversation.subtitle.trim();\n const draft = (conversation.draft ?? '').trim();\n const author = !conversation.isDirect && conversation.lastAuthorName ? `${conversation.lastAuthorName}: ` : '';\n const at = conversation.lastMessageAt;\n let status: ChatMessageStatus = 'sent';\n if (at > 0 && conversation.readWatermark > 0 && at <= conversation.readWatermark) status = 'read';\n else if (at > 0 && conversation.deliveredWatermark > 0 && at <= conversation.deliveredWatermark) {\n status = 'delivered';\n }\n\n return (\n <Pressable\n onPress={onPress}\n onLongPress={onLongPress}\n delayLongPress={350}\n {...pressHandlers}\n accessibilityRole=\"button\"\n accessibilityHint={onLongPress ? 'Long press for options' : undefined}\n accessibilityLabel={[\n conversation.title,\n unread ? `${conversation.unreadCount} unread messages` : '',\n muted ? 'muted' : '',\n ]\n .filter(Boolean)\n .join(', ')}\n style={{ backgroundColor: pressed ? theme.surface : theme.bg, width: '100%' }}\n testID={`chat-conversation-${conversation.id}`}\n >\n {/* Inner wrapper: NativeWind can strip flexDirection from Pressable styles. */}\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n width: '100%',\n paddingLeft: 16,\n paddingRight: 16,\n paddingVertical: 10,\n minHeight: 76,\n }}\n >\n <Avatar\n name={conversation.title}\n uri={conversation.avatarUrl}\n theme={theme}\n size={52}\n variant=\"initials\"\n />\n <View style={{ flex: 1, marginLeft: 14, minWidth: 0, justifyContent: 'center' }}>\n <View style={{ flexDirection: 'row', alignItems: 'center', width: '100%' }}>\n <Text\n numberOfLines={1}\n style={{ flex: 1, fontSize: 17, fontWeight: '600', color: theme.text, marginRight: 8 }}\n >\n {conversation.title}\n </Text>\n <Text\n style={{\n fontSize: 13,\n color: unread && !muted ? theme.unread : theme.textMuted,\n fontWeight: unread ? '600' : '400',\n flexShrink: 0,\n }}\n >\n {relativeLabel(conversation.lastActivity, now)}\n </Text>\n </View>\n <View style={{ flexDirection: 'row', alignItems: 'flex-start', marginTop: 2, width: '100%' }}>\n {draft ? (\n // An unsent draft wins over the last message, as in WhatsApp.\n <Text\n numberOfLines={2}\n style={{\n flex: 1,\n fontSize: 15,\n lineHeight: 20,\n color: theme.textMuted,\n marginRight: 8,\n }}\n testID={`chat-conversation-draft-${conversation.id}`}\n >\n <Text style={{ color: theme.accent, fontWeight: '600' }}>Draft: </Text>\n {draft}\n </Text>\n ) : (\n <View style={{ flex: 1, flexDirection: 'row', alignItems: 'flex-start', marginRight: 8 }}>\n {conversation.lastMessageMine && preview && !conversation.lastMessageDeleted ? (\n <View style={{ marginTop: 2, marginRight: 2 }}>\n <MessageTicks status={status} theme={theme} mine={false} size={17} />\n </View>\n ) : null}\n {conversation.lastMessageDeleted ? (\n <MaterialCommunityIcons\n name=\"cancel\"\n size={15}\n color={theme.textMuted}\n style={{ marginTop: 2, marginRight: 4 }}\n />\n ) : null}\n <Text\n numberOfLines={2}\n style={{\n flex: 1,\n fontSize: 15,\n lineHeight: 20,\n color: theme.textMuted,\n fontStyle: conversation.lastMessageDeleted ? 'italic' : 'normal',\n }}\n >\n {author ? (\n <Text style={{ color: theme.textMuted, fontWeight: '500' }}>{author}</Text>\n ) : null}\n {preview}\n </Text>\n </View>\n )}\n <View style={{ flexDirection: 'row', alignItems: 'center', marginTop: 2 }}>\n {muted ? (\n <MaterialCommunityIcons\n name=\"bell-off\"\n size={16}\n color={theme.textMuted}\n accessibilityLabel=\"Muted\"\n style={{ marginLeft: 4 }}\n />\n ) : null}\n {conversation.pinnedAt > 0 ? (\n <MaterialCommunityIcons\n name=\"pin\"\n size={16}\n color={theme.textMuted}\n accessibilityLabel=\"Pinned\"\n style={styles.pinIcon}\n />\n ) : null}\n {conversation.unreadMentions > 0 ? (\n <View style={styles.mentionBadge} accessibilityLabel=\"mention badge\">\n <Text style={[styles.mentionBadgeText, { color: theme.accent }]}>@</Text>\n </View>\n ) : null}\n <UnreadBadge count={conversation.unreadCount} theme={theme} muted={muted} />\n </View>\n </View>\n </View>\n </View>\n </Pressable>\n );\n}\n\n/** The quoted message at the top of a reply, and above the composer while replying. */\nexport function ReplyQuote({\n reply,\n theme,\n viewerId,\n onPress,\n compact,\n}: {\n reply: ChatReplyRef;\n theme: ChatTheme;\n /** The quote of the viewer's own message is labelled \"You\", as WhatsApp does. */\n viewerId?: string | null;\n onPress?: () => void;\n /** Composer variant: no bubble-relative margins. */\n compact?: boolean;\n}) {\n const color = personColor(reply.authorId ?? reply.authorName, theme);\n const isYou = Boolean(viewerId && reply.authorId && reply.authorId === viewerId);\n return (\n <Pressable\n onPress={onPress}\n disabled={!onPress}\n accessibilityRole={onPress ? 'button' : undefined}\n accessibilityLabel={`Reply to ${isYou ? 'you' : reply.authorName}: ${reply.body}`}\n style={[\n styles.quote,\n compact ? null : styles.quoteInBubble,\n { backgroundColor: theme.quoteBg, flexDirection: 'row' },\n ]}\n >\n <View style={[styles.quoteBar, { backgroundColor: color }]} />\n <View style={styles.quoteBody}>\n <Text numberOfLines={1} style={[styles.quoteAuthor, { color }]}>\n {isYou ? 'You' : reply.authorName}\n </Text>\n <Text numberOfLines={2} style={[styles.quoteText, { color: theme.textMuted }]}>\n {reply.body || 'Message'}\n </Text>\n </View>\n </Pressable>\n );\n}\n\n/** The bubble's tail: a border triangle on the outer top corner of the first message in a run. */\nfunction BubbleTail({ mine, color }: { mine: boolean; color: string }) {\n return (\n <View\n pointerEvents=\"none\"\n style={\n mine\n ? [styles.tail, styles.tailMine, { borderTopColor: color }]\n : [styles.tail, styles.tailTheirs, { borderTopColor: color }]\n }\n />\n );\n}\n\n/**\n * A poll inside a message bubble: the question, each option with a selectable check, a result\n * bar and its vote count, and a \"N votes · View votes\" footer. Results are always visible (as in\n * WhatsApp). Tapping an option calls onVote with that option id; the hook reconciles the vote.\n */\nfunction PollView({\n poll,\n mine,\n theme,\n onVote,\n onViewVotes,\n}: {\n poll: ChatPoll;\n mine: boolean;\n theme: ChatTheme;\n onVote?: (optionId: string) => void;\n onViewVotes?: () => void;\n}) {\n const total = poll.options.reduce((n, o) => n + o.count, 0);\n const textColor = mine ? theme.bubbleMineText : theme.bubbleTheirsText;\n const metaColor = mine ? theme.metaMine : theme.metaTheirs;\n const trackBg = theme.isDark ? 'rgba(255,255,255,0.12)' : 'rgba(0,0,0,0.06)';\n return (\n <View style={styles.poll}>\n <View style={{ flexDirection: 'row', alignItems: 'center' }}>\n <MaterialCommunityIcons name=\"poll\" size={13} color={metaColor} />\n <Text style={[styles.pollKicker, { color: metaColor }]}>\n {poll.multiple ? 'Select one or more' : 'Select one'}\n </Text>\n </View>\n <Text style={[styles.pollQuestion, { color: textColor }]}>{poll.question}</Text>\n {poll.options.map((o) => {\n const pct = total > 0 ? Math.round((o.count / total) * 100) : 0;\n return (\n <Pressable\n key={o.id}\n onPress={onVote ? () => onVote(o.id) : undefined}\n disabled={!onVote}\n accessibilityRole=\"button\"\n accessibilityState={{ selected: o.mine }}\n accessibilityLabel={`${o.text}, ${o.count} ${o.count === 1 ? 'vote' : 'votes'}${\n o.mine ? ', selected' : ''\n }`}\n style={[styles.pollOption, { flexDirection: 'row' }]}\n >\n <View\n style={[\n styles.pollCheck,\n {\n borderColor: o.mine ? theme.accent : metaColor,\n backgroundColor: o.mine ? theme.accent : 'transparent',\n },\n ]}\n >\n {o.mine ? <MaterialCommunityIcons name=\"check\" size={12} color=\"#ffffff\" /> : null}\n </View>\n <View style={styles.pollOptionBody}>\n <View style={{ flexDirection: 'row', justifyContent: 'space-between' }}>\n <Text style={[styles.pollOptionText, { color: textColor }]} numberOfLines={4}>\n {o.text}\n </Text>\n <Text style={[styles.pollCount, { color: metaColor }]}>{o.count}</Text>\n </View>\n <View style={[styles.pollBarTrack, { backgroundColor: trackBg }]}>\n <View\n style={[styles.pollBarFill, { backgroundColor: theme.accent, width: `${pct}%` }]}\n />\n </View>\n </View>\n </Pressable>\n );\n })}\n <Pressable onPress={onViewVotes} disabled={!onViewVotes} accessibilityRole=\"button\" hitSlop={6}>\n <Text style={[styles.pollFooter, { color: theme.accent }]}>\n {`${total} ${total === 1 ? 'vote' : 'votes'}${onViewVotes ? ' · View votes' : ''}`}\n </Text>\n </Pressable>\n </View>\n );\n}\n\nexport function MessageBubble({\n message,\n theme,\n status,\n showAuthor,\n groupWithPrevious,\n viewerId,\n onRetry,\n onLongPress,\n onPressQuote,\n highlighted,\n fileBaseUrl,\n audio,\n onOpenImage,\n linkPreviews,\n onOpenLink,\n onVote,\n onViewVotes,\n}: {\n message: ChatMessage;\n theme: ChatTheme;\n /** Ticks for the viewer's own message; ignored for everyone else's. */\n status?: ChatMessageStatus;\n /** Tap a poll option (the id tapped); without it the poll is read-only. */\n onVote?: (optionId: string) => void;\n /** Open the \"who voted\" screen for this poll. */\n onViewVotes?: () => void;\n /** Group chats: the sender's name on the first message of their run. */\n showAuthor: boolean;\n viewerId?: string | null;\n /** Reads a link's card from the gateway; without it links are tappable but show no card. */\n linkPreviews?: LinkPreviewLoader;\n /** Opens a tapped link (in the app or a browser sheet - linkPreview.ts `openChatLink`). */\n onOpenLink?: (url: string) => void;\n /** Where attachments are served from (see ChatMediaSeam.fileBaseUrl). */\n fileBaseUrl?: string | null;\n /** Plays voice notes; without it they show but cannot play. */\n audio?: ChatAudioSeam;\n onOpenImage?: (url: string) => void;\n /** Same sender, message visually above (older): no tail, tighter spacing. */\n groupWithPrevious?: boolean;\n onRetry?: () => void;\n /** Long-press: where the bubble sits on screen, so the reaction overlay can anchor to it. */\n onLongPress?: (frame: { x: number; y: number; width: number; height: number }) => void;\n /** Tapping the quote jumps to the quoted message. */\n onPressQuote?: (messageId: string) => void;\n /** Briefly tinted after a jump from a quote, so the eye finds it. */\n highlighted?: boolean;\n}) {\n const bubbleRef = React.useRef<View>(null);\n const reactions = message.reactions ?? [];\n const mine = message.isMine;\n const failed = message.sendState === 'failed';\n const body = message.body.trim();\n const hasMentions = Boolean(message.mentions?.length);\n const parts = React.useMemo(() => splitChatParts(body, hasMentions), [body, hasMentions]);\n const cardUrl = React.useMemo(() => (message.isDeleted ? null : firstLink(body)), [body, message.isDeleted]);\n const preview = useLinkPreview(cardUrl, linkPreviews);\n // A message that is only a link shows as its card; the raw URL stays when there is no card.\n const onlyLink = Boolean(preview) && !message.attachments.length && isOnlyALink(body);\n const textColor = mine ? theme.bubbleMineText : theme.bubbleTheirsText;\n const metaColor = mine ? theme.metaMine : theme.metaTheirs;\n const fill = mine ? theme.bubbleMine : theme.bubbleTheirs;\n const firstInRun = !groupWithPrevious;\n const time = timeLabel(message.createdAt);\n const meta = `${message.isEdited ? 'Edited ' : ''}${time}`;\n const showTicks = mine && Boolean(status);\n const attachmentOnly = message.attachments.length > 0 && !body && !onlyLink;\n // A photo with no caption: the time sits on the photo in a dark pill, as WhatsApp does.\n // A voice note or file gets its own line for the time instead.\n const metaOnMedia = attachmentOnly && message.attachments.every((a) => a.kind === 'image');\n\n if (message.isDeleted) {\n return (\n <View\n style={[styles.bubbleWrap, mine ? styles.alignEnd : styles.alignStart, firstInRun && styles.runStart]}\n >\n <View style={[styles.bubble, { backgroundColor: fill, flexDirection: 'row', alignItems: 'center' }]}>\n <MaterialCommunityIcons name=\"cancel\" size={15} color={metaColor} />\n <Text style={[styles.deletedText, { color: metaColor }]}>\n {mine ? 'You deleted this message' : 'This message was deleted'}\n </Text>\n </View>\n </View>\n );\n }\n\n return (\n <View style={[styles.bubbleWrap, mine ? styles.alignEnd : styles.alignStart, firstInRun && styles.runStart]}>\n <Pressable\n onLongPress={\n onLongPress\n ? () =>\n bubbleRef.current?.measureInWindow((x, y, width, height) =>\n onLongPress({ x, y, width, height }),\n )\n : undefined\n }\n delayLongPress={280}\n disabled={!onLongPress}\n accessibilityHint={onLongPress ? 'Long press for reactions and options' : undefined}\n style={[styles.bubblePress, reactions.length ? styles.bubbleReacted : null]}\n >\n <View\n ref={bubbleRef}\n collapsable={false}\n style={[\n styles.bubble,\n firstInRun && (mine ? styles.cornerMine : styles.cornerTheirs),\n { backgroundColor: fill },\n highlighted && { opacity: 0.75 },\n failed && { borderWidth: 1, borderColor: theme.danger },\n message.attachments.length || onlyLink ? styles.bubbleWithMedia : null,\n ]}\n >\n {firstInRun ? <BubbleTail mine={mine} color={fill} /> : null}\n {message.forwarded ? (\n <View style={[styles.forwarded, { flexDirection: 'row', alignItems: 'center' }]}>\n <MaterialCommunityIcons name=\"share\" size={14} color={metaColor} />\n <Text style={[styles.forwardedText, { color: metaColor }]}>Forwarded</Text>\n </View>\n ) : null}\n {showAuthor && !mine ? (\n <Text\n numberOfLines={1}\n style={[\n styles.author,\n message.attachments.length || onlyLink ? styles.authorOverMedia : null,\n { color: personColor(message.authorId ?? message.authorName, theme) },\n ]}\n >\n {message.authorName}\n </Text>\n ) : null}\n {message.replyTo ? (\n <ReplyQuote\n reply={message.replyTo}\n theme={theme}\n viewerId={viewerId}\n onPress={onPressQuote ? () => onPressQuote(message.replyTo!.id) : undefined}\n />\n ) : null}\n {message.attachments.length ? (\n <MessageAttachments\n attachments={message.attachments}\n mine={mine}\n theme={theme}\n fileBaseUrl={fileBaseUrl}\n audio={audio}\n uploading={message.sendState === 'sending'}\n onOpenImage={onOpenImage}\n />\n ) : null}\n {message.poll ? (\n <PollView\n poll={message.poll}\n mine={mine}\n theme={theme}\n onVote={onVote}\n onViewVotes={onViewVotes}\n />\n ) : null}\n {body && !onlyLink && !message.poll ? (\n <Text\n style={[\n styles.bubbleText,\n { color: textColor },\n message.attachments.length ? styles.bubbleCaption : null,\n ]}\n >\n {parts.map((part, i) => {\n if (part.kind === 'link') {\n return (\n <Text\n key={i}\n style={[styles.linkText, { color: theme.isDark ? '#53bdeb' : '#027eb5' }]}\n onPress={onOpenLink ? () => onOpenLink(part.url) : undefined}\n accessibilityRole=\"link\"\n >\n {part.text}\n </Text>\n );\n }\n if (part.kind === 'mention') {\n return (\n <Text key={i} style={[styles.mentionText, { color: theme.accent }]}>\n {part.text}\n </Text>\n );\n }\n return part.text;\n })}\n {/* Reserves room on the last line for the time + ticks drawn over the corner. */}\n <Text\n style={styles.metaSpacer}\n >{`\\u2002\\u2002${message.starred ? '\\u2003' : ''}${meta}${showTicks ? '\\u2003\\u2002' : ''}`}</Text>\n </Text>\n ) : null}\n {preview ? (\n <View style={onlyLink ? null : styles.cardBelowText}>\n <LinkPreviewCard preview={preview} theme={theme} onOpen={onOpenLink} />\n </View>\n ) : null}\n {onlyLink || (attachmentOnly && !metaOnMedia) ? <View style={styles.metaRowSpace} /> : null}\n <View\n style={[\n styles.meta,\n metaOnMedia ? styles.metaOnMedia : null,\n { flexDirection: 'row', alignItems: 'center' },\n ]}\n pointerEvents=\"none\"\n >\n {message.kept ? (\n <MaterialCommunityIcons\n name=\"bookmark\"\n size={11}\n color={metaOnMedia ? '#ffffff' : metaColor}\n accessibilityLabel=\"Kept\"\n style={styles.metaStar}\n />\n ) : null}\n {message.starred ? (\n <MaterialCommunityIcons\n name=\"star\"\n size={11}\n color={metaOnMedia ? '#ffffff' : metaColor}\n accessibilityLabel=\"Starred\"\n style={styles.metaStar}\n />\n ) : null}\n <Text style={[styles.metaText, { color: metaOnMedia ? '#ffffff' : metaColor }]}>{meta}</Text>\n {showTicks && status ? (\n <MessageTicks\n status={status}\n theme={metaOnMedia ? { ...theme, metaMine: '#ffffff' } : theme}\n />\n ) : null}\n </View>\n </View>\n {reactions.length ? (\n <View\n style={[\n styles.reactionPill,\n mine ? styles.reactionPillMine : styles.reactionPillTheirs,\n {\n backgroundColor: theme.isDark ? theme.surface : theme.bg,\n borderColor: theme.threadBg,\n flexDirection: 'row',\n },\n ]}\n accessibilityLabel={reactions.map((r) => `${r.reaction} ${r.count}`).join(', ')}\n >\n {reactions.map((r) => (\n <Text key={r.reaction} style={styles.reactionEmoji}>\n {r.reaction}\n </Text>\n ))}\n {reactions.reduce((n, r) => n + r.count, 0) > 1 ? (\n <Text style={[styles.reactionCount, { color: theme.textMuted }]}>\n {reactions.reduce((n, r) => n + r.count, 0)}\n </Text>\n ) : null}\n </View>\n ) : null}\n </Pressable>\n {failed ? (\n <Pressable\n onPress={onRetry}\n accessibilityRole=\"button\"\n hitSlop={8}\n style={[styles.retry, { flexDirection: 'row', alignItems: 'center' }]}\n >\n <MaterialCommunityIcons name=\"refresh\" size={13} color={theme.danger} />\n <Text style={[styles.retryText, { color: theme.danger }]}>Not sent. Tap to try again.</Text>\n </Pressable>\n ) : null}\n </View>\n );\n}\n\n/** WhatsApp's centered date chip (\"Today\", \"Yesterday\", \"Oct 12\"). */\nexport function DaySeparator({ label, theme }: { label: string; theme: ChatTheme }) {\n if (!label) return null;\n return (\n <View style={[styles.daySep, { flexDirection: 'row', justifyContent: 'center' }]}>\n <View style={[styles.dayChip, { backgroundColor: theme.chipBg }]}>\n <Text style={[styles.dayText, { color: theme.chipText }]}>{label}</Text>\n </View>\n </View>\n );\n}\n\n/** A centered group notice (\"Alex added Sam\", a rename, an admin change). Not a bubble. */\nexport function SystemRow({ text, theme }: { text: string; theme: ChatTheme }) {\n if (!text) return null;\n return (\n <View style={[styles.daySep, { flexDirection: 'row', justifyContent: 'center' }]}>\n <View style={[styles.systemChip, { backgroundColor: theme.chipBg }]}>\n <Text style={[styles.systemText, { color: theme.chipText }]}>{text}</Text>\n </View>\n </View>\n );\n}\n\n/** The band above the first message that arrived while the chat was closed. */\nexport function UnreadDivider({ count, theme }: { count: number; theme: ChatTheme }) {\n if (count <= 0) return null;\n return (\n <View\n style={[\n styles.unreadBand,\n { backgroundColor: theme.isDark ? 'rgba(32, 44, 51, 0.85)' : 'rgba(255, 255, 255, 0.7)' },\n ]}\n testID=\"chat-unread-divider\"\n >\n <Text style={[styles.unreadBandText, { color: theme.chipText }]}>\n {count === 1 ? '1 unread message' : `${count} unread messages`}\n </Text>\n </View>\n );\n}\n\nexport function InlineBanner({\n message,\n theme,\n onDismiss,\n}: {\n message: string | null;\n theme: ChatTheme;\n onDismiss?: () => void;\n}) {\n if (!message) return null;\n return (\n <View style={[styles.banner, { backgroundColor: theme.danger, flexDirection: 'row', alignItems: 'center' }]}>\n <Text style={styles.bannerText} numberOfLines={2}>\n {message}\n </Text>\n {onDismiss ? (\n <Pressable onPress={onDismiss} hitSlop={8} accessibilityRole=\"button\" accessibilityLabel=\"Dismiss\">\n <MaterialCommunityIcons name=\"close\" size={16} color=\"#fff\" />\n </Pressable>\n ) : null}\n </View>\n );\n}\n\nexport function ConnectionBanner({ state, theme }: { state: string; theme: ChatTheme }) {\n if (state === 'connected') return null;\n const offline = state === 'offline';\n return (\n <View\n style={[\n styles.connBanner,\n { backgroundColor: offline ? theme.danger : theme.textMuted, flexDirection: 'row' },\n ]}\n >\n {offline ? null : <ActivityIndicator size=\"small\" color=\"#fff\" style={{ marginRight: 8 }} />}\n <Text style={styles.connText}>{offline ? 'Waiting for network' : 'Connecting…'}</Text>\n </View>\n );\n}\n\nexport function EmptyState({\n icon,\n title,\n detail,\n theme,\n action,\n}: {\n icon: React.ComponentProps<typeof MaterialCommunityIcons>['name'];\n title: string;\n detail: string;\n theme: ChatTheme;\n action?: { label: string; onPress: () => void };\n}) {\n return (\n <View style={styles.empty}>\n <View style={[styles.emptyIcon, { backgroundColor: theme.surface }]}>\n <MaterialCommunityIcons name={icon} size={34} color={theme.accent} />\n </View>\n <Text style={[styles.emptyTitle, { color: theme.text }]}>{title}</Text>\n <Text style={[styles.emptyDetail, { color: theme.textMuted }]}>{detail}</Text>\n {action ? (\n <Pressable\n onPress={action.onPress}\n accessibilityRole=\"button\"\n style={[styles.emptyAction, { backgroundColor: theme.accent }]}\n >\n <Text style={[styles.emptyActionText, { color: theme.onAccent }]}>{action.label}</Text>\n </Pressable>\n ) : null}\n </View>\n );\n}\n\nconst TAIL_W = 8;\nconst TAIL_H = 13;\n\nconst styles = StyleSheet.create({\n badge: {\n minWidth: 20,\n height: 20,\n borderRadius: 10,\n paddingHorizontal: 6,\n alignItems: 'center',\n justifyContent: 'center',\n marginLeft: 6,\n },\n badgeText: { fontSize: 12, fontWeight: '700' },\n tick: { marginLeft: 3 },\n pinIcon: { marginLeft: 4, transform: [{ rotate: '45deg' }] },\n mentionBadge: { marginLeft: 6, marginTop: 2 },\n mentionBadgeText: { fontSize: 15, fontWeight: '700' },\n forwarded: { marginBottom: 2 },\n forwardedText: { fontSize: 13, fontStyle: 'italic', marginLeft: 3 },\n metaStar: { marginRight: 3 },\n\n bubbleWrap: { paddingHorizontal: 16, marginTop: 2, maxWidth: '100%' },\n /** A new sender's run starts a little lower, as in WhatsApp. */\n runStart: { marginTop: 8 },\n alignEnd: { alignItems: 'flex-end' },\n alignStart: { alignItems: 'flex-start' },\n bubblePress: { maxWidth: '82%' },\n bubble: {\n maxWidth: '100%',\n minWidth: 64,\n borderRadius: 8,\n paddingHorizontal: 8,\n paddingTop: 6,\n paddingBottom: 7,\n shadowColor: '#0b141a',\n shadowOpacity: 0.13,\n shadowRadius: 0.5,\n shadowOffset: { width: 0, height: 1 },\n elevation: 1,\n },\n /** The tail replaces the rounded outer top corner. */\n cornerMine: { borderTopRightRadius: 0 },\n cornerTheirs: { borderTopLeftRadius: 0 },\n tail: {\n position: 'absolute',\n top: 0,\n width: 0,\n height: 0,\n borderTopWidth: TAIL_H,\n borderStyle: 'solid',\n },\n tailMine: { right: -TAIL_W, borderRightWidth: TAIL_W, borderRightColor: 'transparent' },\n tailTheirs: { left: -TAIL_W, borderLeftWidth: TAIL_W, borderLeftColor: 'transparent' },\n /** Room under the bubble for the reaction pill. */\n bubbleReacted: { marginBottom: 16 },\n reactionPill: {\n position: 'absolute',\n bottom: -18,\n alignItems: 'center',\n paddingHorizontal: 6,\n height: 26,\n borderRadius: 13,\n borderWidth: 2,\n },\n reactionPillMine: { right: 10 },\n reactionPillTheirs: { left: 10 },\n reactionEmoji: { fontSize: 14, marginHorizontal: 1 },\n reactionCount: { fontSize: 12, fontWeight: '600', marginLeft: 3, marginRight: 1 },\n poll: { paddingHorizontal: 6, paddingTop: 4, paddingBottom: 2, minWidth: 220 },\n pollKicker: { fontSize: 12, marginLeft: 4, fontWeight: '500' },\n pollQuestion: { fontSize: 16, fontWeight: '600', lineHeight: 21, marginTop: 4, marginBottom: 8 },\n pollOption: { alignItems: 'flex-start', marginBottom: 10 },\n pollCheck: {\n width: 20,\n height: 20,\n borderRadius: 10,\n borderWidth: 1.5,\n alignItems: 'center',\n justifyContent: 'center',\n marginRight: 10,\n marginTop: 1,\n },\n pollOptionBody: { flex: 1 },\n pollOptionText: { fontSize: 15, lineHeight: 20, flex: 1, marginRight: 8 },\n pollCount: { fontSize: 13, fontWeight: '600' },\n pollBarTrack: { height: 4, borderRadius: 2, marginTop: 5, overflow: 'hidden' },\n pollBarFill: { height: 4, borderRadius: 2 },\n pollFooter: { fontSize: 13, fontWeight: '600', marginTop: 2, marginBottom: 2 },\n deletedText: { fontSize: 15, fontStyle: 'italic', marginLeft: 6, marginRight: 4 },\n author: { fontSize: 13, fontWeight: '600', marginBottom: 2 },\n authorOverMedia: { marginHorizontal: 4, marginTop: 2 },\n bubbleText: { fontSize: 16, lineHeight: 21 },\n linkText: { textDecorationLine: 'underline' },\n mentionText: { fontWeight: '600' },\n /** Invisible copy of the meta, sized like it, so text never runs under the time. */\n metaSpacer: { fontSize: 11, color: 'transparent' },\n meta: { position: 'absolute', right: 7, bottom: 4 },\n metaOnMedia: {\n right: 10,\n bottom: 10,\n backgroundColor: 'rgba(11, 20, 26, 0.45)',\n borderRadius: 10,\n paddingHorizontal: 6,\n paddingVertical: 1,\n },\n metaText: { fontSize: 11 },\n metaRowSpace: { height: 16 },\n /** A card under the text keeps the bubble's padding and sits a line below it. */\n cardBelowText: { marginTop: 8, marginBottom: 18 },\n /** Photos sit close to the bubble edge. */\n bubbleWithMedia: { paddingHorizontal: 3, paddingTop: 3, paddingBottom: 3 },\n bubbleCaption: { paddingHorizontal: 5, paddingTop: 4, paddingBottom: 2 },\n retry: { marginTop: 3, marginRight: 4 },\n retryText: { fontSize: 12, marginLeft: 4 },\n\n quote: { borderRadius: 6, overflow: 'hidden', minHeight: 44 },\n quoteInBubble: { marginBottom: 4 },\n quoteBar: { width: 4 },\n quoteBody: { flex: 1, paddingHorizontal: 8, paddingVertical: 5 },\n quoteAuthor: { fontSize: 13, fontWeight: '600' },\n quoteText: { fontSize: 13, lineHeight: 17, marginTop: 1 },\n\n daySep: { marginVertical: 10 },\n dayChip: {\n paddingHorizontal: 12,\n paddingVertical: 5,\n borderRadius: 8,\n shadowColor: '#0b141a',\n shadowOpacity: 0.1,\n shadowRadius: 0.5,\n shadowOffset: { width: 0, height: 1 },\n elevation: 1,\n },\n dayText: { fontSize: 12.5, fontWeight: '500' },\n systemChip: {\n maxWidth: '84%',\n paddingHorizontal: 12,\n paddingVertical: 6,\n borderRadius: 8,\n shadowColor: '#0b141a',\n shadowOpacity: 0.1,\n shadowRadius: 0.5,\n shadowOffset: { width: 0, height: 1 },\n elevation: 1,\n },\n systemText: { fontSize: 13, lineHeight: 18, textAlign: 'center' },\n unreadBand: { marginVertical: 10, paddingVertical: 6, alignItems: 'center' },\n unreadBandText: { fontSize: 12.5, fontWeight: '500' },\n\n banner: { paddingHorizontal: 14, paddingVertical: 8 },\n bannerText: { flex: 1, color: '#fff', fontSize: 12, fontWeight: '500' },\n connBanner: { paddingHorizontal: 14, paddingVertical: 6, alignItems: 'center', justifyContent: 'center' },\n connText: { color: '#fff', fontSize: 12, fontWeight: '500' },\n\n empty: { flex: 1, alignItems: 'center', justifyContent: 'center', padding: 32 },\n emptyIcon: {\n width: 72,\n height: 72,\n borderRadius: 36,\n alignItems: 'center',\n justifyContent: 'center',\n marginBottom: 12,\n },\n emptyTitle: { fontSize: 20, fontWeight: '700', marginTop: 4, textAlign: 'center' },\n emptyDetail: { fontSize: 14, textAlign: 'center', lineHeight: 20, marginTop: 8 },\n emptyAction: { marginTop: 18, paddingHorizontal: 22, paddingVertical: 12, borderRadius: 24 },\n emptyActionText: { fontSize: 15, fontWeight: '700' },\n});\n"],"names":["_a"],"mappings":"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"}
|