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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (429) hide show
  1. package/.ultra.cache.json +1 -0
  2. package/CHANGELOG.md +65 -0
  3. package/__fixtures__/Accessible.js +33 -0
  4. package/__fixtures__/Accessible.native.js +32 -0
  5. package/__fixtures__/testTheme.js +871 -52
  6. package/__tests__/ActivityIndicator/ActivityIndicator.test.jsx +1 -1
  7. package/__tests__/Button/ButtonBase.test.jsx +3 -32
  8. package/__tests__/Button/ButtonGroup.test.jsx +2 -2
  9. package/__tests__/Checkbox/Checkbox.test.jsx +94 -0
  10. package/__tests__/Checkbox/CheckboxGroup.test.jsx +247 -0
  11. package/__tests__/Icon/Icon.test.jsx +3 -3
  12. package/__tests__/IconButton/IconButton.test.jsx +52 -0
  13. package/__tests__/InputSupports/InputSupports.test.jsx +50 -0
  14. package/__tests__/List/List.test.jsx +60 -0
  15. package/__tests__/Modal/Modal.test.jsx +47 -0
  16. package/__tests__/Notification/Notification.test.jsx +20 -0
  17. package/__tests__/Pagination/Pagination.test.jsx +2 -2
  18. package/__tests__/Progress/Progress.test.jsx +79 -0
  19. package/__tests__/Radio/Radio.test.jsx +87 -0
  20. package/__tests__/Radio/RadioGroup.test.jsx +221 -0
  21. package/__tests__/RadioCard/RadioCard.test.jsx +87 -0
  22. package/__tests__/RadioCard/RadioCardGroup.test.jsx +247 -0
  23. package/__tests__/Search/Search.test.jsx +72 -0
  24. package/__tests__/Select/Select.test.jsx +93 -0
  25. package/__tests__/Skeleton/Skeleton.test.jsx +61 -0
  26. package/__tests__/StackView/StackView.test.jsx +0 -26
  27. package/__tests__/StepTracker/StepTracker.test.jsx +94 -0
  28. package/__tests__/Tabs/Tabs.test.jsx +200 -0
  29. package/__tests__/Tags/Tags.test.jsx +328 -0
  30. package/__tests__/TextInput/TextArea.test.jsx +34 -0
  31. package/__tests__/TextInput/{TextInput.test.jsx → TextInputBase.test.jsx} +20 -46
  32. package/__tests__/Tooltip/Tooltip.test.jsx +65 -0
  33. package/__tests__/Tooltip/getTooltipPosition.test.js +79 -0
  34. package/__tests__/utils/input.test.js +58 -0
  35. package/__tests__/utils/useCopy.test.js +42 -0
  36. package/__tests__/utils/useResponsiveProp.test.jsx +202 -0
  37. package/__tests__/utils/{spacing.test.jsx → useSpacingScale.test.jsx} +1 -1
  38. package/babel.config.js +20 -0
  39. package/jest.config.js +13 -4
  40. package/lib/A11yInfoProvider/index.js +54 -26
  41. package/lib/A11yText/index.js +37 -14
  42. package/lib/ActivityIndicator/Spinner.js +78 -0
  43. package/lib/ActivityIndicator/Spinner.native.js +121 -87
  44. package/lib/ActivityIndicator/index.js +28 -12
  45. package/lib/ActivityIndicator/shared.js +27 -12
  46. package/lib/BaseProvider/index.js +34 -11
  47. package/lib/Box/Box.js +54 -31
  48. package/lib/Box/index.js +13 -2
  49. package/lib/Button/Button.js +38 -10
  50. package/lib/Button/ButtonBase.js +115 -94
  51. package/lib/Button/ButtonGroup.js +94 -86
  52. package/lib/Button/ButtonLink.js +41 -13
  53. package/lib/Button/index.js +31 -4
  54. package/lib/Button/propTypes.js +32 -9
  55. package/lib/Card/Card.js +36 -41
  56. package/lib/Card/CardBase.js +78 -0
  57. package/lib/Card/PressableCardBase.js +137 -0
  58. package/lib/Card/index.js +40 -2
  59. package/lib/Checkbox/Checkbox.js +344 -0
  60. package/lib/Checkbox/CheckboxGroup.js +231 -0
  61. package/lib/Checkbox/CheckboxInput.js +74 -0
  62. package/lib/Checkbox/CheckboxInput.native.js +14 -0
  63. package/lib/Checkbox/index.js +21 -0
  64. package/lib/Divider/Divider.js +50 -24
  65. package/lib/Divider/index.js +13 -2
  66. package/lib/ExpandCollapse/Accordion.js +20 -7
  67. package/lib/ExpandCollapse/Control.js +50 -27
  68. package/lib/ExpandCollapse/ExpandCollapse.js +41 -24
  69. package/lib/ExpandCollapse/Panel.js +75 -37
  70. package/lib/ExpandCollapse/index.js +25 -7
  71. package/lib/Feedback/Feedback.js +85 -34
  72. package/lib/Feedback/index.js +13 -2
  73. package/lib/Fieldset/Fieldset.js +160 -0
  74. package/lib/Fieldset/FieldsetContainer.js +41 -0
  75. package/lib/Fieldset/FieldsetContainer.native.js +33 -0
  76. package/lib/Fieldset/Legend.js +33 -0
  77. package/lib/Fieldset/Legend.native.js +43 -0
  78. package/lib/Fieldset/cssReset.js +21 -0
  79. package/lib/Fieldset/index.js +13 -0
  80. package/lib/FlexGrid/Col/Col.js +67 -38
  81. package/lib/FlexGrid/Col/index.js +13 -2
  82. package/lib/FlexGrid/FlexGrid.js +70 -45
  83. package/lib/FlexGrid/Row/Row.js +48 -27
  84. package/lib/FlexGrid/Row/index.js +13 -2
  85. package/lib/FlexGrid/helpers/index.js +9 -1
  86. package/lib/FlexGrid/index.js +13 -2
  87. package/lib/FlexGrid/providers/GutterContext.js +15 -3
  88. package/lib/Icon/Icon.js +52 -47
  89. package/lib/Icon/IconText.js +100 -0
  90. package/lib/Icon/index.js +31 -3
  91. package/lib/IconButton/IconButton.js +135 -0
  92. package/lib/IconButton/index.js +13 -0
  93. package/lib/InputLabel/InputLabel.js +70 -34
  94. package/lib/InputLabel/LabelContent.js +31 -0
  95. package/lib/InputLabel/LabelContent.native.js +9 -1
  96. package/lib/InputLabel/index.js +13 -2
  97. package/lib/InputSupports/InputSupports.js +104 -0
  98. package/lib/InputSupports/index.js +13 -0
  99. package/lib/InputSupports/propTypes.js +66 -0
  100. package/lib/InputSupports/useInputSupports.js +41 -0
  101. package/lib/Link/ChevronLink.js +57 -15
  102. package/lib/Link/InlinePressable.js +50 -0
  103. package/lib/Link/InlinePressable.native.js +101 -0
  104. package/lib/Link/Link.js +30 -13
  105. package/lib/Link/LinkBase.js +114 -145
  106. package/lib/Link/TextButton.js +47 -17
  107. package/lib/Link/index.js +39 -4
  108. package/lib/List/List.js +80 -0
  109. package/lib/List/ListItem.js +237 -0
  110. package/lib/List/index.js +13 -0
  111. package/lib/Modal/Modal.js +226 -0
  112. package/lib/Modal/dictionary.js +16 -0
  113. package/lib/Modal/index.js +13 -0
  114. package/lib/Notification/Notification.js +200 -0
  115. package/lib/Notification/dictionary.js +15 -0
  116. package/lib/Notification/index.js +13 -0
  117. package/lib/Pagination/PageButton.js +45 -46
  118. package/lib/Pagination/Pagination.js +70 -40
  119. package/lib/Pagination/SideButton.js +74 -58
  120. package/lib/Pagination/dictionary.js +9 -2
  121. package/lib/Pagination/index.js +13 -2
  122. package/lib/Pagination/usePagination.js +12 -2
  123. package/lib/Progress/Progress.js +99 -0
  124. package/lib/Progress/ProgressBar.js +146 -0
  125. package/lib/Progress/ProgressBarBackground.js +57 -0
  126. package/lib/Progress/index.js +16 -0
  127. package/lib/Radio/Radio.js +292 -0
  128. package/lib/Radio/RadioButton.js +141 -0
  129. package/lib/Radio/RadioGroup.js +233 -0
  130. package/lib/Radio/RadioInput.js +76 -0
  131. package/lib/Radio/RadioInput.native.js +14 -0
  132. package/lib/Radio/index.js +21 -0
  133. package/lib/RadioCard/RadioCard.js +240 -0
  134. package/lib/RadioCard/RadioCardGroup.js +251 -0
  135. package/lib/RadioCard/index.js +21 -0
  136. package/lib/Search/Search.js +243 -0
  137. package/lib/Search/dictionary.js +19 -0
  138. package/lib/Search/index.js +13 -0
  139. package/lib/Select/Group.js +33 -0
  140. package/lib/Select/Group.native.js +25 -0
  141. package/lib/Select/Item.js +29 -0
  142. package/lib/Select/Item.native.js +19 -0
  143. package/lib/Select/Picker.js +79 -0
  144. package/lib/Select/Picker.native.js +115 -0
  145. package/lib/Select/Select.js +300 -0
  146. package/lib/Select/index.js +19 -0
  147. package/lib/SideNav/Item.js +54 -33
  148. package/lib/SideNav/ItemContent.js +41 -15
  149. package/lib/SideNav/ItemsGroup.js +46 -27
  150. package/lib/SideNav/SideNav.js +92 -69
  151. package/lib/SideNav/index.js +15 -1
  152. package/lib/Skeleton/Skeleton.js +137 -0
  153. package/lib/Skeleton/index.js +13 -0
  154. package/lib/Skeleton/skeleton.constant.js +12 -0
  155. package/lib/Skeleton/skeletonWebAnimation.js +27 -0
  156. package/lib/Skeleton/useSkeletonNativeAnimation.js +37 -0
  157. package/lib/Spacer/Spacer.js +31 -12
  158. package/lib/Spacer/index.js +13 -2
  159. package/lib/StackView/StackView.js +57 -33
  160. package/lib/StackView/StackWrap.js +33 -10
  161. package/lib/StackView/StackWrap.native.js +13 -2
  162. package/lib/StackView/StackWrapBox.js +50 -23
  163. package/lib/StackView/StackWrapGap.js +45 -19
  164. package/lib/StackView/common.js +19 -4
  165. package/lib/StackView/getStackedContent.js +49 -19
  166. package/lib/StackView/index.js +29 -5
  167. package/lib/StepTracker/Step.js +245 -0
  168. package/lib/StepTracker/StepTracker.js +197 -0
  169. package/lib/StepTracker/dictionary.js +17 -0
  170. package/lib/StepTracker/index.js +13 -0
  171. package/lib/Tabs/HorizontalScroll.js +199 -0
  172. package/lib/Tabs/ScrollViewEnd.js +66 -0
  173. package/lib/Tabs/ScrollViewEnd.native.js +41 -0
  174. package/lib/Tabs/Tabs.js +117 -0
  175. package/lib/Tabs/TabsItem.js +234 -0
  176. package/lib/Tabs/TabsScrollButton.js +121 -0
  177. package/lib/Tabs/dictionary.js +18 -0
  178. package/lib/Tabs/index.js +13 -0
  179. package/lib/Tabs/itemPositions.js +128 -0
  180. package/lib/Tags/Tags.js +250 -0
  181. package/lib/Tags/index.js +13 -0
  182. package/lib/TextInput/TextArea.js +109 -0
  183. package/lib/TextInput/TextInput.js +41 -303
  184. package/lib/TextInput/TextInputBase.js +252 -0
  185. package/lib/TextInput/index.js +23 -2
  186. package/lib/TextInput/propTypes.js +42 -0
  187. package/lib/ThemeProvider/ThemeProvider.js +38 -14
  188. package/lib/ThemeProvider/index.js +61 -6
  189. package/lib/ThemeProvider/useSetTheme.js +14 -5
  190. package/lib/ThemeProvider/useTheme.js +13 -4
  191. package/lib/ThemeProvider/useThemeTokens.js +86 -19
  192. package/lib/ThemeProvider/utils/index.js +31 -2
  193. package/lib/ThemeProvider/utils/styles.js +52 -16
  194. package/lib/ThemeProvider/utils/theme-tokens.js +94 -16
  195. package/lib/ToggleSwitch/ToggleSwitch.js +76 -52
  196. package/lib/ToggleSwitch/index.js +13 -2
  197. package/lib/Tooltip/Backdrop.js +56 -0
  198. package/lib/Tooltip/Backdrop.native.js +59 -0
  199. package/lib/Tooltip/Tooltip.js +357 -0
  200. package/lib/Tooltip/dictionary.js +15 -0
  201. package/lib/Tooltip/getTooltipPosition.js +172 -0
  202. package/lib/Tooltip/index.js +13 -0
  203. package/lib/TooltipButton/TooltipButton.js +83 -0
  204. package/lib/TooltipButton/index.js +13 -0
  205. package/lib/Typography/Typography.js +58 -43
  206. package/lib/Typography/index.js +13 -2
  207. package/lib/ViewportProvider/ViewportProvider.js +46 -0
  208. package/lib/ViewportProvider/index.js +22 -38
  209. package/lib/ViewportProvider/useViewport.js +15 -0
  210. package/lib/ViewportProvider/useViewportListener.js +57 -0
  211. package/lib/index.js +518 -24
  212. package/lib/utils/a11y/index.js +18 -0
  213. package/lib/utils/a11y/textSize.js +49 -0
  214. package/lib/utils/animation/index.js +15 -2
  215. package/lib/utils/animation/useVerticalExpandAnimation.js +28 -11
  216. package/lib/utils/children.js +87 -0
  217. package/lib/utils/index.js +163 -4
  218. package/lib/utils/info/index.js +19 -0
  219. package/lib/utils/info/platform/index.js +23 -0
  220. package/lib/utils/info/platform/platform.android.js +8 -0
  221. package/lib/utils/info/platform/platform.ios.js +8 -0
  222. package/lib/utils/info/platform/platform.js +8 -0
  223. package/lib/utils/info/platform/platform.native.js +11 -0
  224. package/lib/utils/info/versions.js +16 -0
  225. package/lib/utils/input.js +51 -33
  226. package/lib/utils/pressability.js +120 -0
  227. package/lib/utils/propTypes.js +269 -116
  228. package/lib/utils/useCopy.js +51 -0
  229. package/lib/utils/useHash.js +48 -0
  230. package/lib/utils/useHash.native.js +15 -0
  231. package/lib/utils/useResponsiveProp.js +59 -0
  232. package/lib/utils/{spacing/useSpacingScale.js → useSpacingScale.js} +45 -12
  233. package/lib/utils/useUniqueId.js +13 -4
  234. package/package.json +12 -9
  235. package/release-context.json +4 -4
  236. package/src/ActivityIndicator/{Spinner.web.jsx → Spinner.jsx} +0 -0
  237. package/src/Box/Box.jsx +11 -4
  238. package/src/Button/Button.jsx +9 -5
  239. package/src/Button/ButtonBase.jsx +69 -69
  240. package/src/Button/ButtonGroup.jsx +11 -24
  241. package/src/Button/ButtonLink.jsx +14 -4
  242. package/src/Button/propTypes.js +12 -2
  243. package/src/Card/Card.jsx +4 -30
  244. package/src/Card/CardBase.jsx +57 -0
  245. package/src/Card/PressableCardBase.jsx +112 -0
  246. package/src/Card/index.js +3 -0
  247. package/src/Checkbox/Checkbox.jsx +274 -0
  248. package/src/Checkbox/CheckboxGroup.jsx +196 -0
  249. package/src/Checkbox/CheckboxInput.jsx +55 -0
  250. package/src/Checkbox/CheckboxInput.native.jsx +6 -0
  251. package/src/Checkbox/index.js +5 -0
  252. package/src/ExpandCollapse/Control.jsx +1 -1
  253. package/src/Feedback/Feedback.jsx +31 -22
  254. package/src/Fieldset/Fieldset.jsx +129 -0
  255. package/src/Fieldset/FieldsetContainer.jsx +22 -0
  256. package/src/Fieldset/FieldsetContainer.native.jsx +16 -0
  257. package/src/Fieldset/Legend.jsx +16 -0
  258. package/src/Fieldset/Legend.native.jsx +22 -0
  259. package/src/Fieldset/cssReset.js +14 -0
  260. package/src/Fieldset/index.js +3 -0
  261. package/src/Icon/Icon.jsx +21 -26
  262. package/src/Icon/IconText.jsx +63 -0
  263. package/src/Icon/index.js +3 -2
  264. package/src/IconButton/IconButton.jsx +107 -0
  265. package/src/IconButton/index.js +3 -0
  266. package/src/InputLabel/InputLabel.jsx +11 -4
  267. package/src/InputLabel/{LabelContent.web.jsx → LabelContent.jsx} +0 -0
  268. package/src/InputSupports/InputSupports.jsx +75 -0
  269. package/src/InputSupports/index.js +3 -0
  270. package/src/InputSupports/propTypes.js +44 -0
  271. package/src/InputSupports/useInputSupports.js +30 -0
  272. package/src/Link/ChevronLink.jsx +28 -7
  273. package/src/Link/InlinePressable.jsx +37 -0
  274. package/src/Link/InlinePressable.native.jsx +73 -0
  275. package/src/Link/Link.jsx +17 -13
  276. package/src/Link/LinkBase.jsx +67 -148
  277. package/src/Link/TextButton.jsx +25 -11
  278. package/src/Link/index.js +2 -1
  279. package/src/List/List.jsx +47 -0
  280. package/src/List/ListItem.jsx +187 -0
  281. package/src/List/index.js +3 -0
  282. package/src/Modal/Modal.jsx +185 -0
  283. package/src/Modal/dictionary.js +9 -0
  284. package/src/Modal/index.js +3 -0
  285. package/src/Notification/Notification.jsx +149 -0
  286. package/src/Notification/dictionary.js +8 -0
  287. package/src/Notification/index.js +3 -0
  288. package/src/Pagination/PageButton.jsx +3 -17
  289. package/src/Pagination/SideButton.jsx +27 -38
  290. package/src/Progress/Progress.jsx +77 -0
  291. package/src/Progress/ProgressBar.jsx +110 -0
  292. package/src/Progress/ProgressBarBackground.jsx +34 -0
  293. package/src/Progress/index.js +6 -0
  294. package/src/Radio/Radio.jsx +233 -0
  295. package/src/Radio/RadioButton.jsx +131 -0
  296. package/src/Radio/RadioGroup.jsx +198 -0
  297. package/src/Radio/RadioInput.jsx +57 -0
  298. package/src/Radio/RadioInput.native.jsx +6 -0
  299. package/src/Radio/index.js +5 -0
  300. package/src/RadioCard/RadioCard.jsx +191 -0
  301. package/src/RadioCard/RadioCardGroup.jsx +211 -0
  302. package/src/RadioCard/index.js +5 -0
  303. package/src/Search/Search.jsx +204 -0
  304. package/src/Search/dictionary.js +12 -0
  305. package/src/Search/index.js +3 -0
  306. package/src/Select/Group.jsx +15 -0
  307. package/src/Select/Group.native.jsx +14 -0
  308. package/src/Select/Item.jsx +11 -0
  309. package/src/Select/Item.native.jsx +10 -0
  310. package/src/Select/Picker.jsx +67 -0
  311. package/src/Select/Picker.native.jsx +95 -0
  312. package/src/Select/Select.jsx +255 -0
  313. package/src/Select/index.js +8 -0
  314. package/src/SideNav/Item.jsx +2 -2
  315. package/src/Skeleton/Skeleton.jsx +98 -0
  316. package/src/Skeleton/index.js +3 -0
  317. package/src/Skeleton/skeleton.constant.js +3 -0
  318. package/src/Skeleton/skeletonWebAnimation.js +13 -0
  319. package/src/Skeleton/useSkeletonNativeAnimation.js +27 -0
  320. package/src/StackView/StackView.jsx +25 -17
  321. package/src/StackView/StackWrap.jsx +9 -1
  322. package/src/StackView/StackWrapBox.jsx +19 -7
  323. package/src/StackView/StackWrapGap.jsx +15 -5
  324. package/src/StackView/getStackedContent.jsx +8 -2
  325. package/src/StepTracker/Step.jsx +202 -0
  326. package/src/StepTracker/StepTracker.jsx +163 -0
  327. package/src/StepTracker/dictionary.js +10 -0
  328. package/src/StepTracker/index.js +3 -0
  329. package/src/Tabs/HorizontalScroll.jsx +165 -0
  330. package/src/Tabs/ScrollViewEnd.jsx +53 -0
  331. package/src/Tabs/ScrollViewEnd.native.jsx +24 -0
  332. package/src/Tabs/Tabs.jsx +89 -0
  333. package/src/Tabs/TabsItem.jsx +204 -0
  334. package/src/Tabs/TabsScrollButton.jsx +100 -0
  335. package/src/Tabs/dictionary.js +11 -0
  336. package/src/Tabs/index.js +3 -0
  337. package/src/Tabs/itemPositions.js +101 -0
  338. package/src/Tags/Tags.jsx +207 -0
  339. package/src/Tags/index.js +3 -0
  340. package/src/TextInput/TextArea.jsx +78 -0
  341. package/src/TextInput/TextInput.jsx +17 -290
  342. package/src/TextInput/TextInputBase.jsx +210 -0
  343. package/src/TextInput/index.js +2 -1
  344. package/src/TextInput/propTypes.js +29 -0
  345. package/src/ThemeProvider/useThemeTokens.js +56 -5
  346. package/src/ThemeProvider/utils/styles.js +18 -5
  347. package/src/ThemeProvider/utils/theme-tokens.js +46 -5
  348. package/src/ToggleSwitch/ToggleSwitch.jsx +3 -4
  349. package/src/Tooltip/Backdrop.jsx +60 -0
  350. package/src/Tooltip/Backdrop.native.jsx +33 -0
  351. package/src/Tooltip/Tooltip.jsx +294 -0
  352. package/src/Tooltip/dictionary.js +8 -0
  353. package/src/Tooltip/getTooltipPosition.js +161 -0
  354. package/src/Tooltip/index.js +3 -0
  355. package/src/TooltipButton/TooltipButton.jsx +49 -0
  356. package/src/TooltipButton/index.js +3 -0
  357. package/src/Typography/Typography.jsx +10 -20
  358. package/src/ViewportProvider/ViewportProvider.jsx +21 -0
  359. package/src/ViewportProvider/index.jsx +2 -41
  360. package/src/ViewportProvider/useViewport.js +5 -0
  361. package/src/ViewportProvider/useViewportListener.js +43 -0
  362. package/src/index.js +31 -3
  363. package/src/utils/a11y/index.js +1 -0
  364. package/src/utils/a11y/textSize.js +30 -0
  365. package/src/utils/children.jsx +66 -0
  366. package/src/utils/index.js +11 -1
  367. package/src/utils/info/index.js +8 -0
  368. package/src/utils/info/platform/index.js +11 -0
  369. package/src/utils/info/platform/platform.android.js +1 -0
  370. package/src/utils/info/platform/platform.ios.js +1 -0
  371. package/src/utils/info/platform/platform.js +1 -0
  372. package/src/utils/info/platform/platform.native.js +4 -0
  373. package/src/utils/info/versions.js +6 -0
  374. package/src/utils/input.js +20 -12
  375. package/src/utils/pressability.js +96 -0
  376. package/src/utils/propTypes.js +195 -56
  377. package/src/utils/useCopy.js +39 -0
  378. package/src/utils/useHash.js +34 -0
  379. package/src/utils/useHash.native.js +6 -0
  380. package/src/utils/useResponsiveProp.js +50 -0
  381. package/src/utils/{spacing/useSpacingScale.js → useSpacingScale.js} +25 -10
  382. package/stories/A11yText/A11yText.stories.jsx +4 -8
  383. package/stories/Button/Button.stories.jsx +5 -0
  384. package/stories/Card/Card.stories.jsx +1 -1
  385. package/stories/Checkbox/Checkbox.stories.jsx +94 -0
  386. package/stories/Feedback/Feedback.stories.jsx +5 -6
  387. package/stories/Icon/Icon.stories.jsx +27 -7
  388. package/stories/IconButton/IconButton.stories.jsx +50 -0
  389. package/stories/InputLabel/InputLabel.stories.jsx +8 -3
  390. package/stories/Link/ChevronLink.stories.jsx +3 -3
  391. package/stories/Link/Link.stories.jsx +28 -18
  392. package/stories/List/List.stories.jsx +117 -0
  393. package/stories/Modal/Modal.stories.jsx +29 -0
  394. package/stories/Notification/Notification.stories.jsx +82 -0
  395. package/stories/Progress/Progress.stories.jsx +93 -0
  396. package/stories/Radio/Radio.stories.jsx +100 -0
  397. package/stories/RadioCard/RadioCard.stories.jsx +98 -0
  398. package/stories/Search/Search.stories.jsx +16 -0
  399. package/stories/Select/Select.stories.jsx +55 -0
  400. package/stories/Skeleton/Skeleton.stories.jsx +36 -0
  401. package/stories/Spacer/Spacer.stories.jsx +7 -2
  402. package/stories/StackView/StackView.stories.jsx +10 -0
  403. package/stories/StackView/StackWrap.stories.jsx +12 -0
  404. package/stories/StepTracker/StepTracker.stories.jsx +71 -0
  405. package/stories/Tabs/Tabs.stories.jsx +97 -0
  406. package/stories/Tags/Tags.stories.jsx +69 -0
  407. package/stories/TextInput/TextArea.stories.jsx +100 -0
  408. package/stories/Tooltip/Tooltip.stories.jsx +81 -0
  409. package/stories/TooltipButton/TooltipButton.stories.jsx +11 -0
  410. package/stories/{platform-supports.web.jsx → platform-supports.jsx} +0 -0
  411. package/stories/supports.jsx +36 -2
  412. package/__fixtures__/accessible.icon.svg +0 -6
  413. package/babel.config.json +0 -8
  414. package/docs/Contributing.stories.mdx +0 -9
  415. package/docs/Fonts.stories.mdx +0 -104
  416. package/docs/Icons.stories.mdx +0 -144
  417. package/docs/Introduction.stories.mdx +0 -9
  418. package/lib/ActivityIndicator/Spinner.web.js +0 -55
  419. package/lib/InputLabel/LabelContent.web.js +0 -17
  420. package/lib/Pagination/useCopy.js +0 -10
  421. package/lib/config/svgr-icons-web.js +0 -9
  422. package/lib/config/svgr-icons.js +0 -52
  423. package/lib/utils/spacing/index.js +0 -2
  424. package/lib/utils/spacing/utils.js +0 -32
  425. package/src/Pagination/useCopy.js +0 -7
  426. package/src/config/svgr-icons-web.js +0 -11
  427. package/src/config/svgr-icons.js +0 -46
  428. package/src/utils/spacing/index.js +0 -3
  429. package/src/utils/spacing/utils.js +0 -28
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _default = {
8
+ en: {
9
+ a11yText: 'Reveal additional information.'
10
+ },
11
+ fr: {
12
+ a11yText: 'Afficher des renseignements supplémentaires.'
13
+ }
14
+ };
15
+ exports.default = _default;
@@ -0,0 +1,172 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ function normalizePosition(position) {
9
+ const {
10
+ left,
11
+ right,
12
+ bottom,
13
+ top,
14
+ width,
15
+ ...rest
16
+ } = position; // adjust the coordinates so that it fits within the window
17
+
18
+ const normalized = {
19
+ left: Math.max(0, left),
20
+ right: Math.max(0, right),
21
+ top: Math.max(0, top),
22
+ bottom // since it's ok the make the document grow downwards - no need to normalize here
23
+
24
+ };
25
+
26
+ const getAbsoluteDiff = (value1, value2) => Math.abs(Math.abs(value1) - Math.abs(value2)); // adjust the width by whatever has been subtracted from left or right
27
+
28
+
29
+ normalized.width = width - Math.abs(getAbsoluteDiff(left, normalized.left) - getAbsoluteDiff(right, normalized.right));
30
+
31
+ if (normalized.top !== top) {
32
+ normalized.bottom += normalized.top - top;
33
+ }
34
+
35
+ const isNormalized = normalized.right !== right || normalized.left !== left || normalized.top !== top;
36
+ return { ...normalized,
37
+ ...rest,
38
+ isNormalized
39
+ };
40
+ }
41
+
42
+ function invertPosition(position) {
43
+ switch (position) {
44
+ case 'above':
45
+ return 'below';
46
+
47
+ case 'below':
48
+ return 'above';
49
+
50
+ case 'left':
51
+ return 'right';
52
+
53
+ default:
54
+ return 'left';
55
+ }
56
+ }
57
+
58
+ function findRectByPosition(position, rectsArray) {
59
+ return rectsArray.find(({
60
+ position: rectPosition
61
+ }) => rectPosition === position);
62
+ }
63
+ /**
64
+ * Used for absolute positioning of the tooltip. Since the tooltip is always centered relatively
65
+ * to the control (button) and we have a limited set of positions, an easy and consistent way
66
+ * of positioning it is to check all of the possible positions and pick one that will be rendered
67
+ * within the window bounds. This way we can also rely on the tooltip being actually rendered
68
+ * before it is shown, which makes it account for the width being limiting in styles, custom font
69
+ * rendering, etc.
70
+ */
71
+
72
+
73
+ function getTooltipPosition(position, {
74
+ controlLayout,
75
+ tooltipDimensions,
76
+ windowDimensions,
77
+ arrowWidth = 0,
78
+ arrowOffset = 0
79
+ }) {
80
+ const {
81
+ width: controlWidth,
82
+ height: controlHeight,
83
+ x: controlX,
84
+ y: controlY
85
+ } = controlLayout;
86
+ const {
87
+ width: tooltipWidth,
88
+ height: tooltipHeight
89
+ } = tooltipDimensions;
90
+ const {
91
+ width: windowWidth,
92
+ height: windowHeight
93
+ } = windowDimensions;
94
+ const arrowSize = arrowWidth / 2 + arrowOffset;
95
+ const horizontalBounds = {
96
+ left: controlX + controlWidth / 2 - tooltipWidth / 2,
97
+ right: windowWidth - (controlX + controlWidth / 2 + tooltipWidth / 2)
98
+ };
99
+ const verticalBounds = {
100
+ top: controlY + controlHeight / 2 - tooltipHeight / 2,
101
+ bottom: windowHeight - (controlY + controlHeight / 2 + tooltipHeight / 2)
102
+ }; // calculate absolute coordinates for each of the potential positions (relative to window)
103
+
104
+ const boundingRects = [{
105
+ position: 'above',
106
+ ...horizontalBounds,
107
+ top: controlY - tooltipHeight - arrowSize,
108
+ bottom: windowHeight - (controlY - arrowSize)
109
+ }, {
110
+ position: 'right',
111
+ ...verticalBounds,
112
+ left: controlX + controlWidth + arrowSize,
113
+ right: windowWidth - (controlX + controlWidth + tooltipWidth + arrowSize)
114
+ }, {
115
+ position: 'below',
116
+ ...horizontalBounds,
117
+ top: controlY + controlHeight + arrowSize,
118
+ bottom: windowHeight - (controlY + controlHeight + tooltipHeight + arrowSize)
119
+ }, {
120
+ position: 'left',
121
+ ...verticalBounds,
122
+ left: controlX - tooltipWidth - arrowSize,
123
+ right: windowWidth - (controlX - arrowSize)
124
+ }].map(rect => {
125
+ // an absolute value representing how much of the tooltip is overflowing the window on each side
126
+ const windowOverflow = Math.abs(Math.min(rect.top, 0) - Math.min(rect.left, 0) - Math.min(rect.right, 0) - Math.min(rect.bottom, 0));
127
+ return { ...rect,
128
+ ...tooltipDimensions,
129
+ overflow: windowOverflow,
130
+ isNormalized: false
131
+ };
132
+ }); // the 'position' prop overrides the automatic positioning
133
+
134
+ if (position !== 'auto') {
135
+ let rect = findRectByPosition(position, boundingRects); // check if the suggested 'position' fits in window
136
+
137
+ if (rect.overflow === 0) {
138
+ return rect;
139
+ } // otherwise try the inverted position (e.g. left -> right)
140
+
141
+
142
+ rect = findRectByPosition(invertPosition(position), boundingRects);
143
+
144
+ if (rect.overflow === 0) {
145
+ return rect;
146
+ }
147
+ }
148
+
149
+ const inWindow = boundingRects.filter(({
150
+ overflow
151
+ }) => overflow === 0); // pick the first position that fits in window
152
+ // (these are sorted clockwise which makes them show where one would expect them to be)
153
+
154
+ if (inWindow.length > 0) {
155
+ return inWindow[0];
156
+ } // if all positions would end up being out of window bounds, let's pick the one that is
157
+ // the least overflowing and normalize its position to fit within window bounds
158
+
159
+
160
+ boundingRects.sort(({
161
+ overflow: overflowA
162
+ }, {
163
+ overflow: overflowB
164
+ }) => overflowA - overflowB);
165
+ const leastOverflowing = boundingRects[0]; // prefer 'below' over 'above', since we can always expand the document downwards,
166
+ // and 'above' might cause issues on small viewports with large tooltips
167
+
168
+ return normalizePosition(leastOverflowing.position === 'above' ? findRectByPosition('below', boundingRects) : leastOverflowing);
169
+ }
170
+
171
+ var _default = getTooltipPosition;
172
+ exports.default = _default;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _Tooltip = _interopRequireDefault(require("./Tooltip"));
9
+
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+
12
+ var _default = _Tooltip.default;
13
+ exports.default = _default;
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _react = _interopRequireDefault(require("react"));
9
+
10
+ var _View = _interopRequireDefault(require("react-native-web/dist/cjs/exports/View"));
11
+
12
+ var _propTypes = _interopRequireDefault(require("prop-types"));
13
+
14
+ var _ThemeProvider = require("../ThemeProvider");
15
+
16
+ var _utils = require("../utils");
17
+
18
+ var _Icon = _interopRequireDefault(require("../Icon"));
19
+
20
+ var _jsxRuntime = require("react/jsx-runtime");
21
+
22
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
+
24
+ const selectInnerContainerStyles = ({
25
+ borderRadius,
26
+ width
27
+ }) => ({
28
+ borderRadius,
29
+ width
30
+ });
31
+
32
+ const selectIconTokens = ({
33
+ iconSize,
34
+ iconColor
35
+ /* iconScale = 1 */
36
+
37
+ }) => ({
38
+ size: iconSize,
39
+ color: iconColor // scale: iconScale TODO re-enable with icon component
40
+
41
+ });
42
+ /**
43
+ * `TooltipButton` is a helper component used as a default control for the `Tooltip` component.
44
+ * In fact though, it isn't actually a pressable - it's meant to be used as pressable's content.
45
+ * Due to this any interaction states (e.g. pressed, hover, etc.) has to be passed down to it as a prop.
46
+ */
47
+
48
+
49
+ const TooltipButton = ({
50
+ pressableState,
51
+ tokens,
52
+ variant
53
+ }) => {
54
+ const themeTokens = (0, _ThemeProvider.useThemeTokens)('TooltipButton', tokens, variant, pressableState);
55
+ const {
56
+ icon: IconComponent
57
+ } = themeTokens;
58
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
59
+ style: (0, _ThemeProvider.applyOuterBorder)(themeTokens),
60
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
61
+ style: selectInnerContainerStyles(themeTokens),
62
+ children: IconComponent && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Icon.default, {
63
+ icon: IconComponent,
64
+ tokens: selectIconTokens(themeTokens)
65
+ })
66
+ })
67
+ });
68
+ };
69
+
70
+ TooltipButton.propTypes = {
71
+ /**
72
+ * Used as appearances when resolving theme tokens.
73
+ */
74
+ pressableState: _propTypes.default.shape({
75
+ pressed: _propTypes.default.bool,
76
+ hover: _propTypes.default.bool,
77
+ focus: _propTypes.default.bool
78
+ }),
79
+ tokens: (0, _utils.getTokensPropType)('TooltipButton'),
80
+ variant: _utils.variantProp.propType
81
+ };
82
+ var _default = TooltipButton;
83
+ exports.default = _default;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _TooltipButton = _interopRequireDefault(require("./TooltipButton"));
9
+
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+
12
+ var _default = _TooltipButton.default;
13
+ exports.default = _default;
@@ -1,34 +1,38 @@
1
- import React from 'react';
2
- import PropTypes from 'prop-types';
3
- import { Platform, Text, View } from 'react-native';
4
- import { useThemeTokens } from '../ThemeProvider';
5
- import { useViewport } from '../ViewportProvider';
6
- import { applyTextStyles } from '../ThemeProvider/utils';
7
- import { a11yProps, variantProp, getTokensPropType } from '../utils/propTypes';
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _react = _interopRequireDefault(require("react"));
9
+
10
+ var _propTypes = _interopRequireDefault(require("prop-types"));
11
+
12
+ var _Text = _interopRequireDefault(require("react-native-web/dist/cjs/exports/Text"));
13
+
14
+ var _View = _interopRequireDefault(require("react-native-web/dist/cjs/exports/View"));
15
+
16
+ var _ThemeProvider = require("../ThemeProvider");
17
+
18
+ var _ViewportProvider = require("../ViewportProvider");
19
+
20
+ var _utils = require("../ThemeProvider/utils");
21
+
22
+ var _utils2 = require("../utils");
23
+
24
+ var _jsxRuntime = require("react/jsx-runtime");
25
+
26
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
27
+
8
28
  /**
9
29
  * If passed a string like 'h1', 'h2' etc, returns the heading number as a string,
10
30
  * else returns false
11
31
  */
