@transferwise/components 0.0.0-experimental-4c97d70 → 0.0.0-experimental-862fadc

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 (450) hide show
  1. package/build/accordion/AccordionItem/AccordionItem.js +1 -0
  2. package/build/accordion/AccordionItem/AccordionItem.js.map +1 -1
  3. package/build/accordion/AccordionItem/AccordionItem.mjs +1 -0
  4. package/build/accordion/AccordionItem/AccordionItem.mjs.map +1 -1
  5. package/build/actionButton/ActionButton.js +1 -0
  6. package/build/actionButton/ActionButton.js.map +1 -1
  7. package/build/actionButton/ActionButton.mjs +1 -0
  8. package/build/actionButton/ActionButton.mjs.map +1 -1
  9. package/build/actionOption/ActionOption.js +1 -0
  10. package/build/actionOption/ActionOption.js.map +1 -1
  11. package/build/actionOption/ActionOption.mjs +1 -0
  12. package/build/actionOption/ActionOption.mjs.map +1 -1
  13. package/build/alert/Alert.js +1 -0
  14. package/build/alert/Alert.js.map +1 -1
  15. package/build/alert/Alert.mjs +1 -0
  16. package/build/alert/Alert.mjs.map +1 -1
  17. package/build/alert/inlineMarkdown/InlineMarkdown.js +1 -0
  18. package/build/alert/inlineMarkdown/InlineMarkdown.js.map +1 -1
  19. package/build/alert/inlineMarkdown/InlineMarkdown.mjs +1 -0
  20. package/build/alert/inlineMarkdown/InlineMarkdown.mjs.map +1 -1
  21. package/build/avatar/Avatar.js +1 -0
  22. package/build/avatar/Avatar.js.map +1 -1
  23. package/build/avatar/Avatar.mjs +1 -0
  24. package/build/avatar/Avatar.mjs.map +1 -1
  25. package/build/avatarView/AvatarView.js +1 -0
  26. package/build/avatarView/AvatarView.js.map +1 -1
  27. package/build/avatarView/AvatarView.mjs +1 -0
  28. package/build/avatarView/AvatarView.mjs.map +1 -1
  29. package/build/avatarWrapper/AvatarWrapper.js +1 -0
  30. package/build/avatarWrapper/AvatarWrapper.js.map +1 -1
  31. package/build/avatarWrapper/AvatarWrapper.mjs +1 -0
  32. package/build/avatarWrapper/AvatarWrapper.mjs.map +1 -1
  33. package/build/badge/Badge.js +1 -0
  34. package/build/badge/Badge.js.map +1 -1
  35. package/build/badge/Badge.mjs +1 -0
  36. package/build/badge/Badge.mjs.map +1 -1
  37. package/build/badge/BadgeAssets.js +2 -1
  38. package/build/badge/BadgeAssets.js.map +1 -1
  39. package/build/badge/BadgeAssets.mjs +2 -1
  40. package/build/badge/BadgeAssets.mjs.map +1 -1
  41. package/build/button/Button.js +1 -0
  42. package/build/button/Button.js.map +1 -1
  43. package/build/button/Button.mjs +1 -0
  44. package/build/button/Button.mjs.map +1 -1
  45. package/build/button/LegacyButton.js +1 -0
  46. package/build/button/LegacyButton.js.map +1 -1
  47. package/build/button/LegacyButton.mjs +1 -0
  48. package/build/button/LegacyButton.mjs.map +1 -1
  49. package/build/button/classMap.js +1 -0
  50. package/build/button/classMap.js.map +1 -1
  51. package/build/button/classMap.mjs +1 -0
  52. package/build/button/classMap.mjs.map +1 -1
  53. package/build/button/legacyUtils/legacyUtils.js +1 -0
  54. package/build/button/legacyUtils/legacyUtils.js.map +1 -1
  55. package/build/button/legacyUtils/legacyUtils.mjs +1 -0
  56. package/build/button/legacyUtils/legacyUtils.mjs.map +1 -1
  57. package/build/card/Card.js +1 -0
  58. package/build/card/Card.js.map +1 -1
  59. package/build/card/Card.mjs +1 -0
  60. package/build/card/Card.mjs.map +1 -1
  61. package/build/checkbox/Checkbox.js +1 -0
  62. package/build/checkbox/Checkbox.js.map +1 -1
  63. package/build/checkbox/Checkbox.mjs +1 -0
  64. package/build/checkbox/Checkbox.mjs.map +1 -1
  65. package/build/chevron/Chevron.js +1 -0
  66. package/build/chevron/Chevron.js.map +1 -1
  67. package/build/chevron/Chevron.mjs +1 -0
  68. package/build/chevron/Chevron.mjs.map +1 -1
  69. package/build/chips/Chip.js +1 -0
  70. package/build/chips/Chip.js.map +1 -1
  71. package/build/chips/Chip.mjs +1 -0
  72. package/build/chips/Chip.mjs.map +1 -1
  73. package/build/circularButton/CircularButton.js +1 -0
  74. package/build/circularButton/CircularButton.js.map +1 -1
  75. package/build/circularButton/CircularButton.mjs +1 -0
  76. package/build/circularButton/CircularButton.mjs.map +1 -1
  77. package/build/common/locale/index.js +9 -4
  78. package/build/common/locale/index.js.map +1 -1
  79. package/build/common/locale/index.mjs +9 -4
  80. package/build/common/locale/index.mjs.map +1 -1
  81. package/build/common/panel/Panel.js +50 -54
  82. package/build/common/panel/Panel.js.map +1 -1
  83. package/build/common/panel/Panel.mjs +55 -59
  84. package/build/common/panel/Panel.mjs.map +1 -1
  85. package/build/common/responsivePanel/ResponsivePanel.js +1 -0
  86. package/build/common/responsivePanel/ResponsivePanel.js.map +1 -1
  87. package/build/common/responsivePanel/ResponsivePanel.mjs +1 -0
  88. package/build/common/responsivePanel/ResponsivePanel.mjs.map +1 -1
  89. package/build/criticalBanner/CriticalCommsBanner.js +1 -0
  90. package/build/criticalBanner/CriticalCommsBanner.js.map +1 -1
  91. package/build/criticalBanner/CriticalCommsBanner.mjs +1 -0
  92. package/build/criticalBanner/CriticalCommsBanner.mjs.map +1 -1
  93. package/build/dateInput/DateInput.js +1 -1
  94. package/build/dateInput/DateInput.mjs +1 -1
  95. package/build/dateLookup/DateLookup.js +1 -1
  96. package/build/dateLookup/DateLookup.mjs +1 -1
  97. package/build/dateLookup/dateHeader/DateHeader.js +1 -0
  98. package/build/dateLookup/dateHeader/DateHeader.js.map +1 -1
  99. package/build/dateLookup/dateHeader/DateHeader.mjs +1 -0
  100. package/build/dateLookup/dateHeader/DateHeader.mjs.map +1 -1
  101. package/build/decision/Decision.js +1 -0
  102. package/build/decision/Decision.js.map +1 -1
  103. package/build/decision/Decision.mjs +1 -0
  104. package/build/decision/Decision.mjs.map +1 -1
  105. package/build/definitionList/DefinitionList.js +1 -0
  106. package/build/definitionList/DefinitionList.js.map +1 -1
  107. package/build/definitionList/DefinitionList.mjs +1 -0
  108. package/build/definitionList/DefinitionList.mjs.map +1 -1
  109. package/build/dimmer/Dimmer.js +1 -0
  110. package/build/dimmer/Dimmer.js.map +1 -1
  111. package/build/dimmer/Dimmer.mjs +1 -0
  112. package/build/dimmer/Dimmer.mjs.map +1 -1
  113. package/build/display/Display.js +1 -0
  114. package/build/display/Display.js.map +1 -1
  115. package/build/display/Display.mjs +1 -0
  116. package/build/display/Display.mjs.map +1 -1
  117. package/build/drawer/Drawer.js +1 -0
  118. package/build/drawer/Drawer.js.map +1 -1
  119. package/build/drawer/Drawer.mjs +1 -0
  120. package/build/drawer/Drawer.mjs.map +1 -1
  121. package/build/expressiveMoneyInput/currencySelector/CurrencySelector.js +4 -3
  122. package/build/expressiveMoneyInput/currencySelector/CurrencySelector.js.map +1 -1
  123. package/build/expressiveMoneyInput/currencySelector/CurrencySelector.mjs +4 -3
  124. package/build/expressiveMoneyInput/currencySelector/CurrencySelector.mjs.map +1 -1
  125. package/build/field/Field.js +5 -5
  126. package/build/field/Field.mjs +5 -5
  127. package/build/flowNavigation/FlowNavigation.js +1 -0
  128. package/build/flowNavigation/FlowNavigation.js.map +1 -1
  129. package/build/flowNavigation/FlowNavigation.mjs +1 -0
  130. package/build/flowNavigation/FlowNavigation.mjs.map +1 -1
  131. package/build/header/Header.js +1 -0
  132. package/build/header/Header.js.map +1 -1
  133. package/build/header/Header.mjs +1 -0
  134. package/build/header/Header.mjs.map +1 -1
  135. package/build/i18n/en.json +0 -2
  136. package/build/i18n/en.json.js +0 -2
  137. package/build/i18n/en.json.js.map +1 -1
  138. package/build/i18n/en.json.mjs +0 -2
  139. package/build/i18n/en.json.mjs.map +1 -1
  140. package/build/index.js +0 -2
  141. package/build/index.js.map +1 -1
  142. package/build/index.mjs +0 -1
  143. package/build/index.mjs.map +1 -1
  144. package/build/info/Info.js +1 -0
  145. package/build/info/Info.js.map +1 -1
  146. package/build/info/Info.mjs +1 -0
  147. package/build/info/Info.mjs.map +1 -1
  148. package/build/inlineAlert/InlineAlert.js +1 -0
  149. package/build/inlineAlert/InlineAlert.js.map +1 -1
  150. package/build/inlineAlert/InlineAlert.mjs +1 -0
  151. package/build/inlineAlert/InlineAlert.mjs.map +1 -1
  152. package/build/inputs/SearchInput.js +1 -0
  153. package/build/inputs/SearchInput.js.map +1 -1
  154. package/build/inputs/SearchInput.mjs +1 -0
  155. package/build/inputs/SearchInput.mjs.map +1 -1
  156. package/build/instructionsList/InstructionsList.js +1 -0
  157. package/build/instructionsList/InstructionsList.js.map +1 -1
  158. package/build/instructionsList/InstructionsList.mjs +1 -0
  159. package/build/instructionsList/InstructionsList.mjs.map +1 -1
  160. package/build/link/Link.js +1 -0
  161. package/build/link/Link.js.map +1 -1
  162. package/build/link/Link.mjs +1 -0
  163. package/build/link/Link.mjs.map +1 -1
  164. package/build/listItem/AdditionalInfo/ListItemAdditionalInfo.js +1 -0
  165. package/build/listItem/AdditionalInfo/ListItemAdditionalInfo.js.map +1 -1
  166. package/build/listItem/AdditionalInfo/ListItemAdditionalInfo.mjs +1 -0
  167. package/build/listItem/AdditionalInfo/ListItemAdditionalInfo.mjs.map +1 -1
  168. package/build/listItem/ListItem.js +1 -0
  169. package/build/listItem/ListItem.js.map +1 -1
  170. package/build/listItem/ListItem.mjs +1 -0
  171. package/build/listItem/ListItem.mjs.map +1 -1
  172. package/build/listItem/Prompt/ListItemPrompt.js +5 -5
  173. package/build/listItem/Prompt/ListItemPrompt.mjs +5 -5
  174. package/build/loader/Loader.js +1 -0
  175. package/build/loader/Loader.js.map +1 -1
  176. package/build/loader/Loader.mjs +1 -0
  177. package/build/loader/Loader.mjs.map +1 -1
  178. package/build/main.css +66 -133
  179. package/build/markdown/Markdown.js +1 -0
  180. package/build/markdown/Markdown.js.map +1 -1
  181. package/build/markdown/Markdown.mjs +1 -0
  182. package/build/markdown/Markdown.mjs.map +1 -1
  183. package/build/modal/Modal.js +1 -0
  184. package/build/modal/Modal.js.map +1 -1
  185. package/build/modal/Modal.mjs +1 -0
  186. package/build/modal/Modal.mjs.map +1 -1
  187. package/build/moneyInput/MoneyInput.js +28 -12
  188. package/build/moneyInput/MoneyInput.js.map +1 -1
  189. package/build/moneyInput/MoneyInput.mjs +30 -14
  190. package/build/moneyInput/MoneyInput.mjs.map +1 -1
  191. package/build/moneyInput/currencyFormatting.js +8 -2
  192. package/build/moneyInput/currencyFormatting.js.map +1 -1
  193. package/build/moneyInput/currencyFormatting.mjs +5 -4
  194. package/build/moneyInput/currencyFormatting.mjs.map +1 -1
  195. package/build/navigationOption/NavigationOption.js +1 -0
  196. package/build/navigationOption/NavigationOption.js.map +1 -1
  197. package/build/navigationOption/NavigationOption.mjs +1 -0
  198. package/build/navigationOption/NavigationOption.mjs.map +1 -1
  199. package/build/nudge/Nudge.js +1 -0
  200. package/build/nudge/Nudge.js.map +1 -1
  201. package/build/nudge/Nudge.mjs +1 -0
  202. package/build/nudge/Nudge.mjs.map +1 -1
  203. package/build/overlayHeader/OverlayHeader.js +1 -0
  204. package/build/overlayHeader/OverlayHeader.js.map +1 -1
  205. package/build/overlayHeader/OverlayHeader.mjs +1 -0
  206. package/build/overlayHeader/OverlayHeader.mjs.map +1 -1
  207. package/build/phoneNumberInput/PhoneNumberInput.js +1 -0
  208. package/build/phoneNumberInput/PhoneNumberInput.js.map +1 -1
  209. package/build/phoneNumberInput/PhoneNumberInput.mjs +1 -0
  210. package/build/phoneNumberInput/PhoneNumberInput.mjs.map +1 -1
  211. package/build/popover/Popover.js +1 -0
  212. package/build/popover/Popover.js.map +1 -1
  213. package/build/popover/Popover.mjs +1 -0
  214. package/build/popover/Popover.mjs.map +1 -1
  215. package/build/processIndicator/ProcessIndicator.js +1 -0
  216. package/build/processIndicator/ProcessIndicator.js.map +1 -1
  217. package/build/processIndicator/ProcessIndicator.mjs +1 -0
  218. package/build/processIndicator/ProcessIndicator.mjs.map +1 -1
  219. package/build/progressBar/ProgressBar.js +1 -0
  220. package/build/progressBar/ProgressBar.js.map +1 -1
  221. package/build/progressBar/ProgressBar.mjs +1 -0
  222. package/build/progressBar/ProgressBar.mjs.map +1 -1
  223. package/build/promoCard/PromoCard.js +1 -0
  224. package/build/promoCard/PromoCard.js.map +1 -1
  225. package/build/promoCard/PromoCard.mjs +1 -0
  226. package/build/promoCard/PromoCard.mjs.map +1 -1
  227. package/build/promoCard/PromoCardIndicator.js +1 -0
  228. package/build/promoCard/PromoCardIndicator.js.map +1 -1
  229. package/build/promoCard/PromoCardIndicator.mjs +1 -0
  230. package/build/promoCard/PromoCardIndicator.mjs.map +1 -1
  231. package/build/prompt/ActionPrompt/ActionPrompt.js +41 -8
  232. package/build/prompt/ActionPrompt/ActionPrompt.js.map +1 -1
  233. package/build/prompt/ActionPrompt/ActionPrompt.mjs +41 -8
  234. package/build/prompt/ActionPrompt/ActionPrompt.mjs.map +1 -1
  235. package/build/prompt/InfoPrompt/InfoPrompt.js +1 -0
  236. package/build/prompt/InfoPrompt/InfoPrompt.js.map +1 -1
  237. package/build/prompt/InfoPrompt/InfoPrompt.mjs +1 -0
  238. package/build/prompt/InfoPrompt/InfoPrompt.mjs.map +1 -1
  239. package/build/prompt/InlinePrompt/InlinePrompt.js +1 -0
  240. package/build/prompt/InlinePrompt/InlinePrompt.js.map +1 -1
  241. package/build/prompt/InlinePrompt/InlinePrompt.mjs +1 -0
  242. package/build/prompt/InlinePrompt/InlinePrompt.mjs.map +1 -1
  243. package/build/prompt/PrimitivePrompt/PrimitivePrompt.js +0 -2
  244. package/build/prompt/PrimitivePrompt/PrimitivePrompt.js.map +1 -1
  245. package/build/prompt/PrimitivePrompt/PrimitivePrompt.mjs +0 -2
  246. package/build/prompt/PrimitivePrompt/PrimitivePrompt.mjs.map +1 -1
  247. package/build/radio/Radio.js +1 -0
  248. package/build/radio/Radio.js.map +1 -1
  249. package/build/radio/Radio.mjs +1 -0
  250. package/build/radio/Radio.mjs.map +1 -1
  251. package/build/segmentedControl/SegmentedControl.js +1 -0
  252. package/build/segmentedControl/SegmentedControl.js.map +1 -1
  253. package/build/segmentedControl/SegmentedControl.mjs +1 -0
  254. package/build/segmentedControl/SegmentedControl.mjs.map +1 -1
  255. package/build/select/Select.js +2 -1
  256. package/build/select/Select.js.map +1 -1
  257. package/build/select/Select.mjs +2 -1
  258. package/build/select/Select.mjs.map +1 -1
  259. package/build/select/option/Option.js +1 -0
  260. package/build/select/option/Option.js.map +1 -1
  261. package/build/select/option/Option.mjs +1 -0
  262. package/build/select/option/Option.mjs.map +1 -1
  263. package/build/statusIcon/StatusIcon.js +1 -0
  264. package/build/statusIcon/StatusIcon.js.map +1 -1
  265. package/build/statusIcon/StatusIcon.mjs +1 -0
  266. package/build/statusIcon/StatusIcon.mjs.map +1 -1
  267. package/build/stepper/Stepper.js +1 -0
  268. package/build/stepper/Stepper.js.map +1 -1
  269. package/build/stepper/Stepper.mjs +1 -0
  270. package/build/stepper/Stepper.mjs.map +1 -1
  271. package/build/sticky/Sticky.js +1 -0
  272. package/build/sticky/Sticky.js.map +1 -1
  273. package/build/sticky/Sticky.mjs +1 -0
  274. package/build/sticky/Sticky.mjs.map +1 -1
  275. package/build/styles/css/neptune.css +33 -22
  276. package/build/styles/less/neptune-tokens.less +5 -4
  277. package/build/styles/main.css +66 -133
  278. package/build/styles/modal/Modal.css +2 -2
  279. package/build/styles/props/neptune-tokens.css +3 -2
  280. package/build/styles/select/Select.css +2 -1
  281. package/build/styles/styles/less/neptune.css +33 -22
  282. package/build/summary/Summary.js +1 -0
  283. package/build/summary/Summary.js.map +1 -1
  284. package/build/summary/Summary.mjs +1 -0
  285. package/build/summary/Summary.mjs.map +1 -1
  286. package/build/table/Table.js +1 -0
  287. package/build/table/Table.js.map +1 -1
  288. package/build/table/Table.mjs +1 -0
  289. package/build/table/Table.mjs.map +1 -1
  290. package/build/table/TableRow.js +1 -0
  291. package/build/table/TableRow.js.map +1 -1
  292. package/build/table/TableRow.mjs +1 -0
  293. package/build/table/TableRow.mjs.map +1 -1
  294. package/build/table/TableStatusText.js +1 -0
  295. package/build/table/TableStatusText.js.map +1 -1
  296. package/build/table/TableStatusText.mjs +1 -0
  297. package/build/table/TableStatusText.mjs.map +1 -1
  298. package/build/tabs/Tabs.js +1 -0
  299. package/build/tabs/Tabs.js.map +1 -1
  300. package/build/tabs/Tabs.mjs +1 -0
  301. package/build/tabs/Tabs.mjs.map +1 -1
  302. package/build/tile/Tile.js +1 -0
  303. package/build/tile/Tile.js.map +1 -1
  304. package/build/tile/Tile.mjs +1 -0
  305. package/build/tile/Tile.mjs.map +1 -1
  306. package/build/title/Title.js +1 -0
  307. package/build/title/Title.js.map +1 -1
  308. package/build/title/Title.mjs +1 -0
  309. package/build/title/Title.mjs.map +1 -1
  310. package/build/tooltip/Tooltip.js +30 -50
  311. package/build/tooltip/Tooltip.js.map +1 -1
  312. package/build/tooltip/Tooltip.mjs +31 -51
  313. package/build/tooltip/Tooltip.mjs.map +1 -1
  314. package/build/typeahead/Typeahead.js +5 -5
  315. package/build/typeahead/Typeahead.mjs +5 -5
  316. package/build/types/badge/BadgeAssets.d.ts.map +1 -1
  317. package/build/types/common/locale/index.d.ts +1 -1
  318. package/build/types/common/locale/index.d.ts.map +1 -1
  319. package/build/types/common/panel/Panel.d.ts.map +1 -1
  320. package/build/types/expressiveMoneyInput/currencySelector/CurrencySelector.d.ts.map +1 -1
  321. package/build/types/index.d.ts +2 -2
  322. package/build/types/index.d.ts.map +1 -1
  323. package/build/types/moneyInput/MoneyInput.d.ts +6 -0
  324. package/build/types/moneyInput/MoneyInput.d.ts.map +1 -1
  325. package/build/types/moneyInput/currencyFormatting.d.ts +4 -3
  326. package/build/types/moneyInput/currencyFormatting.d.ts.map +1 -1
  327. package/build/types/prompt/ActionPrompt/ActionPrompt.d.ts +11 -2
  328. package/build/types/prompt/ActionPrompt/ActionPrompt.d.ts.map +1 -1
  329. package/build/types/prompt/PrimitivePrompt/PrimitivePrompt.d.ts +3 -8
  330. package/build/types/prompt/PrimitivePrompt/PrimitivePrompt.d.ts.map +1 -1
  331. package/build/types/prompt/index.d.ts +0 -2
  332. package/build/types/prompt/index.d.ts.map +1 -1
  333. package/build/types/test-utils/index.d.ts +0 -4
  334. package/build/types/test-utils/index.d.ts.map +1 -1
  335. package/build/types/tooltip/Tooltip.d.ts.map +1 -1
  336. package/build/upload/Upload.js +1 -0
  337. package/build/upload/Upload.js.map +1 -1
  338. package/build/upload/Upload.mjs +1 -0
  339. package/build/upload/Upload.mjs.map +1 -1
  340. package/build/upload/steps/completeStep/completeStep.js +1 -0
  341. package/build/upload/steps/completeStep/completeStep.js.map +1 -1
  342. package/build/upload/steps/completeStep/completeStep.mjs +1 -0
  343. package/build/upload/steps/completeStep/completeStep.mjs.map +1 -1
  344. package/build/upload/steps/processingStep/processingStep.js +1 -0
  345. package/build/upload/steps/processingStep/processingStep.js.map +1 -1
  346. package/build/upload/steps/processingStep/processingStep.mjs +1 -0
  347. package/build/upload/steps/processingStep/processingStep.mjs.map +1 -1
  348. package/build/upload/steps/uploadImageStep/uploadImageStep.js +1 -0
  349. package/build/upload/steps/uploadImageStep/uploadImageStep.js.map +1 -1
  350. package/build/upload/steps/uploadImageStep/uploadImageStep.mjs +1 -0
  351. package/build/upload/steps/uploadImageStep/uploadImageStep.mjs.map +1 -1
  352. package/build/uploadInput/UploadInput.js +1 -0
  353. package/build/uploadInput/UploadInput.js.map +1 -1
  354. package/build/uploadInput/UploadInput.mjs +1 -0
  355. package/build/uploadInput/UploadInput.mjs.map +1 -1
  356. package/build/uploadInput/uploadButton/UploadButton.js +1 -0
  357. package/build/uploadInput/uploadButton/UploadButton.js.map +1 -1
  358. package/build/uploadInput/uploadButton/UploadButton.mjs +1 -0
  359. package/build/uploadInput/uploadButton/UploadButton.mjs.map +1 -1
  360. package/build/uploadInput/uploadButton/defaults.js +1 -0
  361. package/build/uploadInput/uploadButton/defaults.js.map +1 -1
  362. package/build/uploadInput/uploadButton/defaults.mjs +1 -0
  363. package/build/uploadInput/uploadButton/defaults.mjs.map +1 -1
  364. package/build/uploadInput/uploadItem/UploadItem.js +1 -0
  365. package/build/uploadInput/uploadItem/UploadItem.js.map +1 -1
  366. package/build/uploadInput/uploadItem/UploadItem.mjs +1 -0
  367. package/build/uploadInput/uploadItem/UploadItem.mjs.map +1 -1
  368. package/build/withDisplayFormat/WithDisplayFormat.js +1 -0
  369. package/build/withDisplayFormat/WithDisplayFormat.js.map +1 -1
  370. package/build/withDisplayFormat/WithDisplayFormat.mjs +1 -0
  371. package/build/withDisplayFormat/WithDisplayFormat.mjs.map +1 -1
  372. package/package.json +19 -21
  373. package/src/avatarView/AvatarView.story.tsx +1 -1
  374. package/src/avatarView/AvatarView.test.story.tsx +108 -1
  375. package/src/badge/BadgeAssets.tsx +2 -0
  376. package/src/common/locale/index.test.ts +13 -4
  377. package/src/common/locale/index.ts +9 -3
  378. package/src/common/panel/Panel.tsx +56 -49
  379. package/src/expressiveMoneyInput/ExpressiveMoneyInput.story.tsx +18 -0
  380. package/src/expressiveMoneyInput/currencySelector/CurrencySelector.test.tsx +119 -1
  381. package/src/expressiveMoneyInput/currencySelector/CurrencySelector.tsx +4 -3
  382. package/src/i18n/en.json +0 -2
  383. package/src/index.ts +2 -2
  384. package/src/main.css +66 -133
  385. package/src/main.less +1 -3
  386. package/src/modal/Modal.css +2 -2
  387. package/src/modal/Modal.less +1 -1
  388. package/src/moneyInput/MoneyInput.story.tsx +10 -1
  389. package/src/moneyInput/MoneyInput.test.story.tsx +141 -1
  390. package/src/moneyInput/MoneyInput.test.tsx +45 -0
  391. package/src/moneyInput/MoneyInput.tsx +27 -3
  392. package/src/moneyInput/currencyFormatting.ts +11 -5
  393. package/src/prompt/ActionPrompt/ActionPrompt.tsx +62 -9
  394. package/src/prompt/PrimitivePrompt/PrimitivePrompt.tsx +2 -9
  395. package/src/prompt/index.ts +0 -4
  396. package/src/select/Select.css +2 -1
  397. package/src/select/Select.less +6 -5
  398. package/src/select/Select.test.story.tsx +59 -0
  399. package/src/select/Select.tsx +1 -1
  400. package/src/sentimentSurface/SentimentSurface.story.tsx +17 -43
  401. package/src/styles/less/neptune.css +33 -22
  402. package/src/tooltip/Tooltip.tsx +26 -45
  403. package/build/prompt/CriticalBanner/CriticalBanner.js +0 -143
  404. package/build/prompt/CriticalBanner/CriticalBanner.js.map +0 -1
  405. package/build/prompt/CriticalBanner/CriticalBanner.mjs +0 -141
  406. package/build/prompt/CriticalBanner/CriticalBanner.mjs.map +0 -1
  407. package/build/prompt/CriticalBanner/helpers.js +0 -29
  408. package/build/prompt/CriticalBanner/helpers.js.map +0 -1
  409. package/build/prompt/CriticalBanner/helpers.mjs +0 -26
  410. package/build/prompt/CriticalBanner/helpers.mjs.map +0 -1
  411. package/build/prompt/common/Expander/Expander.js +0 -47
  412. package/build/prompt/common/Expander/Expander.js.map +0 -1
  413. package/build/prompt/common/Expander/Expander.messages.js +0 -17
  414. package/build/prompt/common/Expander/Expander.messages.js.map +0 -1
  415. package/build/prompt/common/Expander/Expander.messages.mjs +0 -13
  416. package/build/prompt/common/Expander/Expander.messages.mjs.map +0 -1
  417. package/build/prompt/common/Expander/Expander.mjs +0 -44
  418. package/build/prompt/common/Expander/Expander.mjs.map +0 -1
  419. package/build/prompt/helpers/promptMedia.js +0 -52
  420. package/build/prompt/helpers/promptMedia.js.map +0 -1
  421. package/build/prompt/helpers/promptMedia.mjs +0 -50
  422. package/build/prompt/helpers/promptMedia.mjs.map +0 -1
  423. package/build/styles/prompt/CriticalBanner/CriticalBanner.css +0 -59
  424. package/build/styles/prompt/common/Expander/Expander.css +0 -8
  425. package/build/types/prompt/CriticalBanner/CriticalBanner.d.ts +0 -33
  426. package/build/types/prompt/CriticalBanner/CriticalBanner.d.ts.map +0 -1
  427. package/build/types/prompt/CriticalBanner/helpers.d.ts +0 -18
  428. package/build/types/prompt/CriticalBanner/helpers.d.ts.map +0 -1
  429. package/build/types/prompt/CriticalBanner/index.d.ts +0 -3
  430. package/build/types/prompt/CriticalBanner/index.d.ts.map +0 -1
  431. package/build/types/prompt/common/Expander/Expander.d.ts +0 -20
  432. package/build/types/prompt/common/Expander/Expander.d.ts.map +0 -1
  433. package/build/types/prompt/common/Expander/Expander.messages.d.ts +0 -14
  434. package/build/types/prompt/common/Expander/Expander.messages.d.ts.map +0 -1
  435. package/build/types/prompt/helpers/promptMedia.d.ts +0 -22
  436. package/build/types/prompt/helpers/promptMedia.d.ts.map +0 -1
  437. package/src/prompt/CriticalBanner/CriticalBanner.accessibility.docs.mdx +0 -113
  438. package/src/prompt/CriticalBanner/CriticalBanner.css +0 -59
  439. package/src/prompt/CriticalBanner/CriticalBanner.less +0 -64
  440. package/src/prompt/CriticalBanner/CriticalBanner.story.tsx +0 -632
  441. package/src/prompt/CriticalBanner/CriticalBanner.test.story.tsx +0 -285
  442. package/src/prompt/CriticalBanner/CriticalBanner.tsx +0 -182
  443. package/src/prompt/CriticalBanner/helpers.ts +0 -39
  444. package/src/prompt/CriticalBanner/index.ts +0 -2
  445. package/src/prompt/common/Expander/Expander.css +0 -8
  446. package/src/prompt/common/Expander/Expander.less +0 -9
  447. package/src/prompt/common/Expander/Expander.messages.ts +0 -14
  448. package/src/prompt/common/Expander/Expander.test.tsx +0 -167
  449. package/src/prompt/common/Expander/Expander.tsx +0 -83
  450. package/src/prompt/helpers/promptMedia.tsx +0 -79
