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