@telus-uds/components-base 1.7.1 → 1.8.2

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 (509) hide show
  1. package/CHANGELOG.md +41 -2
  2. package/component-docs.json +944 -691
  3. package/lib/A11yInfoProvider/index.js +4 -3
  4. package/lib/A11yText/index.js +6 -5
  5. package/lib/ActivityIndicator/Spinner.js +7 -6
  6. package/lib/ActivityIndicator/Spinner.native.js +8 -6
  7. package/lib/ActivityIndicator/index.js +6 -5
  8. package/lib/ActivityIndicator/shared.js +1 -1
  9. package/lib/BaseProvider/index.js +13 -10
  10. package/lib/Box/Box.js +20 -19
  11. package/lib/Button/Button.js +7 -6
  12. package/lib/Button/ButtonBase.js +95 -77
  13. package/lib/Button/ButtonGroup.js +140 -65
  14. package/lib/Button/ButtonLink.js +9 -7
  15. package/lib/Button/index.js +4 -4
  16. package/lib/Button/propTypes.js +1 -1
  17. package/lib/Card/Card.js +8 -7
  18. package/lib/Card/CardBase.js +35 -31
  19. package/lib/Card/PressableCardBase.js +14 -12
  20. package/lib/Checkbox/Checkbox.js +96 -82
  21. package/lib/Checkbox/CheckboxGroup.js +30 -28
  22. package/lib/Checkbox/CheckboxInput.js +12 -10
  23. package/lib/Divider/Divider.js +8 -7
  24. package/lib/ExpandCollapse/Control.js +42 -36
  25. package/lib/ExpandCollapse/ExpandCollapse.js +11 -10
  26. package/lib/ExpandCollapse/Panel.js +29 -24
  27. package/lib/Feedback/Feedback.js +48 -35
  28. package/lib/Fieldset/Fieldset.js +22 -14
  29. package/lib/Fieldset/FieldsetContainer.js +16 -13
  30. package/lib/Fieldset/FieldsetContainer.native.js +11 -8
  31. package/lib/Fieldset/Legend.js +10 -7
  32. package/lib/Fieldset/Legend.native.js +10 -7
  33. package/lib/FlexGrid/Col/Col.js +17 -16
  34. package/lib/FlexGrid/FlexGrid.js +15 -14
  35. package/lib/FlexGrid/Row/Row.js +13 -12
  36. package/lib/HorizontalScroll/HorizontalScroll.js +25 -20
  37. package/lib/HorizontalScroll/HorizontalScrollButton.js +18 -14
  38. package/lib/HorizontalScroll/ScrollViewEnd.js +6 -5
  39. package/lib/HorizontalScroll/ScrollViewEnd.native.js +12 -9
  40. package/lib/HorizontalScroll/itemPositions.js +19 -13
  41. package/lib/Icon/Icon.js +10 -9
  42. package/lib/Icon/IconText.js +8 -7
  43. package/lib/Icon/index.js +5 -5
  44. package/lib/IconButton/IconButton.js +50 -42
  45. package/lib/InputLabel/InputLabel.js +44 -30
  46. package/lib/InputLabel/LabelContent.js +12 -9
  47. package/lib/InputLabel/LabelContent.native.js +9 -6
  48. package/lib/InputSupports/InputSupports.js +17 -9
  49. package/lib/InputSupports/useInputSupports.js +7 -6
  50. package/lib/Link/ChevronLink.js +9 -8
  51. package/lib/Link/InlinePressable.js +13 -10
  52. package/lib/Link/InlinePressable.native.js +20 -16
  53. package/lib/Link/Link.js +10 -9
  54. package/lib/Link/LinkBase.js +96 -78
  55. package/lib/Link/TextButton.js +9 -8
  56. package/lib/List/List.js +9 -7
  57. package/lib/List/ListItem.js +99 -74
  58. package/lib/Modal/Modal.js +72 -59
  59. package/lib/Notification/Notification.js +47 -34
  60. package/lib/Pagination/PageButton.js +11 -10
  61. package/lib/Pagination/Pagination.js +39 -28
  62. package/lib/Pagination/SideButton.js +21 -18
  63. package/lib/Pagination/usePagination.js +5 -4
  64. package/lib/Progress/Progress.js +23 -19
  65. package/lib/Progress/ProgressBar.js +23 -19
  66. package/lib/Progress/ProgressBarBackground.js +4 -3
  67. package/lib/Radio/Radio.js +79 -68
  68. package/lib/Radio/RadioButton.js +63 -53
  69. package/lib/Radio/RadioGroup.js +39 -30
  70. package/lib/Radio/RadioInput.js +12 -10
  71. package/lib/RadioCard/RadioCard.js +15 -14
  72. package/lib/RadioCard/RadioCardGroup.js +34 -25
  73. package/lib/Search/Search.js +52 -32
  74. package/lib/Select/Group.js +5 -4
  75. package/lib/Select/Group.native.js +4 -3
  76. package/lib/Select/Item.js +10 -7
  77. package/lib/Select/Item.native.js +1 -9
  78. package/lib/Select/Picker.js +16 -15
  79. package/lib/Select/Picker.native.js +49 -38
  80. package/lib/Select/Select.js +134 -113
  81. package/lib/SideNav/Item.js +39 -33
  82. package/lib/SideNav/ItemContent.js +15 -12
  83. package/lib/SideNav/ItemsGroup.js +13 -11
  84. package/lib/SideNav/SideNav.js +19 -16
  85. package/lib/Skeleton/Skeleton.js +106 -44
  86. package/lib/Skeleton/skeleton.constant.js +1 -1
  87. package/lib/Spacer/Spacer.js +6 -5
  88. package/lib/StackView/StackView.js +12 -11
  89. package/lib/StackView/StackWrap.js +2 -2
  90. package/lib/StackView/StackWrapBox.js +12 -11
  91. package/lib/StackView/StackWrapGap.js +11 -10
  92. package/lib/StackView/common.js +14 -11
  93. package/lib/StackView/getStackedContent.js +8 -7
  94. package/lib/StackView/index.js +1 -1
  95. package/lib/StepTracker/Step.js +122 -103
  96. package/lib/StepTracker/StepTracker.js +48 -38
  97. package/lib/Tabs/Tabs.js +29 -24
  98. package/lib/Tabs/TabsItem.js +79 -68
  99. package/lib/Tags/Tags.js +67 -61
  100. package/lib/TextInput/TextArea.js +26 -20
  101. package/lib/TextInput/TextInput.js +20 -15
  102. package/lib/TextInput/TextInputBase.js +74 -62
  103. package/lib/TextInput/index.js +4 -4
  104. package/lib/ThemeProvider/ThemeProvider.js +6 -5
  105. package/lib/ThemeProvider/index.js +5 -5
  106. package/lib/ThemeProvider/useSetTheme.js +6 -3
  107. package/lib/ThemeProvider/useThemeTokens.js +7 -2
  108. package/lib/ThemeProvider/utils/styles.js +48 -41
  109. package/lib/ThemeProvider/utils/theme-tokens.js +26 -12
  110. package/lib/ToggleSwitch/ToggleSwitch.js +95 -72
  111. package/lib/ToggleSwitch/ToggleSwitchGroup.js +42 -33
  112. package/lib/Tooltip/Backdrop.js +4 -3
  113. package/lib/Tooltip/Backdrop.native.js +5 -4
  114. package/lib/Tooltip/Tooltip.js +82 -66
  115. package/lib/Tooltip/getTooltipPosition.js +29 -18
  116. package/lib/TooltipButton/TooltipButton.js +28 -21
  117. package/lib/Typography/Typography.js +37 -33
  118. package/lib/ViewportProvider/ViewportProvider.js +4 -3
  119. package/lib/ViewportProvider/useViewportListener.js +6 -3
  120. package/lib/index.js +54 -54
  121. package/lib/utils/a11y/semantics.js +5 -2
  122. package/lib/utils/a11y/textSize.js +8 -6
  123. package/lib/utils/animation/useVerticalExpandAnimation.js +32 -18
  124. package/lib/utils/children.js +2 -1
  125. package/lib/utils/index.js +10 -10
  126. package/lib/utils/input.js +22 -17
  127. package/lib/utils/pressability.js +36 -22
  128. package/lib/utils/props/clickProps.js +2 -1
  129. package/lib/utils/props/getPropSelector.js +6 -3
  130. package/lib/utils/props/handlerProps.js +25 -19
  131. package/lib/utils/props/hrefAttrsProp.js +14 -11
  132. package/lib/utils/props/index.js +12 -12
  133. package/lib/utils/props/inputSupportsProps.js +21 -11
  134. package/lib/utils/props/linkProps.js +7 -6
  135. package/lib/utils/props/pressProps.js +1 -1
  136. package/lib/utils/props/tokens.js +27 -13
  137. package/lib/utils/ssr.js +6 -2
  138. package/lib/utils/useCopy.js +6 -4
  139. package/lib/utils/useHash.js +2 -1
  140. package/lib/utils/useResponsiveProp.js +1 -1
  141. package/lib/utils/useUniqueId.js +2 -1
  142. package/lib/utils/withLinkRouter.js +6 -5
  143. package/package.json +18 -12
  144. package/src/Button/ButtonGroup.jsx +106 -41
  145. package/src/Checkbox/Checkbox.jsx +7 -4
  146. package/src/Checkbox/CheckboxGroup.jsx +3 -3
  147. package/src/ExpandCollapse/Panel.jsx +3 -1
  148. package/src/Fieldset/Fieldset.jsx +6 -0
  149. package/src/InputLabel/InputLabel.jsx +17 -2
  150. package/src/InputSupports/InputSupports.jsx +9 -1
  151. package/src/Notification/Notification.jsx +1 -1
  152. package/src/Pagination/Pagination.jsx +3 -0
  153. package/src/Radio/Radio.jsx +5 -1
  154. package/src/Radio/RadioGroup.jsx +11 -5
  155. package/src/RadioCard/RadioCard.jsx +5 -1
  156. package/src/RadioCard/RadioCardGroup.jsx +6 -0
  157. package/src/Search/Search.jsx +12 -1
  158. package/src/Select/Item.native.jsx +0 -7
  159. package/src/Skeleton/Skeleton.jsx +56 -3
  160. package/src/ToggleSwitch/ToggleSwitch.jsx +6 -0
  161. package/src/ToggleSwitch/ToggleSwitchGroup.jsx +6 -0
  162. package/src/Tooltip/Tooltip.jsx +1 -1
  163. package/src/utils/animation/useVerticalExpandAnimation.js +25 -12
  164. package/src/utils/props/inputSupportsProps.js +6 -1
  165. package/src/utils/props/tokens.js +21 -19
  166. package/.storybook/main.js +0 -4
  167. package/.storybook/preview.js +0 -37
  168. package/.turbo/turbo-build.log +0 -8
  169. package/.turbo/turbo-lint.log +0 -13
  170. package/CHANGELOG.json +0 -250
  171. package/__fixtures__/Accessible.js +0 -35
  172. package/__fixtures__/Accessible.native.js +0 -35
  173. package/__fixtures__/Theme.jsx +0 -13
  174. package/__fixtures__/Viewport.jsx +0 -17
  175. package/__fixtures__/test-utils.js +0 -25
  176. package/__fixtures__/testTheme.js +0 -1830
  177. package/__tests__/A11yText/A11yText.test.jsx +0 -34
  178. package/__tests__/ActivityIndicator/ActivityIndicator.test.jsx +0 -68
  179. package/__tests__/ActivityIndicator/__snapshots__/ActivityIndicator.test.jsx.snap +0 -287
  180. package/__tests__/Box/Box.test.jsx +0 -111
  181. package/__tests__/Button/Button.test.jsx +0 -86
  182. package/__tests__/Button/ButtonBase.test.jsx +0 -82
  183. package/__tests__/Button/ButtonGroup.test.jsx +0 -347
  184. package/__tests__/Button/ButtonLink.test.jsx +0 -61
  185. package/__tests__/Card/Card.test.jsx +0 -63
  186. package/__tests__/Checkbox/Checkbox.test.jsx +0 -94
  187. package/__tests__/Checkbox/CheckboxGroup.test.jsx +0 -246
  188. package/__tests__/Divider/Divider.test.jsx +0 -91
  189. package/__tests__/ExpandCollapse/ExpandCollapse.test.jsx +0 -109
  190. package/__tests__/Feedback/Feedback.test.jsx +0 -42
  191. package/__tests__/FlexGrid/Col.test.jsx +0 -256
  192. package/__tests__/FlexGrid/FlexGrid.test.jsx +0 -136
  193. package/__tests__/FlexGrid/Row.test.jsx +0 -273
  194. package/__tests__/HorizontalScroll/HorizontalScroll.test.jsx +0 -165
  195. package/__tests__/Icon/Icon.test.jsx +0 -61
  196. package/__tests__/IconButton/IconButton.test.jsx +0 -52
  197. package/__tests__/InputSupports/InputSupports.test.jsx +0 -50
  198. package/__tests__/Link/Link.test.jsx +0 -63
  199. package/__tests__/Link/TextButton.test.jsx +0 -35
  200. package/__tests__/List/List.test.jsx +0 -60
  201. package/__tests__/Modal/Modal.test.jsx +0 -47
  202. package/__tests__/Notification/Notification.test.jsx +0 -20
  203. package/__tests__/Pagination/Pagination.test.jsx +0 -160
  204. package/__tests__/Progress/Progress.test.jsx +0 -79
  205. package/__tests__/Radio/Radio.test.jsx +0 -87
  206. package/__tests__/Radio/RadioGroup.test.jsx +0 -220
  207. package/__tests__/RadioCard/RadioCard.test.jsx +0 -87
  208. package/__tests__/RadioCard/RadioCardGroup.test.jsx +0 -246
  209. package/__tests__/Search/Search.test.jsx +0 -73
  210. package/__tests__/Select/Select.test.jsx +0 -94
  211. package/__tests__/SideNav/SideNav.test.jsx +0 -110
  212. package/__tests__/Skeleton/Skeleton.test.jsx +0 -61
  213. package/__tests__/Spacer/Spacer.test.jsx +0 -63
  214. package/__tests__/StackView/StackView.test.jsx +0 -216
  215. package/__tests__/StackView/StackWrap.test.jsx +0 -47
  216. package/__tests__/StackView/getStackedContent.test.jsx +0 -295
  217. package/__tests__/StepTracker/StepTracker.test.jsx +0 -94
  218. package/__tests__/Tabs/Tabs.test.jsx +0 -40
  219. package/__tests__/Tags/Tags.test.jsx +0 -327
  220. package/__tests__/TextInput/TextArea.test.jsx +0 -35
  221. package/__tests__/TextInput/TextInputBase.test.jsx +0 -125
  222. package/__tests__/ThemeProvider/ThemeProvider.test.jsx +0 -77
  223. package/__tests__/ThemeProvider/useThemeTokens.test.jsx +0 -514
  224. package/__tests__/ThemeProvider/utils/theme-tokens.test.js +0 -41
  225. package/__tests__/ToggleSwitch/ToggleSwitch.test.jsx +0 -82
  226. package/__tests__/ToggleSwitch/ToggleSwitchGroup.test.jsx +0 -192
  227. package/__tests__/Tooltip/Tooltip.test.jsx +0 -65
  228. package/__tests__/Tooltip/getTooltipPosition.test.js +0 -79
  229. package/__tests__/Typography/typography.test.jsx +0 -90
  230. package/__tests__/utils/children.test.jsx +0 -128
  231. package/__tests__/utils/containUniqueFields.test.js +0 -25
  232. package/__tests__/utils/input.test.js +0 -375
  233. package/__tests__/utils/props.test.js +0 -36
  234. package/__tests__/utils/semantics.test.jsx +0 -34
  235. package/__tests__/utils/useCopy.test.js +0 -42
  236. package/__tests__/utils/useResponsiveProp.test.jsx +0 -202
  237. package/__tests__/utils/useSpacingScale.test.jsx +0 -273
  238. package/__tests__/utils/useUniqueId.test.js +0 -31
  239. package/babel.config.js +0 -35
  240. package/generate-component-docs.js +0 -72
  241. package/jest.config.js +0 -32
  242. package/lib-module/A11yInfoProvider/index.js +0 -62
  243. package/lib-module/A11yText/index.js +0 -55
  244. package/lib-module/ActivityIndicator/Spinner.js +0 -76
  245. package/lib-module/ActivityIndicator/Spinner.native.js +0 -143
  246. package/lib-module/ActivityIndicator/index.js +0 -40
  247. package/lib-module/ActivityIndicator/shared.js +0 -12
  248. package/lib-module/BaseProvider/index.js +0 -26
  249. package/lib-module/Box/Box.js +0 -243
  250. package/lib-module/Box/index.js +0 -2
  251. package/lib-module/Button/Button.js +0 -25
  252. package/lib-module/Button/ButtonBase.js +0 -254
  253. package/lib-module/Button/ButtonGroup.js +0 -173
  254. package/lib-module/Button/ButtonLink.js +0 -39
  255. package/lib-module/Button/index.js +0 -4
  256. package/lib-module/Button/propTypes.js +0 -36
  257. package/lib-module/Card/Card.js +0 -83
  258. package/lib-module/Card/CardBase.js +0 -62
  259. package/lib-module/Card/PressableCardBase.js +0 -113
  260. package/lib-module/Card/index.js +0 -4
  261. package/lib-module/Checkbox/Checkbox.js +0 -332
  262. package/lib-module/Checkbox/CheckboxGroup.js +0 -231
  263. package/lib-module/Checkbox/CheckboxInput.js +0 -58
  264. package/lib-module/Checkbox/CheckboxInput.native.js +0 -6
  265. package/lib-module/Checkbox/index.js +0 -3
  266. package/lib-module/Divider/Divider.js +0 -123
  267. package/lib-module/Divider/index.js +0 -2
  268. package/lib-module/ExpandCollapse/Accordion.js +0 -15
  269. package/lib-module/ExpandCollapse/Control.js +0 -130
  270. package/lib-module/ExpandCollapse/ExpandCollapse.js +0 -94
  271. package/lib-module/ExpandCollapse/Panel.js +0 -158
  272. package/lib-module/ExpandCollapse/index.js +0 -7
  273. package/lib-module/Feedback/Feedback.js +0 -144
  274. package/lib-module/Feedback/index.js +0 -2
  275. package/lib-module/Fieldset/Fieldset.js +0 -145
  276. package/lib-module/Fieldset/FieldsetContainer.js +0 -29
  277. package/lib-module/Fieldset/FieldsetContainer.native.js +0 -20
  278. package/lib-module/Fieldset/Legend.js +0 -21
  279. package/lib-module/Fieldset/Legend.native.js +0 -28
  280. package/lib-module/Fieldset/cssReset.js +0 -14
  281. package/lib-module/Fieldset/index.js +0 -2
  282. package/lib-module/FlexGrid/Col/Col.js +0 -275
  283. package/lib-module/FlexGrid/Col/index.js +0 -2
  284. package/lib-module/FlexGrid/FlexGrid.js +0 -147
  285. package/lib-module/FlexGrid/Row/Row.js +0 -183
  286. package/lib-module/FlexGrid/Row/index.js +0 -2
  287. package/lib-module/FlexGrid/helpers/index.js +0 -18
  288. package/lib-module/FlexGrid/index.js +0 -2
  289. package/lib-module/FlexGrid/providers/GutterContext.js +0 -3
  290. package/lib-module/HorizontalScroll/HorizontalScroll.js +0 -170
  291. package/lib-module/HorizontalScroll/HorizontalScrollButton.js +0 -77
  292. package/lib-module/HorizontalScroll/ScrollViewEnd.js +0 -47
  293. package/lib-module/HorizontalScroll/ScrollViewEnd.native.js +0 -24
  294. package/lib-module/HorizontalScroll/dictionary.js +0 -11
  295. package/lib-module/HorizontalScroll/index.js +0 -11
  296. package/lib-module/HorizontalScroll/itemPositions.js +0 -106
  297. package/lib-module/Icon/Icon.js +0 -61
  298. package/lib-module/Icon/IconText.js +0 -81
  299. package/lib-module/Icon/index.js +0 -4
  300. package/lib-module/IconButton/IconButton.js +0 -115
  301. package/lib-module/IconButton/index.js +0 -2
  302. package/lib-module/InputLabel/InputLabel.js +0 -134
  303. package/lib-module/InputLabel/LabelContent.js +0 -24
  304. package/lib-module/InputLabel/LabelContent.native.js +0 -16
  305. package/lib-module/InputLabel/index.js +0 -2
  306. package/lib-module/InputSupports/InputSupports.js +0 -88
  307. package/lib-module/InputSupports/index.js +0 -2
  308. package/lib-module/InputSupports/useInputSupports.js +0 -31
  309. package/lib-module/Link/ChevronLink.js +0 -51
  310. package/lib-module/Link/InlinePressable.js +0 -37
  311. package/lib-module/Link/InlinePressable.native.js +0 -85
  312. package/lib-module/Link/Link.js +0 -27
  313. package/lib-module/Link/LinkBase.js +0 -223
  314. package/lib-module/Link/TextButton.js +0 -34
  315. package/lib-module/Link/index.js +0 -5
  316. package/lib-module/List/List.js +0 -55
  317. package/lib-module/List/ListItem.js +0 -223
  318. package/lib-module/List/index.js +0 -5
  319. package/lib-module/Modal/Modal.js +0 -208
  320. package/lib-module/Modal/dictionary.js +0 -9
  321. package/lib-module/Modal/index.js +0 -2
  322. package/lib-module/Notification/Notification.js +0 -196
  323. package/lib-module/Notification/dictionary.js +0 -8
  324. package/lib-module/Notification/index.js +0 -2
  325. package/lib-module/Pagination/PageButton.js +0 -65
  326. package/lib-module/Pagination/Pagination.js +0 -140
  327. package/lib-module/Pagination/SideButton.js +0 -103
  328. package/lib-module/Pagination/dictionary.js +0 -18
  329. package/lib-module/Pagination/index.js +0 -2
  330. package/lib-module/Pagination/usePagination.js +0 -72
  331. package/lib-module/Progress/Progress.js +0 -85
  332. package/lib-module/Progress/ProgressBar.js +0 -134
  333. package/lib-module/Progress/ProgressBarBackground.js +0 -41
  334. package/lib-module/Progress/index.js +0 -4
  335. package/lib-module/Radio/Radio.js +0 -274
  336. package/lib-module/Radio/RadioButton.js +0 -128
  337. package/lib-module/Radio/RadioGroup.js +0 -234
  338. package/lib-module/Radio/RadioInput.js +0 -60
  339. package/lib-module/Radio/RadioInput.native.js +0 -6
  340. package/lib-module/Radio/index.js +0 -3
  341. package/lib-module/RadioCard/RadioCard.js +0 -218
  342. package/lib-module/RadioCard/RadioCardGroup.js +0 -241
  343. package/lib-module/RadioCard/index.js +0 -3
  344. package/lib-module/Search/Search.js +0 -241
  345. package/lib-module/Search/dictionary.js +0 -12
  346. package/lib-module/Search/index.js +0 -2
  347. package/lib-module/Select/Group.js +0 -20
  348. package/lib-module/Select/Group.native.js +0 -14
  349. package/lib-module/Select/Item.js +0 -17
  350. package/lib-module/Select/Item.native.js +0 -9
  351. package/lib-module/Select/Picker.js +0 -67
  352. package/lib-module/Select/Picker.native.js +0 -110
  353. package/lib-module/Select/Select.js +0 -316
  354. package/lib-module/Select/index.js +0 -6
  355. package/lib-module/SideNav/Item.js +0 -139
  356. package/lib-module/SideNav/ItemContent.js +0 -45
  357. package/lib-module/SideNav/ItemsGroup.js +0 -115
  358. package/lib-module/SideNav/SideNav.js +0 -133
  359. package/lib-module/SideNav/index.js +0 -1
  360. package/lib-module/Skeleton/Skeleton.js +0 -117
  361. package/lib-module/Skeleton/index.js +0 -2
  362. package/lib-module/Skeleton/skeleton.constant.js +0 -3
  363. package/lib-module/Skeleton/skeletonWebAnimation.js +0 -18
  364. package/lib-module/Skeleton/useSkeletonNativeAnimation.js +0 -24
  365. package/lib-module/Spacer/Spacer.js +0 -97
  366. package/lib-module/Spacer/index.js +0 -2
  367. package/lib-module/StackView/StackView.js +0 -124
  368. package/lib-module/StackView/StackWrap.js +0 -48
  369. package/lib-module/StackView/StackWrap.native.js +0 -3
  370. package/lib-module/StackView/StackWrapBox.js +0 -114
  371. package/lib-module/StackView/StackWrapGap.js +0 -58
  372. package/lib-module/StackView/common.js +0 -32
  373. package/lib-module/StackView/getStackedContent.js +0 -123
  374. package/lib-module/StackView/index.js +0 -5
  375. package/lib-module/StepTracker/Step.js +0 -229
  376. package/lib-module/StepTracker/StepTracker.js +0 -175
  377. package/lib-module/StepTracker/dictionary.js +0 -10
  378. package/lib-module/StepTracker/index.js +0 -2
  379. package/lib-module/Tabs/Tabs.js +0 -113
  380. package/lib-module/Tabs/TabsItem.js +0 -215
  381. package/lib-module/Tabs/index.js +0 -2
  382. package/lib-module/Tags/Tags.js +0 -245
  383. package/lib-module/Tags/index.js +0 -2
  384. package/lib-module/TextInput/TextArea.js +0 -88
  385. package/lib-module/TextInput/TextInput.js +0 -68
  386. package/lib-module/TextInput/TextInputBase.js +0 -233
  387. package/lib-module/TextInput/index.js +0 -3
  388. package/lib-module/TextInput/propTypes.js +0 -37
  389. package/lib-module/ThemeProvider/ThemeProvider.js +0 -35
  390. package/lib-module/ThemeProvider/index.js +0 -6
  391. package/lib-module/ThemeProvider/useSetTheme.js +0 -22
  392. package/lib-module/ThemeProvider/useTheme.js +0 -14
  393. package/lib-module/ThemeProvider/useThemeTokens.js +0 -105
  394. package/lib-module/ThemeProvider/utils/index.js +0 -2
  395. package/lib-module/ThemeProvider/utils/styles.js +0 -174
  396. package/lib-module/ThemeProvider/utils/theme-tokens.js +0 -151
  397. package/lib-module/ToggleSwitch/ToggleSwitch.js +0 -227
  398. package/lib-module/ToggleSwitch/ToggleSwitchGroup.js +0 -211
  399. package/lib-module/ToggleSwitch/index.js +0 -3
  400. package/lib-module/Tooltip/Backdrop.js +0 -52
  401. package/lib-module/Tooltip/Backdrop.native.js +0 -43
  402. package/lib-module/Tooltip/Tooltip.js +0 -332
  403. package/lib-module/Tooltip/dictionary.js +0 -8
  404. package/lib-module/Tooltip/getTooltipPosition.js +0 -164
  405. package/lib-module/Tooltip/index.js +0 -2
  406. package/lib-module/TooltipButton/TooltipButton.js +0 -71
  407. package/lib-module/TooltipButton/index.js +0 -2
  408. package/lib-module/Typography/Typography.js +0 -120
  409. package/lib-module/Typography/index.js +0 -2
  410. package/lib-module/ViewportProvider/ViewportProvider.js +0 -28
  411. package/lib-module/ViewportProvider/index.js +0 -3
  412. package/lib-module/ViewportProvider/useViewport.js +0 -3
  413. package/lib-module/ViewportProvider/useViewportListener.js +0 -43
  414. package/lib-module/index.js +0 -48
  415. package/lib-module/utils/a11y/index.js +0 -2
  416. package/lib-module/utils/a11y/semantics.js +0 -154
  417. package/lib-module/utils/a11y/textSize.js +0 -34
  418. package/lib-module/utils/animation/index.js +0 -2
  419. package/lib-module/utils/animation/useVerticalExpandAnimation.js +0 -49
  420. package/lib-module/utils/children.js +0 -118
  421. package/lib-module/utils/containUniqueFields.js +0 -26
  422. package/lib-module/utils/index.js +0 -16
  423. package/lib-module/utils/info/index.js +0 -7
  424. package/lib-module/utils/info/platform/index.js +0 -11
  425. package/lib-module/utils/info/platform/platform.android.js +0 -1
  426. package/lib-module/utils/info/platform/platform.ios.js +0 -1
  427. package/lib-module/utils/info/platform/platform.js +0 -1
  428. package/lib-module/utils/info/platform/platform.native.js +0 -4
  429. package/lib-module/utils/info/versions.js +0 -5
  430. package/lib-module/utils/input.js +0 -180
  431. package/lib-module/utils/pressability.js +0 -97
  432. package/lib-module/utils/props/a11yProps.js +0 -140
  433. package/lib-module/utils/props/clickProps.js +0 -25
  434. package/lib-module/utils/props/componentPropType.js +0 -63
  435. package/lib-module/utils/props/copyPropTypes.js +0 -2
  436. package/lib-module/utils/props/getPropSelector.js +0 -6
  437. package/lib-module/utils/props/handlerProps.js +0 -59
  438. package/lib-module/utils/props/hrefAttrsProp.js +0 -30
  439. package/lib-module/utils/props/index.js +0 -19
  440. package/lib-module/utils/props/inputSupportsProps.js +0 -52
  441. package/lib-module/utils/props/linkProps.js +0 -43
  442. package/lib-module/utils/props/paddingProp.js +0 -9
  443. package/lib-module/utils/props/pressProps.js +0 -42
  444. package/lib-module/utils/props/rectProp.js +0 -9
  445. package/lib-module/utils/props/responsiveProps.js +0 -30
  446. package/lib-module/utils/props/selectSystemProps.js +0 -24
  447. package/lib-module/utils/props/spacingProps.js +0 -56
  448. package/lib-module/utils/props/textInputProps.js +0 -194
  449. package/lib-module/utils/props/textProps.js +0 -59
  450. package/lib-module/utils/props/tokens.js +0 -120
  451. package/lib-module/utils/props/variantProp.js +0 -18
  452. package/lib-module/utils/props/viewProps.js +0 -22
  453. package/lib-module/utils/ssr.js +0 -35
  454. package/lib-module/utils/useCopy.js +0 -42
  455. package/lib-module/utils/useHash.js +0 -44
  456. package/lib-module/utils/useHash.native.js +0 -7
  457. package/lib-module/utils/useResponsiveProp.js +0 -47
  458. package/lib-module/utils/useSpacingScale.js +0 -123
  459. package/lib-module/utils/useUniqueId.js +0 -12
  460. package/lib-module/utils/withLinkRouter.js +0 -82
  461. package/stories/A11yText/A11yText.stories.jsx +0 -71
  462. package/stories/ActivityIndicator/ActivityIndicator.stories.jsx +0 -22
  463. package/stories/Box/Box.stories.jsx +0 -143
  464. package/stories/Button/Button.stories.jsx +0 -72
  465. package/stories/Button/ButtonGroup.stories.jsx +0 -81
  466. package/stories/Button/ButtonLink.stories.jsx +0 -30
  467. package/stories/Card/Card.stories.jsx +0 -62
  468. package/stories/Checkbox/Checkbox.stories.jsx +0 -94
  469. package/stories/Divider/Divider.stories.jsx +0 -68
  470. package/stories/ExpandCollapse/ExpandCollapse.stories.jsx +0 -112
  471. package/stories/Feedback/Feedback.stories.jsx +0 -96
  472. package/stories/FlexGrid/01 FlexGrid.stories.jsx +0 -54
  473. package/stories/FlexGrid/02 Row.stories.jsx +0 -41
  474. package/stories/FlexGrid/03 Col.stories.jsx +0 -141
  475. package/stories/Icon/Icon.stories.jsx +0 -79
  476. package/stories/IconButton/IconButton.stories.jsx +0 -50
  477. package/stories/InputLabel/InputLabel.stories.jsx +0 -39
  478. package/stories/Link/ChevronLink.stories.jsx +0 -48
  479. package/stories/Link/Link.stories.jsx +0 -90
  480. package/stories/Link/TextButton.stories.jsx +0 -79
  481. package/stories/List/List.stories.jsx +0 -117
  482. package/stories/Modal/Modal.stories.jsx +0 -54
  483. package/stories/Notification/Notification.stories.jsx +0 -82
  484. package/stories/Pagination/Pagination.stories.jsx +0 -64
  485. package/stories/Progress/Progress.stories.jsx +0 -93
  486. package/stories/Radio/Radio.stories.jsx +0 -100
  487. package/stories/RadioCard/RadioCard.stories.jsx +0 -98
  488. package/stories/Search/Search.stories.jsx +0 -66
  489. package/stories/Select/Select.stories.jsx +0 -55
  490. package/stories/SideNav/SideNav.stories.jsx +0 -42
  491. package/stories/SideNav/SideNavItem.stories.jsx +0 -9
  492. package/stories/SideNav/SideNavItemsGroup.stories.jsx +0 -17
  493. package/stories/Skeleton/Skeleton.stories.jsx +0 -36
  494. package/stories/Spacer/Spacer.stories.jsx +0 -38
  495. package/stories/StackView/StackView.stories.jsx +0 -75
  496. package/stories/StackView/StackWrap.stories.jsx +0 -64
  497. package/stories/StepTracker/StepTracker.stories.jsx +0 -71
  498. package/stories/Tabs/Tabs.stories.jsx +0 -97
  499. package/stories/Tags/Tags.stories.jsx +0 -69
  500. package/stories/TextInput/TextArea.stories.jsx +0 -101
  501. package/stories/TextInput/TextInput.stories.jsx +0 -141
  502. package/stories/ToggleSwitch/ToggleSwitch.stories.jsx +0 -64
  503. package/stories/ToggleSwitch/ToggleSwitchGroup.stories.jsx +0 -81
  504. package/stories/Tooltip/Tooltip.stories.jsx +0 -81
  505. package/stories/TooltipButton/TooltipButton.stories.jsx +0 -11
  506. package/stories/Typography/Typography.stories.jsx +0 -49
  507. package/stories/platform-supports.jsx +0 -32
  508. package/stories/platform-supports.native.jsx +0 -3
  509. package/stories/supports.jsx +0 -236