package/src/main.css CHANGED
@@ -1,6 +1,6 @@
1
1
  /**
2
- * Do not edit directly
3
- * Generated on Wed, 07 Jan 2026 11:56:15 GMT
2
+ * Do not edit directly, this file was auto-generated.
3
+ * Generated on Fri, 10 Apr 2026 14:46:00 GMT
4
4
  */
5
5
 
6
6
  :root {
@@ -53,6 +53,7 @@
53
53
  --radius-small: 10px;
54
54
  --radius-medium: 16px;
55
55
  --radius-large: 24px;
56
+ --radius-xlarge: 32px;
56
57
  --size-4: 4px;
57
58
  --size-5: 5px;
58
59
  --size-8: 8px;
@@ -142,8 +143,8 @@
142
143
  }
143
144
 
144
145
  /**
145
- * Do not edit directly
146
- * Generated on Wed, 07 Jan 2026 11:56:15 GMT
146
+ * Do not edit directly, this file was auto-generated.
147
+ * Generated on Fri, 10 Apr 2026 14:46:00 GMT
147
148
  */
148
149
 
149
150
  .np-theme-personal {
@@ -236,6 +237,7 @@
236
237
  --radius-small: 10px;
237
238
  --radius-medium: 16px;
238
239
  --radius-large: 24px;
240
+ --radius-xlarge: 32px;
239
241
  --size-4: 4px;
240
242
  --size-5: 5px;
241
243
  --size-8: 8px;
@@ -391,8 +393,8 @@
391
393
  }
