@repzo/widget-react-native 1.3.1 → 1.4.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 (224) hide show
  1. package/CHANGELOG.md +137 -5
  2. package/README.md +64 -12
  3. package/lib/commonjs/api/client.js +96 -23
  4. package/lib/commonjs/api/client.js.map +1 -1
  5. package/lib/commonjs/attachments/file-size.js +52 -0
  6. package/lib/commonjs/attachments/file-size.js.map +1 -0
  7. package/lib/commonjs/attachments/local-previews.js +40 -0
  8. package/lib/commonjs/attachments/local-previews.js.map +1 -0
  9. package/lib/commonjs/attachments/pickers.js +20 -29
  10. package/lib/commonjs/attachments/pickers.js.map +1 -1
  11. package/lib/commonjs/i18n.js +22 -3
  12. package/lib/commonjs/i18n.js.map +1 -1
  13. package/lib/commonjs/locales.js +12 -3
  14. package/lib/commonjs/locales.js.map +1 -1
  15. package/lib/commonjs/state/widget-store.js +277 -30
  16. package/lib/commonjs/state/widget-store.js.map +1 -1
  17. package/lib/commonjs/storage.js +3 -1
  18. package/lib/commonjs/storage.js.map +1 -1
  19. package/lib/commonjs/types.js.map +1 -1
  20. package/lib/commonjs/ui/WidgetProvider.js +33 -13
  21. package/lib/commonjs/ui/WidgetProvider.js.map +1 -1
  22. package/lib/commonjs/ui/components/AttachmentChips.js +109 -40
  23. package/lib/commonjs/ui/components/AttachmentChips.js.map +1 -1
  24. package/lib/commonjs/ui/components/ConversationRow.js +65 -10
  25. package/lib/commonjs/ui/components/ConversationRow.js.map +1 -1
  26. package/lib/commonjs/ui/components/ImageViewer.js +229 -24
  27. package/lib/commonjs/ui/components/ImageViewer.js.map +1 -1
  28. package/lib/commonjs/ui/components/RatingCard.js +5 -2
  29. package/lib/commonjs/ui/components/RatingCard.js.map +1 -1
  30. package/lib/commonjs/ui/components/ZoomableImage.js +58 -10
  31. package/lib/commonjs/ui/components/ZoomableImage.js.map +1 -1
  32. package/lib/commonjs/ui/hooks/use-retained-state.js +39 -0
  33. package/lib/commonjs/ui/hooks/use-retained-state.js.map +1 -0
  34. package/lib/commonjs/ui/screens/chat/ChatView.js +637 -164
  35. package/lib/commonjs/ui/screens/chat/ChatView.js.map +1 -1
  36. package/lib/commonjs/ui/screens/chat/ChatView.styles.js +138 -1
  37. package/lib/commonjs/ui/screens/chat/ChatView.styles.js.map +1 -1
  38. package/lib/commonjs/ui/screens/conversations/ConversationsList.js +1 -0
  39. package/lib/commonjs/ui/screens/conversations/ConversationsList.js.map +1 -1
  40. package/lib/commonjs/ui/screens/home/HomeView.js +38 -55
  41. package/lib/commonjs/ui/screens/home/HomeView.js.map +1 -1
  42. package/lib/commonjs/ui/screens/home/HomeView.styles.js +36 -45
  43. package/lib/commonjs/ui/screens/home/HomeView.styles.js.map +1 -1
  44. package/lib/commonjs/ui/utils/html.js +13 -0
  45. package/lib/commonjs/ui/utils/html.js.map +1 -1
  46. package/lib/commonjs/ui/utils/image-load-queue.js +114 -0
  47. package/lib/commonjs/ui/utils/image-load-queue.js.map +1 -0
  48. package/lib/commonjs/ui/utils/inline-attachments.js +88 -0
  49. package/lib/commonjs/ui/utils/inline-attachments.js.map +1 -0
  50. package/lib/module/api/client.js +96 -23
  51. package/lib/module/api/client.js.map +1 -1
  52. package/lib/module/attachments/file-size.js +47 -0
  53. package/lib/module/attachments/file-size.js.map +1 -0
  54. package/lib/module/attachments/local-previews.js +33 -0
  55. package/lib/module/attachments/local-previews.js.map +1 -0
  56. package/lib/module/attachments/pickers.js +15 -25
  57. package/lib/module/attachments/pickers.js.map +1 -1
  58. package/lib/module/i18n.js +22 -3
  59. package/lib/module/i18n.js.map +1 -1
  60. package/lib/module/locales.js +12 -3
  61. package/lib/module/locales.js.map +1 -1
  62. package/lib/module/state/widget-store.js +279 -32
  63. package/lib/module/state/widget-store.js.map +1 -1
  64. package/lib/module/storage.js +2 -0
  65. package/lib/module/storage.js.map +1 -1
  66. package/lib/module/types.js.map +1 -1
  67. package/lib/module/ui/WidgetProvider.js +33 -13
  68. package/lib/module/ui/WidgetProvider.js.map +1 -1
  69. package/lib/module/ui/components/AttachmentChips.js +111 -42
  70. package/lib/module/ui/components/AttachmentChips.js.map +1 -1
  71. package/lib/module/ui/components/ConversationRow.js +65 -10
  72. package/lib/module/ui/components/ConversationRow.js.map +1 -1
  73. package/lib/module/ui/components/ImageViewer.js +231 -26
  74. package/lib/module/ui/components/ImageViewer.js.map +1 -1
  75. package/lib/module/ui/components/RatingCard.js +5 -2
  76. package/lib/module/ui/components/RatingCard.js.map +1 -1
  77. package/lib/module/ui/components/ZoomableImage.js +58 -10
  78. package/lib/module/ui/components/ZoomableImage.js.map +1 -1
  79. package/lib/module/ui/hooks/use-retained-state.js +34 -0
  80. package/lib/module/ui/hooks/use-retained-state.js.map +1 -0
  81. package/lib/module/ui/screens/chat/ChatView.js +641 -168
  82. package/lib/module/ui/screens/chat/ChatView.js.map +1 -1
  83. package/lib/module/ui/screens/chat/ChatView.styles.js +140 -2
  84. package/lib/module/ui/screens/chat/ChatView.styles.js.map +1 -1
  85. package/lib/module/ui/screens/conversations/ConversationsList.js +1 -0
  86. package/lib/module/ui/screens/conversations/ConversationsList.js.map +1 -1
  87. package/lib/module/ui/screens/home/HomeView.js +40 -57
  88. package/lib/module/ui/screens/home/HomeView.js.map +1 -1
  89. package/lib/module/ui/screens/home/HomeView.styles.js +36 -45
  90. package/lib/module/ui/screens/home/HomeView.styles.js.map +1 -1
  91. package/lib/module/ui/utils/html.js +12 -0
  92. package/lib/module/ui/utils/html.js.map +1 -1
  93. package/lib/module/ui/utils/image-load-queue.js +109 -0
  94. package/lib/module/ui/utils/image-load-queue.js.map +1 -0
  95. package/lib/module/ui/utils/inline-attachments.js +85 -0
  96. package/lib/module/ui/utils/inline-attachments.js.map +1 -0
  97. package/lib/typescript/commonjs/api/client.d.ts +12 -4
  98. package/lib/typescript/commonjs/api/client.d.ts.map +1 -1
  99. package/lib/typescript/commonjs/attachments/file-size.d.ts +15 -0
  100. package/lib/typescript/commonjs/attachments/file-size.d.ts.map +1 -0
  101. package/lib/typescript/commonjs/attachments/local-previews.d.ts +14 -0
  102. package/lib/typescript/commonjs/attachments/local-previews.d.ts.map +1 -0
  103. package/lib/typescript/commonjs/attachments/pickers.d.ts +15 -2
  104. package/lib/typescript/commonjs/attachments/pickers.d.ts.map +1 -1
  105. package/lib/typescript/commonjs/i18n.d.ts +12 -3
  106. package/lib/typescript/commonjs/i18n.d.ts.map +1 -1
  107. package/lib/typescript/commonjs/locales.d.ts.map +1 -1
  108. package/lib/typescript/commonjs/state/widget-store.d.ts +40 -1
  109. package/lib/typescript/commonjs/state/widget-store.d.ts.map +1 -1
  110. package/lib/typescript/commonjs/storage.d.ts +2 -0
  111. package/lib/typescript/commonjs/storage.d.ts.map +1 -1
  112. package/lib/typescript/commonjs/types.d.ts +41 -0
  113. package/lib/typescript/commonjs/types.d.ts.map +1 -1
  114. package/lib/typescript/commonjs/ui/WidgetProvider.d.ts.map +1 -1
  115. package/lib/typescript/commonjs/ui/components/AttachmentChips.d.ts +13 -3
  116. package/lib/typescript/commonjs/ui/components/AttachmentChips.d.ts.map +1 -1
  117. package/lib/typescript/commonjs/ui/components/ConversationRow.d.ts +15 -1
  118. package/lib/typescript/commonjs/ui/components/ConversationRow.d.ts.map +1 -1
  119. package/lib/typescript/commonjs/ui/components/ImageViewer.d.ts +26 -6
  120. package/lib/typescript/commonjs/ui/components/ImageViewer.d.ts.map +1 -1
  121. package/lib/typescript/commonjs/ui/components/RatingCard.d.ts.map +1 -1
  122. package/lib/typescript/commonjs/ui/components/ZoomableImage.d.ts +10 -1
  123. package/lib/typescript/commonjs/ui/components/ZoomableImage.d.ts.map +1 -1
  124. package/lib/typescript/commonjs/ui/hooks/use-retained-state.d.ts +11 -0
  125. package/lib/typescript/commonjs/ui/hooks/use-retained-state.d.ts.map +1 -0
  126. package/lib/typescript/commonjs/ui/screens/chat/ChatView.d.ts +4 -4
  127. package/lib/typescript/commonjs/ui/screens/chat/ChatView.d.ts.map +1 -1
  128. package/lib/typescript/commonjs/ui/screens/chat/ChatView.styles.d.ts +144 -0
  129. package/lib/typescript/commonjs/ui/screens/chat/ChatView.styles.d.ts.map +1 -1
  130. package/lib/typescript/commonjs/ui/screens/chat/ChatView.types.d.ts +26 -1
  131. package/lib/typescript/commonjs/ui/screens/chat/ChatView.types.d.ts.map +1 -1
  132. package/lib/typescript/commonjs/ui/screens/conversations/ConversationsList.d.ts.map +1 -1
  133. package/lib/typescript/commonjs/ui/screens/conversations/ConversationsList.types.d.ts +2 -0
  134. package/lib/typescript/commonjs/ui/screens/conversations/ConversationsList.types.d.ts.map +1 -1
  135. package/lib/typescript/commonjs/ui/screens/home/HomeView.d.ts +7 -5
  136. package/lib/typescript/commonjs/ui/screens/home/HomeView.d.ts.map +1 -1
  137. package/lib/typescript/commonjs/ui/screens/home/HomeView.styles.d.ts +30 -35
  138. package/lib/typescript/commonjs/ui/screens/home/HomeView.styles.d.ts.map +1 -1
  139. package/lib/typescript/commonjs/ui/screens/home/HomeView.types.d.ts +5 -6
  140. package/lib/typescript/commonjs/ui/screens/home/HomeView.types.d.ts.map +1 -1
  141. package/lib/typescript/commonjs/ui/utils/html.d.ts +5 -0
  142. package/lib/typescript/commonjs/ui/utils/html.d.ts.map +1 -1
  143. package/lib/typescript/commonjs/ui/utils/image-load-queue.d.ts +44 -0
  144. package/lib/typescript/commonjs/ui/utils/image-load-queue.d.ts.map +1 -0
  145. package/lib/typescript/commonjs/ui/utils/inline-attachments.d.ts +29 -0
  146. package/lib/typescript/commonjs/ui/utils/inline-attachments.d.ts.map +1 -0
  147. package/lib/typescript/module/api/client.d.ts +12 -4
  148. package/lib/typescript/module/api/client.d.ts.map +1 -1
  149. package/lib/typescript/module/attachments/file-size.d.ts +15 -0
  150. package/lib/typescript/module/attachments/file-size.d.ts.map +1 -0
  151. package/lib/typescript/module/attachments/local-previews.d.ts +14 -0
  152. package/lib/typescript/module/attachments/local-previews.d.ts.map +1 -0
  153. package/lib/typescript/module/attachments/pickers.d.ts +15 -2
  154. package/lib/typescript/module/attachments/pickers.d.ts.map +1 -1
  155. package/lib/typescript/module/i18n.d.ts +12 -3
  156. package/lib/typescript/module/i18n.d.ts.map +1 -1
  157. package/lib/typescript/module/locales.d.ts.map +1 -1
  158. package/lib/typescript/module/state/widget-store.d.ts +40 -1
  159. package/lib/typescript/module/state/widget-store.d.ts.map +1 -1
  160. package/lib/typescript/module/storage.d.ts +2 -0
  161. package/lib/typescript/module/storage.d.ts.map +1 -1
  162. package/lib/typescript/module/types.d.ts +41 -0
  163. package/lib/typescript/module/types.d.ts.map +1 -1
  164. package/lib/typescript/module/ui/WidgetProvider.d.ts.map +1 -1
  165. package/lib/typescript/module/ui/components/AttachmentChips.d.ts +13 -3
  166. package/lib/typescript/module/ui/components/AttachmentChips.d.ts.map +1 -1
  167. package/lib/typescript/module/ui/components/ConversationRow.d.ts +15 -1
  168. package/lib/typescript/module/ui/components/ConversationRow.d.ts.map +1 -1
  169. package/lib/typescript/module/ui/components/ImageViewer.d.ts +26 -6
  170. package/lib/typescript/module/ui/components/ImageViewer.d.ts.map +1 -1
  171. package/lib/typescript/module/ui/components/RatingCard.d.ts.map +1 -1
  172. package/lib/typescript/module/ui/components/ZoomableImage.d.ts +10 -1
  173. package/lib/typescript/module/ui/components/ZoomableImage.d.ts.map +1 -1
  174. package/lib/typescript/module/ui/hooks/use-retained-state.d.ts +11 -0
  175. package/lib/typescript/module/ui/hooks/use-retained-state.d.ts.map +1 -0
  176. package/lib/typescript/module/ui/screens/chat/ChatView.d.ts +4 -4
  177. package/lib/typescript/module/ui/screens/chat/ChatView.d.ts.map +1 -1
  178. package/lib/typescript/module/ui/screens/chat/ChatView.styles.d.ts +144 -0
  179. package/lib/typescript/module/ui/screens/chat/ChatView.styles.d.ts.map +1 -1
  180. package/lib/typescript/module/ui/screens/chat/ChatView.types.d.ts +26 -1
  181. package/lib/typescript/module/ui/screens/chat/ChatView.types.d.ts.map +1 -1
  182. package/lib/typescript/module/ui/screens/conversations/ConversationsList.d.ts.map +1 -1
  183. package/lib/typescript/module/ui/screens/conversations/ConversationsList.types.d.ts +2 -0
  184. package/lib/typescript/module/ui/screens/conversations/ConversationsList.types.d.ts.map +1 -1
  185. package/lib/typescript/module/ui/screens/home/HomeView.d.ts +7 -5
  186. package/lib/typescript/module/ui/screens/home/HomeView.d.ts.map +1 -1
  187. package/lib/typescript/module/ui/screens/home/HomeView.styles.d.ts +30 -35
  188. package/lib/typescript/module/ui/screens/home/HomeView.styles.d.ts.map +1 -1
  189. package/lib/typescript/module/ui/screens/home/HomeView.types.d.ts +5 -6
  190. package/lib/typescript/module/ui/screens/home/HomeView.types.d.ts.map +1 -1
  191. package/lib/typescript/module/ui/utils/html.d.ts +5 -0
  192. package/lib/typescript/module/ui/utils/html.d.ts.map +1 -1
  193. package/lib/typescript/module/ui/utils/image-load-queue.d.ts +44 -0
  194. package/lib/typescript/module/ui/utils/image-load-queue.d.ts.map +1 -0
  195. package/lib/typescript/module/ui/utils/inline-attachments.d.ts +29 -0
  196. package/lib/typescript/module/ui/utils/inline-attachments.d.ts.map +1 -0
  197. package/package.json +1 -1
  198. package/src/api/client.ts +116 -34
  199. package/src/attachments/file-size.ts +42 -0
  200. package/src/attachments/local-previews.ts +32 -0
  201. package/src/attachments/pickers.ts +23 -25
  202. package/src/i18n.ts +22 -3
  203. package/src/locales.ts +12 -3
  204. package/src/state/widget-store.ts +322 -50
  205. package/src/storage.ts +2 -0
  206. package/src/types.ts +41 -0
  207. package/src/ui/WidgetProvider.tsx +35 -8
  208. package/src/ui/components/AttachmentChips.tsx +100 -29
  209. package/src/ui/components/ConversationRow.tsx +90 -9
  210. package/src/ui/components/ImageViewer.tsx +242 -24
  211. package/src/ui/components/RatingCard.tsx +5 -2
  212. package/src/ui/components/ZoomableImage.tsx +58 -5
  213. package/src/ui/hooks/use-retained-state.ts +35 -0
  214. package/src/ui/screens/chat/ChatView.styles.ts +139 -1
  215. package/src/ui/screens/chat/ChatView.tsx +721 -197
  216. package/src/ui/screens/chat/ChatView.types.ts +26 -1
  217. package/src/ui/screens/conversations/ConversationsList.tsx +1 -0
  218. package/src/ui/screens/conversations/ConversationsList.types.ts +2 -0
  219. package/src/ui/screens/home/HomeView.styles.ts +36 -45
  220. package/src/ui/screens/home/HomeView.tsx +54 -70
  221. package/src/ui/screens/home/HomeView.types.ts +5 -6
  222. package/src/ui/utils/html.ts +26 -0
  223. package/src/ui/utils/image-load-queue.ts +108 -0
  224. package/src/ui/utils/inline-attachments.ts +71 -0
