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

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 (445) hide show
  1. package/.eslintrc.js +9 -0
  2. package/.ultra.cache.json +1 -1
  3. package/CHANGELOG.md +71 -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 +438 -31
  9. package/__tests__/ActivityIndicator/ActivityIndicator.test.jsx +1 -1
  10. package/__tests__/Button/ButtonGroup.test.jsx +6 -7
  11. package/__tests__/Checkbox/Checkbox.test.jsx +2 -2
  12. package/__tests__/Checkbox/CheckboxGroup.test.jsx +246 -0
  13. package/__tests__/ExpandCollapse/ExpandCollapse.test.jsx +2 -2
  14. package/__tests__/HorizontalScroll/HorizontalScroll.test.jsx +164 -0
  15. package/__tests__/Icon/Icon.test.jsx +3 -3
  16. package/__tests__/IconButton/IconButton.test.jsx +52 -0
  17. package/__tests__/Link/LinkBase.test.jsx +0 -14
  18. package/__tests__/Modal/Modal.test.jsx +47 -0
  19. package/__tests__/Notification/Notification.test.jsx +20 -0
  20. package/__tests__/Pagination/Pagination.test.jsx +2 -2
  21. package/__tests__/Progress/Progress.test.jsx +79 -0
  22. package/__tests__/Radio/Radio.test.jsx +2 -2
  23. package/__tests__/Radio/RadioGroup.test.jsx +220 -0
  24. package/__tests__/RadioCard/RadioCard.test.jsx +87 -0
  25. package/__tests__/RadioCard/RadioCardGroup.test.jsx +246 -0
  26. package/__tests__/Search/Search.test.jsx +73 -0
  27. package/__tests__/Select/Select.test.jsx +3 -2
  28. package/__tests__/Skeleton/Skeleton.test.jsx +1 -1
  29. package/__tests__/StepTracker/StepTracker.test.jsx +94 -0
  30. package/__tests__/Tabs/Tabs.test.jsx +40 -0
  31. package/__tests__/Tags/Tags.test.jsx +5 -6
  32. package/__tests__/TextInput/TextArea.test.jsx +3 -2
  33. package/__tests__/TextInput/TextInputBase.test.jsx +10 -5
  34. package/__tests__/ThemeProvider/ThemeProvider.test.jsx +77 -0
  35. package/__tests__/ThemeProvider/useThemeTokens.test.jsx +9 -5
  36. package/__tests__/ThemeProvider/utils/theme-tokens.test.js +41 -0
  37. package/__tests__/ToggleSwitch/ToggleSwitch.test.jsx +3 -2
  38. package/__tests__/utils/children.test.jsx +128 -0
  39. package/__tests__/utils/input.test.js +59 -1
  40. package/__tests__/utils/semantics.test.jsx +43 -0
  41. package/__tests__/utils/useCopy.test.js +14 -3
  42. package/babel.config.js +20 -0
  43. package/jest.config.js +6 -3
  44. package/lib/A11yInfoProvider/index.js +54 -26
  45. package/lib/A11yText/index.js +45 -17
  46. package/lib/ActivityIndicator/Spinner.js +81 -0
  47. package/lib/ActivityIndicator/Spinner.native.js +129 -91
  48. package/lib/ActivityIndicator/index.js +28 -12
  49. package/lib/ActivityIndicator/shared.js +27 -12
  50. package/lib/BaseProvider/index.js +34 -11
  51. package/lib/Box/Box.js +153 -35
  52. package/lib/Box/index.js +13 -2
  53. package/lib/Button/Button.js +38 -16
  54. package/lib/Button/ButtonBase.js +93 -79
  55. package/lib/Button/ButtonGroup.js +112 -73
  56. package/lib/Button/ButtonLink.js +45 -19
  57. package/lib/Button/index.js +31 -4
  58. package/lib/Button/propTypes.js +32 -9
  59. package/lib/Card/Card.js +38 -41
  60. package/lib/Card/CardBase.js +86 -0
  61. package/lib/Card/PressableCardBase.js +141 -0
  62. package/lib/Card/index.js +40 -2
  63. package/lib/Checkbox/Checkbox.js +158 -111
  64. package/lib/Checkbox/CheckboxGroup.js +241 -0
  65. package/lib/Checkbox/CheckboxInput.js +74 -0
  66. package/lib/Checkbox/CheckboxInput.native.js +9 -1
  67. package/lib/Checkbox/index.js +21 -2
  68. package/lib/Divider/Divider.js +59 -28
  69. package/lib/Divider/index.js +13 -2
  70. package/lib/ExpandCollapse/Accordion.js +26 -7
  71. package/lib/ExpandCollapse/Control.js +60 -31
  72. package/lib/ExpandCollapse/ExpandCollapse.js +50 -28
  73. package/lib/ExpandCollapse/Panel.js +83 -44
  74. package/lib/ExpandCollapse/index.js +25 -7
  75. package/lib/Feedback/Feedback.js +77 -43
  76. package/lib/Feedback/index.js +13 -2
  77. package/lib/Fieldset/Fieldset.js +165 -0
  78. package/lib/Fieldset/FieldsetContainer.js +46 -0
  79. package/lib/Fieldset/FieldsetContainer.native.js +38 -0
  80. package/lib/Fieldset/Legend.js +38 -0
  81. package/lib/Fieldset/Legend.native.js +48 -0
  82. package/lib/Fieldset/cssReset.js +21 -0
  83. package/lib/Fieldset/index.js +13 -0
  84. package/lib/FlexGrid/Col/Col.js +73 -41
  85. package/lib/FlexGrid/Col/index.js +13 -2
  86. package/lib/FlexGrid/FlexGrid.js +99 -49
  87. package/lib/FlexGrid/Row/Row.js +58 -30
  88. package/lib/FlexGrid/Row/index.js +13 -2
  89. package/lib/FlexGrid/helpers/index.js +9 -1
  90. package/lib/FlexGrid/index.js +13 -2
  91. package/lib/FlexGrid/providers/GutterContext.js +15 -3
  92. package/lib/HorizontalScroll/HorizontalScroll.js +200 -0
  93. package/lib/HorizontalScroll/HorizontalScrollButton.js +127 -0
  94. package/lib/HorizontalScroll/ScrollViewEnd.js +66 -0
  95. package/lib/HorizontalScroll/ScrollViewEnd.native.js +41 -0
  96. package/lib/HorizontalScroll/dictionary.js +18 -0
  97. package/lib/HorizontalScroll/index.js +35 -0
  98. package/lib/HorizontalScroll/itemPositions.js +128 -0
  99. package/lib/Icon/Icon.js +57 -48
  100. package/lib/Icon/IconText.js +54 -25
  101. package/lib/Icon/index.js +31 -4
  102. package/lib/IconButton/IconButton.js +140 -0
  103. package/lib/IconButton/index.js +13 -0
  104. package/lib/InputLabel/InputLabel.js +102 -40
  105. package/lib/InputLabel/LabelContent.js +41 -0
  106. package/lib/InputLabel/LabelContent.native.js +32 -6
  107. package/lib/InputLabel/index.js +13 -2
  108. package/lib/InputSupports/InputSupports.js +71 -52
  109. package/lib/InputSupports/index.js +13 -2
  110. package/lib/InputSupports/propTypes.js +19 -8
  111. package/lib/InputSupports/useInputSupports.js +41 -0
  112. package/lib/Link/ChevronLink.js +44 -20
  113. package/lib/Link/InlinePressable.js +56 -0
  114. package/lib/Link/InlinePressable.native.js +39 -15
  115. package/lib/Link/Link.js +36 -13
  116. package/lib/Link/LinkBase.js +98 -61
  117. package/lib/Link/TextButton.js +41 -17
  118. package/lib/Link/index.js +39 -5
  119. package/lib/List/List.js +55 -26
  120. package/lib/List/ListItem.js +79 -41
  121. package/lib/List/index.js +13 -2
  122. package/lib/Modal/Modal.js +231 -0
  123. package/lib/Modal/dictionary.js +16 -0
  124. package/lib/Modal/index.js +13 -0
  125. package/lib/Notification/Notification.js +216 -0
  126. package/lib/Notification/dictionary.js +15 -0
  127. package/lib/Notification/index.js +13 -0
  128. package/lib/Pagination/PageButton.js +61 -28
  129. package/lib/Pagination/Pagination.js +78 -43
  130. package/lib/Pagination/SideButton.js +73 -42
  131. package/lib/Pagination/dictionary.js +9 -2
  132. package/lib/Pagination/index.js +13 -2
  133. package/lib/Pagination/usePagination.js +12 -2
  134. package/lib/Progress/Progress.js +104 -0
  135. package/lib/Progress/ProgressBar.js +157 -0
  136. package/lib/Progress/ProgressBarBackground.js +61 -0
  137. package/lib/Progress/index.js +16 -0
  138. package/lib/Radio/Radio.js +116 -114
  139. package/lib/Radio/RadioButton.js +152 -0
  140. package/lib/Radio/RadioGroup.js +244 -0
  141. package/lib/Radio/RadioInput.js +76 -0
  142. package/lib/Radio/RadioInput.native.js +9 -1
  143. package/lib/Radio/index.js +21 -2
  144. package/lib/RadioCard/RadioCard.js +244 -0
  145. package/lib/RadioCard/RadioCardGroup.js +252 -0
  146. package/lib/RadioCard/index.js +21 -0
  147. package/lib/Search/Search.js +254 -0
  148. package/lib/Search/dictionary.js +19 -0
  149. package/lib/Search/index.js +13 -0
  150. package/lib/Select/Group.js +33 -0
  151. package/lib/Select/Group.native.js +16 -5
  152. package/lib/Select/Item.js +29 -0
  153. package/lib/Select/Item.native.js +14 -4
  154. package/lib/Select/Picker.js +84 -0
  155. package/lib/Select/Picker.native.js +73 -30
  156. package/lib/Select/Select.js +155 -85
  157. package/lib/Select/index.js +19 -6
  158. package/lib/SideNav/Item.js +63 -37
  159. package/lib/SideNav/ItemContent.js +41 -15
  160. package/lib/SideNav/ItemsGroup.js +55 -31
  161. package/lib/SideNav/SideNav.js +100 -73
  162. package/lib/SideNav/index.js +15 -1
  163. package/lib/Skeleton/Skeleton.js +64 -46
  164. package/lib/Skeleton/index.js +13 -2
  165. package/lib/Skeleton/skeleton.constant.js +12 -0
  166. package/lib/Skeleton/skeletonWebAnimation.js +27 -0
  167. package/lib/Skeleton/useSkeletonNativeAnimation.js +37 -0
  168. package/lib/Spacer/Spacer.js +49 -18
  169. package/lib/Spacer/index.js +13 -2
  170. package/lib/StackView/StackView.js +72 -31
  171. package/lib/StackView/StackWrap.js +43 -13
  172. package/lib/StackView/StackWrap.native.js +13 -2
  173. package/lib/StackView/StackWrapBox.js +77 -29
  174. package/lib/StackView/StackWrapGap.js +56 -26
  175. package/lib/StackView/common.js +23 -6
  176. package/lib/StackView/getStackedContent.js +47 -17
  177. package/lib/StackView/index.js +29 -5
  178. package/lib/StepTracker/Step.js +245 -0
  179. package/lib/StepTracker/StepTracker.js +202 -0
  180. package/lib/StepTracker/dictionary.js +17 -0
  181. package/lib/StepTracker/index.js +13 -0
  182. package/lib/Tabs/Tabs.js +124 -0
  183. package/lib/Tabs/TabsItem.js +238 -0
  184. package/lib/Tabs/index.js +13 -0
  185. package/lib/Tags/Tags.js +148 -99
  186. package/lib/Tags/index.js +13 -2
  187. package/lib/TextInput/TextArea.js +57 -28
  188. package/lib/TextInput/TextInput.js +50 -23
  189. package/lib/TextInput/TextInputBase.js +90 -63
  190. package/lib/TextInput/index.js +23 -3
  191. package/lib/TextInput/propTypes.js +18 -7
  192. package/lib/ThemeProvider/ThemeProvider.js +46 -18
  193. package/lib/ThemeProvider/index.js +61 -6
  194. package/lib/ThemeProvider/useSetTheme.js +19 -5
  195. package/lib/ThemeProvider/useTheme.js +13 -4
  196. package/lib/ThemeProvider/useThemeTokens.js +32 -16
  197. package/lib/ThemeProvider/utils/index.js +31 -2
  198. package/lib/ThemeProvider/utils/styles.js +50 -14
  199. package/lib/ThemeProvider/utils/theme-tokens.js +121 -12
  200. package/lib/ToggleSwitch/ToggleSwitch.js +85 -56
  201. package/lib/ToggleSwitch/index.js +13 -2
  202. package/lib/Tooltip/{Backdrop.web.js → Backdrop.js} +20 -8
  203. package/lib/Tooltip/Backdrop.native.js +39 -15
  204. package/lib/Tooltip/Tooltip.js +117 -74
  205. package/lib/Tooltip/dictionary.js +9 -2
  206. package/lib/Tooltip/getTooltipPosition.js +9 -1
  207. package/lib/Tooltip/index.js +13 -2
  208. package/lib/TooltipButton/TooltipButton.js +57 -38
  209. package/lib/TooltipButton/index.js +13 -2
  210. package/lib/Typography/Typography.js +87 -41
  211. package/lib/Typography/index.js +13 -2
  212. package/lib/ViewportProvider/ViewportProvider.js +34 -13
  213. package/lib/ViewportProvider/index.js +28 -3
  214. package/lib/ViewportProvider/useViewport.js +15 -3
  215. package/lib/ViewportProvider/useViewportListener.js +24 -10
  216. package/lib/index.js +539 -33
  217. package/lib/utils/a11y/index.js +31 -1
  218. package/lib/utils/a11y/semantics.js +173 -0
  219. package/lib/utils/a11y/textSize.js +23 -7
  220. package/lib/utils/animation/index.js +15 -2
  221. package/lib/utils/animation/useVerticalExpandAnimation.js +27 -10
  222. package/lib/utils/children.js +134 -0
  223. package/lib/utils/index.js +163 -10
  224. package/lib/utils/info/index.js +18 -6
  225. package/lib/utils/info/platform/index.js +19 -7
  226. package/lib/utils/info/platform/platform.android.js +8 -1
  227. package/lib/utils/info/platform/platform.ios.js +8 -1
  228. package/lib/utils/info/platform/platform.js +8 -0
  229. package/lib/utils/info/platform/platform.native.js +8 -1
  230. package/lib/utils/info/versions.js +15 -4
  231. package/lib/utils/input.js +53 -25
  232. package/lib/utils/pressability.js +38 -10
  233. package/lib/utils/propTypes.js +287 -141
  234. package/lib/utils/useCopy.js +40 -5
  235. package/lib/utils/useHash.js +52 -0
  236. package/lib/utils/useHash.native.js +15 -0
  237. package/lib/utils/useResponsiveProp.js +21 -9
  238. package/lib/utils/useSpacingScale.js +19 -9
  239. package/lib/utils/useUniqueId.js +12 -3
  240. package/package.json +14 -9
  241. package/release-context.json +4 -4
  242. package/src/A11yText/index.jsx +6 -4
  243. package/src/ActivityIndicator/{Spinner.web.jsx → Spinner.jsx} +5 -3
  244. package/src/ActivityIndicator/Spinner.native.jsx +5 -3
  245. package/src/Box/Box.jsx +132 -39
  246. package/src/Button/Button.jsx +10 -6
  247. package/src/Button/ButtonBase.jsx +99 -99
  248. package/src/Button/ButtonGroup.jsx +81 -69
  249. package/src/Button/ButtonLink.jsx +21 -15
  250. package/src/Button/propTypes.js +12 -2
  251. package/src/Card/Card.jsx +5 -31
  252. package/src/Card/CardBase.jsx +59 -0
  253. package/src/Card/PressableCardBase.jsx +119 -0
  254. package/src/Card/index.js +3 -0
  255. package/src/Checkbox/Checkbox.jsx +121 -112
  256. package/src/Checkbox/CheckboxGroup.jsx +206 -0
  257. package/src/Checkbox/{CheckboxInput.web.jsx → CheckboxInput.jsx} +0 -0
  258. package/src/Checkbox/index.js +2 -0
  259. package/src/Divider/Divider.jsx +7 -4
  260. package/src/ExpandCollapse/Accordion.jsx +3 -2
  261. package/src/ExpandCollapse/Control.jsx +40 -43
  262. package/src/ExpandCollapse/ExpandCollapse.jsx +26 -23
  263. package/src/ExpandCollapse/Panel.jsx +69 -63
  264. package/src/Feedback/Feedback.jsx +36 -33
  265. package/src/Fieldset/Fieldset.jsx +136 -0
  266. package/src/Fieldset/FieldsetContainer.jsx +31 -0
  267. package/src/Fieldset/FieldsetContainer.native.jsx +19 -0
  268. package/src/Fieldset/Legend.jsx +21 -0
  269. package/src/Fieldset/Legend.native.jsx +27 -0
  270. package/src/Fieldset/cssReset.js +14 -0
  271. package/src/Fieldset/index.js +3 -0
  272. package/src/FlexGrid/Col/Col.jsx +139 -132
  273. package/src/FlexGrid/FlexGrid.jsx +79 -51
  274. package/src/FlexGrid/Row/Row.jsx +55 -48
  275. package/src/HorizontalScroll/HorizontalScroll.jsx +168 -0
  276. package/src/HorizontalScroll/HorizontalScrollButton.jsx +105 -0
  277. package/src/HorizontalScroll/ScrollViewEnd.jsx +53 -0
  278. package/src/HorizontalScroll/ScrollViewEnd.native.jsx +24 -0
  279. package/src/HorizontalScroll/dictionary.js +11 -0
  280. package/src/HorizontalScroll/index.js +17 -0
  281. package/src/HorizontalScroll/itemPositions.js +101 -0
  282. package/src/Icon/Icon.jsx +43 -50
  283. package/src/Icon/IconText.jsx +23 -18
  284. package/src/Icon/index.js +2 -2
  285. package/src/IconButton/IconButton.jsx +114 -0
  286. package/src/IconButton/index.js +3 -0
  287. package/src/InputLabel/InputLabel.jsx +57 -35
  288. package/src/InputLabel/LabelContent.jsx +21 -0
  289. package/src/InputLabel/LabelContent.native.jsx +11 -2
  290. package/src/InputSupports/InputSupports.jsx +29 -45
  291. package/src/InputSupports/useInputSupports.js +30 -0
  292. package/src/Link/ChevronLink.jsx +26 -16
  293. package/src/Link/{InlinePressable.web.jsx → InlinePressable.jsx} +5 -3
  294. package/src/Link/InlinePressable.native.jsx +5 -3
  295. package/src/Link/Link.jsx +22 -16
  296. package/src/Link/LinkBase.jsx +76 -65
  297. package/src/Link/TextButton.jsx +30 -23
  298. package/src/List/List.jsx +5 -4
  299. package/src/List/ListItem.jsx +77 -82
  300. package/src/Modal/Modal.jsx +190 -0
  301. package/src/Modal/dictionary.js +9 -0
  302. package/src/Modal/index.js +3 -0
  303. package/src/Notification/Notification.jsx +164 -0
  304. package/src/Notification/dictionary.js +8 -0
  305. package/src/Notification/index.js +3 -0
  306. package/src/Pagination/PageButton.jsx +42 -35
  307. package/src/Pagination/Pagination.jsx +88 -92
  308. package/src/Pagination/SideButton.jsx +44 -41
  309. package/src/Progress/Progress.jsx +78 -0
  310. package/src/Progress/ProgressBar.jsx +123 -0
  311. package/src/Progress/ProgressBarBackground.jsx +36 -0
  312. package/src/Progress/index.js +6 -0
  313. package/src/Radio/Radio.jsx +82 -112
  314. package/src/Radio/RadioButton.jsx +142 -0
  315. package/src/Radio/RadioGroup.jsx +209 -0
  316. package/src/Radio/{RadioInput.web.jsx → RadioInput.jsx} +0 -0
  317. package/src/Radio/index.js +2 -0
  318. package/src/RadioCard/RadioCard.jsx +198 -0
  319. package/src/RadioCard/RadioCardGroup.jsx +218 -0
  320. package/src/RadioCard/index.js +5 -0
  321. package/src/Search/Search.jsx +225 -0
  322. package/src/Search/dictionary.js +12 -0
  323. package/src/Search/index.js +3 -0
  324. package/src/Select/{Group.web.jsx → Group.jsx} +0 -0
  325. package/src/Select/{Item.web.jsx → Item.jsx} +0 -0
  326. package/src/Select/Picker.jsx +74 -0
  327. package/src/Select/Picker.native.jsx +56 -49
  328. package/src/Select/Select.jsx +125 -92
  329. package/src/SideNav/Item.jsx +54 -47
  330. package/src/SideNav/ItemsGroup.jsx +50 -43
  331. package/src/SideNav/SideNav.jsx +68 -60
  332. package/src/Skeleton/Skeleton.jsx +25 -32
  333. package/src/Skeleton/skeleton.constant.js +3 -0
  334. package/src/Skeleton/skeletonWebAnimation.js +13 -0
  335. package/src/Skeleton/useSkeletonNativeAnimation.js +27 -0
  336. package/src/Spacer/Spacer.jsx +11 -4
  337. package/src/StackView/StackView.jsx +54 -23
  338. package/src/StackView/StackWrap.jsx +16 -7
  339. package/src/StackView/StackWrapBox.jsx +63 -28
  340. package/src/StackView/StackWrapGap.jsx +46 -24
  341. package/src/StackView/common.jsx +3 -2
  342. package/src/StackView/getStackedContent.jsx +8 -2
  343. package/src/StepTracker/Step.jsx +202 -0
  344. package/src/StepTracker/StepTracker.jsx +174 -0
  345. package/src/StepTracker/dictionary.js +10 -0
  346. package/src/StepTracker/index.js +3 -0
  347. package/src/Tabs/Tabs.jsx +97 -0
  348. package/src/Tabs/TabsItem.jsx +212 -0
  349. package/src/Tabs/index.js +3 -0
  350. package/src/Tags/Tags.jsx +115 -102
  351. package/src/TextInput/TextArea.jsx +5 -4
  352. package/src/TextInput/TextInput.jsx +5 -4
  353. package/src/TextInput/TextInputBase.jsx +95 -98
  354. package/src/ThemeProvider/ThemeProvider.jsx +11 -7
  355. package/src/ThemeProvider/useSetTheme.js +4 -0
  356. package/src/ThemeProvider/useThemeTokens.js +2 -2
  357. package/src/ThemeProvider/utils/styles.js +18 -5
  358. package/src/ThemeProvider/utils/theme-tokens.js +74 -5
  359. package/src/ToggleSwitch/ToggleSwitch.jsx +50 -52
  360. package/src/Tooltip/{Backdrop.web.jsx → Backdrop.jsx} +0 -0
  361. package/src/Tooltip/Tooltip.jsx +135 -131
  362. package/src/TooltipButton/TooltipButton.jsx +23 -27
  363. package/src/Typography/Typography.jsx +71 -47
  364. package/src/index.js +23 -2
  365. package/src/utils/a11y/index.js +1 -0
  366. package/src/utils/a11y/semantics.js +162 -0
  367. package/src/utils/children.jsx +119 -0
  368. package/src/utils/index.js +3 -0
  369. package/src/utils/info/platform/platform.js +1 -0
  370. package/src/utils/info/versions.js +2 -2
  371. package/src/utils/input.js +36 -25
  372. package/src/utils/pressability.js +4 -0
  373. package/src/utils/propTypes.js +199 -72
  374. package/src/utils/useCopy.js +30 -4
  375. package/src/utils/useHash.js +39 -0
  376. package/src/utils/useHash.native.js +6 -0
  377. package/stories/A11yText/A11yText.stories.jsx +6 -10
  378. package/stories/ActivityIndicator/ActivityIndicator.stories.jsx +1 -1
  379. package/stories/Box/Box.stories.jsx +1 -1
  380. package/stories/Button/Button.stories.jsx +2 -2
  381. package/stories/Button/ButtonGroup.stories.jsx +1 -1
  382. package/stories/Button/ButtonLink.stories.jsx +1 -1
  383. package/stories/Card/Card.stories.jsx +1 -1
  384. package/stories/Checkbox/Checkbox.stories.jsx +24 -1
  385. package/stories/Divider/Divider.stories.jsx +1 -1
  386. package/stories/ExpandCollapse/ExpandCollapse.stories.jsx +2 -2
  387. package/stories/Feedback/Feedback.stories.jsx +1 -1
  388. package/stories/FlexGrid/01 FlexGrid.stories.jsx +1 -1
  389. package/stories/FlexGrid/02 Row.stories.jsx +1 -1
  390. package/stories/FlexGrid/03 Col.stories.jsx +1 -1
  391. package/stories/Icon/Icon.stories.jsx +27 -7
  392. package/stories/IconButton/IconButton.stories.jsx +50 -0
  393. package/stories/InputLabel/InputLabel.stories.jsx +1 -1
  394. package/stories/Link/ChevronLink.stories.jsx +1 -1
  395. package/stories/Link/Link.stories.jsx +17 -21
  396. package/stories/Link/TextButton.stories.jsx +1 -1
  397. package/stories/List/List.stories.jsx +1 -1
  398. package/stories/Modal/Modal.stories.jsx +29 -0
  399. package/stories/Notification/Notification.stories.jsx +82 -0
  400. package/stories/Pagination/Pagination.stories.jsx +1 -1
  401. package/stories/Progress/Progress.stories.jsx +93 -0
  402. package/stories/Radio/Radio.stories.jsx +23 -36
  403. package/stories/RadioCard/RadioCard.stories.jsx +98 -0
  404. package/stories/Search/Search.stories.jsx +16 -0
  405. package/stories/Select/Select.stories.jsx +1 -1
  406. package/stories/SideNav/SideNav.stories.jsx +1 -1
  407. package/stories/SideNav/SideNavItem.stories.jsx +1 -1
  408. package/stories/SideNav/SideNavItemsGroup.stories.jsx +1 -1
  409. package/stories/Skeleton/Skeleton.stories.jsx +2 -2
  410. package/stories/Spacer/Spacer.stories.jsx +1 -1
  411. package/stories/StackView/StackView.stories.jsx +1 -1
  412. package/stories/StackView/StackWrap.stories.jsx +1 -1
  413. package/stories/StepTracker/StepTracker.stories.jsx +71 -0
  414. package/stories/Tabs/Tabs.stories.jsx +97 -0
  415. package/stories/Tags/Tags.stories.jsx +1 -1
  416. package/stories/TextInput/TextArea.stories.jsx +1 -1
  417. package/stories/TextInput/TextInput.stories.jsx +1 -1
  418. package/stories/ToggleSwitch/ToggleSwitch.stories.jsx +1 -1
  419. package/stories/Tooltip/Tooltip.stories.jsx +1 -1
  420. package/stories/TooltipButton/TooltipButton.stories.jsx +1 -1
  421. package/stories/Typography/Typography.stories.jsx +1 -1
  422. package/stories/{platform-supports.web.jsx → platform-supports.jsx} +1 -1
  423. package/stories/supports.jsx +37 -3
  424. package/__fixtures__/accessible.icon.svg +0 -6
  425. package/babel.config.json +0 -8
  426. package/docs/Contributing.stories.mdx +0 -9
  427. package/docs/Fonts.stories.mdx +0 -104
  428. package/docs/Icons.stories.mdx +0 -144
  429. package/docs/Introduction.stories.mdx +0 -9
  430. package/lib/ActivityIndicator/Spinner.web.js +0 -55
  431. package/lib/Checkbox/CheckboxInput.web.js +0 -57
  432. package/lib/InputLabel/LabelContent.web.js +0 -17
  433. package/lib/Link/InlinePressable.web.js +0 -32
  434. package/lib/Radio/RadioInput.web.js +0 -59
  435. package/lib/Select/Group.web.js +0 -18
  436. package/lib/Select/Item.web.js +0 -15
  437. package/lib/Select/Picker.web.js +0 -63
  438. package/lib/config/svgr-icons-web.js +0 -9
  439. package/lib/config/svgr-icons.js +0 -52
  440. package/lib/utils/info/platform/platform.web.js +0 -1
  441. package/src/InputLabel/LabelContent.web.jsx +0 -13
  442. package/src/Select/Picker.web.jsx +0 -67
  443. package/src/config/svgr-icons-web.js +0 -11
  444. package/src/config/svgr-icons.js +0 -46
  445. package/src/utils/info/platform/platform.web.js +0 -1
