@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
@@ -14,18 +14,29 @@ describe('useCopy hook', () => {
14
14
  it('returns a correct english translation', () => {
15
15
  const { result } = renderHook(() => useCopy({ dictionary, copy: 'en' }))
16
16
 
17
- expect(result.current('translation key')).toBe('english version')
17
+ const getCopy = result.current
18
+ expect(getCopy('translation key')).toBe('english version')
18
19
  })
19
20
 
20
21
  it('returns a correct french translation', () => {
21
22
  const { result } = renderHook(() => useCopy({ dictionary, copy: 'fr' }))
22
23
 
23
- expect(result.current('translation key')).toBe('french version')
24
+ const getCopy = result.current
25
+ expect(getCopy('translation key')).toBe('french version')
24
26
  })
25
27
 
26
28
  it('returns undefined when no translation is found', () => {
27
29
  const { result } = renderHook(() => useCopy({ dictionary, copy: 'en' }))
28
30
 
29
- expect(result.current('non-existing key')).toBe(undefined)
31
+ const getCopy = result.current
32
+ expect(getCopy('non-existing key')).toBe(undefined)
33
+ })
34
+
35
+ it('allows for overriding the entire dictionary with a copy object (ignoring the dictionary argument)', () => {
36
+ const { result } = renderHook(() => useCopy({ dictionary, copy: dictionary.en }))
37
+
38
+ const getCopy = result.current
39
+ expect(getCopy('non-existing key')).toBe(undefined)
40
+ expect(getCopy('translation key')).toBe('english version')
30
41
  })
31
42
  })
@@ -0,0 +1,20 @@
1
+ module.exports = {
2
+ env: {
3
+ /*
4
+ * we actually want this setup to be used whenever we're not in `test` but
5
+ * babel merges plugins array rather than replacing so we can't set it as a
6
+ * default. However the default BABEL_ENV value is development (jest sets it
7
+ * to test)
8
+ */
9
+ development: {
10
+ presets: ['@babel/preset-env', ['@babel/preset-react', { runtime: 'automatic' }]],
11
+ plugins: [['react-native-web', { commonjs: true }]]
12
+ },
13
+ /*
14
+ * jest is testing for just ios at the moment, use a preset which best matches that env
15
+ */
16
+ test: {
17
+ presets: ['module:metro-react-native-babel-preset']
18
+ }
19
+ }
20
+ }
package/jest.config.js CHANGED
@@ -1,10 +1,13 @@
1
1
  const preset = require('react-native/jest-preset')
2
- const displayName = require('./package.json').name.split('@telus-uds/').pop()
2
+ const name = require('./package.json').name.split('@telus-uds/').pop()
3
3
 
4
4
  // cherry-pick the bits of the preset we want to avoid it overriding the fix we have on L14
5
5
  module.exports = {
6
6
  haste: preset.haste,
7
- displayName,
7
+ displayName: {
8
+ name,
9
+ color: 'blue'
10
+ },
8
11
  setupFiles: preset.setupFiles,
9
12
  transform: {
10
13
  // Use babel-jest instead of react-native/jest/preprocessor.js so that the coverage report is correct as per:
@@ -22,7 +25,7 @@ module.exports = {
22
25
  '.+\\.(otf|svg|png|jpg)$': 'identity-obj-proxy'
23
26
  },
24
27
  transformIgnorePatterns: [
25
- 'node_modules/(?!(jest-)?react-native|@react-native-community|@react-native-picker)'
28
+ 'node_modules/(?!(jest-)?react-native|@react-native|@react-native-community|@react-native-picker)'
26
29
  ],
27
30
  // Count everything in src when calculating coverage
28
31
  collectCoverageFrom: ['src/**/*.{js,jsx}']
@@ -1,58 +1,86 @@
1
- import React, { createContext, useContext, useEffect, useState } from 'react';
2
- import PropTypes from 'prop-types';
3
- import { AccessibilityInfo, Platform } from 'react-native';
4
- const ScreenReaderContext = /*#__PURE__*/createContext(false);
5
- const ReducedMotionContext = /*#__PURE__*/createContext(false);
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useA11yInfo = exports.default = void 0;
7
+
8
+ var _react = _interopRequireWildcard(require("react"));
9
+
10
+ var _propTypes = _interopRequireDefault(require("prop-types"));
11
+
12
+ var _AccessibilityInfo = _interopRequireDefault(require("react-native-web/dist/cjs/exports/AccessibilityInfo"));
13
+
14
+ var _Platform = _interopRequireDefault(require("react-native-web/dist/cjs/exports/Platform"));
15
+
16
+ var _jsxRuntime = require("react/jsx-runtime");
17
+
18
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
+
20
+ 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); }
21
+
22
+ 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; }
23
+
24
+ const ScreenReaderContext = /*#__PURE__*/(0, _react.createContext)(false);
25
+ const ReducedMotionContext = /*#__PURE__*/(0, _react.createContext)(false);
6
26
 
