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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (458) hide show
  1. package/.eslintrc.js +9 -0
  2. package/.ultra.cache.json +1 -1
  3. package/CHANGELOG.md +85 -0
  4. package/README.md +4 -2
  5. package/__fixtures__/Accessible.js +33 -0
  6. package/__fixtures__/Accessible.native.js +32 -0
  7. package/__fixtures__/test-utils.js +25 -0
  8. package/__fixtures__/testTheme.js +851 -57
  9. package/__tests__/ActivityIndicator/ActivityIndicator.test.jsx +1 -1
  10. package/__tests__/Button/ButtonBase.test.jsx +2 -31
  11. package/__tests__/Button/ButtonGroup.test.jsx +6 -7
  12. package/__tests__/Checkbox/Checkbox.test.jsx +94 -0
  13. package/__tests__/Checkbox/CheckboxGroup.test.jsx +246 -0
  14. package/__tests__/ExpandCollapse/ExpandCollapse.test.jsx +2 -2
  15. package/__tests__/HorizontalScroll/HorizontalScroll.test.jsx +164 -0
  16. package/__tests__/Icon/Icon.test.jsx +3 -3
  17. package/__tests__/IconButton/IconButton.test.jsx +52 -0
  18. package/__tests__/InputSupports/InputSupports.test.jsx +50 -0
  19. package/__tests__/Link/LinkBase.test.jsx +0 -14
  20. package/__tests__/List/List.test.jsx +60 -0
  21. package/__tests__/Modal/Modal.test.jsx +47 -0
  22. package/__tests__/Notification/Notification.test.jsx +20 -0
  23. package/__tests__/Pagination/Pagination.test.jsx +2 -2
  24. package/__tests__/Progress/Progress.test.jsx +79 -0
  25. package/__tests__/Radio/Radio.test.jsx +87 -0
  26. package/__tests__/Radio/RadioGroup.test.jsx +220 -0
  27. package/__tests__/RadioCard/RadioCard.test.jsx +87 -0
  28. package/__tests__/RadioCard/RadioCardGroup.test.jsx +246 -0
  29. package/__tests__/Search/Search.test.jsx +73 -0
  30. package/__tests__/Select/Select.test.jsx +94 -0
  31. package/__tests__/Skeleton/Skeleton.test.jsx +61 -0
  32. package/__tests__/StepTracker/StepTracker.test.jsx +94 -0
  33. package/__tests__/Tabs/Tabs.test.jsx +40 -0
  34. package/__tests__/Tags/Tags.test.jsx +327 -0
  35. package/__tests__/TextInput/TextArea.test.jsx +35 -0
  36. package/__tests__/TextInput/{TextInput.test.jsx → TextInputBase.test.jsx} +29 -50
  37. package/__tests__/ThemeProvider/ThemeProvider.test.jsx +77 -0
  38. package/__tests__/ThemeProvider/useThemeTokens.test.jsx +9 -5
  39. package/__tests__/ThemeProvider/utils/theme-tokens.test.js +41 -0
  40. package/__tests__/ToggleSwitch/ToggleSwitch.test.jsx +3 -2
  41. package/__tests__/utils/children.test.jsx +128 -0
  42. package/__tests__/utils/input.test.js +59 -1
  43. package/__tests__/utils/semantics.test.jsx +43 -0
  44. package/__tests__/utils/useCopy.test.js +14 -3
  45. package/babel.config.js +20 -0
  46. package/jest.config.js +8 -3
  47. package/lib/A11yInfoProvider/index.js +54 -26
  48. package/lib/A11yText/index.js +45 -17
  49. package/lib/ActivityIndicator/Spinner.js +81 -0
  50. package/lib/ActivityIndicator/Spinner.native.js +129 -91
  51. package/lib/ActivityIndicator/index.js +28 -12
  52. package/lib/ActivityIndicator/shared.js +27 -12
  53. package/lib/BaseProvider/index.js +34 -11
  54. package/lib/Box/Box.js +152 -35
  55. package/lib/Box/index.js +13 -2
  56. package/lib/Button/Button.js +41 -12
  57. package/lib/Button/ButtonBase.js +125 -97
  58. package/lib/Button/ButtonGroup.js +112 -89
  59. package/lib/Button/ButtonLink.js +48 -17
  60. package/lib/Button/index.js +31 -4
  61. package/lib/Button/propTypes.js +32 -9
  62. package/lib/Card/Card.js +38 -41
  63. package/lib/Card/CardBase.js +85 -0
  64. package/lib/Card/PressableCardBase.js +141 -0
  65. package/lib/Card/index.js +40 -2
  66. package/lib/Checkbox/Checkbox.js +355 -0
  67. package/lib/Checkbox/CheckboxGroup.js +241 -0
  68. package/lib/Checkbox/CheckboxInput.js +74 -0
  69. package/lib/Checkbox/CheckboxInput.native.js +14 -0
  70. package/lib/Checkbox/index.js +21 -0
  71. package/lib/Divider/Divider.js +59 -28
  72. package/lib/Divider/index.js +13 -2
  73. package/lib/ExpandCollapse/Accordion.js +26 -7
  74. package/lib/ExpandCollapse/Control.js +60 -31
  75. package/lib/ExpandCollapse/ExpandCollapse.js +50 -28
  76. package/lib/ExpandCollapse/Panel.js +83 -44
  77. package/lib/ExpandCollapse/index.js +25 -7
  78. package/lib/Feedback/Feedback.js +90 -39
  79. package/lib/Feedback/index.js +13 -2
  80. package/lib/Fieldset/Fieldset.js +165 -0
  81. package/lib/Fieldset/FieldsetContainer.js +46 -0
  82. package/lib/Fieldset/FieldsetContainer.native.js +38 -0
  83. package/lib/Fieldset/Legend.js +38 -0
  84. package/lib/Fieldset/Legend.native.js +48 -0
  85. package/lib/Fieldset/cssReset.js +21 -0
  86. package/lib/Fieldset/index.js +13 -0
  87. package/lib/FlexGrid/Col/Col.js +73 -41
  88. package/lib/FlexGrid/Col/index.js +13 -2
  89. package/lib/FlexGrid/FlexGrid.js +99 -49
  90. package/lib/FlexGrid/Row/Row.js +58 -30
  91. package/lib/FlexGrid/Row/index.js +13 -2
  92. package/lib/FlexGrid/helpers/index.js +9 -1
  93. package/lib/FlexGrid/index.js +13 -2
  94. package/lib/FlexGrid/providers/GutterContext.js +15 -3
  95. package/lib/HorizontalScroll/HorizontalScroll.js +200 -0
  96. package/lib/HorizontalScroll/HorizontalScrollButton.js +127 -0
  97. package/lib/HorizontalScroll/ScrollViewEnd.js +66 -0
  98. package/lib/HorizontalScroll/ScrollViewEnd.native.js +41 -0
  99. package/lib/HorizontalScroll/dictionary.js +18 -0
  100. package/lib/HorizontalScroll/index.js +35 -0
  101. package/lib/HorizontalScroll/itemPositions.js +128 -0
  102. package/lib/Icon/Icon.js +62 -50
  103. package/lib/Icon/IconText.js +101 -0
  104. package/lib/Icon/index.js +31 -3
  105. package/lib/IconButton/IconButton.js +140 -0
  106. package/lib/IconButton/index.js +13 -0
  107. package/lib/InputLabel/InputLabel.js +102 -40
  108. package/lib/InputLabel/LabelContent.js +41 -0
  109. package/lib/InputLabel/LabelContent.native.js +32 -6
  110. package/lib/InputLabel/index.js +13 -2
  111. package/lib/InputSupports/InputSupports.js +109 -0
  112. package/lib/InputSupports/index.js +13 -0
  113. package/lib/InputSupports/propTypes.js +66 -0
  114. package/lib/InputSupports/useInputSupports.js +41 -0
  115. package/lib/Link/ChevronLink.js +58 -31
  116. package/lib/Link/InlinePressable.js +56 -0
  117. package/lib/Link/InlinePressable.native.js +102 -0
  118. package/lib/Link/Link.js +39 -15
  119. package/lib/Link/LinkBase.js +126 -150
  120. package/lib/Link/TextButton.js +53 -18
  121. package/lib/Link/index.js +39 -4
  122. package/lib/List/List.js +81 -0
  123. package/lib/List/ListItem.js +245 -0
  124. package/lib/List/index.js +13 -0
  125. package/lib/Modal/Modal.js +231 -0
  126. package/lib/Modal/dictionary.js +16 -0
  127. package/lib/Modal/index.js +13 -0
  128. package/lib/Notification/Notification.js +216 -0
  129. package/lib/Notification/dictionary.js +15 -0
  130. package/lib/Notification/index.js +13 -0
  131. package/lib/Pagination/PageButton.js +58 -48
  132. package/lib/Pagination/Pagination.js +78 -43
  133. package/lib/Pagination/SideButton.js +79 -58
  134. package/lib/Pagination/dictionary.js +9 -2
  135. package/lib/Pagination/index.js +13 -2
  136. package/lib/Pagination/usePagination.js +12 -2
  137. package/lib/Progress/Progress.js +104 -0
  138. package/lib/Progress/ProgressBar.js +157 -0
  139. package/lib/Progress/ProgressBarBackground.js +61 -0
  140. package/lib/Progress/index.js +16 -0
  141. package/lib/Radio/Radio.js +293 -0
  142. package/lib/Radio/RadioButton.js +152 -0
  143. package/lib/Radio/RadioGroup.js +244 -0
  144. package/lib/Radio/RadioInput.js +76 -0
  145. package/lib/Radio/RadioInput.native.js +14 -0
  146. package/lib/Radio/index.js +21 -0
  147. package/lib/RadioCard/RadioCard.js +244 -0
  148. package/lib/RadioCard/RadioCardGroup.js +252 -0
  149. package/lib/RadioCard/index.js +21 -0
  150. package/lib/Search/Search.js +254 -0
  151. package/lib/Search/dictionary.js +19 -0
  152. package/lib/Search/index.js +13 -0
  153. package/lib/Select/Group.js +33 -0
  154. package/lib/Select/Group.native.js +25 -0
  155. package/lib/Select/Item.js +29 -0
  156. package/lib/Select/Item.native.js +19 -0
  157. package/lib/Select/Picker.js +84 -0
  158. package/lib/Select/Picker.native.js +130 -0
  159. package/lib/Select/Select.js +342 -0
  160. package/lib/Select/index.js +19 -0
  161. package/lib/SideNav/Item.js +63 -37
  162. package/lib/SideNav/ItemContent.js +41 -15
  163. package/lib/SideNav/ItemsGroup.js +55 -31
  164. package/lib/SideNav/SideNav.js +100 -73
  165. package/lib/SideNav/index.js +15 -1
  166. package/lib/Skeleton/Skeleton.js +137 -0
  167. package/lib/Skeleton/index.js +13 -0
  168. package/lib/Skeleton/skeleton.constant.js +12 -0
  169. package/lib/Skeleton/skeletonWebAnimation.js +27 -0
  170. package/lib/Skeleton/useSkeletonNativeAnimation.js +37 -0
  171. package/lib/Spacer/Spacer.js +49 -18
  172. package/lib/Spacer/index.js +13 -2
  173. package/lib/StackView/StackView.js +71 -31
  174. package/lib/StackView/StackWrap.js +43 -13
  175. package/lib/StackView/StackWrap.native.js +13 -2
  176. package/lib/StackView/StackWrapBox.js +76 -29
  177. package/lib/StackView/StackWrapGap.js +56 -26
  178. package/lib/StackView/common.js +23 -6
  179. package/lib/StackView/getStackedContent.js +47 -17
  180. package/lib/StackView/index.js +29 -5
  181. package/lib/StepTracker/Step.js +245 -0
  182. package/lib/StepTracker/StepTracker.js +202 -0
  183. package/lib/StepTracker/dictionary.js +17 -0
  184. package/lib/StepTracker/index.js +13 -0
  185. package/lib/Tabs/Tabs.js +124 -0
  186. package/lib/Tabs/TabsItem.js +238 -0
  187. package/lib/Tabs/index.js +13 -0
  188. package/lib/Tags/Tags.js +266 -0
  189. package/lib/Tags/index.js +13 -0
  190. package/lib/TextInput/TextArea.js +111 -0
  191. package/lib/TextInput/TextInput.js +50 -304
  192. package/lib/TextInput/TextInputBase.js +256 -0
  193. package/lib/TextInput/index.js +23 -2
  194. package/lib/TextInput/propTypes.js +42 -0
  195. package/lib/ThemeProvider/ThemeProvider.js +46 -18
  196. package/lib/ThemeProvider/index.js +61 -6
  197. package/lib/ThemeProvider/useSetTheme.js +19 -5
  198. package/lib/ThemeProvider/useTheme.js +13 -4
  199. package/lib/ThemeProvider/useThemeTokens.js +86 -19
  200. package/lib/ThemeProvider/utils/index.js +31 -2
  201. package/lib/ThemeProvider/utils/styles.js +50 -14
  202. package/lib/ThemeProvider/utils/theme-tokens.js +121 -12
  203. package/lib/ToggleSwitch/ToggleSwitch.js +86 -57
  204. package/lib/ToggleSwitch/index.js +13 -2
  205. package/lib/Tooltip/{Backdrop.web.js → Backdrop.js} +20 -8
  206. package/lib/Tooltip/Backdrop.native.js +39 -15
  207. package/lib/Tooltip/Tooltip.js +117 -74
  208. package/lib/Tooltip/dictionary.js +9 -2
  209. package/lib/Tooltip/getTooltipPosition.js +9 -1
  210. package/lib/Tooltip/index.js +13 -2
  211. package/lib/TooltipButton/TooltipButton.js +57 -38
  212. package/lib/TooltipButton/index.js +13 -2
  213. package/lib/Typography/Typography.js +86 -55
  214. package/lib/Typography/index.js +13 -2
  215. package/lib/ViewportProvider/ViewportProvider.js +34 -13
  216. package/lib/ViewportProvider/index.js +28 -3
  217. package/lib/ViewportProvider/useViewport.js +15 -3
  218. package/lib/ViewportProvider/useViewportListener.js +24 -10
  219. package/lib/index.js +539 -26
  220. package/lib/utils/a11y/index.js +31 -0
  221. package/lib/utils/a11y/semantics.js +173 -0
  222. package/lib/utils/a11y/textSize.js +49 -0
  223. package/lib/utils/animation/index.js +15 -2
  224. package/lib/utils/animation/useVerticalExpandAnimation.js +27 -10
  225. package/lib/utils/children.js +134 -0
  226. package/lib/utils/index.js +163 -7
  227. package/lib/utils/info/index.js +19 -0
  228. package/lib/utils/info/platform/index.js +23 -0
  229. package/lib/utils/info/platform/platform.android.js +8 -0
  230. package/lib/utils/info/platform/platform.ios.js +8 -0
  231. package/lib/utils/info/platform/platform.js +8 -0
  232. package/lib/utils/info/platform/platform.native.js +11 -0
  233. package/lib/utils/info/versions.js +16 -0
  234. package/lib/utils/input.js +53 -25
  235. package/lib/utils/pressability.js +120 -0
  236. package/lib/utils/propTypes.js +338 -132
  237. package/lib/utils/useCopy.js +40 -5
  238. package/lib/utils/useHash.js +52 -0
  239. package/lib/utils/useHash.native.js +15 -0
  240. package/lib/utils/useResponsiveProp.js +21 -9
  241. package/lib/utils/useSpacingScale.js +19 -9
  242. package/lib/utils/useUniqueId.js +12 -3
  243. package/package.json +16 -10
  244. package/release-context.json +4 -4
  245. package/src/A11yText/index.jsx +6 -4
  246. package/src/ActivityIndicator/{Spinner.web.jsx → Spinner.jsx} +5 -3
  247. package/src/ActivityIndicator/Spinner.native.jsx +5 -3
  248. package/src/Box/Box.jsx +131 -39
  249. package/src/Button/Button.jsx +13 -6
  250. package/src/Button/ButtonBase.jsx +134 -125
  251. package/src/Button/ButtonGroup.jsx +85 -86
  252. package/src/Button/ButtonLink.jsx +22 -7
  253. package/src/Button/propTypes.js +12 -2
  254. package/src/Card/Card.jsx +5 -31
  255. package/src/Card/CardBase.jsx +58 -0
  256. package/src/Card/PressableCardBase.jsx +119 -0
  257. package/src/Card/index.js +3 -0
  258. package/src/Checkbox/Checkbox.jsx +284 -0
  259. package/src/Checkbox/CheckboxGroup.jsx +206 -0
  260. package/src/Checkbox/CheckboxInput.jsx +55 -0
  261. package/src/Checkbox/CheckboxInput.native.jsx +6 -0
  262. package/src/Checkbox/index.js +5 -0
  263. package/src/Divider/Divider.jsx +7 -4
  264. package/src/ExpandCollapse/Accordion.jsx +3 -2
  265. package/src/ExpandCollapse/Control.jsx +40 -43
  266. package/src/ExpandCollapse/ExpandCollapse.jsx +26 -23
  267. package/src/ExpandCollapse/Panel.jsx +69 -63
  268. package/src/Feedback/Feedback.jsx +42 -30
  269. package/src/Fieldset/Fieldset.jsx +136 -0
  270. package/src/Fieldset/FieldsetContainer.jsx +31 -0
  271. package/src/Fieldset/FieldsetContainer.native.jsx +19 -0
  272. package/src/Fieldset/Legend.jsx +21 -0
  273. package/src/Fieldset/Legend.native.jsx +27 -0
  274. package/src/Fieldset/cssReset.js +14 -0
  275. package/src/Fieldset/index.js +3 -0
  276. package/src/FlexGrid/Col/Col.jsx +139 -132
  277. package/src/FlexGrid/FlexGrid.jsx +79 -51
  278. package/src/FlexGrid/Row/Row.jsx +55 -48
  279. package/src/HorizontalScroll/HorizontalScroll.jsx +168 -0
  280. package/src/HorizontalScroll/HorizontalScrollButton.jsx +105 -0
  281. package/src/HorizontalScroll/ScrollViewEnd.jsx +53 -0
  282. package/src/HorizontalScroll/ScrollViewEnd.native.jsx +24 -0
  283. package/src/HorizontalScroll/dictionary.js +11 -0
  284. package/src/HorizontalScroll/index.js +17 -0
  285. package/src/HorizontalScroll/itemPositions.js +101 -0
  286. package/src/Icon/Icon.jsx +46 -49
  287. package/src/Icon/IconText.jsx +68 -0
  288. package/src/Icon/index.js +3 -2
  289. package/src/IconButton/IconButton.jsx +114 -0
  290. package/src/IconButton/index.js +3 -0
  291. package/src/InputLabel/InputLabel.jsx +57 -35
  292. package/src/InputLabel/LabelContent.jsx +21 -0
  293. package/src/InputLabel/LabelContent.native.jsx +11 -2
  294. package/src/InputSupports/InputSupports.jsx +70 -0
  295. package/src/InputSupports/index.js +3 -0
  296. package/src/InputSupports/propTypes.js +44 -0
  297. package/src/InputSupports/useInputSupports.js +30 -0
  298. package/src/Link/ChevronLink.jsx +34 -21
  299. package/src/Link/InlinePressable.jsx +39 -0
  300. package/src/Link/InlinePressable.native.jsx +75 -0
  301. package/src/Link/Link.jsx +23 -13
  302. package/src/Link/LinkBase.jsx +98 -170
  303. package/src/Link/TextButton.jsx +37 -16
  304. package/src/Link/index.js +2 -1
  305. package/src/List/List.jsx +48 -0
  306. package/src/List/ListItem.jsx +182 -0
  307. package/src/List/index.js +3 -0
  308. package/src/Modal/Modal.jsx +190 -0
  309. package/src/Modal/dictionary.js +9 -0
  310. package/src/Modal/index.js +3 -0
  311. package/src/Notification/Notification.jsx +164 -0
  312. package/src/Notification/dictionary.js +8 -0
  313. package/src/Notification/index.js +3 -0
  314. package/src/Pagination/PageButton.jsx +42 -49
  315. package/src/Pagination/Pagination.jsx +88 -92
  316. package/src/Pagination/SideButton.jsx +58 -66
  317. package/src/Progress/Progress.jsx +78 -0
  318. package/src/Progress/ProgressBar.jsx +123 -0
  319. package/src/Progress/ProgressBarBackground.jsx +36 -0
  320. package/src/Progress/index.js +6 -0
  321. package/src/Radio/Radio.jsx +240 -0
  322. package/src/Radio/RadioButton.jsx +142 -0
  323. package/src/Radio/RadioGroup.jsx +209 -0
  324. package/src/Radio/RadioInput.jsx +57 -0
  325. package/src/Radio/RadioInput.native.jsx +6 -0
  326. package/src/Radio/index.js +5 -0
  327. package/src/RadioCard/RadioCard.jsx +198 -0
  328. package/src/RadioCard/RadioCardGroup.jsx +218 -0
  329. package/src/RadioCard/index.js +5 -0
  330. package/src/Search/Search.jsx +225 -0
  331. package/src/Search/dictionary.js +12 -0
  332. package/src/Search/index.js +3 -0
  333. package/src/Select/Group.jsx +15 -0
  334. package/src/Select/Group.native.jsx +14 -0
  335. package/src/Select/Item.jsx +11 -0
  336. package/src/Select/Item.native.jsx +10 -0
  337. package/src/Select/Picker.jsx +74 -0
  338. package/src/Select/Picker.native.jsx +102 -0
  339. package/src/Select/Select.jsx +298 -0
  340. package/src/Select/index.js +8 -0
  341. package/src/SideNav/Item.jsx +54 -47
  342. package/src/SideNav/ItemsGroup.jsx +50 -43
  343. package/src/SideNav/SideNav.jsx +68 -60
  344. package/src/Skeleton/Skeleton.jsx +94 -0
  345. package/src/Skeleton/index.js +3 -0
  346. package/src/Skeleton/skeleton.constant.js +3 -0
  347. package/src/Skeleton/skeletonWebAnimation.js +13 -0
  348. package/src/Skeleton/useSkeletonNativeAnimation.js +27 -0
  349. package/src/Spacer/Spacer.jsx +11 -4
  350. package/src/StackView/StackView.jsx +53 -23
  351. package/src/StackView/StackWrap.jsx +16 -7
  352. package/src/StackView/StackWrapBox.jsx +62 -28
  353. package/src/StackView/StackWrapGap.jsx +46 -24
  354. package/src/StackView/common.jsx +3 -2
  355. package/src/StackView/getStackedContent.jsx +8 -2
  356. package/src/StepTracker/Step.jsx +202 -0
  357. package/src/StepTracker/StepTracker.jsx +174 -0
  358. package/src/StepTracker/dictionary.js +10 -0
  359. package/src/StepTracker/index.js +3 -0
  360. package/src/Tabs/Tabs.jsx +97 -0
  361. package/src/Tabs/TabsItem.jsx +212 -0
  362. package/src/Tabs/index.js +3 -0
  363. package/src/Tags/Tags.jsx +219 -0
  364. package/src/Tags/index.js +3 -0
  365. package/src/TextInput/TextArea.jsx +79 -0
  366. package/src/TextInput/TextInput.jsx +18 -284
  367. package/src/TextInput/TextInputBase.jsx +217 -0
  368. package/src/TextInput/index.js +2 -1
  369. package/src/TextInput/propTypes.js +29 -0
  370. package/src/ThemeProvider/ThemeProvider.jsx +11 -7
  371. package/src/ThemeProvider/useSetTheme.js +4 -0
  372. package/src/ThemeProvider/useThemeTokens.js +56 -5
  373. package/src/ThemeProvider/utils/styles.js +18 -5
  374. package/src/ThemeProvider/utils/theme-tokens.js +74 -5
  375. package/src/ToggleSwitch/ToggleSwitch.jsx +51 -53
  376. package/src/Tooltip/{Backdrop.web.jsx → Backdrop.jsx} +0 -0
  377. package/src/Tooltip/Tooltip.jsx +135 -131
  378. package/src/TooltipButton/TooltipButton.jsx +23 -27
  379. package/src/Typography/Typography.jsx +72 -59
  380. package/src/index.js +31 -3
  381. package/src/utils/a11y/index.js +2 -0
  382. package/src/utils/a11y/semantics.js +162 -0
  383. package/src/utils/a11y/textSize.js +30 -0
  384. package/src/utils/children.jsx +119 -0
  385. package/src/utils/index.js +6 -0
  386. package/src/utils/info/index.js +8 -0
  387. package/src/utils/info/platform/index.js +11 -0
  388. package/src/utils/info/platform/platform.android.js +1 -0
  389. package/src/utils/info/platform/platform.ios.js +1 -0
  390. package/src/utils/info/platform/platform.js +1 -0
  391. package/src/utils/info/platform/platform.native.js +4 -0
  392. package/src/utils/info/versions.js +6 -0
  393. package/src/utils/input.js +36 -25
  394. package/src/utils/pressability.js +96 -0
  395. package/src/utils/propTypes.js +291 -90
  396. package/src/utils/useCopy.js +30 -4
  397. package/src/utils/useHash.js +39 -0
  398. package/src/utils/useHash.native.js +6 -0
  399. package/stories/A11yText/A11yText.stories.jsx +6 -10
  400. package/stories/ActivityIndicator/ActivityIndicator.stories.jsx +1 -1
  401. package/stories/Box/Box.stories.jsx +1 -1
  402. package/stories/Button/Button.stories.jsx +7 -2
  403. package/stories/Button/ButtonGroup.stories.jsx +1 -1
  404. package/stories/Button/ButtonLink.stories.jsx +1 -1
  405. package/stories/Card/Card.stories.jsx +1 -1
  406. package/stories/Checkbox/Checkbox.stories.jsx +94 -0
  407. package/stories/Divider/Divider.stories.jsx +1 -1
  408. package/stories/ExpandCollapse/ExpandCollapse.stories.jsx +2 -2
  409. package/stories/Feedback/Feedback.stories.jsx +5 -6
  410. package/stories/FlexGrid/01 FlexGrid.stories.jsx +1 -1
  411. package/stories/FlexGrid/02 Row.stories.jsx +1 -1
  412. package/stories/FlexGrid/03 Col.stories.jsx +1 -1
  413. package/stories/Icon/Icon.stories.jsx +27 -7
  414. package/stories/IconButton/IconButton.stories.jsx +50 -0
  415. package/stories/InputLabel/InputLabel.stories.jsx +1 -1
  416. package/stories/Link/ChevronLink.stories.jsx +1 -1
  417. package/stories/Link/Link.stories.jsx +28 -18
  418. package/stories/Link/TextButton.stories.jsx +1 -1
  419. package/stories/List/List.stories.jsx +117 -0
  420. package/stories/Modal/Modal.stories.jsx +29 -0
  421. package/stories/Notification/Notification.stories.jsx +82 -0
  422. package/stories/Pagination/Pagination.stories.jsx +1 -1
  423. package/stories/Progress/Progress.stories.jsx +93 -0
  424. package/stories/Radio/Radio.stories.jsx +100 -0
  425. package/stories/RadioCard/RadioCard.stories.jsx +98 -0
  426. package/stories/Search/Search.stories.jsx +16 -0
  427. package/stories/Select/Select.stories.jsx +55 -0
  428. package/stories/SideNav/SideNav.stories.jsx +1 -1
  429. package/stories/SideNav/SideNavItem.stories.jsx +1 -1
  430. package/stories/SideNav/SideNavItemsGroup.stories.jsx +1 -1
  431. package/stories/Skeleton/Skeleton.stories.jsx +36 -0
  432. package/stories/Spacer/Spacer.stories.jsx +1 -1
  433. package/stories/StackView/StackView.stories.jsx +1 -1
  434. package/stories/StackView/StackWrap.stories.jsx +1 -1
  435. package/stories/StepTracker/StepTracker.stories.jsx +71 -0
  436. package/stories/Tabs/Tabs.stories.jsx +97 -0
  437. package/stories/Tags/Tags.stories.jsx +69 -0
  438. package/stories/TextInput/TextArea.stories.jsx +100 -0
  439. package/stories/TextInput/TextInput.stories.jsx +1 -1
  440. package/stories/ToggleSwitch/ToggleSwitch.stories.jsx +1 -1
  441. package/stories/Tooltip/Tooltip.stories.jsx +1 -1
  442. package/stories/TooltipButton/TooltipButton.stories.jsx +1 -1
  443. package/stories/Typography/Typography.stories.jsx +1 -1
  444. package/stories/{platform-supports.web.jsx → platform-supports.jsx} +1 -1
  445. package/stories/supports.jsx +38 -4
  446. package/__fixtures__/accessible.icon.svg +0 -6
  447. package/babel.config.json +0 -8
  448. package/docs/Contributing.stories.mdx +0 -9
  449. package/docs/Fonts.stories.mdx +0 -104
  450. package/docs/Icons.stories.mdx +0 -144
  451. package/docs/Introduction.stories.mdx +0 -9
  452. package/lib/ActivityIndicator/Spinner.web.js +0 -55
  453. package/lib/InputLabel/LabelContent.web.js +0 -17
  454. package/lib/config/svgr-icons-web.js +0 -9
  455. package/lib/config/svgr-icons.js +0 -52
  456. package/src/InputLabel/LabelContent.web.jsx +0 -13
  457. package/src/config/svgr-icons-web.js +0 -11
  458. package/src/config/svgr-icons.js +0 -46