392
394
 
393
395
  /**
394
- * Do not edit directly
395
- * Generated on Wed, 07 Jan 2026 11:56:15 GMT
396
+ * Do not edit directly, this file was auto-generated.
397
+ * Generated on Fri, 10 Apr 2026 14:46:00 GMT
396
398
  */
397
399
 
398
400
  .np-theme-personal--forest-green {
@@ -485,6 +487,7 @@
485
487
  --radius-small: 10px;
486
488
  --radius-medium: 16px;
487
489
  --radius-large: 24px;
490
+ --radius-xlarge: 32px;
488
491
  --size-4: 4px;
489
492
  --size-5: 5px;
490
493
  --size-8: 8px;
@@ -640,8 +643,8 @@
640
643
  }
641
644
 
642
645
  /**
643
- * Do not edit directly
644
- * Generated on Wed, 07 Jan 2026 11:56:15 GMT
646
+ * Do not edit directly, this file was auto-generated.
647
+ * Generated on Fri, 10 Apr 2026 14:46:00 GMT
645
648
  */
646
649
 
647
650
  .np-theme-personal--bright-green {
@@ -734,6 +737,7 @@
734
737
  --radius-small: 10px;
735
738
  --radius-medium: 16px;
736
739
  --radius-large: 24px;
740
+ --radius-xlarge: 32px;
737
741
  --size-4: 4px;
738
742
  --size-5: 5px;
739
743
  --size-8: 8px;
@@ -889,8 +893,8 @@
889
893
  }