7
27
  const A11yInfoProvider = ({
8
28
  children
9
29
  }) => {
10
- const [reduceMotionEnabled, setReduceMotionEnabled] = useState(false);
11
- const [screenReaderEnabled, setScreenReaderEnabled] = useState(false);
12
- useEffect(() => {
30
+ const [reduceMotionEnabled, setReduceMotionEnabled] = (0, _react.useState)(false);
31
+ const [screenReaderEnabled, setScreenReaderEnabled] = (0, _react.useState)(false);
32
+ (0, _react.useEffect)(() => {
13
33
  if (process.env.NODE_ENV === 'test') {
14
34
  // On Jest these effects do nothing but can cause `act` state change warnings
15
35
  // and "...after the Jest environment has been torn down" errors, so skip them.
16
36
  return () => {};
17
37
  }
18
38
 
19
- AccessibilityInfo.addEventListener('reduceMotionChanged', setReduceMotionEnabled);
20
- AccessibilityInfo.addEventListener('screenReaderChanged', setScreenReaderEnabled);
39
+ _AccessibilityInfo.default.addEventListener('reduceMotionChanged', setReduceMotionEnabled);
40
+
41
+ _AccessibilityInfo.default.addEventListener('screenReaderChanged', setScreenReaderEnabled);
21
42
 
22
43
  const setInitialA11yInfo = async () => {
23
- const [initialReduceMotionEnabled, initialScreenReaderEnabled] = await Promise.all([AccessibilityInfo.isReduceMotionEnabled(), AccessibilityInfo.isScreenReaderEnabled()]); // Browsers can't detect screen readers; in RNW isScreenReaderEnabled() is always `true`
44
+ const [initialReduceMotionEnabled, initialScreenReaderEnabled] = await Promise.all([_AccessibilityInfo.default.isReduceMotionEnabled(), _AccessibilityInfo.default.isScreenReaderEnabled()]); // Browsers can't detect screen readers; in RNW isScreenReaderEnabled() is always `true`
24
45
  // https://github.com/necolas/react-native-web/blob/master/packages/react-native-web/src/exports/AccessibilityInfo/index.js#L14
25
46
 
26
- setScreenReaderEnabled(Platform.OS !== 'web' && !!initialScreenReaderEnabled); // RNW does support isReduceMotionEnabled looking for 'prefers-reduced-motion' state
47
+ setScreenReaderEnabled(_Platform.default.OS !== 'web' && !!initialScreenReaderEnabled); // RNW does support isReduceMotionEnabled looking for 'prefers-reduced-motion' state
27
48
 
28
49
  setReduceMotionEnabled(!!initialReduceMotionEnabled);
29
50
  };
30
51
 
31
- if (AccessibilityInfo.isReduceMotionEnabled && AccessibilityInfo.isScreenReaderEnabled) {
52
+ if (_AccessibilityInfo.default.isReduceMotionEnabled && _AccessibilityInfo.default.isScreenReaderEnabled) {
32
53
  setInitialA11yInfo();
33
54
  }
34
55
 
35
56
  return () => {
36
- AccessibilityInfo.removeEventListener('reduceMotionChanged', setReduceMotionEnabled);
37
- AccessibilityInfo.removeEventListener('screenReaderChanged', setScreenReaderEnabled);
57
+ _AccessibilityInfo.default.removeEventListener('reduceMotionChanged', setReduceMotionEnabled);
58
+
59
+ _AccessibilityInfo.default.removeEventListener('screenReaderChanged', setScreenReaderEnabled);
38
60
  };
39
61
  }, []);
40
- return /*#__PURE__*/React.createElement(ReducedMotionContext.Provider, {
41
- value: reduceMotionEnabled
42
- }, /*#__PURE__*/React.createElement(ScreenReaderContext.Provider, {
43
- value: screenReaderEnabled
44
- }, children));
62
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(ReducedMotionContext.Provider, {
63
+ value: reduceMotionEnabled,
64
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(ScreenReaderContext.Provider, {
65
+ value: screenReaderEnabled,
66
+ children: children
67
+ })
68
+ });
45
69
  };
46
70
 
47
71
  A11yInfoProvider.propTypes = {
48
- children: PropTypes.node.isRequired
72
+ children: _propTypes.default.node.isRequired
49
73
  };
50
- export default A11yInfoProvider;
51
- export const useA11yInfo = () => {
52
- const screenReaderEnabled = useContext(ScreenReaderContext);
53
- const reduceMotionEnabled = useContext(ReducedMotionContext);
74
+ var _default = A11yInfoProvider;
75
+ exports.default = _default;
76
+
77
+ const useA11yInfo = () => {
78
+ const screenReaderEnabled = (0, _react.useContext)(ScreenReaderContext);
79
+ const reduceMotionEnabled = (0, _react.useContext)(ReducedMotionContext);
54
80
  return {
55
81
  reduceMotionEnabled,
56
82
  screenReaderEnabled
57
83
  };
58
- };
84
+ };
85
+
86
+ exports.useA11yInfo = useA11yInfo;
@@ -1,39 +1,65 @@
1
- import React from 'react';
2
- import { Platform, StyleSheet, View } from 'react-native';
3
- import PropTypes from 'prop-types';
4
- import { a11yProps } from '../utils/propTypes';
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 _Platform = _interopRequireDefault(require("react-native-web/dist/cjs/exports/Platform"));
11
+
12
+ var _StyleSheet = _interopRequireDefault(require("react-native-web/dist/cjs/exports/StyleSheet"));
13
+
14
+ var _View = _interopRequireDefault(require("react-native-web/dist/cjs/exports/View"));
15
+
16
+ var _propTypes = _interopRequireDefault(require("prop-types"));
17
+
18
+ var _propTypes2 = require("../utils/propTypes");
19
+
20
+ var _jsxRuntime = require("react/jsx-runtime");
21
+
22
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
+
24
+ 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); }
25
+
26
+ 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; }
27
+
5
28
  /**
6
29
  * A11yText is a zero-size invisible element that adds text to be read by screen readers.
7
30
  *
8
31
  * It should be used to add selectable screen-reader-only text to the main document flow,
9
32
  * as a sibling to blocks of text like paragraphs and interactive elements like buttons.
10
33
  */
