@telus-uds/components-base 0.0.2-prerelease.6 → 1.0.0

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 (458) hide show
  1. package/.eslintrc.js +9 -0
  2. package/.ultra.cache.json +1 -1
  3. package/CHANGELOG.md +85 -0
  4. package/README.md +4 -2
  5. package/__fixtures__/Accessible.js +33 -0
  6. package/__fixtures__/Accessible.native.js +32 -0
  7. package/__fixtures__/test-utils.js +25 -0
  8. package/__fixtures__/testTheme.js +851 -57
  9. package/__tests__/ActivityIndicator/ActivityIndicator.test.jsx +1 -1
  10. package/__tests__/Button/ButtonBase.test.jsx +2 -31
  11. package/__tests__/Button/ButtonGroup.test.jsx +6 -7
  12. package/__tests__/Checkbox/Checkbox.test.jsx +94 -0
  13. package/__tests__/Checkbox/CheckboxGroup.test.jsx +246 -0
  14. package/__tests__/ExpandCollapse/ExpandCollapse.test.jsx +2 -2
  15. package/__tests__/HorizontalScroll/HorizontalScroll.test.jsx +164 -0
  16. package/__tests__/Icon/Icon.test.jsx +3 -3
  17. package/__tests__/IconButton/IconButton.test.jsx +52 -0
  18. package/__tests__/InputSupports/InputSupports.test.jsx +50 -0
  19. package/__tests__/Link/LinkBase.test.jsx +0 -14
  20. package/__tests__/List/List.test.jsx +60 -0
  21. package/__tests__/Modal/Modal.test.jsx +47 -0
  22. package/__tests__/Notification/Notification.test.jsx +20 -0
  23. package/__tests__/Pagination/Pagination.test.jsx +2 -2
  24. package/__tests__/Progress/Progress.test.jsx +79 -0
  25. package/__tests__/Radio/Radio.test.jsx +87 -0
  26. package/__tests__/Radio/RadioGroup.test.jsx +220 -0
  27. package/__tests__/RadioCard/RadioCard.test.jsx +87 -0
  28. package/__tests__/RadioCard/RadioCardGroup.test.jsx +246 -0
  29. package/__tests__/Search/Search.test.jsx +73 -0
  30. package/__tests__/Select/Select.test.jsx +94 -0
  31. package/__tests__/Skeleton/Skeleton.test.jsx +61 -0
  32. package/__tests__/StepTracker/StepTracker.test.jsx +94 -0
  33. package/__tests__/Tabs/Tabs.test.jsx +40 -0
  34. package/__tests__/Tags/Tags.test.jsx +327 -0
  35. package/__tests__/TextInput/TextArea.test.jsx +35 -0
  36. package/__tests__/TextInput/{TextInput.test.jsx → TextInputBase.test.jsx} +29 -50
  37. package/__tests__/ThemeProvider/ThemeProvider.test.jsx +77 -0
  38. package/__tests__/ThemeProvider/useThemeTokens.test.jsx +9 -5
  39. package/__tests__/ThemeProvider/utils/theme-tokens.test.js +41 -0
  40. package/__tests__/ToggleSwitch/ToggleSwitch.test.jsx +3 -2
  41. package/__tests__/utils/children.test.jsx +128 -0
  42. package/__tests__/utils/input.test.js +59 -1
  43. package/__tests__/utils/semantics.test.jsx +43 -0
  44. package/__tests__/utils/useCopy.test.js +14 -3
  45. package/babel.config.js +20 -0
  46. package/jest.config.js +8 -3
  47. package/lib/A11yInfoProvider/index.js +54 -26
  48. package/lib/A11yText/index.js +45 -17
  49. package/lib/ActivityIndicator/Spinner.js +81 -0
  50. package/lib/ActivityIndicator/Spinner.native.js +129 -91
  51. package/lib/ActivityIndicator/index.js +28 -12
  52. package/lib/ActivityIndicator/shared.js +27 -12
  53. package/lib/BaseProvider/index.js +34 -11
  54. package/lib/Box/Box.js +152 -35
  55. package/lib/Box/index.js +13 -2
  56. package/lib/Button/Button.js +41 -12
  57. package/lib/Button/ButtonBase.js +125 -97
  58. package/lib/Button/ButtonGroup.js +112 -89
  59. package/lib/Button/ButtonLink.js +48 -17
  60. package/lib/Button/index.js +31 -4
  61. package/lib/Button/propTypes.js +32 -9
  62. package/lib/Card/Card.js +38 -41
  63. package/lib/Card/CardBase.js +85 -0
  64. package/lib/Card/PressableCardBase.js +141 -0
  65. package/lib/Card/index.js +40 -2
  66. package/lib/Checkbox/Checkbox.js +355 -0
  67. package/lib/Checkbox/CheckboxGroup.js +241 -0
  68. package/lib/Checkbox/CheckboxInput.js +74 -0
  69. package/lib/Checkbox/CheckboxInput.native.js +14 -0
  70. package/lib/Checkbox/index.js +21 -0
  71. package/lib/Divider/Divider.js +59 -28
  72. package/lib/Divider/index.js +13 -2
  73. package/lib/ExpandCollapse/Accordion.js +26 -7
  74. package/lib/ExpandCollapse/Control.js +60 -31
  75. package/lib/ExpandCollapse/ExpandCollapse.js +50 -28
  76. package/lib/ExpandCollapse/Panel.js +83 -44
  77. package/lib/ExpandCollapse/index.js +25 -7
  78. package/lib/Feedback/Feedback.js +90 -39
  79. package/lib/Feedback/index.js +13 -2
  80. package/lib/Fieldset/Fieldset.js +165 -0
  81. package/lib/Fieldset/FieldsetContainer.js +46 -0
  82. package/lib/Fieldset/FieldsetContainer.native.js +38 -0
  83. package/lib/Fieldset/Legend.js +38 -0
  84. package/lib/Fieldset/Legend.native.js +48 -0
  85. package/lib/Fieldset/cssReset.js +21 -0
  86. package/lib/Fieldset/index.js +13 -0
  87. package/lib/FlexGrid/Col/Col.js +73 -41
  88. package/lib/FlexGrid/Col/index.js +13 -2
  89. package/lib/FlexGrid/FlexGrid.js +99 -49
  90. package/lib/FlexGrid/Row/Row.js +58 -30
  91. package/lib/FlexGrid/Row/index.js +13 -2
  92. package/lib/FlexGrid/helpers/index.js +9 -1
  93. package/lib/FlexGrid/index.js +13 -2
  94. package/lib/FlexGrid/providers/GutterContext.js +15 -3
  95. package/lib/HorizontalScroll/HorizontalScroll.js +200 -0
  96. package/lib/HorizontalScroll/HorizontalScrollButton.js +127 -0
  97. package/lib/HorizontalScroll/ScrollViewEnd.js +66 -0
  98. package/lib/HorizontalScroll/ScrollViewEnd.native.js +41 -0
  99. package/lib/HorizontalScroll/dictionary.js +18 -0
  100. package/lib/HorizontalScroll/index.js +35 -0
  101. package/lib/HorizontalScroll/itemPositions.js +128 -0
  102. package/lib/Icon/Icon.js +62 -50
  103. package/lib/Icon/IconText.js +101 -0
  104. package/lib/Icon/index.js +31 -3
  105. package/lib/IconButton/IconButton.js +140 -0
  106. package/lib/IconButton/index.js +13 -0
  107. package/lib/InputLabel/InputLabel.js +102 -40
  108. package/lib/InputLabel/LabelContent.js +41 -0
  109. package/lib/InputLabel/LabelContent.native.js +32 -6
  110. package/lib/InputLabel/index.js +13 -2
  111. package/lib/InputSupports/InputSupports.js +109 -0
  112. package/lib/InputSupports/index.js +13 -0
  113. package/lib/InputSupports/propTypes.js +66 -0
  114. package/lib/InputSupports/useInputSupports.js +41 -0
  115. package/lib/Link/ChevronLink.js +58 -31
  116. package/lib/Link/InlinePressable.js +56 -0
  117. package/lib/Link/InlinePressable.native.js +102 -0
  118. package/lib/Link/Link.js +39 -15
  119. package/lib/Link/LinkBase.js +126 -150
  120. package/lib/Link/TextButton.js +53 -18
  121. package/lib/Link/index.js +39 -4
  122. package/lib/List/List.js +81 -0
  123. package/lib/List/ListItem.js +245 -0
  124. package/lib/List/index.js +13 -0
  125. package/lib/Modal/Modal.js +231 -0
  126. package/lib/Modal/dictionary.js +16 -0
  127. package/lib/Modal/index.js +13 -0
  128. package/lib/Notification/Notification.js +216 -0
  129. package/lib/Notification/dictionary.js +15 -0
  130. package/lib/Notification/index.js +13 -0
  131. package/lib/Pagination/PageButton.js +58 -48
  132. package/lib/Pagination/Pagination.js +78 -43
  133. package/lib/Pagination/SideButton.js +79 -58
  134. package/lib/Pagination/dictionary.js +9 -2
  135. package/lib/Pagination/index.js +13 -2
  136. package/lib/Pagination/usePagination.js +12 -2
  137. package/lib/Progress/Progress.js +104 -0
  138. package/lib/Progress/ProgressBar.js +157 -0
  139. package/lib/Progress/ProgressBarBackground.js +61 -0
  140. package/lib/Progress/index.js +16 -0
  141. package/lib/Radio/Radio.js +293 -0
  142. package/lib/Radio/RadioButton.js +152 -0
  143. package/lib/Radio/RadioGroup.js +244 -0
  144. package/lib/Radio/RadioInput.js +76 -0
  145. package/lib/Radio/RadioInput.native.js +14 -0
  146. package/lib/Radio/index.js +21 -0
  147. package/lib/RadioCard/RadioCard.js +244 -0
  148. package/lib/RadioCard/RadioCardGroup.js +252 -0
  149. package/lib/RadioCard/index.js +21 -0
  150. package/lib/Search/Search.js +254 -0
  151. package/lib/Search/dictionary.js +19 -0
  152. package/lib/Search/index.js +13 -0
  153. package/lib/Select/Group.js +33 -0
  154. package/lib/Select/Group.native.js +25 -0
  155. package/lib/Select/Item.js +29 -0
  156. package/lib/Select/Item.native.js +19 -0
  157. package/lib/Select/Picker.js +84 -0
  158. package/lib/Select/Picker.native.js +130 -0
  159. package/lib/Select/Select.js +342 -0
  160. package/lib/Select/index.js +19 -0
  161. package/lib/SideNav/Item.js +63 -37
  162. package/lib/SideNav/ItemContent.js +41 -15
  163. package/lib/SideNav/ItemsGroup.js +55 -31
  164. package/lib/SideNav/SideNav.js +100 -73
  165. package/lib/SideNav/index.js +15 -1
  166. package/lib/Skeleton/Skeleton.js +137 -0
  167. package/lib/Skeleton/index.js +13 -0
  168. package/lib/Skeleton/skeleton.constant.js +12 -0
  169. package/lib/Skeleton/skeletonWebAnimation.js +27 -0
  170. package/lib/Skeleton/useSkeletonNativeAnimation.js +37 -0
  171. package/lib/Spacer/Spacer.js +49 -18
  172. package/lib/Spacer/index.js +13 -2
  173. package/lib/StackView/StackView.js +71 -31
  174. package/lib/StackView/StackWrap.js +43 -13
  175. package/lib/StackView/StackWrap.native.js +13 -2
  176. package/lib/StackView/StackWrapBox.js +76 -29
  177. package/lib/StackView/StackWrapGap.js +56 -26
  178. package/lib/StackView/common.js +23 -6
  179. package/lib/StackView/getStackedContent.js +47 -17
  180. package/lib/StackView/index.js +29 -5
  181. package/lib/StepTracker/Step.js +245 -0
  182. package/lib/StepTracker/StepTracker.js +202 -0
  183. package/lib/StepTracker/dictionary.js +17 -0
  184. package/lib/StepTracker/index.js +13 -0
  185. package/lib/Tabs/Tabs.js +124 -0
  186. package/lib/Tabs/TabsItem.js +238 -0
  187. package/lib/Tabs/index.js +13 -0
  188. package/lib/Tags/Tags.js +266 -0
  189. package/lib/Tags/index.js +13 -0
  190. package/lib/TextInput/TextArea.js +111 -0
  191. package/lib/TextInput/TextInput.js +50 -304
  192. package/lib/TextInput/TextInputBase.js +256 -0
  193. package/lib/TextInput/index.js +23 -2
  194. package/lib/TextInput/propTypes.js +42 -0
  195. package/lib/ThemeProvider/ThemeProvider.js +46 -18
  196. package/lib/ThemeProvider/index.js +61 -6
  197. package/lib/ThemeProvider/useSetTheme.js +19 -5
  198. package/lib/ThemeProvider/useTheme.js +13 -4
  199. package/lib/ThemeProvider/useThemeTokens.js +86 -19
  200. package/lib/ThemeProvider/utils/index.js +31 -2
  201. package/lib/ThemeProvider/utils/styles.js +50 -14
  202. package/lib/ThemeProvider/utils/theme-tokens.js +121 -12
  203. package/lib/ToggleSwitch/ToggleSwitch.js +86 -57
  204. package/lib/ToggleSwitch/index.js +13 -2
  205. package/lib/Tooltip/{Backdrop.web.js → Backdrop.js} +20 -8
  206. package/lib/Tooltip/Backdrop.native.js +39 -15
  207. package/lib/Tooltip/Tooltip.js +117 -74
  208. package/lib/Tooltip/dictionary.js +9 -2
  209. package/lib/Tooltip/getTooltipPosition.js +9 -1
  210. package/lib/Tooltip/index.js +13 -2
  211. package/lib/TooltipButton/TooltipButton.js +57 -38
  212. package/lib/TooltipButton/index.js +13 -2
  213. package/lib/Typography/Typography.js +86 -55
  214. package/lib/Typography/index.js +13 -2
  215. package/lib/ViewportProvider/ViewportProvider.js +34 -13
  216. package/lib/ViewportProvider/index.js +28 -3
  217. package/lib/ViewportProvider/useViewport.js +15 -3
  218. package/lib/ViewportProvider/useViewportListener.js +24 -10
  219. package/lib/index.js +539 -26
  220. package/lib/utils/a11y/index.js +31 -0
  221. package/lib/utils/a11y/semantics.js +173 -0
  222. package/lib/utils/a11y/textSize.js +49 -0
  223. package/lib/utils/animation/index.js +15 -2
  224. package/lib/utils/animation/useVerticalExpandAnimation.js +27 -10
  225. package/lib/utils/children.js +134 -0
  226. package/lib/utils/index.js +163 -7
  227. package/lib/utils/info/index.js +19 -0
  228. package/lib/utils/info/platform/index.js +23 -0
  229. package/lib/utils/info/platform/platform.android.js +8 -0
  230. package/lib/utils/info/platform/platform.ios.js +8 -0
  231. package/lib/utils/info/platform/platform.js +8 -0
  232. package/lib/utils/info/platform/platform.native.js +11 -0
  233. package/lib/utils/info/versions.js +16 -0
  234. package/lib/utils/input.js +53 -25
  235. package/lib/utils/pressability.js +120 -0
  236. package/lib/utils/propTypes.js +338 -132
  237. package/lib/utils/useCopy.js +40 -5
  238. package/lib/utils/useHash.js +52 -0
  239. package/lib/utils/useHash.native.js +15 -0
  240. package/lib/utils/useResponsiveProp.js +21 -9
  241. package/lib/utils/useSpacingScale.js +19 -9
  242. package/lib/utils/useUniqueId.js +12 -3
  243. package/package.json +16 -10
  244. package/release-context.json +4 -4
  245. package/src/A11yText/index.jsx +6 -4
  246. package/src/ActivityIndicator/{Spinner.web.jsx → Spinner.jsx} +5 -3
  247. package/src/ActivityIndicator/Spinner.native.jsx +5 -3
  248. package/src/Box/Box.jsx +131 -39
  249. package/src/Button/Button.jsx +13 -6
  250. package/src/Button/ButtonBase.jsx +134 -125
  251. package/src/Button/ButtonGroup.jsx +85 -86
  252. package/src/Button/ButtonLink.jsx +22 -7
  253. package/src/Button/propTypes.js +12 -2
  254. package/src/Card/Card.jsx +5 -31
  255. package/src/Card/CardBase.jsx +58 -0
  256. package/src/Card/PressableCardBase.jsx +119 -0
  257. package/src/Card/index.js +3 -0
  258. package/src/Checkbox/Checkbox.jsx +284 -0
  259. package/src/Checkbox/CheckboxGroup.jsx +206 -0
  260. package/src/Checkbox/CheckboxInput.jsx +55 -0
  261. package/src/Checkbox/CheckboxInput.native.jsx +6 -0
  262. package/src/Checkbox/index.js +5 -0
  263. package/src/Divider/Divider.jsx +7 -4
  264. package/src/ExpandCollapse/Accordion.jsx +3 -2
  265. package/src/ExpandCollapse/Control.jsx +40 -43
  266. package/src/ExpandCollapse/ExpandCollapse.jsx +26 -23
  267. package/src/ExpandCollapse/Panel.jsx +69 -63
  268. package/src/Feedback/Feedback.jsx +42 -30
  269. package/src/Fieldset/Fieldset.jsx +136 -0
  270. package/src/Fieldset/FieldsetContainer.jsx +31 -0
  271. package/src/Fieldset/FieldsetContainer.native.jsx +19 -0
  272. package/src/Fieldset/Legend.jsx +21 -0
  273. package/src/Fieldset/Legend.native.jsx +27 -0
  274. package/src/Fieldset/cssReset.js +14 -0
  275. package/src/Fieldset/index.js +3 -0
  276. package/src/FlexGrid/Col/Col.jsx +139 -132
  277. package/src/FlexGrid/FlexGrid.jsx +79 -51
  278. package/src/FlexGrid/Row/Row.jsx +55 -48
  279. package/src/HorizontalScroll/HorizontalScroll.jsx +168 -0
  280. package/src/HorizontalScroll/HorizontalScrollButton.jsx +105 -0
  281. package/src/HorizontalScroll/ScrollViewEnd.jsx +53 -0
  282. package/src/HorizontalScroll/ScrollViewEnd.native.jsx +24 -0
  283. package/src/HorizontalScroll/dictionary.js +11 -0
  284. package/src/HorizontalScroll/index.js +17 -0
  285. package/src/HorizontalScroll/itemPositions.js +101 -0
  286. package/src/Icon/Icon.jsx +46 -49
  287. package/src/Icon/IconText.jsx +68 -0
  288. package/src/Icon/index.js +3 -2
  289. package/src/IconButton/IconButton.jsx +114 -0
  290. package/src/IconButton/index.js +3 -0
  291. package/src/InputLabel/InputLabel.jsx +57 -35
  292. package/src/InputLabel/LabelContent.jsx +21 -0
  293. package/src/InputLabel/LabelContent.native.jsx +11 -2
  294. package/src/InputSupports/InputSupports.jsx +70 -0
  295. package/src/InputSupports/index.js +3 -0
  296. package/src/InputSupports/propTypes.js +44 -0
  297. package/src/InputSupports/useInputSupports.js +30 -0
  298. package/src/Link/ChevronLink.jsx +34 -21
  299. package/src/Link/InlinePressable.jsx +39 -0
  300. package/src/Link/InlinePressable.native.jsx +75 -0
  301. package/src/Link/Link.jsx +23 -13
  302. package/src/Link/LinkBase.jsx +98 -170
  303. package/src/Link/TextButton.jsx +37 -16
  304. package/src/Link/index.js +2 -1
  305. package/src/List/List.jsx +48 -0
  306. package/src/List/ListItem.jsx +182 -0
  307. package/src/List/index.js +3 -0
  308. package/src/Modal/Modal.jsx +190 -0
  309. package/src/Modal/dictionary.js +9 -0
  310. package/src/Modal/index.js +3 -0
  311. package/src/Notification/Notification.jsx +164 -0
  312. package/src/Notification/dictionary.js +8 -0
  313. package/src/Notification/index.js +3 -0
  314. package/src/Pagination/PageButton.jsx +42 -49
  315. package/src/Pagination/Pagination.jsx +88 -92
  316. package/src/Pagination/SideButton.jsx +58 -66
  317. package/src/Progress/Progress.jsx +78 -0
  318. package/src/Progress/ProgressBar.jsx +123 -0
  319. package/src/Progress/ProgressBarBackground.jsx +36 -0
  320. package/src/Progress/index.js +6 -0
  321. package/src/Radio/Radio.jsx +240 -0
  322. package/src/Radio/RadioButton.jsx +142 -0
  323. package/src/Radio/RadioGroup.jsx +209 -0
  324. package/src/Radio/RadioInput.jsx +57 -0
  325. package/src/Radio/RadioInput.native.jsx +6 -0
  326. package/src/Radio/index.js +5 -0
  327. package/src/RadioCard/RadioCard.jsx +198 -0
  328. package/src/RadioCard/RadioCardGroup.jsx +218 -0
  329. package/src/RadioCard/index.js +5 -0
  330. package/src/Search/Search.jsx +225 -0
  331. package/src/Search/dictionary.js +12 -0
  332. package/src/Search/index.js +3 -0
  333. package/src/Select/Group.jsx +15 -0
  334. package/src/Select/Group.native.jsx +14 -0
  335. package/src/Select/Item.jsx +11 -0
  336. package/src/Select/Item.native.jsx +10 -0
  337. package/src/Select/Picker.jsx +74 -0
  338. package/src/Select/Picker.native.jsx +102 -0
  339. package/src/Select/Select.jsx +298 -0
  340. package/src/Select/index.js +8 -0
  341. package/src/SideNav/Item.jsx +54 -47
  342. package/src/SideNav/ItemsGroup.jsx +50 -43
  343. package/src/SideNav/SideNav.jsx +68 -60
  344. package/src/Skeleton/Skeleton.jsx +94 -0
  345. package/src/Skeleton/index.js +3 -0
  346. package/src/Skeleton/skeleton.constant.js +3 -0
  347. package/src/Skeleton/skeletonWebAnimation.js +13 -0
  348. package/src/Skeleton/useSkeletonNativeAnimation.js +27 -0
  349. package/src/Spacer/Spacer.jsx +11 -4
  350. package/src/StackView/StackView.jsx +53 -23
  351. package/src/StackView/StackWrap.jsx +16 -7
  352. package/src/StackView/StackWrapBox.jsx +62 -28
  353. package/src/StackView/StackWrapGap.jsx +46 -24
  354. package/src/StackView/common.jsx +3 -2
  355. package/src/StackView/getStackedContent.jsx +8 -2
  356. package/src/StepTracker/Step.jsx +202 -0
  357. package/src/StepTracker/StepTracker.jsx +174 -0
  358. package/src/StepTracker/dictionary.js +10 -0
  359. package/src/StepTracker/index.js +3 -0
  360. package/src/Tabs/Tabs.jsx +97 -0
  361. package/src/Tabs/TabsItem.jsx +212 -0
  362. package/src/Tabs/index.js +3 -0
  363. package/src/Tags/Tags.jsx +219 -0
  364. package/src/Tags/index.js +3 -0
  365. package/src/TextInput/TextArea.jsx +79 -0
  366. package/src/TextInput/TextInput.jsx +18 -284
  367. package/src/TextInput/TextInputBase.jsx +217 -0
  368. package/src/TextInput/index.js +2 -1
  369. package/src/TextInput/propTypes.js +29 -0
  370. package/src/ThemeProvider/ThemeProvider.jsx +11 -7
  371. package/src/ThemeProvider/useSetTheme.js +4 -0
  372. package/src/ThemeProvider/useThemeTokens.js +56 -5
  373. package/src/ThemeProvider/utils/styles.js +18 -5
  374. package/src/ThemeProvider/utils/theme-tokens.js +74 -5
  375. package/src/ToggleSwitch/ToggleSwitch.jsx +51 -53
  376. package/src/Tooltip/{Backdrop.web.jsx → Backdrop.jsx} +0 -0
  377. package/src/Tooltip/Tooltip.jsx +135 -131
  378. package/src/TooltipButton/TooltipButton.jsx +23 -27
  379. package/src/Typography/Typography.jsx +72 -59
  380. package/src/index.js +31 -3
  381. package/src/utils/a11y/index.js +2 -0
  382. package/src/utils/a11y/semantics.js +162 -0
  383. package/src/utils/a11y/textSize.js +30 -0
  384. package/src/utils/children.jsx +119 -0
  385. package/src/utils/index.js +6 -0
  386. package/src/utils/info/index.js +8 -0
  387. package/src/utils/info/platform/index.js +11 -0
  388. package/src/utils/info/platform/platform.android.js +1 -0
  389. package/src/utils/info/platform/platform.ios.js +1 -0
  390. package/src/utils/info/platform/platform.js +1 -0
  391. package/src/utils/info/platform/platform.native.js +4 -0
  392. package/src/utils/info/versions.js +6 -0
  393. package/src/utils/input.js +36 -25
  394. package/src/utils/pressability.js +96 -0
  395. package/src/utils/propTypes.js +291 -90
  396. package/src/utils/useCopy.js +30 -4
  397. package/src/utils/useHash.js +39 -0
  398. package/src/utils/useHash.native.js +6 -0
  399. package/stories/A11yText/A11yText.stories.jsx +6 -10
  400. package/stories/ActivityIndicator/ActivityIndicator.stories.jsx +1 -1
  401. package/stories/Box/Box.stories.jsx +1 -1
  402. package/stories/Button/Button.stories.jsx +7 -2
  403. package/stories/Button/ButtonGroup.stories.jsx +1 -1
  404. package/stories/Button/ButtonLink.stories.jsx +1 -1
  405. package/stories/Card/Card.stories.jsx +1 -1
  406. package/stories/Checkbox/Checkbox.stories.jsx +94 -0
  407. package/stories/Divider/Divider.stories.jsx +1 -1
  408. package/stories/ExpandCollapse/ExpandCollapse.stories.jsx +2 -2
  409. package/stories/Feedback/Feedback.stories.jsx +5 -6
  410. package/stories/FlexGrid/01 FlexGrid.stories.jsx +1 -1
  411. package/stories/FlexGrid/02 Row.stories.jsx +1 -1
  412. package/stories/FlexGrid/03 Col.stories.jsx +1 -1
  413. package/stories/Icon/Icon.stories.jsx +27 -7
  414. package/stories/IconButton/IconButton.stories.jsx +50 -0
  415. package/stories/InputLabel/InputLabel.stories.jsx +1 -1
  416. package/stories/Link/ChevronLink.stories.jsx +1 -1
  417. package/stories/Link/Link.stories.jsx +28 -18
  418. package/stories/Link/TextButton.stories.jsx +1 -1
  419. package/stories/List/List.stories.jsx +117 -0
  420. package/stories/Modal/Modal.stories.jsx +29 -0
  421. package/stories/Notification/Notification.stories.jsx +82 -0
  422. package/stories/Pagination/Pagination.stories.jsx +1 -1
  423. package/stories/Progress/Progress.stories.jsx +93 -0
  424. package/stories/Radio/Radio.stories.jsx +100 -0
  425. package/stories/RadioCard/RadioCard.stories.jsx +98 -0
  426. package/stories/Search/Search.stories.jsx +16 -0
  427. package/stories/Select/Select.stories.jsx +55 -0
  428. package/stories/SideNav/SideNav.stories.jsx +1 -1
  429. package/stories/SideNav/SideNavItem.stories.jsx +1 -1
  430. package/stories/SideNav/SideNavItemsGroup.stories.jsx +1 -1
  431. package/stories/Skeleton/Skeleton.stories.jsx +36 -0
  432. package/stories/Spacer/Spacer.stories.jsx +1 -1
  433. package/stories/StackView/StackView.stories.jsx +1 -1
  434. package/stories/StackView/StackWrap.stories.jsx +1 -1
  435. package/stories/StepTracker/StepTracker.stories.jsx +71 -0
  436. package/stories/Tabs/Tabs.stories.jsx +97 -0
  437. package/stories/Tags/Tags.stories.jsx +69 -0
  438. package/stories/TextInput/TextArea.stories.jsx +100 -0
  439. package/stories/TextInput/TextInput.stories.jsx +1 -1
  440. package/stories/ToggleSwitch/ToggleSwitch.stories.jsx +1 -1
  441. package/stories/Tooltip/Tooltip.stories.jsx +1 -1
  442. package/stories/TooltipButton/TooltipButton.stories.jsx +1 -1
  443. package/stories/Typography/Typography.stories.jsx +1 -1
  444. package/stories/{platform-supports.web.jsx → platform-supports.jsx} +1 -1
  445. package/stories/supports.jsx +38 -4
  446. package/__fixtures__/accessible.icon.svg +0 -6
  447. package/babel.config.json +0 -8
  448. package/docs/Contributing.stories.mdx +0 -9
  449. package/docs/Fonts.stories.mdx +0 -104
  450. package/docs/Icons.stories.mdx +0 -144
  451. package/docs/Introduction.stories.mdx +0 -9
  452. package/lib/ActivityIndicator/Spinner.web.js +0 -55
  453. package/lib/InputLabel/LabelContent.web.js +0 -17
  454. package/lib/config/svgr-icons-web.js +0 -9
  455. package/lib/config/svgr-icons.js +0 -52
  456. package/src/InputLabel/LabelContent.web.jsx +0 -13
  457. package/src/config/svgr-icons-web.js +0 -11
  458. package/src/config/svgr-icons.js +0 -46
