@transferwise/components 0.0.0-experimental-d6b038b → 0.0.0-experimental-c84454a

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 (480) hide show
  1. package/build/accordion/Accordion.js.map +1 -1
  2. package/build/accordion/Accordion.mjs.map +1 -1
  3. package/build/actionButton/ActionButton.js.map +1 -1
  4. package/build/actionButton/ActionButton.mjs.map +1 -1
  5. package/build/actionOption/ActionOption.js.map +1 -1
  6. package/build/actionOption/ActionOption.mjs.map +1 -1
  7. package/build/alert/Alert.js +1 -1
  8. package/build/alert/Alert.js.map +1 -1
  9. package/build/alert/Alert.mjs +1 -1
  10. package/build/alert/Alert.mjs.map +1 -1
  11. package/build/avatar/Avatar.js.map +1 -1
  12. package/build/avatar/Avatar.mjs.map +1 -1
  13. package/build/avatarLayout/AvatarLayout.js.map +1 -1
  14. package/build/avatarLayout/AvatarLayout.mjs.map +1 -1
  15. package/build/badge/Badge.js.map +1 -1
  16. package/build/badge/Badge.mjs.map +1 -1
  17. package/build/body/Body.js.map +1 -1
  18. package/build/body/Body.mjs.map +1 -1
  19. package/build/button/LegacyButton.js.map +1 -1
  20. package/build/button/LegacyButton.mjs.map +1 -1
  21. package/build/card/Card.js.map +1 -1
  22. package/build/card/Card.mjs.map +1 -1
  23. package/build/checkboxButton/CheckboxButton.js.map +1 -1
  24. package/build/checkboxButton/CheckboxButton.mjs.map +1 -1
  25. package/build/checkboxOption/CheckboxOption.js.map +1 -1
  26. package/build/checkboxOption/CheckboxOption.mjs.map +1 -1
  27. package/build/circularButton/CircularButton.js.map +1 -1
  28. package/build/circularButton/CircularButton.mjs.map +1 -1
  29. package/build/common/propsValues/type.js +1 -1
  30. package/build/common/propsValues/type.js.map +1 -1
  31. package/build/common/propsValues/type.mjs +1 -1
  32. package/build/common/propsValues/type.mjs.map +1 -1
  33. package/build/common/propsValues/typography.js +1 -1
  34. package/build/common/propsValues/typography.js.map +1 -1
  35. package/build/common/propsValues/typography.mjs +1 -1
  36. package/build/common/propsValues/typography.mjs.map +1 -1
  37. package/build/dateInput/DateInput.js +5 -12
  38. package/build/dateInput/DateInput.js.map +1 -1
  39. package/build/dateInput/DateInput.mjs +4 -11
  40. package/build/dateInput/DateInput.mjs.map +1 -1
  41. package/build/dimmer/Dimmer.js.map +1 -1
  42. package/build/dimmer/Dimmer.mjs.map +1 -1
  43. package/build/drawer/Drawer.js.map +1 -1
  44. package/build/drawer/Drawer.mjs.map +1 -1
  45. package/build/expressiveMoneyInput/currencySelector/CurrencySelector.js +8 -16
  46. package/build/expressiveMoneyInput/currencySelector/CurrencySelector.js.map +1 -1
  47. package/build/expressiveMoneyInput/currencySelector/CurrencySelector.mjs +6 -14
  48. package/build/expressiveMoneyInput/currencySelector/CurrencySelector.mjs.map +1 -1
  49. package/build/field/Field.js.map +1 -1
  50. package/build/field/Field.mjs.map +1 -1
  51. package/build/flowNavigation/FlowNavigation.js.map +1 -1
  52. package/build/flowNavigation/FlowNavigation.mjs.map +1 -1
  53. package/build/header/Header.js.map +1 -1
  54. package/build/header/Header.mjs.map +1 -1
  55. package/build/iconButton/IconButton.js.map +1 -1
  56. package/build/iconButton/IconButton.mjs.map +1 -1
  57. package/build/index.js +7 -14
  58. package/build/index.js.map +1 -1
  59. package/build/index.mjs +3 -10
  60. package/build/index.mjs.map +1 -1
  61. package/build/inputs/SelectInput.js +890 -0
  62. package/build/inputs/SelectInput.js.map +1 -0
  63. package/build/inputs/SelectInput.messages.js.map +1 -0
  64. package/build/inputs/SelectInput.messages.mjs.map +1 -0
  65. package/build/inputs/SelectInput.mjs +881 -0
  66. package/build/inputs/SelectInput.mjs.map +1 -0
  67. package/build/inputs/{SelectInput/BottomSheet/SelectInputBottomSheet.js → _BottomSheet.js} +7 -7
  68. package/build/inputs/_BottomSheet.js.map +1 -0
  69. package/build/inputs/{SelectInput/BottomSheet/SelectInputBottomSheet.mjs → _BottomSheet.mjs} +7 -7
  70. package/build/inputs/_BottomSheet.mjs.map +1 -0
  71. package/build/inputs/{SelectInput/ButtonInput/SelectInputButtonInput.js → _ButtonInput.js} +5 -5
  72. package/build/inputs/_ButtonInput.js.map +1 -0
  73. package/build/inputs/{SelectInput/ButtonInput/SelectInputButtonInput.mjs → _ButtonInput.mjs} +5 -5
  74. package/build/inputs/_ButtonInput.mjs.map +1 -0
  75. package/build/inputs/{SelectInput/Popover/SelectInputPopover.js → _Popover.js} +7 -7
  76. package/build/inputs/_Popover.js.map +1 -0
  77. package/build/inputs/{SelectInput/Popover/SelectInputPopover.mjs → _Popover.mjs} +7 -7
  78. package/build/inputs/_Popover.mjs.map +1 -0
  79. package/build/legacylistItem/LegacyListItem.js.map +1 -1
  80. package/build/legacylistItem/LegacyListItem.mjs.map +1 -1
  81. package/build/list/List.js.map +1 -1
  82. package/build/list/List.mjs.map +1 -1
  83. package/build/listItem/Button/ListItemButton.js.map +1 -1
  84. package/build/listItem/Button/ListItemButton.mjs.map +1 -1
  85. package/build/listItem/IconButton/ListItemIconButton.js.map +1 -1
  86. package/build/listItem/IconButton/ListItemIconButton.mjs.map +1 -1
  87. package/build/listItem/Image/ListItemImage.js.map +1 -1
  88. package/build/listItem/Image/ListItemImage.mjs.map +1 -1
  89. package/build/listItem/ListItem.js.map +1 -1
  90. package/build/listItem/ListItem.mjs.map +1 -1
  91. package/build/loader/Loader.js.map +1 -1
  92. package/build/loader/Loader.mjs.map +1 -1
  93. package/build/logo/Logo.js.map +1 -1
  94. package/build/logo/Logo.mjs.map +1 -1
  95. package/build/main.css +126 -126
  96. package/build/modal/Modal.js.map +1 -1
  97. package/build/modal/Modal.mjs.map +1 -1
  98. package/build/moneyInput/MoneyInput.js +2 -9
  99. package/build/moneyInput/MoneyInput.js.map +1 -1
  100. package/build/moneyInput/MoneyInput.mjs +1 -8
  101. package/build/moneyInput/MoneyInput.mjs.map +1 -1
  102. package/build/navigationOption/NavigationOption.js.map +1 -1
  103. package/build/navigationOption/NavigationOption.mjs.map +1 -1
  104. package/build/navigationOptionsList/NavigationOptionsList.js.map +1 -1
  105. package/build/navigationOptionsList/NavigationOptionsList.mjs.map +1 -1
  106. package/build/nudge/Nudge.js.map +1 -1
  107. package/build/nudge/Nudge.mjs.map +1 -1
  108. package/build/phoneNumberInput/PhoneNumberInput.js +3 -10
  109. package/build/phoneNumberInput/PhoneNumberInput.js.map +1 -1
  110. package/build/phoneNumberInput/PhoneNumberInput.mjs +2 -9
  111. package/build/phoneNumberInput/PhoneNumberInput.mjs.map +1 -1
  112. package/build/popover/Popover.js.map +1 -1
  113. package/build/popover/Popover.mjs.map +1 -1
  114. package/build/processIndicator/ProcessIndicator.js.map +1 -1
  115. package/build/processIndicator/ProcessIndicator.mjs.map +1 -1
  116. package/build/prompt/ActionPrompt/ActionPrompt.js.map +1 -1
  117. package/build/prompt/ActionPrompt/ActionPrompt.mjs.map +1 -1
  118. package/build/prompt/InlinePrompt/InlinePrompt.js.map +1 -1
  119. package/build/prompt/InlinePrompt/InlinePrompt.mjs.map +1 -1
  120. package/build/radioOption/RadioOption.js.map +1 -1
  121. package/build/radioOption/RadioOption.mjs.map +1 -1
  122. package/build/select/Select.js.map +1 -1
  123. package/build/select/Select.mjs.map +1 -1
  124. package/build/statusIcon/StatusIcon.js.map +1 -1
  125. package/build/statusIcon/StatusIcon.mjs.map +1 -1
  126. package/build/styles/main.css +126 -126
  127. package/build/styles/sentimentSurface/SentimentSurface.css +36 -36
  128. package/build/summary/Summary.js +1 -1
  129. package/build/summary/Summary.js.map +1 -1
  130. package/build/summary/Summary.mjs +1 -1
  131. package/build/summary/Summary.mjs.map +1 -1
  132. package/build/switchOption/SwitchOption.js +1 -1
  133. package/build/switchOption/SwitchOption.js.map +1 -1
  134. package/build/switchOption/SwitchOption.mjs +1 -1
  135. package/build/switchOption/SwitchOption.mjs.map +1 -1
  136. package/build/tabs/Tabs.js.map +1 -1
  137. package/build/tabs/Tabs.mjs.map +1 -1
  138. package/build/typeahead/Typeahead.js.map +1 -1
  139. package/build/typeahead/Typeahead.mjs.map +1 -1
  140. package/build/types/accordion/Accordion.d.ts +8 -2
  141. package/build/types/accordion/Accordion.d.ts.map +1 -1
  142. package/build/types/actionButton/ActionButton.d.ts +6 -4
  143. package/build/types/actionButton/ActionButton.d.ts.map +1 -1
  144. package/build/types/actionOption/ActionOption.d.ts +1 -1
  145. package/build/types/alert/Alert.d.ts +5 -2
  146. package/build/types/alert/Alert.d.ts.map +1 -1
  147. package/build/types/avatar/Avatar.d.ts +4 -0
  148. package/build/types/avatar/Avatar.d.ts.map +1 -1
  149. package/build/types/avatarLayout/AvatarLayout.d.ts +5 -1
  150. package/build/types/avatarLayout/AvatarLayout.d.ts.map +1 -1
  151. package/build/types/badge/Badge.d.ts +2 -0
  152. package/build/types/badge/Badge.d.ts.map +1 -1
  153. package/build/types/body/Body.d.ts +2 -6
  154. package/build/types/body/Body.d.ts.map +1 -1
  155. package/build/types/button/Button.types.d.ts +4 -1
  156. package/build/types/button/Button.types.d.ts.map +1 -1
  157. package/build/types/button/LegacyButton.d.ts +4 -4
  158. package/build/types/card/Card.d.ts +1 -0
  159. package/build/types/card/Card.d.ts.map +1 -1
  160. package/build/types/checkboxButton/CheckboxButton.d.ts +2 -0
  161. package/build/types/checkboxButton/CheckboxButton.d.ts.map +1 -1
  162. package/build/types/checkboxOption/CheckboxOption.d.ts +1 -1
  163. package/build/types/circularButton/CircularButton.d.ts +1 -1
  164. package/build/types/circularButton/CircularButton.d.ts.map +1 -1
  165. package/build/types/common/propsValues/type.d.ts +1 -1
  166. package/build/types/common/propsValues/typography.d.ts +2 -2
  167. package/build/types/dateInput/DateInput.d.ts +5 -0
  168. package/build/types/dateInput/DateInput.d.ts.map +1 -1
  169. package/build/types/dimmer/Dimmer.d.ts +6 -0
  170. package/build/types/dimmer/Dimmer.d.ts.map +1 -1
  171. package/build/types/drawer/Drawer.d.ts +8 -2
  172. package/build/types/drawer/Drawer.d.ts.map +1 -1
  173. package/build/types/field/Field.d.ts +5 -2
  174. package/build/types/field/Field.d.ts.map +1 -1
  175. package/build/types/flowNavigation/FlowNavigation.d.ts +3 -0
  176. package/build/types/flowNavigation/FlowNavigation.d.ts.map +1 -1
  177. package/build/types/header/Header.d.ts +5 -1
  178. package/build/types/header/Header.d.ts.map +1 -1
  179. package/build/types/iconButton/IconButton.d.ts +6 -0
  180. package/build/types/iconButton/IconButton.d.ts.map +1 -1
  181. package/build/types/inputs/{SelectInput/SelectInput.types.d.ts → SelectInput.d.ts} +38 -12
  182. package/build/types/inputs/SelectInput.d.ts.map +1 -0
  183. package/build/types/inputs/SelectInput.messages.d.ts.map +1 -0
  184. package/build/types/inputs/{SelectInput/BottomSheet/SelectInputBottomSheet.d.ts → _BottomSheet.d.ts} +3 -3
  185. package/build/types/inputs/_BottomSheet.d.ts.map +1 -0
  186. package/build/types/inputs/_ButtonInput.d.ts +5 -0
  187. package/build/types/inputs/_ButtonInput.d.ts.map +1 -0
  188. package/build/types/inputs/{SelectInput/Popover/SelectInputPopover.d.ts → _Popover.d.ts} +3 -3
  189. package/build/types/inputs/_Popover.d.ts.map +1 -0
  190. package/build/types/legacylistItem/LegacyListItem.d.ts +1 -1
  191. package/build/types/list/List.d.ts +1 -0
  192. package/build/types/list/List.d.ts.map +1 -1
  193. package/build/types/listItem/Button/ListItemButton.d.ts +4 -0
  194. package/build/types/listItem/Button/ListItemButton.d.ts.map +1 -1
  195. package/build/types/listItem/IconButton/ListItemIconButton.d.ts +3 -1
  196. package/build/types/listItem/IconButton/ListItemIconButton.d.ts.map +1 -1
  197. package/build/types/listItem/Image/ListItemImage.d.ts +2 -0
  198. package/build/types/listItem/Image/ListItemImage.d.ts.map +1 -1
  199. package/build/types/listItem/ListItem.d.ts +3 -0
  200. package/build/types/listItem/ListItem.d.ts.map +1 -1
  201. package/build/types/loader/Loader.d.ts +5 -1
  202. package/build/types/loader/Loader.d.ts.map +1 -1
  203. package/build/types/logo/Logo.d.ts +4 -1
  204. package/build/types/logo/Logo.d.ts.map +1 -1
  205. package/build/types/modal/Modal.d.ts +6 -0
  206. package/build/types/modal/Modal.d.ts.map +1 -1
  207. package/build/types/navigationOption/NavigationOption.d.ts +1 -1
  208. package/build/types/navigationOptionsList/NavigationOptionsList.d.ts +1 -1
  209. package/build/types/nudge/Nudge.d.ts +1 -1
  210. package/build/types/nudge/Nudge.d.ts.map +1 -1
  211. package/build/types/phoneNumberInput/PhoneNumberInput.d.ts +7 -1
  212. package/build/types/phoneNumberInput/PhoneNumberInput.d.ts.map +1 -1
  213. package/build/types/popover/Popover.d.ts +1 -0
  214. package/build/types/popover/Popover.d.ts.map +1 -1
  215. package/build/types/processIndicator/ProcessIndicator.d.ts +2 -0
  216. package/build/types/processIndicator/ProcessIndicator.d.ts.map +1 -1
  217. package/build/types/prompt/ActionPrompt/ActionPrompt.d.ts +8 -1
  218. package/build/types/prompt/ActionPrompt/ActionPrompt.d.ts.map +1 -1
  219. package/build/types/prompt/InlinePrompt/InlinePrompt.d.ts +1 -0
  220. package/build/types/prompt/InlinePrompt/InlinePrompt.d.ts.map +1 -1
  221. package/build/types/radioOption/RadioOption.d.ts +1 -1
  222. package/build/types/select/Select.d.ts +4 -0
  223. package/build/types/select/Select.d.ts.map +1 -1
  224. package/build/types/statusIcon/StatusIcon.d.ts +3 -1
  225. package/build/types/statusIcon/StatusIcon.d.ts.map +1 -1
  226. package/build/types/summary/Summary.d.ts +7 -4
  227. package/build/types/summary/Summary.d.ts.map +1 -1
  228. package/build/types/switchOption/SwitchOption.d.ts +1 -1
  229. package/build/types/tabs/Tabs.d.ts +2 -0
  230. package/build/types/tabs/Tabs.d.ts.map +1 -1
  231. package/build/types/typeahead/Typeahead.d.ts +14 -1
  232. package/build/types/typeahead/Typeahead.d.ts.map +1 -1
  233. package/build/types/upload/Upload.d.ts +6 -0
  234. package/build/types/upload/Upload.d.ts.map +1 -1
  235. package/build/types/uploadInput/UploadInput.d.ts +10 -1
  236. package/build/types/uploadInput/UploadInput.d.ts.map +1 -1
  237. package/build/types/withDisplayFormat/WithDisplayFormat.d.ts +3 -0
  238. package/build/types/withDisplayFormat/WithDisplayFormat.d.ts.map +1 -1
  239. package/build/upload/Upload.js.map +1 -1
  240. package/build/upload/Upload.mjs.map +1 -1
  241. package/build/uploadInput/UploadInput.js.map +1 -1
  242. package/build/uploadInput/UploadInput.mjs.map +1 -1
  243. package/build/withDisplayFormat/WithDisplayFormat.js.map +1 -1
  244. package/build/withDisplayFormat/WithDisplayFormat.mjs.map +1 -1
  245. package/package.json +1 -1
  246. package/src/accordion/Accordion.tsx +8 -2
  247. package/src/actionButton/ActionButton.tsx +4 -3
  248. package/src/actionOption/ActionOption.tsx +1 -1
  249. package/src/alert/Alert.tsx +5 -2
  250. package/src/avatar/Avatar.tsx +4 -0
  251. package/src/avatarLayout/AvatarLayout.tsx +5 -1
  252. package/src/badge/Badge.tsx +2 -0
  253. package/src/body/Body.tsx +2 -6
  254. package/src/button/Button.types.ts +4 -1
  255. package/src/button/LegacyButton.tsx +4 -4
  256. package/src/card/Card.tsx +1 -0
  257. package/src/checkboxButton/CheckboxButton.tsx +1 -0
  258. package/src/checkboxOption/CheckboxOption.tsx +1 -1
  259. package/src/circularButton/CircularButton.tsx +1 -2
  260. package/src/common/propsValues/type.ts +1 -1
  261. package/src/common/propsValues/typography.ts +2 -2
  262. package/src/dateInput/DateInput.tsx +5 -0
  263. package/src/dimmer/Dimmer.tsx +6 -0
  264. package/src/drawer/Drawer.tsx +8 -2
  265. package/src/field/Field.tsx +5 -2
  266. package/src/flowNavigation/FlowNavigation.tsx +3 -0
  267. package/src/header/Header.tsx +5 -1
  268. package/src/iconButton/IconButton.tsx +3 -0
  269. package/src/inputs/{SelectInput/_stories/SelectInput.docs.mdx → SelectInput.docs.mdx} +1 -0
  270. package/src/inputs/SelectInput.less +219 -0
  271. package/src/inputs/{SelectInput/_stories/SelectInput.story.tsx → SelectInput.story.tsx} +8 -11
  272. package/src/inputs/{SelectInput/_stories/SelectInput.test.story.tsx → SelectInput.test.story.tsx} +10 -5
  273. package/src/inputs/{SelectInput/SelectInput.test.tsx → SelectInput.test.tsx} +11 -9
  274. package/src/inputs/SelectInput.tsx +1269 -0
  275. package/src/inputs/{SelectInput/BottomSheet/SelectInputBottomSheet.tsx → _BottomSheet.tsx} +7 -7
  276. package/src/inputs/{SelectInput/ButtonInput/SelectInputButtonInput.tsx → _ButtonInput.tsx} +5 -5
  277. package/src/inputs/{SelectInput/Popover/SelectInputPopover.tsx → _Popover.tsx} +7 -7
  278. package/src/legacylistItem/LegacyListItem.tsx +1 -1
  279. package/src/list/List.tsx +1 -0
  280. package/src/listItem/Button/ListItemButton.tsx +2 -0
  281. package/src/listItem/IconButton/ListItemIconButton.tsx +3 -1
  282. package/src/listItem/Image/ListItemImage.tsx +2 -0
  283. package/src/listItem/ListItem.tsx +2 -0
  284. package/src/loader/Loader.tsx +6 -2
  285. package/src/logo/Logo.tsx +4 -1
  286. package/src/main.css +126 -126
  287. package/src/main.less +1 -1
  288. package/src/modal/Modal.tsx +6 -0
  289. package/src/navigationOption/NavigationOption.tsx +1 -1
  290. package/src/navigationOptionsList/NavigationOptionsList.tsx +1 -1
  291. package/src/nudge/Nudge.tsx +1 -1
  292. package/src/phoneNumberInput/PhoneNumberInput.tsx +7 -1
  293. package/src/popover/Popover.tsx +1 -0
  294. package/src/processIndicator/ProcessIndicator.tsx +2 -0
  295. package/src/prompt/ActionPrompt/ActionPrompt.tsx +8 -1
  296. package/src/prompt/InlinePrompt/InlinePrompt.tsx +1 -0
  297. package/src/radioOption/RadioOption.tsx +1 -1
  298. package/src/select/Select.tsx +4 -0
  299. package/src/sentimentSurface/SentimentSurface.css +36 -36
  300. package/src/sentimentSurface/SentimentSurface.less +12 -12
  301. package/src/statusIcon/StatusIcon.tsx +3 -1
  302. package/src/summary/Summary.tsx +7 -4
  303. package/src/switchOption/SwitchOption.tsx +1 -1
  304. package/src/tabs/Tabs.tsx +2 -0
  305. package/src/typeahead/Typeahead.tsx +14 -2
  306. package/src/upload/Upload.tsx +6 -0
  307. package/src/uploadInput/UploadInput.tsx +12 -4
  308. package/src/withDisplayFormat/WithDisplayFormat.tsx +3 -0
  309. package/build/inputs/SelectInput/BottomSheet/SelectInputBottomSheet.js.map +0 -1
  310. package/build/inputs/SelectInput/BottomSheet/SelectInputBottomSheet.mjs.map +0 -1
  311. package/build/inputs/SelectInput/ButtonInput/SelectInputButtonInput.js.map +0 -1
  312. package/build/inputs/SelectInput/ButtonInput/SelectInputButtonInput.mjs.map +0 -1
  313. package/build/inputs/SelectInput/ClearButton/SelectInputClearButton.js +0 -27
  314. package/build/inputs/SelectInput/ClearButton/SelectInputClearButton.js.map +0 -1
  315. package/build/inputs/SelectInput/ClearButton/SelectInputClearButton.mjs +0 -25
  316. package/build/inputs/SelectInput/ClearButton/SelectInputClearButton.mjs.map +0 -1
  317. package/build/inputs/SelectInput/DefaultRenderTrigger/SelectInputDefaultRenderTrigger.js +0 -59
  318. package/build/inputs/SelectInput/DefaultRenderTrigger/SelectInputDefaultRenderTrigger.js.map +0 -1
  319. package/build/inputs/SelectInput/DefaultRenderTrigger/SelectInputDefaultRenderTrigger.mjs +0 -56
  320. package/build/inputs/SelectInput/DefaultRenderTrigger/SelectInputDefaultRenderTrigger.mjs.map +0 -1
  321. package/build/inputs/SelectInput/ItemView/GroupItemView/SelectInputGroupItemView.js +0 -50
  322. package/build/inputs/SelectInput/ItemView/GroupItemView/SelectInputGroupItemView.js.map +0 -1
  323. package/build/inputs/SelectInput/ItemView/GroupItemView/SelectInputGroupItemView.mjs +0 -48
  324. package/build/inputs/SelectInput/ItemView/GroupItemView/SelectInputGroupItemView.mjs.map +0 -1
  325. package/build/inputs/SelectInput/ItemView/SelectInputItemView.js +0 -47
  326. package/build/inputs/SelectInput/ItemView/SelectInputItemView.js.map +0 -1
  327. package/build/inputs/SelectInput/ItemView/SelectInputItemView.mjs +0 -45
  328. package/build/inputs/SelectInput/ItemView/SelectInputItemView.mjs.map +0 -1
  329. package/build/inputs/SelectInput/Option/SelectInputOption.js +0 -42
  330. package/build/inputs/SelectInput/Option/SelectInputOption.js.map +0 -1
  331. package/build/inputs/SelectInput/Option/SelectInputOption.mjs +0 -40
  332. package/build/inputs/SelectInput/Option/SelectInputOption.mjs.map +0 -1
  333. package/build/inputs/SelectInput/OptionContent/SelectInputOptionContent.js +0 -40
  334. package/build/inputs/SelectInput/OptionContent/SelectInputOptionContent.js.map +0 -1
  335. package/build/inputs/SelectInput/OptionContent/SelectInputOptionContent.mjs +0 -38
  336. package/build/inputs/SelectInput/OptionContent/SelectInputOptionContent.mjs.map +0 -1
  337. package/build/inputs/SelectInput/Options/OptionsContainer/SelectInputOptionsContainer.js +0 -48
  338. package/build/inputs/SelectInput/Options/OptionsContainer/SelectInputOptionsContainer.js.map +0 -1
  339. package/build/inputs/SelectInput/Options/OptionsContainer/SelectInputOptionsContainer.mjs +0 -46
  340. package/build/inputs/SelectInput/Options/OptionsContainer/SelectInputOptionsContainer.mjs.map +0 -1
  341. package/build/inputs/SelectInput/Options/SelectInputOptions.js +0 -300
  342. package/build/inputs/SelectInput/Options/SelectInputOptions.js.map +0 -1
  343. package/build/inputs/SelectInput/Options/SelectInputOptions.mjs +0 -298
  344. package/build/inputs/SelectInput/Options/SelectInputOptions.mjs.map +0 -1
  345. package/build/inputs/SelectInput/Popover/SelectInputPopover.js.map +0 -1
  346. package/build/inputs/SelectInput/Popover/SelectInputPopover.mjs.map +0 -1
  347. package/build/inputs/SelectInput/SelectInput.contexts.js +0 -29
  348. package/build/inputs/SelectInput/SelectInput.contexts.js.map +0 -1
  349. package/build/inputs/SelectInput/SelectInput.contexts.mjs +0 -24
  350. package/build/inputs/SelectInput/SelectInput.contexts.mjs.map +0 -1
  351. package/build/inputs/SelectInput/SelectInput.js +0 -222
  352. package/build/inputs/SelectInput/SelectInput.js.map +0 -1
  353. package/build/inputs/SelectInput/SelectInput.messages.js.map +0 -1
  354. package/build/inputs/SelectInput/SelectInput.messages.mjs.map +0 -1
  355. package/build/inputs/SelectInput/SelectInput.mjs +0 -216
  356. package/build/inputs/SelectInput/SelectInput.mjs.map +0 -1
  357. package/build/inputs/SelectInput/SelectInput.utils.js +0 -164
  358. package/build/inputs/SelectInput/SelectInput.utils.js.map +0 -1
  359. package/build/inputs/SelectInput/SelectInput.utils.mjs +0 -154
  360. package/build/inputs/SelectInput/SelectInput.utils.mjs.map +0 -1
  361. package/build/inputs/SelectInput/TriggerButton/SelectInputTriggerButton.js +0 -42
  362. package/build/inputs/SelectInput/TriggerButton/SelectInputTriggerButton.js.map +0 -1
  363. package/build/inputs/SelectInput/TriggerButton/SelectInputTriggerButton.mjs +0 -36
  364. package/build/inputs/SelectInput/TriggerButton/SelectInputTriggerButton.mjs.map +0 -1
  365. package/build/styles/inputs/SelectInput/BottomSheet/SelectInputBottomSheet.css +0 -96
  366. package/build/styles/inputs/SelectInput/ButtonInput/SelectInputButtonInput.css +0 -16
  367. package/build/styles/inputs/SelectInput/ClearButton/SelectInputClearButton.css +0 -46
  368. package/build/styles/inputs/SelectInput/ItemView/SelectInputItemView.css +0 -16
  369. package/build/styles/inputs/SelectInput/Option/SelectInputOption.css +0 -33
  370. package/build/styles/inputs/SelectInput/OptionContent/SelectInputOptionContent.css +0 -37
  371. package/build/styles/inputs/SelectInput/Options/SelectInputOptions.css +0 -81
  372. package/build/styles/inputs/SelectInput/Popover/SelectInputPopover.css +0 -46
  373. package/build/types/inputs/SelectInput/BottomSheet/SelectInputBottomSheet.d.ts.map +0 -1
  374. package/build/types/inputs/SelectInput/BottomSheet/index.d.ts +0 -3
  375. package/build/types/inputs/SelectInput/BottomSheet/index.d.ts.map +0 -1
  376. package/build/types/inputs/SelectInput/ButtonInput/SelectInputButtonInput.d.ts +0 -5
  377. package/build/types/inputs/SelectInput/ButtonInput/SelectInputButtonInput.d.ts.map +0 -1
  378. package/build/types/inputs/SelectInput/ButtonInput/index.d.ts +0 -3
  379. package/build/types/inputs/SelectInput/ButtonInput/index.d.ts.map +0 -1
  380. package/build/types/inputs/SelectInput/ClearButton/SelectInputClearButton.d.ts +0 -7
  381. package/build/types/inputs/SelectInput/ClearButton/SelectInputClearButton.d.ts.map +0 -1
  382. package/build/types/inputs/SelectInput/ClearButton/index.d.ts +0 -3
  383. package/build/types/inputs/SelectInput/ClearButton/index.d.ts.map +0 -1
  384. package/build/types/inputs/SelectInput/DefaultRenderTrigger/SelectInputDefaultRenderTrigger.d.ts +0 -16
  385. package/build/types/inputs/SelectInput/DefaultRenderTrigger/SelectInputDefaultRenderTrigger.d.ts.map +0 -1
  386. package/build/types/inputs/SelectInput/DefaultRenderTrigger/index.d.ts +0 -2
  387. package/build/types/inputs/SelectInput/DefaultRenderTrigger/index.d.ts.map +0 -1
  388. package/build/types/inputs/SelectInput/ItemView/GroupItemView/SelectInputGroupItemView.d.ts +0 -9
  389. package/build/types/inputs/SelectInput/ItemView/GroupItemView/SelectInputGroupItemView.d.ts.map +0 -1
  390. package/build/types/inputs/SelectInput/ItemView/GroupItemView/index.d.ts +0 -3
  391. package/build/types/inputs/SelectInput/ItemView/GroupItemView/index.d.ts.map +0 -1
  392. package/build/types/inputs/SelectInput/ItemView/SelectInputItemView.d.ts +0 -11
  393. package/build/types/inputs/SelectInput/ItemView/SelectInputItemView.d.ts.map +0 -1
  394. package/build/types/inputs/SelectInput/ItemView/index.d.ts +0 -4
  395. package/build/types/inputs/SelectInput/ItemView/index.d.ts.map +0 -1
  396. package/build/types/inputs/SelectInput/Option/SelectInputOption.d.ts +0 -11
  397. package/build/types/inputs/SelectInput/Option/SelectInputOption.d.ts.map +0 -1
  398. package/build/types/inputs/SelectInput/Option/index.d.ts +0 -3
  399. package/build/types/inputs/SelectInput/Option/index.d.ts.map +0 -1
  400. package/build/types/inputs/SelectInput/OptionContent/SelectInputOptionContent.d.ts +0 -13
  401. package/build/types/inputs/SelectInput/OptionContent/SelectInputOptionContent.d.ts.map +0 -1
  402. package/build/types/inputs/SelectInput/OptionContent/index.d.ts +0 -3
  403. package/build/types/inputs/SelectInput/OptionContent/index.d.ts.map +0 -1
  404. package/build/types/inputs/SelectInput/Options/OptionsContainer/SelectInputOptionsContainer.d.ts +0 -9
  405. package/build/types/inputs/SelectInput/Options/OptionsContainer/SelectInputOptionsContainer.d.ts.map +0 -1
  406. package/build/types/inputs/SelectInput/Options/OptionsContainer/index.d.ts +0 -3
  407. package/build/types/inputs/SelectInput/Options/OptionsContainer/index.d.ts.map +0 -1
  408. package/build/types/inputs/SelectInput/Options/SelectInputOptions.d.ts +0 -21
  409. package/build/types/inputs/SelectInput/Options/SelectInputOptions.d.ts.map +0 -1
  410. package/build/types/inputs/SelectInput/Options/index.d.ts +0 -4
  411. package/build/types/inputs/SelectInput/Options/index.d.ts.map +0 -1
  412. package/build/types/inputs/SelectInput/Popover/SelectInputPopover.d.ts.map +0 -1
  413. package/build/types/inputs/SelectInput/Popover/index.d.ts +0 -3
  414. package/build/types/inputs/SelectInput/Popover/index.d.ts.map +0 -1
  415. package/build/types/inputs/SelectInput/SelectInput.contexts.d.ts +0 -33
  416. package/build/types/inputs/SelectInput/SelectInput.contexts.d.ts.map +0 -1
  417. package/build/types/inputs/SelectInput/SelectInput.d.ts +0 -10
  418. package/build/types/inputs/SelectInput/SelectInput.d.ts.map +0 -1
  419. package/build/types/inputs/SelectInput/SelectInput.messages.d.ts.map +0 -1
  420. package/build/types/inputs/SelectInput/SelectInput.types.d.ts.map +0 -1
  421. package/build/types/inputs/SelectInput/SelectInput.utils.d.ts +0 -61
  422. package/build/types/inputs/SelectInput/SelectInput.utils.d.ts.map +0 -1
  423. package/build/types/inputs/SelectInput/TriggerButton/SelectInputTriggerButton.d.ts +0 -12
  424. package/build/types/inputs/SelectInput/TriggerButton/SelectInputTriggerButton.d.ts.map +0 -1
  425. package/build/types/inputs/SelectInput/TriggerButton/index.d.ts +0 -3
  426. package/build/types/inputs/SelectInput/TriggerButton/index.d.ts.map +0 -1
  427. package/build/types/inputs/SelectInput/components.d.ts +0 -10
  428. package/build/types/inputs/SelectInput/components.d.ts.map +0 -1
  429. package/build/types/inputs/SelectInput/index.d.ts +0 -12
  430. package/build/types/inputs/SelectInput/index.d.ts.map +0 -1
  431. package/src/inputs/SelectInput/BottomSheet/SelectInputBottomSheet.css +0 -96
  432. package/src/inputs/SelectInput/BottomSheet/index.ts +0 -2
  433. package/src/inputs/SelectInput/ButtonInput/SelectInputButtonInput.css +0 -16
  434. package/src/inputs/SelectInput/ButtonInput/index.ts +0 -2
  435. package/src/inputs/SelectInput/ClearButton/SelectInputClearButton.css +0 -46
  436. package/src/inputs/SelectInput/ClearButton/SelectInputClearButton.less +0 -40
  437. package/src/inputs/SelectInput/ClearButton/SelectInputClearButton.tsx +0 -29
  438. package/src/inputs/SelectInput/ClearButton/index.ts +0 -2
  439. package/src/inputs/SelectInput/DefaultRenderTrigger/SelectInputDefaultRenderTrigger.tsx +0 -74
  440. package/src/inputs/SelectInput/DefaultRenderTrigger/index.ts +0 -5
  441. package/src/inputs/SelectInput/ItemView/GroupItemView/SelectInputGroupItemView.tsx +0 -61
  442. package/src/inputs/SelectInput/ItemView/GroupItemView/index.ts +0 -2
  443. package/src/inputs/SelectInput/ItemView/SelectInputItemView.css +0 -16
  444. package/src/inputs/SelectInput/ItemView/SelectInputItemView.less +0 -17
  445. package/src/inputs/SelectInput/ItemView/SelectInputItemView.tsx +0 -48
  446. package/src/inputs/SelectInput/ItemView/index.ts +0 -3
  447. package/src/inputs/SelectInput/Option/SelectInputOption.css +0 -33
  448. package/src/inputs/SelectInput/Option/SelectInputOption.less +0 -32
  449. package/src/inputs/SelectInput/Option/SelectInputOption.tsx +0 -57
  450. package/src/inputs/SelectInput/Option/index.ts +0 -2
  451. package/src/inputs/SelectInput/OptionContent/SelectInputOptionContent.css +0 -37
  452. package/src/inputs/SelectInput/OptionContent/SelectInputOptionContent.less +0 -38
  453. package/src/inputs/SelectInput/OptionContent/SelectInputOptionContent.tsx +0 -72
  454. package/src/inputs/SelectInput/OptionContent/index.ts +0 -2
  455. package/src/inputs/SelectInput/Options/OptionsContainer/SelectInputOptionsContainer.tsx +0 -59
  456. package/src/inputs/SelectInput/Options/OptionsContainer/index.ts +0 -2
  457. package/src/inputs/SelectInput/Options/SelectInputOptions.css +0 -81
  458. package/src/inputs/SelectInput/Options/SelectInputOptions.less +0 -77
  459. package/src/inputs/SelectInput/Options/SelectInputOptions.tsx +0 -411
  460. package/src/inputs/SelectInput/Options/index.ts +0 -3
  461. package/src/inputs/SelectInput/Popover/SelectInputPopover.css +0 -46
  462. package/src/inputs/SelectInput/Popover/index.ts +0 -2
  463. package/src/inputs/SelectInput/SelectInput.contexts.tsx +0 -40
  464. package/src/inputs/SelectInput/SelectInput.less +0 -22
  465. package/src/inputs/SelectInput/SelectInput.tsx +0 -257
  466. package/src/inputs/SelectInput/SelectInput.types.ts +0 -113
  467. package/src/inputs/SelectInput/SelectInput.utils.ts +0 -206
  468. package/src/inputs/SelectInput/TriggerButton/SelectInputTriggerButton.tsx +0 -36
  469. package/src/inputs/SelectInput/TriggerButton/index.ts +0 -5
  470. package/src/inputs/SelectInput/components.ts +0 -10
  471. package/src/inputs/SelectInput/index.ts +0 -14
  472. package/build/inputs/{SelectInput/SelectInput.messages.js → SelectInput.messages.js} +0 -0
  473. package/build/inputs/{SelectInput/SelectInput.messages.mjs → SelectInput.messages.mjs} +0 -0
  474. package/build/styles/inputs/{SelectInput/SelectInput.css → SelectInput.css} +90 -90
  475. package/build/types/inputs/{SelectInput/SelectInput.messages.d.ts → SelectInput.messages.d.ts} +0 -0
  476. package/src/inputs/{SelectInput/SelectInput.css → SelectInput.css} +90 -90
  477. /package/src/inputs/{SelectInput/SelectInput.messages.ts → SelectInput.messages.ts} +0 -0
  478. /package/src/inputs/{SelectInput/BottomSheet/SelectInputBottomSheet.less → _BottomSheet.less} +0 -0
  479. /package/src/inputs/{SelectInput/ButtonInput/SelectInputButtonInput.less → _ButtonInput.less} +0 -0
  480. /package/src/inputs/{SelectInput/Popover/SelectInputPopover.less → _Popover.less} +0 -0