@@ -20,6 +20,7 @@ var _jsxRuntime = require("react/jsx-runtime");
20
20
  */
21
21
 
22
22
  const AVATAR_SIZE = 40;
23
+ const CARD_AVATAR_SIZE = 32;
23
24
  function ConversationRow({
24
25
  conversation,
25
26
  color,
@@ -27,47 +28,59 @@ function ConversationRow({
27
28
  timeLabels,
28
29
  unreadCount = 0,
29
30
  unreadLabel,
31
+ lastMessageLabels,
30
32
  horizontalPadding = _theme.spacing.xl,
33
+ variant = 'list',
31
34
  onPress
32
35
  }) {
36
+ const card = variant === 'card';
33
37
  const displayName = conversation.agentName || fallbackName;
34
38
  const hasUnread = unreadCount > 0;
35
39
  const unreadSuffix = hasUnread && unreadLabel ? `. ${(0, _i18n.formatLabel)(unreadLabel, {
36
40
  count: unreadCount
37
41
  })}` : '';
42
+ const attachment = conversation.lastMessageAttachment;
43
+ // "Photo" or "File" over Workstation's "2 attachments".
44
+ const snippet = attachment && lastMessageLabels?.[attachment] || conversation.snippet || '';
45
+ // "You: " is drawn a shade stronger than the message, so it reads as a label.
46
+ const [youBefore, youAfter] = snippet && conversation.lastMessageFromVisitor && lastMessageLabels?.you ? splitAround(lastMessageLabels.you, '{message}') : ['', ''];
47
+ const snippetLabel = `${youBefore}${snippet}${youAfter}`;
38
48
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Pressable, {
39
49
  onPress: onPress,
40
50
  accessibilityRole: "button",
41
- accessibilityLabel: `${conversation.snippet ? `${displayName}. ${conversation.snippet}` : displayName}${unreadSuffix}`,
51
+ accessibilityLabel: `${snippet ? `${displayName}. ${snippetLabel}` : displayName}${unreadSuffix}`,
42
52
  android_ripple: {
43
53
  color: _theme.palette.borderSoft
44
54
  },
45
55
  style: ({
46
56
  pressed
47
- }) => [styles.row, {
57
+ }) => [styles.row, card && cardStyles.row, {
48
58
  paddingHorizontal: horizontalPadding
49
59
  }, pressed && styles.rowPressed],
50
60
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Avatar.Avatar, {
51
61
  avatar: conversation.agentAvatar,
52
62
  name: conversation.agentName,
53
- size: AVATAR_SIZE,
63
+ size: card ? CARD_AVATAR_SIZE : AVATAR_SIZE,
54
64
  color: color
55
65
  }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
56
66
  style: styles.content,
57
67
  children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
58
- style: styles.topLine,
68
+ style: [styles.topLine, card && cardStyles.topLine],
59
69
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
60
- style: [styles.name, hasUnread && styles.nameUnread],
70
+ style: card ? [cardStyles.name, hasUnread && cardStyles.nameUnread] : [styles.name, hasUnread && styles.nameUnread],
61
71
  numberOfLines: 1,
62
72
  children: displayName
63
73
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
64
- style: styles.time,
74
+ style: [styles.time, card && cardStyles.time],
65
75
  children: conversation.lastMessageAt ? (0, _conversations.formatRelativeTime)(conversation.lastMessageAt, timeLabels) : ''
66
76
  })]
67
- }), conversation.snippet ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
68
- style: [styles.snippet, hasUnread && styles.snippetUnread],
77
+ }), snippet ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
78
+ style: [styles.snippet, card && cardStyles.snippet, hasUnread && styles.snippetUnread],
69
79
  numberOfLines: 2,
