@telus-uds/components-base 0.0.2-prerelease.7 → 0.0.2-prerelease.8

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 (349) hide show
  1. package/.ultra.cache.json +1 -1
  2. package/CHANGELOG.md +27 -0
  3. package/__fixtures__/Accessible.js +33 -0
  4. package/__fixtures__/Accessible.native.js +32 -0
  5. package/__fixtures__/testTheme.js +429 -29
  6. package/__tests__/ActivityIndicator/ActivityIndicator.test.jsx +1 -1
  7. package/__tests__/Button/ButtonGroup.test.jsx +2 -2
  8. package/__tests__/Checkbox/CheckboxGroup.test.jsx +247 -0
  9. package/__tests__/Icon/Icon.test.jsx +3 -3
  10. package/__tests__/Modal/Modal.test.jsx +47 -0
  11. package/__tests__/Notification/Notification.test.jsx +20 -0
  12. package/__tests__/Pagination/Pagination.test.jsx +2 -2
  13. package/__tests__/Progress/Progress.test.jsx +79 -0
  14. package/__tests__/Radio/RadioGroup.test.jsx +221 -0
  15. package/__tests__/RadioCard/RadioCard.test.jsx +87 -0
  16. package/__tests__/RadioCard/RadioCardGroup.test.jsx +247 -0
  17. package/__tests__/Search/Search.test.jsx +72 -0
  18. package/__tests__/Skeleton/Skeleton.test.jsx +1 -1
  19. package/__tests__/StepTracker/StepTracker.test.jsx +94 -0
  20. package/__tests__/Tabs/Tabs.test.jsx +200 -0
  21. package/__tests__/Tags/Tags.test.jsx +1 -1
  22. package/__tests__/utils/input.test.js +58 -0
  23. package/__tests__/utils/useCopy.test.js +14 -3
  24. package/babel.config.js +20 -0
  25. package/jest.config.js +1 -1
  26. package/lib/A11yInfoProvider/index.js +54 -26
  27. package/lib/A11yText/index.js +37 -14
  28. package/lib/ActivityIndicator/Spinner.js +78 -0
  29. package/lib/ActivityIndicator/Spinner.native.js +121 -87
  30. package/lib/ActivityIndicator/index.js +28 -12
  31. package/lib/ActivityIndicator/shared.js +27 -12
  32. package/lib/BaseProvider/index.js +34 -11
  33. package/lib/Box/Box.js +54 -31
  34. package/lib/Box/index.js +13 -2
  35. package/lib/Button/Button.js +32 -11
  36. package/lib/Button/ButtonBase.js +85 -78
  37. package/lib/Button/ButtonGroup.js +94 -70
  38. package/lib/Button/ButtonLink.js +38 -15
  39. package/lib/Button/index.js +31 -4
  40. package/lib/Button/propTypes.js +32 -9
  41. package/lib/Card/Card.js +36 -41
  42. package/lib/Card/CardBase.js +78 -0
  43. package/lib/Card/PressableCardBase.js +137 -0
  44. package/lib/Card/index.js +40 -2
  45. package/lib/Checkbox/Checkbox.js +139 -103
  46. package/lib/Checkbox/CheckboxGroup.js +231 -0
  47. package/lib/Checkbox/CheckboxInput.js +74 -0
  48. package/lib/Checkbox/CheckboxInput.native.js +9 -1
  49. package/lib/Checkbox/index.js +21 -2
  50. package/lib/Divider/Divider.js +50 -24
  51. package/lib/Divider/index.js +13 -2
  52. package/lib/ExpandCollapse/Accordion.js +20 -7
  53. package/lib/ExpandCollapse/Control.js +50 -27
  54. package/lib/ExpandCollapse/ExpandCollapse.js +41 -24
  55. package/lib/ExpandCollapse/Panel.js +75 -37
  56. package/lib/ExpandCollapse/index.js +25 -7
  57. package/lib/Feedback/Feedback.js +69 -40
  58. package/lib/Feedback/index.js +13 -2
  59. package/lib/Fieldset/Fieldset.js +160 -0
  60. package/lib/Fieldset/FieldsetContainer.js +41 -0
  61. package/lib/Fieldset/FieldsetContainer.native.js +33 -0
  62. package/lib/Fieldset/Legend.js +33 -0
  63. package/lib/Fieldset/Legend.native.js +43 -0
  64. package/lib/Fieldset/cssReset.js +21 -0
  65. package/lib/Fieldset/index.js +13 -0
  66. package/lib/FlexGrid/Col/Col.js +67 -38
  67. package/lib/FlexGrid/Col/index.js +13 -2
  68. package/lib/FlexGrid/FlexGrid.js +70 -45
  69. package/lib/FlexGrid/Row/Row.js +48 -27
  70. package/lib/FlexGrid/Row/index.js +13 -2
  71. package/lib/FlexGrid/helpers/index.js +9 -1
  72. package/lib/FlexGrid/index.js +13 -2
  73. package/lib/FlexGrid/providers/GutterContext.js +15 -3
  74. package/lib/Icon/Icon.js +46 -44
  75. package/lib/Icon/IconText.js +49 -21
  76. package/lib/Icon/index.js +31 -4
  77. package/lib/InputLabel/InputLabel.js +70 -36
  78. package/lib/InputLabel/LabelContent.js +31 -0
  79. package/lib/InputLabel/LabelContent.native.js +9 -1
  80. package/lib/InputLabel/index.js +13 -2
  81. package/lib/InputSupports/InputSupports.js +62 -48
  82. package/lib/InputSupports/index.js +13 -2
  83. package/lib/InputSupports/propTypes.js +19 -8
  84. package/lib/InputSupports/useInputSupports.js +41 -0
  85. package/lib/Link/ChevronLink.js +33 -16
  86. package/lib/Link/InlinePressable.js +50 -0
  87. package/lib/Link/InlinePressable.native.js +34 -11
  88. package/lib/Link/Link.js +25 -9
  89. package/lib/Link/LinkBase.js +87 -57
  90. package/lib/Link/TextButton.js +32 -13
  91. package/lib/Link/index.js +39 -5
  92. package/lib/List/List.js +51 -23
  93. package/lib/List/ListItem.js +70 -40
  94. package/lib/List/index.js +13 -2
  95. package/lib/Modal/Modal.js +226 -0
  96. package/lib/Modal/dictionary.js +16 -0
  97. package/lib/Modal/index.js +13 -0
  98. package/lib/Notification/Notification.js +200 -0
  99. package/lib/Notification/dictionary.js +15 -0
  100. package/lib/Notification/index.js +13 -0
  101. package/lib/Pagination/PageButton.js +47 -25
  102. package/lib/Pagination/Pagination.js +70 -40
  103. package/lib/Pagination/SideButton.js +63 -37
  104. package/lib/Pagination/dictionary.js +9 -2
  105. package/lib/Pagination/index.js +13 -2
  106. package/lib/Pagination/usePagination.js +12 -2
  107. package/lib/Progress/Progress.js +99 -0
  108. package/lib/Progress/ProgressBar.js +146 -0
  109. package/lib/Progress/ProgressBarBackground.js +57 -0
  110. package/lib/Progress/index.js +16 -0
  111. package/lib/Radio/Radio.js +110 -109
  112. package/lib/Radio/RadioButton.js +141 -0
  113. package/lib/Radio/RadioGroup.js +233 -0
  114. package/lib/Radio/RadioInput.js +76 -0
  115. package/lib/Radio/RadioInput.native.js +9 -1
  116. package/lib/Radio/index.js +21 -2
  117. package/lib/RadioCard/RadioCard.js +240 -0
  118. package/lib/RadioCard/RadioCardGroup.js +251 -0
  119. package/lib/RadioCard/index.js +21 -0
  120. package/lib/Search/Search.js +243 -0
  121. package/lib/Search/dictionary.js +19 -0
  122. package/lib/Search/index.js +13 -0
  123. package/lib/Select/Group.js +33 -0
  124. package/lib/Select/Group.native.js +16 -5
  125. package/lib/Select/Item.js +29 -0
  126. package/lib/Select/Item.native.js +14 -4
  127. package/lib/Select/Picker.js +79 -0
  128. package/lib/Select/Picker.native.js +52 -24
  129. package/lib/Select/Select.js +110 -82
  130. package/lib/Select/index.js +19 -6
  131. package/lib/SideNav/Item.js +54 -33
  132. package/lib/SideNav/ItemContent.js +41 -15
  133. package/lib/SideNav/ItemsGroup.js +46 -27
  134. package/lib/SideNav/SideNav.js +92 -69
  135. package/lib/SideNav/index.js +15 -1
  136. package/lib/Skeleton/Skeleton.js +55 -37
  137. package/lib/Skeleton/index.js +13 -2
  138. package/lib/Skeleton/skeleton.constant.js +12 -0
  139. package/lib/Skeleton/skeletonWebAnimation.js +27 -0
  140. package/lib/Skeleton/useSkeletonNativeAnimation.js +37 -0
  141. package/lib/Spacer/Spacer.js +31 -12
  142. package/lib/Spacer/index.js +13 -2
  143. package/lib/StackView/StackView.js +49 -27
  144. package/lib/StackView/StackWrap.js +33 -10
  145. package/lib/StackView/StackWrap.native.js +13 -2
  146. package/lib/StackView/StackWrapBox.js +46 -24
  147. package/lib/StackView/StackWrapGap.js +43 -22
  148. package/lib/StackView/common.js +19 -4
  149. package/lib/StackView/getStackedContent.js +49 -19
  150. package/lib/StackView/index.js +29 -5
  151. package/lib/StepTracker/Step.js +245 -0
  152. package/lib/StepTracker/StepTracker.js +197 -0
  153. package/lib/StepTracker/dictionary.js +17 -0
  154. package/lib/StepTracker/index.js +13 -0
  155. package/lib/Tabs/HorizontalScroll.js +199 -0
  156. package/lib/Tabs/ScrollViewEnd.js +66 -0
  157. package/lib/Tabs/ScrollViewEnd.native.js +41 -0
  158. package/lib/Tabs/Tabs.js +117 -0
  159. package/lib/Tabs/TabsItem.js +234 -0
  160. package/lib/Tabs/TabsScrollButton.js +121 -0
  161. package/lib/Tabs/dictionary.js +18 -0
  162. package/lib/Tabs/index.js +13 -0
  163. package/lib/Tabs/itemPositions.js +128 -0
  164. package/lib/Tags/Tags.js +130 -97
  165. package/lib/Tags/index.js +13 -2
  166. package/lib/TextInput/TextArea.js +51 -24
  167. package/lib/TextInput/TextInput.js +40 -19
  168. package/lib/TextInput/TextInputBase.js +78 -55
  169. package/lib/TextInput/index.js +23 -3
  170. package/lib/TextInput/propTypes.js +18 -7
  171. package/lib/ThemeProvider/ThemeProvider.js +38 -14
  172. package/lib/ThemeProvider/index.js +61 -6
  173. package/lib/ThemeProvider/useSetTheme.js +14 -5
  174. package/lib/ThemeProvider/useTheme.js +13 -4
  175. package/lib/ThemeProvider/useThemeTokens.js +32 -16
  176. package/lib/ThemeProvider/utils/index.js +31 -2
  177. package/lib/ThemeProvider/utils/styles.js +52 -16
  178. package/lib/ThemeProvider/utils/theme-tokens.js +94 -16
  179. package/lib/ToggleSwitch/ToggleSwitch.js +75 -51
  180. package/lib/ToggleSwitch/index.js +13 -2
  181. package/lib/Tooltip/{Backdrop.web.js → Backdrop.js} +22 -18
  182. package/lib/Tooltip/Backdrop.native.js +39 -15
  183. package/lib/Tooltip/Tooltip.js +112 -70
  184. package/lib/Tooltip/dictionary.js +9 -2
  185. package/lib/Tooltip/getTooltipPosition.js +9 -1
  186. package/lib/Tooltip/index.js +13 -2
  187. package/lib/TooltipButton/TooltipButton.js +57 -38
  188. package/lib/TooltipButton/index.js +13 -2
  189. package/lib/Typography/Typography.js +57 -27
  190. package/lib/Typography/index.js +13 -2
  191. package/lib/ViewportProvider/ViewportProvider.js +34 -13
  192. package/lib/ViewportProvider/index.js +28 -3
  193. package/lib/ViewportProvider/useViewport.js +15 -3
  194. package/lib/ViewportProvider/useViewportListener.js +24 -10
  195. package/lib/index.js +509 -33
  196. package/lib/utils/a11y/index.js +18 -1
  197. package/lib/utils/a11y/textSize.js +23 -7
  198. package/lib/utils/animation/index.js +15 -2
  199. package/lib/utils/animation/useVerticalExpandAnimation.js +28 -11
  200. package/lib/utils/children.js +87 -0
  201. package/lib/utils/index.js +163 -10
  202. package/lib/utils/info/index.js +18 -6
  203. package/lib/utils/info/platform/index.js +19 -7
  204. package/lib/utils/info/platform/platform.android.js +8 -1
  205. package/lib/utils/info/platform/platform.ios.js +8 -1
  206. package/lib/utils/info/platform/platform.js +8 -0
  207. package/lib/utils/info/platform/platform.native.js +8 -1
  208. package/lib/utils/info/versions.js +15 -4
  209. package/lib/utils/input.js +51 -33
  210. package/lib/utils/pressability.js +38 -10
  211. package/lib/utils/propTypes.js +217 -125
  212. package/lib/utils/useCopy.js +40 -5
  213. package/lib/utils/useHash.js +48 -0
  214. package/lib/utils/useHash.native.js +15 -0
  215. package/lib/utils/useResponsiveProp.js +21 -9
  216. package/lib/utils/useSpacingScale.js +21 -9
  217. package/lib/utils/useUniqueId.js +13 -4
  218. package/package.json +7 -6
  219. package/release-context.json +4 -4
  220. package/src/ActivityIndicator/{Spinner.web.jsx → Spinner.jsx} +0 -0
  221. package/src/Box/Box.jsx +11 -4
  222. package/src/Button/Button.jsx +3 -2
  223. package/src/Button/ButtonBase.jsx +27 -36
  224. package/src/Button/ButtonGroup.jsx +2 -2
  225. package/src/Button/ButtonLink.jsx +3 -2
  226. package/src/Button/propTypes.js +12 -2
  227. package/src/Card/Card.jsx +4 -30
  228. package/src/Card/CardBase.jsx +57 -0
  229. package/src/Card/PressableCardBase.jsx +112 -0
  230. package/src/Card/index.js +3 -0
  231. package/src/Checkbox/Checkbox.jsx +10 -11
  232. package/src/Checkbox/CheckboxGroup.jsx +196 -0
  233. package/src/Checkbox/{CheckboxInput.web.jsx → CheckboxInput.jsx} +0 -0
  234. package/src/Checkbox/index.js +2 -0
  235. package/src/ExpandCollapse/Control.jsx +1 -1
  236. package/src/Feedback/Feedback.jsx +1 -1
  237. package/src/Fieldset/Fieldset.jsx +129 -0
  238. package/src/Fieldset/FieldsetContainer.jsx +22 -0
  239. package/src/Fieldset/FieldsetContainer.native.jsx +16 -0
  240. package/src/Fieldset/Legend.jsx +16 -0
  241. package/src/Fieldset/Legend.native.jsx +22 -0
  242. package/src/Fieldset/cssReset.js +14 -0
  243. package/src/Fieldset/index.js +3 -0
  244. package/src/Icon/Icon.jsx +14 -23
  245. package/src/Icon/IconText.jsx +2 -2
  246. package/src/Icon/index.js +2 -2
  247. package/src/InputLabel/InputLabel.jsx +9 -2
  248. package/src/InputLabel/{LabelContent.web.jsx → LabelContent.jsx} +0 -0
  249. package/src/InputSupports/InputSupports.jsx +7 -18
  250. package/src/InputSupports/useInputSupports.js +30 -0
  251. package/src/Link/{InlinePressable.web.jsx → InlinePressable.jsx} +0 -0
  252. package/src/Link/LinkBase.jsx +14 -12
  253. package/src/Modal/Modal.jsx +185 -0
  254. package/src/Modal/dictionary.js +9 -0
  255. package/src/Modal/index.js +3 -0
  256. package/src/Notification/Notification.jsx +149 -0
  257. package/src/Notification/dictionary.js +8 -0
  258. package/src/Notification/index.js +3 -0
  259. package/src/Progress/Progress.jsx +77 -0
  260. package/src/Progress/ProgressBar.jsx +110 -0
  261. package/src/Progress/ProgressBarBackground.jsx +34 -0
  262. package/src/Progress/index.js +6 -0
  263. package/src/Radio/Radio.jsx +19 -56
  264. package/src/Radio/RadioButton.jsx +131 -0
  265. package/src/Radio/RadioGroup.jsx +198 -0
  266. package/src/Radio/{RadioInput.web.jsx → RadioInput.jsx} +0 -0
  267. package/src/Radio/index.js +2 -0
  268. package/src/RadioCard/RadioCard.jsx +191 -0
  269. package/src/RadioCard/RadioCardGroup.jsx +211 -0
  270. package/src/RadioCard/index.js +5 -0
  271. package/src/Search/Search.jsx +204 -0
  272. package/src/Search/dictionary.js +12 -0
  273. package/src/Search/index.js +3 -0
  274. package/src/Select/{Group.web.jsx → Group.jsx} +0 -0
  275. package/src/Select/{Item.web.jsx → Item.jsx} +0 -0
  276. package/src/Select/{Picker.web.jsx → Picker.jsx} +0 -0
  277. package/src/Select/Select.jsx +12 -22
  278. package/src/SideNav/Item.jsx +2 -2
  279. package/src/Skeleton/Skeleton.jsx +17 -20
  280. package/src/Skeleton/skeleton.constant.js +3 -0
  281. package/src/Skeleton/skeletonWebAnimation.js +13 -0
  282. package/src/Skeleton/useSkeletonNativeAnimation.js +27 -0
  283. package/src/StackView/StackView.jsx +10 -3
  284. package/src/StackView/StackWrap.jsx +9 -1
  285. package/src/StackView/StackWrapBox.jsx +4 -3
  286. package/src/StackView/StackWrapGap.jsx +3 -3
  287. package/src/StackView/getStackedContent.jsx +8 -2
  288. package/src/StepTracker/Step.jsx +202 -0
  289. package/src/StepTracker/StepTracker.jsx +163 -0
  290. package/src/StepTracker/dictionary.js +10 -0
  291. package/src/StepTracker/index.js +3 -0
  292. package/src/Tabs/HorizontalScroll.jsx +165 -0
  293. package/src/Tabs/ScrollViewEnd.jsx +53 -0
  294. package/src/Tabs/ScrollViewEnd.native.jsx +24 -0
  295. package/src/Tabs/Tabs.jsx +89 -0
  296. package/src/Tabs/TabsItem.jsx +204 -0
  297. package/src/Tabs/TabsScrollButton.jsx +100 -0
  298. package/src/Tabs/dictionary.js +11 -0
  299. package/src/Tabs/index.js +3 -0
  300. package/src/Tabs/itemPositions.js +101 -0
  301. package/src/Tags/Tags.jsx +2 -1
  302. package/src/TextInput/TextInputBase.jsx +12 -22
  303. package/src/ThemeProvider/useThemeTokens.js +2 -2
  304. package/src/ThemeProvider/utils/styles.js +18 -5
  305. package/src/ThemeProvider/utils/theme-tokens.js +46 -5
  306. package/src/ToggleSwitch/ToggleSwitch.jsx +2 -3
  307. package/src/Tooltip/{Backdrop.web.jsx → Backdrop.jsx} +0 -0
  308. package/src/Tooltip/Tooltip.jsx +1 -1
  309. package/src/TooltipButton/TooltipButton.jsx +23 -27
  310. package/src/Typography/Typography.jsx +6 -5
  311. package/src/index.js +20 -2
  312. package/src/utils/children.jsx +66 -0
  313. package/src/utils/index.js +3 -0
  314. package/src/utils/info/platform/platform.js +1 -0
  315. package/src/utils/info/versions.js +2 -2
  316. package/src/utils/input.js +20 -12
  317. package/src/utils/pressability.js +4 -0
  318. package/src/utils/propTypes.js +98 -34
  319. package/src/utils/useCopy.js +30 -4
  320. package/src/utils/useHash.js +34 -0
  321. package/src/utils/useHash.native.js +6 -0
  322. package/stories/A11yText/A11yText.stories.jsx +4 -8
  323. package/stories/Checkbox/Checkbox.stories.jsx +24 -1
  324. package/stories/Icon/Icon.stories.jsx +6 -5
  325. package/stories/Modal/Modal.stories.jsx +29 -0
  326. package/stories/Notification/Notification.stories.jsx +82 -0
  327. package/stories/Progress/Progress.stories.jsx +93 -0
  328. package/stories/Radio/Radio.stories.jsx +23 -36
  329. package/stories/RadioCard/RadioCard.stories.jsx +98 -0
  330. package/stories/Search/Search.stories.jsx +16 -0
  331. package/stories/StepTracker/StepTracker.stories.jsx +71 -0
  332. package/stories/Tabs/Tabs.stories.jsx +97 -0
  333. package/stories/{platform-supports.web.jsx → platform-supports.jsx} +0 -0
  334. package/__fixtures__/accessible.icon.svg +0 -6
  335. package/babel.config.json +0 -8
  336. package/lib/ActivityIndicator/Spinner.web.js +0 -55
  337. package/lib/Checkbox/CheckboxInput.web.js +0 -57
  338. package/lib/InputLabel/LabelContent.web.js +0 -17
  339. package/lib/Link/InlinePressable.web.js +0 -32
  340. package/lib/Radio/RadioInput.web.js +0 -59
  341. package/lib/Select/Group.web.js +0 -18
  342. package/lib/Select/Item.web.js +0 -15
  343. package/lib/Select/Picker.web.js +0 -63
  344. package/lib/config/svgr-icons-web.js +0 -9
  345. package/lib/config/svgr-icons.js +0 -52
  346. package/lib/utils/info/platform/platform.web.js +0 -1
  347. package/src/config/svgr-icons-web.js +0 -11
  348. package/src/config/svgr-icons.js +0 -46
  349. package/src/utils/info/platform/platform.web.js +0 -1
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _react = _interopRequireDefault(require("react"));
9
+
10
+ var _propTypes = _interopRequireDefault(require("prop-types"));
11
+
12
+ var _Pressable = _interopRequireDefault(require("react-native-web/dist/cjs/exports/Pressable"));
13
+
14
+ var _StyleSheet = _interopRequireDefault(require("react-native-web/dist/cjs/exports/StyleSheet"));
15
+
16
+ var _ThemeProvider = require("../ThemeProvider");
17
+
18
+ var _utils = require("../utils");
19
+
20
+ var _Icon = _interopRequireDefault(require("../Icon"));
21
+
22
+ var _Typography = _interopRequireDefault(require("../Typography"));
23
+
24
+ var _dictionary = _interopRequireDefault(require("./dictionary"));
25
+
26
+ var _jsxRuntime = require("react/jsx-runtime");
27
+
28
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
29
+
30
+ const selectButtonStyles = ({
31
+ borderRadius,
32
+ backgroundColor,
33
+ borderColor,
34
+ borderWidth,
35
+ padding
36
+ }, direction) => [staticStyles.absolute, staticStyles[direction], {
37
+ borderRadius,
38
+ backgroundColor,
39
+ borderColor,
40
+ borderWidth,
41
+ padding
42
+ }];
43
+ /**
44
+ * Button within a Tabs component showing users that content is available to the left or
45
+ * right, scrolling a screen's worth of content left or right when pressed.
46
+ *
47
+ * This is rendered automatically by `Tabs` and isn't intended be used directly.
48
+ *
49
+ * @TODO when IconButton is complete and stable revisit this and update interaction state styles.
50
+ */
51
+
52
+
53
+ const TabsScrollButton = ({
54
+ direction = 'next',
55
+ icon,
56
+ onPress,
57
+ offset,
58
+ variant,
59
+ tokens,
60
+ copy
61
+ }) => {
62
+ const getTokens = (0, _ThemeProvider.useThemeTokensCallback)('TabsScrollButton', tokens, variant);
63
+
64
+ const resolveButtonTokens = pressableState => (0, _utils.resolvePressableTokens)(getTokens, pressableState);
65
+
66
+ const getPressableStyle = pressableState => [selectButtonStyles(resolveButtonTokens(pressableState), direction), {
67
+ marginTop: -1 * (offset || 0)
68
+ }];
69
+
70
+ const getCopy = (0, _utils.useCopy)({
71
+ dictionary: _dictionary.default,
72
+ copy
73
+ });
74
+ const label = direction === 'previous' ? getCopy('previousText') : getCopy('nextText');
75
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Pressable.default, {
76
+ style: getPressableStyle,
77
+ onPress: onPress,
78
+ accessibilityLabel: label,
79
+ accessibilityRole: "button" // For keyboard-tab or screenreader-swipe navigation, users can just go through all items
80
+ ,
81
+ ..._utils.a11yProps.nonFocusableProps,
82
+ children: pressableState => {
83
+ const iconTokens = (0, _utils.selectTokens)('Icon', resolveButtonTokens(pressableState), 'icon');
84
+ return icon ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_Icon.default, {
85
+ icon: icon,
86
+ tokens: iconTokens
87
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_Typography.default, {
88
+ tokens: {
89
+ fontSize: iconTokens.size,
90
+ lineHeight: 1,
91
+ color: iconTokens.color
92
+ },
93
+ children: direction === 'next' ? '→' : '←'
94
+ });
95
+ }
96
+ });
97
+ };
98
+
99
+ const staticStyles = _StyleSheet.default.create({
100
+ absolute: {
101
+ position: 'absolute'
102
+ },
103
+ previous: {
104
+ left: 0
105
+ },
106
+ next: {
107
+ right: 0
108
+ }
109
+ });
110
+
111
+ TabsScrollButton.propTypes = {
112
+ tokens: (0, _utils.getTokensPropType)('TabsScrollButton'),
113
+ variant: _utils.variantProp.propType,
114
+ copy: _utils.copyPropTypes,
115
+ direction: _propTypes.default.oneOf(['previous', 'next']),
116
+ offset: _propTypes.default.number,
117
+ icon: _propTypes.default.elementType,
118
+ onPress: _propTypes.default.func.isRequired
119
+ };
120
+ var _default = TabsScrollButton;
121
+ exports.default = _default;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _default = {
8
+ en: {
9
+ // English text from TDS Community `Tabs`
10
+ previousLabel: 'Move menu to the left',
11
+ nextLabel: 'Move menu to the right'
12
+ },
13
+ fr: {
14
+ previousLabel: 'Déplacer le menu vers la gauche',
15
+ nextLabel: 'Déplacer le menu vers la droite'
16
+ }
17
+ };
18
+ exports.default = _default;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _Tabs = _interopRequireDefault(require("./Tabs"));
9
+
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+
12
+ var _default = _Tabs.default;
13
+ exports.default = _default;
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.itemPositionsPropType = exports.useItemPositions = exports.getItemPositionLayoutHandler = exports.getItemPositionScrollTarget = void 0;
7
+
8
+ var _react = require("react");
9
+
10
+ var _propTypes = _interopRequireDefault(require("prop-types"));
11
+
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+
14
+ // Utilities to assist scrolling a parent so that it snaps neatly to an appropriate child.
15
+
16
+ /**
17
+ * @typedef ItemPositionPosition
18
+ * @property {number} [ItemPositionItem.start] - optional theme scale variants e.g. compact, wide
19
+ * @property {number} [ItemPositionItem.end] - optional override to force a particular pixel size
20
+ *
21
+ * @typedef {Object.<number, ItemPositionItem>} ItemPositionPositions - ref object of start/end coordinates
22
+ *
23
+ * @typedef ItemPositions
24
+ * @property {number} ItemPositions.contentWidth - current width of potentially-overflowing content inside scrollable
25
+ * @property {number} ItemPositions.containerWidth - current width of non-overflowing outer scroll container
26
+ * @property {number} ItemPositions.scrollOffset - current x position of the left edge of the visible section of the scrollable content
27
+ * @property {ItemPositionPositions} ItemPositions.positions - `{ start, end }` coordinates of each scrollable content item, by index
28
+ * @property {(targetX: number) => void)} ItemPositions.scrollTo - function to scroll to a co-ordinate, applying scrolling logic
29
+ * @property {() => void)} ItemPositions.setIsReady - function to call when layout has been calculated and itemPositions data is ready
30
+ */
31
+
32
+ /**
33
+ * Takes a desired scroll target coordinate and returns a valid coordinate
34
+ * that, when not scrolling to one end or another, snaps to the start of an item,
35
+ * making sure any "scroll back" button doesn't overlap the first item.
36
+ *
37
+ * @param {number} x - the intended coordinate to scroll to
38
+ * @param {number} scrollMax - the highest posible coordinate to scroll to
39
+ * @param {ItemPositionPositions} positions - positions list from `useItemPositions` ref
40
+ * @param {number} [buttonClearance] - offset to allow space for a button
41
+ * @returns {number}
42
+ */
43
+ const getItemPositionScrollTarget = (x, scrollMax, positions, buttonClearance = 0) => {
44
+ if (x <= 0) return 0;
45
+ if (x >= scrollMax) return scrollMax; // If not scrolling all the way to the start or end, stop
46
+ // where the first item is not coverred by the scroll previous button
47
+
48
+ const targetItem = Object.values(positions).find(({
49
+ start,
50
+ end
51
+ }) => start <= x && end > x); // If there's no target item we're landing at a gap between items
52
+
53
+ const targetX = targetItem ? targetItem.start : x;
54
+ return Math.max(0, targetX - buttonClearance);
55
+ };
56
+ /**
57
+ * Returns a handler for React Native's `onLayout` which updates the values of
58
+ * the ref object returned from `useItemPositions`.
59
+ *
60
+ * @param {ItemPositionPositions} positions
61
+ * @param {number} index
62
+ * @returns {function}
63
+ */
64
+
65
+
66
+ exports.getItemPositionScrollTarget = getItemPositionScrollTarget;
67
+
68
+ const getItemPositionLayoutHandler = (positions, index) => {
69
+ const handleLayout = ({
70
+ nativeEvent: {
71
+ layout: {
72
+ width,
73
+ x
74
+ }
75
+ }
76
+ }) => {
77
+ /* eslint-disable-next-line no-param-reassign */
78
+ positions[index] = {
79
+ start: x,
80
+ end: x + width
81
+ };
82
+ };
83
+
84
+ return handleLayout;
85
+ };
86
+ /**
87
+ * Wrapper for `useRef` which gives a mutable object in which item start/end coordinates,
88
+ * scrollTo method and content/container widths may be set and updated without causing a re-render.
89
+ *
90
+ * @returns {[ItemPositions, isReady: bool]} tuple array of:
91
+ * - current ref object `{ positions, contentWidth, containerWidth, scrollOffset, scrollTo, setIsReady }`
92
+ * - boolean that updates to `true` (causing a re-render) after the first time `setIsReady` is called
93
+ */
94
+
95
+
96
+ exports.getItemPositionLayoutHandler = getItemPositionLayoutHandler;
97
+
98
+ const useItemPositions = () => {
99
+ const [isReady, setIsReady] = (0, _react.useState)(false);
100
+ return [(0, _react.useRef)({
101
+ positions: {},
102
+ scrollTo: () => {},
103
+ contentWidth: 0,
104
+ containerWidth: 0,
105
+ scrollOffset: 0,
106
+ setIsReady
107
+ }).current, isReady];
108
+ };
109
+ /**
110
+ * PropType for the ref object returned by `useItemPositions`
111
+ */
112
+
113
+
114
+ exports.useItemPositions = useItemPositions;
115
+
116
+ const itemPositionsPropType = _propTypes.default.exact({
117
+ positions: _propTypes.default.objectOf(_propTypes.default.shape({
118
+ start: _propTypes.default.number,
119
+ end: _propTypes.default.number
120
+ })),
121
+ scrollTo: _propTypes.default.func,
122
+ contentWidth: _propTypes.default.number,
123
+ containerWidth: _propTypes.default.number,
124
+ scrollOffset: _propTypes.default.number,
125
+ setIsReady: _propTypes.default.func
126
+ });
127
+
128
+ exports.itemPositionsPropType = itemPositionsPropType;
package/lib/Tags/Tags.js CHANGED
@@ -1,13 +1,39 @@
1
- import React from 'react';
2
- import PropTypes from 'prop-types';
3
- import { Platform, Text, View } from 'react-native';
4
- import ButtonBase from '../Button/ButtonBase';
5
- import { StackWrap, getStackedContent } from '../StackView';
6
- import { useViewport } from '../ViewportProvider';
7
- import { useThemeTokens, useThemeTokensCallback } from '../ThemeProvider';
8
- import { a11yProps, pressProps, variantProp, getTokensPropType, selectTokens } from '../utils/propTypes';
9
- import { useMultipleInputValues } from '../utils/input';
10
- import { getPressHandlersWithArgs } from '../utils/pressability';
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _react = _interopRequireDefault(require("react"));
9
+
10
+ var _propTypes = _interopRequireDefault(require("prop-types"));
11
+
12
+ var _Platform = _interopRequireDefault(require("react-native-web/dist/cjs/exports/Platform"));
13
+
14
+ var _Text = _interopRequireDefault(require("react-native-web/dist/cjs/exports/Text"));
15
+
16
+ var _View = _interopRequireDefault(require("react-native-web/dist/cjs/exports/View"));
17
+
18
+ var _ButtonBase = _interopRequireDefault(require("../Button/ButtonBase"));
19
+
20
+ var _Icon = _interopRequireDefault(require("../Icon"));
21
+
22
+ var _StackView = require("../StackView");
23
+
24
+ var _ViewportProvider = require("../ViewportProvider");
25
+
26
+ var _ThemeProvider = require("../ThemeProvider");
27
+
28
+ var _propTypes2 = require("../utils/propTypes");
29
+
30
+ var _input = require("../utils/input");
31
+
32
+ var _pressability = require("../utils/pressability");
33
+
34
+ var _jsxRuntime = require("react/jsx-runtime");
35
+
36
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
37
 
