@kesha-antonov/react-native-chat 6.0.0 → 6.1.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 (179) hide show
  1. package/README.md +28 -5
  2. package/lib/Actions.d.ts.map +1 -1
  3. package/lib/Actions.js +33 -27
  4. package/lib/Actions.js.map +1 -1
  5. package/lib/Chat/Chat.d.ts.map +1 -1
  6. package/lib/Chat/Chat.js +253 -203
  7. package/lib/Chat/Chat.js.map +1 -1
  8. package/lib/Chat/ChatMessageList.d.ts.map +1 -1
  9. package/lib/Chat/ChatMessageList.js +4 -0
  10. package/lib/Chat/ChatMessageList.js.map +1 -1
  11. package/lib/Chat/index.d.ts +9 -1
  12. package/lib/Chat/index.d.ts.map +1 -1
  13. package/lib/Chat/index.js +14 -1
  14. package/lib/Chat/index.js.map +1 -1
  15. package/lib/Chat/types.d.ts +29 -0
  16. package/lib/Chat/types.d.ts.map +1 -1
  17. package/lib/Chat/types.js.map +1 -1
  18. package/lib/Chat/useMessageActions.d.ts +1 -0
  19. package/lib/Chat/useMessageActions.d.ts.map +1 -1
  20. package/lib/Chat/useMessageActions.js +97 -89
  21. package/lib/Chat/useMessageActions.js.map +1 -1
  22. package/lib/ChatHeader.d.ts +50 -0
  23. package/lib/ChatHeader.d.ts.map +1 -0
  24. package/lib/ChatHeader.js +356 -0
  25. package/lib/ChatHeader.js.map +1 -0
  26. package/lib/ChatList/ChatListCell.d.ts +1 -1
  27. package/lib/ChatList/ChatListCell.d.ts.map +1 -1
  28. package/lib/ChatList/ChatListCell.js +42 -11
  29. package/lib/ChatList/ChatListCell.js.map +1 -1
  30. package/lib/ChatList/index.js +332 -323
  31. package/lib/ChatList/index.js.map +1 -1
  32. package/lib/ChatList/types.d.ts +17 -1
  33. package/lib/ChatList/types.d.ts.map +1 -1
  34. package/lib/ChatList/types.js.map +1 -1
  35. package/lib/ChatList/utils.d.ts +4 -1
  36. package/lib/ChatList/utils.d.ts.map +1 -1
  37. package/lib/ChatList/utils.js +3 -2
  38. package/lib/ChatList/utils.js.map +1 -1
  39. package/lib/Composer.js +5 -1
  40. package/lib/Composer.js.map +1 -1
  41. package/lib/InputToolbar/fragments.d.ts +1 -1
  42. package/lib/InputToolbar/fragments.d.ts.map +1 -1
  43. package/lib/InputToolbar/fragments.js +9 -7
  44. package/lib/InputToolbar/fragments.js.map +1 -1
  45. package/lib/InputToolbar/index.d.ts.map +1 -1
  46. package/lib/InputToolbar/index.js +3 -2
  47. package/lib/InputToolbar/index.js.map +1 -1
  48. package/lib/InputToolbar/types.d.ts +6 -0
  49. package/lib/InputToolbar/types.d.ts.map +1 -1
  50. package/lib/InputToolbar/types.js.map +1 -1
  51. package/lib/InputToolbar/useActionsFragment.d.ts.map +1 -1
  52. package/lib/InputToolbar/useActionsFragment.js +83 -59
  53. package/lib/InputToolbar/useActionsFragment.js.map +1 -1
  54. package/lib/InputToolbar/useKeyboardInset.d.ts +1 -1
  55. package/lib/InputToolbar/useKeyboardInset.d.ts.map +1 -1
  56. package/lib/InputToolbar/useKeyboardInset.js +2 -2
  57. package/lib/InputToolbar/useKeyboardInset.js.map +1 -1
  58. package/lib/MessageText.d.ts.map +1 -1
  59. package/lib/MessageText.js +39 -33
  60. package/lib/MessageText.js.map +1 -1
  61. package/lib/MessagesContainer/index.d.ts.map +1 -1
  62. package/lib/MessagesContainer/index.js +113 -94
  63. package/lib/MessagesContainer/index.js.map +1 -1
  64. package/lib/MessagesContainer/types.d.ts +5 -2
  65. package/lib/MessagesContainer/types.d.ts.map +1 -1
  66. package/lib/MessagesContainer/types.js.map +1 -1
  67. package/lib/MessagesContainer/useChained.d.ts +6 -0
  68. package/lib/MessagesContainer/useChained.d.ts.map +1 -0
  69. package/lib/MessagesContainer/useChained.js +38 -0
  70. package/lib/MessagesContainer/useChained.js.map +1 -0
  71. package/lib/MessagesContainer/useListChrome.d.ts.map +1 -1
  72. package/lib/MessagesContainer/useListChrome.js +1 -1
  73. package/lib/MessagesContainer/useListChrome.js.map +1 -1
  74. package/lib/Models.d.ts +2 -1
  75. package/lib/Models.d.ts.map +1 -1
  76. package/lib/Models.js.map +1 -1
  77. package/lib/Send.d.ts.map +1 -1
  78. package/lib/Send.js +18 -13
  79. package/lib/Send.js.map +1 -1
  80. package/lib/Theme.d.ts +11 -0
  81. package/lib/Theme.d.ts.map +1 -1
  82. package/lib/Theme.js +17 -1
  83. package/lib/Theme.js.map +1 -1
  84. package/lib/attachments/AttachmentButton.js +17 -15
  85. package/lib/attachments/AttachmentButton.js.map +1 -1
  86. package/lib/attachments/AttachmentMenu/GalleryGrid.d.ts +3 -1
  87. package/lib/attachments/AttachmentMenu/GalleryGrid.d.ts.map +1 -1
  88. package/lib/attachments/AttachmentMenu/GalleryGrid.js +69 -68
  89. package/lib/attachments/AttachmentMenu/GalleryGrid.js.map +1 -1
  90. package/lib/attachments/AttachmentMenu/TabPanel.d.ts +3 -1
  91. package/lib/attachments/AttachmentMenu/TabPanel.d.ts.map +1 -1
  92. package/lib/attachments/AttachmentMenu/TabPanel.js +23 -21
  93. package/lib/attachments/AttachmentMenu/TabPanel.js.map +1 -1
  94. package/lib/attachments/AttachmentMenu/index.d.ts +6 -2
  95. package/lib/attachments/AttachmentMenu/index.d.ts.map +1 -1
  96. package/lib/attachments/AttachmentMenu/index.js +259 -247
  97. package/lib/attachments/AttachmentMenu/index.js.map +1 -1
  98. package/lib/attachments/buildMessages.d.ts +4 -4
  99. package/lib/attachments/buildMessages.d.ts.map +1 -1
  100. package/lib/attachments/buildMessages.js +9 -8
  101. package/lib/attachments/buildMessages.js.map +1 -1
  102. package/lib/attachments/types.d.ts +19 -0
  103. package/lib/attachments/types.d.ts.map +1 -1
  104. package/lib/attachments/types.js.map +1 -1
  105. package/lib/components/TouchableOpacity.d.ts +5 -0
  106. package/lib/components/TouchableOpacity.d.ts.map +1 -1
  107. package/lib/components/TouchableOpacity.js +59 -54
  108. package/lib/components/TouchableOpacity.js.map +1 -1
  109. package/lib/components/defaultMessageActions.d.ts +3 -1
  110. package/lib/components/defaultMessageActions.d.ts.map +1 -1
  111. package/lib/components/defaultMessageActions.js +9 -1
  112. package/lib/components/defaultMessageActions.js.map +1 -1
  113. package/lib/components/textHighlight.d.ts +14 -0
  114. package/lib/components/textHighlight.d.ts.map +1 -0
  115. package/lib/components/textHighlight.js +39 -0
  116. package/lib/components/textHighlight.js.map +1 -0
  117. package/lib/hooks/useKeyboardVerticalOffset.d.ts +6 -0
  118. package/lib/hooks/useKeyboardVerticalOffset.d.ts.map +1 -1
  119. package/lib/hooks/useKeyboardVerticalOffset.js +35 -13
  120. package/lib/hooks/useKeyboardVerticalOffset.js.map +1 -1
  121. package/lib/i18n.d.ts +2 -0
  122. package/lib/i18n.d.ts.map +1 -1
  123. package/lib/i18n.js +1 -0
  124. package/lib/i18n.js.map +1 -1
  125. package/lib/index.d.ts +3 -1
  126. package/lib/index.d.ts.map +1 -1
  127. package/lib/index.js +1 -0
  128. package/lib/index.js.map +1 -1
  129. package/lib/linkParser.d.ts +4 -1
  130. package/lib/linkParser.d.ts.map +1 -1
  131. package/lib/linkParser.js +115 -78
  132. package/lib/linkParser.js.map +1 -1
  133. package/lib/locales/ar.d.ts.map +1 -1
  134. package/lib/locales/ar.js +1 -0
  135. package/lib/locales/ar.js.map +1 -1
  136. package/lib/locales/de.d.ts.map +1 -1
  137. package/lib/locales/de.js +1 -0
  138. package/lib/locales/de.js.map +1 -1
  139. package/lib/locales/es.d.ts.map +1 -1
  140. package/lib/locales/es.js +1 -0
  141. package/lib/locales/es.js.map +1 -1
  142. package/lib/locales/fr.d.ts.map +1 -1
  143. package/lib/locales/fr.js +1 -0
  144. package/lib/locales/fr.js.map +1 -1
  145. package/lib/locales/hi.d.ts.map +1 -1
  146. package/lib/locales/hi.js +1 -0
  147. package/lib/locales/hi.js.map +1 -1
  148. package/lib/locales/id.d.ts.map +1 -1
  149. package/lib/locales/id.js +1 -0
  150. package/lib/locales/id.js.map +1 -1
  151. package/lib/locales/it.d.ts.map +1 -1
  152. package/lib/locales/it.js +1 -0
  153. package/lib/locales/it.js.map +1 -1
  154. package/lib/locales/ja.d.ts.map +1 -1
  155. package/lib/locales/ja.js +1 -0
  156. package/lib/locales/ja.js.map +1 -1
  157. package/lib/locales/ko.d.ts.map +1 -1
  158. package/lib/locales/ko.js +1 -0
  159. package/lib/locales/ko.js.map +1 -1
  160. package/lib/locales/nl.d.ts.map +1 -1
  161. package/lib/locales/nl.js +1 -0
  162. package/lib/locales/nl.js.map +1 -1
  163. package/lib/locales/pl.d.ts.map +1 -1
  164. package/lib/locales/pl.js +1 -0
  165. package/lib/locales/pl.js.map +1 -1
  166. package/lib/locales/pt.d.ts.map +1 -1
  167. package/lib/locales/pt.js +1 -0
  168. package/lib/locales/pt.js.map +1 -1
  169. package/lib/locales/ru.d.ts.map +1 -1
  170. package/lib/locales/ru.js +1 -0
  171. package/lib/locales/ru.js.map +1 -1
  172. package/lib/locales/tr.d.ts.map +1 -1
  173. package/lib/locales/tr.js +1 -0
  174. package/lib/locales/tr.js.map +1 -1
  175. package/lib/locales/zh.d.ts.map +1 -1
  176. package/lib/locales/zh.js +1 -0
  177. package/lib/locales/zh.js.map +1 -1
  178. package/llms.txt +1 -1
  179. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"TouchableOpacity.js","names":["React","useCallback","useEffect","useMemo","useRef","StyleSheet","BaseButton","Animated","useAnimatedStyle","useSharedValue","withTiming","TouchableOpacity","t0","$","_c","children","onPress","rest","style","t1","activeOpacity","undefined","opacity","isAnimationInFinished","pressOutTimeout","t2","t3","Symbol","for","clearTimeout","current","t4","set","duration","handlePressIn","t5","setTimeout","get","handlePressOut","t6","isActive","handleActiveStateChange","animatedStyle","t7","handlePress","t8","styles","content","composedStyle","t9","t10","create","pointerEvents"],"sources":["../../src/components/TouchableOpacity.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef } from 'react'\nimport { StyleSheet } from 'react-native'\nimport { BaseButton } from 'react-native-gesture-handler'\nimport Animated, {\n useAnimatedStyle,\n useSharedValue,\n withTiming,\n} from 'react-native-reanimated'\n\nexport type TouchableOpacityProps = Omit<React.ComponentProps<typeof BaseButton>, 'onPress'> & {\n activeOpacity?: number\n onPress?: () => void\n} & React.ComponentProps<typeof Animated.View>\n\n// Built on gesture-handler's `BaseButton`, not the `Touchable` 3.0 recommends in\n// its place. `Touchable` handles the press natively, outside the gesture system,\n// so a bubble's long-press could no longer win over a photo or play button\n// inside it: holding a photo neither opened the menu nor stopped the release\n// from opening the viewer. `BaseButton` is still a gesture, so it loses to the\n// long-press the way it always did.\nexport const TouchableOpacity: React.FC<TouchableOpacityProps> = ({\n children,\n style,\n activeOpacity = 0.2,\n onPress,\n ...rest\n}) => {\n const opacity = useSharedValue(1)\n const isAnimationInFinished = useSharedValue(false)\n // The press-out fade is deferred so a quick tap still shows the pressed state for a\n // full beat. That timer has to be cancellable: unmounting between press-out and the\n // fade (a button that dismisses its own sheet) would otherwise leave it pending.\n const pressOutTimeout = useRef<ReturnType<typeof setTimeout> | undefined>(undefined)\n\n useEffect(() => () => {\n clearTimeout(pressOutTimeout.current)\n }, [])\n\n const handlePressIn = useCallback(() => {\n opacity.set(withTiming(activeOpacity, { duration: 150 }, () => {\n isAnimationInFinished.set(true)\n }))\n }, [activeOpacity, opacity, isAnimationInFinished])\n\n const handlePressOut = useCallback(() => {\n clearTimeout(pressOutTimeout.current)\n pressOutTimeout.current = setTimeout(() => {\n opacity.set(withTiming(1, { duration: 150 }))\n isAnimationInFinished.set(false)\n }, isAnimationInFinished.get() ? 0 : 150)\n }, [opacity, isAnimationInFinished])\n\n const handleActiveStateChange = useCallback((isActive: boolean) => {\n if (isActive)\n handlePressIn()\n else\n handlePressOut()\n }, [handlePressIn, handlePressOut])\n\n const animatedStyle = useAnimatedStyle(() => ({\n opacity: opacity.get(),\n }))\n\n const handlePress = useCallback(() => {\n onPress?.()\n }, [onPress])\n\n // Every tappable in the library goes through this component - each message bubble, avatar,\n // action and attachment - so composing the style list inline handed Animated.View a fresh array\n // on each of those renders.\n const composedStyle = useMemo(() => [style, animatedStyle, styles.content], [style, animatedStyle])\n\n return (\n <BaseButton\n {...rest}\n onPress={handlePress}\n onActiveStateChange={handleActiveStateChange}\n >\n <Animated.View\n // The content view must not capture touches, otherwise it swallows the\n // BaseButton's press on Android (see #2714). pointerEvents in style is\n // the non-deprecated form on RN's New Architecture.\n style={composedStyle}\n >\n {children}\n </Animated.View>\n </BaseButton>\n )\n}\n\nconst styles = StyleSheet.create({\n content: {\n pointerEvents: 'none',\n },\n})\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"TouchableOpacity.js","names":["React","useCallback","useEffect","useMemo","useRef","StyleSheet","BaseButton","Animated","useAnimatedStyle","useSharedValue","withTiming","TouchableOpacity","t0","$","_c","buttonStyle","children","onPress","rest","style","t1","activeOpacity","undefined","opacity","isAnimationInFinished","pressOutTimeout","t2","t3","Symbol","for","clearTimeout","current","t4","set","duration","handlePressIn","t5","setTimeout","get","handlePressOut","t6","isActive","handleActiveStateChange","animatedStyle","t7","handlePress","t8","styles","content","composedStyle","t9","t10","create","pointerEvents"],"sources":["../../src/components/TouchableOpacity.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef } from 'react'\nimport { StyleSheet } from 'react-native'\nimport { BaseButton } from 'react-native-gesture-handler'\nimport Animated, {\n useAnimatedStyle,\n useSharedValue,\n withTiming,\n} from 'react-native-reanimated'\n\nexport type TouchableOpacityProps = Omit<React.ComponentProps<typeof BaseButton>, 'onPress'> & {\n activeOpacity?: number\n onPress?: () => void\n /**\n * The button's own style, around the content: its shape is the shape of Android's press ripple,\n * e.g. a `borderRadius` for a round one. `style` goes on the content.\n */\n buttonStyle?: React.ComponentProps<typeof BaseButton>['style']\n} & React.ComponentProps<typeof Animated.View>\n\n// Built on gesture-handler's `BaseButton`, not the `Touchable` 3.0 recommends in\n// its place. `Touchable` handles the press natively, outside the gesture system,\n// so a bubble's long-press could no longer win over a photo or play button\n// inside it: holding a photo neither opened the menu nor stopped the release\n// from opening the viewer. `BaseButton` is still a gesture, so it loses to the\n// long-press the way it always did.\nexport const TouchableOpacity: React.FC<TouchableOpacityProps> = ({\n children,\n style,\n buttonStyle,\n activeOpacity = 0.2,\n onPress,\n ...rest\n}) => {\n const opacity = useSharedValue(1)\n const isAnimationInFinished = useSharedValue(false)\n // The press-out fade is deferred so a quick tap still shows the pressed state for a\n // full beat. That timer has to be cancellable: unmounting between press-out and the\n // fade (a button that dismisses its own sheet) would otherwise leave it pending.\n const pressOutTimeout = useRef<ReturnType<typeof setTimeout> | undefined>(undefined)\n\n useEffect(() => () => {\n clearTimeout(pressOutTimeout.current)\n }, [])\n\n const handlePressIn = useCallback(() => {\n opacity.set(withTiming(activeOpacity, { duration: 150 }, () => {\n isAnimationInFinished.set(true)\n }))\n }, [activeOpacity, opacity, isAnimationInFinished])\n\n const handlePressOut = useCallback(() => {\n clearTimeout(pressOutTimeout.current)\n pressOutTimeout.current = setTimeout(() => {\n opacity.set(withTiming(1, { duration: 150 }))\n isAnimationInFinished.set(false)\n }, isAnimationInFinished.get() ? 0 : 150)\n }, [opacity, isAnimationInFinished])\n\n const handleActiveStateChange = useCallback((isActive: boolean) => {\n if (isActive)\n handlePressIn()\n else\n handlePressOut()\n }, [handlePressIn, handlePressOut])\n\n const animatedStyle = useAnimatedStyle(() => ({\n opacity: opacity.get(),\n }))\n\n const handlePress = useCallback(() => {\n onPress?.()\n }, [onPress])\n\n // Every tappable in the library goes through this component - each message bubble, avatar,\n // action and attachment - so composing the style list inline handed Animated.View a fresh array\n // on each of those renders.\n const composedStyle = useMemo(() => [style, animatedStyle, styles.content], [style, animatedStyle])\n\n return (\n <BaseButton\n {...rest}\n style={buttonStyle}\n onPress={handlePress}\n onActiveStateChange={handleActiveStateChange}\n >\n <Animated.View\n // The content view must not capture touches, otherwise it swallows the\n // BaseButton's press on Android (see #2714). pointerEvents in style is\n // the non-deprecated form on RN's New Architecture.\n style={composedStyle}\n >\n {children}\n </Animated.View>\n </BaseButton>\n )\n}\n\nconst styles = StyleSheet.create({\n content: {\n pointerEvents: 'none',\n },\n})\n"],"mappings":"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","ignoreList":[]}
