@hero-design/rn 7.2.0 → 7.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (244) hide show
  1. package/.expo/README.md +15 -0
  2. package/.expo/packager-info.json +10 -0
  3. package/.expo/prebuild/cached-packages.json +4 -0
  4. package/.expo/settings.json +10 -0
  5. package/.expo/xcodebuild-error.log +2 -0
  6. package/.expo/xcodebuild.log +11199 -0
  7. package/.turbo/turbo-build.log +8 -0
  8. package/.turbo/turbo-build:types.log +2 -0
  9. package/.turbo/turbo-publish:npm.log +0 -0
  10. package/.turbo/turbo-test.log +131 -0
  11. package/.turbo/turbo-type-check.log +7 -0
  12. package/es/index.js +2406 -469
  13. package/jest.config.js +1 -1
  14. package/lib/index.js +2423 -481
  15. package/package.json +4 -38
  16. package/playground/components/Avatar.tsx +102 -0
  17. package/playground/components/Badge.tsx +146 -9
  18. package/playground/components/Button.tsx +138 -35
  19. package/playground/components/Card.tsx +40 -14
  20. package/playground/components/Collapse.tsx +99 -0
  21. package/playground/components/Drawer.tsx +32 -0
  22. package/playground/components/FAB.tsx +15 -0
  23. package/playground/components/IconButton.tsx +67 -0
  24. package/playground/components/Progress.tsx +95 -0
  25. package/playground/components/Tabs.tsx +106 -14
  26. package/playground/components/Tag.tsx +45 -0
  27. package/playground/index.tsx +18 -0
  28. package/src/components/Avatar/StyledAvatar.tsx +61 -0
  29. package/src/components/Avatar/__tests__/StyledAvatar.spec.tsx +48 -0
  30. package/src/components/Avatar/__tests__/__snapshots__/StyledAvatar.spec.tsx.snap +87 -0
  31. package/src/components/Avatar/__tests__/__snapshots__/index.spec.tsx.snap +88 -0
  32. package/src/components/Avatar/__tests__/index.spec.tsx +26 -0
  33. package/src/components/Avatar/index.tsx +71 -0
  34. package/src/components/Badge/Status.tsx +77 -0
  35. package/src/components/Badge/StyledBadge.tsx +38 -26
  36. package/src/components/Badge/__tests__/Badge.spec.tsx +16 -0
  37. package/src/components/Badge/__tests__/Status.spec.tsx +27 -0
  38. package/src/components/Badge/__tests__/__snapshots__/Badge.spec.tsx.snap +133 -52
  39. package/src/components/Badge/__tests__/__snapshots__/Status.spec.tsx.snap +89 -0
  40. package/src/components/Badge/index.tsx +77 -19
  41. package/src/components/Button/Button.tsx +163 -0
  42. package/src/components/Button/LoadingIndicator/StyledLoadingIndicator.tsx +58 -0
  43. package/src/components/Button/LoadingIndicator/__tests__/StyledLoadingIndicator.spec.tsx +20 -0
  44. package/src/components/Button/LoadingIndicator/__tests__/__snapshots__/StyledLoadingIndicator.spec.tsx.snap +101 -0
  45. package/src/components/Button/LoadingIndicator/__tests__/__snapshots__/index.spec.tsx.snap +606 -0
  46. package/src/components/Button/LoadingIndicator/__tests__/index.spec.tsx +24 -0
  47. package/src/components/Button/LoadingIndicator/index.tsx +140 -0
  48. package/src/components/Button/StyledButton.tsx +254 -0
  49. package/src/components/Button/__tests__/Button.spec.tsx +86 -0
  50. package/src/components/Button/__tests__/{index.spec.tsx → IconButton.spec.tsx} +0 -0
  51. package/src/components/Button/__tests__/StyledButton.spec.tsx +154 -0
  52. package/src/components/Button/__tests__/__snapshots__/{index.spec.tsx.snap → IconButton.spec.tsx.snap} +0 -0
  53. package/src/components/Button/__tests__/__snapshots__/StyledButton.spec.tsx.snap +895 -0
  54. package/src/components/Button/index.tsx +10 -2
  55. package/src/components/Card/StyledCard.tsx +27 -5
  56. package/src/components/Card/__tests__/StyledCard.spec.tsx +15 -3
  57. package/src/components/Card/__tests__/__snapshots__/StyledCard.spec.tsx.snap +34 -2
  58. package/src/components/Card/__tests__/index.spec.tsx +16 -21
  59. package/src/components/Card/index.tsx +15 -2
  60. package/src/components/Collapse/StyledCollapse.tsx +15 -0
  61. package/src/components/Collapse/__tests__/StyledCollapse.spec.tsx +26 -0
  62. package/src/components/Collapse/__tests__/__snapshots__/StyledCollapse.spec.tsx.snap +37 -0
  63. package/src/components/Collapse/__tests__/__snapshots__/index.spec.tsx.snap +84 -0
  64. package/src/components/Collapse/__tests__/index.spec.tsx +42 -0
  65. package/src/components/Collapse/index.tsx +109 -0
  66. package/src/components/Divider/index.tsx +1 -1
  67. package/src/components/Drawer/StyledDrawer.tsx +39 -0
  68. package/src/components/Drawer/__tests__/__snapshots__/index.spec.tsx.snap +244 -0
  69. package/src/components/Drawer/__tests__/index.spec.tsx +37 -0
  70. package/src/components/Drawer/index.tsx +93 -0
  71. package/src/components/FAB/ActionGroup/__tests__/__snapshots__/index.spec.tsx.snap +78 -62
  72. package/src/components/FAB/ActionGroup/__tests__/index.spec.tsx +2 -0
  73. package/src/components/FAB/ActionGroup/index.tsx +13 -1
  74. package/src/components/FAB/FAB.tsx +63 -13
  75. package/src/components/FAB/StyledFAB.tsx +25 -6
  76. package/src/components/FAB/__tests__/__snapshots__/AnimatedFABIcon.spec.tsx.snap +6 -2
  77. package/src/components/FAB/__tests__/__snapshots__/StyledFAB.spec.tsx.snap +7 -3
  78. package/src/components/FAB/__tests__/__snapshots__/index.spec.tsx.snap +88 -6
  79. package/src/components/FAB/__tests__/index.spec.tsx +16 -0
  80. package/src/components/Progress/ProgressBar.tsx +73 -0
  81. package/src/components/Progress/ProgressCircle.tsx +165 -0
  82. package/src/components/Progress/StyledProgressBar.tsx +21 -0
  83. package/src/components/Progress/StyledProgressCircle.tsx +66 -0
  84. package/src/components/Progress/__tests__/__snapshots__/index.spec.js.snap +641 -0
  85. package/src/components/Progress/__tests__/index.spec.js +46 -0
  86. package/src/components/Progress/index.tsx +6 -0
  87. package/src/components/Progress/types.ts +1 -0
  88. package/src/components/Tabs/ActiveTabIndicator.tsx +37 -0
  89. package/src/components/Tabs/ScrollableTabs.tsx +216 -0
  90. package/src/components/Tabs/StyledScrollableTabs.tsx +60 -0
  91. package/src/components/Tabs/StyledTabs.tsx +30 -44
  92. package/src/components/Tabs/__tests__/ScrollableTabs.spec.tsx +84 -0
  93. package/src/components/Tabs/__tests__/__snapshots__/ScrollableTabs.spec.tsx.snap +591 -0
  94. package/src/components/Tabs/__tests__/__snapshots__/index.spec.tsx.snap +317 -224
  95. package/src/components/Tabs/__tests__/index.spec.tsx +22 -21
  96. package/src/components/Tabs/index.tsx +155 -114
  97. package/src/components/Tabs/utils.ts +13 -0
  98. package/src/components/Tag/StyledTag.tsx +35 -0
  99. package/src/components/Tag/__tests__/Tag.spec.tsx +41 -0
  100. package/src/components/Tag/__tests__/__snapshots__/Tag.spec.tsx.snap +153 -0
  101. package/src/components/Tag/index.tsx +41 -0
  102. package/src/components/Typography/Text/index.tsx +1 -1
  103. package/src/index.ts +10 -0
  104. package/src/theme/__tests__/__snapshots__/index.spec.ts.snap +181 -22
  105. package/src/theme/components/avatar.ts +40 -0
  106. package/src/theme/components/badge.ts +14 -16
  107. package/src/theme/components/button.ts +57 -0
  108. package/src/theme/components/card.ts +5 -5
  109. package/src/theme/components/drawer.ts +24 -0
  110. package/src/theme/components/fab.ts +9 -2
  111. package/src/theme/components/progress.ts +27 -0
  112. package/src/theme/components/tabs.ts +22 -7
  113. package/src/theme/components/tag.ts +39 -0
  114. package/src/theme/global/borders.ts +13 -1
  115. package/src/theme/global/colors.ts +7 -2
  116. package/src/theme/global/index.ts +3 -1
  117. package/src/theme/global/scale.ts +3 -0
  118. package/src/theme/index.ts +15 -0
  119. package/src/utils/hooks.ts +10 -0
  120. package/testUtils/setup.tsx +43 -0
  121. package/types/playground/components/Avatar.d.ts +2 -0
  122. package/types/playground/components/Badge.d.ts +0 -0
  123. package/types/playground/components/BottomNavigation.d.ts +0 -0
  124. package/types/playground/components/Button.d.ts +0 -0
  125. package/types/playground/components/Card.d.ts +0 -0
  126. package/types/playground/components/Collapse.d.ts +2 -0
  127. package/types/playground/components/Divider.d.ts +0 -0
  128. package/types/playground/components/Drawer.d.ts +2 -0
  129. package/types/playground/components/FAB.d.ts +0 -0
  130. package/types/playground/components/Icon.d.ts +0 -0
  131. package/types/playground/components/IconButton.d.ts +2 -0
  132. package/types/playground/components/Progress.d.ts +2 -0
  133. package/types/playground/components/Tabs.d.ts +0 -0
  134. package/types/playground/components/Tag.d.ts +2 -0
  135. package/types/playground/components/Typography.d.ts +0 -0
  136. package/types/playground/index.d.ts +0 -0
  137. package/types/src/components/Avatar/StyledAvatar.d.ts +46 -0
  138. package/types/src/components/Avatar/__tests__/StyledAvatar.spec.d.ts +1 -0
  139. package/types/src/components/Avatar/__tests__/index.spec.d.ts +1 -0
  140. package/types/src/components/Avatar/index.d.ts +25 -0
  141. package/types/src/components/Badge/Status.d.ts +24 -0
  142. package/types/src/components/Badge/StyledBadge.d.ts +17 -9
  143. package/types/src/components/Badge/__tests__/Badge.spec.d.ts +0 -0
  144. package/types/src/components/Badge/__tests__/Status.spec.d.ts +1 -0
  145. package/types/src/components/Badge/index.d.ts +17 -7
  146. package/types/src/components/BottomNavigation/StyledBottomNavigation.d.ts +0 -0
  147. package/types/src/components/BottomNavigation/__tests__/index.spec.d.ts +0 -0
  148. package/types/src/components/BottomNavigation/index.d.ts +0 -0
  149. package/types/src/components/Button/Button.d.ts +57 -0
  150. package/types/src/components/Button/IconButton.d.ts +0 -0
  151. package/types/src/components/Button/LoadingIndicator/StyledLoadingIndicator.d.ts +20 -0
  152. package/types/src/components/Button/LoadingIndicator/__tests__/StyledLoadingIndicator.spec.d.ts +1 -0
  153. package/types/src/components/Button/LoadingIndicator/__tests__/index.spec.d.ts +1 -0
  154. package/types/src/components/Button/LoadingIndicator/index.d.ts +26 -0
  155. package/types/src/components/Button/StyledButton.d.ts +40 -0
  156. package/types/src/components/Button/__tests__/Button.spec.d.ts +1 -0
  157. package/types/src/components/Button/__tests__/IconButton.spec.d.ts +1 -0
  158. package/types/src/components/Button/__tests__/StyledButton.spec.d.ts +1 -0
  159. package/types/src/components/Button/__tests__/index.spec.d.ts +0 -0
  160. package/types/src/components/Button/index.d.ts +8 -4
  161. package/types/src/components/Card/StyledCard.d.ts +9 -1
  162. package/types/src/components/Card/__tests__/StyledCard.spec.d.ts +0 -0
  163. package/types/src/components/Card/__tests__/index.spec.d.ts +0 -0
  164. package/types/src/components/Card/index.d.ts +5 -1
  165. package/types/src/components/Collapse/StyledCollapse.d.ts +15 -0
  166. package/types/src/components/Collapse/__tests__/StyledCollapse.spec.d.ts +1 -0
  167. package/types/src/components/Collapse/__tests__/index.spec.d.ts +1 -0
  168. package/types/src/components/Collapse/index.d.ts +23 -0
  169. package/types/src/components/Divider/StyledDivider.d.ts +0 -0
  170. package/types/src/components/Divider/__tests__/StyledDivider.spec.d.ts +0 -0
  171. package/types/src/components/Divider/index.d.ts +0 -0
  172. package/types/src/components/Drawer/StyledDrawer.d.ts +25 -0
  173. package/types/src/components/Drawer/__tests__/index.spec.d.ts +1 -0
  174. package/types/src/components/Drawer/index.d.ts +25 -0
  175. package/types/src/components/FAB/ActionGroup/ActionItem.d.ts +0 -0
  176. package/types/src/components/FAB/ActionGroup/StyledActionGroup.d.ts +0 -0
  177. package/types/src/components/FAB/ActionGroup/StyledActionItem.d.ts +0 -0
  178. package/types/src/components/FAB/ActionGroup/__tests__/index.spec.d.ts +0 -0
  179. package/types/src/components/FAB/ActionGroup/index.d.ts +8 -1
  180. package/types/src/components/FAB/AnimatedFABIcon.d.ts +0 -0
  181. package/types/src/components/FAB/FAB.d.ts +5 -1
  182. package/types/src/components/FAB/StyledFAB.d.ts +8 -2
  183. package/types/src/components/FAB/__tests__/AnimatedFABIcon.spec.d.ts +0 -0
  184. package/types/src/components/FAB/__tests__/StyledFAB.spec.d.ts +0 -0
  185. package/types/src/components/FAB/__tests__/index.spec.d.ts +0 -0
  186. package/types/src/components/FAB/index.d.ts +2 -2
  187. package/types/src/components/Icon/HeroIcon/index.d.ts +0 -0
  188. package/types/src/components/Icon/IconList.d.ts +0 -0
  189. package/types/src/components/Icon/__tests__/index.spec.d.ts +0 -0
  190. package/types/src/components/Icon/index.d.ts +0 -0
  191. package/types/src/components/Icon/utils.d.ts +1 -1
  192. package/types/src/components/Progress/ProgressBar.d.ts +18 -0
  193. package/types/src/components/Progress/ProgressCircle.d.ts +18 -0
  194. package/types/src/components/Progress/StyledProgressBar.d.ts +18 -0
  195. package/types/src/components/Progress/StyledProgressCircle.d.ts +38 -0
  196. package/types/src/components/Progress/__tests__/index.spec.d.ts +1 -0
  197. package/types/src/components/Progress/index.d.ts +5 -0
  198. package/types/src/components/Progress/types.d.ts +1 -0
  199. package/types/src/components/Tabs/ActiveTabIndicator.d.ts +8 -0
  200. package/types/src/components/Tabs/ScrollableTabs.d.ts +3 -0
  201. package/types/src/components/Tabs/StyledScrollableTabs.d.ts +61 -0
  202. package/types/src/components/Tabs/StyledTabs.d.ts +22 -22
  203. package/types/src/components/Tabs/__tests__/ScrollableTabs.spec.d.ts +1 -0
  204. package/types/src/components/Tabs/__tests__/index.spec.d.ts +0 -0
  205. package/types/src/components/Tabs/index.d.ts +28 -19
  206. package/types/src/components/Tabs/utils.d.ts +2 -0
  207. package/types/src/components/Tag/StyledTag.d.ts +20 -0
  208. package/types/src/components/Tag/__tests__/Tag.spec.d.ts +1 -0
  209. package/types/src/components/Tag/index.d.ts +21 -0
  210. package/types/src/components/Typography/Text/StyledText.d.ts +0 -0
  211. package/types/src/components/Typography/Text/__tests__/StyledText.spec.d.ts +0 -0
  212. package/types/src/components/Typography/Text/__tests__/index.spec.d.ts +0 -0
  213. package/types/src/components/Typography/Text/index.d.ts +0 -0
  214. package/types/src/components/Typography/index.d.ts +0 -0
  215. package/types/src/index.d.ts +6 -1
  216. package/types/src/testHelpers/renderWithTheme.d.ts +0 -0
  217. package/types/src/theme/__tests__/index.spec.d.ts +0 -0
  218. package/types/src/theme/components/avatar.d.ts +32 -0
  219. package/types/src/theme/components/badge.d.ts +12 -13
  220. package/types/src/theme/components/bottomNavigation.d.ts +0 -0
  221. package/types/src/theme/components/button.d.ts +37 -0
  222. package/types/src/theme/components/card.d.ts +3 -3
  223. package/types/src/theme/components/divider.d.ts +0 -0
  224. package/types/src/theme/components/drawer.d.ts +21 -0
  225. package/types/src/theme/components/fab.d.ts +8 -1
  226. package/types/src/theme/components/icon.d.ts +0 -0
  227. package/types/src/theme/components/progress.d.ts +21 -0
  228. package/types/src/theme/components/tabs.d.ts +14 -2
  229. package/types/src/theme/components/tag.d.ts +30 -0
  230. package/types/src/theme/components/typography.d.ts +0 -0
  231. package/types/src/theme/global/borders.d.ts +7 -1
  232. package/types/src/theme/global/colors.d.ts +6 -1
  233. package/types/src/theme/global/index.d.ts +7 -1
  234. package/types/src/theme/global/scale.d.ts +1 -0
  235. package/types/src/theme/global/space.d.ts +0 -0
  236. package/types/src/theme/global/typography.d.ts +0 -0
  237. package/types/src/theme/index.d.ts +10 -0
  238. package/types/src/types.d.ts +0 -0
  239. package/types/src/utils/__tests__/scale.spec.d.ts +0 -0
  240. package/types/src/utils/helpers.d.ts +0 -0
  241. package/types/src/utils/hooks.d.ts +1 -0
  242. package/types/src/utils/scale.d.ts +0 -0
  243. package/src/components/Card/__tests__/__snapshots__/index.spec.tsx.snap +0 -34
  244. package/testUtils/setup.ts +0 -18
