@transferwise/components 0.0.0-experimental-8a855e9 → 0.0.0-experimental-841c8df

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 (247) hide show
  1. package/build/criticalBanner/CriticalCommsBanner.js +66 -2
  2. package/build/criticalBanner/CriticalCommsBanner.js.map +1 -1
  3. package/build/criticalBanner/CriticalCommsBanner.mjs +68 -4
  4. package/build/criticalBanner/CriticalCommsBanner.mjs.map +1 -1
  5. package/build/dateInput/DateInput.js +5 -12
  6. package/build/dateInput/DateInput.js.map +1 -1
  7. package/build/dateInput/DateInput.mjs +4 -11
  8. package/build/dateInput/DateInput.mjs.map +1 -1
  9. package/build/expressiveMoneyInput/currencySelector/CurrencySelector.js +8 -16
  10. package/build/expressiveMoneyInput/currencySelector/CurrencySelector.js.map +1 -1
  11. package/build/expressiveMoneyInput/currencySelector/CurrencySelector.mjs +6 -14
  12. package/build/expressiveMoneyInput/currencySelector/CurrencySelector.mjs.map +1 -1
  13. package/build/index.js +7 -14
  14. package/build/index.js.map +1 -1
  15. package/build/index.mjs +3 -10
  16. package/build/index.mjs.map +1 -1
  17. package/build/inputs/SelectInput.js +890 -0
  18. package/build/inputs/SelectInput.js.map +1 -0
  19. package/build/inputs/SelectInput.messages.js.map +1 -0
  20. package/build/inputs/SelectInput.messages.mjs.map +1 -0
  21. package/build/inputs/SelectInput.mjs +881 -0
  22. package/build/inputs/SelectInput.mjs.map +1 -0
  23. package/build/inputs/{SelectInput/BottomSheet/SelectInputBottomSheet.js → _BottomSheet.js} +7 -7
  24. package/build/inputs/_BottomSheet.js.map +1 -0
  25. package/build/inputs/{SelectInput/BottomSheet/SelectInputBottomSheet.mjs → _BottomSheet.mjs} +7 -7
  26. package/build/inputs/_BottomSheet.mjs.map +1 -0
  27. package/build/inputs/{SelectInput/ButtonInput/SelectInputButtonInput.js → _ButtonInput.js} +5 -5
  28. package/build/inputs/_ButtonInput.js.map +1 -0
  29. package/build/inputs/{SelectInput/ButtonInput/SelectInputButtonInput.mjs → _ButtonInput.mjs} +5 -5
  30. package/build/inputs/_ButtonInput.mjs.map +1 -0
  31. package/build/inputs/{SelectInput/Popover/SelectInputPopover.js → _Popover.js} +7 -7
  32. package/build/inputs/_Popover.js.map +1 -0
  33. package/build/inputs/{SelectInput/Popover/SelectInputPopover.mjs → _Popover.mjs} +7 -7
  34. package/build/inputs/_Popover.mjs.map +1 -0
  35. package/build/main.css +122 -105
  36. package/build/moneyInput/MoneyInput.js +2 -9
  37. package/build/moneyInput/MoneyInput.js.map +1 -1
  38. package/build/moneyInput/MoneyInput.mjs +1 -8
  39. package/build/moneyInput/MoneyInput.mjs.map +1 -1
  40. package/build/phoneNumberInput/PhoneNumberInput.js +3 -10
  41. package/build/phoneNumberInput/PhoneNumberInput.js.map +1 -1
  42. package/build/phoneNumberInput/PhoneNumberInput.mjs +2 -9
  43. package/build/phoneNumberInput/PhoneNumberInput.mjs.map +1 -1
  44. package/build/styles/criticalBanner/CriticalCommsBanner.css +32 -15
  45. package/build/styles/main.css +122 -105
  46. package/build/types/criticalBanner/CriticalCommsBanner.d.ts +4 -1
  47. package/build/types/criticalBanner/CriticalCommsBanner.d.ts.map +1 -1
  48. package/build/types/criticalBanner/index.d.ts +1 -0
  49. package/build/types/criticalBanner/index.d.ts.map +1 -1
  50. package/build/types/inputs/{SelectInput/SelectInput.types.d.ts → SelectInput.d.ts} +38 -12
  51. package/build/types/inputs/SelectInput.d.ts.map +1 -0
  52. package/build/types/inputs/SelectInput.messages.d.ts.map +1 -0
  53. package/build/types/inputs/{SelectInput/BottomSheet/SelectInputBottomSheet.d.ts → _BottomSheet.d.ts} +3 -3
  54. package/build/types/inputs/_BottomSheet.d.ts.map +1 -0
  55. package/build/types/inputs/_ButtonInput.d.ts +5 -0
  56. package/build/types/inputs/_ButtonInput.d.ts.map +1 -0
  57. package/build/types/inputs/{SelectInput/Popover/SelectInputPopover.d.ts → _Popover.d.ts} +3 -3
  58. package/build/types/inputs/_Popover.d.ts.map +1 -0
  59. package/package.json +3 -3
  60. package/src/criticalBanner/CriticalCommsBanner.css +32 -15
  61. package/src/criticalBanner/CriticalCommsBanner.less +45 -36
  62. package/src/criticalBanner/CriticalCommsBanner.story.tsx +15 -0
  63. package/src/criticalBanner/CriticalCommsBanner.tsx +59 -4
  64. package/src/criticalBanner/index.ts +1 -0
  65. package/src/inputs/{SelectInput/_stories/SelectInput.docs.mdx → SelectInput.docs.mdx} +1 -0
  66. package/src/inputs/SelectInput.less +219 -0
  67. package/src/inputs/{SelectInput/_stories/SelectInput.story.tsx → SelectInput.story.tsx} +8 -11
  68. package/src/inputs/{SelectInput/_stories/SelectInput.test.story.tsx → SelectInput.test.story.tsx} +10 -5
  69. package/src/inputs/{SelectInput/SelectInput.test.tsx → SelectInput.test.tsx} +11 -9
  70. package/src/inputs/SelectInput.tsx +1269 -0
  71. package/src/inputs/{SelectInput/BottomSheet/SelectInputBottomSheet.tsx → _BottomSheet.tsx} +7 -7
  72. package/src/inputs/{SelectInput/ButtonInput/SelectInputButtonInput.tsx → _ButtonInput.tsx} +5 -5
  73. package/src/inputs/{SelectInput/Popover/SelectInputPopover.tsx → _Popover.tsx} +7 -7
  74. package/src/main.css +122 -105
  75. package/src/main.less +1 -1
  76. package/build/inputs/SelectInput/BottomSheet/SelectInputBottomSheet.js.map +0 -1
  77. package/build/inputs/SelectInput/BottomSheet/SelectInputBottomSheet.mjs.map +0 -1
  78. package/build/inputs/SelectInput/ButtonInput/SelectInputButtonInput.js.map +0 -1
  79. package/build/inputs/SelectInput/ButtonInput/SelectInputButtonInput.mjs.map +0 -1
  80. package/build/inputs/SelectInput/ClearButton/SelectInputClearButton.js +0 -27
  81. package/build/inputs/SelectInput/ClearButton/SelectInputClearButton.js.map +0 -1
  82. package/build/inputs/SelectInput/ClearButton/SelectInputClearButton.mjs +0 -25
  83. package/build/inputs/SelectInput/ClearButton/SelectInputClearButton.mjs.map +0 -1
  84. package/build/inputs/SelectInput/DefaultRenderTrigger/SelectInputDefaultRenderTrigger.js +0 -59
  85. package/build/inputs/SelectInput/DefaultRenderTrigger/SelectInputDefaultRenderTrigger.js.map +0 -1
  86. package/build/inputs/SelectInput/DefaultRenderTrigger/SelectInputDefaultRenderTrigger.mjs +0 -56
  87. package/build/inputs/SelectInput/DefaultRenderTrigger/SelectInputDefaultRenderTrigger.mjs.map +0 -1
  88. package/build/inputs/SelectInput/ItemView/GroupItemView/SelectInputGroupItemView.js +0 -50
  89. package/build/inputs/SelectInput/ItemView/GroupItemView/SelectInputGroupItemView.js.map +0 -1
  90. package/build/inputs/SelectInput/ItemView/GroupItemView/SelectInputGroupItemView.mjs +0 -48
  91. package/build/inputs/SelectInput/ItemView/GroupItemView/SelectInputGroupItemView.mjs.map +0 -1
  92. package/build/inputs/SelectInput/ItemView/SelectInputItemView.js +0 -47
  93. package/build/inputs/SelectInput/ItemView/SelectInputItemView.js.map +0 -1
  94. package/build/inputs/SelectInput/ItemView/SelectInputItemView.mjs +0 -45
  95. package/build/inputs/SelectInput/ItemView/SelectInputItemView.mjs.map +0 -1
  96. package/build/inputs/SelectInput/Option/SelectInputOption.js +0 -42
  97. package/build/inputs/SelectInput/Option/SelectInputOption.js.map +0 -1
  98. package/build/inputs/SelectInput/Option/SelectInputOption.mjs +0 -40
  99. package/build/inputs/SelectInput/Option/SelectInputOption.mjs.map +0 -1
  100. package/build/inputs/SelectInput/OptionContent/SelectInputOptionContent.js +0 -40
  101. package/build/inputs/SelectInput/OptionContent/SelectInputOptionContent.js.map +0 -1
  102. package/build/inputs/SelectInput/OptionContent/SelectInputOptionContent.mjs +0 -38
  103. package/build/inputs/SelectInput/OptionContent/SelectInputOptionContent.mjs.map +0 -1
  104. package/build/inputs/SelectInput/Options/OptionsContainer/SelectInputOptionsContainer.js +0 -48
  105. package/build/inputs/SelectInput/Options/OptionsContainer/SelectInputOptionsContainer.js.map +0 -1
  106. package/build/inputs/SelectInput/Options/OptionsContainer/SelectInputOptionsContainer.mjs +0 -46
  107. package/build/inputs/SelectInput/Options/OptionsContainer/SelectInputOptionsContainer.mjs.map +0 -1
  108. package/build/inputs/SelectInput/Options/SelectInputOptions.js +0 -300
  109. package/build/inputs/SelectInput/Options/SelectInputOptions.js.map +0 -1
  110. package/build/inputs/SelectInput/Options/SelectInputOptions.mjs +0 -298
  111. package/build/inputs/SelectInput/Options/SelectInputOptions.mjs.map +0 -1
  112. package/build/inputs/SelectInput/Popover/SelectInputPopover.js.map +0 -1
  113. package/build/inputs/SelectInput/Popover/SelectInputPopover.mjs.map +0 -1
  114. package/build/inputs/SelectInput/SelectInput.contexts.js +0 -29
  115. package/build/inputs/SelectInput/SelectInput.contexts.js.map +0 -1
  116. package/build/inputs/SelectInput/SelectInput.contexts.mjs +0 -24
  117. package/build/inputs/SelectInput/SelectInput.contexts.mjs.map +0 -1
  118. package/build/inputs/SelectInput/SelectInput.js +0 -222
  119. package/build/inputs/SelectInput/SelectInput.js.map +0 -1
  120. package/build/inputs/SelectInput/SelectInput.messages.js.map +0 -1
  121. package/build/inputs/SelectInput/SelectInput.messages.mjs.map +0 -1
  122. package/build/inputs/SelectInput/SelectInput.mjs +0 -216
  123. package/build/inputs/SelectInput/SelectInput.mjs.map +0 -1
  124. package/build/inputs/SelectInput/SelectInput.utils.js +0 -164
  125. package/build/inputs/SelectInput/SelectInput.utils.js.map +0 -1
  126. package/build/inputs/SelectInput/SelectInput.utils.mjs +0 -154
  127. package/build/inputs/SelectInput/SelectInput.utils.mjs.map +0 -1
  128. package/build/inputs/SelectInput/TriggerButton/SelectInputTriggerButton.js +0 -42
  129. package/build/inputs/SelectInput/TriggerButton/SelectInputTriggerButton.js.map +0 -1
  130. package/build/inputs/SelectInput/TriggerButton/SelectInputTriggerButton.mjs +0 -36
  131. package/build/inputs/SelectInput/TriggerButton/SelectInputTriggerButton.mjs.map +0 -1
  132. package/build/styles/inputs/SelectInput/BottomSheet/SelectInputBottomSheet.css +0 -96
  133. package/build/styles/inputs/SelectInput/ButtonInput/SelectInputButtonInput.css +0 -16
  134. package/build/styles/inputs/SelectInput/ClearButton/SelectInputClearButton.css +0 -46
  135. package/build/styles/inputs/SelectInput/ItemView/SelectInputItemView.css +0 -16
  136. package/build/styles/inputs/SelectInput/Option/SelectInputOption.css +0 -33
  137. package/build/styles/inputs/SelectInput/OptionContent/SelectInputOptionContent.css +0 -37
  138. package/build/styles/inputs/SelectInput/Options/SelectInputOptions.css +0 -81
  139. package/build/styles/inputs/SelectInput/Popover/SelectInputPopover.css +0 -46
  140. package/build/types/inputs/SelectInput/BottomSheet/SelectInputBottomSheet.d.ts.map +0 -1
  141. package/build/types/inputs/SelectInput/BottomSheet/index.d.ts +0 -3
  142. package/build/types/inputs/SelectInput/BottomSheet/index.d.ts.map +0 -1
  143. package/build/types/inputs/SelectInput/ButtonInput/SelectInputButtonInput.d.ts +0 -5
  144. package/build/types/inputs/SelectInput/ButtonInput/SelectInputButtonInput.d.ts.map +0 -1
  145. package/build/types/inputs/SelectInput/ButtonInput/index.d.ts +0 -3
  146. package/build/types/inputs/SelectInput/ButtonInput/index.d.ts.map +0 -1
  147. package/build/types/inputs/SelectInput/ClearButton/SelectInputClearButton.d.ts +0 -7
  148. package/build/types/inputs/SelectInput/ClearButton/SelectInputClearButton.d.ts.map +0 -1
  149. package/build/types/inputs/SelectInput/ClearButton/index.d.ts +0 -3
  150. package/build/types/inputs/SelectInput/ClearButton/index.d.ts.map +0 -1
  151. package/build/types/inputs/SelectInput/DefaultRenderTrigger/SelectInputDefaultRenderTrigger.d.ts +0 -16
  152. package/build/types/inputs/SelectInput/DefaultRenderTrigger/SelectInputDefaultRenderTrigger.d.ts.map +0 -1
  153. package/build/types/inputs/SelectInput/DefaultRenderTrigger/index.d.ts +0 -2
  154. package/build/types/inputs/SelectInput/DefaultRenderTrigger/index.d.ts.map +0 -1
  155. package/build/types/inputs/SelectInput/ItemView/GroupItemView/SelectInputGroupItemView.d.ts +0 -9
  156. package/build/types/inputs/SelectInput/ItemView/GroupItemView/SelectInputGroupItemView.d.ts.map +0 -1
  157. package/build/types/inputs/SelectInput/ItemView/GroupItemView/index.d.ts +0 -3
  158. package/build/types/inputs/SelectInput/ItemView/GroupItemView/index.d.ts.map +0 -1
  159. package/build/types/inputs/SelectInput/ItemView/SelectInputItemView.d.ts +0 -11
  160. package/build/types/inputs/SelectInput/ItemView/SelectInputItemView.d.ts.map +0 -1
  161. package/build/types/inputs/SelectInput/ItemView/index.d.ts +0 -4
  162. package/build/types/inputs/SelectInput/ItemView/index.d.ts.map +0 -1
  163. package/build/types/inputs/SelectInput/Option/SelectInputOption.d.ts +0 -11
  164. package/build/types/inputs/SelectInput/Option/SelectInputOption.d.ts.map +0 -1
  165. package/build/types/inputs/SelectInput/Option/index.d.ts +0 -3
  166. package/build/types/inputs/SelectInput/Option/index.d.ts.map +0 -1
  167. package/build/types/inputs/SelectInput/OptionContent/SelectInputOptionContent.d.ts +0 -13
  168. package/build/types/inputs/SelectInput/OptionContent/SelectInputOptionContent.d.ts.map +0 -1
  169. package/build/types/inputs/SelectInput/OptionContent/index.d.ts +0 -3
  170. package/build/types/inputs/SelectInput/OptionContent/index.d.ts.map +0 -1
  171. package/build/types/inputs/SelectInput/Options/OptionsContainer/SelectInputOptionsContainer.d.ts +0 -9
  172. package/build/types/inputs/SelectInput/Options/OptionsContainer/SelectInputOptionsContainer.d.ts.map +0 -1
  173. package/build/types/inputs/SelectInput/Options/OptionsContainer/index.d.ts +0 -3
  174. package/build/types/inputs/SelectInput/Options/OptionsContainer/index.d.ts.map +0 -1
  175. package/build/types/inputs/SelectInput/Options/SelectInputOptions.d.ts +0 -21
  176. package/build/types/inputs/SelectInput/Options/SelectInputOptions.d.ts.map +0 -1
  177. package/build/types/inputs/SelectInput/Options/index.d.ts +0 -4
  178. package/build/types/inputs/SelectInput/Options/index.d.ts.map +0 -1
  179. package/build/types/inputs/SelectInput/Popover/SelectInputPopover.d.ts.map +0 -1
  180. package/build/types/inputs/SelectInput/Popover/index.d.ts +0 -3
  181. package/build/types/inputs/SelectInput/Popover/index.d.ts.map +0 -1
  182. package/build/types/inputs/SelectInput/SelectInput.contexts.d.ts +0 -33
  183. package/build/types/inputs/SelectInput/SelectInput.contexts.d.ts.map +0 -1
  184. package/build/types/inputs/SelectInput/SelectInput.d.ts +0 -10
  185. package/build/types/inputs/SelectInput/SelectInput.d.ts.map +0 -1
  186. package/build/types/inputs/SelectInput/SelectInput.messages.d.ts.map +0 -1
  187. package/build/types/inputs/SelectInput/SelectInput.types.d.ts.map +0 -1
  188. package/build/types/inputs/SelectInput/SelectInput.utils.d.ts +0 -61
  189. package/build/types/inputs/SelectInput/SelectInput.utils.d.ts.map +0 -1
  190. package/build/types/inputs/SelectInput/TriggerButton/SelectInputTriggerButton.d.ts +0 -12
  191. package/build/types/inputs/SelectInput/TriggerButton/SelectInputTriggerButton.d.ts.map +0 -1
  192. package/build/types/inputs/SelectInput/TriggerButton/index.d.ts +0 -3
  193. package/build/types/inputs/SelectInput/TriggerButton/index.d.ts.map +0 -1
  194. package/build/types/inputs/SelectInput/components.d.ts +0 -10
  195. package/build/types/inputs/SelectInput/components.d.ts.map +0 -1
  196. package/build/types/inputs/SelectInput/index.d.ts +0 -12
  197. package/build/types/inputs/SelectInput/index.d.ts.map +0 -1
  198. package/src/inputs/SelectInput/BottomSheet/SelectInputBottomSheet.css +0 -96
  199. package/src/inputs/SelectInput/BottomSheet/index.ts +0 -2
  200. package/src/inputs/SelectInput/ButtonInput/SelectInputButtonInput.css +0 -16
  201. package/src/inputs/SelectInput/ButtonInput/index.ts +0 -2
  202. package/src/inputs/SelectInput/ClearButton/SelectInputClearButton.css +0 -46
  203. package/src/inputs/SelectInput/ClearButton/SelectInputClearButton.less +0 -40
  204. package/src/inputs/SelectInput/ClearButton/SelectInputClearButton.tsx +0 -29
  205. package/src/inputs/SelectInput/ClearButton/index.ts +0 -2
  206. package/src/inputs/SelectInput/DefaultRenderTrigger/SelectInputDefaultRenderTrigger.tsx +0 -74
  207. package/src/inputs/SelectInput/DefaultRenderTrigger/index.ts +0 -5
  208. package/src/inputs/SelectInput/ItemView/GroupItemView/SelectInputGroupItemView.tsx +0 -61
  209. package/src/inputs/SelectInput/ItemView/GroupItemView/index.ts +0 -2
  210. package/src/inputs/SelectInput/ItemView/SelectInputItemView.css +0 -16
  211. package/src/inputs/SelectInput/ItemView/SelectInputItemView.less +0 -17
  212. package/src/inputs/SelectInput/ItemView/SelectInputItemView.tsx +0 -48
  213. package/src/inputs/SelectInput/ItemView/index.ts +0 -3
  214. package/src/inputs/SelectInput/Option/SelectInputOption.css +0 -33
  215. package/src/inputs/SelectInput/Option/SelectInputOption.less +0 -32
  216. package/src/inputs/SelectInput/Option/SelectInputOption.tsx +0 -57
  217. package/src/inputs/SelectInput/Option/index.ts +0 -2
  218. package/src/inputs/SelectInput/OptionContent/SelectInputOptionContent.css +0 -37
  219. package/src/inputs/SelectInput/OptionContent/SelectInputOptionContent.less +0 -38
  220. package/src/inputs/SelectInput/OptionContent/SelectInputOptionContent.tsx +0 -72
  221. package/src/inputs/SelectInput/OptionContent/index.ts +0 -2
  222. package/src/inputs/SelectInput/Options/OptionsContainer/SelectInputOptionsContainer.tsx +0 -59
  223. package/src/inputs/SelectInput/Options/OptionsContainer/index.ts +0 -2
  224. package/src/inputs/SelectInput/Options/SelectInputOptions.css +0 -81
  225. package/src/inputs/SelectInput/Options/SelectInputOptions.less +0 -77
  226. package/src/inputs/SelectInput/Options/SelectInputOptions.tsx +0 -411
  227. package/src/inputs/SelectInput/Options/index.ts +0 -3
  228. package/src/inputs/SelectInput/Popover/SelectInputPopover.css +0 -46
  229. package/src/inputs/SelectInput/Popover/index.ts +0 -2
  230. package/src/inputs/SelectInput/SelectInput.contexts.tsx +0 -40
  231. package/src/inputs/SelectInput/SelectInput.less +0 -22
  232. package/src/inputs/SelectInput/SelectInput.tsx +0 -257
  233. package/src/inputs/SelectInput/SelectInput.types.ts +0 -113
  234. package/src/inputs/SelectInput/SelectInput.utils.ts +0 -206
  235. package/src/inputs/SelectInput/TriggerButton/SelectInputTriggerButton.tsx +0 -36
  236. package/src/inputs/SelectInput/TriggerButton/index.ts +0 -5
  237. package/src/inputs/SelectInput/components.ts +0 -10
  238. package/src/inputs/SelectInput/index.ts +0 -14
  239. package/build/inputs/{SelectInput/SelectInput.messages.js → SelectInput.messages.js} +0 -0
  240. package/build/inputs/{SelectInput/SelectInput.messages.mjs → SelectInput.messages.mjs} +0 -0
  241. package/build/styles/inputs/{SelectInput/SelectInput.css → SelectInput.css} +90 -90
  242. package/build/types/inputs/{SelectInput/SelectInput.messages.d.ts → SelectInput.messages.d.ts} +0 -0
  243. package/src/inputs/{SelectInput/SelectInput.css → SelectInput.css} +90 -90
  244. /package/src/inputs/{SelectInput/SelectInput.messages.ts → SelectInput.messages.ts} +0 -0
  245. /package/src/inputs/{SelectInput/BottomSheet/SelectInputBottomSheet.less → _BottomSheet.less} +0 -0
  246. /package/src/inputs/{SelectInput/ButtonInput/SelectInputButtonInput.less → _ButtonInput.less} +0 -0
  247. /package/src/inputs/{SelectInput/Popover/SelectInputPopover.less → _Popover.less} +0 -0
