@telus-uds/components-base 0.0.2-prerelease.4 → 0.0.2-prerelease.8

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 (447) hide show
  1. package/.ultra.cache.json +1 -0
  2. package/CHANGELOG.md +76 -0
  3. package/__fixtures__/Accessible.js +33 -0
  4. package/__fixtures__/Accessible.native.js +32 -0
  5. package/__fixtures__/testTheme.js +940 -54
  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__/Divider/Divider.test.jsx +26 -5
  12. package/__tests__/Feedback/Feedback.test.jsx +42 -0
  13. package/__tests__/Icon/Icon.test.jsx +3 -3
  14. package/__tests__/InputSupports/InputSupports.test.jsx +50 -0
  15. package/__tests__/List/List.test.jsx +60 -0
  16. package/__tests__/Modal/Modal.test.jsx +47 -0
  17. package/__tests__/Notification/Notification.test.jsx +20 -0
  18. package/__tests__/Pagination/Pagination.test.jsx +2 -2
  19. package/__tests__/Progress/Progress.test.jsx +79 -0
  20. package/__tests__/Radio/Radio.test.jsx +87 -0
  21. package/__tests__/Radio/RadioGroup.test.jsx +221 -0
  22. package/__tests__/RadioCard/RadioCard.test.jsx +87 -0
  23. package/__tests__/RadioCard/RadioCardGroup.test.jsx +247 -0
  24. package/__tests__/Search/Search.test.jsx +72 -0
  25. package/__tests__/Select/Select.test.jsx +93 -0
  26. package/__tests__/Skeleton/Skeleton.test.jsx +61 -0
  27. package/__tests__/Spacer/Spacer.test.jsx +63 -0
  28. package/__tests__/StackView/StackView.test.jsx +216 -0
  29. package/__tests__/StackView/StackWrap.test.jsx +47 -0
  30. package/__tests__/StackView/getStackedContent.test.jsx +295 -0
  31. package/__tests__/StepTracker/StepTracker.test.jsx +94 -0
  32. package/__tests__/Tabs/Tabs.test.jsx +200 -0
  33. package/__tests__/Tags/Tags.test.jsx +328 -0
  34. package/__tests__/TextInput/TextArea.test.jsx +34 -0
  35. package/__tests__/TextInput/TextInputBase.test.jsx +120 -0
  36. package/__tests__/Tooltip/Tooltip.test.jsx +65 -0
  37. package/__tests__/Tooltip/getTooltipPosition.test.js +79 -0
  38. package/__tests__/utils/input.test.js +58 -0
  39. package/__tests__/utils/useCopy.test.js +42 -0
  40. package/__tests__/utils/useResponsiveProp.test.jsx +202 -0
  41. package/__tests__/utils/{spacing.test.jsx → useSpacingScale.test.jsx} +1 -1
  42. package/__tests__/utils/useUniqueId.test.js +31 -0
  43. package/babel.config.js +20 -0
  44. package/jest.config.js +8 -2
  45. package/lib/A11yInfoProvider/index.js +54 -26
  46. package/lib/A11yText/index.js +37 -14
  47. package/lib/ActivityIndicator/Spinner.js +78 -0
  48. package/lib/ActivityIndicator/Spinner.native.js +121 -87
  49. package/lib/ActivityIndicator/index.js +28 -12
  50. package/lib/ActivityIndicator/shared.js +27 -12
  51. package/lib/BaseProvider/index.js +34 -11
  52. package/lib/Box/Box.js +56 -28
  53. package/lib/Box/index.js +13 -2
  54. package/lib/Button/Button.js +38 -10
  55. package/lib/Button/ButtonBase.js +120 -109
  56. package/lib/Button/ButtonGroup.js +98 -99
  57. package/lib/Button/ButtonLink.js +41 -13
  58. package/lib/Button/index.js +31 -4
  59. package/lib/Button/propTypes.js +32 -9
  60. package/lib/Card/Card.js +36 -41
  61. package/lib/Card/CardBase.js +78 -0
  62. package/lib/Card/PressableCardBase.js +137 -0
  63. package/lib/Card/index.js +40 -2
  64. package/lib/Checkbox/Checkbox.js +344 -0
  65. package/lib/Checkbox/CheckboxGroup.js +231 -0
  66. package/lib/Checkbox/CheckboxInput.js +74 -0
  67. package/lib/Checkbox/CheckboxInput.native.js +14 -0
  68. package/lib/Checkbox/index.js +21 -0
  69. package/lib/Divider/Divider.js +81 -17
  70. package/lib/Divider/index.js +13 -2
  71. package/lib/ExpandCollapse/Accordion.js +20 -7
  72. package/lib/ExpandCollapse/Control.js +50 -27
  73. package/lib/ExpandCollapse/ExpandCollapse.js +41 -24
  74. package/lib/ExpandCollapse/Panel.js +75 -37
  75. package/lib/ExpandCollapse/index.js +25 -7
  76. package/lib/Feedback/Feedback.js +161 -0
  77. package/lib/Feedback/index.js +13 -0
  78. package/lib/Fieldset/Fieldset.js +160 -0
  79. package/lib/Fieldset/FieldsetContainer.js +41 -0
  80. package/lib/Fieldset/FieldsetContainer.native.js +33 -0
  81. package/lib/Fieldset/Legend.js +33 -0
  82. package/lib/Fieldset/Legend.native.js +43 -0
  83. package/lib/Fieldset/cssReset.js +21 -0
  84. package/lib/Fieldset/index.js +13 -0
  85. package/lib/FlexGrid/Col/Col.js +67 -38
  86. package/lib/FlexGrid/Col/index.js +13 -2
  87. package/lib/FlexGrid/FlexGrid.js +70 -45
  88. package/lib/FlexGrid/Row/Row.js +48 -27
  89. package/lib/FlexGrid/Row/index.js +13 -2
  90. package/lib/FlexGrid/helpers/index.js +9 -1
  91. package/lib/FlexGrid/index.js +13 -2
  92. package/lib/FlexGrid/providers/GutterContext.js +15 -3
  93. package/lib/Icon/Icon.js +52 -47
  94. package/lib/Icon/IconText.js +100 -0
  95. package/lib/Icon/index.js +31 -3
  96. package/lib/InputLabel/InputLabel.js +122 -0
  97. package/lib/InputLabel/LabelContent.js +31 -0
  98. package/lib/InputLabel/LabelContent.native.js +16 -0
  99. package/lib/InputLabel/index.js +13 -0
  100. package/lib/InputSupports/InputSupports.js +104 -0
  101. package/lib/InputSupports/index.js +13 -0
  102. package/lib/InputSupports/propTypes.js +66 -0
  103. package/lib/InputSupports/useInputSupports.js +41 -0
  104. package/lib/Link/ChevronLink.js +57 -15
  105. package/lib/Link/InlinePressable.js +50 -0
  106. package/lib/Link/InlinePressable.native.js +101 -0
  107. package/lib/Link/Link.js +30 -13
  108. package/lib/Link/LinkBase.js +121 -146
  109. package/lib/Link/TextButton.js +47 -17
  110. package/lib/Link/index.js +39 -4
  111. package/lib/List/List.js +80 -0
  112. package/lib/List/ListItem.js +237 -0
  113. package/lib/List/index.js +13 -0
  114. package/lib/Modal/Modal.js +226 -0
  115. package/lib/Modal/dictionary.js +16 -0
  116. package/lib/Modal/index.js +13 -0
  117. package/lib/Notification/Notification.js +200 -0
  118. package/lib/Notification/dictionary.js +15 -0
  119. package/lib/Notification/index.js +13 -0
  120. package/lib/Pagination/PageButton.js +45 -46
  121. package/lib/Pagination/Pagination.js +70 -40
  122. package/lib/Pagination/SideButton.js +74 -58
  123. package/lib/Pagination/dictionary.js +9 -2
  124. package/lib/Pagination/index.js +13 -2
  125. package/lib/Pagination/usePagination.js +12 -2
  126. package/lib/Progress/Progress.js +99 -0
  127. package/lib/Progress/ProgressBar.js +146 -0
  128. package/lib/Progress/ProgressBarBackground.js +57 -0
  129. package/lib/Progress/index.js +16 -0
  130. package/lib/Radio/Radio.js +292 -0
  131. package/lib/Radio/RadioButton.js +141 -0
  132. package/lib/Radio/RadioGroup.js +233 -0
  133. package/lib/Radio/RadioInput.js +76 -0
  134. package/lib/Radio/RadioInput.native.js +14 -0
  135. package/lib/Radio/index.js +21 -0
  136. package/lib/RadioCard/RadioCard.js +240 -0
  137. package/lib/RadioCard/RadioCardGroup.js +251 -0
  138. package/lib/RadioCard/index.js +21 -0
  139. package/lib/Search/Search.js +243 -0
  140. package/lib/Search/dictionary.js +19 -0
  141. package/lib/Search/index.js +13 -0
  142. package/lib/Select/Group.js +33 -0
  143. package/lib/Select/Group.native.js +25 -0
  144. package/lib/Select/Item.js +29 -0
  145. package/lib/Select/Item.native.js +19 -0
  146. package/lib/Select/Picker.js +79 -0
  147. package/lib/Select/Picker.native.js +115 -0
  148. package/lib/Select/Select.js +300 -0
  149. package/lib/Select/index.js +19 -0
  150. package/lib/SideNav/Item.js +54 -33
  151. package/lib/SideNav/ItemContent.js +41 -15
  152. package/lib/SideNav/ItemsGroup.js +46 -27
  153. package/lib/SideNav/SideNav.js +92 -69
  154. package/lib/SideNav/index.js +15 -1
  155. package/lib/Skeleton/Skeleton.js +137 -0
  156. package/lib/Skeleton/index.js +13 -0
  157. package/lib/Skeleton/skeleton.constant.js +12 -0
  158. package/lib/Skeleton/skeletonWebAnimation.js +27 -0
  159. package/lib/Skeleton/useSkeletonNativeAnimation.js +37 -0
  160. package/lib/Spacer/Spacer.js +117 -0
  161. package/lib/Spacer/index.js +13 -0
  162. package/lib/StackView/StackView.js +129 -0
  163. package/lib/StackView/StackWrap.js +55 -0
  164. package/lib/StackView/StackWrap.native.js +14 -0
  165. package/lib/StackView/StackWrapBox.js +112 -0
  166. package/lib/StackView/StackWrapGap.js +71 -0
  167. package/lib/StackView/common.js +45 -0
  168. package/lib/StackView/getStackedContent.js +141 -0
  169. package/lib/StackView/index.js +29 -0
  170. package/lib/StepTracker/Step.js +245 -0
  171. package/lib/StepTracker/StepTracker.js +197 -0
  172. package/lib/StepTracker/dictionary.js +17 -0
  173. package/lib/StepTracker/index.js +13 -0
  174. package/lib/Tabs/HorizontalScroll.js +199 -0
  175. package/lib/Tabs/ScrollViewEnd.js +66 -0
  176. package/lib/Tabs/ScrollViewEnd.native.js +41 -0
  177. package/lib/Tabs/Tabs.js +117 -0
  178. package/lib/Tabs/TabsItem.js +234 -0
  179. package/lib/Tabs/TabsScrollButton.js +121 -0
  180. package/lib/Tabs/dictionary.js +18 -0
  181. package/lib/Tabs/index.js +13 -0
  182. package/lib/Tabs/itemPositions.js +128 -0
  183. package/lib/Tags/Tags.js +250 -0
  184. package/lib/Tags/index.js +13 -0
  185. package/lib/TextInput/TextArea.js +109 -0
  186. package/lib/TextInput/TextInput.js +75 -0
  187. package/lib/TextInput/TextInputBase.js +252 -0
  188. package/lib/TextInput/index.js +23 -0
  189. package/lib/TextInput/propTypes.js +42 -0
  190. package/lib/ThemeProvider/ThemeProvider.js +38 -14
  191. package/lib/ThemeProvider/index.js +61 -6
  192. package/lib/ThemeProvider/useSetTheme.js +14 -5
  193. package/lib/ThemeProvider/useTheme.js +13 -4
  194. package/lib/ThemeProvider/useThemeTokens.js +86 -19
  195. package/lib/ThemeProvider/utils/index.js +31 -2
  196. package/lib/ThemeProvider/utils/styles.js +52 -16
  197. package/lib/ThemeProvider/utils/theme-tokens.js +94 -16
  198. package/lib/ToggleSwitch/ToggleSwitch.js +76 -52
  199. package/lib/ToggleSwitch/index.js +13 -2
  200. package/lib/Tooltip/Backdrop.js +56 -0
  201. package/lib/Tooltip/Backdrop.native.js +59 -0
  202. package/lib/Tooltip/Tooltip.js +357 -0
  203. package/lib/Tooltip/dictionary.js +15 -0
  204. package/lib/Tooltip/getTooltipPosition.js +172 -0
  205. package/lib/Tooltip/index.js +13 -0
  206. package/lib/TooltipButton/TooltipButton.js +83 -0
  207. package/lib/TooltipButton/index.js +13 -0
  208. package/lib/Typography/Typography.js +58 -47
  209. package/lib/Typography/index.js +13 -2
  210. package/lib/ViewportProvider/ViewportProvider.js +46 -0
  211. package/lib/ViewportProvider/index.js +22 -38
  212. package/lib/ViewportProvider/useViewport.js +15 -0
  213. package/lib/ViewportProvider/useViewportListener.js +57 -0
  214. package/lib/index.js +509 -19
  215. package/lib/utils/a11y/index.js +18 -0
  216. package/lib/utils/a11y/textSize.js +49 -0
  217. package/lib/utils/animation/index.js +15 -2
  218. package/lib/utils/animation/useVerticalExpandAnimation.js +28 -11
  219. package/lib/utils/children.js +87 -0
  220. package/lib/utils/index.js +163 -4
  221. package/lib/utils/info/index.js +19 -0
  222. package/lib/utils/info/platform/index.js +23 -0
  223. package/lib/utils/info/platform/platform.android.js +8 -0
  224. package/lib/utils/info/platform/platform.ios.js +8 -0
  225. package/lib/utils/info/platform/platform.js +8 -0
  226. package/lib/utils/info/platform/platform.native.js +11 -0
  227. package/lib/utils/info/versions.js +16 -0
  228. package/lib/utils/input.js +54 -34
  229. package/lib/utils/pressability.js +120 -0
  230. package/lib/utils/propTypes.js +269 -108
  231. package/lib/utils/useCopy.js +51 -0
  232. package/lib/utils/useHash.js +48 -0
  233. package/lib/utils/useHash.native.js +15 -0
  234. package/lib/utils/useResponsiveProp.js +59 -0
  235. package/lib/utils/{spacing/useSpacingScale.js → useSpacingScale.js} +45 -12
  236. package/lib/utils/useUniqueId.js +21 -0
  237. package/package.json +11 -8
  238. package/release-context.json +4 -4
  239. package/src/ActivityIndicator/{Spinner.web.jsx → Spinner.jsx} +0 -0
  240. package/src/Box/Box.jsx +13 -4
  241. package/src/Button/Button.jsx +9 -5
  242. package/src/Button/ButtonBase.jsx +74 -86
  243. package/src/Button/ButtonGroup.jsx +24 -41
  244. package/src/Button/ButtonLink.jsx +14 -4
  245. package/src/Button/propTypes.js +12 -2
  246. package/src/Card/Card.jsx +4 -30
  247. package/src/Card/CardBase.jsx +57 -0
  248. package/src/Card/PressableCardBase.jsx +112 -0
  249. package/src/Card/index.js +3 -0
  250. package/src/Checkbox/Checkbox.jsx +274 -0
  251. package/src/Checkbox/CheckboxGroup.jsx +196 -0
  252. package/src/Checkbox/CheckboxInput.jsx +55 -0
  253. package/src/Checkbox/CheckboxInput.native.jsx +6 -0
  254. package/src/Checkbox/index.js +5 -0
  255. package/src/Divider/Divider.jsx +38 -3
  256. package/src/ExpandCollapse/Control.jsx +1 -1
  257. package/src/Feedback/Feedback.jsx +108 -0
  258. package/src/Feedback/index.js +3 -0
  259. package/src/Fieldset/Fieldset.jsx +129 -0
  260. package/src/Fieldset/FieldsetContainer.jsx +22 -0
  261. package/src/Fieldset/FieldsetContainer.native.jsx +16 -0
  262. package/src/Fieldset/Legend.jsx +16 -0
  263. package/src/Fieldset/Legend.native.jsx +22 -0
  264. package/src/Fieldset/cssReset.js +14 -0
  265. package/src/Fieldset/index.js +3 -0
  266. package/src/Icon/Icon.jsx +23 -27
  267. package/src/Icon/IconText.jsx +63 -0
  268. package/src/Icon/index.js +3 -2
  269. package/src/InputLabel/InputLabel.jsx +106 -0
  270. package/src/InputLabel/LabelContent.jsx +13 -0
  271. package/src/InputLabel/LabelContent.native.jsx +6 -0
  272. package/src/InputLabel/index.js +3 -0
  273. package/src/InputSupports/InputSupports.jsx +75 -0
  274. package/src/InputSupports/index.js +3 -0
  275. package/src/InputSupports/propTypes.js +44 -0
  276. package/src/InputSupports/useInputSupports.js +30 -0
  277. package/src/Link/ChevronLink.jsx +28 -7
  278. package/src/Link/InlinePressable.jsx +37 -0
  279. package/src/Link/InlinePressable.native.jsx +73 -0
  280. package/src/Link/Link.jsx +17 -13
  281. package/src/Link/LinkBase.jsx +71 -146
  282. package/src/Link/TextButton.jsx +25 -11
  283. package/src/Link/index.js +2 -1
  284. package/src/List/List.jsx +47 -0
  285. package/src/List/ListItem.jsx +187 -0
  286. package/src/List/index.js +3 -0
  287. package/src/Modal/Modal.jsx +185 -0
  288. package/src/Modal/dictionary.js +9 -0
  289. package/src/Modal/index.js +3 -0
  290. package/src/Notification/Notification.jsx +149 -0
  291. package/src/Notification/dictionary.js +8 -0
  292. package/src/Notification/index.js +3 -0
  293. package/src/Pagination/PageButton.jsx +3 -17
  294. package/src/Pagination/SideButton.jsx +27 -38
  295. package/src/Progress/Progress.jsx +77 -0
  296. package/src/Progress/ProgressBar.jsx +110 -0
  297. package/src/Progress/ProgressBarBackground.jsx +34 -0
  298. package/src/Progress/index.js +6 -0
  299. package/src/Radio/Radio.jsx +233 -0
  300. package/src/Radio/RadioButton.jsx +131 -0
  301. package/src/Radio/RadioGroup.jsx +198 -0
  302. package/src/Radio/RadioInput.jsx +57 -0
  303. package/src/Radio/RadioInput.native.jsx +6 -0
  304. package/src/Radio/index.js +5 -0
  305. package/src/RadioCard/RadioCard.jsx +191 -0
  306. package/src/RadioCard/RadioCardGroup.jsx +211 -0
  307. package/src/RadioCard/index.js +5 -0
  308. package/src/Search/Search.jsx +204 -0
  309. package/src/Search/dictionary.js +12 -0
  310. package/src/Search/index.js +3 -0
  311. package/src/Select/Group.jsx +15 -0
  312. package/src/Select/Group.native.jsx +14 -0
  313. package/src/Select/Item.jsx +11 -0
  314. package/src/Select/Item.native.jsx +10 -0
  315. package/src/Select/Picker.jsx +67 -0
  316. package/src/Select/Picker.native.jsx +95 -0
  317. package/src/Select/Select.jsx +255 -0
  318. package/src/Select/index.js +8 -0
  319. package/src/SideNav/Item.jsx +2 -2
  320. package/src/Skeleton/Skeleton.jsx +98 -0
  321. package/src/Skeleton/index.js +3 -0
  322. package/src/Skeleton/skeleton.constant.js +3 -0
  323. package/src/Skeleton/skeletonWebAnimation.js +13 -0
  324. package/src/Skeleton/useSkeletonNativeAnimation.js +27 -0
  325. package/src/Spacer/Spacer.jsx +91 -0
  326. package/src/Spacer/index.js +3 -0
  327. package/src/StackView/StackView.jsx +111 -0
  328. package/src/StackView/StackWrap.jsx +41 -0
  329. package/src/StackView/StackWrap.native.jsx +4 -0
  330. package/src/StackView/StackWrapBox.jsx +94 -0
  331. package/src/StackView/StackWrapGap.jsx +49 -0
  332. package/src/StackView/common.jsx +28 -0
  333. package/src/StackView/getStackedContent.jsx +112 -0
  334. package/src/StackView/index.js +6 -0
  335. package/src/StepTracker/Step.jsx +202 -0
  336. package/src/StepTracker/StepTracker.jsx +163 -0
  337. package/src/StepTracker/dictionary.js +10 -0
  338. package/src/StepTracker/index.js +3 -0
  339. package/src/Tabs/HorizontalScroll.jsx +165 -0
  340. package/src/Tabs/ScrollViewEnd.jsx +53 -0
  341. package/src/Tabs/ScrollViewEnd.native.jsx +24 -0
  342. package/src/Tabs/Tabs.jsx +89 -0
  343. package/src/Tabs/TabsItem.jsx +204 -0
  344. package/src/Tabs/TabsScrollButton.jsx +100 -0
  345. package/src/Tabs/dictionary.js +11 -0
  346. package/src/Tabs/index.js +3 -0
  347. package/src/Tabs/itemPositions.js +101 -0
  348. package/src/Tags/Tags.jsx +207 -0
  349. package/src/Tags/index.js +3 -0
  350. package/src/TextInput/TextArea.jsx +78 -0
  351. package/src/TextInput/TextInput.jsx +52 -0
  352. package/src/TextInput/TextInputBase.jsx +210 -0
  353. package/src/TextInput/index.js +4 -0
  354. package/src/TextInput/propTypes.js +29 -0
  355. package/src/ThemeProvider/useThemeTokens.js +56 -5
  356. package/src/ThemeProvider/utils/styles.js +18 -5
  357. package/src/ThemeProvider/utils/theme-tokens.js +46 -5
  358. package/src/ToggleSwitch/ToggleSwitch.jsx +3 -4
  359. package/src/Tooltip/Backdrop.jsx +60 -0
  360. package/src/Tooltip/Backdrop.native.jsx +33 -0
  361. package/src/Tooltip/Tooltip.jsx +294 -0
  362. package/src/Tooltip/dictionary.js +8 -0
  363. package/src/Tooltip/getTooltipPosition.js +161 -0
  364. package/src/Tooltip/index.js +3 -0
  365. package/src/TooltipButton/TooltipButton.jsx +49 -0
  366. package/src/TooltipButton/index.js +3 -0
  367. package/src/Typography/Typography.jsx +10 -24
  368. package/src/ViewportProvider/ViewportProvider.jsx +21 -0
  369. package/src/ViewportProvider/index.jsx +2 -41
  370. package/src/ViewportProvider/useViewport.js +5 -0
  371. package/src/ViewportProvider/useViewportListener.js +43 -0
  372. package/src/index.js +34 -2
  373. package/src/utils/a11y/index.js +1 -0
  374. package/src/utils/a11y/textSize.js +30 -0
  375. package/src/utils/children.jsx +66 -0
  376. package/src/utils/index.js +11 -1
  377. package/src/utils/info/index.js +8 -0
  378. package/src/utils/info/platform/index.js +11 -0
  379. package/src/utils/info/platform/platform.android.js +1 -0
  380. package/src/utils/info/platform/platform.ios.js +1 -0
  381. package/src/utils/info/platform/platform.js +1 -0
  382. package/src/utils/info/platform/platform.native.js +4 -0
  383. package/src/utils/info/versions.js +6 -0
  384. package/src/utils/input.js +22 -13
  385. package/src/utils/pressability.js +96 -0
  386. package/src/utils/propTypes.js +195 -47
  387. package/src/utils/useCopy.js +39 -0
  388. package/src/utils/useHash.js +34 -0
  389. package/src/utils/useHash.native.js +6 -0
  390. package/src/utils/useResponsiveProp.js +50 -0
  391. package/src/utils/{spacing/useSpacingScale.js → useSpacingScale.js} +25 -10
  392. package/src/utils/useUniqueId.js +14 -0
  393. package/stories/A11yText/A11yText.stories.jsx +15 -13
  394. package/stories/ActivityIndicator/ActivityIndicator.stories.jsx +11 -2
  395. package/stories/Box/Box.stories.jsx +29 -2
  396. package/stories/Button/Button.stories.jsx +21 -20
  397. package/stories/Button/ButtonGroup.stories.jsx +2 -1
  398. package/stories/Button/ButtonLink.stories.jsx +6 -4
  399. package/stories/Card/Card.stories.jsx +13 -1
  400. package/stories/Checkbox/Checkbox.stories.jsx +94 -0
  401. package/stories/Divider/Divider.stories.jsx +26 -2
  402. package/stories/ExpandCollapse/ExpandCollapse.stories.jsx +74 -79
  403. package/stories/Feedback/Feedback.stories.jsx +96 -0
  404. package/stories/FlexGrid/01 FlexGrid.stories.jsx +20 -7
  405. package/stories/Icon/Icon.stories.jsx +15 -6
  406. package/stories/InputLabel/InputLabel.stories.jsx +42 -0
  407. package/stories/Link/ChevronLink.stories.jsx +20 -4
  408. package/stories/Link/Link.stories.jsx +39 -3
  409. package/stories/Link/TextButton.stories.jsx +24 -2
  410. package/stories/List/List.stories.jsx +117 -0
  411. package/stories/Modal/Modal.stories.jsx +29 -0
  412. package/stories/Notification/Notification.stories.jsx +82 -0
  413. package/stories/Pagination/Pagination.stories.jsx +28 -14
  414. package/stories/Progress/Progress.stories.jsx +93 -0
  415. package/stories/Radio/Radio.stories.jsx +100 -0
  416. package/stories/RadioCard/RadioCard.stories.jsx +98 -0
  417. package/stories/Search/Search.stories.jsx +16 -0
  418. package/stories/Select/Select.stories.jsx +55 -0
  419. package/stories/SideNav/SideNav.stories.jsx +17 -2
  420. package/stories/Skeleton/Skeleton.stories.jsx +36 -0
  421. package/stories/Spacer/Spacer.stories.jsx +38 -0
  422. package/stories/StackView/StackView.stories.jsx +75 -0
  423. package/stories/StackView/StackWrap.stories.jsx +64 -0
  424. package/stories/StepTracker/StepTracker.stories.jsx +71 -0
  425. package/stories/Tabs/Tabs.stories.jsx +97 -0
  426. package/stories/Tags/Tags.stories.jsx +69 -0
  427. package/stories/TextInput/TextArea.stories.jsx +100 -0
  428. package/stories/TextInput/TextInput.stories.jsx +103 -0
  429. package/stories/ToggleSwitch/ToggleSwitch.stories.jsx +16 -3
  430. package/stories/Tooltip/Tooltip.stories.jsx +81 -0
  431. package/stories/TooltipButton/TooltipButton.stories.jsx +11 -0
  432. package/stories/Typography/Typography.stories.jsx +12 -3
  433. package/stories/{platform-supports.web.jsx → platform-supports.jsx} +1 -1
  434. package/stories/supports.jsx +110 -14
  435. package/__fixtures__/accessible.icon.svg +0 -6
  436. package/babel.config.json +0 -8
  437. package/lib/ActivityIndicator/Spinner.web.js +0 -55
  438. package/lib/Pagination/useCopy.js +0 -10
  439. package/lib/config/svgr-icons-web.js +0 -9
  440. package/lib/config/svgr-icons.js +0 -52
  441. package/lib/utils/spacing/index.js +0 -2
  442. package/lib/utils/spacing/utils.js +0 -32
  443. package/src/Pagination/useCopy.js +0 -7
  444. package/src/config/svgr-icons-web.js +0 -11
  445. package/src/config/svgr-icons.js +0 -46
  446. package/src/utils/spacing/index.js +0 -3
  447. 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,37 +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