890
894
 
891
895
  /**
892
- * Do not edit directly
893
- * Generated on Wed, 07 Jan 2026 11:56:15 GMT
896
+ * Do not edit directly, this file was auto-generated.
897
+ * Generated on Fri, 10 Apr 2026 14:46:00 GMT
894
898
  */
895
899
 
896
900
  .np-theme-personal--dark {
@@ -983,6 +987,7 @@
983
987
  --radius-small: 10px;
984
988
  --radius-medium: 16px;
985
989
  --radius-large: 24px;
990
+ --radius-xlarge: 32px;
986
991
  --size-4: 4px;
987
992
  --size-5: 5px;
988
993
  --size-8: 8px;
@@ -1138,8 +1143,8 @@
1138
1143
  }
1139
1144
 
1140
1145
  /**
1141
- * Do not edit directly
1142
- * Generated on Wed, 07 Jan 2026 11:56:15 GMT
1146
+ * Do not edit directly, this file was auto-generated.
1147
+ * Generated on Fri, 10 Apr 2026 14:46:00 GMT
1143
1148
  */
1144
1149
 
1145
1150
  .np-theme-platform {
@@ -1232,6 +1237,7 @@
1232
1237
  --radius-small: 10px;
1233
1238
  --radius-medium: 16px;
1234
1239
  --radius-large: 24px;
1240
+ --radius-xlarge: 32px;
1235
1241
  --size-4: 4px;
1236
1242
  --size-5: 5px;
1237
1243
  --size-8: 8px;
@@ -1321,8 +1327,8 @@
1321
1327
  }
