@telus-uds/components-base 0.0.2-prerelease.5 → 0.0.2-prerelease.9

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 (429) hide show
  1. package/.ultra.cache.json +1 -0
  2. package/CHANGELOG.md +65 -0
  3. package/__fixtures__/Accessible.js +33 -0
  4. package/__fixtures__/Accessible.native.js +32 -0
  5. package/__fixtures__/testTheme.js +871 -52
  6. package/__tests__/ActivityIndicator/ActivityIndicator.test.jsx +1 -1
  7. package/__tests__/Button/ButtonBase.test.jsx +3 -32
  8. package/__tests__/Button/ButtonGroup.test.jsx +2 -2
  9. package/__tests__/Checkbox/Checkbox.test.jsx +94 -0
  10. package/__tests__/Checkbox/CheckboxGroup.test.jsx +247 -0
  11. package/__tests__/Icon/Icon.test.jsx +3 -3
  12. package/__tests__/IconButton/IconButton.test.jsx +52 -0
  13. package/__tests__/InputSupports/InputSupports.test.jsx +50 -0
  14. package/__tests__/List/List.test.jsx +60 -0
  15. package/__tests__/Modal/Modal.test.jsx +47 -0
  16. package/__tests__/Notification/Notification.test.jsx +20 -0
  17. package/__tests__/Pagination/Pagination.test.jsx +2 -2
  18. package/__tests__/Progress/Progress.test.jsx +79 -0
  19. package/__tests__/Radio/Radio.test.jsx +87 -0
  20. package/__tests__/Radio/RadioGroup.test.jsx +221 -0
  21. package/__tests__/RadioCard/RadioCard.test.jsx +87 -0
  22. package/__tests__/RadioCard/RadioCardGroup.test.jsx +247 -0
  23. package/__tests__/Search/Search.test.jsx +72 -0
  24. package/__tests__/Select/Select.test.jsx +93 -0
  25. package/__tests__/Skeleton/Skeleton.test.jsx +61 -0
  26. package/__tests__/StackView/StackView.test.jsx +0 -26
  27. package/__tests__/StepTracker/StepTracker.test.jsx +94 -0
  28. package/__tests__/Tabs/Tabs.test.jsx +200 -0
  29. package/__tests__/Tags/Tags.test.jsx +328 -0
  30. package/__tests__/TextInput/TextArea.test.jsx +34 -0
  31. package/__tests__/TextInput/{TextInput.test.jsx → TextInputBase.test.jsx} +20 -46
  32. package/__tests__/Tooltip/Tooltip.test.jsx +65 -0
  33. package/__tests__/Tooltip/getTooltipPosition.test.js +79 -0
  34. package/__tests__/utils/input.test.js +58 -0
  35. package/__tests__/utils/useCopy.test.js +42 -0
  36. package/__tests__/utils/useResponsiveProp.test.jsx +202 -0
  37. package/__tests__/utils/{spacing.test.jsx → useSpacingScale.test.jsx} +1 -1
  38. package/babel.config.js +20 -0
  39. package/jest.config.js +13 -4
  40. package/lib/A11yInfoProvider/index.js +54 -26
  41. package/lib/A11yText/index.js +37 -14
  42. package/lib/ActivityIndicator/Spinner.js +78 -0
  43. package/lib/ActivityIndicator/Spinner.native.js +121 -87
  44. package/lib/ActivityIndicator/index.js +28 -12
  45. package/lib/ActivityIndicator/shared.js +27 -12
  46. package/lib/BaseProvider/index.js +34 -11
  47. package/lib/Box/Box.js +54 -31
  48. package/lib/Box/index.js +13 -2
  49. package/lib/Button/Button.js +38 -10
  50. package/lib/Button/ButtonBase.js +115 -94
  51. package/lib/Button/ButtonGroup.js +94 -86
  52. package/lib/Button/ButtonLink.js +41 -13
  53. package/lib/Button/index.js +31 -4
  54. package/lib/Button/propTypes.js +32 -9
  55. package/lib/Card/Card.js +36 -41
  56. package/lib/Card/CardBase.js +78 -0
  57. package/lib/Card/PressableCardBase.js +137 -0
  58. package/lib/Card/index.js +40 -2
  59. package/lib/Checkbox/Checkbox.js +344 -0
  60. package/lib/Checkbox/CheckboxGroup.js +231 -0
  61. package/lib/Checkbox/CheckboxInput.js +74 -0
  62. package/lib/Checkbox/CheckboxInput.native.js +14 -0
  63. package/lib/Checkbox/index.js +21 -0
  64. package/lib/Divider/Divider.js +50 -24
  65. package/lib/Divider/index.js +13 -2
  66. package/lib/ExpandCollapse/Accordion.js +20 -7
  67. package/lib/ExpandCollapse/Control.js +50 -27
  68. package/lib/ExpandCollapse/ExpandCollapse.js +41 -24
  69. package/lib/ExpandCollapse/Panel.js +75 -37
  70. package/lib/ExpandCollapse/index.js +25 -7
  71. package/lib/Feedback/Feedback.js +85 -34
  72. package/lib/Feedback/index.js +13 -2
  73. package/lib/Fieldset/Fieldset.js +160 -0
  74. package/lib/Fieldset/FieldsetContainer.js +41 -0
  75. package/lib/Fieldset/FieldsetContainer.native.js +33 -0
  76. package/lib/Fieldset/Legend.js +33 -0
  77. package/lib/Fieldset/Legend.native.js +43 -0
  78. package/lib/Fieldset/cssReset.js +21 -0
  79. package/lib/Fieldset/index.js +13 -0
  80. package/lib/FlexGrid/Col/Col.js +67 -38
  81. package/lib/FlexGrid/Col/index.js +13 -2
  82. package/lib/FlexGrid/FlexGrid.js +70 -45
  83. package/lib/FlexGrid/Row/Row.js +48 -27
  84. package/lib/FlexGrid/Row/index.js +13 -2
  85. package/lib/FlexGrid/helpers/index.js +9 -1
  86. package/lib/FlexGrid/index.js +13 -2
  87. package/lib/FlexGrid/providers/GutterContext.js +15 -3
  88. package/lib/Icon/Icon.js +52 -47
  89. package/lib/Icon/IconText.js +100 -0
  90. package/lib/Icon/index.js +31 -3
  91. package/lib/IconButton/IconButton.js +135 -0
  92. package/lib/IconButton/index.js +13 -0
  93. package/lib/InputLabel/InputLabel.js +70 -34
  94. package/lib/InputLabel/LabelContent.js +31 -0
  95. package/lib/InputLabel/LabelContent.native.js +9 -1
  96. package/lib/InputLabel/index.js +13 -2
  97. package/lib/InputSupports/InputSupports.js +104 -0
  98. package/lib/InputSupports/index.js +13 -0
  99. package/lib/InputSupports/propTypes.js +66 -0
  100. package/lib/InputSupports/useInputSupports.js +41 -0
  101. package/lib/Link/ChevronLink.js +57 -15
  102. package/lib/Link/InlinePressable.js +50 -0
  103. package/lib/Link/InlinePressable.native.js +101 -0
  104. package/lib/Link/Link.js +30 -13
  105. package/lib/Link/LinkBase.js +114 -145
  106. package/lib/Link/TextButton.js +47 -17
  107. package/lib/Link/index.js +39 -4
  108. package/lib/List/List.js +80 -0
  109. package/lib/List/ListItem.js +237 -0
  110. package/lib/List/index.js +13 -0
  111. package/lib/Modal/Modal.js +226 -0
  112. package/lib/Modal/dictionary.js +16 -0
  113. package/lib/Modal/index.js +13 -0
  114. package/lib/Notification/Notification.js +200 -0
  115. package/lib/Notification/dictionary.js +15 -0
  116. package/lib/Notification/index.js +13 -0
  117. package/lib/Pagination/PageButton.js +45 -46
  118. package/lib/Pagination/Pagination.js +70 -40
  119. package/lib/Pagination/SideButton.js +74 -58
  120. package/lib/Pagination/dictionary.js +9 -2
  121. package/lib/Pagination/index.js +13 -2
  122. package/lib/Pagination/usePagination.js +12 -2
  123. package/lib/Progress/Progress.js +99 -0
  124. package/lib/Progress/ProgressBar.js +146 -0
  125. package/lib/Progress/ProgressBarBackground.js +57 -0
  126. package/lib/Progress/index.js +16 -0
  127. package/lib/Radio/Radio.js +292 -0
  128. package/lib/Radio/RadioButton.js +141 -0
  129. package/lib/Radio/RadioGroup.js +233 -0
  130. package/lib/Radio/RadioInput.js +76 -0
  131. package/lib/Radio/RadioInput.native.js +14 -0
  132. package/lib/Radio/index.js +21 -0
  133. package/lib/RadioCard/RadioCard.js +240 -0
  134. package/lib/RadioCard/RadioCardGroup.js +251 -0
  135. package/lib/RadioCard/index.js +21 -0
  136. package/lib/Search/Search.js +243 -0
  137. package/lib/Search/dictionary.js +19 -0
  138. package/lib/Search/index.js +13 -0
  139. package/lib/Select/Group.js +33 -0
  140. package/lib/Select/Group.native.js +25 -0
  141. package/lib/Select/Item.js +29 -0
  142. package/lib/Select/Item.native.js +19 -0
  143. package/lib/Select/Picker.js +79 -0
  144. package/lib/Select/Picker.native.js +115 -0
  145. package/lib/Select/Select.js +300 -0
  146. package/lib/Select/index.js +19 -0
  147. package/lib/SideNav/Item.js +54 -33
  148. package/lib/SideNav/ItemContent.js +41 -15
  149. package/lib/SideNav/ItemsGroup.js +46 -27
  150. package/lib/SideNav/SideNav.js +92 -69
  151. package/lib/SideNav/index.js +15 -1
  152. package/lib/Skeleton/Skeleton.js +137 -0
  153. package/lib/Skeleton/index.js +13 -0
  154. package/lib/Skeleton/skeleton.constant.js +12 -0
  155. package/lib/Skeleton/skeletonWebAnimation.js +27 -0
  156. package/lib/Skeleton/useSkeletonNativeAnimation.js +37 -0
  157. package/lib/Spacer/Spacer.js +31 -12
  158. package/lib/Spacer/index.js +13 -2
  159. package/lib/StackView/StackView.js +57 -33
  160. package/lib/StackView/StackWrap.js +33 -10
  161. package/lib/StackView/StackWrap.native.js +13 -2
  162. package/lib/StackView/StackWrapBox.js +50 -23
  163. package/lib/StackView/StackWrapGap.js +45 -19
  164. package/lib/StackView/common.js +19 -4
  165. package/lib/StackView/getStackedContent.js +49 -19
  166. package/lib/StackView/index.js +29 -5
  167. package/lib/StepTracker/Step.js +245 -0
  168. package/lib/StepTracker/StepTracker.js +197 -0
  169. package/lib/StepTracker/dictionary.js +17 -0
  170. package/lib/StepTracker/index.js +13 -0
  171. package/lib/Tabs/HorizontalScroll.js +199 -0
  172. package/lib/Tabs/ScrollViewEnd.js +66 -0
  173. package/lib/Tabs/ScrollViewEnd.native.js +41 -0
  174. package/lib/Tabs/Tabs.js +117 -0
  175. package/lib/Tabs/TabsItem.js +234 -0
  176. package/lib/Tabs/TabsScrollButton.js +121 -0
  177. package/lib/Tabs/dictionary.js +18 -0
  178. package/lib/Tabs/index.js +13 -0
  179. package/lib/Tabs/itemPositions.js +128 -0
  180. package/lib/Tags/Tags.js +250 -0
  181. package/lib/Tags/index.js +13 -0
  182. package/lib/TextInput/TextArea.js +109 -0
  183. package/lib/TextInput/TextInput.js +41 -303
  184. package/lib/TextInput/TextInputBase.js +252 -0
  185. package/lib/TextInput/index.js +23 -2
  186. package/lib/TextInput/propTypes.js +42 -0
  187. package/lib/ThemeProvider/ThemeProvider.js +38 -14
  188. package/lib/ThemeProvider/index.js +61 -6
  189. package/lib/ThemeProvider/useSetTheme.js +14 -5
  190. package/lib/ThemeProvider/useTheme.js +13 -4
  191. package/lib/ThemeProvider/useThemeTokens.js +86 -19
  192. package/lib/ThemeProvider/utils/index.js +31 -2
  193. package/lib/ThemeProvider/utils/styles.js +52 -16
  194. package/lib/ThemeProvider/utils/theme-tokens.js +94 -16
  195. package/lib/ToggleSwitch/ToggleSwitch.js +76 -52
  196. package/lib/ToggleSwitch/index.js +13 -2
  197. package/lib/Tooltip/Backdrop.js +56 -0
  198. package/lib/Tooltip/Backdrop.native.js +59 -0
  199. package/lib/Tooltip/Tooltip.js +357 -0
  200. package/lib/Tooltip/dictionary.js +15 -0
  201. package/lib/Tooltip/getTooltipPosition.js +172 -0
  202. package/lib/Tooltip/index.js +13 -0
  203. package/lib/TooltipButton/TooltipButton.js +83 -0
  204. package/lib/TooltipButton/index.js +13 -0
  205. package/lib/Typography/Typography.js +58 -43
  206. package/lib/Typography/index.js +13 -2
  207. package/lib/ViewportProvider/ViewportProvider.js +46 -0
  208. package/lib/ViewportProvider/index.js +22 -38
  209. package/lib/ViewportProvider/useViewport.js +15 -0
  210. package/lib/ViewportProvider/useViewportListener.js +57 -0
  211. package/lib/index.js +518 -24
  212. package/lib/utils/a11y/index.js +18 -0
  213. package/lib/utils/a11y/textSize.js +49 -0
  214. package/lib/utils/animation/index.js +15 -2
  215. package/lib/utils/animation/useVerticalExpandAnimation.js +28 -11
  216. package/lib/utils/children.js +87 -0
  217. package/lib/utils/index.js +163 -4
  218. package/lib/utils/info/index.js +19 -0
  219. package/lib/utils/info/platform/index.js +23 -0
  220. package/lib/utils/info/platform/platform.android.js +8 -0
  221. package/lib/utils/info/platform/platform.ios.js +8 -0
  222. package/lib/utils/info/platform/platform.js +8 -0
  223. package/lib/utils/info/platform/platform.native.js +11 -0
  224. package/lib/utils/info/versions.js +16 -0
  225. package/lib/utils/input.js +51 -33
  226. package/lib/utils/pressability.js +120 -0
  227. package/lib/utils/propTypes.js +269 -116
  228. package/lib/utils/useCopy.js +51 -0
  229. package/lib/utils/useHash.js +48 -0
  230. package/lib/utils/useHash.native.js +15 -0
  231. package/lib/utils/useResponsiveProp.js +59 -0
  232. package/lib/utils/{spacing/useSpacingScale.js → useSpacingScale.js} +45 -12
  233. package/lib/utils/useUniqueId.js +13 -4
  234. package/package.json +12 -9
  235. package/release-context.json +4 -4
  236. package/src/ActivityIndicator/{Spinner.web.jsx → Spinner.jsx} +0 -0
  237. package/src/Box/Box.jsx +11 -4
  238. package/src/Button/Button.jsx +9 -5
  239. package/src/Button/ButtonBase.jsx +69 -69
  240. package/src/Button/ButtonGroup.jsx +11 -24
  241. package/src/Button/ButtonLink.jsx +14 -4
  242. package/src/Button/propTypes.js +12 -2
  243. package/src/Card/Card.jsx +4 -30
  244. package/src/Card/CardBase.jsx +57 -0
  245. package/src/Card/PressableCardBase.jsx +112 -0
  246. package/src/Card/index.js +3 -0
  247. package/src/Checkbox/Checkbox.jsx +274 -0
  248. package/src/Checkbox/CheckboxGroup.jsx +196 -0
  249. package/src/Checkbox/CheckboxInput.jsx +55 -0
  250. package/src/Checkbox/CheckboxInput.native.jsx +6 -0
  251. package/src/Checkbox/index.js +5 -0
  252. package/src/ExpandCollapse/Control.jsx +1 -1
  253. package/src/Feedback/Feedback.jsx +31 -22
  254. package/src/Fieldset/Fieldset.jsx +129 -0
  255. package/src/Fieldset/FieldsetContainer.jsx +22 -0
  256. package/src/Fieldset/FieldsetContainer.native.jsx +16 -0
  257. package/src/Fieldset/Legend.jsx +16 -0
  258. package/src/Fieldset/Legend.native.jsx +22 -0
  259. package/src/Fieldset/cssReset.js +14 -0
  260. package/src/Fieldset/index.js +3 -0
  261. package/src/Icon/Icon.jsx +21 -26
  262. package/src/Icon/IconText.jsx +63 -0
  263. package/src/Icon/index.js +3 -2
  264. package/src/IconButton/IconButton.jsx +107 -0
  265. package/src/IconButton/index.js +3 -0
  266. package/src/InputLabel/InputLabel.jsx +11 -4
  267. package/src/InputLabel/{LabelContent.web.jsx → LabelContent.jsx} +0 -0
  268. package/src/InputSupports/InputSupports.jsx +75 -0
  269. package/src/InputSupports/index.js +3 -0
  270. package/src/InputSupports/propTypes.js +44 -0
  271. package/src/InputSupports/useInputSupports.js +30 -0
  272. package/src/Link/ChevronLink.jsx +28 -7
  273. package/src/Link/InlinePressable.jsx +37 -0
  274. package/src/Link/InlinePressable.native.jsx +73 -0
  275. package/src/Link/Link.jsx +17 -13
  276. package/src/Link/LinkBase.jsx +67 -148
  277. package/src/Link/TextButton.jsx +25 -11
  278. package/src/Link/index.js +2 -1
  279. package/src/List/List.jsx +47 -0
  280. package/src/List/ListItem.jsx +187 -0
  281. package/src/List/index.js +3 -0
  282. package/src/Modal/Modal.jsx +185 -0
  283. package/src/Modal/dictionary.js +9 -0
  284. package/src/Modal/index.js +3 -0
  285. package/src/Notification/Notification.jsx +149 -0
  286. package/src/Notification/dictionary.js +8 -0
  287. package/src/Notification/index.js +3 -0
  288. package/src/Pagination/PageButton.jsx +3 -17
  289. package/src/Pagination/SideButton.jsx +27 -38
  290. package/src/Progress/Progress.jsx +77 -0
  291. package/src/Progress/ProgressBar.jsx +110 -0
  292. package/src/Progress/ProgressBarBackground.jsx +34 -0
  293. package/src/Progress/index.js +6 -0
  294. package/src/Radio/Radio.jsx +233 -0
  295. package/src/Radio/RadioButton.jsx +131 -0
  296. package/src/Radio/RadioGroup.jsx +198 -0
  297. package/src/Radio/RadioInput.jsx +57 -0
  298. package/src/Radio/RadioInput.native.jsx +6 -0
  299. package/src/Radio/index.js +5 -0
  300. package/src/RadioCard/RadioCard.jsx +191 -0
  301. package/src/RadioCard/RadioCardGroup.jsx +211 -0
  302. package/src/RadioCard/index.js +5 -0
  303. package/src/Search/Search.jsx +204 -0
  304. package/src/Search/dictionary.js +12 -0
  305. package/src/Search/index.js +3 -0
  306. package/src/Select/Group.jsx +15 -0
  307. package/src/Select/Group.native.jsx +14 -0
  308. package/src/Select/Item.jsx +11 -0
  309. package/src/Select/Item.native.jsx +10 -0
  310. package/src/Select/Picker.jsx +67 -0
  311. package/src/Select/Picker.native.jsx +95 -0
  312. package/src/Select/Select.jsx +255 -0
  313. package/src/Select/index.js +8 -0
  314. package/src/SideNav/Item.jsx +2 -2
  315. package/src/Skeleton/Skeleton.jsx +98 -0
  316. package/src/Skeleton/index.js +3 -0
  317. package/src/Skeleton/skeleton.constant.js +3 -0
  318. package/src/Skeleton/skeletonWebAnimation.js +13 -0
  319. package/src/Skeleton/useSkeletonNativeAnimation.js +27 -0
  320. package/src/StackView/StackView.jsx +25 -17
  321. package/src/StackView/StackWrap.jsx +9 -1
  322. package/src/StackView/StackWrapBox.jsx +19 -7
  323. package/src/StackView/StackWrapGap.jsx +15 -5
  324. package/src/StackView/getStackedContent.jsx +8 -2
  325. package/src/StepTracker/Step.jsx +202 -0
  326. package/src/StepTracker/StepTracker.jsx +163 -0
  327. package/src/StepTracker/dictionary.js +10 -0
  328. package/src/StepTracker/index.js +3 -0
  329. package/src/Tabs/HorizontalScroll.jsx +165 -0
  330. package/src/Tabs/ScrollViewEnd.jsx +53 -0
  331. package/src/Tabs/ScrollViewEnd.native.jsx +24 -0
  332. package/src/Tabs/Tabs.jsx +89 -0
  333. package/src/Tabs/TabsItem.jsx +204 -0
  334. package/src/Tabs/TabsScrollButton.jsx +100 -0
  335. package/src/Tabs/dictionary.js +11 -0
  336. package/src/Tabs/index.js +3 -0
  337. package/src/Tabs/itemPositions.js +101 -0
  338. package/src/Tags/Tags.jsx +207 -0
  339. package/src/Tags/index.js +3 -0
  340. package/src/TextInput/TextArea.jsx +78 -0
  341. package/src/TextInput/TextInput.jsx +17 -290
  342. package/src/TextInput/TextInputBase.jsx +210 -0
  343. package/src/TextInput/index.js +2 -1
  344. package/src/TextInput/propTypes.js +29 -0
  345. package/src/ThemeProvider/useThemeTokens.js +56 -5
  346. package/src/ThemeProvider/utils/styles.js +18 -5
  347. package/src/ThemeProvider/utils/theme-tokens.js +46 -5
  348. package/src/ToggleSwitch/ToggleSwitch.jsx +3 -4
  349. package/src/Tooltip/Backdrop.jsx +60 -0
  350. package/src/Tooltip/Backdrop.native.jsx +33 -0
  351. package/src/Tooltip/Tooltip.jsx +294 -0
  352. package/src/Tooltip/dictionary.js +8 -0
  353. package/src/Tooltip/getTooltipPosition.js +161 -0
  354. package/src/Tooltip/index.js +3 -0
  355. package/src/TooltipButton/TooltipButton.jsx +49 -0
  356. package/src/TooltipButton/index.js +3 -0
  357. package/src/Typography/Typography.jsx +10 -20
  358. package/src/ViewportProvider/ViewportProvider.jsx +21 -0
  359. package/src/ViewportProvider/index.jsx +2 -41
  360. package/src/ViewportProvider/useViewport.js +5 -0
  361. package/src/ViewportProvider/useViewportListener.js +43 -0
  362. package/src/index.js +31 -3
  363. package/src/utils/a11y/index.js +1 -0
  364. package/src/utils/a11y/textSize.js +30 -0
  365. package/src/utils/children.jsx +66 -0
  366. package/src/utils/index.js +11 -1
  367. package/src/utils/info/index.js +8 -0
  368. package/src/utils/info/platform/index.js +11 -0
  369. package/src/utils/info/platform/platform.android.js +1 -0
  370. package/src/utils/info/platform/platform.ios.js +1 -0
  371. package/src/utils/info/platform/platform.js +1 -0
  372. package/src/utils/info/platform/platform.native.js +4 -0
  373. package/src/utils/info/versions.js +6 -0
  374. package/src/utils/input.js +20 -12
  375. package/src/utils/pressability.js +96 -0
  376. package/src/utils/propTypes.js +195 -56
  377. package/src/utils/useCopy.js +39 -0
  378. package/src/utils/useHash.js +34 -0
  379. package/src/utils/useHash.native.js +6 -0
  380. package/src/utils/useResponsiveProp.js +50 -0
  381. package/src/utils/{spacing/useSpacingScale.js → useSpacingScale.js} +25 -10
  382. package/stories/A11yText/A11yText.stories.jsx +4 -8
  383. package/stories/Button/Button.stories.jsx +5 -0
  384. package/stories/Card/Card.stories.jsx +1 -1
  385. package/stories/Checkbox/Checkbox.stories.jsx +94 -0
  386. package/stories/Feedback/Feedback.stories.jsx +5 -6
  387. package/stories/Icon/Icon.stories.jsx +27 -7
  388. package/stories/IconButton/IconButton.stories.jsx +50 -0
  389. package/stories/InputLabel/InputLabel.stories.jsx +8 -3
  390. package/stories/Link/ChevronLink.stories.jsx +3 -3
  391. package/stories/Link/Link.stories.jsx +28 -18
  392. package/stories/List/List.stories.jsx +117 -0
  393. package/stories/Modal/Modal.stories.jsx +29 -0
  394. package/stories/Notification/Notification.stories.jsx +82 -0
  395. package/stories/Progress/Progress.stories.jsx +93 -0
  396. package/stories/Radio/Radio.stories.jsx +100 -0
  397. package/stories/RadioCard/RadioCard.stories.jsx +98 -0
  398. package/stories/Search/Search.stories.jsx +16 -0
  399. package/stories/Select/Select.stories.jsx +55 -0
  400. package/stories/Skeleton/Skeleton.stories.jsx +36 -0
  401. package/stories/Spacer/Spacer.stories.jsx +7 -2
  402. package/stories/StackView/StackView.stories.jsx +10 -0
  403. package/stories/StackView/StackWrap.stories.jsx +12 -0
  404. package/stories/StepTracker/StepTracker.stories.jsx +71 -0
  405. package/stories/Tabs/Tabs.stories.jsx +97 -0
  406. package/stories/Tags/Tags.stories.jsx +69 -0
  407. package/stories/TextInput/TextArea.stories.jsx +100 -0
  408. package/stories/Tooltip/Tooltip.stories.jsx +81 -0
  409. package/stories/TooltipButton/TooltipButton.stories.jsx +11 -0
  410. package/stories/{platform-supports.web.jsx → platform-supports.jsx} +0 -0
  411. package/stories/supports.jsx +36 -2
  412. package/__fixtures__/accessible.icon.svg +0 -6
  413. package/babel.config.json +0 -8
  414. package/docs/Contributing.stories.mdx +0 -9
  415. package/docs/Fonts.stories.mdx +0 -104
  416. package/docs/Icons.stories.mdx +0 -144
  417. package/docs/Introduction.stories.mdx +0 -9
  418. package/lib/ActivityIndicator/Spinner.web.js +0 -55
  419. package/lib/InputLabel/LabelContent.web.js +0 -17
  420. package/lib/Pagination/useCopy.js +0 -10
  421. package/lib/config/svgr-icons-web.js +0 -9
  422. package/lib/config/svgr-icons.js +0 -52
  423. package/lib/utils/spacing/index.js +0 -2
  424. package/lib/utils/spacing/utils.js +0 -32
  425. package/src/Pagination/useCopy.js +0 -7
  426. package/src/config/svgr-icons-web.js +0 -11
  427. package/src/config/svgr-icons.js +0 -46
  428. package/src/utils/spacing/index.js +0 -3
  429. package/src/utils/spacing/utils.js +0 -28