@@ -20,11 +20,13 @@ export interface DefaultMessageActionsOptions<TMessage extends IMessage> {
20
20
  onPin?: (message: TMessage) => void;
21
21
  onSelect?: (message: TMessage) => void;
22
22
  onDelete?: (message: TMessage) => void;
23
+ /** Sends a failed message again; offered first for your own failed messages. */
24
+ onRetry?: (message: TMessage) => void;
23
25
  }
24
26
  /**
25
27
  * The actions that can work for this message: Reply when replying is on, Copy for text when a
26
28
  * clipboard resolves, Edit for your own text when the app handles edits, and Forward, Pin and
27
29
  * Delete when the app handles them.
28
30
  */
29
- export declare function buildDefaultMessageActions<TMessage extends IMessage>({ message, user, labels, keys, clipboard, onReply, onEdit, onForward, onPin, onSelect, onDelete, }: DefaultMessageActionsOptions<TMessage>): MessageMenuItem[];
31
+ export declare function buildDefaultMessageActions<TMessage extends IMessage>({ message, user, labels, keys, clipboard, onReply, onEdit, onForward, onPin, onSelect, onDelete, onRetry, }: DefaultMessageActionsOptions<TMessage>): MessageMenuItem[];
30
32
  //# sourceMappingURL=defaultMessageActions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"defaultMessageActions.d.ts","sourceRoot":"","sources":["../../src/components/defaultMessageActions.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAGpC,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAI9C;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,EAAE,gBAAgB,EAAoE,CAAA;AA4B9H,MAAM,WAAW,4BAA4B,CAAC,QAAQ,SAAS,QAAQ;IACrE,OAAO,EAAE,QAAQ,CAAA;IACjB,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,MAAM,EAAE,UAAU,CAAA;IAClB,6CAA6C;IAC7C,IAAI,EAAE,gBAAgB,EAAE,CAAA;IACxB,SAAS,EAAE,gBAAgB,GAAG,IAAI,CAAA;IAClC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAA;IACrC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAA;IACpC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAA;IACvC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAA;IACnC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAA;IACtC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAA;CACvC;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,SAAS,QAAQ,EAAG,EACrE,OAAO,EACP,IAAI,EACJ,MAAM,EACN,IAAI,EACJ,SAAS,EACT,OAAO,EACP,MAAM,EACN,SAAS,EACT,KAAK,EACL,QAAQ,EACR,QAAQ,GACT,EAAE,4BAA4B,CAAC,QAAQ,CAAC,GAAG,eAAe,EAAE,CAyD5D"}