12
-
13
32
  function getHeadingLevel(heading) {
14
33
  const match = typeof heading === 'string' && heading.match(/^h(\d)$/);
15
34
  return match && match[1];
16
35
  }
17
- /**
18
- * Enforces `fontScaleCap` theme tokens as the maximum font size text can become
19
- * after iOS or Android font scaling, to give consistent accessible maximum sizes
20
- * that don't make the content unusable
21
- */
22
-
23
-
24
- function getMaxFontMultiplier({
25
- fontSize,
26
- fontScaleCap
27
- }) {
28
- if (!fontScaleCap || !fontSize) return undefined;
29
- if (fontScaleCap <= fontSize) return 1;
30
- return fontScaleCap / fontSize;
31
- }
32
36
 
33
37
  const selectTextStyles = ({
34
38
  fontWeight,
@@ -37,15 +41,17 @@ const selectTextStyles = ({
37
41
  lineHeight,
38
42
  fontName,
39
43
  textAlign,
40
- textTransform
41
- }) => applyTextStyles({
44
+ textTransform,
45
+ letterSpacing
46
+ }) => (0, _utils.applyTextStyles)({
42
47
  fontWeight,
43
48
  fontSize,
44
49
  color,
45
50
  lineHeight,
46
51
  fontName,
47
52
  textAlign,
48
- textTransform
53
+ textTransform,
54
+ letterSpacing
49
55
  }); // General-purpose flexible theme-neutral base component for text
50
56
 
51
57
 
@@ -59,49 +65,58 @@ const Typography = ({
59
65
  tokens,
60
66
  ...rest
61
67
  }) => {
62
- const viewport = useViewport();
63
- const themeTokens = useThemeTokens('Typography', tokens, variant, {
68
+ const viewport = (0, _ViewportProvider.useViewport)();
69
+ const themeTokens = (0, _ThemeProvider.useThemeTokens)('Typography', tokens, variant, {
64
70
  viewport
65
71
  });
66
72
  const textProps = {
67
73
  style: selectTextStyles(align ? { ...themeTokens,
68
74
  textAlign: align
69
- } : themeTokens)
75
+ } : themeTokens),
76
+ maxFontSizeMultiplier: (0, _utils2.getMaxFontMultiplier)(themeTokens)
70
77
  };
71
- if (Platform.OS !== 'web') textProps.maxFontSizeMultiplier = getMaxFontMultiplier(themeTokens);
72
78
  const headingLevel = getHeadingLevel(heading);
73
- const a11y = { ...a11yProps.select(rest),
79
+ const a11y = { ..._utils2.a11yProps.select(rest),
74
80
  accessibilityRole,
75
- // On React Native Web, `aria-level` controls which heading tag (h1, h2 etc) is used.
76
- // Must be hyphenated, not camel case; `accessibilityLevel` only works on RNW >=0.15.1
77
- [headingLevel && 'aria-level']: headingLevel
81
+ // On React Native Web, `accessibilityLevel` controls which heading tag (h1, h2 etc) is used.
82
+ ...(headingLevel && {
83
+ accessibilityLevel: headingLevel
84
+ })
78
85
  };
79
- return block ? /*#__PURE__*/React.createElement(View, a11y, /*#__PURE__*/React.createElement(Text, textProps, children)) : /*#__PURE__*/React.createElement(Text, Object.assign({}, textProps, a11y), children);
86
+ return block ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, { ...a11y,
87
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Text.default, { ...textProps,
88
+ children: children
89
+ })
90
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_Text.default, { ...textProps,
91
+ ...a11y,
92
+ children: children
93
+ });
80
94
  };
81
95
 
82
- Typography.propTypes = { ...a11yProps.types,
83
- tokens: getTokensPropType('Typography'),
84
- variant: variantProp.propType,
96
+ Typography.propTypes = { ..._utils2.a11yProps.types,
97
+ tokens: (0, _utils2.getTokensPropType)('Typography'),
98
+ variant: _utils2.variantProp.propType,
85
99
 
86
100
  /**
87
101
  * If truthy, will render a heading; if a html heading tag is provided, uses that tag on Web
88
102
  */
89
- heading: PropTypes.oneOf([true, 'h1', 'h2', 'h3', 'h4', 'h5', 'h6']),
103
+ heading: _propTypes.default.oneOf([true, 'h1', 'h2', 'h3', 'h4', 'h5', 'h6']),
90
104
 
91
105
  /**
92
106
  * If true, forces the element to behave as a View block even if nested in other text
93
107
  */
94
- block: PropTypes.bool,
108
+ block: _propTypes.default.bool,
95
109
 
96
110
  /**
97
111
  * Works the same as css text-align, note that RN doesn't support "start" or "end" (see https://reactnative.dev/docs/text-style-props#textalign)
98
112
  * Justify is known to make text harder to read, especially for people with dyslexia (see https://developer.mozilla.org/en-US/docs/Web/CSS/text-align#accessibility_concerns)
99
113
  */
100
- align: PropTypes.oneOf(['auto', 'left', 'right', 'center', 'justify']),
114
+ align: _propTypes.default.oneOf(['auto', 'left', 'right', 'center', 'justify']),
101
115
 
102
116
  /**
103
117
  * Same children allowed as a React Native <Text> node
104
118
  */
105
- children: PropTypes.node
119
+ children: _propTypes.default.node
106
120
  };
107
- export default Typography;
121
+ var _default = Typography;
122
+ exports.default = _default;
@@ -1,2 +1,13 @@
1
- import Typography from './Typography';
2
- export default Typography;
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _Typography = _interopRequireDefault(require("./Typography"));
9
+
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+
12
+ var _default = _Typography.default;
13
+ exports.default = _default;
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _react = _interopRequireWildcard(require("react"));
9
+
10
+ var _propTypes = _interopRequireDefault(require("prop-types"));
11
+
12
+ var _systemConstants = require("@telus-uds/system-constants");
13
+
14
+ var _useViewport = require("./useViewport");
15
+
16
+ var _useViewportListener = _interopRequireDefault(require("./useViewportListener"));
17
+
18
+ var _jsxRuntime = require("react/jsx-runtime");
19
+
20
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
+
22
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
23
+
24
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
25
+
26
+ /**
27
+ * Provides an up-to-date viewport value from system-constants, available via the `useViewport` hook
28
+ */
29
+ const ViewportProvider = ({
30
+ children
31
+ }) => {
32
+ // Default to the smallest viewport for mobile-first SSR. On client side, this is updated
33
+ // by useViewportListener in a layout effect before anything is shown to the user.
34
+ const [viewport, setViewport] = (0, _react.useState)(_systemConstants.viewports.keys[0]);
35
+ (0, _useViewportListener.default)(setViewport);
36
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_useViewport.ViewportContext.Provider, {
37
+ value: viewport,
38
+ children: children
39
+ });
40
+ };
41
+
42
+ ViewportProvider.propTypes = {
43
+ children: _propTypes.default.node.isRequired
44
+ };
45
+ var _default = ViewportProvider;
46
+ exports.default = _default;
@@ -1,44 +1,28 @@
1
- import React, { createContext, useState, useEffect, useContext } from 'react';
2
- import PropTypes from 'prop-types';
3
- import { Dimensions } from 'react-native';
4
- import { viewports } from '@telus-uds/system-constants'; // we are using Dimensions instead of useWindowDimensions
5
- // that's because useWindowDimensions forces context to update on
6
- // every pixel change on the browser, therefore we used Dimension to only enforce
7
- // context update on viewport changes
1
+ "use strict";
8
2
 
9
- const lookupViewport = () => viewports.select(Dimensions.get('window').width);
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _exportNames = {};
7
+ exports.default = void 0;
10
8
 
11
- export const ViewportContext = /*#__PURE__*/createContext({});
12
- /**
13
- * Provides an up-to-date viewport value from system-constants, available via the `useViewport` hook
14
- */
9
+ var _ViewportProvider = _interopRequireDefault(require("./ViewportProvider"));
15
10
 
16
- const ViewportProvider = ({
17
- children
18
- }) => {
19
- // initialize with a function so we don't re-execute on each render
20
- const [viewport, setViewport] = useState(lookupViewport);
21
- useEffect(() => {
22
- const onChange = ({
23
- window
24
- }) => setViewport(viewports.select(window.width));
11
+ var _useViewport = require("./useViewport");
25
12
 
26
- Dimensions.addEventListener('change', onChange); // We might have missed an update between calling `get` in render and
27
- // `addEventListener` in this handler, so we set it here. If there was
28
- // no change, React will filter out this update as a no-op.
13
+ Object.keys(_useViewport).forEach(function (key) {
14
+ if (key === "default" || key === "__esModule") return;
15
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
16
+ if (key in exports && exports[key] === _useViewport[key]) return;
17
+ Object.defineProperty(exports, key, {
18
+ enumerable: true,
19
+ get: function () {
20
+ return _useViewport[key];
21
+ }
22
+ });
23
+ });
29
24
 
30
- setViewport(lookupViewport());
31
- return () => {
32
- Dimensions.removeEventListener('change', onChange);
33
- };
34
- }, []);
35
- return /*#__PURE__*/React.createElement(ViewportContext.Provider, {
36
- value: viewport
37
- }, children);
38
- };
25
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
39
26
 
40
- ViewportProvider.propTypes = {
41
- children: PropTypes.node.isRequired
42
- };
43
- export default ViewportProvider;
44
- export const useViewport = () => useContext(ViewportContext);
27
+ var _default = _ViewportProvider.default;
28
+ exports.default = _default;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useViewport = exports.ViewportContext = void 0;
7
+
8
+ var _react = require("react");
9
+
10
+ const ViewportContext = /*#__PURE__*/(0, _react.createContext)({});
11
+ exports.ViewportContext = ViewportContext;
12
+
13
+ const useViewport = () => (0, _react.useContext)(ViewportContext);
14
+
15
+ exports.useViewport = useViewport;
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _react = require("react");
9
+
10
+ var _Dimensions = _interopRequireDefault(require("react-native-web/dist/cjs/exports/Dimensions"));
11
+
12
+ var _systemConstants = require("@telus-uds/system-constants");
13
+
14
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
+
16
+ // Use Dimensions instead of useWindowDimensions because useWindowDimensions forces context
17
+ // to update on every pixel change during window resize; but we only want rerenders to occur
18
+ // when a viewport threshold has been crossed.
19
+ const lookupViewport = () => _systemConstants.viewports.select(_Dimensions.default.get('window').width);
20
+ /**
21
+ * In SSR, React gets spooked if it sees `useLayoutEffect` and fires warnings assuming the
22
+ * developer doesn't realise the effect won't run: https://reactjs.org/link/uselayouteffect-ssr
23
+ *
24
+ * To avoid these warnings while still conforming to the rules of hooks, always use this
25
+ * explicitly no-op hook, instead of the useLayoutEffect that is implicitly no-op on SSR.
26
+ */
27
+
28
+
29
+ const useViewportListenerSSR = () => {};
30
+ /**
31
+ * When client-side rendering, immediately set the viewport to the correct value as a layout effect so
32
+ * if the viewport isn't the smallest, any SSR-rendered components rerender correctly before anything
33
+ * is shown to the user. Then bind events to update the viewport if it changes.
34
+ */
35
+
36
+
37
+ const useViewportListenerCSR = setViewport => {
38
+ (0, _react.useLayoutEffect)(() => {
39
+ setViewport(lookupViewport());
40
+
41
+ const onChange = ({
42
+ window
43
+ }) => setViewport(_systemConstants.viewports.select(window.width));
44
+
45
+ const listener = _Dimensions.default.addEventListener('change', onChange); // From RN 0.65.0, Dimensions.removeEventListener is deprecated for `remove` on addEventListener return value;
46
+ // however, that is not available in RN <=0.64.X, therefore not in any Expo release as of 2021 (Expo SDK 43).
47
+
48
+
49
+ return (listener === null || listener === void 0 ? void 0 : listener.remove) || (() => _Dimensions.default.removeEventListener('change', onChange)); // setViewport is a function from `useState` so it is stable and won't make the effect re-run
50
+ }, [setViewport]);
51
+ }; // Window is a defined global object in both Web and Native client-side, and undefined in SSR
52
+
53
+
54
+ const isSSR = typeof window === 'undefined';
55
+ const useViewportListener = isSSR ? useViewportListenerSSR : useViewportListenerCSR;
56
+ var _default = useViewportListener;
57
+ exports.default = _default;