@telus-uds/components-base 1.8.0 → 1.8.3

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 (495) hide show
  1. package/CHANGELOG.md +34 -2
  2. package/component-docs.json +710 -668
  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 +33 -31
  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 +27 -25
  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 +27 -23
  27. package/lib/Feedback/Feedback.js +48 -35
  28. package/lib/Fieldset/Fieldset.js +16 -15
  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 +37 -30
  46. package/lib/InputLabel/LabelContent.js +12 -9
  47. package/lib/InputLabel/LabelContent.native.js +9 -6
  48. package/lib/InputSupports/InputSupports.js +11 -10
  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 +12 -11
  57. package/lib/List/ListItem.js +103 -79
  58. package/lib/Modal/Modal.js +74 -60
  59. package/lib/Notification/Notification.js +46 -33
  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 +28 -26
  70. package/lib/Radio/RadioInput.js +12 -10
  71. package/lib/RadioCard/RadioCard.js +15 -14
  72. package/lib/RadioCard/RadioCardGroup.js +28 -26
  73. package/lib/Search/Search.js +51 -31
  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 +60 -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 +89 -73
  111. package/lib/ToggleSwitch/ToggleSwitchGroup.js +36 -34
  112. package/lib/Tooltip/Backdrop.js +4 -3
  113. package/lib/Tooltip/Backdrop.native.js +5 -4
  114. package/lib/Tooltip/Tooltip.js +81 -65
  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 +6 -5
  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 +15 -12
  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 +13 -11
  144. package/src/List/List.jsx +30 -19
  145. package/src/List/ListItem.jsx +12 -2
  146. package/src/Modal/Modal.jsx +2 -1
  147. package/src/Pagination/Pagination.jsx +3 -0
  148. package/src/Search/Search.jsx +11 -0
  149. package/src/Select/Item.native.jsx +0 -7
  150. package/.storybook/main.js +0 -11
  151. package/.storybook/preview.js +0 -37
  152. package/.turbo/turbo-build.log +0 -8
  153. package/.turbo/turbo-lint.log +0 -3
  154. package/CHANGELOG.json +0 -311
  155. package/__fixtures__/Accessible.js +0 -34
  156. package/__fixtures__/Accessible.native.js +0 -34
  157. package/__fixtures__/Theme.jsx +0 -13
  158. package/__fixtures__/Viewport.jsx +0 -17
  159. package/__fixtures__/test-utils.js +0 -25
  160. package/__fixtures__/testTheme.js +0 -1830
  161. package/__tests__/A11yText/A11yText.test.jsx +0 -34
  162. package/__tests__/ActivityIndicator/ActivityIndicator.test.jsx +0 -68
  163. package/__tests__/ActivityIndicator/__snapshots__/ActivityIndicator.test.jsx.snap +0 -287
  164. package/__tests__/Box/Box.test.jsx +0 -111
  165. package/__tests__/Button/Button.test.jsx +0 -86
  166. package/__tests__/Button/ButtonBase.test.jsx +0 -82
  167. package/__tests__/Button/ButtonGroup.test.jsx +0 -347
  168. package/__tests__/Button/ButtonLink.test.jsx +0 -61
  169. package/__tests__/Card/Card.test.jsx +0 -63
  170. package/__tests__/Checkbox/Checkbox.test.jsx +0 -94
  171. package/__tests__/Checkbox/CheckboxGroup.test.jsx +0 -246
  172. package/__tests__/Divider/Divider.test.jsx +0 -91
  173. package/__tests__/ExpandCollapse/ExpandCollapse.test.jsx +0 -109
  174. package/__tests__/Feedback/Feedback.test.jsx +0 -42
  175. package/__tests__/FlexGrid/Col.test.jsx +0 -261
  176. package/__tests__/FlexGrid/FlexGrid.test.jsx +0 -136
  177. package/__tests__/FlexGrid/Row.test.jsx +0 -273
  178. package/__tests__/HorizontalScroll/HorizontalScroll.test.jsx +0 -165
  179. package/__tests__/Icon/Icon.test.jsx +0 -61
  180. package/__tests__/IconButton/IconButton.test.jsx +0 -52
  181. package/__tests__/InputLabel/InputLabel.test.jsx +0 -28
  182. package/__tests__/InputLabel/__snapshots__/InputLabel.test.jsx.snap +0 -3
  183. package/__tests__/InputSupports/InputSupports.test.jsx +0 -60
  184. package/__tests__/Link/Link.test.jsx +0 -63
  185. package/__tests__/Link/TextButton.test.jsx +0 -35
  186. package/__tests__/List/List.test.jsx +0 -60
  187. package/__tests__/Modal/Modal.test.jsx +0 -47
  188. package/__tests__/Notification/Notification.test.jsx +0 -20
  189. package/__tests__/Pagination/Pagination.test.jsx +0 -160
  190. package/__tests__/Progress/Progress.test.jsx +0 -79
  191. package/__tests__/Radio/Radio.test.jsx +0 -87
  192. package/__tests__/Radio/RadioGroup.test.jsx +0 -220
  193. package/__tests__/RadioCard/RadioCard.test.jsx +0 -87
  194. package/__tests__/RadioCard/RadioCardGroup.test.jsx +0 -246
  195. package/__tests__/Search/Search.test.jsx +0 -73
  196. package/__tests__/Select/Select.test.jsx +0 -94
  197. package/__tests__/SideNav/SideNav.test.jsx +0 -110
  198. package/__tests__/Skeleton/Skeleton.test.jsx +0 -61
  199. package/__tests__/Spacer/Spacer.test.jsx +0 -63
  200. package/__tests__/StackView/StackView.test.jsx +0 -216
  201. package/__tests__/StackView/StackWrap.test.jsx +0 -47
  202. package/__tests__/StackView/getStackedContent.test.jsx +0 -295
  203. package/__tests__/StepTracker/StepTracker.test.jsx +0 -94
  204. package/__tests__/Tabs/Tabs.test.jsx +0 -40
  205. package/__tests__/Tags/Tags.test.jsx +0 -327
  206. package/__tests__/TextInput/TextArea.test.jsx +0 -35
  207. package/__tests__/TextInput/TextInputBase.test.jsx +0 -125
  208. package/__tests__/ThemeProvider/ThemeProvider.test.jsx +0 -77
  209. package/__tests__/ThemeProvider/useThemeTokens.test.jsx +0 -514
  210. package/__tests__/ThemeProvider/utils/theme-tokens.test.js +0 -41
  211. package/__tests__/ToggleSwitch/ToggleSwitch.test.jsx +0 -82
  212. package/__tests__/ToggleSwitch/ToggleSwitchGroup.test.jsx +0 -192
  213. package/__tests__/Tooltip/Tooltip.test.jsx +0 -65
  214. package/__tests__/Tooltip/getTooltipPosition.test.js +0 -79
  215. package/__tests__/Typography/typography.test.jsx +0 -90
  216. package/__tests__/utils/children.test.jsx +0 -128
  217. package/__tests__/utils/containUniqueFields.test.js +0 -25
  218. package/__tests__/utils/input.test.js +0 -375
  219. package/__tests__/utils/props.test.js +0 -36
  220. package/__tests__/utils/semantics.test.jsx +0 -34
  221. package/__tests__/utils/useCopy.test.js +0 -42
  222. package/__tests__/utils/useResponsiveProp.test.jsx +0 -202
  223. package/__tests__/utils/useSpacingScale.test.jsx +0 -273
  224. package/__tests__/utils/useUniqueId.test.js +0 -31
  225. package/babel.config.js +0 -35
  226. package/generate-component-docs.js +0 -72
  227. package/jest.config.js +0 -32
  228. package/lib-module/A11yInfoProvider/index.js +0 -62
  229. package/lib-module/A11yText/index.js +0 -55
  230. package/lib-module/ActivityIndicator/Spinner.js +0 -76
  231. package/lib-module/ActivityIndicator/Spinner.native.js +0 -143
  232. package/lib-module/ActivityIndicator/index.js +0 -40
  233. package/lib-module/ActivityIndicator/shared.js +0 -12
  234. package/lib-module/BaseProvider/index.js +0 -26
  235. package/lib-module/Box/Box.js +0 -243
  236. package/lib-module/Box/index.js +0 -2
  237. package/lib-module/Button/Button.js +0 -25
  238. package/lib-module/Button/ButtonBase.js +0 -254
  239. package/lib-module/Button/ButtonGroup.js +0 -245
  240. package/lib-module/Button/ButtonLink.js +0 -39
  241. package/lib-module/Button/index.js +0 -4
  242. package/lib-module/Button/propTypes.js +0 -36
  243. package/lib-module/Card/Card.js +0 -83
  244. package/lib-module/Card/CardBase.js +0 -62
  245. package/lib-module/Card/PressableCardBase.js +0 -113
  246. package/lib-module/Card/index.js +0 -4
  247. package/lib-module/Checkbox/Checkbox.js +0 -332
  248. package/lib-module/Checkbox/CheckboxGroup.js +0 -231
  249. package/lib-module/Checkbox/CheckboxInput.js +0 -58
  250. package/lib-module/Checkbox/CheckboxInput.native.js +0 -6
  251. package/lib-module/Checkbox/index.js +0 -3
  252. package/lib-module/Divider/Divider.js +0 -123
  253. package/lib-module/Divider/index.js +0 -2
  254. package/lib-module/ExpandCollapse/Accordion.js +0 -15
  255. package/lib-module/ExpandCollapse/Control.js +0 -130
  256. package/lib-module/ExpandCollapse/ExpandCollapse.js +0 -94
  257. package/lib-module/ExpandCollapse/Panel.js +0 -159
  258. package/lib-module/ExpandCollapse/index.js +0 -7
  259. package/lib-module/Feedback/Feedback.js +0 -144
  260. package/lib-module/Feedback/index.js +0 -2
  261. package/lib-module/Fieldset/Fieldset.js +0 -152
  262. package/lib-module/Fieldset/FieldsetContainer.js +0 -29
  263. package/lib-module/Fieldset/FieldsetContainer.native.js +0 -20
  264. package/lib-module/Fieldset/Legend.js +0 -21
  265. package/lib-module/Fieldset/Legend.native.js +0 -28
  266. package/lib-module/Fieldset/cssReset.js +0 -14
  267. package/lib-module/Fieldset/index.js +0 -2
  268. package/lib-module/FlexGrid/Col/Col.js +0 -275
  269. package/lib-module/FlexGrid/Col/index.js +0 -2
  270. package/lib-module/FlexGrid/FlexGrid.js +0 -147
  271. package/lib-module/FlexGrid/Row/Row.js +0 -183
  272. package/lib-module/FlexGrid/Row/index.js +0 -2
  273. package/lib-module/FlexGrid/helpers/index.js +0 -18
  274. package/lib-module/FlexGrid/index.js +0 -2
  275. package/lib-module/FlexGrid/providers/GutterContext.js +0 -3
  276. package/lib-module/HorizontalScroll/HorizontalScroll.js +0 -170
  277. package/lib-module/HorizontalScroll/HorizontalScrollButton.js +0 -77
  278. package/lib-module/HorizontalScroll/ScrollViewEnd.js +0 -47
  279. package/lib-module/HorizontalScroll/ScrollViewEnd.native.js +0 -24
  280. package/lib-module/HorizontalScroll/dictionary.js +0 -11
  281. package/lib-module/HorizontalScroll/index.js +0 -11
  282. package/lib-module/HorizontalScroll/itemPositions.js +0 -106
  283. package/lib-module/Icon/Icon.js +0 -61
  284. package/lib-module/Icon/IconText.js +0 -81
  285. package/lib-module/Icon/index.js +0 -4
  286. package/lib-module/IconButton/IconButton.js +0 -115
  287. package/lib-module/IconButton/index.js +0 -2
  288. package/lib-module/InputLabel/InputLabel.js +0 -141
  289. package/lib-module/InputLabel/LabelContent.js +0 -24
  290. package/lib-module/InputLabel/LabelContent.native.js +0 -16
  291. package/lib-module/InputLabel/index.js +0 -2
  292. package/lib-module/InputSupports/InputSupports.js +0 -95
  293. package/lib-module/InputSupports/index.js +0 -2
  294. package/lib-module/InputSupports/useInputSupports.js +0 -31
  295. package/lib-module/Link/ChevronLink.js +0 -51
  296. package/lib-module/Link/InlinePressable.js +0 -37
  297. package/lib-module/Link/InlinePressable.native.js +0 -85
  298. package/lib-module/Link/Link.js +0 -27
  299. package/lib-module/Link/LinkBase.js +0 -223
  300. package/lib-module/Link/TextButton.js +0 -34
  301. package/lib-module/Link/index.js +0 -5
  302. package/lib-module/List/List.js +0 -55
  303. package/lib-module/List/ListItem.js +0 -223
  304. package/lib-module/List/index.js +0 -5
  305. package/lib-module/Modal/Modal.js +0 -208
  306. package/lib-module/Modal/dictionary.js +0 -9
  307. package/lib-module/Modal/index.js +0 -2
  308. package/lib-module/Notification/Notification.js +0 -196
  309. package/lib-module/Notification/dictionary.js +0 -8
  310. package/lib-module/Notification/index.js +0 -2
  311. package/lib-module/Pagination/PageButton.js +0 -65
  312. package/lib-module/Pagination/Pagination.js +0 -140
  313. package/lib-module/Pagination/SideButton.js +0 -103
  314. package/lib-module/Pagination/dictionary.js +0 -18
  315. package/lib-module/Pagination/index.js +0 -2
  316. package/lib-module/Pagination/usePagination.js +0 -72
  317. package/lib-module/Progress/Progress.js +0 -85
  318. package/lib-module/Progress/ProgressBar.js +0 -134
  319. package/lib-module/Progress/ProgressBarBackground.js +0 -41
  320. package/lib-module/Progress/index.js +0 -4
  321. package/lib-module/Radio/Radio.js +0 -274
  322. package/lib-module/Radio/RadioButton.js +0 -128
  323. package/lib-module/Radio/RadioGroup.js +0 -241
  324. package/lib-module/Radio/RadioInput.js +0 -60
  325. package/lib-module/Radio/RadioInput.native.js +0 -6
  326. package/lib-module/Radio/index.js +0 -3
  327. package/lib-module/RadioCard/RadioCard.js +0 -218
  328. package/lib-module/RadioCard/RadioCardGroup.js +0 -248
  329. package/lib-module/RadioCard/index.js +0 -3
  330. package/lib-module/Search/Search.js +0 -241
  331. package/lib-module/Search/dictionary.js +0 -12
  332. package/lib-module/Search/index.js +0 -2
  333. package/lib-module/Select/Group.js +0 -20
  334. package/lib-module/Select/Group.native.js +0 -14
  335. package/lib-module/Select/Item.js +0 -17
  336. package/lib-module/Select/Item.native.js +0 -9
  337. package/lib-module/Select/Picker.js +0 -67
  338. package/lib-module/Select/Picker.native.js +0 -110
  339. package/lib-module/Select/Select.js +0 -316
  340. package/lib-module/Select/index.js +0 -6
  341. package/lib-module/SideNav/Item.js +0 -139
  342. package/lib-module/SideNav/ItemContent.js +0 -45
  343. package/lib-module/SideNav/ItemsGroup.js +0 -115
  344. package/lib-module/SideNav/SideNav.js +0 -133
  345. package/lib-module/SideNav/index.js +0 -1
  346. package/lib-module/Skeleton/Skeleton.js +0 -163
  347. package/lib-module/Skeleton/index.js +0 -2
  348. package/lib-module/Skeleton/skeleton.constant.js +0 -3
  349. package/lib-module/Skeleton/skeletonWebAnimation.js +0 -18
  350. package/lib-module/Skeleton/useSkeletonNativeAnimation.js +0 -24
  351. package/lib-module/Spacer/Spacer.js +0 -97
  352. package/lib-module/Spacer/index.js +0 -2
  353. package/lib-module/StackView/StackView.js +0 -124
  354. package/lib-module/StackView/StackWrap.js +0 -48
  355. package/lib-module/StackView/StackWrap.native.js +0 -3
  356. package/lib-module/StackView/StackWrapBox.js +0 -114
  357. package/lib-module/StackView/StackWrapGap.js +0 -58
  358. package/lib-module/StackView/common.js +0 -32
  359. package/lib-module/StackView/getStackedContent.js +0 -123
  360. package/lib-module/StackView/index.js +0 -5
  361. package/lib-module/StepTracker/Step.js +0 -229
  362. package/lib-module/StepTracker/StepTracker.js +0 -175
  363. package/lib-module/StepTracker/dictionary.js +0 -10
  364. package/lib-module/StepTracker/index.js +0 -2
  365. package/lib-module/Tabs/Tabs.js +0 -113
  366. package/lib-module/Tabs/TabsItem.js +0 -215
  367. package/lib-module/Tabs/index.js +0 -2
  368. package/lib-module/Tags/Tags.js +0 -245
  369. package/lib-module/Tags/index.js +0 -2
  370. package/lib-module/TextInput/TextArea.js +0 -88
  371. package/lib-module/TextInput/TextInput.js +0 -68
  372. package/lib-module/TextInput/TextInputBase.js +0 -233
  373. package/lib-module/TextInput/index.js +0 -3
  374. package/lib-module/TextInput/propTypes.js +0 -37
  375. package/lib-module/ThemeProvider/ThemeProvider.js +0 -35
  376. package/lib-module/ThemeProvider/index.js +0 -6
  377. package/lib-module/ThemeProvider/useSetTheme.js +0 -22
  378. package/lib-module/ThemeProvider/useTheme.js +0 -14
  379. package/lib-module/ThemeProvider/useThemeTokens.js +0 -105
  380. package/lib-module/ThemeProvider/utils/index.js +0 -2
  381. package/lib-module/ThemeProvider/utils/styles.js +0 -174
  382. package/lib-module/ThemeProvider/utils/theme-tokens.js +0 -151
  383. package/lib-module/ToggleSwitch/ToggleSwitch.js +0 -234
  384. package/lib-module/ToggleSwitch/ToggleSwitchGroup.js +0 -218
  385. package/lib-module/ToggleSwitch/index.js +0 -3
  386. package/lib-module/Tooltip/Backdrop.js +0 -52
  387. package/lib-module/Tooltip/Backdrop.native.js +0 -43
  388. package/lib-module/Tooltip/Tooltip.js +0 -332
  389. package/lib-module/Tooltip/dictionary.js +0 -8
  390. package/lib-module/Tooltip/getTooltipPosition.js +0 -164
  391. package/lib-module/Tooltip/index.js +0 -2
  392. package/lib-module/TooltipButton/TooltipButton.js +0 -71
  393. package/lib-module/TooltipButton/index.js +0 -2
  394. package/lib-module/Typography/Typography.js +0 -120
  395. package/lib-module/Typography/index.js +0 -2
  396. package/lib-module/ViewportProvider/ViewportProvider.js +0 -28
  397. package/lib-module/ViewportProvider/index.js +0 -3
  398. package/lib-module/ViewportProvider/useViewport.js +0 -3
  399. package/lib-module/ViewportProvider/useViewportListener.js +0 -43
  400. package/lib-module/index.js +0 -48
  401. package/lib-module/utils/a11y/index.js +0 -2
  402. package/lib-module/utils/a11y/semantics.js +0 -154
  403. package/lib-module/utils/a11y/textSize.js +0 -34
  404. package/lib-module/utils/animation/index.js +0 -2
  405. package/lib-module/utils/animation/useVerticalExpandAnimation.js +0 -61
  406. package/lib-module/utils/children.js +0 -118
  407. package/lib-module/utils/containUniqueFields.js +0 -26
  408. package/lib-module/utils/index.js +0 -16
  409. package/lib-module/utils/info/index.js +0 -7
  410. package/lib-module/utils/info/platform/index.js +0 -11
  411. package/lib-module/utils/info/platform/platform.android.js +0 -1
  412. package/lib-module/utils/info/platform/platform.ios.js +0 -1
  413. package/lib-module/utils/info/platform/platform.js +0 -1
  414. package/lib-module/utils/info/platform/platform.native.js +0 -4
  415. package/lib-module/utils/info/versions.js +0 -5
  416. package/lib-module/utils/input.js +0 -180
  417. package/lib-module/utils/pressability.js +0 -97
  418. package/lib-module/utils/props/a11yProps.js +0 -140
  419. package/lib-module/utils/props/clickProps.js +0 -25
  420. package/lib-module/utils/props/componentPropType.js +0 -63
  421. package/lib-module/utils/props/copyPropTypes.js +0 -2
  422. package/lib-module/utils/props/getPropSelector.js +0 -6
  423. package/lib-module/utils/props/handlerProps.js +0 -59
  424. package/lib-module/utils/props/hrefAttrsProp.js +0 -30
  425. package/lib-module/utils/props/index.js +0 -19
  426. package/lib-module/utils/props/inputSupportsProps.js +0 -59
  427. package/lib-module/utils/props/linkProps.js +0 -43
  428. package/lib-module/utils/props/paddingProp.js +0 -9
  429. package/lib-module/utils/props/pressProps.js +0 -42
  430. package/lib-module/utils/props/rectProp.js +0 -9
  431. package/lib-module/utils/props/responsiveProps.js +0 -30
  432. package/lib-module/utils/props/selectSystemProps.js +0 -24
  433. package/lib-module/utils/props/spacingProps.js +0 -56
  434. package/lib-module/utils/props/textInputProps.js +0 -194
  435. package/lib-module/utils/props/textProps.js +0 -59
  436. package/lib-module/utils/props/tokens.js +0 -120
  437. package/lib-module/utils/props/variantProp.js +0 -18
  438. package/lib-module/utils/props/viewProps.js +0 -22
  439. package/lib-module/utils/ssr.js +0 -35
  440. package/lib-module/utils/useCopy.js +0 -42
  441. package/lib-module/utils/useHash.js +0 -44
  442. package/lib-module/utils/useHash.native.js +0 -7
  443. package/lib-module/utils/useResponsiveProp.js +0 -47
  444. package/lib-module/utils/useSpacingScale.js +0 -123
  445. package/lib-module/utils/useUniqueId.js +0 -12
  446. package/lib-module/utils/withLinkRouter.js +0 -82
  447. package/stories/A11yText/A11yText.stories.jsx +0 -71
  448. package/stories/ActivityIndicator/ActivityIndicator.stories.jsx +0 -22
  449. package/stories/Box/Box.stories.jsx +0 -143
  450. package/stories/Button/Button.stories.jsx +0 -72
  451. package/stories/Button/ButtonGroup.stories.jsx +0 -81
  452. package/stories/Button/ButtonLink.stories.jsx +0 -30
  453. package/stories/Card/Card.stories.jsx +0 -62
  454. package/stories/Checkbox/Checkbox.stories.jsx +0 -94
  455. package/stories/Divider/Divider.stories.jsx +0 -68
  456. package/stories/ExpandCollapse/ExpandCollapse.stories.jsx +0 -112
  457. package/stories/Feedback/Feedback.stories.jsx +0 -96
  458. package/stories/FlexGrid/01 FlexGrid.stories.jsx +0 -54
  459. package/stories/FlexGrid/02 Row.stories.jsx +0 -41
  460. package/stories/FlexGrid/03 Col.stories.jsx +0 -141
  461. package/stories/Icon/Icon.stories.jsx +0 -79
  462. package/stories/IconButton/IconButton.stories.jsx +0 -50
  463. package/stories/InputLabel/InputLabel.stories.jsx +0 -39
  464. package/stories/Link/ChevronLink.stories.jsx +0 -48
  465. package/stories/Link/Link.stories.jsx +0 -90
  466. package/stories/Link/TextButton.stories.jsx +0 -79
  467. package/stories/List/List.stories.jsx +0 -117
  468. package/stories/Modal/Modal.stories.jsx +0 -54
  469. package/stories/Notification/Notification.stories.jsx +0 -82
  470. package/stories/Pagination/Pagination.stories.jsx +0 -64
  471. package/stories/Progress/Progress.stories.jsx +0 -93
  472. package/stories/Radio/Radio.stories.jsx +0 -100
  473. package/stories/RadioCard/RadioCard.stories.jsx +0 -98
  474. package/stories/Search/Search.stories.jsx +0 -66
  475. package/stories/Select/Select.stories.jsx +0 -55
  476. package/stories/SideNav/SideNav.stories.jsx +0 -42
  477. package/stories/SideNav/SideNavItem.stories.jsx +0 -9
  478. package/stories/SideNav/SideNavItemsGroup.stories.jsx +0 -17
  479. package/stories/Skeleton/Skeleton.stories.jsx +0 -36
  480. package/stories/Spacer/Spacer.stories.jsx +0 -38
  481. package/stories/StackView/StackView.stories.jsx +0 -75
  482. package/stories/StackView/StackWrap.stories.jsx +0 -64
  483. package/stories/StepTracker/StepTracker.stories.jsx +0 -71
  484. package/stories/Tabs/Tabs.stories.jsx +0 -98
  485. package/stories/Tags/Tags.stories.jsx +0 -69
  486. package/stories/TextInput/TextArea.stories.jsx +0 -101
  487. package/stories/TextInput/TextInput.stories.jsx +0 -141
  488. package/stories/ToggleSwitch/ToggleSwitch.stories.jsx +0 -64
  489. package/stories/ToggleSwitch/ToggleSwitchGroup.stories.jsx +0 -81
  490. package/stories/Tooltip/Tooltip.stories.jsx +0 -81
  491. package/stories/TooltipButton/TooltipButton.stories.jsx +0 -11
  492. package/stories/Typography/Typography.stories.jsx +0 -49
  493. package/stories/platform-supports.jsx +0 -32
  494. package/stories/platform-supports.native.jsx +0 -3
  495. 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
- })