@poolse/react-native 2.12.1 → 2.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,89 +1,132 @@
1
- # Changelog
2
-
3
- All notable changes to `@poolse/react-native` are documented here.
4
- Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/);
5
- versions follow [semver](https://semver.org).
6
-
7
- ## [0.1.5] — 2026-06-03
8
-
9
- ### Added
10
-
11
- - **`<ImageMosaic>`** — WhatsApp-style multi-image grid (n1 / n2 /
12
- n3 / n4+ with `+N more` overlay) used inside `<MessageBubble>`
13
- whenever a message has more than one image attachment. Tapping a
14
- tile opens a full-screen modal viewer with tap-anywhere-to-close.
15
- Exported standalone so you can use the layout outside the bubble
16
- if you want.
17
- - **Haptic feedback on long-press** in `<MessageRow>` —
18
- `Haptics.impactAsync(ImpactFeedbackStyle.Medium)` fires when the
19
- action sheet opens. `expo-haptics` is loaded via a cached lazy
20
- `require()` — falls back to a silent no-op if you haven't
21
- installed it, so no peer dep is forced on consumers that don't
22
- want haptics.
23
-
24
- ### Changed
25
-
26
- - **Cleaner bubble meta row**: relative timestamp formatting
27
- (`HH:MM`, `Yesterday HH:MM`, `Mon HH:MM`, `MMM D`), tabular-num
28
- font variant so the time width stays stable, the read tick sits
29
- flush with the timestamp, and `edited` is its own italic pill
30
- rather than inline text.
31
-
32
- ### Notes
33
-
34
- - `expo-image-picker`, `expo-document-picker`, and `expo-haptics`
35
- remain OPTIONAL peer dependencies. (0.1.4 briefly promoted them
36
- to required — that caused npm to reorganize the dep tree on
37
- consumer installs, ended up with two copies of `@poolse/react` in
38
- Metro's bundle, and broke `PoolseProvider` context resolution.
39
- 0.1.5 reverts that. 0.1.3 and 0.1.4 were both burned slots and
40
- should not be used.)
41
-
42
- ## [0.1.0] — 2026-06-03
43
-
44
- First release. Plug-and-play React Native UI for poolse, mirroring
45
- the `@poolse/react-ui` component surface for native targets.
46
-
47
- ### Added
48
-
49
- - **Composed surface**: `<ConversationView>` with feature flags
50
- (`reactions`, `mentions`, `attachments`, `actions`, `threads`,
51
- `quotations`, `readReceipts`) — same defaults as web.
52
- - **Message components**: `<MessageBubble>`, `<EditableMessageBubble>`,
53
- `<MessageRow>`, `<MessageComposer>`, `<MessageActions>`,
54
- `<MessageList>` (inverted FlatList with stick-to-bottom +
55
- hold-position).
56
- - **Realtime feedback**: `<TypingIndicator>` (animated dots).
57
- - **Conversation + member panels**: `<ConversationList>` (FlatList +
58
- unread badges), `<MemberList>`.
59
- - **Rich content**: `<AttachmentPreview>` (image + file card),
60
- `<UploadQueueStrip>`, `<ReactionStrip>`, `<ReactionPicker>` (modal
61
- sheet), `<MentionInput>` (autocomplete popover),
62
- `<AttachmentPicker>` (wraps `expo-image-picker` and
63
- `expo-document-picker` when present).
64
- - **Threads**: `<ThreadView>` (modal screen).
65
- - **User display**: `<UserName>`, `useDisplayName` — both keyed by
66
- `externalId` to match SDK 2.0.
67
- - **Brand chrome**: `<PoolseIcon>` (SVG via `react-native-svg`),
68
- `<PoolseLogo>` (mark/lockup/wordmark/mono), `<Avatar>` (initials
69
- - URL fallback + stable userColor hashing).
70
- - **Theme system**: `<PoolseTheme>` provider + `usePoolseTheme()`
71
- hook. JS theme object with the same token groups as the web
72
- `--poolse-*` CSS variables (colors, type, radii, shadows,
73
- spacing). Light + dark defaults ship in.
74
- - **AppState lifecycle**: `useAppStateLifecycle()` hook — closes
75
- the SDK WebSocket on background, reopens + refetches the active
76
- conversation tail on foreground. Designed to pair with
77
- push-notification delivery on the dev's backend (no in-app
78
- background socket maintenance).
79
-
80
- ### Notes
81
-
82
- - Peer dependencies: `react >=18`, `react-native >=0.73`,
83
- `react-native-svg >=14`. `expo-image-picker` and
84
- `expo-document-picker` are optional peer deps — `<AttachmentPicker>`
85
- only requires them if you mount it.
86
- - Theming via JS object (no CSS variables). Override any token:
87
- `<PoolseTheme theme={{ colors: { brand: '#ff5733' } }}>`.
88
- - Shares the same `<PoolseProvider config={...}>` from
89
- `@poolse/react` — one provider for both web and RN.
1
+ # Changelog
2
+
3
+ All notable changes to `@poolse/react-native` are documented here.
4
+ Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/);
5
+ versions follow [semver](https://semver.org).
6
+
7
+ ## [2.13.0] — 2026-08-23
8
+
9
+ A near-total rebuild of the calling surface.
10
+
11
+ ### Added
12
+
13
+ - **Audio output routing — `useCallAudio`.** Speaker, earpiece, wired
14
+ headset and Bluetooth, driven through LiveKit's `AudioSession`. Audio
15
+ calls start at the earpiece and video calls on the speaker, but a
16
+ connected headset outranks both, so plugging in AirPods mid-call does
17
+ the obvious thing. Android enumerates real devices and gets a picker
18
+ (`AudioRouteSheet`); iOS exposes only default/force-speaker, so the
19
+ system route picker is opened instead. This moves the audio session
20
+ out of host apps — `CallScreen` now owns it on the SFU path.
21
+ - **Camera flip.** A control in the bar, and tapping your own preview.
22
+ - **Draggable local preview (`LocalVideoPip`)** that snaps to the
23
+ nearest corner.
24
+ - **Call duration timer**, anchored to a timestamp so a throttled or
25
+ sleeping phone cannot make it drift.
26
+ - Exported building blocks: `CallControlButton`, `CallParticipantTile`,
27
+ `CallAvatar`, `LocalVideoPip`, `AudioRouteSheet`, `callColors`,
28
+ `useCallDuration`, `useCallAudio`.
29
+ - Call icons: `phone`, `phone-off`, `mic-off`, `video`, `video-off`,
30
+ `speaker`, `speaker-off`, `camera-flip`, `bluetooth`, `headphones`,
31
+ `chevron-up`.
32
+
33
+ ### Changed
34
+
35
+ - **`CallScreen` rebuilt.** Round icon controls with captions, engaged
36
+ controls inverted so they read at a glance, full-bleed video, a
37
+ header carrying the name and call duration, and controls that fade
38
+ out on a connected video call and return on tap. The call surface is
39
+ deliberately dark regardless of the app theme, as every serious
40
+ calling app renders one.
41
+ - **`CallVideoGrid` is layout-aware**: spotlight plus floating preview
42
+ for a 1:1 call, a scrolling grid for three or more.
43
+ - **A call ends when everyone else leaves**, including when they never
44
+ sent a hang-up.
45
+
46
+ ### Fixed
47
+
48
+ - **Video calls open with the camera on.** See `@poolse/react@2.13.0`.
49
+
50
+ ## [0.1.5] — 2026-06-03
51
+
52
+ ### Added
53
+
54
+ - **`<ImageMosaic>`** — WhatsApp-style multi-image grid (n1 / n2 /
55
+ n3 / n4+ with `+N more` overlay) used inside `<MessageBubble>`
56
+ whenever a message has more than one image attachment. Tapping a
57
+ tile opens a full-screen modal viewer with tap-anywhere-to-close.
58
+ Exported standalone so you can use the layout outside the bubble
59
+ if you want.
60
+ - **Haptic feedback on long-press** in `<MessageRow>` —
61
+ `Haptics.impactAsync(ImpactFeedbackStyle.Medium)` fires when the
62
+ action sheet opens. `expo-haptics` is loaded via a cached lazy
63
+ `require()` — falls back to a silent no-op if you haven't
64
+ installed it, so no peer dep is forced on consumers that don't
65
+ want haptics.
66
+
67
+ ### Changed
68
+
69
+ - **Cleaner bubble meta row**: relative timestamp formatting
70
+ (`HH:MM`, `Yesterday HH:MM`, `Mon HH:MM`, `MMM D`), tabular-num
71
+ font variant so the time width stays stable, the read tick sits
72
+ flush with the timestamp, and `edited` is its own italic pill
73
+ rather than inline text.
74
+
75
+ ### Notes
76
+
77
+ - `expo-image-picker`, `expo-document-picker`, and `expo-haptics`
78
+ remain OPTIONAL peer dependencies. (0.1.4 briefly promoted them
79
+ to required — that caused npm to reorganize the dep tree on
80
+ consumer installs, ended up with two copies of `@poolse/react` in
81
+ Metro's bundle, and broke `PoolseProvider` context resolution.
82
+ 0.1.5 reverts that. 0.1.3 and 0.1.4 were both burned slots and
83
+ should not be used.)
84
+
85
+ ## [0.1.0] — 2026-06-03
86
+
87
+ First release. Plug-and-play React Native UI for poolse, mirroring
88
+ the `@poolse/react-ui` component surface for native targets.
89
+
90
+ ### Added
91
+
92
+ - **Composed surface**: `<ConversationView>` with feature flags
93
+ (`reactions`, `mentions`, `attachments`, `actions`, `threads`,
94
+ `quotations`, `readReceipts`) — same defaults as web.
95
+ - **Message components**: `<MessageBubble>`, `<EditableMessageBubble>`,
96
+ `<MessageRow>`, `<MessageComposer>`, `<MessageActions>`,
97
+ `<MessageList>` (inverted FlatList with stick-to-bottom +
98
+ hold-position).
99
+ - **Realtime feedback**: `<TypingIndicator>` (animated dots).
100
+ - **Conversation + member panels**: `<ConversationList>` (FlatList +
101
+ unread badges), `<MemberList>`.
102
+ - **Rich content**: `<AttachmentPreview>` (image + file card),
103
+ `<UploadQueueStrip>`, `<ReactionStrip>`, `<ReactionPicker>` (modal
104
+ sheet), `<MentionInput>` (autocomplete popover),
105
+ `<AttachmentPicker>` (wraps `expo-image-picker` and
106
+ `expo-document-picker` when present).
107
+ - **Threads**: `<ThreadView>` (modal screen).
108
+ - **User display**: `<UserName>`, `useDisplayName` — both keyed by
109
+ `externalId` to match SDK 2.0.
110
+ - **Brand chrome**: `<PoolseIcon>` (SVG via `react-native-svg`),
111
+ `<PoolseLogo>` (mark/lockup/wordmark/mono), `<Avatar>` (initials
112
+ - URL fallback + stable userColor hashing).
113
+ - **Theme system**: `<PoolseTheme>` provider + `usePoolseTheme()`
114
+ hook. JS theme object with the same token groups as the web
115
+ `--poolse-*` CSS variables (colors, type, radii, shadows,
116
+ spacing). Light + dark defaults ship in.
117
+ - **AppState lifecycle**: `useAppStateLifecycle()` hook — closes
118
+ the SDK WebSocket on background, reopens + refetches the active
119
+ conversation tail on foreground. Designed to pair with
120
+ push-notification delivery on the dev's backend (no in-app
121
+ background socket maintenance).
122
+
123
+ ### Notes
124
+
125
+ - Peer dependencies: `react >=18`, `react-native >=0.73`,
126
+ `react-native-svg >=14`. `expo-image-picker` and
127
+ `expo-document-picker` are optional peer deps — `<AttachmentPicker>`
128
+ only requires them if you mount it.
129
+ - Theming via JS object (no CSS variables). Override any token:
130
+ `<PoolseTheme theme={{ colors: { brand: '#ff5733' } }}>`.
131
+ - Shares the same `<PoolseProvider config={...}>` from
132
+ `@poolse/react` — one provider for both web and RN.