@@ -1,16 +1,45 @@
1
- import React from 'react';
2
- import ButtonBase from './ButtonBase';
3
- import buttonPropTypes from './propTypes';
4
- import { a11yProps } from '../utils/propTypes';
1
+ "use strict";
5
2
 
6
- const Button = ({
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _react = _interopRequireWildcard(require("react"));
9
+
10
+ var _ButtonBase = _interopRequireDefault(require("./ButtonBase"));
11
+
12
+ var _propTypes = _interopRequireWildcard(require("./propTypes"));
13
+
14
+ var _ThemeProvider = require("../ThemeProvider");
15
+
16
+ var _propTypes2 = require("../utils/propTypes");
17
+
18
+ var _jsxRuntime = require("react/jsx-runtime");
19
+
20
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
+
22
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
23
+
24
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
25
+
26
+ const Button = /*#__PURE__*/(0, _react.forwardRef)(({
7
27
  accessibilityRole = 'button',
28
+ tokens,
29
+ variant,
8
30
  ...props
9
- }) => /*#__PURE__*/React.createElement(ButtonBase, Object.assign({}, props, {
10
- accessibilityRole: accessibilityRole
11
- }));
12
-
13
- Button.propTypes = { ...a11yProps.types,
14
- ...buttonPropTypes
31
+ }, ref) => {
32
+ const getTokens = (0, _ThemeProvider.useThemeTokensCallback)('Button', tokens, variant);
33
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_ButtonBase.default, { ...props,
34
+ tokens: getTokens,
35
+ accessibilityRole: accessibilityRole,
36
+ ref: ref
37
+ });
38
+ });
39
+ Button.displayName = 'Button';
40
+ Button.propTypes = { ..._propTypes2.a11yProps.types,
41
+ ..._propTypes.default,
42
+ children: _propTypes.textAndA11yText
15
43
  };
