@telus-uds/components-base 0.0.2-prerelease.5 → 0.0.2-prerelease.9

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 (429) hide show
  1. package/.ultra.cache.json +1 -0
  2. package/CHANGELOG.md +65 -0
  3. package/__fixtures__/Accessible.js +33 -0
  4. package/__fixtures__/Accessible.native.js +32 -0
  5. package/__fixtures__/testTheme.js +871 -52
  6. package/__tests__/ActivityIndicator/ActivityIndicator.test.jsx +1 -1
  7. package/__tests__/Button/ButtonBase.test.jsx +3 -32
  8. package/__tests__/Button/ButtonGroup.test.jsx +2 -2
  9. package/__tests__/Checkbox/Checkbox.test.jsx +94 -0
  10. package/__tests__/Checkbox/CheckboxGroup.test.jsx +247 -0
  11. package/__tests__/Icon/Icon.test.jsx +3 -3
  12. package/__tests__/IconButton/IconButton.test.jsx +52 -0
  13. package/__tests__/InputSupports/InputSupports.test.jsx +50 -0
  14. package/__tests__/List/List.test.jsx +60 -0
  15. package/__tests__/Modal/Modal.test.jsx +47 -0
  16. package/__tests__/Notification/Notification.test.jsx +20 -0
  17. package/__tests__/Pagination/Pagination.test.jsx +2 -2
  18. package/__tests__/Progress/Progress.test.jsx +79 -0
  19. package/__tests__/Radio/Radio.test.jsx +87 -0
  20. package/__tests__/Radio/RadioGroup.test.jsx +221 -0
  21. package/__tests__/RadioCard/RadioCard.test.jsx +87 -0
  22. package/__tests__/RadioCard/RadioCardGroup.test.jsx +247 -0
  23. package/__tests__/Search/Search.test.jsx +72 -0
  24. package/__tests__/Select/Select.test.jsx +93 -0
  25. package/__tests__/Skeleton/Skeleton.test.jsx +61 -0
  26. package/__tests__/StackView/StackView.test.jsx +0 -26
  27. package/__tests__/StepTracker/StepTracker.test.jsx +94 -0
  28. package/__tests__/Tabs/Tabs.test.jsx +200 -0
  29. package/__tests__/Tags/Tags.test.jsx +328 -0
  30. package/__tests__/TextInput/TextArea.test.jsx +34 -0
  31. package/__tests__/TextInput/{TextInput.test.jsx → TextInputBase.test.jsx} +20 -46
  32. package/__tests__/Tooltip/Tooltip.test.jsx +65 -0
  33. package/__tests__/Tooltip/getTooltipPosition.test.js +79 -0
  34. package/__tests__/utils/input.test.js +58 -0
  35. package/__tests__/utils/useCopy.test.js +42 -0
  36. package/__tests__/utils/useResponsiveProp.test.jsx +202 -0
  37. package/__tests__/utils/{spacing.test.jsx → useSpacingScale.test.jsx} +1 -1
  38. package/babel.config.js +20 -0
  39. package/jest.config.js +13 -4
  40. package/lib/A11yInfoProvider/index.js +54 -26
  41. package/lib/A11yText/index.js +37 -14
  42. package/lib/ActivityIndicator/Spinner.js +78 -0
  43. package/lib/ActivityIndicator/Spinner.native.js +121 -87
  44. package/lib/ActivityIndicator/index.js +28 -12
  45. package/lib/ActivityIndicator/shared.js +27 -12
  46. package/lib/BaseProvider/index.js +34 -11
  47. package/lib/Box/Box.js +54 -31
  48. package/lib/Box/index.js +13 -2
  49. package/lib/Button/Button.js +38 -10
  50. package/lib/Button/ButtonBase.js +115 -94
  51. package/lib/Button/ButtonGroup.js +94 -86
  52. package/lib/Button/ButtonLink.js +41 -13
  53. package/lib/Button/index.js +31 -4
  54. package/lib/Button/propTypes.js +32 -9
  55. package/lib/Card/Card.js +36 -41
  56. package/lib/Card/CardBase.js +78 -0
  57. package/lib/Card/PressableCardBase.js +137 -0
  58. package/lib/Card/index.js +40 -2
  59. package/lib/Checkbox/Checkbox.js +344 -0
  60. package/lib/Checkbox/CheckboxGroup.js +231 -0
  61. package/lib/Checkbox/CheckboxInput.js +74 -0
  62. package/lib/Checkbox/CheckboxInput.native.js +14 -0
  63. package/lib/Checkbox/index.js +21 -0
  64. package/lib/Divider/Divider.js +50 -24
  65. package/lib/Divider/index.js +13 -2
  66. package/lib/ExpandCollapse/Accordion.js +20 -7
  67. package/lib/ExpandCollapse/Control.js +50 -27
  68. package/lib/ExpandCollapse/ExpandCollapse.js +41 -24
  69. package/lib/ExpandCollapse/Panel.js +75 -37
  70. package/lib/ExpandCollapse/index.js +25 -7
  71. package/lib/Feedback/Feedback.js +85 -34
  72. package/lib/Feedback/index.js +13 -2
  73. package/lib/Fieldset/Fieldset.js +160 -0
  74. package/lib/Fieldset/FieldsetContainer.js +41 -0
  75. package/lib/Fieldset/FieldsetContainer.native.js +33 -0
  76. package/lib/Fieldset/Legend.js +33 -0
  77. package/lib/Fieldset/Legend.native.js +43 -0
  78. package/lib/Fieldset/cssReset.js +21 -0
  79. package/lib/Fieldset/index.js +13 -0
  80. package/lib/FlexGrid/Col/Col.js +67 -38
  81. package/lib/FlexGrid/Col/index.js +13 -2
  82. package/lib/FlexGrid/FlexGrid.js +70 -45
  83. package/lib/FlexGrid/Row/Row.js +48 -27
  84. package/lib/FlexGrid/Row/index.js +13 -2
  85. package/lib/FlexGrid/helpers/index.js +9 -1
  86. package/lib/FlexGrid/index.js +13 -2
  87. package/lib/FlexGrid/providers/GutterContext.js +15 -3
  88. package/lib/Icon/Icon.js +52 -47
  89. package/lib/Icon/IconText.js +100 -0
  90. package/lib/Icon/index.js +31 -3
  91. package/lib/IconButton/IconButton.js +135 -0
  92. package/lib/IconButton/index.js +13 -0
  93. package/lib/InputLabel/InputLabel.js +70 -34
  94. package/lib/InputLabel/LabelContent.js +31 -0
  95. package/lib/InputLabel/LabelContent.native.js +9 -1
  96. package/lib/InputLabel/index.js +13 -2
  97. package/lib/InputSupports/InputSupports.js +104 -0
  98. package/lib/InputSupports/index.js +13 -0
  99. package/lib/InputSupports/propTypes.js +66 -0
  100. package/lib/InputSupports/useInputSupports.js +41 -0
  101. package/lib/Link/ChevronLink.js +57 -15
  102. package/lib/Link/InlinePressable.js +50 -0
  103. package/lib/Link/InlinePressable.native.js +101 -0
  104. package/lib/Link/Link.js +30 -13
  105. package/lib/Link/LinkBase.js +114 -145
  106. package/lib/Link/TextButton.js +47 -17
  107. package/lib/Link/index.js +39 -4
  108. package/lib/List/List.js +80 -0
  109. package/lib/List/ListItem.js +237 -0
  110. package/lib/List/index.js +13 -0
  111. package/lib/Modal/Modal.js +226 -0
  112. package/lib/Modal/dictionary.js +16 -0
  113. package/lib/Modal/index.js +13 -0
  114. package/lib/Notification/Notification.js +200 -0
  115. package/lib/Notification/dictionary.js +15 -0
  116. package/lib/Notification/index.js +13 -0
  117. package/lib/Pagination/PageButton.js +45 -46
  118. package/lib/Pagination/Pagination.js +70 -40
  119. package/lib/Pagination/SideButton.js +74 -58
  120. package/lib/Pagination/dictionary.js +9 -2
  121. package/lib/Pagination/index.js +13 -2
  122. package/lib/Pagination/usePagination.js +12 -2
  123. package/lib/Progress/Progress.js +99 -0
  124. package/lib/Progress/ProgressBar.js +146 -0
  125. package/lib/Progress/ProgressBarBackground.js +57 -0
  126. package/lib/Progress/index.js +16 -0
  127. package/lib/Radio/Radio.js +292 -0
  128. package/lib/Radio/RadioButton.js +141 -0
  129. package/lib/Radio/RadioGroup.js +233 -0
  130. package/lib/Radio/RadioInput.js +76 -0
  131. package/lib/Radio/RadioInput.native.js +14 -0
  132. package/lib/Radio/index.js +21 -0
  133. package/lib/RadioCard/RadioCard.js +240 -0
  134. package/lib/RadioCard/RadioCardGroup.js +251 -0
  135. package/lib/RadioCard/index.js +21 -0
  136. package/lib/Search/Search.js +243 -0
  137. package/lib/Search/dictionary.js +19 -0
  138. package/lib/Search/index.js +13 -0
  139. package/lib/Select/Group.js +33 -0
  140. package/lib/Select/Group.native.js +25 -0
  141. package/lib/Select/Item.js +29 -0
  142. package/lib/Select/Item.native.js +19 -0
  143. package/lib/Select/Picker.js +79 -0
  144. package/lib/Select/Picker.native.js +115 -0
  145. package/lib/Select/Select.js +300 -0
  146. package/lib/Select/index.js +19 -0
  147. package/lib/SideNav/Item.js +54 -33
  148. package/lib/SideNav/ItemContent.js +41 -15
  149. package/lib/SideNav/ItemsGroup.js +46 -27
  150. package/lib/SideNav/SideNav.js +92 -69
  151. package/lib/SideNav/index.js +15 -1
  152. package/lib/Skeleton/Skeleton.js +137 -0
  153. package/lib/Skeleton/index.js +13 -0
  154. package/lib/Skeleton/skeleton.constant.js +12 -0
  155. package/lib/Skeleton/skeletonWebAnimation.js +27 -0
  156. package/lib/Skeleton/useSkeletonNativeAnimation.js +37 -0
  157. package/lib/Spacer/Spacer.js +31 -12
  158. package/lib/Spacer/index.js +13 -2
  159. package/lib/StackView/StackView.js +57 -33
  160. package/lib/StackView/StackWrap.js +33 -10
  161. package/lib/StackView/StackWrap.native.js +13 -2
  162. package/lib/StackView/StackWrapBox.js +50 -23
  163. package/lib/StackView/StackWrapGap.js +45 -19
  164. package/lib/StackView/common.js +19 -4
  165. package/lib/StackView/getStackedContent.js +49 -19
  166. package/lib/StackView/index.js +29 -5
  167. package/lib/StepTracker/Step.js +245 -0
  168. package/lib/StepTracker/StepTracker.js +197 -0
  169. package/lib/StepTracker/dictionary.js +17 -0
  170. package/lib/StepTracker/index.js +13 -0
  171. package/lib/Tabs/HorizontalScroll.js +199 -0
  172. package/lib/Tabs/ScrollViewEnd.js +66 -0
  173. package/lib/Tabs/ScrollViewEnd.native.js +41 -0
  174. package/lib/Tabs/Tabs.js +117 -0
  175. package/lib/Tabs/TabsItem.js +234 -0
  176. package/lib/Tabs/TabsScrollButton.js +121 -0
  177. package/lib/Tabs/dictionary.js +18 -0
  178. package/lib/Tabs/index.js +13 -0
  179. package/lib/Tabs/itemPositions.js +128 -0
  180. package/lib/Tags/Tags.js +250 -0
  181. package/lib/Tags/index.js +13 -0
  182. package/lib/TextInput/TextArea.js +109 -0
  183. package/lib/TextInput/TextInput.js +41 -303
  184. package/lib/TextInput/TextInputBase.js +252 -0
  185. package/lib/TextInput/index.js +23 -2
  186. package/lib/TextInput/propTypes.js +42 -0
  187. package/lib/ThemeProvider/ThemeProvider.js +38 -14
  188. package/lib/ThemeProvider/index.js +61 -6
  189. package/lib/ThemeProvider/useSetTheme.js +14 -5
  190. package/lib/ThemeProvider/useTheme.js +13 -4
  191. package/lib/ThemeProvider/useThemeTokens.js +86 -19
  192. package/lib/ThemeProvider/utils/index.js +31 -2
  193. package/lib/ThemeProvider/utils/styles.js +52 -16
  194. package/lib/ThemeProvider/utils/theme-tokens.js +94 -16
  195. package/lib/ToggleSwitch/ToggleSwitch.js +76 -52
  196. package/lib/ToggleSwitch/index.js +13 -2
  197. package/lib/Tooltip/Backdrop.js +56 -0
  198. package/lib/Tooltip/Backdrop.native.js +59 -0
  199. package/lib/Tooltip/Tooltip.js +357 -0
  200. package/lib/Tooltip/dictionary.js +15 -0
  201. package/lib/Tooltip/getTooltipPosition.js +172 -0
  202. package/lib/Tooltip/index.js +13 -0
  203. package/lib/TooltipButton/TooltipButton.js +83 -0
  204. package/lib/TooltipButton/index.js +13 -0
  205. package/lib/Typography/Typography.js +58 -43
  206. package/lib/Typography/index.js +13 -2
  207. package/lib/ViewportProvider/ViewportProvider.js +46 -0
  208. package/lib/ViewportProvider/index.js +22 -38
  209. package/lib/ViewportProvider/useViewport.js +15 -0
  210. package/lib/ViewportProvider/useViewportListener.js +57 -0
  211. package/lib/index.js +518 -24
  212. package/lib/utils/a11y/index.js +18 -0
  213. package/lib/utils/a11y/textSize.js +49 -0
  214. package/lib/utils/animation/index.js +15 -2
  215. package/lib/utils/animation/useVerticalExpandAnimation.js +28 -11
  216. package/lib/utils/children.js +87 -0
  217. package/lib/utils/index.js +163 -4
  218. package/lib/utils/info/index.js +19 -0
  219. package/lib/utils/info/platform/index.js +23 -0
  220. package/lib/utils/info/platform/platform.android.js +8 -0
  221. package/lib/utils/info/platform/platform.ios.js +8 -0
  222. package/lib/utils/info/platform/platform.js +8 -0
  223. package/lib/utils/info/platform/platform.native.js +11 -0
  224. package/lib/utils/info/versions.js +16 -0
  225. package/lib/utils/input.js +51 -33
  226. package/lib/utils/pressability.js +120 -0
  227. package/lib/utils/propTypes.js +269 -116
  228. package/lib/utils/useCopy.js +51 -0
  229. package/lib/utils/useHash.js +48 -0
  230. package/lib/utils/useHash.native.js +15 -0
  231. package/lib/utils/useResponsiveProp.js +59 -0
  232. package/lib/utils/{spacing/useSpacingScale.js → useSpacingScale.js} +45 -12
  233. package/lib/utils/useUniqueId.js +13 -4
  234. package/package.json +12 -9
  235. package/release-context.json +4 -4
  236. package/src/ActivityIndicator/{Spinner.web.jsx → Spinner.jsx} +0 -0
  237. package/src/Box/Box.jsx +11 -4
  238. package/src/Button/Button.jsx +9 -5
  239. package/src/Button/ButtonBase.jsx +69 -69
  240. package/src/Button/ButtonGroup.jsx +11 -24
  241. package/src/Button/ButtonLink.jsx +14 -4
  242. package/src/Button/propTypes.js +12 -2
  243. package/src/Card/Card.jsx +4 -30
  244. package/src/Card/CardBase.jsx +57 -0
  245. package/src/Card/PressableCardBase.jsx +112 -0
  246. package/src/Card/index.js +3 -0
  247. package/src/Checkbox/Checkbox.jsx +274 -0
  248. package/src/Checkbox/CheckboxGroup.jsx +196 -0
  249. package/src/Checkbox/CheckboxInput.jsx +55 -0
  250. package/src/Checkbox/CheckboxInput.native.jsx +6 -0
  251. package/src/Checkbox/index.js +5 -0
  252. package/src/ExpandCollapse/Control.jsx +1 -1
  253. package/src/Feedback/Feedback.jsx +31 -22
  254. package/src/Fieldset/Fieldset.jsx +129 -0
  255. package/src/Fieldset/FieldsetContainer.jsx +22 -0
  256. package/src/Fieldset/FieldsetContainer.native.jsx +16 -0
  257. package/src/Fieldset/Legend.jsx +16 -0
  258. package/src/Fieldset/Legend.native.jsx +22 -0
  259. package/src/Fieldset/cssReset.js +14 -0
  260. package/src/Fieldset/index.js +3 -0
  261. package/src/Icon/Icon.jsx +21 -26
  262. package/src/Icon/IconText.jsx +63 -0
  263. package/src/Icon/index.js +3 -2
  264. package/src/IconButton/IconButton.jsx +107 -0
  265. package/src/IconButton/index.js +3 -0
  266. package/src/InputLabel/InputLabel.jsx +11 -4
  267. package/src/InputLabel/{LabelContent.web.jsx → LabelContent.jsx} +0 -0
  268. package/src/InputSupports/InputSupports.jsx +75 -0
  269. package/src/InputSupports/index.js +3 -0
  270. package/src/InputSupports/propTypes.js +44 -0
  271. package/src/InputSupports/useInputSupports.js +30 -0
  272. package/src/Link/ChevronLink.jsx +28 -7
  273. package/src/Link/InlinePressable.jsx +37 -0
  274. package/src/Link/InlinePressable.native.jsx +73 -0
  275. package/src/Link/Link.jsx +17 -13
  276. package/src/Link/LinkBase.jsx +67 -148
  277. package/src/Link/TextButton.jsx +25 -11
  278. package/src/Link/index.js +2 -1
  279. package/src/List/List.jsx +47 -0
  280. package/src/List/ListItem.jsx +187 -0
  281. package/src/List/index.js +3 -0
  282. package/src/Modal/Modal.jsx +185 -0
  283. package/src/Modal/dictionary.js +9 -0
  284. package/src/Modal/index.js +3 -0
  285. package/src/Notification/Notification.jsx +149 -0
  286. package/src/Notification/dictionary.js +8 -0
  287. package/src/Notification/index.js +3 -0
  288. package/src/Pagination/PageButton.jsx +3 -17
  289. package/src/Pagination/SideButton.jsx +27 -38
  290. package/src/Progress/Progress.jsx +77 -0
  291. package/src/Progress/ProgressBar.jsx +110 -0
  292. package/src/Progress/ProgressBarBackground.jsx +34 -0
  293. package/src/Progress/index.js +6 -0
  294. package/src/Radio/Radio.jsx +233 -0
  295. package/src/Radio/RadioButton.jsx +131 -0
  296. package/src/Radio/RadioGroup.jsx +198 -0
  297. package/src/Radio/RadioInput.jsx +57 -0
  298. package/src/Radio/RadioInput.native.jsx +6 -0
  299. package/src/Radio/index.js +5 -0
  300. package/src/RadioCard/RadioCard.jsx +191 -0
  301. package/src/RadioCard/RadioCardGroup.jsx +211 -0
  302. package/src/RadioCard/index.js +5 -0
  303. package/src/Search/Search.jsx +204 -0
  304. package/src/Search/dictionary.js +12 -0
  305. package/src/Search/index.js +3 -0
  306. package/src/Select/Group.jsx +15 -0
  307. package/src/Select/Group.native.jsx +14 -0
  308. package/src/Select/Item.jsx +11 -0
  309. package/src/Select/Item.native.jsx +10 -0
  310. package/src/Select/Picker.jsx +67 -0
  311. package/src/Select/Picker.native.jsx +95 -0
  312. package/src/Select/Select.jsx +255 -0
  313. package/src/Select/index.js +8 -0
  314. package/src/SideNav/Item.jsx +2 -2
  315. package/src/Skeleton/Skeleton.jsx +98 -0
  316. package/src/Skeleton/index.js +3 -0
  317. package/src/Skeleton/skeleton.constant.js +3 -0
  318. package/src/Skeleton/skeletonWebAnimation.js +13 -0
  319. package/src/Skeleton/useSkeletonNativeAnimation.js +27 -0
  320. package/src/StackView/StackView.jsx +25 -17
  321. package/src/StackView/StackWrap.jsx +9 -1
  322. package/src/StackView/StackWrapBox.jsx +19 -7
  323. package/src/StackView/StackWrapGap.jsx +15 -5
  324. package/src/StackView/getStackedContent.jsx +8 -2
  325. package/src/StepTracker/Step.jsx +202 -0
  326. package/src/StepTracker/StepTracker.jsx +163 -0
  327. package/src/StepTracker/dictionary.js +10 -0
  328. package/src/StepTracker/index.js +3 -0
  329. package/src/Tabs/HorizontalScroll.jsx +165 -0
  330. package/src/Tabs/ScrollViewEnd.jsx +53 -0
  331. package/src/Tabs/ScrollViewEnd.native.jsx +24 -0
  332. package/src/Tabs/Tabs.jsx +89 -0
  333. package/src/Tabs/TabsItem.jsx +204 -0
  334. package/src/Tabs/TabsScrollButton.jsx +100 -0
  335. package/src/Tabs/dictionary.js +11 -0
  336. package/src/Tabs/index.js +3 -0
  337. package/src/Tabs/itemPositions.js +101 -0
  338. package/src/Tags/Tags.jsx +207 -0
  339. package/src/Tags/index.js +3 -0
  340. package/src/TextInput/TextArea.jsx +78 -0
  341. package/src/TextInput/TextInput.jsx +17 -290
  342. package/src/TextInput/TextInputBase.jsx +210 -0
  343. package/src/TextInput/index.js +2 -1
  344. package/src/TextInput/propTypes.js +29 -0
  345. package/src/ThemeProvider/useThemeTokens.js +56 -5
  346. package/src/ThemeProvider/utils/styles.js +18 -5
  347. package/src/ThemeProvider/utils/theme-tokens.js +46 -5
  348. package/src/ToggleSwitch/ToggleSwitch.jsx +3 -4
  349. package/src/Tooltip/Backdrop.jsx +60 -0
  350. package/src/Tooltip/Backdrop.native.jsx +33 -0
  351. package/src/Tooltip/Tooltip.jsx +294 -0
  352. package/src/Tooltip/dictionary.js +8 -0
  353. package/src/Tooltip/getTooltipPosition.js +161 -0
  354. package/src/Tooltip/index.js +3 -0
  355. package/src/TooltipButton/TooltipButton.jsx +49 -0
  356. package/src/TooltipButton/index.js +3 -0
  357. package/src/Typography/Typography.jsx +10 -20
  358. package/src/ViewportProvider/ViewportProvider.jsx +21 -0
  359. package/src/ViewportProvider/index.jsx +2 -41
  360. package/src/ViewportProvider/useViewport.js +5 -0
  361. package/src/ViewportProvider/useViewportListener.js +43 -0
  362. package/src/index.js +31 -3
  363. package/src/utils/a11y/index.js +1 -0
  364. package/src/utils/a11y/textSize.js +30 -0
  365. package/src/utils/children.jsx +66 -0
  366. package/src/utils/index.js +11 -1
  367. package/src/utils/info/index.js +8 -0
  368. package/src/utils/info/platform/index.js +11 -0
  369. package/src/utils/info/platform/platform.android.js +1 -0
  370. package/src/utils/info/platform/platform.ios.js +1 -0
  371. package/src/utils/info/platform/platform.js +1 -0
  372. package/src/utils/info/platform/platform.native.js +4 -0
  373. package/src/utils/info/versions.js +6 -0
  374. package/src/utils/input.js +20 -12
  375. package/src/utils/pressability.js +96 -0
  376. package/src/utils/propTypes.js +195 -56
  377. package/src/utils/useCopy.js +39 -0
  378. package/src/utils/useHash.js +34 -0
  379. package/src/utils/useHash.native.js +6 -0
  380. package/src/utils/useResponsiveProp.js +50 -0
  381. package/src/utils/{spacing/useSpacingScale.js → useSpacingScale.js} +25 -10
  382. package/stories/A11yText/A11yText.stories.jsx +4 -8
  383. package/stories/Button/Button.stories.jsx +5 -0
  384. package/stories/Card/Card.stories.jsx +1 -1
  385. package/stories/Checkbox/Checkbox.stories.jsx +94 -0
  386. package/stories/Feedback/Feedback.stories.jsx +5 -6
  387. package/stories/Icon/Icon.stories.jsx +27 -7
  388. package/stories/IconButton/IconButton.stories.jsx +50 -0
  389. package/stories/InputLabel/InputLabel.stories.jsx +8 -3
  390. package/stories/Link/ChevronLink.stories.jsx +3 -3
  391. package/stories/Link/Link.stories.jsx +28 -18
  392. package/stories/List/List.stories.jsx +117 -0
  393. package/stories/Modal/Modal.stories.jsx +29 -0
  394. package/stories/Notification/Notification.stories.jsx +82 -0
  395. package/stories/Progress/Progress.stories.jsx +93 -0
  396. package/stories/Radio/Radio.stories.jsx +100 -0
  397. package/stories/RadioCard/RadioCard.stories.jsx +98 -0
  398. package/stories/Search/Search.stories.jsx +16 -0
  399. package/stories/Select/Select.stories.jsx +55 -0
  400. package/stories/Skeleton/Skeleton.stories.jsx +36 -0
  401. package/stories/Spacer/Spacer.stories.jsx +7 -2
  402. package/stories/StackView/StackView.stories.jsx +10 -0
  403. package/stories/StackView/StackWrap.stories.jsx +12 -0
  404. package/stories/StepTracker/StepTracker.stories.jsx +71 -0
  405. package/stories/Tabs/Tabs.stories.jsx +97 -0
  406. package/stories/Tags/Tags.stories.jsx +69 -0
  407. package/stories/TextInput/TextArea.stories.jsx +100 -0
  408. package/stories/Tooltip/Tooltip.stories.jsx +81 -0
  409. package/stories/TooltipButton/TooltipButton.stories.jsx +11 -0
  410. package/stories/{platform-supports.web.jsx → platform-supports.jsx} +0 -0
  411. package/stories/supports.jsx +36 -2
  412. package/__fixtures__/accessible.icon.svg +0 -6
  413. package/babel.config.json +0 -8
  414. package/docs/Contributing.stories.mdx +0 -9
  415. package/docs/Fonts.stories.mdx +0 -104
  416. package/docs/Icons.stories.mdx +0 -144
  417. package/docs/Introduction.stories.mdx +0 -9
  418. package/lib/ActivityIndicator/Spinner.web.js +0 -55
  419. package/lib/InputLabel/LabelContent.web.js +0 -17
  420. package/lib/Pagination/useCopy.js +0 -10
  421. package/lib/config/svgr-icons-web.js +0 -9
  422. package/lib/config/svgr-icons.js +0 -52
  423. package/lib/utils/spacing/index.js +0 -2
  424. package/lib/utils/spacing/utils.js +0 -32
  425. package/src/Pagination/useCopy.js +0 -7
  426. package/src/config/svgr-icons-web.js +0 -11
  427. package/src/config/svgr-icons.js +0 -46
  428. package/src/utils/spacing/index.js +0 -3
  429. package/src/utils/spacing/utils.js +0 -28