11
-
12
- const A11yText = ({
34
+ const A11yText = /*#__PURE__*/(0, _react.forwardRef)(({
13
35
  text,
14
36
  heading,
15
37
  ...rest
16
- }) => {
17
- const a11y = a11yProps.select({
38
+ }, ref) => {
39
+ const a11y = _propTypes2.a11yProps.select({
18
40
  // On iOS, needs `accessible` to be true to be focusable without non-a11y content.
19
41
  // On Web, `accessible` causes RNW to set attributes that may make the element be treated as a group.
20
42
  // On Android, may cause this to be skipped when with `<Text>` siblings in an `accessible` View,
21
43
  // see https://github.com/facebook/react-native/issues/30851#issuecomment-790165489
22
- accessible: Platform.OS === 'ios',
44
+ accessible: _Platform.default.OS === 'ios',
23
45
  accessibilityLabel: text,
24
46
  accessibilityRole: heading ? 'header' : 'text',
25
47
  ...rest
26
48
  });
27
- return /*#__PURE__*/React.createElement(View, Object.assign({
28
- style: styles.invisible
29
- }, a11y));
30
- };
31
49
 
50
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
51
+ style: styles.invisible,
52
+ ref: ref,
53
+ ...a11y
54
+ });
55
+ });
56
+ A11yText.displayName = 'A11yText';
32
57
  A11yText.propTypes = {
33
- text: PropTypes.string.isRequired,
34
- heading: PropTypes.bool
58
+ text: _propTypes.default.string.isRequired,
59
+ heading: _propTypes.default.bool
35
60
  };