@@ -1,17 +1,50 @@
1
- import React from 'react';
2
- import PropTypes from 'prop-types';
3
- import { Pressable, StyleSheet, Text, View } from 'react-native';
4
- import CheckboxInput from './CheckboxInput'; // @todo move `LabelContent` outside of the `InputLabel` and fix
5
- // the issue with the cursor not being pointer on Web
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 _CheckboxInput = _interopRequireDefault(require("./CheckboxInput"));
23
+
24
+ var _LabelContent = _interopRequireDefault(require("../InputLabel/LabelContent"));
25
+
26
+ var _Feedback = _interopRequireDefault(require("../Feedback"));
27
+
28
+ var _StackView = _interopRequireDefault(require("../StackView"));
29
+
30
+ var _ThemeProvider = require("../ThemeProvider");
31
+
32
+ var _utils = require("../utils");
33
+
34
+ var _propTypes2 = require("../utils/propTypes");
35
+
36
+ var _useUniqueId = _interopRequireDefault(require("../utils/useUniqueId"));
6
37
 
7
- import CheckboxLabel from '../InputLabel/LabelContent';
8
- import Feedback from '../Feedback';
9
- import StackView from '../StackView';
10
- import { applyShadowToken, applyTextStyles, useThemeTokensCallback } from '../ThemeProvider';
11
- import { getTokensPropType, useInputValue, variantProp } from '../utils';
12
- import { a11yProps } from '../utils/propTypes';
13
- import useUniqueId from '../utils/useUniqueId';
38
+ var _jsxRuntime = require("react/jsx-runtime");
14
39
 
