@telus-uds/components-base 1.65.0 → 1.67.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 (487) hide show
  1. package/CHANGELOG.md +22 -2
  2. package/lib/A11yInfoProvider/index.js +5 -20
  3. package/lib/A11yText/index.js +3 -17
  4. package/lib/ActivityIndicator/Spinner.js +2 -9
  5. package/lib/ActivityIndicator/Spinner.native.js +4 -27
  6. package/lib/ActivityIndicator/index.js +1 -13
  7. package/lib/ActivityIndicator/shared.js +0 -3
  8. package/lib/Autocomplete/Autocomplete.js +34 -85
  9. package/lib/Autocomplete/Loading.js +0 -10
  10. package/lib/Autocomplete/Suggestions.js +0 -11
  11. package/lib/Autocomplete/index.js +0 -3
  12. package/lib/BaseProvider/HydrationContext.js +4 -18
  13. package/lib/BaseProvider/index.js +0 -12
  14. package/lib/Box/Box.js +10 -35
  15. package/lib/Box/index.js +0 -3
  16. package/lib/Button/Button.js +4 -13
  17. package/lib/Button/ButtonBase.js +23 -55
  18. package/lib/Button/ButtonDropdown.js +7 -32
  19. package/lib/Button/ButtonGroup.js +15 -48
  20. package/lib/Button/ButtonLink.js +3 -17
  21. package/lib/Button/index.js +0 -5
  22. package/lib/Button/propTypes.js +0 -15
  23. package/lib/Card/Card.js +3 -14
  24. package/lib/Card/CardBase.js +5 -16
  25. package/lib/Card/PressableCardBase.js +7 -30
  26. package/lib/Card/index.js +0 -7
  27. package/lib/Carousel/Carousel.js +22 -115
  28. package/lib/Carousel/CarouselContext.js +0 -14
  29. package/lib/Carousel/CarouselFirstFocus/CarouselFirstFocus.js +6 -18
  30. package/lib/Carousel/CarouselItem/CarouselItem.js +5 -20
  31. package/lib/Carousel/CarouselItem/index.js +0 -3
  32. package/lib/Carousel/CarouselStepTracker/CarouselStepTracker.js +0 -9
  33. package/lib/Carousel/CarouselStepTracker/index.js +0 -3
  34. package/lib/Carousel/CarouselTabs/CarouselTabs.js +5 -15
  35. package/lib/Carousel/CarouselTabs/CarouselTabsPanel.js +7 -16
  36. package/lib/Carousel/CarouselTabs/CarouselTabsPanelItem.js +2 -22
  37. package/lib/Carousel/CarouselTabs/index.js +0 -3
  38. package/lib/Carousel/CarouselThumbnail.js +1 -16
  39. package/lib/Carousel/CarouselThumbnailNavigation.js +0 -15
  40. package/lib/Carousel/index.js +0 -5
  41. package/lib/Checkbox/Checkbox.js +5 -44
  42. package/lib/Checkbox/CheckboxButton.js +7 -33
  43. package/lib/Checkbox/CheckboxGroup.js +5 -37
  44. package/lib/Checkbox/CheckboxInput.js +1 -11
  45. package/lib/Checkbox/CheckboxInput.native.js +0 -2
  46. package/lib/Checkbox/index.js +0 -4
  47. package/lib/CheckboxCard/CheckboxCard.js +4 -37
  48. package/lib/CheckboxCard/index.js +0 -3
  49. package/lib/CheckboxCardGroup/CheckboxCardGroup.js +215 -0
  50. package/lib/CheckboxCardGroup/index.js +10 -0
  51. package/lib/Divider/Divider.js +13 -24
  52. package/lib/Divider/index.js +0 -3
  53. package/lib/ExpandCollapse/Accordion.js +1 -9
  54. package/lib/ExpandCollapse/Control.js +10 -32
  55. package/lib/ExpandCollapse/ExpandCollapse.js +3 -19
  56. package/lib/ExpandCollapse/Panel.js +13 -38
  57. package/lib/ExpandCollapse/index.js +0 -5
  58. package/lib/Feedback/Feedback.js +13 -30
  59. package/lib/Feedback/index.js +0 -3
  60. package/lib/Fieldset/Fieldset.js +6 -37
  61. package/lib/Fieldset/FieldsetContainer.js +1 -10
  62. package/lib/Fieldset/FieldsetContainer.native.js +0 -8
  63. package/lib/Fieldset/Legend.js +1 -10
  64. package/lib/Fieldset/Legend.native.js +1 -13
  65. package/lib/Fieldset/index.js +0 -3
  66. package/lib/FlexGrid/Col/Col.js +10 -53
  67. package/lib/FlexGrid/Col/index.js +0 -3
  68. package/lib/FlexGrid/FlexGrid.js +3 -34
  69. package/lib/FlexGrid/Row/Row.js +0 -38
  70. package/lib/FlexGrid/Row/index.js +0 -3
  71. package/lib/FlexGrid/helpers/index.js +0 -4
  72. package/lib/FlexGrid/index.js +0 -3
  73. package/lib/FlexGrid/providers/GutterContext.js +0 -4
  74. package/lib/HorizontalScroll/HorizontalScroll.js +17 -45
  75. package/lib/HorizontalScroll/HorizontalScrollButton.js +1 -17
  76. package/lib/HorizontalScroll/ScrollViewEnd.js +5 -13
  77. package/lib/HorizontalScroll/ScrollViewEnd.native.js +1 -10
  78. package/lib/HorizontalScroll/index.js +0 -7
  79. package/lib/HorizontalScroll/itemPositions.js +8 -19
  80. package/lib/Icon/Icon.js +4 -17
  81. package/lib/Icon/IconText.js +5 -25
  82. package/lib/Icon/index.js +0 -6
  83. package/lib/IconButton/IconButton.js +5 -37
  84. package/lib/IconButton/index.js +0 -3
  85. package/lib/InputLabel/InputLabel.js +4 -28
  86. package/lib/InputLabel/LabelContent.js +2 -8
  87. package/lib/InputLabel/LabelContent.native.js +0 -8
  88. package/lib/InputLabel/index.js +0 -3
  89. package/lib/InputSupports/InputSupports.js +0 -21
  90. package/lib/InputSupports/index.js +0 -3
  91. package/lib/InputSupports/useInputSupports.js +2 -6
  92. package/lib/Link/ChevronLink.js +7 -18
  93. package/lib/Link/InlinePressable.js +0 -10
  94. package/lib/Link/InlinePressable.native.js +5 -18
  95. package/lib/Link/Link.js +0 -8
  96. package/lib/Link/LinkBase.js +17 -47
  97. package/lib/Link/TextButton.js +3 -16
  98. package/lib/Link/index.js +0 -5
  99. package/lib/List/List.js +5 -21
  100. package/lib/List/ListItem.js +1 -11
  101. package/lib/List/ListItemBase.js +5 -34
  102. package/lib/List/ListItemContent.js +1 -14
  103. package/lib/List/ListItemMark.js +3 -23
  104. package/lib/List/PressableListItemBase.js +2 -28
  105. package/lib/List/index.js +0 -4
  106. package/lib/Listbox/GroupControl.js +0 -14
  107. package/lib/Listbox/Listbox.js +15 -40
  108. package/lib/Listbox/ListboxContext.js +0 -7
  109. package/lib/Listbox/ListboxGroup.js +7 -19
  110. package/lib/Listbox/ListboxItem.js +3 -17
  111. package/lib/Listbox/ListboxOverlay.js +4 -20
  112. package/lib/Listbox/PressableItem.js +3 -18
  113. package/lib/Listbox/index.js +0 -3
  114. package/lib/Modal/Modal.js +94 -45
  115. package/lib/Modal/ModalContent.js +184 -0
  116. package/lib/Modal/index.js +0 -3
  117. package/lib/MultiSelectFilter/ModalOverlay.js +1 -20
  118. package/lib/MultiSelectFilter/MultiSelectFilter.js +20 -69
  119. package/lib/MultiSelectFilter/index.js +0 -3
  120. package/lib/Notification/Notification.js +11 -38
  121. package/lib/Notification/index.js +0 -3
  122. package/lib/Pagination/PageButton.js +2 -22
  123. package/lib/Pagination/Pagination.js +21 -42
  124. package/lib/Pagination/SideButton.js +0 -24
  125. package/lib/Pagination/index.js +0 -3
  126. package/lib/Pagination/usePagination.js +4 -9
  127. package/lib/Progress/Progress.js +3 -17
  128. package/lib/Progress/ProgressBar.js +3 -25
  129. package/lib/Progress/ProgressBarBackground.js +0 -12
  130. package/lib/Progress/index.js +0 -4
  131. package/lib/QuickLinks/QuickLinks.js +1 -18
  132. package/lib/QuickLinks/QuickLinksCard.js +1 -11
  133. package/lib/QuickLinks/QuickLinksItem.js +3 -17
  134. package/lib/QuickLinks/index.js +0 -4
  135. package/lib/QuickLinksFeature/QuickLinksFeature.js +3 -20
  136. package/lib/QuickLinksFeature/QuickLinksFeatureItem.js +7 -30
  137. package/lib/QuickLinksFeature/index.js +0 -4
  138. package/lib/Radio/Radio.js +5 -39
  139. package/lib/Radio/RadioButton.js +7 -26
  140. package/lib/Radio/RadioGroup.js +6 -39
  141. package/lib/Radio/RadioInput.js +1 -11
  142. package/lib/Radio/RadioInput.native.js +0 -2
  143. package/lib/Radio/index.js +0 -4
  144. package/lib/RadioCard/RadioCard.js +5 -38
  145. package/lib/RadioCard/RadioCardGroup.js +7 -38
  146. package/lib/RadioCard/index.js +0 -4
  147. package/lib/Responsive/Responsive.js +1 -14
  148. package/lib/Responsive/index.js +0 -3
  149. package/lib/Search/Search.js +22 -45
  150. package/lib/Search/index.js +0 -3
  151. package/lib/Select/Group.js +0 -8
  152. package/lib/Select/Group.native.js +0 -6
  153. package/lib/Select/Item.js +0 -7
  154. package/lib/Select/Item.native.js +0 -2
  155. package/lib/Select/Picker.js +0 -8
  156. package/lib/Select/Picker.native.js +6 -22
  157. package/lib/Select/Select.js +9 -52
  158. package/lib/Select/index.js +0 -5
  159. package/lib/SideNav/Item.js +5 -29
  160. package/lib/SideNav/ItemContent.js +1 -14
  161. package/lib/SideNav/ItemsGroup.js +9 -31
  162. package/lib/SideNav/SideNav.js +9 -33
  163. package/lib/SideNav/index.js +0 -2
  164. package/lib/Skeleton/Skeleton.js +10 -42
  165. package/lib/Skeleton/index.js +0 -3
  166. package/lib/Skeleton/skeletonWebAnimation.js +0 -2
  167. package/lib/Skeleton/useSkeletonNativeAnimation.js +1 -9
  168. package/lib/SkipLink/SkipLink.js +7 -27
  169. package/lib/SkipLink/index.js +0 -3
  170. package/lib/Spacer/Spacer.js +4 -20
  171. package/lib/Spacer/index.js +0 -3
  172. package/lib/StackView/StackView.js +3 -21
  173. package/lib/StackView/StackWrap.js +11 -21
  174. package/lib/StackView/StackWrap.native.js +0 -3
  175. package/lib/StackView/StackWrapBox.js +5 -21
  176. package/lib/StackView/StackWrapGap.js +1 -14
  177. package/lib/StackView/common.js +0 -6
  178. package/lib/StackView/getStackedContent.js +10 -21
  179. package/lib/StackView/index.js +0 -5
  180. package/lib/StepTracker/Step.js +3 -27
  181. package/lib/StepTracker/StepTracker.js +5 -32
  182. package/lib/StepTracker/index.js +0 -3
  183. package/lib/Tabs/Tabs.js +7 -30
  184. package/lib/Tabs/TabsItem.js +13 -38
  185. package/lib/Tabs/index.js +0 -3
  186. package/lib/Tags/Tags.js +9 -42
  187. package/lib/Tags/index.js +0 -3
  188. package/lib/TextInput/TextArea.js +11 -20
  189. package/lib/TextInput/TextInput.js +7 -16
  190. package/lib/TextInput/TextInputBase.js +106 -69
  191. package/lib/TextInput/index.js +0 -3
  192. package/lib/TextInput/propTypes.js +4 -7
  193. package/lib/ThemeProvider/ThemeProvider.js +10 -18
  194. package/lib/ThemeProvider/index.js +0 -9
  195. package/lib/ThemeProvider/useSetTheme.js +6 -9
  196. package/lib/ThemeProvider/useTheme.js +2 -7
  197. package/lib/ThemeProvider/useThemeTokens.js +1 -9
  198. package/lib/ThemeProvider/utils/index.js +0 -4
  199. package/lib/ThemeProvider/utils/styles.js +14 -35
  200. package/lib/ThemeProvider/utils/theme-tokens.js +15 -43
  201. package/lib/Timeline/Timeline.js +11 -27
  202. package/lib/Timeline/index.js +0 -3
  203. package/lib/ToggleSwitch/ToggleSwitch.js +12 -43
  204. package/lib/ToggleSwitch/ToggleSwitchGroup.js +4 -38
  205. package/lib/ToggleSwitch/index.js +0 -3
  206. package/lib/Tooltip/Backdrop.js +4 -11
  207. package/lib/Tooltip/Backdrop.native.js +1 -14
  208. package/lib/Tooltip/Tooltip.js +9 -37
  209. package/lib/Tooltip/Tooltip.native.js +14 -45
  210. package/lib/Tooltip/getTooltipPosition.js +26 -31
  211. package/lib/Tooltip/index.js +0 -5
  212. package/lib/Tooltip/shared.js +0 -10
  213. package/lib/TooltipButton/TooltipButton.js +5 -20
  214. package/lib/TooltipButton/index.js +0 -3
  215. package/lib/Typography/Typography.js +15 -38
  216. package/lib/Typography/index.js +0 -3
  217. package/lib/Validator/Validator.js +10 -58
  218. package/lib/Validator/index.js +0 -3
  219. package/lib/ViewportProvider/ViewportProvider.js +1 -13
  220. package/lib/ViewportProvider/index.js +0 -5
  221. package/lib/ViewportProvider/useViewport.js +0 -4
  222. package/lib/ViewportProvider/useViewportListener.js +3 -12
  223. package/lib/index.js +8 -71
  224. package/lib/utils/BaseView/BaseView.js +3 -17
  225. package/lib/utils/BaseView/BaseView.native.js +0 -3
  226. package/lib/utils/BaseView/index.js +0 -3
  227. package/lib/utils/a11y/index.js +0 -4
  228. package/lib/utils/a11y/semantics.js +14 -32
  229. package/lib/utils/a11y/textSize.js +1 -8
  230. package/lib/utils/animation/index.js +0 -2
  231. package/lib/utils/animation/useVerticalExpandAnimation.js +5 -18
  232. package/lib/utils/children.js +16 -28
  233. package/lib/utils/containUniqueFields.js +2 -5
  234. package/lib/utils/floating-ui/index.js +0 -1
  235. package/lib/utils/floating-ui/index.native.js +0 -1
  236. package/lib/utils/hasOwnProperty.js +0 -1
  237. package/lib/utils/htmlAttrs.js +2 -4
  238. package/lib/utils/index.js +0 -31
  239. package/lib/utils/info/index.js +0 -4
  240. package/lib/utils/info/platform/index.js +0 -4
  241. package/lib/utils/info/versions.js +0 -3
  242. package/lib/utils/input.js +12 -24
  243. package/lib/utils/pressability.js +7 -21
  244. package/lib/utils/props/a11yProps.js +19 -25
  245. package/lib/utils/props/clickProps.js +0 -4
  246. package/lib/utils/props/componentPropType.js +0 -14
  247. package/lib/utils/props/copyPropTypes.js +0 -4
  248. package/lib/utils/props/getPropSelector.js +11 -12
  249. package/lib/utils/props/handlerProps.js +2 -23
  250. package/lib/utils/props/hrefAttrsProp.js +0 -4
  251. package/lib/utils/props/index.js +0 -22
  252. package/lib/utils/props/inputSupportsProps.js +0 -9
  253. package/lib/utils/props/linkProps.js +2 -12
  254. package/lib/utils/props/paddingProp.js +0 -3
  255. package/lib/utils/props/pressProps.js +2 -8
  256. package/lib/utils/props/rectProp.js +0 -3
  257. package/lib/utils/props/responsiveProps.js +1 -5
  258. package/lib/utils/props/selectSystemProps.js +4 -6
  259. package/lib/utils/props/spacingProps.js +3 -10
  260. package/lib/utils/props/textInputProps.js +11 -31
  261. package/lib/utils/props/textProps.js +6 -11
  262. package/lib/utils/props/tokens.js +7 -26
  263. package/lib/utils/props/variantProp.js +0 -3
  264. package/lib/utils/props/viewProps.js +0 -5
  265. package/lib/utils/ssr.js +13 -33
  266. package/lib/utils/useCopy.js +3 -6
  267. package/lib/utils/useHash.js +5 -10
  268. package/lib/utils/useHash.native.js +0 -2
  269. package/lib/utils/useOverlaidPosition.js +6 -29
  270. package/lib/utils/useResponsiveProp.js +6 -13
  271. package/lib/utils/useSafeLayoutEffect.js +5 -10
  272. package/lib/utils/useScrollBlocking.js +3 -11
  273. package/lib/utils/useScrollBlocking.native.js +0 -2
  274. package/lib/utils/useSpacingScale.js +5 -8
  275. package/lib/utils/useUniqueId.js +0 -4
  276. package/lib/utils/withLinkRouter.js +13 -18
  277. package/lib-module/A11yInfoProvider/index.js +5 -9
  278. package/lib-module/A11yText/index.js +3 -4
  279. package/lib-module/ActivityIndicator/Spinner.js +2 -2
  280. package/lib-module/ActivityIndicator/Spinner.native.js +4 -6
  281. package/lib-module/ActivityIndicator/index.js +1 -5
  282. package/lib-module/ActivityIndicator/shared.js +2 -1
  283. package/lib-module/Autocomplete/Autocomplete.js +34 -59
  284. package/lib-module/Autocomplete/Loading.js +0 -2
  285. package/lib-module/BaseProvider/HydrationContext.js +4 -7
  286. package/lib-module/BaseProvider/index.js +0 -3
  287. package/lib-module/Box/Box.js +10 -24
  288. package/lib-module/Button/Button.js +4 -2
  289. package/lib-module/Button/ButtonBase.js +23 -35
  290. package/lib-module/Button/ButtonDropdown.js +7 -16
  291. package/lib-module/Button/ButtonGroup.js +15 -32
  292. package/lib-module/Button/ButtonLink.js +3 -2
  293. package/lib-module/Button/propTypes.js +0 -7
  294. package/lib-module/Card/Card.js +3 -2
  295. package/lib-module/Card/CardBase.js +5 -4
  296. package/lib-module/Card/PressableCardBase.js +7 -11
  297. package/lib-module/Carousel/Carousel.js +22 -60
  298. package/lib-module/Carousel/CarouselContext.js +0 -5
  299. package/lib-module/Carousel/CarouselFirstFocus/CarouselFirstFocus.js +7 -5
  300. package/lib-module/Carousel/CarouselItem/CarouselItem.js +5 -11
  301. package/lib-module/Carousel/CarouselStepTracker/CarouselStepTracker.js +0 -2
  302. package/lib-module/Carousel/CarouselTabs/CarouselTabs.js +3 -4
  303. package/lib-module/Carousel/CarouselTabs/CarouselTabsPanel.js +7 -6
  304. package/lib-module/Carousel/CarouselTabs/CarouselTabsPanelItem.js +2 -10
  305. package/lib-module/Carousel/CarouselThumbnail.js +1 -7
  306. package/lib-module/Carousel/CarouselThumbnailNavigation.js +0 -2
  307. package/lib-module/Checkbox/Checkbox.js +5 -23
  308. package/lib-module/Checkbox/CheckboxButton.js +7 -17
  309. package/lib-module/Checkbox/CheckboxGroup.js +5 -23
  310. package/lib-module/Checkbox/CheckboxInput.js +1 -3
  311. package/lib-module/Checkbox/CheckboxInput.native.js +0 -1
  312. package/lib-module/CheckboxCard/CheckboxCard.js +4 -21
  313. package/lib-module/CheckboxCardGroup/CheckboxCardGroup.js +205 -0
  314. package/lib-module/CheckboxCardGroup/index.js +2 -0
  315. package/lib-module/Divider/Divider.js +13 -11
  316. package/lib-module/ExpandCollapse/Accordion.js +1 -1
  317. package/lib-module/ExpandCollapse/Control.js +10 -17
  318. package/lib-module/ExpandCollapse/ExpandCollapse.js +3 -9
  319. package/lib-module/ExpandCollapse/Panel.js +13 -23
  320. package/lib-module/Feedback/Feedback.js +13 -16
  321. package/lib-module/Fieldset/Fieldset.js +6 -25
  322. package/lib-module/Fieldset/FieldsetContainer.js +1 -1
  323. package/lib-module/Fieldset/FieldsetContainer.native.js +0 -1
  324. package/lib-module/Fieldset/Legend.js +1 -1
  325. package/lib-module/Fieldset/Legend.native.js +1 -1
  326. package/lib-module/FlexGrid/Col/Col.js +10 -37
  327. package/lib-module/FlexGrid/FlexGrid.js +3 -17
  328. package/lib-module/FlexGrid/Row/Row.js +0 -25
  329. package/lib-module/FlexGrid/helpers/index.js +0 -3
  330. package/lib-module/HorizontalScroll/HorizontalScroll.js +17 -27
  331. package/lib-module/HorizontalScroll/HorizontalScrollButton.js +1 -3
  332. package/lib-module/HorizontalScroll/ScrollViewEnd.js +5 -4
  333. package/lib-module/HorizontalScroll/ScrollViewEnd.native.js +0 -1
  334. package/lib-module/HorizontalScroll/itemPositions.js +11 -10
  335. package/lib-module/Icon/Icon.js +4 -8
  336. package/lib-module/Icon/IconText.js +6 -17
  337. package/lib-module/IconButton/IconButton.js +7 -20
  338. package/lib-module/InputLabel/InputLabel.js +4 -13
  339. package/lib-module/InputLabel/LabelContent.js +2 -1
  340. package/lib-module/InputLabel/LabelContent.native.js +0 -1
  341. package/lib-module/InputSupports/InputSupports.js +0 -9
  342. package/lib-module/InputSupports/useInputSupports.js +2 -4
  343. package/lib-module/Link/ChevronLink.js +7 -7
  344. package/lib-module/Link/InlinePressable.js +0 -2
  345. package/lib-module/Link/InlinePressable.native.js +4 -12
  346. package/lib-module/Link/LinkBase.js +17 -25
  347. package/lib-module/Link/TextButton.js +3 -5
  348. package/lib-module/List/List.js +5 -9
  349. package/lib-module/List/ListItem.js +1 -1
  350. package/lib-module/List/ListItemBase.js +5 -17
  351. package/lib-module/List/ListItemContent.js +1 -4
  352. package/lib-module/List/ListItemMark.js +3 -16
  353. package/lib-module/List/PressableListItemBase.js +2 -6
  354. package/lib-module/Listbox/GroupControl.js +0 -2
  355. package/lib-module/Listbox/Listbox.js +15 -23
  356. package/lib-module/Listbox/ListboxContext.js +0 -2
  357. package/lib-module/Listbox/ListboxGroup.js +6 -4
  358. package/lib-module/Listbox/ListboxItem.js +2 -1
  359. package/lib-module/Listbox/ListboxOverlay.js +3 -4
  360. package/lib-module/Listbox/PressableItem.js +2 -7
  361. package/lib-module/Modal/Modal.js +94 -25
  362. package/lib-module/Modal/ModalContent.js +175 -0
  363. package/lib-module/MultiSelectFilter/ModalOverlay.js +1 -4
  364. package/lib-module/MultiSelectFilter/MultiSelectFilter.js +20 -42
  365. package/lib-module/Notification/Notification.js +11 -22
  366. package/lib-module/Pagination/PageButton.js +2 -6
  367. package/lib-module/Pagination/Pagination.js +21 -21
  368. package/lib-module/Pagination/SideButton.js +3 -8
  369. package/lib-module/Pagination/usePagination.js +4 -8
  370. package/lib-module/Progress/Progress.js +3 -7
  371. package/lib-module/Progress/ProgressBar.js +3 -11
  372. package/lib-module/Progress/ProgressBarBackground.js +0 -2
  373. package/lib-module/QuickLinks/QuickLinks.js +1 -6
  374. package/lib-module/QuickLinks/QuickLinksCard.js +1 -3
  375. package/lib-module/QuickLinks/QuickLinksItem.js +3 -2
  376. package/lib-module/QuickLinksFeature/QuickLinksFeature.js +5 -9
  377. package/lib-module/QuickLinksFeature/QuickLinksFeatureItem.js +9 -13
  378. package/lib-module/Radio/Radio.js +5 -22
  379. package/lib-module/Radio/RadioButton.js +8 -10
  380. package/lib-module/Radio/RadioGroup.js +6 -25
  381. package/lib-module/Radio/RadioInput.js +1 -3
  382. package/lib-module/Radio/RadioInput.native.js +0 -1
  383. package/lib-module/RadioCard/RadioCard.js +5 -21
  384. package/lib-module/RadioCard/RadioCardGroup.js +7 -25
  385. package/lib-module/Responsive/Responsive.js +1 -6
  386. package/lib-module/Search/Search.js +22 -31
  387. package/lib-module/Select/Group.js +0 -3
  388. package/lib-module/Select/Group.native.js +0 -3
  389. package/lib-module/Select/Item.js +0 -3
  390. package/lib-module/Select/Item.native.js +0 -1
  391. package/lib-module/Select/Picker.native.js +8 -10
  392. package/lib-module/Select/Select.js +10 -35
  393. package/lib-module/SideNav/Item.js +5 -16
  394. package/lib-module/SideNav/ItemContent.js +1 -2
  395. package/lib-module/SideNav/ItemsGroup.js +9 -19
  396. package/lib-module/SideNav/SideNav.js +9 -22
  397. package/lib-module/Skeleton/Skeleton.js +10 -25
  398. package/lib-module/Skeleton/skeletonWebAnimation.js +0 -1
  399. package/lib-module/Skeleton/useSkeletonNativeAnimation.js +1 -3
  400. package/lib-module/SkipLink/SkipLink.js +7 -9
  401. package/lib-module/Spacer/Spacer.js +4 -7
  402. package/lib-module/StackView/StackView.js +3 -7
  403. package/lib-module/StackView/StackWrap.js +13 -13
  404. package/lib-module/StackView/StackWrap.native.js +2 -1
  405. package/lib-module/StackView/StackWrapBox.js +5 -8
  406. package/lib-module/StackView/StackWrapGap.js +1 -1
  407. package/lib-module/StackView/getStackedContent.js +10 -10
  408. package/lib-module/StepTracker/Step.js +3 -14
  409. package/lib-module/StepTracker/StepTracker.js +5 -13
  410. package/lib-module/Tabs/Tabs.js +7 -16
  411. package/lib-module/Tabs/TabsItem.js +13 -16
  412. package/lib-module/Tags/Tags.js +9 -26
  413. package/lib-module/TextInput/TextArea.js +11 -8
  414. package/lib-module/TextInput/TextInput.js +7 -5
  415. package/lib-module/TextInput/TextInputBase.js +107 -51
  416. package/lib-module/TextInput/propTypes.js +7 -6
  417. package/lib-module/ThemeProvider/ThemeProvider.js +10 -9
  418. package/lib-module/ThemeProvider/useSetTheme.js +6 -7
  419. package/lib-module/ThemeProvider/useTheme.js +2 -5
  420. package/lib-module/ThemeProvider/useThemeTokens.js +1 -2
  421. package/lib-module/ThemeProvider/utils/styles.js +15 -27
  422. package/lib-module/ThemeProvider/utils/theme-tokens.js +15 -20
  423. package/lib-module/Timeline/Timeline.js +11 -17
  424. package/lib-module/ToggleSwitch/ToggleSwitch.js +13 -26
  425. package/lib-module/ToggleSwitch/ToggleSwitchGroup.js +4 -23
  426. package/lib-module/Tooltip/Backdrop.js +4 -7
  427. package/lib-module/Tooltip/Backdrop.native.js +1 -4
  428. package/lib-module/Tooltip/Tooltip.js +9 -18
  429. package/lib-module/Tooltip/Tooltip.native.js +14 -23
  430. package/lib-module/Tooltip/getTooltipPosition.js +26 -30
  431. package/lib-module/Tooltip/shared.js +0 -6
  432. package/lib-module/TooltipButton/TooltipButton.js +5 -8
  433. package/lib-module/Typography/Typography.js +14 -22
  434. package/lib-module/Validator/Validator.js +10 -42
  435. package/lib-module/ViewportProvider/ViewportProvider.js +1 -3
  436. package/lib-module/ViewportProvider/useViewportListener.js +6 -8
  437. package/lib-module/index.js +1 -0
  438. package/lib-module/utils/BaseView/BaseView.js +3 -4
  439. package/lib-module/utils/BaseView/BaseView.native.js +0 -1
  440. package/lib-module/utils/a11y/semantics.js +14 -27
  441. package/lib-module/utils/a11y/textSize.js +1 -2
  442. package/lib-module/utils/animation/useVerticalExpandAnimation.js +8 -11
  443. package/lib-module/utils/children.js +17 -19
  444. package/lib-module/utils/containUniqueFields.js +2 -4
  445. package/lib-module/utils/htmlAttrs.js +2 -1
  446. package/lib-module/utils/info/index.js +2 -1
  447. package/lib-module/utils/info/platform/index.js +4 -1
  448. package/lib-module/utils/info/versions.js +2 -1
  449. package/lib-module/utils/input.js +11 -19
  450. package/lib-module/utils/pressability.js +8 -7
  451. package/lib-module/utils/props/a11yProps.js +22 -20
  452. package/lib-module/utils/props/clickProps.js +0 -1
  453. package/lib-module/utils/props/componentPropType.js +0 -13
  454. package/lib-module/utils/props/getPropSelector.js +12 -8
  455. package/lib-module/utils/props/handlerProps.js +2 -19
  456. package/lib-module/utils/props/hrefAttrsProp.js +2 -2
  457. package/lib-module/utils/props/inputSupportsProps.js +0 -6
  458. package/lib-module/utils/props/linkProps.js +2 -3
  459. package/lib-module/utils/props/pressProps.js +2 -2
  460. package/lib-module/utils/props/responsiveProps.js +1 -3
  461. package/lib-module/utils/props/selectSystemProps.js +4 -5
  462. package/lib-module/utils/props/spacingProps.js +4 -3
  463. package/lib-module/utils/props/textInputProps.js +14 -27
  464. package/lib-module/utils/props/textProps.js +9 -7
  465. package/lib-module/utils/props/tokens.js +10 -13
  466. package/lib-module/utils/props/variantProp.js +1 -1
  467. package/lib-module/utils/props/viewProps.js +0 -1
  468. package/lib-module/utils/ssr.js +14 -18
  469. package/lib-module/utils/useCopy.js +3 -5
  470. package/lib-module/utils/useHash.js +5 -9
  471. package/lib-module/utils/useHash.native.js +0 -1
  472. package/lib-module/utils/useOverlaidPosition.js +6 -25
  473. package/lib-module/utils/useResponsiveProp.js +6 -7
  474. package/lib-module/utils/useSafeLayoutEffect.js +5 -7
  475. package/lib-module/utils/useScrollBlocking.js +3 -10
  476. package/lib-module/utils/useSpacingScale.js +4 -4
  477. package/lib-module/utils/useUniqueId.js +0 -2
  478. package/lib-module/utils/withLinkRouter.js +13 -10
  479. package/package.json +2 -2
  480. package/src/CheckboxCardGroup/CheckboxCardGroup.jsx +230 -0
  481. package/src/CheckboxCardGroup/index.js +3 -0
  482. package/src/Modal/Modal.jsx +98 -5
  483. package/src/Modal/ModalContent.jsx +171 -0
  484. package/src/TextInput/TextInputBase.jsx +67 -12
  485. package/src/TextInput/propTypes.js +4 -0
  486. package/src/index.js +1 -0
  487. package/src/utils/props/textInputProps.js +1 -0