@@ -2,33 +2,42 @@
2
2
 
3
3
  exports[`Badge has danger style when intent is danger 1`] = `
4
4
  <View
5
+ collapsable={false}
6
+ nativeID="animatedComponent"
5
7
  style={
6
- Array [
7
- Object {
8
- "backgroundColor": "#fcebe7",
9
- "borderColor": "#de350b",
10
- "borderRadius": 4,
11
- "borderWidth": 1,
12
- "paddingHorizontal": 8,
13
- "paddingVertical": 2,
14
- },
15
- undefined,
16
- ]
8
+ Object {
9
+ "alignItems": "center",
10
+ "backgroundColor": "#de350b",
11
+ "borderRadius": 999,
12
+ "height": 20,
13
+ "justifyContent": "center",
14
+ "minWidth": 20,
15
+ "opacity": 1,
16
+ "paddingHorizontal": 8,
17
+ "transform": Array [
18
+ Object {
19
+ "scale": 1,
20
+ },
21
+ ],
22
+ }
17
23
  }
18
24
  themeIntent="danger"
25
+ themePadding="wideContent"
19
26
  >
20
27
  <Text
21
28
  style={
22
29
  Array [
23
30
  Object {
24
- "color": "#de350b",
31
+ "color": "#ffffff",
25
32
  "fontFamily": "BeVietnamPro-SemiBold",
26
33
  "fontSize": 12,
34
+ "includeFontPadding": false,
35
+ "textAlign": "center",
36
+ "textAlignVertical": "center",
27
37
  },
28
38
  undefined,
29
39
  ]
30
40
  }
31
- themeIntent="danger"
32
41
  >
33
42
  DECLINED
34
43
  </Text>
@@ -37,33 +46,42 @@ exports[`Badge has danger style when intent is danger 1`] = `
37
46
 
