@telus-uds/components-base 0.0.2-prerelease.1 → 0.0.2-prerelease.10

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 (475) hide show
  1. package/.ultra.cache.json +1 -0
  2. package/CHANGELOG.md +120 -0
  3. package/README.md +4 -2
  4. package/__fixtures__/Accessible.js +33 -0
  5. package/__fixtures__/Accessible.native.js +32 -0
  6. package/__fixtures__/test-utils.js +25 -0
  7. package/__fixtures__/testTheme.js +1146 -145
  8. package/__tests__/ActivityIndicator/ActivityIndicator.test.jsx +1 -1
  9. package/__tests__/Box/Box.test.jsx +81 -58
  10. package/__tests__/Button/ButtonBase.test.jsx +3 -32
  11. package/__tests__/Button/ButtonGroup.test.jsx +6 -7
  12. package/__tests__/Card/Card.test.jsx +63 -0
  13. package/__tests__/Checkbox/Checkbox.test.jsx +94 -0
  14. package/__tests__/Checkbox/CheckboxGroup.test.jsx +246 -0
  15. package/__tests__/Divider/Divider.test.jsx +26 -5
  16. package/__tests__/ExpandCollapse/ExpandCollapse.test.jsx +2 -2
  17. package/__tests__/Feedback/Feedback.test.jsx +42 -0
  18. package/__tests__/FlexGrid/Col.test.jsx +5 -0
  19. package/__tests__/HorizontalScroll/HorizontalScroll.test.jsx +164 -0
  20. package/__tests__/Icon/Icon.test.jsx +3 -3
  21. package/__tests__/IconButton/IconButton.test.jsx +52 -0
  22. package/__tests__/InputSupports/InputSupports.test.jsx +50 -0
  23. package/__tests__/Link/LinkBase.test.jsx +0 -14
  24. package/__tests__/List/List.test.jsx +60 -0
  25. package/__tests__/Modal/Modal.test.jsx +47 -0
  26. package/__tests__/Notification/Notification.test.jsx +20 -0
  27. package/__tests__/Pagination/Pagination.test.jsx +160 -0
  28. package/__tests__/Progress/Progress.test.jsx +79 -0
  29. package/__tests__/Radio/Radio.test.jsx +87 -0
  30. package/__tests__/Radio/RadioGroup.test.jsx +220 -0
  31. package/__tests__/RadioCard/RadioCard.test.jsx +87 -0
  32. package/__tests__/RadioCard/RadioCardGroup.test.jsx +246 -0
  33. package/__tests__/Search/Search.test.jsx +73 -0
  34. package/__tests__/Select/Select.test.jsx +94 -0
  35. package/__tests__/Skeleton/Skeleton.test.jsx +61 -0
  36. package/__tests__/Spacer/Spacer.test.jsx +63 -0
  37. package/__tests__/StackView/StackView.test.jsx +216 -0
  38. package/__tests__/StackView/StackWrap.test.jsx +47 -0
  39. package/__tests__/StackView/getStackedContent.test.jsx +295 -0
  40. package/__tests__/StepTracker/StepTracker.test.jsx +94 -0
  41. package/__tests__/Tabs/Tabs.test.jsx +40 -0
  42. package/__tests__/Tags/Tags.test.jsx +327 -0
  43. package/__tests__/TextInput/TextArea.test.jsx +35 -0
  44. package/__tests__/TextInput/TextInputBase.test.jsx +125 -0
  45. package/__tests__/ThemeProvider/ThemeProvider.test.jsx +77 -0
  46. package/__tests__/ThemeProvider/useThemeTokens.test.jsx +14 -8
  47. package/__tests__/ThemeProvider/utils/theme-tokens.test.js +41 -0
  48. package/__tests__/ToggleSwitch/ToggleSwitch.test.jsx +3 -2
  49. package/__tests__/Tooltip/Tooltip.test.jsx +65 -0
  50. package/__tests__/Tooltip/getTooltipPosition.test.js +79 -0
  51. package/__tests__/utils/children.test.jsx +128 -0
  52. package/__tests__/utils/input.test.js +59 -1
  53. package/__tests__/utils/useCopy.test.js +42 -0
  54. package/__tests__/utils/useResponsiveProp.test.jsx +202 -0
  55. package/__tests__/utils/useSpacingScale.test.jsx +273 -0
  56. package/__tests__/utils/useUniqueId.test.js +31 -0
  57. package/babel.config.js +18 -1
  58. package/jest.config.js +19 -9
  59. package/lib/A11yInfoProvider/index.js +54 -26
  60. package/lib/A11yText/index.js +36 -15
  61. package/lib/ActivityIndicator/Spinner.js +78 -0
  62. package/lib/ActivityIndicator/Spinner.native.js +121 -87
  63. package/lib/ActivityIndicator/index.js +28 -12
  64. package/lib/ActivityIndicator/shared.js +27 -12
  65. package/lib/BaseProvider/index.js +34 -11
  66. package/lib/Box/Box.js +214 -87
  67. package/lib/Box/index.js +13 -2
  68. package/lib/Button/Button.js +37 -11
  69. package/lib/Button/ButtonBase.js +119 -110
  70. package/lib/Button/ButtonGroup.js +98 -101
  71. package/lib/Button/ButtonLink.js +40 -14
  72. package/lib/Button/index.js +31 -4
  73. package/lib/Button/propTypes.js +32 -9
  74. package/lib/Card/Card.js +98 -0
  75. package/lib/Card/CardBase.js +78 -0
  76. package/lib/Card/PressableCardBase.js +137 -0
  77. package/lib/Card/index.js +40 -0
  78. package/lib/Checkbox/Checkbox.js +344 -0
  79. package/lib/Checkbox/CheckboxGroup.js +231 -0
  80. package/lib/Checkbox/CheckboxInput.js +74 -0
  81. package/lib/Checkbox/CheckboxInput.native.js +14 -0
  82. package/lib/Checkbox/index.js +21 -0
  83. package/lib/Divider/Divider.js +80 -18
  84. package/lib/Divider/index.js +13 -2
  85. package/lib/ExpandCollapse/Accordion.js +19 -8
  86. package/lib/ExpandCollapse/Control.js +50 -29
  87. package/lib/ExpandCollapse/ExpandCollapse.js +41 -24
  88. package/lib/ExpandCollapse/Panel.js +77 -41
  89. package/lib/ExpandCollapse/index.js +25 -7
  90. package/lib/Feedback/Feedback.js +161 -0
  91. package/lib/Feedback/index.js +13 -0
  92. package/lib/Fieldset/Fieldset.js +160 -0
  93. package/lib/Fieldset/FieldsetContainer.js +41 -0
  94. package/lib/Fieldset/FieldsetContainer.native.js +33 -0
  95. package/lib/Fieldset/Legend.js +33 -0
  96. package/lib/Fieldset/Legend.native.js +43 -0
  97. package/lib/Fieldset/cssReset.js +21 -0
  98. package/lib/Fieldset/index.js +13 -0
  99. package/lib/FlexGrid/Col/Col.js +66 -39
  100. package/lib/FlexGrid/Col/index.js +13 -2
  101. package/lib/FlexGrid/FlexGrid.js +70 -47
  102. package/lib/FlexGrid/Row/Row.js +47 -28
  103. package/lib/FlexGrid/Row/index.js +13 -2
  104. package/lib/FlexGrid/helpers/index.js +9 -1
  105. package/lib/FlexGrid/index.js +13 -2
  106. package/lib/FlexGrid/providers/GutterContext.js +15 -3
  107. package/lib/HorizontalScroll/HorizontalScroll.js +199 -0
  108. package/lib/HorizontalScroll/HorizontalScrollButton.js +121 -0
  109. package/lib/HorizontalScroll/ScrollViewEnd.js +66 -0
  110. package/lib/HorizontalScroll/ScrollViewEnd.native.js +41 -0
  111. package/lib/HorizontalScroll/dictionary.js +18 -0
  112. package/lib/HorizontalScroll/index.js +35 -0
  113. package/lib/HorizontalScroll/itemPositions.js +128 -0
  114. package/lib/Icon/Icon.js +52 -47
  115. package/lib/Icon/IconText.js +100 -0
  116. package/lib/Icon/index.js +31 -3
  117. package/lib/IconButton/IconButton.js +135 -0
  118. package/lib/IconButton/index.js +13 -0
  119. package/lib/InputLabel/InputLabel.js +145 -0
  120. package/lib/InputLabel/LabelContent.js +39 -0
  121. package/lib/InputLabel/LabelContent.native.js +16 -0
  122. package/lib/InputLabel/index.js +13 -0
  123. package/lib/InputSupports/InputSupports.js +104 -0
  124. package/lib/InputSupports/index.js +13 -0
  125. package/lib/InputSupports/propTypes.js +66 -0
  126. package/lib/InputSupports/useInputSupports.js +41 -0
  127. package/lib/Link/ChevronLink.js +56 -16
  128. package/lib/Link/InlinePressable.js +50 -0
  129. package/lib/Link/InlinePressable.native.js +101 -0
  130. package/lib/Link/Link.js +29 -14
  131. package/lib/Link/LinkBase.js +120 -147
  132. package/lib/Link/TextButton.js +46 -18
  133. package/lib/Link/index.js +39 -4
  134. package/lib/List/List.js +80 -0
  135. package/lib/List/ListItem.js +239 -0
  136. package/lib/List/index.js +13 -0
  137. package/lib/Modal/Modal.js +226 -0
  138. package/lib/Modal/dictionary.js +16 -0
  139. package/lib/Modal/index.js +13 -0
  140. package/lib/Notification/Notification.js +215 -0
  141. package/lib/Notification/dictionary.js +15 -0
  142. package/lib/Notification/index.js +13 -0
  143. package/lib/Pagination/PageButton.js +89 -0
  144. package/lib/Pagination/Pagination.js +148 -0
  145. package/lib/Pagination/SideButton.js +124 -0
  146. package/lib/Pagination/dictionary.js +25 -0
  147. package/lib/Pagination/index.js +13 -0
  148. package/lib/Pagination/usePagination.js +80 -0
  149. package/lib/Progress/Progress.js +99 -0
  150. package/lib/Progress/ProgressBar.js +146 -0
  151. package/lib/Progress/ProgressBarBackground.js +57 -0
  152. package/lib/Progress/index.js +16 -0
  153. package/lib/Radio/Radio.js +292 -0
  154. package/lib/Radio/RadioButton.js +141 -0
  155. package/lib/Radio/RadioGroup.js +234 -0
  156. package/lib/Radio/RadioInput.js +76 -0
  157. package/lib/Radio/RadioInput.native.js +14 -0
  158. package/lib/Radio/index.js +21 -0
  159. package/lib/RadioCard/RadioCard.js +243 -0
  160. package/lib/RadioCard/RadioCardGroup.js +251 -0
  161. package/lib/RadioCard/index.js +21 -0
  162. package/lib/Search/Search.js +250 -0
  163. package/lib/Search/dictionary.js +19 -0
  164. package/lib/Search/index.js +13 -0
  165. package/lib/Select/Group.js +33 -0
  166. package/lib/Select/Group.native.js +25 -0
  167. package/lib/Select/Item.js +29 -0
  168. package/lib/Select/Item.native.js +19 -0
  169. package/lib/Select/Picker.js +79 -0
  170. package/lib/Select/Picker.native.js +127 -0
  171. package/lib/Select/Select.js +341 -0
  172. package/lib/Select/index.js +19 -0
  173. package/lib/SideNav/Item.js +54 -35
  174. package/lib/SideNav/ItemContent.js +41 -15
  175. package/lib/SideNav/ItemsGroup.js +53 -34
  176. package/lib/SideNav/SideNav.js +94 -70
  177. package/lib/SideNav/index.js +15 -1
  178. package/lib/Skeleton/Skeleton.js +137 -0
  179. package/lib/Skeleton/index.js +13 -0
  180. package/lib/Skeleton/skeleton.constant.js +12 -0
  181. package/lib/Skeleton/skeletonWebAnimation.js +27 -0
  182. package/lib/Skeleton/useSkeletonNativeAnimation.js +37 -0
  183. package/lib/Spacer/Spacer.js +117 -0
  184. package/lib/Spacer/index.js +13 -0
  185. package/lib/StackView/StackView.js +130 -0
  186. package/lib/StackView/StackWrap.js +55 -0
  187. package/lib/StackView/StackWrap.native.js +14 -0
  188. package/lib/StackView/StackWrapBox.js +120 -0
  189. package/lib/StackView/StackWrapGap.js +71 -0
  190. package/lib/StackView/common.js +47 -0
  191. package/lib/StackView/getStackedContent.js +141 -0
  192. package/lib/StackView/index.js +29 -0
  193. package/lib/StepTracker/Step.js +245 -0
  194. package/lib/StepTracker/StepTracker.js +197 -0
  195. package/lib/StepTracker/dictionary.js +17 -0
  196. package/lib/StepTracker/index.js +13 -0
  197. package/lib/Tabs/Tabs.js +118 -0
  198. package/lib/Tabs/TabsItem.js +237 -0
  199. package/lib/Tabs/index.js +13 -0
  200. package/lib/Tags/Tags.js +250 -0
  201. package/lib/Tags/index.js +13 -0
  202. package/lib/TextInput/TextArea.js +109 -0
  203. package/lib/TextInput/TextInput.js +75 -0
  204. package/lib/TextInput/TextInputBase.js +255 -0
  205. package/lib/TextInput/index.js +23 -0
  206. package/lib/TextInput/propTypes.js +42 -0
  207. package/lib/ThemeProvider/ThemeProvider.js +46 -18
  208. package/lib/ThemeProvider/index.js +61 -6
  209. package/lib/ThemeProvider/useSetTheme.js +19 -5
  210. package/lib/ThemeProvider/useTheme.js +13 -4
  211. package/lib/ThemeProvider/useThemeTokens.js +111 -16
  212. package/lib/ThemeProvider/utils/index.js +31 -2
  213. package/lib/ThemeProvider/utils/styles.js +52 -16
  214. package/lib/ThemeProvider/utils/theme-tokens.js +154 -19
  215. package/lib/ToggleSwitch/ToggleSwitch.js +87 -93
  216. package/lib/ToggleSwitch/index.js +13 -2
  217. package/lib/Tooltip/Backdrop.js +56 -0
  218. package/lib/Tooltip/Backdrop.native.js +59 -0
  219. package/lib/Tooltip/Tooltip.js +357 -0
  220. package/lib/Tooltip/dictionary.js +15 -0
  221. package/lib/Tooltip/getTooltipPosition.js +172 -0
  222. package/lib/Tooltip/index.js +13 -0
  223. package/lib/TooltipButton/TooltipButton.js +83 -0
  224. package/lib/TooltipButton/index.js +13 -0
  225. package/lib/Typography/Typography.js +58 -49
  226. package/lib/Typography/index.js +13 -2
  227. package/lib/ViewportProvider/ViewportProvider.js +46 -0
  228. package/lib/ViewportProvider/index.js +22 -38
  229. package/lib/ViewportProvider/useViewport.js +15 -0
  230. package/lib/ViewportProvider/useViewportListener.js +57 -0
  231. package/lib/index.js +539 -17
  232. package/lib/utils/a11y/index.js +18 -0
  233. package/lib/utils/a11y/textSize.js +49 -0
  234. package/lib/utils/animation/index.js +15 -2
  235. package/lib/utils/animation/useVerticalExpandAnimation.js +28 -11
  236. package/lib/utils/children.js +134 -0
  237. package/lib/utils/index.js +163 -3
  238. package/lib/utils/info/index.js +19 -0
  239. package/lib/utils/info/platform/index.js +23 -0
  240. package/lib/utils/info/platform/platform.android.js +8 -0
  241. package/lib/utils/info/platform/platform.ios.js +8 -0
  242. package/lib/utils/info/platform/platform.js +8 -0
  243. package/lib/utils/info/platform/platform.native.js +11 -0
  244. package/lib/utils/info/versions.js +16 -0
  245. package/lib/utils/input.js +62 -38
  246. package/lib/utils/pressability.js +120 -0
  247. package/lib/utils/propTypes.js +360 -109
  248. package/lib/utils/useCopy.js +51 -0
  249. package/lib/utils/useHash.js +52 -0
  250. package/lib/utils/useHash.native.js +15 -0
  251. package/lib/utils/useResponsiveProp.js +59 -0
  252. package/lib/utils/useSpacingScale.js +135 -0
  253. package/lib/utils/useUniqueId.js +21 -0
  254. package/package.json +15 -14
  255. package/release-context.json +4 -4
  256. package/src/ActivityIndicator/{Spinner.web.jsx → Spinner.jsx} +0 -0
  257. package/src/Box/Box.jsx +180 -78
  258. package/src/Button/Button.jsx +9 -5
  259. package/src/Button/ButtonBase.jsx +74 -87
  260. package/src/Button/ButtonGroup.jsx +26 -43
  261. package/src/Button/ButtonLink.jsx +14 -4
  262. package/src/Button/propTypes.js +12 -2
  263. package/src/Card/Card.jsx +75 -0
  264. package/src/Card/CardBase.jsx +57 -0
  265. package/src/Card/PressableCardBase.jsx +112 -0
  266. package/src/Card/index.js +6 -0
  267. package/src/Checkbox/Checkbox.jsx +274 -0
  268. package/src/Checkbox/CheckboxGroup.jsx +196 -0
  269. package/src/Checkbox/CheckboxInput.jsx +55 -0
  270. package/src/Checkbox/CheckboxInput.native.jsx +6 -0
  271. package/src/Checkbox/index.js +5 -0
  272. package/src/Divider/Divider.jsx +38 -3
  273. package/src/ExpandCollapse/Control.jsx +3 -4
  274. package/src/ExpandCollapse/Panel.jsx +3 -3
  275. package/src/Feedback/Feedback.jsx +108 -0
  276. package/src/Feedback/index.js +3 -0
  277. package/src/Fieldset/Fieldset.jsx +129 -0
  278. package/src/Fieldset/FieldsetContainer.jsx +22 -0
  279. package/src/Fieldset/FieldsetContainer.native.jsx +16 -0
  280. package/src/Fieldset/Legend.jsx +16 -0
  281. package/src/Fieldset/Legend.native.jsx +22 -0
  282. package/src/Fieldset/cssReset.js +14 -0
  283. package/src/Fieldset/index.js +3 -0
  284. package/src/FlexGrid/Col/Col.jsx +4 -2
  285. package/src/HorizontalScroll/HorizontalScroll.jsx +165 -0
  286. package/src/HorizontalScroll/HorizontalScrollButton.jsx +108 -0
  287. package/src/HorizontalScroll/ScrollViewEnd.jsx +53 -0
  288. package/src/HorizontalScroll/ScrollViewEnd.native.jsx +24 -0
  289. package/src/HorizontalScroll/dictionary.js +11 -0
  290. package/src/HorizontalScroll/index.js +17 -0
  291. package/src/HorizontalScroll/itemPositions.js +101 -0
  292. package/src/Icon/Icon.jsx +23 -27
  293. package/src/Icon/IconText.jsx +63 -0
  294. package/src/Icon/index.js +3 -2
  295. package/src/IconButton/IconButton.jsx +107 -0
  296. package/src/IconButton/index.js +3 -0
  297. package/src/InputLabel/InputLabel.jsx +124 -0
  298. package/src/InputLabel/LabelContent.jsx +23 -0
  299. package/src/InputLabel/LabelContent.native.jsx +6 -0
  300. package/src/InputLabel/index.js +3 -0
  301. package/src/InputSupports/InputSupports.jsx +75 -0
  302. package/src/InputSupports/index.js +3 -0
  303. package/src/InputSupports/propTypes.js +44 -0
  304. package/src/InputSupports/useInputSupports.js +30 -0
  305. package/src/Link/ChevronLink.jsx +28 -7
  306. package/src/Link/InlinePressable.jsx +37 -0
  307. package/src/Link/InlinePressable.native.jsx +73 -0
  308. package/src/Link/Link.jsx +17 -13
  309. package/src/Link/LinkBase.jsx +71 -146
  310. package/src/Link/TextButton.jsx +25 -11
  311. package/src/Link/index.js +2 -1
  312. package/src/List/List.jsx +47 -0
  313. package/src/List/ListItem.jsx +184 -0
  314. package/src/List/index.js +3 -0
  315. package/src/Modal/Modal.jsx +185 -0
  316. package/src/Modal/dictionary.js +9 -0
  317. package/src/Modal/index.js +3 -0
  318. package/src/Notification/Notification.jsx +161 -0
  319. package/src/Notification/dictionary.js +8 -0
  320. package/src/Notification/index.js +3 -0
  321. package/src/Pagination/PageButton.jsx +70 -0
  322. package/src/Pagination/Pagination.jsx +135 -0
  323. package/src/Pagination/SideButton.jsx +82 -0
  324. package/src/Pagination/dictionary.js +18 -0
  325. package/src/Pagination/index.js +3 -0
  326. package/src/Pagination/usePagination.js +69 -0
  327. package/src/Progress/Progress.jsx +77 -0
  328. package/src/Progress/ProgressBar.jsx +110 -0
  329. package/src/Progress/ProgressBarBackground.jsx +34 -0
  330. package/src/Progress/index.js +6 -0
  331. package/src/Radio/Radio.jsx +233 -0
  332. package/src/Radio/RadioButton.jsx +131 -0
  333. package/src/Radio/RadioGroup.jsx +199 -0
  334. package/src/Radio/RadioInput.jsx +57 -0
  335. package/src/Radio/RadioInput.native.jsx +6 -0
  336. package/src/Radio/index.js +5 -0
  337. package/src/RadioCard/RadioCard.jsx +191 -0
  338. package/src/RadioCard/RadioCardGroup.jsx +211 -0
  339. package/src/RadioCard/index.js +5 -0
  340. package/src/Search/Search.jsx +215 -0
  341. package/src/Search/dictionary.js +12 -0
  342. package/src/Search/index.js +3 -0
  343. package/src/Select/Group.jsx +15 -0
  344. package/src/Select/Group.native.jsx +14 -0
  345. package/src/Select/Item.jsx +11 -0
  346. package/src/Select/Item.native.jsx +10 -0
  347. package/src/Select/Picker.jsx +67 -0
  348. package/src/Select/Picker.native.jsx +108 -0
  349. package/src/Select/Select.jsx +286 -0
  350. package/src/Select/index.js +8 -0
  351. package/src/SideNav/Item.jsx +5 -5
  352. package/src/SideNav/ItemsGroup.jsx +11 -13
  353. package/src/SideNav/SideNav.jsx +2 -1
  354. package/src/Skeleton/Skeleton.jsx +98 -0
  355. package/src/Skeleton/index.js +3 -0
  356. package/src/Skeleton/skeleton.constant.js +3 -0
  357. package/src/Skeleton/skeletonWebAnimation.js +13 -0
  358. package/src/Skeleton/useSkeletonNativeAnimation.js +27 -0
  359. package/src/Spacer/Spacer.jsx +91 -0
  360. package/src/Spacer/index.js +3 -0
  361. package/src/StackView/StackView.jsx +113 -0
  362. package/src/StackView/StackWrap.jsx +41 -0
  363. package/src/StackView/StackWrap.native.jsx +4 -0
  364. package/src/StackView/StackWrapBox.jsx +102 -0
  365. package/src/StackView/StackWrapGap.jsx +49 -0
  366. package/src/StackView/common.jsx +29 -0
  367. package/src/StackView/getStackedContent.jsx +112 -0
  368. package/src/StackView/index.js +6 -0
  369. package/src/StepTracker/Step.jsx +202 -0
  370. package/src/StepTracker/StepTracker.jsx +163 -0
  371. package/src/StepTracker/dictionary.js +10 -0
  372. package/src/StepTracker/index.js +3 -0
  373. package/src/Tabs/Tabs.jsx +92 -0
  374. package/src/Tabs/TabsItem.jsx +205 -0
  375. package/src/Tabs/index.js +3 -0
  376. package/src/Tags/Tags.jsx +207 -0
  377. package/src/Tags/index.js +3 -0
  378. package/src/TextInput/TextArea.jsx +78 -0
  379. package/src/TextInput/TextInput.jsx +52 -0
  380. package/src/TextInput/TextInputBase.jsx +211 -0
  381. package/src/TextInput/index.js +4 -0
  382. package/src/TextInput/propTypes.js +29 -0
  383. package/src/ThemeProvider/ThemeProvider.jsx +11 -7
  384. package/src/ThemeProvider/useSetTheme.js +4 -0
  385. package/src/ThemeProvider/useThemeTokens.js +85 -7
  386. package/src/ThemeProvider/utils/styles.js +18 -5
  387. package/src/ThemeProvider/utils/theme-tokens.js +106 -8
  388. package/src/ToggleSwitch/ToggleSwitch.jsx +25 -46
  389. package/src/Tooltip/Backdrop.jsx +60 -0
  390. package/src/Tooltip/Backdrop.native.jsx +33 -0
  391. package/src/Tooltip/Tooltip.jsx +294 -0
  392. package/src/Tooltip/dictionary.js +8 -0
  393. package/src/Tooltip/getTooltipPosition.js +161 -0
  394. package/src/Tooltip/index.js +3 -0
  395. package/src/TooltipButton/TooltipButton.jsx +49 -0
  396. package/src/TooltipButton/index.js +3 -0
  397. package/src/Typography/Typography.jsx +10 -24
  398. package/src/ViewportProvider/ViewportProvider.jsx +21 -0
  399. package/src/ViewportProvider/index.jsx +2 -41
  400. package/src/ViewportProvider/useViewport.js +5 -0
  401. package/src/ViewportProvider/useViewportListener.js +43 -0
  402. package/src/index.js +38 -1
  403. package/src/utils/a11y/index.js +1 -0
  404. package/src/utils/a11y/textSize.js +30 -0
  405. package/src/utils/children.jsx +119 -0
  406. package/src/utils/index.js +11 -0
  407. package/src/utils/info/index.js +8 -0
  408. package/src/utils/info/platform/index.js +11 -0
  409. package/src/utils/info/platform/platform.android.js +1 -0
  410. package/src/utils/info/platform/platform.ios.js +1 -0
  411. package/src/utils/info/platform/platform.js +1 -0
  412. package/src/utils/info/platform/platform.native.js +4 -0
  413. package/src/utils/info/versions.js +6 -0
  414. package/src/utils/input.js +38 -26
  415. package/src/utils/pressability.js +96 -0
  416. package/src/utils/propTypes.js +298 -66
  417. package/src/utils/useCopy.js +39 -0
  418. package/src/utils/useHash.js +39 -0
  419. package/src/utils/useHash.native.js +6 -0
  420. package/src/utils/useResponsiveProp.js +50 -0
  421. package/src/utils/useSpacingScale.js +108 -0
  422. package/src/utils/useUniqueId.js +14 -0
  423. package/stories/A11yText/A11yText.stories.jsx +15 -13
  424. package/stories/ActivityIndicator/ActivityIndicator.stories.jsx +11 -2
  425. package/stories/Box/Box.stories.jsx +46 -17
  426. package/stories/Button/Button.stories.jsx +21 -20
  427. package/stories/Button/ButtonGroup.stories.jsx +2 -1
  428. package/stories/Button/ButtonLink.stories.jsx +6 -4
  429. package/stories/Card/Card.stories.jsx +62 -0
  430. package/stories/Checkbox/Checkbox.stories.jsx +94 -0
  431. package/stories/Divider/Divider.stories.jsx +26 -2
  432. package/stories/ExpandCollapse/ExpandCollapse.stories.jsx +74 -79
  433. package/stories/Feedback/Feedback.stories.jsx +96 -0
  434. package/stories/FlexGrid/01 FlexGrid.stories.jsx +20 -7
  435. package/stories/Icon/Icon.stories.jsx +35 -7
  436. package/stories/IconButton/IconButton.stories.jsx +50 -0
  437. package/stories/InputLabel/InputLabel.stories.jsx +42 -0
  438. package/stories/Link/ChevronLink.stories.jsx +20 -4
  439. package/stories/Link/Link.stories.jsx +51 -20
  440. package/stories/Link/TextButton.stories.jsx +24 -3
  441. package/stories/List/List.stories.jsx +117 -0
  442. package/stories/Modal/Modal.stories.jsx +29 -0
  443. package/stories/Notification/Notification.stories.jsx +82 -0
  444. package/stories/Pagination/Pagination.stories.jsx +64 -0
  445. package/stories/Progress/Progress.stories.jsx +93 -0
  446. package/stories/Radio/Radio.stories.jsx +100 -0
  447. package/stories/RadioCard/RadioCard.stories.jsx +98 -0
  448. package/stories/Search/Search.stories.jsx +16 -0
  449. package/stories/Select/Select.stories.jsx +55 -0
  450. package/stories/SideNav/SideNav.stories.jsx +17 -2
  451. package/stories/Skeleton/Skeleton.stories.jsx +36 -0
  452. package/stories/Spacer/Spacer.stories.jsx +38 -0
  453. package/stories/StackView/StackView.stories.jsx +75 -0
  454. package/stories/StackView/StackWrap.stories.jsx +64 -0
  455. package/stories/StepTracker/StepTracker.stories.jsx +71 -0
  456. package/stories/Tabs/Tabs.stories.jsx +97 -0
  457. package/stories/Tags/Tags.stories.jsx +69 -0
  458. package/stories/TextInput/TextArea.stories.jsx +100 -0
  459. package/stories/TextInput/TextInput.stories.jsx +103 -0
  460. package/stories/ToggleSwitch/ToggleSwitch.stories.jsx +16 -3
  461. package/stories/Tooltip/Tooltip.stories.jsx +81 -0
  462. package/stories/TooltipButton/TooltipButton.stories.jsx +11 -0
  463. package/stories/Typography/Typography.stories.jsx +12 -3
  464. package/stories/{platform-supports.web.jsx → platform-supports.jsx} +1 -1
  465. package/stories/supports.jsx +148 -14
  466. package/__fixtures__/accessible.icon.svg +0 -6
  467. package/docs/Contributing.stories.mdx +0 -9
  468. package/docs/Fonts.stories.mdx +0 -104
  469. package/docs/Icons.stories.mdx +0 -144
  470. package/docs/Introduction.stories.mdx +0 -9
  471. package/lib/ActivityIndicator/Spinner.web.js +0 -57
  472. package/lib/config/svgr-icons-web.js +0 -9
  473. package/lib/config/svgr-icons.js +0 -52
  474. package/src/config/svgr-icons-web.js +0 -11
  475. package/src/config/svgr-icons.js +0 -46