12
38
  const selectIconTextTokens = ({
13
39
  icon,
@@ -30,7 +56,7 @@ const selectIconTextTokens = ({
30
56
  borderRadius: iconBorderRadius,
31
57
  alignSelf: iconAlignSelf,
32
58
  padding: iconPadding,
33
- ...Platform.select({
59
+ ..._Platform.default.select({
34
60
  // TODO: https://github.com/telus/universal-design-system/issues/487
35
61
  web: {
36
62
  transition: 'color 200ms, background 200ms'
@@ -55,149 +81,155 @@ const Tags = ({
55
81
  onChange,
56
82
  readOnly = false,
57
83
  inactive = false,
58
- accessibilityRole = Platform.select({
84
+ accessibilityRole = _Platform.default.select({
59
85
  web: 'group',
60
86
  default: 'none'
61
87
  }),
62
88
  ...rest
63
89
  }) => {
64
- const viewport = useViewport();
65
- const themeTokens = useThemeTokens('Tags', tokens, variant, {
90
+ const viewport = (0, _ViewportProvider.useViewport)();
91
+ const themeTokens = (0, _ThemeProvider.useThemeTokens)('Tags', tokens, variant, {
66
92
  viewport
67
93
  });
68
- const stackTokens = selectTokens('StackView', themeTokens);
94
+ const stackTokens = (0, _propTypes2.selectTokens)('StackView', themeTokens);
69
95
  const {
70
96
  direction,
71
97
  space
72
98
  } = themeTokens;
73
- const getItemTokens = useThemeTokensCallback('TagsItem', tokens, variant);
99
+ const getItemTokens = (0, _ThemeProvider.useThemeTokensCallback)('TagsItem', tokens, variant);
74
100
 
75
- const getButtonTokens = buttonState => selectTokens('Button', getItemTokens(buttonState));
101
+ const getButtonTokens = buttonState => (0, _propTypes2.selectTokens)('Button', getItemTokens(buttonState));
76
102
 
77
103
  const {
78
104
  currentValues,
79
105
  toggleOneValue
80
- } = useMultipleInputValues({
106
+ } = (0, _input.useMultipleInputValues)({
81
107
  initialValues,
82
108
  values,
83
109
  maxValues,
84
110
  onChange,
85
111
  readOnly
86
112
  });
87
- const a11y = a11yProps.select({
113
+
114
+ const a11y = _propTypes2.a11yProps.select({
88
115
  accessibilityRole,
89
116
  ...rest
90
117
  });
118
+
91
119
  const itemA11yRole = 'checkbox';
92
- return /*#__PURE__*/React.createElement(StackWrap, Object.assign({}, a11y, {
120
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_StackView.StackWrap, { ...a11y,
93
121
  space: space,
94
122
  direction: direction,
95
- tokens: stackTokens
96
- }), items.map(({
97
- label,
98
- id = label,
99
- accessibilityLabel
100
- }, index) => {
101
- const isSelected = currentValues.includes(id); // Pass an object of relevant component state as first argument for any passed-in press handlers
102
-
103
- const pressHandlers = getPressHandlersWithArgs(rest, [{
104
- id,
123
+ tokens: stackTokens,
124
+ children: items.map(({
105
125
  label,
106
- currentValues
107
- }]);
108
-
109
- const handlePress = () => {
110
- if (pressHandlers.onPress) pressHandlers.onPress();
111
- toggleOneValue(id);
112
- };
113
-
114
- const itemA11y = {
115
- accessibilityState: {
116
- checked: isSelected
117
- },
118
- accessibilityRole: itemA11yRole,
119
- accessibilityLabel,
120
- ...a11yProps.getPositionInSet(items.length, index)
121
- };
122
- return /*#__PURE__*/React.createElement(ButtonBase, Object.assign({
123
- key: id
124
- }, pressHandlers, {
125
- onPress: handlePress,
126
- tokens: getButtonTokens,
127
- selected: isSelected,
128
- inactive: inactive
129
- }, itemA11y), ({
130
- textStyles,
131
- ...buttonState
132
- }) => {
133
- // TODO: once Icon/IconButton designs are stable, see if this sort of styling around
134
- // an icon should go in Icon itself, or possibly via an IconText token set. Related issues:
135
- // - Icon: https://github.com/telus/universal-design-system/issues/327
136
- // - IconButton: https://github.com/telus/universal-design-system/issues/281
137
- // - Token sets: https://github.com/telus/universal-design-system/issues/782
138
- const itemTokens = getItemTokens(buttonState);
139
- const {
140
- iconTokens,
141
- iconPosition,
142
- iconSpace,
143
- iconWrapperStyle,
144
- icon: IconComponent
145
- } = selectIconTextTokens(itemTokens);
146
- const iconContent = IconComponent ? /*#__PURE__*/React.createElement(View, {
147
- style: iconWrapperStyle
148
- }, /*#__PURE__*/React.createElement(IconComponent, {
149
- tokens: iconTokens
150
- })) : null;
151
- const textContent = /*#__PURE__*/React.createElement(Text, {
152
- style: textStyles
153
- }, label);
154
- return getStackedContent(iconPosition === 'left' ? [iconContent, textContent] : [textContent, iconContent], {
155
- space: iconSpace,
156
- direction: 'row'
157
- });
158
- });
159
- }));
126
+ id = label,
127
+ accessibilityLabel
128
+ }, index) => {
129
+ const isSelected = currentValues.includes(id); // Pass an object of relevant component state as first argument for any passed-in press handlers
130
+
131
+ const pressHandlers = (0, _pressability.getPressHandlersWithArgs)(rest, [{
132
+ id,
133
+ label,
134
+ currentValues
135
+ }]);
136
+
137
+ const handlePress = () => {
138
+ if (pressHandlers.onPress) pressHandlers.onPress();
139
+ toggleOneValue(id);
140
+ };
141
+
142
+ const itemA11y = {
143
+ accessibilityState: {
144
+ checked: isSelected
145
+ },
146
+ accessibilityRole: itemA11yRole,
147
+ accessibilityLabel,
148
+ ..._propTypes2.a11yProps.getPositionInSet(items.length, index)
149
+ };
150
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_ButtonBase.default, { ...pressHandlers,
151
+ onPress: handlePress,
152
+ tokens: getButtonTokens,
153
+ selected: isSelected,
154
+ inactive: inactive,
155
+ ...itemA11y,
156
+ children: ({
157
+ textStyles,
158
+ ...buttonState
159
+ }) => {
160
+ // TODO: once Icon/IconButton designs are stable, see if this sort of styling around
161
+ // an icon should go in Icon itself, or possibly via an IconText token set. Related issues:
162
+ // - Icon: https://github.com/telus/universal-design-system/issues/327
163
+ // - IconButton: https://github.com/telus/universal-design-system/issues/281
164
+ // - Token sets: https://github.com/telus/universal-design-system/issues/782
165
+ const itemTokens = getItemTokens(buttonState);
166
+ const {
167
+ iconTokens,
168
+ iconPosition,
169
+ iconSpace,
170
+ iconWrapperStyle,
171
+ icon: IconComponent
172
+ } = selectIconTextTokens(itemTokens);
173
+ const iconContent = IconComponent ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
174
+ style: iconWrapperStyle,
175
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Icon.default, {
176
+ icon: IconComponent,
177
+ tokens: iconTokens
178
+ })
179
+ }) : null;
180
+ const textContent = /*#__PURE__*/(0, _jsxRuntime.jsx)(_Text.default, {
181
+ style: textStyles,
182
+ children: label
183
+ });
184
+ return (0, _StackView.getStackedContent)(iconPosition === 'left' ? [iconContent, textContent] : [textContent, iconContent], {
185
+ space: iconSpace,
186
+ direction: 'row'
187
+ });
188
+ }
189
+ }, id);
190
+ })
191
+ });
160
192
  };
161
193
 
162
- Tags.propTypes = { ...a11yProps.propTypes,
163
- ...pressProps.propTypes,
164
- tokens: getTokensPropType('Tags'),
165
- variant: variantProp.propType,
194
+ Tags.propTypes = { ..._propTypes2.a11yProps.propTypes,
195
+ ..._propTypes2.pressProps.propTypes,
196
+ tokens: (0, _propTypes2.getTokensPropType)('Tags'),
197
+ variant: _propTypes2.variantProp.propType,
166
198
 
167
199
  /**
168
200
  * If provided, sets a maximum number of items a user may select at once.
169
201
  */
170
- maxValues: PropTypes.number,
202
+ maxValues: _propTypes.default.number,
171
203
 
172
204
  /**
173
205
  * The options a user may select
174
206
  */
175
- items: PropTypes.arrayOf(PropTypes.shape({
207
+ items: _propTypes.default.arrayOf(_propTypes.default.shape({
176
208
  /**
177
209
  * The text displayed to the user in the button, describing this option,
178
210
  * passed to the button as its child.
179
211
  */
180
- label: PropTypes.string.isRequired,
212
+ label: _propTypes.default.string.isRequired,
181
213
 
182
214
  /**
183
215
  * An optional accessibility label may be passed to ButtonGroup Buttons
184
216
  * which is applied as normal for a React Native accessibilityLabel prop.
185
217
  */
186
- accessibilityLabel: PropTypes.string,
218
+ accessibilityLabel: _propTypes.default.string,
187
219
 
188
220
  /**
189
221
  * An optional unique string may be provided to identify this option,
190
222
  * which will be used in code and passed to any onChange function.
191
223
  * If not provided, the label is used.
192
224
  */
193
- id: PropTypes.string
225
+ id: _propTypes.default.string
194
226
  })),
195
227
 
196
228
  /**
197
229
  * If provided, this function is called when the current selection is changed
198
230
  * and is passed an array of the `id`s of all currently selected `items`.
199
231
  */
200
- onChange: PropTypes.func,
232
+ onChange: _propTypes.default.func,
201
233
 
202
234
  /**
203
235
  * If the selected item(s) in the button group are to be controlled externally by
@@ -205,13 +237,14 @@ Tags.propTypes = { ...a11yProps.propTypes,
205
237
  * Passing an array for "values" makes the ButtonGroup a "controlled" component that
206
238
  * expects its state to be handled via `onChange` and so doesn't handle it itself.
207
239
  */
208
- values: PropTypes.arrayOf(PropTypes.string),
240
+ values: _propTypes.default.arrayOf(_propTypes.default.string),
209
241
 
210
242
  /**
211
243
  * If `values` is not passed, making the ButtonGroup an "uncontrolled" component
212
244
  * managing its own selected state, a default set of selections may be provided.
213
245
  * Changing the `initialValues` does not change the user's selections.
214
246
  */
215
- initialValues: PropTypes.arrayOf(PropTypes.string)
247
+ initialValues: _propTypes.default.arrayOf(_propTypes.default.string)
216
248
  };
217
- export default Tags;
249
+ var _default = Tags;
250
+ exports.default = _default;
package/lib/Tags/index.js CHANGED
@@ -1,2 +1,13 @@
1
- import Tags from './Tags';
2
- export default Tags;
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _Tags = _interopRequireDefault(require("./Tags"));
9
+
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+
12
+ var _default = _Tags.default;
13
+ exports.default = _default;