@@ -0,0 +1,102 @@
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 _Text = _interopRequireDefault(require("react-native-web/dist/cjs/exports/Text"));
11
+
12
+ var _TouchableWithoutFeedback = _interopRequireDefault(require("react-native-web/dist/cjs/exports/TouchableWithoutFeedback"));
13
+
14
+ var _jsxRuntime = require("react/jsx-runtime");
15
+
16
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
+
18
+ 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); }
19
+
20
+ 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; }
21
+
22
+ /* eslint-disable camelcase */
23
+
24
+ /**
25
+ * @typedef {import('react-native').PressableProps} PressableProps
26
+ */
27
+ // TouchableWithoutFeedback and Pressable have similar but not identical props APIs
28
+ const pressablePropsToTouchable = ({
29
+ unstable_pressDelay,
30
+ android_disableSound,
31
+ android_ripple,
32
+ // Unsupported, discard it
33
+ ...props
34
+ }) => ({ ...props,
35
+ touchSoundDisabled: android_disableSound,
36
+ delayPressIn: unstable_pressDelay
37
+ });
38
+ /**
39
+ * InlinePressable is an alternative to React Native's Pressable that works better when nested
40
+ * inline inside Text. It accepts the same props as React Native's Pressable.
41
+ *
42
+ * There are a lot of React Native bugs around Views/Pressables nested in Text, e.g.:
43
+ *
44
+ * - https://github.com/facebook/react-native/issues/23601#issuecomment-468069822
45
+ * - https://github.com/facebook/react-native/issues/30375
46
+ * - https://github.com/facebook/react-native/issues/31955
47
+ *
48
+ * On Native, these can be avoided using a `Text` wrapped in a `TouchableWithoutFeedback`; the latter
49
+ * injects additional handlers such as onPressIn to `Text`, resulting in a tree that is purely `Text`.
50
+ *
51
+ * Note that this should only be used on Native, not Web, because React Navigation's Web navigation
52
+ * functions don't work in Touchables (but do work in Pressable) due to different event handling.
53
+ *
54
+ * @param {PressableProps} PressableProps
55
+ */
56
+ // React Native exports prop Types but not propTypes, use JSDoc types here rather than duplicate RN
57
+ // eslint-disable-next-line react/prop-types
58
+
59
+
60
+ const InlinePressable = /*#__PURE__*/(0, _react.forwardRef)(({
61
+ onPress,
62
+ children,
63
+ style,
64
+ ...rest
65
+ }, ref) => {
66
+ const [isFocused, setIsFocused] = (0, _react.useState)(false);
67
+
68
+ const handleFocus = () => setIsFocused(true);
69
+
70
+ const handleBlur = () => setIsFocused(false);
71
+
72
+ const [isPressed, setIsPressed] = (0, _react.useState)(false);
73
+
74
+ const handlePressIn = () => setIsPressed(true);
75
+
76
+ const handlePressOut = () => setIsPressed(false);
77
+
78
+ const pressState = {
79
+ pressed: isPressed,
80
+ focus: isFocused,
81
+ // limited support on native
82
+ hover: false // not yet supported on native
83
+
84
+ };
85
+ const currentStyle = typeof style === 'function' ? style(pressState) : style;
86
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_TouchableWithoutFeedback.default, {
87
+ onPress: onPress,
88
+ onPressIn: handlePressIn,
89
+ onPressOut: handlePressOut,
90
+ onFocus: handleFocus,
91
+ onBlur: handleBlur,
92
+ ref: ref,
93
+ ...pressablePropsToTouchable(rest),
94
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Text.default, {
95
+ style: currentStyle,
96
+ children: typeof children === 'function' ? children(pressState) : children
97
+ })
98
+ });
99
+ });
100
+ InlinePressable.displayName = 'InlinePressable';
101
+ var _default = InlinePressable;
102
+ exports.default = _default;
package/lib/Link/Link.js CHANGED
@@ -1,21 +1,45 @@
1
- import React from 'react';
2
- import LinkBase from './LinkBase';
1
+ "use strict";
3
2
 
