@hero-design/rn 8.15.0 β†’ 8.16.1

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.
@@ -1,9 +1,9 @@
1
- @hero-design/rn:build: cache hit, replaying output 8b2a37cf3788f3a5
2
- @hero-design/rn:build: $ yarn build:js && yarn build:types
3
- @hero-design/rn:build: $ rollup -c
4
- @hero-design/rn:build: 
5
- @hero-design/rn:build: src/index.ts β†’ lib/index.js, es/index.js...
6
- @hero-design/rn:build: (!) Plugin replace: @rollup/plugin-replace: 'preventAssignment' currently defaults to false. It is recommended to set this option to `true`, as the next major version will default this option to `true`.
7
- @hero-design/rn:build: (!) Plugin node-resolve: preferring built-in module 'events' over local alternative at '/root/hero-design/node_modules/events/events.js', pass 'preferBuiltins: false' to disable this behavior or 'preferBuiltins: true' to disable this warning
8
- @hero-design/rn:build: created lib/index.js, es/index.js in 28.2s
9
- @hero-design/rn:build: $ tsc --noEmit false --emitDeclarationOnly --project tsconfig.prod.json
1
+ @hero-design/rn:build: cache hit, replaying output c5819fd205a488aa
2
+ @hero-design/rn:build: $ yarn build:js && yarn build:types
3
+ @hero-design/rn:build: $ rollup -c
4
+ @hero-design/rn:build: 
5
+ @hero-design/rn:build: src/index.ts β†’ lib/index.js, es/index.js...
6
+ @hero-design/rn:build: (!) Plugin replace: @rollup/plugin-replace: 'preventAssignment' currently defaults to false. It is recommended to set this option to `true`, as the next major version will default this option to `true`.
7
+ @hero-design/rn:build: (!) Plugin node-resolve: preferring built-in module 'events' over local alternative at '/root/hero-design/node_modules/events/events.js', pass 'preferBuiltins: false' to disable this behavior or 'preferBuiltins: true' to disable this warning
8
+ @hero-design/rn:build: created lib/index.js, es/index.js in 26.7s
9
+ @hero-design/rn:build: $ tsc --noEmit false --emitDeclarationOnly --project tsconfig.prod.json
package/es/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as reactNative from 'react-native';
2
2
  import { Platform, Dimensions, StyleSheet as StyleSheet$1, Animated, View, Easing, TouchableOpacity, Text as Text$1, Image as Image$1, TouchableWithoutFeedback, Pressable, SafeAreaView, KeyboardAvoidingView, TouchableHighlight, ScrollView, Modal, FlatList, useWindowDimensions, TextInput as TextInput$1, PanResponder, InteractionManager, Keyboard, SectionList, LayoutAnimation, RefreshControl as RefreshControl$1 } from 'react-native';
3
- import React, { useContext, createContext, createElement, useMemo, forwardRef, useEffect, useCallback, useRef, useState, useLayoutEffect, useImperativeHandle } from 'react';
3
+ import React, { useContext, createContext, createElement, useMemo, forwardRef, useEffect, useCallback, useRef, useState, isValidElement, useLayoutEffect, useImperativeHandle } from 'react';
4
4
  import { createIconSet } from 'react-native-vector-icons';
5
5
  import { useSafeAreaInsets } from 'react-native-safe-area-context';
6
6
  import DateTimePicker from '@react-native-community/datetimepicker';
@@ -981,6 +981,7 @@ var blue$1 = colorScales.blue,
981
981
  blueLight75: blue$1.lighten75,
982
982
  blueLight90: blue$1.lighten90,
983
983
  dodgerBlue: ultramarineBlue$3.base,
984
+ dodgerBlueDark15: ultramarineBlue$3.darken15,
984
985
  dodgerBlueDark30: ultramarineBlue$3.darken30,
985
986
  dodgerBlueLight30: ultramarineBlue$3.lighten30,
986
987
  dodgerBlueLight75: ultramarineBlue$3.lighten75,
@@ -1005,6 +1006,7 @@ var blue$1 = colorScales.blue,
1005
1006
  greyLight90: grey$2.lighten90,
