@transferwise/components 46.124.1 → 46.126.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (401) hide show
  1. package/build/avatarView/AvatarView.js.map +1 -1
  2. package/build/avatarView/AvatarView.mjs.map +1 -1
  3. package/build/common/locale/index.js +13 -0
  4. package/build/common/locale/index.js.map +1 -1
  5. package/build/common/locale/index.mjs +13 -1
  6. package/build/common/locale/index.mjs.map +1 -1
  7. package/build/expressiveMoneyInput/currencySelector/CurrencySelector.js +31 -1
  8. package/build/expressiveMoneyInput/currencySelector/CurrencySelector.js.map +1 -1
  9. package/build/expressiveMoneyInput/currencySelector/CurrencySelector.mjs +32 -2
  10. package/build/expressiveMoneyInput/currencySelector/CurrencySelector.mjs.map +1 -1
  11. package/build/field/Field.js +11 -0
  12. package/build/field/Field.js.map +1 -1
  13. package/build/field/Field.mjs +11 -0
  14. package/build/field/Field.mjs.map +1 -1
  15. package/build/index.js +5 -0
  16. package/build/index.js.map +1 -1
  17. package/build/index.mjs +3 -1
  18. package/build/index.mjs.map +1 -1
  19. package/build/inputs/Input.js.map +1 -1
  20. package/build/inputs/Input.mjs.map +1 -1
  21. package/build/inputs/SearchInput.js.map +1 -1
  22. package/build/inputs/SearchInput.mjs.map +1 -1
  23. package/build/inputs/SelectInput.js.map +1 -1
  24. package/build/inputs/SelectInput.mjs.map +1 -1
  25. package/build/inputs/TextArea.js.map +1 -1
  26. package/build/inputs/TextArea.mjs.map +1 -1
  27. package/build/listItem/ListItem.js +2 -2
  28. package/build/listItem/ListItem.js.map +1 -1
  29. package/build/listItem/ListItem.mjs +2 -2
  30. package/build/listItem/ListItem.mjs.map +1 -1
  31. package/build/listItem/Prompt/ListItemPrompt.js +11 -0
  32. package/build/listItem/Prompt/ListItemPrompt.js.map +1 -1
  33. package/build/listItem/Prompt/ListItemPrompt.mjs +11 -0
  34. package/build/listItem/Prompt/ListItemPrompt.mjs.map +1 -1
  35. package/build/main.css +63 -2
  36. package/build/moneyInput/MoneyInput.js +6 -1
  37. package/build/moneyInput/MoneyInput.js.map +1 -1
  38. package/build/moneyInput/MoneyInput.mjs +6 -1
  39. package/build/moneyInput/MoneyInput.mjs.map +1 -1
  40. package/build/prompt/ActionPrompt/ActionPrompt.js +146 -0
  41. package/build/prompt/ActionPrompt/ActionPrompt.js.map +1 -0
  42. package/build/prompt/ActionPrompt/ActionPrompt.mjs +141 -0
  43. package/build/prompt/ActionPrompt/ActionPrompt.mjs.map +1 -0
  44. package/build/prompt/InfoPrompt/InfoPrompt.js +113 -0
  45. package/build/prompt/InfoPrompt/InfoPrompt.js.map +1 -0
  46. package/build/prompt/InfoPrompt/InfoPrompt.mjs +111 -0
  47. package/build/prompt/InfoPrompt/InfoPrompt.mjs.map +1 -0
  48. package/build/prompt/PrimitivePrompt/PrimitivePrompt.js +13 -11
  49. package/build/prompt/PrimitivePrompt/PrimitivePrompt.js.map +1 -1
  50. package/build/prompt/PrimitivePrompt/PrimitivePrompt.mjs +14 -12
  51. package/build/prompt/PrimitivePrompt/PrimitivePrompt.mjs.map +1 -1
  52. package/build/radioOption/RadioOption.js.map +1 -1
  53. package/build/radioOption/RadioOption.mjs.map +1 -1
  54. package/build/slidingPanel/SlidingPanel.js.map +1 -1
  55. package/build/slidingPanel/SlidingPanel.mjs.map +1 -1
  56. package/build/statusIcon/StatusIcon.js +2 -0
  57. package/build/statusIcon/StatusIcon.js.map +1 -1
  58. package/build/statusIcon/StatusIcon.mjs +2 -0
  59. package/build/statusIcon/StatusIcon.mjs.map +1 -1
  60. package/build/styles/main.css +63 -2
  61. package/build/styles/prompt/ActionPrompt/ActionPrompt.css +21 -0
  62. package/build/styles/prompt/InfoPrompt/InfoPrompt.css +31 -0
  63. package/build/styles/prompt/PrimitivePrompt/PrimitivePrompt.css +11 -2
  64. package/build/table/TableCell.js.map +1 -1
  65. package/build/table/TableCell.mjs.map +1 -1
  66. package/build/tabs/Tabs.js +14 -171
  67. package/build/tabs/Tabs.js.map +1 -1
  68. package/build/tabs/Tabs.mjs +16 -173
  69. package/build/tabs/Tabs.mjs.map +1 -1
  70. package/build/tabs/utils.js +0 -18
  71. package/build/tabs/utils.js.map +1 -1
  72. package/build/tabs/utils.mjs +1 -17
  73. package/build/tabs/utils.mjs.map +1 -1
  74. package/build/typeahead/Typeahead.js +11 -0
  75. package/build/typeahead/Typeahead.js.map +1 -1
  76. package/build/typeahead/Typeahead.mjs +11 -0
  77. package/build/typeahead/Typeahead.mjs.map +1 -1
  78. package/build/types/avatarView/AvatarView.d.ts +1 -1
  79. package/build/types/avatarView/AvatarView.d.ts.map +1 -1
  80. package/build/types/common/locale/index.d.ts +8 -0
  81. package/build/types/common/locale/index.d.ts.map +1 -1
  82. package/build/types/expressiveMoneyInput/currencySelector/CurrencySelector.d.ts.map +1 -1
  83. package/build/types/index.d.ts +4 -3
  84. package/build/types/index.d.ts.map +1 -1
  85. package/build/types/inputs/Input.d.ts.map +1 -1
  86. package/build/types/inputs/SearchInput.d.ts.map +1 -1
  87. package/build/types/inputs/SelectInput.d.ts +1 -1
  88. package/build/types/inputs/SelectInput.d.ts.map +1 -1
  89. package/build/types/inputs/TextArea.d.ts.map +1 -1
  90. package/build/types/moneyInput/MoneyInput.d.ts.map +1 -1
  91. package/build/types/primitives/PrimitiveAnchor/PrimitiveAnchor.types.d.ts.map +1 -1
  92. package/build/types/primitives/PrimitiveButton/PrimitiveButton.types.d.ts.map +1 -1
  93. package/build/types/prompt/ActionPrompt/ActionPrompt.d.ts +28 -0
  94. package/build/types/prompt/ActionPrompt/ActionPrompt.d.ts.map +1 -0
  95. package/build/types/prompt/ActionPrompt/index.d.ts +3 -0
  96. package/build/types/prompt/ActionPrompt/index.d.ts.map +1 -0
  97. package/build/types/prompt/InfoPrompt/InfoPrompt.d.ts +56 -0
  98. package/build/types/prompt/InfoPrompt/InfoPrompt.d.ts.map +1 -0
  99. package/build/types/prompt/InfoPrompt/index.d.ts +3 -0
  100. package/build/types/prompt/InfoPrompt/index.d.ts.map +1 -0
  101. package/build/types/prompt/PrimitivePrompt/PrimitivePrompt.d.ts +5 -5
  102. package/build/types/prompt/PrimitivePrompt/PrimitivePrompt.d.ts.map +1 -1
  103. package/build/types/prompt/index.d.ts +4 -0
  104. package/build/types/prompt/index.d.ts.map +1 -1
  105. package/build/types/radioOption/RadioOption.d.ts.map +1 -1
  106. package/build/types/slidingPanel/SlidingPanel.d.ts.map +1 -1
  107. package/build/types/statusIcon/StatusIcon.d.ts +2 -1
  108. package/build/types/statusIcon/StatusIcon.d.ts.map +1 -1
  109. package/build/types/table/TableCell.d.ts.map +1 -1
  110. package/build/types/tabs/Tabs.d.ts +2 -24
  111. package/build/types/tabs/Tabs.d.ts.map +1 -1
  112. package/build/types/tabs/utils.d.ts +0 -2
  113. package/build/types/tabs/utils.d.ts.map +1 -1
  114. package/build/types/withDisplayFormat/WithDisplayFormat.d.ts.map +1 -1
  115. package/build/withDisplayFormat/WithDisplayFormat.js.map +1 -1
  116. package/build/withDisplayFormat/WithDisplayFormat.mjs.map +1 -1
  117. package/package.json +2 -3
  118. package/src/actionButton/ActionButton.story.tsx +2 -9
  119. package/src/avatar/Avatar.story.tsx +2 -8
  120. package/src/avatarLayout/AvatarLayout.story.tsx +3 -3
  121. package/src/avatarView/AvatarView.story.tsx +29 -24
  122. package/src/avatarView/AvatarView.tsx +1 -1
  123. package/src/button/_stories/{Button.tests.story.tsx → Button.test.story.tsx} +5 -10
  124. package/src/checkbox/Checkbox.story.tsx +3 -16
  125. package/src/circularButton/CircularButton.story.tsx +2 -7
  126. package/src/common/bottomSheet/BottomSheet.story.tsx +6 -32
  127. package/src/common/bottomSheet/BottomSheet.test.story.tsx +98 -0
  128. package/src/common/circle/Circle.story.tsx +3 -14
  129. package/src/common/locale/{index.spec.ts → index.test.ts} +36 -1
  130. package/src/common/locale/index.ts +13 -0
  131. package/src/criticalBanner/CriticalCommsBanner.story.tsx +3 -16
  132. package/src/dateInput/{DateInput.tests.story.tsx → DateInput.test.story.tsx} +3 -13
  133. package/src/dateLookup/DateLookup.story.tsx +9 -7
  134. package/src/expressiveMoneyInput/currencySelector/CurrencySelector.tsx +5 -1
  135. package/src/header/{Header.tests.story.tsx → Header.test.story.tsx} +5 -10
  136. package/src/index.ts +4 -2
  137. package/src/info/Info.story.tsx +4 -20
  138. package/src/inputs/Input.tsx +8 -9
  139. package/src/inputs/SearchInput.tsx +8 -9
  140. package/src/inputs/SelectInput.test.story.tsx +86 -0
  141. package/src/inputs/SelectInput.tsx +1 -1
  142. package/src/inputs/TextArea.tsx +6 -7
  143. package/src/listItem/ListItem.tsx +2 -2
  144. package/src/listItem/_stories/variants/ListItem.brightGreen.test.story.tsx +2 -7
  145. package/src/listItem/_stories/variants/ListItem.dark.test.story.tsx +2 -7
  146. package/src/listItem/_stories/variants/ListItem.forestGreen.test.story.tsx +2 -7
  147. package/src/listItem/_stories/variants/ListItem.rtl.test.story.tsx +2 -7
  148. package/src/main.css +63 -2
  149. package/src/main.less +3 -1
  150. package/src/modal/Modal.story.tsx +6 -31
  151. package/src/moneyInput/MoneyInput.test.story.tsx +104 -0
  152. package/src/moneyInput/MoneyInput.tsx +20 -2
  153. package/src/primitives/PrimitiveAnchor/PrimitiveAnchor.types.ts +1 -3
  154. package/src/primitives/PrimitiveButton/PrimitiveButton.types.ts +1 -3
  155. package/src/prompt/ActionPrompt/ActionPrompt.accessibility.docs.mdx +65 -0
  156. package/src/prompt/ActionPrompt/ActionPrompt.css +21 -0
  157. package/src/prompt/ActionPrompt/ActionPrompt.less +23 -0
  158. package/src/prompt/ActionPrompt/ActionPrompt.story.tsx +187 -0
  159. package/src/prompt/ActionPrompt/ActionPrompt.test.story.tsx +147 -0
  160. package/src/prompt/ActionPrompt/ActionPrompt.test.tsx +251 -0
  161. package/src/prompt/ActionPrompt/ActionPrompt.tsx +170 -0
  162. package/src/prompt/ActionPrompt/index.ts +2 -0
  163. package/src/prompt/InfoPrompt/InfoPrompt.css +31 -0
  164. package/src/prompt/InfoPrompt/InfoPrompt.less +37 -0
  165. package/src/prompt/InfoPrompt/InfoPrompt.story.tsx +312 -0
  166. package/src/prompt/InfoPrompt/InfoPrompt.test.story.tsx +246 -0
  167. package/src/prompt/InfoPrompt/InfoPrompt.test.tsx +224 -0
  168. package/src/prompt/InfoPrompt/InfoPrompt.tsx +148 -0
  169. package/src/prompt/InfoPrompt/index.ts +2 -0
  170. package/src/prompt/InlinePrompt/{InlinePrompt.spec.tsx → InlinePrompt.test.tsx} +3 -38
  171. package/src/prompt/PrimitivePrompt/PrimitivePrompt.css +11 -2
  172. package/src/prompt/PrimitivePrompt/PrimitivePrompt.less +13 -3
  173. package/src/prompt/PrimitivePrompt/PrimitivePrompt.test.tsx +161 -0
  174. package/src/prompt/PrimitivePrompt/PrimitivePrompt.tsx +20 -16
  175. package/src/prompt/index.ts +8 -0
  176. package/src/radioOption/RadioOption.tsx +2 -1
  177. package/src/slidingPanel/SlidingPanel.tsx +4 -2
  178. package/src/snackbar/{Snackbar.tests.story.tsx → Snackbar.test.story.tsx} +6 -32
  179. package/src/{ssr.spec.tsx → ssr.test.tsx} +3 -0
  180. package/src/statusIcon/StatusIcon.story.tsx +5 -9
  181. package/src/statusIcon/StatusIcon.tsx +8 -1
  182. package/src/table/TableCell.tsx +1 -3
  183. package/src/tabs/Tabs.story.tsx +1 -45
  184. package/src/tabs/{Tabs.spec.tsx → Tabs.test.tsx} +0 -22
  185. package/src/tabs/Tabs.tsx +23 -240
  186. package/src/tabs/utils.test.ts +68 -0
  187. package/src/tabs/utils.ts +0 -20
  188. package/src/tooltip/Tooltip.story.tsx +2 -7
  189. package/src/withDisplayFormat/WithDisplayFormat.tsx +13 -14
  190. package/src/tabs/utils.spec.ts +0 -126
  191. /package/src/accordion/{Accordion.spec.js → Accordion.test.js} +0 -0
  192. /package/src/accordion/AccordionItem/{AccordionItem.spec.js → AccordionItem.test.js} +0 -0
  193. /package/src/accordion/AccordionItem/__snapshots__/{AccordionItem.spec.js.snap → AccordionItem.test.js.snap} +0 -0
  194. /package/src/accordion/__snapshots__/{Accordion.spec.js.snap → Accordion.test.js.snap} +0 -0
  195. /package/src/actionButton/{ActionButton.spec.tsx → ActionButton.test.tsx} +0 -0
  196. /package/src/actionButton/__snapshots__/{ActionButton.spec.tsx.snap → ActionButton.test.tsx.snap} +0 -0
  197. /package/src/actionOption/{ActionOption.spec.tsx → ActionOption.test.tsx} +0 -0
  198. /package/src/alert/{Alert.tests.story.tsx → Alert.test.story.tsx} +0 -0
  199. /package/src/alert/{Alert.spec.tsx → Alert.test.tsx} +0 -0
  200. /package/src/avatar/{Avatar.spec.tsx → Avatar.test.tsx} +0 -0
  201. /package/src/avatarWrapper/{AvatarWrapper.spec.tsx → AvatarWrapper.test.tsx} +0 -0
  202. /package/src/avatarWrapper/__snapshots__/{AvatarWrapper.spec.tsx.snap → AvatarWrapper.test.tsx.snap} +0 -0
  203. /package/src/badge/{Badge.spec.tsx → Badge.test.tsx} +0 -0
  204. /package/src/body/{Body.spec.tsx → Body.test.tsx} +0 -0
  205. /package/src/button/{Button.spec.tsx → Button.test.tsx} +0 -0
  206. /package/src/button/{LegacyButton.spec.tsx → LegacyButton.test.tsx} +0 -0
  207. /package/src/button/_stories/{Button.brightGreen.tests.story.tsx → Button.brightGreen.test.story.tsx} +0 -0
  208. /package/src/button/_stories/{Button.dark.tests.story.tsx → Button.dark.test.story.tsx} +0 -0
  209. /package/src/button/_stories/{Button.default.tests.story.tsx → Button.default.test.story.tsx} +0 -0
  210. /package/src/button/_stories/{Button.forestGreen.tests.story.tsx → Button.forestGreen.test.story.tsx} +0 -0
  211. /package/src/button/legacyUtils/{legacyUtils.spec.tsx → legacyUtils.test.tsx} +0 -0
  212. /package/src/card/{Card.spec.tsx → Card.test.tsx} +0 -0
  213. /package/src/carousel/{Carousel.spec.tsx → Carousel.test.tsx} +0 -0
  214. /package/src/checkbox/{Checkbox.spec.tsx → Checkbox.test.tsx} +0 -0
  215. /package/src/checkbox/__snapshots__/{Checkbox.spec.tsx.snap → Checkbox.test.tsx.snap} +0 -0
  216. /package/src/checkboxButton/{CheckboxButton.spec.tsx → CheckboxButton.test.tsx} +0 -0
  217. /package/src/checkboxOption/{CheckboxOption.spec.tsx → CheckboxOption.test.tsx} +0 -0
  218. /package/src/chevron/{Chevron.spec.tsx → Chevron.test.tsx} +0 -0
  219. /package/src/chevron/__snapshots__/{Chevron.spec.tsx.snap → Chevron.test.tsx.snap} +0 -0
  220. /package/src/chips/{Chips.spec.tsx → Chips.test.tsx} +0 -0
  221. /package/src/chips/__snapshots__/{Chips.spec.tsx.snap → Chips.test.tsx.snap} +0 -0
  222. /package/src/circularButton/{CircularButton.tests.story.tsx → CircularButton.test.story.tsx} +0 -0
  223. /package/src/circularButton/{CircularButton.spec.tsx → CircularButton.test.tsx} +0 -0
  224. /package/src/common/DOMOperations/{DOMOperations.spec.tsx → DOMOperations.test.tsx} +0 -0
  225. /package/src/common/Option/{Option.spec.tsx → Option.test.tsx} +0 -0
  226. /package/src/common/RadioButton/{RadioButton.spec.tsx → RadioButton.test.tsx} +0 -0
  227. /package/src/common/RadioButton/__snapshots__/{RadioButton.spec.tsx.snap → RadioButton.test.tsx.snap} +0 -0
  228. /package/src/common/bottomSheet/{BottomSheet.spec.tsx → BottomSheet.test.tsx} +0 -0
  229. /package/src/common/bottomSheet/__snapshots__/{BottomSheet.spec.tsx.snap → BottomSheet.test.tsx.snap} +0 -0
  230. /package/src/common/card/{Card.spec.tsx → Card.test.tsx} +0 -0
  231. /package/src/common/card/__snapshots__/{Card.spec.tsx.snap → Card.test.tsx.snap} +0 -0
  232. /package/src/common/closeButton/{CloseButton.spec.tsx → CloseButton.test.tsx} +0 -0
  233. /package/src/common/closeButton/__snapshots__/{CloseButton.spec.tsx.snap → CloseButton.test.tsx.snap} +0 -0
  234. /package/src/common/dateUtils/getDayNames/{getDayNames.spec.js → getDayNames.test.js} +0 -0
  235. /package/src/common/dateUtils/getMonthNames/{getMonthNames.spec.js → getMonthNames.test.js} +0 -0
  236. /package/src/common/dateUtils/isDateValid/{isDateValid.spec.ts → isDateValid.test.ts} +0 -0
  237. /package/src/common/dateUtils/isMonthAndYearFormat/{isMonthAndYearFormat.spec.js → isMonthAndYearFormat.test.js} +0 -0
  238. /package/src/common/dateUtils/isWithinRange/{isWithinRange.spec.ts → isWithinRange.test.ts} +0 -0
  239. /package/src/common/dateUtils/moveToWithinRange/{moveToWithinRange.spec.js → moveToWithinRange.test.js} +0 -0
  240. /package/src/common/deviceDetection/{deviceDetection.spec.ts → deviceDetection.test.ts} +0 -0
  241. /package/src/common/domHelpers/{documentIosClick.spec.ts → documentIosClick.test.ts} +0 -0
  242. /package/src/common/flowHeader/{FlowHeader.spec.tsx → FlowHeader.test.tsx} +0 -0
  243. /package/src/common/flowHeader/__snapshots__/{FlowHeader.spec.tsx.snap → FlowHeader.test.tsx.snap} +0 -0
  244. /package/src/common/historyNavigator/{historyNavigator.spec.ts → historyNavigator.test.ts} +0 -0
  245. /package/src/common/hooks/useConditionalListener/{useConditionalListener.spec.js → useConditionalListener.test.js} +0 -0
  246. /package/src/common/hooks/useDirection/{useDirection.spec.js → useDirection.test.js} +0 -0
  247. /package/src/common/hooks/useHasIntersected/{useHasIntersected.spec.js → useHasIntersected.test.js} +0 -0
  248. /package/src/common/hooks/{useMedia.spec.ts → useMedia.test.ts} +0 -0
  249. /package/src/common/{initials.spec.tsx → initials.test.tsx} +0 -0
  250. /package/src/common/panel/{Panel.spec.tsx → Panel.test.tsx} +0 -0
  251. /package/src/common/panel/__snapshots__/{Panel.spec.tsx.snap → Panel.test.tsx.snap} +0 -0
  252. /package/src/common/responsivePanel/{ResponsivePanel.spec.js → ResponsivePanel.test.js} +0 -0
  253. /package/src/common/textFormat/formatWithPattern/{formatWithPattern.spec.ts → formatWithPattern.test.ts} +0 -0
  254. /package/src/common/textFormat/getCountOfSymbolsInSelection/{getCountOfSymbolsInSelection.spec.ts → getCountOfSymbolsInSelection.test.ts} +0 -0
  255. /package/src/common/textFormat/getCursorPositionAfterKeystroke/{getCursorPositionAfterKeystroke.spec.ts → getCursorPositionAfterKeystroke.test.ts} +0 -0
  256. /package/src/common/textFormat/getDistanceToSymbol/{getDistanceToSymbol.spec.ts → getDistanceToSymbol.test.ts} +0 -0
  257. /package/src/common/textFormat/getSymbolsInPatternWithPosition/{getSymbolsInPatternWithPosition.spec.ts → getSymbolsInPatternWithPosition.test.ts} +0 -0
  258. /package/src/common/textFormat/unformatWithPattern/{unformatWithPattern.spec.ts → unformatWithPattern.test.ts} +0 -0
  259. /package/src/dateInput/{DateInput.spec.tsx → DateInput.test.tsx} +0 -0
  260. /package/src/dateInput/utils/convertToLocalMidnight/{convertToLocalMidnight.spec.ts → convertToLocalMidnight.test.ts} +0 -0
  261. /package/src/dateLookup/{DateLookup.tests.story.tsx → DateLookup.test.story.tsx} +0 -0
  262. /package/src/dateLookup/{DateLookup.spec.tsx → DateLookup.test.tsx} +0 -0
  263. /package/src/dateLookup/getFocusableTime/{getFocusable.spec.ts → getFocusable.test.ts} +0 -0
  264. /package/src/dateLookup/getStartOfDay/{getStartOfDay.spec.js → getStartOfDay.test.js} +0 -0
  265. /package/src/decision/{Decision.spec.tsx → Decision.test.tsx} +0 -0
  266. /package/src/dimmer/{Dimmer.spec.tsx → Dimmer.test.tsx} +0 -0
  267. /package/src/divider/{Divider.spec.tsx → Divider.test.tsx} +0 -0
  268. /package/src/drawer/{Drawer.spec.tsx → Drawer.test.tsx} +0 -0
  269. /package/src/emphasis/{Emphasis.spec.tsx → Emphasis.test.tsx} +0 -0
  270. /package/src/emphasis/{EmphasisHtmlTransformer.spec.tsx → EmphasisHtmlTransformer.test.tsx} +0 -0
  271. /package/src/expressiveMoneyInput/{ExpressiveMoneyInput.spec.tsx → ExpressiveMoneyInput.test.tsx} +0 -0
  272. /package/src/expressiveMoneyInput/amountInput/{AmountInput.spec.tsx → AmountInput.test.tsx} +0 -0
  273. /package/src/expressiveMoneyInput/amountInput/{utils.spec.ts → utils.test.ts} +0 -0
  274. /package/src/expressiveMoneyInput/currencySelector/{CurrencySelector.spec.tsx → CurrencySelector.test.tsx} +0 -0
  275. /package/src/field/{Field.spec.tsx → Field.test.tsx} +0 -0
  276. /package/src/flowNavigation/{FlowNavigation.spec.js → FlowNavigation.test.js} +0 -0
  277. /package/src/flowNavigation/__snapshots__/{FlowNavigation.spec.js.snap → FlowNavigation.test.js.snap} +0 -0
  278. /package/src/flowNavigation/animatedLabel/{AnimatedLabel.spec.js → AnimatedLabel.test.js} +0 -0
  279. /package/src/header/{Header.spec.tsx → Header.test.tsx} +0 -0
  280. /package/src/iconButton/{iconButton.spec.tsx → iconButton.test.tsx} +0 -0
  281. /package/src/image/{Image.spec.tsx → Image.test.tsx} +0 -0
  282. /package/src/info/{Info.spec.jsx → Info.test.jsx} +0 -0
  283. /package/src/inlineAlert/{InlineAlert.spec.tsx → InlineAlert.test.tsx} +0 -0
  284. /package/src/inputWithDisplayFormat/{InputWithDisplayFormat.spec.js → InputWithDisplayFormat.test.js} +0 -0
  285. /package/src/inputs/{InputGroup.spec.tsx → InputGroup.test.tsx} +0 -0
  286. /package/src/inputs/{SearchInput.spec.tsx → SearchInput.test.tsx} +0 -0
  287. /package/src/inputs/{SelectInput.spec.tsx → SelectInput.test.tsx} +0 -0
  288. /package/src/instructionsList/{InstructionsList.spec.tsx → InstructionsList.test.tsx} +0 -0
  289. /package/src/label/{Label.spec.tsx → Label.test.tsx} +0 -0
  290. /package/src/legacylistItem/{LegacyListItem.tests.story.tsx → LegacyListItem.test.story.tsx} +0 -0
  291. /package/src/legacylistItem/{LegacyListItem.spec.tsx → LegacyListItem.test.tsx} +0 -0
  292. /package/src/link/{Link.spec.tsx → Link.test.tsx} +0 -0
  293. /package/src/list/{List.spec.tsx → List.test.tsx} +0 -0
  294. /package/src/listItem/AdditionalInfo/{ListItemAdditionalInfo.spec.tsx → ListItemAdditionalInfo.test.tsx} +0 -0
  295. /package/src/listItem/AvatarLayout/{ListItemAvatarLayout.spec.tsx → ListItemAvatarLayout.test.tsx} +0 -0
  296. /package/src/listItem/AvatarView/{ListItemAvatarView.spec.tsx → ListItemAvatarView.test.tsx} +0 -0
  297. /package/src/listItem/Button/{ListItemButton.spec.tsx → ListItemButton.test.tsx} +0 -0
  298. /package/src/listItem/Checkbox/{ListItemCheckbox.spec.tsx → ListItemCheckbox.test.tsx} +0 -0
  299. /package/src/listItem/IconButton/{ListItemIconButton.spec.tsx → ListItemIconButton.test.tsx} +0 -0
  300. /package/src/listItem/Image/{ListItemImage.spec.tsx → ListItemImage.test.tsx} +0 -0
  301. /package/src/listItem/{ListItem.spec.tsx → ListItem.test.tsx} +0 -0
  302. /package/src/listItem/Navigation/{ListItemNavigation.spec.tsx → ListItemNavigation.test.tsx} +0 -0
  303. /package/src/listItem/Prompt/{ListItemPrompt.spec.tsx → ListItemPrompt.test.tsx} +0 -0
  304. /package/src/listItem/Radio/{ListItemRadio.spec.tsx → ListItemRadio.test.tsx} +0 -0
  305. /package/src/listItem/Switch/{ListItemSwitch.spec.tsx → ListItemSwitch.test.tsx} +0 -0
  306. /package/src/loader/{Loader.spec.tsx → Loader.test.tsx} +0 -0
  307. /package/src/logo/{Logo.spec.tsx → Logo.test.tsx} +0 -0
  308. /package/src/logo/__snapshots__/{Logo.spec.tsx.snap → Logo.test.tsx.snap} +0 -0
  309. /package/src/markdown/{Markdown.spec.tsx → Markdown.test.tsx} +0 -0
  310. /package/src/modal/{Modal.spec.tsx → Modal.test.tsx} +0 -0
  311. /package/src/money/{Money.spec.tsx → Money.test.tsx} +0 -0
  312. /package/src/moneyInput/{MoneyInput.spec.tsx → MoneyInput.test.tsx} +0 -0
  313. /package/src/moneyInput/{currencyFormatting.spec.ts → currencyFormatting.test.ts} +0 -0
  314. /package/src/navigationOption/{NavigationOption.spec.tsx → NavigationOption.test.tsx} +0 -0
  315. /package/src/navigationOptionsList/{NavigationOptionsList.spec.tsx → NavigationOptionsList.test.tsx} +0 -0
  316. /package/src/nudge/{Nudge.spec.tsx → Nudge.test.tsx} +0 -0
  317. /package/src/overlayHeader/{OverlayHeader.spec.tsx → OverlayHeader.test.tsx} +0 -0
  318. /package/src/overlayHeader/__snapshots__/{OverlayHeader.spec.tsx.snap → OverlayHeader.test.tsx.snap} +0 -0
  319. /package/src/phoneNumberInput/{PhoneNumberInput.spec.tsx → PhoneNumberInput.test.tsx} +0 -0
  320. /package/src/phoneNumberInput/utils/cleanNumber/{cleanNumber.spec.ts → cleanNumber.test.ts} +0 -0
  321. /package/src/phoneNumberInput/utils/excludeCountries/{excludeCountries.spec.ts → excludeCountries.test.ts} +0 -0
  322. /package/src/phoneNumberInput/utils/explodeNumberModel/{explodeNumberModel.spec.ts → explodeNumberModel.test.ts} +0 -0
  323. /package/src/phoneNumberInput/utils/findCountryByCode/{findCountryByCode.spec.ts → findCountryByCode.test.ts} +0 -0
  324. /package/src/phoneNumberInput/utils/findCountryByPrefix/{findCountryByPrefix.spec.ts → findCountryByPrefix.test.ts} +0 -0
  325. /package/src/phoneNumberInput/utils/groupCountriesByPrefix/{groupCountriesByPrefix.spec.ts → groupCountriesByPrefix.test.ts} +0 -0
  326. /package/src/phoneNumberInput/utils/isStringNumeric/{isStringNumeric.spec.ts → isStringNumeric.test.ts} +0 -0
  327. /package/src/phoneNumberInput/utils/isValidPhoneNumber/{isValidPhoneNumber.spec.ts → isValidPhoneNumber.test.ts} +0 -0
  328. /package/src/phoneNumberInput/utils/longestMatchingPrefix/{longestMatchingPrefix.spec.ts → longestMatchingPrefix.test.ts} +0 -0
  329. /package/src/phoneNumberInput/utils/setDefaultPrefix/{setDefaultPrefix.spec.ts → setDefaultPrefix.test.ts} +0 -0
  330. /package/src/phoneNumberInput/utils/sortArrayByProperty/{sortArrayByProperty.spec.ts → sortArrayByProperty.test.ts} +0 -0
  331. /package/src/popover/{Popover.spec.tsx → Popover.test.tsx} +0 -0
  332. /package/src/popover/__snapshots__/{Popover.spec.tsx.snap → Popover.test.tsx.snap} +0 -0
  333. /package/src/primitives/PrimitiveAnchor/stories/{PrimitiveAnchor.tests.story.tsx → PrimitiveAnchor.test.story.tsx} +0 -0
  334. /package/src/primitives/PrimitiveAnchor/test/{PrimitiveAnchor.spec.tsx → PrimitiveAnchor.test.tsx} +0 -0
  335. /package/src/primitives/PrimitiveButton/stories/{PrimitiveButton.tests.story.tsx → PrimitiveButton.test.story.tsx} +0 -0
  336. /package/src/primitives/PrimitiveButton/test/{PrimitiveButton.spec.tsx → PrimitiveButton.test.tsx} +0 -0
  337. /package/src/processIndicator/{ProcessIndicator.rtl.spec.tsx → ProcessIndicator.rtl.test.tsx} +0 -0
  338. /package/src/progress/{Progress.spec.tsx → Progress.test.tsx} +0 -0
  339. /package/src/progressBar/{ProgressBar.spec.tsx → ProgressBar.test.tsx} +0 -0
  340. /package/src/promoCard/{PromoCard.spec.tsx → PromoCard.test.tsx} +0 -0
  341. /package/src/promoCard/{PromoCardContext.spec.tsx → PromoCardContext.test.tsx} +0 -0
  342. /package/src/promoCard/{PromoCardGroup.spec.tsx → PromoCardGroup.test.tsx} +0 -0
  343. /package/src/promoCard/__snapshots__/{PromoCard.spec.tsx.snap → PromoCard.test.tsx.snap} +0 -0
  344. /package/src/promoCard/__snapshots__/{PromoCardGroup.spec.tsx.snap → PromoCardGroup.test.tsx.snap} +0 -0
  345. /package/src/provider/{Provider.spec.tsx → Provider.test.tsx} +0 -0
  346. /package/src/provider/direction/{DirectionProvider.spec.tsx → DirectionProvider.test.tsx} +0 -0
  347. /package/src/provider/language/{LanguageProvider.spec.tsx → LanguageProvider.test.tsx} +0 -0
  348. /package/src/radio/{Radio.spec.tsx → Radio.test.tsx} +0 -0
  349. /package/src/radioGroup/{RadioGroup.spec.tsx → RadioGroup.test.tsx} +0 -0
  350. /package/src/radioOption/{RadioOption.spec.tsx → RadioOption.test.tsx} +0 -0
  351. /package/src/section/{Section.spec.tsx → Section.test.tsx} +0 -0
  352. /package/src/segmentedControl/{SegmentedControl.spec.tsx → SegmentedControl.test.tsx} +0 -0
  353. /package/src/select/{Select.rtl.spec.tsx → Select.rtl.test.tsx} +0 -0
  354. /package/src/select/{Select.spec.tsx → Select.test.tsx} +0 -0
  355. /package/src/select/option/{Option.spec.tsx → Option.test.tsx} +0 -0
  356. /package/src/select/searchBox/{SearchBox.spec.tsx → SearchBox.test.tsx} +0 -0
  357. /package/src/sentimentSurface/{SentimentSurface.tests.story.tsx → SentimentSurface.test.story.tsx} +0 -0
  358. /package/src/sentimentSurface/{SentimentSurface.spec.tsx → SentimentSurface.test.tsx} +0 -0
  359. /package/src/slidingPanel/{SlidingPanel.spec.tsx → SlidingPanel.test.tsx} +0 -0
  360. /package/src/statusIcon/{StatusIcon.spec.tsx → StatusIcon.test.tsx} +0 -0
  361. /package/src/stepper/{Stepper.tests.story.tsx → Stepper.test.story.tsx} +0 -0
  362. /package/src/stepper/{Stepper.spec.tsx → Stepper.test.tsx} +0 -0
  363. /package/src/stepper/{deviceDetection.spec.ts → deviceDetection.test.ts} +0 -0
  364. /package/src/sticky/{Sticky.spec.tsx → Sticky.test.tsx} +0 -0
  365. /package/src/summary/{Summary.tests.story.tsx → Summary.test.story.tsx} +0 -0
  366. /package/src/summary/{Summary.spec.tsx → Summary.test.tsx} +0 -0
  367. /package/src/switch/{Switch.spec.tsx → Switch.test.tsx} +0 -0
  368. /package/src/switchOption/{SwitchOption.spec.tsx → SwitchOption.test.tsx} +0 -0
  369. /package/src/table/{Table.spec.tsx → Table.test.tsx} +0 -0
  370. /package/src/table/{TableCell.spec.tsx → TableCell.test.tsx} +0 -0
  371. /package/src/table/{TableHeader.spec.tsx → TableHeader.test.tsx} +0 -0
  372. /package/src/table/{TableRow.spec.tsx → TableRow.test.tsx} +0 -0
  373. /package/src/table/{TableStatusText.spec.tsx → TableStatusText.test.tsx} +0 -0
  374. /package/src/textareaWithDisplayFormat/{TextareaWithDisplayFormat.spec.js → TextareaWithDisplayFormat.test.js} +0 -0
  375. /package/src/tile/{Tile.spec.tsx → Tile.test.tsx} +0 -0
  376. /package/src/tile/__snapshots__/{Tile.spec.tsx.snap → Tile.test.tsx.snap} +0 -0
  377. /package/src/title/{Title.spec.tsx → Title.test.tsx} +0 -0
  378. /package/src/tooltip/{Tooltip.spec.tsx → Tooltip.test.tsx} +0 -0
  379. /package/src/tooltip/__snapshots__/{Tooltip.spec.tsx.snap → Tooltip.test.tsx.snap} +0 -0
  380. /package/src/typeahead/{Typeahead.spec.tsx → Typeahead.test.tsx} +0 -0
  381. /package/src/typeahead/typeaheadInput/{TypeaheadInput.spec.tsx → TypeaheadInput.test.tsx} +0 -0
  382. /package/src/typeahead/util/{highlight.spec.tsx → highlight.test.tsx} +0 -0
  383. /package/src/upload/{Upload.tests.story.tsx → Upload.test.story.tsx} +0 -0
  384. /package/src/upload/{Upload.spec.tsx → Upload.test.tsx} +0 -0
  385. /package/src/upload/steps/completeStep/{completeStep.spec.tsx → completeStep.test.tsx} +0 -0
  386. /package/src/upload/steps/processingStep/{processingStep.spec.tsx → processingStep.test.tsx} +0 -0
  387. /package/src/upload/steps/uploadImageStep/{uploadImageStep.spec.tsx → uploadImageStep.test.tsx} +0 -0
  388. /package/src/upload/utils/asyncFileRead/{asyncFileRead.spec.ts → asyncFileRead.test.ts} +0 -0
  389. /package/src/upload/utils/getFileType/{getFileType.spec.ts → getFileType.test.ts} +0 -0
  390. /package/src/upload/utils/isSizeValid/{isSizeValid.spec.ts → isSizeValid.test.ts} +0 -0
  391. /package/src/upload/utils/isTypeValid/{isTypeValid.spec.ts → isTypeValid.test.ts} +0 -0
  392. /package/src/upload/utils/postData/{postData.spec.ts → postData.test.ts} +0 -0
  393. /package/src/uploadInput/{UploadInput.tests.story.tsx → UploadInput.test.story.tsx} +0 -0
  394. /package/src/uploadInput/{UploadInput.spec.tsx → UploadInput.test.tsx} +0 -0
  395. /package/src/uploadInput/uploadButton/{UploadButton.spec.tsx → UploadButton.test.tsx} +0 -0
  396. /package/src/uploadInput/uploadButton/{getAllowedFileTypes.spec.ts → getAllowedFileTypes.test.ts} +0 -0
  397. /package/src/uploadInput/uploadItem/{UploadItem.spec.tsx → UploadItem.test.tsx} +0 -0
  398. /package/src/utilities/deprecatedProperty/{deprecatedProperty.spec.ts → deprecatedProperty.test.ts} +0 -0
  399. /package/src/withDisplayFormat/{WithDisplayFormat.spec.js → WithDisplayFormat.test.js} +0 -0
  400. /package/src/withId/{withId.spec.tsx → withId.test.tsx} +0 -0
  401. /package/src/withNextPortal/{withNextPortal.spec.tsx → withNextPortal.test.tsx} +0 -0