70
- children: conversation.snippet
80
+ children: [youBefore ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
81
+ style: styles.snippetYou,
82
+ children: youBefore
83
+ }) : null, snippet, youAfter]
71
84
  }) : null]
72
85
  }), hasUnread ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
73
86
  style: [styles.badge, {
@@ -77,7 +90,7 @@ function ConversationRow({
77
90
  style: styles.badgeLabel,
78
91
  children: unreadCount > 9 ? '9+' : unreadCount
79
92
  })
80
- }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_icons.ChevronIcon, {
93
+ }) : card ? null : /*#__PURE__*/(0, _jsxRuntime.jsx)(_icons.ChevronIcon, {
81
94
  size: 16,
82
95
  direction: (0, _rtl.forwardDirection)(),
83
96
  color: _theme.palette.textSubtle
@@ -85,6 +98,13 @@ function ConversationRow({
85
98
  });
86
99
  }
87
100
 
101
+ /** `'You: {message}'` → `['You: ', '']`; a template without the token goes in front. */
102
+ function splitAround(template, token) {
103
+ const index = template.indexOf(token);
104
+ if (index < 0) return [`${template} `, ''];
105
+ return [template.slice(0, index), template.slice(index + token.length)];
106
+ }
107
+
88
108
  /** Where a divider should start so it sits under the text, not the avatar. */
89
109
  function rowDividerInset(horizontalPadding = _theme.spacing.xl) {
90
110
  return horizontalPadding + AVATAR_SIZE + _theme.spacing.md;
@@ -136,6 +156,10 @@ const styles = _reactNative.StyleSheet.create({
136
156
  color: _theme.palette.text,
137
157
  fontWeight: '500'
138
158
  },
159
+ snippetYou: {
160
+ color: _theme.palette.text,
161
+ fontWeight: '600'
162
+ },
139
163
  // Replaces the chevron rather than crowding beside it, so the row keeps
140
164
  // the same width whether or not there is anything unread.
141
165
  badge: {
@@ -152,4 +176,35 @@ const styles = _reactNative.StyleSheet.create({
152
176
  fontWeight: '700'
153
177
  }
154
178
  });
179
+
180
+ // Overrides for the `card` variant. It sits under the card's title, so it
181
+ // drops the list's minimum height, and its name, time and last message share
182
+ // one size, the way the Home design draws them.
183
+ const cardStyles = _reactNative.StyleSheet.create({
184
+ row: {
185
+ minHeight: 0,
186
+ paddingVertical: _theme.spacing.sm
187
+ },
188
+ // The time follows the name instead of being pushed to the far edge.
189
+ topLine: {
190
+ justifyContent: 'flex-start'
191
+ },
192
+ name: {
193
+ textAlign: _rtl.START_ALIGN,
194
+ flexShrink: 1,
195
+ fontSize: _theme.fontSize.body,
196
+ color: _theme.palette.ink
197
+ },
198
+ nameUnread: {
199
+ fontWeight: '600'
200
+ },
201
+ time: {
202
+ fontSize: _theme.fontSize.body
203
+ },
204
+ snippet: {
205
+ fontSize: _theme.fontSize.body,
206
+ lineHeight: _theme.fontSize.body * 1.35,
207
+ color: _theme.palette.textSubtle
208
+ }
209
+ });
155
210
  //# sourceMappingURL=ConversationRow.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","_Avatar","_i18n","_conversations","_icons","_rtl","_theme","_jsxRuntime","AVATAR_SIZE","ConversationRow","conversation","color","fallbackName","timeLabels","unreadCount","unreadLabel","horizontalPadding","spacing","xl","onPress","displayName","agentName","hasUnread","unreadSuffix","formatLabel","count","jsxs","Pressable","accessibilityRole","accessibilityLabel","snippet","android_ripple","palette","borderSoft","style","pressed","styles","row","paddingHorizontal","rowPressed","children","jsx","Avatar","avatar","agentAvatar","name","size","View","content","topLine","Text","nameUnread","numberOfLines","time","lastMessageAt","formatRelativeTime","snippetUnread","badge","backgroundColor","badgeLabel","ChevronIcon","direction","forwardDirection","textSubtle","rowDividerInset","md","StyleSheet","create","flexDirection","alignItems","gap","minHeight","paddingVertical","white","surface","flex","minWidth","justifyContent","sm","textAlign","START_ALIGN","fontSize","body","fontWeight","ink","caption","meta","lineHeight","textMuted","marginTop","text","height","borderRadius","xs","micro"],"sourceRoot":"../../../../src","sources":["ui/components/ConversationRow.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_reactNative","require","_Avatar","_i18n","_conversations","_icons","_rtl","_theme","_jsxRuntime","AVATAR_SIZE","CARD_AVATAR_SIZE","ConversationRow","conversation","color","fallbackName","timeLabels","unreadCount","unreadLabel","lastMessageLabels","horizontalPadding","spacing","xl","variant","onPress","card","displayName","agentName","hasUnread","unreadSuffix","formatLabel","count","attachment","lastMessageAttachment","snippet","youBefore","youAfter","lastMessageFromVisitor","you","splitAround","snippetLabel","jsxs","Pressable","accessibilityRole","accessibilityLabel","android_ripple","palette","borderSoft","style","pressed","styles","row","cardStyles","paddingHorizontal","rowPressed","children","jsx","Avatar","avatar","agentAvatar","name","size","View","content","topLine","Text","nameUnread","numberOfLines","time","lastMessageAt","formatRelativeTime","snippetUnread","snippetYou","badge","backgroundColor","badgeLabel","ChevronIcon","direction","forwardDirection","textSubtle","template","token","index","indexOf","slice","length","rowDividerInset","md","StyleSheet","create","flexDirection","alignItems","gap","minHeight","paddingVertical","white","surface","flex","minWidth","justifyContent","sm","textAlign","START_ALIGN","fontSize","body","fontWeight","ink","caption","meta","lineHeight","textMuted","marginTop","text","height","borderRadius","xs","micro","flexShrink"],"sourceRoot":"../../../../src","sources":["ui/components/ConversationRow.tsx"],"mappings":"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","ignoreList":[]}
@@ -6,8 +6,11 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.ImageViewer = ImageViewer;
7
7
  var _react = require("react");
8
8
  var _reactNative = require("react-native");
9
+ var _i18n = require("../../i18n.js");
10
+ var _useReduceMotion = require("../hooks/use-reduce-motion.js");
9
11
  var _useWidgetInsets = require("../hooks/use-widget-insets.js");
10
12
  var _theme = require("../styles/theme.js");
13
+ var _rtl = require("../utils/rtl.js");
11
14
  var _safeUrl = require("../utils/safe-url.js");
12
15
  var _icons = require("./icons.js");
13
16
  var _ZoomableImage = require("./ZoomableImage.js");
@@ -15,22 +18,126 @@ var _jsxRuntime = require("react/jsx-runtime");
15
18
  /**
16
19
  * Full-screen viewer for image attachments, so a tap on a photo the agent sent
17
20
  * stays inside the messenger instead of bouncing to the browser. Pinch, drag
18
- * and double-tap zoom work on iOS and Android (see ZoomableImage).
21
+ * and double-tap zoom work on iOS and Android (see ZoomableImage). With
22
+ * several photos in one message, a sideways swipe moves between them.
19
23
  */
20
24
 
25
+ /** The photos of one message, opened at the one tapped. */
26
+
27
+ /** A swipe changes photo past this share of the screen, or this fast (px/ms). */
28
+ const SWIPE_DISTANCE = 0.25;
29
+ const SWIPE_VELOCITY = 0.5;
30
+ /** Past the first or last photo the strip only gives this much. */
31
+ const EDGE_RESISTANCE = 0.25;
21
32
  function ImageViewer({
22
- image,
33
+ gallery,
23
34
  labels,
24
35
  onClose,
25
36
  onOpenExternally
26
37
  }) {
27
38
  const insets = (0, _useWidgetInsets.useWidgetInsets)();
28
- // Keyed by URL so opening another image starts from a clean loading state.
39
+ const reduceMotion = (0, _useReduceMotion.useReduceMotion)();
40
+ // The photo on screen, for the gallery it belongs to: a new gallery opens at its own.
41
+ const [position, setPosition] = (0, _react.useState)({
42
+ of: null,
43
+ index: 0
44
+ });
45
+ const images = gallery?.images ?? [];
46
+ const index = position.of === gallery ? position.index : gallery?.index ?? 0;
47
+ const image = images[index] ?? null;
48
+ // Photos whose own URL failed, now shown from their fallback.
49
+ const [fellBack, setFellBack] = (0, _react.useState)(() => new Set());
50
+ const sourceOf = photo => photo.fallbackUrl && fellBack.has(photo.url) ? photo.fallbackUrl : photo.url;
51
+ const source = image ? sourceOf(image) : null;
52
+ // Keyed by URL so each photo starts from a clean loading state.
29
53
  const [status, setStatus] = (0, _react.useState)({
30
54
  url: null,
31
55
  state: 'loading'
32
56
  });
33
- const state = status.url === image?.url ? status.state : 'loading';
57
+ const state = status.url === source ? status.state : 'loading';
58
+ // False once there's nothing left to try, so the caller shows the failure.
59
+ const fallBack = photo => {
60
+ if (!photo.fallbackUrl || fellBack.has(photo.url)) return false;
61
+ setFellBack(current => new Set(current).add(photo.url));
62
+ return true;
63
+ };
64
+ // Photos whose screen-size copy is drawn: no spinner over those while the full one decodes.
65
+ const [previewed, setPreviewed] = (0, _react.useState)(() => new Set());
66
+ const markPreviewed = url => setPreviewed(current => current.has(url) ? current : new Set(current).add(url));
67
+ const [width, setWidth] = (0, _react.useState)(0);
68
+ // One page per photo, never reordered: a swipe slides the strip to the photo
69
+ // it lands on and leaves it there. (Re-centring three pages instead showed the
70
+ // wrong photo, then a black frame, for a moment on Android.)
71
+ const [offset] = (0, _react.useState)(() => new _reactNative.Animated.Value(0));
72
+ const rtl = (0, _rtl.isRTL)();
73
+ // Pages run left to right in every language; in Arabic the first photo is the rightmost.
74
+ const restingAt = photo => -(rtl ? images.length - 1 - photo : photo) * width;
75
+ const swiping = (0, _react.useRef)(false);
76
+ // Closing the viewer mid-swipe stops the slide unfinished, so it never
77
+ // settles: the next gallery is placed afresh.
78
+ (0, _react.useLayoutEffect)(() => {
79
+ swiping.current = false;
80
+ }, [gallery]);
81
+ // Places the strip when the viewer opens, the screen turns or the screen reader
82
+ // moves; after a swipe it is already there.
83
+ (0, _react.useLayoutEffect)(() => {
84
+ if (!swiping.current) offset.setValue(restingAt(index));
85
+ });
86
+
87
+ // In Arabic the next photo is the one on the left.
88
+ const step = rtl ? -1 : 1;
89
+ const neighbour = side => {
90
+ const next = index + side * step;
91
+ return next >= 0 && next < images.length ? next : null;
92
+ };
93
+ const show = next => {
94
+ if (next !== null) setPosition({
95
+ of: gallery,
96
+ index: next
97
+ });
98
+ };
99
+ const swipe = {
100
+ move: dx => {
101
+ swiping.current = true;
102
+ const resisted = neighbour(dx < 0 ? 1 : -1) === null ? dx * EDGE_RESISTANCE : dx;
103
+ offset.setValue(restingAt(index) + resisted);
104
+ },
105
+ end: (dx, vx) => {
106
+ const next = neighbour(dx < 0 ? 1 : -1);
107
+ const far = Math.abs(dx) > width * SWIPE_DISTANCE || Math.abs(vx) > SWIPE_VELOCITY && Math.sign(vx) === Math.sign(dx);
108
+ const target = next !== null && dx !== 0 && far ? next : index;
109
+ const toValue = restingAt(target);
110
+ // Switched as the finger lifts: the counter changes at once, and the full
111
+ // photo decodes while the strip is still sliding to it.
112
+ show(target === index ? null : target);
113
+ if (reduceMotion !== false) {
114
+ offset.setValue(toValue);
115
+ swiping.current = false;
116
+ return;
117
+ }
118
+ const animation = target === index ? _reactNative.Animated.spring(offset, {
119
+ toValue,
120
+ useNativeDriver: true,
121
+ bounciness: 0,
122
+ speed: 18
123
+ }) : _reactNative.Animated.timing(offset, {
124
+ toValue,
125
+ duration: 180,
126
+ useNativeDriver: true
127
+ });
128
+ // A swipe that starts before this one lands takes over the strip; it settles it.
129
+ animation.start(({
130
+ finished
131
+ }) => {
132
+ if (finished) swiping.current = false;
133
+ });
134
+ }
135
+ };
136
+ const several = images.length > 1;
137
+ const handleAccessibilityAction = event => {
138
+ if (event.nativeEvent.actionName === 'increment' && index < images.length - 1) show(index + 1);
139
+ if (event.nativeEvent.actionName === 'decrement' && index > 0) show(index - 1);
140
+ };
34
141
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Modal, {
35
142
  visible: !!image,
36
143
  transparent: true,
@@ -40,30 +147,98 @@ function ImageViewer({
40
147
  children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
41
148
  style: styles.backdrop,
42
149
  accessibilityViewIsModal: true,
43
- children: [image ?
44
- /*#__PURE__*/
45
- // Keyed by URL so the next image opens at 1×, not at the last one's zoom.
46
- (0, _jsxRuntime.jsx)(_ZoomableImage.ZoomableImage, {
47
- uri: image.url,
48
- accessibilityLabel: image.name,
49
- onLoad: () => setStatus({
50
- url: image.url,
51
- state: 'ready'
52
- }),
53
- onError: () => setStatus({
54
- url: image.url,
55
- state: 'failed'
150
+ onLayout: event => setWidth(event.nativeEvent.layout.width),
151
+ children: [image && width > 0 ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Animated.View, {
152
+ style: [styles.strip, {
153
+ width: width * images.length,
154
+ transform: [{
155
+ translateX: offset
156
+ }]
157
+ }],
158
+ children: (rtl ? [...images].reverse() : images).map(photo => {
159
+ const page = images.indexOf(photo);
160
+ const centre = page === index;
161
+ const uri = sourceOf(photo);
162
+ // Only the photo on screen and the ones a swipe reveals are drawn.
163
+ const near = Math.abs(page - index) <= 1;
164
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
165
+ style: [styles.page, {
166
+ width
167
+ }],
168
+ ...(centre && several ? {
169
+ accessible: true,
170
+ accessibilityRole: 'adjustable',
171
+ accessibilityLabel: photo.name,
172
+ accessibilityValue: {
173
+ text: (0, _i18n.formatLabel)(labels.position, {
174
+ current: index + 1,
175
+ total: images.length
176
+ })
177
+ },
178
+ accessibilityActions: [{
179
+ name: 'increment'
180
+ }, {
181
+ name: 'decrement'
182
+ }],
183
+ onAccessibilityAction: handleAccessibilityAction
184
+ } : null),
185
+ children: [!near ? null : photo.large ? centre ? null : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ActivityIndicator, {
186
+ style: styles.layer,
187
+ color: _theme.palette.white
188
+ }) :
189
+ /*#__PURE__*/
190
+ // Decoded at the screen's size, so it's ready mid-swipe, and shown
191
+ // until the full photo on top has decoded.
192
+ (0, _jsxRuntime.jsx)(_reactNative.Image, {
193
+ source: {
194
+ uri
195
+ },
196
+ style: [styles.layer, centre && state === 'ready' && styles.covered],
197
+ resizeMode: "contain",
198
+ resizeMethod: "resize",
199
+ onLoad: () => markPreviewed(uri),
200
+ onError: () => fallBack(photo),
201
+ importantForAccessibility: "no",
202
+ accessibilityIgnoresInvertColors: true
203
+ }), centre ?
204
+ /*#__PURE__*/
205
+ // Keyed by URL so each photo opens at 1×, not at the last one's zoom.
206
+ (0, _jsxRuntime.jsx)(_reactNative.View, {
207
+ style: styles.layer,
208
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_ZoomableImage.ZoomableImage, {
209
+ uri: uri,
210
+ accessibilityLabel: photo.name,
211
+ onLoad: () => setStatus({
212
+ url: uri,
213
+ state: 'ready'
214
+ }),
215
+ onError: () => {
216
+ if (!fallBack(photo)) setStatus({
217
+ url: uri,
218
+ state: 'failed'
219
+ });
220
+ },
221
+ onSwipe: several ? swipe : undefined
222
+ })
223
+ }, uri) : null]
224
+ }, `${page}:${photo.url}`);
56
225
  })
57
- }, image.url) : null, image && state === 'loading' ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ActivityIndicator, {
226
+ }) : null, image && source && state === 'loading' && !previewed.has(source) ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
58
227
  style: _reactNative.StyleSheet.absoluteFill,
59
- color: _theme.palette.white
60
- }) : null, image && state === 'failed' ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
228
+ pointerEvents: "none",
229
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ActivityIndicator, {
230
+ style: _reactNative.StyleSheet.absoluteFill,
231
+ color: _theme.palette.white
232
+ })
233
+ }) : null, image && source && state === 'failed' ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
61
234
  style: [_reactNative.StyleSheet.absoluteFill, styles.center, styles.failed],
235
+ pointerEvents: "box-none",
62
236
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
63
237
  style: styles.failedText,
238
+ pointerEvents: "none",
64
239
  children: labels.loadFailed
65
- }), (0, _safeUrl.isHttpUrl)(image.url) ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Pressable, {
66
- onPress: () => onOpenExternally(image.url),
240
+ }), (0, _safeUrl.isHttpUrl)(source) ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Pressable, {
241
+ onPress: () => onOpenExternally(source),
67
242
  accessibilityRole: "button",
68
243
  style: ({
69
244
  pressed
@@ -82,7 +257,12 @@ function ImageViewer({
82
257
  style: styles.title,
83
258
  numberOfLines: 1,
84
259
  children: image?.name ?? ''
85
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Pressable, {
260
+ }), several ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
261
+ style: styles.counter,
262
+ accessibilityElementsHidden: true,
263
+ importantForAccessibility: "no",
264
+ children: [index + 1, " / ", images.length]
265
+ }) : null, /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Pressable, {
86
266
  onPress: onClose,
87
267
  accessibilityRole: "button",
88
268
  accessibilityLabel: labels.close,
@@ -102,7 +282,27 @@ function ImageViewer({
102
282
  const styles = _reactNative.StyleSheet.create({
103
283
  backdrop: {
104
284
  flex: 1,
105
- backgroundColor: '#000000'
285
+ backgroundColor: '#000000',
286
+ overflow: 'hidden'
287
+ },
288
+ // One screen per photo, laid out left to right in every language (see `restingAt`).
289
+ strip: {
290
+ position: 'absolute',
291
+ top: 0,
292
+ bottom: 0,
293
+ left: 0,
294
+ flexDirection: 'row',
295
+ direction: 'ltr'
296
+ },
297
+ page: {
298
+ height: '100%'
299
+ },
300
+ layer: {
301
+ ..._reactNative.StyleSheet.absoluteFillObject
302
+ },
303
+ // Hidden, not removed: it shows again the moment its page stops being the middle one.
304
+ covered: {
305
+ opacity: 0
106
306
  },
107
307
  center: {
108
308
  flexGrow: 1,
@@ -128,6 +328,11 @@ const styles = _reactNative.StyleSheet.create({
128
328
  fontSize: _theme.fontSize.body,
129
329
  fontWeight: '600'
130
330
  },
331
+ counter: {
332
+ color: 'rgba(255,255,255,0.8)',
333
+ fontSize: _theme.fontSize.meta,
334
+ fontVariant: ['tabular-nums']
335
+ },
131
336
  closeButton: {
132
337
  width: 36,
133
338
  height: 36,
@@ -1 +1 @@
1
- {"version":3,"names":["_react","require","_reactNative","_useWidgetInsets","_theme","_safeUrl","_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","isHttpUrl","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":[]}
1
+ {"version":3,"names":["_react","require","_reactNative","_i18n","_useReduceMotion","_useWidgetInsets","_theme","_rtl","_safeUrl","_icons","_ZoomableImage","_jsxRuntime","SWIPE_DISTANCE","SWIPE_VELOCITY","EDGE_RESISTANCE","ImageViewer","gallery","labels","onClose","onOpenExternally","insets","useWidgetInsets","reduceMotion","useReduceMotion","position","setPosition","useState","of","index","images","image","fellBack","setFellBack","Set","sourceOf","photo","fallbackUrl","has","url","source","status","setStatus","state","fallBack","current","add","previewed","setPreviewed","markPreviewed","width","setWidth","offset","Animated","Value","rtl","isRTL","restingAt","length","swiping","useRef","useLayoutEffect","setValue","step","neighbour","side","next","show","swipe","move","dx","resisted","end","vx","far","Math","abs","sign","target","toValue","animation","spring","useNativeDriver","bounciness","speed","timing","duration","start","finished","several","handleAccessibilityAction","event","nativeEvent","actionName","jsx","Modal","visible","transparent","animationType","statusBarTranslucent","onRequestClose","children","jsxs","View","style","styles","backdrop","accessibilityViewIsModal","onLayout","layout","strip","transform","translateX","reverse","map","page","indexOf","centre","uri","near","accessible","accessibilityRole","accessibilityLabel","name","accessibilityValue","text","formatLabel","total","accessibilityActions","onAccessibilityAction","large","ActivityIndicator","layer","color","palette","white","Image","covered","resizeMode","resizeMethod","onLoad","onError","importantForAccessibility","accessibilityIgnoresInvertColors","ZoomableImage","onSwipe","undefined","StyleSheet","absoluteFill","pointerEvents","center","failed","Text","failedText","loadFailed","isHttpUrl","Pressable","onPress","pressed","externalButton","externalLabel","openExternally","header","paddingTop","top","spacing","sm","title","numberOfLines","counter","accessibilityElementsHidden","close","hitSlop","closeButton","CloseIcon","size","create","flex","backgroundColor","overflow","bottom","left","flexDirection","direction","height","absoluteFillObject","opacity","flexGrow","alignItems","justifyContent","right","gap","md","paddingHorizontal","lg","paddingBottom","minWidth","fontSize","body","fontWeight","meta","fontVariant","borderRadius","xxl","textAlign","paddingVertical","borderWidth","hairlineWidth","borderColor","Platform","OS"],"sourceRoot":"../../../../src","sources":["ui/components/ImageViewer.tsx"],"mappings":"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","ignoreList":[]}
@@ -9,6 +9,7 @@ exports.isBadRating = void 0;
9
9
  exports.reasonLabel = reasonLabel;
10
10
  var _react = require("react");
11
11
  var _reactNative = require("react-native");
12
+ var _useRetainedState = require("../hooks/use-retained-state.js");
12
13
  var _theme = require("../styles/theme.js");
13
14
  var _jsxRuntime = require("react/jsx-runtime");
14
15
  /**
@@ -84,12 +85,14 @@ function RatingCard({
84
85
  const [rating, setRating] = (0, _react.useState)(initialRating);
85
86
  const [reason, setReason] = (0, _react.useState)(initialReason);
86
87
  const [comment, setComment] = (0, _react.useState)(initialComment);
87
- const [draft, setDraft] = (0, _react.useState)('');
88
+ // Kept while the thread unmounts the card far off screen; the rating
89
+ // itself is saved on the message.
90
+ const [draft, setDraft] = (0, _useRetainedState.useRetainedState)(`${ratingId}:draft`, '');
88
91
  // The comment is optional: "Done" with nothing typed just closes the box —
89
92
  // the face (and reason) are already saved. A card that opens with a saved
90
93
  // rating starts closed too, so "Done" sticks when the thread is reopened;
91
94
  // tapping the chosen face opens the box again.
92
- const [finished, setFinished] = (0, _react.useState)(initialRating != null);
95
+ const [finished, setFinished] = (0, _useRetainedState.useRetainedState)(`${ratingId}:finished`, initialRating != null);
93
96
  const [pending, setPending] = (0, _react.useState)(false);
94
97
  const [closedReason, setClosedReason] = (0, _react.useState)(initialComment ? 'locked' : null);
95
98
  const [failed, setFailed] = (0, _react.useState)(false);