16
- export default Button;
44
+ var _default = Button;
45
+ exports.default = _default;
@@ -1,17 +1,33 @@
1
- import React from 'react';
2
- import { Pressable, Text, View, StyleSheet, Platform } from 'react-native';
3
- import { useThemeTokensCallback } from '../ThemeProvider';
4
- import { applyTextStyles, applyShadowToken } from '../ThemeProvider/utils';
5
- import buttonPropTypes from './propTypes';
6
- import { a11yProps, hrefAttrsProp, linkProps } from '../utils/propTypes';
1
+ "use strict";
7
2
 
8
- const getCursorStyle = (inactive, accessibilityRole) => {
9
- if (inactive) return 'not-allowed'; // These roles should result in cursor: pointer but don't in current RNW releases
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
10
7
 
11
- if (['checkbox', 'radio', 'switch'].includes(accessibilityRole)) return 'pointer'; // For everything else, let React Native Web figure it out internally
8
+ var _react = _interopRequireWildcard(require("react"));
12
9
 
13
- return undefined;
14
- };
10
+ var _Pressable = _interopRequireDefault(require("react-native-web/dist/cjs/exports/Pressable"));
11
+
12
+ var _View = _interopRequireDefault(require("react-native-web/dist/cjs/exports/View"));
13
+
14
+ var _StyleSheet = _interopRequireDefault(require("react-native-web/dist/cjs/exports/StyleSheet"));
15
+
16
+ var _Platform = _interopRequireDefault(require("react-native-web/dist/cjs/exports/Platform"));
17
+
18
+ var _utils = require("../ThemeProvider/utils");
19
+
20
+ var _propTypes = _interopRequireDefault(require("./propTypes"));
21
+
22
+ var _utils2 = require("../utils");
23
+
24
+ var _jsxRuntime = require("react/jsx-runtime");
25
+
26
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
27
+
28
+ 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); }
29
+
30
+ 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; }
15
31
 
