@aws-amplify/ui-react-native 0.0.0-in-app-messaging-20220826014803

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 (242) hide show
  1. package/.eslintrc.js +100 -0
  2. package/.lintstagedrc.js +6 -0
  3. package/.turbo/turbo-build.log +4 -0
  4. package/CHANGELOG.md +11 -0
  5. package/LICENSE +201 -0
  6. package/README.md +25 -0
  7. package/babel.config.js +3 -0
  8. package/dist/InAppMessaging/components/BannerMessage/BannerMessage.d.ts +3 -0
  9. package/dist/InAppMessaging/components/BannerMessage/BannerMessage.js +16 -0
  10. package/dist/InAppMessaging/components/BannerMessage/index.d.ts +2 -0
  11. package/dist/InAppMessaging/components/BannerMessage/index.js +1 -0
  12. package/dist/InAppMessaging/components/BannerMessage/styles.d.ts +7 -0
  13. package/dist/InAppMessaging/components/BannerMessage/styles.js +77 -0
  14. package/dist/InAppMessaging/components/BannerMessage/types.d.ts +12 -0
  15. package/dist/InAppMessaging/components/BannerMessage/types.js +1 -0
  16. package/dist/InAppMessaging/components/CarouselMessage/CarouselMessage.d.ts +3 -0
  17. package/dist/InAppMessaging/components/CarouselMessage/CarouselMessage.js +20 -0
  18. package/dist/InAppMessaging/components/CarouselMessage/CarouselMessageItem.d.ts +3 -0
  19. package/dist/InAppMessaging/components/CarouselMessage/CarouselMessageItem.js +18 -0
  20. package/dist/InAppMessaging/components/CarouselMessage/index.d.ts +2 -0
  21. package/dist/InAppMessaging/components/CarouselMessage/index.js +1 -0
  22. package/dist/InAppMessaging/components/CarouselMessage/styles.d.ts +5 -0
  23. package/dist/InAppMessaging/components/CarouselMessage/styles.js +98 -0
  24. package/dist/InAppMessaging/components/CarouselMessage/types.d.ts +18 -0
  25. package/dist/InAppMessaging/components/CarouselMessage/types.js +1 -0
  26. package/dist/InAppMessaging/components/FullScreenMessage/FullScreenMessage.d.ts +3 -0
  27. package/dist/InAppMessaging/components/FullScreenMessage/FullScreenMessage.js +18 -0
  28. package/dist/InAppMessaging/components/FullScreenMessage/index.d.ts +2 -0
  29. package/dist/InAppMessaging/components/FullScreenMessage/index.js +1 -0
  30. package/dist/InAppMessaging/components/FullScreenMessage/styles.d.ts +3 -0
  31. package/dist/InAppMessaging/components/FullScreenMessage/styles.js +86 -0
  32. package/dist/InAppMessaging/components/FullScreenMessage/types.d.ts +6 -0
  33. package/dist/InAppMessaging/components/FullScreenMessage/types.js +1 -0
  34. package/dist/InAppMessaging/components/InAppMessageDisplay/InAppMessageDisplay.d.ts +10 -0
  35. package/dist/InAppMessaging/components/InAppMessageDisplay/InAppMessageDisplay.js +29 -0
  36. package/dist/InAppMessaging/components/InAppMessageDisplay/handleMessageLinkAction.d.ts +3 -0
  37. package/dist/InAppMessaging/components/InAppMessageDisplay/handleMessageLinkAction.js +24 -0
  38. package/dist/InAppMessaging/components/InAppMessageDisplay/index.d.ts +2 -0
  39. package/dist/InAppMessaging/components/InAppMessageDisplay/index.js +1 -0
  40. package/dist/InAppMessaging/components/InAppMessageDisplay/types.d.ts +24 -0
  41. package/dist/InAppMessaging/components/InAppMessageDisplay/types.js +1 -0
  42. package/dist/InAppMessaging/components/MessageLayout/MessageLayout.d.ts +3 -0
  43. package/dist/InAppMessaging/components/MessageLayout/MessageLayout.js +34 -0
  44. package/dist/InAppMessaging/components/MessageLayout/index.d.ts +1 -0
  45. package/dist/InAppMessaging/components/MessageLayout/index.js +1 -0
  46. package/dist/InAppMessaging/components/MessageLayout/types.d.ts +7 -0
  47. package/dist/InAppMessaging/components/MessageLayout/types.js +1 -0
  48. package/dist/InAppMessaging/components/MessageWrapper/MessageWrapper.d.ts +3 -0
  49. package/dist/InAppMessaging/components/MessageWrapper/MessageWrapper.js +20 -0
  50. package/dist/InAppMessaging/components/MessageWrapper/index.d.ts +2 -0
  51. package/dist/InAppMessaging/components/MessageWrapper/index.js +1 -0
  52. package/dist/InAppMessaging/components/MessageWrapper/styles.d.ts +2 -0
  53. package/dist/InAppMessaging/components/MessageWrapper/styles.js +5 -0
  54. package/dist/InAppMessaging/components/MessageWrapper/types.d.ts +10 -0
  55. package/dist/InAppMessaging/components/MessageWrapper/types.js +1 -0
  56. package/dist/InAppMessaging/components/ModalMessage/ModalMessage.d.ts +3 -0
  57. package/dist/InAppMessaging/components/ModalMessage/ModalMessage.js +18 -0
  58. package/dist/InAppMessaging/components/ModalMessage/index.d.ts +2 -0
  59. package/dist/InAppMessaging/components/ModalMessage/index.js +1 -0
  60. package/dist/InAppMessaging/components/ModalMessage/styles.d.ts +4 -0
  61. package/dist/InAppMessaging/components/ModalMessage/styles.js +99 -0
  62. package/dist/InAppMessaging/components/ModalMessage/types.d.ts +6 -0
  63. package/dist/InAppMessaging/components/ModalMessage/types.js +1 -0
  64. package/dist/InAppMessaging/components/index.d.ts +6 -0
  65. package/dist/InAppMessaging/components/index.js +2 -0
  66. package/dist/InAppMessaging/components/withInAppMessaging/index.d.ts +1 -0
  67. package/dist/InAppMessaging/components/withInAppMessaging/index.js +1 -0
  68. package/dist/InAppMessaging/components/withInAppMessaging/withInAppMessaging.d.ts +5 -0
  69. package/dist/InAppMessaging/components/withInAppMessaging/withInAppMessaging.js +11 -0
  70. package/dist/InAppMessaging/constants.d.ts +31 -0
  71. package/dist/InAppMessaging/constants.js +43 -0
  72. package/dist/InAppMessaging/hooks/index.d.ts +2 -0
  73. package/dist/InAppMessaging/hooks/index.js +2 -0
  74. package/dist/InAppMessaging/hooks/useMessageImage/constants.d.ts +8 -0
  75. package/dist/InAppMessaging/hooks/useMessageImage/constants.js +18 -0
  76. package/dist/InAppMessaging/hooks/useMessageImage/index.d.ts +2 -0
  77. package/dist/InAppMessaging/hooks/useMessageImage/index.js +1 -0
  78. package/dist/InAppMessaging/hooks/useMessageImage/types.d.ts +15 -0
  79. package/dist/InAppMessaging/hooks/useMessageImage/types.js +6 -0
  80. package/dist/InAppMessaging/hooks/useMessageImage/useMessageImage.d.ts +10 -0
  81. package/dist/InAppMessaging/hooks/useMessageImage/useMessageImage.js +50 -0
  82. package/dist/InAppMessaging/hooks/useMessageImage/utils.d.ts +4 -0
  83. package/dist/InAppMessaging/hooks/useMessageImage/utils.js +56 -0
  84. package/dist/InAppMessaging/hooks/useMessageProps/index.d.ts +2 -0
  85. package/dist/InAppMessaging/hooks/useMessageProps/index.js +1 -0
  86. package/dist/InAppMessaging/hooks/useMessageProps/types.d.ts +109 -0
  87. package/dist/InAppMessaging/hooks/useMessageProps/types.js +1 -0
  88. package/dist/InAppMessaging/hooks/useMessageProps/useMessageProps.d.ts +12 -0
  89. package/dist/InAppMessaging/hooks/useMessageProps/useMessageProps.js +49 -0
  90. package/dist/InAppMessaging/hooks/useMessageProps/utils.d.ts +43 -0
  91. package/dist/InAppMessaging/hooks/useMessageProps/utils.js +192 -0
  92. package/dist/InAppMessaging/index.d.ts +2 -0
  93. package/dist/InAppMessaging/index.js +2 -0
  94. package/dist/__mocks__/react-native-safe-area-context.d.ts +3 -0
  95. package/dist/__mocks__/react-native-safe-area-context.js +4 -0
  96. package/dist/assets/close.png +0 -0
  97. package/dist/assets/index.d.ts +5 -0
  98. package/dist/assets/index.js +4 -0
  99. package/dist/assets/index.ts +7 -0
  100. package/dist/hooks/index.d.ts +1 -0
  101. package/dist/hooks/index.js +1 -0
  102. package/dist/hooks/useDeviceOrientation/index.d.ts +1 -0
  103. package/dist/hooks/useDeviceOrientation/index.js +1 -0
  104. package/dist/hooks/useDeviceOrientation/useDeviceOrientation.d.ts +6 -0
  105. package/dist/hooks/useDeviceOrientation/useDeviceOrientation.js +33 -0
  106. package/dist/index.d.ts +1 -0
  107. package/dist/index.js +1 -0
  108. package/dist/primitives/Button/Button.d.ts +3 -0
  109. package/dist/primitives/Button/Button.js +8 -0
  110. package/dist/primitives/Button/index.d.ts +2 -0
  111. package/dist/primitives/Button/index.js +1 -0
  112. package/dist/primitives/Button/styles.d.ts +2 -0
  113. package/dist/primitives/Button/styles.js +4 -0
  114. package/dist/primitives/Button/types.d.ts +7 -0
  115. package/dist/primitives/Button/types.js +1 -0
  116. package/dist/primitives/Carousel/Carousel.d.ts +3 -0
  117. package/dist/primitives/Carousel/Carousel.js +58 -0
  118. package/dist/primitives/Carousel/CarouselPageIndicator.d.ts +3 -0
  119. package/dist/primitives/Carousel/CarouselPageIndicator.js +10 -0
  120. package/dist/primitives/Carousel/constants.d.ts +9 -0
  121. package/dist/primitives/Carousel/constants.js +18 -0
  122. package/dist/primitives/Carousel/index.d.ts +3 -0
  123. package/dist/primitives/Carousel/index.js +2 -0
  124. package/dist/primitives/Carousel/styles.d.ts +2 -0
  125. package/dist/primitives/Carousel/styles.js +11 -0
  126. package/dist/primitives/Carousel/types.d.ts +19 -0
  127. package/dist/primitives/Carousel/types.js +1 -0
  128. package/dist/primitives/IconButton/IconButton.d.ts +3 -0
  129. package/dist/primitives/IconButton/IconButton.js +9 -0
  130. package/dist/primitives/IconButton/index.d.ts +2 -0
  131. package/dist/primitives/IconButton/index.js +1 -0
  132. package/dist/primitives/IconButton/styles.d.ts +2 -0
  133. package/dist/primitives/IconButton/styles.js +9 -0
  134. package/dist/primitives/IconButton/types.d.ts +18 -0
  135. package/dist/primitives/IconButton/types.js +1 -0
  136. package/dist/primitives/index.d.ts +3 -0
  137. package/dist/primitives/index.js +3 -0
  138. package/dist/utils/index.d.ts +1 -0
  139. package/dist/utils/index.js +4 -0
  140. package/jest.config.js +20 -0
  141. package/package.json +55 -0
  142. package/src/InAppMessaging/components/BannerMessage/BannerMessage.tsx +37 -0
  143. package/src/InAppMessaging/components/BannerMessage/__tests__/BannerMessage.spec.tsx +138 -0
  144. package/src/InAppMessaging/components/BannerMessage/__tests__/__snapshots__/BannerMessage.spec.tsx.snap +224 -0
  145. package/src/InAppMessaging/components/BannerMessage/index.ts +2 -0
  146. package/src/InAppMessaging/components/BannerMessage/styles.ts +105 -0
  147. package/src/InAppMessaging/components/BannerMessage/types.ts +15 -0
  148. package/src/InAppMessaging/components/CarouselMessage/CarouselMessage.tsx +42 -0
  149. package/src/InAppMessaging/components/CarouselMessage/CarouselMessageItem.tsx +37 -0
  150. package/src/InAppMessaging/components/CarouselMessage/__tests__/CarouselMessage.spec.tsx +55 -0
  151. package/src/InAppMessaging/components/CarouselMessage/__tests__/CarouselMessageItem.spec.tsx +56 -0
  152. package/src/InAppMessaging/components/CarouselMessage/__tests__/__snapshots__/CarouselMessage.spec.tsx.snap +86 -0
  153. package/src/InAppMessaging/components/CarouselMessage/__tests__/__snapshots__/CarouselMessageItem.spec.tsx.snap +248 -0
  154. package/src/InAppMessaging/components/CarouselMessage/index.ts +2 -0
  155. package/src/InAppMessaging/components/CarouselMessage/styles.ts +125 -0
  156. package/src/InAppMessaging/components/CarouselMessage/types.ts +28 -0
  157. package/src/InAppMessaging/components/FullScreenMessage/FullScreenMessage.tsx +38 -0
  158. package/src/InAppMessaging/components/FullScreenMessage/__tests__/FullScreenMessage.spec.tsx +53 -0
  159. package/src/InAppMessaging/components/FullScreenMessage/__tests__/__snapshots__/FullScreenMessage.spec.tsx.snap +236 -0
  160. package/src/InAppMessaging/components/FullScreenMessage/index.ts +2 -0
  161. package/src/InAppMessaging/components/FullScreenMessage/styles.ts +106 -0
  162. package/src/InAppMessaging/components/FullScreenMessage/types.ts +7 -0
  163. package/src/InAppMessaging/components/InAppMessageDisplay/InAppMessageDisplay.tsx +48 -0
  164. package/src/InAppMessaging/components/InAppMessageDisplay/__tests__/InAppMessageDisplay.spec.tsx +33 -0
  165. package/src/InAppMessaging/components/InAppMessageDisplay/__tests__/__snapshots__/InAppMessageDisplay.spec.tsx.snap +9 -0
  166. package/src/InAppMessaging/components/InAppMessageDisplay/__tests__/handleMessageLinkAction.spec.ts +51 -0
  167. package/src/InAppMessaging/components/InAppMessageDisplay/handleMessageLinkAction.ts +30 -0
  168. package/src/InAppMessaging/components/InAppMessageDisplay/index.ts +2 -0
  169. package/src/InAppMessaging/components/InAppMessageDisplay/types.ts +32 -0
  170. package/src/InAppMessaging/components/MessageLayout/MessageLayout.tsx +102 -0
  171. package/src/InAppMessaging/components/MessageLayout/index.ts +1 -0
  172. package/src/InAppMessaging/components/MessageLayout/types.ts +15 -0
  173. package/src/InAppMessaging/components/MessageWrapper/MessageWrapper.tsx +34 -0
  174. package/src/InAppMessaging/components/MessageWrapper/__tests__/MessageWrapper.spec.tsx +19 -0
  175. package/src/InAppMessaging/components/MessageWrapper/__tests__/__snapshots__/MessageWrapper.spec.tsx.snap +35 -0
  176. package/src/InAppMessaging/components/MessageWrapper/index.ts +2 -0
  177. package/src/InAppMessaging/components/MessageWrapper/styles.ts +7 -0
  178. package/src/InAppMessaging/components/MessageWrapper/types.ts +12 -0
  179. package/src/InAppMessaging/components/ModalMessage/ModalMessage.tsx +37 -0
  180. package/src/InAppMessaging/components/ModalMessage/__tests__/ModalMessage.spec.tsx +155 -0
  181. package/src/InAppMessaging/components/ModalMessage/__tests__/__snapshots__/ModalMessage.spec.tsx.snap +323 -0
  182. package/src/InAppMessaging/components/ModalMessage/index.ts +2 -0
  183. package/src/InAppMessaging/components/ModalMessage/styles.ts +132 -0
  184. package/src/InAppMessaging/components/ModalMessage/types.ts +8 -0
  185. package/src/InAppMessaging/components/index.ts +6 -0
  186. package/src/InAppMessaging/components/withInAppMessaging/__tests__/__snapshots__/withInAppMessaging.spec.tsx.snap +3 -0
  187. package/src/InAppMessaging/components/withInAppMessaging/__tests__/withInAppMessaging.spec.tsx +15 -0
  188. package/src/InAppMessaging/components/withInAppMessaging/index.ts +1 -0
  189. package/src/InAppMessaging/components/withInAppMessaging/withInAppMessaging.tsx +18 -0
  190. package/src/InAppMessaging/constants.ts +56 -0
  191. package/src/InAppMessaging/hooks/index.ts +9 -0
  192. package/src/InAppMessaging/hooks/useMessageImage/__tests__/useMessageImage.spec.ts +141 -0
  193. package/src/InAppMessaging/hooks/useMessageImage/__tests__/utils.spec.ts +107 -0
  194. package/src/InAppMessaging/hooks/useMessageImage/constants.ts +27 -0
  195. package/src/InAppMessaging/hooks/useMessageImage/index.ts +2 -0
  196. package/src/InAppMessaging/hooks/useMessageImage/types.ts +18 -0
  197. package/src/InAppMessaging/hooks/useMessageImage/useMessageImage.ts +74 -0
  198. package/src/InAppMessaging/hooks/useMessageImage/utils.ts +80 -0
  199. package/src/InAppMessaging/hooks/useMessageProps/__tests__/__snapshots__/utils.spec.ts.snap +223 -0
  200. package/src/InAppMessaging/hooks/useMessageProps/__tests__/useMessageProps.spec.ts +162 -0
  201. package/src/InAppMessaging/hooks/useMessageProps/__tests__/utils.spec.ts +354 -0
  202. package/src/InAppMessaging/hooks/useMessageProps/index.ts +8 -0
  203. package/src/InAppMessaging/hooks/useMessageProps/types.ts +131 -0
  204. package/src/InAppMessaging/hooks/useMessageProps/useMessageProps.ts +70 -0
  205. package/src/InAppMessaging/hooks/useMessageProps/utils.ts +274 -0
  206. package/src/InAppMessaging/index.ts +14 -0
  207. package/src/__mocks__/react-native-safe-area-context.ts +6 -0
  208. package/src/__tests__/__snapshots__/index.spec.ts.snap +15 -0
  209. package/src/__tests__/index.spec.ts +8 -0
  210. package/src/assets/close.png +0 -0
  211. package/src/assets/index.ts +7 -0
  212. package/src/hooks/index.ts +4 -0
  213. package/src/hooks/useDeviceOrientation/__tests__/useDeviceOrientation.spec.ts +87 -0
  214. package/src/hooks/useDeviceOrientation/index.ts +4 -0
  215. package/src/hooks/useDeviceOrientation/useDeviceOrientation.ts +47 -0
  216. package/src/index.ts +1 -0
  217. package/src/primitives/Button/Button.tsx +21 -0
  218. package/src/primitives/Button/__tests__/Button.spec.tsx +24 -0
  219. package/src/primitives/Button/__tests__/__snapshots__/Button.spec.tsx.snap +52 -0
  220. package/src/primitives/Button/index.ts +2 -0
  221. package/src/primitives/Button/styles.ts +6 -0
  222. package/src/primitives/Button/types.ts +9 -0
  223. package/src/primitives/Carousel/Carousel.tsx +115 -0
  224. package/src/primitives/Carousel/CarouselPageIndicator.tsx +39 -0
  225. package/src/primitives/Carousel/__tests__/Carousel.spec.tsx +185 -0
  226. package/src/primitives/Carousel/__tests__/CarouselPageIndicator.spec.tsx +71 -0
  227. package/src/primitives/Carousel/__tests__/__snapshots__/Carousel.spec.tsx.snap +216 -0
  228. package/src/primitives/Carousel/__tests__/__snapshots__/CarouselPageIndicator.spec.tsx.snap +191 -0
  229. package/src/primitives/Carousel/constants.ts +25 -0
  230. package/src/primitives/Carousel/index.ts +3 -0
  231. package/src/primitives/Carousel/styles.ts +14 -0
  232. package/src/primitives/Carousel/types.ts +22 -0
  233. package/src/primitives/IconButton/IconButton.tsx +20 -0
  234. package/src/primitives/IconButton/__tests__/IconButton.spec.tsx +13 -0
  235. package/src/primitives/IconButton/__tests__/__snapshots__/IconButton.spec.tsx.snap +34 -0
  236. package/src/primitives/IconButton/index.ts +2 -0
  237. package/src/primitives/IconButton/styles.ts +16 -0
  238. package/src/primitives/IconButton/types.ts +27 -0
  239. package/src/primitives/index.ts +3 -0
  240. package/src/utils/index.ts +6 -0
  241. package/tsconfig.dist.json +4 -0
  242. package/tsconfig.json +21 -0