@@ -0,0 +1,230 @@
1
+ import React, { forwardRef } from 'react'
2
+ import PropTypes from 'prop-types'
3
+
4
+ import { useViewport } from '../ViewportProvider'
5
+ import { useThemeTokens } from '../ThemeProvider'
6
+ import {
7
+ a11yProps,
8
+ containUniqueFields,
9
+ focusHandlerProps,
10
+ getTokensPropType,
11
+ selectSystemProps,
12
+ useMultipleInputValues,
13
+ variantProp,
14
+ viewProps
15
+ } from '../utils'
16
+ import StackView, { StackWrap } from '../StackView'
17
+ import CheckboxCard from '../CheckboxCard'
18
+ import Fieldset from '../Fieldset'
19
+
20
+ const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
21
+ const [selectItemProps, selectedItemPropTypes] = selectSystemProps([
22
+ a11yProps,
23
+ focusHandlerProps,
24
+ viewProps
25
+ ])
26
+
27
+ const CheckboxCardGroup = forwardRef(
28
+ (
29
+ {
30
+ copy = 'en',
31
+ tokens,
32
+ checkboxCardTokens,
33
+ variant,
34
+ items = [],
35
+ legend,
36
+ tooltip,
37
+ hint,
38
+ hintPosition = 'inline',
39
+ validation,
40
+ feedback,
41
+ initialCheckedIds,
42
+ checkedIds,
43
+ onChange,
44
+ readOnly,
45
+ name: inputGroupName,
46
+ inactive,
47
+ ...rest
48
+ },
49
+ ref
50
+ ) => {
51
+ const viewport = useViewport()
52
+ const {
53
+ space,
54
+ fieldSpace,
55
+ direction,
56
+ outlineWidth,
57
+ borderTopLeftRadius,
58
+ borderTopRightRadius,
59
+ borderBottomLeftRadius,
60
+ borderBottomRightRadius,
61
+ outlineOffset
62
+ } = useThemeTokens('CheckboxCardGroup', tokens, variant, {
63
+ viewport
64
+ })
65
+
66
+ const borderTokens = {
67
+ outlineWidth,
68
+ borderTopLeftRadius,
69
+ borderTopRightRadius,
70
+ borderBottomLeftRadius,
71
+ borderBottomRightRadius,
72
+ outlineOffset
73
+ }
74
+
75
+ const { currentValues, toggleOneValue } = useMultipleInputValues({
76
+ value: checkedIds,
77
+ initialValues: initialCheckedIds,
78
+ onChange,
79
+ readOnly: readOnly || inactive
80
+ })
81
+
82
+ const StackContainer = direction === 'row' ? StackWrap : StackView
83
+ // Needs 'checkboxgroup' role on direct parent of checkboxes for MacOS Voiceover's numbering to work,
84
+ // and also needs 'checkboxgroup' role on fieldset for correct description on focusing the set.
85
+ // TODO: test this on more web screen readers.
86
+
87
+ const uniqueFields = ['id']
88
+ if (!containUniqueFields(items, uniqueFields)) {
89
+ throw new Error(`CheckboxCardGroup items must have unique ${uniqueFields.join(', ')}`)
90
+ }
91
+
92
+ return (
93
+ <Fieldset
94
+ copy={copy}
95
+ ref={ref}
96
+ name={inputGroupName}
97
+ legend={legend}
98
+ tooltip={tooltip}
99
+ hint={hint}
100
+ hintPosition={hintPosition}
101
+ space={fieldSpace}
102
+ feedback={feedback}
103
+ inactive={inactive || readOnly}
104
+ validation={validation}
105
+ tokens={borderTokens}
106
+ showErrorBorder
107
+ showIcon
108
+ accessibilityRole="checkbox"
109
+ {...selectProps(rest)}
110
+ >
111
+ {(checkboxCardProperties) => (
112
+ <StackContainer space={space} accessibilityRole="checkbox">
113
+ {items.map(({ title, content, id, onChange: itemOnChange, ...itemRest }, index) => {
114
+ const cardId = id || `CheckboxCard[${index}]`
115
+ const handleChange = (newCheckedState, event) => {
116
+ if (typeof itemOnChange === 'function') itemOnChange(newCheckedState, event)
117
+ toggleOneValue(cardId, event)
118
+ }
119
+
120
+ return (
121
+ <CheckboxCard
122
+ key={cardId}
123
+ id={cardId}
124
+ checked={currentValues.includes(cardId)}
125
+ onChange={handleChange}
126
+ inactive={inactive}
127
+ title={title}
128
+ name={inputGroupName}
129
+ tokens={checkboxCardTokens}
130
+ variant={variant}
131
+ readOnly={readOnly}
132
+ {...selectItemProps(itemRest)}
133
+ {...checkboxCardProperties}
134
+ >
135
+ {content}
136
+ </CheckboxCard>
137
+ )
138
+ })}
139
+ </StackContainer>
140
+ )}
141
+ </Fieldset>
142
+ )
143
+ }
144
+ )
145
+ CheckboxCardGroup.displayName = 'CheckboxCardGroup'
146
+
147
+ CheckboxCardGroup.propTypes = {
148
+ ...selectedSystemPropTypes,
149
+ /**
150
+ * Whether the English or French copy will be used (e.g. for accessibility labels).
151
+ */
152
+ copy: PropTypes.oneOf(['en', 'fr']),
153
+ /**
154
+ * Optional theme token overrides for the outer CheckboxCardGroup component
155
+ */
156
+ tokens: getTokensPropType('CheckboxCardGroup'),
157
+ /**
158
+ * Optional theme token overrides for each inner CheckboxCard component
159
+ */
160
+ checkboxCardTokens: getTokensPropType('CheckboxCard'),
161
+ /**
162
+ * Theme variants, shared between both CheckboxCardGroup and CheckboxCard
163
+ */
164
+ variant: variantProp.propType,
165
+ /**
166
+ * Array of objects containing specifics for each CheckboxCard to be rendered in the group.
167
+ */
168
+ items: PropTypes.arrayOf(
169
+ PropTypes.exact({
170
+ ...selectedItemPropTypes,
171
+ title: PropTypes.string,
172
+ content: PropTypes.node,
173
+ id: PropTypes.string,
174
+ onChange: PropTypes.func
175
+ })
176
+ ),
177
+ /**
178
+ * Main text used to describe this group, used in Fieldset's Legend element.
179
+ */
180
+ legend: PropTypes.string,
181
+ /**
182
+ * Optional additional text giving more detail to help a user make a choice.
183
+ */
184
+ hint: PropTypes.string,
185
+ /**
186
+ * Position of the hint relative to label. Use `below` to display a larger hint below the label.
187
+ */
188
+ hintPosition: PropTypes.oneOf(['inline', 'below']),
189
+ /**
190
+ * Optional tooltip text content to include alongside the legend and hint.
191
+ */
192
+ tooltip: PropTypes.string,
193
+ /**
194
+ * Current validation status of the group, passed to the feedback element if there is one.
195
+ */
196
+ validation: PropTypes.oneOf(['error', 'success']),
197
+ /**
198
+ * If provided, a Feedback element is rendered containing this text.
199
+ */
200
+ feedback: PropTypes.string,
201
+ /**
202
+ * If provided, the checkboxed with this ids are selected on first render.
203
+ */
204
+ initialCheckedIds: PropTypes.arrayOf(PropTypes.string),
205
+ /**
206
+ * If not undefined, the checkboxes with these ids is selected, and the
207
+ * element's selection state will be controlled by its parent using the `onChange` function.
208
+ */
209
+ checkedIds: PropTypes.arrayOf(PropTypes.string),
210
+ /**
211
+ * Function to call on change in selection state. Is required if the selection state is controlled
212
+ * by a parent using checkedId and the input is not readOnly.
213
+ */
214
+ onChange: PropTypes.func,
215
+ /**
216
+ * If true, the checkbox cards cannot be selected by the user and simply show their current state.
217
+ */
218
+ readOnly: PropTypes.bool,
219
+ /**
220
+ * If true, the checkbox card cannot be interacted with, elements are set as `disabled` and if the
221
+ * theme supports `inactive` appearances rules, these are applied.
222
+ */
223
+ inactive: PropTypes.bool,
224
+ /**
225
+ * On Web, this is passed to the `name` attribute of the fieldset and each checkbox input.
226
+ */
227
+ name: PropTypes.string
228
+ }
229
+
230
+ export default CheckboxCardGroup
@@ -0,0 +1,3 @@
1
+ import CheckboxCardGroup from './CheckboxCardGroup'
2
+
3
+ export default CheckboxCardGroup
@@ -23,6 +23,7 @@ import { useViewport } from '../ViewportProvider'
23
23
  import IconButton from '../IconButton'