4
- const Link = ({
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _react = _interopRequireWildcard(require("react"));
9
+
10
+ var _ThemeProvider = require("../ThemeProvider");
11
+
12
+ var _LinkBase = _interopRequireDefault(require("./LinkBase"));
13
+
14
+ var _jsxRuntime = require("react/jsx-runtime");
15
+
16
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
+
18
+ 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); }
19
+
20
+ 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; }
21
+
22
+ const Link = /*#__PURE__*/(0, _react.forwardRef)(({
5
23
  href,
6
24
  children,
7
25
  accessibilityRole = 'link',
8
26
  variant = {},
27
+ tokens,
28
+ dataSet,
9
29
  ...linkProps
10
- }) => /*#__PURE__*/React.createElement(LinkBase, Object.assign({
11
- href: href,
12
- accessibilityRole: accessibilityRole,
13
- variant: {
14
- component: 'Link',
15
- ...variant
16
- }
17
- }, linkProps), children);
18
-
19
- Link.propTypes = { ...LinkBase.propTypes
20
- };
21
- export default Link;
30
+ }, ref) => {
31
+ const getTokens = (0, _ThemeProvider.useThemeTokensCallback)('Link', tokens, variant);
32
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_LinkBase.default, {
33
+ href: href,
34
+ accessibilityRole: accessibilityRole,
35
+ tokens: getTokens,
36
+ ref: ref,
37
+ dataSet: dataSet,
38
+ ...linkProps,
39
+ children: children
40
+ });
41
+ });
42
+ Link.displayName = 'Link';
43
+ Link.propTypes = _LinkBase.default.propTypes;
44
+ var _default = Link;
45
+ exports.default = _default;
@@ -1,42 +1,74 @@
1
- import React, { useState } from 'react';
2
- import PropTypes from 'prop-types';
3
- import { Text, Platform, StyleSheet, Pressable, PixelRatio, View, TouchableWithoutFeedback } from 'react-native';
4
- import { a11yProps, hrefAttrsProp, variantProp, linkProps, getTokensPropType } from '../utils/propTypes';
5
- import { useThemeTokens, applyTextStyles } from '../ThemeProvider';
6
-
7
- const selectContentStyles = ({
8
- color
9
- }) => ({
10
- color
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
11
5
  });