1006
1007
  greyLight95: grey$2.lighten95,
1007
1008
  grotesqueGreen: grotesqueGreen.base,
1009
+ grotesqueGreenDark30: grotesqueGreen.darken30,
1008
1010
  grotesqueGreenDark45: grotesqueGreen.darken45,
1009
1011
  grotesqueGreenLight60: grotesqueGreen.lighten60,
1010
1012
  grotesqueGreenLight75: grotesqueGreen.lighten75,
@@ -12377,8 +12379,16 @@ var StyledErrorButtonSecondary = index$a(CompoundButton)(function (_ref5) {
12377
12379
  padding: theme.__hd__.error.space.button.padding
12378
12380
  };
12379
12381
  });
12380
- var StyledErrorImage = index$a(Image)(function (_ref6) {
12382
+ var StyledErrorImageContainer = index$a(View)(function (_ref6) {
12381
12383
  var theme = _ref6.theme;
12384
+ return {
12385
+ marginBottom: theme.__hd__.error.space.imageMarginBottom,
12386
+ width: theme.__hd__.error.sizes.image,
12387
+ height: theme.__hd__.error.sizes.image
12388
+ };
12389
+ });
12390
+ var StyledErrorImage = index$a(Image)(function (_ref7) {
12391
+ var theme = _ref7.theme;
12382
12392
  return {
12383
12393
  marginBottom: theme.__hd__.error.space.imageMarginBottom,
12384
12394
  width: theme.__hd__.error.sizes.image,
@@ -12386,8 +12396,8 @@ var StyledErrorImage = index$a(Image)(function (_ref6) {
12386
12396
  resizeMode: 'contain'
12387
12397
  };
12388
12398
  });
12389
- var StyledErrorTitle = index$a(Typography.Text)(function (_ref7) {
12390
- var theme = _ref7.theme;
12399
+ var StyledErrorTitle = index$a(Typography.Text)(function (_ref8) {
12400
+ var theme = _ref8.theme;
12391
12401
  return {
12392
12402
  fontFamily: theme.__hd__.error.fonts.title,
12393
12403
  fontSize: theme.__hd__.error.fontSizes.title,
@@ -12396,8 +12406,8 @@ var StyledErrorTitle = index$a(Typography.Text)(function (_ref7) {
12396
12406
  color: theme.__hd__.error.colors.title
12397
12407
  };
12398
12408
  });
12399
- var StyledErrorDescription = index$a(Typography.Text)(function (_ref8) {
12400
- var theme = _ref8.theme;
12409
+ var StyledErrorDescription = index$a(Typography.Text)(function (_ref9) {
12410
+ var theme = _ref9.theme;
12401
12411
  return {
12402
12412
  fontFamily: theme.__hd__.error.fonts.description,
12403
12413
  fontSize: theme.__hd__.error.fontSizes.description,
@@ -12408,6 +12418,19 @@ var StyledErrorDescription = index$a(Typography.Text)(function (_ref8) {
12408
12418
 
12409
12419
  var _excluded$a = ["variant", "title", "description", "image", "testID", "ctaText", "onCtaPress", "secondaryCtaText", "onSecondaryCtaPress"],
12410
12420
  _excluded2 = ["visible", "variant", "title", "description", "image", "testID", "ctaText", "onCtaPress", "secondaryCtaText", "onSecondaryCtaPress"];
12421
+ var renderImage = function renderImage(image) {
12422
+ if ( /*#__PURE__*/isValidElement(image)) {
12423
+ return /*#__PURE__*/React.cloneElement(image, {
12424
+ testID: 'error-image'
12425
+ });
12426
+ }
12427
+ return /*#__PURE__*/React.createElement(StyledErrorImage, {
12428
+ source: typeof image === 'string' ? {
12429
+ uri: image
12430
+ } : image,
12431
+ testID: "error-image"
12432
+ });
12433
+ };
12411
12434
  var ErrorPage = function ErrorPage(_ref) {
12412
12435
  var _ref$variant = _ref.variant,
12413
12436
  variant = _ref$variant === void 0 ? 'in-page' : _ref$variant,
@@ -12426,12 +12449,7 @@ var ErrorPage = function ErrorPage(_ref) {
12426
12449
  return /*#__PURE__*/React.createElement(StyledErrorContainer$1, {
12427
12450
  testID: testID,
12428
12451
  themeVariant: variant
12429
- }, /*#__PURE__*/React.createElement(StyledErrorContent, nativeProps, image && /*#__PURE__*/React.createElement(StyledErrorImage, {
12430
- source: typeof image === 'string' ? {
12431
- uri: image
12432
- } : image,
12433
- testID: "error-image"
12434
- }), /*#__PURE__*/React.createElement(StyledErrorTitle, null, title), description && /*#__PURE__*/React.createElement(StyledErrorDescription, null, description)), showButtonContainer && /*#__PURE__*/React.createElement(StyledErrorButtonContainer, null, showCta && /*#__PURE__*/React.createElement(StyledErrorButtonPrimary, {
12452
+ }, /*#__PURE__*/React.createElement(StyledErrorContent, nativeProps, image && /*#__PURE__*/React.createElement(StyledErrorImageContainer, null, renderImage(image)), /*#__PURE__*/React.createElement(StyledErrorTitle, null, title), description && /*#__PURE__*/React.createElement(StyledErrorDescription, null, description)), showButtonContainer && /*#__PURE__*/React.createElement(StyledErrorButtonContainer, null, showCta && /*#__PURE__*/React.createElement(StyledErrorButtonPrimary, {
12435
12453
  variant: "filled",
12436
12454
  text: ctaText,
12437
12455
  onPress: onCtaPress
package/lib/index.js CHANGED
@@ -1010,6 +1010,7 @@ var blue$1 = colorScales.blue,
1010
1010
  blueLight75: blue$1.lighten75,
1011
1011
  blueLight90: blue$1.lighten90,
1012
1012
  dodgerBlue: ultramarineBlue$3.base,
1013
+ dodgerBlueDark15: ultramarineBlue$3.darken15,
1013
1014
  dodgerBlueDark30: ultramarineBlue$3.darken30,
1014
1015
  dodgerBlueLight30: ultramarineBlue$3.lighten30,
1015
1016
  dodgerBlueLight75: ultramarineBlue$3.lighten75,
@@ -1034,6 +1035,7 @@ var blue$1 = colorScales.blue,
1034
1035
  greyLight90: grey$2.lighten90,
1035
1036
  greyLight95: grey$2.lighten95,
1036
1037
  grotesqueGreen: grotesqueGreen.base,
1038
+ grotesqueGreenDark30: grotesqueGreen.darken30,
1037
1039
  grotesqueGreenDark45: grotesqueGreen.darken45,
1038
1040
  grotesqueGreenLight60: grotesqueGreen.lighten60,
1039
1041
  grotesqueGreenLight75: grotesqueGreen.lighten75,
@@ -12406,8 +12408,16 @@ var StyledErrorButtonSecondary = index$a(CompoundButton)(function (_ref5) {
12406
12408
  padding: theme.__hd__.error.space.button.padding
12407
12409
  };
12408
12410
  });
12409
- var StyledErrorImage = index$a(Image)(function (_ref6) {
12411
+ var StyledErrorImageContainer = index$a(reactNative.View)(function (_ref6) {
12410
12412
  var theme = _ref6.theme;
12413
+ return {
12414
+ marginBottom: theme.__hd__.error.space.imageMarginBottom,
12415
+ width: theme.__hd__.error.sizes.image,
12416
+ height: theme.__hd__.error.sizes.image
12417
+ };
12418
+ });
12419
+ var StyledErrorImage = index$a(Image)(function (_ref7) {
12420
+ var theme = _ref7.theme;
12411
12421
  return {
12412
12422
  marginBottom: theme.__hd__.error.space.imageMarginBottom,
12413
12423
  width: theme.__hd__.error.sizes.image,
@@ -12415,8 +12425,8 @@ var StyledErrorImage = index$a(Image)(function (_ref6) {
12415
12425
  resizeMode: 'contain'
12416
12426
  };
12417
12427
  });
12418
- var StyledErrorTitle = index$a(Typography.Text)(function (_ref7) {
12419
- var theme = _ref7.theme;
12428
+ var StyledErrorTitle = index$a(Typography.Text)(function (_ref8) {
12429
+ var theme = _ref8.theme;
12420
12430
  return {
12421
12431
  fontFamily: theme.__hd__.error.fonts.title,
12422
12432
  fontSize: theme.__hd__.error.fontSizes.title,
@@ -12425,8 +12435,8 @@ var StyledErrorTitle = index$a(Typography.Text)(function (_ref7) {
12425
12435
  color: theme.__hd__.error.colors.title
12426
12436
  };
12427
12437
  });
12428
- var StyledErrorDescription = index$a(Typography.Text)(function (_ref8) {
12429
- var theme = _ref8.theme;
12438
+ var StyledErrorDescription = index$a(Typography.Text)(function (_ref9) {
12439
+ var theme = _ref9.theme;
12430
12440
  return {
12431
12441
  fontFamily: theme.__hd__.error.fonts.description,
12432
12442
  fontSize: theme.__hd__.error.fontSizes.description,
@@ -12437,6 +12447,19 @@ var StyledErrorDescription = index$a(Typography.Text)(function (_ref8) {
12437
12447
 
12438
12448
  var _excluded$a = ["variant", "title", "description", "image", "testID", "ctaText", "onCtaPress", "secondaryCtaText", "onSecondaryCtaPress"],
12439
12449
  _excluded2 = ["visible", "variant", "title", "description", "image", "testID", "ctaText", "onCtaPress", "secondaryCtaText", "onSecondaryCtaPress"];
12450
+ var renderImage = function renderImage(image) {
12451
+ if ( /*#__PURE__*/React.isValidElement(image)) {
12452
+ return /*#__PURE__*/React__default["default"].cloneElement(image, {
12453
+ testID: 'error-image'
12454
+ });
12455
+ }
12456
+ return /*#__PURE__*/React__default["default"].createElement(StyledErrorImage, {
12457
+ source: typeof image === 'string' ? {
12458
+ uri: image
12459
+ } : image,
12460
+ testID: "error-image"
12461
+ });
12462
+ };
12440
12463
  var ErrorPage = function ErrorPage(_ref) {
12441
12464
  var _ref$variant = _ref.variant,
12442
12465
  variant = _ref$variant === void 0 ? 'in-page' : _ref$variant,
@@ -12455,12 +12478,7 @@ var ErrorPage = function ErrorPage(_ref) {
12455
12478
  return /*#__PURE__*/React__default["default"].createElement(StyledErrorContainer$1, {
12456
12479
  testID: testID,
12457
12480
  themeVariant: variant
12458
- }, /*#__PURE__*/React__default["default"].createElement(StyledErrorContent, nativeProps, image && /*#__PURE__*/React__default["default"].createElement(StyledErrorImage, {
12459
- source: typeof image === 'string' ? {
12460
- uri: image
12461
- } : image,
12462
- testID: "error-image"
12463
- }), /*#__PURE__*/React__default["default"].createElement(StyledErrorTitle, null, title), description && /*#__PURE__*/React__default["default"].createElement(StyledErrorDescription, null, description)), showButtonContainer && /*#__PURE__*/React__default["default"].createElement(StyledErrorButtonContainer, null, showCta && /*#__PURE__*/React__default["default"].createElement(StyledErrorButtonPrimary, {
12481
+ }, /*#__PURE__*/React__default["default"].createElement(StyledErrorContent, nativeProps, image && /*#__PURE__*/React__default["default"].createElement(StyledErrorImageContainer, null, renderImage(image)), /*#__PURE__*/React__default["default"].createElement(StyledErrorTitle, null, title), description && /*#__PURE__*/React__default["default"].createElement(StyledErrorDescription, null, description)), showButtonContainer && /*#__PURE__*/React__default["default"].createElement(StyledErrorButtonContainer, null, showCta && /*#__PURE__*/React__default["default"].createElement(StyledErrorButtonPrimary, {
12464
12482
  variant: "filled",
12465
12483
  text: ctaText,
12466
12484
  onPress: onCtaPress
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hero-design/rn",
3
- "version": "8.15.0",
3
+ "version": "8.16.1",
4
4
  "license": "MIT",
5
5
  "main": "lib/index.js",
6
6
  "module": "es/index.js",
@@ -21,7 +21,7 @@
21
21
  "dependencies": {
22
22
  "@emotion/native": "^11.9.3",
23
23
  "@emotion/react": "^11.9.3",
24
- "@hero-design/colors": "8.15.0",
24
+ "@hero-design/colors": "8.16.1",
25
25
  "date-fns": "^2.16.1",
26
26
  "events": "^3.2.0",
27
27
  "hero-editor": "^1.9.21"
@@ -44,7 +44,7 @@
44
44
  "@babel/preset-typescript": "^7.17.12",
45
45
  "@babel/runtime": "^7.18.9",
46
46
  "@emotion/jest": "^11.9.3",
47
- "@hero-design/eslint-plugin": "8.15.0",
47
+ "@hero-design/eslint-plugin": "8.16.1",
48
48
  "@react-native-community/datetimepicker": "^3.5.2",
49
49
  "@react-native-community/slider": "4.1.12",
50
50
  "@rollup/plugin-babel": "^5.3.1",
@@ -60,9 +60,9 @@
60
60
  "@types/react-native": "^0.67.7",
61
61
  "@types/react-native-vector-icons": "^6.4.10",
62
62
  "babel-plugin-inline-import": "^3.0.0",
63
- "eslint-config-hd": "8.15.0",
63
+ "eslint-config-hd": "8.16.1",
64
64
  "jest": "^27.3.1",
65
- "prettier-config-hd": "8.15.0",
65
+ "prettier-config-hd": "8.16.1",
66
66
  "react": "18.0.0",
67
67
  "react-native": "0.69.7",
68
68
  "react-native-gesture-handler": "~2.1.0",
@@ -50,6 +50,11 @@ const StyledErrorButtonSecondary = styled(Button)(({ theme }) => ({
50
50
  padding: theme.__hd__.error.space.button.padding,
51
51
  }));
52
52
 
53
+ const StyledErrorImageContainer = styled(View)(({ theme }) => ({
54
+ marginBottom: theme.__hd__.error.space.imageMarginBottom,
55
+ width: theme.__hd__.error.sizes.image,
56
+ height: theme.__hd__.error.sizes.image,
57
+ }));
53
58
  const StyledErrorImage = styled(Image)(({ theme }) => ({
54
59
  marginBottom: theme.__hd__.error.space.imageMarginBottom,
55
60
  width: theme.__hd__.error.sizes.image,
@@ -83,4 +88,5 @@ export {
83
88
  StyledErrorContent,
84
89
  StyledErrorTitle,
85
90
  StyledErrorDescription,
91
+ StyledErrorImageContainer,
86
92
  };
@@ -1,6 +1,6 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
- exports[`Error renders error screen with image correctly 1`] = `
3
+ exports[`Error renders error screen with custom image element correctly 1`] = `
4
4
  <View
5
5
  style={
6
6
  Array [
@@ -30,32 +30,169 @@ exports[`Error renders error screen with image correctly 1`] = `
30
30
  ]
31
31
  }
32
32
  >
33
- <Image
34
- source={
35
- Object {
36
- "uri": "path_to_image",
33
+ <View
34
+ style={
35
+ Array [
36
+ Object {
37
+ "height": 176,
38
+ "marginBottom": 32,
39
+ "width": 176,
40
+ },
41
+ undefined,
42
+ ]
43
+ }
44
+ >
45
+ <Image
46
+ source={
47
+ Object {
48
+ "uri": "path_to_image",
49
+ }
37
50
  }
51
+ style={
52
+ Array [
53
+ Object {
54
+ "borderRadius": 0,
55
+ "height": 72,
56
+ "width": 72,
57
+ },
58
+ undefined,
59
+ ]
60
+ }
61
+ testID="error-image"
62
+ />
63
+ </View>
64
+ <Text
65
+ allowFontScaling={false}
66
+ style={
67
+ Array [
68
+ Object {
69
+ "color": "#001f23",
70
+ "fontFamily": "BeVietnamPro-Regular",
71
+ "fontSize": 14,
72
+ "letterSpacing": 0.42,
73
+ "lineHeight": 22,
74
+ },
75
+ Array [
76
+ Object {
77
+ "color": "#001f23",
78
+ "fontFamily": "RebondGrotesque-SemiBold",
79
+ "fontSize": 24,
80
+ "marginBottom": 8,
81
+ "textAlign": "center",
82
+ },
83
+ undefined,
84
+ ],
85
+ ]
38
86
  }
87
+ themeFontSize="medium"
88
+ themeFontWeight="regular"
89
+ themeIntent="body"
90
+ themeTypeface="neutral"
91
+ >
92
+ We’re sorry, something went wrong
93
+ </Text>
94
+ <Text
95
+ allowFontScaling={false}
39
96
  style={
40
97
  Array [
41
98
  Object {
42
- "borderRadius": 0,
43
- "height": 72,
44
- "width": 72,
99
+ "color": "#001f23",
100
+ "fontFamily": "BeVietnamPro-Regular",
101
+ "fontSize": 14,
102
+ "letterSpacing": 0.42,
103
+ "lineHeight": 22,
45
104
  },
46
105
  Array [
47
106
  Object {
48
- "height": 176,
49
- "marginBottom": 32,
50
- "resizeMode": "contain",
51
- "width": 176,
107
+ "color": "#4d6265",
108
+ "fontFamily": "RebondGrotesque",
109
+ "fontSize": 18,
110
+ "textAlign": "center",
52
111
  },
53
112
  undefined,
54
113
  ],
55
114
  ]
56
115
  }
57
- testID="error-image"
58
- />
116
+ themeFontSize="medium"
117
+ themeFontWeight="regular"
118
+ themeIntent="body"
119
+ themeTypeface="neutral"
120
+ >
121
+ Please try again later
122
+ </Text>
123
+ </View>
124
+ </View>
125
+ `;
126
+
127
+ exports[`Error renders error screen with image correctly 1`] = `
128
+ <View
129
+ style={
130
+ Array [
131
+ Object {
132
+ "backgroundColor": "#f6f6f7",
133
+ "display": "flex",
134
+ "flex": 1,
135
+ "flexDirection": "column",
136
+ },
137
+ undefined,
138
+ ]
139
+ }
140
+ themeVariant="in-page"
141
+ >
142
+ <View
143
+ style={
144
+ Array [
145
+ Object {
146
+ "alignItems": "center",
147
+ "display": "flex",
148
+ "flex": 1,
149
+ "flexDirection": "column",
150
+ "justifyContent": "center",
151
+ "padding": 24,
152
+ },
153
+ undefined,
154
+ ]
155
+ }
156
+ >
157
+ <View
158
+ style={
159
+ Array [
160
+ Object {
161
+ "height": 176,
162
+ "marginBottom": 32,
163
+ "width": 176,
164
+ },
165
+ undefined,
166
+ ]
167
+ }
168
+ >
169
+ <Image
170
+ source={
171
+ Object {
172
+ "uri": "path_to_image",
173
+ }
174
+ }
175
+ style={
176
+ Array [
177
+ Object {
178
+ "borderRadius": 0,
179
+ "height": 72,
180
+ "width": 72,
181
+ },
182
+ Array [
183
+ Object {
184
+ "height": 176,
185
+ "marginBottom": 32,
186
+ "resizeMode": "contain",
187
+ "width": 176,
188
+ },
189
+ undefined,
190
+ ],
191
+ ]
192
+ }
193
+ testID="error-image"
194
+ />
195
+ </View>
59
196
  <Text
60
197
  allowFontScaling={false}
61
198
  style={
@@ -165,32 +302,45 @@ exports[`Error renders full screen error page correctly 1`] = `
165
302
  ]
166
303
  }
167
304
  >
168
- <Image
169
- source={
170
- Object {
171
- "uri": "path_to_image",
172
- }
173
- }
305
+ <View
174
306
  style={
175
307
  Array [
176
308
  Object {
177
- "borderRadius": 0,
178
- "height": 72,
179
- "width": 72,
309
+ "height": 176,
310
+ "marginBottom": 32,
311
+ "width": 176,
180
312
  },
313
+ undefined,
314
+ ]
315
+ }
316
+ >
317
+ <Image
318
+ source={
319
+ Object {
320
+ "uri": "path_to_image",
321
+ }
322
+ }
323
+ style={
181
324
  Array [
182
325
  Object {
183
- "height": 176,
184
- "marginBottom": 32,
185
- "resizeMode": "contain",
186
- "width": 176,
326
+ "borderRadius": 0,
327
+ "height": 72,
328
+ "width": 72,
187
329
  },
188
- undefined,
189
- ],
190
- ]
191
- }
192
- testID="error-image"
193
- />
330
+ Array [
331
+ Object {
332
+ "height": 176,
333
+ "marginBottom": 32,
334
+ "resizeMode": "contain",
335
+ "width": 176,
336
+ },
337
+ undefined,
338
+ ],
339
+ ]
340
+ }
341
+ testID="error-image"
342
+ />
343
+ </View>
194
344
  <Text
195
345
  allowFontScaling={false}
196
346
  style={
@@ -2,6 +2,7 @@ import React from 'react';
2
2
  import { fireEvent } from '@testing-library/react-native';
3
3
  import renderWithTheme from '../../../testHelpers/renderWithTheme';
4
4
  import Error from '..';
5
+ import Image from '../../Image';
5
6
 
6
7
  const title = `We’re sorry, something went wrong`;
7
8
  const description = 'Please try again later';
@@ -26,6 +27,23 @@ describe('Error', () => {
26
27
  expect(getByTestId('error-image')).toBeTruthy();
27
28
  expect(toJSON()).toMatchSnapshot();
28
29
  });
30
+ it('renders error screen with custom image element correctly', () => {
31
+ const image = (
32
+ <Image
33
+ source={{
34
+ uri: 'path_to_image',
35
+ }}
36
+ />
37
+ );
38
+ const { toJSON, getByText, getByTestId } = renderWithTheme(
39
+ <Error title={title} description={description} image={image} />
40
+ );
41
+
42
+ expect(getByText(title)).toBeTruthy();
43
+ expect(getByText(description)).toBeTruthy();
44
+ expect(getByTestId('error-image')).toBeTruthy();
45
+ expect(toJSON()).toMatchSnapshot();
46
+ });
29
47
  it('renders full screen error page correctly', () => {
30
48
  const { toJSON, getByText, getByTestId } = renderWithTheme(
31
49
  <Error
@@ -1,6 +1,15 @@
1
- import React, { useCallback, useEffect, useState } from 'react';
2
- import type { ReactElement } from 'react';
3
- import type { ImageSourcePropType, ViewProps } from 'react-native';
1
+ import React, {
2
+ ReactElement,
3
+ isValidElement,
4
+ useCallback,
5
+ useEffect,
6
+ useState,
7
+ } from 'react';
8
+ import type {
9
+ ImageSourcePropType,
10
+ ViewProps,
11
+ ImageProps as RNImageProps,
12
+ } from 'react-native';
4
13
  import {
5
14
  ErrorVariant,
6
15
  StyledErrorButtonContainer,
@@ -10,10 +19,12 @@ import {
10
19
  StyledErrorContent,
11
20
  StyledErrorDescription,
12
21
  StyledErrorImage,
22
+ StyledErrorImageContainer,
13
23
  StyledErrorModal,
14
24
  StyledErrorTitle,
15
25
  } from './StyledError';
16
26
  import { useDeprecation } from '../../utils/hooks';
27
+ import { ImageProps } from '../Image/index';
17
28
 
18
29
  interface ErrorProps extends ViewProps {
19
30
  /**
@@ -37,7 +48,10 @@ interface ErrorProps extends ViewProps {
37
48
  /**
38
49
  * Image of the error
39
50
  */
40
- image?: ImageSourcePropType | string;
51
+ image?:
52
+ | ReactElement<ImageProps | RNImageProps>
53
+ | ImageSourcePropType
54
+ | string;
41
55
  /**
42
56
  * Testing id of the component.
43
57
  */
@@ -62,6 +76,23 @@ interface ErrorProps extends ViewProps {
62
76
 
63
77
  type onCloseCallbackType = 'cta' | 'secondaryCta' | null;
64
78
 
79
+ const renderImage = (
80
+ image: ReactElement<ImageProps | RNImageProps> | ImageSourcePropType | string
81
+ ) => {
82
+ if (isValidElement(image)) {
83
+ return React.cloneElement(image, {
84
+ testID: 'error-image',
85
+ });
86
+ }
87
+
88
+ return (
89
+ <StyledErrorImage
90
+ source={typeof image === 'string' ? { uri: image } : image}
91
+ testID="error-image"
92
+ />
93
+ );
94
+ };
95
+
65
96
  const ErrorPage = ({
66
97
  variant = 'in-page',
67
98
  title,
@@ -82,12 +113,10 @@ const ErrorPage = ({
82
113
  <StyledErrorContainer testID={testID} themeVariant={variant}>
83
114
  <StyledErrorContent {...nativeProps}>
84
115
  {image && (
85
- <StyledErrorImage
86
- source={typeof image === 'string' ? { uri: image } : image}
87
- testID="error-image"
88
- />
116
+ <StyledErrorImageContainer>
117
+ {renderImage(image)}
118
+ </StyledErrorImageContainer>
89
119
  )}
90
-
91
120
  <StyledErrorTitle>{title}</StyledErrorTitle>
92
121
 
93
122
  {description && (
@@ -39,6 +39,12 @@ declare const StyledErrorButtonSecondary: import("@emotion/native").StyledCompon
39
39
  theme?: import("@emotion/react").Theme | undefined;
40
40
  as?: import("react").ElementType<any> | undefined;
41
41
  }, {}, {}>;
42
+ declare const StyledErrorImageContainer: import("@emotion/native").StyledComponent<import("react-native").ViewProps & {
43
+ theme?: import("@emotion/react").Theme | undefined;
44
+ as?: import("react").ElementType<any> | undefined;
45
+ }, {}, {
46
+ ref?: import("react").Ref<View> | undefined;
47
+ }>;
42
48
  declare const StyledErrorImage: import("@emotion/native").StyledComponent<import("../Image").ImageProps & {
43
49
  theme?: import("@emotion/react").Theme | undefined;
44
50
  as?: import("react").ElementType<any> | undefined;
@@ -51,4 +57,4 @@ declare const StyledErrorDescription: import("@emotion/native").StyledComponent<
51
57
  theme?: import("@emotion/react").Theme | undefined;
52
58
  as?: import("react").ElementType<any> | undefined;
53
59
  }, {}, {}>;
54
- export { ErrorVariant, StyledErrorModal, StyledErrorImage, StyledErrorContainer, StyledErrorButtonContainer, StyledErrorButtonPrimary, StyledErrorButtonSecondary, StyledErrorContent, StyledErrorTitle, StyledErrorDescription, };
60
+ export { ErrorVariant, StyledErrorModal, StyledErrorImage, StyledErrorContainer, StyledErrorButtonContainer, StyledErrorButtonPrimary, StyledErrorButtonSecondary, StyledErrorContent, StyledErrorTitle, StyledErrorDescription, StyledErrorImageContainer, };
@@ -1,6 +1,7 @@
1
- import type { ReactElement } from 'react';
2
- import type { ImageSourcePropType, ViewProps } from 'react-native';
1
+ import { ReactElement } from 'react';
2
+ import type { ImageSourcePropType, ViewProps, ImageProps as RNImageProps } from 'react-native';
3
3
  import { ErrorVariant } from './StyledError';
4
+ import { ImageProps } from '../Image/index';
4
5
  interface ErrorProps extends ViewProps {
5
6
  /**
6
7
  * @deprecated use conditional rendering instead
@@ -23,7 +24,7 @@ interface ErrorProps extends ViewProps {
23
24
  /**
24
25
  * Image of the error
25
26
  */
26
- image?: ImageSourcePropType | string;
27
+ image?: ReactElement<ImageProps | RNImageProps> | ImageSourcePropType | string;
27
28
  /**
28
29
  * Testing id of the component.
29
30
  */