24
24
  import dictionary from './dictionary'
25
25
  import useScrollBlocking from '../utils/useScrollBlocking'
26
+ import ModalContent from './ModalContent'
26
27
 
27
28
  const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
28
29
 
@@ -57,7 +58,7 @@ const selectModalStyles = ({
57
58
  height,
58
59
  paddingLeft,
59
60
  paddingRight,
60
- paddingTop,
61
+ paddingTop: Platform.OS !== 'web' ? 16 + paddingTop : paddingTop, // the 16 additions are due to the border that is present in the mobile version
61
62
  paddingBottom,
62
63
  ...applyShadowToken(shadow)
63
64
  })
@@ -69,7 +70,11 @@ const selectBackdropStyles = ({ backdropColor, backdropOpacity }) => ({
69
70
 
70
71
  const selectCloseButtonContainerStyles = ({ paddingRight, paddingTop }) => ({
71
72
  paddingRight,
72
- paddingTop
73
+ paddingTop: Platform.OS !== 'web' ? 24 + paddingTop : paddingTop // The 24 additions are due to the border that is present in the mobile version for the close button
74
+ })
75
+
76
+ const selectScrollViewStyles = () => ({
77
+ flex: 1
73
78
  })
74
79
 
75
80
  /**
@@ -87,7 +92,31 @@ const selectCloseButtonContainerStyles = ({ paddingRight, paddingTop }) => ({
87
92
  * - Don’t use modals consecutively
88
93
  */
89
94
  const Modal = forwardRef(
90
- ({ children, isOpen, onClose, maxWidth, tokens, variant, copy, closeButton, ...rest }, ref) => {
95
+ (
96
+ {
97
+ children,
98
+ isOpen,
99
+ onClose,
100
+ maxWidth,
101
+ tokens,
102
+ copy,
103
+ closeButton,
104
+ onCancel = onClose,
105
+ onConfirm,
106
+ heading,
107
+ headingLevel,
108
+ subHeading,
109
+ subHeadingSize,
110
+ bodyText,
111
+ variant = {},
112
+ confirmButtonText,
113
+ confirmButtonVariant,
114
+ cancelButtonText,
115
+ cancelButtonType,
116
+ ...rest
117
+ },
118
+ ref
119
+ ) => {
91
120
  const viewport = useViewport()
92
121
  const themeTokens = useThemeTokens('Modal', tokens, variant, { viewport, maxWidth })
93
122
  const modalRef = useScrollBlocking(isOpen)
@@ -142,7 +171,27 @@ const Modal = forwardRef(
142
171
  )}
143
172
  </View>
144
173
  )}
145
- {children}
174
+ <ModalContent
175
+ tokens={tokens}
176
+ variant={variant}
177
+ onCancel={onCancel}
178
+ onConfirm={onConfirm}
179
+ heading={heading}
180
+ headingLevel={headingLevel}
181
+ subHeading={subHeading}
182
+ subHeadingSize={subHeadingSize}
183
+ bodyText={bodyText}
184
+ confirmButtonText={confirmButtonText}
185
+ confirmButtonVariant={confirmButtonVariant}
186
+ cancelButtonText={cancelButtonText}
187
+ cancelButtonType={cancelButtonType}
188
+ >
189
+ {Platform !== 'web' ? (
190
+ <ScrollView style={selectScrollViewStyles}>{children}</ScrollView>
191
+ ) : (
192
+ { children }
193
+ )}
194
+ </ModalContent>
146
195
  </View>
147
196
  </View>
148
197
  {/* when a modal becomes open its first focusable element is being automatically focused */}
@@ -181,7 +230,51 @@ Modal.propTypes = {
181
230
  /**
182
231
  * Pass a react node to override the default close button or pass `null` to hide the close button.
183
232
  */
184
- closeButton: PropTypes.node
233
+ closeButton: PropTypes.node,
234
+ /**
235
+ * Receive a string to set the heading of the modal.
236
+ */
237
+ heading: PropTypes.string,
238
+ /**
239
+ * Receive h3 or h4 to define the level of the heading.
240
+ */
241
+ headingLevel: PropTypes.oneOf(['h3', 'h4']),
242
+ /**
243
+ * Receive a string to set the sub heading of the modal.
244
+ */
245
+ subHeading: PropTypes.string,
246
+ /**
247
+ * Receive small, medium or large to set the size of the sub heading.
248
+ */
249
+ subHeadingSize: PropTypes.oneOf(['small', 'medium', 'large']),
250
+ /**
251
+ * Receive a string to set the bodyText of the modal.
252
+ */
253
+ bodyText: PropTypes.string,
254
+ /**
255
+ * Receive a string text for the confirm button.
256
+ */
257
+ confirmButtonText: PropTypes.string,
258
+ /**
259
+ * Receives a variant of button for the confirm button.
260
+ */
261
+ confirmButtonVariant: PropTypes.object,
262
+ /**
263
+ * Receive a function for the onConfirm event in the confirm button.
264
+ */
265
+ onConfirm: PropTypes.func,
266
+ /**
267
+ * Receive a string text for the cancel button.
268
+ */
269
+ cancelButtonText: PropTypes.string,
270
+ /**
271
+ * Receives a variant of button for the cancel button.
272
+ */
273
+ cancelButtonType: PropTypes.elementType, // TODO: figure out a way of passing an icon to the TextButton
274
+ /**
275
+ * Receive a function for the onCancel event in the cancel button.
276
+ */
277
+ onCancel: PropTypes.func
185
278
  }
186
279
 
187
280
  export default Modal
@@ -0,0 +1,171 @@
1
+ import React, { useState } from 'react'
2
+ import { View, StyleSheet, Platform } from 'react-native'
3
+ import PropTypes from 'prop-types'
4
+ import Box from '../Box'
5
+ import { Button } from '../Button'
6
+ import { TextButton } from '../Link'
7
+ import Spacer from '../Spacer'
8
+ import Typography from '../Typography'
9
+ import { useThemeTokens } from '../ThemeProvider'
10
+ import { useViewport } from '../ViewportProvider'
11
+
12
+ const ModalContent = ({
13
+ heading,
14
+ headingLevel = 'h3',
15
+ subHeading,
16
+ subHeadingSize = 'medium',
17
+ bodyText,
18
+ confirmButtonText,
19
+ confirmButtonVariant = { priority: 'high' },
20
+ onConfirm,
21
+ tokens,
22
+ variant,
23
+ cancelButtonText,
24
+ cancelButtonType: CancelButton = TextButton,
25
+ children,
26
+ onCancel
27
+ }) => {
28
+ const { headingColor, cancelButtonColor, ...themeTokens } = useThemeTokens(
29
+ 'Modal',
30
+ tokens,
31
+ variant
32
+ )
33
+ const [scrollContainerHeight, setScrollContainerHeight] = useState(0)
34
+ const [scrollContentHeight, setScrollContentHeight] = useState(0)
35
+ const viewport = useViewport()
36
+
37
+ const handleContainerLayout = ({
38
+ nativeEvent: {
39
+ layout: { height }
40
+ }
41
+ }) => setScrollContainerHeight(height)
42
+ const onContentSizeChange = (_, height) => setScrollContentHeight(height)
43
+ const isContentOverflowing = scrollContentHeight > scrollContainerHeight
44
+
45
+ const hasConfirmButton = confirmButtonText !== undefined && onConfirm !== undefined
46
+ const hasCancelButton = cancelButtonText !== undefined && onCancel !== undefined
47
+ const hasHeadingSection = Boolean(heading || subHeading)
48
+
49
+ const selectFooterContainerStyles = ({
50
+ paddingLeft,
51
+ paddingRight,
52
+ paddingTop,
53
+ marginLeft,
54
+ marginRight,
55
+ borderColor,
56
+ gap,
57
+ direction,
58
+ hasBorder
59
+ }) => ({
60
+ flexDirection: direction,
61
+ alignItems: 'center',
62
+ gap,
63
+ marginLeft: -marginLeft,
64
+ marginRight: -marginRight,
65
+ paddingLeft,
66
+ paddingRight,
67
+ paddingTop,
68
+ borderTopColor: hasBorder ? borderColor : 'transparent',
69
+ borderTopWidth: hasBorder ? 1 : 0
70
+ })
71
+
72
+ const headingStyles = {
73
+ flexDirection: 'column',
74
+ paddingTop: 8,
75
+ paddingRight: themeTokens.headingPaddingRight
76
+ }
77
+
78
+ const subheadingStyles = {
79
+ marginTop: themeTokens.subHeadingMarginTop
80
+ }
81
+
82
+ return (
83
+ <View style={styles.modalContent}>
84
+ {hasHeadingSection && (
85
+ <View style={headingStyles}>
86
+ {heading && (
87
+ <Typography
88
+ variant={{ size: headingLevel }}
89
+ tokens={{ color: headingColor }}
90
+ heading={headingLevel}
91
+ >
92
+ {heading}
93
+ </Typography>
94
+ )}
95
+ {subHeading && (
96
+ <View style={subheadingStyles}>
97
+ <Typography variant={{ size: subHeadingSize }}>{subHeading}</Typography>
98
+ </View>
99
+ )}
100
+ {Boolean(bodyText && hasHeadingSection) && <Spacer space={3} />}
101
+ </View>
102
+ )}
103
+ {bodyText && (
104
+ <Box
105
+ scroll={{ onContentSizeChange, showsVerticalScrollIndicator: true }}
106
+ onLayout={handleContainerLayout}
107
+ >
108
+ <Typography>{bodyText}</Typography>
109
+ </Box>
110
+ )}
111
+ {children}
112
+ {(hasConfirmButton || hasCancelButton) && (
113
+ <View
114
+ style={[
115
+ selectFooterContainerStyles({
116
+ ...themeTokens,
117
+ hasBorder: isContentOverflowing
118
+ })
119
+ ]}
120
+ >
121
+ {hasConfirmButton && (
122
+ <Button
123
+ variant={confirmButtonVariant}
124
+ tokens={{ width: viewport === 'xs' || viewport === 'sm' ? '100%' : undefined }}
125
+ onPress={onConfirm}
126
+ >
127
+ {confirmButtonText}
128
+ </Button>
129
+ )}
130
+ {hasCancelButton ? (
131
+ <View style={styles.styledTextButtonContainer}>
132
+ <CancelButton tokens={{ color: cancelButtonColor }} onPress={onCancel}>
133
+ {cancelButtonText}
134
+ </CancelButton>
135
+ </View>
136
+ ) : null}
137
+ </View>
138
+ )}
139
+ </View>
140
+ )
141
+ }
142
+
143
+ const styles = StyleSheet.create({
144
+ modalContent: {
145
+ flex: 1,
146
+ flexDirection: 'column',
147
+ minHeight: Platform.OS === 'web' ? '100%' : 'auto'
148
+ },
149
+ styledTextButtonContainer: {
150
+ flex: 1
151
+ }
152
+ })
153
+
154
+ ModalContent.propTypes = {
155
+ tokens: PropTypes.object,
156
+ variant: PropTypes.object,
157
+ heading: PropTypes.string,
158
+ headingLevel: PropTypes.oneOf(['h3', 'h4']),
159
+ subHeading: PropTypes.string,
160
+ subHeadingSize: PropTypes.oneOf(['small', 'medium', 'large']),
161
+ bodyText: PropTypes.string,
162
+ confirmButtonText: PropTypes.string,
163
+ confirmButtonVariant: PropTypes.object,
164
+ onConfirm: PropTypes.func,
165
+ cancelButtonText: PropTypes.string,
166
+ cancelButtonType: PropTypes.elementType, // TODO: figure out a way of passing an icon to the TextButton
167
+ children: PropTypes.node,
168
+ onCancel: PropTypes.func
169
+ }
170
+
171
+ export default ModalContent