@@ -1,514 +0,0 @@
1
- import React from 'react'
2
- import PropTypes from 'prop-types'
3
- import { renderHook } from '@testing-library/react-hooks'
4
-
5
- import ThemeProvider from '../../src/ThemeProvider'
6
- import { useThemeTokens, useThemeTokensCallback } from '../../src/ThemeProvider/useThemeTokens'
7
- import * as tokenUtils from '../../src/ThemeProvider/utils/theme-tokens'
8
-
9
- // Mock out the function that checks the theme version
10
- const validateThemeTokensVersion = jest.spyOn(tokenUtils, 'validateThemeTokensVersion')
11
- validateThemeTokensVersion.mockImplementation(() => undefined)
12
-
13
- const { doesThemeRuleApply, doesThemeConditionApply } = tokenUtils
14
-
15
- const componentName = 'TestComponent'
16
-
17
- const palette = {
18
- colours: {
19
- white: 'rgb(255,255,255)',
20
- red: 'rgb(255,0,0)',
21
- green: 'rgb(0,255,0)',
22
- blue: 'rgb(0,0,255)',
23
- pink: 'rgb(255,50,50)',
24
- lilac: 'rgb(255,200,255)',
25
- other: 'rgb(1,2,3)'
26
- },
27
- sizes: {
28
- none: 0,
29
- tight: 5,
30
- medium: 10,
31
- wide: 50,
32
- other: 999
33
- },
34
- opacities: {
35
- solid: 1,
36
- opaque: 0.9,
37
- cloudy: 0.8,
38
- translucent: 0.5,
39
- transparent: 0.1,
40
- invisible: 0
41
- }
42
- }
43
-
44
- const defaultTokens = {
45
- // TODO: replace `undefined`s here with appropriate "no thanks" values if this ADR lands
46
- // https://github.com/telus/universal-design-system/issues/526
47
- background: undefined,
48
- padding: palette.sizes.medium,
49
- opacity: palette.opacities.solid
50
- }
51
-
52
- const theme = {
53
- metadata: {
54
- name: 'tokens-test',
55
- themeTokensVersion: 'test-version'
56
- },
57
- components: {
58
- [componentName]: {
59
- appearances: {
60
- windowSize: {
61
- values: ['small', 'large'],
62
- type: 'context'
63
- },
64
- colour: {
65
- values: ['red', 'green', 'blue'],
66
- type: 'variant'
67
- },
68
- on: {
69
- values: [true, false],
70
- type: 'state'
71
- }
72
- },
73
- tokens: defaultTokens,
74
- rules: [
75
- { if: { windowSize: 'small' }, tokens: { padding: palette.sizes.tight } },
76
- { if: { windowSize: 'large' }, tokens: { padding: palette.sizes.wide } },
77
- { if: { colour: 'red' }, tokens: { background: palette.colours.red } },
78
- { if: { colour: 'green' }, tokens: { background: palette.colours.green } },
79
- { if: { colour: 'blue' }, tokens: { background: palette.colours.blue } },
80
-
81
- // Slightly translucent if green or blue
82
- { if: { colour: ['green', 'blue'] }, tokens: { opacity: palette.opacities.opaque } },
83
-
84
- // Make red slightly pink and translucent when large
85
- {
86
- if: { colour: 'red', windowSize: 'large' },
87
- tokens: { background: palette.colours.pink, opacity: palette.opacities.cloudy }
88
- },
89
-
90
- // Reset all colours to translucent white if "on"
91
- {
92
- if: { on: true },
93
- tokens: { background: palette.colours.white, opacity: palette.opacities.translucent }
94
- },
95
-
96
- // Make large "on" reds and blues slightly purple
97
- {
98
- if: { on: true, windowSize: 'large', colour: ['red', 'blue'] },
99
- tokens: { background: palette.colours.lilac }
100
- }
101
- ]
102
- }
103
- }
104
- }
105
-
106
- // Example of a component that is built on another component and applies its own rules.
107
- // For these tests we're only interested in rules it applies to its "inner" child component.
108
- theme.components.ExtendedComponent = {
109
- appearances: {
110
- innerOn: {
111
- description: 'ExtendedComponent is built on TestComponent with rules for when it is "on"',
112
- values: [true, false],
113
- type: 'state'
114
- }
115
- },
116
- tokens: {
117
- // Extending components may need to use different names to avoid namespace collisions
118
- innerColour: palette.colours.lilac
119
- },
120
- rules: [
121
- {
122
- // Make inner component text red when the inner component is on
123
- if: { innerOn: true },
124
- tokens: {
125
- innerColour: palette.colours.red
126
- }
127
- }
128
- ]
129
- }
130
-
131
- const ThemeWrapper = ({ children }) => (
132
- <ThemeProvider defaultTheme={theme}>{children}</ThemeProvider>
133
- )
134
- ThemeWrapper.propTypes = { children: PropTypes.node.isRequired }
135
-
136
- const getHookResult = (hookFn) => {
137
- const {
138
- result: { current }
139
- } = renderHook(hookFn, {
140
- wrapper: ThemeWrapper
141
- })
142
- return current
143
- }
144
-
145
- describe('useThemeTokens', () => {
146
- it('gives default tokens when no appearances are given', () => {
147
- const themeTokens = getHookResult(() => useThemeTokens(componentName))
148
-
149
- expect(themeTokens).toEqual(defaultTokens)
150
- })
151
-
152
- it('resolves simple rules for single appearances', () => {
153
- const red = getHookResult(() => useThemeTokens(componentName, {}, { colour: 'red' }, {}))
154
- const large = getHookResult(() =>
155
- useThemeTokens(componentName, {}, {}, { windowSize: 'large' })
156
- )
157
- const on = getHookResult(() => useThemeTokens(componentName, {}, {}, { on: true }))
158
-
159
- expect(red).toEqual({ ...defaultTokens, background: palette.colours.red })
160
- expect(large).toEqual({ ...defaultTokens, padding: palette.sizes.wide })
161
- expect(on).toEqual({
162
- ...defaultTokens,
163
- background: palette.colours.white,
164
- opacity: palette.opacities.translucent
165
- })
166
- })
167
-
168
- it('resolves rules which match multiple values from an array', () => {
169
- const blue = getHookResult(() => useThemeTokens(componentName, {}, { colour: 'blue' }, {}))
170
- const green = getHookResult(() => useThemeTokens(componentName, {}, { colour: 'green' }, {}))
171
-
172
- expect(green).toEqual({
173
- ...defaultTokens,
174
- background: palette.colours.green,
175
- opacity: palette.opacities.opaque
176
- })
177
- expect(blue).toEqual({
178
- ...defaultTokens,
179
- background: palette.colours.blue,
180
- opacity: palette.opacities.opaque
181
- })
182
- })
183
-
184
- it('resolves combinations and intersections of appearances', () => {
185
- const largeRed = getHookResult(() =>
186
- useThemeTokens(componentName, {}, { colour: 'red' }, { windowSize: 'large' })
187
- )
188
- const smallRed = getHookResult(() =>
189
- useThemeTokens(componentName, {}, { colour: 'red' }, { windowSize: 'small' })
190
- )
191
-
192
- const largeBlue = getHookResult(() =>
193
- useThemeTokens(componentName, {}, { colour: 'blue' }, { windowSize: 'large' })
194
- )
195
- const smallBlue = getHookResult(() =>
196
- useThemeTokens(componentName, {}, { colour: 'blue' }, { windowSize: 'small' })
197
- )
198
-
199
- // largeRed includes specific large-red intersection rule
200
- expect(largeRed).toEqual({
201
- opacity: palette.opacities.cloudy,
202
- padding: palette.sizes.wide,
203
- background: palette.colours.pink
204
- })
205
- expect(smallRed).toEqual({
206
- ...defaultTokens,
207
- padding: palette.sizes.tight,
208
- background: palette.colours.red
209
- })
210
-
211
- // includes blue + windowSize + blue-or-green rules
212
- expect(largeBlue).toEqual({
213
- opacity: palette.opacities.opaque,
214
- padding: palette.sizes.wide,
215
- background: palette.colours.blue
216
- })
217
- expect(smallBlue).toEqual({
218
- opacity: palette.opacities.opaque,
219
- padding: palette.sizes.tight,
220
- background: palette.colours.blue
221
- })
222
- })
223
-
224
- it('overrides earlier-defined rules with applicable later ones', () => {
225
- const greenOn = getHookResult(() =>
226
- useThemeTokens(componentName, {}, { colour: 'green' }, { on: true })
227
- )
228
- const largeGreenOn = getHookResult(() =>
229
- useThemeTokens(componentName, {}, { colour: 'green' }, { on: true, windowSize: 'large' })
230
- )
231
- const redOn = getHookResult(() =>
232
- useThemeTokens(componentName, {}, { colour: 'red' }, { on: true })
233
- )
234
- const largeRedOn = getHookResult(() =>
235
- useThemeTokens(componentName, {}, { colour: 'red' }, { on: true, windowSize: 'large' })
236
- )
237
-
238
- expect(greenOn).toEqual({
239
- padding: palette.sizes.medium,
240
- opacity: palette.opacities.translucent,
241
- background: palette.colours.white
242
- })
243
- expect(redOn).toEqual({
244
- padding: palette.sizes.medium,
245
- opacity: palette.opacities.translucent,
246
- background: palette.colours.white
247
- })
248
- expect(largeGreenOn).toEqual({
249
- padding: palette.sizes.wide,
250
- opacity: palette.opacities.translucent,
251
- background: palette.colours.white
252
- })
253
- expect(largeRedOn).toEqual({
254
- padding: palette.sizes.wide,
255
- opacity: palette.opacities.translucent,
256
- background: palette.colours.lilac
257
- })
258
- })
259
-
260
- it('overrides default theme tokens with passed-in tokens', () => {
261
- const greenPlusBackground = getHookResult(() =>
262
- useThemeTokens(componentName, { background: palette.colours.other }, { colour: 'green' }, {})
263
- )
264
- const largeRedPlusOpacity = getHookResult(() =>
265
- useThemeTokens(
266
- componentName,
267
- { opacity: palette.opacities.transparent },
268
- { colour: 'red' },
269
- { windowSize: 'large' }
270
- )
271
- )
272
- const largeBlueOnPlusTokens = getHookResult(() =>
273
- useThemeTokens(
274
- componentName,
275
- { padding: palette.sizes.other, background: palette.colours.other },
276
- { colour: 'blue' },
277
- { on: true, windowSize: 'large' }
278
- )
279
- )
280
-
281
- expect(greenPlusBackground).toEqual({
282
- ...defaultTokens,
283
- background: palette.colours.other,
284
- opacity: palette.opacities.opaque
285
- })
286
- expect(largeRedPlusOpacity).toEqual({
287
- opacity: palette.opacities.transparent,
288
- padding: palette.sizes.wide,
289
- background: palette.colours.pink
290
- })
291
- expect(largeBlueOnPlusTokens).toEqual({
292
- padding: palette.sizes.other,
293
- opacity: palette.opacities.translucent,
294
- background: palette.colours.other
295
- })
296
- })
297
-
298
- // Simulate a scenario where a parent component passes tokens to a child component.
299
- // Imagine a component that contains a button and wants to tell it what colour to be when pressed.
300
- it('overrides default theme tokens using passed-in tokens function', () => {
301
- // ExtendedComponent is a parent to TestComponent and passes it additional theming rules,
302
- // setting child TestComponent's colour to lilac when child's state is "off", and red when "on".
303
- const getTokensByExtendedRules = getHookResult(() =>
304
- useThemeTokensCallback('ExtendedComponent')
305
- )
306
-
307
- // If the extending component uses different naming to its inner component, we need to map names
308
- const selectInnerTokens = ({ innerColour }) => ({ colour: innerColour })
309
- const tokensFn = (innerAppearances) =>
310
- selectInnerTokens(getTokensByExtendedRules({ innerOn: innerAppearances.on }))
311
-
312
- const on = { on: true }
313
-
314
- // These lines reflect what happens inside TestComponent when it receives this tokens prop
315
- const onInnerTokens = getHookResult(() => useThemeTokens(componentName, tokensFn, {}, on))
316
- const offInnerTokens = getHookResult(() => useThemeTokens(componentName, tokensFn, {}, {}))
317
-
318
- expect(offInnerTokens).toEqual({
319
- ...defaultTokens,
320
- colour: palette.colours.lilac
321
- })
322
-
323
- const onDefaultTokens = getHookResult(() => useThemeTokens(componentName, {}, {}, on))
324
- expect(onInnerTokens).toEqual({
325
- ...onDefaultTokens,
326
- colour: palette.colours.red
327
- })
328
- })
329
-
330
- it('overrides default and resolved tokens with passed in defined-but-falsy values', () => {
331
- const unsetDefault = getHookResult(() =>
332
- useThemeTokens(componentName, { padding: null, background: null, opacity: null }, {}, {})
333
- )
334
- const zeroDefault = getHookResult(() =>
335
- useThemeTokens(
336
- componentName,
337
- { padding: palette.sizes.none, opacity: palette.opacities.invisible },
338
- {},
339
- {}
340
- )
341
- )
342
- const unsetLargeRedOn = getHookResult(() =>
343
- useThemeTokens(
344
- componentName,
345
- { padding: null, background: null, opacity: null },
346
- { colour: 'red' },
347
- { on: true, windowSize: 'large' }
348
- )
349
- )
350
- const zeroLargeRedOn = getHookResult(() =>
351
- useThemeTokens(
352
- componentName,
353
- { padding: palette.sizes.none, opacity: palette.opacities.invisible },
354
- { colour: 'red' },
355
- { on: true, windowSize: 'large' }
356
- )
357
- )
358
-
359
- expect(unsetDefault).toEqual({ padding: null, background: null, opacity: null })
360
- expect(zeroDefault).toEqual({
361
- ...defaultTokens,
362
- padding: palette.sizes.none,
363
- opacity: palette.opacities.invisible
364
- })
365
-
366
- expect(unsetLargeRedOn).toEqual({
367
- padding: null,
368
- background: null,
369
- opacity: null
370
- })
371
- expect(zeroLargeRedOn).toEqual({
372
- background: palette.colours.lilac,
373
- padding: palette.sizes.none,
374
- opacity: palette.opacities.invisible
375
- })
376
- })
377
-
378
- it('does not unset default and resolved tokens with passed in explicit undefined', () => {
379
- const undefinedDefault = getHookResult(() =>
380
- useThemeTokens(
381
- componentName,
382
- { padding: undefined, background: undefined, opacity: undefined },
383
- {},
384
- {}
385
- )
386
- )
387
- expect(undefinedDefault).toEqual(defaultTokens)
388
- })
389
-
390
- // Catch-all test to check every combination
391
- // More readable spaced like a table
392
- /* prettier-ignore */
393
- const everyAppearance = [
394
- [{ colour: undefined }, { windowSize: undefined, on: undefined }],
395
- [{ colour: undefined }, { windowSize: 'small', on: undefined }],
396
- [{ colour: undefined }, { windowSize: 'large', on: undefined }],
397
- [{ colour: 'red' }, { windowSize: undefined, on: undefined }],
398
- [{ colour: 'red' }, { windowSize: 'small', on: undefined }],
399
- [{ colour: 'red' }, { windowSize: 'large', on: undefined }],
400
- [{ colour: 'green' }, { windowSize: undefined, on: undefined }],
401
- [{ colour: 'green' }, { windowSize: 'small', on: undefined }],
402
- [{ colour: 'green' }, { windowSize: 'large', on: undefined }],
403
- [{ colour: 'blue' }, { windowSize: undefined, on: undefined }],
404
- [{ colour: 'blue' }, { windowSize: 'small', on: undefined }],
405
- [{ colour: 'blue' }, { windowSize: 'large', on: undefined }],
406
-
407
- [{ colour: undefined }, { windowSize: undefined, on: true }],
408
- [{ colour: undefined }, { windowSize: 'small', on: true }],
409
- [{ colour: undefined }, { windowSize: 'large', on: true }],
410
- [{ colour: 'red' }, { windowSize: undefined, on: true }],
411
- [{ colour: 'red' }, { windowSize: 'small', on: true }],
412
- [{ colour: 'red' }, { windowSize: 'large', on: true }],
413
- [{ colour: 'green' }, { windowSize: undefined, on: true }],
414
- [{ colour: 'green' }, { windowSize: 'small', on: true }],
415
- [{ colour: 'green' }, { windowSize: 'large', on: true }],
416
- [{ colour: 'blue' }, { windowSize: undefined, on: true }],
417
- [{ colour: 'blue' }, { windowSize: 'small', on: true }],
418
- [{ colour: 'blue' }, { windowSize: 'large', on: true }]
419
- ].map((arr, index) => [...arr, index])
420
-
421
- // More readable spaced like a table
422
- /* prettier-ignore */
423
- const expectedTokens = [
424
- { background: undefined, padding: palette.sizes.medium, opacity: palette.opacities.solid },
425
- { background: undefined, padding: palette.sizes.tight, opacity: palette.opacities.solid },
426
- { background: undefined, padding: palette.sizes.wide, opacity: palette.opacities.solid },
427
- { background: palette.colours.red, padding: palette.sizes.medium, opacity: palette.opacities.solid },
428
- { background: palette.colours.red, padding: palette.sizes.tight, opacity: palette.opacities.solid },
429
- { background: palette.colours.pink, padding: palette.sizes.wide, opacity: palette.opacities.cloudy },
430
- { background: palette.colours.green, padding: palette.sizes.medium, opacity: palette.opacities.opaque },
431
- { background: palette.colours.green, padding: palette.sizes.tight, opacity: palette.opacities.opaque },
432
- { background: palette.colours.green, padding: palette.sizes.wide, opacity: palette.opacities.opaque },
433
- { background: palette.colours.blue, padding: palette.sizes.medium, opacity: palette.opacities.opaque },
434
- { background: palette.colours.blue, padding: palette.sizes.tight, opacity: palette.opacities.opaque },
435
- { background: palette.colours.blue, padding: palette.sizes.wide, opacity: palette.opacities.opaque },
436
-
437
- { background: palette.colours.white, padding: palette.sizes.medium, opacity: palette.opacities.translucent },
438
- { background: palette.colours.white, padding: palette.sizes.tight, opacity: palette.opacities.translucent },
439
- { background: palette.colours.white, padding: palette.sizes.wide, opacity: palette.opacities.translucent },
440
- { background: palette.colours.white, padding: palette.sizes.medium, opacity: palette.opacities.translucent },
441
- { background: palette.colours.white, padding: palette.sizes.tight, opacity: palette.opacities.translucent },
442
- { background: palette.colours.lilac, padding: palette.sizes.wide, opacity: palette.opacities.translucent },
443
- { background: palette.colours.white, padding: palette.sizes.medium, opacity: palette.opacities.translucent },
444
- { background: palette.colours.white, padding: palette.sizes.tight, opacity: palette.opacities.translucent },
445
- { background: palette.colours.white, padding: palette.sizes.wide, opacity: palette.opacities.translucent },
446
- { background: palette.colours.white, padding: palette.sizes.medium, opacity: palette.opacities.translucent },
447
- { background: palette.colours.white, padding: palette.sizes.tight, opacity: palette.opacities.translucent },
448
- { background: palette.colours.lilac, padding: palette.sizes.wide, opacity: palette.opacities.translucent }
449
- ]
450
- it.each(everyAppearance)('resolves variant: %p state: %p index: %p', (variant, state, index) => {
451
- const themeTokens = getHookResult(() => useThemeTokens(componentName, {}, variant, state))
452
-
453
- expect(themeTokens).toEqual(expectedTokens[index])
454
- })
455
- })
456
-
457
- describe('useThemeTokens doesConditionApply', () => {
458
- const values = { a: 'A', b: 1, c: false }
459
- it('returns true if value is a match', () => {
460
- expect(doesThemeConditionApply(['a', 'A'], values)).toBe(true)
461
- expect(doesThemeConditionApply(['b', 1], values)).toBe(true)
462
- expect(doesThemeConditionApply(['c', false], values)).toBe(true)
463
- })
464
- it('returns false if value is not a match', () => {
465
- expect(doesThemeConditionApply(['a', false], values)).toBe(false)
466
- expect(doesThemeConditionApply(['b', 'A'], values)).toBe(false)
467
- expect(doesThemeConditionApply(['c', 1], values)).toBe(false)
468
- })
469
- it('returns true if value is an array containing a match', () => {
470
- expect(doesThemeConditionApply(['a', [9, true, 'A', '']], values)).toBe(true)
471
- expect(doesThemeConditionApply(['b', ['', 1, 'B', true]], values)).toBe(true)
472
- expect(doesThemeConditionApply(['c', [false, 'C', true, 0]], values)).toBe(true)
473
- })
474
- it('returns false if value is an array not containing a match', () => {
475
- expect(doesThemeConditionApply(['a', [9, true, 'B', '']], values)).toBe(false)
476
- expect(doesThemeConditionApply(['b', ['', 2, 'B', true]], values)).toBe(false)
477
- expect(doesThemeConditionApply(['c', [null, 'C', true, 0]], values)).toBe(false)
478
- })
479
-
480
- it('returns false if appearance value is missing and rule specifies a not-null value', () => {
481
- expect(doesThemeConditionApply(['a', 'something'], { a: undefined })).toBe(false)
482
- expect(doesThemeConditionApply(['a', 'something'], { a: null })).toBe(false)
483
- expect(doesThemeConditionApply(['a', ['something', 'else']], { a: undefined })).toBe(false)
484
- expect(doesThemeConditionApply(['a', ['something', 'else']], { a: null })).toBe(false)
485
- })
486
-
487
- it('returns true if appearance value is nullish and rule value is null', () => {
488
- expect(doesThemeConditionApply(['a', null], { a: undefined })).toBe(true)
489
- expect(doesThemeConditionApply(['a', null], { a: null })).toBe(true)
490
- expect(doesThemeConditionApply(['a', [null], 'else'], { a: undefined })).toBe(true)
491
- expect(doesThemeConditionApply(['a', [null, 'else']], { a: null })).toBe(true)
492
- })
493
- })
494
-
495
- describe('useThemeTokens doesRuleApply', () => {
496
- const values = { a: 'A', b: 1, c: false }
497
- it('returns true if every provided singular condition is an exact match', () => {
498
- expect(doesThemeRuleApply({ if: { a: 'A' } }, values)).toBe(true)
499
- expect(doesThemeRuleApply({ if: { b: 1, a: 'A' } }, values)).toBe(true)
500
- expect(doesThemeRuleApply({ if: { c: false, b: 1, a: 'A' } }, values)).toBe(true)
501
- })
502
- it('returns true if every provided singular condition is a match including arrays containing a match', () => {
503
- expect(doesThemeRuleApply({ if: { a: ['A', 'B'] } }, values)).toBe(true)
504
- expect(doesThemeRuleApply({ if: { b: [1, 2, 3, 4, 5], a: 'A' } }, values)).toBe(true)
505
- expect(doesThemeRuleApply({ if: { c: [0, false], b: [1, 2], a: ['A', 'B'] } }, values)).toBe(
506
- true
507
- )
508
- })
509
- it('returns false if any provided condition is not a match', () => {
510
- expect(doesThemeRuleApply({ if: { a: 'A', b: 2 } }, values)).toBe(false)
511
- expect(doesThemeRuleApply({ if: { b: 1, a: ['a', 'b', 'c'] } }, values)).toBe(false)
512
- expect(doesThemeRuleApply({ if: { c: true, b: 1, a: 'A' } }, values)).toBe(false)
513
- })
514
- })
@@ -1,41 +0,0 @@
1
- import pkg from '../../../package.json'
2
- import { validateThemeTokensVersion } from '../../../src/ThemeProvider/utils/theme-tokens'
3
-
4
- function validate({ expectedVersion, actualVersion }) {
5
- pkg.dependencies['@telus-uds/system-theme-tokens'] = expectedVersion
6
- const theme = {
7
- metadata: {
8
- themeTokensVersion: actualVersion
9
- }
10
- }
11
- validateThemeTokensVersion(theme)
12
- }
13
-
14
- describe('validateThemeTokensVersion', () => {
15
- test('No error on matching version', async () => {
16
- const expectedVersion = '1.2.3'
17
- const actualVersion = '1.2.3'
18
-
19
- validate({ expectedVersion, actualVersion })
20
-
21
- // No errors, no problem...
22
- })
23
-
24
- test('Throws if theme version is old', async () => {
25
- const expectedVersion = '^2.3.4'
26
- const actualVersion = '2.3.3'
27
-
28
- expect(() => validate({ expectedVersion, actualVersion })).toThrow(
29
- 'Invalid UDS token schema version detected.'
30
- )
31
- })
32
-
33
- test('Throws if theme version is new', async () => {
34
- const expectedVersion = '^1.2.3'
35
- const actualVersion = '2.3.4'
36
-
37
- expect(() => validate({ expectedVersion, actualVersion })).toThrow(
38
- 'Invalid UDS token schema version detected.'
39
- )
40
- })
41
- })
@@ -1,82 +0,0 @@
1
- import React from 'react'
2
- import { render, fireEvent } from '@testing-library/react-native'
3
-
4
- import Theme from '../../__fixtures__/Theme'
5
- import ToggleSwitch from '../../src/ToggleSwitch/ToggleSwitch'
6
-
7
- const checked = { checked: true }
8
-
9
- describe('ToggleSwitch', () => {
10
- it('is accessible as a switch by default', async () => {
11
- const { queryAllByA11yRole } = render(
12
- <Theme>
13
- <ToggleSwitch />
14
- </Theme>
15
- )
16
- expect(queryAllByA11yRole('button')).toHaveLength(0)
17
- expect(queryAllByA11yRole('switch')).toHaveLength(1)
18
- })
19
-
20
- it('selects when pressed', async () => {
21
- const { getByA11yRole, queryAllByA11yState } = render(
22
- <Theme>
23
- <ToggleSwitch />
24
- </Theme>
25
- )
26
- const toggleSwitch = getByA11yRole('switch')
27
- expect(queryAllByA11yState(checked)).toHaveLength(0)
28
- await fireEvent.press(toggleSwitch)
29
- expect(queryAllByA11yState(checked)).toHaveLength(1)
30
- })
31
-
32
- it('applies an initialValue as on and deselects when unpressed', async () => {
33
- const { getByA11yRole, queryAllByA11yState } = render(
34
- <Theme>
35
- <ToggleSwitch initialValue={true} />
36
- </Theme>
37
- )
38
- const toggleSwitch = getByA11yRole('switch')
39
- expect(queryAllByA11yState(checked)).toHaveLength(1)
40
- await fireEvent.press(toggleSwitch)
41
- expect(queryAllByA11yState(checked)).toHaveLength(0)
42
- })
43
-
44
- it("doesn't select when pressed when inactive", async () => {
45
- const { getByA11yRole, queryAllByA11yState } = render(
46
- <Theme>
47
- <ToggleSwitch inactive />
48
- </Theme>
49
- )
50
- const toggleSwitch = getByA11yRole('switch')
51
- expect(queryAllByA11yState(checked)).toHaveLength(0)
52
- await fireEvent.press(toggleSwitch)
53
- expect(queryAllByA11yState(checked)).toHaveLength(0)
54
- })
55
-
56
- it("calls onChange with new value and doesn't change own state when passed a value", async () => {
57
- const handleChange = jest.fn((arg) => arg)
58
- const { getByA11yRole, queryAllByA11yState } = render(
59
- <Theme>
60
- <ToggleSwitch value={false} onChange={handleChange} />
61
- </Theme>
62
- )
63
- expect(handleChange).toHaveBeenCalledTimes(0)
64
- const toggleSwitch = getByA11yRole('switch')
65
- expect(queryAllByA11yState(checked)).toHaveLength(0)
66
-
67
- await fireEvent(toggleSwitch, 'press', { nativeEvent: 'example' })
68
- expect(handleChange).toHaveBeenCalledTimes(1)
69
- expect(handleChange).toHaveBeenLastCalledWith(true, { nativeEvent: 'example' })
70
- expect(queryAllByA11yState(checked)).toHaveLength(0)
71
- })
72
-
73
- it('displays the label', () => {
74
- const label = 'Toggle me!'
75
- const { getByText } = render(
76
- <Theme>
77
- <ToggleSwitch label={label} />
78
- </Theme>
79
- )
80
- expect(getByText(label)).toBeTruthy()
81
- })
82
- })