38
47
  exports[`Badge has info style when intent is info 1`] = `
39
48
  <View
49
+ collapsable={false}
50
+ nativeID="animatedComponent"
40
51
  style={
41
- Array [
42
- Object {
43
- "backgroundColor": "#ecf0ff",
44
- "borderColor": "#4568fb",
45
- "borderRadius": 4,
46
- "borderWidth": 1,
47
- "paddingHorizontal": 8,
48
- "paddingVertical": 2,
49
- },
50
- undefined,
51
- ]
52
+ Object {
53
+ "alignItems": "center",
54
+ "backgroundColor": "#4568fb",
55
+ "borderRadius": 999,
56
+ "height": 20,
57
+ "justifyContent": "center",
58
+ "minWidth": 20,
59
+ "opacity": 1,
60
+ "paddingHorizontal": 8,
61
+ "transform": Array [
62
+ Object {
63
+ "scale": 1,
64
+ },
65
+ ],
66
+ }
52
67
  }
53
68
  themeIntent="info"
69
+ themePadding="wideContent"
54
70
  >
55
71
  <Text
56
72
  style={
57
73
  Array [
58
74
  Object {
59
- "color": "#4568fb",
75
+ "color": "#ffffff",
60
76
  "fontFamily": "BeVietnamPro-SemiBold",
61
77
  "fontSize": 12,
78
+ "includeFontPadding": false,
79
+ "textAlign": "center",
80
+ "textAlignVertical": "center",
62
81
  },
63
82
  undefined,
64
83
  ]
65
84
  }
66
- themeIntent="info"
67
85
  >
68
86
  SUBMITTED
69
87
  </Text>
@@ -72,33 +90,42 @@ exports[`Badge has info style when intent is info 1`] = `
72
90
 