1322
1328
 
1323
1329
  /**
1324
- * Do not edit directly
1325
- * Generated on Wed, 07 Jan 2026 11:56:15 GMT
1330
+ * Do not edit directly, this file was auto-generated.
1331
+ * Generated on Fri, 10 Apr 2026 14:46:00 GMT
1326
1332
  */
1327
1333
 
1328
1334
  .np-theme-platform--forest-green {
@@ -1415,6 +1421,7 @@
1415
1421
  --radius-small: 10px;
1416
1422
  --radius-medium: 16px;
1417
1423
  --radius-large: 24px;
1424
+ --radius-xlarge: 32px;
1418
1425
  --size-4: 4px;
1419
1426
  --size-5: 5px;
1420
1427
  --size-8: 8px;
@@ -1504,8 +1511,8 @@
1504
1511
  }
1505
1512
 
1506
1513
  /**
1507
- * Do not edit directly
1508
- * Generated on Wed, 07 Jan 2026 11:56:15 GMT
1514
+ * Do not edit directly, this file was auto-generated.
1515
+ * Generated on Fri, 10 Apr 2026 14:46:00 GMT
1509
1516
  */
1510
1517
 
1511
1518
  .np-theme-business {
@@ -1599,6 +1606,7 @@
1599
1606
  --radius-small: 10px;
1600
1607
  --radius-medium: 16px;
1601
1608
  --radius-large: 24px;
1609
+ --radius-xlarge: 32px;
1602
1610
  --size-4: 4px;
1603
1611
  --size-5: 5px;
1604
1612
  --size-8: 8px;
@@ -1688,8 +1696,8 @@
1688
1696
  }
