@poolse/react-native 0.1.1

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/theme/default.ts","../src/theme/PoolseTheme.tsx","../src/primitives/icons-data.ts","../src/primitives/PoolseIcon.tsx","../src/AttachmentPicker.tsx","../src/primitives/userColor.ts","../src/primitives/Avatar.tsx","../src/UploadQueueStrip.tsx","../src/MessageComposer.tsx","../src/MentionInput.tsx","../src/MessageList.tsx","../src/EditableMessageBubble.tsx","../src/MessageActions.tsx","../src/AttachmentPreview.tsx","../src/MessageBubble.tsx","../src/MessageRow.tsx","../src/ThreadView.tsx","../src/UserName.tsx","../src/TypingIndicator.tsx","../src/ConversationView.tsx","../src/ConversationList.tsx","../src/MemberList.tsx","../src/Reactions.tsx","../src/primitives/PoolseLogo.tsx","../src/primitives/index.ts","../src/lifecycle/useAppStateLifecycle.tsx"],"names":["jsx","mod","res","jsxs","View","styles","Text","StyleSheet","useAttachmentUpload","Pressable","MessageComposer","useState","useMemo","Modal","FlatList","TextInput","Image","radii","useUser","useRef","useMe","useMembers","useCallback","Fragment","ActivityIndicator","useEffect"],"mappings":"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","file":"index.js","sourcesContent":["import type { PoolseRNTheme, ThemeShadows } from './types.js';\n\n// Values mirror the --poolse-* CSS variables in @poolse/react-ui's\n// styles.css :root block. If the brand changes there, change here.\n\nconst lightColors = {\n brand: '#ff5436',\n brandStrong: '#d63415',\n brandSoft: '#ffe9e2',\n onBrand: '#fbf7f4',\n paper: '#fbf7f4',\n surface: '#ffffff',\n surface2: '#f4eee9',\n ink: '#1c1a19',\n ink2: '#6b6560',\n ink3: '#9a938c',\n border: '#eae3dc',\n presence: '#16c172',\n success: '#16a34a',\n warning: '#e08c16',\n error: '#e5484d',\n info: '#3b82f6',\n selfBubble: '#ff5436',\n selfBubbleText: '#fbf7f4',\n otherBubble: '#ffffff',\n otherBubbleText: '#1c1a19',\n unreadPill: '#ff5436',\n unreadPillText: '#fbf7f4',\n};\n\nconst darkColors = {\n brand: '#ff6a4d',\n brandStrong: '#ff8366',\n brandSoft: '#2c1712',\n onBrand: '#fbf7f4',\n paper: '#0e0d10',\n surface: '#16141a',\n surface2: '#201d25',\n ink: '#f6f2ee',\n ink2: '#a8a29b',\n ink3: '#766f68',\n border: '#2a2630',\n presence: '#22d37a',\n success: '#34d399',\n warning: '#fbbf24',\n error: '#f87171',\n info: '#60a5fa',\n selfBubble: '#ff6a4d',\n selfBubbleText: '#fbf7f4',\n otherBubble: '#16141a',\n otherBubbleText: '#f6f2ee',\n unreadPill: '#ff6a4d',\n unreadPillText: '#fbf7f4',\n};\n\nconst type = {\n // RN can't use Bricolage/Hanken/JetBrains without expo-font setup,\n // so we default to the platform sans-serif. Devs override via the\n // theme prop if they ship custom fonts.\n fontDisplay: 'System',\n fontBody: 'System',\n fontMono: 'Menlo',\n bodySize: 15,\n lineHeight: 22,\n weightRegular: '400' as const,\n weightMedium: '500' as const,\n weightSemibold: '600' as const,\n weightBold: '700' as const,\n};\n\nconst radii = {\n sm: 8,\n md: 12,\n lg: 16,\n xl: 24,\n pill: 999,\n bubble: 16,\n};\n\nconst spacing = {\n xs: 4,\n sm: 8,\n md: 12,\n lg: 16,\n xl: 24,\n};\n\nconst lightShadows: ThemeShadows = {\n sm: {\n shadowColor: '#1c1a19',\n shadowOpacity: 0.08,\n shadowOffset: { width: 0, height: 1 },\n shadowRadius: 2,\n elevation: 1,\n },\n md: {\n shadowColor: '#1c1a19',\n shadowOpacity: 0.18,\n shadowOffset: { width: 0, height: 10 },\n shadowRadius: 30,\n elevation: 6,\n },\n lg: {\n shadowColor: '#1c1a19',\n shadowOpacity: 0.28,\n shadowOffset: { width: 0, height: 24 },\n shadowRadius: 60,\n elevation: 12,\n },\n};\n\nconst darkShadows: ThemeShadows = {\n sm: {\n shadowColor: '#000000',\n shadowOpacity: 0.4,\n shadowOffset: { width: 0, height: 1 },\n shadowRadius: 2,\n elevation: 1,\n },\n md: {\n shadowColor: '#000000',\n shadowOpacity: 0.55,\n shadowOffset: { width: 0, height: 10 },\n shadowRadius: 30,\n elevation: 6,\n },\n lg: {\n shadowColor: '#000000',\n shadowOpacity: 0.7,\n shadowOffset: { width: 0, height: 24 },\n shadowRadius: 60,\n elevation: 12,\n },\n};\n\nexport const defaultLightTheme: PoolseRNTheme = {\n mode: 'light',\n colors: lightColors,\n type,\n radii,\n spacing,\n shadows: lightShadows,\n};\n\nexport const defaultDarkTheme: PoolseRNTheme = {\n mode: 'dark',\n colors: darkColors,\n type,\n radii,\n spacing,\n shadows: darkShadows,\n};\n","import { createContext, useContext, useMemo, type ReactNode } from 'react';\n\nimport { defaultDarkTheme, defaultLightTheme } from './default.js';\nimport type { PoolseRNTheme, PoolseRNThemeOverrides, ThemeMode } from './types.js';\n\nconst ThemeContext = createContext<PoolseRNTheme | null>(null);\n\nexport interface PoolseThemeProps {\n /**\n * Light or dark base palette. Overrides are merged on top of the\n * chosen base. Defaults to `light` if omitted.\n */\n mode?: ThemeMode;\n /**\n * Partial overrides — only the fields you set replace the defaults.\n * Nested groups (`colors`, `type`, `radii`, `spacing`, `shadows`)\n * deep-merge, so `{ colors: { brand: '#000' } }` keeps every other\n * color from the base theme.\n */\n theme?: PoolseRNThemeOverrides;\n children: ReactNode;\n}\n\nexport function PoolseTheme({ mode, theme, children }: PoolseThemeProps) {\n const resolved = useMemo(() => {\n const base = (mode ?? theme?.mode) === 'dark' ? defaultDarkTheme : defaultLightTheme;\n if (!theme) return base;\n return {\n mode: theme.mode ?? base.mode,\n colors: { ...base.colors, ...theme.colors },\n type: { ...base.type, ...theme.type },\n radii: { ...base.radii, ...theme.radii },\n spacing: { ...base.spacing, ...theme.spacing },\n shadows: {\n sm: { ...base.shadows.sm, ...theme.shadows?.sm },\n md: { ...base.shadows.md, ...theme.shadows?.md },\n lg: { ...base.shadows.lg, ...theme.shadows?.lg },\n },\n } satisfies PoolseRNTheme;\n }, [mode, theme]);\n\n return <ThemeContext.Provider value={resolved}>{children}</ThemeContext.Provider>;\n}\n\n/**\n * Read the active poolse theme. Falls back to `defaultLightTheme`\n * if no `<PoolseTheme>` ancestor is mounted, so components render\n * sensibly even without explicit wiring.\n */\nexport function usePoolseTheme(): PoolseRNTheme {\n return useContext(ThemeContext) ?? defaultLightTheme;\n}\n","// AUTO-GENERATED from poolse-brand-kit/icons/. Do not edit by hand.\n// Run scripts/build-icons.py from the brand kit if the source SVGs change.\n\nexport interface IconDef {\n vb: string;\n d: string;\n}\n\nexport const ICONS = {\n attachment: {\n vb: '0 0 24 24',\n d: '<path d=\"M20 11.6 11.4 20.2a5 5 0 0 1-7.1-7.1l8.7-8.7a3.3 3.3 0 0 1 4.7 4.7l-8.6 8.6a1.65 1.65 0 0 1-2.36-2.32l7.86-7.86\"/>',\n },\n bell: {\n vb: '0 0 24 24',\n d: '<path d=\"M6 9.2a6 6 0 0 1 12 0c0 4.8 1.4 6.3 1.9 6.8H4.1C4.6 15.5 6 14 6 9.2Z\"/><path d=\"M9.6 19.8a2.5 2.5 0 0 0 4.8 0\"/>',\n },\n 'check-double': {\n vb: '0 0 24 24',\n d: '<path d=\"M2.5 12.8 6.9 17 15.4 7.6\"/><path d=\"M11.4 16.4 12.3 17.2 21 7.6\"/>',\n },\n check: {\n vb: '0 0 24 24',\n d: '<path d=\"M4.5 12.6 9.4 17.4 19.5 6.6\"/>',\n },\n 'chevron-down': {\n vb: '0 0 24 24',\n d: '<path d=\"M5 9 12 16 19 9\"/>',\n },\n 'chevron-right': {\n vb: '0 0 24 24',\n d: '<path d=\"M9 5 16 12 9 19\"/>',\n },\n close: {\n vb: '0 0 24 24',\n d: '<path d=\"M6 6 18 18M18 6 6 18\"/>',\n },\n code: {\n vb: '0 0 24 24',\n d: '<path d=\"M9 7.5 4.5 12 9 16.5\"/><path d=\"M15 7.5 19.5 12 15 16.5\"/><path d=\"M13.2 5 10.8 19\"/>',\n },\n compose: {\n vb: '0 0 24 24',\n d: '<path d=\"M11.5 4H6a2.5 2.5 0 0 0-2.5 2.5V18A2.5 2.5 0 0 0 6 20.5h11.5A2.5 2.5 0 0 0 20 18v-5.5\"/><path d=\"M18.4 2.7a2.05 2.05 0 0 1 2.9 2.9L12 15l-4 1 1-4 9.4-9.3Z\"/>',\n },\n copy: {\n vb: '0 0 24 24',\n d: '<rect x=\"8.4\" y=\"8.4\" width=\"11.2\" height=\"11.2\" rx=\"2.3\"/><path d=\"M5.6 15.6H5A1.6 1.6 0 0 1 3.4 14V5A1.6 1.6 0 0 1 5 3.4h9A1.6 1.6 0 0 1 15.6 5v.6\"/>',\n },\n download: {\n vb: '0 0 24 24',\n d: '<path d=\"M12 3.2v11.6\"/><path d=\"M7.4 10.2 12 14.8 16.6 10.2\"/><path d=\"M4 19.6h16\"/>',\n },\n edit: {\n vb: '0 0 24 24',\n d: '<path d=\"M16.7 3.3a2.1 2.1 0 0 1 3 3L7 19l-4 1 1-4 12.7-12.7Z\"/>',\n },\n emoji: {\n vb: '0 0 24 24',\n d: '<circle cx=\"12\" cy=\"12\" r=\"8.6\"/><circle cx=\"9\" cy=\"10\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"15\" cy=\"10\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><path d=\"M8.4 14.2a4.6 4.6 0 0 0 7.2 0\"/>',\n },\n heart: {\n vb: '0 0 24 24',\n d: '<path d=\"M12 20.3 4.4 12.9a4.6 4.6 0 1 1 6.5-6.5l1.1 1.1 1.1-1.1a4.6 4.6 0 1 1 6.5 6.5L12 20.3Z\"/>',\n },\n image: {\n vb: '0 0 24 24',\n d: '<rect x=\"3.2\" y=\"4.2\" width=\"17.6\" height=\"15.6\" rx=\"2.6\"/><circle cx=\"8.6\" cy=\"9.4\" r=\"1.7\" fill=\"currentColor\" stroke=\"none\"/><path d=\"M20.8 15.8 16 11 6 19.8\"/>',\n },\n info: {\n vb: '0 0 24 24',\n d: '<circle cx=\"12\" cy=\"12\" r=\"8.6\"/><path d=\"M12 11v5.2\"/><circle cx=\"12\" cy=\"7.7\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/>',\n },\n key: {\n vb: '0 0 24 24',\n d: '<circle cx=\"8\" cy=\"8\" r=\"4.4\"/><path d=\"M11.1 11.1 20 20\"/><path d=\"M16.6 16.6 18.6 14.6M14 14l2-2\"/>',\n },\n link: {\n vb: '0 0 24 24',\n d: '<path d=\"M10.2 13.8a3.5 3.5 0 0 0 5 0l3-3a3.5 3.5 0 0 0-5-5l-1.2 1.2\"/><path d=\"M13.8 10.2a3.5 3.5 0 0 0-5 0l-3 3a3.5 3.5 0 0 0 5 5l1.2-1.2\"/>',\n },\n lock: {\n vb: '0 0 24 24',\n d: '<rect x=\"4.6\" y=\"10.4\" width=\"14.8\" height=\"9.8\" rx=\"2.2\"/><path d=\"M8 10.4V7a4 4 0 0 1 8 0v3.4\"/>',\n },\n message: {\n vb: '0 0 24 24',\n d: '<path d=\"M20.5 11.4c0 4.5-3.9 8.1-8.5 8.1a9 9 0 0 1-3.7-.78L3.5 20.5l1.8-4.6A7.9 7.9 0 0 1 3.5 11.4C3.5 6.9 7.4 3.3 12 3.3s8.5 3.6 8.5 8.1Z\"/>',\n },\n messages: {\n vb: '0 0 24 24',\n d: '<path d=\"M14 9.2a4.7 4.7 0 0 1-4.7 4.7H6.8L3.5 16.4v-2.9A4.7 4.7 0 0 1 6.8 4.5h2.5A4.7 4.7 0 0 1 14 9.2Z\"/><path d=\"M9.4 13.6A4.7 4.7 0 0 0 13.6 16h3.6l3.3 2.5v-2.9a4.7 4.7 0 0 0-2.4-4.1\"/>',\n },\n mic: {\n vb: '0 0 24 24',\n d: '<rect x=\"9\" y=\"2.6\" width=\"6\" height=\"11.2\" rx=\"3\"/><path d=\"M5.6 11.2a6.4 6.4 0 0 0 12.8 0\"/><path d=\"M12 17.6v3.4\"/><path d=\"M8.6 21h6.8\"/>',\n },\n 'more-h': {\n vb: '0 0 24 24',\n d: '<circle cx=\"5.4\" cy=\"12\" r=\"1.6\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"12\" cy=\"12\" r=\"1.6\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"18.6\" cy=\"12\" r=\"1.6\" fill=\"currentColor\" stroke=\"none\"/>',\n },\n 'more-v': {\n vb: '0 0 24 24',\n d: '<circle cx=\"12\" cy=\"5.4\" r=\"1.6\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"12\" cy=\"12\" r=\"1.6\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"12\" cy=\"18.6\" r=\"1.6\" fill=\"currentColor\" stroke=\"none\"/>',\n },\n pin: {\n vb: '0 0 24 24',\n d: '<path d=\"M9 3.4h6v1.8l-1 5.6 3 3.2H7l3-3.2-1-5.6V3.4Z\"/><path d=\"M12 17v3.6\"/>',\n },\n plus: {\n vb: '0 0 24 24',\n d: '<path d=\"M12 5v14M5 12h14\"/>',\n },\n presence: {\n vb: '0 0 24 24',\n d: '<circle cx=\"12\" cy=\"12\" r=\"9\" fill=\"currentColor\" opacity=\"0.18\" stroke=\"none\"/><circle cx=\"12\" cy=\"12\" r=\"5\" fill=\"currentColor\" stroke=\"none\"/>',\n },\n pulse: {\n vb: '0 0 24 24',\n d: '<path d=\"M3 13h4.6l2.2-4.6 3.4 9 2.2-4.4H21\"/>',\n },\n reply: {\n vb: '0 0 24 24',\n d: '<path d=\"M9 7 4 12l5 5\"/><path d=\"M4 12h9.5a6.5 6.5 0 0 1 6.5 6.5V20\"/>',\n },\n search: {\n vb: '0 0 24 24',\n d: '<circle cx=\"11\" cy=\"11\" r=\"6.8\"/><path d=\"M20.8 20.8 16 16\"/>',\n },\n 'send-fill': {\n vb: '0 0 24 24',\n d: '<path fill=\"currentColor\" stroke=\"none\" d=\"M21.7 2.3a1 1 0 0 1 .25 1L15.3 21.8a1 1 0 0 1-1.86.06L10.6 14.2 3 11.4a1 1 0 0 1 .06-1.9L20.7 2.05a1 1 0 0 1 1 .25Z\"/>',\n },\n send: {\n vb: '0 0 24 24',\n d: '<path d=\"M21.4 2.6 11 13\"/><path d=\"M21.4 2.6 14.8 21.5a.6.6 0 0 1-1.1.05L11 14l-7.5-2.7a.6.6 0 0 1 .05-1.1L21.4 2.6Z\"/>',\n },\n settings: {\n vb: '0 0 24 24',\n d: '<circle cx=\"12\" cy=\"12\" r=\"3.1\"/><path d=\"M12 2.6V5M12 19v2.4M4.2 4.2 5.9 5.9M18.1 18.1l1.7 1.7M2.6 12H5M19 12h2.4M4.2 19.8 5.9 18.1M18.1 5.9l1.7-1.7\"/>',\n },\n sliders: {\n vb: '0 0 24 24',\n d: '<path d=\"M4 7h9M17 7h3\"/><circle cx=\"15\" cy=\"7\" r=\"2.1\"/><path d=\"M4 17h3M11 17h9\"/><circle cx=\"9\" cy=\"17\" r=\"2.1\"/>',\n },\n 'thumbs-up': {\n vb: '0 0 24 24',\n d: '<path d=\"M7 10.4V20H4.2V10.4Z\"/><path d=\"M7 10.4 11 3.2a2 2 0 0 1 1.9 2.2L12.4 9H18a2 2 0 0 1 2 2.4l-1.1 6A2 2 0 0 1 16.9 20H7\"/>',\n },\n trash: {\n vb: '0 0 24 24',\n d: '<path d=\"M4 7h16\"/><path d=\"M9.2 7V5.2A1.8 1.8 0 0 1 11 3.4h2a1.8 1.8 0 0 1 1.8 1.8V7\"/><path d=\"M6.2 7 7.2 19A1.9 1.9 0 0 0 9.1 20.7h5.8A1.9 1.9 0 0 0 16.8 19L17.8 7\"/><path d=\"M10.3 11v5M13.7 11v5\"/>',\n },\n typing: {\n vb: '0 0 24 24',\n d: '<circle cx=\"6\" cy=\"12\" r=\"1.7\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"12\" cy=\"12\" r=\"1.7\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"18\" cy=\"12\" r=\"1.7\" fill=\"currentColor\" stroke=\"none\"/>',\n },\n 'user-plus': {\n vb: '0 0 24 24',\n d: '<circle cx=\"9\" cy=\"8\" r=\"3.8\"/><path d=\"M3 20a6 6 0 0 1 12 0\"/><path d=\"M18 8v6M15 11h6\"/>',\n },\n user: {\n vb: '0 0 24 24',\n d: '<circle cx=\"12\" cy=\"8\" r=\"4\"/><path d=\"M4.6 20a7.4 7.4 0 0 1 14.8 0\"/>',\n },\n users: {\n vb: '0 0 24 24',\n d: '<circle cx=\"9\" cy=\"8\" r=\"3.6\"/><path d=\"M2.6 20a6.4 6.4 0 0 1 12.8 0\"/><path d=\"M15.8 4.7a3.6 3.6 0 0 1 0 6.6\"/><path d=\"M17.6 20a6.4 6.4 0 0 0-3.1-5.5\"/>',\n },\n webhook: {\n vb: '0 0 24 24',\n d: '<circle cx=\"6\" cy=\"6\" r=\"2.6\"/><circle cx=\"18\" cy=\"9\" r=\"2.6\"/><circle cx=\"9.5\" cy=\"18\" r=\"2.6\"/><path d=\"M7.9 7.9 12 12l3.7-1.5\"/><path d=\"M11.6 12.7 9.8 16\"/>',\n },\n} as const satisfies Record<string, IconDef>;\n\nexport type IconName = keyof typeof ICONS;\n","import { SvgXml } from 'react-native-svg';\n\nimport { usePoolseTheme } from '../theme/PoolseTheme.js';\nimport { ICONS, type IconName } from './icons-data.js';\n\nexport type { IconName };\n\nexport interface PoolseIconProps {\n /** Icon name — see {@link IconName} for the full list. */\n name: IconName;\n /** Width + height in pixels. Defaults to `20` (matches a body-line). */\n size?: number;\n /** Stroke color. Defaults to the theme's `ink` color. */\n color?: string;\n /** Accessibility label. Defaults to the icon name. */\n label?: string | null;\n}\n\nexport function PoolseIcon({ name, size = 20, color, label }: PoolseIconProps) {\n const theme = usePoolseTheme();\n const def = ICONS[name];\n if (!def) return null;\n const stroke = color ?? theme.colors.ink;\n const xml = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"${def.vb}\" fill=\"none\" stroke=\"${stroke}\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\">${def.d}</svg>`;\n const a11y =\n label === null\n ? { accessibilityRole: 'none' as const }\n : { accessibilityRole: 'image' as const, accessibilityLabel: label ?? name };\n return <SvgXml xml={xml} width={size} height={size} {...a11y} />;\n}\n","import { useAttachmentUpload } from '@poolse/react';\nimport { Modal, Pressable, StyleSheet, Text, View } from 'react-native';\n\nimport { PoolseIcon } from './primitives/PoolseIcon.js';\nimport { usePoolseTheme } from './theme/PoolseTheme.js';\n\nexport interface AttachmentPickerProps {\n visible: boolean;\n onClose: () => void;\n /**\n * Optional adapter that produces an `AttachmentUploadInput` from a\n * picked RN file. Default reads `uri`/`name`/`type`/`size` and wraps\n * in a fetch-compatible `Blob`. Override to plug in custom storage\n * or transcoding.\n */\n onPickInputs?: (kind: 'image' | 'document') => Promise<\n {\n body: Blob | { uri: string; name: string; type: string } | unknown;\n contentType: string;\n byteSize: number;\n filename?: string;\n }[]\n >;\n}\n\n/**\n * Picker sheet wrapping `expo-image-picker` and `expo-document-picker`.\n * Both are OPTIONAL peer dependencies — install only the ones you\n * actually use. If a picker is mounted without its dep installed,\n * the corresponding button is disabled with a tooltip explaining\n * which install command to run.\n *\n * Default implementation dynamically `import()`s the Expo modules\n * at mount; the caller can pass `onPickInputs` to skip Expo entirely.\n */\nexport function AttachmentPicker({ visible, onClose, onPickInputs }: AttachmentPickerProps) {\n const theme = usePoolseTheme();\n const upload = useAttachmentUpload();\n\n const pickFromKind = async (kind: 'image' | 'document') => {\n try {\n const adapter = onPickInputs ?? defaultAdapter;\n const inputs = await adapter(kind);\n for (const input of inputs) {\n void upload.upload(input as never);\n }\n } catch (err) {\n // Surface picker errors via the queue's `error` field for the\n // composer's status row. No throw past the picker boundary.\n console.warn('[poolse/picker]', err);\n } finally {\n onClose();\n }\n };\n\n return (\n <Modal visible={visible} transparent animationType=\"slide\" onRequestClose={onClose}>\n <Pressable style={styles.backdrop} onPress={onClose}>\n <View\n style={[\n styles.sheet,\n {\n backgroundColor: theme.colors.surface,\n borderTopLeftRadius: theme.radii.lg,\n borderTopRightRadius: theme.radii.lg,\n },\n theme.shadows.lg,\n ]}\n >\n <Pressable style={styles.item} onPress={() => pickFromKind('image')}>\n <PoolseIcon name=\"attachment\" size={20} color={theme.colors.ink2} />\n <Text style={[styles.itemText, { color: theme.colors.ink }]}>Photo or video</Text>\n </Pressable>\n <Pressable style={styles.item} onPress={() => pickFromKind('document')}>\n <PoolseIcon name=\"attachment\" size={20} color={theme.colors.ink2} />\n <Text style={[styles.itemText, { color: theme.colors.ink }]}>File</Text>\n </Pressable>\n <Pressable style={styles.cancel} onPress={onClose}>\n <Text style={[styles.itemText, { color: theme.colors.brand }]}>Cancel</Text>\n </Pressable>\n </View>\n </Pressable>\n </Modal>\n );\n}\n\n// Default adapter — lazily imports the relevant Expo module so apps\n// that don't use a given kind don't pay for the dep weight at boot.\nasync function defaultAdapter(kind: 'image' | 'document') {\n if (kind === 'image') {\n const mod = await tryImport('expo-image-picker');\n if (!mod)\n throw new Error('expo-image-picker not installed — `npx expo install expo-image-picker`');\n const res = await mod.launchImageLibraryAsync({ mediaTypes: 'images', quality: 0.85 });\n if (res.canceled) return [];\n return res.assets.map(\n (asset: { uri: string; mimeType?: string; fileSize?: number; fileName?: string }) => ({\n body: {\n uri: asset.uri,\n name: asset.fileName ?? 'image.jpg',\n type: asset.mimeType ?? 'image/jpeg',\n },\n contentType: asset.mimeType ?? 'image/jpeg',\n byteSize: asset.fileSize ?? 0,\n filename: asset.fileName ?? 'image.jpg',\n }),\n );\n }\n const mod = await tryImport('expo-document-picker');\n if (!mod)\n throw new Error('expo-document-picker not installed — `npx expo install expo-document-picker`');\n const res = await mod.getDocumentAsync({ copyToCacheDirectory: true, multiple: true });\n if (res.canceled) return [];\n return res.assets.map(\n (asset: { uri: string; mimeType?: string; size?: number; name: string }) => ({\n body: {\n uri: asset.uri,\n name: asset.name,\n type: asset.mimeType ?? 'application/octet-stream',\n },\n contentType: asset.mimeType ?? 'application/octet-stream',\n byteSize: asset.size ?? 0,\n filename: asset.name,\n }),\n );\n}\n\nasync function tryImport(name: string): Promise<any | null> {\n try {\n // eslint-disable-next-line @typescript-eslint/no-implied-eval, no-new-func\n return await (new Function('m', 'return import(m)') as (m: string) => Promise<unknown>)(name);\n } catch {\n return null;\n }\n}\n\nconst styles = StyleSheet.create({\n backdrop: {\n flex: 1,\n backgroundColor: 'rgba(0,0,0,0.35)',\n justifyContent: 'flex-end',\n },\n sheet: {\n paddingVertical: 8,\n paddingBottom: 24,\n },\n item: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingHorizontal: 20,\n paddingVertical: 14,\n gap: 14,\n },\n cancel: {\n paddingHorizontal: 20,\n paddingVertical: 14,\n alignItems: 'center',\n marginTop: 4,\n },\n itemText: {\n fontSize: 15,\n fontWeight: '500',\n },\n});\n","// Mirror of @poolse/react-ui's userColor — deterministic per-user\n// color from the same 8-hue palette.\n\nconst PALETTE = [\n '#6366f1', // indigo\n '#10b981', // emerald\n '#f59e0b', // amber\n '#ec4899', // rose\n '#0ea5e9', // sky\n '#8b5cf6', // violet\n '#14b8a6', // teal\n '#d946ef', // fuchsia\n];\n\nexport function userColor(id: string): string {\n let h = 0;\n for (let i = 0; i < id.length; i++) {\n h = (h * 31 + id.charCodeAt(i)) | 0;\n }\n return PALETTE[Math.abs(h) % PALETTE.length]!;\n}\n","import { Image, StyleSheet, Text, View } from 'react-native';\n\nimport { usePoolseTheme } from '../theme/PoolseTheme.js';\nimport { userColor } from './userColor.js';\n\nexport interface AvatarProps {\n /** URL to a profile image. Falls back to initials when omitted. */\n src?: string | null;\n /** Used for initials. */\n name?: string | null;\n /** Stable color seed (typically the user's external_id). */\n seed?: string | null;\n /** Show a green presence dot in the bottom-right corner. */\n online?: boolean;\n /** Size variant. `md` → 40px, `sm` → 28px, `lg` → 56px. */\n size?: 'sm' | 'md' | 'lg';\n}\n\nconst SIZES = { sm: 28, md: 40, lg: 56 } as const;\n\nexport function Avatar({ src, name, seed, online, size = 'md' }: AvatarProps) {\n const theme = usePoolseTheme();\n const dim = SIZES[size];\n const initials = computeInitials(name);\n const tint = seed ? userColor(seed) : theme.colors.brand;\n const fontSize = size === 'sm' ? 11 : size === 'lg' ? 22 : 15;\n\n return (\n <View\n style={[\n styles.root,\n {\n width: dim,\n height: dim,\n borderRadius: dim / 2,\n backgroundColor: tint,\n },\n ]}\n accessibilityRole=\"image\"\n accessibilityLabel={name ?? 'avatar'}\n >\n {src ? (\n <Image\n source={{ uri: src }}\n style={{ width: dim, height: dim, borderRadius: dim / 2 }}\n accessible={false}\n />\n ) : (\n <Text\n style={{\n color: theme.colors.onBrand,\n fontSize,\n fontWeight: '600',\n fontFamily: theme.type.fontBody,\n }}\n >\n {initials}\n </Text>\n )}\n {online ? (\n <View\n style={[\n styles.presence,\n {\n backgroundColor: theme.colors.presence,\n borderColor: theme.colors.surface,\n width: dim * 0.32,\n height: dim * 0.32,\n borderRadius: dim * 0.16,\n },\n ]}\n />\n ) : null}\n </View>\n );\n}\n\nfunction computeInitials(name: string | null | undefined): string {\n if (!name) return '?';\n const parts = name.trim().split(/\\s+/).slice(0, 2);\n return (\n parts\n .map((p) => p.charAt(0).toUpperCase())\n .join('')\n .slice(0, 2) || '?'\n );\n}\n\nconst styles = StyleSheet.create({\n root: {\n alignItems: 'center',\n justifyContent: 'center',\n overflow: 'visible',\n },\n presence: {\n position: 'absolute',\n bottom: 0,\n right: 0,\n borderWidth: 2,\n },\n});\n","import { useAttachmentUpload } from '@poolse/react';\nimport { Pressable, StyleSheet, Text, View } from 'react-native';\n\nimport { PoolseIcon } from './primitives/PoolseIcon.js';\nimport { usePoolseTheme } from './theme/PoolseTheme.js';\n\n/**\n * Horizontal strip of in-flight upload chips with cancel + remove\n * affordances. Reads from `useAttachmentUpload()` so it auto-clears\n * when the composer resets the queue post-send.\n */\nexport function UploadQueueStrip() {\n const theme = usePoolseTheme();\n const upload = useAttachmentUpload();\n if (upload.queue.length === 0) return null;\n return (\n <View style={styles.strip}>\n {upload.queue.map((item) => {\n const isError = item.status === 'error';\n const isReady = item.status === 'ready';\n return (\n <View\n key={item.localId}\n style={[\n styles.chip,\n {\n backgroundColor: theme.colors.surface2,\n borderColor: isError ? theme.colors.error : theme.colors.border,\n borderRadius: theme.radii.sm,\n },\n ]}\n >\n <Text\n style={[styles.name, { color: isError ? theme.colors.error : theme.colors.ink }]}\n numberOfLines={1}\n >\n {item.filename}\n </Text>\n <Text style={[styles.status, { color: theme.colors.ink3 }]}>\n {isReady ? 'ready' : isError ? 'failed' : item.status}\n </Text>\n <Pressable\n hitSlop={6}\n onPress={() =>\n isReady || isError ? upload.remove(item.localId) : upload.cancel(item.localId)\n }\n style={styles.btn}\n accessibilityLabel=\"Remove upload\"\n >\n <PoolseIcon name=\"close\" size={12} color={theme.colors.ink2} />\n </Pressable>\n </View>\n );\n })}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n strip: {\n flexDirection: 'row',\n flexWrap: 'wrap',\n gap: 6,\n marginBottom: 6,\n },\n chip: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingHorizontal: 8,\n paddingVertical: 4,\n borderWidth: StyleSheet.hairlineWidth,\n gap: 6,\n maxWidth: 200,\n },\n name: {\n fontSize: 12,\n flex: 1,\n },\n status: {\n fontSize: 10,\n textTransform: 'capitalize',\n },\n btn: {\n padding: 2,\n },\n});\n","import { forwardRef, useImperativeHandle, useRef, useState } from 'react';\nimport {\n KeyboardAvoidingView,\n Platform,\n Pressable,\n StyleSheet,\n Text,\n TextInput,\n View,\n} from 'react-native';\nimport type { AttachmentUploadInput, Message, Uuid } from '@poolse/sdk';\nimport { useAttachmentUpload } from '@poolse/react';\n\nimport { PoolseIcon } from './primitives/PoolseIcon.js';\nimport { UploadQueueStrip } from './UploadQueueStrip.js';\nimport { usePoolseTheme } from './theme/PoolseTheme.js';\n\nexport interface MessageComposerProps {\n /**\n * Called when the user taps Send. Second arg carries\n * `quoted_message_id` (when replying) and `attachment_ids`\n * (resolved from the composer's upload queue). Awaited so the\n * composer disables until the send round-trips.\n */\n onSend: (\n body: string,\n opts?: { quoted_message_id?: Uuid; attachment_ids?: Uuid[] },\n ) => Promise<unknown> | void;\n /** Called on every keystroke. Hook to `useTyping().signalTyping`. */\n onTyping?: () => void;\n placeholder?: string;\n disabled?: boolean;\n /** Renders a quote chip above the input; cleared by the caller in `onSend`. */\n replyingTo?: Message | null;\n /** User tapped (x) on the quote chip. */\n onCancelReply?: () => void;\n /** Display label for the quoted sender, keyed by `external_id`. */\n labelFor?: (externalId: string) => string;\n /** Show the paperclip + queue strip. Defaults true. */\n attachments?: boolean;\n /** Tap on the paperclip — wire to `<AttachmentPicker>` from the same package. */\n onAttachPress?: () => void;\n}\n\n/**\n * Imperative handle for parents that want to add files to the\n * composer's upload queue externally (drag/drop on a wrapper,\n * deep-link, attachment shortcut).\n */\nexport interface MessageComposerHandle {\n /** Enqueue ready-to-upload inputs. The picker component is the usual caller; this is the escape hatch. */\n addFiles: (inputs: AttachmentUploadInput[]) => void;\n focus: () => void;\n clear: () => void;\n}\n\nexport const MessageComposer = forwardRef<MessageComposerHandle, MessageComposerProps>(\n function MessageComposer(\n {\n onSend,\n onTyping,\n placeholder = 'Type a message…',\n disabled = false,\n replyingTo,\n onCancelReply,\n labelFor,\n attachments = true,\n onAttachPress,\n },\n ref,\n ) {\n const theme = usePoolseTheme();\n const inputRef = useRef<TextInput>(null);\n const [value, setValue] = useState('');\n const [sending, setSending] = useState(false);\n const upload = useAttachmentUpload();\n\n useImperativeHandle(\n ref,\n () => ({\n addFiles: (inputs) => {\n if (!attachments) return;\n for (const input of inputs) {\n void upload.upload(input);\n }\n },\n focus: () => inputRef.current?.focus(),\n clear: () => setValue(''),\n }),\n [attachments, upload],\n );\n\n const readyAttachmentIds = upload.queue\n .filter((item) => item.status === 'ready' && item.attachment)\n .map((item) => item.attachment!.id);\n const isUploading = upload.queue.some(\n (item) => item.status === 'uploading' || item.status === 'pending',\n );\n\n const submitDisabled =\n disabled ||\n sending ||\n isUploading ||\n (value.trim().length === 0 && readyAttachmentIds.length === 0);\n\n const handleSend = async () => {\n if (submitDisabled) return;\n setSending(true);\n try {\n await onSend(value.trim(), {\n ...(replyingTo ? { quoted_message_id: replyingTo.id } : {}),\n ...(readyAttachmentIds.length > 0 ? { attachment_ids: readyAttachmentIds } : {}),\n });\n setValue('');\n upload.reset();\n } finally {\n setSending(false);\n }\n };\n\n return (\n <KeyboardAvoidingView\n behavior={Platform.OS === 'ios' ? 'padding' : undefined}\n keyboardVerticalOffset={Platform.OS === 'ios' ? 80 : 0}\n >\n <View\n style={[\n styles.wrap,\n {\n backgroundColor: theme.colors.surface,\n borderTopColor: theme.colors.border,\n },\n ]}\n >\n {replyingTo ? (\n <ReplyChip\n message={replyingTo}\n {...(labelFor ? { labelFor } : {})}\n {...(onCancelReply ? { onCancel: onCancelReply } : {})}\n />\n ) : null}\n\n {attachments ? <UploadQueueStrip /> : null}\n\n <View style={styles.row}>\n {attachments && onAttachPress ? (\n <Pressable\n onPress={onAttachPress}\n hitSlop={8}\n style={styles.iconBtn}\n accessibilityLabel=\"Attach file\"\n >\n <PoolseIcon name=\"attachment\" size={22} color={theme.colors.ink2} />\n </Pressable>\n ) : null}\n\n <TextInput\n ref={inputRef}\n value={value}\n onChangeText={(text) => {\n setValue(text);\n onTyping?.();\n }}\n placeholder={placeholder}\n placeholderTextColor={theme.colors.ink3}\n multiline\n editable={!disabled}\n style={[\n styles.input,\n {\n color: theme.colors.ink,\n backgroundColor: theme.colors.surface2,\n borderRadius: theme.radii.lg,\n fontFamily: theme.type.fontBody,\n fontSize: theme.type.bodySize,\n },\n ]}\n />\n\n <Pressable\n onPress={handleSend}\n disabled={submitDisabled}\n style={[\n styles.sendBtn,\n {\n backgroundColor: submitDisabled ? theme.colors.ink3 : theme.colors.brand,\n opacity: submitDisabled ? 0.6 : 1,\n },\n ]}\n accessibilityLabel=\"Send message\"\n >\n <PoolseIcon name=\"send\" size={18} color={theme.colors.onBrand} />\n </Pressable>\n </View>\n </View>\n </KeyboardAvoidingView>\n );\n },\n);\n\nfunction ReplyChip({\n message,\n labelFor,\n onCancel,\n}: {\n message: Message;\n labelFor?: (externalId: string) => string;\n onCancel?: () => void;\n}) {\n const theme = usePoolseTheme();\n const senderName = message.sender_external_id\n ? (labelFor?.(message.sender_external_id) ?? message.sender_external_id)\n : 'Unknown';\n return (\n <View\n style={[\n styles.replyChip,\n {\n backgroundColor: theme.colors.surface2,\n borderLeftColor: theme.colors.brand,\n },\n ]}\n >\n <View style={{ flex: 1 }}>\n <Text style={[styles.replyName, { color: theme.colors.brand }]}>\n Replying to {senderName}\n </Text>\n <Text style={[styles.replyBody, { color: theme.colors.ink2 }]} numberOfLines={1}>\n {message.body ?? '…'}\n </Text>\n </View>\n {onCancel ? (\n <Pressable onPress={onCancel} hitSlop={8} style={styles.replyCancel}>\n <PoolseIcon name=\"close\" size={16} color={theme.colors.ink2} />\n </Pressable>\n ) : null}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n wrap: {\n borderTopWidth: StyleSheet.hairlineWidth,\n paddingHorizontal: 12,\n paddingVertical: 8,\n },\n row: {\n flexDirection: 'row',\n alignItems: 'flex-end',\n gap: 8,\n },\n iconBtn: {\n padding: 8,\n justifyContent: 'center',\n alignItems: 'center',\n },\n input: {\n flex: 1,\n minHeight: 40,\n maxHeight: 120,\n paddingHorizontal: 12,\n paddingTop: 10,\n paddingBottom: 10,\n },\n sendBtn: {\n width: 40,\n height: 40,\n borderRadius: 20,\n justifyContent: 'center',\n alignItems: 'center',\n },\n replyChip: {\n flexDirection: 'row',\n alignItems: 'center',\n borderLeftWidth: 3,\n paddingLeft: 10,\n paddingRight: 6,\n paddingVertical: 6,\n marginBottom: 8,\n borderRadius: 6,\n },\n replyName: {\n fontSize: 11,\n fontWeight: '600',\n marginBottom: 2,\n },\n replyBody: {\n fontSize: 12,\n },\n replyCancel: {\n padding: 6,\n },\n});\n","import type { Membership, Message, Uuid } from '@poolse/sdk';\nimport { useMembers } from '@poolse/react';\nimport { useMemo, useState } from 'react';\nimport { FlatList, Modal, Pressable, StyleSheet, Text, View } from 'react-native';\n\nimport { Avatar } from './primitives/Avatar.js';\nimport { MessageComposer, type MessageComposerProps } from './MessageComposer.js';\nimport { usePoolseTheme } from './theme/PoolseTheme.js';\n\nexport interface MentionInputProps extends Omit<MessageComposerProps, 'onSend'> {\n conversationId: Uuid;\n /** Same callback as MessageComposer.onSend, plus optional mention user_ids. */\n onSend: (\n body: string,\n opts?: {\n quoted_message_id?: Uuid;\n attachment_ids?: Uuid[];\n mentions?: Uuid[];\n },\n ) => Promise<unknown> | void;\n}\n\n/**\n * Composer with an inline `@`-trigger that opens a modal sheet of\n * conversation members. Selecting a member inserts their\n * `external_id` into the text, and the wire `mentions` array (sent\n * to the backend) carries the corresponding internal `user_id`s.\n */\nexport function MentionInput({ conversationId, onSend, ...composerProps }: MentionInputProps) {\n const theme = usePoolseTheme();\n const { members } = useMembers(conversationId);\n const [pickerOpen, setPickerOpen] = useState(false);\n const [pickerQuery, setPickerQuery] = useState('');\n const [pendingMentionUuids, setPendingMentionUuids] = useState<Uuid[]>([]);\n const [text, setText] = useState('');\n\n const filteredMembers = useMemo(() => {\n if (!pickerQuery) return members;\n const q = pickerQuery.toLowerCase();\n return members.filter((m) => m.external_id.toLowerCase().includes(q));\n }, [members, pickerQuery]);\n\n const handleSend: MessageComposerProps['onSend'] = async (body, opts) => {\n await onSend(body, {\n ...opts,\n ...(pendingMentionUuids.length > 0 ? { mentions: pendingMentionUuids } : {}),\n });\n setPendingMentionUuids([]);\n setText('');\n };\n\n return (\n <>\n <MessageComposer\n {...composerProps}\n onSend={handleSend}\n onTyping={() => {\n composerProps.onTyping?.();\n // Watch for an `@` token to open the picker.\n const lastChar = text.slice(-1);\n if (lastChar === '@') setPickerOpen(true);\n }}\n />\n\n <Modal\n visible={pickerOpen}\n transparent\n animationType=\"slide\"\n onRequestClose={() => setPickerOpen(false)}\n >\n <Pressable style={styles.backdrop} onPress={() => setPickerOpen(false)}>\n <View\n style={[\n styles.sheet,\n {\n backgroundColor: theme.colors.surface,\n borderTopLeftRadius: theme.radii.lg,\n borderTopRightRadius: theme.radii.lg,\n },\n ]}\n >\n <Text\n style={[styles.title, { color: theme.colors.ink, fontFamily: theme.type.fontBody }]}\n >\n Mention a member\n </Text>\n <FlatList\n data={filteredMembers}\n keyExtractor={(m) => m.user_id}\n renderItem={({ item }) => (\n <MentionRow\n member={item}\n onPress={() => {\n setPendingMentionUuids((prev) => [...prev, item.user_id]);\n setText((prev) => `${prev}${item.external_id} `);\n setPickerOpen(false);\n }}\n />\n )}\n />\n </View>\n </Pressable>\n </Modal>\n </>\n );\n}\n\nfunction MentionRow({ member, onPress }: { member: Membership; onPress: () => void }) {\n const theme = usePoolseTheme();\n return (\n <Pressable onPress={onPress} style={styles.row}>\n <Avatar src={null} name={member.external_id} seed={member.external_id} size=\"sm\" />\n <Text style={[styles.rowText, { color: theme.colors.ink, fontFamily: theme.type.fontBody }]}>\n {member.external_id}\n </Text>\n </Pressable>\n );\n}\n\nconst styles = StyleSheet.create({\n backdrop: {\n flex: 1,\n backgroundColor: 'rgba(0,0,0,0.35)',\n justifyContent: 'flex-end',\n },\n sheet: {\n maxHeight: '60%',\n paddingVertical: 12,\n },\n title: {\n fontSize: 14,\n fontWeight: '600',\n paddingHorizontal: 16,\n paddingBottom: 8,\n },\n row: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingHorizontal: 16,\n paddingVertical: 10,\n gap: 10,\n },\n rowText: {\n fontSize: 14,\n },\n});\n","import type { Message } from '@poolse/sdk';\nimport {\n ActivityIndicator,\n FlatList,\n type ListRenderItem,\n StyleSheet,\n Text,\n View,\n} from 'react-native';\nimport { useCallback, type ReactElement } from 'react';\n\nimport { usePoolseTheme } from './theme/PoolseTheme.js';\n\nexport interface MessageListProps {\n messages: Message[];\n loading?: boolean;\n hasMore?: boolean;\n onLoadMore?: () => void;\n renderItem: (msg: Message, index: number) => ReactElement;\n /** Slot rendered above the latest message (typically the typing indicator). */\n ListHeader?: ReactElement | null;\n /** Slot rendered below the oldest message (rare — typically nothing). */\n ListFooter?: ReactElement | null;\n /** Custom empty state when there are no messages. */\n emptyState?: ReactElement | string;\n}\n\n/**\n * Inverted FlatList wrapper for chat history. Newest message at the\n * bottom (visually), oldest at the top. Calls `onLoadMore` when the\n * user scrolls near the top edge and `hasMore` is true.\n *\n * Pagination is owned by `useMessages` (hand it `messages` +\n * `hasMore` + `loadMore`); this component just renders + scrolls.\n */\nexport function MessageList({\n messages,\n loading = false,\n hasMore = false,\n onLoadMore,\n renderItem,\n ListHeader = null,\n ListFooter = null,\n emptyState,\n}: MessageListProps) {\n const theme = usePoolseTheme();\n\n // FlatList is inverted, so the newest item is index 0 (rendered at\n // the bottom visually). React's `messages` is newest-last per the\n // SDK convention; we reverse for FlatList.\n const data = [...messages].reverse();\n\n const handleRender: ListRenderItem<Message> = useCallback(\n ({ item, index }) => renderItem(item, messages.length - 1 - index),\n [renderItem, messages.length],\n );\n\n if (loading && messages.length === 0) {\n return (\n <View style={[styles.placeholder, { backgroundColor: theme.colors.paper }]}>\n <ActivityIndicator color={theme.colors.brand} />\n </View>\n );\n }\n\n if (messages.length === 0) {\n return (\n <View style={[styles.placeholder, { backgroundColor: theme.colors.paper }]}>\n {typeof emptyState === 'string' ? (\n <Text style={{ color: theme.colors.ink3, fontFamily: theme.type.fontBody }}>\n {emptyState}\n </Text>\n ) : (\n (emptyState ?? null)\n )}\n </View>\n );\n }\n\n return (\n <FlatList\n inverted\n data={data}\n keyExtractor={(item) => item.id}\n renderItem={handleRender}\n onEndReached={hasMore ? onLoadMore : undefined}\n onEndReachedThreshold={0.3}\n // `inverted` flips ListHeader / ListFooter visually too — the\n // header lands at the bottom and footer at the top. We swap\n // them in props so the caller-facing semantics match the\n // visual reality.\n ListHeaderComponent={ListFooter}\n ListFooterComponent={\n <View>\n {hasMore && loading ? (\n <ActivityIndicator color={theme.colors.ink3} style={{ marginVertical: 8 }} />\n ) : null}\n {ListHeader}\n </View>\n }\n style={{ backgroundColor: theme.colors.paper }}\n contentContainerStyle={{ paddingVertical: 8 }}\n />\n );\n}\n\nconst styles = StyleSheet.create({\n placeholder: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n padding: 24,\n },\n});\n","import type { Message } from '@poolse/sdk';\nimport { useState } from 'react';\nimport { Pressable, StyleSheet, Text, TextInput, View } from 'react-native';\n\nimport { usePoolseTheme } from './theme/PoolseTheme.js';\n\nexport interface EditableMessageBubbleProps {\n message: Message;\n currentUserId: string | null;\n onCancel: () => void;\n onSave: (body: string) => Promise<unknown> | void;\n}\n\nexport function EditableMessageBubble({\n message,\n currentUserId,\n onCancel,\n onSave,\n}: EditableMessageBubbleProps) {\n const theme = usePoolseTheme();\n const isSelf = currentUserId !== null && message.sender_id === currentUserId;\n const [value, setValue] = useState(message.body ?? '');\n const [saving, setSaving] = useState(false);\n\n const submit = async () => {\n if (saving || !value.trim()) return;\n setSaving(true);\n try {\n await onSave(value.trim());\n } finally {\n setSaving(false);\n }\n };\n\n const bg = isSelf ? theme.colors.selfBubble : theme.colors.otherBubble;\n const ink = isSelf ? theme.colors.selfBubbleText : theme.colors.otherBubbleText;\n\n return (\n <View\n style={[\n styles.wrap,\n {\n alignSelf: isSelf ? 'flex-end' : 'flex-start',\n maxWidth: '80%',\n },\n ]}\n >\n <View\n style={[\n styles.bubble,\n {\n backgroundColor: bg,\n borderRadius: theme.radii.bubble,\n paddingHorizontal: theme.spacing.md,\n paddingVertical: theme.spacing.sm,\n },\n theme.shadows.sm,\n ]}\n >\n <TextInput\n value={value}\n onChangeText={setValue}\n multiline\n autoFocus\n style={{\n color: ink,\n fontFamily: theme.type.fontBody,\n fontSize: theme.type.bodySize,\n minHeight: 24,\n }}\n />\n <View style={styles.actions}>\n <Pressable onPress={onCancel} hitSlop={6}>\n <Text style={[styles.btn, { color: ink, opacity: 0.7 }]}>Cancel</Text>\n </Pressable>\n <Pressable onPress={submit} disabled={saving} hitSlop={6}>\n <Text style={[styles.btn, { color: ink, fontWeight: '700' }]}>\n {saving ? 'Saving…' : 'Save'}\n </Text>\n </Pressable>\n </View>\n </View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n wrap: {\n marginBottom: 4,\n },\n bubble: {},\n actions: {\n flexDirection: 'row',\n justifyContent: 'flex-end',\n gap: 12,\n marginTop: 6,\n },\n btn: {\n fontSize: 13,\n },\n});\n","import { Modal, Pressable, StyleSheet, Text, View } from 'react-native';\n\nimport { PoolseIcon, type IconName } from './primitives/PoolseIcon.js';\nimport { usePoolseTheme } from './theme/PoolseTheme.js';\n\nexport interface MessageActionsProps {\n visible: boolean;\n onClose: () => void;\n isSelf: boolean;\n onReply?: () => void;\n onReplyInThread?: () => void;\n onQuote?: () => void;\n onEdit?: () => void;\n onDelete?: () => void;\n onCopy?: () => void;\n onReact?: () => void;\n}\n\n/**\n * Long-press action menu — rendered as a modal bottom sheet (RN's\n * native equivalent of the web hover popover).\n */\nexport function MessageActions({\n visible,\n onClose,\n isSelf,\n onReply,\n onReplyInThread,\n onQuote,\n onEdit,\n onDelete,\n onCopy,\n onReact,\n}: MessageActionsProps) {\n const theme = usePoolseTheme();\n const items: Array<{ label: string; icon: IconName; onPress: () => void; danger?: boolean }> = [];\n if (onReact) items.push({ label: 'React', icon: 'emoji', onPress: onReact });\n if (onReply) items.push({ label: 'Reply', icon: 'reply', onPress: onReply });\n if (onQuote) items.push({ label: 'Quote reply', icon: 'reply', onPress: onQuote });\n if (onReplyInThread)\n items.push({ label: 'Reply in thread', icon: 'messages', onPress: onReplyInThread });\n if (onCopy) items.push({ label: 'Copy text', icon: 'copy', onPress: onCopy });\n if (isSelf && onEdit) items.push({ label: 'Edit', icon: 'edit', onPress: onEdit });\n if (isSelf && onDelete)\n items.push({ label: 'Delete', icon: 'trash', onPress: onDelete, danger: true });\n\n return (\n <Modal visible={visible} transparent animationType=\"fade\" onRequestClose={onClose}>\n <Pressable style={styles.backdrop} onPress={onClose}>\n <View\n style={[\n styles.sheet,\n {\n backgroundColor: theme.colors.surface,\n borderTopLeftRadius: theme.radii.lg,\n borderTopRightRadius: theme.radii.lg,\n },\n theme.shadows.lg,\n ]}\n >\n {items.map((item) => (\n <Pressable key={item.label} onPress={item.onPress} style={styles.item}>\n <PoolseIcon\n name={item.icon}\n size={18}\n color={item.danger ? theme.colors.error : theme.colors.ink2}\n />\n <Text\n style={[\n styles.itemText,\n {\n color: item.danger ? theme.colors.error : theme.colors.ink,\n fontFamily: theme.type.fontBody,\n },\n ]}\n >\n {item.label}\n </Text>\n </Pressable>\n ))}\n </View>\n </Pressable>\n </Modal>\n );\n}\n\nconst styles = StyleSheet.create({\n backdrop: {\n flex: 1,\n backgroundColor: 'rgba(0,0,0,0.35)',\n justifyContent: 'flex-end',\n },\n sheet: {\n paddingVertical: 8,\n paddingBottom: 24,\n },\n item: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingHorizontal: 20,\n paddingVertical: 14,\n gap: 14,\n },\n itemText: {\n fontSize: 15,\n fontWeight: '500',\n },\n});\n","import type { Attachment } from '@poolse/sdk';\nimport { useAttachmentUrl } from '@poolse/react';\nimport { Image, Pressable, StyleSheet, Text, View } from 'react-native';\n\nimport { PoolseIcon } from './primitives/PoolseIcon.js';\nimport { usePoolseTheme } from './theme/PoolseTheme.js';\n\nexport interface AttachmentPreviewProps {\n attachment: Attachment;\n /** Optional tap handler. For images defaults to opening the source URL. */\n onPress?: () => void;\n /** Render at this max width. Defaults to 280. */\n maxWidth?: number;\n}\n\nexport function AttachmentPreview({ attachment, onPress, maxWidth = 280 }: AttachmentPreviewProps) {\n const theme = usePoolseTheme();\n const isImage = (attachment.content_type ?? '').startsWith('image/');\n const { url } = useAttachmentUrl(attachment.id);\n\n if (isImage) {\n return (\n <Pressable onPress={onPress} disabled={!onPress}>\n {url ? (\n <Image\n source={{ uri: url }}\n style={{\n width: maxWidth,\n height: 200,\n borderRadius: theme.radii.md,\n backgroundColor: theme.colors.surface2,\n }}\n resizeMode=\"cover\"\n accessible\n accessibilityLabel={attachment.original_filename ?? 'attachment image'}\n />\n ) : (\n <View\n style={[\n styles.imagePlaceholder,\n {\n width: maxWidth,\n height: 200,\n borderRadius: theme.radii.md,\n backgroundColor: theme.colors.surface2,\n },\n ]}\n />\n )}\n </Pressable>\n );\n }\n\n return (\n <Pressable\n onPress={onPress}\n disabled={!onPress}\n style={[\n styles.fileCard,\n {\n backgroundColor: theme.colors.surface2,\n borderColor: theme.colors.border,\n borderRadius: theme.radii.md,\n },\n ]}\n >\n <PoolseIcon name=\"attachment\" size={18} color={theme.colors.ink2} />\n <View style={{ flex: 1, marginLeft: 8 }}>\n <Text\n style={[styles.fileName, { color: theme.colors.ink, fontFamily: theme.type.fontBody }]}\n numberOfLines={1}\n >\n {attachment.original_filename ?? 'file'}\n </Text>\n <Text style={[styles.fileSize, { color: theme.colors.ink3 }]}>\n {formatBytes(attachment.byte_size)}\n </Text>\n </View>\n </Pressable>\n );\n}\n\nfunction formatBytes(n: number): string {\n if (n < 1024) return `${n} B`;\n if (n < 1024 * 1024) return `${(n / 1024).toFixed(1)} KB`;\n if (n < 1024 * 1024 * 1024) return `${(n / 1024 / 1024).toFixed(1)} MB`;\n return `${(n / 1024 / 1024 / 1024).toFixed(1)} GB`;\n}\n\nconst styles = StyleSheet.create({\n imagePlaceholder: {},\n fileCard: {\n flexDirection: 'row',\n alignItems: 'center',\n padding: 8,\n borderWidth: StyleSheet.hairlineWidth,\n },\n fileName: {\n fontSize: 13,\n fontWeight: '500',\n },\n fileSize: {\n fontSize: 11,\n },\n});\n","import type { Message, QuotedMessagePreview, Uuid } from '@poolse/sdk';\nimport { useUser } from '@poolse/react';\nimport { useState, type ReactNode } from 'react';\nimport { Pressable, StyleSheet, Text, View } from 'react-native';\n\nimport { AttachmentPreview } from './AttachmentPreview.js';\nimport { PoolseIcon } from './primitives/PoolseIcon.js';\nimport { userColor } from './primitives/userColor.js';\nimport { usePoolseTheme } from './theme/PoolseTheme.js';\n\nexport type BubbleGroupPosition = 'first' | 'middle' | 'last' | 'standalone';\n\nexport interface MessageBubbleProps {\n message: Message;\n /** Used to decide left/right alignment, color, and read-receipt visibility. */\n currentUserId: string | null;\n /** `'sent'` → single tick, `'read'` → double tick (theme.colors.brand). */\n readState?: 'sent' | 'read';\n /** Label resolver keyed by `external_id` — falls back to the externalId itself. */\n labelFor?: (externalId: string) => string;\n /** Quoted-card tap handler. Typically used to scroll the list to the original message. */\n onQuotedClick?: (quotedMessageId: Uuid) => void;\n /** Position in a same-sender cluster — drives tail-corner rendering. */\n groupPosition?: BubbleGroupPosition;\n /** Truncate at this many chars and show a \"Read more\" toggle. Defaults to 0 (off). */\n maxBodyLength?: number;\n /** Show a colored sender label above other-side bubbles. Only meaningful in group chats. */\n showSenderName?: boolean;\n /** Slot for an actions trigger — typically a chevron rendered by `<MessageRow>`. */\n actionsTrigger?: ReactNode;\n /** Render in-bubble attachments (images, file cards). Defaults to true. */\n showAttachments?: boolean;\n}\n\nexport function MessageBubble({\n message,\n currentUserId,\n readState,\n labelFor,\n onQuotedClick,\n groupPosition = 'standalone',\n maxBodyLength = 0,\n showSenderName = false,\n actionsTrigger,\n showAttachments = true,\n}: MessageBubbleProps) {\n const theme = usePoolseTheme();\n const isSelf = currentUserId !== null && message.sender_id === currentUserId;\n const [expanded, setExpanded] = useState(false);\n\n const sender = useUser(!isSelf ? message.sender_external_id : null);\n const senderFallbackName = message.sender_external_id ?? 'Unknown';\n const senderLabel =\n sender.profile?.displayName ??\n (message.sender_external_id\n ? (labelFor?.(message.sender_external_id) ?? senderFallbackName)\n : senderFallbackName);\n const senderTint = userColor(message.sender_external_id ?? message.sender_id ?? message.id);\n\n const tailCorner = groupPosition === 'last' || groupPosition === 'standalone';\n const bubbleColor = isSelf ? theme.colors.selfBubble : theme.colors.otherBubble;\n const textColor = isSelf ? theme.colors.selfBubbleText : theme.colors.otherBubbleText;\n\n const radii = {\n topLeft: theme.radii.bubble,\n topRight: theme.radii.bubble,\n bottomLeft: theme.radii.bubble,\n bottomRight: theme.radii.bubble,\n };\n if (tailCorner) {\n if (isSelf) radii.bottomRight = 4;\n else radii.bottomLeft = 4;\n }\n\n const body = message.body ?? '';\n const truncated =\n maxBodyLength > 0 && body.length > maxBodyLength && !expanded\n ? body.slice(0, maxBodyLength) + '…'\n : body;\n\n const time = formatTime(message.inserted_at);\n const isDeleted = !!message.deleted_at;\n const isEdited = !!message.edited_at && !isDeleted;\n\n const images = (message.attachments ?? []).filter((a) => isImageContentType(a.content_type));\n const files = (message.attachments ?? []).filter((a) => !isImageContentType(a.content_type));\n const renderAttachments = showAttachments && (images.length > 0 || files.length > 0);\n\n return (\n <View\n style={[\n styles.wrap,\n {\n alignSelf: isSelf ? 'flex-end' : 'flex-start',\n maxWidth: '80%',\n },\n ]}\n >\n <View\n style={[\n styles.bubble,\n {\n backgroundColor: bubbleColor,\n borderColor: isSelf ? 'transparent' : theme.colors.border,\n borderWidth: isSelf ? 0 : StyleSheet.hairlineWidth,\n borderTopLeftRadius: radii.topLeft,\n borderTopRightRadius: radii.topRight,\n borderBottomLeftRadius: radii.bottomLeft,\n borderBottomRightRadius: radii.bottomRight,\n paddingHorizontal: theme.spacing.md,\n paddingVertical: theme.spacing.sm,\n },\n theme.shadows.sm,\n ]}\n >\n {showSenderName &&\n !isSelf &&\n (groupPosition === 'first' || groupPosition === 'standalone') ? (\n <Text style={[styles.senderName, { color: senderTint, fontFamily: theme.type.fontBody }]}>\n {senderLabel}\n </Text>\n ) : null}\n\n {message.quoted_message ? (\n <QuotedCard\n quoted={message.quoted_message}\n isSelf={isSelf}\n {...(labelFor ? { labelFor } : {})}\n {...(onQuotedClick ? { onPress: () => onQuotedClick(message.quoted_message!.id) } : {})}\n />\n ) : null}\n\n {renderAttachments && images.length > 0 ? (\n <View style={{ gap: theme.spacing.xs, marginBottom: theme.spacing.xs }}>\n {images.map((att) => (\n <AttachmentPreview key={att.id} attachment={att} />\n ))}\n </View>\n ) : null}\n\n {renderAttachments && files.length > 0 ? (\n <View style={{ gap: theme.spacing.xs, marginBottom: theme.spacing.xs }}>\n {files.map((att) => (\n <AttachmentPreview key={att.id} attachment={att} />\n ))}\n </View>\n ) : null}\n\n {body.length > 0 ? (\n <Text\n style={[\n styles.body,\n {\n color: isDeleted ? theme.colors.ink3 : textColor,\n fontFamily: theme.type.fontBody,\n fontSize: theme.type.bodySize,\n lineHeight: theme.type.lineHeight,\n fontStyle: isDeleted ? 'italic' : 'normal',\n },\n ]}\n >\n {isDeleted ? 'Message deleted' : truncated}\n </Text>\n ) : null}\n\n {maxBodyLength > 0 && body.length > maxBodyLength ? (\n <Pressable onPress={() => setExpanded((e) => !e)}>\n <Text\n style={[\n styles.readMore,\n { color: isSelf ? theme.colors.onBrand : theme.colors.brand },\n ]}\n >\n {expanded ? 'Show less' : 'Read more'}\n </Text>\n </Pressable>\n ) : null}\n\n <View style={styles.metaRow}>\n {isEdited ? (\n <Text\n style={[styles.meta, { color: isSelf ? theme.colors.onBrand : theme.colors.ink3 }]}\n >\n edited ·{' '}\n </Text>\n ) : null}\n <Text style={[styles.meta, { color: isSelf ? theme.colors.onBrand : theme.colors.ink3 }]}>\n {time}\n </Text>\n {isSelf && readState ? (\n <View style={{ marginLeft: 4 }}>\n <PoolseIcon\n name={readState === 'read' ? 'check-double' : 'check'}\n size={12}\n color={theme.colors.onBrand}\n />\n </View>\n ) : null}\n </View>\n\n {actionsTrigger ? <View style={styles.actionsSlot}>{actionsTrigger}</View> : null}\n </View>\n </View>\n );\n}\n\nfunction QuotedCard({\n quoted,\n isSelf,\n labelFor,\n onPress,\n}: {\n quoted: QuotedMessagePreview;\n isSelf: boolean;\n labelFor?: (externalId: string) => string;\n onPress?: () => void;\n}) {\n const theme = usePoolseTheme();\n const senderName = quoted.sender_external_id\n ? (labelFor?.(quoted.sender_external_id) ?? quoted.sender_external_id)\n : 'Unknown';\n const bg = isSelf ? 'rgba(255,255,255,0.18)' : theme.colors.surface2;\n const accent = isSelf ? theme.colors.onBrand : theme.colors.brand;\n const txt = isSelf ? theme.colors.onBrand : theme.colors.ink;\n return (\n <Pressable\n onPress={onPress}\n disabled={!onPress}\n style={[\n styles.quoted,\n {\n backgroundColor: bg,\n borderLeftColor: accent,\n },\n ]}\n >\n <Text style={[styles.quotedSender, { color: accent }]}>{senderName}</Text>\n <Text style={[styles.quotedBody, { color: txt }]} numberOfLines={2}>\n {quoted.body ?? '…'}\n </Text>\n </Pressable>\n );\n}\n\nfunction isImageContentType(ct: string | null | undefined): boolean {\n if (!ct) return false;\n return ct.startsWith('image/');\n}\n\nfunction formatTime(iso: string): string {\n try {\n const d = new Date(iso);\n return d.toLocaleTimeString([], { hour: 'numeric', minute: '2-digit' });\n } catch {\n return '';\n }\n}\n\nconst styles = StyleSheet.create({\n wrap: {\n marginBottom: 4,\n },\n bubble: {\n position: 'relative',\n },\n senderName: {\n fontSize: 12,\n fontWeight: '600',\n marginBottom: 2,\n },\n body: {\n flexShrink: 1,\n },\n readMore: {\n fontSize: 12,\n fontWeight: '600',\n marginTop: 4,\n },\n metaRow: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'flex-end',\n marginTop: 4,\n },\n meta: {\n fontSize: 10,\n opacity: 0.7,\n },\n actionsSlot: {\n position: 'absolute',\n top: 4,\n right: 4,\n },\n quoted: {\n borderLeftWidth: 3,\n paddingLeft: 8,\n paddingVertical: 4,\n paddingRight: 6,\n marginBottom: 6,\n borderRadius: 4,\n },\n quotedSender: {\n fontSize: 12,\n fontWeight: '600',\n marginBottom: 2,\n },\n quotedBody: {\n fontSize: 12,\n opacity: 0.85,\n },\n});\n","import { Pressable, StyleSheet, Text, View } from 'react-native';\nimport type { Message, Uuid } from '@poolse/sdk';\nimport { useState, type ReactNode } from 'react';\n\nimport { Avatar } from './primitives/Avatar.js';\nimport { EditableMessageBubble } from './EditableMessageBubble.js';\nimport { MessageActions } from './MessageActions.js';\nimport { MessageBubble, type BubbleGroupPosition } from './MessageBubble.js';\nimport { PoolseIcon } from './primitives/PoolseIcon.js';\nimport { usePoolseTheme } from './theme/PoolseTheme.js';\n\nexport interface MessageRowProps {\n msg: Message;\n meId: string | null;\n\n // Feature toggles — same set as ConversationView's, but per-row.\n reactions?: boolean;\n attachments?: boolean;\n actions?: boolean;\n /** Pass false in ThreadView since nested threads aren't a thing in v1. */\n threads?: boolean;\n /** WhatsApp-style quote-reply. Defaults true on ConversationView. */\n quotations?: boolean;\n\n readState?: 'sent' | 'read';\n\n editing?: boolean;\n onStartEdit?: () => void;\n onCancelEdit?: () => void;\n onSaveEdit?: (body: string) => Promise<unknown> | void;\n onDelete?: () => void;\n onOpenThread?: () => void;\n onQuote?: () => void;\n labelFor?: (externalId: string) => string;\n onQuotedClick?: (quotedMessageId: Uuid) => void;\n groupPosition?: BubbleGroupPosition;\n maxBodyLength?: number;\n /** Show a colored sender label above other-side bubbles. */\n showSenderName?: boolean;\n /** Render an avatar to the LEFT of other-side bubbles. */\n showAvatar?: boolean;\n /** Avatar resolver — same signature as `<MemberList avatarFor>`. */\n avatarFor?: (externalId: string) => string | null;\n}\n\nexport function MessageRow({\n msg,\n meId,\n reactions = true,\n attachments = true,\n actions = true,\n threads = true,\n quotations = true,\n readState,\n editing = false,\n onStartEdit,\n onCancelEdit,\n onSaveEdit,\n onDelete,\n onOpenThread,\n onQuote,\n labelFor,\n onQuotedClick,\n groupPosition = 'standalone',\n maxBodyLength = 0,\n showSenderName = false,\n showAvatar = false,\n avatarFor,\n}: MessageRowProps) {\n const theme = usePoolseTheme();\n const isSelf = meId !== null && msg.sender_id === meId;\n const [actionsOpen, setActionsOpen] = useState(false);\n\n const showAvatarSlot = showAvatar && !isSelf;\n const showAvatarRender =\n showAvatarSlot && (groupPosition === 'last' || groupPosition === 'standalone');\n const avatarUrl = avatarFor && msg.sender_external_id ? avatarFor(msg.sender_external_id) : null;\n const senderLabel =\n msg.sender_external_id && labelFor\n ? labelFor(msg.sender_external_id)\n : (msg.sender_external_id ?? null);\n\n return (\n <View style={[styles.row, { alignSelf: isSelf ? 'flex-end' : 'flex-start' }]}>\n {showAvatarSlot ? (\n <View style={styles.avatarSlot}>\n {showAvatarRender ? (\n <Avatar\n src={avatarUrl ?? null}\n name={senderLabel}\n seed={msg.sender_external_id ?? null}\n size=\"sm\"\n />\n ) : null}\n </View>\n ) : null}\n\n <View style={styles.bubbleCol}>\n <Pressable\n onLongPress={() => actions && setActionsOpen(true)}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Message actions\"\n >\n {editing ? (\n <EditableMessageBubble\n message={msg}\n currentUserId={meId}\n onCancel={onCancelEdit ?? (() => undefined)}\n onSave={onSaveEdit ?? (() => undefined)}\n />\n ) : (\n <MessageBubble\n message={msg}\n currentUserId={meId}\n {...(readState ? { readState } : {})}\n {...(labelFor ? { labelFor } : {})}\n {...(onQuotedClick ? { onQuotedClick } : {})}\n groupPosition={groupPosition}\n maxBodyLength={maxBodyLength}\n showSenderName={showSenderName}\n showAttachments={attachments}\n actionsTrigger={\n actions ? (\n <Pressable onPress={() => setActionsOpen(true)} hitSlop={8}>\n <PoolseIcon\n name=\"chevron-down\"\n size={14}\n color={isSelf ? theme.colors.onBrand : theme.colors.ink3}\n />\n </Pressable>\n ) : null\n }\n />\n )}\n </Pressable>\n\n {threads && (msg.reply_count ?? 0) > 0 && onOpenThread ? (\n <Pressable onPress={onOpenThread} style={styles.threadPill}>\n <Text style={[styles.threadPillText, { color: theme.colors.brand }]}>\n 💬 {msg.reply_count} {msg.reply_count === 1 ? 'reply' : 'replies'}\n </Text>\n </Pressable>\n ) : null}\n\n {reactions && msg.reactions && Object.keys(msg.reactions).length > 0 ? (\n <View style={styles.reactionsRow}>\n {Object.entries(msg.reactions).map(([emoji, userIds]) => (\n <View\n key={emoji}\n style={[\n styles.reactionChip,\n {\n backgroundColor: theme.colors.surface2,\n borderColor: theme.colors.border,\n },\n ]}\n >\n <Text style={styles.reactionEmoji}>{emoji}</Text>\n <Text style={[styles.reactionCount, { color: theme.colors.ink2 }]}>\n {Array.isArray(userIds) ? userIds.length : 0}\n </Text>\n </View>\n ))}\n </View>\n ) : null}\n </View>\n\n {actions && actionsOpen ? (\n <MessageActions\n visible={actionsOpen}\n onClose={() => setActionsOpen(false)}\n isSelf={isSelf}\n {...(onStartEdit\n ? {\n onEdit: () => {\n setActionsOpen(false);\n onStartEdit();\n },\n }\n : {})}\n {...(onDelete\n ? {\n onDelete: () => {\n setActionsOpen(false);\n onDelete();\n },\n }\n : {})}\n {...(onOpenThread\n ? {\n onReplyInThread: () => {\n setActionsOpen(false);\n onOpenThread();\n },\n }\n : {})}\n {...(quotations && onQuote\n ? {\n onQuote: () => {\n setActionsOpen(false);\n onQuote();\n },\n }\n : {})}\n />\n ) : null}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n row: {\n flexDirection: 'row',\n alignItems: 'flex-end',\n marginVertical: 2,\n paddingHorizontal: 8,\n maxWidth: '95%',\n },\n avatarSlot: {\n width: 36,\n marginRight: 6,\n },\n bubbleCol: {\n flexShrink: 1,\n },\n threadPill: {\n alignSelf: 'flex-start',\n marginTop: 2,\n paddingHorizontal: 8,\n paddingVertical: 3,\n },\n threadPillText: {\n fontSize: 11,\n fontWeight: '600',\n },\n reactionsRow: {\n flexDirection: 'row',\n flexWrap: 'wrap',\n marginTop: 4,\n gap: 4,\n },\n reactionChip: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingHorizontal: 6,\n paddingVertical: 2,\n borderRadius: 12,\n borderWidth: StyleSheet.hairlineWidth,\n },\n reactionEmoji: {\n fontSize: 13,\n marginRight: 3,\n },\n reactionCount: {\n fontSize: 11,\n fontWeight: '600',\n },\n});\n","import type { Message, Uuid } from '@poolse/sdk';\nimport { useMe, useThread } from '@poolse/react';\nimport { Modal, Pressable, StyleSheet, Text, View } from 'react-native';\n\nimport { MessageBubble } from './MessageBubble.js';\nimport { MessageComposer } from './MessageComposer.js';\nimport { MessageList } from './MessageList.js';\nimport { PoolseIcon } from './primitives/PoolseIcon.js';\nimport { usePoolseTheme } from './theme/PoolseTheme.js';\n\nexport interface ThreadViewProps {\n visible: boolean;\n onClose: () => void;\n conversationId: Uuid;\n rootMessage: Message;\n labelFor?: (externalId: string) => string;\n}\n\n/**\n * Modal screen for thread replies. Mirrors the web `<ThreadView>` —\n * root message preview at the top, oldest-first reply list, composer\n * at the bottom.\n */\nexport function ThreadView({\n visible,\n onClose,\n conversationId,\n rootMessage,\n labelFor,\n}: ThreadViewProps) {\n const theme = usePoolseTheme();\n const { me } = useMe();\n const meId = me?.id ?? null;\n const { replies, sendReply, loadMore, hasMore } = useThread(conversationId, rootMessage.id);\n\n return (\n <Modal visible={visible} animationType=\"slide\" onRequestClose={onClose}>\n <View style={[styles.root, { backgroundColor: theme.colors.paper }]}>\n <View\n style={[\n styles.header,\n {\n borderBottomColor: theme.colors.border,\n backgroundColor: theme.colors.surface,\n },\n ]}\n >\n <Pressable onPress={onClose} hitSlop={8} style={styles.closeBtn}>\n <PoolseIcon name=\"close\" size={18} color={theme.colors.ink} />\n </Pressable>\n <Text\n style={[styles.title, { color: theme.colors.ink, fontFamily: theme.type.fontDisplay }]}\n >\n Thread\n </Text>\n </View>\n\n <View style={[styles.rootPreview, { backgroundColor: theme.colors.surface2 }]}>\n <MessageBubble\n message={rootMessage}\n currentUserId={meId}\n {...(labelFor ? { labelFor } : {})}\n />\n </View>\n\n <View style={{ flex: 1 }}>\n <MessageList\n messages={replies}\n hasMore={hasMore}\n onLoadMore={loadMore}\n renderItem={(msg) => (\n <View key={msg.id} style={{ paddingHorizontal: 8 }}>\n <MessageBubble\n message={msg}\n currentUserId={meId}\n {...(labelFor ? { labelFor } : {})}\n />\n </View>\n )}\n />\n </View>\n\n <MessageComposer\n onSend={async (body, opts) => {\n await sendReply({ body, ...opts });\n }}\n placeholder=\"Reply to thread…\"\n />\n </View>\n </Modal>\n );\n}\n\nconst styles = StyleSheet.create({\n root: {\n flex: 1,\n },\n header: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingHorizontal: 12,\n paddingVertical: 12,\n borderBottomWidth: StyleSheet.hairlineWidth,\n gap: 8,\n },\n closeBtn: {\n padding: 6,\n },\n title: {\n fontSize: 16,\n fontWeight: '600',\n },\n rootPreview: {\n paddingVertical: 8,\n paddingHorizontal: 8,\n },\n});\n","import { Text } from 'react-native';\nimport { useUser } from '@poolse/react';\n\nimport { usePoolseTheme } from './theme/PoolseTheme.js';\n\nexport interface UserNameProps {\n /** The user's external_id. Pass null to render the fallback. */\n externalId: string | null | undefined;\n /** Optional fallback when the resolver returns nothing. Defaults to the externalId itself. */\n fallback?: string;\n /** Caller-supplied label override; if it returns a string, it wins. */\n labelFor?: (externalId: string) => string;\n}\n\n/**\n * Display name for a user, looked up via the SDK's `userResolver`\n * with caller-overridable + fallback fallbacks. Renders a `<Text>`.\n */\nexport function UserName({ externalId, fallback, labelFor }: UserNameProps) {\n const theme = usePoolseTheme();\n const name = useDisplayName(externalId, labelFor) ?? fallback ?? externalId ?? '';\n return <Text style={{ color: theme.colors.ink, fontFamily: theme.type.fontBody }}>{name}</Text>;\n}\n\n/**\n * Resolves a user's display name via the 3-tier chain:\n * 1. `labelFor(externalId)` — caller-supplied override\n * 2. SDK `userResolver` (memoized via `useUser`)\n * 3. The externalId itself (so something always renders)\n */\nexport function useDisplayName(\n externalId: string | null | undefined,\n labelFor?: (externalId: string) => string,\n): string {\n const resolved = useUser(externalId ?? null);\n if (!externalId) return '';\n if (labelFor) {\n const override = labelFor(externalId);\n if (override) return override;\n }\n return resolved.profile?.displayName ?? externalId;\n}\n","import { useEffect, useRef } from 'react';\nimport { Animated, StyleSheet, Text, View, Easing } from 'react-native';\n\nimport { useDisplayName } from './UserName.js';\nimport { usePoolseTheme } from './theme/PoolseTheme.js';\n\nexport interface TypingIndicatorProps {\n /** Set of `external_id`s currently typing — what `useTyping` returns. */\n typing: Set<string>;\n /**\n * Resolves an `external_id` to a display label. Defaults to the\n * SDK's `userResolver` (and falls back to the external_id itself\n * when the resolver isn't configured).\n */\n labelFor?: (externalId: string) => string;\n}\n\n/**\n * Three animated dots + an inline \"X is typing\" label. Renders a\n * zero-height row when nobody is typing so the list doesn't jump.\n */\nexport function TypingIndicator({ typing, labelFor }: TypingIndicatorProps) {\n const ids = Array.from(typing);\n const isTyping = ids.length > 0;\n\n if (!isTyping) return <View style={{ height: 0 }} />;\n\n return (\n <View style={styles.row}>\n <TypingDots />\n <TypingLabel ids={ids} {...(labelFor ? { labelFor } : {})} />\n </View>\n );\n}\n\nfunction TypingDots() {\n const theme = usePoolseTheme();\n const a = useRef(new Animated.Value(0)).current;\n const b = useRef(new Animated.Value(0)).current;\n const c = useRef(new Animated.Value(0)).current;\n\n useEffect(() => {\n const loop = (val: Animated.Value, delay: number) =>\n Animated.loop(\n Animated.sequence([\n Animated.delay(delay),\n Animated.timing(val, {\n toValue: 1,\n duration: 400,\n easing: Easing.inOut(Easing.ease),\n useNativeDriver: true,\n }),\n Animated.timing(val, {\n toValue: 0,\n duration: 400,\n easing: Easing.inOut(Easing.ease),\n useNativeDriver: true,\n }),\n ]),\n );\n const animations = [loop(a, 0), loop(b, 150), loop(c, 300)];\n animations.forEach((anim) => anim.start());\n return () => animations.forEach((anim) => anim.stop());\n }, [a, b, c]);\n\n const dot = (val: Animated.Value) => ({\n width: 6,\n height: 6,\n borderRadius: 3,\n backgroundColor: theme.colors.ink3,\n marginHorizontal: 2,\n transform: [\n {\n translateY: val.interpolate({ inputRange: [0, 1], outputRange: [0, -3] }),\n },\n ],\n opacity: val.interpolate({ inputRange: [0, 1], outputRange: [0.5, 1] }),\n });\n\n return (\n <View style={styles.dotsWrap}>\n <Animated.View style={dot(a)} />\n <Animated.View style={dot(b)} />\n <Animated.View style={dot(c)} />\n </View>\n );\n}\n\nfunction TypingLabel({\n ids,\n labelFor,\n}: {\n ids: string[];\n labelFor?: (externalId: string) => string;\n}) {\n const theme = usePoolseTheme();\n const id1 = ids[0] ?? null;\n const id2 = ids[1] ?? null;\n const name1 = useDisplayName(id1, labelFor);\n const name2 = useDisplayName(id2, labelFor);\n\n const text =\n ids.length === 1\n ? `${name1} is typing`\n : ids.length === 2\n ? `${name1} and ${name2} are typing`\n : `${ids.length} people are typing`;\n\n return (\n <Text style={[styles.label, { color: theme.colors.ink2, fontFamily: theme.type.fontBody }]}>\n {text}\n </Text>\n );\n}\n\nconst styles = StyleSheet.create({\n row: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingHorizontal: 12,\n paddingVertical: 6,\n },\n dotsWrap: {\n flexDirection: 'row',\n alignItems: 'flex-end',\n marginRight: 8,\n height: 12,\n },\n label: {\n fontSize: 12,\n },\n});\n","import type { Message, Uuid } from '@poolse/sdk';\nimport { useMe, useMembers, useMessages, useTyping } from '@poolse/react';\nimport { useCallback, useMemo, useState, type ReactElement } from 'react';\nimport { StyleSheet, View } from 'react-native';\n\nimport { AttachmentPicker } from './AttachmentPicker.js';\nimport { MentionInput } from './MentionInput.js';\nimport { MessageComposer } from './MessageComposer.js';\nimport { MessageList } from './MessageList.js';\nimport { MessageRow } from './MessageRow.js';\nimport { ThreadView } from './ThreadView.js';\nimport { TypingIndicator } from './TypingIndicator.js';\nimport { usePoolseTheme } from './theme/PoolseTheme.js';\n\nexport interface ConversationViewProps {\n conversationId: Uuid;\n emptyState?: ReactElement | string;\n renderMessage?: (msg: Message, currentUserId: string | null) => ReactElement;\n labelFor?: (externalId: string) => string;\n avatarFor?: (externalId: string) => string | null;\n\n // Feature toggles — all default ON, identical names + defaults to web.\n reactions?: boolean;\n mentions?: boolean;\n attachments?: boolean;\n actions?: boolean;\n threads?: boolean;\n quotations?: boolean;\n readReceipts?: boolean;\n maxBodyLength?: number;\n\n /** Show sender labels in group chats. `auto` (default), `always`, `never`. */\n senderLabels?: 'auto' | 'always' | 'never';\n /** Show avatars to the left of other-side bubbles in group chats. Same semantics. */\n avatars?: 'auto' | 'always' | 'never';\n\n /** Fires when auto-mark-read commits — clear sidebar badges via this. */\n onMarkedRead?: (conversationId: string) => void;\n}\n\nexport function ConversationView({\n conversationId,\n emptyState,\n renderMessage,\n labelFor,\n avatarFor,\n reactions = true,\n mentions = true,\n attachments = true,\n actions = true,\n threads = true,\n quotations = true,\n readReceipts = true,\n maxBodyLength = 200,\n senderLabels = 'auto',\n avatars = 'auto',\n onMarkedRead,\n}: ConversationViewProps) {\n const theme = usePoolseTheme();\n const { me } = useMe();\n const meId = me?.id ?? null;\n\n const {\n messages,\n loading,\n hasMore,\n loadMore,\n send,\n edit,\n delete: deleteMsg,\n } = useMessages(conversationId);\n const { typing, signalTyping } = useTyping(conversationId);\n\n const wantsMembers = mentions || senderLabels === 'auto' || avatars === 'auto';\n const { members } = useMembers(wantsMembers ? conversationId : '');\n const isGroupChat = members.length > 2;\n const showSenderLabels = senderLabels === 'always' || (senderLabels === 'auto' && isGroupChat);\n const showAvatars = avatars === 'always' || (avatars === 'auto' && isGroupChat);\n\n const [replyingTo, setReplyingTo] = useState<Message | null>(null);\n const [editingId, setEditingId] = useState<string | null>(null);\n const [threadRoot, setThreadRoot] = useState<Message | null>(null);\n const [pickerOpen, setPickerOpen] = useState(false);\n\n const renderItem = useCallback(\n (msg: Message): ReactElement => {\n if (renderMessage) return <>{renderMessage(msg, meId)}</>;\n const readState: 'sent' | 'read' | undefined =\n readReceipts && meId !== null && msg.sender_id === meId\n ? readStateForMessage(msg, members, meId)\n : undefined;\n return (\n <MessageRow\n msg={msg}\n meId={meId}\n reactions={reactions}\n attachments={attachments}\n actions={actions}\n threads={threads}\n quotations={quotations}\n {...(readState ? { readState } : {})}\n editing={editingId === msg.id}\n onStartEdit={() => setEditingId(msg.id)}\n onCancelEdit={() => setEditingId(null)}\n onSaveEdit={async (body) => {\n await edit(msg.id, body);\n setEditingId(null);\n }}\n onDelete={() => deleteMsg(msg.id)}\n {...(threads ? { onOpenThread: () => setThreadRoot(msg) } : {})}\n {...(quotations ? { onQuote: () => setReplyingTo(msg) } : {})}\n {...(labelFor ? { labelFor } : {})}\n {...(avatarFor ? { avatarFor } : {})}\n showSenderName={showSenderLabels}\n showAvatar={showAvatars}\n maxBodyLength={maxBodyLength}\n />\n );\n },\n [\n renderMessage,\n meId,\n readReceipts,\n members,\n reactions,\n attachments,\n actions,\n threads,\n quotations,\n editingId,\n edit,\n deleteMsg,\n labelFor,\n avatarFor,\n showSenderLabels,\n showAvatars,\n maxBodyLength,\n ],\n );\n\n const ComposerBase = mentions ? MentionInput : MessageComposer;\n const composerProps = useMemo(\n () => ({\n onSend: async (\n body: string,\n opts?: { quoted_message_id?: Uuid; attachment_ids?: Uuid[]; mentions?: Uuid[] },\n ) => {\n await send({ body, ...opts });\n setReplyingTo(null);\n },\n onTyping: signalTyping,\n ...(attachments ? { onAttachPress: () => setPickerOpen(true) } : {}),\n ...(replyingTo ? { replyingTo } : {}),\n onCancelReply: () => setReplyingTo(null),\n ...(labelFor ? { labelFor } : {}),\n attachments,\n }),\n [send, signalTyping, attachments, replyingTo, labelFor],\n );\n\n return (\n <View style={[styles.root, { backgroundColor: theme.colors.paper }]}>\n <View style={styles.listWrap}>\n <MessageList\n messages={messages}\n loading={loading}\n hasMore={hasMore}\n onLoadMore={loadMore}\n renderItem={renderItem}\n ListHeader={<TypingIndicator typing={typing} {...(labelFor ? { labelFor } : {})} />}\n {...(emptyState !== undefined ? { emptyState } : {})}\n />\n </View>\n\n {mentions ? (\n <MentionInput conversationId={conversationId} {...composerProps} />\n ) : (\n <MessageComposer {...composerProps} />\n )}\n\n {attachments ? (\n <AttachmentPicker visible={pickerOpen} onClose={() => setPickerOpen(false)} />\n ) : null}\n\n {threads && threadRoot ? (\n <ThreadView\n visible\n onClose={() => setThreadRoot(null)}\n conversationId={conversationId}\n rootMessage={threadRoot}\n {...(labelFor ? { labelFor } : {})}\n />\n ) : null}\n </View>\n );\n}\n\nfunction readStateForMessage(\n msg: Message,\n members: ReadonlyArray<{ user_id: string; last_read_message_id: string | null }>,\n meId: string,\n): 'sent' | 'read' {\n const otherMembers = members.filter((m) => m.user_id !== meId);\n if (otherMembers.length === 0) return 'sent';\n const anyRead = otherMembers.some(\n (m) => m.last_read_message_id !== null && msg.id !== null && m.last_read_message_id >= msg.id,\n );\n return anyRead ? 'read' : 'sent';\n}\n\nconst styles = StyleSheet.create({\n root: {\n flex: 1,\n },\n listWrap: {\n flex: 1,\n },\n});\n","import type { Conversation, Uuid } from '@poolse/sdk';\nimport { useConversations } from '@poolse/react';\nimport { type ReactNode } from 'react';\nimport { ActivityIndicator, FlatList, Pressable, StyleSheet, Text, View } from 'react-native';\n\nimport { Avatar } from './primitives/Avatar.js';\nimport { usePoolseTheme } from './theme/PoolseTheme.js';\n\nexport interface ConversationListProps {\n selectedId?: string | null;\n onSelect?: (conv: Conversation) => void;\n /** Optional override for each row's rendering. */\n renderItem?: (conv: Conversation, selected: boolean) => ReactNode;\n /** Custom empty state when there are no conversations. */\n emptyState?: ReactNode | string;\n /** Controlled-mode: skip `useConversations()` and render from these. */\n conversations?: Conversation[];\n loading?: boolean;\n error?: Error | null;\n /** Per-conversation unread counts rendered as a Pulse Coral pill. */\n unreadCounts?: Record<Uuid, number>;\n}\n\nexport function ConversationList({\n selectedId,\n onSelect,\n renderItem,\n emptyState,\n conversations: controlled,\n loading: controlledLoading,\n error: controlledError,\n unreadCounts,\n}: ConversationListProps) {\n const theme = usePoolseTheme();\n const auto = useConversations();\n const isControlled = controlled !== undefined;\n const conversations = isControlled ? controlled : auto.conversations;\n const loading = isControlled ? (controlledLoading ?? false) : auto.loading;\n const error = isControlled ? (controlledError ?? null) : auto.error;\n const counts = unreadCounts ?? (isControlled ? undefined : auto.unreadCounts);\n\n if (loading && conversations.length === 0) {\n return (\n <View style={[styles.placeholder, { backgroundColor: theme.colors.paper }]}>\n <ActivityIndicator color={theme.colors.brand} />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.placeholder, { backgroundColor: theme.colors.paper }]}>\n <Text style={{ color: theme.colors.error, fontFamily: theme.type.fontBody }}>\n Failed to load conversations.\n </Text>\n </View>\n );\n }\n\n if (conversations.length === 0) {\n return (\n <View style={[styles.placeholder, { backgroundColor: theme.colors.paper }]}>\n {typeof emptyState === 'string' || emptyState == null ? (\n <Text style={{ color: theme.colors.ink3, fontFamily: theme.type.fontBody }}>\n {(emptyState as string) ?? 'No conversations yet.'}\n </Text>\n ) : (\n emptyState\n )}\n </View>\n );\n }\n\n return (\n <FlatList\n data={conversations}\n keyExtractor={(c) => c.id}\n style={{ backgroundColor: theme.colors.paper }}\n renderItem={({ item }) => {\n const selected = selectedId === item.id;\n if (renderItem) {\n return <>{renderItem(item, selected)}</>;\n }\n const unread = counts?.[item.id] ?? 0;\n return (\n <Pressable\n onPress={() => onSelect?.(item)}\n style={[\n styles.row,\n {\n backgroundColor: selected ? theme.colors.surface2 : 'transparent',\n },\n ]}\n >\n <Avatar src={null} name={item.name ?? null} seed={item.id} size=\"md\" />\n <View style={styles.body}>\n <Text\n style={[styles.name, { color: theme.colors.ink, fontFamily: theme.type.fontBody }]}\n numberOfLines={1}\n >\n {item.name ?? 'Untitled conversation'}\n </Text>\n {item.last_message_at ? (\n <Text style={[styles.preview, { color: theme.colors.ink3 }]} numberOfLines={1}>\n {formatRelative(item.last_message_at)}\n </Text>\n ) : null}\n </View>\n {unread > 0 ? (\n <View style={[styles.unreadPill, { backgroundColor: theme.colors.unreadPill }]}>\n <Text style={[styles.unreadText, { color: theme.colors.unreadPillText }]}>\n {unread > 99 ? '99+' : String(unread)}\n </Text>\n </View>\n ) : null}\n </Pressable>\n );\n }}\n />\n );\n}\n\nfunction formatRelative(iso: string): string {\n try {\n const d = new Date(iso);\n const now = Date.now();\n const diff = now - d.getTime();\n if (diff < 60_000) return 'just now';\n if (diff < 3600_000) return `${Math.floor(diff / 60_000)}m`;\n if (diff < 86_400_000) return `${Math.floor(diff / 3600_000)}h`;\n return `${Math.floor(diff / 86_400_000)}d`;\n } catch {\n return '';\n }\n}\n\nconst styles = StyleSheet.create({\n placeholder: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n padding: 24,\n },\n row: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingHorizontal: 12,\n paddingVertical: 10,\n gap: 10,\n },\n body: {\n flex: 1,\n gap: 2,\n },\n name: {\n fontSize: 15,\n fontWeight: '600',\n },\n preview: {\n fontSize: 12,\n },\n unreadPill: {\n minWidth: 22,\n height: 22,\n borderRadius: 11,\n paddingHorizontal: 6,\n alignItems: 'center',\n justifyContent: 'center',\n },\n unreadText: {\n fontSize: 11,\n fontWeight: '700',\n },\n});\n","import type { MemberRole, Membership, Uuid } from '@poolse/sdk';\nimport { useMembers, usePresence } from '@poolse/react';\nimport { type ReactNode } from 'react';\nimport { ActivityIndicator, FlatList, Pressable, StyleSheet, Text, View } from 'react-native';\n\nimport { Avatar } from './primitives/Avatar.js';\nimport { PoolseIcon } from './primitives/PoolseIcon.js';\nimport { useDisplayName } from './UserName.js';\nimport { usePoolseTheme } from './theme/PoolseTheme.js';\n\nexport interface MemberListProps {\n conversationId: Uuid;\n labelFor?: (externalId: string) => string;\n avatarFor?: (externalId: string) => string | null;\n onlineExternalIds?: Set<string>;\n canRemove?: (m: Membership) => boolean;\n renderItem?: (m: Membership) => ReactNode;\n emptyState?: ReactNode | string;\n}\n\nexport function MemberList({\n conversationId,\n labelFor,\n avatarFor,\n onlineExternalIds,\n canRemove,\n renderItem,\n emptyState,\n}: MemberListProps) {\n const theme = usePoolseTheme();\n const { members, loading, error, removeMember } = useMembers(conversationId);\n const { online: presenceOnline } = usePresence(\n onlineExternalIds === undefined ? conversationId : '',\n );\n const effectiveOnline = onlineExternalIds ?? presenceOnline;\n\n if (loading && members.length === 0) {\n return (\n <View style={[styles.placeholder, { backgroundColor: theme.colors.paper }]}>\n <ActivityIndicator color={theme.colors.brand} />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.placeholder, { backgroundColor: theme.colors.paper }]}>\n <Text style={{ color: theme.colors.error, fontFamily: theme.type.fontBody }}>\n Failed to load members.\n </Text>\n {error.message ? (\n <Text style={[styles.errorDetail, { color: theme.colors.ink3 }]}>{error.message}</Text>\n ) : null}\n </View>\n );\n }\n\n if (members.length === 0) {\n return (\n <View style={[styles.placeholder, { backgroundColor: theme.colors.paper }]}>\n {typeof emptyState === 'string' || emptyState == null ? (\n <Text style={{ color: theme.colors.ink3, fontFamily: theme.type.fontBody }}>\n {(emptyState as string) ?? 'No members.'}\n </Text>\n ) : (\n emptyState\n )}\n </View>\n );\n }\n\n return (\n <FlatList\n data={members}\n keyExtractor={(m) => m.user_id}\n style={{ backgroundColor: theme.colors.paper }}\n renderItem={({ item }) => {\n if (renderItem) return <>{renderItem(item)}</>;\n const name = labelFor?.(item.external_id) ?? item.external_id;\n const avatarUrl = avatarFor?.(item.external_id) ?? null;\n const isOnline = effectiveOnline.has(item.external_id);\n const showRemove = canRemove?.(item) ?? false;\n return (\n <MemberRow\n name={name}\n externalId={item.external_id}\n avatarUrl={avatarUrl}\n role={item.role}\n online={isOnline}\n {...(showRemove ? { onRemove: () => removeMember(item.external_id) } : {})}\n />\n );\n }}\n />\n );\n}\n\nfunction MemberRow({\n name,\n externalId,\n avatarUrl,\n role,\n online,\n onRemove,\n}: {\n name: string;\n externalId: string;\n avatarUrl: string | null;\n role: MemberRole;\n online: boolean;\n onRemove?: () => void;\n}) {\n const theme = usePoolseTheme();\n const displayName = useDisplayName(externalId) || name;\n return (\n <View style={styles.row}>\n <Avatar src={avatarUrl} name={displayName} seed={externalId} online={online} size=\"md\" />\n <View style={styles.body}>\n <Text\n style={[styles.name, { color: theme.colors.ink, fontFamily: theme.type.fontBody }]}\n numberOfLines={1}\n >\n {displayName}\n </Text>\n <Text style={[styles.role, { color: theme.colors.ink3 }]}>{role}</Text>\n </View>\n {onRemove ? (\n <Pressable onPress={onRemove} hitSlop={8} style={styles.removeBtn}>\n <PoolseIcon name=\"close\" size={16} color={theme.colors.ink2} />\n </Pressable>\n ) : null}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n placeholder: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n padding: 24,\n },\n errorDetail: {\n marginTop: 6,\n fontSize: 11,\n },\n row: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingHorizontal: 12,\n paddingVertical: 8,\n gap: 10,\n },\n body: {\n flex: 1,\n gap: 1,\n },\n name: {\n fontSize: 14,\n fontWeight: '500',\n },\n role: {\n fontSize: 11,\n textTransform: 'capitalize',\n },\n removeBtn: {\n padding: 6,\n },\n});\n","import type { Uuid } from '@poolse/sdk';\nimport { useReactions } from '@poolse/react';\nimport { Modal, Pressable, StyleSheet, Text, View } from 'react-native';\n\nimport { usePoolseTheme } from './theme/PoolseTheme.js';\n\nconst DEFAULT_EMOJIS = ['👍', '❤️', '😂', '🎉', '🙏', '🔥'];\n\nexport interface ReactionStripProps {\n messageId: Uuid;\n conversationId: Uuid;\n meId: string | null;\n /** Seed map from a known message (e.g. `useMessages`). */\n initialReactions?: Record<string, Uuid[]>;\n}\n\nexport function ReactionStrip({\n messageId,\n conversationId,\n meId,\n initialReactions,\n}: ReactionStripProps) {\n const theme = usePoolseTheme();\n const { reactions, addReaction, removeReaction } = useReactions(messageId, {\n conversationId,\n currentUserId: meId,\n ...(initialReactions ? { initialReactions } : {}),\n });\n const entries = Object.entries(reactions);\n if (entries.length === 0) return null;\n\n return (\n <View style={styles.strip}>\n {entries.map(([emoji, userIds]) => {\n const userArr = Array.isArray(userIds) ? userIds : [];\n const meReacted = meId !== null && userArr.includes(meId);\n return (\n <Pressable\n key={emoji}\n onPress={() => (meReacted ? removeReaction(emoji) : addReaction(emoji))}\n style={[\n styles.chip,\n {\n backgroundColor: meReacted ? theme.colors.brandSoft : theme.colors.surface2,\n borderColor: meReacted ? theme.colors.brand : theme.colors.border,\n },\n ]}\n >\n <Text style={styles.emoji}>{emoji}</Text>\n <Text style={[styles.count, { color: theme.colors.ink2 }]}>{userArr.length}</Text>\n </Pressable>\n );\n })}\n </View>\n );\n}\n\nexport interface ReactionPickerProps {\n visible: boolean;\n onClose: () => void;\n onPick: (emoji: string) => void;\n /** Override the default 6-emoji set. */\n emojis?: string[];\n}\n\nexport function ReactionPicker({\n visible,\n onClose,\n onPick,\n emojis = DEFAULT_EMOJIS,\n}: ReactionPickerProps) {\n const theme = usePoolseTheme();\n return (\n <Modal visible={visible} transparent animationType=\"fade\" onRequestClose={onClose}>\n <Pressable style={styles.backdrop} onPress={onClose}>\n <View\n style={[\n styles.sheet,\n {\n backgroundColor: theme.colors.surface,\n borderRadius: theme.radii.lg,\n },\n theme.shadows.lg,\n ]}\n >\n {emojis.map((emoji) => (\n <Pressable\n key={emoji}\n style={styles.emojiBtn}\n onPress={() => {\n onPick(emoji);\n onClose();\n }}\n >\n <Text style={styles.bigEmoji}>{emoji}</Text>\n </Pressable>\n ))}\n </View>\n </Pressable>\n </Modal>\n );\n}\n\nconst styles = StyleSheet.create({\n strip: {\n flexDirection: 'row',\n flexWrap: 'wrap',\n gap: 4,\n marginTop: 4,\n },\n chip: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingHorizontal: 8,\n paddingVertical: 3,\n borderRadius: 12,\n borderWidth: StyleSheet.hairlineWidth,\n gap: 4,\n },\n emoji: {\n fontSize: 14,\n },\n count: {\n fontSize: 11,\n fontWeight: '600',\n },\n backdrop: {\n flex: 1,\n backgroundColor: 'rgba(0,0,0,0.35)',\n justifyContent: 'center',\n alignItems: 'center',\n },\n sheet: {\n flexDirection: 'row',\n padding: 8,\n gap: 4,\n },\n emojiBtn: {\n paddingHorizontal: 10,\n paddingVertical: 8,\n },\n bigEmoji: {\n fontSize: 28,\n },\n});\n","import { Svg, Path, Circle, G } from 'react-native-svg';\n\nimport { usePoolseTheme } from '../theme/PoolseTheme.js';\n\nexport type PoolseLogoVariant = 'lockup' | 'mark' | 'wordmark' | 'mono';\n\nexport interface PoolseLogoProps {\n variant?: PoolseLogoVariant;\n /** Height in pixels — width is computed from the variant's aspect ratio. */\n size?: number;\n /** Mono variant accepts a color override; otherwise the theme drives fills. */\n color?: string;\n label?: string | null;\n}\n\nconst TILE_PATH = 'M50 4 C20 4 4 20 4 50 C4 80 20 96 50 96 C80 96 96 80 96 50 C96 20 80 4 50 4 Z';\nconst PULSE_PATH = 'M16 55 H34 L40 55 L47 30 L54 73 L60 55 H72';\nconst WORDMARK_P_PATH =\n 'M62 -169V258V528H194L196 378L214 376Q223 432 246.0 469.0Q269 506 305.5 524.0Q342 542 389 542Q459 542 509.5 508.0Q560 474 587.0 411.0Q614 348 614 260Q614 182 590.5 120.0Q567 58 519.5 22.0Q472 -14 399 -14Q350 -14 316.0 3.5Q282 21 258.5 55.0Q235 89 219 140H200Q206 113 211.0 85.0Q216 57 219.5 31.0Q223 5 223 -19V-169ZM340 113Q373 113 396.5 131.0Q420 149 433.0 182.0Q446 215 446 259Q446 306 432.5 339.5Q419 373 394.0 391.5Q369 410 336 410Q305 410 283.5 396.5Q262 383 248.5 361.5Q235 340 229.0 316.0Q223 292 223 271V249Q223 230 228.0 211.0Q233 192 243.0 174.5Q253 157 267.0 143.0Q281 129 299.5 121.0Q318 113 340 113Z';\nconst WORDMARK_O_PATH =\n 'M305 -14Q225 -14 163.5 17.0Q102 48 67.0 110.0Q32 172 32 265Q32 358 67.0 419.5Q102 481 164.0 511.5Q226 542 306 542Q386 542 448.0 511.0Q510 480 545.0 418.5Q580 357 580 264Q580 169 544.0 107.0Q508 45 445.5 15.5Q383 -14 305 -14ZM310 103Q346 103 370.0 119.5Q394 136 406.0 170.0Q418 204 418 254Q418 307 405.0 343.5Q392 380 366.5 399.5Q341 419 301 419Q267 419 242.5 402.5Q218 386 206.0 352.0Q194 318 194 267Q194 185 224.5 144.0Q255 103 310 103Z';\nconst WORDMARK_L_PATH = 'M62 0V720H220V0Z';\nconst WORDMARK_S_PATH =\n 'M278 -14Q225 -14 182.0 -4.5Q139 5 107.0 23.0Q75 41 54.5 66.5Q34 92 26 123L146 176Q153 159 170.5 141.5Q188 124 217.5 113.0Q247 102 289 102Q329 102 351.5 113.5Q374 125 374 147Q374 163 361.5 172.5Q349 182 324.0 189.5Q299 197 262 204Q224 212 185.0 222.5Q146 233 112.0 251.5Q78 270 57.5 300.5Q37 331 37 378Q37 427 63.0 463.5Q89 500 140.5 521.0Q192 542 266 542Q332 542 382.0 525.0Q432 508 465.5 476.5Q499 445 512 401L383 355Q378 377 362.5 393.0Q347 409 323.5 417.5Q300 426 268 426Q229 426 207.5 414.0Q186 402 186 382Q186 366 200.5 355.5Q215 345 242.0 338.0Q269 331 306 323Q345 315 383.5 304.5Q422 294 453.5 276.5Q485 259 503.5 230.5Q522 202 522 157Q522 104 494.0 65.5Q466 27 411.5 6.5Q357 -14 278 -14Z';\nconst WORDMARK_E_PATH =\n 'M313 -14Q247 -14 195.0 3.5Q143 21 106.5 55.0Q70 89 51.0 139.0Q32 189 32 254Q32 317 50.5 370.0Q69 423 103.5 461.5Q138 500 188.5 521.0Q239 542 302 542Q366 542 414.5 521.5Q463 501 494.5 461.0Q526 421 541.0 363.5Q556 306 551 232L138 229V313L459 316L402 277Q409 327 396.0 358.5Q383 390 358.0 404.5Q333 419 304 419Q269 419 242.5 400.0Q216 381 201.0 345.0Q186 309 186 257Q186 175 221.5 138.0Q257 101 312 101Q339 101 357.0 108.5Q375 116 386.5 127.5Q398 139 404.5 153.0Q411 167 415 180L555 150Q547 113 529.5 83.0Q512 53 482.5 31.0Q453 9 411.5 -2.5Q370 -14 313 -14Z';\n\nconst VARIANT_VB: Record<\n PoolseLogoVariant,\n { vb: [number, number, number, number]; aspect: number }\n> = {\n lockup: { vb: [0, 0, 454, 100], aspect: 4.54 },\n mark: { vb: [0, 0, 100, 100], aspect: 1 },\n wordmark: { vb: [0, 0, 350, 100], aspect: 3.5 },\n mono: { vb: [0, 0, 454, 100], aspect: 4.54 },\n};\n\nexport function PoolseLogo({ variant = 'lockup', size = 28, color, label }: PoolseLogoProps) {\n const theme = usePoolseTheme();\n const mono = variant === 'mono';\n const monoColor = color ?? theme.colors.ink;\n\n const tileFill = mono ? 'none' : theme.colors.brand;\n const tileStroke = mono ? monoColor : 'transparent';\n const tileStrokeWidth = mono ? 5 : 0;\n const pulseStroke = mono ? monoColor : theme.colors.onBrand;\n const pulseDotFill = mono ? monoColor : theme.colors.onBrand;\n const inkFill = mono ? monoColor : theme.colors.ink;\n const oFill = mono ? monoColor : theme.colors.brand;\n\n const { vb, aspect } = VARIANT_VB[variant];\n const width = size * aspect;\n const showMark = variant === 'lockup' || variant === 'mark' || variant === 'mono';\n const showWordmark = variant === 'lockup' || variant === 'wordmark' || variant === 'mono';\n const wordmarkOffsetX = variant === 'wordmark' ? 0 : 126;\n\n const a11y = label === null ? {} : { accessibilityLabel: label ?? 'poolse' };\n return (\n <Svg viewBox={vb.join(' ')} width={width} height={size} {...a11y}>\n {showMark ? (\n <>\n <Path d={TILE_PATH} fill={tileFill} stroke={tileStroke} strokeWidth={tileStrokeWidth} />\n <Path\n d={PULSE_PATH}\n fill=\"none\"\n stroke={pulseStroke}\n strokeWidth={9}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <Circle cx={72} cy={55} r={6.2} fill={pulseDotFill} />\n </>\n ) : null}\n {showWordmark ? (\n <G transform={`translate(${wordmarkOffsetX},85.0) scale(0.097222 -0.097222)`}>\n <Path d={WORDMARK_P_PATH} fill={inkFill} transform=\"translate(0,0)\" />\n <Path d={WORDMARK_O_PATH} fill={oFill} transform=\"translate(658,0)\" />\n <Path d={WORDMARK_O_PATH} fill={oFill} transform=\"translate(1280,0)\" />\n <Path d={WORDMARK_L_PATH} fill={inkFill} transform=\"translate(1902,0)\" />\n <Path d={WORDMARK_S_PATH} fill={inkFill} transform=\"translate(2195,0)\" />\n <Path d={WORDMARK_E_PATH} fill={inkFill} transform=\"translate(2754,0)\" />\n </G>\n ) : null}\n </Svg>\n );\n}\n","export { PoolseIcon, type PoolseIconProps, type IconName } from './PoolseIcon.js';\nexport { PoolseLogo, type PoolseLogoProps, type PoolseLogoVariant } from './PoolseLogo.js';\nexport { Avatar, type AvatarProps } from './Avatar.js';\nexport { userColor } from './userColor.js';\n\n// Re-exported as a namespace for the public API surface.\nimport { PoolseIcon } from './PoolseIcon.js';\nimport { PoolseLogo } from './PoolseLogo.js';\nimport { Avatar } from './Avatar.js';\n\nexport const primitives = { PoolseIcon, PoolseLogo, Avatar };\n","import { useEffect } from 'react';\nimport { AppState, type AppStateStatus } from 'react-native';\nimport { usePoolse } from '@poolse/react';\n\n/**\n * Closes the SDK WebSocket cleanly when the app backgrounds and\n * reopens it when the app comes back to the foreground. Designed\n * to pair with push-notification delivery on the dev's backend —\n * iOS / Android suspend sockets aggressively, so we don't fight\n * the OS; we let the push wake the app and resync on resume.\n *\n * Mount once near the root of your app:\n *\n * <PoolseProvider config={config}>\n * <AppShell />\n * </PoolseProvider>\n *\n * function AppShell() {\n * useAppStateLifecycle();\n * return ...;\n * }\n */\nexport function useAppStateLifecycle() {\n const poolse = usePoolse();\n\n useEffect(() => {\n let prev: AppStateStatus = AppState.currentState;\n const sub = AppState.addEventListener('change', (next) => {\n const wasActive = prev === 'active';\n const isActive = next === 'active';\n\n if (wasActive && !isActive) {\n // Going to background — close the WS cleanly. The SDK's\n // realtime layer reopens lazily on the next subscription\n // call, so there's nothing to clean up state-side.\n try {\n poolse.realtime?.disconnect?.();\n } catch {\n // Older SDK builds may not expose disconnect; harmless.\n }\n } else if (!wasActive && isActive) {\n // Returning to foreground — the next hook render that\n // touches `realtime.conversation(...)` will reopen the\n // socket. `useMessages`/`useTyping`/`usePresence` all\n // refetch their starting snapshot on remount, so the active\n // conversation lands fresh.\n try {\n poolse.realtime?.connect?.();\n } catch {\n // Same compat note as above.\n }\n }\n\n prev = next;\n });\n\n return () => sub.remove();\n }, [poolse]);\n}\n"]}
package/package.json ADDED
@@ -0,0 +1,79 @@
1
+ {
2
+ "name": "@poolse/react-native",
3
+ "version": "0.1.1",
4
+ "description": "Plug-and-play React Native components for poolse — realtime chat infrastructure. Brand-aligned defaults, JS theme tokens, Expo-friendly out of the box.",
5
+ "license": "MIT",
6
+ "keywords": [
7
+ "poolse",
8
+ "chat",
9
+ "react-native",
10
+ "expo",
11
+ "ui",
12
+ "components",
13
+ "messaging",
14
+ "realtime"
15
+ ],
16
+ "homepage": "https://poolse.dev",
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "git+https://github.com/poolse-hq/js-sdk.git",
20
+ "directory": "packages/react-native"
21
+ },
22
+ "bugs": {
23
+ "url": "https://github.com/poolse-hq/js-sdk/issues"
24
+ },
25
+ "type": "module",
26
+ "main": "./dist/index.cjs",
27
+ "module": "./dist/index.js",
28
+ "types": "./dist/index.d.ts",
29
+ "exports": {
30
+ ".": {
31
+ "import": {
32
+ "types": "./dist/index.d.ts",
33
+ "default": "./dist/index.js"
34
+ },
35
+ "require": {
36
+ "types": "./dist/index.d.cts",
37
+ "default": "./dist/index.cjs"
38
+ }
39
+ }
40
+ },
41
+ "files": [
42
+ "dist",
43
+ "README.md",
44
+ "CHANGELOG.md"
45
+ ],
46
+ "dependencies": {
47
+ "@poolse/react": "2.0.1",
48
+ "@poolse/sdk": "2.0.1"
49
+ },
50
+ "peerDependencies": {
51
+ "react": ">=18",
52
+ "react-native": ">=0.73",
53
+ "react-native-svg": ">=14"
54
+ },
55
+ "peerDependenciesMeta": {
56
+ "expo-document-picker": {
57
+ "optional": true
58
+ },
59
+ "expo-image-picker": {
60
+ "optional": true
61
+ }
62
+ },
63
+ "devDependencies": {
64
+ "@types/react": "^19.0.0",
65
+ "react": "^19.0.0",
66
+ "react-native": "^0.76.0",
67
+ "react-native-svg": "^15.8.0"
68
+ },
69
+ "publishConfig": {
70
+ "access": "public"
71
+ },
72
+ "scripts": {
73
+ "build": "tsup",
74
+ "dev": "tsup --watch src",
75
+ "test": "vitest run",
76
+ "typecheck": "tsc --noEmit",
77
+ "lint": "eslint src test"
78
+ }
79
+ }