@@ -1,14 +1,6 @@
1
- import React, { useState } from 'react'
1
+ import React from 'react'
2
2
  import PropTypes from 'prop-types'
3
- import {
4
- Text,
5
- Platform,
6
- StyleSheet,
7
- Pressable,
8
- PixelRatio,
9
- View,
10
- TouchableWithoutFeedback
11
- } from 'react-native'
3
+ import { Text, Platform, StyleSheet } from 'react-native'
12
4
  import {
13
5
  a11yProps,
14
6
  hrefAttrsProp,
@@ -16,40 +8,47 @@ import {
16
8
  linkProps,
17
9
  getTokensPropType
18
10
  } from '../utils/propTypes'
11
+ import { resolvePressableTokens } from '../utils/pressability'
19
12
 
20
- import { useThemeTokens, applyTextStyles } from '../ThemeProvider'
21
-
22
- const selectContentStyles = ({ color }) => ({
23
- color
24
- })
13
+ import InlinePressable from './InlinePressable'
14
+ import { applyTextStyles, applyOuterBorder } from '../ThemeProvider'
15
+ import { IconText, iconComponentPropTypes } from '../Icon'
25
16
 
26
17
  const selectOuterBorderStyles = ({
27
18
  outerBorderColor,
28
19
  outerBorderWidth,
29
20
  outerBorderGap,
30
- outerBorderRadius,
21
+ borderRadius,
31
22
  outerBorderOutline
32
23
  }) =>
33
24
  // A view wrapper with a border on native messes up inline text alignment
34
25
  // so for now make focus styles strictly web-only
35
26
  Platform.OS === 'web'
36
27
  ? {
37
- margin: -1 * (outerBorderGap + outerBorderWidth) || 0,
38
- padding: outerBorderGap,
39
28
  // Allow theme to define outline, or, turn off outline and use border if rounded corners required
40
29
  outline: outerBorderOutline,
41
- borderWidth: outerBorderWidth,
42
- borderColor: outerBorderColor,
43
- borderRadius: outerBorderRadius,
30
+ ...applyOuterBorder({
31
+ outerBorderColor,
32
+ outerBorderWidth,
33
+ outerBorderGap,
34
+ borderRadius
35
+ }),
44
36
  // Stops focus ring stretching horizontally if parent has display: block
45
37
  // width: fit-content isn't supported on Firefox; can't cascade props like CSS `width: fit-content; width: --moz-fit-content;`
46
38
  display: 'inline-flex'
47
39
  }
48
40
  : {}
49
41
 
50
- const selectTextStyles = ({ textLine, textLineStyle }) => ({
42
+ const selectTextStyles = ({ color, textLine, textLineStyle }) => ({
43
+ color,
51
44
  textDecorationLine: textLine,
52
- textDecorationStyle: textLineStyle
45
+ textDecorationStyle: textLineStyle,
46
+ ...Platform.select({
47
+ web: {
48
+ // TODO: https://github.com/telus/universal-design-system/issues/487
49
+ transition: 'color 200ms'
50
+ }
51
+ })
53
52
  })
54
53
 
55
54
  const selectBlockStyles = ({ blockFontWeight, blockFontSize, blockLineHeight, blockFontName }) =>
@@ -60,20 +59,11 @@ const selectBlockStyles = ({ blockFontWeight, blockFontSize, blockLineHeight, bl
60
59
  fontName: blockFontName
61
60
  })
62
61
 
63
- const selectIconStyles = ({
64
- iconSize,
65
- iconGapBefore,
66
- iconGapAfter,
67
- iconScale,
68
- iconTranslateX,
69
- iconTranslateY
70
- }) => ({
71
- scale: iconScale,
62
+ const selectIconTokens = ({ color, iconSize, iconTranslateX, iconTranslateY }) => ({
63
+ color,
72
64
  translateX: iconTranslateX,
73
65
  translateY: iconTranslateY,
74
- size: iconSize,
75
- gapBefore: iconGapBefore,
76
- gapAfter: iconGapAfter
66
+ size: iconSize
77
67
  })
78
68
 
79
69
  /**
@@ -103,136 +93,62 @@ const LinkBase = ({
103
93
  onPress,
104
94
  icon,
105
95
  iconPosition = icon ? 'left' : undefined,
106
- iconVariant,
96
+ iconProps,
107
97
  variant,
108
- tokens,
98
+ tokens = {},
109
99
  children,
110
100
  accessibilityRole = 'link',
111
101
  ...props
112
102
  }) => {
113
- const handlePress = linkProps.handleHref({ href, onPress })
114
-
115
- const [isFocused, setIsFocused] = useState(false)
116
- const handleFocus = () => setIsFocused(true)
117
- const handleBlur = () => setIsFocused(false)
118
-
119
- const [isHovered, setIsHovered] = useState(false)
120
- const handleHoverIn = () => setIsHovered(true)
121
- const handleHoverOut = () => setIsHovered(false)
122
-
123
- const [isPressed, setIsPressed] = useState(false)
124
- const handlePressIn = () => setIsPressed(true)
125
- const handlePressOut = () => setIsPressed(false)
126
-
127
103
  const { hrefAttrs, rest } = hrefAttrsProp.bundle(props)
128
104
  const linkPropSet = linkProps.select({
129
105
  accessibilityRole,
130
106
  href,
131
- onPress: handlePress,
132
- onPressIn: handlePressIn,
133
- onPressOut: handlePressOut,
134
- onFocus: handleFocus,
135
- onBlur: handleBlur,
136
- onMouseEnter: handleHoverIn,
137
- onMouseLeave: handleHoverOut,
138
- ...hrefAttrsProp.spread(hrefAttrs),
107
+ onPress: linkProps.handleHref({ href, onPress }),
108
+ hrefAttrs,
139
109
  ...rest
140
110
  })
141
111
 
142
- const themeTokens = useThemeTokens('Link', tokens, variant, {
143
- focus: isFocused,
144
- hover: isHovered,
145
- pressed: isPressed,
146
- iconPosition
147
- })
148
- const IconComponent = icon || themeTokens.icon
149
- const hasIcon = !!IconComponent
150
-
151
- const textStyles = selectTextStyles(themeTokens)
152
- const outerBorderStyles = selectOuterBorderStyles(themeTokens)
153
- const contentStyles = selectContentStyles(themeTokens)
154
- const blockStyles = selectBlockStyles(themeTokens)
155
- const iconStyles = selectIconStyles(themeTokens)
156
-
157
- // TODO: re-apply support for inline links
158
- const isNested = false
112
+ const resolveLinkTokens = (pressState) =>
113
+ resolvePressableTokens(tokens, pressState, { iconPosition })
159
114
 
160
115
  // On web, this makes focus rings wrap only the link, not the entire block
161
116
  const blockLeftStyle = Platform.OS === 'web' && staticStyles.blockLeft
162
117
 
163
- // Apply typographic text styles if not inheriting, and block positioning if a block
164
- const blockTextStyles = !isNested && blockStyles
165
-
166
- if (!hasIcon) {
167
- // onPressIn / onPressOut only work if on TouchableWithoutFeedback, onFocus only works if on Text
168
- const { onPress: _onPress, onPressIn, onPressOut, ...textProps } = linkPropSet
169
- return (
170
- // TouchableWithoutFeedback modifies its child so this stack is all (touchable) Text: no Views
171
- <TouchableWithoutFeedback onPressIn={onPressIn} onPressOut={onPressOut} onPress={_onPress}>
172
- <Text
173
- {...textProps}
174
- style={[outerBorderStyles, blockLeftStyle, contentStyles, blockTextStyles, textStyles]}
175
- >
176
- {children}
177
- </Text>
178
- </TouchableWithoutFeedback>
179
- )
180
- }
181
-
182
- // Scale icon with text, but with a cap so text isn't squashed at large scales
183
- const iconScale = Math.min(PixelRatio.getFontScale(), 2)
184
-
185
- const iconTokens = {
186
- size: iconStyles.size ? iconStyles.size * iconScale : undefined,
187
- color: contentStyles.color ?? undefined,
188
- scale: iconStyles.scale ?? undefined,
189
- translateX: iconStyles.translateX ?? undefined,
190
- translateY: iconStyles.translateY ?? undefined
191
- }
192
-
193
- const iconContent = <IconComponent tokens={iconTokens} variant={iconVariant} />
194
-
195
- const iconBlock = isNested ? (
196
- // TODO: when reimplementing inline support, insert an appropriate space character
197
- // based on the value of gapBefore and gapAfter on native (no inline margins/padding)
198
- iconContent
199
- ) : (
200
- <View
201
- style={[
202
- iconPosition === 'left' && { marginRight: iconStyles.gapAfter * iconScale },
203
- iconPosition === 'right' && { marginLeft: iconStyles.gapBefore * iconScale }
204
- ]}
205
- >
206
- {iconContent}
207
- </View>
208
- )
209
-
210
- // TODO: this doesn't work well when nested inline but does allow block-links to have icons align
211
- // properly on Android which purely inline links can't do. Add an isNested case that is similar to
212
- // https://github.com/telus/universal-design-system/pull/233
213
118
  return (
214
- <Pressable
119
+ <InlinePressable
215
120
  {...linkPropSet}
216
- style={[outerBorderStyles, blockLeftStyle, staticStyles.rowContainer]}
121
+ style={(linkState) => {
122
+ const themeTokens = resolveLinkTokens(linkState)
123
+ const outerBorderStyles = selectOuterBorderStyles(themeTokens)
124
+ const hasIcon = Boolean(icon || themeTokens.icon)
125
+ return [outerBorderStyles, blockLeftStyle, hasIcon && staticStyles.rowContainer]
126
+ }}
217
127
  >
218
- {iconPosition === 'left' && iconBlock}
219
- <Text
220
- style={[
221
- contentStyles,
222
- blockTextStyles,
223
- textStyles,
224
- Platform.select({
225
- web: {
226
- // TODO: https://github.com/telus/universal-design-system/issues/487
227
- transition: 'color 200ms'
228
- }
229
- })
230
- ]}
231
- >
232
- {children}
233
- </Text>
234
- {iconPosition === 'right' && iconBlock}
235
- </Pressable>
128
+ {(linkState) => {
129
+ const themeTokens = resolveLinkTokens(linkState)
130
+ const textStyles = selectTextStyles(themeTokens)
131
+ const iconTokens = selectIconTokens(themeTokens)
132
+
133
+ // TODO: may need to apply some smarter text inheritance here if inline to avoid native
134
+ // issues like double-application of line heights breaking align-items: baseline
135
+ const blockTextStyles = selectBlockStyles(themeTokens)
136
+
137
+ const IconComponent = icon || themeTokens.icon
138
+ const { iconSpace } = themeTokens
139
+
140
+ return (
141
+ <IconText
142
+ icon={IconComponent}
143
+ iconPosition={iconPosition}
144
+ space={iconSpace}
145
+ iconProps={{ ...iconProps, tokens: iconTokens }}
146
+ >
147
+ <Text style={[textStyles, blockTextStyles, staticStyles.baseline]}>{children}</Text>
148
+ </IconText>
149
+ )
150
+ }}
151
+ </InlinePressable>
236
152
  )
237
153
  }
238
154
 
@@ -244,7 +160,7 @@ LinkBase.propTypes = {
244
160
  /**
245
161
  * Optional variant that may be passed down to the link's icon if there is one
246
162
  */
247
- iconVariant: variantProp.propType,
163
+ iconProps: PropTypes.exact(iconComponentPropTypes),
248
164
  /**
249
165
  * A function component for an SVG icon to render inside the link. Inherits size and color from
250
166
  * the link and any Typography the link is nested inside.
@@ -256,7 +172,7 @@ LinkBase.propTypes = {
256
172
  iconPosition: PropTypes.oneOf(['left', 'right']),
257
173
  /**
258
174
  * On Web if href is passed, React Native Web maps this object's props to
259
- * `rel`, `target` and (>= RNW 0.15.0) `download` attrs.
175
+ * `rel`, `target` and `download` attrs.
260
176
  */
261
177
  hrefAttrs: PropTypes.shape(hrefAttrsProp.types)
262
178
  }
@@ -269,6 +185,9 @@ const staticStyles = StyleSheet.create({
269
185
  flexDirection: 'row',
270
186
  alignItems: 'center',
271
187
  justifyContent: 'flex-start'
188
+ },
189
+ baseline: {
190
+ alignSelf: 'baseline'
272
191
  }
273
192
  })
274
193
 
@@ -1,24 +1,36 @@
1
1
  import React from 'react'
2
2
  import PropTypes from 'prop-types'
3
3
 
4
+ import { useThemeTokensCallback } from '../ThemeProvider'
4
5
  import LinkBase from './LinkBase'
5
6
 
7
+ /**
8
+ * `TextButton` is a button that looks like a Link. It uses the same theming and variants as
9
+ * Link but has the accessibility role of a `Button`. It should be used for actions that
10
+ * take place on the current page, or for navigation within an app.
11
+ */
6
12
  const TextButton = ({
7
13
  onPress,
8
14
  children,
9
- variant = {},
15
+ variant,
16
+ tokens,
17
+ // TODO: this may need to use `link` role on Web in the case of being passed both `href` and
18
+ // `onPress` in an omniplatform app that uses React Navigation's useLinkProps for internal nav.
10
19
  accessibilityRole = 'button',
11
20
  ...linkProps
12
- }) => (
13
- <LinkBase
14
- onPress={onPress}
15
- accessibilityRole={accessibilityRole}
16
- variant={{ component: 'TextButton', ...variant }}
17
- {...linkProps}
18
- >
19
- {children}
20
- </LinkBase>
21
- )
21
+ }) => {
22
+ const getTokens = useThemeTokensCallback('Link', tokens, variant)
23
+ return (
24
+ <LinkBase
25
+ onPress={onPress}
26
+ accessibilityRole={accessibilityRole}
27
+ tokens={getTokens}
28
+ {...linkProps}
29
+ >
30
+ {children}
31
+ </LinkBase>
32
+ )
33
+ }
22
34
 
23
35
  TextButton.propTypes = {
24
36
  ...LinkBase.propTypes,
@@ -26,6 +38,8 @@ TextButton.propTypes = {
26
38
  }
27
39
 
28
40
  // Remove incompatible Link prop (if this build includes propTypes)
41
+ // TODO: test if this works with web navigation in omniplatform React Navigation
42
+ // https://github.com/telus/universal-design-system/issues/665
29
43
  // eslint-disable-next-line react/forbid-foreign-prop-types
30
44
  if (TextButton.propTypes?.href) delete TextButton.propTypes.href
31
45
 
package/src/Link/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import ChevronLink from './ChevronLink'
2
2
  import Link from './Link'
3
+ import LinkBase from './LinkBase'
3
4
  import TextButton from './TextButton'
4
5
 
5
- export { ChevronLink, Link, TextButton }
6
+ export { ChevronLink, Link, LinkBase, TextButton }
@@ -0,0 +1,47 @@
1
+ import React, { cloneElement, Children } from 'react'
2
+ import { View, Platform } from 'react-native'
3
+ import PropTypes from 'prop-types'
4
+ import { getTokensPropType, variantProp, componentPropType } from '../utils'
5
+ import { a11yProps } from '../utils/propTypes'
6
+ import ListItem from './ListItem'
7
+
8
+ /**
9
+ * A Unordered List component has a child a ListItem that
10
+ * allows icon, dividers and customized typography
11
+ */
12
+ const List = ({ children, showDivider, tokens, variant, ...rest }) => {
13
+ const accessibilityRole = Platform.select({ web: 'list', default: 'none' })
14
+ const a11y = a11yProps.select(rest)
15
+ const items = Children.map(children, (child, index) => {
16
+ if (child.type.name === ListItem.name) {
17
+ return cloneElement(child, {
18
+ showDivider,
19
+ isLastItem: index + 1 === Children.count(children),
20
+ tokens,
21
+ variant
22
+ })
23
+ }
24
+ return child
25
+ })
26
+
27
+ return (
28
+ <View accessibilityRole={accessibilityRole} {...a11y}>
29
+ {items}
30
+ </View>
31
+ )
32
+ }
33
+
34
+ List.Item = ListItem
35
+
36
+ List.propTypes = {
37
+ ...a11yProps.types,
38
+ tokens: getTokensPropType('List'),
39
+ variant: variantProp.propType,
40
+ children: componentPropType('ListItem'),
41
+ /**
42
+ * In case it is not the last item allow display divider
43
+ */
44
+ showDivider: PropTypes.bool
45
+ }
46
+
47
+ export default List
@@ -0,0 +1,187 @@
1
+ import React from 'react'
2
+ import { View, Platform, Text, StyleSheet } from 'react-native'
3
+ import PropTypes from 'prop-types'
4
+ import { useThemeTokens, applyTextStyles } from '../ThemeProvider'
5
+ import { getTokensPropType, variantProp } from '../utils'
6
+
7
+ const selectBulletStyles = ({ itemBulletWidth, itemBulletHeight, itemBulletColor }) => ({
8
+ width: itemBulletWidth,
9
+ height: itemBulletHeight,
10
+ borderRadius: itemBulletHeight / 2,
11
+ backgroundColor: itemBulletColor
12
+ })
13
+
14
+ const selectBulletContainerStyles = ({ itemBulletContainerWidth, itemBulletContainerAlign }) => ({
15
+ width: itemBulletContainerWidth,
16
+ alignItems: itemBulletContainerAlign,
17
+ justifyContent: itemBulletContainerAlign
18
+ })
19
+
20
+ const selectItemIconTokens = ({ itemIconSize, itemIconColor }) => ({
21
+ size: itemIconSize,
22
+ color: itemIconColor
23
+ })
24
+
25
+ const selectSideItemContainerStyles = ({ listGutter }) => ({
26
+ marginRight: listGutter
27
+ })
28
+
29
+ const selectItemStyles = ({ itemFontWeight, itemFontSize, itemLineHeight, itemFontName }) =>
30
+ applyTextStyles({
31
+ fontWeight: itemFontWeight,
32
+ fontSize: itemFontSize,
33
+ lineHeight: itemLineHeight,
34
+ fontName: itemFontName
35
+ })
36
+
37
+ const selectItemBlockStyles = ({ interItemMargin }) => ({
38
+ marginBottom: interItemMargin
39
+ })
40
+
41
+ const selectDividerStyles = ({ dividerColor, dividerSize, interItemMarginWithDivider }) => ({
42
+ borderBottomWidth: dividerSize,
43
+ borderColor: dividerColor,
44
+ marginBottom: interItemMarginWithDivider,
45
+ paddingBottom: interItemMarginWithDivider
46
+ })
47
+
48
+ /**
49
+ * ListItem is responsible for rendering icon or a bullet as side item
50
+ */
51
+ const ListItem = ({
52
+ tokens,
53
+ variant,
54
+ icon,
55
+ iconColor,
56
+ iconSize,
57
+ showDivider,
58
+ children,
59
+ isLastItem
60
+ }) => {
61
+ const themeTokens = useThemeTokens('List', tokens, variant)
62
+
63
+ const itemStyles = selectItemStyles(themeTokens)
64
+ const itemBlockStyles = selectItemBlockStyles(themeTokens)
65
+ const dividerStyles = selectDividerStyles(themeTokens)
66
+ const itemBulletContainerStyles = selectBulletContainerStyles(themeTokens)
67
+ const itemBulletStyles = selectBulletStyles(themeTokens)
68
+ const iconTokens = selectItemIconTokens(themeTokens)
69
+ const sideItemContainerStyles = selectSideItemContainerStyles(themeTokens)
70
+ const accessibilityRole = Platform.select({ web: 'listitem', default: 'item' })
71
+
72
+ const areChildrenStrings = () => {
73
+ if (Array.isArray(children)) {
74
+ return children.every((child) => typeof child === 'string')
75
+ }
76
+
77
+ return typeof children === 'string'
78
+ }
79
+
80
+ const renderItem = () => {
81
+ if (areChildrenStrings()) {
82
+ return <Text style={itemStyles}>{children}</Text>
83
+ }
84
+
85
+ return <View>{children}</View>
86
+ }
87
+
88
+ /**
89
+ * Function responsible returning styling, in case the item is the last shouldn't
90
+ * add extra margin on the bottom, if "showDivider" is true it should add a divider
91
+ * and custom margin and padding, otherwise just adds a margin to the bottom
92
+ */
93
+ const getContainerStyle = () => {
94
+ if (isLastItem) {
95
+ return undefined
96
+ }
97
+
98
+ if (showDivider) {
99
+ return dividerStyles
100
+ }
101
+
102
+ return itemBlockStyles
103
+ }
104
+
105
+ /**
106
+ * Renders item bullet or Icon in case it's defined
107
+ * in case children are string the icon is centered otherwise
108
+ * it will align itself at start of the container
109
+ */
110
+ const renderMarker = () => {
111
+ const IconComponent = icon || <></>
112
+
113
+ if (icon) {
114
+ return (
115
+ <View
116
+ style={[
117
+ sideItemContainerStyles,
118
+ areChildrenStrings() ? staticStyles.centeredIcons : undefined
119
+ ]}
120
+ >
121
+ <IconComponent
122
+ tokens={{
123
+ ...iconTokens,
124
+ size: iconSize || iconTokens.size,
125
+ color: iconColor || iconTokens.color
126
+ }}
127
+ />
128
+ </View>
129
+ )
130
+ }
131
+
132
+ return (
133
+ <View style={[sideItemContainerStyles, itemBulletContainerStyles]}>
134
+ <View style={itemBulletStyles} testID="unordered-item-bullet" />
135
+ </View>
136
+ )
137
+ }
138
+
139
+ return (
140
+ <View
141
+ style={[staticStyles.itemContainer, getContainerStyle()]}
142
+ accessibilityRole={accessibilityRole}
143
+ >
144
+ {renderMarker()}
145
+ {renderItem()}
146
+ </View>
147
+ )
148
+ }
149
+
150
+ const staticStyles = StyleSheet.create({
151
+ itemContainer: {
152
+ flexDirection: 'row'
153
+ },
154
+ centeredIcons: {
155
+ justifyContent: 'center'
156
+ }
157
+ })
158
+
159
+ ListItem.propTypes = {
160
+ tokens: getTokensPropType('List'),
161
+ variant: variantProp.propType,
162
+ children: PropTypes.node.isRequired,
163
+ /**
164
+ * Renders side item icon
165
+ */
166
+ icon: PropTypes.func,
167
+ /**
168
+ * Will set display icon color
169
+ */
170
+ iconColor: PropTypes.string,
171
+ /**
172
+ * Allow the user define the icon size if not defined the theme's file
173
+ */
174
+ iconSize: PropTypes.number,
175
+ /**
176
+ * @ignore
177
+ * Defined by parent if it's last item on the list
178
+ */
179
+ isLastItem: PropTypes.bool,
180
+ /**
181
+ * @ignore
182
+ * In case it is not the last item allow display divider
183
+ */
184
+ showDivider: PropTypes.bool
185
+ }
186
+
187
+ export default ListItem
@@ -0,0 +1,3 @@
1
+ import List from './List'
2
+
3
+ export default List