+ }),
36
+ // Stops focus ring stretching horizontally if parent has display: block
37
+ // width: fit-content isn't supported on Firefox; can't cascade props like CSS `width: fit-content; width: --moz-fit-content;`
38
+ display: 'inline-flex'
44
39
  }
45
40
  : {}
46
41
 
47
- const selectTextStyles = ({ textLine, textLineStyle }) => ({
42
+ const selectTextStyles = ({ color, textLine, textLineStyle }) => ({
43
+ color,
48
44
  textDecorationLine: textLine,
49
- 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
+ })
50
52
  })
51
53
 
52
54
  const selectBlockStyles = ({ blockFontWeight, blockFontSize, blockLineHeight, blockFontName }) =>
@@ -57,18 +59,11 @@ const selectBlockStyles = ({ blockFontWeight, blockFontSize, blockLineHeight, bl
57
59
  fontName: blockFontName
58
60
  })
59
61
 
60
- const selectIconStyles = ({
61
- iconSize,
62
- iconGapBefore,
63
- iconGapAfter,
64
- iconScale,
65
- iconTranslateX
66
- }) => ({
67
- scale: iconScale,
62
+ const selectIconTokens = ({ color, iconSize, iconTranslateX, iconTranslateY }) => ({
63
+ color,
68
64
  translateX: iconTranslateX,
69
- size: iconSize,
70
- gapBefore: iconGapBefore,
71
- gapAfter: iconGapAfter
65
+ translateY: iconTranslateY,
66
+ size: iconSize
72
67
  })
73
68
 
74
69
  /**
@@ -98,135 +93,62 @@ const LinkBase = ({
98
93
  onPress,
99
94
  icon,
100
95
  iconPosition = icon ? 'left' : undefined,
101
- iconVariant,
96
+ iconProps,
102
97
  variant,
103
- tokens,
98
+ tokens = {},
104
99
  children,
105
100
  accessibilityRole = 'link',
106
101
  ...props
107
102
  }) => {
108
- const handlePress = linkProps.handleHref({ href, onPress })
109
-
110
- const [isFocused, setIsFocused] = useState(false)
111
- const handleFocus = () => setIsFocused(true)
112
- const handleBlur = () => setIsFocused(false)
113
-
114
- const [isHovered, setIsHovered] = useState(false)
115
- const handleHoverIn = () => setIsHovered(true)
116
- const handleHoverOut = () => setIsHovered(false)
117
-
118
- const [isPressed, setIsPressed] = useState(false)
119
- const handlePressIn = () => setIsPressed(true)
120
- const handlePressOut = () => setIsPressed(false)
121
-
122
103
  const { hrefAttrs, rest } = hrefAttrsProp.bundle(props)
123
104
  const linkPropSet = linkProps.select({
124
105
  accessibilityRole,
125
106
  href,
126
- onPress: handlePress,
127
- onPressIn: handlePressIn,
128
- onPressOut: handlePressOut,
129
- onFocus: handleFocus,
130
- onBlur: handleBlur,
131
- onMouseEnter: handleHoverIn,
132
- onMouseLeave: handleHoverOut,
133
- ...hrefAttrsProp.spread(hrefAttrs),
107
+ onPress: linkProps.handleHref({ href, onPress }),
108
+ hrefAttrs,
134
109
  ...rest
135
110
  })
136
111
 
137
- const themeTokens = useThemeTokens('Link', tokens, variant, {
138
- focus: isFocused,
139
- hover: isHovered,
140
- pressed: isPressed,
141
- iconPosition
142
- })
143
- const IconComponent = icon || themeTokens.icon
144
- const hasIcon = !!IconComponent
145
-
146
- const textStyles = selectTextStyles(themeTokens)
147
- const outerBorderStyles = selectOuterBorderStyles(themeTokens)
148
- const contentStyles = selectContentStyles(themeTokens)
149
- const blockStyles = selectBlockStyles(themeTokens)
150
- const iconStyles = selectIconStyles(themeTokens)
151
-
152
- // TODO: re-apply support for inline links
153
- const isNested = false
112
+ const resolveLinkTokens = (pressState) =>
113
+ resolvePressableTokens(tokens, pressState, { iconPosition })
154
114
 
155
115
  // On web, this makes focus rings wrap only the link, not the entire block
156
116
  const blockLeftStyle = Platform.OS === 'web' && staticStyles.blockLeft
157
117
 
158
- // Apply typographic text styles if not inheriting, and block positioning if a block
159
- const blockTextStyles = !isNested && blockStyles
160
-
161
- if (!hasIcon) {
162
- // onPressIn / onPressOut only work if on TouchableWithoutFeedback, onFocus only works if on Text
163
- const { onPress: _onPress, onPressIn, onPressOut, ...textProps } = linkPropSet
164
- return (
165
- // TouchableWithoutFeedback modifies its child so this stack is all (touchable) Text: no Views
166
- <TouchableWithoutFeedback onPressIn={onPressIn} onPressOut={onPressOut} onPress={_onPress}>
167
- <Text
168
- {...textProps}
169
- style={[outerBorderStyles, blockLeftStyle, contentStyles, blockTextStyles, textStyles]}
170
- >
171
- {children}
172
- </Text>
173
- </TouchableWithoutFeedback>
174
- )
175
- }
176
-
177
- // Scale icon with text, but with a cap so text isn't squashed at large scales
178
- const iconScale = Math.min(PixelRatio.getFontScale(), 2)
179
-
180
- const iconTokens = {
181
- size: iconStyles.size ? iconStyles.size * iconScale : undefined,
182
- color: contentStyles.color ?? undefined,
183
- scale: iconStyles.scale ?? undefined,
184
- translateX: iconStyles.translateX ?? undefined
185
- }
186
-
187
- const iconContent = <IconComponent tokens={iconTokens} variant={iconVariant} />
188
-
189
- const iconBlock = isNested ? (
190
- // TODO: when reimplementing inline support, insert an appropriate space character
191
- // based on the value of gapBefore and gapAfter on native (no inline margins/padding)
192
- iconContent
193
- ) : (
194
- <View
195
- style={[
196
- iconPosition === 'left' && { marginRight: iconStyles.gapAfter * iconScale },
197
- iconPosition === 'right' && { marginLeft: iconStyles.gapBefore * iconScale }
198
- ]}
199
- >
200
- {iconContent}
201
- </View>
202
- )
203
-
204
- // TODO: this doesn't work well when nested inline but does allow block-links to have icons align
205
- // properly on Android which purely inline links can't do. Add an isNested case that is similar to
206
- // https://github.com/telus/universal-design-system/pull/233
207
118
  return (
208
- <Pressable
119
+ <InlinePressable
209
120
  {...linkPropSet}
210
- 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
+ }}
211
127
  >
212
- {iconPosition === 'left' && iconBlock}
213
- <Text
214
- style={[
215
- contentStyles,
216
- blockTextStyles,
217
- textStyles,
218
- Platform.select({
219
- web: {
220
- // TODO: https://github.com/telus/universal-design-system/issues/487
221
- transition: 'color 200ms'
222
- }
223
- })
224
- ]}
225
- >
226
- {children}
227
- </Text>
228
- {iconPosition === 'right' && iconBlock}
229
- </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>
230
152
  )
231
153
  }
232
154
 
@@ -238,7 +160,7 @@ LinkBase.propTypes = {
238
160
  /**
239
161
  * Optional variant that may be passed down to the link's icon if there is one
240
162
  */
241
- iconVariant: variantProp.propType,
163
+ iconProps: PropTypes.exact(iconComponentPropTypes),
242
164
  /**
243
165
  * A function component for an SVG icon to render inside the link. Inherits size and color from
244
166
  * the link and any Typography the link is nested inside.
@@ -250,7 +172,7 @@ LinkBase.propTypes = {
250
172
  iconPosition: PropTypes.oneOf(['left', 'right']),
251
173
  /**
252
174
  * On Web if href is passed, React Native Web maps this object's props to
253
- * `rel`, `target` and (>= RNW 0.15.0) `download` attrs.
175
+ * `rel`, `target` and `download` attrs.
254
176
  */
255
177
  hrefAttrs: PropTypes.shape(hrefAttrsProp.types)
256
178
  }
@@ -263,6 +185,9 @@ const staticStyles = StyleSheet.create({
263
185
  flexDirection: 'row',
264
186
  alignItems: 'center',
265
187
  justifyContent: 'flex-start'
188
+ },
189
+ baseline: {
190
+ alignSelf: 'baseline'
266
191
  }
267
192
  })
268
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