73
91
  exports[`Badge has success style when intent is success 1`] = `
74
92
  <View
93
+ collapsable={false}
94
+ nativeID="animatedComponent"
75
95
  style={
76
- Array [
77
- Object {
78
- "backgroundColor": "#f0fef4",
79
- "borderColor": "#017d6d",
80
- "borderRadius": 4,
81
- "borderWidth": 1,
82
- "paddingHorizontal": 8,
83
- "paddingVertical": 2,
84
- },
85
- undefined,
86
- ]
96
+ Object {
97
+ "alignItems": "center",
98
+ "backgroundColor": "#017d6d",
99
+ "borderRadius": 999,
100
+ "height": 20,
101
+ "justifyContent": "center",
102
+ "minWidth": 20,
103
+ "opacity": 1,
104
+ "paddingHorizontal": 8,
105
+ "transform": Array [
106
+ Object {
107
+ "scale": 1,
108
+ },
109
+ ],
110
+ }
87
111
  }
88
112
  themeIntent="success"
113
+ themePadding="wideContent"
89
114
  >
90
115
  <Text
91
116
  style={
92
117
  Array [
93
118
  Object {
94
- "color": "#017d6d",
119
+ "color": "#ffffff",
95
120
  "fontFamily": "BeVietnamPro-SemiBold",
96
121
  "fontSize": 12,
122
+ "includeFontPadding": false,
123
+ "textAlign": "center",
124
+ "textAlignVertical": "center",
97
125
  },
98
126
  undefined,
99
127
  ]
100
128
  }
101
- themeIntent="success"
102
129
  >
103
130
  APPROVED
104
131
  </Text>
@@ -107,35 +134,89 @@ exports[`Badge has success style when intent is success 1`] = `
107
134
 