1689
1697
 
1690
1698
  /**
1691
- * Do not edit directly
1692
- * Generated on Wed, 07 Jan 2026 11:56:15 GMT
1699
+ * Do not edit directly, this file was auto-generated.
1700
+ * Generated on Fri, 10 Apr 2026 14:46:00 GMT
1693
1701
  */
1694
1702
 
1695
1703
  .np-theme-business--dark {
@@ -1783,6 +1791,7 @@
1783
1791
  --radius-small: 10px;
1784
1792
  --radius-medium: 16px;
1785
1793
  --radius-large: 24px;
1794
+ --radius-xlarge: 32px;
1786
1795
  --size-4: 4px;
1787
1796
  --size-5: 5px;
1788
1797
  --size-8: 8px;
@@ -1872,8 +1881,8 @@
1872
1881
  }
1873
1882
 
1874
1883
  /**
1875
- * Do not edit directly
1876
- * Generated on Wed, 07 Jan 2026 11:56:15 GMT
1884
+ * Do not edit directly, this file was auto-generated.
1885
+ * Generated on Fri, 10 Apr 2026 14:46:00 GMT
1877
1886
  */
1878
1887
 
1879
1888
  .np-theme-business--forest-green {
@@ -1967,6 +1976,7 @@
1967
1976
  --radius-small: 10px;
1968
1977
  --radius-medium: 16px;
1969
1978
  --radius-large: 24px;
1979
+ --radius-xlarge: 32px;
1970
1980
  --size-4: 4px;
1971
1981
  --size-5: 5px;
1972
1982
  --size-8: 8px;
@@ -2056,8 +2066,8 @@
2056
2066
  }
2057
2067
 
2058
2068
  /**
2059
- * Do not edit directly
2060
- * Generated on Wed, 07 Jan 2026 11:56:15 GMT
2069
+ * Do not edit directly, this file was auto-generated.
2070
+ * Generated on Fri, 10 Apr 2026 14:46:01 GMT
2061
2071
  */
2062
2072
 