@@ -0,0 +1,237 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _react = _interopRequireDefault(require("react"));
9
+
10
+ var _View = _interopRequireDefault(require("react-native-web/dist/cjs/exports/View"));
11
+
12
+ var _Platform = _interopRequireDefault(require("react-native-web/dist/cjs/exports/Platform"));
13
+
14
+ var _Text = _interopRequireDefault(require("react-native-web/dist/cjs/exports/Text"));
15
+
16
+ var _StyleSheet = _interopRequireDefault(require("react-native-web/dist/cjs/exports/StyleSheet"));
17
+
18
+ var _propTypes = _interopRequireDefault(require("prop-types"));
19
+
20
+ var _ThemeProvider = require("../ThemeProvider");
21
+
22
+ var _utils = require("../utils");
23
+
24
+ var _jsxRuntime = require("react/jsx-runtime");
25
+
26
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
27
+
28
+ const selectBulletStyles = ({
29
+ itemBulletWidth,
30
+ itemBulletHeight,
31
+ itemBulletColor
32
+ }) => ({
33
+ width: itemBulletWidth,
34
+ height: itemBulletHeight,
35
+ borderRadius: itemBulletHeight / 2,
36
+ backgroundColor: itemBulletColor
37
+ });
38
+
39
+ const selectBulletContainerStyles = ({
40
+ itemBulletContainerWidth,
41
+ itemBulletContainerAlign
42
+ }) => ({
43
+ width: itemBulletContainerWidth,
44
+ alignItems: itemBulletContainerAlign,
45
+ justifyContent: itemBulletContainerAlign
46
+ });
47
+
48
+ const selectItemIconTokens = ({
49
+ itemIconSize,
50
+ itemIconColor
51
+ }) => ({
52
+ size: itemIconSize,
53
+ color: itemIconColor
54
+ });
55
+
56
+ const selectSideItemContainerStyles = ({
57
+ listGutter
58
+ }) => ({
59
+ marginRight: listGutter
60
+ });
61
+
62
+ const selectItemStyles = ({
63
+ itemFontWeight,
64
+ itemFontSize,
65
+ itemLineHeight,
66
+ itemFontName
67
+ }) => (0, _ThemeProvider.applyTextStyles)({
68
+ fontWeight: itemFontWeight,
69
+ fontSize: itemFontSize,
70
+ lineHeight: itemLineHeight,
71
+ fontName: itemFontName
72
+ });
73
+
74
+ const selectItemBlockStyles = ({
75
+ interItemMargin
76
+ }) => ({
77
+ marginBottom: interItemMargin
78
+ });
79
+
80
+ const selectDividerStyles = ({
81
+ dividerColor,
82
+ dividerSize,
83
+ interItemMarginWithDivider
84
+ }) => ({
85
+ borderBottomWidth: dividerSize,
86
+ borderColor: dividerColor,
87
+ marginBottom: interItemMarginWithDivider,
88
+ paddingBottom: interItemMarginWithDivider
89
+ });
90
+ /**
91
+ * ListItem is responsible for rendering icon or a bullet as side item
92
+ */
93
+
94
+
95
+ const ListItem = ({
96
+ tokens,
97
+ variant,
98
+ icon,
99
+ iconColor,
100
+ iconSize,
101
+ showDivider,
102
+ children,
103
+ isLastItem
104
+ }) => {
105
+ const themeTokens = (0, _ThemeProvider.useThemeTokens)('List', tokens, variant);
106
+ const itemStyles = selectItemStyles(themeTokens);
107
+ const itemBlockStyles = selectItemBlockStyles(themeTokens);
108
+ const dividerStyles = selectDividerStyles(themeTokens);
109
+ const itemBulletContainerStyles = selectBulletContainerStyles(themeTokens);
110
+ const itemBulletStyles = selectBulletStyles(themeTokens);
111
+ const iconTokens = selectItemIconTokens(themeTokens);
112
+ const sideItemContainerStyles = selectSideItemContainerStyles(themeTokens);
113
+
114
+ const accessibilityRole = _Platform.default.select({
115
+ web: 'listitem',
116
+ default: 'item'
117
+ });
118
+
119
+ const areChildrenStrings = () => {
120
+ if (Array.isArray(children)) {
121
+ return children.every(child => typeof child === 'string');
122
+ }
123
+
124
+ return typeof children === 'string';
125
+ };
126
+
127
+ const renderItem = () => {
128
+ if (areChildrenStrings()) {
129
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Text.default, {
130
+ style: itemStyles,
131
+ children: children
132
+ });
133
+ }
134
+
135
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
136
+ children: children
137
+ });
138
+ };
139
+ /**
140
+ * Function responsible returning styling, in case the item is the last shouldn't
141
+ * add extra margin on the bottom, if "showDivider" is true it should add a divider
142
+ * and custom margin and padding, otherwise just adds a margin to the bottom
143
+ */
144
+
145
+
146
+ const getContainerStyle = () => {
147
+ if (isLastItem) {
148
+ return undefined;
149
+ }
150
+
151
+ if (showDivider) {
152
+ return dividerStyles;
153
+ }
154
+
155
+ return itemBlockStyles;
156
+ };
157
+ /**
158
+ * Renders item bullet or Icon in case it's defined
159
+ * in case children are string the icon is centered otherwise
160
+ * it will align itself at start of the container
161
+ */
162
+
163
+
164
+ const renderMarker = () => {
165
+ const IconComponent = icon || /*#__PURE__*/(0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {});
166
+
167
+ if (icon) {
168
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
169
+ style: [sideItemContainerStyles, areChildrenStrings() ? staticStyles.centeredIcons : undefined],
170
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(IconComponent, {
171
+ tokens: { ...iconTokens,
172
+ size: iconSize || iconTokens.size,
173
+ color: iconColor || iconTokens.color
174
+ }
175
+ })
176
+ });
177
+ }
178
+
179
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
180
+ style: [sideItemContainerStyles, itemBulletContainerStyles],
181
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
182
+ style: itemBulletStyles,
183
+ testID: "unordered-item-bullet"
184
+ })
185
+ });
186
+ };
187
+
188
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_View.default, {
189
+ style: [staticStyles.itemContainer, getContainerStyle()],
190
+ accessibilityRole: accessibilityRole,
191
+ children: [renderMarker(), renderItem()]
192
+ });
193
+ };
194
+
195
+ const staticStyles = _StyleSheet.default.create({
196
+ itemContainer: {
197
+ flexDirection: 'row'
198
+ },
199
+ centeredIcons: {
200
+ justifyContent: 'center'
201
+ }
202
+ });
203
+
204
+ ListItem.propTypes = {
205
+ tokens: (0, _utils.getTokensPropType)('List'),
206
+ variant: _utils.variantProp.propType,
207
+ children: _propTypes.default.node.isRequired,
208
+
209
+ /**
210
+ * Renders side item icon
211
+ */
212
+ icon: _propTypes.default.func,
213
+
214
+ /**
215
+ * Will set display icon color
216
+ */
217
+ iconColor: _propTypes.default.string,
218
+
219
+ /**
220
+ * Allow the user define the icon size if not defined the theme's file
221
+ */
222
+ iconSize: _propTypes.default.number,
223
+
224
+ /**
225
+ * @ignore
226
+ * Defined by parent if it's last item on the list
227
+ */
228
+ isLastItem: _propTypes.default.bool,
229
+
230
+ /**
231
+ * @ignore
232
+ * In case it is not the last item allow display divider
233
+ */
234
+ showDivider: _propTypes.default.bool
235
+ };
236
+ var _default = ListItem;
237
+ exports.default = _default;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _List = _interopRequireDefault(require("./List"));
9
+
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+
12
+ var _default = _List.default;
13
+ exports.default = _default;
@@ -0,0 +1,226 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _react = _interopRequireDefault(require("react"));
9
+
10
+ var _StyleSheet = _interopRequireDefault(require("react-native-web/dist/cjs/exports/StyleSheet"));
11
+
12
+ var _TouchableWithoutFeedback = _interopRequireDefault(require("react-native-web/dist/cjs/exports/TouchableWithoutFeedback"));
13
+
14
+ var _View = _interopRequireDefault(require("react-native-web/dist/cjs/exports/View"));
15
+
16
+ var _Modal = _interopRequireDefault(require("react-native-web/dist/cjs/exports/Modal"));
17
+
18
+ var _Platform = _interopRequireDefault(require("react-native-web/dist/cjs/exports/Platform"));
19
+
20
+ var _propTypes = _interopRequireDefault(require("prop-types"));
21
+
22
+ var _ThemeProvider = require("../ThemeProvider");
23
+
24
+ var _utils = require("../utils");
25
+
26
+ var _ViewportProvider = require("../ViewportProvider");
27
+
28
+ var _ButtonBase = _interopRequireDefault(require("../Button/ButtonBase"));
29
+
30
+ var _dictionary = _interopRequireDefault(require("./dictionary"));
31
+
32
+ var _jsxRuntime = require("react/jsx-runtime");
33
+
34
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
35
+
36
+ const selectContainerStyles = ({
37
+ containerPaddingLeft,
38
+ containerPaddingRight,
39
+ containerPaddingTop,
40
+ containerPaddingBottom,
41
+ maxWidth,
42
+ height
43
+ }) => ({
44
+ height,
45
+ maxWidth,
46
+ paddingLeft: containerPaddingLeft,
47
+ paddingRight: containerPaddingRight,
48
+ paddingTop: containerPaddingTop,
49
+ paddingBottom: containerPaddingBottom
50
+ });
51
+
52
+ const selectModalStyles = ({
53
+ backgroundColor,
54
+ borderRadius,
55
+ height,
56
+ paddingLeft,
57
+ paddingRight,
58
+ paddingTop,
59
+ paddingBottom,
60
+ shadow
61
+ }) => ({
62
+ backgroundColor,
63
+ borderRadius,
64
+ height,
65
+ paddingLeft,
66
+ paddingRight,
67
+ paddingTop,
68
+ paddingBottom,
69
+ ...(0, _ThemeProvider.applyShadowToken)(shadow)
70
+ });
71
+
72
+ const selectBackdropStyles = ({
73
+ backdropColor,
74
+ backdropOpacity
75
+ }) => ({
76
+ backgroundColor: backdropColor,
77
+ opacity: backdropOpacity
78
+ });
79
+
80
+ const selectCloseButtonContainerStyles = ({
81
+ paddingRight,
82
+ paddingTop
83
+ }) => ({
84
+ paddingRight,
85
+ paddingTop
86
+ });
87
+
88
+ const selectCloseIconProps = ({
89
+ closeIconSize,
90
+ closeIconColor
91
+ }) => ({
92
+ size: closeIconSize,
93
+ color: closeIconColor
94
+ });
95
+ /**
96
+ * A modal window is a secondary window that opens on top of the main one.
97
+ * Users have to interact with it before they can carry out their task and return to the main window.
98
+ * Use to reveal additional information to a user after they have performed an explicit interaction.
99
+ * They are a strongly discouraged pattern; it's preferred to have all relevant information within a page,
100
+ * and irrelevant information either linked externally or omitted.
101
+ *
102
+ * - Must only appear after a customer interaction, not on page load or any other circumstance
103
+ * - Open a modal based on explicit customer action e.g. clicking on a button/link/form field
104
+ * - Only one modal should be "current" at any time
105
+ * - Read [WebAIM's documentation](https://www.w3.org/TR/wai-aria-practices/examples/dialog-modal/dialog.html) to create accessible modals
106
+ * - Don’t use modals to reinforce or repeat information already available in the parent page or view
107
+ * - Don’t use modals consecutively
108
+ */
109
+
110
+
111
+ const Modal = ({
112
+ children,
113
+ isOpen,
114
+ onClose,
115
+ maxWidth,
116
+ tokens,
117
+ variant,
118
+ copy
119
+ }) => {
120
+ const viewport = (0, _ViewportProvider.useViewport)();
121
+ const themeTokens = (0, _ThemeProvider.useThemeTokens)('Modal', tokens, variant, {
122
+ viewport,
123
+ maxWidth
124
+ });
125
+ const {
126
+ closeIcon: CloseIconComponent
127
+ } = themeTokens;
128
+ const getCopy = (0, _utils.useCopy)({
129
+ dictionary: _dictionary.default,
130
+ copy
131
+ });
132
+ const closeLabel = getCopy('closeButton');
133
+
134
+ const handleClose = () => {
135
+ if (typeof onClose === 'function') onClose();
136
+ };
137
+
138
+ const handleKeyUp = event => {
139
+ if (event.key === 'Escape') onClose();
140
+ };
141
+
142
+ if (!isOpen) {
143
+ return null;
144
+ } // TODO: replace the close button with IconButton when implemented (https://github.com/telus/universal-design-system/issues/281)
145
+
146
+
147
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Modal.default, {
148
+ transparent: true,
149
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_View.default, {
150
+ style: [staticStyles.positioningContainer],
151
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
152
+ style: [staticStyles.sizingContainer, selectContainerStyles(themeTokens)],
153
+ pointerEvents: "box-none" // don't capture backdrop press events
154
+ ,
155
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_View.default, {
156
+ style: [staticStyles.modal, selectModalStyles(themeTokens)],
157
+ onKeyUp: handleKeyUp,
158
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
159
+ style: [staticStyles.closeButtonContainer, selectCloseButtonContainerStyles(themeTokens)],
160
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_ButtonBase.default, {
161
+ onPress: handleClose,
162
+ accessibilityRole: "button",
163
+ accessibilityLabel: closeLabel,
164
+ children: // TODO: add close button interactive states after IconButton is done
165
+ () => /*#__PURE__*/(0, _jsxRuntime.jsx)(CloseIconComponent, { ...selectCloseIconProps(themeTokens)
166
+ })
167
+ })
168
+ }), children]
169
+ })
170
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_TouchableWithoutFeedback.default, {
171
+ onPress: handleClose,
172
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
173
+ style: [staticStyles.backdrop, selectBackdropStyles(themeTokens)]
174
+ })
175
+ })]
176
+ })
177
+ });
178
+ };
179
+
180
+ Modal.propTypes = {
181
+ children: _propTypes.default.oneOfType([_propTypes.default.node, _propTypes.default.arrayOf(_propTypes.default.node)]),
182
+ copy: _utils.copyPropTypes,
183
+ isOpen: _propTypes.default.bool,
184
+ onClose: _propTypes.default.func,
185
+ maxWidth: _propTypes.default.bool,
186
+ tokens: (0, _utils.getTokensPropType)('Modal'),
187
+ variant: _utils.variantProp.propType
188
+ };
189
+ var _default = Modal;
190
+ exports.default = _default;
191
+
192
+ const staticStyles = _StyleSheet.default.create({
193
+ backdrop: {
194
+ position: 'absolute',
195
+ top: 0,
196
+ left: 0,
197
+ right: 0,
198
+ bottom: 0,
199
+ zIndex: -1,
200
+ ..._Platform.default.select({
201
+ web: {
202
+ cursor: 'pointer'
203
+ }
204
+ })
205
+ },
206
+ positioningContainer: {
207
+ flexBasis: '100%',
208
+ alignItems: 'center',
209
+ justifyContent: 'center'
210
+ },
211
+ sizingContainer: {
212
+ maxHeight: '100%',
213
+ // so that the container can expand up to the full viewport height
214
+ width: '100%' // ensure that the modal actually expands to the set maxWidth
215
+
216
+ },
217
+ modal: {
218
+ maxHeight: '100%' // so that the modal can expand vertically up to the sizing container's height (exclusive of its vertical padding)
219
+
220
+ },
221
+ closeButtonContainer: {
222
+ position: 'absolute',
223
+ top: 0,
224
+ right: 0
225
+ }
226
+ });
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _default = {
8
+ en: {
9
+ // English text from TDS Community `Modal`
10
+ closeButton: 'Close'
11
+ },
12
+ fr: {
13
+ closeButton: 'Fermer'
14
+ }
15
+ };
16
+ 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 _Modal = _interopRequireDefault(require("./Modal"));
9
+
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+
12
+ var _default = _Modal.default;
13
+ exports.default = _default;
@@ -0,0 +1,200 @@
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 _StyleSheet = _interopRequireDefault(require("react-native-web/dist/cjs/exports/StyleSheet"));
11
+
12
+ var _Text = _interopRequireDefault(require("react-native-web/dist/cjs/exports/Text"));
13
+
14
+ var _View = _interopRequireDefault(require("react-native-web/dist/cjs/exports/View"));
15
+
16
+ var _propTypes = _interopRequireDefault(require("prop-types"));
17
+
18
+ var _ThemeProvider = require("../ThemeProvider");
19
+
20
+ var _utils = require("../utils");
21
+
22
+ var _ButtonBase = _interopRequireDefault(require("../Button/ButtonBase"));
23
+
24
+ var _useCopy = _interopRequireDefault(require("../utils/useCopy"));
25
+
26
+ var _dictionary = _interopRequireDefault(require("./dictionary"));
27
+
28
+ var _jsxRuntime = require("react/jsx-runtime");
29
+
30
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
31
+
32
+ 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); }
33
+
34
+ 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; }
35
+
36
+ const selectContainerStyles = tokens => ({ ...tokens
37
+ });
38
+
39
+ const selectTextStyles = tokens => (0, _ThemeProvider.applyTextStyles)((0, _utils.selectTokens)('Typography', tokens));
40
+
41
+ const selectIconProps = ({
42
+ iconSize,
43
+ iconColor
44
+ }) => ({
45
+ size: iconSize,
46
+ color: iconColor
47
+ });
48
+
49
+ const selectIconContainerStyles = ({
50
+ iconGap
51
+ }) => ({
52
+ paddingRight: iconGap
53
+ });
54
+
55
+ const selectDismissIconProps = ({
56
+ dismissIconSize,
57
+ dismissIconColor
58
+ }) => ({
59
+ size: dismissIconSize,
60
+ color: dismissIconColor
61
+ });
62
+
63
+ const selectDismissButtonContainerStyles = ({
64
+ dismissButtonGap
65
+ }) => ({
66
+ paddingLeft: dismissButtonGap
67
+ });
68
+ /**
69
+ * A banner that highlights important messages:
70
+ * - Status message to show there is an error or outage of services
71
+ * - Confirmation message in response to user action
72
+ * - Account information letting the user know they have almost used all their data
73
+ *
74
+ * ## Usage criteria
75
+ * - Use simple text content only, such as bold test or links. Don’t use other complex components or paragraphs
76
+ * - Show notifications before the content that the message is related to, otherwise show at the top of the main content
77
+ * - Show system notifications at the top of the page, below the navigation, and expands the full-width of the viewport
78
+ * - When showing multiple notifications, show them in order of importance from top to bottom
79
+ * - Use variants to visually show the type of message contained within the Notification.
80
+ * The icon and colour will indicate meaning and importance
81
+ *
82
+ * ### Variants
83
+ * - Use `variant.style` to set the visual style of the notification
84
+ * - Use `dismissible` prop to enable dismissible functionality
85
+ * - Use `system` prop to set the visual style of the notification and denote an announcement from the system or application
86
+ *
87
+ * ### When to use the system prop?
88
+ * - Use `system` to show system-based messages coming from the application
89
+ * - Don’t use `system` when the message is in response to user action
90
+ *
91
+ * ## Variants
92
+ *
93
+ * #### Success
94
+ * Use the success variant to provide feedback of a successful operation. The message will include an icon to indicate meaning and importance.
95
+ *
96
+ * #### Warning
97
+ * Use the warning variant to provide feedback of a warning; users would still be able to proceed forward.
98
+ * The message will include an icon to indicate meaning and importance.
99
+ *
100
+ * #### Error
101
+ * Use the error variant to provide feedback of a failed operation. The message will include an icon to indicate meaning and importance.
102
+ *
103
+ * #### Dismissible
104
+ * Dismissible notifications should only be used for default or success notifications where there is no action needed from the user.
105
+ * If the information is passive then it should be dismissible as indicated by an interactive close button on the far right.
106
+ * If the notification requires an action then make the option(s) clear with a `ChevronLink` or `Link`.
107
+ *
108
+ * Use the `dismissible` prop to allow users to dismiss the Notification at any time. Once dismissed, the Notification is removed from the DOM.
109
+ *
110
+ * Please note:
111
+ *
112
+ * - Default and Success variants are dismissible
113
+ * - Error and Warning variants are not dismissible
114
+ *
115
+ * #### System message
116
+ * Use full-width `Notifications` to show system-based messages coming from the application, not in response to user action.
117
+ * Show system notifications at the top of the page, below the navigation, and expands the full-width of the viewport
118
+ */
119
+
120
+
121
+ const Notification = ({
122
+ children,
123
+ system,
124
+ dismissible,
125
+ copy = 'en',
126
+ tokens,
127
+ variant
128
+ }) => {
129
+ const [isDismissed, setIsDismissed] = (0, _react.useState)(false);
130
+ const themeTokens = (0, _ThemeProvider.useThemeTokens)('Notification', tokens, variant, {
131
+ system
132
+ });
133
+ const getCopy = (0, _useCopy.default)({
134
+ dictionary: _dictionary.default,
135
+ copy
136
+ });
137
+
138
+ if (isDismissed) {
139
+ return null;
140
+ }
141
+
142
+ const textStyles = selectTextStyles(themeTokens);
143
+ const content = typeof children === 'string' ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_Text.default, {
144
+ style: textStyles,
145
+ children: children
146
+ }) : children;
147
+ const {
148
+ icon: IconComponent,
149
+ dismissIcon: DismissIconComponent
150
+ } = themeTokens;
151
+
152
+ const onDismissPress = () => setIsDismissed(true); // TODO: replace the dismiss button with IconButton when implemented (https://github.com/telus/universal-design-system/issues/281)
153
+
154
+
155
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_View.default, {
156
+ style: [staticStyles.container, selectContainerStyles(themeTokens)],
157
+ children: [IconComponent && /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
158
+ style: selectIconContainerStyles(themeTokens),
159
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(IconComponent, { ...selectIconProps(themeTokens)
160
+ })
161
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
162
+ style: staticStyles.contentContainer,
163
+ children: content && typeof content === 'function' ? content({
164
+ textStyles,
165
+ variant
166
+ }) : content
167
+ }), dismissible && DismissIconComponent && /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
168
+ style: selectDismissButtonContainerStyles(themeTokens),
169
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_ButtonBase.default, {
170
+ onPress: onDismissPress,
171
+ accessibilityRole: "button",
172
+ accessibilityLabel: getCopy('dismiss'),
173
+ children: () => /*#__PURE__*/(0, _jsxRuntime.jsx)(DismissIconComponent, { ...selectDismissIconProps(themeTokens)
174
+ })
175
+ })
176
+ })]
177
+ });
178
+ };
179
+
180
+ Notification.propTypes = {
181
+ children: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.node, _propTypes.default.func]),
182
+ system: _propTypes.default.bool,
183
+ dismissible: _propTypes.default.bool,
184
+ copy: _propTypes.default.oneOfType([_propTypes.default.oneOf(['en', 'fr']), _propTypes.default.shape({
185
+ dismiss: _propTypes.default.string
186
+ })]),
187
+ tokens: (0, _utils.getTokensPropType)('Notification'),
188
+ variant: _utils.variantProp.propType
189
+ };
190
+ var _default = Notification;
191
+ exports.default = _default;
192
+
193
+ const staticStyles = _StyleSheet.default.create({
194
+ container: {
195
+ flexDirection: 'row'
196
+ },
197
+ contentContainer: {
198
+ flex: 1
199
+ }
200
+ });