108
135
  exports[`Badge has warning style when intent is warning 1`] = `
109
136
  <View
137
+ collapsable={false}
138
+ nativeID="animatedComponent"
110
139
  style={
111
- Array [
112
- Object {
113
- "backgroundColor": "#fff6eb",
114
- "borderColor": "#d98a2c",
115
- "borderRadius": 4,
116
- "borderWidth": 1,
117
- "paddingHorizontal": 8,
118
- "paddingVertical": 2,
119
- },
120
- undefined,
121
- ]
140
+ Object {
141
+ "alignItems": "center",
142
+ "backgroundColor": "#d98a2c",
143
+ "borderRadius": 999,
144
+ "height": 20,
145
+ "justifyContent": "center",
146
+ "minWidth": 20,
147
+ "opacity": 1,
148
+ "paddingHorizontal": 8,
149
+ "transform": Array [
150
+ Object {
151
+ "scale": 1,
152
+ },
153
+ ],
154
+ }
122
155
  }
123
156
  themeIntent="warning"
157
+ themePadding="wideContent"
124
158
  >
125
159
  <Text
126
160
  style={
127
161
  Array [
128
162
  Object {
129
- "color": "#d98a2c",
163
+ "color": "#ffffff",
130
164
  "fontFamily": "BeVietnamPro-SemiBold",
131
165
  "fontSize": 12,
166
+ "includeFontPadding": false,
167
+ "textAlign": "center",
168
+ "textAlignVertical": "center",
132
169
  },
133
170
  undefined,
134
171
  ]
135
172
  }
136
- themeIntent="warning"
137
173
  >
138
174
  PENDING
139
175
  </Text>
140
176
  </View>
141
177
  `;
