@transferwise/components 46.141.0 → 46.143.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (490) hide show
  1. package/build/accordion/AccordionItem/AccordionItem.js +1 -1
  2. package/build/accordion/AccordionItem/AccordionItem.mjs +1 -1
  3. package/build/actionButton/ActionButton.js +1 -1
  4. package/build/actionButton/ActionButton.mjs +1 -1
  5. package/build/actionOption/ActionOption.js +1 -1
  6. package/build/actionOption/ActionOption.mjs +1 -1
  7. package/build/alert/Alert.js +1 -1
  8. package/build/alert/Alert.mjs +1 -1
  9. package/build/alert/inlineMarkdown/InlineMarkdown.js +1 -1
  10. package/build/alert/inlineMarkdown/InlineMarkdown.mjs +1 -1
  11. package/build/avatar/Avatar.js +1 -1
  12. package/build/avatar/Avatar.mjs +1 -1
  13. package/build/avatarLayout/AvatarLayout.js +16 -2
  14. package/build/avatarLayout/AvatarLayout.js.map +1 -1
  15. package/build/avatarLayout/AvatarLayout.mjs +16 -2
  16. package/build/avatarLayout/AvatarLayout.mjs.map +1 -1
  17. package/build/avatarView/AvatarView.js +7 -3
  18. package/build/avatarView/AvatarView.js.map +1 -1
  19. package/build/avatarView/AvatarView.mjs +7 -3
  20. package/build/avatarView/AvatarView.mjs.map +1 -1
  21. package/build/avatarView/Dot.js +8 -0
  22. package/build/avatarView/Dot.js.map +1 -1
  23. package/build/avatarView/Dot.mjs +8 -0
  24. package/build/avatarView/Dot.mjs.map +1 -1
  25. package/build/avatarWrapper/AvatarWrapper.js +1 -1
  26. package/build/avatarWrapper/AvatarWrapper.mjs +1 -1
  27. package/build/badge/Badge.js +1 -1
  28. package/build/badge/Badge.mjs +1 -1
  29. package/build/button/Button.js +1 -1
  30. package/build/button/Button.mjs +1 -1
  31. package/build/button/LegacyButton.js +1 -1
  32. package/build/button/LegacyButton.mjs +1 -1
  33. package/build/button/classMap.js +1 -1
  34. package/build/button/classMap.mjs +1 -1
  35. package/build/button/legacyUtils/legacyUtils.js +1 -1
  36. package/build/button/legacyUtils/legacyUtils.mjs +1 -1
  37. package/build/card/Card.js +1 -1
  38. package/build/card/Card.mjs +1 -1
  39. package/build/checkbox/Checkbox.js +1 -1
  40. package/build/checkbox/Checkbox.mjs +1 -1
  41. package/build/chevron/Chevron.js +1 -1
  42. package/build/chevron/Chevron.mjs +1 -1
  43. package/build/chips/Chip.js +1 -1
  44. package/build/chips/Chip.mjs +1 -1
  45. package/build/circularButton/CircularButton.js +2 -2
  46. package/build/circularButton/CircularButton.js.map +1 -1
  47. package/build/circularButton/CircularButton.mjs +2 -2
  48. package/build/circularButton/CircularButton.mjs.map +1 -1
  49. package/build/common/bottomSheet/BottomSheet.js +2 -2
  50. package/build/common/bottomSheet/BottomSheet.js.map +1 -1
  51. package/build/common/bottomSheet/BottomSheet.mjs +2 -2
  52. package/build/common/bottomSheet/BottomSheet.mjs.map +1 -1
  53. package/build/common/circle/Circle.js +8 -4
  54. package/build/common/circle/Circle.js.map +1 -1
  55. package/build/common/circle/Circle.mjs +8 -4
  56. package/build/common/circle/Circle.mjs.map +1 -1
  57. package/build/common/hooks/useLayout/useLayout.js +6 -6
  58. package/build/common/hooks/useLayout/useLayout.js.map +1 -1
  59. package/build/common/hooks/useLayout/useLayout.mjs +1 -1
  60. package/build/common/hooks/useLayout/useLayout.mjs.map +1 -1
  61. package/build/common/hooks/useScreenSize.js.map +1 -1
  62. package/build/common/hooks/useScreenSize.mjs.map +1 -1
  63. package/build/common/panel/Panel.js +1 -1
  64. package/build/common/panel/Panel.mjs +1 -1
  65. package/build/common/responsivePanel/ResponsivePanel.js +1 -1
  66. package/build/common/responsivePanel/ResponsivePanel.mjs +1 -1
  67. package/build/criticalBanner/CriticalCommsBanner.js +1 -1
  68. package/build/criticalBanner/CriticalCommsBanner.mjs +1 -1
  69. package/build/dateInput/DateInput.js +1 -1
  70. package/build/dateInput/DateInput.mjs +1 -1
  71. package/build/dateLookup/DateLookup.js +2 -2
  72. package/build/dateLookup/DateLookup.js.map +1 -1
  73. package/build/dateLookup/DateLookup.mjs +1 -1
  74. package/build/dateLookup/DateLookup.mjs.map +1 -1
  75. package/build/dateLookup/dateHeader/DateHeader.js +1 -1
  76. package/build/dateLookup/dateHeader/DateHeader.mjs +1 -1
  77. package/build/dateLookup/dateTrigger/DateTrigger.js +1 -1
  78. package/build/dateLookup/dateTrigger/DateTrigger.mjs +1 -1
  79. package/build/decision/Decision.js +3 -3
  80. package/build/decision/Decision.js.map +1 -1
  81. package/build/decision/Decision.mjs +1 -1
  82. package/build/decision/Decision.mjs.map +1 -1
  83. package/build/definitionList/DefinitionList.js +1 -1
  84. package/build/definitionList/DefinitionList.mjs +1 -1
  85. package/build/dimmer/Dimmer.js +1 -1
  86. package/build/dimmer/Dimmer.mjs +1 -1
  87. package/build/display/Display.js +1 -1
  88. package/build/display/Display.mjs +1 -1
  89. package/build/drawer/Drawer.js +1 -1
  90. package/build/drawer/Drawer.mjs +1 -1
  91. package/build/expressiveMoneyInput/amountInput/AmountInput.js +1 -1
  92. package/build/expressiveMoneyInput/amountInput/AmountInput.js.map +1 -1
  93. package/build/expressiveMoneyInput/amountInput/AmountInput.mjs +1 -1
  94. package/build/expressiveMoneyInput/amountInput/AmountInput.mjs.map +1 -1
  95. package/build/expressiveMoneyInput/currencySelector/CurrencySelector.js +1 -1
  96. package/build/expressiveMoneyInput/currencySelector/CurrencySelector.mjs +1 -1
  97. package/build/field/Field.js +64 -33
  98. package/build/field/Field.js.map +1 -1
  99. package/build/field/Field.messages.js +14 -0
  100. package/build/field/Field.messages.js.map +1 -0
  101. package/build/field/Field.messages.mjs +10 -0
  102. package/build/field/Field.messages.mjs.map +1 -0
  103. package/build/field/Field.mjs +66 -35
  104. package/build/field/Field.mjs.map +1 -1
  105. package/build/flowNavigation/FlowNavigation.js +3 -3
  106. package/build/flowNavigation/FlowNavigation.js.map +1 -1
  107. package/build/flowNavigation/FlowNavigation.mjs +1 -1
  108. package/build/flowNavigation/FlowNavigation.mjs.map +1 -1
  109. package/build/header/Header.js +1 -1
  110. package/build/header/Header.mjs +1 -1
  111. package/build/i18n/en.json +1 -0
  112. package/build/i18n/en.json.js +1 -0
  113. package/build/i18n/en.json.js.map +1 -1
  114. package/build/i18n/en.json.mjs +1 -0
  115. package/build/i18n/en.json.mjs.map +1 -1
  116. package/build/image/Image.js +1 -1
  117. package/build/image/Image.mjs +1 -1
  118. package/build/index.js +2 -2
  119. package/build/index.mjs +1 -1
  120. package/build/info/Info.js +1 -1
  121. package/build/info/Info.mjs +1 -1
  122. package/build/inlineAlert/InlineAlert.js +1 -1
  123. package/build/inlineAlert/InlineAlert.mjs +1 -1
  124. package/build/inputs/SearchInput.js +1 -1
  125. package/build/inputs/SearchInput.mjs +1 -1
  126. package/build/inputs/SelectInput/SelectInput.js +2 -2
  127. package/build/inputs/SelectInput/SelectInput.js.map +1 -1
  128. package/build/inputs/SelectInput/SelectInput.mjs +1 -1
  129. package/build/inputs/SelectInput/SelectInput.mjs.map +1 -1
  130. package/build/inputs/TextArea.js +5 -0
  131. package/build/inputs/TextArea.js.map +1 -1
  132. package/build/inputs/TextArea.mjs +6 -1
  133. package/build/inputs/TextArea.mjs.map +1 -1
  134. package/build/inputs/contexts.js +16 -0
  135. package/build/inputs/contexts.js.map +1 -1
  136. package/build/inputs/contexts.mjs +16 -2
  137. package/build/inputs/contexts.mjs.map +1 -1
  138. package/build/instructionsList/InstructionsList.js +1 -1
  139. package/build/instructionsList/InstructionsList.mjs +1 -1
  140. package/build/link/Link.js +1 -1
  141. package/build/link/Link.mjs +1 -1
  142. package/build/listItem/AdditionalInfo/ListItemAdditionalInfo.js +1 -1
  143. package/build/listItem/AdditionalInfo/ListItemAdditionalInfo.mjs +1 -1
  144. package/build/listItem/ListItem.js +1 -1
  145. package/build/listItem/ListItem.mjs +1 -1
  146. package/build/listItem/Prompt/ListItemPrompt.js +1 -1
  147. package/build/listItem/Prompt/ListItemPrompt.mjs +1 -1
  148. package/build/loader/Loader.js +1 -1
  149. package/build/loader/Loader.mjs +1 -1
  150. package/build/logo/Logo.js +3 -3
  151. package/build/logo/Logo.js.map +1 -1
  152. package/build/logo/Logo.mjs +2 -2
  153. package/build/logo/Logo.mjs.map +1 -1
  154. package/build/main.css +350 -402
  155. package/build/markdown/Markdown.js +1 -1
  156. package/build/markdown/Markdown.mjs +1 -1
  157. package/build/modal/Modal.js +3 -3
  158. package/build/modal/Modal.js.map +1 -1
  159. package/build/modal/Modal.mjs +3 -3
  160. package/build/modal/Modal.mjs.map +1 -1
  161. package/build/moneyInput/MoneyInput.js +1 -1
  162. package/build/moneyInput/MoneyInput.mjs +1 -1
  163. package/build/navigationOption/NavigationOption.js +1 -1
  164. package/build/navigationOption/NavigationOption.mjs +1 -1
  165. package/build/nudge/Nudge.js +1 -1
  166. package/build/nudge/Nudge.mjs +1 -1
  167. package/build/overlayHeader/OverlayHeader.js +1 -1
  168. package/build/overlayHeader/OverlayHeader.mjs +1 -1
  169. package/build/phoneNumberInput/PhoneNumberInput.js +1 -1
  170. package/build/phoneNumberInput/PhoneNumberInput.mjs +1 -1
  171. package/build/popover/Popover.js +1 -1
  172. package/build/popover/Popover.mjs +1 -1
  173. package/build/processIndicator/ProcessIndicator.js +1 -1
  174. package/build/processIndicator/ProcessIndicator.mjs +1 -1
  175. package/build/progressBar/ProgressBar.js +1 -1
  176. package/build/progressBar/ProgressBar.mjs +1 -1
  177. package/build/promoCard/PromoCard.js +1 -1
  178. package/build/promoCard/PromoCard.mjs +1 -1
  179. package/build/promoCard/PromoCardIndicator.js +1 -1
  180. package/build/promoCard/PromoCardIndicator.mjs +1 -1
  181. package/build/prompt/ActionPrompt/ActionPrompt.js +2 -2
  182. package/build/prompt/ActionPrompt/ActionPrompt.js.map +1 -1
  183. package/build/prompt/ActionPrompt/ActionPrompt.mjs +2 -2
  184. package/build/prompt/ActionPrompt/ActionPrompt.mjs.map +1 -1
  185. package/build/prompt/CriticalBanner/CriticalBanner.js +2 -2
  186. package/build/prompt/CriticalBanner/CriticalBanner.js.map +1 -1
  187. package/build/prompt/CriticalBanner/CriticalBanner.mjs +1 -1
  188. package/build/prompt/InfoPrompt/InfoPrompt.js +1 -1
  189. package/build/prompt/InfoPrompt/InfoPrompt.mjs +1 -1
  190. package/build/prompt/InlinePrompt/InlinePrompt.js +1 -1
  191. package/build/prompt/InlinePrompt/InlinePrompt.mjs +1 -1
  192. package/build/provider/Provider.js +1 -1
  193. package/build/provider/Provider.mjs +1 -1
  194. package/build/radio/Radio.js +1 -1
  195. package/build/radio/Radio.mjs +1 -1
  196. package/build/segmentedControl/SegmentedControl.js +1 -1
  197. package/build/segmentedControl/SegmentedControl.mjs +1 -1
  198. package/build/select/Select.js +1 -1
  199. package/build/select/Select.mjs +1 -1
  200. package/build/select/option/Option.js +1 -1
  201. package/build/select/option/Option.mjs +1 -1
  202. package/build/statusIcon/StatusIcon.js +2 -2
  203. package/build/statusIcon/StatusIcon.js.map +1 -1
  204. package/build/statusIcon/StatusIcon.mjs +2 -2
  205. package/build/statusIcon/StatusIcon.mjs.map +1 -1
  206. package/build/stepper/Stepper.js +1 -1
  207. package/build/stepper/Stepper.mjs +1 -1
  208. package/build/sticky/Sticky.js +1 -1
  209. package/build/sticky/Sticky.mjs +1 -1
  210. package/build/styles/accordion/Accordion.css +1 -1
  211. package/build/styles/avatarView/AvatarView.css +4 -4
  212. package/build/styles/avatarView/Dot.css +4 -4
  213. package/build/styles/card/Card.css +2 -2
  214. package/build/styles/carousel/Carousel.css +5 -5
  215. package/build/styles/common/Option/Option.css +2 -4
  216. package/build/styles/common/baseCard/BaseCard.css +1 -1
  217. package/build/styles/container/Container.css +3 -3
  218. package/build/styles/criticalBanner/CriticalCommsBanner.css +1 -1
  219. package/build/styles/css/accordion.css +4 -4
  220. package/build/styles/css/button-groups.css +6 -6
  221. package/build/styles/css/buttons.css +1 -1
  222. package/build/styles/css/circles.css +1 -1
  223. package/build/styles/css/column-layout.css +4 -4
  224. package/build/styles/css/decision.css +4 -4
  225. package/build/styles/css/dropdowns.css +10 -10
  226. package/build/styles/css/droppable.css +8 -8
  227. package/build/styles/css/flex.css +13 -15
  228. package/build/styles/css/footer.css +3 -3
  229. package/build/styles/css/grid.css +19 -19
  230. package/build/styles/css/input-groups.css +12 -12
  231. package/build/styles/css/list-group.css +8 -8
  232. package/build/styles/css/modals.css +6 -6
  233. package/build/styles/css/navbar.css +62 -62
  234. package/build/styles/css/navs.css +2 -2
  235. package/build/styles/css/neptune.css +274 -328
  236. package/build/styles/css/panels.css +9 -9
  237. package/build/styles/css/popovers.css +13 -13
  238. package/build/styles/css/select.css +1 -1
  239. package/build/styles/css/sequences.css +6 -6
  240. package/build/styles/css/table.css +6 -6
  241. package/build/styles/css/utilities.css +8 -20
  242. package/build/styles/css/wells.css +4 -18
  243. package/build/styles/dateInput/DateInput.css +1 -1
  244. package/build/styles/definitionList/DefinitionList.css +2 -2
  245. package/build/styles/drawer/Drawer.css +2 -2
  246. package/build/styles/expressiveMoneyInput/ExpressiveMoneyInput.css +2 -0
  247. package/build/styles/expressiveMoneyInput/amountInput/AmountInput.css +2 -0
  248. package/build/styles/field/Field.css +19 -3
  249. package/build/styles/flowNavigation/FlowNavigation.css +1 -1
  250. package/build/styles/inputs/Input.css +3 -3
  251. package/build/styles/inputs/SelectInput/Options/SelectInputOptions.css +2 -2
  252. package/build/styles/inputs/SelectInput/SelectInput.css +2 -2
  253. package/build/styles/inputs/TextArea.css +3 -3
  254. package/build/styles/less/legacy-variables.less +34 -47
  255. package/build/styles/main.css +350 -402
  256. package/build/styles/modal/Modal.css +7 -20
  257. package/build/styles/overlayHeader/OverlayHeader.css +1 -1
  258. package/build/styles/popover/Popover.css +3 -3
  259. package/build/styles/promoCard/PromoCard.css +1 -1
  260. package/build/styles/prompt/ActionPrompt/ActionPrompt.css +1 -1
  261. package/build/styles/prompt/CriticalBanner/CriticalBanner.css +1 -1
  262. package/build/styles/prompt/PrimitivePrompt/PrimitivePrompt.css +1 -1
  263. package/build/styles/props/custom-media.css +23 -11
  264. package/build/styles/snackbar/Snackbar.css +2 -2
  265. package/build/styles/stepper/Stepper.css +2 -2
  266. package/build/styles/styles/less/accordion.css +4 -4
  267. package/build/styles/styles/less/button-groups.css +6 -6
  268. package/build/styles/styles/less/buttons.css +1 -1
  269. package/build/styles/styles/less/circles.css +1 -1
  270. package/build/styles/styles/less/column-layout.css +4 -4
  271. package/build/styles/styles/less/decision.css +4 -4
  272. package/build/styles/styles/less/dropdowns.css +10 -10
  273. package/build/styles/styles/less/droppable.css +8 -8
  274. package/build/styles/styles/less/flex.css +13 -15
  275. package/build/styles/styles/less/footer.css +3 -3
  276. package/build/styles/styles/less/forms/bootstrap-forms.css +9 -9
  277. package/build/styles/styles/less/grid.css +19 -19
  278. package/build/styles/styles/less/input-groups.css +12 -12
  279. package/build/styles/styles/less/list-group.css +8 -8
  280. package/build/styles/styles/less/modals.css +6 -6
  281. package/build/styles/styles/less/navbar.css +62 -62
  282. package/build/styles/styles/less/navs.css +2 -2
  283. package/build/styles/styles/less/neptune.css +274 -328
  284. package/build/styles/styles/less/panels.css +9 -9
  285. package/build/styles/styles/less/popovers.css +13 -13
  286. package/build/styles/styles/less/select.css +1 -1
  287. package/build/styles/styles/less/sequences.css +6 -6
  288. package/build/styles/styles/less/table.css +6 -6
  289. package/build/styles/styles/less/utilities.css +8 -20
  290. package/build/styles/styles/less/wells.css +4 -18
  291. package/build/styles/styles/props/custom-media.css +1 -11
  292. package/build/styles/table/Table.css +1 -1
  293. package/build/styles/tabs/Tabs.css +2 -2
  294. package/build/styles/typeahead/Typeahead.css +1 -1
  295. package/build/summary/Summary.js +1 -1
  296. package/build/summary/Summary.mjs +1 -1
  297. package/build/table/Table.js +1 -1
  298. package/build/table/Table.mjs +1 -1
  299. package/build/table/TableRow.js +1 -1
  300. package/build/table/TableRow.mjs +1 -1
  301. package/build/table/TableStatusText.js +1 -1
  302. package/build/table/TableStatusText.mjs +1 -1
  303. package/build/tabs/Tabs.js +1 -1
  304. package/build/tabs/Tabs.mjs +1 -1
  305. package/build/tile/Tile.js +1 -1
  306. package/build/tile/Tile.mjs +1 -1
  307. package/build/title/Title.js +1 -1
  308. package/build/title/Title.mjs +1 -1
  309. package/build/tooltip/Tooltip.js +1 -1
  310. package/build/tooltip/Tooltip.mjs +1 -1
  311. package/build/typeahead/Typeahead.js +1 -1
  312. package/build/typeahead/Typeahead.mjs +1 -1
  313. package/build/types/avatarView/AvatarView.d.ts +1 -1
  314. package/build/types/avatarView/AvatarView.d.ts.map +1 -1
  315. package/build/types/avatarView/Dot.d.ts.map +1 -1
  316. package/build/types/circularButton/CircularButton.d.ts.map +1 -1
  317. package/build/types/common/bottomSheet/BottomSheet.d.ts.map +1 -1
  318. package/build/types/common/circle/Circle.d.ts +1 -1
  319. package/build/types/common/circle/Circle.d.ts.map +1 -1
  320. package/build/types/common/hooks/useScreenSize.d.ts +1 -1
  321. package/build/types/common/hooks/useScreenSize.d.ts.map +1 -1
  322. package/build/types/common/index.d.ts +1 -1
  323. package/build/types/common/index.d.ts.map +1 -1
  324. package/build/types/dateLookup/DateLookup.d.ts.map +1 -1
  325. package/build/types/decision/Decision.d.ts.map +1 -1
  326. package/build/types/field/Field.d.ts.map +1 -1
  327. package/build/types/field/Field.messages.d.ts +8 -0
  328. package/build/types/field/Field.messages.d.ts.map +1 -0
  329. package/build/types/flowNavigation/FlowNavigation.d.ts.map +1 -1
  330. package/build/types/index.d.ts +2 -1
  331. package/build/types/index.d.ts.map +1 -1
  332. package/build/types/inputs/TextArea.d.ts.map +1 -1
  333. package/build/types/inputs/contexts.d.ts +6 -0
  334. package/build/types/inputs/contexts.d.ts.map +1 -1
  335. package/build/types/logo/Logo.d.ts +1 -1
  336. package/build/types/prompt/ActionPrompt/ActionPrompt.d.ts.map +1 -1
  337. package/build/types/statusIcon/StatusIcon.d.ts.map +1 -1
  338. package/build/types/test-utils/index.d.ts +2 -0
  339. package/build/types/test-utils/index.d.ts.map +1 -1
  340. package/build/upload/Upload.js +1 -1
  341. package/build/upload/Upload.mjs +1 -1
  342. package/build/upload/steps/completeStep/completeStep.js +1 -1
  343. package/build/upload/steps/completeStep/completeStep.mjs +1 -1
  344. package/build/upload/steps/processingStep/processingStep.js +1 -1
  345. package/build/upload/steps/processingStep/processingStep.mjs +1 -1
  346. package/build/upload/steps/uploadImageStep/uploadImageStep.js +1 -1
  347. package/build/upload/steps/uploadImageStep/uploadImageStep.mjs +1 -1
  348. package/build/uploadInput/UploadInput.js +1 -1
  349. package/build/uploadInput/UploadInput.mjs +1 -1
  350. package/build/uploadInput/uploadButton/UploadButton.js +1 -1
  351. package/build/uploadInput/uploadButton/UploadButton.mjs +1 -1
  352. package/build/uploadInput/uploadButton/defaults.js +1 -1
  353. package/build/uploadInput/uploadButton/defaults.mjs +1 -1
  354. package/build/uploadInput/uploadItem/UploadItem.js +1 -1
  355. package/build/uploadInput/uploadItem/UploadItem.mjs +1 -1
  356. package/build/withDisplayFormat/WithDisplayFormat.js +1 -1
  357. package/build/withDisplayFormat/WithDisplayFormat.mjs +1 -1
  358. package/package.json +3 -3
  359. package/src/accordion/Accordion.css +1 -1
  360. package/src/avatarLayout/AvatarLayout.story.tsx +1 -1
  361. package/src/avatarLayout/AvatarLayout.tsx +4 -0
  362. package/src/avatarView/AvatarView.css +4 -4
  363. package/src/avatarView/AvatarView.story.tsx +17 -13
  364. package/src/avatarView/AvatarView.tsx +5 -1
  365. package/src/avatarView/Dot.css +4 -4
  366. package/src/avatarView/Dot.less +6 -6
  367. package/src/avatarView/Dot.tsx +2 -0
  368. package/src/card/Card.css +2 -2
  369. package/src/carousel/Carousel.css +5 -5
  370. package/src/carousel/Carousel.less +3 -3
  371. package/src/circularButton/CircularButton.tsx +3 -2
  372. package/src/common/Option/Option.css +2 -4
  373. package/src/common/Option/Option.less +2 -4
  374. package/src/common/baseCard/BaseCard.css +1 -1
  375. package/src/common/bottomSheet/BottomSheet.tsx +2 -2
  376. package/src/common/circle/Circle.tsx +7 -3
  377. package/src/common/hooks/useLayout/useLayout.ts +1 -1
  378. package/src/common/hooks/useScreenSize.ts +1 -1
  379. package/src/common/index.ts +1 -1
  380. package/src/common/responsivePanel/ResponsivePanel.test.js +3 -2
  381. package/src/container/Container.css +3 -3
  382. package/src/criticalBanner/CriticalCommsBanner.css +1 -1
  383. package/src/dateInput/DateInput.css +1 -1
  384. package/src/dateLookup/DateLookup.tsx +1 -1
  385. package/src/decision/Decision.test.tsx +2 -1
  386. package/src/decision/Decision.tsx +2 -1
  387. package/src/definitionList/DefinitionList.css +2 -2
  388. package/src/definitionList/DefinitionList.less +2 -2
  389. package/src/drawer/Drawer.css +2 -2
  390. package/src/drawer/Drawer.less +4 -3
  391. package/src/expressiveMoneyInput/ExpressiveMoneyInput.css +2 -0
  392. package/src/expressiveMoneyInput/ExpressiveMoneyInput.test.story.tsx +43 -0
  393. package/src/expressiveMoneyInput/amountInput/AmountInput.css +2 -0
  394. package/src/expressiveMoneyInput/amountInput/AmountInput.less +2 -0
  395. package/src/expressiveMoneyInput/amountInput/AmountInput.tsx +1 -1
  396. package/src/field/Field.css +19 -3
  397. package/src/field/Field.less +17 -3
  398. package/src/field/Field.messages.ts +8 -0
  399. package/src/field/Field.story.tsx +5 -1
  400. package/src/field/Field.test.tsx +90 -0
  401. package/src/field/Field.tsx +84 -37
  402. package/src/flowNavigation/FlowNavigation.css +1 -1
  403. package/src/flowNavigation/FlowNavigation.less +2 -1
  404. package/src/flowNavigation/FlowNavigation.story.tsx +6 -3
  405. package/src/flowNavigation/FlowNavigation.test.js +1 -1
  406. package/src/flowNavigation/FlowNavigation.tsx +2 -1
  407. package/src/i18n/en.json +1 -0
  408. package/src/index.ts +1 -1
  409. package/src/inputs/Input.css +3 -3
  410. package/src/inputs/SelectInput/Options/SelectInputOptions.css +2 -2
  411. package/src/inputs/SelectInput/SelectInput.css +2 -2
  412. package/src/inputs/SelectInput/SelectInput.tsx +1 -1
  413. package/src/inputs/TextArea.css +3 -3
  414. package/src/inputs/TextArea.story.tsx +97 -0
  415. package/src/inputs/TextArea.test.story.tsx +142 -0
  416. package/src/inputs/TextArea.tsx +7 -2
  417. package/src/inputs/contexts.tsx +18 -1
  418. package/src/logo/Logo.tsx +1 -1
  419. package/src/main.css +350 -402
  420. package/src/modal/Modal.css +7 -20
  421. package/src/modal/Modal.less +7 -19
  422. package/src/modal/Modal.tsx +2 -2
  423. package/src/overlayHeader/OverlayHeader.css +1 -1
  424. package/src/overlayHeader/OverlayHeader.less +3 -2
  425. package/src/popover/Popover.css +3 -3
  426. package/src/popover/Popover.test.tsx +2 -1
  427. package/src/promoCard/PromoCard.css +1 -1
  428. package/src/prompt/ActionPrompt/ActionPrompt.css +1 -1
  429. package/src/prompt/ActionPrompt/ActionPrompt.less +1 -1
  430. package/src/prompt/ActionPrompt/ActionPrompt.test.tsx +37 -6
  431. package/src/prompt/ActionPrompt/ActionPrompt.tsx +3 -2
  432. package/src/prompt/CriticalBanner/CriticalBanner.css +1 -1
  433. package/src/prompt/CriticalBanner/CriticalBanner.less +2 -2
  434. package/src/prompt/PrimitivePrompt/PrimitivePrompt.css +1 -1
  435. package/src/prompt/PrimitivePrompt/PrimitivePrompt.less +1 -1
  436. package/src/select/Select.test.tsx +1 -1
  437. package/src/snackbar/Snackbar.css +2 -2
  438. package/src/statusIcon/StatusIcon.tsx +3 -2
  439. package/src/stepper/Stepper.css +2 -2
  440. package/src/styles/less/accordion.css +4 -4
  441. package/src/styles/less/addons/_display-utilities.less +13 -27
  442. package/src/styles/less/button-groups.css +6 -6
  443. package/src/styles/less/buttons.css +1 -1
  444. package/src/styles/less/circles.css +1 -1
  445. package/src/styles/less/column-layout.css +4 -4
  446. package/src/styles/less/core/_typography-utilities.less +10 -22
  447. package/src/styles/less/core/_typography.less +28 -6
  448. package/src/styles/less/decision.css +4 -4
  449. package/src/styles/less/dropdowns.css +10 -10
  450. package/src/styles/less/droppable.css +8 -8
  451. package/src/styles/less/flex.css +13 -15
  452. package/src/styles/less/flex.less +1 -3
  453. package/src/styles/less/footer.css +3 -3
  454. package/src/styles/less/forms/bootstrap-forms.css +9 -9
  455. package/src/styles/less/forms/bootstrap-forms.less +1 -1
  456. package/src/styles/less/grid.css +19 -19
  457. package/src/styles/less/input-groups.css +12 -12
  458. package/src/styles/less/list-group.css +8 -8
  459. package/src/styles/less/modals.css +6 -6
  460. package/src/styles/less/modals.less +4 -4
  461. package/src/styles/less/navbar.css +62 -62
  462. package/src/styles/less/navbar.less +2 -2
  463. package/src/styles/less/navs.css +2 -2
  464. package/src/styles/less/neptune.bundle.less +1 -0
  465. package/src/styles/less/neptune.css +274 -328
  466. package/src/styles/less/panels.css +9 -9
  467. package/src/styles/less/popovers.css +13 -13
  468. package/src/styles/less/popovers.less +6 -6
  469. package/src/styles/less/select.css +1 -1
  470. package/src/styles/less/sequences.css +6 -6
  471. package/src/styles/less/table.css +6 -6
  472. package/src/styles/less/table.less +1 -1
  473. package/src/styles/less/utilities.css +8 -20
  474. package/src/styles/less/utilities.less +6 -14
  475. package/src/styles/less/wells.css +4 -18
  476. package/src/styles/less/wells.less +3 -5
  477. package/src/styles/props/custom-media.css +1 -11
  478. package/src/styles/variables/legacy-variables.less +4 -47
  479. package/src/table/Table.css +1 -1
  480. package/src/tabs/Tabs.css +2 -2
  481. package/src/textareaWithDisplayFormat/TextareaWithDisplayFormat.story.tsx +1 -0
  482. package/src/typeahead/Typeahead.css +1 -1
  483. package/src/uploadInput/uploadItem/UploadItem.less +2 -2
  484. package/build/common/propsValues/breakpoint.js +0 -12
  485. package/build/common/propsValues/breakpoint.js.map +0 -1
  486. package/build/common/propsValues/breakpoint.mjs +0 -12
  487. package/build/common/propsValues/breakpoint.mjs.map +0 -1
  488. package/build/types/common/propsValues/breakpoint.d.ts +0 -9
  489. package/build/types/common/propsValues/breakpoint.d.ts.map +0 -1
  490. package/src/common/propsValues/breakpoint.ts +0 -8