16
32
  const getOuterBorderOffset = ({
17
33
  outerBorderGap = 0,
@@ -23,17 +39,19 @@ const selectOuterContainerStyles = ({
23
39
  opacity,
24
40
  outerBorderColor,
25
41
  outerBorderWidth,
26
- outerBorderGap = 0,
27
- outerBorderRadius = 0,
42
+ outerBorderGap,
43
+ borderRadius,
28
44
  outerBackgroundColor
29
45
  }) => ({
30
46
  alignSelf,
31
- padding: outerBorderGap,
32
- borderWidth: outerBorderWidth,
33
- borderColor: outerBorderColor,
34
- borderRadius: outerBorderRadius + outerBorderGap,
35
47
  backgroundColor: outerBackgroundColor,
36
- opacity
48
+ opacity,
49
+ ...(0, _utils.applyOuterBorder)({
50
+ outerBorderGap,
51
+ outerBorderWidth,
52
+ outerBorderColor,
53
+ borderRadius
54
+ })
37
55
  });
38
56
 
39
57
  const selectOuterWidthStyles = ({
@@ -47,14 +65,12 @@ const selectOuterWidthStyles = ({
47
65
  outerBorderGap,
48
66
  outerBorderWidth
49
67
  });
50
- const widthStyles = {
51
- margin: 0 - outerBorderOffset
52
- };
68
+ const widthStyles = {};
53
69
 
54
70
  if (!width) {
55
71
  return { ...widthStyles,
56
72
  // Wrap content, stopping a flex parent's default align-items: stretch stretching focus ring beyond content
57
- ...Platform.select({
73
+ ..._Platform.default.select({
58
74
  // width: fit-content isn't supported on Firefox; can't cascade props like CSS `width: fit-content; width: --moz-fit-content;`
59
75
  web: {
60
76
  display: 'inline-flex'
@@ -70,7 +86,7 @@ const selectOuterWidthStyles = ({
70
86
  } // Ensure the negative margin doesn't make element off-centre
71
87
 
72
88
 
73
- if (Platform.OS === 'web') {
89
+ if (_Platform.default.OS === 'web') {
74
90
  widthStyles.width = `calc(${width} + ${outerBorderOffset * 2}px)`;
75
91
  return widthStyles;
76
92
  } // Can't use calc() on native but (unlike on web) flexGrow fills the container width here
@@ -94,7 +110,8 @@ const selectInnerContainerStyles = ({
94
110
  paddingTop,
95
111
  paddingBottom,
96
112
  shadow,
97
- borderWidth
113
+ borderWidth,
114
+ minWidth
98
115
  }) => {
99
116
  // Subtract border width from padding so overall button width/height doesn't
100
117
  // jump around if the border width changes (avoiding NaN and negative padding)
@@ -106,7 +123,8 @@ const selectInnerContainerStyles = ({
106
123
  paddingTop: offsetBorder(paddingTop),
107
124
  paddingBottom: offsetBorder(paddingBottom),
108
125
  backgroundColor,
109
- ...applyShadowToken(shadow)
126
+ minWidth,
127
+ ...(0, _utils.applyShadowToken)(shadow)
110
128
  };
111
129
  };
112
130
 
@@ -127,7 +145,7 @@ const selectTextStyles = ({
127
145
  fontName,
128
146
  fontWeight,
129
147
  textAlign
130
- }) => applyTextStyles({
148
+ }) => (0, _utils.applyTextStyles)({
131
149
  fontSize,
132
150
  color,
133
151
  lineHeight,
@@ -138,104 +156,114 @@ const selectTextStyles = ({
138
156
 
139
157
  const selectWebOnlyStyles = (inactive, themeTokens, {
140
158
  accessibilityRole
141
- }) => Platform.OS === 'web' ? {
142
- // if it would overflow the container, wraps instead
143
- maxWidth: `calc(100% + ${getOuterBorderOffset(themeTokens) * 2}px)`,
144
- cursor: getCursorStyle(inactive, accessibilityRole),
145
- outline: 'none' // removes the default browser :focus outline
146
-
147
- } : {};
159
+ }) => {
160
+ return _Platform.default.select({
161
+ web: {
162
+ // if it would overflow the container, wraps instead
163
+ maxWidth: `calc(100% + ${getOuterBorderOffset(themeTokens) * 2}px)`,
164
+ outline: 'none',
165
+ // removes the default browser :focus outline
166
+ ...(0, _utils2.getCursorStyle)(inactive, accessibilityRole)
167
+ },
168
+ default: {}
169
+ });
170
+ };
148
171
 
149
- const ButtonBase = ({
172
+ const ButtonBase = /*#__PURE__*/(0, _react.forwardRef)(({
150
173
  href,
151
174
  hrefAttrs,
152
175
  children,
153
- variant,
154
176
  onPress,
155
- tokens,
177
+ tokens = {},
156
178
  disabled = false,
157
179
  // alias for inactive
158
180
  inactive = disabled,
159
181
  selected = false,
182
+ dataSet,
160
183
  ...rest
161
- }) => {
162
- const getTokens = useThemeTokensCallback('Button', tokens, variant);
163
-
164
- const getButtonState = ({
165
- pressed,
166
- focused,
167
- hovered
168
- }) => ({
169
- pressed,
170
- focus: focused,
171
- hover: hovered,
184
+ }, ref) => {
185
+ const extraButtonState = {
172
186
  inactive,
173
187
  selected
174
- });
188
+ };
175
189
 
176
- const getTokensByPressableState = pressableState => getTokens(getButtonState(pressableState));
190
+ const resolveButtonTokens = pressableState => (0, _utils2.resolvePressableTokens)(tokens, pressableState, extraButtonState);
177
191
 
178
- const a11y = a11yProps.select(rest);
192
+ const a11y = _utils2.a11yProps.select(rest);
179
193
 
180
194
  const getPressableStyle = pressableState => {
181
- const themeTokens = getTokensByPressableState(pressableState);
182
- return [staticStyles.wrapper, selectWebOnlyStyles(inactive, themeTokens, a11y), selectOuterContainerStyles(themeTokens), selectOuterWidthStyles(themeTokens)];
195
+ const themeTokens = resolveButtonTokens(pressableState);
196
+ return [staticStyles.row, selectWebOnlyStyles(inactive, themeTokens, a11y), selectOuterContainerStyles(themeTokens), selectOuterWidthStyles(themeTokens)];
183
197
  };
184
198
 
185
- const handlePress = linkProps.handleHref({
186
- href,
187
- onPress
188
- });
189
- return /*#__PURE__*/React.createElement(Pressable, Object.assign({
190
- onPress: handlePress,
199
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Pressable.default, {
200
+ ref: ref,
201
+ href: href,
202
+ onPress: _utils2.linkProps.handleHref({
203
+ href,
204
+ onPress
205
+ }),
191
206
  style: getPressableStyle,
192
207
  disabled: inactive,
193
- href: href
194
- }, hrefAttrsProp.spread(hrefAttrs), a11y), pressableState => {
195
- const themeTokens = getTokensByPressableState(pressableState);
196
- const containerStyles = selectInnerContainerStyles(themeTokens);
197
- const borderStyles = selectBorderStyles(themeTokens);
198
- const textStyles = { ...selectTextStyles(themeTokens),
199
- ...Platform.select({
200
- // TODO: https://github.com/telus/universal-design-system/issues/487
201
- web: {
202
- transition: 'color 200ms'
203
- }
204
- })
205
- }; // If the container has a width set, fill it instead of sizing from content.
206
- // If in future we support text alignments other than center, add here.
208
+ dataSet: dataSet,
209
+ hrefAttrs: hrefAttrs,
210
+ ...a11y,
211
+ children: pressableState => {
212
+ const themeTokens = resolveButtonTokens(pressableState);
213
+ const containerStyles = selectInnerContainerStyles(themeTokens);
214
+ const borderStyles = selectBorderStyles(themeTokens);
215
+ const textStyles = [selectTextStyles(themeTokens), staticStyles.text]; // If the container has a width set, fill it instead of sizing from content.
216
+ // If in future we support text alignments other than center, add here.
207
217
 
208
- const stretchStyles = !!themeTokens.width && staticStyles.center;
209
- return /*#__PURE__*/React.createElement(View, {
210
- style: [containerStyles, borderStyles, stretchStyles, Platform.select({
211
- web: {
212
- maxWidth: '100%',
213
- // ensure overflowing content wraps
214
- // TODO: https://github.com/telus/universal-design-system/issues/487
215
- transition: 'background-color 200ms, border-color 200ms'
216
- }
217
- })]
218
- }, typeof children === 'function' ? children({ ...getButtonState(pressableState),
219
- textStyles
220
- }) : /*#__PURE__*/React.createElement(Text, {
221
- style: textStyles
222
- }, children));
218
+ const stretchStyles = themeTokens.width ? staticStyles.stretch : staticStyles.align;
219
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
220
+ style: [containerStyles, borderStyles, stretchStyles, staticStyles.row, _Platform.default.select({
221
+ web: {
222
+ maxWidth: '100%',
223
+ // ensure overflowing content wraps
224
+ // TODO: https://github.com/telus/universal-design-system/issues/487
225
+ transition: 'background-color 200ms, border-color 200ms'
226
+ }
227
+ })],
228
+ children: (0, _utils2.wrapStringsInText)(typeof children === 'function' ? children({ ...(0, _utils2.resolvePressableState)(pressableState, extraButtonState),
229
+ textStyles
230
+ }) : children, {
231
+ style: textStyles
232
+ })
233
+ });
234
+ }
223
235
  });
236
+ });
237
+ ButtonBase.displayName = 'ButtonBase';
238
+ ButtonBase.propTypes = { ..._utils2.a11yProps.types,
239
+ ..._propTypes.default,
240
+ ..._utils2.linkProps.types
224
241
  };
225
242
 
226
- ButtonBase.propTypes = { ...a11yProps.types,
227
- ...buttonPropTypes,
228
- ...linkProps.types
229
- };
230
- const staticStyles = StyleSheet.create({
231
- wrapper: {
232
- flexDirection: 'row' // ensures alignSelf is horizontal
233
-
243
+ const staticStyles = _StyleSheet.default.create({
244
+ row: {
245
+ // Apply all button alignment horizontally; no vertical stacking within a button
246
+ flexDirection: 'row'
247
+ },
248
+ text: {
249
+ flexGrow: 1,
250
+ // On native but not web, flexShrink here wraps text prematurely
251
+ ..._Platform.default.select({
252
+ // TODO: https://github.com/telus/universal-design-system/issues/487
253
+ web: {
254
+ transition: 'color 200ms'
255
+ }
256
+ })
234
257
  },
235
- center: {
258
+ align: {
259
+ alignItems: 'center'
260
+ },
261
+ stretch: {
236
262
  flex: 1,
237
263
  alignItems: 'center',
238
264
  justifyContent: 'center'
239
265
  }
240
266
  });
241
- export default ButtonBase;
267
+
268
+ var _default = ButtonBase;
269
+ exports.default = _default;
@@ -1,16 +1,42 @@
1
- import React from 'react';
2
- import PropTypes from 'prop-types';
3
- import { Platform } from 'react-native';
4
- import ButtonBase from './ButtonBase';
5
- import { StackWrap } from '../StackView';
6
- import { useViewport } from '../ViewportProvider';
7
- import { useThemeTokens } from '../ThemeProvider';
8
- import { a11yProps, pressProps, variantProp, getTokensPropType, selectTokens } from '../utils/propTypes';
9
- import { useMultipleInputValues } from '../utils/input';
10
-
11
- const ButtonGroup = ({
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 _airbnbPropTypes = _interopRequireDefault(require("airbnb-prop-types"));
13
+
14
+ var _Platform = _interopRequireDefault(require("react-native-web/dist/cjs/exports/Platform"));
15
+
16
+ var _ButtonBase = _interopRequireDefault(require("./ButtonBase"));
17
+
18
+ var _StackView = require("../StackView");
19
+
20
+ var _ViewportProvider = require("../ViewportProvider");
21
+
22
+ var _ThemeProvider = require("../ThemeProvider");
23
+
24
+ var _propTypes2 = require("../utils/propTypes");
25
+
26
+ var _input = require("../utils/input");
27
+
28
+ var _pressability = require("../utils/pressability");
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 ButtonGroup = /*#__PURE__*/(0, _react.forwardRef)(({
12
39
  variant,
13
- buttonVariant = {},
14
40
  tokens,
15
41
  items = [],
16
42
  values,
@@ -19,137 +45,133 @@ const ButtonGroup = ({
19
45
  onChange,
20
46
  readOnly = false,
21
47
  inactive = false,
22
- accessibilityRole = maxValues === 1 ? 'radioGroup' // radioGroup is cross-platform; only web aria has generic groups
23
- : Platform.select({
48
+ accessibilityRole = maxValues === 1 ? 'radiogroup' // radiogroup is cross-platform; only web aria has generic groups
49
+ : _Platform.default.select({
24
50
  web: 'group',
25
51
  default: 'none'
26
52
  }),
27
53
  ...rest
28
- }) => {
29
- const viewport = useViewport();
30
- const themeTokens = useThemeTokens('ButtonGroup', tokens, variant, {
54
+ }, ref) => {
55
+ const viewport = (0, _ViewportProvider.useViewport)();
56
+ const themeTokens = (0, _ThemeProvider.useThemeTokens)('ButtonGroup', tokens, variant, {
31
57
  viewport
32
58
  });
33
- const stackTokens = selectTokens('StackView', themeTokens);
59
+ const stackTokens = (0, _propTypes2.selectTokens)('StackView', themeTokens);
34
60
  const {
35
61
  direction,
36
62
  space
37
63
  } = themeTokens;
64
+ const getButtonTokens = (0, _ThemeProvider.useThemeTokensCallback)('ButtonGroupItem', tokens, variant);
38
65
  const {
39
66
  currentValues,
40
67
  toggleOneValue
41
- } = useMultipleInputValues({
68
+ } = (0, _input.useMultipleInputValues)({
42
69
  initialValues,
43
70
  values,
44
71
  maxValues,
45
72
  onChange,
46
73
  readOnly
47
74
  });
48
- const a11y = a11yProps.select({
75
+
76
+ const a11y = _propTypes2.a11yProps.select({
49
77
  accessibilityRole,
50
78
  ...rest
51
79
  });
52
- const itemA11yRole = a11y.accessibilityRole === 'radioGroup' ? 'radio' : 'checkbox';
53
- return /*#__PURE__*/React.createElement(StackWrap, Object.assign({}, a11y, {
80
+
81
+ const itemA11yRole = a11y.accessibilityRole === 'radiogroup' ? 'radio' : 'checkbox';
82
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_StackView.StackWrap, { ...a11y,
54
83
  space: space,
55
84
  direction: direction,
56
- tokens: stackTokens
57
- }), items.map(({
58
- label,
59
- id = label,
60
- accessibilityLabel
61
- }, index) => {
62
- const isSelected = currentValues.includes(id); // Allow handlers to be passed down for blur, hover, focus, pressIn, etc
63
-
64
- const pressHandlers = Object.fromEntries(Object.entries(pressProps.select(rest)).map(([key, handler]) => ({
65
- [key]: args => {
66
- // Pass each handler data on this button and current selection
67
- handler({
68
- id,
69
- label,
70
- currentValues
71
- }, ...args);
72
- }
73
- })));
74
-
75
- const handlePress = () => {
76
- if (pressHandlers.onPress) pressHandlers.onPress();
77
- toggleOneValue(id);
78
- };
79
-
80
- const itemA11y = {
81
- accessibilityState: {
82
- checked: isSelected
83
- },
84
- accessibilityRole: itemA11yRole,
85
+ tokens: stackTokens,
86
+ ref: ref,
87
+ children: items.map(({
88
+ label,
89
+ id = label,
85
90
  accessibilityLabel,
86
- ...Platform.select({
87
- web: {
88
- // accessibilityPosInSet etc exists in React Native Web main branch
89
- // but not in a release compatible with Expo etc; just use `aria-*`
90
- 'aria-setsize': items.length,
91
- 'aria-posinset': index + 1
91
+ ref: itemRef
92
+ }, index) => {
93
+ const isSelected = currentValues.includes(id); // Pass an object of relevant component state as first argument for any passed-in press handlers
94
+
95
+ const pressHandlers = (0, _pressability.getPressHandlersWithArgs)(rest, [{
96
+ id,
97
+ label,
98
+ currentValues
99
+ }]);
100
+
101
+ const handlePress = event => {
102
+ if (pressHandlers.onPress) pressHandlers.onPress();
103
+ toggleOneValue(id, event);
104
+ };
105
+
106
+ const itemA11y = {
107
+ accessibilityState: {
108
+ checked: isSelected
92
109
  },
93
- default: {}
94
- })
95
- }; // Ensure button is direct child of group as MacOS voiceover only applies "X of Y" to
96
- // "radio" if it's a direct child of "radiogroup", even if aria-posinset etc exists
97
-
98
- return /*#__PURE__*/React.createElement(ButtonBase, Object.assign({
99
- key: id
100
- }, pressHandlers, {
101
- onPress: handlePress,
102
- variant: {
103
- component: 'ButtonGroup',
104
- ...buttonVariant
105
- },
106
- selected: isSelected,
107
- inactive: inactive
108
- }, itemA11y), label);
109
- }));
110
- };
110
+ accessibilityRole: itemA11yRole,
111
+ accessibilityLabel,
112
+ ..._propTypes2.a11yProps.getPositionInSet(items.length, index)
113
+ }; // Ensure button is direct child of group as MacOS voiceover only applies "X of Y" to
114
+ // "radio" if it's a direct child of "radiogroup", even if aria-posinset etc exists
111
115
 
112
- ButtonGroup.propTypes = { ...a11yProps.propTypes,
113
- ...pressProps.propTypes,
114
- tokens: getTokensPropType('ButtonGroup'),
115
- variant: variantProp.propType,
116
- buttonVariant: variantProp.propType,
116
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_ButtonBase.default, {
117
+ ref: itemRef,
118
+ ...pressHandlers,
119
+ onPress: handlePress,
120
+ tokens: getButtonTokens,
121
+ selected: isSelected,
122
+ inactive: inactive,
123
+ ...itemA11y,
124
+ children: label
125
+ }, id);
126
+ })
127
+ });
128
+ });
129
+ ButtonGroup.displayName = 'ButtonGroup';
130
+ ButtonGroup.propTypes = { ..._propTypes2.a11yProps.propTypes,
131
+ ..._propTypes2.pressProps.propTypes,
132
+ tokens: (0, _propTypes2.getTokensPropType)('ButtonGroup'),
133
+ variant: _propTypes2.variantProp.propType,
117
134
 
118
135
  /**
119
136
  * The maximum number of items a user may select at once. Defaults to 1 and behaves
120
137
  * like radio buttons. To have no limit and allow any number of selections, pass `null`.
121
138
  */
122
- maxValues: PropTypes.number,
139
+ maxValues: _propTypes.default.number,
123
140
 
124
141
  /**
125
142
  * The options a user may select
126
143
  */
127
- items: PropTypes.arrayOf(PropTypes.shape({
144
+ items: _propTypes.default.arrayOf(_propTypes.default.shape({
128
145
  /**
129
146
  * The text displayed to the user in the button, describing this option,
130
147
  * passed to the button as its child.
131
148
  */
132
- label: PropTypes.string.isRequired,
149
+ label: _propTypes.default.string.isRequired,
133
150
 
134
151
  /**
135
152
  * An optional accessibility label may be passed to ButtonGroup Buttons
136
153
  * which is applied as normal for a React Native accessibilityLabel prop.
137
154
  */
138
- accessibilityLabel: PropTypes.string,
155
+ accessibilityLabel: _propTypes.default.string,
139
156
 
140
157
  /**
141
158
  * An optional unique string may be provided to identify this option,
142
159
  * which will be used in code and passed to any onChange function.
143
160
  * If not provided, the label is used.
144
161
  */
145
- id: PropTypes.string
162
+ id: _propTypes.default.string,
163
+
164
+ /**
165
+ * An optional ref for one individual button in the ButtonGroup
166
+ */
167
+ ref: _airbnbPropTypes.default.ref()
146
168
  })),
147
169
 
148
170
  /**
149
171
  * If provided, this function is called when the current selection is changed
150
172
  * and is passed an array of the `id`s of all currently selected `items`.
151
173
  */
152
- onChange: PropTypes.func,
174
+ onChange: _propTypes.default.func,
153
175
 
154
176
  /**
155
177
  * If the selected item(s) in the button group are to be controlled externally by
@@ -157,13 +179,14 @@ ButtonGroup.propTypes = { ...a11yProps.propTypes,
157
179
  * Passing an array for "values" makes the ButtonGroup a "controlled" component that
158
180
  * expects its state to be handled via `onChange` and so doesn't handle it itself.
159
181
  */
160
- values: PropTypes.arrayOf(PropTypes.string),
182
+ values: _propTypes.default.arrayOf(_propTypes.default.string),
161
183
 
162
184
  /**
163
185
  * If `values` is not passed, making the ButtonGroup an "uncontrolled" component
164
186
  * managing its own selected state, a default set of selections may be provided.
165
187
  * Changing the `initialValues` does not change the user's selections.
166
188
  */
167
- initialValues: PropTypes.arrayOf(PropTypes.string)
189
+ initialValues: _propTypes.default.arrayOf(_propTypes.default.string)
168
190
  };
169
- export default ButtonGroup;
191
+ var _default = ButtonGroup;
192
+ exports.default = _default;