178
+
179
+ exports[`Badge renders correctly with custom props 1`] = `
180
+ <View
181
+ collapsable={false}
182
+ nativeID="animatedComponent"
183
+ style={
184
+ Object {
185
+ "alignItems": "center",
186
+ "backgroundColor": "#017d6d",
187
+ "borderRadius": 999,
188
+ "height": 20,
189
+ "justifyContent": "center",
190
+ "minWidth": 20,
191
+ "opacity": 1,
192
+ "paddingHorizontal": 8,
193
+ "transform": Array [
194
+ Object {
195
+ "scale": 1,
196
+ },
197
+ ],
198
+ }
199
+ }
200
+ testID="number-badge"
201
+ themeIntent="success"
202
+ themePadding="wideContent"
203
+ >
204
+ <Text
205
+ style={
206
+ Array [
207
+ Object {
208
+ "color": "#ffffff",
209
+ "fontFamily": "BeVietnamPro-SemiBold",
210
+ "fontSize": 12,
211
+ "includeFontPadding": false,
212
+ "textAlign": "center",
213
+ "textAlignVertical": "center",
214
+ },
215
+ undefined,
216
+ ]
217
+ }
218
+ >
219
+ 50+
220
+ </Text>
221
+ </View>
222
+ `;
@@ -0,0 +1,89 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`Status Badge renders correctly 1`] = `
4
+ <View>
5
+ <HeroIcon
6
+ name="activate"
7
+ style={
8
+ Array [
9
+ Object {
10
+ "color": "#292a2b",
11
+ "fontSize": 24,
12
+ },
13
+ undefined,
14
+ ]
15
+ }
16
+ testID="activate-icon"
17
+ themeIntent="text"
18
+ themeSize="medium"
19
+ />
20
+ <View
21
+ collapsable={false}
22
+ nativeID="animatedComponent"
23
+ style={
24
+ Object {
25
+ "backgroundColor": "#de350b",
26
+ "borderRadius": 999,
27
+ "height": 8,
28
+ "opacity": 1,
29
+ "position": "absolute",
30
+ "right": -2,
31
+ "top": -2,
32
+ "transform": Array [
33
+ Object {
34
+ "scale": 1,
35
+ },
36
+ ],
37
+ "width": 8,
38
+ }
39
+ }
40
+ themeIntent="danger"
41
+ />
42
+ </View>
43
+ `;
44
+
45
+ exports[`Status Badge renders correctly with intent 1`] = `
46
+ <View>
47
+ <Text
48
+ style={
49
+ Array [
50
+ Object {
51
+ "color": "#292a2b",
52
+ "fontFamily": "BeVietnamPro-Regular",
53
+ "fontSize": 14,
54
+ "letterSpacing": 0.42,
55
+ "lineHeight": 22,
56
+ },
57
+ undefined,
58
+ ]
59
+ }
60
+ themeFontSize="medium"
61
+ themeFontWeight="regular"
62
+ themeIntent="body"
63
+ >
64
+ Activity
65
+ </Text>
66
+ <View
67
+ collapsable={false}
68
+ nativeID="animatedComponent"
69
+ style={
70
+ Object {
71
+ "backgroundColor": "#017d6d",
72
+ "borderRadius": 999,
73
+ "height": 8,
74
+ "opacity": 1,
75
+ "position": "absolute",
76
+ "right": -2,
77
+ "top": -2,
78
+ "transform": Array [
79
+ Object {
80
+ "scale": 1,
81
+ },
82
+ ],
83
+ "width": 8,
84
+ }
85
+ }
86
+ themeIntent="success"
87
+ />
88
+ </View>
89
+ `;
@@ -1,16 +1,25 @@
1
- import { StyleProp, ViewStyle, ViewProps } from 'react-native';
2
- import React, { ReactElement } from 'react';
1
+ import { Animated, StyleProp, ViewStyle } from 'react-native';
2
+ import React from 'react';
3
3
  import { StyledView, StyledText } from './StyledBadge';
4
+ import BadgeStatus from './Status';
4
5
 