@@ -1 +1 @@
1
- {"version":3,"file":"SelectInput.mjs","sources":["../../../src/inputs/SelectInput/SelectInput.tsx"],"sourcesContent":["import mergeProps from 'merge-props';\nimport { useCallback, useEffect, useRef, useState, useDeferredValue } from 'react';\nimport { Listbox as ListboxBase } from '@headlessui/react';\nimport { useScreenSize } from '../../common/hooks/useScreenSize';\nimport { Breakpoint } from '../../common/propsValues/breakpoint';\nimport { useEffectEvent } from '../../common/hooks/useEffectEvent';\nimport { useInputAttributes } from '../contexts';\n\nimport { SelectInputBottomSheet } from './BottomSheet';\nimport { SelectInputPopover } from './Popover';\nimport { SelectInputOptions } from './Options';\nimport { DefaultRenderTrigger } from './DefaultRenderTrigger';\n\nimport {\n SelectInputOptionContentWithinTriggerContext,\n SelectInputTriggerButtonPropsContext,\n} from './SelectInput.contexts';\nimport { searchableString, sortByRelevance } from './SelectInput.utils';\nimport { SelectInputProps } from './SelectInput.types';\n\nconst noop = () => {};\n\n/**\n * SelectInput component allows users to select an option from a dropdown list.\n * Supports filtering, multiple selection, and customization.\n */\nexport function SelectInput<T = string, M extends boolean = false>({\n id: idProp,\n parentId,\n name,\n multiple,\n placeholder,\n autocomplete,\n items,\n defaultValue,\n value: controlledValue,\n compareValues,\n renderValue = String,\n renderFooter,\n renderTrigger = DefaultRenderTrigger,\n filterable,\n filterPlaceholder,\n sortFilteredOptions,\n disabled,\n size = 'md',\n className,\n UNSAFE_triggerButtonProps,\n triggerRef: externalTriggerRef,\n onFilterChange = noop,\n onChange,\n onOpen,\n onClose,\n onClear,\n}: SelectInputProps<T, M>) {\n const inputAttributes = useInputAttributes({ nonLabelable: true });\n const id = idProp ?? inputAttributes.id;\n\n const [open, setOpen] = useState(false);\n\n const initialized = useRef(false);\n const handleClose = useEffectEvent(onClose ?? (() => {}));\n const handleOpen = useEffectEvent(onOpen ?? (() => {}));\n\n useEffect(() => {\n if (initialized.current) {\n if (open) {\n handleOpen?.();\n } else {\n handleClose?.();\n }\n } else {\n initialized.current = true;\n }\n }, [open]);\n\n const [filterQuery, _setFilterQuery] = useState('');\n const deferredFilterQuery = useDeferredValue(filterQuery);\n const previousFilterQueryRef = useRef(filterQuery);\n\n const setFilterQuery = useCallback(\n (query: string) => {\n _setFilterQuery(query);\n if (query !== previousFilterQueryRef.current) {\n onFilterChange({\n query,\n queryNormalized: query ? searchableString(query) : null,\n });\n previousFilterQueryRef.current = query;\n }\n },\n [onFilterChange],\n );\n\n const internalTriggerRef = useRef<HTMLButtonElement | null>(null);\n const searchInputRef = useRef<HTMLInputElement>(null);\n const listboxRef = useRef<HTMLDivElement>(null);\n const controllerRef = filterable ? searchInputRef : listboxRef;\n\n const screenSm = useScreenSize(Breakpoint.SMALL);\n const OptionsOverlay = screenSm ? SelectInputPopover : SelectInputBottomSheet;\n\n /**\n * Attempts to resolve the `listbox` label\n * @see https://storybook.wise.design/?path=/docs/forms-selectinput-accessibility--docs#labelling\n */\n const getListBoxLabelProps = (): {\n listBoxLabel?: string;\n listBoxLabelledBy?: string;\n } => {\n if (UNSAFE_triggerButtonProps?.['aria-label']) {\n return {\n listBoxLabel: UNSAFE_triggerButtonProps['aria-label'],\n };\n }\n\n if (UNSAFE_triggerButtonProps?.['aria-labelledby']) {\n return {\n listBoxLabelledBy: UNSAFE_triggerButtonProps['aria-labelledby'],\n };\n }\n\n if (inputAttributes['aria-labelledby']) {\n return {\n listBoxLabelledBy: inputAttributes['aria-labelledby'],\n };\n }\n\n return {};\n };\n\n return (\n <ListboxBase\n name={name}\n multiple={multiple}\n defaultValue={defaultValue as M extends true ? T[] : T}\n value={controlledValue as M extends true ? T[] : T}\n by={compareValues}\n disabled={disabled}\n onChange={\n ((value) => {\n if (!multiple) {\n setOpen(false);\n }\n onChange?.(value);\n }) satisfies SelectInputProps<T, M>['onChange']\n }\n >\n {({ disabled: uiDisabled, value }) => {\n const placeholderShown =\n multiple && Array.isArray(value) ? value.length === 0 : value == null;\n return (\n <OptionsOverlay\n placement=\"bottom-start\"\n open={open}\n renderTrigger={({ ref, getInteractionProps }) => (\n <SelectInputTriggerButtonPropsContext.Provider\n // eslint-disable-next-line react/jsx-no-constructed-context-values\n value={{\n ref: (node) => {\n ref(node);\n if (externalTriggerRef) {\n // eslint-disable-next-line no-param-reassign\n externalTriggerRef.current = node;\n } else {\n internalTriggerRef.current = node;\n }\n },\n size,\n ...inputAttributes,\n ...UNSAFE_triggerButtonProps,\n id,\n ...mergeProps(\n {\n onClick: () => {\n setOpen((prev) => !prev);\n },\n onKeyDown: (event: React.KeyboardEvent) => {\n if (\n event.key === ' ' ||\n event.key === 'Enter' ||\n event.key === 'ArrowDown' ||\n event.key === 'ArrowUp'\n ) {\n setOpen((prev) => !prev);\n }\n },\n },\n getInteractionProps(),\n ),\n }}\n >\n {renderTrigger({\n content: !placeholderShown ? (\n <SelectInputOptionContentWithinTriggerContext.Provider value>\n {multiple && Array.isArray(value)\n ? (value as readonly NonNullable<T>[])\n .map((option) => renderValue(option, true))\n .filter((node) => node != null)\n .join(', ')\n : renderValue(value as NonNullable<T>, true)}\n </SelectInputOptionContentWithinTriggerContext.Provider>\n ) : (\n placeholder\n ),\n placeholderShown,\n clear:\n onClear != null\n ? () => {\n onClear();\n (externalTriggerRef?.current ?? internalTriggerRef.current)?.focus({\n preventScroll: true,\n });\n }\n : undefined,\n disabled: uiDisabled,\n size,\n className,\n })}\n </SelectInputTriggerButtonPropsContext.Provider>\n )}\n initialFocusRef={controllerRef}\n size={filterable ? 'lg' : 'md'}\n padding=\"none\"\n onClose={() => {\n setOpen(false);\n }}\n onCloseEnd={() => {\n setFilterQuery('');\n }}\n >\n <SelectInputOptions\n id={id ? `${id}Search` : undefined}\n parentId={parentId}\n items={items}\n compareValues={compareValues}\n renderValue={renderValue}\n renderFooter={renderFooter}\n filterable={filterable}\n filterPlaceholder={filterPlaceholder}\n sortFilteredOptions={sortFilteredOptions}\n searchInputRef={searchInputRef}\n listboxRef={listboxRef}\n filterQuery={deferredFilterQuery}\n autocomplete={autocomplete}\n name={name}\n onFilterChange={setFilterQuery}\n onAutocompleteSelect={(matchedValue) => {\n onChange?.(matchedValue as M extends true ? T[] : T);\n if (!multiple) {\n setOpen(false);\n }\n }}\n {...getListBoxLabelProps()}\n />\n </OptionsOverlay>\n );\n }}\n </ListboxBase>\n );\n}\n\n// Attach sortByRelevance to the component for convenience\nSelectInput.sortByRelevance = sortByRelevance;\n"],"names":["noop","SelectInput","id","idProp","parentId","name","multiple","placeholder","autocomplete","items","defaultValue","value","controlledValue","compareValues","renderValue","String","renderFooter","renderTrigger","DefaultRenderTrigger","filterable","filterPlaceholder","sortFilteredOptions","disabled","size","className","UNSAFE_triggerButtonProps","triggerRef","externalTriggerRef","onFilterChange","onChange","onOpen","onClose","onClear","inputAttributes","useInputAttributes","nonLabelable","open","setOpen","useState","initialized","useRef","handleClose","useEffectEvent","handleOpen","useEffect","current","filterQuery","_setFilterQuery","deferredFilterQuery","useDeferredValue","previousFilterQueryRef","setFilterQuery","useCallback","query","queryNormalized","searchableString","internalTriggerRef","searchInputRef","listboxRef","controllerRef","screenSm","useScreenSize","Breakpoint","SMALL","OptionsOverlay","SelectInputPopover","SelectInputBottomSheet","getListBoxLabelProps","listBoxLabel","listBoxLabelledBy","_jsx","ListboxBase","by","children","uiDisabled","placeholderShown","Array","isArray","length","placement","ref","getInteractionProps","SelectInputTriggerButtonPropsContext","Provider","node","mergeProps","onClick","prev","onKeyDown","event","key","content","SelectInputOptionContentWithinTriggerContext","map","option","filter","join","clear","focus","preventScroll","undefined","initialFocusRef","padding","onCloseEnd","SelectInputOptions","onAutocompleteSelect","matchedValue","sortByRelevance"],"mappings":";;;;;;;;;;;;;;;AAoBA,MAAMA,IAAI,GAAGA,MAAK,CAAE,CAAC;AAErB;;;AAGG;AACG,SAAUC,WAAWA,CAAwC;AACjEC,EAAAA,EAAE,EAAEC,MAAM;EACVC,QAAQ;EACRC,IAAI;EACJC,QAAQ;EACRC,WAAW;EACXC,YAAY;EACZC,KAAK;EACLC,YAAY;AACZC,EAAAA,KAAK,EAAEC,eAAe;EACtBC,aAAa;AACbC,EAAAA,WAAW,GAAGC,MAAM;EACpBC,YAAY;AACZC,EAAAA,aAAa,GAAGC,oBAAoB;EACpCC,UAAU;EACVC,iBAAiB;EACjBC,mBAAmB;EACnBC,QAAQ;AACRC,EAAAA,IAAI,GAAG,IAAI;EACXC,SAAS;EACTC,yBAAyB;AACzBC,EAAAA,UAAU,EAAEC,kBAAkB;AAC9BC,EAAAA,cAAc,GAAG5B,IAAI;EACrB6B,QAAQ;EACRC,MAAM;EACNC,OAAO;AACPC,EAAAA;AAAO,CACgB,EAAA;EACvB,MAAMC,eAAe,GAAGC,kBAAkB,CAAC;AAAEC,IAAAA,YAAY,EAAE;AAAI,GAAE,CAAC;AAClE,EAAA,MAAMjC,EAAE,GAAGC,MAAM,IAAI8B,eAAe,CAAC/B,EAAE;EAEvC,MAAM,CAACkC,IAAI,EAAEC,OAAO,CAAC,GAAGC,QAAQ,CAAC,KAAK,CAAC;AAEvC,EAAA,MAAMC,WAAW,GAAGC,MAAM,CAAC,KAAK,CAAC;EACjC,MAAMC,WAAW,GAAGC,cAAc,CAACX,OAAO,KAAK,MAAK,CAAE,CAAC,CAAC,CAAC;EACzD,MAAMY,UAAU,GAAGD,cAAc,CAACZ,MAAM,KAAK,MAAK,CAAE,CAAC,CAAC,CAAC;AAEvDc,EAAAA,SAAS,CAAC,MAAK;IACb,IAAIL,WAAW,CAACM,OAAO,EAAE;AACvB,MAAA,IAAIT,IAAI,EAAE;AACRO,QAAAA,UAAU,IAAI;AAChB,MAAA,CAAC,MAAM;AACLF,QAAAA,WAAW,IAAI;AACjB,MAAA;AACF,IAAA,CAAC,MAAM;MACLF,WAAW,CAACM,OAAO,GAAG,IAAI;AAC5B,IAAA;AACF,EAAA,CAAC,EAAE,CAACT,IAAI,CAAC,CAAC;EAEV,MAAM,CAACU,WAAW,EAAEC,eAAe,CAAC,GAAGT,QAAQ,CAAC,EAAE,CAAC;AACnD,EAAA,MAAMU,mBAAmB,GAAGC,gBAAgB,CAACH,WAAW,CAAC;AACzD,EAAA,MAAMI,sBAAsB,GAAGV,MAAM,CAACM,WAAW,CAAC;AAElD,EAAA,MAAMK,cAAc,GAAGC,WAAW,CAC/BC,KAAa,IAAI;IAChBN,eAAe,CAACM,KAAK,CAAC;AACtB,IAAA,IAAIA,KAAK,KAAKH,sBAAsB,CAACL,OAAO,EAAE;AAC5CjB,MAAAA,cAAc,CAAC;QACbyB,KAAK;AACLC,QAAAA,eAAe,EAAED,KAAK,GAAGE,gBAAgB,CAACF,KAAK,CAAC,GAAG;AACpD,OAAA,CAAC;MACFH,sBAAsB,CAACL,OAAO,GAAGQ,KAAK;AACxC,IAAA;AACF,EAAA,CAAC,EACD,CAACzB,cAAc,CAAC,CACjB;AAED,EAAA,MAAM4B,kBAAkB,GAAGhB,MAAM,CAA2B,IAAI,CAAC;AACjE,EAAA,MAAMiB,cAAc,GAAGjB,MAAM,CAAmB,IAAI,CAAC;AACrD,EAAA,MAAMkB,UAAU,GAAGlB,MAAM,CAAiB,IAAI,CAAC;AAC/C,EAAA,MAAMmB,aAAa,GAAGxC,UAAU,GAAGsC,cAAc,GAAGC,UAAU;AAE9D,EAAA,MAAME,QAAQ,GAAGC,aAAa,CAACC,UAAU,CAACC,KAAK,CAAC;AAChD,EAAA,MAAMC,cAAc,GAAGJ,QAAQ,GAAGK,kBAAkB,GAAGC,sBAAsB;AAE7E;;;AAGG;EACH,MAAMC,oBAAoB,GAAGA,MAGzB;AACF,IAAA,IAAI1C,yBAAyB,GAAG,YAAY,CAAC,EAAE;MAC7C,OAAO;QACL2C,YAAY,EAAE3C,yBAAyB,CAAC,YAAY;OACrD;AACH,IAAA;AAEA,IAAA,IAAIA,yBAAyB,GAAG,iBAAiB,CAAC,EAAE;MAClD,OAAO;QACL4C,iBAAiB,EAAE5C,yBAAyB,CAAC,iBAAiB;OAC/D;AACH,IAAA;AAEA,IAAA,IAAIQ,eAAe,CAAC,iBAAiB,CAAC,EAAE;MACtC,OAAO;QACLoC,iBAAiB,EAAEpC,eAAe,CAAC,iBAAiB;OACrD;AACH,IAAA;AAEA,IAAA,OAAO,EAAE;EACX,CAAC;EAED,oBACEqC,GAAA,CAACC,OAAW,EAAA;AACVlE,IAAAA,IAAI,EAAEA,IAAK;AACXC,IAAAA,QAAQ,EAAEA,QAAS;AACnBI,IAAAA,YAAY,EAAEA,YAAyC;AACvDC,IAAAA,KAAK,EAAEC,eAA4C;AACnD4D,IAAAA,EAAE,EAAE3D,aAAc;AAClBS,IAAAA,QAAQ,EAAEA,QAAS;IACnBO,QAAQ,EACJlB,KAAK,IAAI;MACT,IAAI,CAACL,QAAQ,EAAE;QACb+B,OAAO,CAAC,KAAK,CAAC;AAChB,MAAA;MACAR,QAAQ,GAAGlB,KAAK,CAAC;IACnB,CACD;AAAA8D,IAAAA,QAAA,EAEAA,CAAC;AAAEnD,MAAAA,QAAQ,EAAEoD,UAAU;AAAE/D,MAAAA;AAAK,KAAE,KAAI;AACnC,MAAA,MAAMgE,gBAAgB,GACpBrE,QAAQ,IAAIsE,KAAK,CAACC,OAAO,CAAClE,KAAK,CAAC,GAAGA,KAAK,CAACmE,MAAM,KAAK,CAAC,GAAGnE,KAAK,IAAI,IAAI;MACvE,oBACE2D,GAAA,CAACN,cAAc,EAAA;AACbe,QAAAA,SAAS,EAAC,cAAc;AACxB3C,QAAAA,IAAI,EAAEA,IAAK;AACXnB,QAAAA,aAAa,EAAEA,CAAC;UAAE+D,GAAG;AAAEC,UAAAA;AAAmB,SAAE,kBAC1CX,GAAA,CAACY,oCAAoC,CAACC,QAAQ,EAAA;AAC5C;AACAxE,UAAAA,KAAK,EAAE;YACLqE,GAAG,EAAGI,IAAI,IAAI;cACZJ,GAAG,CAACI,IAAI,CAAC;AACT,cAAA,IAAIzD,kBAAkB,EAAE;AACtB;gBACAA,kBAAkB,CAACkB,OAAO,GAAGuC,IAAI;AACnC,cAAA,CAAC,MAAM;gBACL5B,kBAAkB,CAACX,OAAO,GAAGuC,IAAI;AACnC,cAAA;YACF,CAAC;YACD7D,IAAI;AACJ,YAAA,GAAGU,eAAe;AAClB,YAAA,GAAGR,yBAAyB;YAC5BvB,EAAE;AACF,YAAA,GAAGmF,UAAU,CACX;cACEC,OAAO,EAAEA,MAAK;AACZjD,gBAAAA,OAAO,CAAEkD,IAAI,IAAK,CAACA,IAAI,CAAC;cAC1B,CAAC;cACDC,SAAS,EAAGC,KAA0B,IAAI;gBACxC,IACEA,KAAK,CAACC,GAAG,KAAK,GAAG,IACjBD,KAAK,CAACC,GAAG,KAAK,OAAO,IACrBD,KAAK,CAACC,GAAG,KAAK,WAAW,IACzBD,KAAK,CAACC,GAAG,KAAK,SAAS,EACvB;AACArD,kBAAAA,OAAO,CAAEkD,IAAI,IAAK,CAACA,IAAI,CAAC;AAC1B,gBAAA;AACF,cAAA;aACD,EACDN,mBAAmB,EAAE;WAEvB;UAAAR,QAAA,EAEDxD,aAAa,CAAC;YACb0E,OAAO,EAAE,CAAChB,gBAAgB,gBACxBL,GAAA,CAACsB,4CAA4C,CAACT,QAAQ,EAAA;cAACxE,KAAK,EAAA,IAAA;AAAA8D,cAAAA,QAAA,EACzDnE,QAAQ,IAAIsE,KAAK,CAACC,OAAO,CAAClE,KAAK,CAAC,GAC5BA,KAAmC,CACjCkF,GAAG,CAAEC,MAAM,IAAKhF,WAAW,CAACgF,MAAM,EAAE,IAAI,CAAC,CAAC,CAC1CC,MAAM,CAAEX,IAAI,IAAKA,IAAI,IAAI,IAAI,CAAC,CAC9BY,IAAI,CAAC,IAAI,CAAC,GACblF,WAAW,CAACH,KAAuB,EAAE,IAAI;aACQ,CAAC,GAExDJ,WACD;YACDoE,gBAAgB;AAChBsB,YAAAA,KAAK,EACHjE,OAAO,IAAI,IAAI,GACX,MAAK;AACHA,cAAAA,OAAO,EAAE;cACT,CAACL,kBAAkB,EAAEkB,OAAO,IAAIW,kBAAkB,CAACX,OAAO,GAAGqD,KAAK,CAAC;AACjEC,gBAAAA,aAAa,EAAE;AAChB,eAAA,CAAC;AACJ,YAAA,CAAC,GACDC,SAAS;AACf9E,YAAAA,QAAQ,EAAEoD,UAAU;YACpBnD,IAAI;AACJC,YAAAA;WACD;AAAC,SAC2C,CAC/C;AACF6E,QAAAA,eAAe,EAAE1C,aAAc;AAC/BpC,QAAAA,IAAI,EAAEJ,UAAU,GAAG,IAAI,GAAG,IAAK;AAC/BmF,QAAAA,OAAO,EAAC,MAAM;QACdvE,OAAO,EAAEA,MAAK;UACZM,OAAO,CAAC,KAAK,CAAC;QAChB,CAAE;QACFkE,UAAU,EAAEA,MAAK;UACfpD,cAAc,CAAC,EAAE,CAAC;QACpB,CAAE;QAAAsB,QAAA,eAEFH,GAAA,CAACkC,kBAAkB,EAAA;AACjBtG,UAAAA,EAAE,EAAEA,EAAE,GAAG,GAAGA,EAAE,CAAA,MAAA,CAAQ,GAAGkG,SAAU;AACnChG,UAAAA,QAAQ,EAAEA,QAAS;AACnBK,UAAAA,KAAK,EAAEA,KAAM;AACbI,UAAAA,aAAa,EAAEA,aAAc;AAC7BC,UAAAA,WAAW,EAAEA,WAAY;AACzBE,UAAAA,YAAY,EAAEA,YAAa;AAC3BG,UAAAA,UAAU,EAAEA,UAAW;AACvBC,UAAAA,iBAAiB,EAAEA,iBAAkB;AACrCC,UAAAA,mBAAmB,EAAEA,mBAAoB;AACzCoC,UAAAA,cAAc,EAAEA,cAAe;AAC/BC,UAAAA,UAAU,EAAEA,UAAW;AACvBZ,UAAAA,WAAW,EAAEE,mBAAoB;AACjCxC,UAAAA,YAAY,EAAEA,YAAa;AAC3BH,UAAAA,IAAI,EAAEA,IAAK;AACXuB,UAAAA,cAAc,EAAEuB,cAAe;UAC/BsD,oBAAoB,EAAGC,YAAY,IAAI;YACrC7E,QAAQ,GAAG6E,YAAwC,CAAC;YACpD,IAAI,CAACpG,QAAQ,EAAE;cACb+B,OAAO,CAAC,KAAK,CAAC;AAChB,YAAA;UACF,CAAE;AAAA,UAAA,GACE8B,oBAAoB;SAAG;AAE/B,OAAgB,CAAC;AAErB,IAAA;AAAC,GACU,CAAC;AAElB;AAEA;AACAlE,WAAW,CAAC0G,eAAe,GAAGA,eAAe;;;;"}
1
+ {"version":3,"file":"SelectInput.mjs","sources":["../../../src/inputs/SelectInput/SelectInput.tsx"],"sourcesContent":["import mergeProps from 'merge-props';\nimport { useCallback, useEffect, useRef, useState, useDeferredValue } from 'react';\nimport { Listbox as ListboxBase } from '@headlessui/react';\nimport { Breakpoint } from '@transferwise/neptune-tokens';\nimport { useScreenSize } from '../../common/hooks/useScreenSize';\nimport { useEffectEvent } from '../../common/hooks/useEffectEvent';\nimport { useInputAttributes } from '../contexts';\n\nimport { SelectInputBottomSheet } from './BottomSheet';\nimport { SelectInputPopover } from './Popover';\nimport { SelectInputOptions } from './Options';\nimport { DefaultRenderTrigger } from './DefaultRenderTrigger';\n\nimport {\n SelectInputOptionContentWithinTriggerContext,\n SelectInputTriggerButtonPropsContext,\n} from './SelectInput.contexts';\nimport { searchableString, sortByRelevance } from './SelectInput.utils';\nimport { SelectInputProps } from './SelectInput.types';\n\nconst noop = () => {};\n\n/**\n * SelectInput component allows users to select an option from a dropdown list.\n * Supports filtering, multiple selection, and customization.\n */\nexport function SelectInput<T = string, M extends boolean = false>({\n id: idProp,\n parentId,\n name,\n multiple,\n placeholder,\n autocomplete,\n items,\n defaultValue,\n value: controlledValue,\n compareValues,\n renderValue = String,\n renderFooter,\n renderTrigger = DefaultRenderTrigger,\n filterable,\n filterPlaceholder,\n sortFilteredOptions,\n disabled,\n size = 'md',\n className,\n UNSAFE_triggerButtonProps,\n triggerRef: externalTriggerRef,\n onFilterChange = noop,\n onChange,\n onOpen,\n onClose,\n onClear,\n}: SelectInputProps<T, M>) {\n const inputAttributes = useInputAttributes({ nonLabelable: true });\n const id = idProp ?? inputAttributes.id;\n\n const [open, setOpen] = useState(false);\n\n const initialized = useRef(false);\n const handleClose = useEffectEvent(onClose ?? (() => {}));\n const handleOpen = useEffectEvent(onOpen ?? (() => {}));\n\n useEffect(() => {\n if (initialized.current) {\n if (open) {\n handleOpen?.();\n } else {\n handleClose?.();\n }\n } else {\n initialized.current = true;\n }\n }, [open]);\n\n const [filterQuery, _setFilterQuery] = useState('');\n const deferredFilterQuery = useDeferredValue(filterQuery);\n const previousFilterQueryRef = useRef(filterQuery);\n\n const setFilterQuery = useCallback(\n (query: string) => {\n _setFilterQuery(query);\n if (query !== previousFilterQueryRef.current) {\n onFilterChange({\n query,\n queryNormalized: query ? searchableString(query) : null,\n });\n previousFilterQueryRef.current = query;\n }\n },\n [onFilterChange],\n );\n\n const internalTriggerRef = useRef<HTMLButtonElement | null>(null);\n const searchInputRef = useRef<HTMLInputElement>(null);\n const listboxRef = useRef<HTMLDivElement>(null);\n const controllerRef = filterable ? searchInputRef : listboxRef;\n\n const screenSm = useScreenSize(Breakpoint.SMALL);\n const OptionsOverlay = screenSm ? SelectInputPopover : SelectInputBottomSheet;\n\n /**\n * Attempts to resolve the `listbox` label\n * @see https://storybook.wise.design/?path=/docs/forms-selectinput-accessibility--docs#labelling\n */\n const getListBoxLabelProps = (): {\n listBoxLabel?: string;\n listBoxLabelledBy?: string;\n } => {\n if (UNSAFE_triggerButtonProps?.['aria-label']) {\n return {\n listBoxLabel: UNSAFE_triggerButtonProps['aria-label'],\n };\n }\n\n if (UNSAFE_triggerButtonProps?.['aria-labelledby']) {\n return {\n listBoxLabelledBy: UNSAFE_triggerButtonProps['aria-labelledby'],\n };\n }\n\n if (inputAttributes['aria-labelledby']) {\n return {\n listBoxLabelledBy: inputAttributes['aria-labelledby'],\n };\n }\n\n return {};\n };\n\n return (\n <ListboxBase\n name={name}\n multiple={multiple}\n defaultValue={defaultValue as M extends true ? T[] : T}\n value={controlledValue as M extends true ? T[] : T}\n by={compareValues}\n disabled={disabled}\n onChange={\n ((value) => {\n if (!multiple) {\n setOpen(false);\n }\n onChange?.(value);\n }) satisfies SelectInputProps<T, M>['onChange']\n }\n >\n {({ disabled: uiDisabled, value }) => {\n const placeholderShown =\n multiple && Array.isArray(value) ? value.length === 0 : value == null;\n return (\n <OptionsOverlay\n placement=\"bottom-start\"\n open={open}\n renderTrigger={({ ref, getInteractionProps }) => (\n <SelectInputTriggerButtonPropsContext.Provider\n // eslint-disable-next-line react/jsx-no-constructed-context-values\n value={{\n ref: (node) => {\n ref(node);\n if (externalTriggerRef) {\n // eslint-disable-next-line no-param-reassign\n externalTriggerRef.current = node;\n } else {\n internalTriggerRef.current = node;\n }\n },\n size,\n ...inputAttributes,\n ...UNSAFE_triggerButtonProps,\n id,\n ...mergeProps(\n {\n onClick: () => {\n setOpen((prev) => !prev);\n },\n onKeyDown: (event: React.KeyboardEvent) => {\n if (\n event.key === ' ' ||\n event.key === 'Enter' ||\n event.key === 'ArrowDown' ||\n event.key === 'ArrowUp'\n ) {\n setOpen((prev) => !prev);\n }\n },\n },\n getInteractionProps(),\n ),\n }}\n >\n {renderTrigger({\n content: !placeholderShown ? (\n <SelectInputOptionContentWithinTriggerContext.Provider value>\n {multiple && Array.isArray(value)\n ? (value as readonly NonNullable<T>[])\n .map((option) => renderValue(option, true))\n .filter((node) => node != null)\n .join(', ')\n : renderValue(value as NonNullable<T>, true)}\n </SelectInputOptionContentWithinTriggerContext.Provider>\n ) : (\n placeholder\n ),\n placeholderShown,\n clear:\n onClear != null\n ? () => {\n onClear();\n (externalTriggerRef?.current ?? internalTriggerRef.current)?.focus({\n preventScroll: true,\n });\n }\n : undefined,\n disabled: uiDisabled,\n size,\n className,\n })}\n </SelectInputTriggerButtonPropsContext.Provider>\n )}\n initialFocusRef={controllerRef}\n size={filterable ? 'lg' : 'md'}\n padding=\"none\"\n onClose={() => {\n setOpen(false);\n }}\n onCloseEnd={() => {\n setFilterQuery('');\n }}\n >\n <SelectInputOptions\n id={id ? `${id}Search` : undefined}\n parentId={parentId}\n items={items}\n compareValues={compareValues}\n renderValue={renderValue}\n renderFooter={renderFooter}\n filterable={filterable}\n filterPlaceholder={filterPlaceholder}\n sortFilteredOptions={sortFilteredOptions}\n searchInputRef={searchInputRef}\n listboxRef={listboxRef}\n filterQuery={deferredFilterQuery}\n autocomplete={autocomplete}\n name={name}\n onFilterChange={setFilterQuery}\n onAutocompleteSelect={(matchedValue) => {\n onChange?.(matchedValue as M extends true ? T[] : T);\n if (!multiple) {\n setOpen(false);\n }\n }}\n {...getListBoxLabelProps()}\n />\n </OptionsOverlay>\n );\n }}\n </ListboxBase>\n );\n}\n\n// Attach sortByRelevance to the component for convenience\nSelectInput.sortByRelevance = sortByRelevance;\n"],"names":["noop","SelectInput","id","idProp","parentId","name","multiple","placeholder","autocomplete","items","defaultValue","value","controlledValue","compareValues","renderValue","String","renderFooter","renderTrigger","DefaultRenderTrigger","filterable","filterPlaceholder","sortFilteredOptions","disabled","size","className","UNSAFE_triggerButtonProps","triggerRef","externalTriggerRef","onFilterChange","onChange","onOpen","onClose","onClear","inputAttributes","useInputAttributes","nonLabelable","open","setOpen","useState","initialized","useRef","handleClose","useEffectEvent","handleOpen","useEffect","current","filterQuery","_setFilterQuery","deferredFilterQuery","useDeferredValue","previousFilterQueryRef","setFilterQuery","useCallback","query","queryNormalized","searchableString","internalTriggerRef","searchInputRef","listboxRef","controllerRef","screenSm","useScreenSize","Breakpoint","SMALL","OptionsOverlay","SelectInputPopover","SelectInputBottomSheet","getListBoxLabelProps","listBoxLabel","listBoxLabelledBy","_jsx","ListboxBase","by","children","uiDisabled","placeholderShown","Array","isArray","length","placement","ref","getInteractionProps","SelectInputTriggerButtonPropsContext","Provider","node","mergeProps","onClick","prev","onKeyDown","event","key","content","SelectInputOptionContentWithinTriggerContext","map","option","filter","join","clear","focus","preventScroll","undefined","initialFocusRef","padding","onCloseEnd","SelectInputOptions","onAutocompleteSelect","matchedValue","sortByRelevance"],"mappings":"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"}
@@ -8,12 +8,17 @@ var jsxRuntime = require('react/jsx-runtime');
8
8
 