@@ -1,300 +0,0 @@
1
- 'use strict';
2
-
3
- var icons = require('@transferwise/icons');
4
- var react = require('@headlessui/react');
5
- var clsx = require('clsx');
6
- var React = require('react');
7
- var reactIntl = require('react-intl');
8
- var virtua = require('virtua');
9
- var SearchInput = require('../../SearchInput.js');
10
- var SelectInput_contexts = require('../SelectInput.contexts.js');
11
- var SelectInput_utils = require('../SelectInput.utils.js');
12
- var SelectInput_messages = require('../SelectInput.messages.js');
13
- var SelectInputItemView = require('../ItemView/SelectInputItemView.js');
14
- require('../../../header/Header.js');
15
- var jsxRuntime = require('react/jsx-runtime');
16
- var SelectInputOptionsContainer = require('./OptionsContainer/SelectInputOptionsContainer.js');
17
-
18
- function SelectInputOptions({
19
- id,
20
- parentId,
21
- items,
22
- compareValues: compareValuesProp,
23
- renderValue = String,
24
- renderFooter,
25
- filterable = false,
26
- filterPlaceholder,
27
- sortFilteredOptions,
28
- searchInputRef,
29
- listboxRef,
30
- filterQuery,
31
- onFilterChange,
32
- listBoxLabel,
33
- listBoxLabelledBy,
34
- autocomplete,
35
- name,
36
- onAutocompleteSelect
37
- }) {
38
- const intl = reactIntl.useIntl();
39
- const virtualiserHandlerRef = React.useRef(null);
40
- const controllerRef = filterable ? searchInputRef : listboxRef;
41
- const [initialRender, setInitialRender] = React.useState(true);
42
- const needle = React.useMemo(() => {
43
- if (filterable) {
44
- return filterQuery ? SelectInput_utils.searchableString(filterQuery) : null;
45
- }
46
- return undefined;
47
- }, [filterQuery, filterable]);
48
- React.useEffect(() => {
49
- if (needle) {
50
- // Ensure having an active option while filtering.
51
- // Without `requestAnimationFrame` upon which React depends for scheduling
52
- // updates, the active status would only show for a split second and then
53
- // disappear inadvertently.
54
- requestAnimationFrame(() => {
55
- if (controllerRef.current != null && !controllerRef.current.hasAttribute('aria-activedescendant')) {
56
- // Activate first option via synthetic key press
57
- controllerRef.current.dispatchEvent(new KeyboardEvent('keydown', {
58
- key: 'Home',
59
- bubbles: true
60
- }));
61
- }
62
- });
63
- }
64
- }, [controllerRef, needle]);
65
- const compareValues = React.useMemo(() => {
66
- if (!compareValuesProp) {
67
- return undefined;
68
- }
69
- if (typeof compareValuesProp === 'function') {
70
- return (a, b) => compareValuesProp(a, b);
71
- }
72
- const key = compareValuesProp;
73
- return (a, b) => {
74
- if (typeof a === 'object' && a != null && typeof b === 'object' && b != null) {
75
- return a[key] === b[key];
76
- }
77
- return a === b;
78
- };
79
- }, [compareValuesProp]);
80
- const filteredItems = React.useMemo(() => {
81
- if (needle == null) {
82
- return items;
83
- }
84
- const dedupedItems = SelectInput_utils.dedupeSelectInputItems(items, compareValues);
85
- if (sortFilteredOptions) {
86
- // When sorting, filter out non-matching items completely to avoid ghost items
87
- const filtered = dedupedItems.map(item => {
88
- if (item.type === 'option') {
89
- return SelectInput_utils.selectInputOptionItemIncludesNeedle(item, needle) ? item : {
90
- ...item,
91
- value: undefined
92
- };
93
- }
94
- if (item.type === 'group') {
95
- return {
96
- ...item,
97
- options: item.options.map(option => SelectInput_utils.selectInputOptionItemIncludesNeedle(option, needle) ? option : {
98
- ...option,
99
- value: undefined
100
- })
101
- };
102
- }
103
- return item;
104
- });
105
- return SelectInput_utils.sortSelectInputItems(filtered, sortFilteredOptions, filterQuery);
106
- }
107
- return SelectInput_utils.filterSelectInputItems(dedupedItems, item => SelectInput_utils.selectInputOptionItemIncludesNeedle(item, needle));
108
- // eslint-disable-next-line react-hooks/exhaustive-deps
109
- }, [needle, items, compareValues]);
110
- const resultsEmpty = needle != null && filteredItems.length === 0;
111
- const virtualized = filteredItems.length > SelectInput_utils.MAX_ITEMS_WITHOUT_VIRTUALIZATION;
112
- // Items shown once shall be kept mounted until the needle changes, otherwise
113
- // the scroll position may jump around inadvertently. Pattern adopted from:
114
- // https://inokawa.github.io/virtua/?path=/story/advanced-keep-offscreen-items--append-only
115
- const [mountedIndexes, setMountedIndexes] = React.useState([]);
116
- const prevNeedleRef = React.useRef(needle);
117
- React.useEffect(() => {
118
- const needleChanged = prevNeedleRef.current !== needle;
119
- prevNeedleRef.current = needle;
120
- if (needleChanged) {
121
- // Reset mounted indexes when search changes to avoid stale scroll positions
122
- setMountedIndexes([]);
123
- return;
124
- }
125
- // Ensure the 'End' key works as intended by keeping the last item mounted.
126
- // Skipped on needle change to prevent auto-scrolling on search.
127
- if (filteredItems.length > 0) {
128
- setMountedIndexes(prevMountedIndexes => {
129
- // Create a new array with existing indexes plus the last item index
130
- return [...new Set([...prevMountedIndexes, filteredItems.length - 1])]; // Sorting is redundant by nature here
131
- });
132
- }
133
- }, [needle, filteredItems.length]);
134
- const listboxContainerRef = React.useRef(null);
135
- React.useEffect(() => {
136
- if (listboxContainerRef.current != null) {
137
- listboxContainerRef.current.style.setProperty('--initial-height', `${listboxContainerRef.current.offsetHeight}px`);
138
- }
139
- }, []);
140
- React.useEffect(() => {
141
- setInitialRender(false);
142
- }, []);
143
- const showStatus = resultsEmpty;
144
- const statusId = React.useId();
145
- const listboxId = React.useId();
146
- const getItemNode = index => {
147
- const item = filteredItems[index];
148
- return /*#__PURE__*/jsxRuntime.jsx(SelectInputItemView.SelectInputItemView, {
149
- item: item,
150
- renderValue: renderValue,
151
- needle: needle
152
- }, index);
153
- };
154
- const findMatchingItem = autocompleteValue => {
155
- const flatOptions = items.flatMap(item => item.type === 'group' ? item.options : item.type === 'option' ? [item] : []).filter(item => item.type === 'option' && item.value != null);
156
- const exactMatch = flatOptions.find(option => String(option.value) === autocompleteValue || option.filterMatchers?.some(matcher => matcher === autocompleteValue));
157
- if (exactMatch) {
158
- return exactMatch.value;
159
- }
160
- const fuzzyMatch = flatOptions.find(option => option.filterMatchers?.some(matcher => matcher.toLowerCase().includes(autocompleteValue.toLowerCase())));
161
- return fuzzyMatch ? fuzzyMatch.value : null;
162
- };
163
- return /*#__PURE__*/jsxRuntime.jsxs(react.ListboxOptions, {
164
- modal: true,
165
- as: SelectInputOptionsContainer.SelectInputOptionsContainer,
166
- static: true,
167
- className: "np-select-input-options-container",
168
- onAriaActiveDescendantChange: value => {
169
- if (controllerRef.current != null) {
170
- if (!initialRender && value != null) {
171
- controllerRef.current.setAttribute('aria-activedescendant', value);
172
- } else {
173
- controllerRef.current.removeAttribute('aria-activedescendant');
174
- }
175
- }
176
- },
177
- children: [filterable ? /*#__PURE__*/jsxRuntime.jsx("div", {
178
- className: "np-select-input-query-container",
179
- children: /*#__PURE__*/jsxRuntime.jsx(SearchInput.SearchInput, {
180
- ref: searchInputRef,
181
- id: id,
182
- name: name,
183
- autoComplete: autocomplete,
184
- role: "combobox",
185
- shape: "rectangle",
186
- placeholder: filterPlaceholder,
187
- "aria-label": filterPlaceholder,
188
- defaultValue: filterQuery,
189
- "aria-autocomplete": "list",
190
- "aria-expanded": true,
191
- "aria-controls": listboxId,
192
- "aria-describedby": showStatus ? statusId : undefined,
193
- onKeyDown: event => {
194
- // Prevent interfering with the matcher of Headless UI
195
- // https://mathiasbynens.be/notes/javascript-unicode#regex
196
- if (/^.$/u.test(event.key)) {
197
- event.stopPropagation();
198
- }
199
- },
200
- onChange: event => {
201
- // Free up resources and ensure not to go out of bounds when the
202
- // resulting item count is less than before
203
- const inputValue = event.currentTarget.value;
204
- // Free up resources and ensure not to go out of bounds
205
- setMountedIndexes([]);
206
- onFilterChange(inputValue);
207
- },
208
- onInput: event => {
209
- const inputValue = event.currentTarget.value;
210
- const inputElement = event.currentTarget;
211
- if (autocomplete && onAutocompleteSelect && inputValue) {
212
- setTimeout(() => {
213
- if (inputElement.value === inputValue && inputValue.length > 2) {
214
- const matchedValue = findMatchingItem(inputValue);
215
- if (matchedValue !== null) {
216
- onAutocompleteSelect(matchedValue);
217
- }
218
- }
219
- }, 50);
220
- }
221
- }
222
- })
223
- }) : null, /*#__PURE__*/jsxRuntime.jsxs("section", {
224
- ref: listboxContainerRef,
225
- tabIndex: -1,
226
- className: clsx.clsx('np-select-input-listbox-container', virtualized && 'np-select-input-listbox-container--virtualized', needle == null &&
227
- // Groups aren't shown when filtering
228
- items.some(item => item.type === 'group') && 'np-select-input-listbox-container--has-group'),
229
- "data-wds-parent": parentId ?? undefined,
230
- children: [resultsEmpty ? /*#__PURE__*/jsxRuntime.jsxs("div", {
231
- id: statusId,
232
- className: "np-select-input-options-status",
233
- children: [/*#__PURE__*/jsxRuntime.jsx(icons.CrossCircle, {
234
- size: 16,
235
- className: "np-select-input-options-status-icon"
236
- }), intl.formatMessage(SelectInput_messages.default.noResultsFound)]
237
- }) : null, /*#__PURE__*/jsxRuntime.jsx("div", {
238
- ref: listboxRef,
239
- id: listboxId,
240
- role: "listbox",
241
- "aria-orientation": "vertical",
242
- "aria-label": listBoxLabel,
243
- "aria-labelledby": listBoxLabelledBy,
244
- tabIndex: 0,
245
- className: "np-select-input-listbox",
246
- children: !virtualized ? filteredItems.map((_, index) => getItemNode(index)) : /*#__PURE__*/jsxRuntime.jsx(virtua.Virtualizer, {
247
- ref: virtualiserHandlerRef,
248
- data: filteredItems,
249
- keepMounted: mountedIndexes,
250
- scrollRef: listboxRef // `VList` doesn't expose this
251
- ,
252
- onScroll: async () => {
253
- if (!virtualiserHandlerRef.current) return;
254
- const startIndex = virtualiserHandlerRef.current.findItemIndex(virtualiserHandlerRef.current.scrollOffset);
255
- const endIndex = virtualiserHandlerRef.current.findItemIndex(virtualiserHandlerRef.current.scrollOffset + virtualiserHandlerRef.current.viewportSize);
256
- setMountedIndexes(prevMountedIndexes => {
257
- // Create an array of all indexes that should be visible
258
- const visibleIndexes = [];
259
- for (let index = startIndex; index <= endIndex; index += 1) {
260
- // eslint-disable-next-line functional/immutable-data
261
- visibleIndexes.push(index);
262
- }
263
- // Combine with previous indexes and sort
264
- return [...new Set([...prevMountedIndexes, ...visibleIndexes])].sort((a, b) => a - b);
265
- });
266
- },
267
- children: (item, index) =>
268
- /*#__PURE__*/
269
- // The position of each item can't be inferred by browsers when
270
- // virtualizing, as some of the items may not be in the DOM
271
- jsxRuntime.jsx(SelectInput_contexts.SelectInputItemsCountContext.Provider, {
272
- value: filteredItems.length,
273
- children: /*#__PURE__*/jsxRuntime.jsx(SelectInput_contexts.SelectInputItemPositionContext.Provider, {
274
- value: index + 1,
275
- children: getItemNode(index)
276
- })
277
- })
278
- })
279
- }), renderFooter != null ? /*#__PURE__*/jsxRuntime.jsx("footer", {
280
- className: "np-select-input-footer",
281
- children: /*#__PURE__*/jsxRuntime.jsx("div", {
282
- role: "none",
283
- onKeyDown: event => {
284
- // Prevent interfering with Headless UI
285
- if (event.key !== 'Escape') {
286
- event.stopPropagation();
287
- }
288
- },
289
- children: renderFooter({
290
- resultsEmpty,
291
- queryNormalized: needle
292
- })
293
- })
294
- }) : null]
295
- })]
296
- });
297
- }
298
-
299
- exports.SelectInputOptions = SelectInputOptions;
300
- //# sourceMappingURL=SelectInputOptions.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SelectInputOptions.js","sources":["../../../../src/inputs/SelectInput/Options/SelectInputOptions.tsx"],"sourcesContent":["import { CrossCircle } from '@transferwise/icons';\nimport { ListboxOptions } from '@headlessui/react';\nimport { clsx } from 'clsx';\nimport { useEffect, useId, useMemo, useRef, useState } from 'react';\nimport { useIntl } from 'react-intl';\nimport { Virtualizer, type VirtualizerHandle } from 'virtua';\n\nimport { SearchInput } from '../../SearchInput';\nimport {\n SelectInputItemsCountContext,\n SelectInputItemPositionContext,\n} from '../SelectInput.contexts';\nimport {\n dedupeSelectInputItems,\n filterSelectInputItems,\n MAX_ITEMS_WITHOUT_VIRTUALIZATION,\n searchableString,\n selectInputOptionItemIncludesNeedle,\n sortSelectInputItems,\n} from '../SelectInput.utils';\nimport { SelectInputOptionItem, SelectInputProps, SelectInputItem } from '../SelectInput.types';\nimport messages from '../SelectInput.messages';\n\nimport { SelectInputItemView } from '../ItemView';\nimport { SelectInputOptionsContainer } from './OptionsContainer';\n\n/**\n * Props for the SelectInputOptions component.\n */\nexport interface SelectInputOptionsProps<T = string> extends Pick<\n SelectInputProps<T>,\n | 'items'\n | 'renderValue'\n | 'renderFooter'\n | 'filterable'\n | 'filterPlaceholder'\n | 'id'\n | 'parentId'\n | 'compareValues'\n | 'sortFilteredOptions'\n> {\n searchInputRef: React.MutableRefObject<HTMLInputElement | null>;\n listboxRef: React.MutableRefObject<HTMLDivElement | null>;\n filterQuery: string;\n onFilterChange: (query: string) => void;\n listBoxLabel?: string;\n listBoxLabelledBy?: string;\n autocomplete?: string;\n name?: string;\n onAutocompleteSelect?: (value: T) => void;\n}\n\n/**\n * The main options container component for SelectInput.\n * Manages filtering, virtualisation, and rendering of options.\n */\nexport function SelectInputOptions<T = string>({\n id,\n parentId,\n items,\n compareValues: compareValuesProp,\n renderValue = String,\n renderFooter,\n filterable = false,\n filterPlaceholder,\n sortFilteredOptions,\n searchInputRef,\n listboxRef,\n filterQuery,\n onFilterChange,\n listBoxLabel,\n listBoxLabelledBy,\n autocomplete,\n name,\n onAutocompleteSelect,\n}: SelectInputOptionsProps<T>) {\n const intl = useIntl();\n const virtualiserHandlerRef = useRef<VirtualizerHandle>(null);\n const controllerRef = filterable ? searchInputRef : listboxRef;\n const [initialRender, setInitialRender] = useState(true);\n\n const needle = useMemo(() => {\n if (filterable) {\n return filterQuery ? searchableString(filterQuery) : null;\n }\n return undefined;\n }, [filterQuery, filterable]);\n useEffect(() => {\n if (needle) {\n // Ensure having an active option while filtering.\n // Without `requestAnimationFrame` upon which React depends for scheduling\n // updates, the active status would only show for a split second and then\n // disappear inadvertently.\n requestAnimationFrame(() => {\n if (\n controllerRef.current != null &&\n !controllerRef.current.hasAttribute('aria-activedescendant')\n ) {\n // Activate first option via synthetic key press\n controllerRef.current.dispatchEvent(\n new KeyboardEvent('keydown', { key: 'Home', bubbles: true }),\n );\n }\n });\n }\n }, [controllerRef, needle]);\n\n const compareValues = useMemo(() => {\n if (!compareValuesProp) {\n return undefined;\n }\n\n if (typeof compareValuesProp === 'function') {\n return (a: NonNullable<T>, b: NonNullable<T>) => compareValuesProp(a, b);\n }\n\n const key = compareValuesProp;\n return (a: NonNullable<T>, b: NonNullable<T>) => {\n if (typeof a === 'object' && a != null && typeof b === 'object' && b != null) {\n return (a as Record<string, unknown>)[key] === (b as Record<string, unknown>)[key];\n }\n return a === b;\n };\n }, [compareValuesProp]);\n\n const filteredItems: readonly SelectInputItem<NonNullable<T> | undefined>[] = useMemo(() => {\n if (needle == null) {\n return items;\n }\n\n const dedupedItems = dedupeSelectInputItems(items, compareValues);\n\n if (sortFilteredOptions) {\n // When sorting, filter out non-matching items completely to avoid ghost items\n const filtered = dedupedItems.map((item) => {\n if (item.type === 'option') {\n return selectInputOptionItemIncludesNeedle(item, needle)\n ? item\n : { ...item, value: undefined };\n }\n if (item.type === 'group') {\n return {\n ...item,\n options: item.options.map((option) =>\n selectInputOptionItemIncludesNeedle(option, needle)\n ? option\n : { ...option, value: undefined },\n ),\n };\n }\n return item;\n });\n\n return sortSelectInputItems(filtered, sortFilteredOptions, filterQuery);\n }\n\n return filterSelectInputItems(dedupedItems, (item) =>\n selectInputOptionItemIncludesNeedle(item, needle),\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [needle, items, compareValues]);\n const resultsEmpty = needle != null && filteredItems.length === 0;\n\n const virtualized = filteredItems.length > MAX_ITEMS_WITHOUT_VIRTUALIZATION;\n\n // Items shown once shall be kept mounted until the needle changes, otherwise\n // the scroll position may jump around inadvertently. Pattern adopted from:\n // https://inokawa.github.io/virtua/?path=/story/advanced-keep-offscreen-items--append-only\n const [mountedIndexes, setMountedIndexes] = useState<number[]>([]);\n const prevNeedleRef = useRef(needle);\n\n useEffect(() => {\n const needleChanged = prevNeedleRef.current !== needle;\n prevNeedleRef.current = needle;\n\n if (needleChanged) {\n // Reset mounted indexes when search changes to avoid stale scroll positions\n setMountedIndexes([]);\n return;\n }\n\n // Ensure the 'End' key works as intended by keeping the last item mounted.\n // Skipped on needle change to prevent auto-scrolling on search.\n if (filteredItems.length > 0) {\n setMountedIndexes((prevMountedIndexes) => {\n // Create a new array with existing indexes plus the last item index\n return [...new Set([...prevMountedIndexes, filteredItems.length - 1])]; // Sorting is redundant by nature here\n });\n }\n }, [needle, filteredItems.length]);\n\n const listboxContainerRef = useRef<HTMLDivElement>(null);\n useEffect(() => {\n if (listboxContainerRef.current != null) {\n listboxContainerRef.current.style.setProperty(\n '--initial-height',\n `${listboxContainerRef.current.offsetHeight}px`,\n );\n }\n }, []);\n\n useEffect(() => {\n setInitialRender(false);\n }, []);\n\n const showStatus = resultsEmpty;\n const statusId = useId();\n const listboxId = useId();\n\n const getItemNode = (index: number) => {\n const item = filteredItems[index];\n return (\n <SelectInputItemView key={index} item={item} renderValue={renderValue} needle={needle} />\n );\n };\n\n const findMatchingItem = (autocompleteValue: string): T | null => {\n const flatOptions = items\n .flatMap((item) =>\n item.type === 'group' ? item.options : item.type === 'option' ? [item] : [],\n )\n .filter(\n (item): item is SelectInputOptionItem<NonNullable<T>> =>\n item.type === 'option' && item.value != null,\n );\n\n const exactMatch = flatOptions.find(\n (option) =>\n String(option.value) === autocompleteValue ||\n option.filterMatchers?.some((matcher) => matcher === autocompleteValue),\n );\n\n if (exactMatch) {\n return exactMatch.value;\n }\n\n const fuzzyMatch = flatOptions.find((option) =>\n option.filterMatchers?.some((matcher) =>\n matcher.toLowerCase().includes(autocompleteValue.toLowerCase()),\n ),\n );\n\n return fuzzyMatch ? fuzzyMatch.value : null;\n };\n\n return (\n <ListboxOptions\n modal\n as={SelectInputOptionsContainer}\n static\n className=\"np-select-input-options-container\"\n onAriaActiveDescendantChange={(value: React.AriaAttributes['aria-activedescendant']) => {\n if (controllerRef.current != null) {\n if (!initialRender && value != null) {\n controllerRef.current.setAttribute('aria-activedescendant', value);\n } else {\n controllerRef.current.removeAttribute('aria-activedescendant');\n }\n }\n }}\n >\n {filterable ? (\n <div className=\"np-select-input-query-container\">\n <SearchInput\n ref={searchInputRef}\n id={id}\n name={name}\n autoComplete={autocomplete}\n role=\"combobox\"\n shape=\"rectangle\"\n placeholder={filterPlaceholder}\n aria-label={filterPlaceholder}\n defaultValue={filterQuery}\n aria-autocomplete=\"list\"\n aria-expanded\n aria-controls={listboxId}\n aria-describedby={showStatus ? statusId : undefined}\n onKeyDown={(event: React.KeyboardEvent<HTMLInputElement>) => {\n // Prevent interfering with the matcher of Headless UI\n // https://mathiasbynens.be/notes/javascript-unicode#regex\n if (/^.$/u.test(event.key)) {\n event.stopPropagation();\n }\n }}\n onChange={(event) => {\n // Free up resources and ensure not to go out of bounds when the\n // resulting item count is less than before\n const inputValue = event.currentTarget.value;\n\n // Free up resources and ensure not to go out of bounds\n setMountedIndexes([]);\n onFilterChange(inputValue);\n }}\n onInput={(event) => {\n const inputValue = event.currentTarget.value;\n const inputElement = event.currentTarget;\n\n if (autocomplete && onAutocompleteSelect && inputValue) {\n setTimeout(() => {\n if (inputElement.value === inputValue && inputValue.length > 2) {\n const matchedValue = findMatchingItem(inputValue);\n if (matchedValue !== null) {\n onAutocompleteSelect(matchedValue);\n }\n }\n }, 50);\n }\n }}\n />\n </div>\n ) : null}\n\n <section\n ref={listboxContainerRef}\n tabIndex={-1}\n className={clsx(\n 'np-select-input-listbox-container',\n virtualized && 'np-select-input-listbox-container--virtualized',\n needle == null && // Groups aren't shown when filtering\n items.some((item) => item.type === 'group') &&\n 'np-select-input-listbox-container--has-group',\n )}\n data-wds-parent={parentId ?? undefined}\n >\n {resultsEmpty ? (\n <div id={statusId} className=\"np-select-input-options-status\">\n <CrossCircle size={16} className=\"np-select-input-options-status-icon\" />\n {intl.formatMessage(messages.noResultsFound)}\n </div>\n ) : null}\n\n <div\n ref={listboxRef}\n id={listboxId}\n role=\"listbox\"\n aria-orientation=\"vertical\"\n aria-label={listBoxLabel}\n aria-labelledby={listBoxLabelledBy}\n tabIndex={0}\n className=\"np-select-input-listbox\"\n >\n {!virtualized ? (\n filteredItems.map((_, index) => getItemNode(index))\n ) : (\n <Virtualizer\n ref={virtualiserHandlerRef}\n data={filteredItems}\n keepMounted={mountedIndexes}\n scrollRef={listboxRef} // `VList` doesn't expose this\n onScroll={async () => {\n if (!virtualiserHandlerRef.current) return;\n\n const startIndex = virtualiserHandlerRef.current.findItemIndex(\n virtualiserHandlerRef.current.scrollOffset,\n );\n const endIndex = virtualiserHandlerRef.current.findItemIndex(\n virtualiserHandlerRef.current.scrollOffset +\n virtualiserHandlerRef.current.viewportSize,\n );\n\n setMountedIndexes((prevMountedIndexes) => {\n // Create an array of all indexes that should be visible\n\n const visibleIndexes = [];\n for (let index = startIndex; index <= endIndex; index += 1) {\n // eslint-disable-next-line functional/immutable-data\n visibleIndexes.push(index);\n }\n\n // Combine with previous indexes and sort\n return [...new Set([...prevMountedIndexes, ...visibleIndexes])].sort(\n (a, b) => a - b,\n );\n });\n }}\n >\n {(item, index) => (\n // The position of each item can't be inferred by browsers when\n // virtualizing, as some of the items may not be in the DOM\n <SelectInputItemsCountContext.Provider value={filteredItems.length}>\n <SelectInputItemPositionContext.Provider value={index + 1}>\n {getItemNode(index)}\n </SelectInputItemPositionContext.Provider>\n </SelectInputItemsCountContext.Provider>\n )}\n </Virtualizer>\n )}\n </div>\n\n {renderFooter != null ? (\n <footer className=\"np-select-input-footer\">\n <div\n role=\"none\"\n onKeyDown={(event) => {\n // Prevent interfering with Headless UI\n if (event.key !== 'Escape') {\n event.stopPropagation();\n }\n }}\n >\n {renderFooter({\n resultsEmpty,\n queryNormalized: needle,\n })}\n </div>\n </footer>\n ) : null}\n </section>\n </ListboxOptions>\n );\n}\n"],"names":["SelectInputOptions","id","parentId","items","compareValues","compareValuesProp","renderValue","String","renderFooter","filterable","filterPlaceholder","sortFilteredOptions","searchInputRef","listboxRef","filterQuery","onFilterChange","listBoxLabel","listBoxLabelledBy","autocomplete","name","onAutocompleteSelect","intl","useIntl","virtualiserHandlerRef","useRef","controllerRef","initialRender","setInitialRender","useState","needle","useMemo","searchableString","undefined","useEffect","requestAnimationFrame","current","hasAttribute","dispatchEvent","KeyboardEvent","key","bubbles","a","b","filteredItems","dedupedItems","dedupeSelectInputItems","filtered","map","item","type","selectInputOptionItemIncludesNeedle","value","options","option","sortSelectInputItems","filterSelectInputItems","resultsEmpty","length","virtualized","MAX_ITEMS_WITHOUT_VIRTUALIZATION","mountedIndexes","setMountedIndexes","prevNeedleRef","needleChanged","prevMountedIndexes","Set","listboxContainerRef","style","setProperty","offsetHeight","showStatus","statusId","useId","listboxId","getItemNode","index","_jsx","SelectInputItemView","findMatchingItem","autocompleteValue","flatOptions","flatMap","filter","exactMatch","find","filterMatchers","some","matcher","fuzzyMatch","toLowerCase","includes","_jsxs","ListboxOptions","modal","as","SelectInputOptionsContainer","static","className","onAriaActiveDescendantChange","setAttribute","removeAttribute","children","SearchInput","ref","autoComplete","role","shape","placeholder","defaultValue","onKeyDown","event","test","stopPropagation","onChange","inputValue","currentTarget","onInput","inputElement","setTimeout","matchedValue","tabIndex","clsx","CrossCircle","size","formatMessage","messages","noResultsFound","_","Virtualizer","data","keepMounted","scrollRef","onScroll","startIndex","findItemIndex","scrollOffset","endIndex","viewportSize","visibleIndexes","push","sort","SelectInputItemsCountContext","Provider","SelectInputItemPositionContext","queryNormalized"],"mappings":"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"}
@@ -1,298 +0,0 @@
1
- import { CrossCircle } from '@transferwise/icons';
2
- import { ListboxOptions } from '@headlessui/react';
3
- import { clsx } from 'clsx';
4
- import { useRef, useState, useMemo, useEffect, useId } from 'react';
5
- import { useIntl } from 'react-intl';
6
- import { Virtualizer } from 'virtua';
7
- import { SearchInput } from '../../SearchInput.mjs';
8
- import { SelectInputItemsCountContext, SelectInputItemPositionContext } from '../SelectInput.contexts.mjs';
9
- import { searchableString, dedupeSelectInputItems, selectInputOptionItemIncludesNeedle, sortSelectInputItems, filterSelectInputItems, MAX_ITEMS_WITHOUT_VIRTUALIZATION } from '../SelectInput.utils.mjs';
10
- import messages from '../SelectInput.messages.mjs';
11
- import { SelectInputItemView } from '../ItemView/SelectInputItemView.mjs';
12
- import '../../../header/Header.mjs';
13
- import { jsxs, jsx } from 'react/jsx-runtime';
14
- import { SelectInputOptionsContainer } from './OptionsContainer/SelectInputOptionsContainer.mjs';
15
-
16
- function SelectInputOptions({
17
- id,
18
- parentId,
19
- items,
20
- compareValues: compareValuesProp,
21
- renderValue = String,
22
- renderFooter,
23
- filterable = false,
24
- filterPlaceholder,
25
- sortFilteredOptions,
26
- searchInputRef,
27
- listboxRef,
28
- filterQuery,
29
- onFilterChange,
30
- listBoxLabel,
31
- listBoxLabelledBy,
32
- autocomplete,
33
- name,
34
- onAutocompleteSelect
35
- }) {
36
- const intl = useIntl();
37
- const virtualiserHandlerRef = useRef(null);
38
- const controllerRef = filterable ? searchInputRef : listboxRef;
39
- const [initialRender, setInitialRender] = useState(true);
40
- const needle = useMemo(() => {
41
- if (filterable) {
42
- return filterQuery ? searchableString(filterQuery) : null;
43
- }
44
- return undefined;
45
- }, [filterQuery, filterable]);
46
- useEffect(() => {
47
- if (needle) {
48
- // Ensure having an active option while filtering.
49
- // Without `requestAnimationFrame` upon which React depends for scheduling
50
- // updates, the active status would only show for a split second and then
51
- // disappear inadvertently.
52
- requestAnimationFrame(() => {
53
- if (controllerRef.current != null && !controllerRef.current.hasAttribute('aria-activedescendant')) {
54
- // Activate first option via synthetic key press
55
- controllerRef.current.dispatchEvent(new KeyboardEvent('keydown', {
56
- key: 'Home',
57
- bubbles: true
58
- }));
59
- }
60
- });
61
- }
62
- }, [controllerRef, needle]);
63
- const compareValues = useMemo(() => {
64
- if (!compareValuesProp) {
65
- return undefined;
66
- }
67
- if (typeof compareValuesProp === 'function') {
68
- return (a, b) => compareValuesProp(a, b);
69
- }
70
- const key = compareValuesProp;
71
- return (a, b) => {
72
- if (typeof a === 'object' && a != null && typeof b === 'object' && b != null) {
73
- return a[key] === b[key];
74
- }
75
- return a === b;
76
- };
77
- }, [compareValuesProp]);
78
- const filteredItems = useMemo(() => {
79
- if (needle == null) {
80
- return items;
81
- }
82
- const dedupedItems = dedupeSelectInputItems(items, compareValues);
83
- if (sortFilteredOptions) {
84
- // When sorting, filter out non-matching items completely to avoid ghost items
85
- const filtered = dedupedItems.map(item => {
86
- if (item.type === 'option') {
87
- return selectInputOptionItemIncludesNeedle(item, needle) ? item : {
88
- ...item,
89
- value: undefined
90
- };
91
- }
92
- if (item.type === 'group') {
93
- return {
94
- ...item,
95
- options: item.options.map(option => selectInputOptionItemIncludesNeedle(option, needle) ? option : {
96
- ...option,
97
- value: undefined
98
- })
99
- };
100
- }
101
- return item;
102
- });
103
- return sortSelectInputItems(filtered, sortFilteredOptions, filterQuery);
104
- }
105
- return filterSelectInputItems(dedupedItems, item => selectInputOptionItemIncludesNeedle(item, needle));
106
- // eslint-disable-next-line react-hooks/exhaustive-deps
107
- }, [needle, items, compareValues]);
108
- const resultsEmpty = needle != null && filteredItems.length === 0;
109
- const virtualized = filteredItems.length > MAX_ITEMS_WITHOUT_VIRTUALIZATION;
110
- // Items shown once shall be kept mounted until the needle changes, otherwise
111
- // the scroll position may jump around inadvertently. Pattern adopted from:
112
- // https://inokawa.github.io/virtua/?path=/story/advanced-keep-offscreen-items--append-only
113
- const [mountedIndexes, setMountedIndexes] = useState([]);
114
- const prevNeedleRef = useRef(needle);
115
- useEffect(() => {
116
- const needleChanged = prevNeedleRef.current !== needle;
117
- prevNeedleRef.current = needle;
118
- if (needleChanged) {
119
- // Reset mounted indexes when search changes to avoid stale scroll positions
120
- setMountedIndexes([]);
121
- return;
122
- }
123
- // Ensure the 'End' key works as intended by keeping the last item mounted.
124
- // Skipped on needle change to prevent auto-scrolling on search.
125
- if (filteredItems.length > 0) {
126
- setMountedIndexes(prevMountedIndexes => {
127
- // Create a new array with existing indexes plus the last item index
128
- return [...new Set([...prevMountedIndexes, filteredItems.length - 1])]; // Sorting is redundant by nature here
129
- });
130
- }
131
- }, [needle, filteredItems.length]);
132
- const listboxContainerRef = useRef(null);
133
- useEffect(() => {
134
- if (listboxContainerRef.current != null) {
135
- listboxContainerRef.current.style.setProperty('--initial-height', `${listboxContainerRef.current.offsetHeight}px`);
136
- }
137
- }, []);
138
- useEffect(() => {
139
- setInitialRender(false);
140
- }, []);
141
- const showStatus = resultsEmpty;
142
- const statusId = useId();
143
- const listboxId = useId();
144
- const getItemNode = index => {
145
- const item = filteredItems[index];
146
- return /*#__PURE__*/jsx(SelectInputItemView, {
147
- item: item,
148
- renderValue: renderValue,
149
- needle: needle
150
- }, index);
151
- };
152
- const findMatchingItem = autocompleteValue => {
153
- const flatOptions = items.flatMap(item => item.type === 'group' ? item.options : item.type === 'option' ? [item] : []).filter(item => item.type === 'option' && item.value != null);
154
- const exactMatch = flatOptions.find(option => String(option.value) === autocompleteValue || option.filterMatchers?.some(matcher => matcher === autocompleteValue));
155
- if (exactMatch) {
156
- return exactMatch.value;
157
- }
158
- const fuzzyMatch = flatOptions.find(option => option.filterMatchers?.some(matcher => matcher.toLowerCase().includes(autocompleteValue.toLowerCase())));
159
- return fuzzyMatch ? fuzzyMatch.value : null;
160
- };
161
- return /*#__PURE__*/jsxs(ListboxOptions, {
162
- modal: true,
163
- as: SelectInputOptionsContainer,
164
- static: true,
165
- className: "np-select-input-options-container",
166
- onAriaActiveDescendantChange: value => {
167
- if (controllerRef.current != null) {
168
- if (!initialRender && value != null) {
169
- controllerRef.current.setAttribute('aria-activedescendant', value);
170
- } else {
171
- controllerRef.current.removeAttribute('aria-activedescendant');
172
- }
173
- }
174
- },
175
- children: [filterable ? /*#__PURE__*/jsx("div", {
176
- className: "np-select-input-query-container",
177
- children: /*#__PURE__*/jsx(SearchInput, {
178
- ref: searchInputRef,
179
- id: id,
180
- name: name,
181
- autoComplete: autocomplete,
182
- role: "combobox",
183
- shape: "rectangle",
184
- placeholder: filterPlaceholder,
185
- "aria-label": filterPlaceholder,
186
- defaultValue: filterQuery,
187
- "aria-autocomplete": "list",
188
- "aria-expanded": true,
189
- "aria-controls": listboxId,
190
- "aria-describedby": showStatus ? statusId : undefined,
191
- onKeyDown: event => {
192
- // Prevent interfering with the matcher of Headless UI
193
- // https://mathiasbynens.be/notes/javascript-unicode#regex
194
- if (/^.$/u.test(event.key)) {
195
- event.stopPropagation();
196
- }
197
- },
198
- onChange: event => {
199
- // Free up resources and ensure not to go out of bounds when the
200
- // resulting item count is less than before
201
- const inputValue = event.currentTarget.value;
202
- // Free up resources and ensure not to go out of bounds
203
- setMountedIndexes([]);
204
- onFilterChange(inputValue);
205
- },
206
- onInput: event => {
207
- const inputValue = event.currentTarget.value;
208
- const inputElement = event.currentTarget;
209
- if (autocomplete && onAutocompleteSelect && inputValue) {
210
- setTimeout(() => {
211
- if (inputElement.value === inputValue && inputValue.length > 2) {
212
- const matchedValue = findMatchingItem(inputValue);
213
- if (matchedValue !== null) {
214
- onAutocompleteSelect(matchedValue);
215
- }
216
- }
217
- }, 50);
218
- }
219
- }
220
- })
221
- }) : null, /*#__PURE__*/jsxs("section", {
222
- ref: listboxContainerRef,
223
- tabIndex: -1,
224
- className: clsx('np-select-input-listbox-container', virtualized && 'np-select-input-listbox-container--virtualized', needle == null &&
225
- // Groups aren't shown when filtering
226
- items.some(item => item.type === 'group') && 'np-select-input-listbox-container--has-group'),
227
- "data-wds-parent": parentId ?? undefined,
228
- children: [resultsEmpty ? /*#__PURE__*/jsxs("div", {
229
- id: statusId,
230
- className: "np-select-input-options-status",
231
- children: [/*#__PURE__*/jsx(CrossCircle, {
232
- size: 16,
233
- className: "np-select-input-options-status-icon"
234
- }), intl.formatMessage(messages.noResultsFound)]
235
- }) : null, /*#__PURE__*/jsx("div", {
236
- ref: listboxRef,
237
- id: listboxId,
238
- role: "listbox",
239
- "aria-orientation": "vertical",
240
- "aria-label": listBoxLabel,
241
- "aria-labelledby": listBoxLabelledBy,
242
- tabIndex: 0,
243
- className: "np-select-input-listbox",
244
- children: !virtualized ? filteredItems.map((_, index) => getItemNode(index)) : /*#__PURE__*/jsx(Virtualizer, {
245
- ref: virtualiserHandlerRef,
246
- data: filteredItems,
247
- keepMounted: mountedIndexes,
248
- scrollRef: listboxRef // `VList` doesn't expose this
249
- ,
250
- onScroll: async () => {
251
- if (!virtualiserHandlerRef.current) return;
252
- const startIndex = virtualiserHandlerRef.current.findItemIndex(virtualiserHandlerRef.current.scrollOffset);
253
- const endIndex = virtualiserHandlerRef.current.findItemIndex(virtualiserHandlerRef.current.scrollOffset + virtualiserHandlerRef.current.viewportSize);
254
- setMountedIndexes(prevMountedIndexes => {
255
- // Create an array of all indexes that should be visible
256
- const visibleIndexes = [];
257
- for (let index = startIndex; index <= endIndex; index += 1) {
258
- // eslint-disable-next-line functional/immutable-data
259
- visibleIndexes.push(index);
260
- }
261
- // Combine with previous indexes and sort
262
- return [...new Set([...prevMountedIndexes, ...visibleIndexes])].sort((a, b) => a - b);
263
- });
264
- },
265
- children: (item, index) =>
266
- /*#__PURE__*/
267
- // The position of each item can't be inferred by browsers when
268
- // virtualizing, as some of the items may not be in the DOM
269
- jsx(SelectInputItemsCountContext.Provider, {
270
- value: filteredItems.length,
271
- children: /*#__PURE__*/jsx(SelectInputItemPositionContext.Provider, {
272
- value: index + 1,
273
- children: getItemNode(index)
274
- })
275
- })
276
- })
277
- }), renderFooter != null ? /*#__PURE__*/jsx("footer", {
278
- className: "np-select-input-footer",
279
- children: /*#__PURE__*/jsx("div", {
280
- role: "none",
281
- onKeyDown: event => {
282
- // Prevent interfering with Headless UI
283
- if (event.key !== 'Escape') {
284
- event.stopPropagation();
285
- }
286
- },
287
- children: renderFooter({
288
- resultsEmpty,
289
- queryNormalized: needle
290
- })
291
- })
292
- }) : null]
293
- })]
294
- });
295
- }
296
-
297
- export { SelectInputOptions };
298
- //# sourceMappingURL=SelectInputOptions.mjs.map