@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.
- package/CHANGELOG.md +54 -0
- package/LICENSE +21 -0
- package/README.md +144 -0
- package/dist/index.cjs +2499 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +672 -0
- package/dist/index.d.ts +672 -0
- package/dist/index.js +2470 -0
- package/dist/index.js.map +1 -0
- package/package.json +79 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,672 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { Uuid, Message, AttachmentUploadInput, Conversation, Membership, Attachment } from '@poolse/sdk';
|
|
3
|
+
import * as react from 'react';
|
|
4
|
+
import { ReactElement, ReactNode } from 'react';
|
|
5
|
+
|
|
6
|
+
interface ConversationViewProps {
|
|
7
|
+
conversationId: Uuid;
|
|
8
|
+
emptyState?: ReactElement | string;
|
|
9
|
+
renderMessage?: (msg: Message, currentUserId: string | null) => ReactElement;
|
|
10
|
+
labelFor?: (externalId: string) => string;
|
|
11
|
+
avatarFor?: (externalId: string) => string | null;
|
|
12
|
+
reactions?: boolean;
|
|
13
|
+
mentions?: boolean;
|
|
14
|
+
attachments?: boolean;
|
|
15
|
+
actions?: boolean;
|
|
16
|
+
threads?: boolean;
|
|
17
|
+
quotations?: boolean;
|
|
18
|
+
readReceipts?: boolean;
|
|
19
|
+
maxBodyLength?: number;
|
|
20
|
+
/** Show sender labels in group chats. `auto` (default), `always`, `never`. */
|
|
21
|
+
senderLabels?: 'auto' | 'always' | 'never';
|
|
22
|
+
/** Show avatars to the left of other-side bubbles in group chats. Same semantics. */
|
|
23
|
+
avatars?: 'auto' | 'always' | 'never';
|
|
24
|
+
/** Fires when auto-mark-read commits — clear sidebar badges via this. */
|
|
25
|
+
onMarkedRead?: (conversationId: string) => void;
|
|
26
|
+
}
|
|
27
|
+
declare function ConversationView({ conversationId, emptyState, renderMessage, labelFor, avatarFor, reactions, mentions, attachments, actions, threads, quotations, readReceipts, maxBodyLength, senderLabels, avatars, onMarkedRead, }: ConversationViewProps): react_jsx_runtime.JSX.Element;
|
|
28
|
+
|
|
29
|
+
type BubbleGroupPosition = 'first' | 'middle' | 'last' | 'standalone';
|
|
30
|
+
interface MessageBubbleProps {
|
|
31
|
+
message: Message;
|
|
32
|
+
/** Used to decide left/right alignment, color, and read-receipt visibility. */
|
|
33
|
+
currentUserId: string | null;
|
|
34
|
+
/** `'sent'` → single tick, `'read'` → double tick (theme.colors.brand). */
|
|
35
|
+
readState?: 'sent' | 'read';
|
|
36
|
+
/** Label resolver keyed by `external_id` — falls back to the externalId itself. */
|
|
37
|
+
labelFor?: (externalId: string) => string;
|
|
38
|
+
/** Quoted-card tap handler. Typically used to scroll the list to the original message. */
|
|
39
|
+
onQuotedClick?: (quotedMessageId: Uuid) => void;
|
|
40
|
+
/** Position in a same-sender cluster — drives tail-corner rendering. */
|
|
41
|
+
groupPosition?: BubbleGroupPosition;
|
|
42
|
+
/** Truncate at this many chars and show a "Read more" toggle. Defaults to 0 (off). */
|
|
43
|
+
maxBodyLength?: number;
|
|
44
|
+
/** Show a colored sender label above other-side bubbles. Only meaningful in group chats. */
|
|
45
|
+
showSenderName?: boolean;
|
|
46
|
+
/** Slot for an actions trigger — typically a chevron rendered by `<MessageRow>`. */
|
|
47
|
+
actionsTrigger?: ReactNode;
|
|
48
|
+
/** Render in-bubble attachments (images, file cards). Defaults to true. */
|
|
49
|
+
showAttachments?: boolean;
|
|
50
|
+
}
|
|
51
|
+
declare function MessageBubble({ message, currentUserId, readState, labelFor, onQuotedClick, groupPosition, maxBodyLength, showSenderName, actionsTrigger, showAttachments, }: MessageBubbleProps): react_jsx_runtime.JSX.Element;
|
|
52
|
+
|
|
53
|
+
interface EditableMessageBubbleProps {
|
|
54
|
+
message: Message;
|
|
55
|
+
currentUserId: string | null;
|
|
56
|
+
onCancel: () => void;
|
|
57
|
+
onSave: (body: string) => Promise<unknown> | void;
|
|
58
|
+
}
|
|
59
|
+
declare function EditableMessageBubble({ message, currentUserId, onCancel, onSave, }: EditableMessageBubbleProps): react_jsx_runtime.JSX.Element;
|
|
60
|
+
|
|
61
|
+
interface MessageRowProps {
|
|
62
|
+
msg: Message;
|
|
63
|
+
meId: string | null;
|
|
64
|
+
reactions?: boolean;
|
|
65
|
+
attachments?: boolean;
|
|
66
|
+
actions?: boolean;
|
|
67
|
+
/** Pass false in ThreadView since nested threads aren't a thing in v1. */
|
|
68
|
+
threads?: boolean;
|
|
69
|
+
/** WhatsApp-style quote-reply. Defaults true on ConversationView. */
|
|
70
|
+
quotations?: boolean;
|
|
71
|
+
readState?: 'sent' | 'read';
|
|
72
|
+
editing?: boolean;
|
|
73
|
+
onStartEdit?: () => void;
|
|
74
|
+
onCancelEdit?: () => void;
|
|
75
|
+
onSaveEdit?: (body: string) => Promise<unknown> | void;
|
|
76
|
+
onDelete?: () => void;
|
|
77
|
+
onOpenThread?: () => void;
|
|
78
|
+
onQuote?: () => void;
|
|
79
|
+
labelFor?: (externalId: string) => string;
|
|
80
|
+
onQuotedClick?: (quotedMessageId: Uuid) => void;
|
|
81
|
+
groupPosition?: BubbleGroupPosition;
|
|
82
|
+
maxBodyLength?: number;
|
|
83
|
+
/** Show a colored sender label above other-side bubbles. */
|
|
84
|
+
showSenderName?: boolean;
|
|
85
|
+
/** Render an avatar to the LEFT of other-side bubbles. */
|
|
86
|
+
showAvatar?: boolean;
|
|
87
|
+
/** Avatar resolver — same signature as `<MemberList avatarFor>`. */
|
|
88
|
+
avatarFor?: (externalId: string) => string | null;
|
|
89
|
+
}
|
|
90
|
+
declare function MessageRow({ msg, meId, reactions, attachments, actions, threads, quotations, readState, editing, onStartEdit, onCancelEdit, onSaveEdit, onDelete, onOpenThread, onQuote, labelFor, onQuotedClick, groupPosition, maxBodyLength, showSenderName, showAvatar, avatarFor, }: MessageRowProps): react_jsx_runtime.JSX.Element;
|
|
91
|
+
|
|
92
|
+
interface MessageComposerProps {
|
|
93
|
+
/**
|
|
94
|
+
* Called when the user taps Send. Second arg carries
|
|
95
|
+
* `quoted_message_id` (when replying) and `attachment_ids`
|
|
96
|
+
* (resolved from the composer's upload queue). Awaited so the
|
|
97
|
+
* composer disables until the send round-trips.
|
|
98
|
+
*/
|
|
99
|
+
onSend: (body: string, opts?: {
|
|
100
|
+
quoted_message_id?: Uuid;
|
|
101
|
+
attachment_ids?: Uuid[];
|
|
102
|
+
}) => Promise<unknown> | void;
|
|
103
|
+
/** Called on every keystroke. Hook to `useTyping().signalTyping`. */
|
|
104
|
+
onTyping?: () => void;
|
|
105
|
+
placeholder?: string;
|
|
106
|
+
disabled?: boolean;
|
|
107
|
+
/** Renders a quote chip above the input; cleared by the caller in `onSend`. */
|
|
108
|
+
replyingTo?: Message | null;
|
|
109
|
+
/** User tapped (x) on the quote chip. */
|
|
110
|
+
onCancelReply?: () => void;
|
|
111
|
+
/** Display label for the quoted sender, keyed by `external_id`. */
|
|
112
|
+
labelFor?: (externalId: string) => string;
|
|
113
|
+
/** Show the paperclip + queue strip. Defaults true. */
|
|
114
|
+
attachments?: boolean;
|
|
115
|
+
/** Tap on the paperclip — wire to `<AttachmentPicker>` from the same package. */
|
|
116
|
+
onAttachPress?: () => void;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Imperative handle for parents that want to add files to the
|
|
120
|
+
* composer's upload queue externally (drag/drop on a wrapper,
|
|
121
|
+
* deep-link, attachment shortcut).
|
|
122
|
+
*/
|
|
123
|
+
interface MessageComposerHandle {
|
|
124
|
+
/** Enqueue ready-to-upload inputs. The picker component is the usual caller; this is the escape hatch. */
|
|
125
|
+
addFiles: (inputs: AttachmentUploadInput[]) => void;
|
|
126
|
+
focus: () => void;
|
|
127
|
+
clear: () => void;
|
|
128
|
+
}
|
|
129
|
+
declare const MessageComposer: react.ForwardRefExoticComponent<MessageComposerProps & react.RefAttributes<MessageComposerHandle>>;
|
|
130
|
+
|
|
131
|
+
interface MessageActionsProps {
|
|
132
|
+
visible: boolean;
|
|
133
|
+
onClose: () => void;
|
|
134
|
+
isSelf: boolean;
|
|
135
|
+
onReply?: () => void;
|
|
136
|
+
onReplyInThread?: () => void;
|
|
137
|
+
onQuote?: () => void;
|
|
138
|
+
onEdit?: () => void;
|
|
139
|
+
onDelete?: () => void;
|
|
140
|
+
onCopy?: () => void;
|
|
141
|
+
onReact?: () => void;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Long-press action menu — rendered as a modal bottom sheet (RN's
|
|
145
|
+
* native equivalent of the web hover popover).
|
|
146
|
+
*/
|
|
147
|
+
declare function MessageActions({ visible, onClose, isSelf, onReply, onReplyInThread, onQuote, onEdit, onDelete, onCopy, onReact, }: MessageActionsProps): react_jsx_runtime.JSX.Element;
|
|
148
|
+
|
|
149
|
+
interface MessageListProps {
|
|
150
|
+
messages: Message[];
|
|
151
|
+
loading?: boolean;
|
|
152
|
+
hasMore?: boolean;
|
|
153
|
+
onLoadMore?: () => void;
|
|
154
|
+
renderItem: (msg: Message, index: number) => ReactElement;
|
|
155
|
+
/** Slot rendered above the latest message (typically the typing indicator). */
|
|
156
|
+
ListHeader?: ReactElement | null;
|
|
157
|
+
/** Slot rendered below the oldest message (rare — typically nothing). */
|
|
158
|
+
ListFooter?: ReactElement | null;
|
|
159
|
+
/** Custom empty state when there are no messages. */
|
|
160
|
+
emptyState?: ReactElement | string;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Inverted FlatList wrapper for chat history. Newest message at the
|
|
164
|
+
* bottom (visually), oldest at the top. Calls `onLoadMore` when the
|
|
165
|
+
* user scrolls near the top edge and `hasMore` is true.
|
|
166
|
+
*
|
|
167
|
+
* Pagination is owned by `useMessages` (hand it `messages` +
|
|
168
|
+
* `hasMore` + `loadMore`); this component just renders + scrolls.
|
|
169
|
+
*/
|
|
170
|
+
declare function MessageList({ messages, loading, hasMore, onLoadMore, renderItem, ListHeader, ListFooter, emptyState, }: MessageListProps): react_jsx_runtime.JSX.Element;
|
|
171
|
+
|
|
172
|
+
interface TypingIndicatorProps {
|
|
173
|
+
/** Set of `external_id`s currently typing — what `useTyping` returns. */
|
|
174
|
+
typing: Set<string>;
|
|
175
|
+
/**
|
|
176
|
+
* Resolves an `external_id` to a display label. Defaults to the
|
|
177
|
+
* SDK's `userResolver` (and falls back to the external_id itself
|
|
178
|
+
* when the resolver isn't configured).
|
|
179
|
+
*/
|
|
180
|
+
labelFor?: (externalId: string) => string;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Three animated dots + an inline "X is typing" label. Renders a
|
|
184
|
+
* zero-height row when nobody is typing so the list doesn't jump.
|
|
185
|
+
*/
|
|
186
|
+
declare function TypingIndicator({ typing, labelFor }: TypingIndicatorProps): react_jsx_runtime.JSX.Element;
|
|
187
|
+
|
|
188
|
+
interface ThreadViewProps {
|
|
189
|
+
visible: boolean;
|
|
190
|
+
onClose: () => void;
|
|
191
|
+
conversationId: Uuid;
|
|
192
|
+
rootMessage: Message;
|
|
193
|
+
labelFor?: (externalId: string) => string;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Modal screen for thread replies. Mirrors the web `<ThreadView>` —
|
|
197
|
+
* root message preview at the top, oldest-first reply list, composer
|
|
198
|
+
* at the bottom.
|
|
199
|
+
*/
|
|
200
|
+
declare function ThreadView({ visible, onClose, conversationId, rootMessage, labelFor, }: ThreadViewProps): react_jsx_runtime.JSX.Element;
|
|
201
|
+
|
|
202
|
+
interface UserNameProps {
|
|
203
|
+
/** The user's external_id. Pass null to render the fallback. */
|
|
204
|
+
externalId: string | null | undefined;
|
|
205
|
+
/** Optional fallback when the resolver returns nothing. Defaults to the externalId itself. */
|
|
206
|
+
fallback?: string;
|
|
207
|
+
/** Caller-supplied label override; if it returns a string, it wins. */
|
|
208
|
+
labelFor?: (externalId: string) => string;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Display name for a user, looked up via the SDK's `userResolver`
|
|
212
|
+
* with caller-overridable + fallback fallbacks. Renders a `<Text>`.
|
|
213
|
+
*/
|
|
214
|
+
declare function UserName({ externalId, fallback, labelFor }: UserNameProps): react_jsx_runtime.JSX.Element;
|
|
215
|
+
/**
|
|
216
|
+
* Resolves a user's display name via the 3-tier chain:
|
|
217
|
+
* 1. `labelFor(externalId)` — caller-supplied override
|
|
218
|
+
* 2. SDK `userResolver` (memoized via `useUser`)
|
|
219
|
+
* 3. The externalId itself (so something always renders)
|
|
220
|
+
*/
|
|
221
|
+
declare function useDisplayName(externalId: string | null | undefined, labelFor?: (externalId: string) => string): string;
|
|
222
|
+
|
|
223
|
+
interface ConversationListProps {
|
|
224
|
+
selectedId?: string | null;
|
|
225
|
+
onSelect?: (conv: Conversation) => void;
|
|
226
|
+
/** Optional override for each row's rendering. */
|
|
227
|
+
renderItem?: (conv: Conversation, selected: boolean) => ReactNode;
|
|
228
|
+
/** Custom empty state when there are no conversations. */
|
|
229
|
+
emptyState?: ReactNode | string;
|
|
230
|
+
/** Controlled-mode: skip `useConversations()` and render from these. */
|
|
231
|
+
conversations?: Conversation[];
|
|
232
|
+
loading?: boolean;
|
|
233
|
+
error?: Error | null;
|
|
234
|
+
/** Per-conversation unread counts rendered as a Pulse Coral pill. */
|
|
235
|
+
unreadCounts?: Record<Uuid, number>;
|
|
236
|
+
}
|
|
237
|
+
declare function ConversationList({ selectedId, onSelect, renderItem, emptyState, conversations: controlled, loading: controlledLoading, error: controlledError, unreadCounts, }: ConversationListProps): react_jsx_runtime.JSX.Element;
|
|
238
|
+
|
|
239
|
+
interface MemberListProps {
|
|
240
|
+
conversationId: Uuid;
|
|
241
|
+
labelFor?: (externalId: string) => string;
|
|
242
|
+
avatarFor?: (externalId: string) => string | null;
|
|
243
|
+
onlineExternalIds?: Set<string>;
|
|
244
|
+
canRemove?: (m: Membership) => boolean;
|
|
245
|
+
renderItem?: (m: Membership) => ReactNode;
|
|
246
|
+
emptyState?: ReactNode | string;
|
|
247
|
+
}
|
|
248
|
+
declare function MemberList({ conversationId, labelFor, avatarFor, onlineExternalIds, canRemove, renderItem, emptyState, }: MemberListProps): react_jsx_runtime.JSX.Element;
|
|
249
|
+
|
|
250
|
+
interface AttachmentPreviewProps {
|
|
251
|
+
attachment: Attachment;
|
|
252
|
+
/** Optional tap handler. For images defaults to opening the source URL. */
|
|
253
|
+
onPress?: () => void;
|
|
254
|
+
/** Render at this max width. Defaults to 280. */
|
|
255
|
+
maxWidth?: number;
|
|
256
|
+
}
|
|
257
|
+
declare function AttachmentPreview({ attachment, onPress, maxWidth }: AttachmentPreviewProps): react_jsx_runtime.JSX.Element;
|
|
258
|
+
|
|
259
|
+
/**
|
|
260
|
+
* Horizontal strip of in-flight upload chips with cancel + remove
|
|
261
|
+
* affordances. Reads from `useAttachmentUpload()` so it auto-clears
|
|
262
|
+
* when the composer resets the queue post-send.
|
|
263
|
+
*/
|
|
264
|
+
declare function UploadQueueStrip(): react_jsx_runtime.JSX.Element | null;
|
|
265
|
+
|
|
266
|
+
interface ReactionStripProps {
|
|
267
|
+
messageId: Uuid;
|
|
268
|
+
conversationId: Uuid;
|
|
269
|
+
meId: string | null;
|
|
270
|
+
/** Seed map from a known message (e.g. `useMessages`). */
|
|
271
|
+
initialReactions?: Record<string, Uuid[]>;
|
|
272
|
+
}
|
|
273
|
+
declare function ReactionStrip({ messageId, conversationId, meId, initialReactions, }: ReactionStripProps): react_jsx_runtime.JSX.Element | null;
|
|
274
|
+
interface ReactionPickerProps {
|
|
275
|
+
visible: boolean;
|
|
276
|
+
onClose: () => void;
|
|
277
|
+
onPick: (emoji: string) => void;
|
|
278
|
+
/** Override the default 6-emoji set. */
|
|
279
|
+
emojis?: string[];
|
|
280
|
+
}
|
|
281
|
+
declare function ReactionPicker({ visible, onClose, onPick, emojis, }: ReactionPickerProps): react_jsx_runtime.JSX.Element;
|
|
282
|
+
|
|
283
|
+
interface MentionInputProps extends Omit<MessageComposerProps, 'onSend'> {
|
|
284
|
+
conversationId: Uuid;
|
|
285
|
+
/** Same callback as MessageComposer.onSend, plus optional mention user_ids. */
|
|
286
|
+
onSend: (body: string, opts?: {
|
|
287
|
+
quoted_message_id?: Uuid;
|
|
288
|
+
attachment_ids?: Uuid[];
|
|
289
|
+
mentions?: Uuid[];
|
|
290
|
+
}) => Promise<unknown> | void;
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Composer with an inline `@`-trigger that opens a modal sheet of
|
|
294
|
+
* conversation members. Selecting a member inserts their
|
|
295
|
+
* `external_id` into the text, and the wire `mentions` array (sent
|
|
296
|
+
* to the backend) carries the corresponding internal `user_id`s.
|
|
297
|
+
*/
|
|
298
|
+
declare function MentionInput({ conversationId, onSend, ...composerProps }: MentionInputProps): react_jsx_runtime.JSX.Element;
|
|
299
|
+
|
|
300
|
+
interface AttachmentPickerProps {
|
|
301
|
+
visible: boolean;
|
|
302
|
+
onClose: () => void;
|
|
303
|
+
/**
|
|
304
|
+
* Optional adapter that produces an `AttachmentUploadInput` from a
|
|
305
|
+
* picked RN file. Default reads `uri`/`name`/`type`/`size` and wraps
|
|
306
|
+
* in a fetch-compatible `Blob`. Override to plug in custom storage
|
|
307
|
+
* or transcoding.
|
|
308
|
+
*/
|
|
309
|
+
onPickInputs?: (kind: 'image' | 'document') => Promise<{
|
|
310
|
+
body: Blob | {
|
|
311
|
+
uri: string;
|
|
312
|
+
name: string;
|
|
313
|
+
type: string;
|
|
314
|
+
} | unknown;
|
|
315
|
+
contentType: string;
|
|
316
|
+
byteSize: number;
|
|
317
|
+
filename?: string;
|
|
318
|
+
}[]>;
|
|
319
|
+
}
|
|
320
|
+
/**
|
|
321
|
+
* Picker sheet wrapping `expo-image-picker` and `expo-document-picker`.
|
|
322
|
+
* Both are OPTIONAL peer dependencies — install only the ones you
|
|
323
|
+
* actually use. If a picker is mounted without its dep installed,
|
|
324
|
+
* the corresponding button is disabled with a tooltip explaining
|
|
325
|
+
* which install command to run.
|
|
326
|
+
*
|
|
327
|
+
* Default implementation dynamically `import()`s the Expo modules
|
|
328
|
+
* at mount; the caller can pass `onPickInputs` to skip Expo entirely.
|
|
329
|
+
*/
|
|
330
|
+
declare function AttachmentPicker({ visible, onClose, onPickInputs }: AttachmentPickerProps): react_jsx_runtime.JSX.Element;
|
|
331
|
+
|
|
332
|
+
declare const ICONS: {
|
|
333
|
+
readonly attachment: {
|
|
334
|
+
readonly vb: "0 0 24 24";
|
|
335
|
+
readonly 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\"/>";
|
|
336
|
+
};
|
|
337
|
+
readonly bell: {
|
|
338
|
+
readonly vb: "0 0 24 24";
|
|
339
|
+
readonly 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\"/>";
|
|
340
|
+
};
|
|
341
|
+
readonly 'check-double': {
|
|
342
|
+
readonly vb: "0 0 24 24";
|
|
343
|
+
readonly 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\"/>";
|
|
344
|
+
};
|
|
345
|
+
readonly check: {
|
|
346
|
+
readonly vb: "0 0 24 24";
|
|
347
|
+
readonly d: "<path d=\"M4.5 12.6 9.4 17.4 19.5 6.6\"/>";
|
|
348
|
+
};
|
|
349
|
+
readonly 'chevron-down': {
|
|
350
|
+
readonly vb: "0 0 24 24";
|
|
351
|
+
readonly d: "<path d=\"M5 9 12 16 19 9\"/>";
|
|
352
|
+
};
|
|
353
|
+
readonly 'chevron-right': {
|
|
354
|
+
readonly vb: "0 0 24 24";
|
|
355
|
+
readonly d: "<path d=\"M9 5 16 12 9 19\"/>";
|
|
356
|
+
};
|
|
357
|
+
readonly close: {
|
|
358
|
+
readonly vb: "0 0 24 24";
|
|
359
|
+
readonly d: "<path d=\"M6 6 18 18M18 6 6 18\"/>";
|
|
360
|
+
};
|
|
361
|
+
readonly code: {
|
|
362
|
+
readonly vb: "0 0 24 24";
|
|
363
|
+
readonly 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\"/>";
|
|
364
|
+
};
|
|
365
|
+
readonly compose: {
|
|
366
|
+
readonly vb: "0 0 24 24";
|
|
367
|
+
readonly 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\"/>";
|
|
368
|
+
};
|
|
369
|
+
readonly copy: {
|
|
370
|
+
readonly vb: "0 0 24 24";
|
|
371
|
+
readonly 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\"/>";
|
|
372
|
+
};
|
|
373
|
+
readonly download: {
|
|
374
|
+
readonly vb: "0 0 24 24";
|
|
375
|
+
readonly 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\"/>";
|
|
376
|
+
};
|
|
377
|
+
readonly edit: {
|
|
378
|
+
readonly vb: "0 0 24 24";
|
|
379
|
+
readonly d: "<path d=\"M16.7 3.3a2.1 2.1 0 0 1 3 3L7 19l-4 1 1-4 12.7-12.7Z\"/>";
|
|
380
|
+
};
|
|
381
|
+
readonly emoji: {
|
|
382
|
+
readonly vb: "0 0 24 24";
|
|
383
|
+
readonly 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\"/>";
|
|
384
|
+
};
|
|
385
|
+
readonly heart: {
|
|
386
|
+
readonly vb: "0 0 24 24";
|
|
387
|
+
readonly 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\"/>";
|
|
388
|
+
};
|
|
389
|
+
readonly image: {
|
|
390
|
+
readonly vb: "0 0 24 24";
|
|
391
|
+
readonly 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\"/>";
|
|
392
|
+
};
|
|
393
|
+
readonly info: {
|
|
394
|
+
readonly vb: "0 0 24 24";
|
|
395
|
+
readonly 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\"/>";
|
|
396
|
+
};
|
|
397
|
+
readonly key: {
|
|
398
|
+
readonly vb: "0 0 24 24";
|
|
399
|
+
readonly 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\"/>";
|
|
400
|
+
};
|
|
401
|
+
readonly link: {
|
|
402
|
+
readonly vb: "0 0 24 24";
|
|
403
|
+
readonly 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\"/>";
|
|
404
|
+
};
|
|
405
|
+
readonly lock: {
|
|
406
|
+
readonly vb: "0 0 24 24";
|
|
407
|
+
readonly 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\"/>";
|
|
408
|
+
};
|
|
409
|
+
readonly message: {
|
|
410
|
+
readonly vb: "0 0 24 24";
|
|
411
|
+
readonly 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\"/>";
|
|
412
|
+
};
|
|
413
|
+
readonly messages: {
|
|
414
|
+
readonly vb: "0 0 24 24";
|
|
415
|
+
readonly 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\"/>";
|
|
416
|
+
};
|
|
417
|
+
readonly mic: {
|
|
418
|
+
readonly vb: "0 0 24 24";
|
|
419
|
+
readonly 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\"/>";
|
|
420
|
+
};
|
|
421
|
+
readonly 'more-h': {
|
|
422
|
+
readonly vb: "0 0 24 24";
|
|
423
|
+
readonly 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\"/>";
|
|
424
|
+
};
|
|
425
|
+
readonly 'more-v': {
|
|
426
|
+
readonly vb: "0 0 24 24";
|
|
427
|
+
readonly 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\"/>";
|
|
428
|
+
};
|
|
429
|
+
readonly pin: {
|
|
430
|
+
readonly vb: "0 0 24 24";
|
|
431
|
+
readonly d: "<path d=\"M9 3.4h6v1.8l-1 5.6 3 3.2H7l3-3.2-1-5.6V3.4Z\"/><path d=\"M12 17v3.6\"/>";
|
|
432
|
+
};
|
|
433
|
+
readonly plus: {
|
|
434
|
+
readonly vb: "0 0 24 24";
|
|
435
|
+
readonly d: "<path d=\"M12 5v14M5 12h14\"/>";
|
|
436
|
+
};
|
|
437
|
+
readonly presence: {
|
|
438
|
+
readonly vb: "0 0 24 24";
|
|
439
|
+
readonly 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\"/>";
|
|
440
|
+
};
|
|
441
|
+
readonly pulse: {
|
|
442
|
+
readonly vb: "0 0 24 24";
|
|
443
|
+
readonly d: "<path d=\"M3 13h4.6l2.2-4.6 3.4 9 2.2-4.4H21\"/>";
|
|
444
|
+
};
|
|
445
|
+
readonly reply: {
|
|
446
|
+
readonly vb: "0 0 24 24";
|
|
447
|
+
readonly d: "<path d=\"M9 7 4 12l5 5\"/><path d=\"M4 12h9.5a6.5 6.5 0 0 1 6.5 6.5V20\"/>";
|
|
448
|
+
};
|
|
449
|
+
readonly search: {
|
|
450
|
+
readonly vb: "0 0 24 24";
|
|
451
|
+
readonly d: "<circle cx=\"11\" cy=\"11\" r=\"6.8\"/><path d=\"M20.8 20.8 16 16\"/>";
|
|
452
|
+
};
|
|
453
|
+
readonly 'send-fill': {
|
|
454
|
+
readonly vb: "0 0 24 24";
|
|
455
|
+
readonly 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\"/>";
|
|
456
|
+
};
|
|
457
|
+
readonly send: {
|
|
458
|
+
readonly vb: "0 0 24 24";
|
|
459
|
+
readonly 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\"/>";
|
|
460
|
+
};
|
|
461
|
+
readonly settings: {
|
|
462
|
+
readonly vb: "0 0 24 24";
|
|
463
|
+
readonly 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\"/>";
|
|
464
|
+
};
|
|
465
|
+
readonly sliders: {
|
|
466
|
+
readonly vb: "0 0 24 24";
|
|
467
|
+
readonly 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\"/>";
|
|
468
|
+
};
|
|
469
|
+
readonly 'thumbs-up': {
|
|
470
|
+
readonly vb: "0 0 24 24";
|
|
471
|
+
readonly 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\"/>";
|
|
472
|
+
};
|
|
473
|
+
readonly trash: {
|
|
474
|
+
readonly vb: "0 0 24 24";
|
|
475
|
+
readonly 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\"/>";
|
|
476
|
+
};
|
|
477
|
+
readonly typing: {
|
|
478
|
+
readonly vb: "0 0 24 24";
|
|
479
|
+
readonly 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\"/>";
|
|
480
|
+
};
|
|
481
|
+
readonly 'user-plus': {
|
|
482
|
+
readonly vb: "0 0 24 24";
|
|
483
|
+
readonly d: "<circle cx=\"9\" cy=\"8\" r=\"3.8\"/><path d=\"M3 20a6 6 0 0 1 12 0\"/><path d=\"M18 8v6M15 11h6\"/>";
|
|
484
|
+
};
|
|
485
|
+
readonly user: {
|
|
486
|
+
readonly vb: "0 0 24 24";
|
|
487
|
+
readonly d: "<circle cx=\"12\" cy=\"8\" r=\"4\"/><path d=\"M4.6 20a7.4 7.4 0 0 1 14.8 0\"/>";
|
|
488
|
+
};
|
|
489
|
+
readonly users: {
|
|
490
|
+
readonly vb: "0 0 24 24";
|
|
491
|
+
readonly 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\"/>";
|
|
492
|
+
};
|
|
493
|
+
readonly webhook: {
|
|
494
|
+
readonly vb: "0 0 24 24";
|
|
495
|
+
readonly 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\"/>";
|
|
496
|
+
};
|
|
497
|
+
};
|
|
498
|
+
type IconName = keyof typeof ICONS;
|
|
499
|
+
|
|
500
|
+
interface PoolseIconProps {
|
|
501
|
+
/** Icon name — see {@link IconName} for the full list. */
|
|
502
|
+
name: IconName;
|
|
503
|
+
/** Width + height in pixels. Defaults to `20` (matches a body-line). */
|
|
504
|
+
size?: number;
|
|
505
|
+
/** Stroke color. Defaults to the theme's `ink` color. */
|
|
506
|
+
color?: string;
|
|
507
|
+
/** Accessibility label. Defaults to the icon name. */
|
|
508
|
+
label?: string | null;
|
|
509
|
+
}
|
|
510
|
+
declare function PoolseIcon({ name, size, color, label }: PoolseIconProps): react_jsx_runtime.JSX.Element | null;
|
|
511
|
+
|
|
512
|
+
type PoolseLogoVariant = 'lockup' | 'mark' | 'wordmark' | 'mono';
|
|
513
|
+
interface PoolseLogoProps {
|
|
514
|
+
variant?: PoolseLogoVariant;
|
|
515
|
+
/** Height in pixels — width is computed from the variant's aspect ratio. */
|
|
516
|
+
size?: number;
|
|
517
|
+
/** Mono variant accepts a color override; otherwise the theme drives fills. */
|
|
518
|
+
color?: string;
|
|
519
|
+
label?: string | null;
|
|
520
|
+
}
|
|
521
|
+
declare function PoolseLogo({ variant, size, color, label }: PoolseLogoProps): react_jsx_runtime.JSX.Element;
|
|
522
|
+
|
|
523
|
+
interface AvatarProps {
|
|
524
|
+
/** URL to a profile image. Falls back to initials when omitted. */
|
|
525
|
+
src?: string | null;
|
|
526
|
+
/** Used for initials. */
|
|
527
|
+
name?: string | null;
|
|
528
|
+
/** Stable color seed (typically the user's external_id). */
|
|
529
|
+
seed?: string | null;
|
|
530
|
+
/** Show a green presence dot in the bottom-right corner. */
|
|
531
|
+
online?: boolean;
|
|
532
|
+
/** Size variant. `md` → 40px, `sm` → 28px, `lg` → 56px. */
|
|
533
|
+
size?: 'sm' | 'md' | 'lg';
|
|
534
|
+
}
|
|
535
|
+
declare function Avatar({ src, name, seed, online, size }: AvatarProps): react_jsx_runtime.JSX.Element;
|
|
536
|
+
|
|
537
|
+
declare const primitives: {
|
|
538
|
+
PoolseIcon: typeof PoolseIcon;
|
|
539
|
+
PoolseLogo: typeof PoolseLogo;
|
|
540
|
+
Avatar: typeof Avatar;
|
|
541
|
+
};
|
|
542
|
+
|
|
543
|
+
type ThemeMode = 'light' | 'dark';
|
|
544
|
+
interface ThemeColors {
|
|
545
|
+
brand: string;
|
|
546
|
+
brandStrong: string;
|
|
547
|
+
brandSoft: string;
|
|
548
|
+
onBrand: string;
|
|
549
|
+
paper: string;
|
|
550
|
+
surface: string;
|
|
551
|
+
surface2: string;
|
|
552
|
+
ink: string;
|
|
553
|
+
ink2: string;
|
|
554
|
+
ink3: string;
|
|
555
|
+
border: string;
|
|
556
|
+
presence: string;
|
|
557
|
+
success: string;
|
|
558
|
+
warning: string;
|
|
559
|
+
error: string;
|
|
560
|
+
info: string;
|
|
561
|
+
selfBubble: string;
|
|
562
|
+
selfBubbleText: string;
|
|
563
|
+
otherBubble: string;
|
|
564
|
+
otherBubbleText: string;
|
|
565
|
+
unreadPill: string;
|
|
566
|
+
unreadPillText: string;
|
|
567
|
+
}
|
|
568
|
+
interface ThemeType {
|
|
569
|
+
fontDisplay: string;
|
|
570
|
+
fontBody: string;
|
|
571
|
+
fontMono: string;
|
|
572
|
+
bodySize: number;
|
|
573
|
+
lineHeight: number;
|
|
574
|
+
weightRegular: '400';
|
|
575
|
+
weightMedium: '500';
|
|
576
|
+
weightSemibold: '600';
|
|
577
|
+
weightBold: '700';
|
|
578
|
+
}
|
|
579
|
+
interface ThemeRadii {
|
|
580
|
+
sm: number;
|
|
581
|
+
md: number;
|
|
582
|
+
lg: number;
|
|
583
|
+
xl: number;
|
|
584
|
+
pill: number;
|
|
585
|
+
bubble: number;
|
|
586
|
+
}
|
|
587
|
+
interface ThemeSpacing {
|
|
588
|
+
xs: number;
|
|
589
|
+
sm: number;
|
|
590
|
+
md: number;
|
|
591
|
+
lg: number;
|
|
592
|
+
xl: number;
|
|
593
|
+
}
|
|
594
|
+
interface ShadowTokens {
|
|
595
|
+
shadowColor: string;
|
|
596
|
+
shadowOpacity: number;
|
|
597
|
+
shadowOffset: {
|
|
598
|
+
width: number;
|
|
599
|
+
height: number;
|
|
600
|
+
};
|
|
601
|
+
shadowRadius: number;
|
|
602
|
+
elevation: number;
|
|
603
|
+
}
|
|
604
|
+
interface ThemeShadows {
|
|
605
|
+
sm: ShadowTokens;
|
|
606
|
+
md: ShadowTokens;
|
|
607
|
+
lg: ShadowTokens;
|
|
608
|
+
}
|
|
609
|
+
interface PoolseRNTheme {
|
|
610
|
+
mode: ThemeMode;
|
|
611
|
+
colors: ThemeColors;
|
|
612
|
+
type: ThemeType;
|
|
613
|
+
radii: ThemeRadii;
|
|
614
|
+
spacing: ThemeSpacing;
|
|
615
|
+
shadows: ThemeShadows;
|
|
616
|
+
}
|
|
617
|
+
type PoolseRNThemeOverrides = {
|
|
618
|
+
mode?: ThemeMode;
|
|
619
|
+
colors?: Partial<ThemeColors>;
|
|
620
|
+
type?: Partial<ThemeType>;
|
|
621
|
+
radii?: Partial<ThemeRadii>;
|
|
622
|
+
spacing?: Partial<ThemeSpacing>;
|
|
623
|
+
shadows?: Partial<ThemeShadows>;
|
|
624
|
+
};
|
|
625
|
+
|
|
626
|
+
interface PoolseThemeProps {
|
|
627
|
+
/**
|
|
628
|
+
* Light or dark base palette. Overrides are merged on top of the
|
|
629
|
+
* chosen base. Defaults to `light` if omitted.
|
|
630
|
+
*/
|
|
631
|
+
mode?: ThemeMode;
|
|
632
|
+
/**
|
|
633
|
+
* Partial overrides — only the fields you set replace the defaults.
|
|
634
|
+
* Nested groups (`colors`, `type`, `radii`, `spacing`, `shadows`)
|
|
635
|
+
* deep-merge, so `{ colors: { brand: '#000' } }` keeps every other
|
|
636
|
+
* color from the base theme.
|
|
637
|
+
*/
|
|
638
|
+
theme?: PoolseRNThemeOverrides;
|
|
639
|
+
children: ReactNode;
|
|
640
|
+
}
|
|
641
|
+
declare function PoolseTheme({ mode, theme, children }: PoolseThemeProps): react_jsx_runtime.JSX.Element;
|
|
642
|
+
/**
|
|
643
|
+
* Read the active poolse theme. Falls back to `defaultLightTheme`
|
|
644
|
+
* if no `<PoolseTheme>` ancestor is mounted, so components render
|
|
645
|
+
* sensibly even without explicit wiring.
|
|
646
|
+
*/
|
|
647
|
+
declare function usePoolseTheme(): PoolseRNTheme;
|
|
648
|
+
|
|
649
|
+
declare const defaultLightTheme: PoolseRNTheme;
|
|
650
|
+
declare const defaultDarkTheme: PoolseRNTheme;
|
|
651
|
+
|
|
652
|
+
/**
|
|
653
|
+
* Closes the SDK WebSocket cleanly when the app backgrounds and
|
|
654
|
+
* reopens it when the app comes back to the foreground. Designed
|
|
655
|
+
* to pair with push-notification delivery on the dev's backend —
|
|
656
|
+
* iOS / Android suspend sockets aggressively, so we don't fight
|
|
657
|
+
* the OS; we let the push wake the app and resync on resume.
|
|
658
|
+
*
|
|
659
|
+
* Mount once near the root of your app:
|
|
660
|
+
*
|
|
661
|
+
* <PoolseProvider config={config}>
|
|
662
|
+
* <AppShell />
|
|
663
|
+
* </PoolseProvider>
|
|
664
|
+
*
|
|
665
|
+
* function AppShell() {
|
|
666
|
+
* useAppStateLifecycle();
|
|
667
|
+
* return ...;
|
|
668
|
+
* }
|
|
669
|
+
*/
|
|
670
|
+
declare function useAppStateLifecycle(): void;
|
|
671
|
+
|
|
672
|
+
export { AttachmentPicker, type AttachmentPickerProps, AttachmentPreview, type AttachmentPreviewProps, Avatar, type AvatarProps, ConversationList, type ConversationListProps, ConversationView, type ConversationViewProps, EditableMessageBubble, type EditableMessageBubbleProps, type IconName, MemberList, type MemberListProps, MentionInput, type MentionInputProps, MessageActions, type MessageActionsProps, MessageBubble, type MessageBubbleProps, MessageComposer, type MessageComposerProps, MessageList, type MessageListProps, MessageRow, type MessageRowProps, PoolseIcon, type PoolseIconProps, PoolseLogo, type PoolseLogoProps, type PoolseLogoVariant, type PoolseRNTheme, type PoolseRNThemeOverrides, PoolseTheme, type PoolseThemeProps, primitives as Primitives, ReactionPicker, type ReactionPickerProps, ReactionStrip, type ReactionStripProps, type ThemeColors, type ThemeRadii, type ThemeShadows, type ThemeSpacing, type ThemeType, ThreadView, type ThreadViewProps, TypingIndicator, type TypingIndicatorProps, UploadQueueStrip, UserName, type UserNameProps, defaultDarkTheme, defaultLightTheme, useAppStateLifecycle, useDisplayName, usePoolseTheme };
|