36
- const styles = StyleSheet.create({
61
+
62
+ const styles = _StyleSheet.default.create({
37
63
  invisible: {
38
64
  // Without width or height it is not shown
39
65
  minHeight: 1,
@@ -46,4 +72,6 @@ const styles = StyleSheet.create({
46
72
  top: -1
47
73
  }
48
74
  });
49
- export default A11yText;
75
+
76
+ var _default = A11yText;
77
+ exports.default = _default;
@@ -0,0 +1,81 @@
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 _shared = require("./shared");
11
+
12
+ var _jsxRuntime = require("react/jsx-runtime");
13
+
14
+ 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); }
15
+
16
+ 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; }
17
+
18
+ const SVG_RADIUS = 20;
19
+ const SVG_CIRCUMFERENCE = SVG_RADIUS * 2 * Math.PI;
20
+ const MIN_SVG_LENGTH = _shared.MIN_STROKE_ANGLE / 360 * SVG_CIRCUMFERENCE;
21
+ const MAX_SVG_LENGTH = (1 - _shared.MIN_EMPTY_ANGLE / 360) * SVG_CIRCUMFERENCE;
22
+ const animationProps = {
23
+ begin: '0s',
24
+ dur: `${_shared.DURATION}ms`,
25
+ fill: 'freeze',
26
+ repeatCount: 'indefinite'
27
+ };
28
+ const bezierProps = {
29
+ calcMode: 'spline',
30
+ keyTimes: '0; 0.5; 1',
31
+ keySplines: `${_shared.BEZIER.join(', ')} ; ${_shared.BEZIER.join(', ')}`
32
+ }; // We're using svg rather than css here to define the animation to avoid needing to introduce css injection mechanism
33
+ // It's possible to replicate this functionality with RNW animations, but it snags on chrome at least, see https://github.com/telus/universal-design-system/pull/477 for details.
34
+
35
+ const Spinner = /*#__PURE__*/(0, _react.forwardRef)(({
36
+ size,
37
+ color,
38
+ thickness,
39
+ label
40
+ }, ref) => /*#__PURE__*/(0, _jsxRuntime.jsx)("svg", {
41
+ ref: ref,
42
+ width: `${size}px`,
43
+ height: `${size}px`,
44
+ viewBox: "0 0 48 48",
45
+ "aria-valuetext": label,
46
+ role: "progressbar",
47
+ "aria-busy": true,
48
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("g", {
49
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("animateTransform", {
50
+ attributeName: "transform",
51
+ type: "rotate",
52
+ values: `-180 24 24;${360 + _shared.MIN_STROKE_ANGLE - 180} 24 24`,
53
+ ...animationProps
54
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)("circle", {
55
+ fill: "none",
56
+ stroke: color,
57
+ strokeWidth: thickness * 48 / size,
58
+ strokeLinecap: "round",
59
+ cx: "24",
60
+ cy: "24",
61
+ r: "20",
62
+ strokeDasharray: [MIN_SVG_LENGTH, SVG_CIRCUMFERENCE],
63
+ strokeDashoffset: 0,
64
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("animate", {
65
+ attributeName: "stroke-dashoffset",
66
+ values: `0;-10;${MIN_SVG_LENGTH - SVG_CIRCUMFERENCE}`,
67
+ ...animationProps,
68
+ ...bezierProps
69
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("animate", {
70
+ attributeName: "stroke-dasharray",
71
+ values: `${MIN_SVG_LENGTH}, 200;${MAX_SVG_LENGTH}, 200;${MIN_SVG_LENGTH}, 200`,
72
+ ...animationProps,
73
+ ...bezierProps
74
+ })]
75
+ })]
76
+ })
77
+ }));
78
+ Spinner.displayName = 'Spinner';
79
+ Spinner.propTypes = _shared.propTypes;
80
+ var _default = Spinner;
81
+ exports.default = _default;
@@ -1,124 +1,162 @@
1
- import React from 'react';
2
- import { Animated, Easing, StyleSheet, View } from 'react-native';
3
- import { DURATION, MIN_EMPTY_ANGLE, MIN_STROKE_ANGLE, BEZIER, propTypes } from './shared';
4
- const ea = MIN_EMPTY_ANGLE / 2;
5
- const sa = MIN_STROKE_ANGLE / 2;
1
+ "use strict";
6
2
 
7
- const Spinner = ({
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _react = _interopRequireWildcard(require("react"));
9
+
10
+ var _Animated = _interopRequireDefault(require("react-native-web/dist/cjs/exports/Animated"));
11
+
12
+ var _Easing = _interopRequireDefault(require("react-native-web/dist/cjs/exports/Easing"));
13
+
14
+ var _StyleSheet = _interopRequireDefault(require("react-native-web/dist/cjs/exports/StyleSheet"));
15
+
16
+ var _View = _interopRequireDefault(require("react-native-web/dist/cjs/exports/View"));
17
+
18
+ var _shared = require("./shared");
19
+
20
+ var _jsxRuntime = require("react/jsx-runtime");
21
+
22
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
+
24
+ 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); }
25
+
26
+ 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; }
27
+
28
+ const ea = _shared.MIN_EMPTY_ANGLE / 2;
29
+ const sa = _shared.MIN_STROKE_ANGLE / 2;
30
+ const Spinner = /*#__PURE__*/(0, _react.forwardRef)(({
8
31
  size,
9
32
  color,
10
33
  thickness,
11
34
  label
12
- }) => {
35
+ }, ref) => {
13
36
  const {
14
37
  current: timer
15
- } = React.useRef(new Animated.Value(0));
16
- React.useLayoutEffect(() => {
17
- const loop = Animated.timing(timer, {
18
- duration: DURATION,
19
- easing: Easing.linear,
38
+ } = _react.default.useRef(new _Animated.default.Value(0));
39
+
40
+ _react.default.useLayoutEffect(() => {
41
+ const loop = _Animated.default.timing(timer, {
42
+ duration: _shared.DURATION,
43
+ easing: _Easing.default.linear,
20
44
  // Animated.loop does not work if useNativeDriver is true on web
21
45
  useNativeDriver: true,
22
46
  toValue: 1,
23
47
  isInteraction: false
24
48
  });
25
- Animated.loop(loop).start();
49
+
50
+ _Animated.default.loop(loop).start();
26
51
  }, [timer]);
27
- const frames = 60 * DURATION / 1000;
28
- const easing = Easing.bezier(...BEZIER);
52
+
53
+ const frames = 60 * _shared.DURATION / 1000;
54
+
55
+ const easing = _Easing.default.bezier(..._shared.BEZIER);
56
+
29
57
  const containerStyle = {
30
58
  width: size,
31
59
  height: size / 2,
32
60
  overflow: 'hidden'
33
61
  }; // Credit to https://github.com/n4kz/react-native-indicators and https://github.com/callstack/react-native-paper for this
34
62
 
35
- return /*#__PURE__*/React.createElement(View, {
63
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
64
+ ref: ref,
36
65
  style: [styles.container],
37
66
  accessible: true,
38
67
  accessibilityLabel: label,
39
68
  accessibilityRole: "progressbar",
40
69
  accessibilityState: {
41
70
  busy: true
42
- }
43
- }, /*#__PURE__*/React.createElement(Animated.View, {
44
- style: [{
45
- width: size,
46
- height: size
47
- }],
48
- collapsable: false
49
- }, [0, 1].map(index => {
50
- const inputRange = Array.from(new Array(frames), (_, frameIndex) => frameIndex / (frames - 1));
51
- const outputRange = Array.from(new Array(frames), (_, frameIndex) => {
52
- let progress = 2 * frameIndex / (frames - 1);
53
- const rotation = index ? +(360 - sa) : -(180 - sa);
54
-
55
- if (progress > 1.0) {
56
- progress = 2.0 - progress;
57
- }
58
-
59
- const direction = index ? -1 : +1;
60
- return `${direction * (180 - (sa + ea)) * easing(progress) + rotation}deg`;
61
- });
62
- const layerStyle = {
63
- width: size,
64
- height: size,
65
- transform: [{
66
- rotate: timer.interpolate({
67
- inputRange: [0, 1],
68
- outputRange: [`${0 + ea + sa}deg`, `${2 * 360 + ea + sa}deg`]
69
- })
70
- }]
71
- };
72
- const viewportStyle = {
73
- width: size,
74
- height: size,
75
- transform: [{
76
- translateY: index ? -size / 2 : 0
77
- }, {
78
- rotate: timer.interpolate({
79
- inputRange,
80
- outputRange
81
- })
82
- }]
83
- };
84
- const offsetStyle = index ? {
85
- top: size / 2
86
- } : null;
87
- const lineStyle = {
88
- width: size,
89
- height: size,
90
- borderColor: color,
91
- borderWidth: thickness,
92
- borderRadius: size / 2
93
- };
94
- return /*#__PURE__*/React.createElement(Animated.View, {
95
- key: index,
96
- style: [styles.layer]
97
- }, /*#__PURE__*/React.createElement(Animated.View, {
98
- style: layerStyle
99
- }, /*#__PURE__*/React.createElement(Animated.View, {
100
- style: [containerStyle, offsetStyle],
101
- collapsable: false
102
- }, /*#__PURE__*/React.createElement(Animated.View, {
103
- style: viewportStyle
104
- }, /*#__PURE__*/React.createElement(Animated.View, {
105
- style: containerStyle,
106
- collapsable: false
107
- }, /*#__PURE__*/React.createElement(Animated.View, {
108
- style: lineStyle
109
- }))))));
110
- })));
111
- };
112
-
113
- Spinner.propTypes = propTypes;
114
- const styles = StyleSheet.create({
71
+ },
72
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Animated.default.View, {
73
+ style: [{
74
+ width: size,
75
+ height: size
76
+ }],
77
+ collapsable: false,
78
+ children: [0, 1].map(index => {
79
+ const inputRange = Array.from(new Array(frames), (_, frameIndex) => frameIndex / (frames - 1));
80
+ const outputRange = Array.from(new Array(frames), (_, frameIndex) => {
81
+ let progress = 2 * frameIndex / (frames - 1);
82
+ const rotation = index ? +(360 - sa) : -(180 - sa);
83
+
84
+ if (progress > 1.0) {
85
+ progress = 2.0 - progress;
86
+ }
87
+
88
+ const direction = index ? -1 : +1;
89
+ return `${direction * (180 - (sa + ea)) * easing(progress) + rotation}deg`;
90
+ });
91
+ const layerStyle = {
92
+ width: size,
93
+ height: size,
94
+ transform: [{
95
+ rotate: timer.interpolate({
96
+ inputRange: [0, 1],
97
+ outputRange: [`${0 + ea + sa}deg`, `${2 * 360 + ea + sa}deg`]
98
+ })
99
+ }]
100
+ };
101
+ const viewportStyle = {
102
+ width: size,
103
+ height: size,
104
+ transform: [{
105
+ translateY: index ? -size / 2 : 0
106
+ }, {
107
+ rotate: timer.interpolate({
108
+ inputRange,
109
+ outputRange
110
+ })
111
+ }]
112
+ };
113
+ const offsetStyle = index ? {
114
+ top: size / 2
115
+ } : null;
116
+ const lineStyle = {
117
+ width: size,
118
+ height: size,
119
+ borderColor: color,
120
+ borderWidth: thickness,
121
+ borderRadius: size / 2
122
+ };
123
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Animated.default.View, {
124
+ style: [styles.layer],
125
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Animated.default.View, {
126
+ style: layerStyle,
127
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Animated.default.View, {
128
+ style: [containerStyle, offsetStyle],
129
+ collapsable: false,
130
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Animated.default.View, {
131
+ style: viewportStyle,
132
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Animated.default.View, {
133
+ style: containerStyle,
134
+ collapsable: false,
135
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Animated.default.View, {
136
+ style: lineStyle
137
+ })
138
+ })
139
+ })
140
+ })
141
+ })
142
+ }, index);
143
+ })
144
+ })
145
+ });
146
+ });
147
+ Spinner.displayName = 'Spinner';
148
+ Spinner.propTypes = _shared.propTypes;
149
+
150
+ const styles = _StyleSheet.default.create({
115
151
  container: {
116
152
  flexGrow: 0,
117
153
  flexShrink: 0
118
154
  },
119
- layer: { ...StyleSheet.absoluteFillObject,
155
+ layer: { ..._StyleSheet.default.absoluteFillObject,
120
156
  justifyContent: 'center',
121
157
  alignItems: 'center'
122
158
  }
123
159
  });
124
- export default Spinner;
160
+
161
+ var _default = Spinner;
162
+ exports.default = _default;