@transferwise/components 46.161.1 → 46.161.2

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 (691) hide show
  1. package/build/Accordion/Accordion.js.map +1 -1
  2. package/build/Accordion/Accordion.mjs.map +1 -1
  3. package/build/Accordion/AccordionItem/AccordionItem.js.map +1 -1
  4. package/build/Accordion/AccordionItem/AccordionItem.mjs.map +1 -1
  5. package/build/AvatarLayout/AvatarLayout.js.map +1 -1
  6. package/build/AvatarLayout/AvatarLayout.mjs.map +1 -1
  7. package/build/AvatarView/AvatarView.js.map +1 -1
  8. package/build/AvatarView/AvatarView.mjs.map +1 -1
  9. package/build/AvatarView/Dot/Dot.js.map +1 -1
  10. package/build/AvatarView/Dot/Dot.mjs.map +1 -1
  11. package/build/Body/Body.js.map +1 -1
  12. package/build/Body/Body.mjs.map +1 -1
  13. package/build/Button/Button.js.map +1 -1
  14. package/build/Button/Button.mjs.map +1 -1
  15. package/build/Button/Button.resolver.js.map +1 -1
  16. package/build/Button/Button.resolver.mjs.map +1 -1
  17. package/build/Button/LegacyButton/LegacyButton.js.map +1 -1
  18. package/build/Button/LegacyButton/LegacyButton.mjs.map +1 -1
  19. package/build/Button/LegacyButton/utils/legacyUtils.js.map +1 -1
  20. package/build/Button/LegacyButton/utils/legacyUtils.mjs.map +1 -1
  21. package/build/Button/classMap.js.map +1 -1
  22. package/build/Button/classMap.mjs.map +1 -1
  23. package/build/Calendar/Calendar.constants.js.map +1 -1
  24. package/build/Calendar/Calendar.constants.mjs.map +1 -1
  25. package/build/Calendar/Calendar.js.map +1 -1
  26. package/build/Calendar/Calendar.messages.js.map +1 -1
  27. package/build/Calendar/Calendar.messages.mjs.map +1 -1
  28. package/build/Calendar/Calendar.mjs.map +1 -1
  29. package/build/Calendar/DateHeader/DateHeader.js.map +1 -1
  30. package/build/Calendar/DateHeader/DateHeader.mjs.map +1 -1
  31. package/build/Calendar/DayCalendar/DayCalendar.js.map +1 -1
  32. package/build/Calendar/DayCalendar/DayCalendar.mjs.map +1 -1
  33. package/build/Calendar/DayCalendar/Table/DayCalendarTable.js.map +1 -1
  34. package/build/Calendar/DayCalendar/Table/DayCalendarTable.mjs.map +1 -1
  35. package/build/Calendar/GetFocusableTime/GetFocusableTime.js.map +1 -1
  36. package/build/Calendar/GetFocusableTime/GetFocusableTime.mjs.map +1 -1
  37. package/build/Calendar/GetStartOfDay/GetStartOfDay.js.map +1 -1
  38. package/build/Calendar/GetStartOfDay/GetStartOfDay.mjs.map +1 -1
  39. package/build/Calendar/MonthCalendar/MonthCalendar.js.map +1 -1
  40. package/build/Calendar/MonthCalendar/MonthCalendar.mjs.map +1 -1
  41. package/build/Calendar/MonthCalendar/Table/MonthCalendarTable.js.map +1 -1
  42. package/build/Calendar/MonthCalendar/Table/MonthCalendarTable.mjs.map +1 -1
  43. package/build/Calendar/TableLink/TableLink.js.map +1 -1
  44. package/build/Calendar/TableLink/TableLink.mjs.map +1 -1
  45. package/build/Calendar/YearCalendar/Table/YearCalendarTable.js.map +1 -1
  46. package/build/Calendar/YearCalendar/Table/YearCalendarTable.mjs.map +1 -1
  47. package/build/Calendar/YearCalendar/YearCalendar.js.map +1 -1
  48. package/build/Calendar/YearCalendar/YearCalendar.mjs.map +1 -1
  49. package/build/Calendar/_helpers/clampToDayViewBoundary/clampToDayViewBoundary.js.map +1 -1
  50. package/build/Calendar/_helpers/clampToDayViewBoundary/clampToDayViewBoundary.mjs.map +1 -1
  51. package/build/Calendar/_helpers/hasDisabledDatesInMonth/hasDisabledDatesInMonth.js.map +1 -1
  52. package/build/Calendar/_helpers/hasDisabledDatesInMonth/hasDisabledDatesInMonth.mjs.map +1 -1
  53. package/build/Calendar/_helpers/isDateDisabled/isDateDisabled.js.map +1 -1
  54. package/build/Calendar/_helpers/isDateDisabled/isDateDisabled.mjs.map +1 -1
  55. package/build/Carousel/Carousel.js.map +1 -1
  56. package/build/Carousel/Carousel.mjs.map +1 -1
  57. package/build/Checkbox/Checkbox.js.map +1 -1
  58. package/build/Checkbox/Checkbox.mjs.map +1 -1
  59. package/build/CheckboxButton/CheckboxButton.js.map +1 -1
  60. package/build/CheckboxButton/CheckboxButton.mjs.map +1 -1
  61. package/build/Chevron/Chevron.js.map +1 -1
  62. package/build/Chevron/Chevron.mjs.map +1 -1
  63. package/build/Chips/Chip/Chip.js.map +1 -1
  64. package/build/Chips/Chip/Chip.mjs.map +1 -1
  65. package/build/Chips/Chips.js.map +1 -1
  66. package/build/Chips/Chips.messages.js.map +1 -1
  67. package/build/Chips/Chips.messages.mjs.map +1 -1
  68. package/build/Chips/Chips.mjs.map +1 -1
  69. package/build/CircularButton/CircularButton.js.map +1 -1
  70. package/build/CircularButton/CircularButton.mjs.map +1 -1
  71. package/build/Container/Container.js.map +1 -1
  72. package/build/Container/Container.mjs.map +1 -1
  73. package/build/DateInput/DateInput.js.map +1 -1
  74. package/build/DateInput/DateInput.messages.js.map +1 -1
  75. package/build/DateInput/DateInput.messages.mjs.map +1 -1
  76. package/build/DateInput/DateInput.mjs.map +1 -1
  77. package/build/DateInput/utils/convertToLocalMidnight/convertToLocalMidnight.js.map +1 -1
  78. package/build/DateInput/utils/convertToLocalMidnight/convertToLocalMidnight.mjs.map +1 -1
  79. package/build/DateLookup/DateLookup.js.map +1 -1
  80. package/build/DateLookup/DateLookup.mjs.map +1 -1
  81. package/build/DateLookup/DateTrigger/DateTrigger.js.map +1 -1
  82. package/build/DateLookup/DateTrigger/DateTrigger.messages.js.map +1 -1
  83. package/build/DateLookup/DateTrigger/DateTrigger.messages.mjs.map +1 -1
  84. package/build/DateLookup/DateTrigger/DateTrigger.mjs.map +1 -1
  85. package/build/Decision/Decision.js.map +1 -1
  86. package/build/Decision/Decision.mjs.map +1 -1
  87. package/build/DefinitionList/DefinitionList.js.map +1 -1
  88. package/build/DefinitionList/DefinitionList.mjs.map +1 -1
  89. package/build/Dimmer/Dimmer.js.map +1 -1
  90. package/build/Dimmer/Dimmer.mjs.map +1 -1
  91. package/build/Dimmer/dimmerManager/dimmerManager.js.map +1 -1
  92. package/build/Dimmer/dimmerManager/dimmerManager.mjs.map +1 -1
  93. package/build/Display/Display.js.map +1 -1
  94. package/build/Display/Display.mjs.map +1 -1
  95. package/build/Divider/Divider.js.map +1 -1
  96. package/build/Divider/Divider.mjs.map +1 -1
  97. package/build/Drawer/Drawer.js.map +1 -1
  98. package/build/Drawer/Drawer.mjs.map +1 -1
  99. package/build/DropFade/DropFade.js.map +1 -1
  100. package/build/DropFade/DropFade.mjs.map +1 -1
  101. package/build/Emphasis/Emphasis.js.map +1 -1
  102. package/build/Emphasis/Emphasis.mjs.map +1 -1
  103. package/build/Emphasis/EmphasisHtmlTransformer.js.map +1 -1
  104. package/build/Emphasis/EmphasisHtmlTransformer.mjs.map +1 -1
  105. package/build/ExpressiveMoneyInput/AmountInput/AmountInput.js.map +1 -1
  106. package/build/ExpressiveMoneyInput/AmountInput/AmountInput.mjs.map +1 -1
  107. package/build/ExpressiveMoneyInput/AmountInput/utils.js.map +1 -1
  108. package/build/ExpressiveMoneyInput/AmountInput/utils.mjs.map +1 -1
  109. package/build/ExpressiveMoneyInput/AnimatedNumber/AnimatedNumber.js.map +1 -1
  110. package/build/ExpressiveMoneyInput/AnimatedNumber/AnimatedNumber.mjs.map +1 -1
  111. package/build/ExpressiveMoneyInput/Chevron/Chevron.js.map +1 -1
  112. package/build/ExpressiveMoneyInput/Chevron/Chevron.mjs.map +1 -1
  113. package/build/ExpressiveMoneyInput/CurrencySelector/CurrencySelector.js.map +1 -1
  114. package/build/ExpressiveMoneyInput/CurrencySelector/CurrencySelector.mjs.map +1 -1
  115. package/build/ExpressiveMoneyInput/ExpressiveMoneyInput.js.map +1 -1
  116. package/build/ExpressiveMoneyInput/ExpressiveMoneyInput.messages.js.map +1 -1
  117. package/build/ExpressiveMoneyInput/ExpressiveMoneyInput.messages.mjs.map +1 -1
  118. package/build/ExpressiveMoneyInput/ExpressiveMoneyInput.mjs.map +1 -1
  119. package/build/ExpressiveMoneyInput/hooks/useFocus.js.map +1 -1
  120. package/build/ExpressiveMoneyInput/hooks/useFocus.mjs.map +1 -1
  121. package/build/ExpressiveMoneyInput/hooks/useInputStyle.js.map +1 -1
  122. package/build/ExpressiveMoneyInput/hooks/useInputStyle.mjs.map +1 -1
  123. package/build/Field/Field.js.map +1 -1
  124. package/build/Field/Field.messages.js.map +1 -1
  125. package/build/Field/Field.messages.mjs.map +1 -1
  126. package/build/Field/Field.mjs.map +1 -1
  127. package/build/FlowNavigation/AnimatedLabel/AnimatedLabel.js.map +1 -1
  128. package/build/FlowNavigation/AnimatedLabel/AnimatedLabel.mjs.map +1 -1
  129. package/build/FlowNavigation/FlowNavigation.js.map +1 -1
  130. package/build/FlowNavigation/FlowNavigation.messages.js.map +1 -1
  131. package/build/FlowNavigation/FlowNavigation.messages.mjs.map +1 -1
  132. package/build/FlowNavigation/FlowNavigation.mjs.map +1 -1
  133. package/build/Header/Header.js.map +1 -1
  134. package/build/Header/Header.mjs.map +1 -1
  135. package/build/IconButton/IconButton.js.map +1 -1
  136. package/build/IconButton/IconButton.mjs.map +1 -1
  137. package/build/Image/Image.js.map +1 -1
  138. package/build/Image/Image.mjs.map +1 -1
  139. package/build/Info/Info.js.map +1 -1
  140. package/build/Info/Info.messages.js.map +1 -1
  141. package/build/Info/Info.messages.mjs.map +1 -1
  142. package/build/Info/Info.mjs.map +1 -1
  143. package/build/Info/infoPresentations.js.map +1 -1
  144. package/build/Info/infoPresentations.mjs.map +1 -1
  145. package/build/InputWithDisplayFormat/InputWithDisplayFormat.js.map +1 -1
  146. package/build/InputWithDisplayFormat/InputWithDisplayFormat.mjs.map +1 -1
  147. package/build/Inputs/Input/Input.js.map +1 -1
  148. package/build/Inputs/Input/Input.mjs.map +1 -1
  149. package/build/Inputs/InputGroup/InputGroup.js.map +1 -1
  150. package/build/Inputs/InputGroup/InputGroup.mjs.map +1 -1
  151. package/build/Inputs/SearchInput/SearchInput.js.map +1 -1
  152. package/build/Inputs/SearchInput/SearchInput.mjs.map +1 -1
  153. package/build/Inputs/SelectInput/BottomSheet/SelectInputBottomSheet.js.map +1 -1
  154. package/build/Inputs/SelectInput/BottomSheet/SelectInputBottomSheet.mjs.map +1 -1
  155. package/build/Inputs/SelectInput/ButtonInput/SelectInputButtonInput.js.map +1 -1
  156. package/build/Inputs/SelectInput/ButtonInput/SelectInputButtonInput.mjs.map +1 -1
  157. package/build/Inputs/SelectInput/ClearButton/SelectInputClearButton.js.map +1 -1
  158. package/build/Inputs/SelectInput/ClearButton/SelectInputClearButton.mjs.map +1 -1
  159. package/build/Inputs/SelectInput/DefaultRenderTrigger/SelectInputDefaultRenderTrigger.js.map +1 -1
  160. package/build/Inputs/SelectInput/DefaultRenderTrigger/SelectInputDefaultRenderTrigger.mjs.map +1 -1
  161. package/build/Inputs/SelectInput/ItemView/GroupItemView/SelectInputGroupItemView.js.map +1 -1
  162. package/build/Inputs/SelectInput/ItemView/GroupItemView/SelectInputGroupItemView.mjs.map +1 -1
  163. package/build/Inputs/SelectInput/ItemView/SelectInputItemView.js.map +1 -1
  164. package/build/Inputs/SelectInput/ItemView/SelectInputItemView.mjs.map +1 -1
  165. package/build/Inputs/SelectInput/Option/SelectInputOption.js.map +1 -1
  166. package/build/Inputs/SelectInput/Option/SelectInputOption.mjs.map +1 -1
  167. package/build/Inputs/SelectInput/OptionContent/SelectInputOptionContent.js.map +1 -1
  168. package/build/Inputs/SelectInput/OptionContent/SelectInputOptionContent.mjs.map +1 -1
  169. package/build/Inputs/SelectInput/Options/OptionsContainer/SelectInputOptionsContainer.js.map +1 -1
  170. package/build/Inputs/SelectInput/Options/OptionsContainer/SelectInputOptionsContainer.mjs.map +1 -1
  171. package/build/Inputs/SelectInput/Options/SelectInputOptions.js.map +1 -1
  172. package/build/Inputs/SelectInput/Options/SelectInputOptions.mjs.map +1 -1
  173. package/build/Inputs/SelectInput/Popover/SelectInputPopover.js.map +1 -1
  174. package/build/Inputs/SelectInput/Popover/SelectInputPopover.mjs.map +1 -1
  175. package/build/Inputs/SelectInput/SelectInput.contexts.js.map +1 -1
  176. package/build/Inputs/SelectInput/SelectInput.contexts.mjs.map +1 -1
  177. package/build/Inputs/SelectInput/SelectInput.js.map +1 -1
  178. package/build/Inputs/SelectInput/SelectInput.messages.js.map +1 -1
  179. package/build/Inputs/SelectInput/SelectInput.messages.mjs.map +1 -1
  180. package/build/Inputs/SelectInput/SelectInput.mjs.map +1 -1
  181. package/build/Inputs/SelectInput/SelectInput.utils.js.map +1 -1
  182. package/build/Inputs/SelectInput/SelectInput.utils.mjs.map +1 -1
  183. package/build/Inputs/SelectInput/TriggerButton/SelectInputTriggerButton.js.map +1 -1
  184. package/build/Inputs/SelectInput/TriggerButton/SelectInputTriggerButton.mjs.map +1 -1
  185. package/build/Inputs/SelectInput/constants.js.map +1 -1
  186. package/build/Inputs/SelectInput/constants.mjs.map +1 -1
  187. package/build/Inputs/SelectInput/hooks/useTypeahead.js.map +1 -1
  188. package/build/Inputs/SelectInput/hooks/useTypeahead.mjs.map +1 -1
  189. package/build/Inputs/TextArea/TextArea.js.map +1 -1
  190. package/build/Inputs/TextArea/TextArea.mjs.map +1 -1
  191. package/build/Inputs/_common.js.map +1 -1
  192. package/build/Inputs/_common.mjs.map +1 -1
  193. package/build/Inputs/contexts.js.map +1 -1
  194. package/build/Inputs/contexts.mjs.map +1 -1
  195. package/build/InstructionsList/InstructionsList.js.map +1 -1
  196. package/build/InstructionsList/InstructionsList.mjs.map +1 -1
  197. package/build/Label/Label.js.map +1 -1
  198. package/build/Label/Label.messages.js.map +1 -1
  199. package/build/Label/Label.messages.mjs.map +1 -1
  200. package/build/Label/Label.mjs.map +1 -1
  201. package/build/Link/Link.js.map +1 -1
  202. package/build/Link/Link.messages.js.map +1 -1
  203. package/build/Link/Link.messages.mjs.map +1 -1
  204. package/build/Link/Link.mjs.map +1 -1
  205. package/build/List/List.js.map +1 -1
  206. package/build/List/List.mjs.map +1 -1
  207. package/build/ListItem/AdditionalInfo/ListItemAdditionalInfo.js.map +1 -1
  208. package/build/ListItem/AdditionalInfo/ListItemAdditionalInfo.mjs.map +1 -1
  209. package/build/ListItem/AvatarLayout/ListItemAvatarLayout.js.map +1 -1
  210. package/build/ListItem/AvatarLayout/ListItemAvatarLayout.mjs.map +1 -1
  211. package/build/ListItem/AvatarView/ListItemAvatarView.js.map +1 -1
  212. package/build/ListItem/AvatarView/ListItemAvatarView.mjs.map +1 -1
  213. package/build/ListItem/Button/ListItemButton.js.map +1 -1
  214. package/build/ListItem/Button/ListItemButton.mjs.map +1 -1
  215. package/build/ListItem/Checkbox/ListItemCheckbox.js.map +1 -1
  216. package/build/ListItem/Checkbox/ListItemCheckbox.mjs.map +1 -1
  217. package/build/ListItem/IconButton/ListItemIconButton.js.map +1 -1
  218. package/build/ListItem/IconButton/ListItemIconButton.mjs.map +1 -1
  219. package/build/ListItem/Image/ListItemImage.js.map +1 -1
  220. package/build/ListItem/Image/ListItemImage.mjs.map +1 -1
  221. package/build/ListItem/ListItem.js.map +1 -1
  222. package/build/ListItem/ListItem.mjs.map +1 -1
  223. package/build/ListItem/ListItemContext.js.map +1 -1
  224. package/build/ListItem/ListItemContext.mjs.map +1 -1
  225. package/build/ListItem/Navigation/ListItemNavigation.js.map +1 -1
  226. package/build/ListItem/Navigation/ListItemNavigation.mjs.map +1 -1
  227. package/build/ListItem/Prompt/ListItemPrompt.js.map +1 -1
  228. package/build/ListItem/Prompt/ListItemPrompt.mjs.map +1 -1
  229. package/build/ListItem/Radio/ListItemRadio.js.map +1 -1
  230. package/build/ListItem/Radio/ListItemRadio.mjs.map +1 -1
  231. package/build/ListItem/Switch/ListItemSwitch.js.map +1 -1
  232. package/build/ListItem/Switch/ListItemSwitch.mjs.map +1 -1
  233. package/build/ListItem/useListItemControl.js.map +1 -1
  234. package/build/ListItem/useListItemControl.mjs.map +1 -1
  235. package/build/ListItem/useListItemMedia.js.map +1 -1
  236. package/build/ListItem/useListItemMedia.mjs.map +1 -1
  237. package/build/Loader/Loader.js.map +1 -1
  238. package/build/Loader/Loader.mjs.map +1 -1
  239. package/build/Logo/Logo.js.map +1 -1
  240. package/build/Logo/Logo.mjs.map +1 -1
  241. package/build/Logo/logo-assets.js.map +1 -1
  242. package/build/Logo/logo-assets.mjs.map +1 -1
  243. package/build/Markdown/Markdown.js.map +1 -1
  244. package/build/Markdown/Markdown.mjs.map +1 -1
  245. package/build/Markup/Markup.js.map +1 -1
  246. package/build/Markup/Markup.mjs.map +1 -1
  247. package/build/Markup/constants.js.map +1 -1
  248. package/build/Markup/constants.mjs.map +1 -1
  249. package/build/Markup/utils/parseMarkup.js.map +1 -1
  250. package/build/Markup/utils/parseMarkup.mjs.map +1 -1
  251. package/build/Markup/utils/sanitise.js.map +1 -1
  252. package/build/Markup/utils/sanitise.mjs.map +1 -1
  253. package/build/Modal/Modal.js.map +1 -1
  254. package/build/Modal/Modal.mjs.map +1 -1
  255. package/build/Money/Money.js.map +1 -1
  256. package/build/Money/Money.mjs.map +1 -1
  257. package/build/MoneyInput/MoneyInput.js.map +1 -1
  258. package/build/MoneyInput/MoneyInput.messages.js.map +1 -1
  259. package/build/MoneyInput/MoneyInput.messages.mjs.map +1 -1
  260. package/build/MoneyInput/MoneyInput.mjs.map +1 -1
  261. package/build/MoneyInput/currencyFormatting.js.map +1 -1
  262. package/build/MoneyInput/currencyFormatting.mjs.map +1 -1
  263. package/build/Nudge/Nudge.js.map +1 -1
  264. package/build/Nudge/Nudge.mjs.map +1 -1
  265. package/build/PhoneNumberInput/Data/countries.js.map +1 -1
  266. package/build/PhoneNumberInput/Data/countries.mjs.map +1 -1
  267. package/build/PhoneNumberInput/PhoneNumberInput.js.map +1 -1
  268. package/build/PhoneNumberInput/PhoneNumberInput.messages.js.map +1 -1
  269. package/build/PhoneNumberInput/PhoneNumberInput.messages.mjs.map +1 -1
  270. package/build/PhoneNumberInput/PhoneNumberInput.mjs.map +1 -1
  271. package/build/PhoneNumberInput/utils/cleanNumber/cleanNumber.js.map +1 -1
  272. package/build/PhoneNumberInput/utils/cleanNumber/cleanNumber.mjs.map +1 -1
  273. package/build/PhoneNumberInput/utils/excludeCountries/excludeCountries.js.map +1 -1
  274. package/build/PhoneNumberInput/utils/excludeCountries/excludeCountries.mjs.map +1 -1
  275. package/build/PhoneNumberInput/utils/explodeNumberModel/index.js.map +1 -1
  276. package/build/PhoneNumberInput/utils/explodeNumberModel/index.mjs.map +1 -1
  277. package/build/PhoneNumberInput/utils/findCountryByCode/index.js.map +1 -1
  278. package/build/PhoneNumberInput/utils/findCountryByCode/index.mjs.map +1 -1
  279. package/build/PhoneNumberInput/utils/findCountryByPrefix/index.js.map +1 -1
  280. package/build/PhoneNumberInput/utils/findCountryByPrefix/index.mjs.map +1 -1
  281. package/build/PhoneNumberInput/utils/groupCountriesByPrefix/groupCountriesByPrefix.js.map +1 -1
  282. package/build/PhoneNumberInput/utils/groupCountriesByPrefix/groupCountriesByPrefix.mjs.map +1 -1
  283. package/build/PhoneNumberInput/utils/isValidPhoneNumber/isValidPhoneNumber.js.map +1 -1
  284. package/build/PhoneNumberInput/utils/isValidPhoneNumber/isValidPhoneNumber.mjs.map +1 -1
  285. package/build/PhoneNumberInput/utils/longestMatchingPrefix/index.js.map +1 -1
  286. package/build/PhoneNumberInput/utils/longestMatchingPrefix/index.mjs.map +1 -1
  287. package/build/PhoneNumberInput/utils/setDefaultPrefix/index.js.map +1 -1
  288. package/build/PhoneNumberInput/utils/setDefaultPrefix/index.mjs.map +1 -1
  289. package/build/PhoneNumberInput/utils/sortArrayByProperty/sortArrayByProperty.js.map +1 -1
  290. package/build/PhoneNumberInput/utils/sortArrayByProperty/sortArrayByProperty.mjs.map +1 -1
  291. package/build/Popover/Popover.js.map +1 -1
  292. package/build/Popover/Popover.mjs.map +1 -1
  293. package/build/Primitives/PrimitiveAnchor/PrimitiveAnchor.js.map +1 -1
  294. package/build/Primitives/PrimitiveAnchor/PrimitiveAnchor.mjs.map +1 -1
  295. package/build/Primitives/PrimitiveButton/PrimitiveButton.js.map +1 -1
  296. package/build/Primitives/PrimitiveButton/PrimitiveButton.mjs.map +1 -1
  297. package/build/ProcessIndicator/ProcessIndicator.js.map +1 -1
  298. package/build/ProcessIndicator/ProcessIndicator.mjs.map +1 -1
  299. package/build/Progress/Progress.js.map +1 -1
  300. package/build/Progress/Progress.mjs.map +1 -1
  301. package/build/ProgressBar/ProgressBar.js.map +1 -1
  302. package/build/ProgressBar/ProgressBar.mjs.map +1 -1
  303. package/build/PromoCard/CardGroup/PromoCardGroup.js.map +1 -1
  304. package/build/PromoCard/CardGroup/PromoCardGroup.mjs.map +1 -1
  305. package/build/PromoCard/Indicator/PromoCardIndicator.js.map +1 -1
  306. package/build/PromoCard/Indicator/PromoCardIndicator.mjs.map +1 -1
  307. package/build/PromoCard/PromoCard.js.map +1 -1
  308. package/build/PromoCard/PromoCard.mjs.map +1 -1
  309. package/build/PromoCard/PromoCardContext.js.map +1 -1
  310. package/build/PromoCard/PromoCardContext.mjs.map +1 -1
  311. package/build/Prompt/ActionPrompt/ActionPrompt.js.map +1 -1
  312. package/build/Prompt/ActionPrompt/ActionPrompt.mjs.map +1 -1
  313. package/build/Prompt/CriticalBanner/CriticalBanner.js.map +1 -1
  314. package/build/Prompt/CriticalBanner/CriticalBanner.mjs.map +1 -1
  315. package/build/Prompt/CriticalBanner/helpers.js.map +1 -1
  316. package/build/Prompt/CriticalBanner/helpers.mjs.map +1 -1
  317. package/build/Prompt/InfoPrompt/InfoPrompt.js.map +1 -1
  318. package/build/Prompt/InfoPrompt/InfoPrompt.mjs.map +1 -1
  319. package/build/Prompt/InlinePrompt/InlinePrompt.js.map +1 -1
  320. package/build/Prompt/InlinePrompt/InlinePrompt.mjs.map +1 -1
  321. package/build/Prompt/PrimitivePrompt/PrimitivePrompt.js.map +1 -1
  322. package/build/Prompt/PrimitivePrompt/PrimitivePrompt.mjs.map +1 -1
  323. package/build/Prompt/common/Expander/Expander.js.map +1 -1
  324. package/build/Prompt/common/Expander/Expander.messages.js.map +1 -1
  325. package/build/Prompt/common/Expander/Expander.messages.mjs.map +1 -1
  326. package/build/Prompt/common/Expander/Expander.mjs.map +1 -1
  327. package/build/Prompt/helpers/promptMedia.js.map +1 -1
  328. package/build/Prompt/helpers/promptMedia.mjs.map +1 -1
  329. package/build/Provider/Direction/DirectionProvider.js.map +1 -1
  330. package/build/Provider/Direction/DirectionProvider.mjs.map +1 -1
  331. package/build/Provider/Language/LanguageProvider.js.map +1 -1
  332. package/build/Provider/Language/LanguageProvider.mjs.map +1 -1
  333. package/build/Provider/Provider.js.map +1 -1
  334. package/build/Provider/Provider.mjs.map +1 -1
  335. package/build/Provider/overlay/OverlayIdProvider.js.map +1 -1
  336. package/build/Provider/overlay/OverlayIdProvider.mjs.map +1 -1
  337. package/build/Radio/Radio.js.map +1 -1
  338. package/build/Radio/Radio.mjs.map +1 -1
  339. package/build/RadioGroup/RadioGroup.js.map +1 -1
  340. package/build/RadioGroup/RadioGroup.mjs.map +1 -1
  341. package/build/Section/Section.js.map +1 -1
  342. package/build/Section/Section.mjs.map +1 -1
  343. package/build/SegmentedControl/SegmentedControl.js.map +1 -1
  344. package/build/SegmentedControl/SegmentedControl.mjs.map +1 -1
  345. package/build/SentimentSurface/SentimentSurface.js.map +1 -1
  346. package/build/SentimentSurface/SentimentSurface.mjs.map +1 -1
  347. package/build/SlidingPanel/SlidingPanel.js.map +1 -1
  348. package/build/SlidingPanel/SlidingPanel.mjs.map +1 -1
  349. package/build/Snackbar/Snackbar.js.map +1 -1
  350. package/build/Snackbar/Snackbar.mjs.map +1 -1
  351. package/build/Snackbar/SnackbarContext.js.map +1 -1
  352. package/build/Snackbar/SnackbarContext.mjs.map +1 -1
  353. package/build/Snackbar/SnackbarProvider.js.map +1 -1
  354. package/build/Snackbar/SnackbarProvider.mjs.map +1 -1
  355. package/build/Snackbar/useSnackbar.js.map +1 -1
  356. package/build/Snackbar/useSnackbar.mjs.map +1 -1
  357. package/build/StatusIcon/StatusIcon.js.map +1 -1
  358. package/build/StatusIcon/StatusIcon.messages.js.map +1 -1
  359. package/build/StatusIcon/StatusIcon.messages.mjs.map +1 -1
  360. package/build/StatusIcon/StatusIcon.mjs.map +1 -1
  361. package/build/Stepper/Stepper.js.map +1 -1
  362. package/build/Stepper/Stepper.mjs.map +1 -1
  363. package/build/Stepper/deviceDetection.js.map +1 -1
  364. package/build/Stepper/deviceDetection.mjs.map +1 -1
  365. package/build/Sticky/Sticky.js.map +1 -1
  366. package/build/Sticky/Sticky.mjs.map +1 -1
  367. package/build/Switch/Switch.js.map +1 -1
  368. package/build/Switch/Switch.mjs.map +1 -1
  369. package/build/Table/Cell/TableCell.js.map +1 -1
  370. package/build/Table/Cell/TableCell.mjs.map +1 -1
  371. package/build/Table/Header/TableHeader.js.map +1 -1
  372. package/build/Table/Header/TableHeader.mjs.map +1 -1
  373. package/build/Table/Row/TableRow.js.map +1 -1
  374. package/build/Table/Row/TableRow.mjs.map +1 -1
  375. package/build/Table/StatusText/TableStatusText.js.map +1 -1
  376. package/build/Table/StatusText/TableStatusText.mjs.map +1 -1
  377. package/build/Table/Table.js.map +1 -1
  378. package/build/Table/Table.messages.js.map +1 -1
  379. package/build/Table/Table.messages.mjs.map +1 -1
  380. package/build/Table/Table.mjs.map +1 -1
  381. package/build/Tabs/Tab/Tab.js.map +1 -1
  382. package/build/Tabs/Tab/Tab.mjs.map +1 -1
  383. package/build/Tabs/TabList/TabList.js.map +1 -1
  384. package/build/Tabs/TabList/TabList.mjs.map +1 -1
  385. package/build/Tabs/TabPanel/TabPanel.js.map +1 -1
  386. package/build/Tabs/TabPanel/TabPanel.mjs.map +1 -1
  387. package/build/Tabs/Tabs.js.map +1 -1
  388. package/build/Tabs/Tabs.mjs.map +1 -1
  389. package/build/Tabs/utils.js.map +1 -1
  390. package/build/Tabs/utils.mjs.map +1 -1
  391. package/build/Tag/Tag.js.map +1 -1
  392. package/build/Tag/Tag.mjs.map +1 -1
  393. package/build/TextareaWithDisplayFormat/TextareaWithDisplayFormat.js.map +1 -1
  394. package/build/TextareaWithDisplayFormat/TextareaWithDisplayFormat.mjs.map +1 -1
  395. package/build/Tile/Tile.js.map +1 -1
  396. package/build/Tile/Tile.mjs.map +1 -1
  397. package/build/Title/Title.js.map +1 -1
  398. package/build/Title/Title.mjs.map +1 -1
  399. package/build/Tooltip/Tooltip.js.map +1 -1
  400. package/build/Tooltip/Tooltip.mjs.map +1 -1
  401. package/build/Typeahead/Typeahead.js.map +1 -1
  402. package/build/Typeahead/Typeahead.messages.js.map +1 -1
  403. package/build/Typeahead/Typeahead.messages.mjs.map +1 -1
  404. package/build/Typeahead/Typeahead.mjs.map +1 -1
  405. package/build/Typeahead/TypeaheadInput/TypeaheadInput.js.map +1 -1
  406. package/build/Typeahead/TypeaheadInput/TypeaheadInput.mjs.map +1 -1
  407. package/build/Typeahead/TypeaheadOption/TypeaheadOption.js.map +1 -1
  408. package/build/Typeahead/TypeaheadOption/TypeaheadOption.mjs.map +1 -1
  409. package/build/Typeahead/Util/highlight.js.map +1 -1
  410. package/build/Typeahead/Util/highlight.mjs.map +1 -1
  411. package/build/Upload/Steps/CompleteStep/CompleteStep.js.map +1 -1
  412. package/build/Upload/Steps/CompleteStep/CompleteStep.mjs.map +1 -1
  413. package/build/Upload/Steps/ProcessingStep/ProcessingStep.js.map +1 -1
  414. package/build/Upload/Steps/ProcessingStep/ProcessingStep.mjs.map +1 -1
  415. package/build/Upload/Steps/UploadImageStep/UploadImageStep.js.map +1 -1
  416. package/build/Upload/Steps/UploadImageStep/UploadImageStep.mjs.map +1 -1
  417. package/build/Upload/Upload.js.map +1 -1
  418. package/build/Upload/Upload.messages.js.map +1 -1
  419. package/build/Upload/Upload.messages.mjs.map +1 -1
  420. package/build/Upload/Upload.mjs.map +1 -1
  421. package/build/Upload/utils/asyncFileRead/asyncFileRead.js.map +1 -1
  422. package/build/Upload/utils/asyncFileRead/asyncFileRead.mjs.map +1 -1
  423. package/build/Upload/utils/getFileType/getFileType.js.map +1 -1
  424. package/build/Upload/utils/getFileType/getFileType.mjs.map +1 -1
  425. package/build/Upload/utils/isSizeValid/isSizeValid.js.map +1 -1
  426. package/build/Upload/utils/isSizeValid/isSizeValid.mjs.map +1 -1
  427. package/build/Upload/utils/isTypeValid/isTypeValid.js.map +1 -1
  428. package/build/Upload/utils/isTypeValid/isTypeValid.mjs.map +1 -1
  429. package/build/Upload/utils/postData/postData.js.map +1 -1
  430. package/build/Upload/utils/postData/postData.mjs.map +1 -1
  431. package/build/UploadInput/UploadButton/UploadButton.js.map +1 -1
  432. package/build/UploadInput/UploadButton/UploadButton.messages.js.map +1 -1
  433. package/build/UploadInput/UploadButton/UploadButton.messages.mjs.map +1 -1
  434. package/build/UploadInput/UploadButton/UploadButton.mjs.map +1 -1
  435. package/build/UploadInput/UploadButton/defaults.js.map +1 -1
  436. package/build/UploadInput/UploadButton/defaults.mjs.map +1 -1
  437. package/build/UploadInput/UploadButton/getAllowedFileTypes.js.map +1 -1
  438. package/build/UploadInput/UploadButton/getAllowedFileTypes.mjs.map +1 -1
  439. package/build/UploadInput/UploadInput.js.map +1 -1
  440. package/build/UploadInput/UploadInput.messages.js.map +1 -1
  441. package/build/UploadInput/UploadInput.messages.mjs.map +1 -1
  442. package/build/UploadInput/UploadInput.mjs.map +1 -1
  443. package/build/UploadInput/UploadItem/UploadItem.js.map +1 -1
  444. package/build/UploadInput/UploadItem/UploadItem.messages.js.map +1 -1
  445. package/build/UploadInput/UploadItem/UploadItem.messages.mjs.map +1 -1
  446. package/build/UploadInput/UploadItem/UploadItem.mjs.map +1 -1
  447. package/build/UploadInput/UploadItem/UploadItemLink.js.map +1 -1
  448. package/build/UploadInput/UploadItem/UploadItemLink.mjs.map +1 -1
  449. package/build/WithDisplayFormat/WithDisplayFormat.js.map +1 -1
  450. package/build/WithDisplayFormat/WithDisplayFormat.mjs.map +1 -1
  451. package/build/WithId/WithId.js.map +1 -1
  452. package/build/WithId/WithId.mjs.map +1 -1
  453. package/build/WithNextPortal/WithNextPortal.js.map +1 -1
  454. package/build/WithNextPortal/WithNextPortal.mjs.map +1 -1
  455. package/build/_deprecated/ActionButton/ActionButton.js.map +1 -1
  456. package/build/_deprecated/ActionButton/ActionButton.mjs.map +1 -1
  457. package/build/_deprecated/ActionOption/ActionOption.js.map +1 -1
  458. package/build/_deprecated/ActionOption/ActionOption.mjs.map +1 -1
  459. package/build/_deprecated/Alert/Alert.js.map +1 -1
  460. package/build/_deprecated/Alert/Alert.mjs.map +1 -1
  461. package/build/_deprecated/Alert/InlineMarkdown/InlineMarkdown.js.map +1 -1
  462. package/build/_deprecated/Alert/InlineMarkdown/InlineMarkdown.mjs.map +1 -1
  463. package/build/_deprecated/Avatar/Avatar.js.map +1 -1
  464. package/build/_deprecated/Avatar/Avatar.mjs.map +1 -1
  465. package/build/_deprecated/Avatar/types.js.map +1 -1
  466. package/build/_deprecated/Avatar/types.mjs.map +1 -1
  467. package/build/_deprecated/AvatarWrapper/AvatarWrapper.js.map +1 -1
  468. package/build/_deprecated/AvatarWrapper/AvatarWrapper.mjs.map +1 -1
  469. package/build/_deprecated/Badge/Badge.js.map +1 -1
  470. package/build/_deprecated/Badge/Badge.mjs.map +1 -1
  471. package/build/_deprecated/Badge/BadgeAssets.js.map +1 -1
  472. package/build/_deprecated/Badge/BadgeAssets.mjs.map +1 -1
  473. package/build/_deprecated/Card/Card.js.map +1 -1
  474. package/build/_deprecated/Card/Card.mjs.map +1 -1
  475. package/build/_deprecated/CheckboxOption/CheckboxOption.js.map +1 -1
  476. package/build/_deprecated/CheckboxOption/CheckboxOption.mjs.map +1 -1
  477. package/build/_deprecated/CriticalBanner/CriticalCommsBanner.js.map +1 -1
  478. package/build/_deprecated/CriticalBanner/CriticalCommsBanner.mjs.map +1 -1
  479. package/build/_deprecated/InlineAlert/InlineAlert.js.map +1 -1
  480. package/build/_deprecated/InlineAlert/InlineAlert.mjs.map +1 -1
  481. package/build/_deprecated/LegacyListItem/LegacyListItem.js.map +1 -1
  482. package/build/_deprecated/LegacyListItem/LegacyListItem.mjs.map +1 -1
  483. package/build/_deprecated/NavigationOption/NavigationOption.js.map +1 -1
  484. package/build/_deprecated/NavigationOption/NavigationOption.mjs.map +1 -1
  485. package/build/_deprecated/NavigationOptionsList/NavigationOptionsList.js.map +1 -1
  486. package/build/_deprecated/NavigationOptionsList/NavigationOptionsList.mjs.map +1 -1
  487. package/build/_deprecated/OverlayHeader/OverlayHeader.js.map +1 -1
  488. package/build/_deprecated/OverlayHeader/OverlayHeader.mjs.map +1 -1
  489. package/build/_deprecated/RadioOption/RadioOption.js.map +1 -1
  490. package/build/_deprecated/RadioOption/RadioOption.mjs.map +1 -1
  491. package/build/_deprecated/Select/Option/Option.js.map +1 -1
  492. package/build/_deprecated/Select/Option/Option.mjs.map +1 -1
  493. package/build/_deprecated/Select/SearchBox/SearchBox.js.map +1 -1
  494. package/build/_deprecated/Select/SearchBox/SearchBox.mjs.map +1 -1
  495. package/build/_deprecated/Select/Select.js.map +1 -1
  496. package/build/_deprecated/Select/Select.messages.js.map +1 -1
  497. package/build/_deprecated/Select/Select.messages.mjs.map +1 -1
  498. package/build/_deprecated/Select/Select.mjs.map +1 -1
  499. package/build/_deprecated/Summary/Summary.js.map +1 -1
  500. package/build/_deprecated/Summary/Summary.messages.js.map +1 -1
  501. package/build/_deprecated/Summary/Summary.messages.mjs.map +1 -1
  502. package/build/_deprecated/Summary/Summary.mjs.map +1 -1
  503. package/build/_deprecated/SwitchOption/SwitchOption.js.map +1 -1
  504. package/build/_deprecated/SwitchOption/SwitchOption.mjs.map +1 -1
  505. package/build/common/BaseCard/BaseCard.js.map +1 -1
  506. package/build/common/BaseCard/BaseCard.mjs.map +1 -1
  507. package/build/common/BottomSheet/BottomSheet.js.map +1 -1
  508. package/build/common/BottomSheet/BottomSheet.mjs.map +1 -1
  509. package/build/common/Circle/Circle.js.map +1 -1
  510. package/build/common/Circle/Circle.mjs.map +1 -1
  511. package/build/common/CloseButton/CloseButton.js.map +1 -1
  512. package/build/common/CloseButton/CloseButton.messages.js.map +1 -1
  513. package/build/common/CloseButton/CloseButton.messages.mjs.map +1 -1
  514. package/build/common/CloseButton/CloseButton.mjs.map +1 -1
  515. package/build/common/DOMOperations/DOMOperations.js.map +1 -1
  516. package/build/common/DOMOperations/DOMOperations.mjs.map +1 -1
  517. package/build/common/DateUtils/getDateView/getDateView.js.map +1 -1
  518. package/build/common/DateUtils/getDateView/getDateView.mjs.map +1 -1
  519. package/build/common/DateUtils/getDayNames/getDayNames.js.map +1 -1
  520. package/build/common/DateUtils/getDayNames/getDayNames.mjs.map +1 -1
  521. package/build/common/DateUtils/getFormatForLocale/getFormatForLocale.js.map +1 -1
  522. package/build/common/DateUtils/getFormatForLocale/getFormatForLocale.mjs.map +1 -1
  523. package/build/common/DateUtils/getMonthNames/getMonthNames.js.map +1 -1
  524. package/build/common/DateUtils/getMonthNames/getMonthNames.mjs.map +1 -1
  525. package/build/common/DateUtils/isDateValid/isDateValid.js.map +1 -1
  526. package/build/common/DateUtils/isDateValid/isDateValid.mjs.map +1 -1
  527. package/build/common/DateUtils/isMonthAndYearFormat/isMonthAndYearFormat.js.map +1 -1
  528. package/build/common/DateUtils/isMonthAndYearFormat/isMonthAndYearFormat.mjs.map +1 -1
  529. package/build/common/DateUtils/isWithinRange/isWithinRange.js.map +1 -1
  530. package/build/common/DateUtils/isWithinRange/isWithinRange.mjs.map +1 -1
  531. package/build/common/DateUtils/moveToWithinRange/moveToWithinRange.js.map +1 -1
  532. package/build/common/DateUtils/moveToWithinRange/moveToWithinRange.mjs.map +1 -1
  533. package/build/common/DomHelpers/documentIosClick.js.map +1 -1
  534. package/build/common/DomHelpers/documentIosClick.mjs.map +1 -1
  535. package/build/common/FlowHeader/FlowHeader.js.map +1 -1
  536. package/build/common/FlowHeader/FlowHeader.mjs.map +1 -1
  537. package/build/common/FocusBoundary/FocusBoundary.js.map +1 -1
  538. package/build/common/FocusBoundary/FocusBoundary.mjs.map +1 -1
  539. package/build/common/LiveRegion/LiveRegion.js.map +1 -1
  540. package/build/common/LiveRegion/LiveRegion.mjs.map +1 -1
  541. package/build/common/Locale/index.js.map +1 -1
  542. package/build/common/Locale/index.mjs.map +1 -1
  543. package/build/common/Option/Option.js.map +1 -1
  544. package/build/common/Option/Option.mjs.map +1 -1
  545. package/build/common/Panel/Panel.js.map +1 -1
  546. package/build/common/Panel/Panel.mjs.map +1 -1
  547. package/build/common/Panel/Panel.positionUtils.js.map +1 -1
  548. package/build/common/Panel/Panel.positionUtils.mjs.map +1 -1
  549. package/build/common/PolymorphicWithOverrides/PolymorphicWithOverrides.js.map +1 -1
  550. package/build/common/PolymorphicWithOverrides/PolymorphicWithOverrides.mjs.map +1 -1
  551. package/build/common/PreventScroll/PreventScroll.js.map +1 -1
  552. package/build/common/PreventScroll/PreventScroll.mjs.map +1 -1
  553. package/build/common/PropsValues/control.js.map +1 -1
  554. package/build/common/PropsValues/control.mjs.map +1 -1
  555. package/build/common/PropsValues/dateMode.js.map +1 -1
  556. package/build/common/PropsValues/dateMode.mjs.map +1 -1
  557. package/build/common/PropsValues/layouts.js.map +1 -1
  558. package/build/common/PropsValues/layouts.mjs.map +1 -1
  559. package/build/common/PropsValues/markdownNodeType.js.map +1 -1
  560. package/build/common/PropsValues/markdownNodeType.mjs.map +1 -1
  561. package/build/common/PropsValues/monthFormat.js.map +1 -1
  562. package/build/common/PropsValues/monthFormat.mjs.map +1 -1
  563. package/build/common/PropsValues/position.js.map +1 -1
  564. package/build/common/PropsValues/position.mjs.map +1 -1
  565. package/build/common/PropsValues/profileType.js.map +1 -1
  566. package/build/common/PropsValues/profileType.mjs.map +1 -1
  567. package/build/common/PropsValues/scroll.js.map +1 -1
  568. package/build/common/PropsValues/scroll.mjs.map +1 -1
  569. package/build/common/PropsValues/sentiment.js.map +1 -1
  570. package/build/common/PropsValues/sentiment.mjs.map +1 -1
  571. package/build/common/PropsValues/size.js.map +1 -1
  572. package/build/common/PropsValues/size.mjs.map +1 -1
  573. package/build/common/PropsValues/status.js.map +1 -1
  574. package/build/common/PropsValues/status.mjs.map +1 -1
  575. package/build/common/PropsValues/type.js.map +1 -1
  576. package/build/common/PropsValues/type.mjs.map +1 -1
  577. package/build/common/PropsValues/typography.js.map +1 -1
  578. package/build/common/PropsValues/typography.mjs.map +1 -1
  579. package/build/common/PropsValues/variant.js.map +1 -1
  580. package/build/common/PropsValues/variant.mjs.map +1 -1
  581. package/build/common/PropsValues/width.js.map +1 -1
  582. package/build/common/PropsValues/width.mjs.map +1 -1
  583. package/build/common/RadioButton/RadioButton.js.map +1 -1
  584. package/build/common/RadioButton/RadioButton.mjs.map +1 -1
  585. package/build/common/ResponsivePanel/ResponsivePanel.js.map +1 -1
  586. package/build/common/ResponsivePanel/ResponsivePanel.mjs.map +1 -1
  587. package/build/common/TextFormat/formatWithPattern/formatWithPattern.js.map +1 -1
  588. package/build/common/TextFormat/formatWithPattern/formatWithPattern.mjs.map +1 -1
  589. package/build/common/TextFormat/getCountOfSymbolsInSelection/getCountOfSymbolsInSelection.js.map +1 -1
  590. package/build/common/TextFormat/getCountOfSymbolsInSelection/getCountOfSymbolsInSelection.mjs.map +1 -1
  591. package/build/common/TextFormat/getCursorPositionAfterKeystroke/getCursorPositionAfterKeystroke.js.map +1 -1
  592. package/build/common/TextFormat/getCursorPositionAfterKeystroke/getCursorPositionAfterKeystroke.mjs.map +1 -1
  593. package/build/common/TextFormat/getDistanceToSymbol/getDistanceToSymbol.js.map +1 -1
  594. package/build/common/TextFormat/getDistanceToSymbol/getDistanceToSymbol.mjs.map +1 -1
  595. package/build/common/TextFormat/getSymbolsInPatternWithPosition/getSymbolsInPatternWithPosition.js.map +1 -1
  596. package/build/common/TextFormat/getSymbolsInPatternWithPosition/getSymbolsInPatternWithPosition.mjs.map +1 -1
  597. package/build/common/TextFormat/unformatWithPattern/unformatWithPattern.js.map +1 -1
  598. package/build/common/TextFormat/unformatWithPattern/unformatWithPattern.mjs.map +1 -1
  599. package/build/common/colors.js.map +1 -1
  600. package/build/common/colors.mjs.map +1 -1
  601. package/build/common/constants.js.map +1 -1
  602. package/build/common/constants.mjs.map +1 -1
  603. package/build/common/deviceDetection/deviceDetection.js.map +1 -1
  604. package/build/common/deviceDetection/deviceDetection.mjs.map +1 -1
  605. package/build/common/direction.js.map +1 -1
  606. package/build/common/direction.mjs.map +1 -1
  607. package/build/common/fileType.js.map +1 -1
  608. package/build/common/fileType.mjs.map +1 -1
  609. package/build/common/historyNavigator/historyNavigator.js.map +1 -1
  610. package/build/common/historyNavigator/historyNavigator.mjs.map +1 -1
  611. package/build/common/hooks/useConditionalListener/useConditionalListener.js.map +1 -1
  612. package/build/common/hooks/useConditionalListener/useConditionalListener.mjs.map +1 -1
  613. package/build/common/hooks/useContainerSize.js.map +1 -1
  614. package/build/common/hooks/useContainerSize.mjs.map +1 -1
  615. package/build/common/hooks/useDirection/useDirection.js.map +1 -1
  616. package/build/common/hooks/useDirection/useDirection.mjs.map +1 -1
  617. package/build/common/hooks/useEffectEvent.js.map +1 -1
  618. package/build/common/hooks/useEffectEvent.mjs.map +1 -1
  619. package/build/common/hooks/useHasIntersected/useHasIntersected.js.map +1 -1
  620. package/build/common/hooks/useHasIntersected/useHasIntersected.mjs.map +1 -1
  621. package/build/common/hooks/useLayout/useLayout.js.map +1 -1
  622. package/build/common/hooks/useLayout/useLayout.mjs.map +1 -1
  623. package/build/common/hooks/useMedia.js.map +1 -1
  624. package/build/common/hooks/useMedia.mjs.map +1 -1
  625. package/build/common/hooks/useResizeObserver.js.map +1 -1
  626. package/build/common/hooks/useResizeObserver.mjs.map +1 -1
  627. package/build/common/hooks/useScreenSize.js.map +1 -1
  628. package/build/common/hooks/useScreenSize.mjs.map +1 -1
  629. package/build/common/hooks/useVirtualKeyboard.js.map +1 -1
  630. package/build/common/hooks/useVirtualKeyboard.mjs.map +1 -1
  631. package/build/common/initials.js.map +1 -1
  632. package/build/common/initials.mjs.map +1 -1
  633. package/build/common/injectIntl.js.map +1 -1
  634. package/build/common/injectIntl.mjs.map +1 -1
  635. package/build/common/theme.js.map +1 -1
  636. package/build/common/theme.mjs.map +1 -1
  637. package/build/i18n/commonMessages/Button.messages.js.map +1 -1
  638. package/build/i18n/commonMessages/Button.messages.mjs.map +1 -1
  639. package/build/i18n/cs.json.js.map +1 -1
  640. package/build/i18n/cs.json.mjs.map +1 -1
  641. package/build/i18n/de.json.js.map +1 -1
  642. package/build/i18n/de.json.mjs.map +1 -1
  643. package/build/i18n/en.json.js.map +1 -1
  644. package/build/i18n/en.json.mjs.map +1 -1
  645. package/build/i18n/es.json.js.map +1 -1
  646. package/build/i18n/es.json.mjs.map +1 -1
  647. package/build/i18n/fr.json.js.map +1 -1
  648. package/build/i18n/fr.json.mjs.map +1 -1
  649. package/build/i18n/hu.json.js.map +1 -1
  650. package/build/i18n/hu.json.mjs.map +1 -1
  651. package/build/i18n/id.json.js.map +1 -1
  652. package/build/i18n/id.json.mjs.map +1 -1
  653. package/build/i18n/index.js.map +1 -1
  654. package/build/i18n/index.mjs.map +1 -1
  655. package/build/i18n/it.json.js.map +1 -1
  656. package/build/i18n/it.json.mjs.map +1 -1
  657. package/build/i18n/ja.json.js.map +1 -1
  658. package/build/i18n/ja.json.mjs.map +1 -1
  659. package/build/i18n/nl.json.js.map +1 -1
  660. package/build/i18n/nl.json.mjs.map +1 -1
  661. package/build/i18n/pl.json.js.map +1 -1
  662. package/build/i18n/pl.json.mjs.map +1 -1
  663. package/build/i18n/pt.json.js.map +1 -1
  664. package/build/i18n/pt.json.mjs.map +1 -1
  665. package/build/i18n/ro.json.js.map +1 -1
  666. package/build/i18n/ro.json.mjs.map +1 -1
  667. package/build/i18n/ru.json.js.map +1 -1
  668. package/build/i18n/ru.json.mjs.map +1 -1
  669. package/build/i18n/th.json.js.map +1 -1
  670. package/build/i18n/th.json.mjs.map +1 -1
  671. package/build/i18n/tr.json.js.map +1 -1
  672. package/build/i18n/tr.json.mjs.map +1 -1
  673. package/build/i18n/uk.json.js.map +1 -1
  674. package/build/i18n/uk.json.mjs.map +1 -1
  675. package/build/i18n/zh-CN.json.js.map +1 -1
  676. package/build/i18n/zh-CN.json.mjs.map +1 -1
  677. package/build/i18n/zh-HK.json.js.map +1 -1
  678. package/build/i18n/zh-HK.json.mjs.map +1 -1
  679. package/build/main.css +5 -6
  680. package/build/mocks.js.map +1 -1
  681. package/build/mocks.mjs.map +1 -1
  682. package/build/styles/FlowNavigation/FlowNavigation.css +5 -6
  683. package/build/styles/main.css +5 -6
  684. package/build/utilities/cssValueWithUnit.js.map +1 -1
  685. package/build/utilities/cssValueWithUnit.mjs.map +1 -1
  686. package/build/utilities/logActionRequired.js.map +1 -1
  687. package/build/utilities/logActionRequired.mjs.map +1 -1
  688. package/package.json +14 -14
  689. package/src/FlowNavigation/FlowNavigation.css +5 -6
  690. package/src/FlowNavigation/FlowNavigation.less +7 -8
  691. package/src/main.css +5 -6