@@ -0,0 +1,18 @@
1
+ import { StyleProp, ViewStyle } from 'react-native';
2
+ import { CarouselMessageCommonProps, MessageComponentBaseProps } from '@aws-amplify/ui-react-core';
3
+ import { MessageDefaultStyle, MessageOverrideStyle } from '../../hooks';
4
+ interface CarouselMessageOverrideStyle extends MessageOverrideStyle {
5
+ pageIndicatorActive?: StyleProp<ViewStyle>;
6
+ pageIndicatorInactive?: StyleProp<ViewStyle>;
7
+ }
8
+ export interface CarouselMessageProps extends CarouselMessageCommonProps<CarouselMessageOverrideStyle | undefined> {
9
+ }
10
+ export interface CarouselMessageItemProps extends MessageComponentBaseProps<CarouselMessageOverrideStyle> {
11
+ }
12
+ export interface CarouselMessageStyle extends MessageDefaultStyle {
13
+ }
14
+ export interface CarouselMessageComponentStyle {
15
+ pageIndicatorActive: ViewStyle;
16
+ pageIndicatorInactive: ViewStyle;
17
+ }
18
+ export {};
@@ -0,0 +1,3 @@
1
+ /// <reference types="react" />
2
+ import { FullScreenMessageProps } from './types';
3
+ export default function FullScreenMessage(props: FullScreenMessageProps): JSX.Element | null;
@@ -0,0 +1,18 @@
1
+ import React from 'react';
2
+ import { useDeviceOrientation } from '../../../hooks';
3
+ import { useMessageProps } from '../../hooks';
4
+ import { MessageLayout } from '../MessageLayout';
5
+ import { MessageWrapper } from '../MessageWrapper';
6
+ import { getLandscapeStyles, getPortraitStyles } from './styles';
7
+ export default function FullScreenMessage(props) {
8
+ const { deviceOrientation, isPortraitMode } = useDeviceOrientation();
9
+ const messageProps = useMessageProps(props, isPortraitMode ? getPortraitStyles : getLandscapeStyles);
10
+ const { shouldRenderMessage, styles } = messageProps;
11
+ if (!shouldRenderMessage) {
12
+ return null;
13
+ }
14
+ const { wrapper, ...messageStyles } = styles;
15
+ return (<MessageWrapper style={wrapper}>
16
+ <MessageLayout {...props} {...messageProps} orientation={deviceOrientation} styles={messageStyles}/>
17
+ </MessageWrapper>);
18
+ }
@@ -0,0 +1,2 @@
1
+ export { default as FullScreenMessage } from './FullScreenMessage';
2
+ export { FullScreenMessageProps } from './types';
@@ -0,0 +1 @@
1
+ export { default as FullScreenMessage } from './FullScreenMessage';
@@ -0,0 +1,3 @@
1
+ import { GetDefaultStyle } from '../../hooks';
2
+ export declare const getPortraitStyles: GetDefaultStyle;
3
+ export declare const getLandscapeStyles: GetDefaultStyle;
@@ -0,0 +1,86 @@
1
+ import { BORDER_RADIUS_BASE, COLOR_LIGHT_GREY, COLOR_WHITE, FONT_SIZE_BASE, FONT_SIZE_LARGE, FONT_WEIGHT_BASE, LINE_HEIGHT_BASE, LINE_HEIGHT_LARGE, SPACING_EXTRA_LARGE, SPACING_LARGE, SPACING_MEDIUM, } from '../../constants';
2
+ const commonStyles = {
3
+ body: {
4
+ fontSize: FONT_SIZE_BASE,
5
+ fontWeight: FONT_WEIGHT_BASE,
6
+ lineHeight: LINE_HEIGHT_BASE,
7
+ },
8
+ buttonContainer: {
9
+ backgroundColor: COLOR_LIGHT_GREY,
10
+ borderRadius: BORDER_RADIUS_BASE,
11
+ flex: 1,
12
+ margin: SPACING_MEDIUM,
13
+ padding: SPACING_LARGE,
14
+ },
15
+ buttonsContainer: {
16
+ flexDirection: 'row',
17
+ justifyContent: 'center',
18
+ },
19
+ buttonText: {
20
+ fontSize: FONT_SIZE_BASE,
21
+ fontWeight: FONT_WEIGHT_BASE,
22
+ lineHeight: LINE_HEIGHT_BASE,
23
+ textAlign: 'center',
24
+ },
25
+ container: {
26
+ flex: 1,
27
+ padding: SPACING_EXTRA_LARGE,
28
+ },
29
+ contentContainer: {
30
+ flex: 1,
31
+ },
32
+ header: {
33
+ fontSize: FONT_SIZE_LARGE,
34
+ fontWeight: FONT_WEIGHT_BASE,
35
+ lineHeight: LINE_HEIGHT_LARGE,
36
+ },
37
+ iconButton: {
38
+ alignSelf: 'flex-start',
39
+ marginBottom: SPACING_MEDIUM,
40
+ marginLeft: 'auto',
41
+ marginRight: SPACING_MEDIUM,
42
+ },
43
+ imageContainer: {
44
+ alignItems: 'center',
45
+ margin: SPACING_LARGE,
46
+ },
47
+ textContainer: {
48
+ paddingHorizontal: SPACING_MEDIUM,
49
+ },
50
+ wrapper: {
51
+ backgroundColor: COLOR_WHITE,
52
+ },
53
+ };
54
+ export const getPortraitStyles = (imageDimensions) => ({
55
+ ...commonStyles,
56
+ buttonsContainer: {
57
+ ...commonStyles.buttonsContainer,
58
+ marginTop: 'auto',
59
+ },
60
+ image: imageDimensions,
61
+ textContainer: {
62
+ ...commonStyles.textContainer,
63
+ marginVertical: SPACING_LARGE,
64
+ },
65
+ });
66
+ export const getLandscapeStyles = (imageDimensions) => ({
67
+ ...commonStyles,
68
+ contentContainer: {
69
+ ...commonStyles.contentContainer,
70
+ flexDirection: 'row',
71
+ },
72
+ image: { ...imageDimensions },
73
+ imageContainer: {
74
+ ...commonStyles.imageContainer,
75
+ justifyContent: 'center',
76
+ },
77
+ textContainer: {
78
+ ...commonStyles.textContainer,
79
+ flex: 1,
80
+ justifyContent: 'center',
81
+ },
82
+ wrapper: {
83
+ ...commonStyles.wrapper,
84
+ flex: 1,
85
+ },
86
+ });
@@ -0,0 +1,6 @@
1
+ import { FullScreenMessageCommonProps } from '@aws-amplify/ui-react-core';
2
+ import { MessageDefaultStyle, MessageOverrideStyle } from '../../hooks';
3
+ export interface FullScreenMessageProps extends FullScreenMessageCommonProps<MessageOverrideStyle | undefined> {
4
+ }
5
+ export interface FullScreenMessageStyle extends MessageDefaultStyle {
6
+ }
@@ -0,0 +1,10 @@
1
+ /// <reference types="react" />
2
+ import { InAppMessageDisplayProps } from './types';
3
+ declare function InAppMessageDisplay({ components: overrideComponents, }: InAppMessageDisplayProps): JSX.Element | null;
4
+ declare namespace InAppMessageDisplay {
5
+ var BannerMessage: typeof import("../BannerMessage").BannerMessage;
6
+ var CarouselMessage: typeof import("../CarouselMessage").CarouselMessage;
7
+ var FullScreenMessage: typeof import("../FullScreenMessage").FullScreenMessage;
8
+ var ModalMessage: typeof import("../ModalMessage").ModalMessage;
9
+ }
10
+ export default InAppMessageDisplay;
@@ -0,0 +1,29 @@
1
+ import React from 'react';
2
+ import { handleMessageAction, useMessage, } from '@aws-amplify/ui-react-core';
3
+ import { BannerMessage } from '../BannerMessage';
4
+ import { FullScreenMessage } from '../FullScreenMessage';
5
+ import { CarouselMessage } from '../CarouselMessage';
6
+ import { ModalMessage } from '../ModalMessage';
7
+ import handleMessageLinkAction from './handleMessageLinkAction';
8
+ const platformComponents = {
9
+ BannerMessage,
10
+ CarouselMessage,
11
+ FullScreenMessage,
12
+ ModalMessage,
13
+ };
14
+ const onMessageAction = ({ action, url }) => {
15
+ handleMessageAction({ action, url, handleMessageLinkAction });
16
+ };
17
+ function InAppMessageDisplay({ components: overrideComponents, }) {
18
+ const components = React.useMemo(() => ({ ...platformComponents, ...overrideComponents }), [overrideComponents]);
19
+ const { Component, props } = useMessage({
20
+ components,
21
+ onMessageAction,
22
+ });
23
+ return <Component {...props}/>;
24
+ }
25
+ InAppMessageDisplay.BannerMessage = BannerMessage;
26
+ InAppMessageDisplay.CarouselMessage = CarouselMessage;
27
+ InAppMessageDisplay.FullScreenMessage = FullScreenMessage;
28
+ InAppMessageDisplay.ModalMessage = ModalMessage;
29
+ export default InAppMessageDisplay;
@@ -0,0 +1,3 @@
1
+ import { HandleMessageLinkAction } from '@aws-amplify/ui-react-core';
2
+ declare const handleMessageLinkAction: HandleMessageLinkAction;
3
+ export default handleMessageLinkAction;
@@ -0,0 +1,24 @@
1
+ import { Linking } from 'react-native';
2
+ import { ConsoleLogger as Logger } from '@aws-amplify/core';
3
+ const logger = new Logger('Notifications.InAppMessaging');
4
+ const handleMessageLinkAction = async (url) => {
5
+ let supported = false;
6
+ try {
7
+ supported = await Linking.canOpenURL(url);
8
+ }
9
+ catch (e) {
10
+ logger.warn(`Call to Linking.canOpenURL failed: ${e}`);
11
+ }
12
+ if (!supported) {
13
+ logger.warn(`Unsupported url provided: ${url}`);
14
+ return;
15
+ }
16
+ try {
17
+ logger.info(`Opening url: ${url}`);
18
+ await Linking.openURL(url);
19
+ }
20
+ catch (e) {
21
+ logger.warn(`Call to Linking.openURL failed: ${e}`);
22
+ }
23
+ };
24
+ export default handleMessageLinkAction;
@@ -0,0 +1,2 @@
1
+ export { default as InAppMessageDisplay } from './InAppMessageDisplay';
2
+ export { MessageComponents } from './types';
@@ -0,0 +1 @@
1
+ export { default as InAppMessageDisplay } from './InAppMessageDisplay';
@@ -0,0 +1,24 @@
1
+ import { BannerMessageComponent, CarouselMessageComponent, FullScreenMessageComponent, ModalMessageComponent } from '@aws-amplify/ui-react-core';
2
+ import { BannerMessageProps } from '../BannerMessage';
3
+ import { CarouselMessageProps } from '../CarouselMessage';
4
+ import { FullScreenMessageProps } from '../FullScreenMessage';
5
+ import { ModalMessageProps } from '../ModalMessage';
6
+ declare type BannerStyle = BannerMessageProps['style'];
7
+ declare type CarouselStyle = CarouselMessageProps['style'];
8
+ declare type FullScreenStyle = FullScreenMessageProps['style'];
9
+ declare type ModalStyle = ModalMessageProps['style'];
10
+ export interface MessageDefaultComponents {
11
+ BannerMessage: BannerMessageComponent<BannerStyle>;
12
+ CarouselMessage: CarouselMessageComponent<CarouselStyle>;
13
+ FullScreenMessage: FullScreenMessageComponent<FullScreenStyle>;
14
+ ModalMessage: ModalMessageComponent<ModalStyle>;
15
+ }
16
+ export interface MessageComponents extends Partial<MessageDefaultComponents> {
17
+ }
18
+ export interface InAppMessageDisplayProps {
19
+ /**
20
+ * Message override UI components
21
+ */
22
+ components?: MessageComponents;
23
+ }
24
+ export {};
@@ -0,0 +1,3 @@
1
+ /// <reference types="react" />
2
+ import { LayoutProps } from './types';
3
+ export default function MessageLayout({ orientation, ...props }: LayoutProps): JSX.Element;
@@ -0,0 +1,34 @@
1
+ import React from 'react';
2
+ import { Image, Text, View } from 'react-native';
3
+ import icons from '../../../assets';
4
+ import { Button, IconButton } from '../../../primitives';
5
+ import { ICON_BUTTON_HIT_SLOP, ICON_BUTTON_SIZE, IN_APP_MESSAGING_TEST_ID, } from '../../constants';
6
+ export default function MessageLayout({ orientation, ...props }) {
7
+ const { body, hasButtons, hasPrimaryButton, hasRenderableImage, hasSecondaryButton, header, image, onClose, primaryButton, secondaryButton, styles, } = props;
8
+ const iconButton = (<IconButton color={styles.iconButton.iconColor} hitSlop={ICON_BUTTON_HIT_SLOP} onPress={onClose} size={ICON_BUTTON_SIZE} source={icons.close} style={styles.iconButton.container} testID={IN_APP_MESSAGING_TEST_ID.CLOSE_BUTTON}/>);
9
+ return (<View style={styles.container}>
10
+ <View style={styles.contentContainer}>
11
+ {orientation === 'portrait' && iconButton}
12
+ {hasRenderableImage && (<View style={styles.imageContainer}>
13
+ <Image source={{ uri: image?.src }} style={styles.image} testID={IN_APP_MESSAGING_TEST_ID.IMAGE}/>
14
+ </View>)}
15
+ <View style={styles.textContainer}>
16
+ {header?.content && (<Text style={styles.header} testID={IN_APP_MESSAGING_TEST_ID.HEADER}>
17
+ {header.content}
18
+ </Text>)}
19
+ {body?.content && (<Text style={styles.body} testID={IN_APP_MESSAGING_TEST_ID.BODY}>
20
+ {body.content}
21
+ </Text>)}
22
+ </View>
23
+ {orientation === 'landscape' && iconButton}
24
+ </View>
25
+ {hasButtons && (<View style={styles.buttonsContainer}>
26
+ {hasSecondaryButton && (<Button onPress={secondaryButton?.onAction} style={styles.secondaryButton.container} testID={IN_APP_MESSAGING_TEST_ID.SECONDARY_BUTTON} textStyle={styles.secondaryButton.text}>
27
+ {secondaryButton?.title}
28
+ </Button>)}
29
+ {hasPrimaryButton && (<Button onPress={primaryButton?.onAction} style={styles.primaryButton.container} testID={IN_APP_MESSAGING_TEST_ID.PRIMARY_BUTTON} textStyle={styles.primaryButton.text}>
30
+ {primaryButton?.title}
31
+ </Button>)}
32
+ </View>)}
33
+ </View>);
34
+ }
@@ -0,0 +1 @@
1
+ export { default as MessageLayout } from './MessageLayout';
@@ -0,0 +1 @@
1
+ export { default as MessageLayout } from './MessageLayout';
@@ -0,0 +1,7 @@
1
+ import { MessageComponentBaseProps } from '@aws-amplify/ui-react-core';
2
+ import { DeviceOrientation } from '../../../hooks';
3
+ import { MessageComponentStyles, MessageOverrideStyle, UseMessageProps } from '../../hooks';
4
+ export interface LayoutProps extends Omit<MessageComponentBaseProps<MessageOverrideStyle>, 'style'>, Omit<UseMessageProps, 'shouldRenderMessage' | 'styles'> {
5
+ orientation: DeviceOrientation;
6
+ styles: Omit<MessageComponentStyles, 'wrapper'>;
7
+ }
@@ -0,0 +1,3 @@
1
+ /// <reference types="react" />
2
+ import { MessageWrapperProps } from './types';
3
+ export default function MessageWrapper({ children, disableSafeAreaView, style, }: MessageWrapperProps): JSX.Element;
@@ -0,0 +1,20 @@
1
+ import React from 'react';
2
+ import { Modal } from 'react-native';
3
+ import { SafeAreaProvider, SafeAreaView } from 'react-native-safe-area-context';
4
+ import { styles } from './styles';
5
+ const SUPPORTED_ORIENTATIONS = [
6
+ 'portrait',
7
+ 'portrait-upside-down',
8
+ 'landscape',
9
+ 'landscape-left',
10
+ 'landscape-right',
11
+ ];
12
+ export default function MessageWrapper({ children, disableSafeAreaView, style, }) {
13
+ return (<Modal transparent visible supportedOrientations={SUPPORTED_ORIENTATIONS}>
14
+ <SafeAreaProvider>
15
+ {disableSafeAreaView ? (children) : (<SafeAreaView style={[styles.messageWrapper, style]}>
16
+ {children}
17
+ </SafeAreaView>)}
18
+ </SafeAreaProvider>
19
+ </Modal>);
20
+ }
@@ -0,0 +1,2 @@
1
+ export { default as MessageWrapper } from './MessageWrapper';
2
+ export { MessageWrapperProps, MessageWrapperStyle } from './types';
@@ -0,0 +1 @@
1
+ export { default as MessageWrapper } from './MessageWrapper';
@@ -0,0 +1,2 @@
1
+ import { MessageWrapperStyle } from './types';
2
+ export declare const styles: MessageWrapperStyle;
@@ -0,0 +1,5 @@
1
+ export const styles = {
2
+ messageWrapper: {
3
+ flex: 1,
4
+ },
5
+ };
@@ -0,0 +1,10 @@
1
+ import { ReactNode } from 'react';
2
+ import { StyleProp, ViewStyle } from 'react-native';
3
+ export interface MessageWrapperProps {
4
+ children: ReactNode;
5
+ disableSafeAreaView?: boolean;
6
+ style?: StyleProp<ViewStyle>;
7
+ }
8
+ export interface MessageWrapperStyle {
9
+ messageWrapper: ViewStyle;
10
+ }
@@ -0,0 +1,3 @@
1
+ /// <reference types="react" />
2
+ import { ModalMessageProps } from './types';
3
+ export default function ModalMessage(props: ModalMessageProps): JSX.Element | null;
@@ -0,0 +1,18 @@
1
+ import React from 'react';
2
+ import { useDeviceOrientation } from '../../../hooks';
3
+ import { useMessageProps } from '../../hooks';
4
+ import { MessageLayout } from '../MessageLayout';
5
+ import { MessageWrapper } from '../MessageWrapper';
6
+ import { getLandscapeStyles, getPortraitStyles } from './styles';
7
+ export default function ModalMessage(props) {
8
+ const { deviceOrientation, isPortraitMode } = useDeviceOrientation();
9
+ const messageProps = useMessageProps(props, isPortraitMode ? getPortraitStyles : getLandscapeStyles);
10
+ const { shouldRenderMessage, styles } = messageProps;
11
+ if (!shouldRenderMessage) {
12
+ return null;
13
+ }
14
+ const { wrapper, ...messageStyles } = styles;
15
+ return (<MessageWrapper style={wrapper}>
16
+ <MessageLayout {...props} {...messageProps} orientation={deviceOrientation} styles={messageStyles}/>
17
+ </MessageWrapper>);
18
+ }
@@ -0,0 +1,2 @@
1
+ export { default as ModalMessage } from './ModalMessage';
2
+ export { ModalMessageProps } from './types';
@@ -0,0 +1 @@
1
+ export { default as ModalMessage } from './ModalMessage';
@@ -0,0 +1,4 @@
1
+ import { ImageStyle } from 'react-native';
2
+ import { ModalMessageStyle } from './types';
3
+ export declare const getPortraitStyles: (imageDimensions: ImageStyle) => ModalMessageStyle;
4
+ export declare const getLandscapeStyles: (imageDimensions: ImageStyle) => ModalMessageStyle;
@@ -0,0 +1,99 @@
1
+ import { StyleSheet } from 'react-native';
2
+ import { BORDER_RADIUS_BASE, COLOR_BLACK, COLOR_LIGHT_GREY, COLOR_WHITE, FONT_SIZE_BASE, FONT_SIZE_LARGE, FONT_WEIGHT_BASE, LINE_HEIGHT_BASE, LINE_HEIGHT_LARGE, MESSAGE_ELEVATION, MESSAGE_SHADOW_HEIGHT, MESSAGE_SHADOW_OPACITY, MESSAGE_SHADOW_RADIUS, MESSAGE_SHADOW_WIDTH, SPACING_EXTRA_LARGE, SPACING_LARGE, SPACING_MEDIUM, SPACING_SMALL, } from '../../constants';
3
+ const commonStyles = {
4
+ body: {
5
+ fontSize: FONT_SIZE_BASE,
6
+ fontWeight: FONT_WEIGHT_BASE,
7
+ lineHeight: LINE_HEIGHT_BASE,
8
+ },
9
+ buttonContainer: {
10
+ backgroundColor: COLOR_LIGHT_GREY,
11
+ borderRadius: BORDER_RADIUS_BASE,
12
+ flex: 1,
13
+ margin: SPACING_MEDIUM,
14
+ padding: SPACING_LARGE,
15
+ },
16
+ buttonsContainer: {
17
+ flexDirection: 'row',
18
+ justifyContent: 'center',
19
+ },
20
+ container: {
21
+ backgroundColor: COLOR_WHITE,
22
+ elevation: MESSAGE_ELEVATION,
23
+ margin: SPACING_EXTRA_LARGE,
24
+ shadowColor: COLOR_BLACK,
25
+ shadowOffset: {
26
+ width: MESSAGE_SHADOW_WIDTH,
27
+ height: MESSAGE_SHADOW_HEIGHT,
28
+ },
29
+ shadowOpacity: MESSAGE_SHADOW_OPACITY,
30
+ shadowRadius: MESSAGE_SHADOW_RADIUS,
31
+ },
32
+ buttonText: {
33
+ fontSize: FONT_SIZE_BASE,
34
+ fontWeight: FONT_WEIGHT_BASE,
35
+ lineHeight: LINE_HEIGHT_BASE,
36
+ textAlign: 'center',
37
+ },
38
+ header: {
39
+ fontSize: FONT_SIZE_LARGE,
40
+ fontWeight: FONT_WEIGHT_BASE,
41
+ lineHeight: LINE_HEIGHT_LARGE,
42
+ },
43
+ iconButton: {
44
+ alignSelf: 'flex-start',
45
+ marginLeft: 'auto',
46
+ },
47
+ imageContainer: {
48
+ alignItems: 'center',
49
+ margin: SPACING_LARGE,
50
+ },
51
+ wrapper: {
52
+ flex: 1,
53
+ justifyContent: 'center',
54
+ },
55
+ };
56
+ export const getPortraitStyles = (imageDimensions) => StyleSheet.create({
57
+ ...commonStyles,
58
+ buttonsContainer: {
59
+ ...commonStyles.buttonsContainer,
60
+ marginTop: 'auto',
61
+ paddingHorizontal: SPACING_SMALL,
62
+ paddingBottom: SPACING_SMALL,
63
+ },
64
+ container: {
65
+ ...commonStyles.container,
66
+ minHeight: '40%',
67
+ },
68
+ contentContainer: { padding: SPACING_LARGE },
69
+ image: { ...imageDimensions },
70
+ textContainer: {
71
+ marginTop: SPACING_LARGE,
72
+ },
73
+ });
74
+ export const getLandscapeStyles = (imageDimensions) => StyleSheet.create({
75
+ ...commonStyles,
76
+ container: {
77
+ ...commonStyles.container,
78
+ flex: 1,
79
+ padding: SPACING_EXTRA_LARGE,
80
+ },
81
+ contentContainer: {
82
+ flex: 1,
83
+ flexDirection: 'row',
84
+ },
85
+ iconButton: {
86
+ ...commonStyles.iconButton,
87
+ marginRight: SPACING_MEDIUM,
88
+ },
89
+ image: { ...imageDimensions },
90
+ imageContainer: {
91
+ ...commonStyles.imageContainer,
92
+ justifyContent: 'center',
93
+ },
94
+ textContainer: {
95
+ flex: 1,
96
+ justifyContent: 'center',
97
+ paddingHorizontal: SPACING_MEDIUM,
98
+ },
99
+ });
@@ -0,0 +1,6 @@
1
+ import { ModalMessageCommonProps } from '@aws-amplify/ui-react-core';
2
+ import { MessageDefaultStyle, MessageOverrideStyle } from '../../hooks';
3
+ export interface ModalMessageProps extends ModalMessageCommonProps<MessageOverrideStyle | undefined> {
4
+ }
5
+ export interface ModalMessageStyle extends MessageDefaultStyle {
6
+ }
@@ -0,0 +1,6 @@
1
+ export { BannerMessageProps } from './BannerMessage';
2
+ export { CarouselMessageProps } from './CarouselMessage';
3
+ export { FullScreenMessageProps } from './FullScreenMessage';
4
+ export { InAppMessageDisplay, MessageComponents } from './InAppMessageDisplay';
5
+ export { ModalMessageProps } from './ModalMessage';
6
+ export { withInAppMessaging } from './withInAppMessaging';
@@ -0,0 +1,2 @@
1
+ export { InAppMessageDisplay } from './InAppMessageDisplay';
2
+ export { withInAppMessaging } from './withInAppMessaging';
@@ -0,0 +1 @@
1
+ export { default as withInAppMessaging } from './withInAppMessaging';
@@ -0,0 +1 @@
1
+ export { default as withInAppMessaging } from './withInAppMessaging';
@@ -0,0 +1,5 @@
1
+ /// <reference types="react" />
2
+ import { MessageComponents } from '../InAppMessageDisplay';
3
+ export default function withInAppMessaging<Props>(Component: (props: Props) => JSX.Element, options?: {
4
+ components?: MessageComponents;
5
+ }): (props: Props) => JSX.Element;
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import { InAppMessagingProvider } from '@aws-amplify/ui-react-core';
3
+ import { InAppMessageDisplay } from '../InAppMessageDisplay';
4
+ export default function withInAppMessaging(Component, options) {
5
+ return function WrappedWithInAppMessaging(props) {
6
+ return (<InAppMessagingProvider>
7
+ <InAppMessageDisplay {...options}/>
8
+ <Component {...props}/>
9
+ </InAppMessagingProvider>);
10
+ };
11
+ }
@@ -0,0 +1,31 @@
1
+ export declare const COLOR_BLACK = "#000";
2
+ export declare const COLOR_GREY = "#a1a1a1";
3
+ export declare const COLOR_LIGHT_GREY = "#e8e8e8";
4
+ export declare const COLOR_LIGHT_GREY_2 = "#d8d8d8";
5
+ export declare const COLOR_WHITE = "#fff";
6
+ export declare const SPACING_SMALL = 4;
7
+ export declare const SPACING_MEDIUM = 8;
8
+ export declare const SPACING_LARGE = 12;
9
+ export declare const SPACING_EXTRA_LARGE = 16;
10
+ export declare const BORDER_RADIUS_BASE = 4;
11
+ export declare const FONT_SIZE_BASE = 16;
12
+ export declare const FONT_SIZE_LARGE = 18;
13
+ export declare const LINE_HEIGHT_BASE: number;
14
+ export declare const LINE_HEIGHT_LARGE: number;
15
+ export declare const FONT_WEIGHT_BASE = "400";
16
+ export declare const ICON_BUTTON_SIZE = 20;
17
+ export declare const ICON_BUTTON_HIT_SLOP = 10;
18
+ export declare const MESSAGE_SHADOW_HEIGHT = 2;
19
+ export declare const MESSAGE_SHADOW_WIDTH = 2;
20
+ export declare const MESSAGE_SHADOW_OPACITY = 0.1;
21
+ export declare const MESSAGE_SHADOW_RADIUS = 2;
22
+ export declare const MESSAGE_ELEVATION = 3;
23
+ export declare const BUTTON_PRESSED_OPACITY = 0.8;
24
+ export declare const IN_APP_MESSAGING_TEST_ID: {
25
+ BODY: string;
26
+ CLOSE_BUTTON: string;
27
+ HEADER: string;
28
+ IMAGE: string;
29
+ PRIMARY_BUTTON: string;
30
+ SECONDARY_BUTTON: string;
31
+ };