@@ -288,7 +288,7 @@ export const EdgeInstances: Story = {
288
288
  /**
289
289
  * Like [AvatarView](?path=/docs/content-avatarview--docs#sentiment-awareness), `AvatarLayout` is sentiment-aware (note: not all features are supported) and will automatically adjust its colours if wrapped inside the
290
290
  * [SentimentSurface](?path=/docs/content-sentimentsurface--docs) component.
291
- *
291
+ *
292
292
  * Features like: `interactive` are not supported.
293
293
  * Also `AvatarLayout` isn't supported on `"elevated"` state of `SentimentSurface`.
294
294
  */
@@ -302,7 +302,7 @@ export const SentimentAwareness: Story = {
302
302
  },
303
303
  render: (args) => (
304
304
  <>
305
- {(['success', 'warning', 'negative', 'neutral', 'proposition'] as const).map((sentiment) =>
305
+ {(['success', 'warning', 'negative', 'neutral', 'proposition'] as const).map((sentiment) => (
306
306
  <SentimentSurface
307
307
  key={`${sentiment}-base`}
308
308
  sentiment={sentiment}
@@ -316,7 +316,7 @@ export const SentimentAwareness: Story = {
316
316
  avatars={[{ asset: <Freeze /> }, { asset: <Freeze /> }]}
317
317
  />
318
318
  </SentimentSurface>
319
- )}
319
+ ))}
320
320
  </>
321
321
  ),
322
322
  decorators: [
@@ -440,7 +440,7 @@ export const Profiles: Story = {
440
440
  /**
441
441
  * `AvatarView` is sentiment-aware (note: not all features are supported) and will automatically adjust its colours if wrapped inside the
442
442
  * [SentimentSurface](?path=/docs/content-sentimentsurface--docs) component.
443
- *
443
+ *
444
444
  * Features like `online`, `notification`, `selected`, and `interactive` are not supported.
445
445
  * For badge (`<AvatarView badge={}>`) only `flagCode` is supported.
446
446
  * Also `AvatarView` isn't supported on `"elevated"` state of `SentimentSurface`.
@@ -457,29 +457,34 @@ export const SentimentAwareness: Story = {
457
457
  render: () => {
458
458
  return (
459
459
  <>
460
- {(['success', 'warning', 'negative', 'neutral', 'proposition'] as const).map((sentiment) => (
461
- <SentimentSurface
462
- key={`${sentiment}-base`}
463
- sentiment={sentiment}
464
- emphasis="base"
465
- className="p-a-1 d-flex"
466
- style={{ gap: 'var(--size-16)' }}
467
- >
468
- <AvatarView size={32}>
469
- <Bank />
470
- </AvatarView>
471
- <AvatarView size={32} profileName="John Doe" />
472
- <AvatarView size={32}>
473
- <Flag code="JPY" intrinsicSize={32} />
474
- </AvatarView>
475
- <AvatarView size={32} badge={sentiment === 'proposition' ? undefined : { status: sentiment }}>
476
- <Bank />
477
- </AvatarView>
478
- <AvatarView size={32} badge={{ flagCode: 'eu' }}>
479
- <Bank />
480
- </AvatarView>
481
- </SentimentSurface>
482
- ))}
460
+ {(['success', 'warning', 'negative', 'neutral', 'proposition'] as const).map(
461
+ (sentiment) => (
462
+ <SentimentSurface
463
+ key={`${sentiment}-base`}
464
+ sentiment={sentiment}
465
+ emphasis="base"
466
+ className="p-a-1 d-flex"
467
+ style={{ gap: 'var(--size-16)' }}
468
+ >
469
+ <AvatarView size={32}>
470
+ <Bank />
471
+ </AvatarView>
472
+ <AvatarView size={32} profileName="John Doe" />
473
+ <AvatarView size={32}>
474
+ <Flag code="JPY" intrinsicSize={32} />
475
+ </AvatarView>
476
+ <AvatarView
477
+ size={32}
478
+ badge={sentiment === 'proposition' ? undefined : { status: sentiment }}
479
+ >
480
+ <Bank />
481
+ </AvatarView>
482
+ <AvatarView size={32} badge={{ flagCode: 'eu' }}>
483
+ <Bank />
484
+ </AvatarView>
485
+ </SentimentSurface>
486
+ ),
487
+ )}
483
488
  </>
484
489
  );
485
490
  },
@@ -32,7 +32,7 @@ export type Props = {
32
32
  style?: Pick<React.CSSProperties, 'border' | 'backgroundColor' | 'color'>;
33
33
  } & Pick<
34
34
  HTMLAttributes<HTMLDivElement>,
35
- 'className' | 'children' | 'role' | 'aria-label' | 'aria-labelledby' | 'aria-hidden'
35
+ 'id' | 'className' | 'children' | 'role' | 'aria-label' | 'aria-labelledby' | 'aria-hidden'
36
36
  >;
37
37
 
38
38
  function AvatarView({
@@ -3,7 +3,7 @@ import { ArrowRight, ChevronRight, Freeze } from '@transferwise/icons';
3
3
  import { expect, userEvent, within } from 'storybook/test';
4
4
  import Button from '../Button.resolver';
5
5
  import { ButtonPriority } from '../Button.types';
6
- import { allModes } from '../../../.storybook/modes';
6
+ import { withVariantConfig } from '../../../.storybook/helpers';
7
7
 
8
8
  const meta: Meta<typeof Button> = {
9
9
  component: Button,
@@ -32,16 +32,11 @@ const buttonPriorities = ['primary', 'secondary', 'secondary-neutral', 'tertiary
32
32
  const buttonSizes = ['sm', 'md', 'lg'] as const;
33
33
  export const AllVariants: Story = {
34
34
  tags: ['!autodocs'],
35
- parameters: {
36
- padding: '0',
37
- variants: ['default', 'dark', 'bright-green', 'forest-green', 'rtl'],
38
- chromatic: {
39
- dark: allModes.dark,
40
- brightGreen: allModes.brightGreen,
41
- forestGreen: allModes.forestGreen,
42
- rtl: allModes.rtl,
35
+ ...withVariantConfig(['default', 'dark', 'bright-green', 'forest-green', 'rtl'], {
36
+ parameters: {
37
+ padding: '0',
43
38
  },
44
- },
39
+ }),
45
40
  render: () => (
46
41
  <div
47
42
  className="button-variants"
@@ -5,7 +5,7 @@ import { Field } from '../field/Field';
5
5
  import { lorem10 } from '../test-utils';
6
6
 
7
7
  import Checkbox from './Checkbox';
8
- import { allModes } from '../../.storybook/modes';
8
+ import { withVariantConfig } from '../../.storybook/helpers';
9
9
 
10
10
  const meta: Meta<typeof Checkbox> = {
11
11
  component: Checkbox,
@@ -33,25 +33,12 @@ export const Multiple: Story = {
33
33
  </>
34
34
  );
35
35
  },
36
- parameters: {
37
- variants: ['default', 'dark', 'rtl'],
38
- chromatic: {
39
- dark: allModes.dark,
40
- rtl: allModes.rtl,
41
- },
42
- },
36
+ ...withVariantConfig(['default', 'dark', 'rtl']),
43
37
  };
44
38
 
45
39
  export const MultipleMobile: Story = {
46
40
  ...Multiple,
47
- parameters: {
48
- variants: ['default', 'dark', 'rtl', 'mobile'],
49
- chromatic: {
50
- dark: allModes.dark,
51
- rtl: allModes.rtl,
52
- mobile: allModes.largeMobile,
53
- },
54
- },
41
+ ...withVariantConfig(['default', 'dark', 'rtl', 'mobile'], Multiple),
55
42
  };
56
43
 
57
44
  export const WithinField = {
@@ -6,7 +6,7 @@ import { Meta, StoryObj } from '@storybook/react-webpack5';
6
6
  import CircularButton from './CircularButton';
7
7
  import Title from '../title';
8
8
  import Body from '../body';
9
- import { allModes } from '../../.storybook/modes';
9
+ import { withVariantConfig } from '../../.storybook/helpers';
10
10
 
11
11
  export default {
12
12
  component: CircularButton,
@@ -89,10 +89,5 @@ export const All: Story = {
89
89
 
90
90
  export const All400Zoom: Story = {
91
91
  ...All,
92
- parameters: {
93
- variants: ['400%'],
94
- chromatic: {
95
- '400%': allModes.zoom400,
96
- },
97
- },
92
+ ...withVariantConfig(['400%'], All),
98
93
  };
@@ -11,7 +11,7 @@ import Title from '../../title/Title';
11
11
  import { Typography } from '../propsValues/typography';
12
12
 
13
13
  import BottomSheet from './BottomSheet';
14
- import { allModes } from '../../../.storybook/modes';
14
+ import { withVariantConfig } from '../../../.storybook/helpers';
15
15
 
16
16
  export default {
17
17
  component: BottomSheet,
@@ -67,12 +67,7 @@ export const Basic: Story = {
67
67
 
68
68
  export const BasicMobile: Story = {
69
69
  ...Basic,
70
- parameters: {
71
- variants: ['mobile'],
72
- chromatic: {
73
- mobile: allModes.largeMobile,
74
- },
75
- },
70
+ ...withVariantConfig(['mobile'], Basic),
76
71
  };
77
72
 
78
73
  export const WithOverflowContent: Story = {
@@ -106,41 +101,20 @@ export const WithOverflowContent: Story = {
106
101
 
107
102
  export const WithOverflowContentMobile: Story = {
108
103
  ...WithOverflowContent,
109
- parameters: {
110
- variants: ['mobile'],
111
- chromatic: {
112
- mobile: allModes.largeMobile,
113
- },
114
- },
104
+ ...withVariantConfig(['mobile'], WithOverflowContent),
115
105
  };
116
106
 
117
107
  export const WithOverflowContentDark: Story = {
118
108
  ...WithOverflowContent,
119
- parameters: {
120
- variants: ['dark'],
121
- chromatic: {
122
- dark: allModes.dark,
123
- },
124
- },
109
+ ...withVariantConfig(['dark'], WithOverflowContent),
125
110
  };
126
111
 
127
112
  export const WithOverflowContentDarkMobile: Story = {
128
113
  ...WithOverflowContent,
129
- parameters: {
130
- variants: ['dark', 'mobile'],
131
- chromatic: {
132
- dark: allModes.dark,
133
- mobile: allModes.largeMobile,
134
- },
135
- },
114
+ ...withVariantConfig(['dark', 'mobile'], WithOverflowContent),
136
115
  };
137
116
 
138
117
  export const WithOverflowContentZoom400: Story = {
139
118
  ...WithOverflowContent,
140
- parameters: {
141
- variants: ['400%'],
142
- chromatic: {
143
- '400%': allModes.zoom400,
144
- },
145
- },
119
+ ...withVariantConfig(['400%'], WithOverflowContent),
146
120
  };
@@ -0,0 +1,98 @@
1
+ import { useState } from 'react';
2
+ import { Meta, StoryObj } from '@storybook/react-webpack5';
3
+ import { fireEvent, within } from 'storybook/test';
4
+ import { lorem100, lorem500 } from '../../test-utils';
5
+ import { Typography } from '../propsValues/typography';
6
+ import Alert from '../../alert';
7
+ import Body from '../../body';
8
+ import Button from '../../button';
9
+ import Title from '../../title';
10
+ import BottomSheet from './BottomSheet';
11
+
12
+ const wait = async (duration = 500) =>
13
+ new Promise<void>((resolve) => {
14
+ setTimeout(resolve, duration);
15
+ });
16
+
17
+ export default {
18
+ component: BottomSheet,
19
+ title: 'Dialogs/BottomSheet/tests',
20
+ tags: ['!autodocs'],
21
+ args: {
22
+ open: false,
23
+ },
24
+ } satisfies Meta<typeof BottomSheet>;
25
+
26
+ type Story = StoryObj<typeof BottomSheet>;
27
+
28
+ /**
29
+ * This test ensures that when the SelectInput is used within a scrollable page,
30
+ * opening the dropdown does not cause any unwanted scrolling or layout shifts.
31
+ * Expected preview should start with green bar at the top, with yellow section
32
+ * not in the viewport. The issue is particularly prominent on iOS Safari.
33
+ *
34
+ * NB: This test is disabled in Chromatic as there's no obvious way to control
35
+ * <html/> element of a snapshot. It's to be primarily used in manual testing
36
+ * on an actual device or a simulator as it cannot be reproduced with mobile
37
+ * emulation modes on desktop browsers.
38
+ */
39
+ export const SmoothScrollReset: Story = {
40
+ args: {
41
+ children: (
42
+ <>
43
+ <Title type={Typography.TITLE_SECTION}>Observe the document</Title>
44
+ <Alert className="m-t-2" type="warning">
45
+ Once the <code>BottomSheet</code> opens, the document underneath should be static and
46
+ should not scroll.
47
+ </Alert>
48
+ <Body as="p">{lorem100}</Body>
49
+ <Body as="p">{lorem100}</Body>
50
+ </>
51
+ ),
52
+ },
53
+ decorators: [
54
+ (Story) => (
55
+ <>
56
+ <style>{'html { scroll-behavior: smooth; }'}</style>
57
+ <div style={{ maxWidth: 500 }}>
58
+ <Body>
59
+ <p>{lorem100}</p>
60
+ <p>{lorem100}</p>
61
+ </Body>
62
+ <Story />
63
+ <Body as="p" className="m-t-5 disabled">
64
+ {lorem500}
65
+ </Body>
66
+ </div>
67
+ </>
68
+ ),
69
+ ],
70
+ parameters: {
71
+ chromatic: {
72
+ disableSnapshot: true,
73
+ },
74
+ },
75
+ play: async ({ canvasElement }) => {
76
+ document.documentElement.scrollTop = 400;
77
+ await wait(500);
78
+ const canvas = within(canvasElement);
79
+ // cannot use userEvent.click as it crashes on iOS Safari in the simulator
80
+ await fireEvent.click(canvas.getByRole('button'));
81
+ },
82
+ render: ({ open, ...args }) => {
83
+ const [isOpen, setIsOpen] = useState(false);
84
+
85
+ return (
86
+ <div>
87
+ <Button onClick={() => setIsOpen(true)}>Open BottomSheet</Button>
88
+ <BottomSheet
89
+ {...args}
90
+ open={isOpen}
91
+ onClose={() => {
92
+ setIsOpen(false);
93
+ }}
94
+ />
95
+ </div>
96
+ );
97
+ },
98
+ };
@@ -3,7 +3,7 @@ import Circle from './Circle';
3
3
  import { Profile } from '@transferwise/icons';
4
4
  import { CircleProps } from '.';
5
5
  import Body from '../../body';
6
- import { allModes } from '../../../.storybook/modes';
6
+ import { withVariantConfig } from '../../../.storybook/helpers';
7
7
 
8
8
  export default {
9
9
  title: 'Internal/Circle',
@@ -46,13 +46,7 @@ export const Sizes: Story = {
46
46
  </div>
47
47
  );
48
48
  },
49
- parameters: {
50
- variants: ['light', 'dark'],
51
- chromatic: {
52
- light: allModes.light,
53
- dark: allModes.dark,
54
- },
55
- },
49
+ ...withVariantConfig(['light', 'dark']),
56
50
  };
57
51
 
58
52
  export const FixedSize: Story = {
@@ -83,10 +77,5 @@ export const FixedSize: Story = {
83
77
  </div>
84
78
  );
85
79
  },
86
- parameters: {
87
- variants: ['400%'],
88
- chromatic: {
89
- zoom400: allModes.zoom400,
90
- },
91
- },
80
+ ...withVariantConfig(['400%']),
92
81
  };
@@ -1,4 +1,11 @@
1
- import { getLangFromLocale, adjustLocale, getCountryFromLocale, getDirectionFromLocale } from '.';
1
+ import { IntlShape } from 'react-intl';
2
+ import {
3
+ getLangFromLocale,
4
+ adjustLocale,
5
+ getCountryFromLocale,
6
+ getDirectionFromLocale,
7
+ getLocaleCurrencyName,
8
+ } from '.';
2
9
 
3
10
  describe('locale utils', () => {
4
11
  beforeAll(() => {
@@ -103,4 +110,32 @@ describe('locale utils', () => {
103
110
  },
104
111
  );
105
112
  });
113
+
114
+ describe('getLocaleCurrencyName', () => {
115
+ it('should return the localized currency name if Intl.DisplayNames is supported', () => {
116
+ const intl = {
117
+ formatDisplayName: jest.fn().mockReturnValue('US Dollar'),
118
+ } as unknown as IntlShape;
119
+
120
+ const result = getLocaleCurrencyName(intl, 'USD');
121
+ expect(intl.formatDisplayName).toHaveBeenCalledWith('USD', {
122
+ type: 'currency',
123
+ fallback: 'code',
124
+ });
125
+ expect(result).toBe('US Dollar');
126
+ });
127
+
128
+ it('should return the original currency code if Intl.DisplayNames is not supported', () => {
129
+ const intl = {
130
+ formatDisplayName: jest.fn().mockReturnValue('US Dollar'),
131
+ } as unknown as IntlShape;
132
+
133
+ // Mock Intl.DisplayNames to be undefined
134
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
135
+ (Intl as any).DisplayNames = undefined;
136
+
137
+ const result = getLocaleCurrencyName(intl, 'USD');
138
+ expect(result).toBe('USD');
139
+ });
140
+ });
106
141
  });
@@ -1,3 +1,4 @@
1
+ import { IntlShape } from 'react-intl/src/types';
1
2
  import { Direction } from '../direction';
2
3
 
3
4
  export const DEFAULT_LANG = 'en';
@@ -96,3 +97,15 @@ export function getDirectionFromLocale(locale: string) {
96
97
  ? Direction.RTL
97
98
  : Direction.LTR;
98
99
  }
100
+
101
+ /**
102
+ * Provides the localized currency name for a given currency code.
103
+ * @param intl The `intl` object from `react-intl` used for localization.
104
+ * @param currencyCode The ISO 4217 currency code (e.g., `USD`, `EUR`, `JPY`).
105
+ * @returns The localized currency name if Intl.DisplayNames is supported supported, otherwise returns the original currency code.
106
+ */
107
+ export function getLocaleCurrencyName(intl: IntlShape, currencyCode: string) {
108
+ return typeof Intl.DisplayNames === 'function'
109
+ ? intl.formatDisplayName(currencyCode, { type: 'currency', fallback: 'code' })
110
+ : currencyCode;
111
+ }
@@ -1,7 +1,7 @@
1
1
  import { Meta, StoryObj } from '@storybook/react-webpack5';
2
2
 
3
3
  import CriticalCommsBanner from '.';
4
- import { allModes } from '../../.storybook/modes';
4
+ import { withVariantConfig } from '../../.storybook/helpers';
5
5
 
6
6
  export default {
7
7
  component: CriticalCommsBanner,
@@ -24,13 +24,7 @@ export const Variants: Story = {
24
24
  subtitle: 'Add money within the next 30 days',
25
25
  action: { label: 'Take action', href: 'https://wise.com' },
26
26
  },
27
- parameters: {
28
- variants: ['default', 'dark', 'rtl'],
29
- chromatic: {
30
- dark: allModes.dark,
31
- rtl: allModes.rtl,
32
- },
33
- },
27
+ ...withVariantConfig(['default', 'dark', 'rtl']),
34
28
  };
35
29
 
36
30
  export const Mobile: Story = {
@@ -40,12 +34,5 @@ export const Mobile: Story = {
40
34
  subtitle: 'Add money within the next 30 days',
41
35
  action: { label: 'Take action', href: 'https://wise.com' },
42
36
  },
43
- parameters: {
44
- variants: ['default', 'dark', 'rtl', 'mobile'],
45
- chromatic: {
46
- dark: allModes.dark,
47
- rtl: allModes.rtl,
48
- mobile: allModes.largeMobile,
49
- },
50
- },
37
+ ...withVariantConfig(['default', 'dark', 'rtl', 'mobile']),
51
38
  };
@@ -6,7 +6,7 @@ import { lorem10 } from '../test-utils';
6
6
 
7
7
  import Provider from '../provider/Provider';
8
8
  import translations from '../i18n';
9
- import { allModes } from '../../.storybook/modes';
9
+ import { withVariantConfig } from '../../.storybook/helpers';
10
10
 
11
11
  const meta: Meta<typeof DateInput> = {
12
12
  component: DateInput,
@@ -223,20 +223,10 @@ export const NoNonDigitsAllowed: Story = {
223
223
 
224
224
  export const BasicMobile: Story = {
225
225
  ...Basic,
226
- parameters: {
227
- variants: ['mobile'],
228
- chromatic: {
229
- mobile: allModes.largeMobile,
230
- },
231
- },
226
+ ...withVariantConfig(['mobile'], Basic),
232
227
  };
233
228
 
234
229
  export const InputErrorMobile: Story = {
235
230
  ...InputError,
236
- parameters: {
237
- variants: ['mobile'],
238
- chromatic: {
239
- mobile: allModes.largeMobile,
240
- },
241
- },
231
+ ...withVariantConfig(['mobile'], InputError),
242
232
  };
@@ -4,7 +4,7 @@ import { StoryObj } from '@storybook/react-webpack5';
4
4
  import { Field } from '..';
5
5
  import { Size } from '../common';
6
6
  import DateLookup, { type DateLookupProps } from './DateLookup';
7
- import { allModes } from '../../.storybook/modes';
7
+ import { withVariantConfig } from '../../.storybook/helpers';
8
8
 
9
9
  export default {
10
10
  component: DateLookup,
@@ -61,13 +61,15 @@ export const Basic: Story = {
61
61
  };
62
62
  export const Basic400Zoom: Story = {
63
63
  ...Basic,
64
- parameters: {
65
- chromatic: {
66
- delay: 2000,
67
- zoom400: allModes.zoom400,
64
+
65
+ ...withVariantConfig(['400%'], {
66
+ ...Basic,
67
+ parameters: {
68
+ chromatic: {
69
+ delay: 2000,
70
+ },
68
71
  },
69
- variants: ['400%'],
70
- },
72
+ }),
71
73
  };
72
74
 
73
75
  export const WithField: Story = {
@@ -18,6 +18,7 @@ import {
18
18
  import { useIntl } from 'react-intl';
19
19
 
20
20
  import messages from '../ExpressiveMoneyInput.messages';
21
+ import { getLocaleCurrencyName } from '../../common';
21
22
 
22
23
  export interface CurrencyOption {
23
24
  label?: string;
@@ -126,7 +127,10 @@ export const CurrencySelector = ({
126
127
  addonEnd={disabled ? undefined : { type: 'icon', value: <ChevronDown /> }}
127
128
  onClick={(event) => handleTriggerClick(event)}
128
129
  >
129
- {currency}
130
+ <>
131
+ <span aria-hidden>{currency}</span>
132
+ <span className="sr-only">{getLocaleCurrencyName(intl, currency)}</span>
133
+ </>
130
134
  </SelectInputTriggerButton>
131
135
  )}
132
136
  onChange={(newValue) => {
@@ -1,6 +1,6 @@
1
1
  import { Meta, StoryObj } from '@storybook/react-webpack5';
2
2
  import Header, { type HeaderProps } from './Header';
3
- import { allModes } from '../../.storybook/modes';
3
+ import { withVariantConfig } from '../../.storybook/helpers';
4
4
 
5
5
  const meta: Meta<typeof Header> = {
6
6
  component: Header,
@@ -85,16 +85,11 @@ export const SectionTrailingSpaceWithAction: Story = {
85
85
  };
86
86
 
87
87
  export const AllVariants: Story = {
88
- parameters: {
89
- padding: '0',
90
- variants: ['default', 'dark', 'bright-green', 'forest-green', 'rtl'],
91
- chromatic: {
92
- dark: allModes.dark,
93
- brightGreen: allModes.brightGreen,
94
- forestGreen: allModes.forestGreen,
95
- rtl: allModes.rtl,
88
+ ...withVariantConfig(['default', 'dark', 'bright-green', 'forest-green', 'rtl'], {
89
+ parameters: {
90
+ padding: '0',
96
91
  },
97
- },
92
+ }),
98
93
  render: () => (
99
94
  <div
100
95
  className="header-variants"
package/src/index.ts CHANGED
@@ -35,7 +35,8 @@ export type { HeaderProps } from './header';
35
35
  export type { EmphasisProps } from './emphasis';
36
36
  export type { FieldProps } from './field/Field';
37
37
  export type { InfoProps } from './info';
38
- export type { InlinePromptProps } from './prompt';
38
+ export type { InlinePromptProps, ActionPromptProps } from './prompt';
39
+ export type { InfoPromptProps, InfoPromptAction, InfoPromptMedia } from './prompt';
39
40
  export type { InputWithDisplayFormatProps } from './inputWithDisplayFormat';
40
41
  export type { InputProps } from './inputs/Input';
41
42
  export type { InputGroupProps } from './inputs/InputGroup';
@@ -171,7 +172,7 @@ export { default as Header } from './header';
171
172
  export { default as Image } from './image';
172
173
  export { default as Info } from './info';
173
174
  export { default as InlineAlert } from './inlineAlert';
174
- export { InlinePrompt } from './prompt';
175
+ export { InfoPrompt, InlinePrompt, ActionPrompt } from './prompt';
175
176
  export { default as InputWithDisplayFormat } from './inputWithDisplayFormat';
176
177
  export { Input } from './inputs/Input';
177
178
  export { InputGroup } from './inputs/InputGroup';
@@ -284,6 +285,7 @@ export {
284
285
  adjustLocale,
285
286
  getCountryFromLocale,
286
287
  getDirectionFromLocale,
288
+ getLocaleCurrencyName,
287
289
  getLangFromLocale,
288
290
  isBrowser,
289
291
  isServerSide,