9
9
  const TextArea = /*#__PURE__*/React.forwardRef(function TextArea({
10
10
  className,
11
+ maxLength,
11
12
  ...restProps
12
13
  }, reference) {
13
14
  const inputAttributes = contexts.useInputAttributes();
15
+ const value = restProps.value ?? restProps.defaultValue ?? '';
16
+ const currentLength = typeof value === 'string' ? value.length : String(value).length;
17
+ contexts.useTextareaCharacterCount(currentLength, maxLength);
14
18
  return /*#__PURE__*/jsxRuntime.jsx("textarea", {
15
19
  ref: reference,
16
20
  className: clsx.clsx(className, _common.inputClassNameBase(), 'np-text-area'),
21
+ maxLength: maxLength,
17
22
  ...inputAttributes,
18
23
  ...restProps
19
24
  });
@@ -1 +1 @@
1
- {"version":3,"file":"TextArea.js","sources":["../../src/inputs/TextArea.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport { forwardRef } from 'react';\n\nimport { Merge } from '../utils';\nimport { inputClassNameBase } from './_common';\nimport { useInputAttributes } from './contexts';\n\nexport interface TextAreaProps extends Merge<\n React.ComponentPropsWithRef<'textarea'>,\n {\n 'aria-invalid'?: boolean;\n }\n> {}\n\nexport const TextArea = forwardRef(function TextArea(\n { className, ...restProps }: TextAreaProps,\n reference: React.ForwardedRef<HTMLTextAreaElement | null>,\n) {\n const inputAttributes = useInputAttributes();\n\n return (\n <textarea\n ref={reference}\n className={clsx(className, inputClassNameBase(), 'np-text-area')}\n {...inputAttributes}\n {...restProps}\n />\n );\n});\n"],"names":["TextArea","forwardRef","className","restProps","reference","inputAttributes","useInputAttributes","_jsx","ref","clsx","inputClassNameBase"],"mappings":";;;;;;;;MAcaA,QAAQ,gBAAGC,gBAAU,CAAC,SAASD,QAAQA,CAClD;EAAEE,SAAS;EAAE,GAAGC;AAAS,CAAiB,EAC1CC,SAAyD,EAAA;AAEzD,EAAA,MAAMC,eAAe,GAAGC,2BAAkB,EAAE;AAE5C,EAAA,oBACEC,cAAA,CAAA,UAAA,EAAA;AACEC,IAAAA,GAAG,EAAEJ,SAAU;IACfF,SAAS,EAAEO,SAAI,CAACP,SAAS,EAAEQ,0BAAkB,EAAE,EAAE,cAAc,CAAE;AAAA,IAAA,GAC7DL,eAAe;IAAA,GACfF;AAAS,GAAC,CACd;AAEN,CAAC;;;;"}
1
+ {"version":3,"file":"TextArea.js","sources":["../../src/inputs/TextArea.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport { forwardRef } from 'react';\n\nimport { Merge } from '../utils';\nimport { inputClassNameBase } from './_common';\nimport { useTextareaCharacterCount, useInputAttributes } from './contexts';\n\nexport interface TextAreaProps extends Merge<\n React.ComponentPropsWithRef<'textarea'>,\n {\n 'aria-invalid'?: boolean;\n }\n> {}\n\nexport const TextArea = forwardRef(function TextArea(\n { className, maxLength, ...restProps }: TextAreaProps,\n reference: React.ForwardedRef<HTMLTextAreaElement | null>,\n) {\n const inputAttributes = useInputAttributes();\n const value = restProps.value ?? restProps.defaultValue ?? '';\n const currentLength = typeof value === 'string' ? value.length : String(value).length;\n\n useTextareaCharacterCount(currentLength, maxLength);\n\n return (\n <textarea\n ref={reference}\n className={clsx(className, inputClassNameBase(), 'np-text-area')}\n maxLength={maxLength}\n {...inputAttributes}\n {...restProps}\n />\n );\n});\n"],"names":["TextArea","forwardRef","className","maxLength","restProps","reference","inputAttributes","useInputAttributes","value","defaultValue","currentLength","length","String","useTextareaCharacterCount","_jsx","ref","clsx","inputClassNameBase"],"mappings":";;;;;;;;MAcaA,QAAQ,gBAAGC,gBAAU,CAAC,SAASD,QAAQA,CAClD;EAAEE,SAAS;EAAEC,SAAS;EAAE,GAAGC;AAAS,CAAiB,EACrDC,SAAyD,EAAA;AAEzD,EAAA,MAAMC,eAAe,GAAGC,2BAAkB,EAAE;EAC5C,MAAMC,KAAK,GAAGJ,SAAS,CAACI,KAAK,IAAIJ,SAAS,CAACK,YAAY,IAAI,EAAE;AAC7D,EAAA,MAAMC,aAAa,GAAG,OAAOF,KAAK,KAAK,QAAQ,GAAGA,KAAK,CAACG,MAAM,GAAGC,MAAM,CAACJ,KAAK,CAAC,CAACG,MAAM;AAErFE,EAAAA,kCAAyB,CAACH,aAAa,EAAEP,SAAS,CAAC;AAEnD,EAAA,oBACEW,cAAA,CAAA,UAAA,EAAA;AACEC,IAAAA,GAAG,EAAEV,SAAU;IACfH,SAAS,EAAEc,SAAI,CAACd,SAAS,EAAEe,0BAAkB,EAAE,EAAE,cAAc,CAAE;AACjEd,IAAAA,SAAS,EAAEA,SAAU;AAAA,IAAA,GACjBG,eAAe;IAAA,GACfF;AAAS,GAAC,CACd;AAEN,CAAC;;;;"}
@@ -1,17 +1,22 @@
1
1
  import { clsx } from 'clsx';
2
2
  import { forwardRef } from 'react';
3
3
  import { inputClassNameBase } from './_common.mjs';
4
- import { useInputAttributes } from './contexts.mjs';
4
+ import { useInputAttributes, useTextareaCharacterCount } from './contexts.mjs';
5
5
  import { jsx } from 'react/jsx-runtime';
6
6
 
7
7
  const TextArea = /*#__PURE__*/forwardRef(function TextArea({
8
8
  className,
9
+ maxLength,
9
10
  ...restProps
10
11
  }, reference) {
11
12
  const inputAttributes = useInputAttributes();
13
+ const value = restProps.value ?? restProps.defaultValue ?? '';
14
+ const currentLength = typeof value === 'string' ? value.length : String(value).length;
15
+ useTextareaCharacterCount(currentLength, maxLength);
12
16
  return /*#__PURE__*/jsx("textarea", {
13
17
  ref: reference,
14
18
  className: clsx(className, inputClassNameBase(), 'np-text-area'),
19
+ maxLength: maxLength,
15
20
  ...inputAttributes,
16
21
  ...restProps
17
22
  });
@@ -1 +1 @@
1
- {"version":3,"file":"TextArea.mjs","sources":["../../src/inputs/TextArea.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport { forwardRef } from 'react';\n\nimport { Merge } from '../utils';\nimport { inputClassNameBase } from './_common';\nimport { useInputAttributes } from './contexts';\n\nexport interface TextAreaProps extends Merge<\n React.ComponentPropsWithRef<'textarea'>,\n {\n 'aria-invalid'?: boolean;\n }\n> {}\n\nexport const TextArea = forwardRef(function TextArea(\n { className, ...restProps }: TextAreaProps,\n reference: React.ForwardedRef<HTMLTextAreaElement | null>,\n) {\n const inputAttributes = useInputAttributes();\n\n return (\n <textarea\n ref={reference}\n className={clsx(className, inputClassNameBase(), 'np-text-area')}\n {...inputAttributes}\n {...restProps}\n />\n );\n});\n"],"names":["TextArea","forwardRef","className","restProps","reference","inputAttributes","useInputAttributes","_jsx","ref","clsx","inputClassNameBase"],"mappings":";;;;;;MAcaA,QAAQ,gBAAGC,UAAU,CAAC,SAASD,QAAQA,CAClD;EAAEE,SAAS;EAAE,GAAGC;AAAS,CAAiB,EAC1CC,SAAyD,EAAA;AAEzD,EAAA,MAAMC,eAAe,GAAGC,kBAAkB,EAAE;AAE5C,EAAA,oBACEC,GAAA,CAAA,UAAA,EAAA;AACEC,IAAAA,GAAG,EAAEJ,SAAU;IACfF,SAAS,EAAEO,IAAI,CAACP,SAAS,EAAEQ,kBAAkB,EAAE,EAAE,cAAc,CAAE;AAAA,IAAA,GAC7DL,eAAe;IAAA,GACfF;AAAS,GAAC,CACd;AAEN,CAAC;;;;"}
1
+ {"version":3,"file":"TextArea.mjs","sources":["../../src/inputs/TextArea.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport { forwardRef } from 'react';\n\nimport { Merge } from '../utils';\nimport { inputClassNameBase } from './_common';\nimport { useTextareaCharacterCount, useInputAttributes } from './contexts';\n\nexport interface TextAreaProps extends Merge<\n React.ComponentPropsWithRef<'textarea'>,\n {\n 'aria-invalid'?: boolean;\n }\n> {}\n\nexport const TextArea = forwardRef(function TextArea(\n { className, maxLength, ...restProps }: TextAreaProps,\n reference: React.ForwardedRef<HTMLTextAreaElement | null>,\n) {\n const inputAttributes = useInputAttributes();\n const value = restProps.value ?? restProps.defaultValue ?? '';\n const currentLength = typeof value === 'string' ? value.length : String(value).length;\n\n useTextareaCharacterCount(currentLength, maxLength);\n\n return (\n <textarea\n ref={reference}\n className={clsx(className, inputClassNameBase(), 'np-text-area')}\n maxLength={maxLength}\n {...inputAttributes}\n {...restProps}\n />\n );\n});\n"],"names":["TextArea","forwardRef","className","maxLength","restProps","reference","inputAttributes","useInputAttributes","value","defaultValue","currentLength","length","String","useTextareaCharacterCount","_jsx","ref","clsx","inputClassNameBase"],"mappings":";;;;;;MAcaA,QAAQ,gBAAGC,UAAU,CAAC,SAASD,QAAQA,CAClD;EAAEE,SAAS;EAAEC,SAAS;EAAE,GAAGC;AAAS,CAAiB,EACrDC,SAAyD,EAAA;AAEzD,EAAA,MAAMC,eAAe,GAAGC,kBAAkB,EAAE;EAC5C,MAAMC,KAAK,GAAGJ,SAAS,CAACI,KAAK,IAAIJ,SAAS,CAACK,YAAY,IAAI,EAAE;AAC7D,EAAA,MAAMC,aAAa,GAAG,OAAOF,KAAK,KAAK,QAAQ,GAAGA,KAAK,CAACG,MAAM,GAAGC,MAAM,CAACJ,KAAK,CAAC,CAACG,MAAM;AAErFE,EAAAA,yBAAyB,CAACH,aAAa,EAAEP,SAAS,CAAC;AAEnD,EAAA,oBACEW,GAAA,CAAA,UAAA,EAAA;AACEC,IAAAA,GAAG,EAAEV,SAAU;IACfH,SAAS,EAAEc,IAAI,CAACd,SAAS,EAAEe,kBAAkB,EAAE,EAAE,cAAc,CAAE;AACjEd,IAAAA,SAAS,EAAEA,SAAU;AAAA,IAAA,GACjBG,eAAe;IAAA,GACfF;AAAS,GAAC,CACd;AAEN,CAAC;;;;"}
@@ -25,6 +25,20 @@ function useInputAttributes({
25
25
  function useFieldLabelRef() {
26
26
  return React.useContext(FieldLabelContext)?.ref;
27
27
  }
28
+ const TextareaCharacterCountContext = /*#__PURE__*/React.createContext(undefined);
29
+ const TextareaCharacterCountProvider = TextareaCharacterCountContext.Provider;
30
+ function useTextareaCharacterCount(current, max) {
31
+ const setCharacterCount = React.useContext(TextareaCharacterCountContext);
32
+ React.useEffect(() => {
33
+ if (setCharacterCount && max != null) {
34
+ setCharacterCount({
35
+ current,
36
+ max
37
+ });
38
+ return () => setCharacterCount(null);
39
+ }
40
+ }, [setCharacterCount, current, max]);
41
+ }
28
42
  function withInputAttributes(Component, args) {
29
43
  function ComponentWithInputAttributes(props) {
30
44
  return /*#__PURE__*/jsxRuntime.jsx(Component, {
@@ -40,7 +54,9 @@ exports.FieldLabelContextProvider = FieldLabelContextProvider;
40
54
  exports.InputDescribedByProvider = InputDescribedByProvider;
41
55
  exports.InputIdContextProvider = InputIdContextProvider;
42
56
  exports.InputInvalidProvider = InputInvalidProvider;
57
+ exports.TextareaCharacterCountProvider = TextareaCharacterCountProvider;
43
58
  exports.useFieldLabelRef = useFieldLabelRef;
44
59
  exports.useInputAttributes = useInputAttributes;
60
+ exports.useTextareaCharacterCount = useTextareaCharacterCount;
45
61
  exports.withInputAttributes = withInputAttributes;
46
62
  //# sourceMappingURL=contexts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"contexts.js","sources":["../../src/inputs/contexts.tsx"],"sourcesContent":["import { createContext, useContext } from 'react';\n\ntype FieldLabelContextType = {\n id?: string;\n ref?: React.RefObject<HTMLLabelElement>;\n};\n\nconst FieldLabelContext = createContext<FieldLabelContextType | undefined>(undefined);\nexport const FieldLabelContextProvider = FieldLabelContext.Provider;\n\nconst InputIdContext = createContext<string | undefined>(undefined);\nexport const InputIdContextProvider = InputIdContext.Provider;\n\nconst InputDescribedByContext = createContext<string | undefined>(undefined);\nexport const InputDescribedByProvider = InputDescribedByContext.Provider;\n\nconst InputInvalidContext = createContext<boolean | undefined>(undefined);\nexport const InputInvalidProvider = InputInvalidContext.Provider;\n\ninterface UseInputAttributesArgs {\n /** Set this to `true` if the underlying element is not directly [labelable as per the HTML specification](https://html.spec.whatwg.org/multipage/forms.html#category-label). */\n nonLabelable?: boolean;\n}\n\nexport function useInputAttributes({ nonLabelable }: UseInputAttributesArgs = {}) {\n const labelId = useContext(FieldLabelContext)?.id;\n return {\n id: useContext(InputIdContext),\n 'aria-labelledby': nonLabelable ? labelId : undefined,\n 'aria-describedby': useContext(InputDescribedByContext),\n 'aria-invalid': useContext(InputInvalidContext),\n } satisfies React.HTMLAttributes<HTMLElement>;\n}\n\nexport function useFieldLabelRef() {\n return useContext(FieldLabelContext)?.ref;\n}\n\nexport interface WithInputAttributesProps {\n inputAttributes: ReturnType<typeof useInputAttributes>;\n}\n\nexport function withInputAttributes<T extends Partial<WithInputAttributesProps>>(\n Component: React.ComponentType<T>,\n args?: UseInputAttributesArgs,\n) {\n function ComponentWithInputAttributes(props: Omit<T, keyof WithInputAttributesProps>) {\n return <Component inputAttributes={useInputAttributes(args)} {...(props as T)} />;\n }\n\n ComponentWithInputAttributes.displayName = `withInputAttributes(${Component.displayName || Component.name || 'Component'})`;\n\n return ComponentWithInputAttributes;\n}\n"],"names":["FieldLabelContext","createContext","undefined","FieldLabelContextProvider","Provider","InputIdContext","InputIdContextProvider","InputDescribedByContext","InputDescribedByProvider","InputInvalidContext","InputInvalidProvider","useInputAttributes","nonLabelable","labelId","useContext","id","useFieldLabelRef","ref","withInputAttributes","Component","args","ComponentWithInputAttributes","props","_jsx","inputAttributes","displayName","name"],"mappings":";;;;;AAOA,MAAMA,iBAAiB,gBAAGC,mBAAa,CAAoCC,SAAS,CAAC;AAC9E,MAAMC,yBAAyB,GAAGH,iBAAiB,CAACI;AAE3D,MAAMC,cAAc,gBAAGJ,mBAAa,CAAqBC,SAAS,CAAC;AAC5D,MAAMI,sBAAsB,GAAGD,cAAc,CAACD;AAErD,MAAMG,uBAAuB,gBAAGN,mBAAa,CAAqBC,SAAS,CAAC;AACrE,MAAMM,wBAAwB,GAAGD,uBAAuB,CAACH;AAEhE,MAAMK,mBAAmB,gBAAGR,mBAAa,CAAsBC,SAAS,CAAC;AAClE,MAAMQ,oBAAoB,GAAGD,mBAAmB,CAACL;SAOxCO,kBAAkBA,CAAC;AAAEC,EAAAA;IAAyC,EAAE,EAAA;AAC9E,EAAA,MAAMC,OAAO,GAAGC,gBAAU,CAACd,iBAAiB,CAAC,EAAEe,EAAE;EACjD,OAAO;AACLA,IAAAA,EAAE,EAAED,gBAAU,CAACT,cAAc,CAAC;AAC9B,IAAA,iBAAiB,EAAEO,YAAY,GAAGC,OAAO,GAAGX,SAAS;AACrD,IAAA,kBAAkB,EAAEY,gBAAU,CAACP,uBAAuB,CAAC;IACvD,cAAc,EAAEO,gBAAU,CAACL,mBAAmB;GACH;AAC/C;SAEgBO,gBAAgBA,GAAA;AAC9B,EAAA,OAAOF,gBAAU,CAACd,iBAAiB,CAAC,EAAEiB,GAAG;AAC3C;AAMM,SAAUC,mBAAmBA,CACjCC,SAAiC,EACjCC,IAA6B,EAAA;EAE7B,SAASC,4BAA4BA,CAACC,KAA8C,EAAA;IAClF,oBAAOC,cAAA,CAACJ,SAAS,EAAA;AAACK,MAAAA,eAAe,EAAEb,kBAAkB,CAACS,IAAI,CAAE;MAAA,GAAME;AAAW,MAAI;AACnF,EAAA;AAEAD,EAAAA,4BAA4B,CAACI,WAAW,GAAG,CAAA,oBAAA,EAAuBN,SAAS,CAACM,WAAW,IAAIN,SAAS,CAACO,IAAI,IAAI,WAAW,CAAA,CAAA,CAAG;AAE3H,EAAA,OAAOL,4BAA4B;AACrC;;;;;;;;;;"}
1
+ {"version":3,"file":"contexts.js","sources":["../../src/inputs/contexts.tsx"],"sourcesContent":["import { createContext, useContext, useEffect } from 'react';\n\ntype FieldLabelContextType = {\n id?: string;\n ref?: React.RefObject<HTMLLabelElement>;\n};\n\nconst FieldLabelContext = createContext<FieldLabelContextType | undefined>(undefined);\nexport const FieldLabelContextProvider = FieldLabelContext.Provider;\n\nconst InputIdContext = createContext<string | undefined>(undefined);\nexport const InputIdContextProvider = InputIdContext.Provider;\n\nconst InputDescribedByContext = createContext<string | undefined>(undefined);\nexport const InputDescribedByProvider = InputDescribedByContext.Provider;\n\nconst InputInvalidContext = createContext<boolean | undefined>(undefined);\nexport const InputInvalidProvider = InputInvalidContext.Provider;\n\ninterface UseInputAttributesArgs {\n /** Set this to `true` if the underlying element is not directly [labelable as per the HTML specification](https://html.spec.whatwg.org/multipage/forms.html#category-label). */\n nonLabelable?: boolean;\n}\n\nexport function useInputAttributes({ nonLabelable }: UseInputAttributesArgs = {}) {\n const labelId = useContext(FieldLabelContext)?.id;\n return {\n id: useContext(InputIdContext),\n 'aria-labelledby': nonLabelable ? labelId : undefined,\n 'aria-describedby': useContext(InputDescribedByContext),\n 'aria-invalid': useContext(InputInvalidContext),\n } satisfies React.HTMLAttributes<HTMLElement>;\n}\n\nexport function useFieldLabelRef() {\n return useContext(FieldLabelContext)?.ref;\n}\n\nexport type TextareaCharacterCountState = { current: number; max: number } | null;\n\nconst TextareaCharacterCountContext = createContext<\n ((state: TextareaCharacterCountState) => void) | undefined\n>(undefined);\nexport const TextareaCharacterCountProvider = TextareaCharacterCountContext.Provider;\n\nexport function useTextareaCharacterCount(current: number, max: number | undefined) {\n const setCharacterCount = useContext(TextareaCharacterCountContext);\n useEffect(() => {\n if (setCharacterCount && max != null) {\n setCharacterCount({ current, max });\n return () => setCharacterCount(null);\n }\n }, [setCharacterCount, current, max]);\n}\n\nexport interface WithInputAttributesProps {\n inputAttributes: ReturnType<typeof useInputAttributes>;\n}\n\nexport function withInputAttributes<T extends Partial<WithInputAttributesProps>>(\n Component: React.ComponentType<T>,\n args?: UseInputAttributesArgs,\n) {\n function ComponentWithInputAttributes(props: Omit<T, keyof WithInputAttributesProps>) {\n return <Component inputAttributes={useInputAttributes(args)} {...(props as T)} />;\n }\n\n ComponentWithInputAttributes.displayName = `withInputAttributes(${Component.displayName || Component.name || 'Component'})`;\n\n return ComponentWithInputAttributes;\n}\n"],"names":["FieldLabelContext","createContext","undefined","FieldLabelContextProvider","Provider","InputIdContext","InputIdContextProvider","InputDescribedByContext","InputDescribedByProvider","InputInvalidContext","InputInvalidProvider","useInputAttributes","nonLabelable","labelId","useContext","id","useFieldLabelRef","ref","TextareaCharacterCountContext","TextareaCharacterCountProvider","useTextareaCharacterCount","current","max","setCharacterCount","useEffect","withInputAttributes","Component","args","ComponentWithInputAttributes","props","_jsx","inputAttributes","displayName","name"],"mappings":";;;;;AAOA,MAAMA,iBAAiB,gBAAGC,mBAAa,CAAoCC,SAAS,CAAC;AAC9E,MAAMC,yBAAyB,GAAGH,iBAAiB,CAACI;AAE3D,MAAMC,cAAc,gBAAGJ,mBAAa,CAAqBC,SAAS,CAAC;AAC5D,MAAMI,sBAAsB,GAAGD,cAAc,CAACD;AAErD,MAAMG,uBAAuB,gBAAGN,mBAAa,CAAqBC,SAAS,CAAC;AACrE,MAAMM,wBAAwB,GAAGD,uBAAuB,CAACH;AAEhE,MAAMK,mBAAmB,gBAAGR,mBAAa,CAAsBC,SAAS,CAAC;AAClE,MAAMQ,oBAAoB,GAAGD,mBAAmB,CAACL;SAOxCO,kBAAkBA,CAAC;AAAEC,EAAAA;IAAyC,EAAE,EAAA;AAC9E,EAAA,MAAMC,OAAO,GAAGC,gBAAU,CAACd,iBAAiB,CAAC,EAAEe,EAAE;EACjD,OAAO;AACLA,IAAAA,EAAE,EAAED,gBAAU,CAACT,cAAc,CAAC;AAC9B,IAAA,iBAAiB,EAAEO,YAAY,GAAGC,OAAO,GAAGX,SAAS;AACrD,IAAA,kBAAkB,EAAEY,gBAAU,CAACP,uBAAuB,CAAC;IACvD,cAAc,EAAEO,gBAAU,CAACL,mBAAmB;GACH;AAC/C;SAEgBO,gBAAgBA,GAAA;AAC9B,EAAA,OAAOF,gBAAU,CAACd,iBAAiB,CAAC,EAAEiB,GAAG;AAC3C;AAIA,MAAMC,6BAA6B,gBAAGjB,mBAAa,CAEjDC,SAAS,CAAC;AACL,MAAMiB,8BAA8B,GAAGD,6BAA6B,CAACd;AAEtE,SAAUgB,yBAAyBA,CAACC,OAAe,EAAEC,GAAuB,EAAA;AAChF,EAAA,MAAMC,iBAAiB,GAAGT,gBAAU,CAACI,6BAA6B,CAAC;AACnEM,EAAAA,eAAS,CAAC,MAAK;AACb,IAAA,IAAID,iBAAiB,IAAID,GAAG,IAAI,IAAI,EAAE;AACpCC,MAAAA,iBAAiB,CAAC;QAAEF,OAAO;AAAEC,QAAAA;AAAG,OAAE,CAAC;AACnC,MAAA,OAAO,MAAMC,iBAAiB,CAAC,IAAI,CAAC;AACtC,IAAA;EACF,CAAC,EAAE,CAACA,iBAAiB,EAAEF,OAAO,EAAEC,GAAG,CAAC,CAAC;AACvC;AAMM,SAAUG,mBAAmBA,CACjCC,SAAiC,EACjCC,IAA6B,EAAA;EAE7B,SAASC,4BAA4BA,CAACC,KAA8C,EAAA;IAClF,oBAAOC,cAAA,CAACJ,SAAS,EAAA;AAACK,MAAAA,eAAe,EAAEpB,kBAAkB,CAACgB,IAAI,CAAE;MAAA,GAAME;AAAW,MAAI;AACnF,EAAA;AAEAD,EAAAA,4BAA4B,CAACI,WAAW,GAAG,CAAA,oBAAA,EAAuBN,SAAS,CAACM,WAAW,IAAIN,SAAS,CAACO,IAAI,IAAI,WAAW,CAAA,CAAA,CAAG;AAE3H,EAAA,OAAOL,4BAA4B;AACrC;;;;;;;;;;;;"}
@@ -1,4 +1,4 @@
1
- import { createContext, useContext } from 'react';
1
+ import { createContext, useContext, useEffect } from 'react';
2
2
  import { jsx } from 'react/jsx-runtime';
3
3
 
4
4
  const FieldLabelContext = /*#__PURE__*/createContext(undefined);
@@ -23,6 +23,20 @@ function useInputAttributes({
23
23
  function useFieldLabelRef() {
24
24
  return useContext(FieldLabelContext)?.ref;
25
25
  }
26
+ const TextareaCharacterCountContext = /*#__PURE__*/createContext(undefined);
27
+ const TextareaCharacterCountProvider = TextareaCharacterCountContext.Provider;
28
+ function useTextareaCharacterCount(current, max) {
29
+ const setCharacterCount = useContext(TextareaCharacterCountContext);
30
+ useEffect(() => {
31
+ if (setCharacterCount && max != null) {
32
+ setCharacterCount({
33
+ current,
34
+ max
35
+ });
36
+ return () => setCharacterCount(null);
37
+ }
38
+ }, [setCharacterCount, current, max]);
39
+ }
26
40
  function withInputAttributes(Component, args) {
27
41
  function ComponentWithInputAttributes(props) {
28
42
  return /*#__PURE__*/jsx(Component, {
@@ -34,5 +48,5 @@ function withInputAttributes(Component, args) {
34
48
  return ComponentWithInputAttributes;
35
49
  }
36
50
 
37
- export { FieldLabelContextProvider, InputDescribedByProvider, InputIdContextProvider, InputInvalidProvider, useFieldLabelRef, useInputAttributes, withInputAttributes };
51
+ export { FieldLabelContextProvider, InputDescribedByProvider, InputIdContextProvider, InputInvalidProvider, TextareaCharacterCountProvider, useFieldLabelRef, useInputAttributes, useTextareaCharacterCount, withInputAttributes };
38
52
  //# sourceMappingURL=contexts.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"contexts.mjs","sources":["../../src/inputs/contexts.tsx"],"sourcesContent":["import { createContext, useContext } from 'react';\n\ntype FieldLabelContextType = {\n id?: string;\n ref?: React.RefObject<HTMLLabelElement>;\n};\n\nconst FieldLabelContext = createContext<FieldLabelContextType | undefined>(undefined);\nexport const FieldLabelContextProvider = FieldLabelContext.Provider;\n\nconst InputIdContext = createContext<string | undefined>(undefined);\nexport const InputIdContextProvider = InputIdContext.Provider;\n\nconst InputDescribedByContext = createContext<string | undefined>(undefined);\nexport const InputDescribedByProvider = InputDescribedByContext.Provider;\n\nconst InputInvalidContext = createContext<boolean | undefined>(undefined);\nexport const InputInvalidProvider = InputInvalidContext.Provider;\n\ninterface UseInputAttributesArgs {\n /** Set this to `true` if the underlying element is not directly [labelable as per the HTML specification](https://html.spec.whatwg.org/multipage/forms.html#category-label). */\n nonLabelable?: boolean;\n}\n\nexport function useInputAttributes({ nonLabelable }: UseInputAttributesArgs = {}) {\n const labelId = useContext(FieldLabelContext)?.id;\n return {\n id: useContext(InputIdContext),\n 'aria-labelledby': nonLabelable ? labelId : undefined,\n 'aria-describedby': useContext(InputDescribedByContext),\n 'aria-invalid': useContext(InputInvalidContext),\n } satisfies React.HTMLAttributes<HTMLElement>;\n}\n\nexport function useFieldLabelRef() {\n return useContext(FieldLabelContext)?.ref;\n}\n\nexport interface WithInputAttributesProps {\n inputAttributes: ReturnType<typeof useInputAttributes>;\n}\n\nexport function withInputAttributes<T extends Partial<WithInputAttributesProps>>(\n Component: React.ComponentType<T>,\n args?: UseInputAttributesArgs,\n) {\n function ComponentWithInputAttributes(props: Omit<T, keyof WithInputAttributesProps>) {\n return <Component inputAttributes={useInputAttributes(args)} {...(props as T)} />;\n }\n\n ComponentWithInputAttributes.displayName = `withInputAttributes(${Component.displayName || Component.name || 'Component'})`;\n\n return ComponentWithInputAttributes;\n}\n"],"names":["FieldLabelContext","createContext","undefined","FieldLabelContextProvider","Provider","InputIdContext","InputIdContextProvider","InputDescribedByContext","InputDescribedByProvider","InputInvalidContext","InputInvalidProvider","useInputAttributes","nonLabelable","labelId","useContext","id","useFieldLabelRef","ref","withInputAttributes","Component","args","ComponentWithInputAttributes","props","_jsx","inputAttributes","displayName","name"],"mappings":";;;AAOA,MAAMA,iBAAiB,gBAAGC,aAAa,CAAoCC,SAAS,CAAC;AAC9E,MAAMC,yBAAyB,GAAGH,iBAAiB,CAACI;AAE3D,MAAMC,cAAc,gBAAGJ,aAAa,CAAqBC,SAAS,CAAC;AAC5D,MAAMI,sBAAsB,GAAGD,cAAc,CAACD;AAErD,MAAMG,uBAAuB,gBAAGN,aAAa,CAAqBC,SAAS,CAAC;AACrE,MAAMM,wBAAwB,GAAGD,uBAAuB,CAACH;AAEhE,MAAMK,mBAAmB,gBAAGR,aAAa,CAAsBC,SAAS,CAAC;AAClE,MAAMQ,oBAAoB,GAAGD,mBAAmB,CAACL;SAOxCO,kBAAkBA,CAAC;AAAEC,EAAAA;IAAyC,EAAE,EAAA;AAC9E,EAAA,MAAMC,OAAO,GAAGC,UAAU,CAACd,iBAAiB,CAAC,EAAEe,EAAE;EACjD,OAAO;AACLA,IAAAA,EAAE,EAAED,UAAU,CAACT,cAAc,CAAC;AAC9B,IAAA,iBAAiB,EAAEO,YAAY,GAAGC,OAAO,GAAGX,SAAS;AACrD,IAAA,kBAAkB,EAAEY,UAAU,CAACP,uBAAuB,CAAC;IACvD,cAAc,EAAEO,UAAU,CAACL,mBAAmB;GACH;AAC/C;SAEgBO,gBAAgBA,GAAA;AAC9B,EAAA,OAAOF,UAAU,CAACd,iBAAiB,CAAC,EAAEiB,GAAG;AAC3C;AAMM,SAAUC,mBAAmBA,CACjCC,SAAiC,EACjCC,IAA6B,EAAA;EAE7B,SAASC,4BAA4BA,CAACC,KAA8C,EAAA;IAClF,oBAAOC,GAAA,CAACJ,SAAS,EAAA;AAACK,MAAAA,eAAe,EAAEb,kBAAkB,CAACS,IAAI,CAAE;MAAA,GAAME;AAAW,MAAI;AACnF,EAAA;AAEAD,EAAAA,4BAA4B,CAACI,WAAW,GAAG,CAAA,oBAAA,EAAuBN,SAAS,CAACM,WAAW,IAAIN,SAAS,CAACO,IAAI,IAAI,WAAW,CAAA,CAAA,CAAG;AAE3H,EAAA,OAAOL,4BAA4B;AACrC;;;;"}
1
+ {"version":3,"file":"contexts.mjs","sources":["../../src/inputs/contexts.tsx"],"sourcesContent":["import { createContext, useContext, useEffect } from 'react';\n\ntype FieldLabelContextType = {\n id?: string;\n ref?: React.RefObject<HTMLLabelElement>;\n};\n\nconst FieldLabelContext = createContext<FieldLabelContextType | undefined>(undefined);\nexport const FieldLabelContextProvider = FieldLabelContext.Provider;\n\nconst InputIdContext = createContext<string | undefined>(undefined);\nexport const InputIdContextProvider = InputIdContext.Provider;\n\nconst InputDescribedByContext = createContext<string | undefined>(undefined);\nexport const InputDescribedByProvider = InputDescribedByContext.Provider;\n\nconst InputInvalidContext = createContext<boolean | undefined>(undefined);\nexport const InputInvalidProvider = InputInvalidContext.Provider;\n\ninterface UseInputAttributesArgs {\n /** Set this to `true` if the underlying element is not directly [labelable as per the HTML specification](https://html.spec.whatwg.org/multipage/forms.html#category-label). */\n nonLabelable?: boolean;\n}\n\nexport function useInputAttributes({ nonLabelable }: UseInputAttributesArgs = {}) {\n const labelId = useContext(FieldLabelContext)?.id;\n return {\n id: useContext(InputIdContext),\n 'aria-labelledby': nonLabelable ? labelId : undefined,\n 'aria-describedby': useContext(InputDescribedByContext),\n 'aria-invalid': useContext(InputInvalidContext),\n } satisfies React.HTMLAttributes<HTMLElement>;\n}\n\nexport function useFieldLabelRef() {\n return useContext(FieldLabelContext)?.ref;\n}\n\nexport type TextareaCharacterCountState = { current: number; max: number } | null;\n\nconst TextareaCharacterCountContext = createContext<\n ((state: TextareaCharacterCountState) => void) | undefined\n>(undefined);\nexport const TextareaCharacterCountProvider = TextareaCharacterCountContext.Provider;\n\nexport function useTextareaCharacterCount(current: number, max: number | undefined) {\n const setCharacterCount = useContext(TextareaCharacterCountContext);\n useEffect(() => {\n if (setCharacterCount && max != null) {\n setCharacterCount({ current, max });\n return () => setCharacterCount(null);\n }\n }, [setCharacterCount, current, max]);\n}\n\nexport interface WithInputAttributesProps {\n inputAttributes: ReturnType<typeof useInputAttributes>;\n}\n\nexport function withInputAttributes<T extends Partial<WithInputAttributesProps>>(\n Component: React.ComponentType<T>,\n args?: UseInputAttributesArgs,\n) {\n function ComponentWithInputAttributes(props: Omit<T, keyof WithInputAttributesProps>) {\n return <Component inputAttributes={useInputAttributes(args)} {...(props as T)} />;\n }\n\n ComponentWithInputAttributes.displayName = `withInputAttributes(${Component.displayName || Component.name || 'Component'})`;\n\n return ComponentWithInputAttributes;\n}\n"],"names":["FieldLabelContext","createContext","undefined","FieldLabelContextProvider","Provider","InputIdContext","InputIdContextProvider","InputDescribedByContext","InputDescribedByProvider","InputInvalidContext","InputInvalidProvider","useInputAttributes","nonLabelable","labelId","useContext","id","useFieldLabelRef","ref","TextareaCharacterCountContext","TextareaCharacterCountProvider","useTextareaCharacterCount","current","max","setCharacterCount","useEffect","withInputAttributes","Component","args","ComponentWithInputAttributes","props","_jsx","inputAttributes","displayName","name"],"mappings":";;;AAOA,MAAMA,iBAAiB,gBAAGC,aAAa,CAAoCC,SAAS,CAAC;AAC9E,MAAMC,yBAAyB,GAAGH,iBAAiB,CAACI;AAE3D,MAAMC,cAAc,gBAAGJ,aAAa,CAAqBC,SAAS,CAAC;AAC5D,MAAMI,sBAAsB,GAAGD,cAAc,CAACD;AAErD,MAAMG,uBAAuB,gBAAGN,aAAa,CAAqBC,SAAS,CAAC;AACrE,MAAMM,wBAAwB,GAAGD,uBAAuB,CAACH;AAEhE,MAAMK,mBAAmB,gBAAGR,aAAa,CAAsBC,SAAS,CAAC;AAClE,MAAMQ,oBAAoB,GAAGD,mBAAmB,CAACL;SAOxCO,kBAAkBA,CAAC;AAAEC,EAAAA;IAAyC,EAAE,EAAA;AAC9E,EAAA,MAAMC,OAAO,GAAGC,UAAU,CAACd,iBAAiB,CAAC,EAAEe,EAAE;EACjD,OAAO;AACLA,IAAAA,EAAE,EAAED,UAAU,CAACT,cAAc,CAAC;AAC9B,IAAA,iBAAiB,EAAEO,YAAY,GAAGC,OAAO,GAAGX,SAAS;AACrD,IAAA,kBAAkB,EAAEY,UAAU,CAACP,uBAAuB,CAAC;IACvD,cAAc,EAAEO,UAAU,CAACL,mBAAmB;GACH;AAC/C;SAEgBO,gBAAgBA,GAAA;AAC9B,EAAA,OAAOF,UAAU,CAACd,iBAAiB,CAAC,EAAEiB,GAAG;AAC3C;AAIA,MAAMC,6BAA6B,gBAAGjB,aAAa,CAEjDC,SAAS,CAAC;AACL,MAAMiB,8BAA8B,GAAGD,6BAA6B,CAACd;AAEtE,SAAUgB,yBAAyBA,CAACC,OAAe,EAAEC,GAAuB,EAAA;AAChF,EAAA,MAAMC,iBAAiB,GAAGT,UAAU,CAACI,6BAA6B,CAAC;AACnEM,EAAAA,SAAS,CAAC,MAAK;AACb,IAAA,IAAID,iBAAiB,IAAID,GAAG,IAAI,IAAI,EAAE;AACpCC,MAAAA,iBAAiB,CAAC;QAAEF,OAAO;AAAEC,QAAAA;AAAG,OAAE,CAAC;AACnC,MAAA,OAAO,MAAMC,iBAAiB,CAAC,IAAI,CAAC;AACtC,IAAA;EACF,CAAC,EAAE,CAACA,iBAAiB,EAAEF,OAAO,EAAEC,GAAG,CAAC,CAAC;AACvC;AAMM,SAAUG,mBAAmBA,CACjCC,SAAiC,EACjCC,IAA6B,EAAA;EAE7B,SAASC,4BAA4BA,CAACC,KAA8C,EAAA;IAClF,oBAAOC,GAAA,CAACJ,SAAS,EAAA;AAACK,MAAAA,eAAe,EAAEpB,kBAAkB,CAACgB,IAAI,CAAE;MAAA,GAAME;AAAW,MAAI;AACnF,EAAA;AAEAD,EAAAA,4BAA4B,CAACI,WAAW,GAAG,CAAA,oBAAA,EAAuBN,SAAS,CAACM,WAAW,IAAIN,SAAS,CAACO,IAAI,IAAI,WAAW,CAAA,CAAA,CAAG;AAE3H,EAAA,OAAOL,4BAA4B;AACrC;;;;"}
@@ -7,8 +7,8 @@ var clsx = require('clsx');
7
7
  var Body = require('../body/Body.js');
8
8
  require('../common/theme.js');
9
9
  require('../common/direction.js');
10
+ require('@transferwise/neptune-tokens');
10
11
  require('../common/propsValues/control.js');
11
- require('../common/propsValues/breakpoint.js');
12
12
  require('../common/propsValues/size.js');
13
13
  var typography = require('../common/propsValues/typography.js');
14
14
  require('../common/propsValues/width.js');
@@ -3,8 +3,8 @@ import { clsx } from 'clsx';
3
3
  import Body from '../body/Body.mjs';
4
4
  import '../common/theme.mjs';
5
5
  import '../common/direction.mjs';
6
+ import '@transferwise/neptune-tokens';
6
7
  import '../common/propsValues/control.mjs';
7
- import '../common/propsValues/breakpoint.mjs';
8
8
  import '../common/propsValues/size.mjs';
9
9
  import { Typography } from '../common/propsValues/typography.mjs';
10
10
  import '../common/propsValues/width.mjs';
@@ -9,8 +9,8 @@ var PrimitiveButton = require('../primitives/PrimitiveButton/PrimitiveButton.js'
9
9
  var PrimitiveAnchor = require('../primitives/PrimitiveAnchor/PrimitiveAnchor.js');
10
10
  require('../common/theme.js');
11
11
  require('../common/direction.js');
12
+ require('@transferwise/neptune-tokens');
12
13
  require('../common/propsValues/control.js');
13
- require('../common/propsValues/breakpoint.js');
14
14
  require('../common/propsValues/size.js');
15
15
  var typography = require('../common/propsValues/typography.js');
16
16
  require('../common/propsValues/width.js');
@@ -5,8 +5,8 @@ import PrimitiveButton from '../primitives/PrimitiveButton/PrimitiveButton.mjs';
5
5
  import PrimitiveAnchor from '../primitives/PrimitiveAnchor/PrimitiveAnchor.mjs';
6
6
  import '../common/theme.mjs';
7
7
  import '../common/direction.mjs';
8
+ import '@transferwise/neptune-tokens';
8
9
  import '../common/propsValues/control.mjs';
9
- import '../common/propsValues/breakpoint.mjs';
10
10
  import '../common/propsValues/size.mjs';
11
11
  import { Typography } from '../common/propsValues/typography.mjs';
12
12
  import '../common/propsValues/width.mjs';
@@ -6,8 +6,8 @@ var Body = require('../../body/Body.js');
6
6
  var Link = require('../../link/Link.js');
7
7
  require('../../common/theme.js');
8
8
  require('../../common/direction.js');
9
+ require('@transferwise/neptune-tokens');
9
10
  require('../../common/propsValues/control.js');
10
- require('../../common/propsValues/breakpoint.js');
11
11
  require('../../common/propsValues/size.js');
12
12
  var typography = require('../../common/propsValues/typography.js');
13
13
  require('../../common/propsValues/width.js');
@@ -4,8 +4,8 @@ import Body from '../../body/Body.mjs';
4
4
  import Link from '../../link/Link.mjs';
5
5
  import '../../common/theme.mjs';
6
6
  import '../../common/direction.mjs';
7
+ import '@transferwise/neptune-tokens';
7
8
  import '../../common/propsValues/control.mjs';
8
- import '../../common/propsValues/breakpoint.mjs';
9
9
  import '../../common/propsValues/size.mjs';
10
10
  import { Typography } from '../../common/propsValues/typography.mjs';
11
11
  import '../../common/propsValues/width.mjs';
@@ -5,8 +5,8 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  var React = require('react');
6
6
  require('../common/theme.js');
7
7
  require('../common/direction.js');
8
+ require('@transferwise/neptune-tokens');
8
9
  require('../common/propsValues/control.js');
9
- require('../common/propsValues/breakpoint.js');
10
10
  require('../common/propsValues/size.js');
11
11
  var typography = require('../common/propsValues/typography.js');
12
12
  require('../common/propsValues/width.js');
@@ -1,8 +1,8 @@
1
1
  import { useId, useState, useMemo, useContext } from 'react';
2
2
  import '../common/theme.mjs';
3
3
  import '../common/direction.mjs';
4
+ import '@transferwise/neptune-tokens';
4
5
  import '../common/propsValues/control.mjs';
5
- import '../common/propsValues/breakpoint.mjs';
6
6
  import '../common/propsValues/size.mjs';
7
7
  import { Typography } from '../common/propsValues/typography.mjs';
8
8
  import '../common/propsValues/width.mjs';
@@ -3,8 +3,8 @@
3
3
  var React = require('react');
4
4
  require('../../common/theme.js');
5
5
  require('../../common/direction.js');
6
+ require('@transferwise/neptune-tokens');
6
7
  require('../../common/propsValues/control.js');
7
- require('../../common/propsValues/breakpoint.js');
8
8
  require('../../common/propsValues/size.js');
9
9
  require('../../common/propsValues/typography.js');
10
10
  require('../../common/propsValues/width.js');
@@ -1,8 +1,8 @@
1
1
  import { useContext } from 'react';
2
2
  import '../../common/theme.mjs';
3
3
  import '../../common/direction.mjs';
4
+ import '@transferwise/neptune-tokens';
4
5
  import '../../common/propsValues/control.mjs';
5
- import '../../common/propsValues/breakpoint.mjs';
6
6
  import '../../common/propsValues/size.mjs';
7
7
  import '../../common/propsValues/typography.mjs';
8
8
  import '../../common/propsValues/width.mjs';
@@ -8,8 +8,8 @@ var React = require('react');
8
8
  var Body = require('../body/Body.js');
9
9
  require('../common/theme.js');
10
10
  require('../common/direction.js');
11
+ require('@transferwise/neptune-tokens');
11
12
  require('../common/propsValues/control.js');
12
- require('../common/propsValues/breakpoint.js');
13
13
  var size = require('../common/propsValues/size.js');
14
14
  var typography = require('../common/propsValues/typography.js');
15
15
  require('../common/propsValues/width.js');
@@ -4,8 +4,8 @@ import { useState, useEffect } from 'react';
4
4
  import Body from '../body/Body.mjs';
5
5
  import '../common/theme.mjs';
6
6
  import '../common/direction.mjs';
7
+ import '@transferwise/neptune-tokens';
7
8
  import '../common/propsValues/control.mjs';
8
- import '../common/propsValues/breakpoint.mjs';
9
9
  import { Size } from '../common/propsValues/size.mjs';
10
10
  import { Typography } from '../common/propsValues/typography.mjs';
11
11
  import '../common/propsValues/width.mjs';
@@ -6,8 +6,8 @@ var clsx = require('clsx');
6
6
  var logoAssets$1 = require('./logo-assets.js');
7
7
  require('../common/theme.js');
8
8
  require('../common/direction.js');
9
+ var neptuneTokens = require('@transferwise/neptune-tokens');
9
10
  require('../common/propsValues/control.js');
10
- var breakpoint = require('../common/propsValues/breakpoint.js');
11
11
  require('../common/propsValues/size.js');
12
12
  require('../common/propsValues/typography.js');
13
13
  require('../common/propsValues/width.js');
@@ -64,7 +64,7 @@ const logoAssets = {
64
64
  };
65
65
  /**
66
66
  * Renders the Wise wordmark logo. Responsive — shows the flag-only mark on small viewports
67
- * and the full wordmark on ≥576px (small breakpoint and above).
67
+ * and the full wordmark on ≥600px (small breakpoint and above).
68
68
  *
69
69
  * @see {@link https://wise.design/foundations/logo Design Spec}
70
70
  */
@@ -76,7 +76,7 @@ function Logo({
76
76
  size = 24,
77
77
  'aria-label': ariaLabel
78
78
  }) {
79
- const isScreenSm = !useScreenSize.useScreenSize(breakpoint.Breakpoint.SMALL);
79
+ const isScreenSm = !useScreenSize.useScreenSize(neptuneTokens.Breakpoint.SMALL);
80
80
  const compact = display === 'compact' || display === 'responsive' && isScreenSm;
81
81
  const assetName = compact ? 'FastFlag' : getAssetName(type, format);
82
82
  const Asset = logoAssets[assetName];
@@ -1 +1 @@
1
- {"version":3,"file":"Logo.js","sources":["../../src/logo/Logo.tsx"],"sourcesContent":["import { clsx } from 'clsx';\n\nimport {\n WiseLogo,\n WiseBusinessPrimary,\n WiseBusinessSecondary,\n WisePlatformPrimary,\n WisePlatformSecondary,\n FastFlag,\n logoAssetsDimensions,\n} from './logo-assets';\nimport type { LogoAssetName } from './logo-assets';\nimport { Breakpoint } from '../common';\nimport { useScreenSize } from '../common/hooks/useScreenSize';\nimport { AriaAttributes } from 'react';\n\nexport enum LogoType {\n WISE = 'WISE',\n WISE_BUSINESS = 'WISE_BUSINESS',\n WISE_PLATFORM = 'WISE_PLATFORM',\n}\n\nexport enum LogoDisplay {\n RESPONSIVE = 'responsive',\n COMPACT = 'compact',\n FULL = 'full',\n}\n\nexport enum LogoFormat {\n DEFAULT = 'default',\n PRIMARY_LOCKUP = 'primary-lockup',\n SECONDARY_LOCKUP = 'secondary-lockup',\n}\n\nexport type LogoSize = 16 | 18 | 20 | 24 | 28 | 36 | '16' | '18' | '20' | '24' | '28' | '36';\n\nexport interface LogoProps {\n /** Extra classes applied to Logo */\n className?: string;\n /**\n * Renders a light-coloured version suited for dark backgrounds.\n * @default false\n * @deprecated dark mode comes out of the box, this property has no effect\n */\n inverse?: boolean;\n /**\n * What type of logo to display\n * @default 'WISE'\n */\n type?: `${LogoType}`;\n /**\n * Controls which logo variant is shown.\n * - `\"responsive\"` (default): full wordmark on large screens, fast-flag mark on small screens (<600 px).\n * - `\"compact\"`: always renders the fast-flag mark regardless of screen size.\n * - `\"full\"`: always renders the full wordmark/lockup regardless of screen size.\n * @default 'responsive'\n */\n display?: `${LogoDisplay}`;\n /**\n * Controls the format of the logo.\n * - `\"default\"`: plain Wise wordmark, no product name.\n * - `\"primary-lockup\"`: product name shown inline alongside the wordmark.\n * - `\"secondary-lockup\"`: stacked (two-line) variant with the product name.\n * @default 'default'\n */\n format?: `${LogoFormat}`;\n /**\n * Controls the height and width of the logo in pixels.\n * @default 24\n */\n size?: LogoSize;\n /**\n * Override default ({@link labelByType}) screen reader messages\n */\n 'aria-label'?: AriaAttributes['aria-label'];\n}\n\nconst labelByType = {\n WISE: 'Wise',\n WISE_BUSINESS: 'Wise Business',\n WISE_PLATFORM: 'Wise Platform',\n} satisfies Record<`${LogoType}`, string>;\n\nconst logoAssets: Record<LogoAssetName, () => JSX.Element> = {\n FastFlag,\n WiseLogo,\n WiseBusinessPrimary,\n WiseBusinessSecondary,\n WisePlatformPrimary,\n WisePlatformSecondary,\n};\n\n/**\n * Renders the Wise wordmark logo. Responsive — shows the flag-only mark on small viewports\n * and the full wordmark on ≥576px (small breakpoint and above).\n *\n * @see {@link https://wise.design/foundations/logo Design Spec}\n */\nexport default function Logo({\n className,\n type = 'WISE',\n format = 'default',\n display = 'responsive',\n size = 24,\n 'aria-label': ariaLabel,\n}: LogoProps) {\n const isScreenSm = !useScreenSize(Breakpoint.SMALL);\n const compact = display === 'compact' || (display === 'responsive' && isScreenSm);\n\n const assetName = compact ? 'FastFlag' : getAssetName(type, format);\n const Asset = logoAssets[assetName];\n const sizes = logoAssetsDimensions[assetName];\n const { width, height } =\n logoAssetsDimensions[assetName][Number(size) as keyof typeof sizes] ?? sizes[24];\n\n return (\n <span\n className={clsx('np-logo', className)}\n role=\"img\"\n aria-label={ariaLabel ?? labelByType[type]}\n style={\n {\n '--wds-logo-width': `${width}px`,\n '--wds-logo-height': `${height}px`,\n } as React.CSSProperties\n }\n >\n <Asset />\n </span>\n );\n}\n\nfunction getAssetName(type: `${LogoType}`, format: `${LogoFormat}`): LogoAssetName {\n if (format !== 'default') {\n if (type === 'WISE_BUSINESS') {\n return format === 'secondary-lockup' ? 'WiseBusinessSecondary' : 'WiseBusinessPrimary';\n }\n if (type === 'WISE_PLATFORM') {\n return format === 'secondary-lockup' ? 'WisePlatformSecondary' : 'WisePlatformPrimary';\n }\n }\n return 'WiseLogo';\n}\n"],"names":["LogoType","LogoDisplay","LogoFormat","labelByType","WISE","WISE_BUSINESS","WISE_PLATFORM","logoAssets","FastFlag","WiseLogo","WiseBusinessPrimary","WiseBusinessSecondary","WisePlatformPrimary","WisePlatformSecondary","Logo","className","type","format","display","size","ariaLabel","isScreenSm","useScreenSize","Breakpoint","SMALL","compact","assetName","getAssetName","Asset","sizes","logoAssetsDimensions","width","height","Number","_jsx","clsx","role","style","children"],"mappings":"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"}
1
+ {"version":3,"file":"Logo.js","sources":["../../src/logo/Logo.tsx"],"sourcesContent":["import { clsx } from 'clsx';\n\nimport {\n WiseLogo,\n WiseBusinessPrimary,\n WiseBusinessSecondary,\n WisePlatformPrimary,\n WisePlatformSecondary,\n FastFlag,\n logoAssetsDimensions,\n} from './logo-assets';\nimport type { LogoAssetName } from './logo-assets';\nimport { Breakpoint } from '../common';\nimport { useScreenSize } from '../common/hooks/useScreenSize';\nimport { AriaAttributes } from 'react';\n\nexport enum LogoType {\n WISE = 'WISE',\n WISE_BUSINESS = 'WISE_BUSINESS',\n WISE_PLATFORM = 'WISE_PLATFORM',\n}\n\nexport enum LogoDisplay {\n RESPONSIVE = 'responsive',\n COMPACT = 'compact',\n FULL = 'full',\n}\n\nexport enum LogoFormat {\n DEFAULT = 'default',\n PRIMARY_LOCKUP = 'primary-lockup',\n SECONDARY_LOCKUP = 'secondary-lockup',\n}\n\nexport type LogoSize = 16 | 18 | 20 | 24 | 28 | 36 | '16' | '18' | '20' | '24' | '28' | '36';\n\nexport interface LogoProps {\n /** Extra classes applied to Logo */\n className?: string;\n /**\n * Renders a light-coloured version suited for dark backgrounds.\n * @default false\n * @deprecated dark mode comes out of the box, this property has no effect\n */\n inverse?: boolean;\n /**\n * What type of logo to display\n * @default 'WISE'\n */\n type?: `${LogoType}`;\n /**\n * Controls which logo variant is shown.\n * - `\"responsive\"` (default): full wordmark on large screens, fast-flag mark on small screens (<600 px).\n * - `\"compact\"`: always renders the fast-flag mark regardless of screen size.\n * - `\"full\"`: always renders the full wordmark/lockup regardless of screen size.\n * @default 'responsive'\n */\n display?: `${LogoDisplay}`;\n /**\n * Controls the format of the logo.\n * - `\"default\"`: plain Wise wordmark, no product name.\n * - `\"primary-lockup\"`: product name shown inline alongside the wordmark.\n * - `\"secondary-lockup\"`: stacked (two-line) variant with the product name.\n * @default 'default'\n */\n format?: `${LogoFormat}`;\n /**\n * Controls the height and width of the logo in pixels.\n * @default 24\n */\n size?: LogoSize;\n /**\n * Override default ({@link labelByType}) screen reader messages\n */\n 'aria-label'?: AriaAttributes['aria-label'];\n}\n\nconst labelByType = {\n WISE: 'Wise',\n WISE_BUSINESS: 'Wise Business',\n WISE_PLATFORM: 'Wise Platform',\n} satisfies Record<`${LogoType}`, string>;\n\nconst logoAssets: Record<LogoAssetName, () => JSX.Element> = {\n FastFlag,\n WiseLogo,\n WiseBusinessPrimary,\n WiseBusinessSecondary,\n WisePlatformPrimary,\n WisePlatformSecondary,\n};\n\n/**\n * Renders the Wise wordmark logo. Responsive — shows the flag-only mark on small viewports\n * and the full wordmark on ≥600px (small breakpoint and above).\n *\n * @see {@link https://wise.design/foundations/logo Design Spec}\n */\nexport default function Logo({\n className,\n type = 'WISE',\n format = 'default',\n display = 'responsive',\n size = 24,\n 'aria-label': ariaLabel,\n}: LogoProps) {\n const isScreenSm = !useScreenSize(Breakpoint.SMALL);\n const compact = display === 'compact' || (display === 'responsive' && isScreenSm);\n\n const assetName = compact ? 'FastFlag' : getAssetName(type, format);\n const Asset = logoAssets[assetName];\n const sizes = logoAssetsDimensions[assetName];\n const { width, height } =\n logoAssetsDimensions[assetName][Number(size) as keyof typeof sizes] ?? sizes[24];\n\n return (\n <span\n className={clsx('np-logo', className)}\n role=\"img\"\n aria-label={ariaLabel ?? labelByType[type]}\n style={\n {\n '--wds-logo-width': `${width}px`,\n '--wds-logo-height': `${height}px`,\n } as React.CSSProperties\n }\n >\n <Asset />\n </span>\n );\n}\n\nfunction getAssetName(type: `${LogoType}`, format: `${LogoFormat}`): LogoAssetName {\n if (format !== 'default') {\n if (type === 'WISE_BUSINESS') {\n return format === 'secondary-lockup' ? 'WiseBusinessSecondary' : 'WiseBusinessPrimary';\n }\n if (type === 'WISE_PLATFORM') {\n return format === 'secondary-lockup' ? 'WisePlatformSecondary' : 'WisePlatformPrimary';\n }\n }\n return 'WiseLogo';\n}\n"],"names":["LogoType","LogoDisplay","LogoFormat","labelByType","WISE","WISE_BUSINESS","WISE_PLATFORM","logoAssets","FastFlag","WiseLogo","WiseBusinessPrimary","WiseBusinessSecondary","WisePlatformPrimary","WisePlatformSecondary","Logo","className","type","format","display","size","ariaLabel","isScreenSm","useScreenSize","Breakpoint","SMALL","compact","assetName","getAssetName","Asset","sizes","logoAssetsDimensions","width","height","Number","_jsx","clsx","role","style","children"],"mappings":"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"}
@@ -2,8 +2,8 @@ import { clsx } from 'clsx';
2
2
  import { logoAssetsDimensions, WisePlatformSecondary, WisePlatformPrimary, WiseBusinessSecondary, WiseBusinessPrimary, WiseLogo, FastFlag } from './logo-assets.mjs';
3
3
  import '../common/theme.mjs';
4
4
  import '../common/direction.mjs';
5
+ import { Breakpoint } from '@transferwise/neptune-tokens';
5
6
  import '../common/propsValues/control.mjs';
6
- import { Breakpoint } from '../common/propsValues/breakpoint.mjs';
7
7
  import '../common/propsValues/size.mjs';
8
8
  import '../common/propsValues/typography.mjs';
9
9
  import '../common/propsValues/width.mjs';
@@ -60,7 +60,7 @@ const logoAssets = {
60
60
  };
61
61
  /**
62
62
  * Renders the Wise wordmark logo. Responsive — shows the flag-only mark on small viewports
63
- * and the full wordmark on ≥576px (small breakpoint and above).
63
+ * and the full wordmark on ≥600px (small breakpoint and above).
64
64
  *
65
65
  * @see {@link https://wise.design/foundations/logo Design Spec}
66
66
  */
@@ -1 +1 @@
1
- {"version":3,"file":"Logo.mjs","sources":["../../src/logo/Logo.tsx"],"sourcesContent":["import { clsx } from 'clsx';\n\nimport {\n WiseLogo,\n WiseBusinessPrimary,\n WiseBusinessSecondary,\n WisePlatformPrimary,\n WisePlatformSecondary,\n FastFlag,\n logoAssetsDimensions,\n} from './logo-assets';\nimport type { LogoAssetName } from './logo-assets';\nimport { Breakpoint } from '../common';\nimport { useScreenSize } from '../common/hooks/useScreenSize';\nimport { AriaAttributes } from 'react';\n\nexport enum LogoType {\n WISE = 'WISE',\n WISE_BUSINESS = 'WISE_BUSINESS',\n WISE_PLATFORM = 'WISE_PLATFORM',\n}\n\nexport enum LogoDisplay {\n RESPONSIVE = 'responsive',\n COMPACT = 'compact',\n FULL = 'full',\n}\n\nexport enum LogoFormat {\n DEFAULT = 'default',\n PRIMARY_LOCKUP = 'primary-lockup',\n SECONDARY_LOCKUP = 'secondary-lockup',\n}\n\nexport type LogoSize = 16 | 18 | 20 | 24 | 28 | 36 | '16' | '18' | '20' | '24' | '28' | '36';\n\nexport interface LogoProps {\n /** Extra classes applied to Logo */\n className?: string;\n /**\n * Renders a light-coloured version suited for dark backgrounds.\n * @default false\n * @deprecated dark mode comes out of the box, this property has no effect\n */\n inverse?: boolean;\n /**\n * What type of logo to display\n * @default 'WISE'\n */\n type?: `${LogoType}`;\n /**\n * Controls which logo variant is shown.\n * - `\"responsive\"` (default): full wordmark on large screens, fast-flag mark on small screens (<600 px).\n * - `\"compact\"`: always renders the fast-flag mark regardless of screen size.\n * - `\"full\"`: always renders the full wordmark/lockup regardless of screen size.\n * @default 'responsive'\n */\n display?: `${LogoDisplay}`;\n /**\n * Controls the format of the logo.\n * - `\"default\"`: plain Wise wordmark, no product name.\n * - `\"primary-lockup\"`: product name shown inline alongside the wordmark.\n * - `\"secondary-lockup\"`: stacked (two-line) variant with the product name.\n * @default 'default'\n */\n format?: `${LogoFormat}`;\n /**\n * Controls the height and width of the logo in pixels.\n * @default 24\n */\n size?: LogoSize;\n /**\n * Override default ({@link labelByType}) screen reader messages\n */\n 'aria-label'?: AriaAttributes['aria-label'];\n}\n\nconst labelByType = {\n WISE: 'Wise',\n WISE_BUSINESS: 'Wise Business',\n WISE_PLATFORM: 'Wise Platform',\n} satisfies Record<`${LogoType}`, string>;\n\nconst logoAssets: Record<LogoAssetName, () => JSX.Element> = {\n FastFlag,\n WiseLogo,\n WiseBusinessPrimary,\n WiseBusinessSecondary,\n WisePlatformPrimary,\n WisePlatformSecondary,\n};\n\n/**\n * Renders the Wise wordmark logo. Responsive — shows the flag-only mark on small viewports\n * and the full wordmark on ≥576px (small breakpoint and above).\n *\n * @see {@link https://wise.design/foundations/logo Design Spec}\n */\nexport default function Logo({\n className,\n type = 'WISE',\n format = 'default',\n display = 'responsive',\n size = 24,\n 'aria-label': ariaLabel,\n}: LogoProps) {\n const isScreenSm = !useScreenSize(Breakpoint.SMALL);\n const compact = display === 'compact' || (display === 'responsive' && isScreenSm);\n\n const assetName = compact ? 'FastFlag' : getAssetName(type, format);\n const Asset = logoAssets[assetName];\n const sizes = logoAssetsDimensions[assetName];\n const { width, height } =\n logoAssetsDimensions[assetName][Number(size) as keyof typeof sizes] ?? sizes[24];\n\n return (\n <span\n className={clsx('np-logo', className)}\n role=\"img\"\n aria-label={ariaLabel ?? labelByType[type]}\n style={\n {\n '--wds-logo-width': `${width}px`,\n '--wds-logo-height': `${height}px`,\n } as React.CSSProperties\n }\n >\n <Asset />\n </span>\n );\n}\n\nfunction getAssetName(type: `${LogoType}`, format: `${LogoFormat}`): LogoAssetName {\n if (format !== 'default') {\n if (type === 'WISE_BUSINESS') {\n return format === 'secondary-lockup' ? 'WiseBusinessSecondary' : 'WiseBusinessPrimary';\n }\n if (type === 'WISE_PLATFORM') {\n return format === 'secondary-lockup' ? 'WisePlatformSecondary' : 'WisePlatformPrimary';\n }\n }\n return 'WiseLogo';\n}\n"],"names":["LogoType","LogoDisplay","LogoFormat","labelByType","WISE","WISE_BUSINESS","WISE_PLATFORM","logoAssets","FastFlag","WiseLogo","WiseBusinessPrimary","WiseBusinessSecondary","WisePlatformPrimary","WisePlatformSecondary","Logo","className","type","format","display","size","ariaLabel","isScreenSm","useScreenSize","Breakpoint","SMALL","compact","assetName","getAssetName","Asset","sizes","logoAssetsDimensions","width","height","Number","_jsx","clsx","role","style","children"],"mappings":"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"}
1
+ {"version":3,"file":"Logo.mjs","sources":["../../src/logo/Logo.tsx"],"sourcesContent":["import { clsx } from 'clsx';\n\nimport {\n WiseLogo,\n WiseBusinessPrimary,\n WiseBusinessSecondary,\n WisePlatformPrimary,\n WisePlatformSecondary,\n FastFlag,\n logoAssetsDimensions,\n} from './logo-assets';\nimport type { LogoAssetName } from './logo-assets';\nimport { Breakpoint } from '../common';\nimport { useScreenSize } from '../common/hooks/useScreenSize';\nimport { AriaAttributes } from 'react';\n\nexport enum LogoType {\n WISE = 'WISE',\n WISE_BUSINESS = 'WISE_BUSINESS',\n WISE_PLATFORM = 'WISE_PLATFORM',\n}\n\nexport enum LogoDisplay {\n RESPONSIVE = 'responsive',\n COMPACT = 'compact',\n FULL = 'full',\n}\n\nexport enum LogoFormat {\n DEFAULT = 'default',\n PRIMARY_LOCKUP = 'primary-lockup',\n SECONDARY_LOCKUP = 'secondary-lockup',\n}\n\nexport type LogoSize = 16 | 18 | 20 | 24 | 28 | 36 | '16' | '18' | '20' | '24' | '28' | '36';\n\nexport interface LogoProps {\n /** Extra classes applied to Logo */\n className?: string;\n /**\n * Renders a light-coloured version suited for dark backgrounds.\n * @default false\n * @deprecated dark mode comes out of the box, this property has no effect\n */\n inverse?: boolean;\n /**\n * What type of logo to display\n * @default 'WISE'\n */\n type?: `${LogoType}`;\n /**\n * Controls which logo variant is shown.\n * - `\"responsive\"` (default): full wordmark on large screens, fast-flag mark on small screens (<600 px).\n * - `\"compact\"`: always renders the fast-flag mark regardless of screen size.\n * - `\"full\"`: always renders the full wordmark/lockup regardless of screen size.\n * @default 'responsive'\n */\n display?: `${LogoDisplay}`;\n /**\n * Controls the format of the logo.\n * - `\"default\"`: plain Wise wordmark, no product name.\n * - `\"primary-lockup\"`: product name shown inline alongside the wordmark.\n * - `\"secondary-lockup\"`: stacked (two-line) variant with the product name.\n * @default 'default'\n */\n format?: `${LogoFormat}`;\n /**\n * Controls the height and width of the logo in pixels.\n * @default 24\n */\n size?: LogoSize;\n /**\n * Override default ({@link labelByType}) screen reader messages\n */\n 'aria-label'?: AriaAttributes['aria-label'];\n}\n\nconst labelByType = {\n WISE: 'Wise',\n WISE_BUSINESS: 'Wise Business',\n WISE_PLATFORM: 'Wise Platform',\n} satisfies Record<`${LogoType}`, string>;\n\nconst logoAssets: Record<LogoAssetName, () => JSX.Element> = {\n FastFlag,\n WiseLogo,\n WiseBusinessPrimary,\n WiseBusinessSecondary,\n WisePlatformPrimary,\n WisePlatformSecondary,\n};\n\n/**\n * Renders the Wise wordmark logo. Responsive — shows the flag-only mark on small viewports\n * and the full wordmark on ≥600px (small breakpoint and above).\n *\n * @see {@link https://wise.design/foundations/logo Design Spec}\n */\nexport default function Logo({\n className,\n type = 'WISE',\n format = 'default',\n display = 'responsive',\n size = 24,\n 'aria-label': ariaLabel,\n}: LogoProps) {\n const isScreenSm = !useScreenSize(Breakpoint.SMALL);\n const compact = display === 'compact' || (display === 'responsive' && isScreenSm);\n\n const assetName = compact ? 'FastFlag' : getAssetName(type, format);\n const Asset = logoAssets[assetName];\n const sizes = logoAssetsDimensions[assetName];\n const { width, height } =\n logoAssetsDimensions[assetName][Number(size) as keyof typeof sizes] ?? sizes[24];\n\n return (\n <span\n className={clsx('np-logo', className)}\n role=\"img\"\n aria-label={ariaLabel ?? labelByType[type]}\n style={\n {\n '--wds-logo-width': `${width}px`,\n '--wds-logo-height': `${height}px`,\n } as React.CSSProperties\n }\n >\n <Asset />\n </span>\n );\n}\n\nfunction getAssetName(type: `${LogoType}`, format: `${LogoFormat}`): LogoAssetName {\n if (format !== 'default') {\n if (type === 'WISE_BUSINESS') {\n return format === 'secondary-lockup' ? 'WiseBusinessSecondary' : 'WiseBusinessPrimary';\n }\n if (type === 'WISE_PLATFORM') {\n return format === 'secondary-lockup' ? 'WisePlatformSecondary' : 'WisePlatformPrimary';\n }\n }\n return 'WiseLogo';\n}\n"],"names":["LogoType","LogoDisplay","LogoFormat","labelByType","WISE","WISE_BUSINESS","WISE_PLATFORM","logoAssets","FastFlag","WiseLogo","WiseBusinessPrimary","WiseBusinessSecondary","WisePlatformPrimary","WisePlatformSecondary","Logo","className","type","format","display","size","ariaLabel","isScreenSm","useScreenSize","Breakpoint","SMALL","compact","assetName","getAssetName","Asset","sizes","logoAssetsDimensions","width","height","Number","_jsx","clsx","role","style","children"],"mappings":"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"}