@repzo/widget-react-native 1.2.2 → 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 (97) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/README.md +35 -29
  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/audio/native-player.js +97 -0
  11. package/lib/commonjs/audio/native-player.js.map +1 -0
  12. package/lib/commonjs/audio/voice.js +34 -7
  13. package/lib/commonjs/audio/voice.js.map +1 -1
  14. package/lib/commonjs/state/widget-store.js +23 -1
  15. package/lib/commonjs/state/widget-store.js.map +1 -1
  16. package/lib/commonjs/ui/WidgetProvider.js +1 -3
  17. package/lib/commonjs/ui/WidgetProvider.js.map +1 -1
  18. package/lib/commonjs/ui/components/ImageViewer.js +17 -35
  19. package/lib/commonjs/ui/components/ImageViewer.js.map +1 -1
  20. package/lib/commonjs/ui/components/MessagesSkeleton.js +126 -0
  21. package/lib/commonjs/ui/components/MessagesSkeleton.js.map +1 -0
  22. package/lib/commonjs/ui/components/VoiceNote.js +8 -9
  23. package/lib/commonjs/ui/components/VoiceNote.js.map +1 -1
  24. package/lib/commonjs/ui/components/ZoomableImage.js +299 -0
  25. package/lib/commonjs/ui/components/ZoomableImage.js.map +1 -0
  26. package/lib/commonjs/ui/screens/chat/ChatView.js +6 -4
  27. package/lib/commonjs/ui/screens/chat/ChatView.js.map +1 -1
  28. package/lib/commonjs/ui/screens/chat/ChatView.styles.js +5 -7
  29. package/lib/commonjs/ui/screens/chat/ChatView.styles.js.map +1 -1
  30. package/lib/module/audio/native-player.js +93 -0
  31. package/lib/module/audio/native-player.js.map +1 -0
  32. package/lib/module/audio/voice.js +32 -6
  33. package/lib/module/audio/voice.js.map +1 -1
  34. package/lib/module/state/widget-store.js +23 -1
  35. package/lib/module/state/widget-store.js.map +1 -1
  36. package/lib/module/ui/WidgetProvider.js +1 -3
  37. package/lib/module/ui/WidgetProvider.js.map +1 -1
  38. package/lib/module/ui/components/ImageViewer.js +18 -36
  39. package/lib/module/ui/components/ImageViewer.js.map +1 -1
  40. package/lib/module/ui/components/MessagesSkeleton.js +124 -0
  41. package/lib/module/ui/components/MessagesSkeleton.js.map +1 -0
  42. package/lib/module/ui/components/VoiceNote.js +9 -10
  43. package/lib/module/ui/components/VoiceNote.js.map +1 -1
  44. package/lib/module/ui/components/ZoomableImage.js +291 -0
  45. package/lib/module/ui/components/ZoomableImage.js.map +1 -0
  46. package/lib/module/ui/screens/chat/ChatView.js +6 -4
  47. package/lib/module/ui/screens/chat/ChatView.js.map +1 -1
  48. package/lib/module/ui/screens/chat/ChatView.styles.js +5 -7
  49. package/lib/module/ui/screens/chat/ChatView.styles.js.map +1 -1
  50. package/lib/typescript/commonjs/audio/native-player.d.ts +36 -0
  51. package/lib/typescript/commonjs/audio/native-player.d.ts.map +1 -0
  52. package/lib/typescript/commonjs/audio/voice.d.ts +17 -4
  53. package/lib/typescript/commonjs/audio/voice.d.ts.map +1 -1
  54. package/lib/typescript/commonjs/state/widget-store.d.ts +11 -0
  55. package/lib/typescript/commonjs/state/widget-store.d.ts.map +1 -1
  56. package/lib/typescript/commonjs/ui/WidgetProvider.d.ts.map +1 -1
  57. package/lib/typescript/commonjs/ui/components/ImageViewer.d.ts +2 -2
  58. package/lib/typescript/commonjs/ui/components/ImageViewer.d.ts.map +1 -1
  59. package/lib/typescript/commonjs/ui/components/MessagesSkeleton.d.ts +10 -0
  60. package/lib/typescript/commonjs/ui/components/MessagesSkeleton.d.ts.map +1 -0
  61. package/lib/typescript/commonjs/ui/components/VoiceNote.d.ts +2 -2
  62. package/lib/typescript/commonjs/ui/components/VoiceNote.d.ts.map +1 -1
  63. package/lib/typescript/commonjs/ui/components/ZoomableImage.d.ts +45 -0
  64. package/lib/typescript/commonjs/ui/components/ZoomableImage.d.ts.map +1 -0
  65. package/lib/typescript/commonjs/ui/screens/chat/ChatView.d.ts.map +1 -1
  66. package/lib/typescript/commonjs/ui/screens/chat/ChatView.styles.d.ts +4 -7
  67. package/lib/typescript/commonjs/ui/screens/chat/ChatView.styles.d.ts.map +1 -1
  68. package/lib/typescript/module/audio/native-player.d.ts +36 -0
  69. package/lib/typescript/module/audio/native-player.d.ts.map +1 -0
  70. package/lib/typescript/module/audio/voice.d.ts +17 -4
  71. package/lib/typescript/module/audio/voice.d.ts.map +1 -1
  72. package/lib/typescript/module/state/widget-store.d.ts +11 -0
  73. package/lib/typescript/module/state/widget-store.d.ts.map +1 -1
  74. package/lib/typescript/module/ui/WidgetProvider.d.ts.map +1 -1
  75. package/lib/typescript/module/ui/components/ImageViewer.d.ts +2 -2
  76. package/lib/typescript/module/ui/components/ImageViewer.d.ts.map +1 -1
  77. package/lib/typescript/module/ui/components/MessagesSkeleton.d.ts +10 -0
  78. package/lib/typescript/module/ui/components/MessagesSkeleton.d.ts.map +1 -0
  79. package/lib/typescript/module/ui/components/VoiceNote.d.ts +2 -2
  80. package/lib/typescript/module/ui/components/VoiceNote.d.ts.map +1 -1
  81. package/lib/typescript/module/ui/components/ZoomableImage.d.ts +45 -0
  82. package/lib/typescript/module/ui/components/ZoomableImage.d.ts.map +1 -0
  83. package/lib/typescript/module/ui/screens/chat/ChatView.d.ts.map +1 -1
  84. package/lib/typescript/module/ui/screens/chat/ChatView.styles.d.ts +4 -7
  85. package/lib/typescript/module/ui/screens/chat/ChatView.styles.d.ts.map +1 -1
  86. package/package.json +10 -3
  87. package/react-native.config.js +12 -0
  88. package/src/audio/native-player.ts +106 -0
  89. package/src/audio/voice.ts +30 -6
  90. package/src/state/widget-store.ts +24 -1
  91. package/src/ui/WidgetProvider.tsx +1 -3
  92. package/src/ui/components/ImageViewer.tsx +11 -30
  93. package/src/ui/components/MessagesSkeleton.tsx +92 -0
  94. package/src/ui/components/VoiceNote.tsx +6 -14
  95. package/src/ui/components/ZoomableImage.tsx +250 -0
  96. package/src/ui/screens/chat/ChatView.styles.ts +5 -7
  97. package/src/ui/screens/chat/ChatView.tsx +4 -3
@@ -9,11 +9,12 @@ var _reactNative = require("react-native");
9
9
  var _useWidgetInsets = require("../hooks/use-widget-insets.js");
10
10
  var _theme = require("../styles/theme.js");
11
11
  var _icons = require("./icons.js");
12
+ var _ZoomableImage = require("./ZoomableImage.js");
12
13
  var _jsxRuntime = require("react/jsx-runtime");
13
14
  /**
14
15
  * Full-screen viewer for image attachments, so a tap on a photo the agent sent
15
- * stays inside the messenger instead of bouncing to the browser. Pinch-to-zoom
16
- * uses the native ScrollView zoom (iOS); Android shows the image fitted.
16
+ * stays inside the messenger instead of bouncing to the browser. Pinch, drag
17
+ * and double-tap zoom work on iOS and Android (see ZoomableImage).
17
18
  */
18
19
 