2063
2073
  .np-theme-business--bright-green {
@@ -2151,6 +2161,7 @@
2151
2161
  --radius-small: 10px;
2152
2162
  --radius-medium: 16px;
2153
2163
  --radius-large: 24px;
2164
+ --radius-xlarge: 32px;
2154
2165
  --size-4: 4px;
2155
2166
  --size-5: 5px;
2156
2167
  --size-8: 8px;
@@ -31053,8 +31064,8 @@ button.np-link {
31053
31064
  box-shadow: none;
31054
31065
  background: #ffffff;
31055
31066
  background: var(--color-background-elevated);
31056
- border-radius: 24px;
31057
- border-radius: var(--radius-large);
31067
+ border-radius: 32px;
31068
+ border-radius: var(--radius-xlarge);
31058
31069
  }
31059
31070
 
31060
31071
  .tw-modal.in .tw-modal-dialog {
@@ -32176,114 +32187,6 @@ html:not([dir="rtl"]) .np-navigation-option {
32176
32187
  padding: 0;
32177
32188
  }
32178
32189
 
32179
- .wds-action-prompt {
32180
- --Prompt-padding: var(--size-16);
32181
- --Prompt-actions-gap: var(--size-8);
32182
- --Prompt-gap: var(--size-10) var(--size-16);
32183
- --Prompt-border-radius: var(--radius-large);
32184
- }
32185
-
32186
- .wds-action-prompt--media-image {
32187
- width: 48px;
32188
- width: var(--size-48);
32189
- height: 48px;
32190
- height: var(--size-48);
32191
- -o-object-fit: contain;
32192
- object-fit: contain;
32193
- }
32194
-
32195
- @media (max-width: 767px) {
32196
- .wds-action-prompt--with-two-actions .wds-prompt__actions-wrapper .wds-Button {
32197
- flex: 1 1 calc(50% - (var(--Prompt-actions-gap) / 2));
32198
- min-width: -moz-fit-content;
32199
- min-width: fit-content;
32200
- }
32201
- }
32202
-
32203
- .wds-action-prompt__content {
32204
- max-width: calc(48px * 10);
32205
- max-width: calc(var(--size-48) * 10);
32206
- }
32207
-
32208
- .wds-critical-banner {
32209
- --Prompt-padding: var(--size-16);
32210
- --Prompt-actions-gap: var(--size-8);
32211
- --Prompt-gap: var(--size-10) var(--size-16);
32212
- --Prompt-border-radius: 0;
32213
- /* Override PrimitivePrompt's --screen-sm-max actions behaviour:
32214
- actions only go full-width below 480px (--screen-xs) */
32215
- }
32216
-
32217
- .wds-critical-banner__mobile--collapsed {
32218
- max-height: 30vh;
32219
- }
32220
-
32221
- .wds-critical-banner--media-image {
32222
- width: 48px;
32223
- width: var(--size-48);
32224
- height: 48px;
32225
- height: var(--size-48);
32226
- -o-object-fit: contain;
32227
- object-fit: contain;
32228
- }
32229
-
32230
- .wds-critical-banner__title--collapsed {
32231
- display: -webkit-box;
32232
- -webkit-line-clamp: 2;
32233
- line-clamp: 2;
32234
- -webkit-box-orient: vertical;
32235
- overflow: hidden;
32236
- }
32237
-
32238
- .wds-critical-banner__description--collapsed {
32239
- display: -webkit-box;
32240
- -webkit-line-clamp: 2;
32241
- line-clamp: 2;
32242
- -webkit-box-orient: vertical;
32243
- overflow: hidden;
32244
- }
32245
-
32246
- .wds-critical-banner .wds-prompt__content-wrapper {
32247
- grid-template-columns: auto 1fr auto;
32248
- align-items: flex-start;
32249
- }
32250
-
32251
- .wds-critical-banner__text-wrapper {
32252
- min-width: 0;
32253
- max-width: 480px;
32254
- height: 100%;
32255
- }
32256
-
32257
- .wds-critical-banner .wds-prompt__actions-wrapper {
32258
- grid-column-start: 2;
32259
- grid-column-end: 3;
32260
- }
32261
-
32262
- @media not (min-width: 480px) {
32263
- .wds-critical-banner .wds-prompt__actions-wrapper {
32264
- grid-column: span 3;
32265
- width: 100%;
32266
- }
32267
- }
32268
-
32269
- @media not (min-width: 480px) {
32270
- .wds-critical-banner--with-two-actions .wds-prompt__actions-wrapper .wds-Button {
32271
- flex: 1 1 calc(50% - (var(--Prompt-actions-gap) / 2));
32272
- min-width: -moz-fit-content;
32273
- min-width: fit-content;
32274
- }
32275
- }
32276
-
32277
- .wds-expander-toggle {
32278
- align-self: flex-start;
32279
- flex-shrink: 0;
32280
- transition: transform 0.2s ease-in-out;
32281
- }
32282
-
32283
- .wds-expander-toggle--collapsed {
32284
- transform: rotate(180deg);
32285
- }
32286
-
32287
32190
  .wds-radio-group .np-radio:last-child label {
32288
32191
  margin-bottom: 0;
32289
32192
  }
@@ -32825,8 +32728,8 @@ html:not([dir="rtl"]) .np-navigation-option {
32825
32728
  }
32826
32729
 
32827
32730
  .np-dropdown-menu-desktop {
32828
- max-height: 70vh;
32829
32731
  max-height: 70svh;
32732
+ max-height: var(--np-panel-available-height, 70svh);
32830
32733
  min-width: 160px;
32831
32734
  max-width: calc(100vw - 32px);
32832
32735
  }
@@ -32834,6 +32737,7 @@ html:not([dir="rtl"]) .np-navigation-option {
32834
32737
  @media (min-height: 592px) {
32835
32738
  .np-dropdown-menu-desktop {
32836
32739
  max-height: 592px;
32740
+ max-height: var(--np-panel-available-height, 592px);
32837
32741
  }
32838
32742
  }
32839
32743
 
@@ -34708,3 +34612,32 @@ html:not([dir="rtl"]) .np-navigation-option {
34708
34612
  .np-list-item__action {
34709
34613
  flex-shrink: 0;
34710
34614
  }
34615
+
34616
+ .wds-action-prompt {
34617
+ --Prompt-padding: var(--size-16);
34618
+ --Prompt-actions-gap: var(--size-8);
34619
+ --Prompt-gap: var(--size-10) var(--size-16);
34620
+ --Prompt-border-radius: var(--radius-large);
34621
+ }
34622
+
34623
+ .wds-action-prompt--media-image {
34624
+ width: 48px;
34625
+ width: var(--size-48);
34626
+ height: 48px;
34627
+ height: var(--size-48);
34628
+ -o-object-fit: contain;
34629
+ object-fit: contain;
34630
+ }
34631
+
34632
+ @media (max-width: 767px) {
34633
+ .wds-action-prompt--with-two-actions .wds-prompt__actions-wrapper .wds-Button {
34634
+ flex: 1 1 calc(50% - (var(--Prompt-actions-gap) / 2));
34635
+ min-width: -moz-fit-content;
34636
+ min-width: fit-content;
34637
+ }
34638
+ }
34639
+
34640
+ .wds-action-prompt__content {
34641
+ max-width: calc(48px * 10);
34642
+ max-width: calc(var(--size-48) * 10);
34643
+ }
package/src/main.less CHANGED
@@ -66,9 +66,6 @@
66
66
  @import "./prompt/PrimitivePrompt/PrimitivePrompt.less";
67
67
  @import "./prompt/InlinePrompt/InlinePrompt.less";
68
68
  @import "./prompt/InfoPrompt/InfoPrompt.less";
69
- @import "./prompt/ActionPrompt/ActionPrompt.less";
70
- @import "./prompt/CriticalBanner/CriticalBanner.less";
71
- @import "./prompt/common/Expander/Expander.less";
72
69
  @import "./radioGroup/RadioGroup.less";
73
70
  @import "./section/Section.less";
74
71
  @import "./slidingPanel/SlidingPanel.less";
@@ -93,6 +90,7 @@
93
90
  @import "./progress/Progress.less";
94
91
  @import "./progressBar/ProgressBar.less";
95
92
  @import "./legacylistItem/LegacyListItem.less";
93
+ @import "./prompt/ActionPrompt/ActionPrompt.less";
96
94
 
97
95
  // List all less files in src in alphabetical order: find -s src -type f -name '*.less' ! -name 'main.less'
98
96
  // Make sure you are not referencing main.less itself in this file!
@@ -9,8 +9,8 @@
9
9
  box-shadow: none;
10
10
  background: #ffffff;
11
11
  background: var(--color-background-elevated);
12
- border-radius: 24px;
13
- border-radius: var(--radius-large);
12
+ border-radius: 32px;
13
+ border-radius: var(--radius-xlarge);
14
14
  }
15
15
  .tw-modal.in .tw-modal-dialog {
16
16
  transform: translate(0);
@@ -12,7 +12,7 @@
12
12
  transform: translateY(-25%);
13
13
  box-shadow: none;
14
14
  background: var(--color-background-elevated);
15
- border-radius: var(--radius-large);
15
+ border-radius: var(--radius-xlarge);
16
16
  }
17
17
 
18
18
  &.in {
@@ -1,5 +1,5 @@
1
1
  import { Meta, StoryObj } from '@storybook/react-webpack5';
2
- import { within, userEvent } from 'storybook/test';
2
+ import { within, userEvent, expect } from 'storybook/test';
3
3
  import { Lock } from '@transferwise/icons';
4
4
  import { useState } from 'react';
5
5
 
@@ -155,6 +155,15 @@ export const BalanceCurrencies: Story = {
155
155
  },
156
156
  };
157
157
 
158
+ export const WithDecimals: Story = {
159
+ args: {
160
+ currencies: [],
161
+ selectedCurrency: exampleCurrency.eur,
162
+ decimals: 4,
163
+ amount: 1234.1412,
164
+ },
165
+ };
166
+
158
167
  export const OpenedInput: Story = {
159
168
  ...MultipleCurrencies,
160
169
  play: async ({ canvasElement }) => {
@@ -1,5 +1,5 @@
1
1
  import type { Meta, StoryObj } from '@storybook/react-webpack5';
2
- import { within, fireEvent } from 'storybook/test';
2
+ import { within, userEvent, fireEvent, expect } from 'storybook/test';
3
3
  import { allModes } from '../../.storybook/modes';
4
4
  import { lorem500 } from '../test-utils';
5
5
  import { Field } from '../field/Field';
@@ -102,3 +102,143 @@ export const SmoothScrollReset: Story = {
102
102
  },
103
103
  },
104
104
  };
105
+
106
+ export const WithDecimals: Story = {
107
+ args: {
108
+ currencies: [],
109
+ decimals: 4,
110
+ amount: 1234.5678,
111
+ },
112
+ play: async ({ canvas }) => {
113
+ const input = canvas.getByRole('textbox');
114
+ await expect(input).toHaveValue('1,234.5678');
115
+ await userEvent.clear(input);
116
+ await userEvent.type(input, '99.123456789');
117
+ await userEvent.tab();
118
+ await expect(input).toHaveValue('99.1235');
119
+ },
120
+ };
121
+
122
+ const eur = {
123
+ value: 'EUR',
124
+ label: 'EUR',
125
+ note: 'Euro',
126
+ currency: 'eur',
127
+ } as const;
128
+
129
+ const bhd = {
130
+ value: 'BHD',
131
+ label: 'BHD',
132
+ note: 'Bahraini dinar',
133
+ currency: 'bhd',
134
+ } as const;
135
+
136
+ const jpy = {
137
+ value: 'JPY',
138
+ label: 'JPY',
139
+ note: 'Japanese yen',
140
+ currency: 'jpy',
141
+ } as const;
142
+
143
+ const sharedProps = {
144
+ currencies: [],
145
+ onAmountChange: () => {},
146
+ onCurrencyChange: () => {},
147
+ } as const;
148
+
149
+ function Row({
150
+ label,
151
+ amount,
152
+ currency,
153
+ decimals,
154
+ }: {
155
+ label: string;
156
+ amount: number;
157
+ currency: { value: string; label: string; note: string; currency: string };
158
+ decimals: number;
159
+ }) {
160
+ return (
161
+ <div
162
+ style={{
163
+ display: 'grid',
164
+ gridTemplateColumns: '240px 1fr 1fr',
165
+ gap: 12,
166
+ alignItems: 'center',
167
+ }}
168
+ >
169
+ <Body as="span" style={{ fontSize: 13, color: '#6b7280' }}>
170
+ {label}
171
+ </Body>
172
+ <Field label={`No decimals prop (${currency.value})`}>
173
+ <MoneyInput {...sharedProps} selectedCurrency={currency} amount={amount} />
174
+ </Field>
175
+ <Field label={`decimals={${decimals}} (${currency.value})`}>
176
+ <MoneyInput
177
+ {...sharedProps}
178
+ selectedCurrency={currency}
179
+ amount={amount}
180
+ decimals={decimals}
181
+ />
182
+ </Field>
183
+ </div>
184
+ );
185
+ }
186
+
187
+ /**
188
+ * Side-by-side comparison of formatAmount (no decimals prop) vs formatNumber (with decimals prop)
189
+ * when decimals matches the currency default. Differences indicate a formatting parity issue.
190
+ *
191
+ * Problem 1: Trailing zero stripping — formatAmount strips ".00" for whole numbers,
192
+ * formatNumber always pads to the requested precision.
193
+ *
194
+ * Problem 2: BHD decimal count — formatAmount renders 2 fractional digits for BHD,
195
+ * but the currencyDecimals map says BHD has 3. formatNumber with decimals=3 shows 3.
196
+ */
197
+ export const DecimalsFormatParity: Story = {
198
+ render: () => (
199
+ <div style={{ display: 'flex', flexDirection: 'column', gap: 16 }}>
200
+ <Body as="p" style={{ fontWeight: 600, marginTop: 8 }}>
201
+ EUR — whole numbers (trailing zero stripping)
202
+ </Body>
203
+ <Row label="amount=0" amount={0} currency={eur} decimals={2} />
204
+ <Row label="amount=1" amount={1} currency={eur} decimals={2} />
205
+ <Row label="amount=42" amount={42} currency={eur} decimals={2} />
206
+ <Row label="amount=100" amount={100} currency={eur} decimals={2} />
207
+ <Row label="amount=1000" amount={1000} currency={eur} decimals={2} />
208
+ <Row label="amount=9999999" amount={9999999} currency={eur} decimals={2} />
209
+
210
+ <Body as="p" style={{ fontWeight: 600, marginTop: 8 }}>
211
+ EUR — fractional amounts (should match)
212
+ </Body>
213
+ <Row label="amount=0.01" amount={0.01} currency={eur} decimals={2} />
214
+ <Row label="amount=0.1" amount={0.1} currency={eur} decimals={2} />
215
+ <Row label="amount=99.9" amount={99.9} currency={eur} decimals={2} />
216
+ <Row label="amount=1234567.89" amount={1234567.89} currency={eur} decimals={2} />
217
+
218
+ <Body as="p" style={{ fontWeight: 600, marginTop: 8 }}>
219
+ BHD — all amounts (formatAmount uses 2 digits, formatNumber uses 3)
220
+ </Body>
221
+ <Row label="amount=0" amount={0} currency={bhd} decimals={3} />
222
+ <Row label="amount=0.001" amount={0.001} currency={bhd} decimals={3} />
223
+ <Row label="amount=0.01" amount={0.01} currency={bhd} decimals={3} />
224
+ <Row label="amount=0.1" amount={0.1} currency={bhd} decimals={3} />
225
+ <Row label="amount=42" amount={42} currency={bhd} decimals={3} />
226
+ <Row label="amount=99.9" amount={99.9} currency={bhd} decimals={3} />
227
+ <Row label="amount=999.99" amount={999.99} currency={bhd} decimals={3} />
228
+ <Row label="amount=1234567.89" amount={1234567.89} currency={bhd} decimals={3} />
229
+
230
+ <Body as="p" style={{ fontWeight: 600, marginTop: 8 }}>
231
+ JPY — zero-decimal currency (should always match)
232
+ </Body>
233
+ <Row label="amount=0" amount={0} currency={jpy} decimals={0} />
234
+ <Row label="amount=1" amount={1} currency={jpy} decimals={0} />
235
+ <Row label="amount=1000" amount={1000} currency={jpy} decimals={0} />
236
+ <Row label="amount=1234567" amount={1234567} currency={jpy} decimals={0} />
237
+ </div>
238
+ ),
239
+ parameters: {
240
+ chromatic: {
241
+ disableSnapshot: true,
242
+ },
243
+ },
244
+ };
@@ -253,6 +253,45 @@ describe('Money Input', () => {
253
253
  await userEvent.tab();
254
254
  expect(input).toHaveValue('1,234,567.65');
255
255
  });
256
+
257
+ it('uses custom decimals when specified', async () => {
258
+ customRender({ decimals: 4 });
259
+ const input = getInput();
260
+ await userEvent.clear(input);
261
+ await userEvent.type(input, '1234.56789');
262
+ await userEvent.tab();
263
+ expect(input).toHaveValue('1,234.5679');
264
+ });
265
+
266
+ it('uses custom decimals of 0', async () => {
267
+ customRender({ decimals: 0 });
268
+ const input = getInput();
269
+ await userEvent.clear(input);
270
+ await userEvent.type(input, '1234.56');
271
+ await userEvent.tab();
272
+ expect(input).toHaveValue('1,235');
273
+ });
274
+
275
+ it('ignores custom decimals override for zero-decimal currencies like JPY', async () => {
276
+ const jpyCurrency: CurrencyOptionItem = {
277
+ value: 'JPY',
278
+ label: 'JPY',
279
+ note: 'Japanese yen',
280
+ currency: 'jpy',
281
+ };
282
+ customRender({
283
+ decimals: 4,
284
+ selectedCurrency: jpyCurrency,
285
+ currencies: [jpyCurrency],
286
+ amount: 1234,
287
+ });
288
+ const input = getInput();
289
+ expect(input).toHaveValue('1,234');
290
+ await userEvent.clear(input);
291
+ await userEvent.type(input, '5678.9999');
292
+ await userEvent.tab();
293
+ expect(input).toHaveValue('5,679');
294
+ });
256
295
  });
257
296
 
258
297
  it('calls onAmountChange with parsed and formatted value', async () => {
@@ -263,6 +302,12 @@ describe('Money Input', () => {
263
302
  expect(initialProps.onAmountChange).toHaveBeenCalledWith(1000.65);
264
303
  });
265
304
 
305
+ it('calls onAmountChange with value rounded to custom decimals', async () => {
306
+ customRender({ decimals: 4, amount: null });
307
+ await userEvent.type(getInput(), '12.34567');
308
+ expect(initialProps.onAmountChange).toHaveBeenCalledWith(12.3457);
309
+ });
310
+
266
311
  it('calls onAmountChange when input value is empty', async () => {
267
312
  customRender();
268
313
  await userEvent.clear(getInput());