5
- interface BadgeProps extends ViewProps {
6
+ interface BadgeProps extends React.ComponentProps<typeof Animated.View> {
6
7
  /**
7
8
  * Content of the Badge.
8
9
  */
9
- content: string;
10
+ content: string | number;
11
+ /**
12
+ * Whether the Badge is visible.
13
+ */
14
+ visible?: boolean;
15
+ /**
16
+ * The maximum number displayed on the badge. If number exceeds this value, `${max}+` are displayed instead. (Only applied when content is number.)
17
+ */
18
+ max?: number;
10
19
  /**
11
20
  * Visual intent color to apply to Badge.
12
21
  */
13
- intent?: 'success' | 'warning' | 'danger' | 'info';
22
+ intent?: 'success' | 'warning' | 'danger' | 'info' | 'archived';
14
23
  /**
15
24
  * Additional style.
16
25
  */
@@ -21,21 +30,70 @@ interface BadgeProps extends ViewProps {
21
30
  testID?: string;
22
31
  }
23
32
 
33
+ const DEFAULT_MAX_NUMBER = 99;
34
+
35
+ const getPaddingState = (content: string): 'narrowContent' | 'wideContent' =>
36
+ content.length > 1 ? 'wideContent' : 'narrowContent';
37
+
24
38
  const Badge = ({
25
- content,
26
- intent = 'info',
39
+ content: originalContent,
40
+ visible = true,
41
+ max = DEFAULT_MAX_NUMBER,
42
+ intent = 'danger',
27
43
  style,
28
44
  testID,
29
45
  ...nativeProps
30
- }: BadgeProps): ReactElement => (
31
- <StyledView
32
- themeIntent={intent}
33
- style={style}
34
- testID={testID}
35
- {...nativeProps}
36
- >
37
- <StyledText themeIntent={intent}>{content}</StyledText>
38
- </StyledView>
39
- );
40
-
41
- export default Badge;
46
+ }: BadgeProps): JSX.Element => {
47
+ const { current: opacity } = React.useRef<Animated.Value>(
48
+ new Animated.Value(visible ? 1 : 0)
49
+ );
50
+ const isFirstRendering = React.useRef<boolean>(true);
51
+
52
+ React.useEffect(() => {
53
+ // Do not run animation on very first rendering
54
+ if (isFirstRendering.current) {
55
+ isFirstRendering.current = false;
56
+ return;
57
+ }
58
+
59
+ Animated.timing(opacity, {
60
+ toValue: visible ? 1 : 0,
61
+ duration: 150,
62
+ useNativeDriver: true,
63
+ }).start();
64
+ }, [visible, opacity]);
65
+
66
+ const content =
67
+ typeof originalContent === 'number' && originalContent > max
68
+ ? `${max}+`
69
+ : String(originalContent);
70
+
71
+ return (
72
+ <StyledView
73
+ {...nativeProps}
74
+ themeIntent={intent}
75
+ themePadding={getPaddingState(content)}
76
+ style={[
77
+ {
78
+ opacity,
79
+ transform: [
80
+ {
81
+ scale: opacity.interpolate({
82
+ inputRange: [0, 1],
83
+ outputRange: [0.5, 1],
84
+ }),
85
+ },
86
+ ],
87
+ },
88
+ style,
89
+ ]}
90
+ testID={testID}
91
+ >
92
+ <StyledText>{content}</StyledText>
93
+ </StyledView>
94
+ );
95
+ };
96
+
97
+ export default Object.assign(Badge, {
98
+ Status: BadgeStatus,
99
+ });
@@ -0,0 +1,163 @@
1
+ import React, { ReactChild } from 'react';
2
+ import { Pressable, StyleProp, ViewStyle } from 'react-native';
3
+
4
+ import { IconName } from '../Icon';
5
+ import LoadingIndicator from './LoadingIndicator';
6
+ import {
7
+ Intent,
8
+ StyledButtonContainer,
9
+ StyledButtonText,
10
+ StyledButtonIconWrapper,
11
+ StyledButtonIcon,
12
+ ThemeVariant,
13
+ } from './StyledButton';
14
+
15
+ export interface ButtonProps {
16
+ /**
17
+ * Helps users understand what will happen when they perform an action on the accessibility element when that result is not clear from the accessibility label.
18
+ */
19
+ accessibilityHint?: string;
20
+ /**
21
+ * A succinct label in a localized string that identifies the accessibility element
22
+ */
23
+ accessibilityLabel?: string;
24
+ /**
25
+ * Disable state of button.
26
+ */
27
+ disabled?: boolean;
28
+ /**
29
+ * Places an icon within the button, before the button's text
30
+ */
31
+ icon?: IconName;
32
+ /**
33
+ * Visual intent color to apply to button. It is required for `filled`, `outlined` and `text` variants.
34
+ */
35
+ intent?: 'primary' | 'secondary';
36
+ /**
37
+ * Loading state of button.
38
+ */
39
+ loading?: boolean;
40
+ /**
41
+ * Set the handler to handle press event.
42
+ */
43
+ onPress: () => void;
44
+ /**
45
+ * Places an icon within the button, after the button's text
46
+ */
47
+ rightIcon?: IconName;
48
+ /**
49
+ * Addditional style.
50
+ */
51
+ style?: StyleProp<ViewStyle>;
52
+ /**
53
+ * Testing id of the component.
54
+ */
55
+ testID?: string;
56
+ /**
57
+ * Button label.
58
+ */
59
+ text: ReactChild;
60
+ /**
61
+ * Button type.
62
+ */
63
+ variant?: 'basic-transparent' | 'filled' | 'outlined';
64
+ }
65
+
66
+ const FILLED_VARIANTS = {
67
+ primary: 'filled-primary',
68
+ secondary: 'filled-secondary',
69
+ } as const;
70
+
71
+ const OUTLINED_VARIANTS = {
72
+ primary: 'outlined-primary',
73
+ secondary: 'outlined-secondary',
74
+ } as const;
75
+
76
+ export const getThemeVariant = (
77
+ variant: 'basic-transparent' | 'filled' | 'outlined',
78
+ intent: Intent
79
+ ): ThemeVariant => {
80
+ switch (variant) {
81
+ case 'basic-transparent':
82
+ return variant;
83
+ case 'filled':
84
+ return FILLED_VARIANTS[intent];
85
+ case 'outlined':
86
+ return OUTLINED_VARIANTS[intent];
87
+ }
88
+ };
89
+
90
+ const Button = ({
91
+ accessibilityHint,
92
+ accessibilityLabel,
93
+ disabled = false,
94
+ icon,
95
+ intent = 'primary',
96
+ loading = false,
97
+ onPress,
98
+ rightIcon,
99
+ style,
100
+ testID,
101
+ text,
102
+ variant = 'filled',
103
+ }: ButtonProps) => (
104
+ <Pressable
105
+ accessibilityHint={accessibilityHint}
106
+ accessibilityLabel={accessibilityLabel}
107
+ disabled={disabled || loading}
108
+ onPress={onPress}
109
+ testID={testID}
110
+ >
111
+ {({ pressed }) => (
112
+ <StyledButtonContainer
113
+ disabled={disabled}
114
+ pressed={pressed}
115
+ style={style}
116
+ themeVariant={getThemeVariant(variant, intent)}
117
+ >
118
+ {loading === true ? (
119
+ <LoadingIndicator
120
+ testID={`${testID}-loading-indicator`}
121
+ themeVariant={getThemeVariant(variant, intent)}
122
+ />
123
+ ) : (
124
+ <>
125
+ {icon !== undefined && (
126
+ <StyledButtonIconWrapper themePosition="left">
127
+ <StyledButtonIcon
128
+ disabled={disabled}
129
+ icon={icon}
130
+ pressed={pressed}
131
+ testID={`${testID}-left-icon`}
132
+ themeVariant={getThemeVariant(variant, intent)}
133
+ />
134
+ </StyledButtonIconWrapper>
135
+ )}
136
+ <StyledButtonText
137
+ disabled={disabled}
138
+ ellipsizeMode="tail"
139
+ numberOfLines={1}
140
+ pressed={pressed}
141
+ themeVariant={getThemeVariant(variant, intent)}
142
+ >
143
+ {text}
144
+ </StyledButtonText>
145
+ {rightIcon !== undefined && (
146
+ <StyledButtonIconWrapper themePosition="right">
147
+ <StyledButtonIcon
148
+ disabled={disabled}
149
+ icon={rightIcon}
150
+ pressed={pressed}
151
+ testID={`${testID}-right-icon`}
152
+ themeVariant={getThemeVariant(variant, intent)}
153
+ />
154
+ </StyledButtonIconWrapper>
155
+ )}
156
+ </>
157
+ )}
158
+ </StyledButtonContainer>
159
+ )}
160
+ </Pressable>
161
+ );
162
+
163
+ export default Button;
@@ -0,0 +1,58 @@
1
+ import { View, ViewProps } from 'react-native';
2
+ import styled, { ReactNativeStyle } from '@emotion/native';
3
+ import { Theme } from '@emotion/react';
4
+
5
+ type Intent = 'primary' | 'secondary';
6
+
7
+ type ThemeVariant =
8
+ | 'basic-transparent'
9
+ | 'filled-primary'
10
+ | 'filled-secondary'
11
+ | 'outlined-primary'
12
+ | 'outlined-secondary';
13
+
14
+ const genLoadingIndicatorStyles = (
15
+ theme: Theme,
16
+ intent: Intent
17
+ ): ReactNativeStyle => ({
18
+ backgroundColor: theme.__hd__.button.colors[intent],
19
+ });
20
+
21
+ const StyledLoadingIndicatorWrapper = styled(View)<ViewProps>(({ theme }) => ({
22
+ flexDirection: 'row',
23
+ justifyContent: 'center',
24
+ alignItems: 'center',
25
+ paddingVertical: theme.space.xxsmall,
26
+ }));
27
+
28
+ const StyledLoadingDot = styled(View)<{
29
+ size?: number;
30
+ themeVariant: ThemeVariant;
31
+ }>(({ size = 12, themeVariant, theme }) => {
32
+ const themeStyling = () => {
33
+ switch (themeVariant) {
34
+ case 'basic-transparent':
35
+ case 'filled-primary':
36
+ case 'filled-secondary':
37
+ return {
38
+ backgroundColor: theme.__hd__.button.colors.invertedText,
39
+ };
40
+ case 'outlined-primary':
41
+ return genLoadingIndicatorStyles(theme, 'primary');
42
+ case 'outlined-secondary':
43
+ return genLoadingIndicatorStyles(theme, 'secondary');
44
+ }
45
+ };
46
+
47
+ return {
48
+ width: size,
49
+ height: size,
50
+ marginTop: theme.space.xsmall,
51
+ marginBottom: theme.space.xsmall,
52
+ marginHorizontal: theme.space.small,
53
+ borderRadius: theme.space.small,
54
+ ...themeStyling(),
55
+ };
56
+ });
57
+
58
+ export { StyledLoadingIndicatorWrapper, StyledLoadingDot };