19
20
  function ImageViewer({
@@ -38,33 +39,21 @@ function ImageViewer({
38
39
  children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
39
40
  style: styles.backdrop,
40
41
  accessibilityViewIsModal: true,
41
- children: [image ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ScrollView, {
42
- style: styles.fill,
43
- contentContainerStyle: styles.center,
44
- maximumZoomScale: 4,
45
- minimumZoomScale: 1,
46
- centerContent: true,
47
- showsHorizontalScrollIndicator: false,
48
- showsVerticalScrollIndicator: false,
49
- bouncesZoom: true,
50
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Image, {
51
- source: {
52
- uri: image.url
53
- },
54
- style: styles.image,
55
- resizeMode: "contain",
56
- accessibilityLabel: image.name,
57
- accessibilityIgnoresInvertColors: true,
58
- onLoad: () => setStatus({
59
- url: image.url,
60
- state: 'ready'
61
- }),
62
- onError: () => setStatus({
63
- url: image.url,
64
- state: 'failed'
65
- })
42
+ children: [image ?
43
+ /*#__PURE__*/
44
+ // Keyed by URL so the next image opens at 1×, not at the last one's zoom.
45
+ (0, _jsxRuntime.jsx)(_ZoomableImage.ZoomableImage, {
46
+ uri: image.url,
47
+ accessibilityLabel: image.name,
48
+ onLoad: () => setStatus({
49
+ url: image.url,
50
+ state: 'ready'
51
+ }),
52
+ onError: () => setStatus({
53
+ url: image.url,
54
+ state: 'failed'
66
55
  })
67
- }) : null, image && state === 'loading' ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ActivityIndicator, {
56
+ }, image.url) : null, image && state === 'loading' ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ActivityIndicator, {
68
57
  style: _reactNative.StyleSheet.absoluteFill,
69
58
  color: _theme.palette.white
70
59
  }) : null, image && state === 'failed' ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
@@ -114,18 +103,11 @@ const styles = _reactNative.StyleSheet.create({
114
103
  flex: 1,
115
104
  backgroundColor: '#000000'
116
105
  },
117
- fill: {
118
- flex: 1
119
- },
120
106
  center: {
121
107
  flexGrow: 1,
122
108
  alignItems: 'center',
123
109
  justifyContent: 'center'
124
110
  },
125
- image: {
126
- width: '100%',
127
- height: '100%'
128
- },
129
111
  header: {
130
112
  position: 'absolute',
131
113
  top: 0,
@@ -1 +1 @@
1
- {"version":3,"names":["_react","require","_reactNative","_useWidgetInsets","_theme","_icons","_jsxRuntime","ImageViewer","image","labels","onClose","onOpenExternally","insets","useWidgetInsets","status","setStatus","useState","url","state","jsx","Modal","visible","transparent","animationType","statusBarTranslucent","onRequestClose","children","jsxs","View","style","styles","backdrop","accessibilityViewIsModal","ScrollView","fill","contentContainerStyle","center","maximumZoomScale","minimumZoomScale","centerContent","showsHorizontalScrollIndicator","showsVerticalScrollIndicator","bouncesZoom","Image","source","uri","resizeMode","accessibilityLabel","name","accessibilityIgnoresInvertColors","onLoad","onError","ActivityIndicator","StyleSheet","absoluteFill","color","palette","white","failed","Text","failedText","loadFailed","Pressable","onPress","accessibilityRole","pressed","externalButton","externalLabel","openExternally","header","paddingTop","top","spacing","sm","pointerEvents","title","numberOfLines","close","hitSlop","closeButton","CloseIcon","size","create","flex","backgroundColor","flexGrow","alignItems","justifyContent","width","height","position","left","right","flexDirection","gap","md","paddingHorizontal","lg","paddingBottom","minWidth","fontSize","body","fontWeight","borderRadius","opacity","xxl","textAlign","paddingVertical","borderWidth","hairlineWidth","borderColor","meta","Platform","OS"],"sourceRoot":"../../../../src","sources":["ui/components/ImageViewer.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","require","_reactNative","_useWidgetInsets","_theme","_icons","_ZoomableImage","_jsxRuntime","ImageViewer","image","labels","onClose","onOpenExternally","insets","useWidgetInsets","status","setStatus","useState","url","state","jsx","Modal","visible","transparent","animationType","statusBarTranslucent","onRequestClose","children","jsxs","View","style","styles","backdrop","accessibilityViewIsModal","ZoomableImage","uri","accessibilityLabel","name","onLoad","onError","ActivityIndicator","StyleSheet","absoluteFill","color","palette","white","center","failed","Text","failedText","loadFailed","Pressable","onPress","accessibilityRole","pressed","externalButton","externalLabel","openExternally","header","paddingTop","top","spacing","sm","pointerEvents","title","numberOfLines","close","hitSlop","closeButton","CloseIcon","size","create","flex","backgroundColor","flexGrow","alignItems","justifyContent","position","left","right","flexDirection","gap","md","paddingHorizontal","lg","paddingBottom","minWidth","fontSize","body","fontWeight","width","height","borderRadius","opacity","xxl","textAlign","paddingVertical","borderWidth","hairlineWidth","borderColor","meta","Platform","OS"],"sourceRoot":"../../../../src","sources":["ui/components/ImageViewer.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.MessagesSkeleton = MessagesSkeleton;
7
+ var _react = require("react");
8
+ var _reactNative = require("react-native");
9
+ var _useReduceMotion = require("../hooks/use-reduce-motion.js");
10
+ var _theme = require("../styles/theme.js");
11
+ var _rtl = require("../utils/rtl.js");
12
+ var _jsxRuntime = require("react/jsx-runtime");
13
+ /**
14
+ * Placeholder bubbles while a conversation's messages load: the shape of a
15
+ * thread (team on one side, visitor on the other) that gently pulses, so the
16
+ * screen reads as "messages are coming" instead of a line of text.
17
+ */
18
+
19
+ /** Who "sent" each placeholder, its width, and how many lines it holds. */const ROWS = [{
20
+ visitor: false,
21
+ width: '62%',
22
+ lines: 2
23
+ }, {
24
+ visitor: false,
25
+ width: '40%',
26
+ lines: 1
27
+ }, {
28
+ visitor: true,
29
+ width: '48%',
30
+ lines: 1
31
+ }, {
32
+ visitor: false,
33
+ width: '70%',
34
+ lines: 3
35
+ }, {
36
+ visitor: true,
37
+ width: '56%',
38
+ lines: 2
39
+ }, {
40
+ visitor: false,
41
+ width: '34%',
42
+ lines: 1
43
+ }];
44
+ const LINE_HEIGHT = 20;
45
+ const PULSE_MS = 900;
46
+ function MessagesSkeleton({
47
+ color,
48
+ label
49
+ }) {
50
+ const reduceMotion = (0, _useReduceMotion.useReduceMotion)();
51
+ const [opacity] = (0, _react.useState)(() => new _reactNative.Animated.Value(1));
52
+ const rtl = (0, _rtl.isRTL)();
53
+ (0, _react.useEffect)(() => {
54
+ // `null` (not known yet) holds still too, so the bubbles never jump.
55
+ if (reduceMotion !== false) return undefined;
56
+ const pulse = _reactNative.Animated.loop(_reactNative.Animated.sequence([_reactNative.Animated.timing(opacity, {
57
+ toValue: 0.45,
58
+ duration: PULSE_MS,
59
+ easing: _reactNative.Easing.inOut(_reactNative.Easing.ease),
60
+ useNativeDriver: true
61
+ }), _reactNative.Animated.timing(opacity, {
62
+ toValue: 1,
63
+ duration: PULSE_MS,
64
+ easing: _reactNative.Easing.inOut(_reactNative.Easing.ease),
65
+ useNativeDriver: true
66
+ })]));
67
+ pulse.start();
68
+ return () => pulse.stop();
69
+ }, [opacity, reduceMotion]);
70
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Animated.View, {
71
+ style: [styles.root, {
72
+ opacity
73
+ }],
74
+ accessible: true,
75
+ accessibilityRole: "progressbar",
76
+ accessibilityLabel: label,
77
+ accessibilityState: {
78
+ busy: true
79
+ },
80
+ children: ROWS.map((row, i) => /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
81
+ style: row.visitor ? styles.rowVisitor : styles.rowAgent,
82
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
83
+ style: [styles.bubble, row.visitor ? [styles.bubbleVisitor, rtl && styles.bubbleVisitorRTL, {
84
+ backgroundColor: (0, _theme.withAlpha)(color, 0.16)
85
+ }] : [styles.bubbleAgent, rtl && styles.bubbleAgentRTL], {
86
+ width: row.width,
87
+ height: row.lines * LINE_HEIGHT + _theme.spacing.sm * 2 + 4
88
+ }]
89
+ })
90
+ }, i))
91
+ });
92
+ }
93
+
94
+ // The same corners as real bubbles, so the thread doesn't reshape when it loads.
95
+ const BUBBLE_RADIUS = _theme.radius.lg + 4;
96
+ const TAIL_RADIUS = 4;
97
+ const styles = _reactNative.StyleSheet.create({
98
+ root: {
99
+ gap: _theme.spacing.sm
100
+ },
101
+ rowAgent: {
102
+ alignItems: 'flex-start'
103
+ },
104
+ rowVisitor: {
105
+ alignItems: 'flex-end'
106
+ },
107
+ bubble: {
108
+ borderRadius: BUBBLE_RADIUS
109
+ },
110
+ bubbleAgent: {
111
+ backgroundColor: _theme.palette.surfaceAlt,
112
+ borderBottomLeftRadius: TAIL_RADIUS
113
+ },
114
+ bubbleAgentRTL: {
115
+ borderBottomLeftRadius: BUBBLE_RADIUS,
116
+ borderBottomRightRadius: TAIL_RADIUS
117
+ },
118
+ bubbleVisitor: {
119
+ borderBottomRightRadius: TAIL_RADIUS
120
+ },
121
+ bubbleVisitorRTL: {
122
+ borderBottomRightRadius: BUBBLE_RADIUS,
123
+ borderBottomLeftRadius: TAIL_RADIUS
124
+ }
125
+ });
126
+ //# sourceMappingURL=MessagesSkeleton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","require","_reactNative","_useReduceMotion","_theme","_rtl","_jsxRuntime","ROWS","visitor","width","lines","LINE_HEIGHT","PULSE_MS","MessagesSkeleton","color","label","reduceMotion","useReduceMotion","opacity","useState","Animated","Value","rtl","isRTL","useEffect","undefined","pulse","loop","sequence","timing","toValue","duration","easing","Easing","inOut","ease","useNativeDriver","start","stop","jsx","View","style","styles","root","accessible","accessibilityRole","accessibilityLabel","accessibilityState","busy","children","map","row","i","rowVisitor","rowAgent","bubble","bubbleVisitor","bubbleVisitorRTL","backgroundColor","withAlpha","bubbleAgent","bubbleAgentRTL","height","spacing","sm","BUBBLE_RADIUS","radius","lg","TAIL_RADIUS","StyleSheet","create","gap","alignItems","borderRadius","palette","surfaceAlt","borderBottomLeftRadius","borderBottomRightRadius"],"sourceRoot":"../../../../src","sources":["ui/components/MessagesSkeleton.tsx"],"mappings":";;;;;;AAMA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAEA,IAAAE,gBAAA,GAAAF,OAAA;AACA,IAAAG,MAAA,GAAAH,OAAA;AACA,IAAAI,IAAA,GAAAJ,OAAA;AAAqC,IAAAK,WAAA,GAAAL,OAAA;AAXrC;AACA;AACA;AACA;AACA;;AASA,2EACA,MAAMM,IAAgE,GAAG,CACvE;EAAEC,OAAO,EAAE,KAAK;EAAEC,KAAK,EAAE,KAAK;EAAEC,KAAK,EAAE;AAAE,CAAC,EAC1C;EAAEF,OAAO,EAAE,KAAK;EAAEC,KAAK,EAAE,KAAK;EAAEC,KAAK,EAAE;AAAE,CAAC,EAC1C;EAAEF,OAAO,EAAE,IAAI;EAAEC,KAAK,EAAE,KAAK;EAAEC,KAAK,EAAE;AAAE,CAAC,EACzC;EAAEF,OAAO,EAAE,KAAK;EAAEC,KAAK,EAAE,KAAK;EAAEC,KAAK,EAAE;AAAE,CAAC,EAC1C;EAAEF,OAAO,EAAE,IAAI;EAAEC,KAAK,EAAE,KAAK;EAAEC,KAAK,EAAE;AAAE,CAAC,EACzC;EAAEF,OAAO,EAAE,KAAK;EAAEC,KAAK,EAAE,KAAK;EAAEC,KAAK,EAAE;AAAE,CAAC,CAC3C;AAED,MAAMC,WAAW,GAAG,EAAE;AACtB,MAAMC,QAAQ,GAAG,GAAG;AAEb,SAASC,gBAAgBA,CAAC;EAAEC,KAAK;EAAEC;AAAwC,CAAC,EAAE;EACnF,MAAMC,YAAY,GAAG,IAAAC,gCAAe,EAAC,CAAC;EACtC,MAAM,CAACC,OAAO,CAAC,GAAG,IAAAC,eAAQ,EAAC,MAAM,IAAIC,qBAAQ,CAACC,KAAK,CAAC,CAAC,CAAC,CAAC;EACvD,MAAMC,GAAG,GAAG,IAAAC,UAAK,EAAC,CAAC;EAEnB,IAAAC,gBAAS,EAAC,MAAM;IACd;IACA,IAAIR,YAAY,KAAK,KAAK,EAAE,OAAOS,SAAS;IAC5C,MAAMC,KAAK,GAAGN,qBAAQ,CAACO,IAAI,CACzBP,qBAAQ,CAACQ,QAAQ,CAAC,CAChBR,qBAAQ,CAACS,MAAM,CAACX,OAAO,EAAE;MACvBY,OAAO,EAAE,IAAI;MACbC,QAAQ,EAAEnB,QAAQ;MAClBoB,MAAM,EAAEC,mBAAM,CAACC,KAAK,CAACD,mBAAM,CAACE,IAAI,CAAC;MACjCC,eAAe,EAAE;IACnB,CAAC,CAAC,EACFhB,qBAAQ,CAACS,MAAM,CAACX,OAAO,EAAE;MACvBY,OAAO,EAAE,CAAC;MACVC,QAAQ,EAAEnB,QAAQ;MAClBoB,MAAM,EAAEC,mBAAM,CAACC,KAAK,CAACD,mBAAM,CAACE,IAAI,CAAC;MACjCC,eAAe,EAAE;IACnB,CAAC,CAAC,CACH,CACH,CAAC;IACDV,KAAK,CAACW,KAAK,CAAC,CAAC;IACb,OAAO,MAAMX,KAAK,CAACY,IAAI,CAAC,CAAC;EAC3B,CAAC,EAAE,CAACpB,OAAO,EAAEF,YAAY,CAAC,CAAC;EAE3B,oBACE,IAAAV,WAAA,CAAAiC,GAAA,EAACrC,YAAA,CAAAkB,QAAQ,CAACoB,IAAI;IACZC,KAAK,EAAE,CAACC,MAAM,CAACC,IAAI,EAAE;MAAEzB;IAAQ,CAAC,CAAE;IAClC0B,UAAU;IACVC,iBAAiB,EAAC,aAAa;IAC/BC,kBAAkB,EAAE/B,KAAM;IAC1BgC,kBAAkB,EAAE;MAAEC,IAAI,EAAE;IAAK,CAAE;IAAAC,QAAA,EAClC1C,IAAI,CAAC2C,GAAG,CAAC,CAACC,GAAG,EAAEC,CAAC,kBACf,IAAA9C,WAAA,CAAAiC,GAAA,EAACrC,YAAA,CAAAsC,IAAI;MAASC,KAAK,EAAEU,GAAG,CAAC3C,OAAO,GAAGkC,MAAM,CAACW,UAAU,GAAGX,MAAM,CAACY,QAAS;MAAAL,QAAA,eACrE,IAAA3C,WAAA,CAAAiC,GAAA,EAACrC,YAAA,CAAAsC,IAAI;QACHC,KAAK,EAAE,CACLC,MAAM,CAACa,MAAM,EACbJ,GAAG,CAAC3C,OAAO,GACP,CAACkC,MAAM,CAACc,aAAa,EAAElC,GAAG,IAAIoB,MAAM,CAACe,gBAAgB,EAAE;UAAEC,eAAe,EAAE,IAAAC,gBAAS,EAAC7C,KAAK,EAAE,IAAI;QAAE,CAAC,CAAC,GACnG,CAAC4B,MAAM,CAACkB,WAAW,EAAEtC,GAAG,IAAIoB,MAAM,CAACmB,cAAc,CAAC,EACtD;UAAEpD,KAAK,EAAE0C,GAAG,CAAC1C,KAAK;UAAEqD,MAAM,EAAEX,GAAG,CAACzC,KAAK,GAAGC,WAAW,GAAGoD,cAAO,CAACC,EAAE,GAAG,CAAC,GAAG;QAAE,CAAC;MAC1E,CACH;IAAC,GATOZ,CAUL,CACP;EAAC,CACW,CAAC;AAEpB;;AAEA;AACA,MAAMa,aAAa,GAAGC,aAAM,CAACC,EAAE,GAAG,CAAC;AACnC,MAAMC,WAAW,GAAG,CAAC;AAErB,MAAM1B,MAAM,GAAG2B,uBAAU,CAACC,MAAM,CAAC;EAC/B3B,IAAI,EAAE;IAAE4B,GAAG,EAAER,cAAO,CAACC;EAAG,CAAC;EACzBV,QAAQ,EAAE;IAAEkB,UAAU,EAAE;EAAa,CAAC;EACtCnB,UAAU,EAAE;IAAEmB,UAAU,EAAE;EAAW,CAAC;EACtCjB,MAAM,EAAE;IAAEkB,YAAY,EAAER;EAAc,CAAC;EACvCL,WAAW,EAAE;IAAEF,eAAe,EAAEgB,cAAO,CAACC,UAAU;IAAEC,sBAAsB,EAAER;EAAY,CAAC;EACzFP,cAAc,EAAE;IAAEe,sBAAsB,EAAEX,aAAa;IAAEY,uBAAuB,EAAET;EAAY,CAAC;EAC/FZ,aAAa,EAAE;IAAEqB,uBAAuB,EAAET;EAAY,CAAC;EACvDX,gBAAgB,EAAE;IAAEoB,uBAAuB,EAAEZ,aAAa;IAAEW,sBAAsB,EAAER;EAAY;AAClG,CAAC,CAAC","ignoreList":[]}
@@ -14,8 +14,8 @@ var _jsxRuntime = require("react/jsx-runtime");
14
14
  * A voice note (or any audio attachment) played inside the chat, laid out the
15
15
  * way messaging apps do it: a play button beside a waveform the visitor can
16
16
  * tap or drag to jump through the note, the time under it, and a speed chip
17
- * once the note has been started. Only rendered when the host app has
18
- * `expo-audio` (see `src/audio/voice.ts`); without it audio stays a file row.
17
+ * once the note has been started. Only rendered when the app can play audio
18
+ * (see `src/audio/voice.ts`); otherwise audio stays a file row.
19
19
  */
20
20
 
21
21
  const BAR_COUNT = 32;
@@ -46,17 +46,16 @@ function VoiceNote(props) {
46
46
  });
47
47
  }
48
48
 
49
- /** A note that has been started: owns its expo-audio player and plays on mount. */
49
+ /** A note that has been started: owns its player and plays on mount. */
50
50
  function ActiveVoiceNote(props) {
51
51
  const {
52
52
  url,
53
53
  onError
54
54
  } = props;
55
- const audio = (0, _voice.voicePlaybackModule)();
56
- const player = audio.useAudioPlayer({
57
- uri: url
58
- }, (0, _voice.audioPlayerOptions)());
59
- const status = audio.useAudioPlayerStatus(player);
55
+ const {
56
+ player,
57
+ status
58
+ } = (0, _voice.useVoicePlayer)(url);
60
59
  const [speedIndex, setSpeedIndex] = (0, _react.useState)(0);
61
60
  const [scrub, setScrub] = (0, _react.useState)(null);
62
61
  const [trackWidth, setTrackWidth] = (0, _react.useState)(0);
@@ -69,7 +68,7 @@ function ActiveVoiceNote(props) {
69
68
  const currentTime = Math.max(Number(status?.currentTime) || 0, 0);
70
69
  const playing = !!status?.playing;
71
70
  const finished = !!status?.didJustFinish || duration > 0 && currentTime >= duration - 0.1;
72
- // `isLoaded` / `isBuffering` are compared strictly: an expo-audio that
71
+ // `isLoaded` / `isBuffering` are compared strictly: a player that
73
72
  // doesn't report them never gets a spinner that can't go away.
74
73
  const loading = wantsPlay && !playing && (status?.isLoaded === false || status?.isBuffering === true);
75
74
  const pause = () => {
@@ -1 +1 @@
1
- {"version":3,"names":["_react","require","_reactNative","_voice","_icons","_theme","_jsxRuntime","BAR_COUNT","BAR_WIDTH","BAR_MIN_HEIGHT","BAR_MAX_HEIGHT","BUTTON_SIZE","KNOB_SIZE","SPEEDS","VoiceNote","props","started","setStarted","useState","jsx","ActiveVoiceNote","VoiceNoteLayout","playing","loading","progress","time","onToggle","url","onError","audio","voicePlaybackModule","player","useAudioPlayer","uri","audioPlayerOptions","status","useAudioPlayerStatus","speedIndex","setSpeedIndex","scrub","setScrub","trackWidth","setTrackWidth","wantsPlay","setWantsPlay","releasePlayback","useRef","duration","Math","max","Number","currentTime","finished","didJustFinish","isLoaded","isBuffering","pause","start","current","claimVoicePlayback","play","useEffect","error","togglePlay","seekTo","cycleSpeed","next","length","setPlaybackRate","latest","ratioAt","x","width","min","startX","pan","PanResponder","create","onStartShouldSetPanResponder","onMoveShouldSetPanResponder","onPanResponderGrant","event","nativeEvent","locationX","onPanResponderMove","_","gesture","dx","onPanResponderRelease","onPanResponderTerminate","displayTime","showSpeed","formatVoiceClock","track","panHandlers","onWidth","speed","value","changed","onPress","seed","color","onBrandBubble","labels","accent","palette","white","onAccent","trackColor","withAlpha","disabled","subtle","textMuted","levels","useMemo","voiceWaveformLevels","onTrackLayout","layout","barCentre","i","knobOffset","round","icon","PlayIcon","size","ActivityIndicator","PauseIcon","jsxs","View","style","styles","root","children","row","Pressable","accessibilityRole","accessibilityLabel","accessibilityState","busy","hitSlop","pressed","playButton","backgroundColor","opacity","onLayout","map","level","pointerEvents","bar","height","knob","transform","translateX","meta","Text","speedText","text","StyleSheet","minWidth","direction","flexDirection","alignItems","gap","borderRadius","justifyContent","flex","position","left","minHeight","marginTop","marginLeft","fontSize","caption","fontWeight","fontVariant","paddingHorizontal"],"sourceRoot":"../../../../src","sources":["ui/components/VoiceNote.tsx"],"mappings":";;;;;;AAQA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAWA,IAAAE,MAAA,GAAAF,OAAA;AAOA,IAAAG,MAAA,GAAAH,OAAA;AACA,IAAAI,MAAA,GAAAJ,OAAA;AAA+D,IAAAK,WAAA,GAAAL,OAAA;AA5B/D;AACA;AACA;AACA;AACA;AACA;AACA;;AA2CA,MAAMM,SAAS,GAAG,EAAE;AACpB,MAAMC,SAAS,GAAG,CAAC;AACnB,MAAMC,cAAc,GAAG,CAAC;AACxB,MAAMC,cAAc,GAAG,EAAE;AACzB,MAAMC,WAAW,GAAG,EAAE;AACtB,MAAMC,SAAS,GAAG,EAAE;AACpB,MAAMC,MAAM,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAU;;AAEnC;AACA;AACA;AACA;AACA;AACO,SAASC,SAASA,CAACC,KAAqB,EAAE;EAC/C,MAAM,CAACC,OAAO,EAAEC,UAAU,CAAC,GAAG,IAAAC,eAAQ,EAAC,KAAK,CAAC;EAC7C,IAAIF,OAAO,EAAE,oBAAO,IAAAV,WAAA,CAAAa,GAAA,EAACC,eAAe;IAAA,GAAKL;EAAK,CAAG,CAAC;EAClD,oBACE,IAAAT,WAAA,CAAAa,GAAA,EAACE,eAAe;IAAA,GACVN,KAAK;IACTO,OAAO,EAAE,KAAM;IACfC,OAAO,EAAE,KAAM;IACfC,QAAQ,EAAE,CAAE;IACZC,IAAI,EAAE,IAAK;IACXC,QAAQ,EAAEA,CAAA,KAAMT,UAAU,CAAC,IAAI;EAAE,CAClC,CAAC;AAEN;;AAEA;AACA,SAASG,eAAeA,CAACL,KAAqB,EAAE;EAC9C,MAAM;IAAEY,GAAG;IAAEC;EAAQ,CAAC,GAAGb,KAAK;EAC9B,MAAMc,KAAK,GAAG,IAAAC,0BAAmB,EAAC,CAAC;EACnC,MAAMC,MAAM,GAAGF,KAAK,CAACG,cAAc,CAAC;IAAEC,GAAG,EAAEN;EAAI,CAAC,EAAE,IAAAO,yBAAkB,EAAC,CAAC,CAAC;EACvE,MAAMC,MAAM,GAAGN,KAAK,CAACO,oBAAoB,CAACL,MAAM,CAAC;EACjD,MAAM,CAACM,UAAU,EAAEC,aAAa,CAAC,GAAG,IAAApB,eAAQ,EAAC,CAAC,CAAC;EAC/C,MAAM,CAACqB,KAAK,EAAEC,QAAQ,CAAC,GAAG,IAAAtB,eAAQ,EAAgB,IAAI,CAAC;EACvD,MAAM,CAACuB,UAAU,EAAEC,aAAa,CAAC,GAAG,IAAAxB,eAAQ,EAAC,CAAC,CAAC;EAC/C;EACA;EACA,MAAM,CAACyB,SAAS,EAAEC,YAAY,CAAC,GAAG,IAAA1B,eAAQ,EAAC,IAAI,CAAC;EAChD;EACA,MAAM2B,eAAe,GAAG,IAAAC,aAAM,EAAsB,IAAI,CAAC;EAEzD,MAAMC,QAAQ,GAAGC,IAAI,CAACC,GAAG,CAACC,MAAM,CAACf,MAAM,EAAEY,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;EAC3D,MAAMI,WAAW,GAAGH,IAAI,CAACC,GAAG,CAACC,MAAM,CAACf,MAAM,EAAEgB,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;EACjE,MAAM7B,OAAO,GAAG,CAAC,CAACa,MAAM,EAAEb,OAAO;EACjC,MAAM8B,QAAQ,GAAG,CAAC,CAACjB,MAAM,EAAEkB,aAAa,IAAKN,QAAQ,GAAG,CAAC,IAAII,WAAW,IAAIJ,QAAQ,GAAG,GAAI;EAC3F;EACA;EACA,MAAMxB,OAAO,GAAGoB,SAAS,IAAI,CAACrB,OAAO,KAAKa,MAAM,EAAEmB,QAAQ,KAAK,KAAK,IAAInB,MAAM,EAAEoB,WAAW,KAAK,IAAI,CAAC;EAErG,MAAMC,KAAK,GAAGA,CAAA,KAAM;IAClBZ,YAAY,CAAC,KAAK,CAAC;IACnBb,MAAM,CAACyB,KAAK,CAAC,CAAC;EAChB,CAAC;EACD,MAAMC,KAAK,GAAGA,CAAA,KAAM;IAClBZ,eAAe,CAACa,OAAO,GAAG,CAAC;IAC3Bb,eAAe,CAACa,OAAO,GAAG,IAAAC,yBAAkB,EAACH,KAAK,CAAC;IACnDZ,YAAY,CAAC,IAAI,CAAC;IAClBb,MAAM,CAAC6B,IAAI,CAAC,CAAC;EACf,CAAC;;EAED;EACA;EACA,IAAAC,gBAAS,EAAC,MAAM;IACdJ,KAAK,CAAC,CAAC;IACP,OAAO,MAAMZ,eAAe,CAACa,OAAO,GAAG,CAAC;IACxC;EACF,CAAC,EAAE,EAAE,CAAC;;EAEN;EACA;EACA,MAAMI,KAAK,GAAG3B,MAAM,EAAE2B,KAAK;EAC3B,IAAAD,gBAAS,EAAC,MAAM;IACd,IAAIC,KAAK,EAAElC,OAAO,CAAC,CAAC;EACtB,CAAC,EAAE,CAACkC,KAAK,EAAElC,OAAO,CAAC,CAAC;EAEpB,MAAMmC,UAAU,GAAG,MAAAA,CAAA,KAAY;IAC7B,IAAIzC,OAAO,IAAIC,OAAO,EAAE;MACtBiC,KAAK,CAAC,CAAC;MACP;IACF;IACA,IAAIJ,QAAQ,EAAE,MAAMrB,MAAM,CAACiC,MAAM,CAAC,CAAC,CAAC;IACpCP,KAAK,CAAC,CAAC;EACT,CAAC;EAED,MAAMQ,UAAU,GAAGA,CAAA,KAAM;IACvB,MAAMC,IAAI,GAAG,CAAC7B,UAAU,GAAG,CAAC,IAAIxB,MAAM,CAACsD,MAAM;IAC7C7B,aAAa,CAAC4B,IAAI,CAAC;IACnB,IAAI;MACFnC,MAAM,CAACqC,eAAe,CAACvD,MAAM,CAACqD,IAAI,CAAC,EAAE,MAAM,CAAC;IAC9C,CAAC,CAAC,MAAM;MACN;MACA,IAAI;QACFnC,MAAM,CAACqC,eAAe,CAACvD,MAAM,CAACqD,IAAI,CAAC,CAAC;MACtC,CAAC,CAAC,MAAM;QACN;MAAA;IAEJ;EACF,CAAC;;EAED;EACA,MAAMG,MAAM,GAAG,IAAAvB,aAAM,EAAC;IAAEL,UAAU;IAAEM,QAAQ;IAAEhB;EAAO,CAAC,CAAC;EACvDsC,MAAM,CAACX,OAAO,GAAG;IAAEjB,UAAU;IAAEM,QAAQ;IAAEhB;EAAO,CAAC;EACjD,MAAMuC,OAAO,GAAIC,CAAS,IAAK;IAC7B,MAAMC,KAAK,GAAGH,MAAM,CAACX,OAAO,CAACjB,UAAU;IACvC,OAAO+B,KAAK,GAAG,CAAC,GAAGxB,IAAI,CAACyB,GAAG,CAAC,CAAC,EAAEzB,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEsB,CAAC,GAAGC,KAAK,CAAC,CAAC,GAAG,CAAC;EAC5D,CAAC;EACD;EACA;EACA;EACA,MAAME,MAAM,GAAG,IAAA5B,aAAM,EAAC,CAAC,CAAC;EACxB,MAAM6B,GAAG,GAAG,IAAA7B,aAAM,EAChB8B,yBAAY,CAACC,MAAM,CAAC;IAClBC,4BAA4B,EAAEA,CAAA,KAAM,IAAI;IACxCC,2BAA2B,EAAEA,CAAA,KAAM,IAAI;IACvCC,mBAAmB,EAAGC,KAAK,IAAK;MAC9BP,MAAM,CAAChB,OAAO,GAAGuB,KAAK,CAACC,WAAW,CAACC,SAAS;MAC5C3C,QAAQ,CAAC8B,OAAO,CAACI,MAAM,CAAChB,OAAO,CAAC,CAAC;IACnC,CAAC;IACD0B,kBAAkB,EAAEA,CAACC,CAAC,EAAEC,OAAO,KAAK9C,QAAQ,CAAC8B,OAAO,CAACI,MAAM,CAAChB,OAAO,GAAG4B,OAAO,CAACC,EAAE,CAAC,CAAC;IAClFC,qBAAqB,EAAEA,CAACH,CAAC,EAAEC,OAAO,KAAK;MACrC,MAAM;QAAEvC,QAAQ,EAAEoB,MAAM;QAAEpC,MAAM,EAAE2B;MAAQ,CAAC,GAAGW,MAAM,CAACX,OAAO;MAC5D,IAAIS,MAAM,GAAG,CAAC,EAAE,KAAKT,OAAO,CAACM,MAAM,CAACM,OAAO,CAACI,MAAM,CAAChB,OAAO,GAAG4B,OAAO,CAACC,EAAE,CAAC,GAAGpB,MAAM,CAAC;MAClF3B,QAAQ,CAAC,IAAI,CAAC;IAChB,CAAC;IACDiD,uBAAuB,EAAEA,CAAA,KAAMjD,QAAQ,CAAC,IAAI;EAC9C,CAAC,CACH,CAAC,CAACkB,OAAO;EAET,MAAMgC,WAAW,GACfnD,KAAK,IAAI,IAAI,GAAGA,KAAK,GAAGQ,QAAQ,GAAGzB,OAAO,GAAG6B,WAAW,GAAGC,QAAQ,GAAGL,QAAQ,GAAGI,WAAW,IAAIJ,QAAQ;EAC1G;EACA,MAAM4C,SAAS,GAAGtD,UAAU,GAAG,CAAC,IAAIf,OAAO,IAAK6B,WAAW,GAAG,CAAC,IAAI,CAACC,QAAS;EAE7E,oBACE,IAAA9C,WAAA,CAAAa,GAAA,EAACE,eAAe;IAAA,GACVN,KAAK;IACTO,OAAO,EAAEA,OAAQ;IACjBC,OAAO,EAAEA,OAAQ;IACjBC,QAAQ,EAAEe,KAAK,KAAKQ,QAAQ,GAAG,CAAC,GAAGC,IAAI,CAACyB,GAAG,CAAC,CAAC,EAAEtB,WAAW,GAAGJ,QAAQ,CAAC,GAAG,CAAC;IAC1E;IAAA;IACAtB,IAAI,EAAEsB,QAAQ,GAAG,CAAC,GAAG,IAAA6C,uBAAgB,EAACF,WAAW,CAAC,GAAG,IAAK;IAC1DhE,QAAQ,EAAEA,CAAA,KAAM,KAAKqC,UAAU,CAAC,CAAE;IAClC8B,KAAK,EAAE;MAAEC,WAAW,EAAEnB,GAAG,CAACmB,WAAW;MAAEC,OAAO,EAAErD;IAAc,CAAE;IAChEsD,KAAK,EAAEL,SAAS,GAAG;MAAEM,KAAK,EAAEpF,MAAM,CAACwB,UAAU,CAAC;MAAE6D,OAAO,EAAE7D,UAAU,GAAG,CAAC;MAAE8D,OAAO,EAAElC;IAAW,CAAC,GAAG;EAAK,CACvG,CAAC;AAEN;AAEA,SAAS5C,eAAeA,CAAC;EACvB+E,IAAI;EACJC,KAAK;EACLC,aAAa;EACbC,MAAM;EACNjF,OAAO;EACPC,OAAO;EACPC,QAAQ;EACRC,IAAI;EACJC,QAAQ;EACRmE,KAAK;EACLG;AAWF,CAAC,EAAE;EACD,MAAMQ,MAAM,GAAGF,aAAa,GAAGG,cAAO,CAACC,KAAK,GAAGL,KAAK;EACpD,MAAMM,QAAQ,GAAGL,aAAa,GAAGD,KAAK,GAAGI,cAAO,CAACC,KAAK;EACtD,MAAME,UAAU,GAAGN,aAAa,GAAG,IAAAO,gBAAS,EAACJ,cAAO,CAACC,KAAK,EAAE,GAAG,CAAC,GAAGD,cAAO,CAACK,QAAQ;EACnF,MAAMC,MAAM,GAAGT,aAAa,GAAG,IAAAO,gBAAS,EAACJ,cAAO,CAACC,KAAK,EAAE,GAAG,CAAC,GAAGD,cAAO,CAACO,SAAS;EAChF,MAAMC,MAAM,GAAG,IAAAC,cAAO,EAAC,MAAM,IAAAC,0BAAmB,EAACf,IAAI,EAAE7F,SAAS,CAAC,EAAE,CAAC6F,IAAI,CAAC,CAAC;EAC1E,MAAM,CAAC3D,UAAU,EAAEC,aAAa,CAAC,GAAG,IAAAxB,eAAQ,EAAC,CAAC,CAAC;EAC/C,MAAMkG,aAAa,GAAInC,KAAwB,IAAK;IAClDvC,aAAa,CAACuC,KAAK,CAACC,WAAW,CAACmC,MAAM,CAAC7C,KAAK,CAAC;IAC7CqB,KAAK,EAAEE,OAAO,CAACd,KAAK,CAACC,WAAW,CAACmC,MAAM,CAAC7C,KAAK,CAAC;EAChD,CAAC;;EAED;EACA,MAAM8C,SAAS,GAAIC,CAAS,IAC1B9E,UAAU,GAAGjC,SAAS,GAClB,CAACA,SAAS,GAAG,CAAC,GAAI+G,CAAC,IAAI9E,UAAU,GAAGjC,SAAS,CAAC,IAAKD,SAAS,GAAG,CAAC,CAAC,IAAIkC,UAAU,GAC/E8E,CAAC,IAAIhH,SAAS,GAAG,CAAC,CAAC;EACzB,MAAMiH,UAAU,GAAG/E,UAAU,GAAG,CAAC,GAAGO,IAAI,CAACyE,KAAK,CAACjG,QAAQ,IAAIiB,UAAU,GAAG7B,SAAS,CAAC,CAAC,GAAG,CAAC;EAEvF,IAAI8G,IAAe,gBAAG,IAAApH,WAAA,CAAAa,GAAA,EAACf,MAAA,CAAAuH,QAAQ;IAACC,IAAI,EAAE,EAAG;IAACvB,KAAK,EAAEM;EAAS,CAAE,CAAC;EAC7D,IAAIpF,OAAO,EAAEmG,IAAI,gBAAG,IAAApH,WAAA,CAAAa,GAAA,EAACjB,YAAA,CAAA2H,iBAAiB;IAACD,IAAI,EAAC,OAAO;IAACvB,KAAK,EAAEM;EAAS,CAAE,CAAC,CAAC,KACnE,IAAIrF,OAAO,EAAEoG,IAAI,gBAAG,IAAApH,WAAA,CAAAa,GAAA,EAACf,MAAA,CAAA0H,SAAS;IAACF,IAAI,EAAE,EAAG;IAACvB,KAAK,EAAEM;EAAS,CAAE,CAAC;EAEjE,oBACE,IAAArG,WAAA,CAAAyH,IAAA,EAAC7H,YAAA,CAAA8H,IAAI;IAACC,KAAK,EAAEC,MAAM,CAACC,IAAK;IAAAC,QAAA,gBACvB,IAAA9H,WAAA,CAAAyH,IAAA,EAAC7H,YAAA,CAAA8H,IAAI;MAACC,KAAK,EAAEC,MAAM,CAACG,GAAI;MAAAD,QAAA,gBACtB,IAAA9H,WAAA,CAAAa,GAAA,EAACjB,YAAA,CAAAoI,SAAS;QACRnC,OAAO,EAAEzE,QAAS;QAClB6G,iBAAiB,EAAC,QAAQ;QAC1BC,kBAAkB,EAAElH,OAAO,IAAIC,OAAO,GAAGgF,MAAM,CAAC/C,KAAK,GAAG+C,MAAM,CAAC3C,IAAK;QACpE6E,kBAAkB,EAAE;UAAEC,IAAI,EAAEnH;QAAQ,CAAE;QACtCoH,OAAO,EAAE,CAAE;QACXV,KAAK,EAAEA,CAAC;UAAEW;QAAQ,CAAC,KAAK,CACtBV,MAAM,CAACW,UAAU,EACjB;UAAEC,eAAe,EAAEtC,MAAM;UAAEuC,OAAO,EAAEH,OAAO,GAAG,GAAG,GAAG;QAAE,CAAC,CACvD;QAAAR,QAAA,EACDV;MAAI,CACI,CAAC,eAEZ,IAAApH,WAAA,CAAAyH,IAAA,EAAC7H,YAAA,CAAA8H,IAAI;QACHC,KAAK,EAAEC,MAAM,CAACrC,KAAM;QACpBmD,QAAQ,EAAE5B,aAAc;QAAA,GACpBvB,KAAK,EAAEC,WAAW;QAAAsC,QAAA,GACrBnB,MAAM,CAACgC,GAAG,CAAC,CAACC,KAAK,EAAE3B,CAAC,kBACnB,IAAAjH,WAAA,CAAAa,GAAA,EAACjB,YAAA,CAAA8H,IAAI;UAEH;UACAmB,aAAa,EAAC,MAAM;UACpBlB,KAAK,EAAE,CACLC,MAAM,CAACkB,GAAG,EACV;YACEC,MAAM,EAAE5I,cAAc,GAAGyI,KAAK,IAAIxI,cAAc,GAAGD,cAAc,CAAC;YAClEqI,eAAe,EAAExB,SAAS,CAACC,CAAC,CAAC,IAAI/F,QAAQ,GAAGgF,MAAM,GAAGI;UACvD,CAAC;QACD,GATGW,CAUN,CACF,CAAC,EACD9E,UAAU,GAAG,CAAC,gBACb,IAAAnC,WAAA,CAAAa,GAAA,EAACjB,YAAA,CAAA8H,IAAI;UACHmB,aAAa,EAAC,MAAM;UACpBlB,KAAK,EAAE,CACLC,MAAM,CAACoB,IAAI,EACX;YAAER,eAAe,EAAEtC,MAAM;YAAE+C,SAAS,EAAE,CAAC;cAAEC,UAAU,EAAEhC;YAAW,CAAC;UAAE,CAAC;QACpE,CACH,CAAC,GACA,IAAI;MAAA,CACJ,CAAC;IAAA,CACH,CAAC,eAEP,IAAAlH,WAAA,CAAAyH,IAAA,EAAC7H,YAAA,CAAA8H,IAAI;MAACC,KAAK,EAAEC,MAAM,CAACuB,IAAK;MAAArB,QAAA,GACtB3G,IAAI,IAAI,IAAI,gBAAG,IAAAnB,WAAA,CAAAa,GAAA,EAACjB,YAAA,CAAAwJ,IAAI;QAACzB,KAAK,EAAE,CAACC,MAAM,CAACzG,IAAI,EAAE;UAAE4E,KAAK,EAAEU;QAAO,CAAC,CAAE;QAAAqB,QAAA,EAAE3G;MAAI,CAAO,CAAC,GAAG,IAAI,EAClFuE,KAAK,gBACJ,IAAA1F,WAAA,CAAAa,GAAA,EAACjB,YAAA,CAAAoI,SAAS;QACRnC,OAAO,EAAEH,KAAK,CAACG,OAAQ;QACvBoC,iBAAiB,EAAC,QAAQ;QAC1BC,kBAAkB,EAAEjC,MAAM,CAACP,KAAM;QACjC2C,OAAO,EAAE,EAAG;QACZV,KAAK,EAAEA,CAAC;UAAEW;QAAQ,CAAC,KAAK,CACtBV,MAAM,CAAClC,KAAK,EACZ;UAAE8C,eAAe,EAAE9C,KAAK,CAACE,OAAO,GAAGM,MAAM,GAAGI,UAAU;UAAEmC,OAAO,EAAEH,OAAO,GAAG,GAAG,GAAG;QAAE,CAAC,CACpF;QAAAR,QAAA,eACF,IAAA9H,WAAA,CAAAyH,IAAA,EAAC7H,YAAA,CAAAwJ,IAAI;UACHzB,KAAK,EAAE,CACLC,MAAM,CAACyB,SAAS,EAChB;YAAEtD,KAAK,EAAEL,KAAK,CAACE,OAAO,GAAGS,QAAQ,GAAGL,aAAa,GAAGG,cAAO,CAACC,KAAK,GAAGD,cAAO,CAACmD;UAAK,CAAC,CAClF;UAAAxB,QAAA,GACDpC,KAAK,CAACC,KAAK,EAAC,MACf;QAAA,CAAM;MAAC,CACE,CAAC,GACV,IAAI;IAAA,CACJ,CAAC;EAAA,CACH,CAAC;AAEX;AAEA,MAAMiC,MAAM,GAAG2B,uBAAU,CAAChF,MAAM,CAAC;EAC/B;EACA;EACAsD,IAAI,EAAE;IAAE2B,QAAQ,EAAE,GAAG;IAAEC,SAAS,EAAE;EAAM,CAAC;EACzC1B,GAAG,EAAE;IAAE2B,aAAa,EAAE,KAAK;IAAEC,UAAU,EAAE,QAAQ;IAAEC,GAAG,EAAE;EAAG,CAAC;EAC5DrB,UAAU,EAAE;IACVrE,KAAK,EAAE7D,WAAW;IAClB0I,MAAM,EAAE1I,WAAW;IACnBwJ,YAAY,EAAExJ,WAAW,GAAG,CAAC;IAC7BsJ,UAAU,EAAE,QAAQ;IACpBG,cAAc,EAAE;EAClB,CAAC;EACDvE,KAAK,EAAE;IACLwE,IAAI,EAAE,CAAC;IACPP,QAAQ,EAAE,CAAC;IACXT,MAAM,EAAE1I,WAAW;IACnBqJ,aAAa,EAAE,KAAK;IACpBC,UAAU,EAAE,QAAQ;IACpBG,cAAc,EAAE;EAClB,CAAC;EACDhB,GAAG,EAAE;IAAE5E,KAAK,EAAEhE,SAAS;IAAE2J,YAAY,EAAE3J,SAAS,GAAG;EAAE,CAAC;EACtD8I,IAAI,EAAE;IACJgB,QAAQ,EAAE,UAAU;IACpBC,IAAI,EAAE,CAAC;IACP/F,KAAK,EAAE5D,SAAS;IAChByI,MAAM,EAAEzI,SAAS;IACjBuJ,YAAY,EAAEvJ,SAAS,GAAG;EAC5B,CAAC;EACD6I,IAAI,EAAE;IACJe,SAAS,EAAE,EAAE;IACbC,SAAS,EAAE,CAAC,CAAC;IACbC,UAAU,EAAE/J,WAAW,GAAG,EAAE;IAC5BqJ,aAAa,EAAE,KAAK;IACpBC,UAAU,EAAE,QAAQ;IACpBC,GAAG,EAAE;EACP,CAAC;EACDzI,IAAI,EAAE;IAAEkJ,QAAQ,EAAEA,eAAQ,CAACC,OAAO;IAAEC,UAAU,EAAE,KAAK;IAAEC,WAAW,EAAE,CAAC,cAAc;EAAE,CAAC;EACtF9E,KAAK,EAAE;IACL8D,QAAQ,EAAE,EAAE;IACZT,MAAM,EAAE,EAAE;IACV0B,iBAAiB,EAAE,CAAC;IACpBZ,YAAY,EAAE,CAAC;IACfF,UAAU,EAAE,QAAQ;IACpBG,cAAc,EAAE;EAClB,CAAC;EACDT,SAAS,EAAE;IAAEgB,QAAQ,EAAE,EAAE;IAAEE,UAAU,EAAE,KAAK;IAAEC,WAAW,EAAE,CAAC,cAAc;EAAE;AAC9E,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["_react","require","_reactNative","_voice","_icons","_theme","_jsxRuntime","BAR_COUNT","BAR_WIDTH","BAR_MIN_HEIGHT","BAR_MAX_HEIGHT","BUTTON_SIZE","KNOB_SIZE","SPEEDS","VoiceNote","props","started","setStarted","useState","jsx","ActiveVoiceNote","VoiceNoteLayout","playing","loading","progress","time","onToggle","url","onError","player","status","useVoicePlayer","speedIndex","setSpeedIndex","scrub","setScrub","trackWidth","setTrackWidth","wantsPlay","setWantsPlay","releasePlayback","useRef","duration","Math","max","Number","currentTime","finished","didJustFinish","isLoaded","isBuffering","pause","start","current","claimVoicePlayback","play","useEffect","error","togglePlay","seekTo","cycleSpeed","next","length","setPlaybackRate","latest","ratioAt","x","width","min","startX","pan","PanResponder","create","onStartShouldSetPanResponder","onMoveShouldSetPanResponder","onPanResponderGrant","event","nativeEvent","locationX","onPanResponderMove","_","gesture","dx","onPanResponderRelease","onPanResponderTerminate","displayTime","showSpeed","formatVoiceClock","track","panHandlers","onWidth","speed","value","changed","onPress","seed","color","onBrandBubble","labels","accent","palette","white","onAccent","trackColor","withAlpha","disabled","subtle","textMuted","levels","useMemo","voiceWaveformLevels","onTrackLayout","layout","barCentre","i","knobOffset","round","icon","PlayIcon","size","ActivityIndicator","PauseIcon","jsxs","View","style","styles","root","children","row","Pressable","accessibilityRole","accessibilityLabel","accessibilityState","busy","hitSlop","pressed","playButton","backgroundColor","opacity","onLayout","map","level","pointerEvents","bar","height","knob","transform","translateX","meta","Text","speedText","text","StyleSheet","minWidth","direction","flexDirection","alignItems","gap","borderRadius","justifyContent","flex","position","left","minHeight","marginTop","marginLeft","fontSize","caption","fontWeight","fontVariant","paddingHorizontal"],"sourceRoot":"../../../../src","sources":["ui/components/VoiceNote.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,299 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.MAX_ZOOM = exports.DOUBLE_TAP_ZOOM = void 0;
7
+ exports.ZoomableImage = ZoomableImage;
8
+ exports.clampView = clampView;
9
+ exports.fittedSize = fittedSize;
10
+ exports.zoomAround = zoomAround;
11
+ var _react = require("react");
12
+ var _reactNative = require("react-native");
13
+ var _useReduceMotion = require("../hooks/use-reduce-motion.js");
14
+ var _jsxRuntime = require("react/jsx-runtime");
15
+ /**
16
+ * An image the visitor can pinch to zoom, drag around once zoomed, and
17
+ * double-tap to zoom in on a spot (and again to zoom back out). Built on
18
+ * PanResponder and Animated, so it behaves the same on iOS and Android
19
+ * without a gesture library in the host app.
20
+ */
21
+
22
+ const MAX_ZOOM = exports.MAX_ZOOM = 4;
23
+ const DOUBLE_TAP_ZOOM = exports.DOUBLE_TAP_ZOOM = 2.5;
24
+ const DOUBLE_TAP_MS = 300;
25
+ const DOUBLE_TAP_SLOP = 30;
26
+ const TAP_SLOP = 10;
27
+
28
+ /** Scale and offset (from the centre of the view) of the image. */
29
+
30
+ /** The size the image is drawn at with `contain`, before any zoom. */
31
+ function fittedSize(box, image) {
32
+ if (!image || image.width <= 0 || image.height <= 0) return box;
33
+ const fit = Math.min(box.width / image.width, box.height / image.height);
34
+ return {
35
+ width: image.width * fit,
36
+ height: image.height * fit
37
+ };
38
+ }
39
+
40
+ /**
41
+ * Keeps the image inside the screen: zoom between 1× and `MAX_ZOOM`, and no
42
+ * empty space past an edge the zoomed image is wider (or taller) than.
43
+ */
44
+ function clampView(view, box, content) {
45
+ const scale = Math.min(MAX_ZOOM, Math.max(1, view.scale));
46
+ const maxX = Math.max(0, (content.width * scale - box.width) / 2);
47
+ const maxY = Math.max(0, (content.height * scale - box.height) / 2);
48
+ return {
49
+ scale,
50
+ x: Math.min(maxX, Math.max(-maxX, view.x)),
51
+ y: Math.min(maxY, Math.max(-maxY, view.y))
52
+ };
53
+ }
54
+
55
+ /**
56
+ * The view at `scale` that keeps the spot that was under `from` (a point
57
+ * relative to the centre, in the `start` view) under `to`. Pinching zooms
58
+ * around the fingers this way, and moving them pans at the same time.
59
+ */
60
+ function zoomAround(start, scale, from, to) {
61
+ const spotX = (from.x - start.x) / start.scale;
62
+ const spotY = (from.y - start.y) / start.scale;
63
+ return {
64
+ scale,
65
+ x: to.x - scale * spotX,
66
+ y: to.y - scale * spotY
67
+ };
68
+ }
69
+ const centreOf = touches => ({
70
+ x: touches.reduce((sum, t) => sum + t.pageX, 0) / touches.length,
71
+ y: touches.reduce((sum, t) => sum + t.pageY, 0) / touches.length
72
+ });
73
+ const spreadOf = touches => touches.length < 2 ? 0 : Math.hypot(touches[0].pageX - touches[1].pageX, touches[0].pageY - touches[1].pageY);
74
+ function ZoomableImage({
75
+ uri,
76
+ accessibilityLabel,
77
+ onLoad,
78
+ onError
79
+ }) {
80
+ const reduceMotion = (0, _useReduceMotion.useReduceMotion)();
81
+ const [scale] = (0, _react.useState)(() => new _reactNative.Animated.Value(1));
82
+ const [x] = (0, _react.useState)(() => new _reactNative.Animated.Value(0));
83
+ const [y] = (0, _react.useState)(() => new _reactNative.Animated.Value(0));
84
+
85
+ // Gesture state, read by the (stable) PanResponder below.
86
+ const g = (0, _react.useRef)({
87
+ view: {
88
+ scale: 1,
89
+ x: 0,
90
+ y: 0
91
+ },
92
+ box: {
93
+ width: 0,
94
+ height: 0
95
+ },
96
+ // Where the box sits on screen, so touches can be measured from its centre.
97
+ origin: {
98
+ x: 0,
99
+ y: 0
100
+ },
101
+ image: null,
102
+ // The view, finger centre and finger spread when the current set of fingers went down.
103
+ start: {
104
+ view: {
105
+ scale: 1,
106
+ x: 0,
107
+ y: 0
108
+ },
109
+ centre: {
110
+ x: 0,
111
+ y: 0
112
+ },
113
+ spread: 0,
114
+ count: 0
115
+ },
116
+ moved: false,
117
+ grantedAt: 0,
118
+ lastTap: null,
119
+ reduceMotion: false,
120
+ native: false
121
+ }).current;
122
+ g.reduceMotion = reduceMotion;
123
+ const boxRef = (0, _react.useRef)(null);
124
+ const show = (view, animate) => {
125
+ g.view = view;
126
+ if (!animate || g.reduceMotion !== false) {
127
+ scale.setValue(view.scale);
128
+ x.setValue(view.x);
129
+ y.setValue(view.y);
130
+ return;
131
+ }
132
+ const spring = (value, toValue) => _reactNative.Animated.spring(value, {
133
+ toValue,
134
+ useNativeDriver: true,
135
+ bounciness: 0,
136
+ speed: 18
137
+ });
138
+ _reactNative.Animated.parallel([spring(scale, view.scale), spring(x, view.x), spring(y, view.y)]).start();
139
+ };
140
+
141
+ // Hands the transform to the native driver as soon as the image is on
142
+ // screen. Until a native animation had run, Android (new architecture) didn't
143
+ // draw finger moves, so pinching only worked after a double tap.
144
+ const goNative = () => {
145
+ if (g.native) return;
146
+ g.native = true;
147
+ const settle = (value, toValue) => _reactNative.Animated.spring(value, {
148
+ toValue,
149
+ useNativeDriver: true,
150
+ bounciness: 0,
151
+ speed: 18
152
+ });
153
+ _reactNative.Animated.parallel([settle(scale, g.view.scale), settle(x, g.view.x), settle(y, g.view.y)]).start();
154
+ };
155
+ const fromCentre = point => ({
156
+ x: point.x - g.origin.x - g.box.width / 2,
157
+ y: point.y - g.origin.y - g.box.height / 2
158
+ });
159
+ const content = () => fittedSize(g.box, g.image);
160
+ const begin = touches => {
161
+ g.start = {
162
+ view: g.view,
163
+ centre: fromCentre(centreOf(touches)),
164
+ spread: spreadOf(touches),
165
+ count: touches.length
166
+ };
167
+ };
168
+ const pan = (0, _react.useRef)(_reactNative.PanResponder.create({
169
+ onStartShouldSetPanResponder: () => true,
170
+ onMoveShouldSetPanResponder: () => true,
171
+ // Never hand the gesture over: nothing else in the full-screen viewer
172
+ // wants it, and giving it up at 1× ended a pinch as it started.
173
+ onPanResponderTerminationRequest: () => false,
174
+ onPanResponderGrant: event => {
175
+ g.moved = false;
176
+ g.grantedAt = Date.now();
177
+ begin(event.nativeEvent.touches);
178
+ },
179
+ onPanResponderMove: (event, gesture) => {
180
+ const touches = event.nativeEvent.touches;
181
+ if (touches.length === 0) return;
182
+ // A finger landed or lifted: carry on from where the image is now.
183
+ if (touches.length !== g.start.count) begin(touches);
184
+ if (Math.abs(gesture.dx) > TAP_SLOP || Math.abs(gesture.dy) > TAP_SLOP || touches.length > 1) {
185
+ g.moved = true;
186
+ }
187
+ const centre = fromCentre(centreOf(touches));
188
+ if (touches.length > 1 && g.start.spread > 0) {
189
+ // Past the limits while pinching, then springs back on release.
190
+ const zoom = Math.min(MAX_ZOOM * 1.25, Math.max(0.75, g.start.view.scale * spreadOf(touches) / g.start.spread));
191
+ show(zoomAround(g.start.view, zoom, g.start.centre, centre), false);
192
+ } else if (g.start.view.scale > 1) {
193
+ // One finger drags the zoomed image; at 1× there's nothing to drag.
194
+ const dragged = {
195
+ ...g.start.view,
196
+ x: g.start.view.x + centre.x - g.start.centre.x,
197
+ y: g.start.view.y + centre.y - g.start.centre.y
198
+ };
199
+ show(clampView(dragged, g.box, content()), false);
200
+ }
201
+ },
202
+ onPanResponderRelease: event => {
203
+ const now = Date.now();
204
+ const {
205
+ pageX,
206
+ pageY
207
+ } = event.nativeEvent;
208
+ const isTap = !g.moved && now - g.grantedAt < DOUBLE_TAP_MS;
209
+ const last = g.lastTap;
210
+ if (isTap && last && now - last.at < DOUBLE_TAP_MS && Math.hypot(pageX - last.x, pageY - last.y) < DOUBLE_TAP_SLOP) {
211
+ g.lastTap = null;
212
+ // Zooming in keeps the tapped spot under the finger (as far as the edges allow).
213
+ const tapped = fromCentre({
214
+ x: pageX,
215
+ y: pageY
216
+ });
217
+ const target = g.view.scale > 1.01 ? {
218
+ scale: 1,
219
+ x: 0,
220
+ y: 0
221
+ } : zoomAround({
222
+ scale: 1,
223
+ x: 0,
224
+ y: 0
225
+ }, DOUBLE_TAP_ZOOM, tapped, tapped);
226
+ show(clampView(target, g.box, content()), true);
227
+ return;
228
+ }
229
+ g.lastTap = isTap ? {
230
+ at: now,
231
+ x: pageX,
232
+ y: pageY
233
+ } : null;
234
+ show(clampView(g.view, g.box, content()), true);
235
+ },
236
+ onPanResponderTerminate: () => show(clampView(g.view, g.box, content()), true)
237
+ })).current;
238
+ const onLayout = event => {
239
+ const {
240
+ width,
241
+ height
242
+ } = event.nativeEvent.layout;
243
+ g.box = {
244
+ width,
245
+ height
246
+ };
247
+ goNative();
248
+ boxRef.current?.measureInWindow?.((left, top) => {
249
+ g.origin = {
250
+ x: left,
251
+ y: top
252
+ };
253
+ });
254
+ };
255
+ const handleLoad = event => {
256
+ const source = event?.nativeEvent?.source;
257
+ if (source && source.width > 0 && source.height > 0) g.image = {
258
+ width: source.width,
259
+ height: source.height
260
+ };
261
+ onLoad();
262
+ };
263
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
264
+ ref: boxRef,
265
+ style: styles.box,
266
+ onLayout: onLayout,
267
+ ...pan.panHandlers,
268
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Animated.Image, {
269
+ source: {
270
+ uri
271
+ },
272
+ style: [styles.image, {
273
+ transform: [{
274
+ translateX: x
275
+ }, {
276
+ translateY: y
277
+ }, {
278
+ scale
279
+ }]
280
+ }],
281
+ resizeMode: "contain",
282
+ accessibilityLabel: accessibilityLabel,
283
+ accessibilityIgnoresInvertColors: true,
284
+ onLoad: handleLoad,
285
+ onError: onError
286
+ })
287
+ });
288
+ }
289
+ const styles = _reactNative.StyleSheet.create({
290
+ box: {
291
+ flex: 1,
292
+ overflow: 'hidden'
293
+ },
294
+ image: {
295
+ width: '100%',
296
+ height: '100%'
297
+ }
298
+ });
299
+ //# sourceMappingURL=ZoomableImage.js.map