1
+ {"version":3,"file":"defaultMessageActions.d.ts","sourceRoot":"","sources":["../../src/components/defaultMessageActions.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAGpC,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAI9C;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,EAAE,gBAAgB,EAAoE,CAAA;AA6B9H,MAAM,WAAW,4BAA4B,CAAC,QAAQ,SAAS,QAAQ;IACrE,OAAO,EAAE,QAAQ,CAAA;IACjB,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,MAAM,EAAE,UAAU,CAAA;IAClB,6CAA6C;IAC7C,IAAI,EAAE,gBAAgB,EAAE,CAAA;IACxB,SAAS,EAAE,gBAAgB,GAAG,IAAI,CAAA;IAClC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAA;IACrC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAA;IACpC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAA;IACvC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAA;IACnC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAA;IACtC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAA;IACtC,gFAAgF;IAChF,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAA;CACtC;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,SAAS,QAAQ,EAAG,EACrE,OAAO,EACP,IAAI,EACJ,MAAM,EACN,IAAI,EACJ,SAAS,EACT,OAAO,EACP,MAAM,EACN,SAAS,EACT,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,OAAO,GACR,EAAE,4BAA4B,CAAC,QAAQ,CAAC,GAAG,eAAe,EAAE,CA2D5D"}
@@ -19,6 +19,7 @@ const iconRenderer = (name, Fallback) => {
19
19
 
20
20
  // Built once: a fresh renderer per menu would be a fresh prop per row.
21
21
  const ICONS = {
22
+ retry: iconRenderer('send'),
22
23
  reply: iconRenderer('reply', ReplyArrowIcon),
23
24
  copy: iconRenderer('copy'),
24
25
  forward: iconRenderer('forward'),
@@ -44,12 +45,19 @@ export function buildDefaultMessageActions({
44
45
  onForward,
45
46
  onPin,
46
47
  onSelect,
47
- onDelete
48
+ onDelete,
49
+ onRetry
48
50
  }) {
49
51
  if (message.system) return [];
50
52
  const isOwn = user?._id != null && message.user?._id === user._id;
51
53
  const text = message.text;
52
54
  const items = [];
55
+ if (onRetry && isOwn && message.isFailed) items.push({
56
+ key: 'retry',
57
+ label: labels.actionRetry,
58
+ icon: ICONS.retry,
59
+ onPress: () => onRetry(message)
60
+ });
53
61
  for (const key of keys) switch (key) {
54
62
  case 'reply':
55
63
  if (onReply) items.push({
@@ -1 +1 @@
1
- {"version":3,"file":"defaultMessageActions.js","names":["React","devHint","Icon","PencilIcon","ReplyArrowIcon","TrashIcon","DEFAULT_MESSAGE_ACTION_KEYS","iconRenderer","name","Fallback","render","color","size","ICONS","reply","copy","forward","pin","unpin","edit","select","delete","buildDefaultMessageActions","message","user","labels","keys","clipboard","onReply","onEdit","onForward","onPin","onSelect","onDelete","system","isOwn","_id","text","items","key","push","label","actionReply","icon","onPress","actionCopy","setString","actionEdit","actionForward","isPinned","actionUnpin","actionPin","actionSelect","actionDelete"],"sources":["../../src/components/defaultMessageActions.tsx"],"sourcesContent":["import React from 'react'\n\nimport { ChatLabels } from '../i18n'\nimport { IconName, IconRenderer } from '../Icons'\nimport { devHint } from '../logging'\nimport { IMessage, MessageActionKey, MessageMenuItem, User } from '../Models'\nimport { ClipboardAdapter } from '../optional'\nimport { Icon } from './Icon'\nimport { PencilIcon, ReplyArrowIcon, TrashIcon } from './MediaControls'\n\n/**\n * The order of the actions the library can offer by itself, as a messenger lists them for a\n * regular message: Reply, Copy, Forward, Pin / Unpin, Edit, Delete - with Select before\n * Delete.\n */\nexport const DEFAULT_MESSAGE_ACTION_KEYS: MessageActionKey[] = ['reply', 'copy', 'forward', 'pin', 'edit', 'select', 'delete']\n\ntype DrawnIcon = (props: { color?: string, size?: number }) => React.ReactNode\n\nconst iconRenderer = (name: IconName, Fallback?: DrawnIcon): IconRenderer => {\n const render: IconRenderer = ({ color, size }) => (\n <Icon\n name={name}\n color={color}\n size={size}\n fallback={Fallback ? <Fallback color={color} size={size} /> : null}\n />\n )\n return render\n}\n\n// Built once: a fresh renderer per menu would be a fresh prop per row.\nconst ICONS: Record<MessageActionKey | 'unpin', IconRenderer> = {\n reply: iconRenderer('reply', ReplyArrowIcon),\n copy: iconRenderer('copy'),\n forward: iconRenderer('forward'),\n pin: iconRenderer('pushpin'),\n unpin: iconRenderer('pinOff'),\n edit: iconRenderer('pencil', PencilIcon),\n select: iconRenderer('checkCircle'),\n delete: iconRenderer('trash', TrashIcon),\n}\n\nexport interface DefaultMessageActionsOptions<TMessage extends IMessage> {\n message: TMessage\n user?: User\n labels: ChatLabels\n /** Which actions to build, in this order. */\n keys: MessageActionKey[]\n clipboard: ClipboardAdapter | null\n onReply?: (message: TMessage) => void\n onEdit?: (message: TMessage) => void\n onForward?: (message: TMessage) => void\n onPin?: (message: TMessage) => void\n onSelect?: (message: TMessage) => void\n onDelete?: (message: TMessage) => void\n}\n\n/**\n * The actions that can work for this message: Reply when replying is on, Copy for text when a\n * clipboard resolves, Edit for your own text when the app handles edits, and Forward, Pin and\n * Delete when the app handles them.\n */\nexport function buildDefaultMessageActions<TMessage extends IMessage> ({\n message,\n user,\n labels,\n keys,\n clipboard,\n onReply,\n onEdit,\n onForward,\n onPin,\n onSelect,\n onDelete,\n}: DefaultMessageActionsOptions<TMessage>): MessageMenuItem[] {\n if (message.system)\n return []\n\n const isOwn = user?._id != null && message.user?._id === user._id\n const text = message.text\n\n const items: MessageMenuItem[] = []\n for (const key of keys)\n switch (key) {\n case 'reply':\n if (onReply)\n items.push({ key, label: labels.actionReply, icon: ICONS.reply, onPress: () => onReply(message) })\n break\n case 'copy':\n if (!text)\n break\n if (!clipboard) {\n devHint(\n 'copy-no-clipboard',\n 'Chat: the \"Copy\" message action is hidden - install `expo-clipboard` or `@react-native-clipboard/clipboard` to show it'\n )\n break\n }\n items.push({ key, label: labels.actionCopy, icon: ICONS.copy, onPress: () => clipboard.setString(text) })\n break\n case 'edit':\n if (onEdit && isOwn && !!text)\n items.push({ key, label: labels.actionEdit, icon: ICONS.edit, onPress: () => onEdit(message) })\n break\n case 'forward':\n if (onForward)\n items.push({ key, label: labels.actionForward, icon: ICONS.forward, onPress: () => onForward(message) })\n break\n case 'pin':\n if (onPin)\n items.push(message.isPinned\n ? { key, label: labels.actionUnpin, icon: ICONS.unpin, onPress: () => onPin(message) }\n : { key, label: labels.actionPin, icon: ICONS.pin, onPress: () => onPin(message) })\n break\n case 'select':\n if (onSelect)\n items.push({ key, label: labels.actionSelect, icon: ICONS.select, onPress: () => onSelect(message) })\n break\n case 'delete':\n if (onDelete)\n items.push({\n key,\n label: labels.actionDelete,\n icon: ICONS.delete,\n // Not red: the message menu draws Delete like any other row.\n onPress: () => onDelete(message),\n })\n break\n }\n\n return items\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"defaultMessageActions.js","names":["React","devHint","Icon","PencilIcon","ReplyArrowIcon","TrashIcon","DEFAULT_MESSAGE_ACTION_KEYS","iconRenderer","name","Fallback","render","color","size","ICONS","retry","reply","copy","forward","pin","unpin","edit","select","delete","buildDefaultMessageActions","message","user","labels","keys","clipboard","onReply","onEdit","onForward","onPin","onSelect","onDelete","onRetry","system","isOwn","_id","text","items","isFailed","push","key","label","actionRetry","icon","onPress","actionReply","actionCopy","setString","actionEdit","actionForward","isPinned","actionUnpin","actionPin","actionSelect","actionDelete"],"sources":["../../src/components/defaultMessageActions.tsx"],"sourcesContent":["import React from 'react'\n\nimport { ChatLabels } from '../i18n'\nimport { IconName, IconRenderer } from '../Icons'\nimport { devHint } from '../logging'\nimport { IMessage, MessageActionKey, MessageMenuItem, User } from '../Models'\nimport { ClipboardAdapter } from '../optional'\nimport { Icon } from './Icon'\nimport { PencilIcon, ReplyArrowIcon, TrashIcon } from './MediaControls'\n\n/**\n * The order of the actions the library can offer by itself, as a messenger lists them for a\n * regular message: Reply, Copy, Forward, Pin / Unpin, Edit, Delete - with Select before\n * Delete.\n */\nexport const DEFAULT_MESSAGE_ACTION_KEYS: MessageActionKey[] = ['reply', 'copy', 'forward', 'pin', 'edit', 'select', 'delete']\n\ntype DrawnIcon = (props: { color?: string, size?: number }) => React.ReactNode\n\nconst iconRenderer = (name: IconName, Fallback?: DrawnIcon): IconRenderer => {\n const render: IconRenderer = ({ color, size }) => (\n <Icon\n name={name}\n color={color}\n size={size}\n fallback={Fallback ? <Fallback color={color} size={size} /> : null}\n />\n )\n return render\n}\n\n// Built once: a fresh renderer per menu would be a fresh prop per row.\nconst ICONS: Record<MessageActionKey | 'unpin', IconRenderer> = {\n retry: iconRenderer('send'),\n reply: iconRenderer('reply', ReplyArrowIcon),\n copy: iconRenderer('copy'),\n forward: iconRenderer('forward'),\n pin: iconRenderer('pushpin'),\n unpin: iconRenderer('pinOff'),\n edit: iconRenderer('pencil', PencilIcon),\n select: iconRenderer('checkCircle'),\n delete: iconRenderer('trash', TrashIcon),\n}\n\nexport interface DefaultMessageActionsOptions<TMessage extends IMessage> {\n message: TMessage\n user?: User\n labels: ChatLabels\n /** Which actions to build, in this order. */\n keys: MessageActionKey[]\n clipboard: ClipboardAdapter | null\n onReply?: (message: TMessage) => void\n onEdit?: (message: TMessage) => void\n onForward?: (message: TMessage) => void\n onPin?: (message: TMessage) => void\n onSelect?: (message: TMessage) => void\n onDelete?: (message: TMessage) => void\n /** Sends a failed message again; offered first for your own failed messages. */\n onRetry?: (message: TMessage) => void\n}\n\n/**\n * The actions that can work for this message: Reply when replying is on, Copy for text when a\n * clipboard resolves, Edit for your own text when the app handles edits, and Forward, Pin and\n * Delete when the app handles them.\n */\nexport function buildDefaultMessageActions<TMessage extends IMessage> ({\n message,\n user,\n labels,\n keys,\n clipboard,\n onReply,\n onEdit,\n onForward,\n onPin,\n onSelect,\n onDelete,\n onRetry,\n}: DefaultMessageActionsOptions<TMessage>): MessageMenuItem[] {\n if (message.system)\n return []\n\n const isOwn = user?._id != null && message.user?._id === user._id\n const text = message.text\n\n const items: MessageMenuItem[] = []\n if (onRetry && isOwn && message.isFailed)\n items.push({ key: 'retry', label: labels.actionRetry, icon: ICONS.retry, onPress: () => onRetry(message) })\n for (const key of keys)\n switch (key) {\n case 'reply':\n if (onReply)\n items.push({ key, label: labels.actionReply, icon: ICONS.reply, onPress: () => onReply(message) })\n break\n case 'copy':\n if (!text)\n break\n if (!clipboard) {\n devHint(\n 'copy-no-clipboard',\n 'Chat: the \"Copy\" message action is hidden - install `expo-clipboard` or `@react-native-clipboard/clipboard` to show it'\n )\n break\n }\n items.push({ key, label: labels.actionCopy, icon: ICONS.copy, onPress: () => clipboard.setString(text) })\n break\n case 'edit':\n if (onEdit && isOwn && !!text)\n items.push({ key, label: labels.actionEdit, icon: ICONS.edit, onPress: () => onEdit(message) })\n break\n case 'forward':\n if (onForward)\n items.push({ key, label: labels.actionForward, icon: ICONS.forward, onPress: () => onForward(message) })\n break\n case 'pin':\n if (onPin)\n items.push(message.isPinned\n ? { key, label: labels.actionUnpin, icon: ICONS.unpin, onPress: () => onPin(message) }\n : { key, label: labels.actionPin, icon: ICONS.pin, onPress: () => onPin(message) })\n break\n case 'select':\n if (onSelect)\n items.push({ key, label: labels.actionSelect, icon: ICONS.select, onPress: () => onSelect(message) })\n break\n case 'delete':\n if (onDelete)\n items.push({\n key,\n label: labels.actionDelete,\n icon: ICONS.delete,\n // Not red: the message menu draws Delete like any other row.\n onPress: () => onDelete(message),\n })\n break\n }\n\n return items\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,14 @@
1
+ import { StyleProp, TextStyle } from 'react-native';
2
+ /** The words to mark in message text (`Chat`'s `highlightText`), e.g. a search query. */
3
+ export interface TextHighlight {
4
+ text: string;
5
+ style?: StyleProp<TextStyle>;
6
+ }
7
+ export declare const TextHighlightContext: import("react").Context<TextHighlight | null>;
8
+ export declare const useTextHighlight: () => TextHighlight | null;
9
+ /** The parts of `text`, each marked whether it matches `query` (case-insensitive). */
10
+ export declare function splitHighlights(text: string, query: string): {
11
+ text: string;
12
+ isMatch: boolean;
13
+ }[];
14
+ //# sourceMappingURL=textHighlight.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textHighlight.d.ts","sourceRoot":"","sources":["../../src/components/textHighlight.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAEnD,yFAAyF;AACzF,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAA;CAC7B;AAED,eAAO,MAAM,oBAAoB,+CAA4C,CAAA;AAE7E,eAAO,MAAM,gBAAgB,4BAAyC,CAAA;AAItE,sFAAsF;AACtF,wBAAgB,eAAe,CAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,EAAE,CAkBlG"}
@@ -0,0 +1,39 @@
1
+ import { createContext, useContext } from 'react';
2
+
3
+ /** The words to mark in message text (`Chat`'s `highlightText`), e.g. a search query. */
4
+
5
+ export const TextHighlightContext = createContext(null);
6
+ export const useTextHighlight = () => {
7
+ return useContext(TextHighlightContext);
8
+ };
9
+ const escapeRegExp = value => value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
10
+
11
+ /** The parts of `text`, each marked whether it matches `query` (case-insensitive). */
12
+ export function splitHighlights(text, query) {
13
+ const needle = query.trim();
14
+ if (!needle || !text) return [{
15
+ text,
16
+ isMatch: false
17
+ }];
18
+ const pattern = new RegExp(escapeRegExp(needle), 'gi');
19
+ const parts = [];
20
+ let lastIndex = 0;
21
+ for (const match of text.matchAll(pattern)) {
22
+ const index = match.index ?? 0;
23
+ if (index > lastIndex) parts.push({
24
+ text: text.slice(lastIndex, index),
25
+ isMatch: false
26
+ });
27
+ parts.push({
28
+ text: match[0],
29
+ isMatch: true
30
+ });
31
+ lastIndex = index + match[0].length;
32
+ }
33
+ if (lastIndex < text.length) parts.push({
34
+ text: text.slice(lastIndex),
35
+ isMatch: false
36
+ });
37
+ return parts;
38
+ }
39
+ //# sourceMappingURL=textHighlight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textHighlight.js","names":["createContext","useContext","TextHighlightContext","useTextHighlight","escapeRegExp","value","replace","splitHighlights","text","query","needle","trim","isMatch","pattern","RegExp","parts","lastIndex","match","matchAll","index","push","slice","length"],"sources":["../../src/components/textHighlight.ts"],"sourcesContent":["import { createContext, useContext } from 'react'\nimport { StyleProp, TextStyle } from 'react-native'\n\n/** The words to mark in message text (`Chat`'s `highlightText`), e.g. a search query. */\nexport interface TextHighlight {\n text: string\n style?: StyleProp<TextStyle>\n}\n\nexport const TextHighlightContext = createContext<TextHighlight | null>(null)\n\nexport const useTextHighlight = () => useContext(TextHighlightContext)\n\nconst escapeRegExp = (value: string) => value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n\n/** The parts of `text`, each marked whether it matches `query` (case-insensitive). */\nexport function splitHighlights (text: string, query: string): { text: string, isMatch: boolean }[] {\n const needle = query.trim()\n if (!needle || !text)\n return [{ text, isMatch: false }]\n\n const pattern = new RegExp(escapeRegExp(needle), 'gi')\n const parts: { text: string, isMatch: boolean }[] = []\n let lastIndex = 0\n for (const match of text.matchAll(pattern)) {\n const index = match.index ?? 0\n if (index > lastIndex)\n parts.push({ text: text.slice(lastIndex, index), isMatch: false })\n parts.push({ text: match[0], isMatch: true })\n lastIndex = index + match[0].length\n }\n if (lastIndex < text.length)\n parts.push({ text: text.slice(lastIndex), isMatch: false })\n return parts\n}\n"],"mappings":"AAAA,SAASA,aAAa,EAAEC,UAAU,QAAQ,OAAO;;AAGjD;;AAMA,OAAO,MAAMC,oBAAoB,GAAGF,aAAa,CAAuB,IAAI,CAAC;AAE7E,OAAO,MAAMG,gBAAgB,GAAGA,CAAA;EAAA,OAAMF,UAAU,CAACC,oBAAoB,CAAC;AAAA;AAEtE,MAAME,YAAY,GAAIC,KAAa,IAAKA,KAAK,CAACC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC;;AAEpF;AACA,OAAO,SAASC,eAAeA,CAAEC,IAAY,EAAEC,KAAa,EAAwC;EAClG,MAAMC,MAAM,GAAGD,KAAK,CAACE,IAAI,CAAC,CAAC;EAC3B,IAAI,CAACD,MAAM,IAAI,CAACF,IAAI,EAClB,OAAO,CAAC;IAAEA,IAAI;IAAEI,OAAO,EAAE;EAAM,CAAC,CAAC;EAEnC,MAAMC,OAAO,GAAG,IAAIC,MAAM,CAACV,YAAY,CAACM,MAAM,CAAC,EAAE,IAAI,CAAC;EACtD,MAAMK,KAA2C,GAAG,EAAE;EACtD,IAAIC,SAAS,GAAG,CAAC;EACjB,KAAK,MAAMC,KAAK,IAAIT,IAAI,CAACU,QAAQ,CAACL,OAAO,CAAC,EAAE;IAC1C,MAAMM,KAAK,GAAGF,KAAK,CAACE,KAAK,IAAI,CAAC;IAC9B,IAAIA,KAAK,GAAGH,SAAS,EACnBD,KAAK,CAACK,IAAI,CAAC;MAAEZ,IAAI,EAAEA,IAAI,CAACa,KAAK,CAACL,SAAS,EAAEG,KAAK,CAAC;MAAEP,OAAO,EAAE;IAAM,CAAC,CAAC;IACpEG,KAAK,CAACK,IAAI,CAAC;MAAEZ,IAAI,EAAES,KAAK,CAAC,CAAC,CAAC;MAAEL,OAAO,EAAE;IAAK,CAAC,CAAC;IAC7CI,SAAS,GAAGG,KAAK,GAAGF,KAAK,CAAC,CAAC,CAAC,CAACK,MAAM;EACrC;EACA,IAAIN,SAAS,GAAGR,IAAI,CAACc,MAAM,EACzBP,KAAK,CAACK,IAAI,CAAC;IAAEZ,IAAI,EAAEA,IAAI,CAACa,KAAK,CAACL,SAAS,CAAC;IAAEJ,OAAO,EAAE;EAAM,CAAC,CAAC;EAC7D,OAAOG,KAAK;AACd","ignoreList":[]}
@@ -31,6 +31,12 @@ import { View } from 'react-native';
31
31
  * otherwise showed as the toolbar sitting under the keyboard for a frame when
32
32
  * the keyboard was already up as the chat mounted.
33
33
  * See https://github.com/kesha-antonov/react-native-chat/issues/12
34
+ *
35
+ * It is measured again as the keyboard starts to open. A chat in a panel that slides in with a
36
+ * transform is laid out once, while still parked off screen, and a transform never fires
37
+ * `onLayout` again - so the first measurement was about a screen too low, and the
38
+ * KeyboardAvoidingView padded the chat away to nothing. By the time the keyboard opens the panel
39
+ * has settled, and `measureInWindow` sees the transform.
34
40
  */
35
41
  export interface KeyboardVerticalOffset {
36
42
  ref: React.RefObject<React.ComponentRef<typeof View> | null>;
@@ -1 +1 @@
1
- {"version":3,"file":"useKeyboardVerticalOffset.d.ts","sourceRoot":"","sources":["../../src/hooks/useKeyboardVerticalOffset.ts"],"names":[],"mappings":"AAAA,OAAO,KAAyD,MAAM,OAAO,CAAA;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AAGnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,IAAI,CAAC,GAAG,IAAI,CAAC,CAAA;IAC5D,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,sBAAsB,EAAE,MAAM,CAAA;IAC9B,UAAU,EAAE,OAAO,CAAA;CACpB;AAED,wBAAgB,yBAAyB,IAAK,sBAAsB,CA4BnE"}
1
+ {"version":3,"file":"useKeyboardVerticalOffset.d.ts","sourceRoot":"","sources":["../../src/hooks/useKeyboardVerticalOffset.ts"],"names":[],"mappings":"AAAA,OAAO,KAAoE,MAAM,OAAO,CAAA;AACxF,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AAInC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,IAAI,CAAC,GAAG,IAAI,CAAC,CAAA;IAC5D,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,sBAAsB,EAAE,MAAM,CAAA;IAC9B,UAAU,EAAE,OAAO,CAAA;CACpB;AAED,wBAAgB,yBAAyB,IAAK,sBAAsB,CAkCnE"}
@@ -1,5 +1,6 @@
1
1
  import { c as _c } from "react/compiler-runtime";
2
- import { useCallback, useLayoutEffect, useRef, useState } from 'react';
2
+ import { useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react';
3
+ import { KeyboardEvents } from 'react-native-keyboard-controller';
3
4
  import { useSafeAreaFrame } from 'react-native-safe-area-context';
4
5
 
5
6
  /**
@@ -33,10 +34,16 @@ import { useSafeAreaFrame } from 'react-native-safe-area-context';
33
34
  * otherwise showed as the toolbar sitting under the keyboard for a frame when
34
35
  * the keyboard was already up as the chat mounted.
35
36
  * See https://github.com/kesha-antonov/react-native-chat/issues/12
37
+ *
38
+ * It is measured again as the keyboard starts to open. A chat in a panel that slides in with a
39
+ * transform is laid out once, while still parked off screen, and a transform never fires
40
+ * `onLayout` again - so the first measurement was about a screen too low, and the
41
+ * KeyboardAvoidingView padded the chat away to nothing. By the time the keyboard opens the panel
42
+ * has settled, and `measureInWindow` sees the transform.
36
43
  */
37
44
 
38
45
  export function useKeyboardVerticalOffset() {
39
- const $ = _c(6);
46
+ const $ = _c(8);
40
47
  const frameY = useSafeAreaFrame().y;
41
48
  const ref = useRef(null);
42
49
  const [measured, setMeasured] = useState(null);
@@ -68,22 +75,37 @@ export function useKeyboardVerticalOffset() {
68
75
  t2 = $[2];
69
76
  }
70
77
  useLayoutEffect(t1, t2);
71
- const t3 = measured ?? frameY;
72
- const t4 = measured !== null;
73
- let t5;
74
- if ($[3] !== t3 || $[4] !== t4) {
75
- t5 = {
76
- ref,
77
- onLayout,
78
- keyboardVerticalOffset: t3,
79
- isMeasured: t4
78
+ let t3;
79
+ let t4;
80
+ if ($[3] === Symbol.for("react.memo_cache_sentinel")) {
81
+ t3 = () => {
82
+ const subscription = KeyboardEvents.addListener?.("keyboardWillShow", onLayout);
83
+ return () => subscription?.remove();
80
84
  };
85
+ t4 = [onLayout];
81
86
  $[3] = t3;
82
87
  $[4] = t4;
88
+ } else {
89
+ t3 = $[3];
90
+ t4 = $[4];
91
+ }
92
+ useEffect(t3, t4);
93
+ const t5 = measured ?? frameY;
94
+ const t6 = measured !== null;
95
+ let t7;
96
+ if ($[5] !== t5 || $[6] !== t6) {
97
+ t7 = {
98
+ ref,
99
+ onLayout,
100
+ keyboardVerticalOffset: t5,
101
+ isMeasured: t6
102
+ };
83
103
  $[5] = t5;
104
+ $[6] = t6;
105
+ $[7] = t7;
84
106
  } else {
85
- t5 = $[5];
107
+ t7 = $[7];
86
108
  }
87
- return t5;
109
+ return t7;
88
110
  }
89
111
  //# sourceMappingURL=useKeyboardVerticalOffset.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useKeyboardVerticalOffset.js","names":["useCallback","useLayoutEffect","useRef","useState","useSafeAreaFrame","useKeyboardVerticalOffset","$","_c","frameY","y","ref","measured","setMeasured","t0","Symbol","for","current","measureInWindow","_x","Number","isFinite","previous","onLayout","t1","t2","t3","t4","t5","keyboardVerticalOffset","isMeasured"],"sources":["../../src/hooks/useKeyboardVerticalOffset.ts"],"sourcesContent":["import React, { useCallback, useLayoutEffect, useRef, useState } from 'react'\nimport { View } from 'react-native'\nimport { useSafeAreaFrame } from 'react-native-safe-area-context'\n\n/**\n * How far down the window the chat container starts - the value\n * `KeyboardAvoidingView` needs to keep the input toolbar on top of the keyboard.\n *\n * It cannot come from insets: a navigation header draws above the chat and insets\n * cannot see it, so `insets.top` (the old default) placed a chat below a header\n * roughly a header-height too low, i.e. behind the keyboard.\n * See https://github.com/kesha-antonov/react-native-chat/issues/11\n *\n * It cannot come from `useSafeAreaFrame()` alone either. That reads the nearest\n * `SafeAreaProvider`, and react-native-safe-area-context (v5) seeds a nested\n * provider from its *parent's* metrics - so when the host app already mounts one\n * at the root (the documented setup, and what expo-router does), the provider\n * `ChatWrapper` mounts reports the root frame and `y` stays 0 no matter where the\n * chat actually sits. A chat under a navigation header then got offset 0 and its\n * toolbar landed a header-height too low: back behind the keyboard.\n *\n * So the offset is measured from the chat container itself, in window\n * coordinates, and the safe-area frame is kept only as the pre-measurement\n * seed. Attach `onLayout`/`ref` to the view that wraps the chat.\n *\n * `isMeasured` reports whether that real measurement has landed yet, as opposed\n * to `keyboardVerticalOffset` still being the seed. It exists because the seed\n * can be wrong, not just imprecise: Chat mounts its own `SafeAreaProvider`\n * seeded with the *window's* frame (`y = 0`), so a chat nested below a header\n * briefly reports offset 0 - correct for a full-screen chat, wrong for this one -\n * until `measureInWindow`'s native round trip resolves. Reveal the toolbar only\n * once `isMeasured` is true so it never paints at that wrong offset, which\n * otherwise showed as the toolbar sitting under the keyboard for a frame when\n * the keyboard was already up as the chat mounted.\n * See https://github.com/kesha-antonov/react-native-chat/issues/12\n */\nexport interface KeyboardVerticalOffset {\n ref: React.RefObject<React.ComponentRef<typeof View> | null>\n onLayout: () => void\n keyboardVerticalOffset: number\n isMeasured: boolean\n}\n\nexport function useKeyboardVerticalOffset (): KeyboardVerticalOffset {\n const frameY = useSafeAreaFrame().y\n const ref = useRef<React.ComponentRef<typeof View>>(null)\n const [measured, setMeasured] = useState<number | null>(null)\n\n const onLayout = useCallback(() => {\n // measureInWindow, not the layout event: the event reports the position\n // within the parent, which is 0 for a fill view and tells us nothing about\n // where the chat sits on screen.\n ref.current?.measureInWindow((_x, y) => {\n if (Number.isFinite(y))\n setMeasured(previous => (previous === y ? previous : y))\n })\n }, [])\n\n // Measured once before the first paint too: in the New Architecture `measureInWindow` answers\n // synchronously inside a layout effect, so the chat is ready on its first frame instead of\n // after a layout event and a native round trip.\n useLayoutEffect(() => {\n onLayout()\n }, [onLayout])\n\n return {\n ref,\n onLayout,\n keyboardVerticalOffset: measured ?? frameY,\n isMeasured: measured !== null,\n }\n}\n"],"mappings":";AAAA,SAAgBA,WAAW,EAAEC,eAAe,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AAE7E,SAASC,gBAAgB,QAAQ,gCAAgC;;AAEjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAQA,OAAO,SAAAC,0BAAA;EAAA,MAAAC,CAAA,GAAAC,EAAA;EACL,MAAAC,MAAA,GAAeJ,gBAAgB,CAAC,CAAC,CAAAK,CAAE;EACnC,MAAAC,GAAA,GAAYR,MAAM,CAAkC,IAAI,CAAC;EACzD,OAAAS,QAAA,EAAAC,WAAA,IAAgCT,QAAQ,CAAgB,IAAI,CAAC;EAAA,IAAAU,EAAA;EAAA,IAAAP,CAAA,QAAAQ,MAAA,CAAAC,GAAA;IAEhCF,EAAA,GAAAA,CAAA;MAI3BH,GAAG,CAAAM,OAAyB,EAAAC,eAG1B,CAH2B,CAAAC,EAAA,EAAAT,CAAA;QAC3B,IAAIU,MAAM,CAAAC,QAAS,CAACX,CAAC,CAAC;UACpBG,WAAW,CAACS,QAAA,IAAaA,QAAQ,KAAKZ,CAAgB,GAA7BY,QAA6B,GAA7BZ,CAA8B,CAAC;QAAA;MAAA,CAC3D,CAAC;IAAA,CACH;IAAAH,CAAA,MAAAO,EAAA;EAAA;IAAAA,EAAA,GAAAP,CAAA;EAAA;EARD,MAAAgB,QAAA,GAAiBT,EAQX;EAAA,IAAAU,EAAA;EAAA,IAAAC,EAAA;EAAA,IAAAlB,CAAA,QAAAQ,MAAA,CAAAC,GAAA;IAKUQ,EAAA,GAAAA,CAAA;MACdD,QAAQ,CAAC,CAAC;IAAA,CACX;IAAEE,EAAA,IAACF,QAAQ,CAAC;IAAAhB,CAAA,MAAAiB,EAAA;IAAAjB,CAAA,MAAAkB,EAAA;EAAA;IAAAD,EAAA,GAAAjB,CAAA;IAAAkB,EAAA,GAAAlB,CAAA;EAAA;EAFbL,eAAe,CAACsB,EAEf,EAAEC,EAAU,CAAC;EAKY,MAAAC,EAAA,GAAAd,QAAkB,IAAlBH,MAAkB;EAC9B,MAAAkB,EAAA,GAAAf,QAAQ,KAAK,IAAI;EAAA,IAAAgB,EAAA;EAAA,IAAArB,CAAA,QAAAmB,EAAA,IAAAnB,CAAA,QAAAoB,EAAA;IAJxBC,EAAA;MAAAjB,GAAA;MAAAY,QAAA;MAAAM,sBAAA,EAGmBH,EAAkB;MAAAI,UAAA,EAC9BH;IACd,CAAC;IAAApB,CAAA,MAAAmB,EAAA;IAAAnB,CAAA,MAAAoB,EAAA;IAAApB,CAAA,MAAAqB,EAAA;EAAA;IAAAA,EAAA,GAAArB,CAAA;EAAA;EAAA,OALMqB,EAKN;AAAA","ignoreList":[]}
1
+ {"version":3,"file":"useKeyboardVerticalOffset.js","names":["useCallback","useEffect","useLayoutEffect","useRef","useState","KeyboardEvents","useSafeAreaFrame","useKeyboardVerticalOffset","$","_c","frameY","y","ref","measured","setMeasured","t0","Symbol","for","current","measureInWindow","_x","Number","isFinite","previous","onLayout","t1","t2","t3","t4","subscription","addListener","remove","t5","t6","t7","keyboardVerticalOffset","isMeasured"],"sources":["../../src/hooks/useKeyboardVerticalOffset.ts"],"sourcesContent":["import React, { useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react'\nimport { View } from 'react-native'\nimport { KeyboardEvents } from 'react-native-keyboard-controller'\nimport { useSafeAreaFrame } from 'react-native-safe-area-context'\n\n/**\n * How far down the window the chat container starts - the value\n * `KeyboardAvoidingView` needs to keep the input toolbar on top of the keyboard.\n *\n * It cannot come from insets: a navigation header draws above the chat and insets\n * cannot see it, so `insets.top` (the old default) placed a chat below a header\n * roughly a header-height too low, i.e. behind the keyboard.\n * See https://github.com/kesha-antonov/react-native-chat/issues/11\n *\n * It cannot come from `useSafeAreaFrame()` alone either. That reads the nearest\n * `SafeAreaProvider`, and react-native-safe-area-context (v5) seeds a nested\n * provider from its *parent's* metrics - so when the host app already mounts one\n * at the root (the documented setup, and what expo-router does), the provider\n * `ChatWrapper` mounts reports the root frame and `y` stays 0 no matter where the\n * chat actually sits. A chat under a navigation header then got offset 0 and its\n * toolbar landed a header-height too low: back behind the keyboard.\n *\n * So the offset is measured from the chat container itself, in window\n * coordinates, and the safe-area frame is kept only as the pre-measurement\n * seed. Attach `onLayout`/`ref` to the view that wraps the chat.\n *\n * `isMeasured` reports whether that real measurement has landed yet, as opposed\n * to `keyboardVerticalOffset` still being the seed. It exists because the seed\n * can be wrong, not just imprecise: Chat mounts its own `SafeAreaProvider`\n * seeded with the *window's* frame (`y = 0`), so a chat nested below a header\n * briefly reports offset 0 - correct for a full-screen chat, wrong for this one -\n * until `measureInWindow`'s native round trip resolves. Reveal the toolbar only\n * once `isMeasured` is true so it never paints at that wrong offset, which\n * otherwise showed as the toolbar sitting under the keyboard for a frame when\n * the keyboard was already up as the chat mounted.\n * See https://github.com/kesha-antonov/react-native-chat/issues/12\n *\n * It is measured again as the keyboard starts to open. A chat in a panel that slides in with a\n * transform is laid out once, while still parked off screen, and a transform never fires\n * `onLayout` again - so the first measurement was about a screen too low, and the\n * KeyboardAvoidingView padded the chat away to nothing. By the time the keyboard opens the panel\n * has settled, and `measureInWindow` sees the transform.\n */\nexport interface KeyboardVerticalOffset {\n ref: React.RefObject<React.ComponentRef<typeof View> | null>\n onLayout: () => void\n keyboardVerticalOffset: number\n isMeasured: boolean\n}\n\nexport function useKeyboardVerticalOffset (): KeyboardVerticalOffset {\n const frameY = useSafeAreaFrame().y\n const ref = useRef<React.ComponentRef<typeof View>>(null)\n const [measured, setMeasured] = useState<number | null>(null)\n\n const onLayout = useCallback(() => {\n // measureInWindow, not the layout event: the event reports the position\n // within the parent, which is 0 for a fill view and tells us nothing about\n // where the chat sits on screen.\n ref.current?.measureInWindow((_x, y) => {\n if (Number.isFinite(y))\n setMeasured(previous => (previous === y ? previous : y))\n })\n }, [])\n\n // Measured once before the first paint too: in the New Architecture `measureInWindow` answers\n // synchronously inside a layout effect, so the chat is ready on its first frame instead of\n // after a layout event and a native round trip.\n useLayoutEffect(() => {\n onLayout()\n }, [onLayout])\n\n useEffect(() => {\n // Guarded for mocks that return nothing.\n const subscription = KeyboardEvents.addListener?.('keyboardWillShow', onLayout)\n return () => subscription?.remove()\n }, [onLayout])\n\n return {\n ref,\n onLayout,\n keyboardVerticalOffset: measured ?? frameY,\n isMeasured: measured !== null,\n }\n}\n"],"mappings":";AAAA,SAAgBA,WAAW,EAAEC,SAAS,EAAEC,eAAe,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AAExF,SAASC,cAAc,QAAQ,kCAAkC;AACjE,SAASC,gBAAgB,QAAQ,gCAAgC;;AAEjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAQA,OAAO,SAAAC,0BAAA;EAAA,MAAAC,CAAA,GAAAC,EAAA;EACL,MAAAC,MAAA,GAAeJ,gBAAgB,CAAC,CAAC,CAAAK,CAAE;EACnC,MAAAC,GAAA,GAAYT,MAAM,CAAkC,IAAI,CAAC;EACzD,OAAAU,QAAA,EAAAC,WAAA,IAAgCV,QAAQ,CAAgB,IAAI,CAAC;EAAA,IAAAW,EAAA;EAAA,IAAAP,CAAA,QAAAQ,MAAA,CAAAC,GAAA;IAEhCF,EAAA,GAAAA,CAAA;MAI3BH,GAAG,CAAAM,OAAyB,EAAAC,eAG1B,CAH2B,CAAAC,EAAA,EAAAT,CAAA;QAC3B,IAAIU,MAAM,CAAAC,QAAS,CAACX,CAAC,CAAC;UACpBG,WAAW,CAACS,QAAA,IAAaA,QAAQ,KAAKZ,CAAgB,GAA7BY,QAA6B,GAA7BZ,CAA8B,CAAC;QAAA;MAAA,CAC3D,CAAC;IAAA,CACH;IAAAH,CAAA,MAAAO,EAAA;EAAA;IAAAA,EAAA,GAAAP,CAAA;EAAA;EARD,MAAAgB,QAAA,GAAiBT,EAQX;EAAA,IAAAU,EAAA;EAAA,IAAAC,EAAA;EAAA,IAAAlB,CAAA,QAAAQ,MAAA,CAAAC,GAAA;IAKUQ,EAAA,GAAAA,CAAA;MACdD,QAAQ,CAAC,CAAC;IAAA,CACX;IAAEE,EAAA,IAACF,QAAQ,CAAC;IAAAhB,CAAA,MAAAiB,EAAA;IAAAjB,CAAA,MAAAkB,EAAA;EAAA;IAAAD,EAAA,GAAAjB,CAAA;IAAAkB,EAAA,GAAAlB,CAAA;EAAA;EAFbN,eAAe,CAACuB,EAEf,EAAEC,EAAU,CAAC;EAAA,IAAAC,EAAA;EAAA,IAAAC,EAAA;EAAA,IAAApB,CAAA,QAAAQ,MAAA,CAAAC,GAAA;IAEJU,EAAA,GAAAA,CAAA;MAER,MAAAE,YAAA,GAAqBxB,cAAc,CAAAyB,WAA4C,GAA7B,kBAAkB,EAAEN,QAAQ,CAAC;MAAA,OACxE,MAAMK,YAAY,EAAAE,MAAU,CAAD,CAAC;IAAA,CACpC;IAAEH,EAAA,IAACJ,QAAQ,CAAC;IAAAhB,CAAA,MAAAmB,EAAA;IAAAnB,CAAA,MAAAoB,EAAA;EAAA;IAAAD,EAAA,GAAAnB,CAAA;IAAAoB,EAAA,GAAApB,CAAA;EAAA;EAJbP,SAAS,CAAC0B,EAIT,EAAEC,EAAU,CAAC;EAKY,MAAAI,EAAA,GAAAnB,QAAkB,IAAlBH,MAAkB;EAC9B,MAAAuB,EAAA,GAAApB,QAAQ,KAAK,IAAI;EAAA,IAAAqB,EAAA;EAAA,IAAA1B,CAAA,QAAAwB,EAAA,IAAAxB,CAAA,QAAAyB,EAAA;IAJxBC,EAAA;MAAAtB,GAAA;MAAAY,QAAA;MAAAW,sBAAA,EAGmBH,EAAkB;MAAAI,UAAA,EAC9BH;IACd,CAAC;IAAAzB,CAAA,MAAAwB,EAAA;IAAAxB,CAAA,MAAAyB,EAAA;IAAAzB,CAAA,MAAA0B,EAAA;EAAA;IAAAA,EAAA,GAAA1B,CAAA;EAAA;EAAA,OALM0B,EAKN;AAAA","ignoreList":[]}
package/lib/i18n.d.ts CHANGED
@@ -93,6 +93,8 @@ export interface ChatLabels {
93
93
  actionForward: string;
94
94
  /** Message context menu: delete the message. */
95
95
  actionDelete: string;
96
+ /** Message context menu: send a message that failed again. */
97
+ actionRetry: string;
96
98
  /** Emoji keyboard: the search field placeholder. */
97
99
  emojiSearch: string;
98
100
  /** Emoji keyboard: the recents tab. */
package/lib/i18n.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":"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"}
package/lib/i18n.js CHANGED
@@ -53,6 +53,7 @@ export const defaultLabels = {
53
53
  actionEdit: 'Edit',
54
54
  actionForward: 'Forward',
55
55
  actionDelete: 'Delete',
56
+ actionRetry: 'Retry',
56
57
  emojiSearch: 'Search Emoji',
57
58
  emojiRecent: 'Recently Used',
58
59
  emojiSmileys: 'Smileys & People',
package/lib/i18n.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"i18n.js","names":["matchSupportedLocale","translations","defaultLabels","placeholder","send","cancel","loadEarlier","today","video","voiceMessage","videoMessage","location","openLocationAccessibility","slideToCancel","replyingTo","editing","edited","cameraPermission","noCamera","stopAndSend","tapToRecord","releaseToSend","holdToRecord","slideUpToLock","holdToRecordAudioSwitch","holdToRecordVideoSwitch","holdToRecordAudioOnly","holdToRecordVideoOnly","pauseToTrimOrReplay","trimRecordingTitle","trimRecordingText","ok","viewOnceHint","viewOnceVoiceEnabledHint","viewOnceVideoEnabledHint","activateViewOnce","deactivateViewOnce","actionReply","actionCopy","actionPin","actionUnpin","actionEdit","actionForward","actionDelete","emojiSearch","emojiRecent","emojiSmileys","emojiAnimals","emojiFood","emojiActivities","emojiTravel","emojiObjects","emojiSymbols","emojiFlags","emojiNoResults","emojiButton","keyboardButton","backspace","attachButton","attachGallery","attachFile","attachLocation","attachCamera","attachCaption","attachSendLocation","attachLocating","attachLocationAccuracy","attachPhotosAccess","attachNoPhotos","attachChooseFromGallery","attachChooseFile","attachLocationDenied","emptyChatTitle","emptyChatText","unreadMessages","mediaViewerCounter","mediaViewerDate","actionSelect","cancelSelection","chatListTitle","chatListSearch","chatListArchived","chatListArchive","chatListUnarchive","chatListMute","chatListUnmute","chatListNewChat","chatListBack","chatListEmpty","chatListNoResults","typingStatus","typingStatusName","typingStatusTwo","typingStatusMany","typingRecordingVoice","typingRecordingVoiceName","typingRecordingVideo","typingRecordingVideoName","typingSendingPhoto","typingSendingPhotoName","typingSendingVideo","typingSendingVideoName","typingSendingFile","typingSendingFileName","typingChoosingSticker","typingChoosingStickerName","chatListDraft","chatListYou","chatListPhoto","chatListFile","chatListDeleteTitle","chatListDeleteManyTitle","chatListDeleteMessage","resolveLabels","locale","labels","matched","translated","undefined","formatLabel","label","values","replace","_match","key","String"],"sources":["../src/i18n.ts"],"sourcesContent":["/**\n * UI string localization for the chat. Date/time localization (month/day names, calendar\n * formats) is handled separately by Day.js via the `locale` prop - dayjsLocales.ts bundles the\n * matching dayjs locale for every language translated here, kept in sync via the\n * `SupportedLocale` type in ./locales (compile time) and dayjsLocales.test.ts (runtime). This\n * file covers the static UI labels (composer placeholder, buttons, recording hint, media/\n * location labels, etc.); the actual per-language strings live one-per-file under `src/locales/`.\n *\n * Provide overrides through the `labels` prop on `Chat`, or rely on the built-in\n * translations selected by the `locale` prop. Labels resolve as:\n * labels (prop) > translations[locale] > defaultLabels (English)\n */\nimport { matchSupportedLocale, translations } from './locales'\n\nexport interface ChatLabels {\n /** Composer placeholder. */\n placeholder: string\n /** Send button / quick-reply send label. */\n send: string\n /** Cancel row in the attachment sheet. */\n cancel: string\n /** \"Load earlier messages\" button. */\n loadEarlier: string\n /** Day separator label for today's date. */\n today: string\n /** Video message fallback label. */\n video: string\n /** Voice/audio message fallback label. */\n voiceMessage: string\n videoMessage: string\n /** Location message title. */\n location: string\n /** Accessibility label for the location card. */\n openLocationAccessibility: string\n /** Voice recording slide-to-cancel hint. */\n slideToCancel: string\n /** Reply banner title; `{name}` is replaced with the author's name. */\n replyingTo: string\n /** Edit banner title. */\n editing: string\n /** Prefix of an edited message's time (\"edited 14:05\"). */\n edited: string\n /** Shown in the video recorder when camera permission is missing. */\n cameraPermission: string\n /** Shown in the video recorder when no camera device is found. */\n noCamera: string\n /** Hint under the video recorder's shutter while a take is running. */\n stopAndSend: string\n /** Hint under the video recorder's shutter before recording starts. */\n tapToRecord: string\n /** Hint while holding the video shutter. */\n releaseToSend: string\n /** Idle hint for the hold-to-record video shutter. */\n holdToRecord: string\n /** Tooltip by the lock while a take is held, shown for the first few takes. */\n slideUpToLock: string\n /** Tooltip after the shared record button switches to voice. */\n holdToRecordAudioSwitch: string\n /** Tooltip after the shared record button switches to video. */\n holdToRecordVideoSwitch: string\n /** Tooltip after a tap on a voice-only record button. */\n holdToRecordAudioOnly: string\n /** Tooltip after a tap on a video-only record button. */\n holdToRecordVideoOnly: string\n /** Tooltip by the pause button of a locked voice take. */\n pauseToTrimOrReplay: string\n /** Title of the prompt before resuming a trimmed voice take. */\n trimRecordingTitle: string\n /** Body of the prompt before resuming a trimmed voice take. */\n trimRecordingText: string\n /** Confirm button of a prompt. */\n ok: string\n /** Tooltip by the view-once toggle on the first few locked takes; `**` marks bold. */\n viewOnceHint: string\n /** Tooltip once view-once is switched on for a voice take. */\n viewOnceVoiceEnabledHint: string\n /** Tooltip once view-once is switched on for a round video take. */\n viewOnceVideoEnabledHint: string\n /** Accessibility label of the view-once toggle while off. */\n activateViewOnce: string\n /** Accessibility label of the view-once toggle while on. */\n deactivateViewOnce: string\n /** Message context menu: reply to the message. */\n actionReply: string\n /** Message context menu: copy the message text. */\n actionCopy: string\n /** Message context menu: pin the message. */\n actionPin: string\n /** Message context menu: unpin a pinned message. */\n actionUnpin: string\n /** Message context menu: edit your own message. */\n actionEdit: string\n /** Message context menu: forward the message. */\n actionForward: string\n /** Message context menu: delete the message. */\n actionDelete: string\n /** Emoji keyboard: the search field placeholder. */\n emojiSearch: string\n /** Emoji keyboard: the recents tab. */\n emojiRecent: string\n /** Emoji keyboard: smileys and people section. */\n emojiSmileys: string\n /** Emoji keyboard: animals section. */\n emojiAnimals: string\n /** Emoji keyboard: food section. */\n emojiFood: string\n /** Emoji keyboard: activities section. */\n emojiActivities: string\n /** Emoji keyboard: travel section. */\n emojiTravel: string\n /** Emoji keyboard: objects section. */\n emojiObjects: string\n /** Emoji keyboard: symbols section. */\n emojiSymbols: string\n /** Emoji keyboard: flags section. */\n emojiFlags: string\n /** Emoji keyboard: shown when a search finds nothing. */\n emojiNoResults: string\n /** Accessibility label of the composer's emoji button. */\n emojiButton: string\n /** Accessibility label of the emoji button while the emoji keyboard is open. */\n keyboardButton: string\n /** Accessibility label of the emoji keyboard's backspace. */\n backspace: string\n /** Accessibility label of the composer's paperclip. */\n attachButton: string\n /** Attachment menu: the Gallery tab. */\n attachGallery: string\n /** Attachment menu: the File tab. */\n attachFile: string\n /** Attachment menu: the Location tab. */\n attachLocation: string\n /** Attachment menu: the Camera tab and tile. */\n attachCamera: string\n /** Attachment menu: the caption field placeholder. */\n attachCaption: string\n /** Attachment menu: the button that sends your position. */\n attachSendLocation: string\n /** Attachment menu: shown while the position is being found. */\n attachLocating: string\n /** Attachment menu: accuracy of the found position; `{meters}` is replaced. */\n attachLocationAccuracy: string\n /** Attachment menu: shown when photo access is denied. */\n attachPhotosAccess: string\n /** Attachment menu: shown when the library has no photos. */\n attachNoPhotos: string\n /** Attachment menu: opens the system photo picker. */\n attachChooseFromGallery: string\n /** Attachment menu: the File tab's button. */\n attachChooseFile: string\n /** Attachment menu: shown when location access is denied. */\n attachLocationDenied: string\n /** Empty chat card: the title. */\n emptyChatTitle: string\n /** Empty chat card: the line above the greeting. */\n emptyChatText: string\n /** The bar above the first unread message. */\n unreadMessages: string\n /** Media viewer: which photo is open; `{index}` counts from the oldest, `{count}` is all. */\n mediaViewerCounter: string\n /** Media viewer: when the open photo was sent; `{date}` and `{time}` are formatted for the locale. */\n mediaViewerDate: string\n /** Message context menu: start selecting messages. */\n actionSelect: string\n /** Selection bar: accessibility label of the button that leaves selection. */\n cancelSelection: string\n /** The chat list's header title */\n chatListTitle: string\n /** Search field placeholder and button */\n chatListSearch: string\n /** The archive folder row and its header */\n chatListArchived: string\n /** Archive action */\n chatListArchive: string\n /** Unarchive action */\n chatListUnarchive: string\n /** Mute action */\n chatListMute: string\n /** Unmute action */\n chatListUnmute: string\n /** The new-chat button */\n chatListNewChat: string\n /** Back from search or the archive */\n chatListBack: string\n /** An empty list */\n chatListEmpty: string\n /** A search with no results */\n chatListNoResults: string\n /** Someone typing in a private chat (an animation stands before it) */\n typingStatus: string\n /** One person typing in a group; `{name}` is their first name */\n typingStatusName: string\n /** Two people typing; `{name}` and `{other}` are their first names */\n typingStatusTwo: string\n /** Several people typing; `{count}` is how many besides `{name}` */\n typingStatusMany: string\n /** Recording a voice message */\n typingRecordingVoice: string\n /** Recording a voice message, in a group */\n typingRecordingVoiceName: string\n /** Recording a video message */\n typingRecordingVideo: string\n /** Recording a video message, in a group */\n typingRecordingVideoName: string\n /** Sending a photo */\n typingSendingPhoto: string\n /** Sending a photo, in a group */\n typingSendingPhotoName: string\n /** Sending a video */\n typingSendingVideo: string\n /** Sending a video, in a group */\n typingSendingVideoName: string\n /** Sending a file */\n typingSendingFile: string\n /** Sending a file, in a group */\n typingSendingFileName: string\n /** Choosing a sticker */\n typingChoosingSticker: string\n /** Choosing a sticker, in a group */\n typingChoosingStickerName: string\n /** Before an unsent draft */\n chatListDraft: string\n /** Before your own last message in a group */\n chatListYou: string\n /** A photo as the last message */\n chatListPhoto: string\n /** A file as the last message, when it has no name */\n chatListFile: string\n /** Confirm deleting one chat */\n chatListDeleteTitle: string\n /** Confirm deleting several; `{count}` is how many */\n chatListDeleteManyTitle: string\n /** The confirmation's text */\n chatListDeleteMessage: string\n}\n\nexport const defaultLabels: ChatLabels = {\n placeholder: 'Type a message...',\n send: 'Send',\n cancel: 'Cancel',\n loadEarlier: 'Load earlier messages',\n today: 'Today',\n video: 'Video',\n voiceMessage: 'Voice message',\n videoMessage: 'Video message',\n location: 'Location',\n openLocationAccessibility: 'Open location in maps',\n slideToCancel: 'Slide left to cancel...',\n replyingTo: 'Replying to {name}',\n editing: 'Editing',\n edited: 'edited',\n cameraPermission: 'Camera permission needed',\n noCamera: 'No camera available',\n stopAndSend: 'Tap to stop and send',\n tapToRecord: 'Tap to record',\n releaseToSend: 'Release to send, slide up to lock',\n holdToRecord: 'Hold to record',\n slideUpToLock: 'Slide up to lock recording',\n holdToRecordAudioSwitch: 'Hold to record audio. Tap to switch to video.',\n holdToRecordVideoSwitch: 'Hold to record video. Tap to switch to audio.',\n holdToRecordAudioOnly: 'Hold to record audio.',\n holdToRecordVideoOnly: 'Hold to record video.',\n pauseToTrimOrReplay: 'Pause to trim or replay',\n trimRecordingTitle: 'Trim to selected range?',\n trimRecordingText: 'Audio outside that range will be discarded, and recording will start immediately.',\n ok: 'OK',\n viewOnceHint: 'Tap to set this message to **Play Once**.',\n viewOnceVoiceEnabledHint: 'The recipient will be able to listen to it only once.',\n viewOnceVideoEnabledHint: 'The recipient will be able to play it only once.',\n activateViewOnce: 'Activate Play Once',\n deactivateViewOnce: 'Deactivate Play Once',\n actionReply: 'Reply',\n actionCopy: 'Copy',\n actionPin: 'Pin',\n actionUnpin: 'Unpin',\n actionEdit: 'Edit',\n actionForward: 'Forward',\n actionDelete: 'Delete',\n emojiSearch: 'Search Emoji',\n emojiRecent: 'Recently Used',\n emojiSmileys: 'Smileys & People',\n emojiAnimals: 'Animals & Nature',\n emojiFood: 'Food & Drink',\n emojiActivities: 'Activity',\n emojiTravel: 'Travel & Places',\n emojiObjects: 'Objects',\n emojiSymbols: 'Symbols',\n emojiFlags: 'Flags',\n emojiNoResults: 'No emoji found',\n emojiButton: 'Emoji',\n keyboardButton: 'Keyboard',\n backspace: 'Backspace',\n attachButton: 'Attach',\n attachGallery: 'Gallery',\n attachFile: 'File',\n attachLocation: 'Location',\n attachCamera: 'Camera',\n attachCaption: 'Add a caption...',\n attachSendLocation: 'Send My Current Location',\n attachLocating: 'Locating...',\n attachLocationAccuracy: 'Accurate to {meters} m',\n attachPhotosAccess: 'Allow access to your photos to send them',\n attachNoPhotos: 'No photos yet',\n attachChooseFromGallery: 'Choose from Gallery',\n attachChooseFile: 'Choose a file to send',\n attachLocationDenied: 'Location access is off. Turn it on in Settings to send your location.',\n emptyChatTitle: 'No messages here yet...',\n emptyChatText: 'Send a message or tap the greeting below.',\n unreadMessages: 'Unread Messages',\n mediaViewerCounter: '{index} of {count}',\n mediaViewerDate: '{date} at {time}',\n actionSelect: 'Select',\n cancelSelection: 'Cancel selection',\n chatListTitle: 'Chats',\n chatListSearch: 'Search',\n chatListArchived: 'Archived Chats',\n chatListArchive: 'Archive',\n chatListUnarchive: 'Unarchive',\n chatListMute: 'Mute',\n chatListUnmute: 'Unmute',\n chatListNewChat: 'New message',\n chatListBack: 'Back',\n chatListEmpty: 'No chats here yet',\n chatListNoResults: 'No chats found',\n typingStatus: 'typing',\n typingStatusName: '{name} is typing',\n typingStatusTwo: '{name} and {other} are typing',\n typingStatusMany: '{name} and {count} people are typing',\n typingRecordingVoice: 'recording a voice message',\n typingRecordingVoiceName: '{name} is recording a voice message',\n typingRecordingVideo: 'recording a video message',\n typingRecordingVideoName: '{name} is recording a video message',\n typingSendingPhoto: 'sending a photo',\n typingSendingPhotoName: '{name} is sending a photo',\n typingSendingVideo: 'sending a video',\n typingSendingVideoName: '{name} is sending a video',\n typingSendingFile: 'sending a file',\n typingSendingFileName: '{name} is sending a file',\n typingChoosingSticker: 'choosing a sticker',\n typingChoosingStickerName: '{name} is choosing a sticker',\n chatListDraft: 'Draft:',\n chatListYou: 'You',\n chatListPhoto: 'Photo',\n chatListFile: 'File',\n chatListDeleteTitle: 'Delete chat',\n chatListDeleteManyTitle: 'Delete {count} chats',\n chatListDeleteMessage: 'Are you sure you want to delete the selected chats?',\n}\n\n/**\n * Built-in translations (a starter set), one language per file under `src/locales/`. Re-exported\n * here so `import { translations } from 'react-native-chat'` keeps working.\n */\nexport { translations }\n\n/**\n * Resolve the active labels: the `labels` override on top of the built-in\n * translation for `locale` (if any) on top of English defaults.\n */\nexport function resolveLabels (\n locale?: string,\n labels?: Partial<ChatLabels>\n): ChatLabels {\n const matched = matchSupportedLocale(locale)\n const translated = matched ? translations[matched] : undefined\n return { ...defaultLabels, ...translated, ...labels }\n}\n\n/** Interpolate `{name}`-style placeholders in a label. */\nexport function formatLabel (label: string, values: Record<string, string | number>): string {\n return label.replace(/\\{(\\w+)\\}/g, (_match, key) => String(values[key] ?? ''))\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"i18n.js","names":["matchSupportedLocale","translations","defaultLabels","placeholder","send","cancel","loadEarlier","today","video","voiceMessage","videoMessage","location","openLocationAccessibility","slideToCancel","replyingTo","editing","edited","cameraPermission","noCamera","stopAndSend","tapToRecord","releaseToSend","holdToRecord","slideUpToLock","holdToRecordAudioSwitch","holdToRecordVideoSwitch","holdToRecordAudioOnly","holdToRecordVideoOnly","pauseToTrimOrReplay","trimRecordingTitle","trimRecordingText","ok","viewOnceHint","viewOnceVoiceEnabledHint","viewOnceVideoEnabledHint","activateViewOnce","deactivateViewOnce","actionReply","actionCopy","actionPin","actionUnpin","actionEdit","actionForward","actionDelete","actionRetry","emojiSearch","emojiRecent","emojiSmileys","emojiAnimals","emojiFood","emojiActivities","emojiTravel","emojiObjects","emojiSymbols","emojiFlags","emojiNoResults","emojiButton","keyboardButton","backspace","attachButton","attachGallery","attachFile","attachLocation","attachCamera","attachCaption","attachSendLocation","attachLocating","attachLocationAccuracy","attachPhotosAccess","attachNoPhotos","attachChooseFromGallery","attachChooseFile","attachLocationDenied","emptyChatTitle","emptyChatText","unreadMessages","mediaViewerCounter","mediaViewerDate","actionSelect","cancelSelection","chatListTitle","chatListSearch","chatListArchived","chatListArchive","chatListUnarchive","chatListMute","chatListUnmute","chatListNewChat","chatListBack","chatListEmpty","chatListNoResults","typingStatus","typingStatusName","typingStatusTwo","typingStatusMany","typingRecordingVoice","typingRecordingVoiceName","typingRecordingVideo","typingRecordingVideoName","typingSendingPhoto","typingSendingPhotoName","typingSendingVideo","typingSendingVideoName","typingSendingFile","typingSendingFileName","typingChoosingSticker","typingChoosingStickerName","chatListDraft","chatListYou","chatListPhoto","chatListFile","chatListDeleteTitle","chatListDeleteManyTitle","chatListDeleteMessage","resolveLabels","locale","labels","matched","translated","undefined","formatLabel","label","values","replace","_match","key","String"],"sources":["../src/i18n.ts"],"sourcesContent":["/**\n * UI string localization for the chat. Date/time localization (month/day names, calendar\n * formats) is handled separately by Day.js via the `locale` prop - dayjsLocales.ts bundles the\n * matching dayjs locale for every language translated here, kept in sync via the\n * `SupportedLocale` type in ./locales (compile time) and dayjsLocales.test.ts (runtime). This\n * file covers the static UI labels (composer placeholder, buttons, recording hint, media/\n * location labels, etc.); the actual per-language strings live one-per-file under `src/locales/`.\n *\n * Provide overrides through the `labels` prop on `Chat`, or rely on the built-in\n * translations selected by the `locale` prop. Labels resolve as:\n * labels (prop) > translations[locale] > defaultLabels (English)\n */\nimport { matchSupportedLocale, translations } from './locales'\n\nexport interface ChatLabels {\n /** Composer placeholder. */\n placeholder: string\n /** Send button / quick-reply send label. */\n send: string\n /** Cancel row in the attachment sheet. */\n cancel: string\n /** \"Load earlier messages\" button. */\n loadEarlier: string\n /** Day separator label for today's date. */\n today: string\n /** Video message fallback label. */\n video: string\n /** Voice/audio message fallback label. */\n voiceMessage: string\n videoMessage: string\n /** Location message title. */\n location: string\n /** Accessibility label for the location card. */\n openLocationAccessibility: string\n /** Voice recording slide-to-cancel hint. */\n slideToCancel: string\n /** Reply banner title; `{name}` is replaced with the author's name. */\n replyingTo: string\n /** Edit banner title. */\n editing: string\n /** Prefix of an edited message's time (\"edited 14:05\"). */\n edited: string\n /** Shown in the video recorder when camera permission is missing. */\n cameraPermission: string\n /** Shown in the video recorder when no camera device is found. */\n noCamera: string\n /** Hint under the video recorder's shutter while a take is running. */\n stopAndSend: string\n /** Hint under the video recorder's shutter before recording starts. */\n tapToRecord: string\n /** Hint while holding the video shutter. */\n releaseToSend: string\n /** Idle hint for the hold-to-record video shutter. */\n holdToRecord: string\n /** Tooltip by the lock while a take is held, shown for the first few takes. */\n slideUpToLock: string\n /** Tooltip after the shared record button switches to voice. */\n holdToRecordAudioSwitch: string\n /** Tooltip after the shared record button switches to video. */\n holdToRecordVideoSwitch: string\n /** Tooltip after a tap on a voice-only record button. */\n holdToRecordAudioOnly: string\n /** Tooltip after a tap on a video-only record button. */\n holdToRecordVideoOnly: string\n /** Tooltip by the pause button of a locked voice take. */\n pauseToTrimOrReplay: string\n /** Title of the prompt before resuming a trimmed voice take. */\n trimRecordingTitle: string\n /** Body of the prompt before resuming a trimmed voice take. */\n trimRecordingText: string\n /** Confirm button of a prompt. */\n ok: string\n /** Tooltip by the view-once toggle on the first few locked takes; `**` marks bold. */\n viewOnceHint: string\n /** Tooltip once view-once is switched on for a voice take. */\n viewOnceVoiceEnabledHint: string\n /** Tooltip once view-once is switched on for a round video take. */\n viewOnceVideoEnabledHint: string\n /** Accessibility label of the view-once toggle while off. */\n activateViewOnce: string\n /** Accessibility label of the view-once toggle while on. */\n deactivateViewOnce: string\n /** Message context menu: reply to the message. */\n actionReply: string\n /** Message context menu: copy the message text. */\n actionCopy: string\n /** Message context menu: pin the message. */\n actionPin: string\n /** Message context menu: unpin a pinned message. */\n actionUnpin: string\n /** Message context menu: edit your own message. */\n actionEdit: string\n /** Message context menu: forward the message. */\n actionForward: string\n /** Message context menu: delete the message. */\n actionDelete: string\n /** Message context menu: send a message that failed again. */\n actionRetry: string\n /** Emoji keyboard: the search field placeholder. */\n emojiSearch: string\n /** Emoji keyboard: the recents tab. */\n emojiRecent: string\n /** Emoji keyboard: smileys and people section. */\n emojiSmileys: string\n /** Emoji keyboard: animals section. */\n emojiAnimals: string\n /** Emoji keyboard: food section. */\n emojiFood: string\n /** Emoji keyboard: activities section. */\n emojiActivities: string\n /** Emoji keyboard: travel section. */\n emojiTravel: string\n /** Emoji keyboard: objects section. */\n emojiObjects: string\n /** Emoji keyboard: symbols section. */\n emojiSymbols: string\n /** Emoji keyboard: flags section. */\n emojiFlags: string\n /** Emoji keyboard: shown when a search finds nothing. */\n emojiNoResults: string\n /** Accessibility label of the composer's emoji button. */\n emojiButton: string\n /** Accessibility label of the emoji button while the emoji keyboard is open. */\n keyboardButton: string\n /** Accessibility label of the emoji keyboard's backspace. */\n backspace: string\n /** Accessibility label of the composer's paperclip. */\n attachButton: string\n /** Attachment menu: the Gallery tab. */\n attachGallery: string\n /** Attachment menu: the File tab. */\n attachFile: string\n /** Attachment menu: the Location tab. */\n attachLocation: string\n /** Attachment menu: the Camera tab and tile. */\n attachCamera: string\n /** Attachment menu: the caption field placeholder. */\n attachCaption: string\n /** Attachment menu: the button that sends your position. */\n attachSendLocation: string\n /** Attachment menu: shown while the position is being found. */\n attachLocating: string\n /** Attachment menu: accuracy of the found position; `{meters}` is replaced. */\n attachLocationAccuracy: string\n /** Attachment menu: shown when photo access is denied. */\n attachPhotosAccess: string\n /** Attachment menu: shown when the library has no photos. */\n attachNoPhotos: string\n /** Attachment menu: opens the system photo picker. */\n attachChooseFromGallery: string\n /** Attachment menu: the File tab's button. */\n attachChooseFile: string\n /** Attachment menu: shown when location access is denied. */\n attachLocationDenied: string\n /** Empty chat card: the title. */\n emptyChatTitle: string\n /** Empty chat card: the line above the greeting. */\n emptyChatText: string\n /** The bar above the first unread message. */\n unreadMessages: string\n /** Media viewer: which photo is open; `{index}` counts from the oldest, `{count}` is all. */\n mediaViewerCounter: string\n /** Media viewer: when the open photo was sent; `{date}` and `{time}` are formatted for the locale. */\n mediaViewerDate: string\n /** Message context menu: start selecting messages. */\n actionSelect: string\n /** Selection bar: accessibility label of the button that leaves selection. */\n cancelSelection: string\n /** The chat list's header title */\n chatListTitle: string\n /** Search field placeholder and button */\n chatListSearch: string\n /** The archive folder row and its header */\n chatListArchived: string\n /** Archive action */\n chatListArchive: string\n /** Unarchive action */\n chatListUnarchive: string\n /** Mute action */\n chatListMute: string\n /** Unmute action */\n chatListUnmute: string\n /** The new-chat button */\n chatListNewChat: string\n /** Back from search or the archive */\n chatListBack: string\n /** An empty list */\n chatListEmpty: string\n /** A search with no results */\n chatListNoResults: string\n /** Someone typing in a private chat (an animation stands before it) */\n typingStatus: string\n /** One person typing in a group; `{name}` is their first name */\n typingStatusName: string\n /** Two people typing; `{name}` and `{other}` are their first names */\n typingStatusTwo: string\n /** Several people typing; `{count}` is how many besides `{name}` */\n typingStatusMany: string\n /** Recording a voice message */\n typingRecordingVoice: string\n /** Recording a voice message, in a group */\n typingRecordingVoiceName: string\n /** Recording a video message */\n typingRecordingVideo: string\n /** Recording a video message, in a group */\n typingRecordingVideoName: string\n /** Sending a photo */\n typingSendingPhoto: string\n /** Sending a photo, in a group */\n typingSendingPhotoName: string\n /** Sending a video */\n typingSendingVideo: string\n /** Sending a video, in a group */\n typingSendingVideoName: string\n /** Sending a file */\n typingSendingFile: string\n /** Sending a file, in a group */\n typingSendingFileName: string\n /** Choosing a sticker */\n typingChoosingSticker: string\n /** Choosing a sticker, in a group */\n typingChoosingStickerName: string\n /** Before an unsent draft */\n chatListDraft: string\n /** Before your own last message in a group */\n chatListYou: string\n /** A photo as the last message */\n chatListPhoto: string\n /** A file as the last message, when it has no name */\n chatListFile: string\n /** Confirm deleting one chat */\n chatListDeleteTitle: string\n /** Confirm deleting several; `{count}` is how many */\n chatListDeleteManyTitle: string\n /** The confirmation's text */\n chatListDeleteMessage: string\n}\n\nexport const defaultLabels: ChatLabels = {\n placeholder: 'Type a message...',\n send: 'Send',\n cancel: 'Cancel',\n loadEarlier: 'Load earlier messages',\n today: 'Today',\n video: 'Video',\n voiceMessage: 'Voice message',\n videoMessage: 'Video message',\n location: 'Location',\n openLocationAccessibility: 'Open location in maps',\n slideToCancel: 'Slide left to cancel...',\n replyingTo: 'Replying to {name}',\n editing: 'Editing',\n edited: 'edited',\n cameraPermission: 'Camera permission needed',\n noCamera: 'No camera available',\n stopAndSend: 'Tap to stop and send',\n tapToRecord: 'Tap to record',\n releaseToSend: 'Release to send, slide up to lock',\n holdToRecord: 'Hold to record',\n slideUpToLock: 'Slide up to lock recording',\n holdToRecordAudioSwitch: 'Hold to record audio. Tap to switch to video.',\n holdToRecordVideoSwitch: 'Hold to record video. Tap to switch to audio.',\n holdToRecordAudioOnly: 'Hold to record audio.',\n holdToRecordVideoOnly: 'Hold to record video.',\n pauseToTrimOrReplay: 'Pause to trim or replay',\n trimRecordingTitle: 'Trim to selected range?',\n trimRecordingText: 'Audio outside that range will be discarded, and recording will start immediately.',\n ok: 'OK',\n viewOnceHint: 'Tap to set this message to **Play Once**.',\n viewOnceVoiceEnabledHint: 'The recipient will be able to listen to it only once.',\n viewOnceVideoEnabledHint: 'The recipient will be able to play it only once.',\n activateViewOnce: 'Activate Play Once',\n deactivateViewOnce: 'Deactivate Play Once',\n actionReply: 'Reply',\n actionCopy: 'Copy',\n actionPin: 'Pin',\n actionUnpin: 'Unpin',\n actionEdit: 'Edit',\n actionForward: 'Forward',\n actionDelete: 'Delete',\n actionRetry: 'Retry',\n emojiSearch: 'Search Emoji',\n emojiRecent: 'Recently Used',\n emojiSmileys: 'Smileys & People',\n emojiAnimals: 'Animals & Nature',\n emojiFood: 'Food & Drink',\n emojiActivities: 'Activity',\n emojiTravel: 'Travel & Places',\n emojiObjects: 'Objects',\n emojiSymbols: 'Symbols',\n emojiFlags: 'Flags',\n emojiNoResults: 'No emoji found',\n emojiButton: 'Emoji',\n keyboardButton: 'Keyboard',\n backspace: 'Backspace',\n attachButton: 'Attach',\n attachGallery: 'Gallery',\n attachFile: 'File',\n attachLocation: 'Location',\n attachCamera: 'Camera',\n attachCaption: 'Add a caption...',\n attachSendLocation: 'Send My Current Location',\n attachLocating: 'Locating...',\n attachLocationAccuracy: 'Accurate to {meters} m',\n attachPhotosAccess: 'Allow access to your photos to send them',\n attachNoPhotos: 'No photos yet',\n attachChooseFromGallery: 'Choose from Gallery',\n attachChooseFile: 'Choose a file to send',\n attachLocationDenied: 'Location access is off. Turn it on in Settings to send your location.',\n emptyChatTitle: 'No messages here yet...',\n emptyChatText: 'Send a message or tap the greeting below.',\n unreadMessages: 'Unread Messages',\n mediaViewerCounter: '{index} of {count}',\n mediaViewerDate: '{date} at {time}',\n actionSelect: 'Select',\n cancelSelection: 'Cancel selection',\n chatListTitle: 'Chats',\n chatListSearch: 'Search',\n chatListArchived: 'Archived Chats',\n chatListArchive: 'Archive',\n chatListUnarchive: 'Unarchive',\n chatListMute: 'Mute',\n chatListUnmute: 'Unmute',\n chatListNewChat: 'New message',\n chatListBack: 'Back',\n chatListEmpty: 'No chats here yet',\n chatListNoResults: 'No chats found',\n typingStatus: 'typing',\n typingStatusName: '{name} is typing',\n typingStatusTwo: '{name} and {other} are typing',\n typingStatusMany: '{name} and {count} people are typing',\n typingRecordingVoice: 'recording a voice message',\n typingRecordingVoiceName: '{name} is recording a voice message',\n typingRecordingVideo: 'recording a video message',\n typingRecordingVideoName: '{name} is recording a video message',\n typingSendingPhoto: 'sending a photo',\n typingSendingPhotoName: '{name} is sending a photo',\n typingSendingVideo: 'sending a video',\n typingSendingVideoName: '{name} is sending a video',\n typingSendingFile: 'sending a file',\n typingSendingFileName: '{name} is sending a file',\n typingChoosingSticker: 'choosing a sticker',\n typingChoosingStickerName: '{name} is choosing a sticker',\n chatListDraft: 'Draft:',\n chatListYou: 'You',\n chatListPhoto: 'Photo',\n chatListFile: 'File',\n chatListDeleteTitle: 'Delete chat',\n chatListDeleteManyTitle: 'Delete {count} chats',\n chatListDeleteMessage: 'Are you sure you want to delete the selected chats?',\n}\n\n/**\n * Built-in translations (a starter set), one language per file under `src/locales/`. Re-exported\n * here so `import { translations } from 'react-native-chat'` keeps working.\n */\nexport { translations }\n\n/**\n * Resolve the active labels: the `labels` override on top of the built-in\n * translation for `locale` (if any) on top of English defaults.\n */\nexport function resolveLabels (\n locale?: string,\n labels?: Partial<ChatLabels>\n): ChatLabels {\n const matched = matchSupportedLocale(locale)\n const translated = matched ? translations[matched] : undefined\n return { ...defaultLabels, ...translated, ...labels }\n}\n\n/** Interpolate `{name}`-style placeholders in a label. */\nexport function formatLabel (label: string, values: Record<string, string | number>): string {\n return label.replace(/\\{(\\w+)\\}/g, (_match, key) => String(values[key] ?? ''))\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,oBAAoB,EAAEC,YAAY,QAAQ,WAAW;AAkO9D,OAAO,MAAMC,aAAyB,GAAG;EACvCC,WAAW,EAAE,mBAAmB;EAChCC,IAAI,EAAE,MAAM;EACZC,MAAM,EAAE,QAAQ;EAChBC,WAAW,EAAE,uBAAuB;EACpCC,KAAK,EAAE,OAAO;EACdC,KAAK,EAAE,OAAO;EACdC,YAAY,EAAE,eAAe;EAC7BC,YAAY,EAAE,eAAe;EAC7BC,QAAQ,EAAE,UAAU;EACpBC,yBAAyB,EAAE,uBAAuB;EAClDC,aAAa,EAAE,yBAAyB;EACxCC,UAAU,EAAE,oBAAoB;EAChCC,OAAO,EAAE,SAAS;EAClBC,MAAM,EAAE,QAAQ;EAChBC,gBAAgB,EAAE,0BAA0B;EAC5CC,QAAQ,EAAE,qBAAqB;EAC/BC,WAAW,EAAE,sBAAsB;EACnCC,WAAW,EAAE,eAAe;EAC5BC,aAAa,EAAE,mCAAmC;EAClDC,YAAY,EAAE,gBAAgB;EAC9BC,aAAa,EAAE,4BAA4B;EAC3CC,uBAAuB,EAAE,+CAA+C;EACxEC,uBAAuB,EAAE,+CAA+C;EACxEC,qBAAqB,EAAE,uBAAuB;EAC9CC,qBAAqB,EAAE,uBAAuB;EAC9CC,mBAAmB,EAAE,yBAAyB;EAC9CC,kBAAkB,EAAE,yBAAyB;EAC7CC,iBAAiB,EAAE,mFAAmF;EACtGC,EAAE,EAAE,IAAI;EACRC,YAAY,EAAE,2CAA2C;EACzDC,wBAAwB,EAAE,uDAAuD;EACjFC,wBAAwB,EAAE,kDAAkD;EAC5EC,gBAAgB,EAAE,oBAAoB;EACtCC,kBAAkB,EAAE,sBAAsB;EAC1CC,WAAW,EAAE,OAAO;EACpBC,UAAU,EAAE,MAAM;EAClBC,SAAS,EAAE,KAAK;EAChBC,WAAW,EAAE,OAAO;EACpBC,UAAU,EAAE,MAAM;EAClBC,aAAa,EAAE,SAAS;EACxBC,YAAY,EAAE,QAAQ;EACtBC,WAAW,EAAE,OAAO;EACpBC,WAAW,EAAE,cAAc;EAC3BC,WAAW,EAAE,eAAe;EAC5BC,YAAY,EAAE,kBAAkB;EAChCC,YAAY,EAAE,kBAAkB;EAChCC,SAAS,EAAE,cAAc;EACzBC,eAAe,EAAE,UAAU;EAC3BC,WAAW,EAAE,iBAAiB;EAC9BC,YAAY,EAAE,SAAS;EACvBC,YAAY,EAAE,SAAS;EACvBC,UAAU,EAAE,OAAO;EACnBC,cAAc,EAAE,gBAAgB;EAChCC,WAAW,EAAE,OAAO;EACpBC,cAAc,EAAE,UAAU;EAC1BC,SAAS,EAAE,WAAW;EACtBC,YAAY,EAAE,QAAQ;EACtBC,aAAa,EAAE,SAAS;EACxBC,UAAU,EAAE,MAAM;EAClBC,cAAc,EAAE,UAAU;EAC1BC,YAAY,EAAE,QAAQ;EACtBC,aAAa,EAAE,kBAAkB;EACjCC,kBAAkB,EAAE,0BAA0B;EAC9CC,cAAc,EAAE,aAAa;EAC7BC,sBAAsB,EAAE,wBAAwB;EAChDC,kBAAkB,EAAE,0CAA0C;EAC9DC,cAAc,EAAE,eAAe;EAC/BC,uBAAuB,EAAE,qBAAqB;EAC9CC,gBAAgB,EAAE,uBAAuB;EACzCC,oBAAoB,EAAE,uEAAuE;EAC7FC,cAAc,EAAE,yBAAyB;EACzCC,aAAa,EAAE,2CAA2C;EAC1DC,cAAc,EAAE,iBAAiB;EACjCC,kBAAkB,EAAE,oBAAoB;EACxCC,eAAe,EAAE,kBAAkB;EACnCC,YAAY,EAAE,QAAQ;EACtBC,eAAe,EAAE,kBAAkB;EACnCC,aAAa,EAAE,OAAO;EACtBC,cAAc,EAAE,QAAQ;EACxBC,gBAAgB,EAAE,gBAAgB;EAClCC,eAAe,EAAE,SAAS;EAC1BC,iBAAiB,EAAE,WAAW;EAC9BC,YAAY,EAAE,MAAM;EACpBC,cAAc,EAAE,QAAQ;EACxBC,eAAe,EAAE,aAAa;EAC9BC,YAAY,EAAE,MAAM;EACpBC,aAAa,EAAE,mBAAmB;EAClCC,iBAAiB,EAAE,gBAAgB;EACnCC,YAAY,EAAE,QAAQ;EACtBC,gBAAgB,EAAE,kBAAkB;EACpCC,eAAe,EAAE,+BAA+B;EAChDC,gBAAgB,EAAE,sCAAsC;EACxDC,oBAAoB,EAAE,2BAA2B;EACjDC,wBAAwB,EAAE,qCAAqC;EAC/DC,oBAAoB,EAAE,2BAA2B;EACjDC,wBAAwB,EAAE,qCAAqC;EAC/DC,kBAAkB,EAAE,iBAAiB;EACrCC,sBAAsB,EAAE,2BAA2B;EACnDC,kBAAkB,EAAE,iBAAiB;EACrCC,sBAAsB,EAAE,2BAA2B;EACnDC,iBAAiB,EAAE,gBAAgB;EACnCC,qBAAqB,EAAE,0BAA0B;EACjDC,qBAAqB,EAAE,oBAAoB;EAC3CC,yBAAyB,EAAE,8BAA8B;EACzDC,aAAa,EAAE,QAAQ;EACvBC,WAAW,EAAE,KAAK;EAClBC,aAAa,EAAE,OAAO;EACtBC,YAAY,EAAE,MAAM;EACpBC,mBAAmB,EAAE,aAAa;EAClCC,uBAAuB,EAAE,sBAAsB;EAC/CC,qBAAqB,EAAE;AACzB,CAAC;;AAED;AACA;AACA;AACA;AACA,SAAShH,YAAY;;AAErB;AACA;AACA;AACA;AACA,OAAO,SAASiH,aAAaA,CAC3BC,MAAe,EACfC,MAA4B,EAChB;EACZ,MAAMC,OAAO,GAAGrH,oBAAoB,CAACmH,MAAM,CAAC;EAC5C,MAAMG,UAAU,GAAGD,OAAO,GAAGpH,YAAY,CAACoH,OAAO,CAAC,GAAGE,SAAS;EAC9D,OAAO;IAAE,GAAGrH,aAAa;IAAE,GAAGoH,UAAU;IAAE,GAAGF;EAAO,CAAC;AACvD;;AAEA;AACA,OAAO,SAASI,WAAWA,CAAEC,KAAa,EAAEC,MAAuC,EAAU;EAC3F,OAAOD,KAAK,CAACE,OAAO,CAAC,YAAY,EAAE,CAACC,MAAM,EAAEC,GAAG,KAAKC,MAAM,CAACJ,MAAM,CAACG,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;AAChF","ignoreList":[]}
package/lib/index.d.ts CHANGED
@@ -29,7 +29,7 @@ export type { EmojiCategoryKey } from './emoji/emojiStore';
29
29
  export { AttachmentMenu } from './attachments/AttachmentMenu';
30
30
  export type { AttachmentMenuProps } from './attachments/AttachmentMenu';
31
31
  export { buildAttachmentMessages, getAttachmentTabs } from './attachments/buildMessages';
32
- export type { AttachmentTab, AttachmentsProps, AttachmentMenuRenderProps, AttachmentPickResult, PickedAttachment } from './attachments/types';
32
+ export type { AttachmentTab, AttachmentsProps, AttachmentMenuRenderProps, AttachmentPickers, AttachmentPickResult, PickedAttachment } from './attachments/types';
33
33
  export { MediaCard } from './components/MediaCard';
34
34
  export { AttachmentSheet } from './components/AttachmentSheet';
35
35
  export { ContextMenu } from './components/ContextMenu';
@@ -49,6 +49,8 @@ export { MessagesContainer } from './MessagesContainer';
49
49
  export { Send } from './Send';
50
50
  export { Time } from './Time';
51
51
  export { ChatAvatar } from './ChatAvatar';
52
+ export { ChatHeader } from './ChatHeader';
53
+ export type { ChatHeaderProps } from './ChatHeader';
52
54
  export { MessageAudio } from './MessageAudio';
53
55
  export { MessageVideo } from './MessageVideo';
54
56
  export { MessageReply } from './components/MessageReply';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,SAAS,CAAA;AAEhC,cAAc,QAAQ,CAAA;AACtB,cAAc,YAAY,CAAA;AAC1B,OAAO,EAAE,KAAK,EAAE,CAAA;AAChB,cAAc,eAAe,CAAA;AAC7B,cAAc,SAAS,CAAA;AACvB,cAAc,cAAc,CAAA;AAC5B,cAAc,SAAS,CAAA;AACvB,cAAc,aAAa,CAAA;AAC3B,cAAc,UAAU,CAAA;AACxB,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA;AACvB,cAAc,QAAQ,CAAA;AACtB,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC7C,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,YAAY,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAA;AACzF,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAC/E,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,YAAY,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AACvE,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AACxF,YAAY,EACV,aAAa,EACb,gBAAgB,EAChB,yBAAyB,EACzB,iBAAiB,EACjB,oBAAoB,EACpB,gBAAgB,EACjB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACtD,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AAC3F,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAC1D,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACjF,OAAO,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAC7F,OAAO,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAC7F,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAA;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAC1D,YAAY,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AACnE,YAAY,EACV,2BAA2B,EAC3B,0BAA0B,EAC1B,YAAY,EACb,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACvE,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAChF,OAAO,EACL,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,eAAe,EACf,oBAAoB,EACpB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,SAAS,EACT,WAAW,EACZ,MAAM,YAAY,CAAA;AACnB,YAAY,EACV,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACd,MAAM,YAAY,CAAA;AACnB,YAAY,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAC5F,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,YAAY,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAChD,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAClD,OAAO,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAA;AAChF,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAClD,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAC5E,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;AACtF,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA"}
package/lib/index.js CHANGED
@@ -44,6 +44,7 @@ export { MessagesContainer } from './MessagesContainer';
44
44
  export { Send } from './Send';
45
45
  export { Time } from './Time';
46
46
  export { ChatAvatar } from './ChatAvatar';
47
+ export { ChatHeader } from './ChatHeader';
47
48
  export { MessageAudio } from './MessageAudio';
48
49
  export { MessageVideo } from './MessageVideo';
49
50
  export { MessageReply } from './components/MessageReply';