@repzo/widget-react-native 1.2.1 → 1.3.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.
Files changed (161) hide show
  1. package/CHANGELOG.md +69 -0
  2. package/README.md +40 -3
  3. package/android/build.gradle +22 -0
  4. package/android/src/main/java/expo/modules/repzowidget/RepzoVoicePlayer.kt +222 -0
  5. package/android/src/main/java/expo/modules/repzowidget/RepzoWidgetAudioModule.kt +68 -0
  6. package/expo-module.config.json +9 -0
  7. package/ios/RepzoVoicePlayer.swift +175 -0
  8. package/ios/RepzoWidgetAudio.podspec +26 -0
  9. package/ios/RepzoWidgetAudioModule.swift +65 -0
  10. package/lib/commonjs/api/client.js +47 -2
  11. package/lib/commonjs/api/client.js.map +1 -1
  12. package/lib/commonjs/audio/native-player.js +97 -0
  13. package/lib/commonjs/audio/native-player.js.map +1 -0
  14. package/lib/commonjs/audio/voice.js +146 -0
  15. package/lib/commonjs/audio/voice.js.map +1 -0
  16. package/lib/commonjs/i18n.js +6 -0
  17. package/lib/commonjs/i18n.js.map +1 -1
  18. package/lib/commonjs/locales.js +4 -0
  19. package/lib/commonjs/locales.js.map +1 -1
  20. package/lib/commonjs/state/use-widget-state.js +31 -0
  21. package/lib/commonjs/state/use-widget-state.js.map +1 -1
  22. package/lib/commonjs/state/widget-store.js +44 -1
  23. package/lib/commonjs/state/widget-store.js.map +1 -1
  24. package/lib/commonjs/ui/WidgetProvider.js +7 -3
  25. package/lib/commonjs/ui/WidgetProvider.js.map +1 -1
  26. package/lib/commonjs/ui/components/FileCard.js +134 -0
  27. package/lib/commonjs/ui/components/FileCard.js.map +1 -0
  28. package/lib/commonjs/ui/components/ImageViewer.js +17 -35
  29. package/lib/commonjs/ui/components/ImageViewer.js.map +1 -1
  30. package/lib/commonjs/ui/components/Launcher.js +15 -1
  31. package/lib/commonjs/ui/components/Launcher.js.map +1 -1
  32. package/lib/commonjs/ui/components/MessagesSkeleton.js +126 -0
  33. package/lib/commonjs/ui/components/MessagesSkeleton.js.map +1 -0
  34. package/lib/commonjs/ui/components/VoiceNote.js +353 -0
  35. package/lib/commonjs/ui/components/VoiceNote.js.map +1 -0
  36. package/lib/commonjs/ui/components/ZoomableImage.js +299 -0
  37. package/lib/commonjs/ui/components/ZoomableImage.js.map +1 -0
  38. package/lib/commonjs/ui/components/icons.js +57 -0
  39. package/lib/commonjs/ui/components/icons.js.map +1 -1
  40. package/lib/commonjs/ui/screens/chat/ChatView.js +39 -18
  41. package/lib/commonjs/ui/screens/chat/ChatView.js.map +1 -1
  42. package/lib/commonjs/ui/screens/chat/ChatView.styles.js +5 -16
  43. package/lib/commonjs/ui/screens/chat/ChatView.styles.js.map +1 -1
  44. package/lib/module/api/client.js +48 -2
  45. package/lib/module/api/client.js.map +1 -1
  46. package/lib/module/audio/native-player.js +93 -0
  47. package/lib/module/audio/native-player.js.map +1 -0
  48. package/lib/module/audio/voice.js +136 -0
  49. package/lib/module/audio/voice.js.map +1 -0
  50. package/lib/module/i18n.js +6 -0
  51. package/lib/module/i18n.js.map +1 -1
  52. package/lib/module/locales.js +4 -0
  53. package/lib/module/locales.js.map +1 -1
  54. package/lib/module/state/use-widget-state.js +30 -1
  55. package/lib/module/state/use-widget-state.js.map +1 -1
  56. package/lib/module/state/widget-store.js +44 -1
  57. package/lib/module/state/widget-store.js.map +1 -1
  58. package/lib/module/ui/WidgetProvider.js +7 -3
  59. package/lib/module/ui/WidgetProvider.js.map +1 -1
  60. package/lib/module/ui/components/FileCard.js +130 -0
  61. package/lib/module/ui/components/FileCard.js.map +1 -0
  62. package/lib/module/ui/components/ImageViewer.js +18 -36
  63. package/lib/module/ui/components/ImageViewer.js.map +1 -1
  64. package/lib/module/ui/components/Launcher.js +16 -2
  65. package/lib/module/ui/components/Launcher.js.map +1 -1
  66. package/lib/module/ui/components/MessagesSkeleton.js +124 -0
  67. package/lib/module/ui/components/MessagesSkeleton.js.map +1 -0
  68. package/lib/module/ui/components/VoiceNote.js +349 -0
  69. package/lib/module/ui/components/VoiceNote.js.map +1 -0
  70. package/lib/module/ui/components/ZoomableImage.js +291 -0
  71. package/lib/module/ui/components/ZoomableImage.js.map +1 -0
  72. package/lib/module/ui/components/icons.js +55 -0
  73. package/lib/module/ui/components/icons.js.map +1 -1
  74. package/lib/module/ui/screens/chat/ChatView.js +39 -18
  75. package/lib/module/ui/screens/chat/ChatView.js.map +1 -1
  76. package/lib/module/ui/screens/chat/ChatView.styles.js +5 -16
  77. package/lib/module/ui/screens/chat/ChatView.styles.js.map +1 -1
  78. package/lib/typescript/commonjs/api/client.d.ts +12 -0
  79. package/lib/typescript/commonjs/api/client.d.ts.map +1 -1
  80. package/lib/typescript/commonjs/audio/native-player.d.ts +36 -0
  81. package/lib/typescript/commonjs/audio/native-player.d.ts.map +1 -0
  82. package/lib/typescript/commonjs/audio/voice.d.ts +42 -0
  83. package/lib/typescript/commonjs/audio/voice.d.ts.map +1 -0
  84. package/lib/typescript/commonjs/i18n.d.ts +4 -0
  85. package/lib/typescript/commonjs/i18n.d.ts.map +1 -1
  86. package/lib/typescript/commonjs/locales.d.ts.map +1 -1
  87. package/lib/typescript/commonjs/state/use-widget-state.d.ts +8 -0
  88. package/lib/typescript/commonjs/state/use-widget-state.d.ts.map +1 -1
  89. package/lib/typescript/commonjs/state/widget-store.d.ts +13 -0
  90. package/lib/typescript/commonjs/state/widget-store.d.ts.map +1 -1
  91. package/lib/typescript/commonjs/ui/WidgetProvider.d.ts.map +1 -1
  92. package/lib/typescript/commonjs/ui/components/FileCard.d.ts +21 -0
  93. package/lib/typescript/commonjs/ui/components/FileCard.d.ts.map +1 -0
  94. package/lib/typescript/commonjs/ui/components/ImageViewer.d.ts +2 -2
  95. package/lib/typescript/commonjs/ui/components/ImageViewer.d.ts.map +1 -1
  96. package/lib/typescript/commonjs/ui/components/Launcher.d.ts.map +1 -1
  97. package/lib/typescript/commonjs/ui/components/MessagesSkeleton.d.ts +10 -0
  98. package/lib/typescript/commonjs/ui/components/MessagesSkeleton.d.ts.map +1 -0
  99. package/lib/typescript/commonjs/ui/components/VoiceNote.d.ts +32 -0
  100. package/lib/typescript/commonjs/ui/components/VoiceNote.d.ts.map +1 -0
  101. package/lib/typescript/commonjs/ui/components/ZoomableImage.d.ts +45 -0
  102. package/lib/typescript/commonjs/ui/components/ZoomableImage.d.ts.map +1 -0
  103. package/lib/typescript/commonjs/ui/components/icons.d.ts +4 -0
  104. package/lib/typescript/commonjs/ui/components/icons.d.ts.map +1 -1
  105. package/lib/typescript/commonjs/ui/screens/chat/ChatView.d.ts.map +1 -1
  106. package/lib/typescript/commonjs/ui/screens/chat/ChatView.styles.d.ts +4 -16
  107. package/lib/typescript/commonjs/ui/screens/chat/ChatView.styles.d.ts.map +1 -1
  108. package/lib/typescript/commonjs/ui/screens/chat/ChatView.types.d.ts +4 -0
  109. package/lib/typescript/commonjs/ui/screens/chat/ChatView.types.d.ts.map +1 -1
  110. package/lib/typescript/module/api/client.d.ts +12 -0
  111. package/lib/typescript/module/api/client.d.ts.map +1 -1
  112. package/lib/typescript/module/audio/native-player.d.ts +36 -0
  113. package/lib/typescript/module/audio/native-player.d.ts.map +1 -0
  114. package/lib/typescript/module/audio/voice.d.ts +42 -0
  115. package/lib/typescript/module/audio/voice.d.ts.map +1 -0
  116. package/lib/typescript/module/i18n.d.ts +4 -0
  117. package/lib/typescript/module/i18n.d.ts.map +1 -1
  118. package/lib/typescript/module/locales.d.ts.map +1 -1
  119. package/lib/typescript/module/state/use-widget-state.d.ts +8 -0
  120. package/lib/typescript/module/state/use-widget-state.d.ts.map +1 -1
  121. package/lib/typescript/module/state/widget-store.d.ts +13 -0
  122. package/lib/typescript/module/state/widget-store.d.ts.map +1 -1
  123. package/lib/typescript/module/ui/WidgetProvider.d.ts.map +1 -1
  124. package/lib/typescript/module/ui/components/FileCard.d.ts +21 -0
  125. package/lib/typescript/module/ui/components/FileCard.d.ts.map +1 -0
  126. package/lib/typescript/module/ui/components/ImageViewer.d.ts +2 -2
  127. package/lib/typescript/module/ui/components/ImageViewer.d.ts.map +1 -1
  128. package/lib/typescript/module/ui/components/Launcher.d.ts.map +1 -1
  129. package/lib/typescript/module/ui/components/MessagesSkeleton.d.ts +10 -0
  130. package/lib/typescript/module/ui/components/MessagesSkeleton.d.ts.map +1 -0
  131. package/lib/typescript/module/ui/components/VoiceNote.d.ts +32 -0
  132. package/lib/typescript/module/ui/components/VoiceNote.d.ts.map +1 -0
  133. package/lib/typescript/module/ui/components/ZoomableImage.d.ts +45 -0
  134. package/lib/typescript/module/ui/components/ZoomableImage.d.ts.map +1 -0
  135. package/lib/typescript/module/ui/components/icons.d.ts +4 -0
  136. package/lib/typescript/module/ui/components/icons.d.ts.map +1 -1
  137. package/lib/typescript/module/ui/screens/chat/ChatView.d.ts.map +1 -1
  138. package/lib/typescript/module/ui/screens/chat/ChatView.styles.d.ts +4 -16
  139. package/lib/typescript/module/ui/screens/chat/ChatView.styles.d.ts.map +1 -1
  140. package/lib/typescript/module/ui/screens/chat/ChatView.types.d.ts +4 -0
  141. package/lib/typescript/module/ui/screens/chat/ChatView.types.d.ts.map +1 -1
  142. package/package.json +14 -3
  143. package/react-native.config.js +12 -0
  144. package/src/api/client.ts +56 -2
  145. package/src/audio/native-player.ts +106 -0
  146. package/src/audio/voice.ts +127 -0
  147. package/src/i18n.ts +6 -0
  148. package/src/locales.ts +4 -0
  149. package/src/state/use-widget-state.ts +30 -1
  150. package/src/state/widget-store.ts +45 -1
  151. package/src/ui/WidgetProvider.tsx +7 -3
  152. package/src/ui/components/FileCard.tsx +111 -0
  153. package/src/ui/components/ImageViewer.tsx +11 -30
  154. package/src/ui/components/Launcher.tsx +7 -2
  155. package/src/ui/components/MessagesSkeleton.tsx +92 -0
  156. package/src/ui/components/VoiceNote.tsx +355 -0
  157. package/src/ui/components/ZoomableImage.tsx +250 -0
  158. package/src/ui/components/icons.tsx +33 -0
  159. package/src/ui/screens/chat/ChatView.styles.ts +5 -16
  160. package/src/ui/screens/chat/ChatView.tsx +43 -16
  161. package/src/ui/screens/chat/ChatView.types.ts +4 -0
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Voice notes (and any audio file) play inside the chat with the SDK's own
3
+ * native player (`src/audio/native-player.ts`). Where that isn't built into
4
+ * the app (Expo Go, bare React Native, an app built with SDK 1.2.2 or older),
5
+ * they play with the host app's `expo-audio` if it has one; otherwise they
6
+ * stay a file row that opens in the browser.
7
+ *
8
+ * Resolved once at module load, like the attachment pickers: each `require` is
9
+ * static so Metro can see it, and with `allowOptionalDependencies` (see
10
+ * metro.js) an uninstalled one bundles as a require that throws, which the
11
+ * `try` around it catches.
12
+ */
13
+ export declare function voicePlaybackBackend(): 'native' | 'expo-audio' | null;
14
+ /** The second argument to `useAudioPlayer` for the installed expo-audio. */
15
+ export declare function audioPlayerOptions(): unknown;
16
+ /**
17
+ * The player for one note: `play()`, `pause()`, `seekTo(seconds)`,
18
+ * `setPlaybackRate(rate)`, and its status (`currentTime`, `duration`,
19
+ * `playing`, `isLoaded`, `isBuffering`, `didJustFinish`, `error`). Only use it
20
+ * when `voicePlaybackBackend()` isn't null. Picked once, since the backend
21
+ * never changes while the app runs.
22
+ */
23
+ export declare const useVoicePlayer: (url: string) => {
24
+ player: any;
25
+ status: any;
26
+ };
27
+ /** Audio the chat can play in place: an `audio/*` attachment with a web address. */
28
+ export declare function isPlayableAudio(contentType: string | null | undefined, url: string | null | undefined): boolean;
29
+ /**
30
+ * Called as a note starts: pauses whichever note was playing and returns a
31
+ * release for this one's claim (call it when the note goes away).
32
+ */
33
+ export declare function claimVoicePlayback(pause: () => void): () => void;
34
+ /**
35
+ * Bar heights (0.15–1) for a note's waveform. Workstation doesn't send the
36
+ * recorded loudness to visitors, so the pattern is made up — seeded from the
37
+ * attachment, so the same note always draws the same bars.
38
+ */
39
+ export declare function voiceWaveformLevels(seed: string, count: number): number[];
40
+ /** `m:ss` for a playback position or length. */
41
+ export declare function formatVoiceClock(seconds: number): string;
42
+ //# sourceMappingURL=voice.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voice.d.ts","sourceRoot":"","sources":["../../../../src/audio/voice.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AA8BH,wBAAgB,oBAAoB,IAAI,QAAQ,GAAG,YAAY,GAAG,IAAI,CAErE;AAED,4EAA4E;AAC5E,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AASD;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK;IAAE,MAAM,EAAE,GAAG,CAAC;IAAC,MAAM,EAAE,GAAG,CAAA;CACN,CAAC;AAEnE,oFAAoF;AACpF,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAE/G;AAQD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAchE;AAID;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAezE;AAED,gDAAgD;AAChD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGxD"}
@@ -29,6 +29,10 @@ export declare const DEFAULT_LABELS: {
29
29
  readonly attachmentTooMany: "You can attach up to {count} files";
30
30
  readonly attachmentsTooLargeTogether: "Attachments are too large to send together — send some in another message";
31
31
  readonly attachmentFailed: "Couldn't attach that file";
32
+ readonly openAttachment: "Open {name}";
33
+ readonly voicePlay: "Play voice message";
34
+ readonly voicePause: "Pause voice message";
35
+ readonly voiceSpeed: "Playback speed";
32
36
  readonly imageLoadFailed: "Couldn't load this image";
33
37
  readonly openImageExternally: "Open image";
34
38
  readonly cameraPermissionDenied: "Allow camera access in Settings to take a photo";
@@ -1 +1 @@
1
- {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../../src/i18n.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,MAAM,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;AAEnE;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,CAYxF;AAeD,iFAAiF;AACjF,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAQpG;AAED,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0IjB,CAAC;AAEX,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,cAAc,CAAC;AAEnD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,MAAM,CAI7F;AAED,wBAAgB,WAAW,CAAC,SAAS,EAAE,UAAU,GAAG,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAM3E"}
1
+ {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../../src/i18n.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,MAAM,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;AAEnE;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,CAYxF;AAeD,iFAAiF;AACjF,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAQpG;AAED,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgJjB,CAAC;AAEX,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,cAAc,CAAC;AAEnD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,MAAM,CAI7F;AAED,wBAAgB,WAAW,CAAC,SAAS,EAAE,UAAU,GAAG,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAM3E"}
@@ -1 +1 @@
1
- {"version":3,"file":"locales.d.ts","sourceRoot":"","sources":["../../../src/locales.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAE7C,KAAK,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,OAAO,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC;AAgIrE,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAU,CAAC;AAErE,gEAAgE;AAChE,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAE3D"}
1
+ {"version":3,"file":"locales.d.ts","sourceRoot":"","sources":["../../../src/locales.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAE7C,KAAK,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,OAAO,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC;AAoIrE,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAU,CAAC;AAErE,gEAAgE;AAChE,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAE3D"}
@@ -7,4 +7,12 @@ import type { WidgetState } from '../types';
7
7
  import type { WidgetStore } from './widget-store';
8
8
  export declare function useWidgetState(): WidgetState;
9
9
  export declare function useWidgetStore(): WidgetStore;
10
+ /**
11
+ * A slice of the state that re-renders only when the slice changes (by
12
+ * `isEqual`) — for UI that lives on the host's own screens, like the launcher,
13
+ * which shouldn't redraw on every message or typing event. Internal.
14
+ */
15
+ export declare function useWidgetSelector<T>(select: (state: WidgetState) => T, isEqual: (previous: T, next: T) => boolean): T;
16
+ /** Same keys, same values (by identity). */
17
+ export declare function shallowEqual<T extends Record<string, unknown>>(previous: T, next: T): boolean;
10
18
  //# sourceMappingURL=use-widget-state.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-widget-state.d.ts","sourceRoot":"","sources":["../../../../src/state/use-widget-state.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD,wBAAgB,cAAc,IAAI,WAAW,CAG5C;AAED,wBAAgB,cAAc,IAAI,WAAW,CAE5C"}
1
+ {"version":3,"file":"use-widget-state.d.ts","sourceRoot":"","sources":["../../../../src/state/use-widget-state.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD,wBAAgB,cAAc,IAAI,WAAW,CAG5C;AAED,wBAAgB,cAAc,IAAI,WAAW,CAE5C;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EACjC,MAAM,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,CAAC,EACjC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,OAAO,GACzC,CAAC,CAaH;AAED,4CAA4C;AAC5C,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,OAAO,CAG7F"}
@@ -55,7 +55,15 @@ export declare class WidgetStore {
55
55
  /** True once `currentUserKey` mirrors storage — memory is then authoritative. */
56
56
  private userKeyLoaded;
57
57
  private pendingConversationId;
58
+ /**
59
+ * The screen a thread was opened from, so its back button returns there.
60
+ * Null when it was opened with the messenger closed (a push, a notification
61
+ * card, `presentConversation`): there is nothing to go back to.
62
+ */
63
+ private chatOpenedFrom;
58
64
  private appStateSubscription;
65
+ /** When the app last went to the background (0: hasn't this session). */
66
+ private backgroundedAt;
59
67
  private lastTypingPingAt;
60
68
  private visitorTypingActive;
61
69
  private seenMessageIds;
@@ -244,6 +252,11 @@ export declare class WidgetStore {
244
252
  hide(): void;
245
253
  toggle(space?: WidgetSpaceType): void;
246
254
  setView(view: WidgetView): void;
255
+ /**
256
+ * The thread's back button: the screen it was opened from, or the
257
+ * conversation list when it was opened from outside the messenger.
258
+ */
259
+ leaveConversation(): void;
247
260
  setActiveTab(tab: WidgetSpaceType): void;
248
261
  setLocale(locale: string): void;
249
262
  startNewConversation(prefill?: string): void;
@@ -1 +1 @@
1
- {"version":3,"file":"widget-store.d.ts","sourceRoot":"","sources":["../../../../src/state/widget-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"widget-store.d.ts","sourceRoot":"","sources":["../../../../src/state/widget-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAAyC,eAAe,EAAE,MAAM,eAAe,CAAC;AAGvF,OAAO,EAAE,YAAY,EAAqB,MAAM,WAAW,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAIzD,OAAO,KAAK,EACV,aAAa,EACb,WAAW,EAEX,wBAAwB,EAExB,kBAAkB,EAClB,mBAAmB,EACnB,SAAS,EAIT,sBAAsB,EAEtB,eAAe,EACf,WAAW,EACX,UAAU,EACV,UAAU,EACX,MAAM,UAAU,CAAC;AAwClB,gFAAgF;AAChF,eAAO,MAAM,cAAc,OAAO,CAAC;AA6DnC,qBAAa,WAAW;IACtB,QAAQ,CAAC,MAAM,kBAAyB;IAExC,QAAQ,CAAC,MAAM,eAAsB;IAErC,QAAQ,CAAC,IAAI,cAMX;IAEF,OAAO,CAAC,KAAK,CAA8B;IAE3C,OAAO,CAAC,WAAW,CAAyB;IAE5C,OAAO,CAAC,QAAQ,CAAwB;IAExC,OAAO,CAAC,WAAW,CAA8C;IAEjE,OAAO,CAAC,0BAA0B,CAG3B;IAEP,OAAO,CAAC,UAAU,CAA8D;IAEhF,8EAA8E;IAC9E,OAAO,CAAC,yBAAyB,CAAQ;IAEzC,mDAAmD;IACnD,OAAO,CAAC,YAAY,CAAQ;IAE5B,oFAAoF;IACpF,OAAO,CAAC,aAAa,CAAqB;IAE1C,6EAA6E;IAC7E,OAAO,CAAC,WAAW,CAAK;IAExB,iHAAiH;IACjH,OAAO,CAAC,YAAY,CAAK;IAEzB,kIAAkI;IAClI,OAAO,CAAC,kBAAkB,CAAqB;IAE/C,OAAO,CAAC,gBAAgB,CAA8C;IAEtE,2EAA2E;IAC3E,OAAO,CAAC,aAAa,CAAuB;IAE5C,oHAAoH;IACpH,OAAO,CAAC,gBAAgB,CAAqB;IAE7C,4GAA4G;IAC5G,OAAO,CAAC,WAAW,CAAK;IAExB,iEAAiE;IACjE,OAAO,CAAC,eAAe,CAA8C;IAErE,oFAAoF;IACpF,OAAO,CAAC,iBAAiB,CAAS;IAElC,OAAO,CAAC,WAAW,CAA8B;IAEjD,mFAAmF;IACnF,OAAO,CAAC,cAAc,CAAuB;IAE7C,OAAO,CAAC,WAAW,CAA2B;IAE9C,4DAA4D;IAC5D,OAAO,CAAC,cAAc,CAAuB;IAE7C,iFAAiF;IACjF,OAAO,CAAC,aAAa,CAAS;IAE9B,OAAO,CAAC,qBAAqB,CAAuB;IAEpD;;;;OAIG;IACH,OAAO,CAAC,cAAc,CAAyC;IAE/D,OAAO,CAAC,oBAAoB,CAAmC;IAE/D,yEAAyE;IACzE,OAAO,CAAC,cAAc,CAAK;IAE3B,OAAO,CAAC,gBAAgB,CAAK;IAE7B,OAAO,CAAC,mBAAmB,CAAS;IAEpC,OAAO,CAAC,cAAc,CAAgB;IACtC,wFAAwF;IACxF,OAAO,CAAC,aAAa,CAA6B;IAElD;;;;;OAKG;IACH,OAAO,CAAC,KAAK,CAAK;IAElB,+EAA+E;IAC/E,OAAO,CAAC,aAAa,CAAuC;IAE5D,0EAA0E;IAC1E,OAAO,CAAC,aAAa,CAAuC;IAE5D,kFAAkF;IAClF,OAAO,CAAC,SAAS,CAAS;IAE1B;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAS;IAEvB,kFAAkF;IAClF,OAAO,CAAC,iBAAiB,CAAqC;IAE9D,OAAO,CAAC,kBAAkB,CAAK;IAE/B,yEAAyE;IACzE,OAAO,CAAC,mBAAmB,CAAK;IAEhC;;;;OAIG;IACH,OAAO,CAAC,gBAAgB,CAAK;IAE7B;;;OAGG;IACH,OAAO,CAAC,oBAAoB,CAAqC;IAEjE,0EAA0E;IAC1E,OAAO,CAAC,WAAW,CAA2C;IAE9D,8EAA8E;IAC9E,OAAO,CAAC,mBAAmB,CAAS;IAEpC,qFAAqF;IACrF,OAAO,CAAC,aAAa,CAAS;IAE9B,OAAO,CAAC,SAAS,CAA8C;IAE/D,OAAO,CAAC,kBAAkB,CAAuB;;IASjD,SAAS,GAAI,UAAU,MAAM,IAAI,KAAG,CAAC,MAAM,IAAI,CAAC,CAK9C;IAEF,QAAQ,QAAO,WAAW,CAAe;IAEzC,4FAA4F;IAC5F,mBAAmB,QAAO,MAAM,CAA0B;IAE1D,OAAO,CAAC,QAAQ;IAuChB,OAAO,CAAC,SAAS;IAMjB,8EAA8E;IAC9E,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,OAAO;IAMT,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAwE/C,OAAO,CAAC,WAAW;IAKnB;;;;;OAKG;YACW,gBAAgB;YAehB,OAAO;IA+BrB,gFAAgF;YAClE,WAAW;IAmHzB;;;;OAIG;YACW,gBAAgB;IA0B9B;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,aAAa;YAgBP,aAAa;IAU3B;;;;OAIG;IACH,OAAO,CAAC,WAAW;IA4BnB,iFAAiF;IACjF,OAAO,CAAC,mBAAmB;IAMrB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBtC,2BAA2B,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAiC5D,UAAU,CAAC,UAAU,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IAUnE;;;;OAIG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB7B;;;;;;;OAOG;YACW,WAAW;YASX,oBAAoB;IAsClC;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAW5B,+EAA+E;IAC/E,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,eAAe;IAqBvB,6EAA6E;YAC/D,iBAAiB;IAc/B,OAAO,CAAC,aAAa;YAeP,oBAAoB;IA2BlC;;;;OAIG;YACW,aAAa;IAsB3B,OAAO,CAAC,mBAAmB;IAwF3B;;;;;;OAMG;IACH,OAAO,CAAC,gBAAgB;IASxB;;;;;;OAMG;IACH,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,aAAa;IAIrB,gFAAgF;YAClE,UAAU;IAgBxB,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,iBAAiB;IAQzB;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAsB3B;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IAiB5B,OAAO,CAAC,gBAAgB;IAqIxB,kEAAkE;IAClE,OAAO,CAAC,gBAAgB;IAOxB,gFAAgF;IAChF,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,uBAAuB;IAyB/B,OAAO,CAAC,yBAAyB;IASjC,OAAO,CAAC,sBAAsB;IAU9B,OAAO,CAAC,mBAAmB;IAO3B;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAsB1B,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,eAAe;IAevB,OAAO,CAAC,KAAK,CAAC,EAAE,eAAe,GAAG,IAAI;IAyBtC,IAAI,IAAI,IAAI;IASZ,MAAM,CAAC,KAAK,CAAC,EAAE,eAAe,GAAG,IAAI;IAKrC,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAU/B;;;OAGG;IACH,iBAAiB,IAAI,IAAI;IAIzB,YAAY,CAAC,GAAG,EAAE,eAAe,GAAG,IAAI;IAcxC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/B,oBAAoB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAiB5C,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIrC;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAyB1B,wEAAwE;IACxE,wBAAwB,IAAI,IAAI;IAIhC,sBAAsB,IAAI,IAAI;IAQxB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAiCrC,gBAAgB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmDvD,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IA8BvC;;;;;OAKG;YACW,iBAAiB;IA6C/B,6EAA6E;IAC7E,OAAO,CAAC,eAAe;IAUvB;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAevB,OAAO,CAAC,iBAAiB;IAUzB;;;;;OAKG;IACG,WAAW,CACf,IAAI,EAAE,MAAM,EACZ,WAAW,GAAE,kBAAkB,EAAO,EACtC,aAAa,CAAC,EAAE,aAAa,GAC5B,OAAO,CAAC,IAAI,CAAC;IA4JV,eAAe,CAAC,IAAI,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAY7F;;;;OAIG;IACG,gBAAgB,CACpB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GACxE,OAAO,CAAC,wBAAwB,CAAC;IAwBpC,gFAAgF;IAChF,YAAY,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IAoBrC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,IAAI;IAWlE,OAAO,CAAC,mBAAmB;IAmB3B,+DAA+D;IAC/D,QAAQ,IAAI,IAAI;IAgChB;;;;OAIG;IACH,OAAO,CAAC,WAAW;IA8CnB;;;;OAIG;IACH,OAAO,CAAC,QAAQ;IAUhB,qFAAqF;IACrF,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAMrC,2DAA2D;IAC3D,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAQpC;;;;;;OAMG;IACH,OAAO,CAAC,oBAAoB;IAc5B,mGAAmG;IACnG,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAKtC;;;;OAIG;IACH,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAOtC,OAAO,CAAC,cAAc;IAMtB;;;;;OAKG;IACG,qBAAqB,CACzB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,OAAO,CAAC,mBAAmB,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC,EAChE,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAwEjC,OAAO,CAAC,eAAe;IAmBvB,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,iBAAiB;IAYzB;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,gBAAgB;IAKxB,wFAAwF;IACxF,OAAO,CAAC,mBAAmB;IAU3B;;;;OAIG;IACH,OAAO,CAAC,SAAS;IAIjB,kFAAkF;IAClF,OAAO,CAAC,SAAS;IAajB,OAAO,IAAI,IAAI;CAWhB"}
@@ -1 +1 @@
1
- {"version":3,"file":"WidgetProvider.d.ts","sourceRoot":"","sources":["../../../../src/ui/WidgetProvider.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAoDH,MAAM,WAAW,wBAAwB;IACvC,oEAAoE;IACpE,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,8EAA8E;IAC9E,iBAAiB,CAAC,EAAE,WAAW,GAAG,YAAY,CAAC;CAChD;AAKD,wBAAgB,mBAAmB,CAAC,EAClC,QAAQ,EACR,iBAA+B,GAChC,EAAE,wBAAwB,+BAujB1B"}
1
+ {"version":3,"file":"WidgetProvider.d.ts","sourceRoot":"","sources":["../../../../src/ui/WidgetProvider.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAoDH,MAAM,WAAW,wBAAwB;IACvC,oEAAoE;IACpE,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,8EAA8E;IAC9E,iBAAiB,CAAC,EAAE,WAAW,GAAG,YAAY,CAAC;CAChD;AAKD,wBAAgB,mBAAmB,CAAC,EAClC,QAAQ,EACR,iBAA+B,GAChC,EAAE,wBAAwB,+BA2jB1B"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * An attachment that opens outside the chat (PDF, video, sheet…), drawn as a
3
+ * card that reads as tappable: a tile with the file's type, its name, the
4
+ * type and size under it, and an arrow — instead of a bare name in a box.
5
+ */
6
+ /** `PDF`, `MP4`, `XLSX` — from the name, else the MIME subtype; at most 4 letters. */
7
+ export declare function fileTypeLabel(name: string, contentType: string | null | undefined): string;
8
+ export declare function FileCard({ name, contentType, size, color, onBrandBubble, openLabel, onPress, }: {
9
+ name: string;
10
+ contentType: string;
11
+ size: number;
12
+ /** The workspace color. */
13
+ color: string;
14
+ /** In a visitor bubble, which is filled with `color`: the card turns white-on-color. */
15
+ onBrandBubble: boolean;
16
+ /** Screen-reader label, e.g. "Open report.pdf". */
17
+ openLabel: string;
18
+ /** Missing while there's nothing to open yet (an unsent file). */
19
+ onPress?: () => void;
20
+ }): import("react").JSX.Element;
21
+ //# sourceMappingURL=FileCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileCard.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/FileCard.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,sFAAsF;AACtF,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAK1F;AAED,wBAAgB,QAAQ,CAAC,EACvB,IAAI,EACJ,WAAW,EACX,IAAI,EACJ,KAAK,EACL,aAAa,EACb,SAAS,EACT,OAAO,GACR,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,wFAAwF;IACxF,aAAa,EAAE,OAAO,CAAC;IACvB,mDAAmD;IACnD,SAAS,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB,+BA0CA"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Full-screen viewer for image attachments, so a tap on a photo the agent sent
3
- * stays inside the messenger instead of bouncing to the browser. Pinch-to-zoom
4
- * uses the native ScrollView zoom (iOS); Android shows the image fitted.
3
+ * stays inside the messenger instead of bouncing to the browser. Pinch, drag
4
+ * and double-tap zoom work on iOS and Android (see ZoomableImage).
5
5
  */
6
6
  export interface ImageViewerLabels {
7
7
  close: string;
@@ -1 +1 @@
1
- {"version":3,"file":"ImageViewer.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/ImageViewer.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAmBH,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,gBAAgB;IACxB,KAAK,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC5C,MAAM,EAAE,iBAAiB,CAAC;IAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,+EAA+E;IAC/E,gBAAgB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAED,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAAE,gBAAgB,+BAsEzF"}
1
+ {"version":3,"file":"ImageViewer.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/ImageViewer.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAkBH,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,gBAAgB;IACxB,KAAK,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC5C,MAAM,EAAE,iBAAiB,CAAC;IAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,+EAA+E;IAC/E,gBAAgB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAED,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAAE,gBAAgB,+BA2DzF"}
@@ -1 +1 @@
1
- {"version":3,"file":"Launcher.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/Launcher.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAiBH,MAAM,WAAW,aAAa;IAC5B,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,0DAA0D;IAC1D,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,QAAQ,CAAC,EACvB,QAAQ,EACR,eAAe,EACf,iBAAiB,EACjB,MAAc,GACf,EAAE,aAAa,sCA8Cf"}
1
+ {"version":3,"file":"Launcher.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/Launcher.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAiBH,MAAM,WAAW,aAAa;IAC5B,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,0DAA0D;IAC1D,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,QAAQ,CAAC,EACvB,QAAQ,EACR,eAAe,EACf,iBAAiB,EACjB,MAAc,GACf,EAAE,aAAa,sCAmDf"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Placeholder bubbles while a conversation's messages load: the shape of a
3
+ * thread (team on one side, visitor on the other) that gently pulses, so the
4
+ * screen reads as "messages are coming" instead of a line of text.
5
+ */
6
+ export declare function MessagesSkeleton({ color, label }: {
7
+ color: string;
8
+ label: string;
9
+ }): import("react").JSX.Element;
10
+ //# sourceMappingURL=MessagesSkeleton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MessagesSkeleton.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/MessagesSkeleton.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAsBH,wBAAgB,gBAAgB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,+BAkDlF"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * A voice note (or any audio attachment) played inside the chat, laid out the
3
+ * way messaging apps do it: a play button beside a waveform the visitor can
4
+ * tap or drag to jump through the note, the time under it, and a speed chip
5
+ * once the note has been started. Only rendered when the app can play audio
6
+ * (see `src/audio/voice.ts`); otherwise audio stays a file row.
7
+ */
8
+ export interface VoiceNoteLabels {
9
+ play: string;
10
+ pause: string;
11
+ speed: string;
12
+ }
13
+ interface VoiceNoteProps {
14
+ url: string;
15
+ /** Keeps the made-up waveform the same for this note on every render. */
16
+ seed: string;
17
+ /** The workspace color. */
18
+ color: string;
19
+ /** In a visitor bubble, which is filled with `color`: the player turns white. */
20
+ onBrandBubble: boolean;
21
+ labels: VoiceNoteLabels;
22
+ /** The note can't be played (expired link, unsupported format). */
23
+ onError: () => void;
24
+ }
25
+ /**
26
+ * The player is only created once the visitor taps play. The whole thread
27
+ * renders at once, so a player per note would download every note in the
28
+ * conversation as soon as the chat opened.
29
+ */
30
+ export declare function VoiceNote(props: VoiceNoteProps): import("react").JSX.Element;
31
+ export {};
32
+ //# sourceMappingURL=VoiceNote.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VoiceNote.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/VoiceNote.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAkBH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,cAAc;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;IACb,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,iFAAiF;IACjF,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,EAAE,eAAe,CAAC;IACxB,mEAAmE;IACnE,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAUD;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,+BAa9C"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * An image the visitor can pinch to zoom, drag around once zoomed, and
3
+ * double-tap to zoom in on a spot (and again to zoom back out). Built on
4
+ * PanResponder and Animated, so it behaves the same on iOS and Android
5
+ * without a gesture library in the host app.
6
+ */
7
+ export declare const MAX_ZOOM = 4;
8
+ export declare const DOUBLE_TAP_ZOOM = 2.5;
9
+ /** Scale and offset (from the centre of the view) of the image. */
10
+ export interface ZoomView {
11
+ scale: number;
12
+ x: number;
13
+ y: number;
14
+ }
15
+ interface Size {
16
+ width: number;
17
+ height: number;
18
+ }
19
+ /** The size the image is drawn at with `contain`, before any zoom. */
20
+ export declare function fittedSize(box: Size, image: Size | null): Size;
21
+ /**
22
+ * Keeps the image inside the screen: zoom between 1× and `MAX_ZOOM`, and no
23
+ * empty space past an edge the zoomed image is wider (or taller) than.
24
+ */
25
+ export declare function clampView(view: ZoomView, box: Size, content: Size): ZoomView;
26
+ /**
27
+ * The view at `scale` that keeps the spot that was under `from` (a point
28
+ * relative to the centre, in the `start` view) under `to`. Pinching zooms
29
+ * around the fingers this way, and moving them pans at the same time.
30
+ */
31
+ export declare function zoomAround(start: ZoomView, scale: number, from: {
32
+ x: number;
33
+ y: number;
34
+ }, to: {
35
+ x: number;
36
+ y: number;
37
+ }): ZoomView;
38
+ export declare function ZoomableImage({ uri, accessibilityLabel, onLoad, onError, }: {
39
+ uri: string;
40
+ accessibilityLabel: string;
41
+ onLoad: () => void;
42
+ onError: () => void;
43
+ }): import("react").JSX.Element;
44
+ export {};
45
+ //# sourceMappingURL=ZoomableImage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ZoomableImage.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/ZoomableImage.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgBH,eAAO,MAAM,QAAQ,IAAI,CAAC;AAC1B,eAAO,MAAM,eAAe,MAAM,CAAC;AAKnC,mEAAmE;AACnE,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,UAAU,IAAI;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,sEAAsE;AACtE,wBAAgB,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAI9D;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,GAAG,QAAQ,CAS5E;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,EAAE,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,QAAQ,CAIjI;AAcD,wBAAgB,aAAa,CAAC,EAC5B,GAAG,EACH,kBAAkB,EAClB,MAAM,EACN,OAAO,GACR,EAAE;IACD,GAAG,EAAE,MAAM,CAAC;IACZ,kBAAkB,EAAE,MAAM,CAAC;IAC3B,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,+BAsJA"}
@@ -18,6 +18,10 @@ type ChevronDirection = 'left' | 'right' | 'up' | 'down';
18
18
  export declare function ChevronIcon({ size, color, direction, style, }: IconProps & {
19
19
  direction?: ChevronDirection;
20
20
  }): import("react").JSX.Element;
21
+ /** A right-pointing triangle, drawn with borders — a voice note's play button. */
22
+ export declare function PlayIcon({ size, color, style }: IconProps): import("react").JSX.Element;
23
+ /** Two upright bars — a playing voice note's pause button. */
24
+ export declare function PauseIcon({ size, color, style }: IconProps): import("react").JSX.Element;
21
25
  /** Arrow with a shaft — used for the "start a conversation" affordance. */
22
26
  export declare function ArrowRightIcon({ size, color, style }: IconProps): import("react").JSX.Element;
23
27
  /** Right-pointing triangle for the send button. */
@@ -1 +1 @@
1
- {"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/icons.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAIhE,UAAU,SAAS;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED,wBAAwB;AACxB,wBAAgB,SAAS,CAAC,EAAE,IAAS,EAAE,KAAyB,EAAE,KAAK,EAAE,EAAE,SAAS,+BAcnF;AAED,KAAK,gBAAgB,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,MAAM,CAAC;AASzD,sEAAsE;AACtE,wBAAgB,WAAW,CAAC,EAC1B,IAAS,EACT,KAAyB,EACzB,SAAkB,EAClB,KAAK,GACN,EAAE,SAAS,GAAG;IAAE,SAAS,CAAC,EAAE,gBAAgB,CAAA;CAAE,+BAgB9C;AAED,2EAA2E;AAC3E,wBAAgB,cAAc,CAAC,EAAE,IAAS,EAAE,KAAyB,EAAE,KAAK,EAAE,EAAE,SAAS,+BA2BxF;AAED,mDAAmD;AACnD,6EAA6E;AAC7E,wBAAgB,WAAW,CAAC,EAAE,IAAS,EAAE,KAAqB,EAAE,KAAK,EAAE,EAAE,SAAS,+BA2BjF;AAED,yCAAyC;AACzC,wBAAgB,QAAQ,CAAC,EAAE,IAAS,EAAE,KAAqB,EAAE,KAAK,EAAE,EAAE,SAAS,+BA4B9E;AAED,+DAA+D;AAC/D,wBAAgB,eAAe,CAAC,EAAE,IAAS,EAAE,KAA0B,EAAE,KAAK,EAAE,EAAE,SAAS,+BA6B1F;AAED,oCAAoC;AACpC,wBAAgB,QAAQ,CAAC,EAAE,IAAS,EAAE,KAA0B,EAAE,KAAK,EAAE,EAAE,SAAS,+BA6BnF;AAED,6DAA6D;AAC7D,wBAAgB,UAAU,CAAC,EAAE,IAAS,EAAE,KAAqB,EAAE,KAAK,EAAE,EAAE,SAAS,+BA8BhF;AAED,mDAAmD;AACnD,wBAAgB,SAAS,CAAC,EAAE,IAAS,EAAE,KAA2B,EAAE,KAAK,EAAE,EAAE,SAAS,+BA+BrF;AAED,wBAAgB,aAAa,CAAC,EAAE,IAAS,EAAE,KAAyB,EAAE,KAAK,EAAE,EAAE,SAAS,+BAgBvF;AASD,wEAAwE;AACxE,wBAAgB,SAAS,CAAC,EAAE,IAAS,EAAE,KAAyB,EAAE,KAAK,EAAE,EAAE,SAAS,+BAkCnF"}
1
+ {"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/icons.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAIhE,UAAU,SAAS;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED,wBAAwB;AACxB,wBAAgB,SAAS,CAAC,EAAE,IAAS,EAAE,KAAyB,EAAE,KAAK,EAAE,EAAE,SAAS,+BAcnF;AAED,KAAK,gBAAgB,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,MAAM,CAAC;AASzD,sEAAsE;AACtE,wBAAgB,WAAW,CAAC,EAC1B,IAAS,EACT,KAAyB,EACzB,SAAkB,EAClB,KAAK,GACN,EAAE,SAAS,GAAG;IAAE,SAAS,CAAC,EAAE,gBAAgB,CAAA;CAAE,+BAgB9C;AAED,kFAAkF;AAClF,wBAAgB,QAAQ,CAAC,EAAE,IAAS,EAAE,KAAqB,EAAE,KAAK,EAAE,EAAE,SAAS,+BAmB9E;AAED,8DAA8D;AAC9D,wBAAgB,SAAS,CAAC,EAAE,IAAS,EAAE,KAAqB,EAAE,KAAK,EAAE,EAAE,SAAS,+BAQ/E;AAED,2EAA2E;AAC3E,wBAAgB,cAAc,CAAC,EAAE,IAAS,EAAE,KAAyB,EAAE,KAAK,EAAE,EAAE,SAAS,+BA2BxF;AAED,mDAAmD;AACnD,6EAA6E;AAC7E,wBAAgB,WAAW,CAAC,EAAE,IAAS,EAAE,KAAqB,EAAE,KAAK,EAAE,EAAE,SAAS,+BA2BjF;AAED,yCAAyC;AACzC,wBAAgB,QAAQ,CAAC,EAAE,IAAS,EAAE,KAAqB,EAAE,KAAK,EAAE,EAAE,SAAS,+BA4B9E;AAED,+DAA+D;AAC/D,wBAAgB,eAAe,CAAC,EAAE,IAAS,EAAE,KAA0B,EAAE,KAAK,EAAE,EAAE,SAAS,+BA6B1F;AAED,oCAAoC;AACpC,wBAAgB,QAAQ,CAAC,EAAE,IAAS,EAAE,KAA0B,EAAE,KAAK,EAAE,EAAE,SAAS,+BA6BnF;AAED,6DAA6D;AAC7D,wBAAgB,UAAU,CAAC,EAAE,IAAS,EAAE,KAAqB,EAAE,KAAK,EAAE,EAAE,SAAS,+BA8BhF;AAED,mDAAmD;AACnD,wBAAgB,SAAS,CAAC,EAAE,IAAS,EAAE,KAA2B,EAAE,KAAK,EAAE,EAAE,SAAS,+BA+BrF;AAED,wBAAgB,aAAa,CAAC,EAAE,IAAS,EAAE,KAAyB,EAAE,KAAK,EAAE,EAAE,SAAS,+BAgBvF;AASD,wEAAwE;AACxE,wBAAgB,SAAS,CAAC,EAAE,IAAS,EAAE,KAAyB,EAAE,KAAK,EAAE,EAAE,SAAS,+BAkCnF"}
@@ -1 +1 @@
1
- {"version":3,"file":"ChatView.d.ts","sourceRoot":"","sources":["../../../../../../src/ui/screens/chat/ChatView.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAuDH,OAAO,KAAK,EAAc,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAElE,wBAAgB,QAAQ,CAAC,EACvB,QAAQ,EACR,OAAO,EACP,eAAe,EACf,WAAW,EACX,KAAK,EACL,SAAS,EACT,WAAW,EACX,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,WAAgB,EAChB,cAAc,EACd,MAAM,EACN,WAAW,EACX,cAAc,EACd,MAAM,EACN,iBAAsB,EACtB,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,UAAU,EACV,QAAQ,EACR,MAAM,EACN,OAAO,GACR,EAAE,aAAa,+BAuiBf"}
1
+ {"version":3,"file":"ChatView.d.ts","sourceRoot":"","sources":["../../../../../../src/ui/screens/chat/ChatView.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA2DH,OAAO,KAAK,EAAc,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAElE,wBAAgB,QAAQ,CAAC,EACvB,QAAQ,EACR,OAAO,EACP,eAAe,EACf,WAAW,EACX,KAAK,EACL,SAAS,EACT,WAAW,EACX,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,WAAgB,EAChB,cAAc,EACd,MAAM,EACN,WAAW,EACX,cAAc,EACd,MAAM,EACN,iBAAsB,EACtB,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,UAAU,EACV,QAAQ,EACR,MAAM,EACN,OAAO,GACR,EAAE,aAAa,+BAuiBf"}
@@ -78,6 +78,10 @@ export declare const styles: {
78
78
  flexGrow: number;
79
79
  justifyContent: "center";
80
80
  };
81
+ messagesContentLoading: {
82
+ flexGrow: number;
83
+ justifyContent: "flex-end";
84
+ };
81
85
  emptyState: {
82
86
  alignItems: "center";
83
87
  paddingHorizontal: 20;
@@ -111,13 +115,6 @@ export declare const styles: {
111
115
  fontSize: 13;
112
116
  fontWeight: "600";
113
117
  };
114
- stateText: {
115
- textAlign: "center";
116
- paddingVertical: number;
117
- paddingHorizontal: 20;
118
- color: "#9ca3af";
119
- fontSize: 13;
120
- };
121
118
  messageRow: {
122
119
  maxWidth: "100%";
123
120
  };
@@ -207,15 +204,6 @@ export declare const styles: {
207
204
  height: number;
208
205
  borderRadius: 10;
209
206
  };
210
- attachmentFile: {
211
- borderWidth: number;
212
- borderRadius: 10;
213
- paddingHorizontal: number;
214
- paddingVertical: number;
215
- };
216
- attachmentName: {
217
- fontSize: 13;
218
- };
219
207
  failedText: {
220
208
  fontSize: 12;
221
209
  marginTop: 4;
@@ -1 +1 @@
1
- {"version":3,"file":"ChatView.styles.d.ts","sourceRoot":"","sources":["../../../../../../src/ui/screens/chat/ChatView.styles.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAOlF,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmajB,CAAC"}
1
+ {"version":3,"file":"ChatView.styles.d.ts","sourceRoot":"","sources":["../../../../../../src/ui/screens/chat/ChatView.styles.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAOlF,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwZjB,CAAC"}
@@ -5,6 +5,7 @@ import type { AgentUiAction, AttachmentSource, ConversationRatingResult, Message
5
5
  import type { AgentUiBlockLabels } from '../../components/AgentUiBlocks';
6
6
  import type { ImageViewerLabels } from '../../components/ImageViewer';
7
7
  import type { RatingCardLabels } from '../../components/RatingCard';
8
+ import type { VoiceNoteLabels } from '../../components/VoiceNote';
8
9
  export interface ChatLabels {
9
10
  back: string;
10
11
  loading: string;
@@ -41,6 +42,9 @@ export interface ChatLabels {
41
42
  rating: RatingCardLabels;
42
43
  attach: AttachLabels;
43
44
  viewer: ImageViewerLabels;
45
+ voice: VoiceNoteLabels;
46
+ /** Screen-reader label for a file card; keeps `{name}`. */
47
+ openAttachment: string;
44
48
  }
45
49
  /** Composer attachment copy. Limits are already filled in; `remove` keeps `{name}`. */
46
50
  export interface AttachLabels {
@@ -1 +1 @@
1
- {"version":3,"file":"ChatView.types.d.ts","sourceRoot":"","sources":["../../../../../../src/ui/screens/chat/ChatView.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ChatView.types.d.ts","sourceRoot":"","sources":["../../../../../../src/ui/screens/chat/ChatView.types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@repzo/widget-react-native",
3
- "version": "1.2.1",
4
- "description": "Repzo chat widget for React Native \u2014 pure JavaScript, no native modules",
3
+ "version": "1.3.0",
4
+ "description": "Repzo chat widget for React Native",
5
5
  "source": "./src/index.tsx",
6
6
  "main": "./lib/commonjs/index.js",
7
7
  "module": "./lib/module/index.js",
@@ -30,7 +30,14 @@
30
30
  "!**/__mocks__",
31
31
  "!**/.*",
32
32
  "metro.js",
33
- "CHANGELOG.md"
33
+ "CHANGELOG.md",
34
+ "android",
35
+ "!android/build",
36
+ "!android/.gradle",
37
+ "!android/.cxx",
38
+ "ios",
39
+ "expo-module.config.json",
40
+ "react-native.config.js"
34
41
  ],
35
42
  "scripts": {
36
43
  "test": "bob build && jest",
@@ -53,6 +60,7 @@
53
60
  "peerDependencies": {
54
61
  "@react-native-async-storage/async-storage": "*",
55
62
  "@react-native-firebase/messaging": "*",
63
+ "expo-audio": "*",
56
64
  "expo-crypto": "*",
57
65
  "expo-document-picker": "*",
58
66
  "expo-file-system": "*",
@@ -70,6 +78,9 @@
70
78
  "@react-native-firebase/messaging": {
71
79
  "optional": true
72
80
  },
81
+ "expo-audio": {
82
+ "optional": true
83
+ },
73
84
  "expo-crypto": {
74
85
  "optional": true
75
86
  },
@@ -0,0 +1,12 @@
1
+ // The native voice player is an Expo module, linked through
2
+ // expo-module.config.json. This keeps the React Native CLI from also trying
3
+ // to link it as a classic native module, which apps without Expo modules
4
+ // would fail to build. Without Expo modules, voice notes stay a file row.
5
+ module.exports = {
6
+ dependency: {
7
+ platforms: {
8
+ android: null,
9
+ ios: null,
10
+ },
11
+ },
12
+ };
package/src/api/client.ts CHANGED
@@ -62,6 +62,16 @@ export class RepzoWidgetError extends Error {
62
62
  }
63
63
  }
64
64
 
65
+ /** A Send message part asked for on its own, which may share one request with others. */
66
+ type SendPart = 'post' | 'outbound';
67
+
68
+ interface SendPartAsk {
69
+ part: SendPart;
70
+ own: () => Promise<unknown>;
71
+ resolve: (value: unknown) => void;
72
+ reject: (error: unknown) => void;
73
+ }
74
+
65
75
  interface RequestOptions {
66
76
  method?: 'GET' | 'POST' | 'DELETE';
67
77
  body?: unknown;
@@ -92,6 +102,9 @@ export class WidgetApiClient {
92
102
  /** Set by the store: a 403 with a terminal `code` came back from any endpoint. */
93
103
  onTerminalError: ((error: RepzoWidgetError) => void) | null = null;
94
104
 
105
+ /** Send parts asked for in this tick — see askSendPart. */
106
+ private sendPartBatch: SendPartAsk[] | null = null;
107
+
95
108
  configure(baseUrl: string, channelAccountId: string) {
96
109
  this.baseUrl = baseUrl.replace(/\/$/, '');
97
110
  this.channelAccountId = channelAccountId;
@@ -194,7 +207,9 @@ export class WidgetApiClient {
194
207
  }
195
208
 
196
209
  getOutboundMessage(): Promise<{ message: OutboundMessage | null }> {
197
- return this.request(`/api/widget/outbound/${encodeURIComponent(this.channelAccountId)}`);
210
+ return this.askSendPart('outbound', () =>
211
+ this.request(`/api/widget/outbound/${encodeURIComponent(this.channelAccountId)}`)
212
+ );
198
213
  }
199
214
 
200
215
  /**
@@ -202,7 +217,46 @@ export class WidgetApiClient {
202
217
  * `recheckInMs`: ask again after this long — the shown one stops then.
203
218
  */
204
219
  getPost(): Promise<{ post: WidgetPost | null; recheckInMs?: number | null }> {
205
- return this.request('/api/widget/send/post?platform=mobile');
220
+ return this.askSendPart('post', () => this.request('/api/widget/send/post?platform=mobile'));
221
+ }
222
+
223
+ /**
224
+ * The post and the launcher's chat message are both asked for right after a
225
+ * session starts: asks made in the same tick go out as one request (each
226
+ * part answers the way its own endpoint does). A lone ask, a Workstation
227
+ * deployment that doesn't know a part yet (it leaves it out — the
228
+ * `outbound` part is newer than the combined endpoint), or a failed combined
229
+ * request falls back to each part's own endpoint, as before.
230
+ */
231
+ private askSendPart<T>(part: SendPart, own: () => Promise<T>): Promise<T> {
232
+ return new Promise<T>((resolve, reject) => {
233
+ if (!this.sendPartBatch) {
234
+ this.sendPartBatch = [];
235
+ setTimeout(() => void this.flushSendParts(), 0);
236
+ }
237
+ this.sendPartBatch.push({ part, own, resolve: resolve as (value: unknown) => void, reject });
238
+ });
239
+ }
240
+
241
+ private async flushSendParts(): Promise<void> {
242
+ const asks = this.sendPartBatch ?? [];
243
+ this.sendPartBatch = null;
244
+ const parts = Array.from(new Set(asks.map((ask) => ask.part)));
245
+ let answer: Record<string, unknown> | null = null;
246
+ if (parts.length > 1) {
247
+ try {
248
+ answer = await this.request<Record<string, unknown>>(
249
+ `/api/widget/send/messages?include=${parts.join(',')}&platform=mobile`
250
+ );
251
+ } catch {
252
+ answer = null;
253
+ }
254
+ }
255
+ for (const ask of asks) {
256
+ const value = answer?.[ask.part];
257
+ if (value && typeof value === 'object') ask.resolve(value);
258
+ else ask.own().then(ask.resolve, ask.reject);
259
+ }
206
260
  }
207
261
 
208
262
  /**