@@ -1 +1 @@
1
- {"version":3,"file":"parseMarkup.js","sources":["../../../src/Markup/utils/parseMarkup.ts"],"sourcesContent":["import { ALLOWED_TAGS, ALLOWED_TARGETS, MAX_NESTING_DEPTH, TAG_ALIASES } from '../constants';\nimport { MarkupNode } from '../Markup.types';\n\nexport { MAX_NESTING_DEPTH };\nexport const MAX_INPUT_LENGTH = 10_000;\nexport const MAX_ACCESSIBILITY_LABEL_LENGTH = 250;\n\nconst OBJECT_PROTOTYPE_KEYS = new Set(Object.getOwnPropertyNames(Object.prototype));\n\n// eslint-disable-next-line regexp/no-control-character\nconst CONTROL_CHARS = /[\\x00-\\x1f\\x7f-\\x9f]/g;\nconst HTML_METACHAR = /[<>\"']/g;\n\n/**\n * Matches opening and closing tags from the ALLOWED_TAGS allow-list.\n *\n * Capture groups:\n * 1. `/` if this is a closing tag, undefined otherwise\n * 2. Tag name\n * 3. Raw attribute string between the tag name and `>` (empty for closing tags)\n *\n * The lookahead `(?=[\\s>/])` after the tag name ensures we don't match partial\n * words — e.g. `<stronger>` won't be matched as `<strong>`.\n *\n * Global flag (`g`) allows iterative matching via `exec()`.\n */\nconst TAG_REGEX = new RegExp(\n `<(\\\\/)?(${ALLOWED_TAGS.join('|')})(?=[\\\\s>/])((?:[^>\"']*(?:\"[^\"]*\"|'[^']*'))*[^>\"']*)>`,\n 'g',\n);\n\ntype Token =\n | { type: 'text'; content: string }\n | { type: 'newline' }\n | { type: 'open'; tag: string; attrs: string }\n | { type: 'close'; tag: string };\n\n/**\n * Splits the input string into a flat list of tokens by scanning for known tags.\n * Text between tags is emitted as text/newline tokens. Unrecognised tags are never\n * tokenised — they remain part of the surrounding text content.\n */\nfunction tokenise(input: string): Token[] {\n const tokens: Token[] = [];\n let lastIndex = 0;\n\n TAG_REGEX.lastIndex = 0;\n let match = TAG_REGEX.exec(input);\n\n while (match !== null) {\n if (match.index > lastIndex) {\n pushTextWithNewlines(tokens, input.slice(lastIndex, match.index));\n }\n\n const isClose = match[1] === '/';\n const tag = match[2];\n const attrs = match[3] || '';\n\n if (isClose) {\n tokens.push({ type: 'close', tag });\n } else {\n tokens.push({ type: 'open', tag, attrs });\n }\n\n lastIndex = TAG_REGEX.lastIndex;\n match = TAG_REGEX.exec(input);\n }\n\n if (lastIndex < input.length) {\n pushTextWithNewlines(tokens, input.slice(lastIndex));\n }\n\n return tokens;\n}\n\n/** Splits a text fragment on newline characters, interleaving newline tokens between parts. */\nfunction pushTextWithNewlines(tokens: Token[], text: string): void {\n const parts = text.split('\\n');\n for (let index = 0; index < parts.length; index += 1) {\n if (index > 0) {\n tokens.push({ type: 'newline' });\n }\n if (parts[index]) {\n tokens.push({ type: 'text', content: parts[index] });\n }\n }\n}\n\ntype ParseResult = { closed: true; nodes: MarkupNode[] } | { closed: false; nodes: MarkupNode[] };\n\n/**\n * Recursive descent parser that consumes tokens and builds a MarkupNode tree.\n *\n * When `untilTag` is provided, the function collects nodes until it finds a matching\n * close token — returning `{ closed: true }`. If it exhausts all tokens without finding\n * the close, it returns `{ closed: false }` so the caller can fall back to plain text\n * (graceful degradation for malformed input).\n *\n * The shared `position` object acts as a cursor across recursive calls, avoiding the\n * need to slice or copy the token array.\n */\nfunction parse(\n tokens: Token[],\n position: { index: number },\n untilTag?: string,\n depth = 0,\n): ParseResult {\n const nodes: MarkupNode[] = [];\n\n while (position.index < tokens.length) {\n const token = tokens[position.index];\n\n if (token.type === 'text') {\n nodes.push({ type: 'text', content: token.content });\n position.index += 1;\n } else if (token.type === 'newline') {\n nodes.push({ type: 'newline' });\n position.index += 1;\n } else if (token.type === 'close') {\n if (token.tag === untilTag) {\n position.index += 1;\n return { closed: true, nodes };\n }\n // Mismatched close tag — render as literal text\n nodes.push({ type: 'text', content: `</${token.tag}>` });\n position.index += 1;\n } else if (token.type === 'open') {\n if (depth >= MAX_NESTING_DEPTH) {\n nodes.push({ type: 'text', content: `<${token.tag}${token.attrs}>` });\n position.index += 1;\n } else {\n position.index += 1;\n const result = parse(tokens, position, token.tag, depth + 1);\n\n if (result.closed) {\n const node = buildNode(token.tag, token.attrs, result.nodes);\n nodes.push(node);\n } else {\n nodes.push({ type: 'text', content: `<${token.tag}${token.attrs}>` });\n nodes.push(...result.nodes);\n }\n }\n }\n }\n\n if (untilTag) {\n return { closed: false, nodes };\n }\n\n return { closed: true, nodes };\n}\n\n/**\n * Maps a raw tag name to a typed MarkupNode. Resolves aliases first (p→paragraph, a→link),\n * then builds the appropriate node shape. Link nodes carry full attributes; other element\n * nodes extract only accessibilityLabel.\n */\nfunction buildNode(rawTag: string, attrs: string, children: MarkupNode[]): MarkupNode {\n const tag = TAG_ALIASES[rawTag] || rawTag;\n\n if (tag === 'link') {\n return { type: 'link', children, ...parseAttributes(attrs) };\n }\n\n if (tag === 'paragraph') {\n return { type: 'paragraph', children };\n }\n\n const { accessibilityLabel } = parseAttributes(attrs);\n\n return {\n type: tag as MarkupNode['type'],\n children,\n ...(accessibilityLabel && { accessibilityLabel }),\n } as MarkupNode;\n}\n\n/**\n * Matches allow-listed attributes from the raw attribute string captured by TAG_REGEX.\n * Requires whitespace before each attribute name to prevent matching inside quoted values.\n *\n * Example: for input ` href=\"https://wise.com\" target=\"_blank\"`\n * - Match 1: groups = ['href', 'https://wise.com', undefined]\n * - Match 2: groups = ['target', '_blank', undefined]\n *\n * Capture groups:\n * 1. Attribute name (href, action, target, or accessibilityLabel)\n * 2. Double-quoted value (if present)\n * 3. Single-quoted value (if present)\n */\nconst ATTR_REGEX = /(?<=\\s)(href|action|target|accessibilityLabel)=(?:\"([^\"]*)\"|'([^']*)')/g;\n\ntype ParsedAttributes = {\n href?: string;\n action?: string;\n target?: string;\n accessibilityLabel?: string;\n};\n\n/**\n * Extracts allowed attributes from a raw attribute string.\n * Supports both double- and single-quoted values. Any attribute not in the\n * allow-list (href, action, target, accessibilityLabel) is silently discarded.\n * First occurrence wins — duplicates are ignored.\n */\nfunction parseAttributes(attrs: string): ParsedAttributes {\n const result: ParsedAttributes = {};\n ATTR_REGEX.lastIndex = 0;\n let match = ATTR_REGEX.exec(attrs);\n\n while (match !== null) {\n const key = match[1] as 'href' | 'action' | 'target' | 'accessibilityLabel';\n const value = match[2] ?? match[3];\n\n if (!(key in result)) {\n const sanitized = sanitizeAttributeValue(key, value);\n if (sanitized !== undefined) {\n result[key] = sanitized;\n }\n }\n\n match = ATTR_REGEX.exec(attrs);\n }\n\n return result;\n}\n\nfunction sanitizeAttributeValue(\n key: 'href' | 'action' | 'target' | 'accessibilityLabel',\n value: string,\n): string | undefined {\n switch (key) {\n case 'href':\n return value.replace(CONTROL_CHARS, '');\n case 'action':\n if (OBJECT_PROTOTYPE_KEYS.has(value)) {\n return undefined;\n }\n return value;\n case 'target':\n if (!ALLOWED_TARGETS.includes(value)) {\n return undefined;\n }\n return value;\n case 'accessibilityLabel':\n return value.replace(HTML_METACHAR, '').slice(0, MAX_ACCESSIBILITY_LABEL_LENGTH);\n default:\n return undefined;\n }\n}\n\n/** Entry point: tokenises the input string, then parses the token stream into a MarkupNode tree. */\nexport function parseMarkup(input: string): MarkupNode[] {\n if (!input) {\n return [];\n }\n\n if (input.length > MAX_INPUT_LENGTH) {\n return [{ type: 'text', content: input }];\n }\n\n const tokens = tokenise(input);\n const position = { index: 0 };\n return parse(tokens, position).nodes;\n}\n"],"names":["MAX_INPUT_LENGTH","MAX_ACCESSIBILITY_LABEL_LENGTH","OBJECT_PROTOTYPE_KEYS","Set","Object","getOwnPropertyNames","prototype","CONTROL_CHARS","HTML_METACHAR","TAG_REGEX","RegExp","ALLOWED_TAGS","join","tokenise","input","tokens","lastIndex","match","exec","index","pushTextWithNewlines","slice","isClose","tag","attrs","push","type","length","text","parts","split","content","parse","position","untilTag","depth","nodes","token","closed","MAX_NESTING_DEPTH","result","node","buildNode","rawTag","children","TAG_ALIASES","parseAttributes","accessibilityLabel","ATTR_REGEX","key","value","sanitized","sanitizeAttributeValue","undefined","replace","has","ALLOWED_TARGETS","includes","parseMarkup"],"mappings":"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"}
1
+ {"version":3,"file":"parseMarkup.js","sources":["../../../src/Markup/utils/parseMarkup.ts"],"sourcesContent":["import { ALLOWED_TAGS, ALLOWED_TARGETS, MAX_NESTING_DEPTH, TAG_ALIASES } from '../constants';\nimport { MarkupNode } from '../Markup.types';\n\nexport { MAX_NESTING_DEPTH };\nexport const MAX_INPUT_LENGTH = 10_000;\nexport const MAX_ACCESSIBILITY_LABEL_LENGTH = 250;\n\nconst OBJECT_PROTOTYPE_KEYS = new Set(Object.getOwnPropertyNames(Object.prototype));\n\n// eslint-disable-next-line regexp/no-control-character\nconst CONTROL_CHARS = /[\\x00-\\x1f\\x7f-\\x9f]/g;\nconst HTML_METACHAR = /[<>\"']/g;\n\n/**\n * Matches opening and closing tags from the ALLOWED_TAGS allow-list.\n *\n * Capture groups:\n * 1. `/` if this is a closing tag, undefined otherwise\n * 2. Tag name\n * 3. Raw attribute string between the tag name and `>` (empty for closing tags)\n *\n * The lookahead `(?=[\\s>/])` after the tag name ensures we don't match partial\n * words — e.g. `<stronger>` won't be matched as `<strong>`.\n *\n * Global flag (`g`) allows iterative matching via `exec()`.\n */\nconst TAG_REGEX = new RegExp(\n `<(\\\\/)?(${ALLOWED_TAGS.join('|')})(?=[\\\\s>/])((?:[^>\"']*(?:\"[^\"]*\"|'[^']*'))*[^>\"']*)>`,\n 'g',\n);\n\ntype Token =\n | { type: 'text'; content: string }\n | { type: 'newline' }\n | { type: 'open'; tag: string; attrs: string }\n | { type: 'close'; tag: string };\n\n/**\n * Splits the input string into a flat list of tokens by scanning for known tags.\n * Text between tags is emitted as text/newline tokens. Unrecognised tags are never\n * tokenised — they remain part of the surrounding text content.\n */\nfunction tokenise(input: string): Token[] {\n const tokens: Token[] = [];\n let lastIndex = 0;\n\n TAG_REGEX.lastIndex = 0;\n let match = TAG_REGEX.exec(input);\n\n while (match !== null) {\n if (match.index > lastIndex) {\n pushTextWithNewlines(tokens, input.slice(lastIndex, match.index));\n }\n\n const isClose = match[1] === '/';\n const tag = match[2];\n const attrs = match[3] || '';\n\n if (isClose) {\n tokens.push({ type: 'close', tag });\n } else {\n tokens.push({ type: 'open', tag, attrs });\n }\n\n lastIndex = TAG_REGEX.lastIndex;\n match = TAG_REGEX.exec(input);\n }\n\n if (lastIndex < input.length) {\n pushTextWithNewlines(tokens, input.slice(lastIndex));\n }\n\n return tokens;\n}\n\n/** Splits a text fragment on newline characters, interleaving newline tokens between parts. */\nfunction pushTextWithNewlines(tokens: Token[], text: string): void {\n const parts = text.split('\\n');\n for (let index = 0; index < parts.length; index += 1) {\n if (index > 0) {\n tokens.push({ type: 'newline' });\n }\n if (parts[index]) {\n tokens.push({ type: 'text', content: parts[index] });\n }\n }\n}\n\ntype ParseResult = { closed: true; nodes: MarkupNode[] } | { closed: false; nodes: MarkupNode[] };\n\n/**\n * Recursive descent parser that consumes tokens and builds a MarkupNode tree.\n *\n * When `untilTag` is provided, the function collects nodes until it finds a matching\n * close token — returning `{ closed: true }`. If it exhausts all tokens without finding\n * the close, it returns `{ closed: false }` so the caller can fall back to plain text\n * (graceful degradation for malformed input).\n *\n * The shared `position` object acts as a cursor across recursive calls, avoiding the\n * need to slice or copy the token array.\n */\nfunction parse(\n tokens: Token[],\n position: { index: number },\n untilTag?: string,\n depth = 0,\n): ParseResult {\n const nodes: MarkupNode[] = [];\n\n while (position.index < tokens.length) {\n const token = tokens[position.index];\n\n if (token.type === 'text') {\n nodes.push({ type: 'text', content: token.content });\n position.index += 1;\n } else if (token.type === 'newline') {\n nodes.push({ type: 'newline' });\n position.index += 1;\n } else if (token.type === 'close') {\n if (token.tag === untilTag) {\n position.index += 1;\n return { closed: true, nodes };\n }\n // Mismatched close tag — render as literal text\n nodes.push({ type: 'text', content: `</${token.tag}>` });\n position.index += 1;\n } else if (token.type === 'open') {\n if (depth >= MAX_NESTING_DEPTH) {\n nodes.push({ type: 'text', content: `<${token.tag}${token.attrs}>` });\n position.index += 1;\n } else {\n position.index += 1;\n const result = parse(tokens, position, token.tag, depth + 1);\n\n if (result.closed) {\n const node = buildNode(token.tag, token.attrs, result.nodes);\n nodes.push(node);\n } else {\n nodes.push({ type: 'text', content: `<${token.tag}${token.attrs}>` });\n nodes.push(...result.nodes);\n }\n }\n }\n }\n\n if (untilTag) {\n return { closed: false, nodes };\n }\n\n return { closed: true, nodes };\n}\n\n/**\n * Maps a raw tag name to a typed MarkupNode. Resolves aliases first (p→paragraph, a→link),\n * then builds the appropriate node shape. Link nodes carry full attributes; other element\n * nodes extract only accessibilityLabel.\n */\nfunction buildNode(rawTag: string, attrs: string, children: MarkupNode[]): MarkupNode {\n const tag = TAG_ALIASES[rawTag] || rawTag;\n\n if (tag === 'link') {\n return { type: 'link', children, ...parseAttributes(attrs) };\n }\n\n if (tag === 'paragraph') {\n return { type: 'paragraph', children };\n }\n\n const { accessibilityLabel } = parseAttributes(attrs);\n\n return {\n type: tag as MarkupNode['type'],\n children,\n ...(accessibilityLabel && { accessibilityLabel }),\n } as MarkupNode;\n}\n\n/**\n * Matches allow-listed attributes from the raw attribute string captured by TAG_REGEX.\n * Requires whitespace before each attribute name to prevent matching inside quoted values.\n *\n * Example: for input ` href=\"https://wise.com\" target=\"_blank\"`\n * - Match 1: groups = ['href', 'https://wise.com', undefined]\n * - Match 2: groups = ['target', '_blank', undefined]\n *\n * Capture groups:\n * 1. Attribute name (href, action, target, or accessibilityLabel)\n * 2. Double-quoted value (if present)\n * 3. Single-quoted value (if present)\n */\nconst ATTR_REGEX = /(?<=\\s)(href|action|target|accessibilityLabel)=(?:\"([^\"]*)\"|'([^']*)')/g;\n\ntype ParsedAttributes = {\n href?: string;\n action?: string;\n target?: string;\n accessibilityLabel?: string;\n};\n\n/**\n * Extracts allowed attributes from a raw attribute string.\n * Supports both double- and single-quoted values. Any attribute not in the\n * allow-list (href, action, target, accessibilityLabel) is silently discarded.\n * First occurrence wins — duplicates are ignored.\n */\nfunction parseAttributes(attrs: string): ParsedAttributes {\n const result: ParsedAttributes = {};\n ATTR_REGEX.lastIndex = 0;\n let match = ATTR_REGEX.exec(attrs);\n\n while (match !== null) {\n const key = match[1] as 'href' | 'action' | 'target' | 'accessibilityLabel';\n const value = match[2] ?? match[3];\n\n if (!(key in result)) {\n const sanitized = sanitizeAttributeValue(key, value);\n if (sanitized !== undefined) {\n result[key] = sanitized;\n }\n }\n\n match = ATTR_REGEX.exec(attrs);\n }\n\n return result;\n}\n\nfunction sanitizeAttributeValue(\n key: 'href' | 'action' | 'target' | 'accessibilityLabel',\n value: string,\n): string | undefined {\n switch (key) {\n case 'href':\n return value.replace(CONTROL_CHARS, '');\n case 'action':\n if (OBJECT_PROTOTYPE_KEYS.has(value)) {\n return undefined;\n }\n return value;\n case 'target':\n if (!ALLOWED_TARGETS.includes(value)) {\n return undefined;\n }\n return value;\n case 'accessibilityLabel':\n return value.replace(HTML_METACHAR, '').slice(0, MAX_ACCESSIBILITY_LABEL_LENGTH);\n default:\n return undefined;\n }\n}\n\n/** Entry point: tokenises the input string, then parses the token stream into a MarkupNode tree. */\nexport function parseMarkup(input: string): MarkupNode[] {\n if (!input) {\n return [];\n }\n\n if (input.length > MAX_INPUT_LENGTH) {\n return [{ type: 'text', content: input }];\n }\n\n const tokens = tokenise(input);\n const position = { index: 0 };\n return parse(tokens, position).nodes;\n}\n"],"names":["MAX_INPUT_LENGTH","MAX_ACCESSIBILITY_LABEL_LENGTH","OBJECT_PROTOTYPE_KEYS","Set","Object","getOwnPropertyNames","prototype","CONTROL_CHARS","HTML_METACHAR","TAG_REGEX","RegExp","ALLOWED_TAGS","join","tokenise","input","tokens","lastIndex","match","exec","index","pushTextWithNewlines","slice","isClose","tag","attrs","push","type","length","text","parts","split","content","parse","position","untilTag","depth","nodes","token","closed","MAX_NESTING_DEPTH","result","node","buildNode","rawTag","children","TAG_ALIASES","parseAttributes","accessibilityLabel","ATTR_REGEX","key","value","sanitized","sanitizeAttributeValue","undefined","replace","has","ALLOWED_TARGETS","includes","parseMarkup"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"parseMarkup.mjs","sources":["../../../src/Markup/utils/parseMarkup.ts"],"sourcesContent":["import { ALLOWED_TAGS, ALLOWED_TARGETS, MAX_NESTING_DEPTH, TAG_ALIASES } from '../constants';\nimport { MarkupNode } from '../Markup.types';\n\nexport { MAX_NESTING_DEPTH };\nexport const MAX_INPUT_LENGTH = 10_000;\nexport const MAX_ACCESSIBILITY_LABEL_LENGTH = 250;\n\nconst OBJECT_PROTOTYPE_KEYS = new Set(Object.getOwnPropertyNames(Object.prototype));\n\n// eslint-disable-next-line regexp/no-control-character\nconst CONTROL_CHARS = /[\\x00-\\x1f\\x7f-\\x9f]/g;\nconst HTML_METACHAR = /[<>\"']/g;\n\n/**\n * Matches opening and closing tags from the ALLOWED_TAGS allow-list.\n *\n * Capture groups:\n * 1. `/` if this is a closing tag, undefined otherwise\n * 2. Tag name\n * 3. Raw attribute string between the tag name and `>` (empty for closing tags)\n *\n * The lookahead `(?=[\\s>/])` after the tag name ensures we don't match partial\n * words — e.g. `<stronger>` won't be matched as `<strong>`.\n *\n * Global flag (`g`) allows iterative matching via `exec()`.\n */\nconst TAG_REGEX = new RegExp(\n `<(\\\\/)?(${ALLOWED_TAGS.join('|')})(?=[\\\\s>/])((?:[^>\"']*(?:\"[^\"]*\"|'[^']*'))*[^>\"']*)>`,\n 'g',\n);\n\ntype Token =\n | { type: 'text'; content: string }\n | { type: 'newline' }\n | { type: 'open'; tag: string; attrs: string }\n | { type: 'close'; tag: string };\n\n/**\n * Splits the input string into a flat list of tokens by scanning for known tags.\n * Text between tags is emitted as text/newline tokens. Unrecognised tags are never\n * tokenised — they remain part of the surrounding text content.\n */\nfunction tokenise(input: string): Token[] {\n const tokens: Token[] = [];\n let lastIndex = 0;\n\n TAG_REGEX.lastIndex = 0;\n let match = TAG_REGEX.exec(input);\n\n while (match !== null) {\n if (match.index > lastIndex) {\n pushTextWithNewlines(tokens, input.slice(lastIndex, match.index));\n }\n\n const isClose = match[1] === '/';\n const tag = match[2];\n const attrs = match[3] || '';\n\n if (isClose) {\n tokens.push({ type: 'close', tag });\n } else {\n tokens.push({ type: 'open', tag, attrs });\n }\n\n lastIndex = TAG_REGEX.lastIndex;\n match = TAG_REGEX.exec(input);\n }\n\n if (lastIndex < input.length) {\n pushTextWithNewlines(tokens, input.slice(lastIndex));\n }\n\n return tokens;\n}\n\n/** Splits a text fragment on newline characters, interleaving newline tokens between parts. */\nfunction pushTextWithNewlines(tokens: Token[], text: string): void {\n const parts = text.split('\\n');\n for (let index = 0; index < parts.length; index += 1) {\n if (index > 0) {\n tokens.push({ type: 'newline' });\n }\n if (parts[index]) {\n tokens.push({ type: 'text', content: parts[index] });\n }\n }\n}\n\ntype ParseResult = { closed: true; nodes: MarkupNode[] } | { closed: false; nodes: MarkupNode[] };\n\n/**\n * Recursive descent parser that consumes tokens and builds a MarkupNode tree.\n *\n * When `untilTag` is provided, the function collects nodes until it finds a matching\n * close token — returning `{ closed: true }`. If it exhausts all tokens without finding\n * the close, it returns `{ closed: false }` so the caller can fall back to plain text\n * (graceful degradation for malformed input).\n *\n * The shared `position` object acts as a cursor across recursive calls, avoiding the\n * need to slice or copy the token array.\n */\nfunction parse(\n tokens: Token[],\n position: { index: number },\n untilTag?: string,\n depth = 0,\n): ParseResult {\n const nodes: MarkupNode[] = [];\n\n while (position.index < tokens.length) {\n const token = tokens[position.index];\n\n if (token.type === 'text') {\n nodes.push({ type: 'text', content: token.content });\n position.index += 1;\n } else if (token.type === 'newline') {\n nodes.push({ type: 'newline' });\n position.index += 1;\n } else if (token.type === 'close') {\n if (token.tag === untilTag) {\n position.index += 1;\n return { closed: true, nodes };\n }\n // Mismatched close tag — render as literal text\n nodes.push({ type: 'text', content: `</${token.tag}>` });\n position.index += 1;\n } else if (token.type === 'open') {\n if (depth >= MAX_NESTING_DEPTH) {\n nodes.push({ type: 'text', content: `<${token.tag}${token.attrs}>` });\n position.index += 1;\n } else {\n position.index += 1;\n const result = parse(tokens, position, token.tag, depth + 1);\n\n if (result.closed) {\n const node = buildNode(token.tag, token.attrs, result.nodes);\n nodes.push(node);\n } else {\n nodes.push({ type: 'text', content: `<${token.tag}${token.attrs}>` });\n nodes.push(...result.nodes);\n }\n }\n }\n }\n\n if (untilTag) {\n return { closed: false, nodes };\n }\n\n return { closed: true, nodes };\n}\n\n/**\n * Maps a raw tag name to a typed MarkupNode. Resolves aliases first (p→paragraph, a→link),\n * then builds the appropriate node shape. Link nodes carry full attributes; other element\n * nodes extract only accessibilityLabel.\n */\nfunction buildNode(rawTag: string, attrs: string, children: MarkupNode[]): MarkupNode {\n const tag = TAG_ALIASES[rawTag] || rawTag;\n\n if (tag === 'link') {\n return { type: 'link', children, ...parseAttributes(attrs) };\n }\n\n if (tag === 'paragraph') {\n return { type: 'paragraph', children };\n }\n\n const { accessibilityLabel } = parseAttributes(attrs);\n\n return {\n type: tag as MarkupNode['type'],\n children,\n ...(accessibilityLabel && { accessibilityLabel }),\n } as MarkupNode;\n}\n\n/**\n * Matches allow-listed attributes from the raw attribute string captured by TAG_REGEX.\n * Requires whitespace before each attribute name to prevent matching inside quoted values.\n *\n * Example: for input ` href=\"https://wise.com\" target=\"_blank\"`\n * - Match 1: groups = ['href', 'https://wise.com', undefined]\n * - Match 2: groups = ['target', '_blank', undefined]\n *\n * Capture groups:\n * 1. Attribute name (href, action, target, or accessibilityLabel)\n * 2. Double-quoted value (if present)\n * 3. Single-quoted value (if present)\n */\nconst ATTR_REGEX = /(?<=\\s)(href|action|target|accessibilityLabel)=(?:\"([^\"]*)\"|'([^']*)')/g;\n\ntype ParsedAttributes = {\n href?: string;\n action?: string;\n target?: string;\n accessibilityLabel?: string;\n};\n\n/**\n * Extracts allowed attributes from a raw attribute string.\n * Supports both double- and single-quoted values. Any attribute not in the\n * allow-list (href, action, target, accessibilityLabel) is silently discarded.\n * First occurrence wins — duplicates are ignored.\n */\nfunction parseAttributes(attrs: string): ParsedAttributes {\n const result: ParsedAttributes = {};\n ATTR_REGEX.lastIndex = 0;\n let match = ATTR_REGEX.exec(attrs);\n\n while (match !== null) {\n const key = match[1] as 'href' | 'action' | 'target' | 'accessibilityLabel';\n const value = match[2] ?? match[3];\n\n if (!(key in result)) {\n const sanitized = sanitizeAttributeValue(key, value);\n if (sanitized !== undefined) {\n result[key] = sanitized;\n }\n }\n\n match = ATTR_REGEX.exec(attrs);\n }\n\n return result;\n}\n\nfunction sanitizeAttributeValue(\n key: 'href' | 'action' | 'target' | 'accessibilityLabel',\n value: string,\n): string | undefined {\n switch (key) {\n case 'href':\n return value.replace(CONTROL_CHARS, '');\n case 'action':\n if (OBJECT_PROTOTYPE_KEYS.has(value)) {\n return undefined;\n }\n return value;\n case 'target':\n if (!ALLOWED_TARGETS.includes(value)) {\n return undefined;\n }\n return value;\n case 'accessibilityLabel':\n return value.replace(HTML_METACHAR, '').slice(0, MAX_ACCESSIBILITY_LABEL_LENGTH);\n default:\n return undefined;\n }\n}\n\n/** Entry point: tokenises the input string, then parses the token stream into a MarkupNode tree. */\nexport function parseMarkup(input: string): MarkupNode[] {\n if (!input) {\n return [];\n }\n\n if (input.length > MAX_INPUT_LENGTH) {\n return [{ type: 'text', content: input }];\n }\n\n const tokens = tokenise(input);\n const position = { index: 0 };\n return parse(tokens, position).nodes;\n}\n"],"names":["MAX_INPUT_LENGTH","MAX_ACCESSIBILITY_LABEL_LENGTH","OBJECT_PROTOTYPE_KEYS","Set","Object","getOwnPropertyNames","prototype","CONTROL_CHARS","HTML_METACHAR","TAG_REGEX","RegExp","ALLOWED_TAGS","join","tokenise","input","tokens","lastIndex","match","exec","index","pushTextWithNewlines","slice","isClose","tag","attrs","push","type","length","text","parts","split","content","parse","position","untilTag","depth","nodes","token","closed","MAX_NESTING_DEPTH","result","node","buildNode","rawTag","children","TAG_ALIASES","parseAttributes","accessibilityLabel","ATTR_REGEX","key","value","sanitized","sanitizeAttributeValue","undefined","replace","has","ALLOWED_TARGETS","includes","parseMarkup"],"mappings":"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"}
1
+ {"version":3,"file":"parseMarkup.mjs","sources":["../../../src/Markup/utils/parseMarkup.ts"],"sourcesContent":["import { ALLOWED_TAGS, ALLOWED_TARGETS, MAX_NESTING_DEPTH, TAG_ALIASES } from '../constants';\nimport { MarkupNode } from '../Markup.types';\n\nexport { MAX_NESTING_DEPTH };\nexport const MAX_INPUT_LENGTH = 10_000;\nexport const MAX_ACCESSIBILITY_LABEL_LENGTH = 250;\n\nconst OBJECT_PROTOTYPE_KEYS = new Set(Object.getOwnPropertyNames(Object.prototype));\n\n// eslint-disable-next-line regexp/no-control-character\nconst CONTROL_CHARS = /[\\x00-\\x1f\\x7f-\\x9f]/g;\nconst HTML_METACHAR = /[<>\"']/g;\n\n/**\n * Matches opening and closing tags from the ALLOWED_TAGS allow-list.\n *\n * Capture groups:\n * 1. `/` if this is a closing tag, undefined otherwise\n * 2. Tag name\n * 3. Raw attribute string between the tag name and `>` (empty for closing tags)\n *\n * The lookahead `(?=[\\s>/])` after the tag name ensures we don't match partial\n * words — e.g. `<stronger>` won't be matched as `<strong>`.\n *\n * Global flag (`g`) allows iterative matching via `exec()`.\n */\nconst TAG_REGEX = new RegExp(\n `<(\\\\/)?(${ALLOWED_TAGS.join('|')})(?=[\\\\s>/])((?:[^>\"']*(?:\"[^\"]*\"|'[^']*'))*[^>\"']*)>`,\n 'g',\n);\n\ntype Token =\n | { type: 'text'; content: string }\n | { type: 'newline' }\n | { type: 'open'; tag: string; attrs: string }\n | { type: 'close'; tag: string };\n\n/**\n * Splits the input string into a flat list of tokens by scanning for known tags.\n * Text between tags is emitted as text/newline tokens. Unrecognised tags are never\n * tokenised — they remain part of the surrounding text content.\n */\nfunction tokenise(input: string): Token[] {\n const tokens: Token[] = [];\n let lastIndex = 0;\n\n TAG_REGEX.lastIndex = 0;\n let match = TAG_REGEX.exec(input);\n\n while (match !== null) {\n if (match.index > lastIndex) {\n pushTextWithNewlines(tokens, input.slice(lastIndex, match.index));\n }\n\n const isClose = match[1] === '/';\n const tag = match[2];\n const attrs = match[3] || '';\n\n if (isClose) {\n tokens.push({ type: 'close', tag });\n } else {\n tokens.push({ type: 'open', tag, attrs });\n }\n\n lastIndex = TAG_REGEX.lastIndex;\n match = TAG_REGEX.exec(input);\n }\n\n if (lastIndex < input.length) {\n pushTextWithNewlines(tokens, input.slice(lastIndex));\n }\n\n return tokens;\n}\n\n/** Splits a text fragment on newline characters, interleaving newline tokens between parts. */\nfunction pushTextWithNewlines(tokens: Token[], text: string): void {\n const parts = text.split('\\n');\n for (let index = 0; index < parts.length; index += 1) {\n if (index > 0) {\n tokens.push({ type: 'newline' });\n }\n if (parts[index]) {\n tokens.push({ type: 'text', content: parts[index] });\n }\n }\n}\n\ntype ParseResult = { closed: true; nodes: MarkupNode[] } | { closed: false; nodes: MarkupNode[] };\n\n/**\n * Recursive descent parser that consumes tokens and builds a MarkupNode tree.\n *\n * When `untilTag` is provided, the function collects nodes until it finds a matching\n * close token — returning `{ closed: true }`. If it exhausts all tokens without finding\n * the close, it returns `{ closed: false }` so the caller can fall back to plain text\n * (graceful degradation for malformed input).\n *\n * The shared `position` object acts as a cursor across recursive calls, avoiding the\n * need to slice or copy the token array.\n */\nfunction parse(\n tokens: Token[],\n position: { index: number },\n untilTag?: string,\n depth = 0,\n): ParseResult {\n const nodes: MarkupNode[] = [];\n\n while (position.index < tokens.length) {\n const token = tokens[position.index];\n\n if (token.type === 'text') {\n nodes.push({ type: 'text', content: token.content });\n position.index += 1;\n } else if (token.type === 'newline') {\n nodes.push({ type: 'newline' });\n position.index += 1;\n } else if (token.type === 'close') {\n if (token.tag === untilTag) {\n position.index += 1;\n return { closed: true, nodes };\n }\n // Mismatched close tag — render as literal text\n nodes.push({ type: 'text', content: `</${token.tag}>` });\n position.index += 1;\n } else if (token.type === 'open') {\n if (depth >= MAX_NESTING_DEPTH) {\n nodes.push({ type: 'text', content: `<${token.tag}${token.attrs}>` });\n position.index += 1;\n } else {\n position.index += 1;\n const result = parse(tokens, position, token.tag, depth + 1);\n\n if (result.closed) {\n const node = buildNode(token.tag, token.attrs, result.nodes);\n nodes.push(node);\n } else {\n nodes.push({ type: 'text', content: `<${token.tag}${token.attrs}>` });\n nodes.push(...result.nodes);\n }\n }\n }\n }\n\n if (untilTag) {\n return { closed: false, nodes };\n }\n\n return { closed: true, nodes };\n}\n\n/**\n * Maps a raw tag name to a typed MarkupNode. Resolves aliases first (p→paragraph, a→link),\n * then builds the appropriate node shape. Link nodes carry full attributes; other element\n * nodes extract only accessibilityLabel.\n */\nfunction buildNode(rawTag: string, attrs: string, children: MarkupNode[]): MarkupNode {\n const tag = TAG_ALIASES[rawTag] || rawTag;\n\n if (tag === 'link') {\n return { type: 'link', children, ...parseAttributes(attrs) };\n }\n\n if (tag === 'paragraph') {\n return { type: 'paragraph', children };\n }\n\n const { accessibilityLabel } = parseAttributes(attrs);\n\n return {\n type: tag as MarkupNode['type'],\n children,\n ...(accessibilityLabel && { accessibilityLabel }),\n } as MarkupNode;\n}\n\n/**\n * Matches allow-listed attributes from the raw attribute string captured by TAG_REGEX.\n * Requires whitespace before each attribute name to prevent matching inside quoted values.\n *\n * Example: for input ` href=\"https://wise.com\" target=\"_blank\"`\n * - Match 1: groups = ['href', 'https://wise.com', undefined]\n * - Match 2: groups = ['target', '_blank', undefined]\n *\n * Capture groups:\n * 1. Attribute name (href, action, target, or accessibilityLabel)\n * 2. Double-quoted value (if present)\n * 3. Single-quoted value (if present)\n */\nconst ATTR_REGEX = /(?<=\\s)(href|action|target|accessibilityLabel)=(?:\"([^\"]*)\"|'([^']*)')/g;\n\ntype ParsedAttributes = {\n href?: string;\n action?: string;\n target?: string;\n accessibilityLabel?: string;\n};\n\n/**\n * Extracts allowed attributes from a raw attribute string.\n * Supports both double- and single-quoted values. Any attribute not in the\n * allow-list (href, action, target, accessibilityLabel) is silently discarded.\n * First occurrence wins — duplicates are ignored.\n */\nfunction parseAttributes(attrs: string): ParsedAttributes {\n const result: ParsedAttributes = {};\n ATTR_REGEX.lastIndex = 0;\n let match = ATTR_REGEX.exec(attrs);\n\n while (match !== null) {\n const key = match[1] as 'href' | 'action' | 'target' | 'accessibilityLabel';\n const value = match[2] ?? match[3];\n\n if (!(key in result)) {\n const sanitized = sanitizeAttributeValue(key, value);\n if (sanitized !== undefined) {\n result[key] = sanitized;\n }\n }\n\n match = ATTR_REGEX.exec(attrs);\n }\n\n return result;\n}\n\nfunction sanitizeAttributeValue(\n key: 'href' | 'action' | 'target' | 'accessibilityLabel',\n value: string,\n): string | undefined {\n switch (key) {\n case 'href':\n return value.replace(CONTROL_CHARS, '');\n case 'action':\n if (OBJECT_PROTOTYPE_KEYS.has(value)) {\n return undefined;\n }\n return value;\n case 'target':\n if (!ALLOWED_TARGETS.includes(value)) {\n return undefined;\n }\n return value;\n case 'accessibilityLabel':\n return value.replace(HTML_METACHAR, '').slice(0, MAX_ACCESSIBILITY_LABEL_LENGTH);\n default:\n return undefined;\n }\n}\n\n/** Entry point: tokenises the input string, then parses the token stream into a MarkupNode tree. */\nexport function parseMarkup(input: string): MarkupNode[] {\n if (!input) {\n return [];\n }\n\n if (input.length > MAX_INPUT_LENGTH) {\n return [{ type: 'text', content: input }];\n }\n\n const tokens = tokenise(input);\n const position = { index: 0 };\n return parse(tokens, position).nodes;\n}\n"],"names":["MAX_INPUT_LENGTH","MAX_ACCESSIBILITY_LABEL_LENGTH","OBJECT_PROTOTYPE_KEYS","Set","Object","getOwnPropertyNames","prototype","CONTROL_CHARS","HTML_METACHAR","TAG_REGEX","RegExp","ALLOWED_TAGS","join","tokenise","input","tokens","lastIndex","match","exec","index","pushTextWithNewlines","slice","isClose","tag","attrs","push","type","length","text","parts","split","content","parse","position","untilTag","depth","nodes","token","closed","MAX_NESTING_DEPTH","result","node","buildNode","rawTag","children","TAG_ALIASES","parseAttributes","accessibilityLabel","ATTR_REGEX","key","value","sanitized","sanitizeAttributeValue","undefined","replace","has","ALLOWED_TARGETS","includes","parseMarkup"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"sanitise.js","sources":["../../../src/Markup/utils/sanitise.ts"],"sourcesContent":["import { ALLOWED_PROTOCOLS } from '../constants';\n\nconst INVISIBLE_CHARS = /[\\u200b\\u200c\\u200d\\ufeff\\u00ad\\u2060\\u180e]/g;\n// eslint-disable-next-line regexp/no-control-character\nconst CONTROL_CHARS = /[\\u0000-\\u001f\\u007f-\\u009f]/;\nconst DANGEROUS_SCHEME = /^(?:javascript|vbscript|data|jscript)\\s*:/i;\n// eslint-disable-next-line regexp/no-useless-non-capturing-group\nconst ENCODED_COLON_SCHEME = /^(?:javascript|vbscript|data|jscript)(?:%3a)/i;\nconst IPV6_BRACKETS = /^\\[|\\]$/g;\nconst NUMERIC_IP = /^[\\d.]+$/;\nconst HEX_IP = /^0x[0-9a-f]+$/i;\n\nexport function sanitiseHref(href: string): string | undefined {\n const cleaned = href.replace(INVISIBLE_CHARS, '');\n const trimmed = cleaned.trim();\n\n if (!trimmed) {\n return undefined;\n }\n\n if (CONTROL_CHARS.test(trimmed)) {\n return undefined;\n }\n\n if (DANGEROUS_SCHEME.test(trimmed)) {\n return undefined;\n }\n\n if (ENCODED_COLON_SCHEME.test(trimmed)) {\n return undefined;\n }\n\n if (trimmed.startsWith('//')) {\n return undefined;\n }\n\n if (trimmed.startsWith('\\\\')) {\n return undefined;\n }\n\n if (trimmed.startsWith('/')) {\n return trimmed[1] !== '\\\\' ? trimmed : undefined;\n }\n\n if (trimmed.startsWith('#')) {\n return trimmed;\n }\n\n if (trimmed.startsWith('./') || trimmed.startsWith('../')) {\n return undefined;\n }\n\n try {\n const url = new URL(trimmed);\n\n if (!ALLOWED_PROTOCOLS.includes(url.protocol)) {\n return undefined;\n }\n\n if (url.protocol === 'https:') {\n if (!trimmed.startsWith('https://')) {\n return undefined;\n }\n\n if (!url.hostname) {\n return undefined;\n }\n\n if (url.username || url.password) {\n return undefined;\n }\n\n if (isInternalHost(url.hostname)) {\n return undefined;\n }\n }\n\n if (url.protocol === 'mailto:') {\n if (url.search) {\n return undefined;\n }\n\n if (!url.pathname) {\n return undefined;\n }\n }\n\n return trimmed;\n } catch {\n return undefined;\n }\n}\n\nexport type AllowLinksMode = 'internal' | 'all' | 'none';\n\n// Synthetic origin used to resolve relative paths via the WHATWG URL parser.\n// If the resolved origin still equals this sentinel, the path stays on-origin.\nconst SSR_SENTINEL_ORIGIN = 'https://internal.invalid';\n\nexport function isHrefAllowedByMode(href: string, mode: AllowLinksMode): boolean {\n switch (mode) {\n case 'none':\n return false;\n case 'all':\n return true;\n case 'internal':\n try {\n if (!href.startsWith('/')) {\n const parsed = new URL(href);\n return parsed.protocol === 'https:' && parsed.hostname === 'wise.com';\n }\n const parsed = new URL(href, SSR_SENTINEL_ORIGIN);\n return parsed.origin === SSR_SENTINEL_ORIGIN;\n } catch {\n return false;\n }\n }\n}\n\nfunction isInternalHost(hostname: string): boolean {\n const stripped = hostname.replace(IPV6_BRACKETS, '');\n const host = stripped.endsWith('.') ? stripped.slice(0, -1) : stripped;\n if (NUMERIC_IP.test(host)) return true;\n if (HEX_IP.test(host)) return true;\n if (host === '::1' || host === '0:0:0:0:0:0:0:1') return true;\n if (host === 'localhost') return true;\n if (host.endsWith('.internal')) return true;\n return false;\n}\n"],"names":["INVISIBLE_CHARS","CONTROL_CHARS","DANGEROUS_SCHEME","ENCODED_COLON_SCHEME","IPV6_BRACKETS","NUMERIC_IP","HEX_IP","sanitiseHref","href","cleaned","replace","trimmed","trim","undefined","test","startsWith","url","URL","ALLOWED_PROTOCOLS","includes","protocol","hostname","username","password","isInternalHost","search","pathname","SSR_SENTINEL_ORIGIN","isHrefAllowedByMode","mode","parsed","origin","stripped","host","endsWith","slice"],"mappings":"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"}
1
+ {"version":3,"file":"sanitise.js","sources":["../../../src/Markup/utils/sanitise.ts"],"sourcesContent":["import { ALLOWED_PROTOCOLS } from '../constants';\n\nconst INVISIBLE_CHARS = /[\\u200b\\u200c\\u200d\\ufeff\\u00ad\\u2060\\u180e]/g;\n// eslint-disable-next-line regexp/no-control-character\nconst CONTROL_CHARS = /[\\u0000-\\u001f\\u007f-\\u009f]/;\nconst DANGEROUS_SCHEME = /^(?:javascript|vbscript|data|jscript)\\s*:/i;\n// eslint-disable-next-line regexp/no-useless-non-capturing-group\nconst ENCODED_COLON_SCHEME = /^(?:javascript|vbscript|data|jscript)(?:%3a)/i;\nconst IPV6_BRACKETS = /^\\[|\\]$/g;\nconst NUMERIC_IP = /^[\\d.]+$/;\nconst HEX_IP = /^0x[0-9a-f]+$/i;\n\nexport function sanitiseHref(href: string): string | undefined {\n const cleaned = href.replace(INVISIBLE_CHARS, '');\n const trimmed = cleaned.trim();\n\n if (!trimmed) {\n return undefined;\n }\n\n if (CONTROL_CHARS.test(trimmed)) {\n return undefined;\n }\n\n if (DANGEROUS_SCHEME.test(trimmed)) {\n return undefined;\n }\n\n if (ENCODED_COLON_SCHEME.test(trimmed)) {\n return undefined;\n }\n\n if (trimmed.startsWith('//')) {\n return undefined;\n }\n\n if (trimmed.startsWith('\\\\')) {\n return undefined;\n }\n\n if (trimmed.startsWith('/')) {\n return trimmed[1] !== '\\\\' ? trimmed : undefined;\n }\n\n if (trimmed.startsWith('#')) {\n return trimmed;\n }\n\n if (trimmed.startsWith('./') || trimmed.startsWith('../')) {\n return undefined;\n }\n\n try {\n const url = new URL(trimmed);\n\n if (!ALLOWED_PROTOCOLS.includes(url.protocol)) {\n return undefined;\n }\n\n if (url.protocol === 'https:') {\n if (!trimmed.startsWith('https://')) {\n return undefined;\n }\n\n if (!url.hostname) {\n return undefined;\n }\n\n if (url.username || url.password) {\n return undefined;\n }\n\n if (isInternalHost(url.hostname)) {\n return undefined;\n }\n }\n\n if (url.protocol === 'mailto:') {\n if (url.search) {\n return undefined;\n }\n\n if (!url.pathname) {\n return undefined;\n }\n }\n\n return trimmed;\n } catch {\n return undefined;\n }\n}\n\nexport type AllowLinksMode = 'internal' | 'all' | 'none';\n\n// Synthetic origin used to resolve relative paths via the WHATWG URL parser.\n// If the resolved origin still equals this sentinel, the path stays on-origin.\nconst SSR_SENTINEL_ORIGIN = 'https://internal.invalid';\n\nexport function isHrefAllowedByMode(href: string, mode: AllowLinksMode): boolean {\n switch (mode) {\n case 'none':\n return false;\n case 'all':\n return true;\n case 'internal':\n try {\n if (!href.startsWith('/')) {\n const parsed = new URL(href);\n return parsed.protocol === 'https:' && parsed.hostname === 'wise.com';\n }\n const parsed = new URL(href, SSR_SENTINEL_ORIGIN);\n return parsed.origin === SSR_SENTINEL_ORIGIN;\n } catch {\n return false;\n }\n }\n}\n\nfunction isInternalHost(hostname: string): boolean {\n const stripped = hostname.replace(IPV6_BRACKETS, '');\n const host = stripped.endsWith('.') ? stripped.slice(0, -1) : stripped;\n if (NUMERIC_IP.test(host)) return true;\n if (HEX_IP.test(host)) return true;\n if (host === '::1' || host === '0:0:0:0:0:0:0:1') return true;\n if (host === 'localhost') return true;\n if (host.endsWith('.internal')) return true;\n return false;\n}\n"],"names":["INVISIBLE_CHARS","CONTROL_CHARS","DANGEROUS_SCHEME","ENCODED_COLON_SCHEME","IPV6_BRACKETS","NUMERIC_IP","HEX_IP","sanitiseHref","href","cleaned","replace","trimmed","trim","undefined","test","startsWith","url","URL","ALLOWED_PROTOCOLS","includes","protocol","hostname","username","password","isInternalHost","search","pathname","SSR_SENTINEL_ORIGIN","isHrefAllowedByMode","mode","parsed","origin","stripped","host","endsWith","slice"],"mappings":";;;;AAEA,MAAMA,eAAe,GAAG,+CAA+C;AACvE;AACA,MAAMC,aAAa,GAAG,8BAA8B;AACpD,MAAMC,gBAAgB,GAAG,4CAA4C;AACrE;AACA,MAAMC,oBAAoB,GAAG,+CAA+C;AAC5E,MAAMC,aAAa,GAAG,UAAU;AAChC,MAAMC,UAAU,GAAG,UAAU;AAC7B,MAAMC,MAAM,GAAG,gBAAgB;AAEzB,SAAUC,YAAYA,CAACC,IAAY,EAAA;EACvC,MAAMC,OAAO,GAAGD,IAAI,CAACE,OAAO,CAACV,eAAe,EAAE,EAAE,CAAC;AACjD,EAAA,MAAMW,OAAO,GAAGF,OAAO,CAACG,IAAI,EAAE;EAE9B,IAAI,CAACD,OAAO,EAAE;AACZ,IAAA,OAAOE,SAAS;AAClB,EAAA;AAEA,EAAA,IAAIZ,aAAa,CAACa,IAAI,CAACH,OAAO,CAAC,EAAE;AAC/B,IAAA,OAAOE,SAAS;AAClB,EAAA;AAEA,EAAA,IAAIX,gBAAgB,CAACY,IAAI,CAACH,OAAO,CAAC,EAAE;AAClC,IAAA,OAAOE,SAAS;AAClB,EAAA;AAEA,EAAA,IAAIV,oBAAoB,CAACW,IAAI,CAACH,OAAO,CAAC,EAAE;AACtC,IAAA,OAAOE,SAAS;AAClB,EAAA;AAEA,EAAA,IAAIF,OAAO,CAACI,UAAU,CAAC,IAAI,CAAC,EAAE;AAC5B,IAAA,OAAOF,SAAS;AAClB,EAAA;AAEA,EAAA,IAAIF,OAAO,CAACI,UAAU,CAAC,IAAI,CAAC,EAAE;AAC5B,IAAA,OAAOF,SAAS;AAClB,EAAA;AAEA,EAAA,IAAIF,OAAO,CAACI,UAAU,CAAC,GAAG,CAAC,EAAE;IAC3B,OAAOJ,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,GAAGA,OAAO,GAAGE,SAAS;AAClD,EAAA;AAEA,EAAA,IAAIF,OAAO,CAACI,UAAU,CAAC,GAAG,CAAC,EAAE;AAC3B,IAAA,OAAOJ,OAAO;AAChB,EAAA;AAEA,EAAA,IAAIA,OAAO,CAACI,UAAU,CAAC,IAAI,CAAC,IAAIJ,OAAO,CAACI,UAAU,CAAC,KAAK,CAAC,EAAE;AACzD,IAAA,OAAOF,SAAS;AAClB,EAAA;EAEA,IAAI;AACF,IAAA,MAAMG,GAAG,GAAG,IAAIC,GAAG,CAACN,OAAO,CAAC;IAE5B,IAAI,CAACO,2BAAiB,CAACC,QAAQ,CAACH,GAAG,CAACI,QAAQ,CAAC,EAAE;AAC7C,MAAA,OAAOP,SAAS;AAClB,IAAA;AAEA,IAAA,IAAIG,GAAG,CAACI,QAAQ,KAAK,QAAQ,EAAE;AAC7B,MAAA,IAAI,CAACT,OAAO,CAACI,UAAU,CAAC,UAAU,CAAC,EAAE;AACnC,QAAA,OAAOF,SAAS;AAClB,MAAA;AAEA,MAAA,IAAI,CAACG,GAAG,CAACK,QAAQ,EAAE;AACjB,QAAA,OAAOR,SAAS;AAClB,MAAA;AAEA,MAAA,IAAIG,GAAG,CAACM,QAAQ,IAAIN,GAAG,CAACO,QAAQ,EAAE;AAChC,QAAA,OAAOV,SAAS;AAClB,MAAA;AAEA,MAAA,IAAIW,cAAc,CAACR,GAAG,CAACK,QAAQ,CAAC,EAAE;AAChC,QAAA,OAAOR,SAAS;AAClB,MAAA;AACF,IAAA;AAEA,IAAA,IAAIG,GAAG,CAACI,QAAQ,KAAK,SAAS,EAAE;MAC9B,IAAIJ,GAAG,CAACS,MAAM,EAAE;AACd,QAAA,OAAOZ,SAAS;AAClB,MAAA;AAEA,MAAA,IAAI,CAACG,GAAG,CAACU,QAAQ,EAAE;AACjB,QAAA,OAAOb,SAAS;AAClB,MAAA;AACF,IAAA;AAEA,IAAA,OAAOF,OAAO;AAChB,EAAA,CAAC,CAAC,MAAM;AACN,IAAA,OAAOE,SAAS;AAClB,EAAA;AACF;AAIA;AACA;AACA,MAAMc,mBAAmB,GAAG,0BAA0B;AAEhD,SAAUC,mBAAmBA,CAACpB,IAAY,EAAEqB,IAAoB,EAAA;AACpE,EAAA,QAAQA,IAAI;AACV,IAAA,KAAK,MAAM;AACT,MAAA,OAAO,KAAK;AACd,IAAA,KAAK,KAAK;AACR,MAAA,OAAO,IAAI;AACb,IAAA,KAAK,UAAU;MACb,IAAI;AACF,QAAA,IAAI,CAACrB,IAAI,CAACO,UAAU,CAAC,GAAG,CAAC,EAAE;AACzB,UAAA,MAAMe,MAAM,GAAG,IAAIb,GAAG,CAACT,IAAI,CAAC;UAC5B,OAAOsB,MAAM,CAACV,QAAQ,KAAK,QAAQ,IAAIU,MAAM,CAACT,QAAQ,KAAK,UAAU;AACvE,QAAA;QACA,MAAMS,MAAM,GAAG,IAAIb,GAAG,CAACT,IAAI,EAAEmB,mBAAmB,CAAC;AACjD,QAAA,OAAOG,MAAM,CAACC,MAAM,KAAKJ,mBAAmB;AAC9C,MAAA,CAAC,CAAC,MAAM;AACN,QAAA,OAAO,KAAK;AACd,MAAA;AACJ;AACF;AAEA,SAASH,cAAcA,CAACH,QAAgB,EAAA;EACtC,MAAMW,QAAQ,GAAGX,QAAQ,CAACX,OAAO,CAACN,aAAa,EAAE,EAAE,CAAC;AACpD,EAAA,MAAM6B,IAAI,GAAGD,QAAQ,CAACE,QAAQ,CAAC,GAAG,CAAC,GAAGF,QAAQ,CAACG,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAGH,QAAQ;EACtE,IAAI3B,UAAU,CAACS,IAAI,CAACmB,IAAI,CAAC,EAAE,OAAO,IAAI;EACtC,IAAI3B,MAAM,CAACQ,IAAI,CAACmB,IAAI,CAAC,EAAE,OAAO,IAAI;EAClC,IAAIA,IAAI,KAAK,KAAK,IAAIA,IAAI,KAAK,iBAAiB,EAAE,OAAO,IAAI;AAC7D,EAAA,IAAIA,IAAI,KAAK,WAAW,EAAE,OAAO,IAAI;EACrC,IAAIA,IAAI,CAACC,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,IAAI;AAC3C,EAAA,OAAO,KAAK;AACd;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"sanitise.mjs","sources":["../../../src/Markup/utils/sanitise.ts"],"sourcesContent":["import { ALLOWED_PROTOCOLS } from '../constants';\n\nconst INVISIBLE_CHARS = /[\\u200b\\u200c\\u200d\\ufeff\\u00ad\\u2060\\u180e]/g;\n// eslint-disable-next-line regexp/no-control-character\nconst CONTROL_CHARS = /[\\u0000-\\u001f\\u007f-\\u009f]/;\nconst DANGEROUS_SCHEME = /^(?:javascript|vbscript|data|jscript)\\s*:/i;\n// eslint-disable-next-line regexp/no-useless-non-capturing-group\nconst ENCODED_COLON_SCHEME = /^(?:javascript|vbscript|data|jscript)(?:%3a)/i;\nconst IPV6_BRACKETS = /^\\[|\\]$/g;\nconst NUMERIC_IP = /^[\\d.]+$/;\nconst HEX_IP = /^0x[0-9a-f]+$/i;\n\nexport function sanitiseHref(href: string): string | undefined {\n const cleaned = href.replace(INVISIBLE_CHARS, '');\n const trimmed = cleaned.trim();\n\n if (!trimmed) {\n return undefined;\n }\n\n if (CONTROL_CHARS.test(trimmed)) {\n return undefined;\n }\n\n if (DANGEROUS_SCHEME.test(trimmed)) {\n return undefined;\n }\n\n if (ENCODED_COLON_SCHEME.test(trimmed)) {\n return undefined;\n }\n\n if (trimmed.startsWith('//')) {\n return undefined;\n }\n\n if (trimmed.startsWith('\\\\')) {\n return undefined;\n }\n\n if (trimmed.startsWith('/')) {\n return trimmed[1] !== '\\\\' ? trimmed : undefined;\n }\n\n if (trimmed.startsWith('#')) {\n return trimmed;\n }\n\n if (trimmed.startsWith('./') || trimmed.startsWith('../')) {\n return undefined;\n }\n\n try {\n const url = new URL(trimmed);\n\n if (!ALLOWED_PROTOCOLS.includes(url.protocol)) {\n return undefined;\n }\n\n if (url.protocol === 'https:') {\n if (!trimmed.startsWith('https://')) {\n return undefined;\n }\n\n if (!url.hostname) {\n return undefined;\n }\n\n if (url.username || url.password) {\n return undefined;\n }\n\n if (isInternalHost(url.hostname)) {\n return undefined;\n }\n }\n\n if (url.protocol === 'mailto:') {\n if (url.search) {\n return undefined;\n }\n\n if (!url.pathname) {\n return undefined;\n }\n }\n\n return trimmed;\n } catch {\n return undefined;\n }\n}\n\nexport type AllowLinksMode = 'internal' | 'all' | 'none';\n\n// Synthetic origin used to resolve relative paths via the WHATWG URL parser.\n// If the resolved origin still equals this sentinel, the path stays on-origin.\nconst SSR_SENTINEL_ORIGIN = 'https://internal.invalid';\n\nexport function isHrefAllowedByMode(href: string, mode: AllowLinksMode): boolean {\n switch (mode) {\n case 'none':\n return false;\n case 'all':\n return true;\n case 'internal':\n try {\n if (!href.startsWith('/')) {\n const parsed = new URL(href);\n return parsed.protocol === 'https:' && parsed.hostname === 'wise.com';\n }\n const parsed = new URL(href, SSR_SENTINEL_ORIGIN);\n return parsed.origin === SSR_SENTINEL_ORIGIN;\n } catch {\n return false;\n }\n }\n}\n\nfunction isInternalHost(hostname: string): boolean {\n const stripped = hostname.replace(IPV6_BRACKETS, '');\n const host = stripped.endsWith('.') ? stripped.slice(0, -1) : stripped;\n if (NUMERIC_IP.test(host)) return true;\n if (HEX_IP.test(host)) return true;\n if (host === '::1' || host === '0:0:0:0:0:0:0:1') return true;\n if (host === 'localhost') return true;\n if (host.endsWith('.internal')) return true;\n return false;\n}\n"],"names":["INVISIBLE_CHARS","CONTROL_CHARS","DANGEROUS_SCHEME","ENCODED_COLON_SCHEME","IPV6_BRACKETS","NUMERIC_IP","HEX_IP","sanitiseHref","href","cleaned","replace","trimmed","trim","undefined","test","startsWith","url","URL","ALLOWED_PROTOCOLS","includes","protocol","hostname","username","password","isInternalHost","search","pathname","SSR_SENTINEL_ORIGIN","isHrefAllowedByMode","mode","parsed","origin","stripped","host","endsWith","slice"],"mappings":"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"}
1
+ {"version":3,"file":"sanitise.mjs","sources":["../../../src/Markup/utils/sanitise.ts"],"sourcesContent":["import { ALLOWED_PROTOCOLS } from '../constants';\n\nconst INVISIBLE_CHARS = /[\\u200b\\u200c\\u200d\\ufeff\\u00ad\\u2060\\u180e]/g;\n// eslint-disable-next-line regexp/no-control-character\nconst CONTROL_CHARS = /[\\u0000-\\u001f\\u007f-\\u009f]/;\nconst DANGEROUS_SCHEME = /^(?:javascript|vbscript|data|jscript)\\s*:/i;\n// eslint-disable-next-line regexp/no-useless-non-capturing-group\nconst ENCODED_COLON_SCHEME = /^(?:javascript|vbscript|data|jscript)(?:%3a)/i;\nconst IPV6_BRACKETS = /^\\[|\\]$/g;\nconst NUMERIC_IP = /^[\\d.]+$/;\nconst HEX_IP = /^0x[0-9a-f]+$/i;\n\nexport function sanitiseHref(href: string): string | undefined {\n const cleaned = href.replace(INVISIBLE_CHARS, '');\n const trimmed = cleaned.trim();\n\n if (!trimmed) {\n return undefined;\n }\n\n if (CONTROL_CHARS.test(trimmed)) {\n return undefined;\n }\n\n if (DANGEROUS_SCHEME.test(trimmed)) {\n return undefined;\n }\n\n if (ENCODED_COLON_SCHEME.test(trimmed)) {\n return undefined;\n }\n\n if (trimmed.startsWith('//')) {\n return undefined;\n }\n\n if (trimmed.startsWith('\\\\')) {\n return undefined;\n }\n\n if (trimmed.startsWith('/')) {\n return trimmed[1] !== '\\\\' ? trimmed : undefined;\n }\n\n if (trimmed.startsWith('#')) {\n return trimmed;\n }\n\n if (trimmed.startsWith('./') || trimmed.startsWith('../')) {\n return undefined;\n }\n\n try {\n const url = new URL(trimmed);\n\n if (!ALLOWED_PROTOCOLS.includes(url.protocol)) {\n return undefined;\n }\n\n if (url.protocol === 'https:') {\n if (!trimmed.startsWith('https://')) {\n return undefined;\n }\n\n if (!url.hostname) {\n return undefined;\n }\n\n if (url.username || url.password) {\n return undefined;\n }\n\n if (isInternalHost(url.hostname)) {\n return undefined;\n }\n }\n\n if (url.protocol === 'mailto:') {\n if (url.search) {\n return undefined;\n }\n\n if (!url.pathname) {\n return undefined;\n }\n }\n\n return trimmed;\n } catch {\n return undefined;\n }\n}\n\nexport type AllowLinksMode = 'internal' | 'all' | 'none';\n\n// Synthetic origin used to resolve relative paths via the WHATWG URL parser.\n// If the resolved origin still equals this sentinel, the path stays on-origin.\nconst SSR_SENTINEL_ORIGIN = 'https://internal.invalid';\n\nexport function isHrefAllowedByMode(href: string, mode: AllowLinksMode): boolean {\n switch (mode) {\n case 'none':\n return false;\n case 'all':\n return true;\n case 'internal':\n try {\n if (!href.startsWith('/')) {\n const parsed = new URL(href);\n return parsed.protocol === 'https:' && parsed.hostname === 'wise.com';\n }\n const parsed = new URL(href, SSR_SENTINEL_ORIGIN);\n return parsed.origin === SSR_SENTINEL_ORIGIN;\n } catch {\n return false;\n }\n }\n}\n\nfunction isInternalHost(hostname: string): boolean {\n const stripped = hostname.replace(IPV6_BRACKETS, '');\n const host = stripped.endsWith('.') ? stripped.slice(0, -1) : stripped;\n if (NUMERIC_IP.test(host)) return true;\n if (HEX_IP.test(host)) return true;\n if (host === '::1' || host === '0:0:0:0:0:0:0:1') return true;\n if (host === 'localhost') return true;\n if (host.endsWith('.internal')) return true;\n return false;\n}\n"],"names":["INVISIBLE_CHARS","CONTROL_CHARS","DANGEROUS_SCHEME","ENCODED_COLON_SCHEME","IPV6_BRACKETS","NUMERIC_IP","HEX_IP","sanitiseHref","href","cleaned","replace","trimmed","trim","undefined","test","startsWith","url","URL","ALLOWED_PROTOCOLS","includes","protocol","hostname","username","password","isInternalHost","search","pathname","SSR_SENTINEL_ORIGIN","isHrefAllowedByMode","mode","parsed","origin","stripped","host","endsWith","slice"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Modal.js","sources":["../../src/Modal/Modal.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport { ReactNode, useContext, useId, useRef } from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport { useIntl } from 'react-intl';\n\nimport {\n Size,\n Position,\n PositionTop,\n PositionCenter,\n Scroll,\n CommonProps,\n SizeSmall,\n SizeMedium,\n SizeLarge,\n SizeExtraLarge,\n ScrollContent,\n ScrollViewport,\n Typography,\n} from '../common';\nimport { useLayout } from '../common/hooks';\nimport Dimmer from '../Dimmer';\nimport Drawer from '../Drawer';\nimport { OverlayIdContext } from '../Provider/overlay/OverlayIdProvider';\nimport Title from '../Title/Title';\nimport { Cross } from '@transferwise/icons';\nimport IconButton from '../IconButton';\nimport closeBtnMessages from '../common/CloseButton/CloseButton.messages';\n\nconst TRANSITION_DURATION_IN_MILLISECONDS = 150;\n\nexport type ModalProps = CommonProps & {\n /** @default null */\n title?: ReactNode;\n body: ReactNode;\n /** @default null */\n footer?: ReactNode;\n /** @default 'md' */\n size?: SizeSmall | SizeMedium | SizeLarge | SizeExtraLarge;\n onClose: () => void;\n onUnmount?: () => void;\n open: boolean;\n /** @default 'viewport' */\n scroll?: ScrollContent | ScrollViewport;\n /** @default 'center' */\n position?: PositionTop | PositionCenter;\n /** @default false */\n disableDimmerClickToClose?: boolean;\n};\n\nconst Modal = ({\n title = null,\n body,\n footer = null,\n onClose,\n onUnmount,\n className,\n open,\n size = Size.MEDIUM,\n scroll = Scroll.VIEWPORT,\n position = Position.CENTER,\n disableDimmerClickToClose = false,\n ...otherProps\n}: ModalProps) => {\n const intl = useIntl();\n const { isSmall } = useLayout();\n\n const contentReference = useRef<HTMLDivElement>(null);\n const titleId = useId();\n\n const overlayId = useContext(OverlayIdContext);\n\n return !isSmall ? (\n <Drawer\n open={open}\n className={className}\n headerTitle={title}\n footerContent={footer}\n position={Position.BOTTOM}\n onClose={onClose}\n onUnmount={onUnmount}\n >\n {body}\n </Drawer>\n ) : (\n <Dimmer\n open={open}\n scrollable={scroll === Scroll.VIEWPORT}\n contentPosition={position}\n disableClickToClose={disableDimmerClickToClose}\n onClose={onClose}\n onExited={onUnmount}\n >\n <CSSTransition\n nodeRef={contentReference}\n appear\n in={open}\n classNames={{ enterDone: 'in' }}\n timeout={TRANSITION_DURATION_IN_MILLISECONDS}\n unmountOnExit\n >\n <div\n ref={contentReference}\n className={clsx(\n 'tw-modal',\n 'd-flex',\n 'fade',\n 'outline-none',\n scroll === Scroll.CONTENT && 'tw-modal--scrollable',\n className,\n )}\n {...otherProps}\n >\n <div\n id={overlayId}\n role=\"dialog\"\n aria-modal\n aria-labelledby={titleId}\n className={clsx('tw-modal-dialog', 'd-flex', {\n [`tw-modal-${size}`]: size,\n })}\n >\n <div\n className={clsx(\n 'tw-modal-content',\n 'd-flex',\n 'flex-column',\n 'justify-content-between',\n )}\n >\n <div\n className={clsx(\n 'tw-modal-header',\n 'd-flex',\n 'align-items-center',\n title ? 'justify-content-between' : 'justify-content-end',\n 'flex-wrap',\n )}\n >\n {title && (\n <Title id={titleId} type={Typography.TITLE_SUBSECTION} className=\"tw-modal-title\">\n {title}\n </Title>\n )}\n <IconButton\n size={40}\n priority=\"tertiary\"\n aria-label={intl.formatMessage(closeBtnMessages.ariaLabel)}\n onClick={onClose}\n >\n <Cross />\n </IconButton>\n </div>\n <div\n className={clsx('tw-modal-body', {\n 'tw-modal-body--scrollable': scroll === Scroll.CONTENT,\n })}\n >\n {body}\n </div>\n {footer ? (\n <div\n className={clsx('tw-modal-footer', 'd-flex', 'align-items-center', 'flex-wrap')}\n >\n {footer}\n </div>\n ) : (\n <div className=\"m-t-3\" />\n )}\n </div>\n </div>\n </div>\n </CSSTransition>\n </Dimmer>\n );\n};\n\nexport default Modal;\n"],"names":["TRANSITION_DURATION_IN_MILLISECONDS","Modal","title","body","footer","onClose","onUnmount","className","open","size","Size","MEDIUM","scroll","Scroll","VIEWPORT","position","Position","CENTER","disableDimmerClickToClose","otherProps","intl","useIntl","isSmall","useLayout","contentReference","useRef","titleId","useId","overlayId","useContext","OverlayIdContext","_jsx","Drawer","headerTitle","footerContent","BOTTOM","children","Dimmer","scrollable","contentPosition","disableClickToClose","onExited","CSSTransition","nodeRef","appear","in","classNames","enterDone","timeout","unmountOnExit","ref","clsx","CONTENT","id","role","_jsxs","Title","type","Typography","TITLE_SUBSECTION","IconButton","priority","formatMessage","closeBtnMessages","ariaLabel","onClick","Cross"],"mappings":"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"}
1
+ {"version":3,"file":"Modal.js","sources":["../../src/Modal/Modal.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport { ReactNode, useContext, useId, useRef } from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport { useIntl } from 'react-intl';\n\nimport {\n Size,\n Position,\n PositionTop,\n PositionCenter,\n Scroll,\n CommonProps,\n SizeSmall,\n SizeMedium,\n SizeLarge,\n SizeExtraLarge,\n ScrollContent,\n ScrollViewport,\n Typography,\n} from '../common';\nimport { useLayout } from '../common/hooks';\nimport Dimmer from '../Dimmer';\nimport Drawer from '../Drawer';\nimport { OverlayIdContext } from '../Provider/overlay/OverlayIdProvider';\nimport Title from '../Title/Title';\nimport { Cross } from '@transferwise/icons';\nimport IconButton from '../IconButton';\nimport closeBtnMessages from '../common/CloseButton/CloseButton.messages';\n\nconst TRANSITION_DURATION_IN_MILLISECONDS = 150;\n\nexport type ModalProps = CommonProps & {\n /** @default null */\n title?: ReactNode;\n body: ReactNode;\n /** @default null */\n footer?: ReactNode;\n /** @default 'md' */\n size?: SizeSmall | SizeMedium | SizeLarge | SizeExtraLarge;\n onClose: () => void;\n onUnmount?: () => void;\n open: boolean;\n /** @default 'viewport' */\n scroll?: ScrollContent | ScrollViewport;\n /** @default 'center' */\n position?: PositionTop | PositionCenter;\n /** @default false */\n disableDimmerClickToClose?: boolean;\n};\n\nconst Modal = ({\n title = null,\n body,\n footer = null,\n onClose,\n onUnmount,\n className,\n open,\n size = Size.MEDIUM,\n scroll = Scroll.VIEWPORT,\n position = Position.CENTER,\n disableDimmerClickToClose = false,\n ...otherProps\n}: ModalProps) => {\n const intl = useIntl();\n const { isSmall } = useLayout();\n\n const contentReference = useRef<HTMLDivElement>(null);\n const titleId = useId();\n\n const overlayId = useContext(OverlayIdContext);\n\n return !isSmall ? (\n <Drawer\n open={open}\n className={className}\n headerTitle={title}\n footerContent={footer}\n position={Position.BOTTOM}\n onClose={onClose}\n onUnmount={onUnmount}\n >\n {body}\n </Drawer>\n ) : (\n <Dimmer\n open={open}\n scrollable={scroll === Scroll.VIEWPORT}\n contentPosition={position}\n disableClickToClose={disableDimmerClickToClose}\n onClose={onClose}\n onExited={onUnmount}\n >\n <CSSTransition\n nodeRef={contentReference}\n appear\n in={open}\n classNames={{ enterDone: 'in' }}\n timeout={TRANSITION_DURATION_IN_MILLISECONDS}\n unmountOnExit\n >\n <div\n ref={contentReference}\n className={clsx(\n 'tw-modal',\n 'd-flex',\n 'fade',\n 'outline-none',\n scroll === Scroll.CONTENT && 'tw-modal--scrollable',\n className,\n )}\n {...otherProps}\n >\n <div\n id={overlayId}\n role=\"dialog\"\n aria-modal\n aria-labelledby={titleId}\n className={clsx('tw-modal-dialog', 'd-flex', {\n [`tw-modal-${size}`]: size,\n })}\n >\n <div\n className={clsx(\n 'tw-modal-content',\n 'd-flex',\n 'flex-column',\n 'justify-content-between',\n )}\n >\n <div\n className={clsx(\n 'tw-modal-header',\n 'd-flex',\n 'align-items-center',\n title ? 'justify-content-between' : 'justify-content-end',\n 'flex-wrap',\n )}\n >\n {title && (\n <Title id={titleId} type={Typography.TITLE_SUBSECTION} className=\"tw-modal-title\">\n {title}\n </Title>\n )}\n <IconButton\n size={40}\n priority=\"tertiary\"\n aria-label={intl.formatMessage(closeBtnMessages.ariaLabel)}\n onClick={onClose}\n >\n <Cross />\n </IconButton>\n </div>\n <div\n className={clsx('tw-modal-body', {\n 'tw-modal-body--scrollable': scroll === Scroll.CONTENT,\n })}\n >\n {body}\n </div>\n {footer ? (\n <div\n className={clsx('tw-modal-footer', 'd-flex', 'align-items-center', 'flex-wrap')}\n >\n {footer}\n </div>\n ) : (\n <div className=\"m-t-3\" />\n )}\n </div>\n </div>\n </div>\n </CSSTransition>\n </Dimmer>\n );\n};\n\nexport default Modal;\n"],"names":["TRANSITION_DURATION_IN_MILLISECONDS","Modal","title","body","footer","onClose","onUnmount","className","open","size","Size","MEDIUM","scroll","Scroll","VIEWPORT","position","Position","CENTER","disableDimmerClickToClose","otherProps","intl","useIntl","isSmall","useLayout","contentReference","useRef","titleId","useId","overlayId","useContext","OverlayIdContext","_jsx","Drawer","headerTitle","footerContent","BOTTOM","children","Dimmer","scrollable","contentPosition","disableClickToClose","onExited","CSSTransition","nodeRef","appear","in","classNames","enterDone","timeout","unmountOnExit","ref","clsx","CONTENT","id","role","_jsxs","Title","type","Typography","TITLE_SUBSECTION","IconButton","priority","formatMessage","closeBtnMessages","ariaLabel","onClick","Cross"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Modal.mjs","sources":["../../src/Modal/Modal.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport { ReactNode, useContext, useId, useRef } from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport { useIntl } from 'react-intl';\n\nimport {\n Size,\n Position,\n PositionTop,\n PositionCenter,\n Scroll,\n CommonProps,\n SizeSmall,\n SizeMedium,\n SizeLarge,\n SizeExtraLarge,\n ScrollContent,\n ScrollViewport,\n Typography,\n} from '../common';\nimport { useLayout } from '../common/hooks';\nimport Dimmer from '../Dimmer';\nimport Drawer from '../Drawer';\nimport { OverlayIdContext } from '../Provider/overlay/OverlayIdProvider';\nimport Title from '../Title/Title';\nimport { Cross } from '@transferwise/icons';\nimport IconButton from '../IconButton';\nimport closeBtnMessages from '../common/CloseButton/CloseButton.messages';\n\nconst TRANSITION_DURATION_IN_MILLISECONDS = 150;\n\nexport type ModalProps = CommonProps & {\n /** @default null */\n title?: ReactNode;\n body: ReactNode;\n /** @default null */\n footer?: ReactNode;\n /** @default 'md' */\n size?: SizeSmall | SizeMedium | SizeLarge | SizeExtraLarge;\n onClose: () => void;\n onUnmount?: () => void;\n open: boolean;\n /** @default 'viewport' */\n scroll?: ScrollContent | ScrollViewport;\n /** @default 'center' */\n position?: PositionTop | PositionCenter;\n /** @default false */\n disableDimmerClickToClose?: boolean;\n};\n\nconst Modal = ({\n title = null,\n body,\n footer = null,\n onClose,\n onUnmount,\n className,\n open,\n size = Size.MEDIUM,\n scroll = Scroll.VIEWPORT,\n position = Position.CENTER,\n disableDimmerClickToClose = false,\n ...otherProps\n}: ModalProps) => {\n const intl = useIntl();\n const { isSmall } = useLayout();\n\n const contentReference = useRef<HTMLDivElement>(null);\n const titleId = useId();\n\n const overlayId = useContext(OverlayIdContext);\n\n return !isSmall ? (\n <Drawer\n open={open}\n className={className}\n headerTitle={title}\n footerContent={footer}\n position={Position.BOTTOM}\n onClose={onClose}\n onUnmount={onUnmount}\n >\n {body}\n </Drawer>\n ) : (\n <Dimmer\n open={open}\n scrollable={scroll === Scroll.VIEWPORT}\n contentPosition={position}\n disableClickToClose={disableDimmerClickToClose}\n onClose={onClose}\n onExited={onUnmount}\n >\n <CSSTransition\n nodeRef={contentReference}\n appear\n in={open}\n classNames={{ enterDone: 'in' }}\n timeout={TRANSITION_DURATION_IN_MILLISECONDS}\n unmountOnExit\n >\n <div\n ref={contentReference}\n className={clsx(\n 'tw-modal',\n 'd-flex',\n 'fade',\n 'outline-none',\n scroll === Scroll.CONTENT && 'tw-modal--scrollable',\n className,\n )}\n {...otherProps}\n >\n <div\n id={overlayId}\n role=\"dialog\"\n aria-modal\n aria-labelledby={titleId}\n className={clsx('tw-modal-dialog', 'd-flex', {\n [`tw-modal-${size}`]: size,\n })}\n >\n <div\n className={clsx(\n 'tw-modal-content',\n 'd-flex',\n 'flex-column',\n 'justify-content-between',\n )}\n >\n <div\n className={clsx(\n 'tw-modal-header',\n 'd-flex',\n 'align-items-center',\n title ? 'justify-content-between' : 'justify-content-end',\n 'flex-wrap',\n )}\n >\n {title && (\n <Title id={titleId} type={Typography.TITLE_SUBSECTION} className=\"tw-modal-title\">\n {title}\n </Title>\n )}\n <IconButton\n size={40}\n priority=\"tertiary\"\n aria-label={intl.formatMessage(closeBtnMessages.ariaLabel)}\n onClick={onClose}\n >\n <Cross />\n </IconButton>\n </div>\n <div\n className={clsx('tw-modal-body', {\n 'tw-modal-body--scrollable': scroll === Scroll.CONTENT,\n })}\n >\n {body}\n </div>\n {footer ? (\n <div\n className={clsx('tw-modal-footer', 'd-flex', 'align-items-center', 'flex-wrap')}\n >\n {footer}\n </div>\n ) : (\n <div className=\"m-t-3\" />\n )}\n </div>\n </div>\n </div>\n </CSSTransition>\n </Dimmer>\n );\n};\n\nexport default Modal;\n"],"names":["TRANSITION_DURATION_IN_MILLISECONDS","Modal","title","body","footer","onClose","onUnmount","className","open","size","Size","MEDIUM","scroll","Scroll","VIEWPORT","position","Position","CENTER","disableDimmerClickToClose","otherProps","intl","useIntl","isSmall","useLayout","contentReference","useRef","titleId","useId","overlayId","useContext","OverlayIdContext","_jsx","Drawer","headerTitle","footerContent","BOTTOM","children","Dimmer","scrollable","contentPosition","disableClickToClose","onExited","CSSTransition","nodeRef","appear","in","classNames","enterDone","timeout","unmountOnExit","ref","clsx","CONTENT","id","role","_jsxs","Title","type","Typography","TITLE_SUBSECTION","IconButton","priority","formatMessage","closeBtnMessages","ariaLabel","onClick","Cross"],"mappings":"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"}
1
+ {"version":3,"file":"Modal.mjs","sources":["../../src/Modal/Modal.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport { ReactNode, useContext, useId, useRef } from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport { useIntl } from 'react-intl';\n\nimport {\n Size,\n Position,\n PositionTop,\n PositionCenter,\n Scroll,\n CommonProps,\n SizeSmall,\n SizeMedium,\n SizeLarge,\n SizeExtraLarge,\n ScrollContent,\n ScrollViewport,\n Typography,\n} from '../common';\nimport { useLayout } from '../common/hooks';\nimport Dimmer from '../Dimmer';\nimport Drawer from '../Drawer';\nimport { OverlayIdContext } from '../Provider/overlay/OverlayIdProvider';\nimport Title from '../Title/Title';\nimport { Cross } from '@transferwise/icons';\nimport IconButton from '../IconButton';\nimport closeBtnMessages from '../common/CloseButton/CloseButton.messages';\n\nconst TRANSITION_DURATION_IN_MILLISECONDS = 150;\n\nexport type ModalProps = CommonProps & {\n /** @default null */\n title?: ReactNode;\n body: ReactNode;\n /** @default null */\n footer?: ReactNode;\n /** @default 'md' */\n size?: SizeSmall | SizeMedium | SizeLarge | SizeExtraLarge;\n onClose: () => void;\n onUnmount?: () => void;\n open: boolean;\n /** @default 'viewport' */\n scroll?: ScrollContent | ScrollViewport;\n /** @default 'center' */\n position?: PositionTop | PositionCenter;\n /** @default false */\n disableDimmerClickToClose?: boolean;\n};\n\nconst Modal = ({\n title = null,\n body,\n footer = null,\n onClose,\n onUnmount,\n className,\n open,\n size = Size.MEDIUM,\n scroll = Scroll.VIEWPORT,\n position = Position.CENTER,\n disableDimmerClickToClose = false,\n ...otherProps\n}: ModalProps) => {\n const intl = useIntl();\n const { isSmall } = useLayout();\n\n const contentReference = useRef<HTMLDivElement>(null);\n const titleId = useId();\n\n const overlayId = useContext(OverlayIdContext);\n\n return !isSmall ? (\n <Drawer\n open={open}\n className={className}\n headerTitle={title}\n footerContent={footer}\n position={Position.BOTTOM}\n onClose={onClose}\n onUnmount={onUnmount}\n >\n {body}\n </Drawer>\n ) : (\n <Dimmer\n open={open}\n scrollable={scroll === Scroll.VIEWPORT}\n contentPosition={position}\n disableClickToClose={disableDimmerClickToClose}\n onClose={onClose}\n onExited={onUnmount}\n >\n <CSSTransition\n nodeRef={contentReference}\n appear\n in={open}\n classNames={{ enterDone: 'in' }}\n timeout={TRANSITION_DURATION_IN_MILLISECONDS}\n unmountOnExit\n >\n <div\n ref={contentReference}\n className={clsx(\n 'tw-modal',\n 'd-flex',\n 'fade',\n 'outline-none',\n scroll === Scroll.CONTENT && 'tw-modal--scrollable',\n className,\n )}\n {...otherProps}\n >\n <div\n id={overlayId}\n role=\"dialog\"\n aria-modal\n aria-labelledby={titleId}\n className={clsx('tw-modal-dialog', 'd-flex', {\n [`tw-modal-${size}`]: size,\n })}\n >\n <div\n className={clsx(\n 'tw-modal-content',\n 'd-flex',\n 'flex-column',\n 'justify-content-between',\n )}\n >\n <div\n className={clsx(\n 'tw-modal-header',\n 'd-flex',\n 'align-items-center',\n title ? 'justify-content-between' : 'justify-content-end',\n 'flex-wrap',\n )}\n >\n {title && (\n <Title id={titleId} type={Typography.TITLE_SUBSECTION} className=\"tw-modal-title\">\n {title}\n </Title>\n )}\n <IconButton\n size={40}\n priority=\"tertiary\"\n aria-label={intl.formatMessage(closeBtnMessages.ariaLabel)}\n onClick={onClose}\n >\n <Cross />\n </IconButton>\n </div>\n <div\n className={clsx('tw-modal-body', {\n 'tw-modal-body--scrollable': scroll === Scroll.CONTENT,\n })}\n >\n {body}\n </div>\n {footer ? (\n <div\n className={clsx('tw-modal-footer', 'd-flex', 'align-items-center', 'flex-wrap')}\n >\n {footer}\n </div>\n ) : (\n <div className=\"m-t-3\" />\n )}\n </div>\n </div>\n </div>\n </CSSTransition>\n </Dimmer>\n );\n};\n\nexport default Modal;\n"],"names":["TRANSITION_DURATION_IN_MILLISECONDS","Modal","title","body","footer","onClose","onUnmount","className","open","size","Size","MEDIUM","scroll","Scroll","VIEWPORT","position","Position","CENTER","disableDimmerClickToClose","otherProps","intl","useIntl","isSmall","useLayout","contentReference","useRef","titleId","useId","overlayId","useContext","OverlayIdContext","_jsx","Drawer","headerTitle","footerContent","BOTTOM","children","Dimmer","scrollable","contentPosition","disableClickToClose","onExited","CSSTransition","nodeRef","appear","in","classNames","enterDone","timeout","unmountOnExit","ref","clsx","CONTENT","id","role","_jsxs","Title","type","Typography","TITLE_SUBSECTION","IconButton","priority","formatMessage","closeBtnMessages","ariaLabel","onClick","Cross"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Money.js","sources":["../../src/Money/Money.tsx"],"sourcesContent":["import { formatMoney } from '@transferwise/formatting';\nimport { useIntl } from 'react-intl';\n\nexport interface MoneyProps {\n amount: number;\n currency: string;\n alwaysShowDecimals?: boolean;\n}\n\nconst Money = ({ amount, currency, alwaysShowDecimals = false }: MoneyProps) => {\n const { locale } = useIntl();\n return (\n <>\n {formatMoney(amount, currency, locale, {\n alwaysShowDecimals,\n })}\n </>\n );\n};\n\nexport default Money;\n"],"names":["Money","amount","currency","alwaysShowDecimals","locale","useIntl","_jsx","_Fragment","children","formatMoney"],"mappings":";;;;;;;;AASA,MAAMA,KAAK,GAAGA,CAAC;EAAEC,MAAM;EAAEC,QAAQ;AAAEC,EAAAA,kBAAkB,GAAG;AAAK,CAAc,KAAI;EAC7E,MAAM;AAAEC,IAAAA;GAAQ,GAAGC,iBAAO,EAAE;EAC5B,oBACEC,cAAA,CAAAC,mBAAA,EAAA;IAAAC,QAAA,EACGC,sBAAW,CAACR,MAAM,EAAEC,QAAQ,EAAEE,MAAM,EAAE;AACrCD,MAAAA;KACD;AAAC,GACJ,CAAG;AAEP;;;;"}
1
+ {"version":3,"file":"Money.js","sources":["../../src/Money/Money.tsx"],"sourcesContent":["import { formatMoney } from '@transferwise/formatting';\nimport { useIntl } from 'react-intl';\n\nexport interface MoneyProps {\n amount: number;\n currency: string;\n alwaysShowDecimals?: boolean;\n}\n\nconst Money = ({ amount, currency, alwaysShowDecimals = false }: MoneyProps) => {\n const { locale } = useIntl();\n return (\n <>\n {formatMoney(amount, currency, locale, {\n alwaysShowDecimals,\n })}\n </>\n );\n};\n\nexport default Money;\n"],"names":["Money","amount","currency","alwaysShowDecimals","locale","useIntl","_jsx","_Fragment","children","formatMoney"],"mappings":";;;;;;;;AASA,MAAMA,KAAK,GAAGA,CAAC;EAAEC,MAAM;EAAEC,QAAQ;AAAEC,EAAAA,kBAAkB,GAAG;AAAK,CAAc,KAAI;EAC7E,MAAM;AAAEC,IAAAA;GAAQ,GAAGC,iBAAO,EAAE;EAC5B,oBACEC,cAAA,CAAAC,mBAAA,EAAA;IAAAC,QAAA,EACGC,sBAAW,CAACR,MAAM,EAAEC,QAAQ,EAAEE,MAAM,EAAE;AACrCD,MAAAA;KACD;AAAC,GACJ,CAAG;AAEP;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Money.mjs","sources":["../../src/Money/Money.tsx"],"sourcesContent":["import { formatMoney } from '@transferwise/formatting';\nimport { useIntl } from 'react-intl';\n\nexport interface MoneyProps {\n amount: number;\n currency: string;\n alwaysShowDecimals?: boolean;\n}\n\nconst Money = ({ amount, currency, alwaysShowDecimals = false }: MoneyProps) => {\n const { locale } = useIntl();\n return (\n <>\n {formatMoney(amount, currency, locale, {\n alwaysShowDecimals,\n })}\n </>\n );\n};\n\nexport default Money;\n"],"names":["Money","amount","currency","alwaysShowDecimals","locale","useIntl","_jsx","_Fragment","children","formatMoney"],"mappings":";;;;AASA,MAAMA,KAAK,GAAGA,CAAC;EAAEC,MAAM;EAAEC,QAAQ;AAAEC,EAAAA,kBAAkB,GAAG;AAAK,CAAc,KAAI;EAC7E,MAAM;AAAEC,IAAAA;GAAQ,GAAGC,OAAO,EAAE;EAC5B,oBACEC,GAAA,CAAAC,QAAA,EAAA;IAAAC,QAAA,EACGC,WAAW,CAACR,MAAM,EAAEC,QAAQ,EAAEE,MAAM,EAAE;AACrCD,MAAAA;KACD;AAAC,GACJ,CAAG;AAEP;;;;"}
1
+ {"version":3,"file":"Money.mjs","sources":["../../src/Money/Money.tsx"],"sourcesContent":["import { formatMoney } from '@transferwise/formatting';\nimport { useIntl } from 'react-intl';\n\nexport interface MoneyProps {\n amount: number;\n currency: string;\n alwaysShowDecimals?: boolean;\n}\n\nconst Money = ({ amount, currency, alwaysShowDecimals = false }: MoneyProps) => {\n const { locale } = useIntl();\n return (\n <>\n {formatMoney(amount, currency, locale, {\n alwaysShowDecimals,\n })}\n </>\n );\n};\n\nexport default Money;\n"],"names":["Money","amount","currency","alwaysShowDecimals","locale","useIntl","_jsx","_Fragment","children","formatMoney"],"mappings":";;;;AASA,MAAMA,KAAK,GAAGA,CAAC;EAAEC,MAAM;EAAEC,QAAQ;AAAEC,EAAAA,kBAAkB,GAAG;AAAK,CAAc,KAAI;EAC7E,MAAM;AAAEC,IAAAA;GAAQ,GAAGC,OAAO,EAAE;EAC5B,oBACEC,GAAA,CAAAC,QAAA,EAAA;IAAAC,QAAA,EACGC,WAAW,CAACR,MAAM,EAAEC,QAAQ,EAAEE,MAAM,EAAE;AACrCD,MAAAA;KACD;AAAC,GACJ,CAAG;AAEP;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"MoneyInput.js","sources":["../../src/MoneyInput/MoneyInput.tsx"],"sourcesContent":["import { isEmpty, isNumber, isNull } from '@transferwise/neptune-validation';\nimport { Flag } from '@wise/art';\nimport { clsx } from 'clsx';\nimport { Component } from 'react';\nimport { injectIntl, type WrappedComponentProps } from '../common/injectIntl';\n\nimport {\n Typography,\n Size,\n SizeLarge,\n SizeMedium,\n SizeSmall,\n getLocaleCurrencyName,\n} from '../common';\nimport { withInputAttributes, WithInputAttributesProps } from '../Inputs/contexts';\nimport { Input } from '../Inputs/Input/Input';\nimport {\n SelectInput,\n SelectInputItem,\n SelectInputOptionContent,\n SelectInputOptionItem,\n SelectInputProps,\n} from '../Inputs/SelectInput';\nimport Title from '../Title';\n\nimport messages from './MoneyInput.messages';\nimport { formatAmount, formatNumber, getCurrencyDecimals, parseAmount } from './currencyFormatting';\nimport withId from '../WithId';\n\nexport interface CurrencyOptionItem {\n header?: never;\n value: string;\n label: string;\n currency: string;\n note?: string;\n searchable?: string;\n disabled?: boolean;\n}\n\nexport interface CurrencyHeaderItem {\n header: string;\n}\n\nexport type CurrencyItem = CurrencyOptionItem | CurrencyHeaderItem;\n\nconst isNumberOrNull = (v: unknown): v is number | null => isNumber(v) || isNull(v);\n\nconst formatAmountIfSet = ({\n amount,\n currency,\n locale,\n decimals,\n}: {\n amount: number | null | undefined;\n currency: string;\n locale: string;\n decimals?: number;\n}) => {\n if (typeof amount !== 'number') {\n return '';\n }\n if (decimals != null && getCurrencyDecimals(currency) !== 0) {\n return formatNumber(amount, locale, decimals);\n }\n return formatAmount(amount, currency, locale);\n};\n\nconst parseNumber = ({\n amount,\n currency,\n locale,\n decimals,\n}: {\n amount: string;\n currency: string;\n locale: string;\n decimals?: number;\n}) => {\n return parseAmount(amount, currency, locale, decimals);\n};\n\nconst allowedInputKeys = new Set([\n 'Backspace',\n 'Delete',\n ',',\n '.',\n 'ArrowDown',\n 'ArrowUp',\n 'ArrowLeft',\n 'ArrowRight',\n 'Enter',\n 'Escape',\n 'Tab',\n]);\n\nexport interface MoneyInputProps extends WrappedComponentProps {\n id?: string;\n 'aria-labelledby'?: string;\n currencies: readonly CurrencyItem[];\n selectedCurrency: CurrencyOptionItem;\n onCurrencyChange?: (value: CurrencyOptionItem) => void;\n placeholder?: number;\n amount: number | null;\n size?: SizeSmall | SizeMedium | SizeLarge;\n onAmountChange?: (value: number | null) => void;\n addon?: React.ReactNode;\n searchPlaceholder?: string;\n /**\n * Allows the consumer to react to searching, while the search itself is handled internally.\n */\n onSearchChange?: (value: { searchQuery: string; filteredOptions: CurrencyItem[] }) => void;\n customActionLabel?: React.ReactNode;\n onCustomAction?: () => void;\n classNames?: Record<string, string>;\n selectProps?: Partial<SelectInputProps<CurrencyOptionItem>>;\n /**\n * Specify the number of decimal places to format the amount. When not specified, the number of\n * decimals is determined by the selected currency (e.g. 2 for EUR, 0 for JPY, 3 for BHD).\n * This override is ignored for zero-decimal currencies (e.g. JPY, KRW, HUF), which always use 0.\n */\n decimals?: number;\n}\n\nexport type MoneyInputPropsWithInputAttributes = MoneyInputProps &\n Partial<WithInputAttributesProps>;\n\ninterface MoneyInputState {\n searchQuery: string;\n formattedAmount: string;\n locale: string;\n}\n\nclass MoneyInput extends Component<MoneyInputPropsWithInputAttributes, MoneyInputState> {\n declare props: MoneyInputPropsWithInputAttributes &\n Required<Pick<MoneyInputPropsWithInputAttributes, keyof typeof MoneyInput.defaultProps>>;\n\n static defaultProps = {\n size: Size.LARGE,\n classNames: {},\n selectProps: {},\n } satisfies Partial<MoneyInputPropsWithInputAttributes>;\n\n amountFocused = false;\n\n constructor(props: MoneyInputProps) {\n super(props);\n this.state = {\n searchQuery: '',\n formattedAmount: formatAmountIfSet({\n amount: props.amount,\n currency: props.selectedCurrency.currency,\n locale: props.intl.locale,\n decimals: props.decimals,\n }),\n locale: props.intl.locale,\n };\n }\n\n UNSAFE_componentWillReceiveProps(nextProps: MoneyInputProps) {\n this.setState({ locale: nextProps.intl.locale });\n\n if (!this.amountFocused) {\n this.setState({\n formattedAmount: formatAmountIfSet({\n amount: nextProps.amount,\n currency: nextProps.selectedCurrency.currency,\n locale: nextProps.intl.locale,\n decimals: nextProps.decimals,\n }),\n });\n }\n }\n\n isInputAllowedForKeyEvent = (event: React.KeyboardEvent<HTMLInputElement>) => {\n const { metaKey, key, ctrlKey } = event;\n const isNumberKey = isNumber(Number.parseInt(key, 10));\n\n return isNumberKey || metaKey || ctrlKey || allowedInputKeys.has(key);\n };\n\n handleKeyDown: React.KeyboardEventHandler<HTMLInputElement> = (event) => {\n if (!this.isInputAllowedForKeyEvent(event)) {\n event.preventDefault();\n }\n };\n\n handlePaste: React.ClipboardEventHandler<HTMLInputElement> = (event) => {\n const paste = event.clipboardData.getData('text');\n const { locale } = this.state;\n const parsed = isEmpty(paste)\n ? null\n : parseNumber({\n amount: paste,\n currency: this.props.selectedCurrency.currency,\n locale,\n decimals: this.props.decimals,\n });\n\n if (isNumberOrNull(parsed)) {\n this.setState({\n formattedAmount: formatAmountIfSet({\n amount: parsed,\n currency: this.props.selectedCurrency.currency,\n locale,\n decimals: this.props.decimals,\n }),\n });\n this.props.onAmountChange?.(parsed);\n }\n\n event.preventDefault();\n };\n\n onAmountChange: React.ChangeEventHandler<HTMLInputElement> = (event) => {\n const { value } = event.target;\n this.setState({\n formattedAmount: value,\n });\n const parsed = isEmpty(value)\n ? null\n : parseNumber({\n amount: value,\n currency: this.props.selectedCurrency.currency,\n locale: this.state.locale,\n decimals: this.props.decimals,\n });\n if (isNumberOrNull(parsed)) {\n this.props.onAmountChange?.(parsed);\n }\n };\n\n onAmountBlur = () => {\n this.amountFocused = false;\n this.setAmount();\n };\n\n onAmountFocus = () => {\n this.amountFocused = true;\n };\n\n getSelectOptions() {\n const selectOptions = filterCurrenciesForQuery(this.props.currencies, this.state.searchQuery);\n\n const formattedOptions: SelectInputItem<CurrencyOptionItem>[] = [];\n let currentGroupOptions: SelectInputOptionItem<CurrencyOptionItem>[] | undefined;\n\n selectOptions.forEach((item) => {\n if (item.header != null) {\n currentGroupOptions = [];\n formattedOptions.push({\n type: 'group',\n label: item.header,\n options: currentGroupOptions,\n });\n } else {\n (currentGroupOptions ?? formattedOptions).push({\n type: 'option',\n value: item,\n filterMatchers: [item.value, item.label, item.note ?? '', item.searchable ?? ''],\n disabled: item.disabled,\n });\n }\n });\n\n return formattedOptions;\n }\n\n setAmount() {\n this.setState((previousState) => {\n const parsed = parseNumber({\n amount: previousState.formattedAmount,\n currency: this.props.selectedCurrency.currency,\n locale: previousState.locale,\n decimals: this.props.decimals,\n });\n if (!isNumberOrNull(parsed)) {\n return {\n formattedAmount: previousState.formattedAmount,\n };\n }\n return {\n formattedAmount: formatAmountIfSet({\n amount: parsed,\n currency: this.props.selectedCurrency.currency,\n locale: previousState.locale,\n decimals: this.props.decimals,\n }),\n };\n });\n }\n\n handleSelectChange = (value: CurrencyOptionItem) => {\n this.handleSearchChange('');\n this.props.onCurrencyChange?.(value);\n };\n\n handleSearchChange = (searchQuery: string) => {\n this.setState({ searchQuery });\n this.props.onSearchChange?.({\n searchQuery,\n filteredOptions: filterCurrenciesForQuery(this.props.currencies, searchQuery),\n });\n };\n\n style = (className: string) => this.props.classNames[className] || className;\n\n render() {\n const {\n inputAttributes,\n id: amountInputId,\n 'aria-labelledby': ariaLabelledByProp,\n selectedCurrency,\n onCurrencyChange,\n size,\n addon,\n selectProps,\n } = this.props;\n const ariaLabelledBy = ariaLabelledByProp ?? inputAttributes?.['aria-labelledby'];\n const selectOptions = this.getSelectOptions();\n\n const hasSingleCurrency = () => {\n if (selectOptions.length !== 0) {\n const firstItem = selectOptions[0];\n\n if (selectOptions.length === 1) {\n if (firstItem.type === 'option') {\n return firstItem.value.currency === selectedCurrency.currency;\n }\n if (firstItem.type === 'group') {\n return (\n firstItem.options.length === 1 &&\n !(this.props.onCustomAction && this.props.customActionLabel)\n );\n }\n }\n } else if (selectedCurrency?.currency) {\n return true;\n }\n\n return false;\n };\n\n const isFixedCurrency = (!this.state.searchQuery && hasSingleCurrency()) || !onCurrencyChange;\n const disabled = !this.props.onAmountChange;\n const selectedCurrencyElementId = `${inputAttributes?.id ?? amountInputId}SelectedCurrency`;\n\n return (\n <fieldset\n aria-invalid={inputAttributes?.['aria-invalid']}\n aria-describedby={inputAttributes?.['aria-describedby']}\n aria-labelledby={inputAttributes?.id ?? amountInputId}\n className={clsx(\n this.style('tw-money-input'),\n this.style('input-group'),\n this.style(`input-group-${size}`),\n )}\n >\n <Input\n id={inputAttributes?.id ?? amountInputId}\n aria-labelledby={ariaLabelledBy}\n value={this.state.formattedAmount}\n inputMode=\"decimal\"\n disabled={disabled}\n placeholder={formatAmountIfSet({\n amount: this.props.placeholder,\n currency: this.props.selectedCurrency.currency,\n locale: this.state.locale,\n decimals: this.props.decimals,\n })}\n className=\"money-input__number-input\"\n autoComplete=\"off\"\n aria-describedby={selectedCurrencyElementId}\n onKeyDown={this.handleKeyDown}\n onChange={this.onAmountChange}\n onFocus={this.onAmountFocus}\n onBlur={this.onAmountBlur}\n onPaste={this.handlePaste}\n />\n {addon && (\n <span\n className={clsx(\n this.style('input-group-addon'),\n this.style(`input-${size}`),\n disabled ? this.style('disabled') : '',\n )}\n >\n {addon}\n </span>\n )}\n {isFixedCurrency ? (\n <div\n className={clsx(\n this.style('input-group-addon'),\n this.style(`input-${size}`),\n this.style('tw-money-input__fixed-currency'),\n disabled ? this.style('disabled') : '',\n )}\n id={selectedCurrencyElementId}\n >\n {(size === 'lg' || size === 'md') && (\n <span className={clsx(this.style('money-input-currency-flag'), this.style('m-r-2'))}>\n <Flag code={selectedCurrency.currency.toLowerCase()} intrinsicSize={24} />\n </span>\n )}\n <Title\n as=\"span\"\n type={Typography.TITLE_SUBSECTION}\n className={size === 'lg' ? this.style('m-r-1') : ''}\n aria-label={getLocaleCurrencyName(this.props.intl, selectedCurrency.currency)}\n >\n {selectedCurrency.currency.toUpperCase()}\n </Title>\n </div>\n ) : (\n <div\n translate=\"no\"\n className={clsx(\n this.style('input-group-btn'),\n this.style('amount-currency-select-btn'),\n )}\n >\n <SelectInput\n UNSAFE_triggerButtonProps={{\n id: undefined,\n 'aria-labelledby': undefined,\n 'aria-describedby': ariaLabelledBy,\n 'aria-invalid': undefined,\n 'aria-label': this.props.intl.formatMessage(messages.selectCurrencyLabel),\n }}\n id={selectedCurrencyElementId}\n items={selectOptions}\n value={selectedCurrency}\n compareValues=\"currency\"\n renderValue={(currency, withinTrigger) => {\n return (\n <SelectInputOptionContent\n title={\n withinTrigger ? (\n <span\n aria-label={getLocaleCurrencyName(this.props.intl, currency.currency)}\n >\n {currency.currency.toUpperCase()}\n </span>\n ) : (\n currency.label\n )\n }\n note={withinTrigger ? undefined : currency.note}\n icon={<Flag code={currency.currency} intrinsicSize={24} />}\n />\n );\n }}\n renderFooter={\n this.props.onCustomAction\n ? () => (\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events\n <div role=\"button\" tabIndex={0} onClick={this.props.onCustomAction}>\n {this.props.customActionLabel}\n </div>\n )\n : undefined\n }\n placeholder={this.props.intl.formatMessage(messages.selectPlaceholder)}\n filterable\n filterPlaceholder={\n this.props.searchPlaceholder ||\n this.props.intl.formatMessage(messages.searchPlaceholder)\n }\n disabled={disabled}\n size={size}\n onChange={this.handleSelectChange}\n onFilterChange={({ queryNormalized }) => {\n this.handleSearchChange(queryNormalized ?? '');\n }}\n {...selectProps}\n />\n </div>\n )}\n </fieldset>\n );\n }\n}\n\nfunction filterCurrenciesForQuery(\n currencies: readonly CurrencyItem[],\n query: string,\n): CurrencyItem[] {\n if (!query) {\n return [...currencies];\n }\n\n const options = currencies.filter(\n (option): option is CurrencyOptionItem => option.header == null,\n );\n const filteredOptions = removeDuplicateValueOptions(options).filter((option) =>\n currencyOptionFitsQuery(option, query),\n );\n\n return sortOptionsLabelsToFirst(filteredOptions, query);\n}\n\nfunction removeDuplicateValueOptions(options: readonly CurrencyOptionItem[]) {\n const uniqueValues = new Set<string>();\n return options.filter((option) => {\n if (!uniqueValues.has(option.value)) {\n uniqueValues.add(option.value);\n return true;\n }\n return false;\n });\n}\n\nfunction currencyOptionFitsQuery(option: CurrencyOptionItem, query: string) {\n if (!option.value) {\n return false;\n }\n\n return (\n contains(option.label, query) ||\n contains(option.searchable, query) ||\n contains(option.note, query)\n );\n}\n\nfunction contains(property: string | undefined, query: string) {\n return property?.toLowerCase().includes(query.toLowerCase());\n}\n\nfunction sortOptionsLabelsToFirst(options: readonly CurrencyOptionItem[], query: string) {\n return [...options].sort((first, second) => {\n const firstContains = contains(first.label, query);\n const secondContains = contains(second.label, query);\n\n if (firstContains && secondContains) {\n return 0;\n }\n if (firstContains) {\n return -1;\n }\n if (secondContains) {\n return 1;\n }\n return 0;\n });\n}\n\nexport default injectIntl(withId(withInputAttributes(MoneyInput, { nonLabelable: true })));\n"],"names":["isNumberOrNull","v","isNumber","isNull","formatAmountIfSet","amount","currency","locale","decimals","getCurrencyDecimals","formatNumber","formatAmount","parseNumber","parseAmount","allowedInputKeys","Set","MoneyInput","Component","defaultProps","size","Size","LARGE","classNames","selectProps","amountFocused","constructor","props","state","searchQuery","formattedAmount","selectedCurrency","intl","UNSAFE_componentWillReceiveProps","nextProps","setState","isInputAllowedForKeyEvent","event","metaKey","key","ctrlKey","isNumberKey","Number","parseInt","has","handleKeyDown","preventDefault","handlePaste","paste","clipboardData","getData","parsed","isEmpty","onAmountChange","value","target","onAmountBlur","setAmount","onAmountFocus","getSelectOptions","selectOptions","filterCurrenciesForQuery","currencies","formattedOptions","currentGroupOptions","forEach","item","header","push","type","label","options","filterMatchers","note","searchable","disabled","previousState","handleSelectChange","handleSearchChange","onCurrencyChange","onSearchChange","filteredOptions","style","className","render","inputAttributes","id","amountInputId","ariaLabelledByProp","addon","ariaLabelledBy","hasSingleCurrency","length","firstItem","onCustomAction","customActionLabel","isFixedCurrency","selectedCurrencyElementId","_jsxs","clsx","children","_jsx","Input","inputMode","placeholder","autoComplete","onKeyDown","onChange","onFocus","onBlur","onPaste","Flag","code","toLowerCase","intrinsicSize","Title","as","Typography","TITLE_SUBSECTION","getLocaleCurrencyName","toUpperCase","translate","SelectInput","UNSAFE_triggerButtonProps","undefined","formatMessage","messages","selectCurrencyLabel","items","compareValues","renderValue","withinTrigger","SelectInputOptionContent","title","icon","renderFooter","role","tabIndex","onClick","selectPlaceholder","filterable","filterPlaceholder","searchPlaceholder","onFilterChange","queryNormalized","query","filter","option","removeDuplicateValueOptions","currencyOptionFitsQuery","sortOptionsLabelsToFirst","uniqueValues","add","contains","property","includes","sort","first","second","firstContains","secondContains","injectIntl","withId","withInputAttributes","nonLabelable"],"mappings":"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"}
1
+ {"version":3,"file":"MoneyInput.js","sources":["../../src/MoneyInput/MoneyInput.tsx"],"sourcesContent":["import { isEmpty, isNumber, isNull } from '@transferwise/neptune-validation';\nimport { Flag } from '@wise/art';\nimport { clsx } from 'clsx';\nimport { Component } from 'react';\nimport { injectIntl, type WrappedComponentProps } from '../common/injectIntl';\n\nimport {\n Typography,\n Size,\n SizeLarge,\n SizeMedium,\n SizeSmall,\n getLocaleCurrencyName,\n} from '../common';\nimport { withInputAttributes, WithInputAttributesProps } from '../Inputs/contexts';\nimport { Input } from '../Inputs/Input/Input';\nimport {\n SelectInput,\n SelectInputItem,\n SelectInputOptionContent,\n SelectInputOptionItem,\n SelectInputProps,\n} from '../Inputs/SelectInput';\nimport Title from '../Title';\n\nimport messages from './MoneyInput.messages';\nimport { formatAmount, formatNumber, getCurrencyDecimals, parseAmount } from './currencyFormatting';\nimport withId from '../WithId';\n\nexport interface CurrencyOptionItem {\n header?: never;\n value: string;\n label: string;\n currency: string;\n note?: string;\n searchable?: string;\n disabled?: boolean;\n}\n\nexport interface CurrencyHeaderItem {\n header: string;\n}\n\nexport type CurrencyItem = CurrencyOptionItem | CurrencyHeaderItem;\n\nconst isNumberOrNull = (v: unknown): v is number | null => isNumber(v) || isNull(v);\n\nconst formatAmountIfSet = ({\n amount,\n currency,\n locale,\n decimals,\n}: {\n amount: number | null | undefined;\n currency: string;\n locale: string;\n decimals?: number;\n}) => {\n if (typeof amount !== 'number') {\n return '';\n }\n if (decimals != null && getCurrencyDecimals(currency) !== 0) {\n return formatNumber(amount, locale, decimals);\n }\n return formatAmount(amount, currency, locale);\n};\n\nconst parseNumber = ({\n amount,\n currency,\n locale,\n decimals,\n}: {\n amount: string;\n currency: string;\n locale: string;\n decimals?: number;\n}) => {\n return parseAmount(amount, currency, locale, decimals);\n};\n\nconst allowedInputKeys = new Set([\n 'Backspace',\n 'Delete',\n ',',\n '.',\n 'ArrowDown',\n 'ArrowUp',\n 'ArrowLeft',\n 'ArrowRight',\n 'Enter',\n 'Escape',\n 'Tab',\n]);\n\nexport interface MoneyInputProps extends WrappedComponentProps {\n id?: string;\n 'aria-labelledby'?: string;\n currencies: readonly CurrencyItem[];\n selectedCurrency: CurrencyOptionItem;\n onCurrencyChange?: (value: CurrencyOptionItem) => void;\n placeholder?: number;\n amount: number | null;\n size?: SizeSmall | SizeMedium | SizeLarge;\n onAmountChange?: (value: number | null) => void;\n addon?: React.ReactNode;\n searchPlaceholder?: string;\n /**\n * Allows the consumer to react to searching, while the search itself is handled internally.\n */\n onSearchChange?: (value: { searchQuery: string; filteredOptions: CurrencyItem[] }) => void;\n customActionLabel?: React.ReactNode;\n onCustomAction?: () => void;\n classNames?: Record<string, string>;\n selectProps?: Partial<SelectInputProps<CurrencyOptionItem>>;\n /**\n * Specify the number of decimal places to format the amount. When not specified, the number of\n * decimals is determined by the selected currency (e.g. 2 for EUR, 0 for JPY, 3 for BHD).\n * This override is ignored for zero-decimal currencies (e.g. JPY, KRW, HUF), which always use 0.\n */\n decimals?: number;\n}\n\nexport type MoneyInputPropsWithInputAttributes = MoneyInputProps &\n Partial<WithInputAttributesProps>;\n\ninterface MoneyInputState {\n searchQuery: string;\n formattedAmount: string;\n locale: string;\n}\n\nclass MoneyInput extends Component<MoneyInputPropsWithInputAttributes, MoneyInputState> {\n declare props: MoneyInputPropsWithInputAttributes &\n Required<Pick<MoneyInputPropsWithInputAttributes, keyof typeof MoneyInput.defaultProps>>;\n\n static defaultProps = {\n size: Size.LARGE,\n classNames: {},\n selectProps: {},\n } satisfies Partial<MoneyInputPropsWithInputAttributes>;\n\n amountFocused = false;\n\n constructor(props: MoneyInputProps) {\n super(props);\n this.state = {\n searchQuery: '',\n formattedAmount: formatAmountIfSet({\n amount: props.amount,\n currency: props.selectedCurrency.currency,\n locale: props.intl.locale,\n decimals: props.decimals,\n }),\n locale: props.intl.locale,\n };\n }\n\n UNSAFE_componentWillReceiveProps(nextProps: MoneyInputProps) {\n this.setState({ locale: nextProps.intl.locale });\n\n if (!this.amountFocused) {\n this.setState({\n formattedAmount: formatAmountIfSet({\n amount: nextProps.amount,\n currency: nextProps.selectedCurrency.currency,\n locale: nextProps.intl.locale,\n decimals: nextProps.decimals,\n }),\n });\n }\n }\n\n isInputAllowedForKeyEvent = (event: React.KeyboardEvent<HTMLInputElement>) => {\n const { metaKey, key, ctrlKey } = event;\n const isNumberKey = isNumber(Number.parseInt(key, 10));\n\n return isNumberKey || metaKey || ctrlKey || allowedInputKeys.has(key);\n };\n\n handleKeyDown: React.KeyboardEventHandler<HTMLInputElement> = (event) => {\n if (!this.isInputAllowedForKeyEvent(event)) {\n event.preventDefault();\n }\n };\n\n handlePaste: React.ClipboardEventHandler<HTMLInputElement> = (event) => {\n const paste = event.clipboardData.getData('text');\n const { locale } = this.state;\n const parsed = isEmpty(paste)\n ? null\n : parseNumber({\n amount: paste,\n currency: this.props.selectedCurrency.currency,\n locale,\n decimals: this.props.decimals,\n });\n\n if (isNumberOrNull(parsed)) {\n this.setState({\n formattedAmount: formatAmountIfSet({\n amount: parsed,\n currency: this.props.selectedCurrency.currency,\n locale,\n decimals: this.props.decimals,\n }),\n });\n this.props.onAmountChange?.(parsed);\n }\n\n event.preventDefault();\n };\n\n onAmountChange: React.ChangeEventHandler<HTMLInputElement> = (event) => {\n const { value } = event.target;\n this.setState({\n formattedAmount: value,\n });\n const parsed = isEmpty(value)\n ? null\n : parseNumber({\n amount: value,\n currency: this.props.selectedCurrency.currency,\n locale: this.state.locale,\n decimals: this.props.decimals,\n });\n if (isNumberOrNull(parsed)) {\n this.props.onAmountChange?.(parsed);\n }\n };\n\n onAmountBlur = () => {\n this.amountFocused = false;\n this.setAmount();\n };\n\n onAmountFocus = () => {\n this.amountFocused = true;\n };\n\n getSelectOptions() {\n const selectOptions = filterCurrenciesForQuery(this.props.currencies, this.state.searchQuery);\n\n const formattedOptions: SelectInputItem<CurrencyOptionItem>[] = [];\n let currentGroupOptions: SelectInputOptionItem<CurrencyOptionItem>[] | undefined;\n\n selectOptions.forEach((item) => {\n if (item.header != null) {\n currentGroupOptions = [];\n formattedOptions.push({\n type: 'group',\n label: item.header,\n options: currentGroupOptions,\n });\n } else {\n (currentGroupOptions ?? formattedOptions).push({\n type: 'option',\n value: item,\n filterMatchers: [item.value, item.label, item.note ?? '', item.searchable ?? ''],\n disabled: item.disabled,\n });\n }\n });\n\n return formattedOptions;\n }\n\n setAmount() {\n this.setState((previousState) => {\n const parsed = parseNumber({\n amount: previousState.formattedAmount,\n currency: this.props.selectedCurrency.currency,\n locale: previousState.locale,\n decimals: this.props.decimals,\n });\n if (!isNumberOrNull(parsed)) {\n return {\n formattedAmount: previousState.formattedAmount,\n };\n }\n return {\n formattedAmount: formatAmountIfSet({\n amount: parsed,\n currency: this.props.selectedCurrency.currency,\n locale: previousState.locale,\n decimals: this.props.decimals,\n }),\n };\n });\n }\n\n handleSelectChange = (value: CurrencyOptionItem) => {\n this.handleSearchChange('');\n this.props.onCurrencyChange?.(value);\n };\n\n handleSearchChange = (searchQuery: string) => {\n this.setState({ searchQuery });\n this.props.onSearchChange?.({\n searchQuery,\n filteredOptions: filterCurrenciesForQuery(this.props.currencies, searchQuery),\n });\n };\n\n style = (className: string) => this.props.classNames[className] || className;\n\n render() {\n const {\n inputAttributes,\n id: amountInputId,\n 'aria-labelledby': ariaLabelledByProp,\n selectedCurrency,\n onCurrencyChange,\n size,\n addon,\n selectProps,\n } = this.props;\n const ariaLabelledBy = ariaLabelledByProp ?? inputAttributes?.['aria-labelledby'];\n const selectOptions = this.getSelectOptions();\n\n const hasSingleCurrency = () => {\n if (selectOptions.length !== 0) {\n const firstItem = selectOptions[0];\n\n if (selectOptions.length === 1) {\n if (firstItem.type === 'option') {\n return firstItem.value.currency === selectedCurrency.currency;\n }\n if (firstItem.type === 'group') {\n return (\n firstItem.options.length === 1 &&\n !(this.props.onCustomAction && this.props.customActionLabel)\n );\n }\n }\n } else if (selectedCurrency?.currency) {\n return true;\n }\n\n return false;\n };\n\n const isFixedCurrency = (!this.state.searchQuery && hasSingleCurrency()) || !onCurrencyChange;\n const disabled = !this.props.onAmountChange;\n const selectedCurrencyElementId = `${inputAttributes?.id ?? amountInputId}SelectedCurrency`;\n\n return (\n <fieldset\n aria-invalid={inputAttributes?.['aria-invalid']}\n aria-describedby={inputAttributes?.['aria-describedby']}\n aria-labelledby={inputAttributes?.id ?? amountInputId}\n className={clsx(\n this.style('tw-money-input'),\n this.style('input-group'),\n this.style(`input-group-${size}`),\n )}\n >\n <Input\n id={inputAttributes?.id ?? amountInputId}\n aria-labelledby={ariaLabelledBy}\n value={this.state.formattedAmount}\n inputMode=\"decimal\"\n disabled={disabled}\n placeholder={formatAmountIfSet({\n amount: this.props.placeholder,\n currency: this.props.selectedCurrency.currency,\n locale: this.state.locale,\n decimals: this.props.decimals,\n })}\n className=\"money-input__number-input\"\n autoComplete=\"off\"\n aria-describedby={selectedCurrencyElementId}\n onKeyDown={this.handleKeyDown}\n onChange={this.onAmountChange}\n onFocus={this.onAmountFocus}\n onBlur={this.onAmountBlur}\n onPaste={this.handlePaste}\n />\n {addon && (\n <span\n className={clsx(\n this.style('input-group-addon'),\n this.style(`input-${size}`),\n disabled ? this.style('disabled') : '',\n )}\n >\n {addon}\n </span>\n )}\n {isFixedCurrency ? (\n <div\n className={clsx(\n this.style('input-group-addon'),\n this.style(`input-${size}`),\n this.style('tw-money-input__fixed-currency'),\n disabled ? this.style('disabled') : '',\n )}\n id={selectedCurrencyElementId}\n >\n {(size === 'lg' || size === 'md') && (\n <span className={clsx(this.style('money-input-currency-flag'), this.style('m-r-2'))}>\n <Flag code={selectedCurrency.currency.toLowerCase()} intrinsicSize={24} />\n </span>\n )}\n <Title\n as=\"span\"\n type={Typography.TITLE_SUBSECTION}\n className={size === 'lg' ? this.style('m-r-1') : ''}\n aria-label={getLocaleCurrencyName(this.props.intl, selectedCurrency.currency)}\n >\n {selectedCurrency.currency.toUpperCase()}\n </Title>\n </div>\n ) : (\n <div\n translate=\"no\"\n className={clsx(\n this.style('input-group-btn'),\n this.style('amount-currency-select-btn'),\n )}\n >\n <SelectInput\n UNSAFE_triggerButtonProps={{\n id: undefined,\n 'aria-labelledby': undefined,\n 'aria-describedby': ariaLabelledBy,\n 'aria-invalid': undefined,\n 'aria-label': this.props.intl.formatMessage(messages.selectCurrencyLabel),\n }}\n id={selectedCurrencyElementId}\n items={selectOptions}\n value={selectedCurrency}\n compareValues=\"currency\"\n renderValue={(currency, withinTrigger) => {\n return (\n <SelectInputOptionContent\n title={\n withinTrigger ? (\n <span\n aria-label={getLocaleCurrencyName(this.props.intl, currency.currency)}\n >\n {currency.currency.toUpperCase()}\n </span>\n ) : (\n currency.label\n )\n }\n note={withinTrigger ? undefined : currency.note}\n icon={<Flag code={currency.currency} intrinsicSize={24} />}\n />\n );\n }}\n renderFooter={\n this.props.onCustomAction\n ? () => (\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events\n <div role=\"button\" tabIndex={0} onClick={this.props.onCustomAction}>\n {this.props.customActionLabel}\n </div>\n )\n : undefined\n }\n placeholder={this.props.intl.formatMessage(messages.selectPlaceholder)}\n filterable\n filterPlaceholder={\n this.props.searchPlaceholder ||\n this.props.intl.formatMessage(messages.searchPlaceholder)\n }\n disabled={disabled}\n size={size}\n onChange={this.handleSelectChange}\n onFilterChange={({ queryNormalized }) => {\n this.handleSearchChange(queryNormalized ?? '');\n }}\n {...selectProps}\n />\n </div>\n )}\n </fieldset>\n );\n }\n}\n\nfunction filterCurrenciesForQuery(\n currencies: readonly CurrencyItem[],\n query: string,\n): CurrencyItem[] {\n if (!query) {\n return [...currencies];\n }\n\n const options = currencies.filter(\n (option): option is CurrencyOptionItem => option.header == null,\n );\n const filteredOptions = removeDuplicateValueOptions(options).filter((option) =>\n currencyOptionFitsQuery(option, query),\n );\n\n return sortOptionsLabelsToFirst(filteredOptions, query);\n}\n\nfunction removeDuplicateValueOptions(options: readonly CurrencyOptionItem[]) {\n const uniqueValues = new Set<string>();\n return options.filter((option) => {\n if (!uniqueValues.has(option.value)) {\n uniqueValues.add(option.value);\n return true;\n }\n return false;\n });\n}\n\nfunction currencyOptionFitsQuery(option: CurrencyOptionItem, query: string) {\n if (!option.value) {\n return false;\n }\n\n return (\n contains(option.label, query) ||\n contains(option.searchable, query) ||\n contains(option.note, query)\n );\n}\n\nfunction contains(property: string | undefined, query: string) {\n return property?.toLowerCase().includes(query.toLowerCase());\n}\n\nfunction sortOptionsLabelsToFirst(options: readonly CurrencyOptionItem[], query: string) {\n return [...options].sort((first, second) => {\n const firstContains = contains(first.label, query);\n const secondContains = contains(second.label, query);\n\n if (firstContains && secondContains) {\n return 0;\n }\n if (firstContains) {\n return -1;\n }\n if (secondContains) {\n return 1;\n }\n return 0;\n });\n}\n\nexport default injectIntl(withId(withInputAttributes(MoneyInput, { nonLabelable: true })));\n"],"names":["isNumberOrNull","v","isNumber","isNull","formatAmountIfSet","amount","currency","locale","decimals","getCurrencyDecimals","formatNumber","formatAmount","parseNumber","parseAmount","allowedInputKeys","Set","MoneyInput","Component","defaultProps","size","Size","LARGE","classNames","selectProps","amountFocused","constructor","props","state","searchQuery","formattedAmount","selectedCurrency","intl","UNSAFE_componentWillReceiveProps","nextProps","setState","isInputAllowedForKeyEvent","event","metaKey","key","ctrlKey","isNumberKey","Number","parseInt","has","handleKeyDown","preventDefault","handlePaste","paste","clipboardData","getData","parsed","isEmpty","onAmountChange","value","target","onAmountBlur","setAmount","onAmountFocus","getSelectOptions","selectOptions","filterCurrenciesForQuery","currencies","formattedOptions","currentGroupOptions","forEach","item","header","push","type","label","options","filterMatchers","note","searchable","disabled","previousState","handleSelectChange","handleSearchChange","onCurrencyChange","onSearchChange","filteredOptions","style","className","render","inputAttributes","id","amountInputId","ariaLabelledByProp","addon","ariaLabelledBy","hasSingleCurrency","length","firstItem","onCustomAction","customActionLabel","isFixedCurrency","selectedCurrencyElementId","_jsxs","clsx","children","_jsx","Input","inputMode","placeholder","autoComplete","onKeyDown","onChange","onFocus","onBlur","onPaste","Flag","code","toLowerCase","intrinsicSize","Title","as","Typography","TITLE_SUBSECTION","getLocaleCurrencyName","toUpperCase","translate","SelectInput","UNSAFE_triggerButtonProps","undefined","formatMessage","messages","selectCurrencyLabel","items","compareValues","renderValue","withinTrigger","SelectInputOptionContent","title","icon","renderFooter","role","tabIndex","onClick","selectPlaceholder","filterable","filterPlaceholder","searchPlaceholder","onFilterChange","queryNormalized","query","filter","option","removeDuplicateValueOptions","currencyOptionFitsQuery","sortOptionsLabelsToFirst","uniqueValues","add","contains","property","includes","sort","first","second","firstContains","secondContains","injectIntl","withId","withInputAttributes","nonLabelable"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"MoneyInput.messages.js","sources":["../../src/MoneyInput/MoneyInput.messages.ts"],"sourcesContent":["import { defineMessages } from 'react-intl';\n\nexport default defineMessages({\n selectPlaceholder: {\n id: 'neptune.MoneyInput.Select.placeholder',\n defaultMessage: 'Select an option...',\n },\n searchPlaceholder: {\n id: 'neptune.MoneyInput.Select.searchPlaceholder',\n defaultMessage: 'Type a currency or country',\n description: 'Default placeholder text for the search input in the currency selector.',\n },\n selectCurrencyLabel: {\n id: 'neptune.MoneyInput.Select.selectCurrencyLabel',\n defaultMessage: 'Select currency',\n description: 'Visually hidden label for the currency selector input.',\n },\n});\n"],"names":["defineMessages","selectPlaceholder","id","searchPlaceholder","selectCurrencyLabel"],"mappings":";;;;;;AAEA,eAAeA,wBAAc,CAAC;AAC5BC,EAAAA,iBAAiB,EAAE;IACjBC,EAAE,EAAA;GAEH;AACDC,EAAAA,iBAAiB,EAAE;IACjBD,EAAE,EAAA;GAGH;AACDE,EAAAA,mBAAmB,EAAE;IACnBF,EAAE,EAAA;AAGH;AACF,CAAA,CAAC;;;;"}
1
+ {"version":3,"file":"MoneyInput.messages.js","sources":["../../src/MoneyInput/MoneyInput.messages.ts"],"sourcesContent":["import { defineMessages } from 'react-intl';\n\nexport default defineMessages({\n selectPlaceholder: {\n id: 'neptune.MoneyInput.Select.placeholder',\n defaultMessage: 'Select an option...',\n },\n searchPlaceholder: {\n id: 'neptune.MoneyInput.Select.searchPlaceholder',\n defaultMessage: 'Type a currency or country',\n description: 'Default placeholder text for the search input in the currency selector.',\n },\n selectCurrencyLabel: {\n id: 'neptune.MoneyInput.Select.selectCurrencyLabel',\n defaultMessage: 'Select currency',\n description: 'Visually hidden label for the currency selector input.',\n },\n});\n"],"names":["defineMessages","selectPlaceholder","id","searchPlaceholder","selectCurrencyLabel"],"mappings":";;;;;;AAEA,eAAeA,wBAAc,CAAC;AAC5BC,EAAAA,iBAAiB,EAAE;IACjBC,EAAE,EAAA;GAEH;AACDC,EAAAA,iBAAiB,EAAE;IACjBD,EAAE,EAAA;GAGH;AACDE,EAAAA,mBAAmB,EAAE;IACnBF,EAAE,EAAA;AAGH;AACF,CAAA,CAAC;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"MoneyInput.messages.mjs","sources":["../../src/MoneyInput/MoneyInput.messages.ts"],"sourcesContent":["import { defineMessages } from 'react-intl';\n\nexport default defineMessages({\n selectPlaceholder: {\n id: 'neptune.MoneyInput.Select.placeholder',\n defaultMessage: 'Select an option...',\n },\n searchPlaceholder: {\n id: 'neptune.MoneyInput.Select.searchPlaceholder',\n defaultMessage: 'Type a currency or country',\n description: 'Default placeholder text for the search input in the currency selector.',\n },\n selectCurrencyLabel: {\n id: 'neptune.MoneyInput.Select.selectCurrencyLabel',\n defaultMessage: 'Select currency',\n description: 'Visually hidden label for the currency selector input.',\n },\n});\n"],"names":["defineMessages","selectPlaceholder","id","searchPlaceholder","selectCurrencyLabel"],"mappings":";;AAEA,eAAeA,cAAc,CAAC;AAC5BC,EAAAA,iBAAiB,EAAE;IACjBC,EAAE,EAAA;GAEH;AACDC,EAAAA,iBAAiB,EAAE;IACjBD,EAAE,EAAA;GAGH;AACDE,EAAAA,mBAAmB,EAAE;IACnBF,EAAE,EAAA;AAGH;AACF,CAAA,CAAC;;;;"}
1
+ {"version":3,"file":"MoneyInput.messages.mjs","sources":["../../src/MoneyInput/MoneyInput.messages.ts"],"sourcesContent":["import { defineMessages } from 'react-intl';\n\nexport default defineMessages({\n selectPlaceholder: {\n id: 'neptune.MoneyInput.Select.placeholder',\n defaultMessage: 'Select an option...',\n },\n searchPlaceholder: {\n id: 'neptune.MoneyInput.Select.searchPlaceholder',\n defaultMessage: 'Type a currency or country',\n description: 'Default placeholder text for the search input in the currency selector.',\n },\n selectCurrencyLabel: {\n id: 'neptune.MoneyInput.Select.selectCurrencyLabel',\n defaultMessage: 'Select currency',\n description: 'Visually hidden label for the currency selector input.',\n },\n});\n"],"names":["defineMessages","selectPlaceholder","id","searchPlaceholder","selectCurrencyLabel"],"mappings":";;AAEA,eAAeA,cAAc,CAAC;AAC5BC,EAAAA,iBAAiB,EAAE;IACjBC,EAAE,EAAA;GAEH;AACDC,EAAAA,iBAAiB,EAAE;IACjBD,EAAE,EAAA;GAGH;AACDE,EAAAA,mBAAmB,EAAE;IACnBF,EAAE,EAAA;AAGH;AACF,CAAA,CAAC;;"}