@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,199 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = exports.selectHorizontalScrollTokens = void 0;
7
+
8
+ var _react = _interopRequireWildcard(require("react"));
9
+
10
+ var _propTypes = _interopRequireDefault(require("prop-types"));
11
+
12
+ var _Platform = _interopRequireDefault(require("react-native-web/dist/cjs/exports/Platform"));
13
+
14
+ var _StyleSheet = _interopRequireDefault(require("react-native-web/dist/cjs/exports/StyleSheet"));
15
+
16
+ var _View = _interopRequireDefault(require("react-native-web/dist/cjs/exports/View"));
17
+
18
+ var _ThemeProvider = require("../ThemeProvider");
19
+
20
+ var _utils = require("../utils");
21
+
22
+ var _ScrollViewEnd = _interopRequireDefault(require("./ScrollViewEnd"));
23
+
24
+ var _itemPositions = require("./itemPositions");
25
+
26
+ var _jsxRuntime = require("react/jsx-runtime");
27
+
28
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
29
+
30
+ 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); }
31
+
32
+ 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; }
33
+
34
+ const tokenKeys = ['nextIcon', 'previousIcon', 'gutter', 'borderBottomWidth', 'borderBottomColor', 'buttonClearance'];
35
+
36
+ const selectHorizontalScrollTokens = (themeTokens, prefix) => (0, _utils.selectTokens)(tokenKeys, themeTokens, prefix);
37
+ /**
38
+ * Base component that scrolls horizontally and displays left and right buttons if
39
+ * there is content to the left and the right which can be scrolled to.
40
+ *
41
+ * @TODO revist `ScrollButton` after IconButton is stable.
42
+ */
43
+
44
+
45
+ exports.selectHorizontalScrollTokens = selectHorizontalScrollTokens;
46
+
47
+ const HorizontalScroll = ({
48
+ ScrollButton,
49
+ tokens,
50
+ itemPositions,
51
+ children,
52
+ ...rest
53
+ }) => {
54
+ const {
55
+ nextIcon,
56
+ previousIcon,
57
+ gutter,
58
+ borderBottomWidth,
59
+ borderBottomColor,
60
+ buttonClearance = 0
61
+ } = (0, _ThemeProvider.validateThemeTokens)((0, _ThemeProvider.resolveThemeTokens)(tokens), // Allow missing icons
62
+ (0, _utils.getTokensSetPropType)(tokenKeys, {
63
+ partial: true
64
+ }), 'HorizontalScroll');
65
+ const [containerWidth, setContainerWidth] = (0, _react.useState)(0);
66
+ const [contentWidth, setContentWidth] = (0, _react.useState)(0);
67
+
68
+ const handleContentWidth = width => setContentWidth(width);
69
+
70
+ const handleContainerLayout = ({
71
+ nativeEvent: {
72
+ layout: {
73
+ width
74
+ }
75
+ }
76
+ }) => setContainerWidth(width); // Update the scroll position only when scrolling actions ends to minimally rerender
77
+ // and update which buttons are conditionally rendered.
78
+
79
+
80
+ const [scrollOffset, setScrollOffset] = (0, _react.useState)(0);
81
+
82
+ const handleScrollEnd = ({
83
+ nativeEvent: {
84
+ contentOffset: {
85
+ x
86
+ }
87
+ }
88
+ }) => {
89
+ setScrollOffset(x);
90
+ };
91
+
92
+ const scrollMax = Math.max(0, contentWidth - containerWidth);
93
+ const showNextButton = scrollOffset < scrollMax;
94
+ const showPreviousButton = scrollOffset > 0;
95
+ const scrollRef = (0, _react.useRef)(null);
96
+
97
+ const scrollTo = targetX => {
98
+ var _scrollRef$current;
99
+
100
+ if (typeof ((_scrollRef$current = scrollRef.current) === null || _scrollRef$current === void 0 ? void 0 : _scrollRef$current.scrollTo) === 'function') {
101
+ const x = (0, _itemPositions.getItemPositionScrollTarget)(targetX, scrollMax, itemPositions.positions, buttonClearance);
102
+ scrollRef.current.scrollTo({
103
+ x,
104
+ animated: true
105
+ });
106
+
107
+ if (_Platform.default.OS === 'android') {
108
+ // React Native calls onScrollMomentumEnd after scrollTo for iOS, but not Android.
109
+ // See https://github.com/facebook/react-native/issues/26661
110
+ // There's also no callback for when scrollTo finishes.
111
+ setTimeout(() => setScrollOffset(x), 300);
112
+ }
113
+ }
114
+ }; // Make scrollTo and relevant co-ordinates available to any component with an interest in itemPositions.
115
+ // ItemPositions is a mutable ref object intended to have its properties mutated without any rerenders.
116
+
117
+ /* eslint-disable-next-line no-param-reassign */
118
+
119
+
120
+ itemPositions.scrollTo = scrollTo;
121
+ /* eslint-disable-next-line no-param-reassign */
122
+
123
+ itemPositions.containerWidth = containerWidth;
124
+ /* eslint-disable-next-line no-param-reassign */
125
+
126
+ itemPositions.contentWidth = contentWidth;
127
+ /* eslint-disable-next-line no-param-reassign */
128
+
129
+ itemPositions.scrollOffset = scrollOffset;
130
+ const hasWidths = itemPositions.contentWidth > 0 && itemPositions.contentWidth > 0;
131
+ (0, _react.useEffect)(() => {
132
+ if (hasWidths) itemPositions.setIsReady(true); // itemPositions is a ref object so this should occur only when elements' widths are set in state
133
+ }, [hasWidths, itemPositions]); // When scrolling, allow clearance around scroll buttons, so e.g. this...
134
+ // (<-) Item 5 Item 6 Item 7 Item 8 It(->)
135
+ // ...doesn't scroll like this with Item 9 never being properly visible:
136
+ // (<-)em 9 Item 10 Item 11 Item 12 Item (->)
137
+
138
+ const scrollDistance = containerWidth - buttonClearance * 2;
139
+
140
+ const scrollNext = () => scrollTo(scrollOffset + scrollDistance);
141
+
142
+ const scrollPrevious = () => scrollTo(scrollOffset - scrollDistance);
143
+
144
+ const a11y = _utils.a11yProps.select(rest); // On Web, being scrollable in one direction prevents overflow: visible in the other direction.
145
+ // Apply a fixed margin gutter that tab highlight effects can overhang without getting trimmed.
146
+
147
+
148
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_View.default, {
149
+ style: staticStyles.container,
150
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_ScrollViewEnd.default, {
151
+ onScrollEnd: handleScrollEnd,
152
+ ref: scrollRef,
153
+ horizontal: true,
154
+ onContentSizeChange: handleContentWidth,
155
+ onLayout: handleContainerLayout,
156
+ showsHorizontalScrollIndicator: false,
157
+ contentContainerStyle: [staticStyles.scrollContainer, {
158
+ marginBottom: gutter,
159
+ borderBottomWidth,
160
+ borderBottomColor
161
+ }],
162
+ ...a11y,
163
+ children: children
164
+ }), showPreviousButton && /*#__PURE__*/(0, _jsxRuntime.jsx)(ScrollButton, {
165
+ icon: previousIcon,
166
+ onPress: scrollPrevious,
167
+ offset: gutter,
168
+ direction: "previous"
169
+ }), showNextButton && /*#__PURE__*/(0, _jsxRuntime.jsx)(ScrollButton, {
170
+ icon: nextIcon,
171
+ onPress: scrollNext,
172
+ offset: gutter,
173
+ direction: "next"
174
+ })]
175
+ });
176
+ };
177
+
178
+ const staticStyles = _StyleSheet.default.create({
179
+ scrollContainer: {
180
+ // Gives inner container width from content, allowing it to exceed its container's width
181
+ alignSelf: 'flex-start',
182
+ flexGrow: 1
183
+ },
184
+ container: {
185
+ // Vertically center the ScrollButtons buttons
186
+ justifyContent: 'center'
187
+ }
188
+ });
189
+
190
+ HorizontalScroll.propTypes = {
191
+ itemPositions: _itemPositions.itemPositionsPropType,
192
+ ScrollButton: _propTypes.default.elementType,
193
+ tokens: (0, _utils.getTokensSetPropType)(tokenKeys, {
194
+ allowFunction: true
195
+ }),
196
+ children: _propTypes.default.node
197
+ };
198
+ var _default = HorizontalScroll;
199
+ exports.default = _default;
@@ -0,0 +1,66 @@
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 _ScrollView = _interopRequireDefault(require("react-native-web/dist/cjs/exports/ScrollView"));
13
+
14
+ var _lodash = _interopRequireDefault(require("lodash.debounce"));
15
+
16
+ var _jsxRuntime = require("react/jsx-runtime");
17
+
18
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
+
20
+ 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); }
21
+
22
+ 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; }
23
+
24
+ const DEBOUNCE_MS = 100;
25
+ /**
26
+ * A wrapper for ScrollView that supports an `onScrollEnd` function.
27
+ *
28
+ * React Native Web hasn't got around to implementing any scroll end handlers yet,
29
+ * so we need to work around it with debouncing on `onScroll`. See:
30
+ * https://github.com/necolas/react-native-web/issues/1021
31
+ */
32
+
33
+ const ScrollViewEnd = /*#__PURE__*/(0, _react.forwardRef)(({
34
+ onScrollEnd,
35
+ onScroll,
36
+ ...props
37
+ }, ref) => {
38
+ // Return debounced function directly from useCallback so it has .cancel method etc.
39
+ // Linter complains this stops it automatically scanning the deps, but we can check them manually.
40
+ // eslint-disable-next-line react-hooks/exhaustive-deps
41
+ const debounceScrollEnd = (0, _react.useCallback)((0, _lodash.default)(event => onScrollEnd(event), DEBOUNCE_MS), [onScrollEnd]); // Call any onScroll handler immediately, and any onScrollEnd handler after 100ms of no scrolling
42
+
43
+ const handleScroll = event => {
44
+ if (typeof onScroll === 'function') onScroll(event);
45
+ if (typeof onScrollEnd === 'function') debounceScrollEnd(event);
46
+ }; // Cancel any lingering debounce timeouts on dismount
47
+
48
+
49
+ (0, _react.useEffect)(() => debounceScrollEnd.cancel);
50
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_ScrollView.default, {
51
+ ref: ref,
52
+ ...props,
53
+ onScroll: handleScroll,
54
+ scrollEventThrottle: DEBOUNCE_MS / 2
55
+ });
56
+ });
57
+ ScrollViewEnd.displayName = 'ScrollViewEnd';
58
+ ScrollViewEnd.propTypes = {
59
+ onScrollEnd: _propTypes.default.func.isRequired,
60
+ onScroll: _propTypes.default.func
61
+ };
62
+ ScrollViewEnd.defaultProps = {
63
+ onScroll: null
64
+ };
65
+ var _default = ScrollViewEnd;
66
+ exports.default = _default;
@@ -0,0 +1,41 @@
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 _ScrollView = _interopRequireDefault(require("react-native-web/dist/cjs/exports/ScrollView"));
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
+ /**
23
+ * A wrapper for ScrollView that supports an `onScrollEnd` function.
24
+ *
25
+ * React Native has two scroll end handlers, we want to treat them both the same.
26
+ */
27
+ const ScrollViewEnd = /*#__PURE__*/(0, _react.forwardRef)(({
28
+ onScrollEnd,
29
+ ...props
30
+ }, ref) => /*#__PURE__*/(0, _jsxRuntime.jsx)(_ScrollView.default, {
31
+ ref: ref,
32
+ ...props,
33
+ onScrollEndDrag: onScrollEnd,
34
+ onMomentumScrollEnd: onScrollEnd
35
+ }));
36
+ ScrollViewEnd.displayName = 'ScrollViewEnd';
37
+ ScrollViewEnd.propTypes = {
38
+ onScrollEnd: _propTypes.default.func.isRequired
39
+ };
40
+ var _default = ScrollViewEnd;
41
+ exports.default = _default;
@@ -0,0 +1,117 @@
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 _ThemeProvider = require("../ThemeProvider");
13
+
14
+ var _StackView = _interopRequireDefault(require("../StackView"));
15
+
16
+ var _utils = require("../utils");
17
+
18
+ var _HorizontalScroll = _interopRequireWildcard(require("./HorizontalScroll"));
19
+
20
+ var _TabsItem = _interopRequireDefault(require("./TabsItem"));
21
+
22
+ var _TabsScrollButton = _interopRequireDefault(require("./TabsScrollButton"));
23
+
24
+ var _itemPositions = require("./itemPositions");
25
+
26
+ var _jsxRuntime = require("react/jsx-runtime");
27
+
28
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
29
+
30
+ 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); }
31
+
32
+ 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; }
33
+
34
+ /**
35
+ * Tabs renders a horizontally-scrolling menu of selectable buttons which may link
36
+ * to a page or control what content is displayed on this page.
37
+ */
38
+ const Tabs = ({
39
+ tokens,
40
+ itemTokens,
41
+ scrollButtonTokens,
42
+ variant,
43
+ value,
44
+ initialValue,
45
+ onChange,
46
+ items = []
47
+ }) => {
48
+ const {
49
+ space,
50
+ ...themeTokens
51
+ } = (0, _ThemeProvider.useThemeTokens)('Tabs', tokens, variant);
52
+ const {
53
+ currentValue,
54
+ setValue
55
+ } = (0, _utils.useInputValue)({
56
+ value,
57
+ initialValue,
58
+ onChange
59
+ });
60
+ const [itemPositions, isPositioningReady] = (0, _itemPositions.useItemPositions)();
61
+ (0, _utils.useHash)((0, _react.useCallback)(hash => {
62
+ const hashItem = hash && items.find(({
63
+ href
64
+ }) => hash === href);
65
+ const hashId = hashItem && (hashItem.id || hashItem.label);
66
+ if (hashId) setTimeout(setValue(hashId), 500);
67
+ }, [items, setValue]), isPositioningReady);
68
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_HorizontalScroll.default, {
69
+ ScrollButton: _TabsScrollButton.default,
70
+ itemPositions: itemPositions,
71
+ tokens: (0, _HorizontalScroll.selectHorizontalScrollTokens)(themeTokens),
72
+ scrollButtonTokens: scrollButtonTokens,
73
+ accessibilityRole: "tablist",
74
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_StackView.default, {
75
+ space: space,
76
+ direction: "row",
77
+ children: items.map(({
78
+ href,
79
+ label,
80
+ id
81
+ }, index) => {
82
+ const itemId = id !== null && id !== void 0 ? id : label;
83
+ const isSelected = Boolean(currentValue && currentValue === itemId);
84
+
85
+ const handlePress = () => setValue(itemId);
86
+
87
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_TabsItem.default, {
88
+ href: href,
89
+ variant: variant,
90
+ tokens: itemTokens,
91
+ onPress: handlePress,
92
+ selected: isSelected,
93
+ itemPositions: itemPositions,
94
+ index: index,
95
+ children: label
96
+ }, itemId);
97
+ })
98
+ })
99
+ });
100
+ };
101
+
102
+ Tabs.propTypes = {
103
+ items: _propTypes.default.arrayOf(_propTypes.default.shape({
104
+ href: _propTypes.default.string,
105
+ label: _propTypes.default.string,
106
+ id: _propTypes.default.string
107
+ })),
108
+ value: _propTypes.default.string,
109
+ initialValue: _propTypes.default.string,
110
+ onChange: _propTypes.default.func,
111
+ tokens: (0, _utils.getTokensPropType)('Tabs'),
112
+ itemTokens: (0, _utils.getTokensPropType)('TabsItem'),
113
+ scrollButtonTokens: (0, _utils.getTokensPropType)('TabsScrollButton'),
114
+ variant: _utils.variantProp.propType
115
+ };
116
+ var _default = Tabs;
117
+ exports.default = _default;
@@ -0,0 +1,234 @@
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 _Platform = _interopRequireDefault(require("react-native-web/dist/cjs/exports/Platform"));
13
+
14
+ var _Pressable = _interopRequireDefault(require("react-native-web/dist/cjs/exports/Pressable"));
15
+
16
+ var _StyleSheet = _interopRequireDefault(require("react-native-web/dist/cjs/exports/StyleSheet"));
17
+
18
+ var _Text = _interopRequireDefault(require("react-native-web/dist/cjs/exports/Text"));
19
+
20
+ var _View = _interopRequireDefault(require("react-native-web/dist/cjs/exports/View"));
21
+
22
+ var _rn = _interopRequireDefault(require("@telus-uds/system-themes/src/tokens/rn"));
23
+
24
+ var _ThemeProvider = require("../ThemeProvider");
25
+
26
+ var _utils = require("../utils");
27
+
28
+ var _Spacer = _interopRequireDefault(require("../Spacer"));
29
+
30
+ var _itemPositions = require("./itemPositions");
31
+
32
+ var _jsxRuntime = require("react/jsx-runtime");
33
+
34
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
35
+
36
+ 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); }
37
+
38
+ 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; }
39
+
40
+ const selectHighlightBarStyles = ({
41
+ highlightColor,
42
+ highlightBarBorderRadius = 0,
43
+ highlightBarBorderWidth = 0,
44
+ highlightBarHeight = 0
45
+ }) => ({
46
+ backgroundColor: highlightColor,
47
+ borderColor: highlightColor,
48
+ height: highlightBarHeight + highlightBarBorderWidth * 2,
49
+ borderRadius: highlightBarBorderRadius,
50
+ borderWidth: highlightBarBorderWidth,
51
+ bottom: -1 * (highlightBarHeight + highlightBarBorderWidth),
52
+ left: -1 * highlightBarBorderWidth,
53
+ right: -1 * highlightBarBorderWidth,
54
+ zIndex: 1 + highlightBarBorderWidth
55
+ });
56
+
57
+ const selectHighlightTriangleStyles = ({
58
+ highlightColor,
59
+ highlightTriangleSize
60
+ }) => ({
61
+ container: {
62
+ bottom: 0 - highlightTriangleSize * 2
63
+ },
64
+ triangle: {
65
+ height: 0,
66
+ width: 0,
67
+ borderWidth: highlightTriangleSize,
68
+ borderTopColor: highlightColor,
69
+ borderBottomColor: _rn.default.color.transparent,
70
+ borderLeftColor: _rn.default.color.transparent,
71
+ borderRightColor: _rn.default.color.transparent
72
+ }
73
+ });
74
+
75
+ const selectContainerStyles = ({
76
+ backgroundColor,
77
+ borderColor,
78
+ borderWidth = 0,
79
+ borderRadius,
80
+ paddingHorizontal = 0,
81
+ paddingVertical = 0
82
+ }) => ({
83
+ backgroundColor,
84
+ borderColor,
85
+ borderWidth,
86
+ borderRadius,
87
+ paddingHorizontal: paddingHorizontal - borderWidth,
88
+ paddingVertical: paddingVertical - borderWidth
89
+ });
90
+ /**
91
+ * Item within a Tabs component representing one tab of content. May be rendered as a link
92
+ * or as a "menuitem" button depending on whether 'href' is passed.
93
+ *
94
+ * This is rendered automatically by `Tabs` and isn't intended be used directly.
95
+ */
96
+
97
+
98
+ const TabsItem = ({
99
+ onPress,
100
+ href,
101
+ variant,
102
+ tokens,
103
+ selected,
104
+ itemPositions,
105
+ index,
106
+ children,
107
+ accessibilityRole = href ? 'link' : 'tab',
108
+ accessibilityState = _Platform.default.OS === 'web' && accessibilityRole === 'link' ? // Web links can't be aria-selected but can be aria-current
109
+ {
110
+ current: selected ? 'page' : false
111
+ } : {
112
+ selected
113
+ },
114
+ ...rest
115
+ }) => {
116
+ const getTokens = (0, _ThemeProvider.useThemeTokensCallback)('TabsItem', tokens, variant);
117
+
118
+ const resolveTokens = pressableState => (0, _utils.resolvePressableTokens)(getTokens, pressableState, {
119
+ selected
120
+ });
121
+
122
+ const getPressableStyle = pressableState => {
123
+ const {
124
+ maxWidth
125
+ } = resolveTokens(pressableState);
126
+ return [{
127
+ maxWidth
128
+ }, _Platform.default.OS === 'web' && {
129
+ outline: 'none'
130
+ }];
131
+ };
132
+
133
+ const handleLayout = (0, _itemPositions.getItemPositionLayoutHandler)(itemPositions.positions, index); // On press, update the selection, call any press handler, and open any href in platform-appropriate way
134
+
135
+ const openHref = href && _utils.linkProps.handleHref({
136
+ href
137
+ });
138
+
139
+ const handlePress = onPress || openHref ? () => {
140
+ if (onPress) onPress();
141
+ if (openHref) openHref();
142
+ } : undefined;
143
+ const a11y = {
144
+ accessibilityRole,
145
+ accessibilityState,
146
+ ..._utils.a11yProps.select(rest)
147
+ };
148
+ (0, _react.useEffect)(() => {
149
+ // If this is selected while off-screen, scroll it into view
150
+ if (selected) {
151
+ const position = itemPositions.positions[index];
152
+ const scrollEnd = itemPositions.scrollOffset + itemPositions.containerWidth;
153
+
154
+ if ( // is off the right edge, or
155
+ scrollEnd && (position === null || position === void 0 ? void 0 : position.end) > scrollEnd || // is off the left edge
156
+ typeof (position === null || position === void 0 ? void 0 : position.start) === 'number' && position.start < itemPositions.scrollOffset) {
157
+ itemPositions.scrollTo(position.start);
158
+ }
159
+ } // itemPositions is a ref object so this should only re-run when `selected` (or `index`) change
160
+
161
+ }, [selected, index, itemPositions]);
162
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Pressable.default, {
163
+ onPress: handlePress,
164
+ href: href,
165
+ style: getPressableStyle,
166
+ onLayout: handleLayout,
167
+ ...a11y,
168
+ children: pressableState => {
169
+ const {
170
+ space,
171
+ textAlign,
172
+ ...themeTokens
173
+ } = resolveTokens(pressableState);
174
+ const hasHighlightBar = Boolean(themeTokens.highlightBarHeight);
175
+ const highlightBarStyle = hasHighlightBar && selectHighlightBarStyles(themeTokens);
176
+ const hasHighlightTriangle = Boolean(themeTokens.highlightTriangleSize);
177
+ const highlightTriangleStyle = hasHighlightTriangle && selectHighlightTriangleStyles(themeTokens);
178
+ const containerStyles = selectContainerStyles(themeTokens);
179
+ const textStyles = (0, _ThemeProvider.applyTextStyles)({ ...(0, _utils.selectTokens)('Typography', themeTokens),
180
+ textAlign
181
+ });
182
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_View.default, {
183
+ style: staticStyles.container,
184
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
185
+ style: containerStyles,
186
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Text.default, {
187
+ style: textStyles,
188
+ children: children
189
+ })
190
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Spacer.default, {
191
+ space: space
192
+ }), hasHighlightBar && /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
193
+ style: [staticStyles.absolute, highlightBarStyle]
194
+ }), hasHighlightTriangle && /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
195
+ style: [staticStyles.absolute, highlightTriangleStyle.container],
196
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
197
+ style: highlightTriangleStyle.triangle
198
+ })
199
+ })]
200
+ });
201
+ }
202
+ });
203
+ };
204
+
205
+ TabsItem.propTypes = { ..._utils.a11yProps.propTypes,
206
+ tokens: (0, _utils.getTokensPropType)('TabsItem'),
207
+ variant: _utils.variantProp.propType,
208
+ onPress: _propTypes.default.func,
209
+ href: _propTypes.default.string,
210
+ index: _propTypes.default.number,
211
+ selected: _propTypes.default.bool,
212
+ itemPositions: _itemPositions.itemPositionsPropType,
213
+ children: _propTypes.default.string
214
+ };
215
+
216
+ const staticStyles = _StyleSheet.default.create({
217
+ center: {
218
+ alignItems: 'center'
219
+ },
220
+ absolute: {
221
+ position: 'absolute',
222
+ alignItems: 'center',
223
+ left: 0,
224
+ right: 0
225
+ },
226
+ container: {
227
+ flexGrow: 1,
228
+ alignItems: 'center',
229
+ justifyContent: 'center'
230
+ }
231
+ });
232
+
233
+ var _default = TabsItem;
234
+ exports.default = _default;