@@ -1,61 +0,0 @@
1
- import { clsx } from 'clsx';
2
- import { useId } from 'react';
3
- import Header from '../../../../header';
4
- import Section from '../../../../section';
5
- import { SelectInputGroupItem } from '../../SelectInput.types';
6
- import { SelectInputItemView, SelectInputItemViewProps } from '..';
7
-
8
- export interface SelectInputGroupItemViewProps<T = string> extends SelectInputItemViewProps<
9
- T,
10
- SelectInputGroupItem<T | undefined>
11
- > {}
12
-
13
- /**
14
- * Component that renders a group of SelectInput options with a header.
15
- */
16
- export function SelectInputGroupItemView<T = string>({
17
- item,
18
- renderValue,
19
- needle,
20
- }: SelectInputGroupItemViewProps<T>) {
21
- const headerId = useId();
22
-
23
- const header = (
24
- <Header
25
- as="header"
26
- role="none"
27
- id={headerId}
28
- title={item.label}
29
- // @ts-expect-error when we migrate ActionButton to new Button this should be sorted
30
- action={
31
- item.action && {
32
- text: item.action.label,
33
- onClick: item.action.onClick,
34
- }
35
- }
36
- className="np-select-input-group-item-header p-x-1"
37
- />
38
- );
39
-
40
- return (
41
- // An empty container may be rendered when no options match `needle`
42
- // However, pre-filtering would result in worse performance overall
43
- <Section
44
- as="section"
45
- role="group"
46
- aria-labelledby={headerId}
47
- className={clsx('m-y-0', needle === null && 'np-select-input-group-item--without-needle')}
48
- >
49
- {needle == null ? header : null}
50
- {item.options.map((option, index) => (
51
- <SelectInputItemView
52
- // eslint-disable-next-line react/no-array-index-key
53
- key={index}
54
- item={option}
55
- renderValue={renderValue}
56
- needle={needle}
57
- />
58
- ))}
59
- </Section>
60
- );
61
- }
@@ -1,2 +0,0 @@
1
- export { SelectInputGroupItemView } from './SelectInputGroupItemView';
2
- export type { SelectInputGroupItemViewProps } from './SelectInputGroupItemView';
@@ -1,16 +0,0 @@
1
- .np-select-input-group-item--without-needle:first-child {
2
- margin-top: calc(-1 * 8px);
3
- margin-top: calc(-1 * var(--size-8));
4
- }
5
- .np-select-input-group-item-header {
6
- position: sticky;
7
- top: 0px;
8
- z-index: 10;
9
- background-color: #ffffff;
10
- background-color: var(--color-background-elevated);
11
- }
12
- .np-select-input-separator-item {
13
- margin: 8px;
14
- margin: var(--size-8);
15
- border-top-width: 1px;
16
- }
@@ -1,17 +0,0 @@
1
- .np-select-input-group-item {
2
- &--without-needle:first-child {
3
- margin-top: calc(-1 * var(--size-8));
4
- }
5
- }
6
-
7
- .np-select-input-group-item-header {
8
- position: sticky;
9
- top: 0px;
10
- z-index: 10;
11
- background-color: var(--color-background-elevated);
12
- }
13
-
14
- .np-select-input-separator-item {
15
- margin: var(--size-8);
16
- border-top-width: 1px;
17
- }
@@ -1,48 +0,0 @@
1
- import { selectInputOptionItemIncludesNeedle } from '../SelectInput.utils';
2
- import { SelectInputItem, SelectInputProps } from '../SelectInput.types';
3
- import { SelectInputOption } from '../Option';
4
- import { SelectInputGroupItemView } from './GroupItemView';
5
-
6
- export interface SelectInputItemViewProps<
7
- T = string,
8
- I extends SelectInputItem<T | undefined> = SelectInputItem<T | undefined>,
9
- > extends Required<Pick<SelectInputProps<T>, 'renderValue'>> {
10
- item: I;
11
- needle: string | null | undefined;
12
- }
13
-
14
- /**
15
- * Component that renders different types of SelectInput items:
16
- * options, groups, or separators.
17
- */
18
- export function SelectInputItemView<T = string>({
19
- item,
20
- renderValue,
21
- needle,
22
- }: SelectInputItemViewProps<T>) {
23
- switch (item.type) {
24
- case 'option': {
25
- if (
26
- item.value != null &&
27
- (needle == null || selectInputOptionItemIncludesNeedle(item, needle))
28
- ) {
29
- return (
30
- <SelectInputOption value={item.value} disabled={item.disabled}>
31
- {renderValue(item.value, false)}
32
- </SelectInputOption>
33
- );
34
- }
35
- break;
36
- }
37
- case 'group': {
38
- return <SelectInputGroupItemView item={item} renderValue={renderValue} needle={needle} />;
39
- }
40
- case 'separator': {
41
- if (needle == null) {
42
- return <hr className="np-select-input-separator-item" />;
43
- }
44
- break;
45
- }
46
- }
47
- return null;
48
- }
@@ -1,3 +0,0 @@
1
- export { SelectInputItemView } from './SelectInputItemView';
2
- export type { SelectInputItemViewProps } from './SelectInputItemView';
3
- export * from './GroupItemView';
@@ -1,33 +0,0 @@
1
- .np-select-input-option-container {
2
- display: flex;
3
- cursor: default;
4
- -webkit-user-select: none;
5
- -moz-user-select: none;
6
- user-select: none;
7
- align-items: center;
8
- -moz-column-gap: 8px;
9
- column-gap: 8px;
10
- -moz-column-gap: var(--size-8);
11
- column-gap: var(--size-8);
12
- border-radius: 10px;
13
- border-radius: var(--radius-small);
14
- padding: 12px 16px;
15
- padding: var(--size-12) var(--size-16);
16
- color: var(--color-interactive-primary);
17
- }
18
- .np-select-input-option-container:focus {
19
- outline: none;
20
- }
21
- .np-select-input-option-container--active {
22
- box-shadow: inset 0 0 0 1px #c9cbce;
23
- box-shadow: inset 0 0 0 1px var(--color-interactive-secondary);
24
- }
25
- .np-select-input-option-container--disabled {
26
- opacity: 0.45;
27
- }
28
- .np-select-input-option-check--not-selected {
29
- visibility: hidden;
30
- }
31
- .np-select-input-option {
32
- flex: 1;
33
- }
@@ -1,32 +0,0 @@
1
- .np-select-input-option-container {
2
- display: flex;
3
- cursor: default;
4
- user-select: none;
5
- align-items: center;
6
- column-gap: var(--size-8);
7
- border-radius: var(--radius-small);
8
- padding: var(--size-12) var(--size-16);
9
- color: var(--color-interactive-primary);
10
-
11
- &:focus {
12
- outline: none;
13
- }
14
-
15
- &--active {
16
- box-shadow: inset 0 0 0 1px var(--color-interactive-secondary);
17
- }
18
-
19
- &--disabled {
20
- opacity: 0.45;
21
- }
22
- }
23
-
24
- .np-select-input-option-check {
25
- &--not-selected {
26
- visibility: hidden;
27
- }
28
- }
29
-
30
- .np-select-input-option {
31
- flex: 1;
32
- }
@@ -1,57 +0,0 @@
1
- import { Check } from '@transferwise/icons';
2
- import { clsx } from 'clsx';
3
- import { useContext } from 'react';
4
- import { ListboxOption } from '@headlessui/react';
5
- import {
6
- SelectInputItemsCountContext,
7
- SelectInputItemPositionContext,
8
- } from '../SelectInput.contexts';
9
-
10
- export interface SelectInputOptionProps<T = string> {
11
- value: T;
12
- disabled?: boolean;
13
- children?: React.ReactNode;
14
- }
15
-
16
- /**
17
- * A selectable option in a SelectInput dropdown.
18
- * Includes accessibility support and styling for selected, active, and disabled states.
19
- */
20
- export function SelectInputOption<T = string>({
21
- value,
22
- disabled,
23
- children,
24
- }: SelectInputOptionProps<T>) {
25
- const itemsCount = useContext(SelectInputItemsCountContext);
26
- const itemPosition = useContext(SelectInputItemPositionContext);
27
-
28
- return (
29
- <ListboxOption
30
- as="div"
31
- value={value}
32
- aria-setsize={itemsCount}
33
- aria-posinset={itemPosition}
34
- disabled={disabled}
35
- className={({ active, disabled: uiDisabled }) =>
36
- clsx(
37
- 'np-select-input-option-container np-text-body-large',
38
- active && 'np-select-input-option-container--active',
39
- uiDisabled && 'np-select-input-option-container--disabled',
40
- )
41
- }
42
- >
43
- {({ selected }) => (
44
- <>
45
- <div className="np-select-input-option">{children}</div>
46
- <Check
47
- size={16}
48
- className={clsx(
49
- 'np-select-input-option-check',
50
- !selected && 'np-select-input-option-check--not-selected',
51
- )}
52
- />
53
- </>
54
- )}
55
- </ListboxOption>
56
- );
57
- }
@@ -1,2 +0,0 @@
1
- export { SelectInputOption } from './SelectInputOption';
2
- export type { SelectInputOptionProps } from './SelectInputOption';
@@ -1,37 +0,0 @@
1
- .np-select-input-option-content-container {
2
- display: flex;
3
- align-items: center;
4
- -moz-column-gap: 8px;
5
- column-gap: 8px;
6
- -moz-column-gap: var(--size-8);
7
- column-gap: var(--size-8);
8
- color: #37517e;
9
- color: var(--color-content-primary);
10
- }
11
- .np-select-input-option-content-icon {
12
- display: flex;
13
- }
14
- .np-select-input-option-content-icon--not-within-trigger {
15
- align-self: flex-start;
16
- }
17
- .np-select-input-option-content-text {
18
- display: flex;
19
- flex: 1;
20
- flex-direction: column;
21
- overflow: hidden;
22
- }
23
- .np-select-input-option-content-text-secondary {
24
- color: #5d7079;
25
- color: var(--color-content-secondary);
26
- }
27
- .np-select-input-option-content-text-within-trigger {
28
- overflow: hidden;
29
- text-overflow: ellipsis;
30
- white-space: nowrap;
31
- }
32
- .np-select-input-option-content-text-line-1 > :not([hidden]) ~ :not([hidden]) {
33
- margin-right: 8px;
34
- margin-right: var(--size-8);
35
- margin-left: 8px;
36
- margin-left: var(--size-8);
37
- }
@@ -1,38 +0,0 @@
1
- .np-select-input-option-content-container {
2
- display: flex;
3
- align-items: center;
4
- column-gap: var(--size-8);
5
- color: var(--color-content-primary);
6
- }
7
-
8
- .np-select-input-option-content-icon {
9
- display: flex;
10
-
11
- &--not-within-trigger {
12
- align-self: flex-start;
13
- }
14
- }
15
-
16
- .np-select-input-option-content-text {
17
- display: flex;
18
- flex: 1;
19
- flex-direction: column;
20
- overflow: hidden;
21
- }
22
-
23
- .np-select-input-option-content-text-secondary {
24
- color: var(--color-content-secondary);
25
- }
26
-
27
- .np-select-input-option-content-text-within-trigger {
28
- overflow: hidden;
29
- text-overflow: ellipsis;
30
- white-space: nowrap;
31
- }
32
-
33
- .np-select-input-option-content-text-line-1 {
34
- > :not([hidden]) ~ :not([hidden]) {
35
- margin-right: var(--size-8);
36
- margin-left: var(--size-8);
37
- }
38
- }
@@ -1,72 +0,0 @@
1
- import { clsx } from 'clsx';
2
- import { useContext } from 'react';
3
- import { SelectInputOptionContentWithinTriggerContext } from '../SelectInput.contexts';
4
-
5
- export interface SelectInputOptionContentProps {
6
- title: React.ReactNode;
7
- note?: string;
8
- description?: string;
9
- icon?: React.ReactNode;
10
- }
11
-
12
- /**
13
- * Component for rendering structured content within a SelectInput option.
14
- * Supports title, optional note, description, and icon with different styling
15
- * based on whether it's rendered within the trigger button or the dropdown.
16
- */
17
- export function SelectInputOptionContent({
18
- title,
19
- note,
20
- description,
21
- icon,
22
- }: SelectInputOptionContentProps) {
23
- const withinTrigger = useContext(SelectInputOptionContentWithinTriggerContext);
24
-
25
- return (
26
- <div
27
- className={clsx(
28
- 'np-select-input-option-content-container',
29
- (note || description) && 'np-text-body-large',
30
- )}
31
- >
32
- {icon ? (
33
- <div
34
- className={clsx(
35
- 'np-select-input-option-content-icon',
36
- !withinTrigger && 'np-select-input-option-content-icon--not-within-trigger',
37
- )}
38
- >
39
- {icon}
40
- </div>
41
- ) : null}
42
-
43
- <div className="np-select-input-option-content-text">
44
- <div
45
- className={clsx(
46
- 'np-select-input-option-content-text-line-1',
47
- withinTrigger && 'np-select-input-option-content-text-within-trigger',
48
- )}
49
- >
50
- <div className="d-inline">{title}</div>
51
- {note ? (
52
- <span className="np-select-input-option-content-text-secondary np-text-body-default">
53
- {note}
54
- </span>
55
- ) : null}
56
- </div>
57
-
58
- {description ? (
59
- <div
60
- className={clsx(
61
- 'np-select-input-option-content-text-secondary np-text-body-default',
62
- withinTrigger &&
63
- 'np-select-input-option-content-text-within-trigger np-select-input-option-description-in-trigger',
64
- )}
65
- >
66
- {description}
67
- </div>
68
- ) : null}
69
- </div>
70
- </div>
71
- );
72
- }
@@ -1,2 +0,0 @@
1
- export { SelectInputOptionContent } from './SelectInputOptionContent';
2
- export type { SelectInputOptionContentProps } from './SelectInputOptionContent';
@@ -1,59 +0,0 @@
1
- import { forwardRef, useEffect } from 'react';
2
- import { useEffectEvent } from '../../../../common/hooks/useEffectEvent';
3
-
4
- export interface SelectInputOptionsContainerProps extends React.ComponentPropsWithRef<'div'> {
5
- onAriaActiveDescendantChange: (value: React.AriaAttributes['aria-activedescendant']) => void;
6
- }
7
-
8
- /**
9
- * Container component for SelectInput options.
10
- * Handles keyboard navigation and accessibility features.
11
- */
12
- export const SelectInputOptionsContainer = forwardRef(function SelectInputOptionsContainer(
13
- {
14
- 'aria-orientation': ariaOrientation,
15
- 'aria-activedescendant': ariaActiveDescendant,
16
- role,
17
- tabIndex,
18
- onAriaActiveDescendantChange,
19
- onKeyDown,
20
- ...restProps
21
- }: SelectInputOptionsContainerProps,
22
- ref: React.ForwardedRef<HTMLDivElement | null>,
23
- ) {
24
- const handleAriaActiveDescendantChange = useEffectEvent(onAriaActiveDescendantChange);
25
- useEffect(() => {
26
- handleAriaActiveDescendantChange(ariaActiveDescendant);
27
- }, [ariaActiveDescendant, handleAriaActiveDescendantChange]);
28
-
29
- return (
30
- <div
31
- ref={ref}
32
- role="none"
33
- onKeyDown={(event) => {
34
- // Prevent confirmation close without an active item
35
- if (event.key === 'Enter' && ariaActiveDescendant == null) {
36
- return;
37
- }
38
-
39
- // Required to make ListBox focusable
40
- if (event.key === 'Tab') {
41
- return;
42
- }
43
-
44
- // Prevent absorbing Escape early
45
- if (event.key === 'Escape') {
46
- onKeyDown?.({
47
- ...event,
48
- preventDefault: () => {},
49
- stopPropagation: () => {},
50
- });
51
- return;
52
- }
53
-
54
- onKeyDown?.(event);
55
- }}
56
- {...restProps}
57
- />
58
- );
59
- });
@@ -1,2 +0,0 @@
1
- export { SelectInputOptionsContainer } from './SelectInputOptionsContainer';
2
- export type { SelectInputOptionsContainerProps } from './SelectInputOptionsContainer';
@@ -1,81 +0,0 @@
1
- .np-select-input-options-container {
2
- display: flex;
3
- height: 100%;
4
- flex-direction: column;
5
- }
6
- .np-select-input-options-container:focus {
7
- outline: none;
8
- }
9
- @media (min-width: 576px) {
10
- .np-select-input-options-container {
11
- max-height: 28rem /* 448px */;
12
- }
13
- }
14
- .np-select-input-options-status {
15
- display: flex;
16
- align-items: center;
17
- -moz-column-gap: 8px;
18
- column-gap: 8px;
19
- -moz-column-gap: var(--size-8);
20
- column-gap: var(--size-8);
21
- padding: 8px 24px 0px;
22
- padding: var(--size-8) var(--size-24) 0px;
23
- }
24
- .np-select-input-options-status-icon {
25
- padding: 0 4px;
26
- padding: 0 var(--size-4);
27
- color: #768e9c;
28
- color: var(--color-content-tertiary);
29
- }
30
- .np-select-input-query-container {
31
- display: flex;
32
- flex-direction: column;
33
- padding: 8px;
34
- padding: var(--size-8);
35
- }
36
- .np-select-input-listbox-container {
37
- position: relative;
38
- height: var(--initial-height);
39
- scroll-padding-top: 8px;
40
- scroll-padding-top: var(--size-8);
41
- scroll-padding-bottom: 8px;
42
- scroll-padding-bottom: var(--size-8);
43
- overflow-y: auto;
44
- }
45
- @media (min-width: 576px) {
46
- .np-select-input-listbox-container {
47
- height: auto;
48
- }
49
- }
50
- .np-select-input-listbox-container--virtualized {
51
- /* The wrapping element shrinks this as needed */
52
- height: 100vh;
53
- }
54
- .np-select-input-listbox-container--has-group {
55
- scroll-padding-top: 32px;
56
- scroll-padding-top: var(--size-32);
57
- }
58
- .np-select-input-listbox {
59
- border-radius: 10px;
60
- border-radius: var(--radius-small);
61
- padding: 8px;
62
- padding: var(--size-8);
63
- --ring-outline-offset: calc(-1 * var(--ring-outline-width));
64
- }
65
- .np-select-input-listbox:focus {
66
- outline: none;
67
- }
68
- .np-select-input-listbox:focus-visible {
69
- outline: var(--ring-outline-color) solid var(--ring-outline-width);
70
- outline-offset: var(--ring-outline-offset);
71
- }
72
- .np-select-input-listbox-container--virtualized .np-select-input-listbox {
73
- /* Adopted from `VList` in virtua: https://github.com/inokawa/virtua/blob/7f6ed5b37df6b480d4ff350f3960067c5b3519d2/src/react/VList.tsx#L113-L116 */
74
- overflow-y: auto;
75
- contain: strict;
76
- height: 100%;
77
- }
78
- .np-select-input-footer {
79
- padding: 4px 24px 16px;
80
- padding: var(--size-4) var(--size-24) var(--size-16);
81
- }
@@ -1,77 +0,0 @@
1
- @import (reference) "../../../../node_modules/@transferwise/neptune-css/src/less/ring.less";
2
-
3
- .np-select-input-options-container {
4
- display: flex;
5
- height: 100%;
6
- flex-direction: column;
7
-
8
- &:focus {
9
- outline: none;
10
- }
11
-
12
- @media (--screen-sm) {
13
- & {
14
- max-height: 28rem /* 448px */;
15
- }
16
- }
17
- }
18
-
19
- .np-select-input-options-status {
20
- display: flex;
21
- align-items: center;
22
- column-gap: var(--size-8);
23
- padding: var(--size-8) var(--size-24) 0px;
24
- }
25
-
26
- .np-select-input-options-status-icon {
27
- padding: 0 var(--size-4);
28
- color: var(--color-content-tertiary);
29
- }
30
-
31
- .np-select-input-query-container {
32
- display: flex;
33
- flex-direction: column;
34
- padding: var(--size-8);
35
- }
36
-
37
- .np-select-input-listbox-container {
38
- position: relative;
39
- height: var(--initial-height);
40
- scroll-padding-top: var(--size-8);
41
- scroll-padding-bottom: var(--size-8);
42
- overflow-y: auto;
43
-
44
- @media (--screen-sm) {
45
- & {
46
- height: auto;
47
- }
48
- }
49
-
50
- &--virtualized {
51
- /* The wrapping element shrinks this as needed */
52
- height: 100vh;
53
- }
54
-
55
- &--has-group {
56
- scroll-padding-top: var(--size-32);
57
- }
58
- }
59
-
60
- .np-select-input-listbox {
61
- border-radius: var(--radius-small);
62
- padding: var(--size-8);
63
-
64
- .focus-ring();
65
- --ring-outline-offset: calc(-1 * var(--ring-outline-width));
66
-
67
- .np-select-input-listbox-container--virtualized & {
68
- /* Adopted from `VList` in virtua: https://github.com/inokawa/virtua/blob/7f6ed5b37df6b480d4ff350f3960067c5b3519d2/src/react/VList.tsx#L113-L116 */
69
- overflow-y: auto;
70
- contain: strict;
71
- height: 100%;
72
- }
73
- }
74
-
75
- .np-select-input-footer {
76
- padding: var(--size-4) var(--size-24) var(--size-16);
77
- }