40
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
41
+
42
+ 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); }
43
+
44
+ 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; }
45
+
46
+ // @todo move `LabelContent` outside of the `InputLabel` and fix
47
+ // the issue with the cursor not being pointer on Web
15
48
  const selectInputStyles = ({
16
49
  iconBackgroundColor,
17
50
  inputBorderColor,
@@ -28,12 +61,16 @@ const selectInputStyles = ({
28
61
  borderWidth: inputBorderWidth,
29
62
  borderRadius: inputBorderRadius,
30
63
  backgroundColor: isChecked ? iconBackgroundColor : inputBackgroundColor,
31
- outlineStyle: 'solid',
32
- outlineColor: inputOutlineColor,
33
- outlineWidth: inputOutlineWidth,
34
64
  height: inputHeight,
35
65
  width: inputWidth,
36
- ...applyShadowToken(inputShadow)
66
+ ...(0, _ThemeProvider.applyShadowToken)(inputShadow),
67
+ ..._Platform.default.select({
68
+ web: {
69
+ outlineStyle: 'solid',
70
+ outlineColor: inputOutlineColor,
71
+ outlineWidth: inputOutlineWidth
72
+ }
73
+ })
37
74
  });
38
75
 
39
76
  const selectLabelStyles = ({
@@ -45,7 +82,7 @@ const selectLabelStyles = ({
45
82
  labelLineHeight
46
83
  }) => ({
47
84
  marginLeft: labelMarginLeft,
48
- ...applyTextStyles({
85
+ ...(0, _ThemeProvider.applyTextStyles)({
49
86
  color: labelColor,
50
87
  fontName: labelFontName,
51
88
  fontWeight: labelFontWeight,
@@ -54,16 +91,12 @@ const selectLabelStyles = ({
54
91
  })
55
92
  });
56
93
 
57
- const selectContainerStyles = ({
58
- containerMarginBottom
59
- }) => ({
60
- marginBottom: containerMarginBottom
61
- });
62
-
63
94
  const selectIconTokens = ({
95
+ icon,
64
96
  iconColor,
65
97
  iconSize
66
98
  }) => ({
99
+ icon,
67
100
  color: iconColor,
68
101
  size: iconSize
69
102
  });
@@ -114,7 +147,7 @@ const selectFeedbackTokens = ({
114
147
  */
115
148
 
116
149
 
117
- const Checkbox = ({
150
+ const Checkbox = /*#__PURE__*/(0, _react.forwardRef)(({
118
151
  checked,
119
152
  defaultChecked,
120
153
  error = false,
@@ -128,17 +161,17 @@ const Checkbox = ({
128
161
  value,
129
162
  variant,
130
163
  ...rest
131
- }) => {
164
+ }, ref) => {
132
165
  const {
133
166
  currentValue: isChecked,
134
167
  setValue: setIsChecked,
135
168
  isControlled
136
- } = useInputValue({
169
+ } = (0, _utils.useInputValue)({
137
170
  value: checked,
138
171
  initialValue: defaultChecked,
139
172
  onChange
140
173
  }, 'useCheckboxValue');
141
- const getTokens = useThemeTokensCallback('Checkbox', tokens, {
174
+ const getTokens = (0, _ThemeProvider.useThemeTokensCallback)('Checkbox', tokens, {
142
175
  checked: isChecked,
143
176
  inactive,
144
177
  error,
@@ -150,150 +183,164 @@ const Checkbox = ({
150
183
  feedbackMarginTop,
151
184
  feedbackPosition
152
185
  } = selectFeedbackTokens(defaultTokens);
153
- const styles = StyleSheet.create({
186
+
187
+ const styles = _StyleSheet.default.create({
154
188
  feedbackContainer: {
155
189
  marginTop: feedbackMarginTop,
156
190
  marginBottom: feedbackMarginBottom
157
191
  }
158
192
  });
159
193
 
160
- const handleChange = () => {
194
+ const handleChange = event => {
161
195
  if (!inactive) {
162
- setIsChecked(!isChecked);
196
+ setIsChecked(!isChecked, event);
163
197
  }
164
198
  };
165
199
 
166
- const accessibilityProps = a11yProps.select(rest);
167
- const uniqueId = useUniqueId('checkbox');
168
- const inputId = id ?? uniqueId; // @todo our current version of React Native Web doesn't include
169
- // keyboard support on `Pressable` (which starts with 0.15.3), so
170
- // the complete accessibility of the `Checkbox` component on Web
171
- // (namely, change on key pressed) is pending RNW upgrade
172
- // (see https://github.com/necolas/react-native-web/issues/1950)
173
-
174
- return /*#__PURE__*/React.createElement(View, {
175
- style: staticStyles.wrapper
176
- }, /*#__PURE__*/React.createElement(StackView, {
177
- direction: feedbackPosition === 'top' ? 'column-reverse' : 'column',
178
- space: 0
179
- }, /*#__PURE__*/React.createElement(Pressable, Object.assign({
180
- disabled: inactive,
181
- onPress: handleChange,
182
- accessibilityRole: "checkbox",
183
- accessibilityState: {
184
- checked: isChecked,
185
- disabled: inactive
186
- }
187
- }, accessibilityProps), ({
188
- focused: focus,
189
- hovered: hover,
190
- pressed
191
- }) => {
192
- const {
193
- icon: IconComponent,
194
- ...stateTokens
195
- } = getTokens({
196
- focus,
197
- hover,
198
- pressed
199
- });
200
- const iconTokens = selectIconTokens(stateTokens);
201
- return /*#__PURE__*/React.createElement(View, {
202
- style: [staticStyles.container, selectContainerStyles(stateTokens)]
203
- }, /*#__PURE__*/React.createElement(View, {
204
- style: StyleSheet.flatten([staticStyles.defaultInputStyles, selectInputStyles(stateTokens, isChecked)]),
205
- testID: "Checkbox-Input"
206
- }, /*#__PURE__*/React.createElement(CheckboxInput, {
207
- checked: isChecked,
208
- defaultChecked: defaultChecked,
209
- disabled: inactive,
210
- id: inputId,
211
- isControlled: isControlled,
212
- name: name,
213
- value: value
214
- }), isChecked && IconComponent && /*#__PURE__*/React.createElement(IconComponent, {
215
- tokens: iconTokens,
216
- testID: "Checkbox-Icon"
217
- })), Boolean(label) && /*#__PURE__*/React.createElement(Text, {
218
- style: selectLabelStyles(stateTokens)
219
- }, /*#__PURE__*/React.createElement(CheckboxLabel, {
220
- forId: inputId
221
- }, label)));
222
- }), Boolean(feedback) && /*#__PURE__*/React.createElement(View, {
223
- style: styles.feedbackContainer
224
- }, /*#__PURE__*/React.createElement(Feedback, {
225
- title: feedback,
226
- variant: {
227
- icon: error === true
228
- },
229
- validation: error === true ? 'error' : undefined
230
- }))));
231
- };
200
+ const handleKeyDown = event => {
201
+ // The expected keyboard shortcut for activating a checkbox is the Space key
202
+ if ((event === null || event === void 0 ? void 0 : event.key) === ' ') handleChange(event);
203
+ };
232
204
 
233
- Checkbox.propTypes = { ...a11yProps.propTypes,
205
+ const accessibilityProps = _propTypes2.a11yProps.select(rest);
206
+
207
+ const uniqueId = (0, _useUniqueId.default)('checkbox');
208
+ const inputId = id ?? uniqueId;
209
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
210
+ style: staticStyles.wrapper,
211
+ ref: ref,
212
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_StackView.default, {
213
+ direction: feedbackPosition === 'top' ? 'column-reverse' : 'column',
214
+ space: 0,
215
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Pressable.default, {
216
+ disabled: inactive,
217
+ onKeyDown: handleKeyDown,
218
+ onPress: handleChange,
219
+ accessibilityRole: "checkbox",
220
+ accessibilityState: {
221
+ checked: isChecked,
222
+ disabled: inactive
223
+ },
224
+ ...accessibilityProps,
225
+ children: ({
226
+ focused: focus,
227
+ hovered: hover,
228
+ pressed
229
+ }) => {
230
+ const {
231
+ icon: IconComponent,
232
+ ...stateTokens
233
+ } = getTokens({
234
+ focus,
235
+ hover,
236
+ pressed
237
+ });
238
+ const iconTokens = selectIconTokens(stateTokens);
239
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_View.default, {
240
+ style: staticStyles.container,
241
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_View.default, {
242
+ style: _StyleSheet.default.flatten([staticStyles.defaultInputStyles, selectInputStyles(stateTokens, isChecked)]),
243
+ testID: "Checkbox-Input",
244
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_CheckboxInput.default, {
245
+ checked: isChecked,
246
+ defaultChecked: defaultChecked,
247
+ disabled: inactive,
248
+ id: inputId,
249
+ isControlled: isControlled,
250
+ name: name,
251
+ value: value
252
+ }), isChecked && IconComponent && /*#__PURE__*/(0, _jsxRuntime.jsx)(IconComponent, { ...iconTokens,
253
+ testID: "Checkbox-Icon"
254
+ })]
255
+ }), Boolean(label) && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Text.default, {
256
+ style: selectLabelStyles(stateTokens),
257
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_LabelContent.default, {
258
+ forId: inputId,
259
+ children: label
260
+ })
261
+ })]
262
+ });
263
+ }
264
+ }), Boolean(feedback) && /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
265
+ style: styles.feedbackContainer,
266
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Feedback.default, {
267
+ title: feedback,
268
+ variant: {
269
+ icon: error === true
270
+ },
271
+ validation: error === true ? 'error' : undefined
272
+ })
273
+ })]
274
+ })
275
+ });
276
+ });
277
+ Checkbox.displayName = 'Checkbox';
278
+ Checkbox.propTypes = { ..._propTypes2.a11yProps.propTypes,
234
279
 
235
280
  /**
236
281
  * Use `checked` for controlled Checkbox. For uncontrolled Checkbox, use the `defaultChecked` prop.
237
282
  */
238
- checked: PropTypes.bool,
283
+ checked: _propTypes.default.bool,
239
284
 
240
285
  /**
241
286
  * Use `defaultChecked` to provide the initial value for an uncontrolled Checkbox.
242
287
  */
243
- defaultChecked: PropTypes.bool,
288
+ defaultChecked: _propTypes.default.bool,
244
289
 
245
290
  /**
246
291
  * A detailed description of related validation error or additional instructions (depending on the `error` prop).
247
292
  */
248
- feedback: PropTypes.string,
293
+ feedback: _propTypes.default.string,
249
294
 
250
295
  /**
251
296
  * Checkbox ID.
252
297
  */
253
- id: PropTypes.string,
298
+ id: _propTypes.default.string,
254
299
 
255
300
  /**
256
301
  * Whether the corresponding input is disabled or active.
257
302
  */
258
- inactive: PropTypes.bool,
303
+ inactive: _propTypes.default.bool,
259
304
 
260
305
  /**
261
306
  * The label.
262
307
  */
263
- label: PropTypes.string,
308
+ label: _propTypes.default.string,
264
309
 
265
310
  /**
266
311
  * Associate this checkbox with a group (set as the name attribute).
267
312
  */
268
- name: PropTypes.string,
313
+ name: _propTypes.default.string,
269
314
 
270
315
  /**
271
316
  * Whether the underlying input triggered a validation error or not.
272
317
  */
273
- error: PropTypes.bool,
318
+ error: _propTypes.default.bool,
274
319
 
275
320
  /**
276
321
  * The value. Must be unique within the group.
277
322
  */
278
- value: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.bool]),
323
+ value: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number, _propTypes.default.bool]),
279
324
 
280
325
  /**
281
326
  * Callback called when a controlled checkbox gets interacted with.
282
327
  */
283
- onChange: PropTypes.func,
328
+ onChange: _propTypes.default.func,
284
329
 
285
330
  /**
286
331
  * Checkbox tokens.
287
332
  */
288
- tokens: getTokensPropType('Checkbox'),
333
+ tokens: (0, _utils.getTokensPropType)('Checkbox'),
289
334
 
290
335
  /**
291
336
  * Checkbox variant.
292
337
  */
293
- variant: variantProp.propType
338
+ variant: _utils.variantProp.propType
294
339
  };
295
- export default Checkbox;
296
- const staticStyles = StyleSheet.create({
340
+ var _default = Checkbox;
341
+ exports.default = _default;
342
+
343
+ const staticStyles = _StyleSheet.default.create({
297
344
  wrapper: {
298
345
  backgroundColor: 'transparent'
299
346
  },
@@ -0,0 +1,241 @@
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 _ViewportProvider = require("../ViewportProvider");
15
+
16
+ var _ThemeProvider = require("../ThemeProvider");
17
+
18
+ var _utils = require("../utils");
19
+
20
+ var _StackView = require("../StackView");
21
+
22
+ var _Checkbox = _interopRequireDefault(require("./Checkbox"));
23
+
24
+ var _Fieldset = _interopRequireDefault(require("../Fieldset"));
25
+
26
+ var _jsxRuntime = require("react/jsx-runtime");
27
+
28
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
29
+
30
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
31
+
32
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
33
+
34
+ /**
35
+ * A group of Checkboxs that behave as a fieldset. Use when users select any number of choices from options.
36
+ *
37
+ * ## Component API
38
+ *
39
+ * Use the `items` prop to pass an array of objects describing each Checkbox in the group:
40
+ *
41
+ * - `label`: main text passed to CheckboxGroup's `label` prop
42
+ * - `id`: identifier used to store which CheckboxGroup is selected (uses `label` if undefinded)
43
+ * - `onChange`: optional function called on selection, in addition to updating the group's selection state
44
+ *
45
+ * ### Controlled version
46
+ *
47
+ * If the selection state is controlled from outside, it needs to receive `checkedId` and `onChange` props.
48
+ *
49
+ * ### Uncontrolled version
50
+ *
51
+ * If the CheckboxGroup manages its own state, you can use `initialCheckedId` prop to provide the initial value.
52
+ * Whenever the radio card gets toggled, it calls the `onChange` callback with the new value (string).
53
+ *
54
+ * ### Use in forms
55
+ *
56
+ * For web forms, the `name` prop may be used to define the name of the group's `fieldset` and input elements.
57
+ *
58
+ * ### Validation
59
+ *
60
+ * Validation state may be set by passing 'error' or 'success' to the `validation` prop.
61
+ *
62
+ * ## A11y guidelines
63
+ *
64
+ * CheckboxGroup accepts all the common accessibility props, and controls the accessibility state
65
+ * of children like Checkbox and Feedback based on current state.
66
+ *
67
+ * @example
68
+ * ```jsx
69
+ * <CheckboxGroup
70
+ * initialCheckedId="check1"
71
+ * items={[
72
+ * { label: 'Checkbox 1', id: 'check1' },
73
+ * { label: 'Checkbox 2', id: 'check2' },
74
+ * { label: 'Checkbox 3', id: 'check3' }
75
+ * ]}
76
+ * legend="Checkboxes"
77
+ * hint="Choose from these options"
78
+ * />
79
+ * ```
80
+ */
81
+ const CheckboxGroup = /*#__PURE__*/(0, _react.forwardRef)(({
82
+ tokens,
83
+ radioTokens,
84
+ variant,
85
+ items = [],
86
+ legend,
87
+ tooltip,
88
+ hint,
89
+ validation,
90
+ feedback,
91
+ initialCheckedIds,
92
+ checkedIds,
93
+ onChange,
94
+ readOnly,
95
+ name: inputGroupName,
96
+ inactive
97
+ }, ref) => {
98
+ const viewport = (0, _ViewportProvider.useViewport)();
99
+ const {
100
+ space,
101
+ fieldSpace
102
+ } = (0, _ThemeProvider.useThemeTokens)('CheckboxGroup', tokens, variant, {
103
+ viewport
104
+ });
105
+ const {
106
+ currentValues,
107
+ toggleOneValue
108
+ } = (0, _utils.useMultipleInputValues)({
109
+ values: checkedIds,
110
+ initialValues: initialCheckedIds,
111
+ onChange,
112
+ readOnly: readOnly || inactive
113
+ });
114
+ const checkboxes = items.map(({
115
+ label,
116
+ id,
117
+ onChange: itemOnChange,
118
+ ref: itemRef
119
+ }, index) => {
120
+ const checkboxId = id || `Checkbox[${index}]`;
121
+
122
+ const handleChange = (newCheckedState, event) => {
123
+ if (typeof itemOnChange === 'function') itemOnChange(newCheckedState, event);
124
+ toggleOneValue(checkboxId, event);
125
+ };
126
+
127
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Checkbox.default, {
128
+ ref: itemRef,
129
+ id: checkboxId,
130
+ checked: currentValues.includes(checkboxId),
131
+ onChange: handleChange,
132
+ inactive: inactive,
133
+ label: label,
134
+ name: inputGroupName,
135
+ tokens: radioTokens,
136
+ variant: variant
137
+ }, checkboxId);
138
+ });
139
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Fieldset.default, {
140
+ ref: ref,
141
+ name: inputGroupName,
142
+ legend: legend,
143
+ tooltip: tooltip,
144
+ hint: hint,
145
+ space: fieldSpace,
146
+ feedback: feedback,
147
+ inactive: inactive,
148
+ validation: validation,
149
+ children: (0, _StackView.getStackedContent)(checkboxes, {
150
+ space,
151
+ direction: 'column'
152
+ })
153
+ });
154
+ });
155
+ CheckboxGroup.displayName = 'CheckboxGroup';
156
+ CheckboxGroup.propTypes = {
157
+ /**
158
+ * Optional theme token overrides for the outer CheckboxGroup component
159
+ */
160
+ tokens: (0, _utils.getTokensPropType)('CheckboxGroup'),
161
+
162
+ /**
163
+ * Optional theme token overrides for each inner Checkbox component
164
+ */
165
+ radioTokens: (0, _utils.getTokensPropType)('Checkbox'),
166
+
167
+ /**
168
+ * Theme variants, shared between both CheckboxGroup and Checkbox
169
+ */
170
+ variant: _utils.variantProp.propType,
171
+
172
+ /**
173
+ * Array of objects containing specifics for each Checkbox to be rendered in the group.
174
+ */
175
+ items: _propTypes.default.arrayOf(_propTypes.default.exact({
176
+ label: _propTypes.default.string,
177
+ id: _propTypes.default.string,
178
+ onChange: _propTypes.default.func,
179
+ ref: _airbnbPropTypes.default.ref()
180
+ })),
181
+
182
+ /**
183
+ * Main text used to describe this group, used in Fieldset's Legend element.
184
+ */
185
+ legend: _propTypes.default.string,
186
+
187
+ /**
188
+ * Optional additional text giving more detail to help a user make a choice.
189
+ */
190
+ hint: _propTypes.default.string,
191
+
192
+ /**
193
+ * Optional tooltip text content to include alongside the legend and hint.
194
+ */
195
+ tooltip: _propTypes.default.string,
196
+
197
+ /**
198
+ * Current validation status of the group, passed to the feedback element if there is one.
199
+ */
200
+ validation: _propTypes.default.oneOf(['error', 'success']),
201
+
202
+ /**
203
+ * If provided, a Feedback element is rendered containing this text.
204
+ */
205
+ feedback: _propTypes.default.string,
206
+
207
+ /**
208
+ * If provided, the checkboxed with this ids are selected on first render.
209
+ */
210
+ initialCheckedIds: _propTypes.default.arrayOf(_propTypes.default.string),
211
+
212
+ /**
213
+ * If not undefined, the checkboxes with these ids is selected, and the
214
+ * element's selection state will be controlled by its parent using the `onChange` function.
215
+ */
216
+ checkedIds: _propTypes.default.arrayOf(_propTypes.default.string),
217
+
218
+ /**
219
+ * Function to call on change in selection state. Is required if the selection state is controlled
220
+ * by a parent using checkedId and the input is not readOnly.
221
+ */
222
+ onChange: _propTypes.default.func,
223
+
224
+ /**
225
+ * If true, the radio cards cannot be selected by the user and simply show their current state.
226
+ */
227
+ readOnly: _propTypes.default.bool,
228
+
229
+ /**
230
+ * If true, the checkbox cannot be interacted with, elements are set as `disabled` and if the
231
+ * theme supports `inactive` appearances rules, these are applied.
232
+ */
233
+ inactive: _propTypes.default.bool,
234
+
235
+ /**
236
+ * On Web, this is passed to the `name` attribute of the fieldset and each radio input.
237
+ */
238
+ name: _propTypes.default.string
239
+ };
240
+ var _default = CheckboxGroup;
241
+ exports.default = _default;