@@ -0,0 +1,118 @@
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 _jsxRuntime = require("react/jsx-runtime");
23
+
24
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
25
+
26
+ 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); }
27
+
28
+ 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; }
29
+
30
+ const {
31
+ selectHorizontalScrollTokens,
32
+ useItemPositions
33
+ } = _HorizontalScroll.horizontalScrollUtils;
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
+
39
+ const Tabs = ({
40
+ tokens,
41
+ itemTokens,
42
+ scrollButtonTokens,
43
+ variant,
44
+ value,
45
+ initialValue,
46
+ onChange,
47
+ items = []
48
+ }) => {
49
+ const {
50
+ space,
51
+ ...themeTokens
52
+ } = (0, _ThemeProvider.useThemeTokens)('Tabs', tokens, variant);
53
+ const {
54
+ currentValue,
55
+ setValue
56
+ } = (0, _utils.useInputValue)({
57
+ value,
58
+ initialValue,
59
+ onChange
60
+ });
61
+ const [itemPositions, isPositioningReady] = useItemPositions();
62
+ (0, _utils.useHash)((0, _react.useCallback)((hash, event) => {
63
+ const hashItem = hash && items.find(({
64
+ href
65
+ }) => hash === href);
66
+ const hashId = hashItem && (hashItem.id || hashItem.label);
67
+ if (hashId) setTimeout(setValue(hashId, event), 500);
68
+ }, [items, setValue]), isPositioningReady);
69
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_HorizontalScroll.default, {
70
+ ScrollButton: _HorizontalScroll.HorizontalScrollButton,
71
+ itemPositions: itemPositions,
72
+ tokens: selectHorizontalScrollTokens(themeTokens),
73
+ scrollButtonTokens: scrollButtonTokens,
74
+ accessibilityRole: "tablist",
75
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_StackView.default, {
76
+ space: space,
77
+ direction: "row",
78
+ children: items.map(({
79
+ href,
80
+ label,
81
+ id
82
+ }, index) => {
83
+ const itemId = id !== null && id !== void 0 ? id : label;
84
+ const isSelected = Boolean(currentValue && currentValue === itemId);
85
+
86
+ const handlePress = event => setValue(itemId, event);
87
+
88
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_TabsItem.default, {
89
+ href: href,
90
+ variant: variant,
91
+ tokens: itemTokens,
92
+ onPress: handlePress,
93
+ selected: isSelected,
94
+ itemPositions: itemPositions,
95
+ index: index,
96
+ children: label
97
+ }, itemId);
98
+ })
99
+ })
100
+ });
101
+ };
102
+
103
+ Tabs.propTypes = {
104
+ items: _propTypes.default.arrayOf(_propTypes.default.shape({
105
+ href: _propTypes.default.string,
106
+ label: _propTypes.default.string,
107
+ id: _propTypes.default.string
108
+ })),
109
+ value: _propTypes.default.string,
110
+ initialValue: _propTypes.default.string,
111
+ onChange: _propTypes.default.func,
112
+ tokens: (0, _utils.getTokensPropType)('Tabs'),
113
+ itemTokens: (0, _utils.getTokensPropType)('TabsItem'),
114
+ scrollButtonTokens: (0, _utils.getTokensPropType)('HorizontalScrollButton'),
115
+ variant: _utils.variantProp.propType
116
+ };
117
+ var _default = Tabs;
118
+ exports.default = _default;
@@ -0,0 +1,237 @@
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 _ThemeProvider = require("../ThemeProvider");
23
+
24
+ var _utils = require("../utils");
25
+
26
+ var _Spacer = _interopRequireDefault(require("../Spacer"));
27
+
28
+ var _HorizontalScroll = require("../HorizontalScroll");
29
+
30
+ var _jsxRuntime = require("react/jsx-runtime");
31
+
32
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
33
+
34
+ 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); }
35
+
36
+ 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; }
37
+
38
+ const {
39
+ itemPositionsPropType,
40
+ getItemPositionLayoutHandler
41
+ } = _HorizontalScroll.horizontalScrollUtils;
42
+
43
+ const selectHighlightBarStyles = ({
44
+ highlightColor,
45
+ highlightBarBorderRadius = 0,
46
+ highlightBarBorderWidth = 0,
47
+ highlightBarHeight = 0
48
+ }) => ({
49
+ backgroundColor: highlightColor,
50
+ borderColor: highlightColor,
51
+ height: highlightBarHeight + highlightBarBorderWidth * 2,
52
+ borderRadius: highlightBarBorderRadius,
53
+ borderWidth: highlightBarBorderWidth,
54
+ bottom: -1 * (highlightBarHeight + highlightBarBorderWidth),
55
+ left: -1 * highlightBarBorderWidth,
56
+ right: -1 * highlightBarBorderWidth,
57
+ zIndex: 1 + highlightBarBorderWidth
58
+ });
59
+
60
+ const selectHighlightTriangleStyles = ({
61
+ highlightColor,
62
+ highlightTriangleSize
63
+ }) => ({
64
+ container: {
65
+ bottom: 0 - highlightTriangleSize * 2
66
+ },
67
+ triangle: {
68
+ height: 0,
69
+ width: 0,
70
+ borderWidth: highlightTriangleSize,
71
+ borderTopColor: highlightColor,
72
+ borderBottomColor: 'transparent',
73
+ borderLeftColor: 'transparent',
74
+ borderRightColor: 'transparent'
75
+ }
76
+ });
77
+
78
+ const selectContainerStyles = ({
79
+ backgroundColor,
80
+ borderColor,
81
+ borderWidth = 0,
82
+ borderRadius,
83
+ paddingHorizontal = 0,
84
+ paddingVertical = 0
85
+ }) => ({
86
+ backgroundColor,
87
+ borderColor,
88
+ borderWidth,
89
+ borderRadius,
90
+ paddingHorizontal: paddingHorizontal - borderWidth,
91
+ paddingVertical: paddingVertical - borderWidth
92
+ });
93
+ /**
94
+ * Item within a Tabs component representing one tab of content. May be rendered as a link
95
+ * or as a "menuitem" button depending on whether 'href' is passed.
96
+ *
97
+ * This is rendered automatically by `Tabs` and isn't intended be used directly.
98
+ */
99
+
100
+
101
+ const TabsItem = ({
102
+ onPress,
103
+ href,
104
+ variant,
105
+ tokens,
106
+ selected,
107
+ itemPositions,
108
+ index,
109
+ children,
110
+ accessibilityRole = href ? 'link' : 'tab',
111
+ accessibilityState = _Platform.default.OS === 'web' && accessibilityRole === 'link' ? // Web links can't be aria-selected but can be aria-current
112
+ {
113
+ current: selected ? 'page' : false
114
+ } : {
115
+ selected
116
+ },
117
+ ...rest
118
+ }) => {
119
+ const getTokens = (0, _ThemeProvider.useThemeTokensCallback)('TabsItem', tokens, variant);
120
+
121
+ const resolveTokens = pressableState => (0, _utils.resolvePressableTokens)(getTokens, pressableState, {
122
+ selected
123
+ });
124
+
125
+ const getPressableStyle = pressableState => {
126
+ const {
127
+ maxWidth
128
+ } = resolveTokens(pressableState);
129
+ return [{
130
+ maxWidth
131
+ }, _Platform.default.OS === 'web' && {
132
+ outline: 'none'
133
+ }];
134
+ };
135
+
136
+ const handleLayout = getItemPositionLayoutHandler(itemPositions.positions, index); // On press, update the selection, call any press handler, and open any href in platform-appropriate way
137
+
138
+ const openHref = href && _utils.linkProps.handleHref({
139
+ href
140
+ });
141
+
142
+ const handlePress = onPress || openHref ? () => {
143
+ if (onPress) onPress();
144
+ if (openHref) openHref();
145
+ } : undefined;
146
+ const a11y = {
147
+ accessibilityRole,
148
+ accessibilityState,
149
+ ..._utils.a11yProps.select(rest)
150
+ };
151
+ (0, _react.useEffect)(() => {
152
+ // If this is selected while off-screen, scroll it into view
153
+ if (selected) {
154
+ const position = itemPositions.positions[index];
155
+ const scrollEnd = itemPositions.scrollOffset + itemPositions.containerWidth;
156
+
157
+ if ( // is off the right edge, or
158
+ scrollEnd && (position === null || position === void 0 ? void 0 : position.end) > scrollEnd || // is off the left edge
159
+ typeof (position === null || position === void 0 ? void 0 : position.start) === 'number' && position.start < itemPositions.scrollOffset) {
160
+ itemPositions.scrollTo(position.start);
161
+ }
162
+ } // itemPositions is a ref object so this should only re-run when `selected` (or `index`) change
163
+
164
+ }, [selected, index, itemPositions]);
165
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Pressable.default, {
166
+ onPress: handlePress,
167
+ href: href,
168
+ style: getPressableStyle,
169
+ onLayout: handleLayout,
170
+ ...a11y,
171
+ children: pressableState => {
172
+ const {
173
+ space,
174
+ textAlign,
175
+ ...themeTokens
176
+ } = resolveTokens(pressableState);
177
+ const hasHighlightBar = Boolean(themeTokens.highlightBarHeight);
178
+ const highlightBarStyle = hasHighlightBar && selectHighlightBarStyles(themeTokens);
179
+ const hasHighlightTriangle = Boolean(themeTokens.highlightTriangleSize);
180
+ const highlightTriangleStyle = hasHighlightTriangle && selectHighlightTriangleStyles(themeTokens);
181
+ const containerStyles = selectContainerStyles(themeTokens);
182
+ const textStyles = (0, _ThemeProvider.applyTextStyles)({ ...(0, _utils.selectTokens)('Typography', themeTokens),
183
+ textAlign
184
+ });
185
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_View.default, {
186
+ style: staticStyles.container,
187
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
188
+ style: containerStyles,
189
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Text.default, {
190
+ style: textStyles,
191
+ children: children
192
+ })
193
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Spacer.default, {
194
+ space: space
195
+ }), hasHighlightBar && /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
196
+ style: [staticStyles.absolute, highlightBarStyle]
197
+ }), hasHighlightTriangle && /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
198
+ style: [staticStyles.absolute, highlightTriangleStyle.container],
199
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
200
+ style: highlightTriangleStyle.triangle
201
+ })
202
+ })]
203
+ });
204
+ }
205
+ });
206
+ };
207
+
208
+ TabsItem.propTypes = { ..._utils.a11yProps.propTypes,
209
+ tokens: (0, _utils.getTokensPropType)('TabsItem'),
210
+ variant: _utils.variantProp.propType,
211
+ onPress: _propTypes.default.func,
212
+ href: _propTypes.default.string,
213
+ index: _propTypes.default.number,
214
+ selected: _propTypes.default.bool,
215
+ itemPositions: itemPositionsPropType,
216
+ children: _propTypes.default.string
217
+ };
218
+
219
+ const staticStyles = _StyleSheet.default.create({
220
+ center: {
221
+ alignItems: 'center'
222
+ },
223
+ absolute: {
224
+ position: 'absolute',
225
+ alignItems: 'center',
226
+ left: 0,
227
+ right: 0
228
+ },
229
+ container: {
230
+ flexGrow: 1,
231
+ alignItems: 'center',
232
+ justifyContent: 'center'
233
+ }
234
+ });
235
+
236
+ var _default = TabsItem;
237
+ 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,250 @@
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 }; }
37
+
38
+ const selectIconTextTokens = ({
39
+ icon,
40
+ iconPosition,
41
+ iconSpace,
42
+ iconSize,
43
+ iconColor,
44
+ iconBackground,
45
+ iconBorderRadius,
46
+ iconAlignSelf,
47
+ iconPadding,
48
+ iconTranslateX,
49
+ iconTranslateY
50
+ }) => ({
51
+ icon,
52
+ iconPosition,
53
+ iconSpace,
54
+ iconWrapperStyle: {
55
+ backgroundColor: iconBackground,
56
+ borderRadius: iconBorderRadius,
57
+ alignSelf: iconAlignSelf,
58
+ padding: iconPadding,
59
+ ..._Platform.default.select({
60
+ // TODO: https://github.com/telus/universal-design-system/issues/487
61
+ web: {
62
+ transition: 'color 200ms, background 200ms'
63
+ }
64
+ })
65
+ },
66
+ iconTokens: {
67
+ size: iconSize,
68
+ color: iconColor,
69
+ translateX: iconTranslateX,
70
+ translateY: iconTranslateY
71
+ }
72
+ });
73
+
74
+ const Tags = ({
75
+ variant,
76
+ tokens,
77
+ items = [],
78
+ values,
79
+ initialValues,
80
+ maxValues,
81
+ onChange,
82
+ readOnly = false,
83
+ inactive = false,
84
+ accessibilityRole = _Platform.default.select({
85
+ web: 'group',
86
+ default: 'none'
87
+ }),
88
+ ...rest
89
+ }) => {
90
+ const viewport = (0, _ViewportProvider.useViewport)();
91
+ const themeTokens = (0, _ThemeProvider.useThemeTokens)('Tags', tokens, variant, {
92
+ viewport
93
+ });
94
+ const stackTokens = (0, _propTypes2.selectTokens)('StackView', themeTokens);
95
+ const {
96
+ direction,
97
+ space
98
+ } = themeTokens;
99
+ const getItemTokens = (0, _ThemeProvider.useThemeTokensCallback)('TagsItem', tokens, variant);
100
+
101
+ const getButtonTokens = buttonState => (0, _propTypes2.selectTokens)('Button', getItemTokens(buttonState));
102
+
103
+ const {
104
+ currentValues,
105
+ toggleOneValue
106
+ } = (0, _input.useMultipleInputValues)({
107
+ initialValues,
108
+ values,
109
+ maxValues,
110
+ onChange,
111
+ readOnly
112
+ });
113
+
114
+ const a11y = _propTypes2.a11yProps.select({
115
+ accessibilityRole,
116
+ ...rest
117
+ });
118
+
119
+ const itemA11yRole = 'checkbox';
120
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_StackView.StackWrap, { ...a11y,
121
+ space: space,
122
+ direction: direction,
123
+ tokens: stackTokens,
124
+ children: items.map(({
125
+ label,
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 = event => {
138
+ if (pressHandlers.onPress) pressHandlers.onPress();
139
+ toggleOneValue(id, event);
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
+ });
192
+ };
193
+
194
+ Tags.propTypes = { ..._propTypes2.a11yProps.propTypes,
195
+ ..._propTypes2.pressProps.propTypes,
196
+ tokens: (0, _propTypes2.getTokensPropType)('Tags'),
197
+ variant: _propTypes2.variantProp.propType,
198
+
199
+ /**
200
+ * If provided, sets a maximum number of items a user may select at once.
201
+ */
202
+ maxValues: _propTypes.default.number,
203
+
204
+ /**
205
+ * The options a user may select
206
+ */
207
+ items: _propTypes.default.arrayOf(_propTypes.default.shape({
208
+ /**
209
+ * The text displayed to the user in the button, describing this option,
210
+ * passed to the button as its child.
211
+ */
212
+ label: _propTypes.default.string.isRequired,
213
+
214
+ /**
215
+ * An optional accessibility label may be passed to ButtonGroup Buttons
216
+ * which is applied as normal for a React Native accessibilityLabel prop.
217
+ */
218
+ accessibilityLabel: _propTypes.default.string,
219
+
220
+ /**
221
+ * An optional unique string may be provided to identify this option,
222
+ * which will be used in code and passed to any onChange function.
223
+ * If not provided, the label is used.
224
+ */
225
+ id: _propTypes.default.string
226
+ })),
227
+
228
+ /**
229
+ * If provided, this function is called when the current selection is changed
230
+ * and is passed an array of the `id`s of all currently selected `items`.
231
+ */
232
+ onChange: _propTypes.default.func,
233
+
234
+ /**
235
+ * If the selected item(s) in the button group are to be controlled externally by
236
+ * a parent component, pass an array of strings as well as an `onChange` handler.
237
+ * Passing an array for "values" makes the ButtonGroup a "controlled" component that
238
+ * expects its state to be handled via `onChange` and so doesn't handle it itself.
239
+ */
240
+ values: _propTypes.default.arrayOf(_propTypes.default.string),
241
+
242
+ /**
243
+ * If `values` is not passed, making the ButtonGroup an "uncontrolled" component
244
+ * managing its own selected state, a default set of selections may be provided.
245
+ * Changing the `initialValues` does not change the user's selections.
246
+ */
247
+ initialValues: _propTypes.default.arrayOf(_propTypes.default.string)
248
+ };
249
+ var _default = Tags;
250
+ 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 _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;