6
+ exports.default = void 0;
7
+
8
+ var _react = _interopRequireWildcard(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 _Platform = _interopRequireDefault(require("react-native-web/dist/cjs/exports/Platform"));
15
+
16
+ var _StyleSheet = _interopRequireDefault(require("react-native-web/dist/cjs/exports/StyleSheet"));
17
+
18
+ var _propTypes2 = require("../utils/propTypes");
19
+
20
+ var _pressability = require("../utils/pressability");
21
+
22
+ var _InlinePressable = _interopRequireDefault(require("./InlinePressable"));
23
+
24
+ var _ThemeProvider = require("../ThemeProvider");
25
+
26
+ var _Icon = require("../Icon");
27
+
28
+ var _jsxRuntime = require("react/jsx-runtime");
29
+
30
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
31
+
32
+ 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); }
33
+
34
+ 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; }
12
35
 
13
36
  const selectOuterBorderStyles = ({
14
37
  outerBorderColor,
15
38
  outerBorderWidth,
16
39
  outerBorderGap,
17
- outerBorderRadius,
40
+ borderRadius,
18
41
  outerBorderOutline
19
42
  }) => // A view wrapper with a border on native messes up inline text alignment
20
43
  // so for now make focus styles strictly web-only
21
- Platform.OS === 'web' ? {
22
- margin: -1 * (outerBorderGap + outerBorderWidth) || 0,
23
- padding: outerBorderGap,
44
+ _Platform.default.OS === 'web' ? {
24
45
  // Allow theme to define outline, or, turn off outline and use border if rounded corners required
25
46
  outline: outerBorderOutline,
26
- borderWidth: outerBorderWidth,
27
- borderColor: outerBorderColor,
28
- borderRadius: outerBorderRadius,
47
+ ...(0, _ThemeProvider.applyOuterBorder)({
48
+ outerBorderColor,
49
+ outerBorderWidth,
50
+ outerBorderGap,
51
+ borderRadius
52
+ }),
29
53
  // Stops focus ring stretching horizontally if parent has display: block
30
54
  // width: fit-content isn't supported on Firefox; can't cascade props like CSS `width: fit-content; width: --moz-fit-content;`
31
55
  display: 'inline-flex'
32
56
  } : {};
33
57
 
34
58
  const selectTextStyles = ({
59
+ color,
35
60
  textLine,
36
61
  textLineStyle
37
62
  }) => ({
63
+ color,
38
64
  textDecorationLine: textLine,
39
- textDecorationStyle: textLineStyle
65
+ textDecorationStyle: textLineStyle,
66
+ ..._Platform.default.select({
67
+ web: {
68
+ // TODO: https://github.com/telus/universal-design-system/issues/487
69
+ transition: 'color 200ms'
70
+ }
71
+ })
40
72
  });
41
73
 
42
74
  const selectBlockStyles = ({
@@ -44,27 +76,23 @@ const selectBlockStyles = ({
44
76
  blockFontSize,
45
77
  blockLineHeight,
46
78
  blockFontName
47
- }) => applyTextStyles({
79
+ }) => (0, _ThemeProvider.applyTextStyles)({
48
80
  fontWeight: blockFontWeight,
49
81
  fontSize: blockFontSize,
50
82
  lineHeight: blockLineHeight,
51
83
  fontName: blockFontName
52
84
  });
53
85
 
54
- const selectIconStyles = ({
86
+ const selectIconTokens = ({
87
+ color,
55
88
  iconSize,
56
- iconGapBefore,
57
- iconGapAfter,
58
- iconScale,
59
89
  iconTranslateX,
60
90
  iconTranslateY
61
91
  }) => ({
62
- scale: iconScale,
92
+ color,
63
93
  translateX: iconTranslateX,
64
94
  translateY: iconTranslateY,
65
- size: iconSize,
66
- gapBefore: iconGapBefore,
67
- gapAfter: iconGapAfter
95
+ size: iconSize
68
96
  });
69
97
  /**
70
98
  * Renders a pressable text link, with optional icon. This is rendered as a block element
@@ -90,163 +118,106 @@ const selectIconStyles = ({
90
118
  */
91
119
 
92
120
 
93
- const LinkBase = ({
121
+ const LinkBase = /*#__PURE__*/(0, _react.forwardRef)(({
94
122
  href,
95
123
  onPress,
96
124
  icon,
97
125
  iconPosition = icon ? 'left' : undefined,
98
- iconVariant,
126
+ iconProps,
99
127
  variant,
100
- tokens,
128
+ tokens = {},
101
129
  children,
102
130
  accessibilityRole = 'link',
131
+ dataSet,
103
132
  ...props
104
- }) => {
105
- const handlePress = linkProps.handleHref({
106
- href,
107
- onPress
108
- });
109
- const [isFocused, setIsFocused] = useState(false);
110
-
111
- const handleFocus = () => setIsFocused(true);
112
-
113
- const handleBlur = () => setIsFocused(false);
114
-
115
- const [isHovered, setIsHovered] = useState(false);
116
-
117
- const handleHoverIn = () => setIsHovered(true);
118
-
119
- const handleHoverOut = () => setIsHovered(false);
120
-
121
- const [isPressed, setIsPressed] = useState(false);
122
-
123
- const handlePressIn = () => setIsPressed(true);
124
-
125
- const handlePressOut = () => setIsPressed(false);
126
-
133
+ }, ref) => {
127
134
  const {
128
135
  hrefAttrs,
129
136
  rest
130
- } = hrefAttrsProp.bundle(props);
131
- const linkPropSet = linkProps.select({
137
+ } = _propTypes2.hrefAttrsProp.bundle(props);
138
+
139
+ const linkPropSet = _propTypes2.linkProps.select({
132
140
  accessibilityRole,
133
141
  href,
134
- onPress: handlePress,
135
- onPressIn: handlePressIn,
136
- onPressOut: handlePressOut,
137
- onFocus: handleFocus,
138
- onBlur: handleBlur,
139
- onMouseEnter: handleHoverIn,
140
- onMouseLeave: handleHoverOut,
141
- ...hrefAttrsProp.spread(hrefAttrs),
142
+ onPress: _propTypes2.linkProps.handleHref({
143
+ href,
144
+ onPress
145
+ }),
146
+ hrefAttrs,
142
147
  ...rest
143
148
  });
144
- const themeTokens = useThemeTokens('Link', tokens, variant, {
145
- focus: isFocused,
146
- hover: isHovered,
147
- pressed: isPressed,
149
+
150
+ const resolveLinkTokens = pressState => (0, _pressability.resolvePressableTokens)(tokens, pressState, {
148
151
  iconPosition
152
+ }); // On web, this makes focus rings wrap only the link, not the entire block
153
+
154
+
155
+ const blockLeftStyle = _Platform.default.OS === 'web' && staticStyles.blockLeft;
156
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_InlinePressable.default, { ...linkPropSet,
157
+ ref: ref,
158
+ dataSet: dataSet,
159
+ style: linkState => {
160
+ const themeTokens = resolveLinkTokens(linkState);
161
+ const outerBorderStyles = selectOuterBorderStyles(themeTokens);
162
+ const hasIcon = Boolean(icon || themeTokens.icon);
163
+ return [outerBorderStyles, blockLeftStyle, hasIcon && staticStyles.rowContainer];
164
+ },
165
+ children: linkState => {
166
+ const themeTokens = resolveLinkTokens(linkState);
167
+ const textStyles = selectTextStyles(themeTokens);
168
+ const iconTokens = selectIconTokens(themeTokens); // TODO: may need to apply some smarter text inheritance here if inline to avoid native
169
+ // issues like double-application of line heights breaking align-items: baseline
170
+
171
+ const blockTextStyles = selectBlockStyles(themeTokens);
172
+ const IconComponent = icon || themeTokens.icon;
173
+ const {
174
+ iconSpace
175
+ } = themeTokens;
176
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Icon.IconText, {
177
+ icon: IconComponent,
178
+ iconPosition: iconPosition,
179
+ space: iconSpace,
180
+ iconProps: { ...iconProps,
181
+ tokens: iconTokens
182
+ },
183
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Text.default, {
184
+ style: [textStyles, blockTextStyles, staticStyles.baseline],
185
+ children: children
186
+ })
187
+ });
188
+ }
149
189
  });
150
- const IconComponent = icon || themeTokens.icon;
151
- const hasIcon = !!IconComponent;
152
- const textStyles = selectTextStyles(themeTokens);
153
- const outerBorderStyles = selectOuterBorderStyles(themeTokens);
154
- const contentStyles = selectContentStyles(themeTokens);
155
- const blockStyles = selectBlockStyles(themeTokens);
156
- const iconStyles = selectIconStyles(themeTokens); // TODO: re-apply support for inline links
157
-
158
- const isNested = false; // On web, this makes focus rings wrap only the link, not the entire block
159
-
160
- const blockLeftStyle = Platform.OS === 'web' && staticStyles.blockLeft; // Apply typographic text styles if not inheriting, and block positioning if a block
161
-
162
- const blockTextStyles = !isNested && blockStyles;
163
-
164
- if (!hasIcon) {
165
- // onPressIn / onPressOut only work if on TouchableWithoutFeedback, onFocus only works if on Text
166
- const {
167
- onPress: _onPress,
168
- onPressIn,
169
- onPressOut,
170
- ...textProps
171
- } = linkPropSet;
172
- return (
173
- /*#__PURE__*/
174
- // TouchableWithoutFeedback modifies its child so this stack is all (touchable) Text: no Views
175
- React.createElement(TouchableWithoutFeedback, {
176
- onPressIn: onPressIn,
177
- onPressOut: onPressOut,
178
- onPress: _onPress
179
- }, /*#__PURE__*/React.createElement(Text, Object.assign({}, textProps, {
180
- style: [outerBorderStyles, blockLeftStyle, contentStyles, blockTextStyles, textStyles]
181
- }), children))
182
- );
183
- } // Scale icon with text, but with a cap so text isn't squashed at large scales
184
-
185
-
186
- const iconScale = Math.min(PixelRatio.getFontScale(), 2);
187
- const iconTokens = {
188
- size: iconStyles.size ? iconStyles.size * iconScale : undefined,
189
- color: contentStyles.color ?? undefined,
190
- scale: iconStyles.scale ?? undefined,
191
- translateX: iconStyles.translateX ?? undefined,
192
- translateY: iconStyles.translateY ?? undefined
193
- };
194
- const iconContent = /*#__PURE__*/React.createElement(IconComponent, {
195
- tokens: iconTokens,
196
- variant: iconVariant
197
- });
198
- const iconBlock = isNested ? // TODO: when reimplementing inline support, insert an appropriate space character
199
- // based on the value of gapBefore and gapAfter on native (no inline margins/padding)
200
- iconContent : /*#__PURE__*/React.createElement(View, {
201
- style: [iconPosition === 'left' && {
202
- marginRight: iconStyles.gapAfter * iconScale
203
- }, iconPosition === 'right' && {
204
- marginLeft: iconStyles.gapBefore * iconScale
205
- }]
206
- }, iconContent); // TODO: this doesn't work well when nested inline but does allow block-links to have icons align
207
- // properly on Android which purely inline links can't do. Add an isNested case that is similar to
208
- // https://github.com/telus/universal-design-system/pull/233
209
-
210
- return /*#__PURE__*/React.createElement(Pressable, Object.assign({}, linkPropSet, {
211
- style: [outerBorderStyles, blockLeftStyle, staticStyles.rowContainer]
212
- }), iconPosition === 'left' && iconBlock, /*#__PURE__*/React.createElement(Text, {
213
- style: [contentStyles, blockTextStyles, textStyles, Platform.select({
214
- web: {
215
- // TODO: https://github.com/telus/universal-design-system/issues/487
216
- transition: 'color 200ms'
217
- }
218
- })]
219
- }, children), iconPosition === 'right' && iconBlock);
220
- };
221
-
222
- LinkBase.propTypes = { ...a11yProps.types,
223
- ...linkProps.types,
224
- tokens: getTokensPropType('Link'),
225
- variant: variantProp.propType,
190
+ });
191
+ LinkBase.displayName = 'LinkBase';
192
+ LinkBase.propTypes = { ..._propTypes2.a11yProps.types,
193
+ ..._propTypes2.linkProps.types,
194
+ tokens: (0, _propTypes2.getTokensPropType)('Link'),
195
+ variant: _propTypes2.variantProp.propType,
226
196
 
227
197
  /**
228
198
  * Optional variant that may be passed down to the link's icon if there is one
229
199
  */
230
- iconVariant: variantProp.propType,
200
+ iconProps: _propTypes.default.exact(_Icon.iconComponentPropTypes),
231
201
 
232
202
  /**
233
203
  * A function component for an SVG icon to render inside the link. Inherits size and color from
234
204
  * the link and any Typography the link is nested inside.
235
205
  */
236
- icon: PropTypes.func,
206
+ icon: _propTypes.default.func,
237
207
 
238
208
  /**
239
209
  * When `icon` is provided, use `iconPosition` to place the Icon to the left or right side of Link.
240
210
  */
241
- iconPosition: PropTypes.oneOf(['left', 'right']),
211
+ iconPosition: _propTypes.default.oneOf(['left', 'right']),
242
212
 
243
213
  /**
244
214
  * On Web if href is passed, React Native Web maps this object's props to
245
- * `rel`, `target` and (>= RNW 0.15.0) `download` attrs.
215
+ * `rel`, `target` and `download` attrs.
246
216
  */
247
- hrefAttrs: PropTypes.shape(hrefAttrsProp.types)
217
+ hrefAttrs: _propTypes.default.shape(_propTypes2.hrefAttrsProp.types)
248
218
  };
249
- const staticStyles = StyleSheet.create({
219
+
220
+ const staticStyles = _StyleSheet.default.create({
250
221
  blockLeft: {
251
222
  alignSelf: 'flex-start'
252
223
  },
@@ -254,6 +225,11 @@ const staticStyles = StyleSheet.create({
254
225
  flexDirection: 'row',
255
226
  alignItems: 'center',
256
227
  justifyContent: 'flex-start'
228
+ },
229
+ baseline: {
230
+ alignSelf: 'baseline'
257
231
  }
258
232
  });
259
- export default LinkBase;
233
+
234
+ var _default = LinkBase;
235
+ exports.default = _default;
@@ -1,26 +1,61 @@
1
- import React from 'react';
2
- import PropTypes from 'prop-types';
3
- import LinkBase from './LinkBase';
1
+ "use strict";
4
2
 
5
- const TextButton = ({
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 _ThemeProvider = require("../ThemeProvider");
13
+
14
+ var _LinkBase = _interopRequireDefault(require("./LinkBase"));
15
+
16
+ var _jsxRuntime = require("react/jsx-runtime");
17
+
18
+ var _TextButton$propTypes;
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
+ * `TextButton` is a button that looks like a Link. It uses the same theming and variants as
28
+ * Link but has the accessibility role of a `Button`. It should be used for actions that
29
+ * take place on the current page, or for navigation within an app.
30
+ */
31
+ const TextButton = /*#__PURE__*/(0, _react.forwardRef)(({
6
32
  onPress,
7
33
  children,
8
- variant = {},
34
+ variant,
35
+ tokens,
36
+ // TODO: this may need to use `link` role on Web in the case of being passed both `href` and
37
+ // `onPress` in an omniplatform app that uses React Navigation's useLinkProps for internal nav.
9
38
  accessibilityRole = 'button',
10
39
  ...linkProps
11
- }) => /*#__PURE__*/React.createElement(LinkBase, Object.assign({
12
- onPress: onPress,
13
- accessibilityRole: accessibilityRole,
14
- variant: {
15
- component: 'TextButton',
16
- ...variant
17
- }
18
- }, linkProps), children);
19
-
20
- TextButton.propTypes = { ...LinkBase.propTypes,
21
- onPress: PropTypes.func.isRequired
40
+ }, ref) => {
41
+ const getTokens = (0, _ThemeProvider.useThemeTokensCallback)('Link', tokens, variant);
42
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_LinkBase.default, {
43
+ onPress: onPress,
44
+ accessibilityRole: accessibilityRole,
45
+ tokens: getTokens,
46
+ ref: ref,
47
+ ...linkProps,
48
+ children: children
49
+ });
50
+ });
51
+ TextButton.displayName = 'TextButton';
52
+ TextButton.propTypes = { ..._LinkBase.default.propTypes,
53
+ onPress: _propTypes.default.func.isRequired
22
54
  }; // Remove incompatible Link prop (if this build includes propTypes)
55
+ // TODO: test if this works with web navigation in omniplatform React Navigation
56
+ // https://github.com/telus/universal-design-system/issues/665
23
57
  // eslint-disable-next-line react/forbid-foreign-prop-types
24
58
 
25
- if (TextButton.propTypes?.href) delete TextButton.propTypes.href;
26
- export default TextButton;
59
+ if ((_TextButton$propTypes = TextButton.propTypes) !== null && _TextButton$propTypes !== void 0 && _TextButton$propTypes.href) delete TextButton.propTypes.href;
60
+ var _default = TextButton;
61
+ exports.default = _default;
package/lib/Link/index.js CHANGED
@@ -1,4 +1,39 @@
1
- import ChevronLink from './ChevronLink';
2
- import Link from './Link';
3
- import TextButton from './TextButton';
4
- export { ChevronLink, Link, TextButton };
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "ChevronLink", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _ChevronLink.default;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "Link", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _Link.default;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "LinkBase", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _LinkBase.default;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, "TextButton", {
25
+ enumerable: true,
26
+ get: function () {
27
+ return _TextButton.default;
28
+ }
29
+ });
30
+
31
+ var _ChevronLink = _interopRequireDefault(require("./ChevronLink"));
32
+
33
+ var _Link = _interopRequireDefault(require("./Link"));
34
+
35
+ var _LinkBase = _interopRequireDefault(require("./LinkBase"));
36
+
37
+ var _TextButton = _interopRequireDefault(require("./TextButton"));
38
+
39
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }