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

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