@transferwise/components 0.0.0-experimental-751dc12 → 0.0.0-experimental-4341b9c

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 (318) hide show
  1. package/build/button/Button.js +0 -1
  2. package/build/button/Button.js.map +1 -1
  3. package/build/button/Button.mjs +0 -1
  4. package/build/button/Button.mjs.map +1 -1
  5. package/build/common/RadioButton/RadioButton.js +2 -5
  6. package/build/common/RadioButton/RadioButton.js.map +1 -1
  7. package/build/common/RadioButton/RadioButton.mjs +2 -5
  8. package/build/common/RadioButton/RadioButton.mjs.map +1 -1
  9. package/build/common/initials.js +4 -1
  10. package/build/common/initials.js.map +1 -1
  11. package/build/common/initials.mjs +4 -1
  12. package/build/common/initials.mjs.map +1 -1
  13. package/build/i18n/de.json +2 -0
  14. package/build/i18n/de.json.js +2 -0
  15. package/build/i18n/de.json.js.map +1 -1
  16. package/build/i18n/de.json.mjs +2 -0
  17. package/build/i18n/de.json.mjs.map +1 -1
  18. package/build/i18n/fr.json +2 -0
  19. package/build/i18n/fr.json.js +2 -0
  20. package/build/i18n/fr.json.js.map +1 -1
  21. package/build/i18n/fr.json.mjs +2 -0
  22. package/build/i18n/fr.json.mjs.map +1 -1
  23. package/build/i18n/hu.json +2 -0
  24. package/build/i18n/hu.json.js +2 -0
  25. package/build/i18n/hu.json.js.map +1 -1
  26. package/build/i18n/hu.json.mjs +2 -0
  27. package/build/i18n/hu.json.mjs.map +1 -1
  28. package/build/i18n/it.json +2 -0
  29. package/build/i18n/it.json.js +2 -0
  30. package/build/i18n/it.json.js.map +1 -1
  31. package/build/i18n/it.json.mjs +2 -0
  32. package/build/i18n/it.json.mjs.map +1 -1
  33. package/build/i18n/ja.json +2 -0
  34. package/build/i18n/ja.json.js +2 -0
  35. package/build/i18n/ja.json.js.map +1 -1
  36. package/build/i18n/ja.json.mjs +2 -0
  37. package/build/i18n/ja.json.mjs.map +1 -1
  38. package/build/i18n/pl.json +2 -0
  39. package/build/i18n/pl.json.js +2 -0
  40. package/build/i18n/pl.json.js.map +1 -1
  41. package/build/i18n/pl.json.mjs +2 -0
  42. package/build/i18n/pl.json.mjs.map +1 -1
  43. package/build/i18n/pt.json +2 -0
  44. package/build/i18n/pt.json.js +2 -0
  45. package/build/i18n/pt.json.js.map +1 -1
  46. package/build/i18n/pt.json.mjs +2 -0
  47. package/build/i18n/pt.json.mjs.map +1 -1
  48. package/build/i18n/ro.json +2 -0
  49. package/build/i18n/ro.json.js +2 -0
  50. package/build/i18n/ro.json.js.map +1 -1
  51. package/build/i18n/ro.json.mjs +2 -0
  52. package/build/i18n/ro.json.mjs.map +1 -1
  53. package/build/i18n/ru.json +2 -0
  54. package/build/i18n/ru.json.js +2 -0
  55. package/build/i18n/ru.json.js.map +1 -1
  56. package/build/i18n/ru.json.mjs +2 -0
  57. package/build/i18n/ru.json.mjs.map +1 -1
  58. package/build/i18n/tr.json +2 -0
  59. package/build/i18n/tr.json.js +2 -0
  60. package/build/i18n/tr.json.js.map +1 -1
  61. package/build/i18n/tr.json.mjs +2 -0
  62. package/build/i18n/tr.json.mjs.map +1 -1
  63. package/build/i18n/zh-CN.json +2 -0
  64. package/build/i18n/zh-CN.json.js +2 -0
  65. package/build/i18n/zh-CN.json.js.map +1 -1
  66. package/build/i18n/zh-CN.json.mjs +2 -0
  67. package/build/i18n/zh-CN.json.mjs.map +1 -1
  68. package/build/i18n/zh-HK.json +2 -0
  69. package/build/i18n/zh-HK.json.js +2 -0
  70. package/build/i18n/zh-HK.json.js.map +1 -1
  71. package/build/i18n/zh-HK.json.mjs +2 -0
  72. package/build/i18n/zh-HK.json.mjs.map +1 -1
  73. package/build/iconButton/IconButton.js.map +1 -1
  74. package/build/iconButton/IconButton.mjs.map +1 -1
  75. package/build/image/Image.js.map +1 -1
  76. package/build/image/Image.mjs.map +1 -1
  77. package/build/index.js +0 -2
  78. package/build/index.js.map +1 -1
  79. package/build/index.mjs +0 -1
  80. package/build/index.mjs.map +1 -1
  81. package/build/main.css +0 -709
  82. package/build/styles/main.css +0 -709
  83. package/build/switch/Switch.js +0 -2
  84. package/build/switch/Switch.js.map +1 -1
  85. package/build/switch/Switch.mjs +0 -2
  86. package/build/switch/Switch.mjs.map +1 -1
  87. package/build/types/button/Button.d.ts.map +1 -1
  88. package/build/types/button/Button.types.d.ts +1 -1
  89. package/build/types/button/Button.types.d.ts.map +1 -1
  90. package/build/types/button/index.d.ts +1 -1
  91. package/build/types/button/index.d.ts.map +1 -1
  92. package/build/types/common/RadioButton/RadioButton.d.ts +1 -3
  93. package/build/types/common/RadioButton/RadioButton.d.ts.map +1 -1
  94. package/build/types/common/initials.d.ts.map +1 -1
  95. package/build/types/iconButton/IconButton.d.ts +2 -2
  96. package/build/types/iconButton/IconButton.d.ts.map +1 -1
  97. package/build/types/image/Image.d.ts +0 -3
  98. package/build/types/image/Image.d.ts.map +1 -1
  99. package/build/types/image/index.d.ts +0 -1
  100. package/build/types/image/index.d.ts.map +1 -1
  101. package/build/types/index.d.ts +0 -2
  102. package/build/types/index.d.ts.map +1 -1
  103. package/build/types/switch/Switch.d.ts +0 -2
  104. package/build/types/switch/Switch.d.ts.map +1 -1
  105. package/package.json +1 -1
  106. package/src/button/Button.spec.tsx +0 -18
  107. package/src/button/Button.tsx +1 -5
  108. package/src/button/Button.types.ts +1 -1
  109. package/src/button/index.ts +1 -1
  110. package/src/checkboxButton/CheckboxButton.story.tsx +4 -4
  111. package/src/common/RadioButton/RadioButton.tsx +1 -6
  112. package/src/common/initials.spec.tsx +13 -0
  113. package/src/common/initials.ts +5 -0
  114. package/src/i18n/de.json +2 -0
  115. package/src/i18n/fr.json +2 -0
  116. package/src/i18n/hu.json +2 -0
  117. package/src/i18n/it.json +2 -0
  118. package/src/i18n/ja.json +2 -0
  119. package/src/i18n/pl.json +2 -0
  120. package/src/i18n/pt.json +2 -0
  121. package/src/i18n/ro.json +2 -0
  122. package/src/i18n/ru.json +2 -0
  123. package/src/i18n/tr.json +2 -0
  124. package/src/i18n/zh-CN.json +2 -0
  125. package/src/i18n/zh-HK.json +2 -0
  126. package/src/iconButton/IconButton.story.tsx +1 -1
  127. package/src/iconButton/IconButton.tsx +1 -1
  128. package/src/image/Image.tsx +0 -3
  129. package/src/image/index.ts +0 -1
  130. package/src/index.ts +0 -2
  131. package/src/main.css +0 -709
  132. package/src/main.less +0 -1
  133. package/src/switch/Switch.tsx +0 -4
  134. package/src/test-utils/Parameters.d.ts +77 -0
  135. package/build/listItem/AdditionalInfo/ListItemAdditionalInfo.js +0 -56
  136. package/build/listItem/AdditionalInfo/ListItemAdditionalInfo.js.map +0 -1
  137. package/build/listItem/AdditionalInfo/ListItemAdditionalInfo.mjs +0 -54
  138. package/build/listItem/AdditionalInfo/ListItemAdditionalInfo.mjs.map +0 -1
  139. package/build/listItem/AvatarLayout/ListItemAvatarLayout.js +0 -23
  140. package/build/listItem/AvatarLayout/ListItemAvatarLayout.js.map +0 -1
  141. package/build/listItem/AvatarLayout/ListItemAvatarLayout.mjs +0 -21
  142. package/build/listItem/AvatarLayout/ListItemAvatarLayout.mjs.map +0 -1
  143. package/build/listItem/AvatarView/ListItemAvatarView.js +0 -23
  144. package/build/listItem/AvatarView/ListItemAvatarView.js.map +0 -1
  145. package/build/listItem/AvatarView/ListItemAvatarView.mjs +0 -21
  146. package/build/listItem/AvatarView/ListItemAvatarView.mjs.map +0 -1
  147. package/build/listItem/Button/ListItemButton.js +0 -43
  148. package/build/listItem/Button/ListItemButton.js.map +0 -1
  149. package/build/listItem/Button/ListItemButton.mjs +0 -41
  150. package/build/listItem/Button/ListItemButton.mjs.map +0 -1
  151. package/build/listItem/Checkbox/ListItemCheckbox.js +0 -30
  152. package/build/listItem/Checkbox/ListItemCheckbox.js.map +0 -1
  153. package/build/listItem/Checkbox/ListItemCheckbox.mjs +0 -28
  154. package/build/listItem/Checkbox/ListItemCheckbox.mjs.map +0 -1
  155. package/build/listItem/IconButton/ListItemIconButton.js +0 -42
  156. package/build/listItem/IconButton/ListItemIconButton.js.map +0 -1
  157. package/build/listItem/IconButton/ListItemIconButton.mjs +0 -40
  158. package/build/listItem/IconButton/ListItemIconButton.mjs.map +0 -1
  159. package/build/listItem/Image/ListItemImage.js +0 -31
  160. package/build/listItem/Image/ListItemImage.js.map +0 -1
  161. package/build/listItem/Image/ListItemImage.mjs +0 -29
  162. package/build/listItem/Image/ListItemImage.mjs.map +0 -1
  163. package/build/listItem/ListItem.js +0 -308
  164. package/build/listItem/ListItem.js.map +0 -1
  165. package/build/listItem/ListItem.mjs +0 -303
  166. package/build/listItem/ListItem.mjs.map +0 -1
  167. package/build/listItem/ListItemContext.js +0 -8
  168. package/build/listItem/ListItemContext.js.map +0 -1
  169. package/build/listItem/ListItemContext.mjs +0 -6
  170. package/build/listItem/ListItemContext.mjs.map +0 -1
  171. package/build/listItem/Navigation/ListItemNavigation.js +0 -45
  172. package/build/listItem/Navigation/ListItemNavigation.js.map +0 -1
  173. package/build/listItem/Navigation/ListItemNavigation.mjs +0 -43
  174. package/build/listItem/Navigation/ListItemNavigation.mjs.map +0 -1
  175. package/build/listItem/Prompt/ListItemPrompt.js +0 -59
  176. package/build/listItem/Prompt/ListItemPrompt.js.map +0 -1
  177. package/build/listItem/Prompt/ListItemPrompt.mjs +0 -54
  178. package/build/listItem/Prompt/ListItemPrompt.mjs.map +0 -1
  179. package/build/listItem/Radio/ListItemRadio.js +0 -30
  180. package/build/listItem/Radio/ListItemRadio.js.map +0 -1
  181. package/build/listItem/Radio/ListItemRadio.mjs +0 -28
  182. package/build/listItem/Radio/ListItemRadio.mjs.map +0 -1
  183. package/build/listItem/Switch/ListItemSwitch.js +0 -30
  184. package/build/listItem/Switch/ListItemSwitch.js.map +0 -1
  185. package/build/listItem/Switch/ListItemSwitch.mjs +0 -28
  186. package/build/listItem/Switch/ListItemSwitch.mjs.map +0 -1
  187. package/build/listItem/_stories/images/landscape.svg +0 -1
  188. package/build/listItem/_stories/images/portrait.svg +0 -1
  189. package/build/listItem/useListItemControl.js +0 -22
  190. package/build/listItem/useListItemControl.js.map +0 -1
  191. package/build/listItem/useListItemControl.mjs +0 -20
  192. package/build/listItem/useListItemControl.mjs.map +0 -1
  193. package/build/listItem/useListItemMedia.js +0 -21
  194. package/build/listItem/useListItemMedia.js.map +0 -1
  195. package/build/listItem/useListItemMedia.mjs +0 -19
  196. package/build/listItem/useListItemMedia.mjs.map +0 -1
  197. package/build/styles/listItem/ListItem.css +0 -709
  198. package/build/styles/listItem/ListItem.grid.css +0 -368
  199. package/build/types/listItem/AdditionalInfo/ListItemAdditionalInfo.d.ts +0 -15
  200. package/build/types/listItem/AdditionalInfo/ListItemAdditionalInfo.d.ts.map +0 -1
  201. package/build/types/listItem/AdditionalInfo/index.d.ts +0 -3
  202. package/build/types/listItem/AdditionalInfo/index.d.ts.map +0 -1
  203. package/build/types/listItem/AvatarLayout/ListItemAvatarLayout.d.ts +0 -18
  204. package/build/types/listItem/AvatarLayout/ListItemAvatarLayout.d.ts.map +0 -1
  205. package/build/types/listItem/AvatarLayout/index.d.ts +0 -3
  206. package/build/types/listItem/AvatarLayout/index.d.ts.map +0 -1
  207. package/build/types/listItem/AvatarView/ListItemAvatarView.d.ts +0 -16
  208. package/build/types/listItem/AvatarView/ListItemAvatarView.d.ts.map +0 -1
  209. package/build/types/listItem/AvatarView/index.d.ts +0 -3
  210. package/build/types/listItem/AvatarView/index.d.ts.map +0 -1
  211. package/build/types/listItem/Button/ListItemButton.d.ts +0 -20
  212. package/build/types/listItem/Button/ListItemButton.d.ts.map +0 -1
  213. package/build/types/listItem/Button/index.d.ts +0 -3
  214. package/build/types/listItem/Button/index.d.ts.map +0 -1
  215. package/build/types/listItem/Checkbox/ListItemCheckbox.d.ts +0 -14
  216. package/build/types/listItem/Checkbox/ListItemCheckbox.d.ts.map +0 -1
  217. package/build/types/listItem/Checkbox/index.d.ts +0 -3
  218. package/build/types/listItem/Checkbox/index.d.ts.map +0 -1
  219. package/build/types/listItem/IconButton/ListItemIconButton.d.ts +0 -18
  220. package/build/types/listItem/IconButton/ListItemIconButton.d.ts.map +0 -1
  221. package/build/types/listItem/IconButton/index.d.ts +0 -3
  222. package/build/types/listItem/IconButton/index.d.ts.map +0 -1
  223. package/build/types/listItem/Image/ListItemImage.d.ts +0 -25
  224. package/build/types/listItem/Image/ListItemImage.d.ts.map +0 -1
  225. package/build/types/listItem/Image/index.d.ts +0 -3
  226. package/build/types/listItem/Image/index.d.ts.map +0 -1
  227. package/build/types/listItem/ListItem.d.ts +0 -113
  228. package/build/types/listItem/ListItem.d.ts.map +0 -1
  229. package/build/types/listItem/ListItemContext.d.ts +0 -22
  230. package/build/types/listItem/ListItemContext.d.ts.map +0 -1
  231. package/build/types/listItem/Navigation/ListItemNavigation.d.ts +0 -15
  232. package/build/types/listItem/Navigation/ListItemNavigation.d.ts.map +0 -1
  233. package/build/types/listItem/Navigation/index.d.ts +0 -3
  234. package/build/types/listItem/Navigation/index.d.ts.map +0 -1
  235. package/build/types/listItem/Prompt/ListItemPrompt.d.ts +0 -16
  236. package/build/types/listItem/Prompt/ListItemPrompt.d.ts.map +0 -1
  237. package/build/types/listItem/Prompt/index.d.ts +0 -3
  238. package/build/types/listItem/Prompt/index.d.ts.map +0 -1
  239. package/build/types/listItem/Radio/ListItemRadio.d.ts +0 -14
  240. package/build/types/listItem/Radio/ListItemRadio.d.ts.map +0 -1
  241. package/build/types/listItem/Radio/index.d.ts +0 -3
  242. package/build/types/listItem/Radio/index.d.ts.map +0 -1
  243. package/build/types/listItem/Switch/ListItemSwitch.d.ts +0 -14
  244. package/build/types/listItem/Switch/ListItemSwitch.d.ts.map +0 -1
  245. package/build/types/listItem/Switch/index.d.ts +0 -3
  246. package/build/types/listItem/Switch/index.d.ts.map +0 -1
  247. package/build/types/listItem/_stories/subcomponents.d.ts +0 -18
  248. package/build/types/listItem/_stories/subcomponents.d.ts.map +0 -1
  249. package/build/types/listItem/index.d.ts +0 -14
  250. package/build/types/listItem/index.d.ts.map +0 -1
  251. package/build/types/listItem/test-utils.d.ts +0 -7
  252. package/build/types/listItem/test-utils.d.ts.map +0 -1
  253. package/build/types/listItem/useListItemControl.d.ts +0 -5
  254. package/build/types/listItem/useListItemControl.d.ts.map +0 -1
  255. package/build/types/listItem/useListItemMedia.d.ts +0 -6
  256. package/build/types/listItem/useListItemMedia.d.ts.map +0 -1
  257. package/src/listItem/AdditionalInfo/ListItemAdditionalInfo.spec.tsx +0 -56
  258. package/src/listItem/AdditionalInfo/ListItemAdditionalInfo.story.tsx +0 -145
  259. package/src/listItem/AdditionalInfo/ListItemAdditionalInfo.tsx +0 -36
  260. package/src/listItem/AdditionalInfo/index.ts +0 -2
  261. package/src/listItem/AvatarLayout/ListItemAvatarLayout.spec.tsx +0 -59
  262. package/src/listItem/AvatarLayout/ListItemAvatarLayout.story.tsx +0 -118
  263. package/src/listItem/AvatarLayout/ListItemAvatarLayout.tsx +0 -27
  264. package/src/listItem/AvatarLayout/index.ts +0 -2
  265. package/src/listItem/AvatarView/ListItemAvatarView.spec.tsx +0 -75
  266. package/src/listItem/AvatarView/ListItemAvatarView.story.tsx +0 -318
  267. package/src/listItem/AvatarView/ListItemAvatarView.tsx +0 -27
  268. package/src/listItem/AvatarView/index.ts +0 -2
  269. package/src/listItem/Button/ListItemButton.spec.tsx +0 -68
  270. package/src/listItem/Button/ListItemButton.story.tsx +0 -408
  271. package/src/listItem/Button/ListItemButton.tsx +0 -56
  272. package/src/listItem/Button/index.ts +0 -2
  273. package/src/listItem/Checkbox/ListItemCheckbox.spec.tsx +0 -82
  274. package/src/listItem/Checkbox/ListItemCheckbox.story.tsx +0 -107
  275. package/src/listItem/Checkbox/ListItemCheckbox.tsx +0 -33
  276. package/src/listItem/Checkbox/index.ts +0 -2
  277. package/src/listItem/IconButton/ListItemIconButton.spec.tsx +0 -119
  278. package/src/listItem/IconButton/ListItemIconButton.story.tsx +0 -236
  279. package/src/listItem/IconButton/ListItemIconButton.tsx +0 -56
  280. package/src/listItem/IconButton/index.ts +0 -2
  281. package/src/listItem/Image/ListItemImage.spec.tsx +0 -30
  282. package/src/listItem/Image/ListItemImage.story.tsx +0 -56
  283. package/src/listItem/Image/ListItemImage.tsx +0 -48
  284. package/src/listItem/Image/index.ts +0 -2
  285. package/src/listItem/ListItem.css +0 -709
  286. package/src/listItem/ListItem.grid.css +0 -368
  287. package/src/listItem/ListItem.grid.less +0 -620
  288. package/src/listItem/ListItem.less +0 -346
  289. package/src/listItem/ListItem.spec.tsx +0 -1496
  290. package/src/listItem/ListItem.tsx +0 -441
  291. package/src/listItem/ListItemContext.tsx +0 -27
  292. package/src/listItem/Navigation/ListItemNavigation.spec.tsx +0 -59
  293. package/src/listItem/Navigation/ListItemNavigation.story.tsx +0 -106
  294. package/src/listItem/Navigation/ListItemNavigation.tsx +0 -40
  295. package/src/listItem/Navigation/index.ts +0 -2
  296. package/src/listItem/Prompt/ListItemPrompt.spec.tsx +0 -36
  297. package/src/listItem/Prompt/ListItemPrompt.story.tsx +0 -201
  298. package/src/listItem/Prompt/ListItemPrompt.tsx +0 -32
  299. package/src/listItem/Prompt/index.ts +0 -2
  300. package/src/listItem/Radio/ListItemRadio.spec.tsx +0 -66
  301. package/src/listItem/Radio/ListItemRadio.story.tsx +0 -98
  302. package/src/listItem/Radio/ListItemRadio.tsx +0 -33
  303. package/src/listItem/Radio/index.ts +0 -2
  304. package/src/listItem/Switch/ListItemSwitch.spec.tsx +0 -47
  305. package/src/listItem/Switch/ListItemSwitch.story.tsx +0 -69
  306. package/src/listItem/Switch/ListItemSwitch.tsx +0 -33
  307. package/src/listItem/Switch/index.ts +0 -2
  308. package/src/listItem/_stories/ListItem.focus.test.story.tsx +0 -250
  309. package/src/listItem/_stories/ListItem.layout.test.story.tsx +0 -338
  310. package/src/listItem/_stories/ListItem.story.tsx +0 -670
  311. package/src/listItem/_stories/ListItem.variants.test.story.tsx +0 -271
  312. package/src/listItem/_stories/images/landscape.svg +0 -1
  313. package/src/listItem/_stories/images/portrait.svg +0 -1
  314. package/src/listItem/_stories/subcomponents.tsx +0 -139
  315. package/src/listItem/index.ts +0 -14
  316. package/src/listItem/test-utils.tsx +0 -33
  317. package/src/listItem/useListItemControl.tsx +0 -18
  318. package/src/listItem/useListItemMedia.tsx +0 -13
@@ -1,1496 +0,0 @@
1
- import { mockMatchMedia, render, screen } from '../test-utils';
2
- import { Edit } from '@transferwise/icons';
3
- import Link from '../link';
4
- import { ListItem } from './ListItem';
5
-
6
- mockMatchMedia();
7
-
8
- describe('ListItem', () => {
9
- const cb = () => {};
10
- const title = '__title__';
11
- const subtitle = '__subtitle__';
12
- const valueTitle = '__valueTitle__';
13
- const valueSubtitle = '__valueSubtitle__';
14
- const additionalInfo = '__additionalInfo__';
15
- const additionalInfoAction = '__infoAction__';
16
- const prompt = '__prompt__';
17
- const promptAction = '__promptAction__';
18
- const promptWithLink = (
19
- <>
20
- {prompt}
21
- <Link href="wise.com">{promptAction}</Link>
22
- {prompt}
23
- </>
24
- );
25
- const promptWithButton = (
26
- <>
27
- {prompt}
28
- {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events */}
29
- <Link onClick={cb}>{promptAction}</Link>
30
- {prompt}
31
- </>
32
- );
33
-
34
- describe('aria and a11y attributes', () => {
35
- it('sets id on the container', () => {
36
- render(<ListItem id="custom-id" title={title} />);
37
- expect(screen.getByRole('listitem')).toHaveAttribute('id', 'custom-id');
38
- });
39
-
40
- it('sets custom role on the container', () => {
41
- render(<ListItem title={title} role="button" />);
42
- expect(screen.getByRole('button')).toBeInTheDocument();
43
- });
44
-
45
- it('sets aria-labelledby when provided', () => {
46
- render(<ListItem title={title} aria-labelledby="Accessible label" />);
47
- expect(screen.getByRole('listitem')).toHaveAttribute('aria-labelledby', 'Accessible label');
48
- });
49
-
50
- it('sets aria-describedby with correct IDs for fully interactive list item with prompt and additionalInfo', () => {
51
- render(
52
- <ListItem
53
- title="Title"
54
- subtitle="Subtitle"
55
- control={<ListItem.Button>Hello</ListItem.Button>}
56
- additionalInfo={<ListItem.AdditionalInfo>Additional Info</ListItem.AdditionalInfo>}
57
- prompt={<ListItem.Prompt sentiment="positive">Hello</ListItem.Prompt>}
58
- />,
59
- );
60
- const item = screen.getByRole('button');
61
- const describedBy = item.getAttribute('aria-describedby') || '';
62
- expect(describedBy).toMatch(/_additional-info/);
63
- expect(describedBy).toMatch(/_prompt/);
64
- });
65
-
66
- it('sets aria-describedby with correct IDs for partially interactive list item with title, subtitle, value, subvalue, prompt and additionalInfo', () => {
67
- render(
68
- <ListItem
69
- title="Title"
70
- subtitle="Subtitle"
71
- valueTitle="100"
72
- valueSubtitle="200"
73
- control={<ListItem.Button partiallyInteractive>Hello</ListItem.Button>}
74
- additionalInfo={<ListItem.AdditionalInfo>Additional Info</ListItem.AdditionalInfo>}
75
- prompt={<ListItem.Prompt sentiment="negative">Hello</ListItem.Prompt>}
76
- />,
77
- );
78
- const item = screen.getByRole('button');
79
- const describedBy = item.getAttribute('aria-describedby') || '';
80
- expect(describedBy).toMatch(/_additional-info/);
81
- expect(describedBy).toMatch(/_prompt/);
82
- expect(describedBy).toMatch(/_title/);
83
- expect(describedBy).toMatch(/_subtitle/);
84
- expect(describedBy).toMatch(/_value/);
85
- expect(describedBy).toMatch(/_value-subtitle/);
86
- });
87
-
88
- it('sets aria-disabled when disabled', () => {
89
- render(<ListItem title={title} disabled />);
90
- expect(screen.getByRole('listitem')).toHaveAttribute('aria-disabled', 'true');
91
- });
92
-
93
- describe('Switch', () => {
94
- describe('has accessible name when used with:', () => {
95
- it('title', () => {
96
- render(<ListItem title={title} control={<ListItem.Switch onClick={cb} />} />);
97
-
98
- expect(screen.getByRole('switch')).toHaveAccessibleName(title);
99
- });
100
-
101
- it('title and subtitle', () => {
102
- render(
103
- <ListItem
104
- title={title}
105
- subtitle={subtitle}
106
- control={<ListItem.Switch onClick={cb} />}
107
- />,
108
- );
109
-
110
- expect(screen.getByRole('switch')).toHaveAccessibleName(`${title} ${subtitle}`);
111
- });
112
-
113
- it('title, subtitle, and valueTitle', () => {
114
- render(
115
- <ListItem
116
- title={title}
117
- subtitle={subtitle}
118
- valueTitle={valueTitle}
119
- control={<ListItem.Switch onClick={cb} />}
120
- />,
121
- );
122
-
123
- expect(screen.getByRole('switch')).toHaveAccessibleName(
124
- `${title} ${subtitle} ${valueTitle}`,
125
- );
126
- });
127
-
128
- it('title, subtitle, valueTitle, and valueSubtitle', () => {
129
- render(
130
- <ListItem
131
- title={title}
132
- subtitle={subtitle}
133
- valueTitle={valueTitle}
134
- valueSubtitle={valueSubtitle}
135
- control={<ListItem.Switch onClick={cb} />}
136
- />,
137
- );
138
-
139
- expect(screen.getByRole('switch')).toHaveAccessibleName(
140
- `${title} ${subtitle} ${valueTitle} ${valueSubtitle}`,
141
- );
142
- });
143
-
144
- it('title, subtitle, valueTitle, valueSubtitle and inverted layout', () => {
145
- render(
146
- <ListItem
147
- title={title}
148
- subtitle={subtitle}
149
- valueTitle={valueTitle}
150
- valueSubtitle={valueSubtitle}
151
- inverted
152
- control={<ListItem.Switch onClick={cb} />}
153
- />,
154
- );
155
-
156
- expect(screen.getByRole('switch')).toHaveAccessibleName(
157
- `${subtitle} ${title} ${valueSubtitle} ${valueTitle}`,
158
- );
159
- });
160
-
161
- it('title, subtitle, valueTitle, valueSubtitle, and non-interactive additionalInfo', () => {
162
- render(
163
- <ListItem
164
- title={title}
165
- subtitle={subtitle}
166
- valueTitle={valueTitle}
167
- valueSubtitle={valueSubtitle}
168
- additionalInfo={<ListItem.AdditionalInfo>{additionalInfo}</ListItem.AdditionalInfo>}
169
- control={<ListItem.Switch onClick={cb} />}
170
- />,
171
- );
172
- const control = screen.getByRole('switch');
173
- expect(control).toHaveAccessibleName(
174
- `${title} ${subtitle} ${valueTitle} ${valueSubtitle}`,
175
- );
176
- expect(control).toHaveAccessibleDescription(additionalInfo);
177
- });
178
-
179
- it('title, subtitle, valueTitle, valueSubtitle, non-interactive additionalInfo, and prompt', () => {
180
- render(
181
- <ListItem
182
- title={title}
183
- subtitle={subtitle}
184
- valueTitle={valueTitle}
185
- valueSubtitle={valueSubtitle}
186
- additionalInfo={<ListItem.AdditionalInfo>{additionalInfo}</ListItem.AdditionalInfo>}
187
- prompt={<ListItem.Prompt>{prompt}</ListItem.Prompt>}
188
- control={<ListItem.Switch onClick={cb} />}
189
- />,
190
- );
191
-
192
- const control = screen.getByRole('switch');
193
- expect(control).toHaveAccessibleName(
194
- `${title} ${subtitle} ${valueTitle} ${valueSubtitle}`,
195
- );
196
- expect(control).toHaveAccessibleDescription(`${additionalInfo} ${prompt}`);
197
- });
198
-
199
- it('title, subtitle, valueTitle, valueSubtitle, non-interactive additionalInfo, prompt, and inverted layout', () => {
200
- render(
201
- <ListItem
202
- title={title}
203
- subtitle={subtitle}
204
- valueTitle={valueTitle}
205
- valueSubtitle={valueSubtitle}
206
- additionalInfo={<ListItem.AdditionalInfo>{additionalInfo}</ListItem.AdditionalInfo>}
207
- prompt={<ListItem.Prompt>{prompt}</ListItem.Prompt>}
208
- inverted
209
- control={<ListItem.Switch onClick={cb} />}
210
- />,
211
- );
212
-
213
- const control = screen.getByRole('switch');
214
- expect(screen.getByRole('switch')).toHaveAccessibleName(
215
- `${subtitle} ${title} ${valueSubtitle} ${valueTitle}`,
216
- );
217
- expect(control).toHaveAccessibleDescription(`${additionalInfo} ${prompt}`);
218
- });
219
- });
220
- });
221
-
222
- describe('Radio', () => {
223
- describe('has accessible name when used with:', () => {
224
- it('title', () => {
225
- render(
226
- <ListItem
227
- title={title}
228
- control={<ListItem.Radio name="payment" value="card" onChange={cb} />}
229
- />,
230
- );
231
-
232
- expect(screen.getByRole('radio')).toHaveAccessibleName(title);
233
- });
234
-
235
- it('title and subtitle', () => {
236
- render(
237
- <ListItem
238
- title={title}
239
- subtitle={subtitle}
240
- control={<ListItem.Radio name="payment" value="card" onChange={cb} />}
241
- />,
242
- );
243
-
244
- expect(screen.getByRole('radio')).toHaveAccessibleName(`${title} ${subtitle}`);
245
- });
246
-
247
- it('title, subtitle, and valueTitle', () => {
248
- render(
249
- <ListItem
250
- title={title}
251
- subtitle={subtitle}
252
- valueTitle={valueTitle}
253
- control={<ListItem.Radio name="payment" value="card" onChange={cb} />}
254
- />,
255
- );
256
-
257
- expect(screen.getByRole('radio')).toHaveAccessibleName(
258
- `${title} ${subtitle} ${valueTitle}`,
259
- );
260
- });
261
-
262
- it('title, subtitle, valueTitle, and valueSubtitle', () => {
263
- render(
264
- <ListItem
265
- title={title}
266
- subtitle={subtitle}
267
- valueTitle={valueTitle}
268
- valueSubtitle={valueSubtitle}
269
- control={<ListItem.Radio name="payment" value="card" onChange={cb} />}
270
- />,
271
- );
272
-
273
- expect(screen.getByRole('radio')).toHaveAccessibleName(
274
- `${title} ${subtitle} ${valueTitle} ${valueSubtitle}`,
275
- );
276
- });
277
-
278
- it('title, subtitle, valueTitle, valueSubtitle and inverted layout', () => {
279
- render(
280
- <ListItem
281
- title={title}
282
- subtitle={subtitle}
283
- valueTitle={valueTitle}
284
- valueSubtitle={valueSubtitle}
285
- inverted
286
- control={<ListItem.Radio name="payment" value="card" onChange={cb} />}
287
- />,
288
- );
289
-
290
- expect(screen.getByRole('radio')).toHaveAccessibleName(
291
- `${subtitle} ${title} ${valueSubtitle} ${valueTitle}`,
292
- );
293
- });
294
-
295
- it('title, subtitle, valueTitle, valueSubtitle, and non-interactive additionalInfo', () => {
296
- render(
297
- <ListItem
298
- title={title}
299
- subtitle={subtitle}
300
- valueTitle={valueTitle}
301
- valueSubtitle={valueSubtitle}
302
- additionalInfo={<ListItem.AdditionalInfo>{additionalInfo}</ListItem.AdditionalInfo>}
303
- control={<ListItem.Radio name="payment" value="card" onChange={cb} />}
304
- />,
305
- );
306
-
307
- const control = screen.getByRole('radio');
308
- expect(control).toHaveAccessibleName(
309
- `${title} ${subtitle} ${valueTitle} ${valueSubtitle}`,
310
- );
311
- expect(control).toHaveAccessibleDescription(additionalInfo);
312
- });
313
-
314
- it('title, subtitle, valueTitle, valueSubtitle, non-interactive additionalInfo, and prompt', () => {
315
- render(
316
- <ListItem
317
- title={title}
318
- subtitle={subtitle}
319
- valueTitle={valueTitle}
320
- valueSubtitle={valueSubtitle}
321
- additionalInfo={<ListItem.AdditionalInfo>{additionalInfo}</ListItem.AdditionalInfo>}
322
- prompt={<ListItem.Prompt>{prompt}</ListItem.Prompt>}
323
- control={<ListItem.Radio name="payment" value="card" onChange={cb} />}
324
- />,
325
- );
326
-
327
- const control = screen.getByRole('radio');
328
- expect(control).toHaveAccessibleName(
329
- `${title} ${subtitle} ${valueTitle} ${valueSubtitle}`,
330
- );
331
- expect(control).toHaveAccessibleDescription(`${additionalInfo} ${prompt}`);
332
- });
333
-
334
- it('title, subtitle, valueTitle, valueSubtitle, non-interactive additionalInfo, prompt, and inverted layout', () => {
335
- render(
336
- <ListItem
337
- title={title}
338
- subtitle={subtitle}
339
- valueTitle={valueTitle}
340
- valueSubtitle={valueSubtitle}
341
- additionalInfo={<ListItem.AdditionalInfo>{additionalInfo}</ListItem.AdditionalInfo>}
342
- prompt={<ListItem.Prompt>{prompt}</ListItem.Prompt>}
343
- inverted
344
- control={<ListItem.Radio name="payment" value="card" onChange={cb} />}
345
- />,
346
- );
347
-
348
- const control = screen.getByRole('radio');
349
- expect(control).toHaveAccessibleName(
350
- `${subtitle} ${title} ${valueSubtitle} ${valueTitle}`,
351
- );
352
- expect(control).toHaveAccessibleDescription(`${additionalInfo} ${prompt}`);
353
- });
354
- });
355
- });
356
-
357
- describe('Navigation', () => {
358
- describe('has accessible name when used with:', () => {
359
- it('title', () => {
360
- render(<ListItem title={title} control={<ListItem.Navigation href="/settings" />} />);
361
-
362
- expect(screen.getByRole('link')).toHaveAccessibleName(title);
363
- });
364
-
365
- it('title and subtitle', () => {
366
- render(
367
- <ListItem
368
- title={title}
369
- subtitle={subtitle}
370
- control={<ListItem.Navigation href="/settings" />}
371
- />,
372
- );
373
-
374
- expect(screen.getByRole('link')).toHaveAccessibleName(`${title} ${subtitle}`);
375
- });
376
-
377
- it('title, subtitle, and valueTitle', () => {
378
- render(
379
- <ListItem
380
- title={title}
381
- subtitle={subtitle}
382
- valueTitle={valueTitle}
383
- control={<ListItem.Navigation href="/settings" />}
384
- />,
385
- );
386
-
387
- expect(screen.getByRole('link')).toHaveAccessibleName(
388
- `${title} ${subtitle} ${valueTitle}`,
389
- );
390
- });
391
-
392
- it('title, subtitle, valueTitle, and valueSubtitle', () => {
393
- render(
394
- <ListItem
395
- title={title}
396
- subtitle={subtitle}
397
- valueTitle={valueTitle}
398
- valueSubtitle={valueSubtitle}
399
- control={<ListItem.Navigation href="/settings" />}
400
- />,
401
- );
402
-
403
- expect(screen.getByRole('link')).toHaveAccessibleName(
404
- `${title} ${subtitle} ${valueTitle} ${valueSubtitle}`,
405
- );
406
- });
407
-
408
- it('title, subtitle, valueTitle, valueSubtitle and inverted layout', () => {
409
- render(
410
- <ListItem
411
- title={title}
412
- subtitle={subtitle}
413
- valueTitle={valueTitle}
414
- valueSubtitle={valueSubtitle}
415
- inverted
416
- control={<ListItem.Navigation href="/settings" />}
417
- />,
418
- );
419
-
420
- expect(screen.getByRole('link')).toHaveAccessibleName(
421
- `${subtitle} ${title} ${valueSubtitle} ${valueTitle}`,
422
- );
423
- });
424
-
425
- it('title, subtitle, valueTitle, valueSubtitle, and non-interactive additionalInfo', () => {
426
- render(
427
- <ListItem
428
- title={title}
429
- subtitle={subtitle}
430
- valueTitle={valueTitle}
431
- valueSubtitle={valueSubtitle}
432
- additionalInfo={<ListItem.AdditionalInfo>{additionalInfo}</ListItem.AdditionalInfo>}
433
- control={<ListItem.Navigation href="/settings" />}
434
- />,
435
- );
436
-
437
- const control = screen.getByRole('link');
438
- expect(control).toHaveAccessibleName(
439
- `${title} ${subtitle} ${valueTitle} ${valueSubtitle}`,
440
- );
441
- expect(control).toHaveAccessibleDescription(additionalInfo);
442
- });
443
-
444
- it('title, subtitle, valueTitle, valueSubtitle, non-interactive additionalInfo, and prompt', () => {
445
- render(
446
- <ListItem
447
- title={title}
448
- subtitle={subtitle}
449
- valueTitle={valueTitle}
450
- valueSubtitle={valueSubtitle}
451
- additionalInfo={<ListItem.AdditionalInfo>{additionalInfo}</ListItem.AdditionalInfo>}
452
- prompt={<ListItem.Prompt>{prompt}</ListItem.Prompt>}
453
- control={<ListItem.Navigation href="/settings" />}
454
- />,
455
- );
456
-
457
- const control = screen.getByRole('link');
458
- expect(control).toHaveAccessibleName(
459
- `${title} ${subtitle} ${valueTitle} ${valueSubtitle}`,
460
- );
461
- expect(control).toHaveAccessibleDescription(`${additionalInfo} ${prompt}`);
462
- });
463
-
464
- it('title, subtitle, valueTitle, valueSubtitle, non-interactive additionalInfo, prompt, and inverted layout', () => {
465
- render(
466
- <ListItem
467
- title={title}
468
- subtitle={subtitle}
469
- valueTitle={valueTitle}
470
- valueSubtitle={valueSubtitle}
471
- additionalInfo={<ListItem.AdditionalInfo>{additionalInfo}</ListItem.AdditionalInfo>}
472
- prompt={<ListItem.Prompt>{prompt}</ListItem.Prompt>}
473
- inverted
474
- control={<ListItem.Navigation href="/settings" />}
475
- />,
476
- );
477
-
478
- const control = screen.getByRole('link');
479
- expect(control).toHaveAccessibleName(
480
- `${subtitle} ${title} ${valueSubtitle} ${valueTitle}`,
481
- );
482
- expect(control).toHaveAccessibleDescription(`${additionalInfo} ${prompt}`);
483
- });
484
- });
485
- });
486
-
487
- describe('Checkbox', () => {
488
- describe('has accessible name when used with:', () => {
489
- it('title', () => {
490
- render(<ListItem title={title} control={<ListItem.Checkbox onChange={cb} />} />);
491
-
492
- expect(screen.getByRole('checkbox')).toHaveAccessibleName(title);
493
- });
494
-
495
- it('title and subtitle', () => {
496
- render(
497
- <ListItem
498
- title={title}
499
- subtitle={subtitle}
500
- control={<ListItem.Checkbox onChange={cb} />}
501
- />,
502
- );
503
-
504
- expect(screen.getByRole('checkbox')).toHaveAccessibleName(`${title} ${subtitle}`);
505
- });
506
-
507
- it('title, subtitle, and valueTitle', () => {
508
- render(
509
- <ListItem
510
- title={title}
511
- subtitle={subtitle}
512
- valueTitle={valueTitle}
513
- control={<ListItem.Checkbox onChange={cb} />}
514
- />,
515
- );
516
-
517
- expect(screen.getByRole('checkbox')).toHaveAccessibleName(
518
- `${title} ${subtitle} ${valueTitle}`,
519
- );
520
- });
521
-
522
- it('title, subtitle, valueTitle, and valueSubtitle', () => {
523
- render(
524
- <ListItem
525
- title={title}
526
- subtitle={subtitle}
527
- valueTitle={valueTitle}
528
- valueSubtitle={valueSubtitle}
529
- control={<ListItem.Checkbox onChange={cb} />}
530
- />,
531
- );
532
-
533
- expect(screen.getByRole('checkbox')).toHaveAccessibleName(
534
- `${title} ${subtitle} ${valueTitle} ${valueSubtitle}`,
535
- );
536
- });
537
-
538
- it('title, subtitle, valueTitle, valueSubtitle and inverted layout', () => {
539
- render(
540
- <ListItem
541
- title={title}
542
- subtitle={subtitle}
543
- valueTitle={valueTitle}
544
- valueSubtitle={valueSubtitle}
545
- inverted
546
- control={<ListItem.Checkbox onChange={cb} />}
547
- />,
548
- );
549
-
550
- expect(screen.getByRole('checkbox')).toHaveAccessibleName(
551
- `${subtitle} ${title} ${valueSubtitle} ${valueTitle}`,
552
- );
553
- });
554
-
555
- it('title, subtitle, valueTitle, valueSubtitle, and non-interactive additionalInfo', () => {
556
- render(
557
- <ListItem
558
- title={title}
559
- subtitle={subtitle}
560
- valueTitle={valueTitle}
561
- valueSubtitle={valueSubtitle}
562
- additionalInfo={<ListItem.AdditionalInfo>{additionalInfo}</ListItem.AdditionalInfo>}
563
- control={<ListItem.Checkbox onChange={cb} />}
564
- />,
565
- );
566
-
567
- const control = screen.getByRole('checkbox');
568
- expect(control).toHaveAccessibleName(
569
- `${title} ${subtitle} ${valueTitle} ${valueSubtitle}`,
570
- );
571
- expect(control).toHaveAccessibleDescription(additionalInfo);
572
- });
573
-
574
- it('title, subtitle, valueTitle, valueSubtitle, non-interactive additionalInfo, and prompt', () => {
575
- render(
576
- <ListItem
577
- title={title}
578
- subtitle={subtitle}
579
- valueTitle={valueTitle}
580
- valueSubtitle={valueSubtitle}
581
- additionalInfo={<ListItem.AdditionalInfo>{additionalInfo}</ListItem.AdditionalInfo>}
582
- prompt={<ListItem.Prompt>{prompt}</ListItem.Prompt>}
583
- control={<ListItem.Checkbox onChange={cb} />}
584
- />,
585
- );
586
-
587
- const control = screen.getByRole('checkbox');
588
- expect(control).toHaveAccessibleName(
589
- `${title} ${subtitle} ${valueTitle} ${valueSubtitle}`,
590
- );
591
- expect(control).toHaveAccessibleDescription(`${additionalInfo} ${prompt}`);
592
- });
593
-
594
- it('title, subtitle, valueTitle, valueSubtitle, non-interactive additionalInfo, prompt, and inverted layout', () => {
595
- render(
596
- <ListItem
597
- title={title}
598
- subtitle={subtitle}
599
- valueTitle={valueTitle}
600
- valueSubtitle={valueSubtitle}
601
- additionalInfo={<ListItem.AdditionalInfo>{additionalInfo}</ListItem.AdditionalInfo>}
602
- prompt={<ListItem.Prompt>{prompt}</ListItem.Prompt>}
603
- inverted
604
- control={<ListItem.Checkbox onChange={cb} />}
605
- />,
606
- );
607
-
608
- const control = screen.getByRole('checkbox');
609
- expect(control).toHaveAccessibleName(
610
- `${subtitle} ${title} ${valueSubtitle} ${valueTitle}`,
611
- );
612
- expect(control).toHaveAccessibleDescription(`${additionalInfo} ${prompt}`);
613
- });
614
- });
615
- });
616
-
617
- describe('IconButton', () => {
618
- describe('Fully interactive', () => {
619
- it('title', () => {
620
- render(
621
- <ListItem
622
- title={title}
623
- control={
624
- <ListItem.IconButton onClick={cb}>
625
- <Edit />
626
- </ListItem.IconButton>
627
- }
628
- />,
629
- );
630
-
631
- expect(screen.getByRole('button')).toHaveAccessibleName(title);
632
- });
633
-
634
- it('title and subtitle', () => {
635
- render(
636
- <ListItem
637
- title={title}
638
- subtitle={subtitle}
639
- control={
640
- <ListItem.IconButton onClick={cb}>
641
- <Edit />
642
- </ListItem.IconButton>
643
- }
644
- />,
645
- );
646
-
647
- expect(screen.getByRole('button')).toHaveAccessibleName(`${title} ${subtitle}`);
648
- });
649
-
650
- it('title, subtitle, and valueTitle', () => {
651
- render(
652
- <ListItem
653
- title={title}
654
- subtitle={subtitle}
655
- valueTitle={valueTitle}
656
- control={
657
- <ListItem.IconButton onClick={cb}>
658
- <Edit />
659
- </ListItem.IconButton>
660
- }
661
- />,
662
- );
663
-
664
- expect(screen.getByRole('button')).toHaveAccessibleName(
665
- `${title} ${subtitle} ${valueTitle}`,
666
- );
667
- });
668
-
669
- it('title, subtitle, valueTitle, and valueSubtitle', () => {
670
- render(
671
- <ListItem
672
- title={title}
673
- subtitle={subtitle}
674
- valueTitle={valueTitle}
675
- valueSubtitle={valueSubtitle}
676
- control={
677
- <ListItem.IconButton onClick={cb}>
678
- <Edit />
679
- </ListItem.IconButton>
680
- }
681
- />,
682
- );
683
-
684
- expect(screen.getByRole('button')).toHaveAccessibleName(
685
- `${title} ${subtitle} ${valueTitle} ${valueSubtitle}`,
686
- );
687
- });
688
-
689
- it('title, subtitle, valueTitle, valueSubtitle and inverted layout', () => {
690
- render(
691
- <ListItem
692
- title={title}
693
- subtitle={subtitle}
694
- valueTitle={valueTitle}
695
- valueSubtitle={valueSubtitle}
696
- inverted
697
- control={
698
- <ListItem.IconButton onClick={cb}>
699
- <Edit />
700
- </ListItem.IconButton>
701
- }
702
- />,
703
- );
704
-
705
- expect(screen.getByRole('button')).toHaveAccessibleName(
706
- `${subtitle} ${title} ${valueSubtitle} ${valueTitle}`,
707
- );
708
- });
709
-
710
- it('title, subtitle, valueTitle, valueSubtitle, and non-interactive additionalInfo', () => {
711
- render(
712
- <ListItem
713
- title={title}
714
- subtitle={subtitle}
715
- valueTitle={valueTitle}
716
- valueSubtitle={valueSubtitle}
717
- additionalInfo={<ListItem.AdditionalInfo>{additionalInfo}</ListItem.AdditionalInfo>}
718
- control={
719
- <ListItem.IconButton onClick={cb}>
720
- <Edit />
721
- </ListItem.IconButton>
722
- }
723
- />,
724
- );
725
-
726
- expect(screen.getByRole('button')).toHaveAccessibleDescription(
727
- `${title} ${subtitle} ${valueTitle} ${valueSubtitle} ${additionalInfo}`,
728
- );
729
- });
730
-
731
- it('title, subtitle, valueTitle, valueSubtitle, non-interactive additionalInfo, and prompt', () => {
732
- render(
733
- <ListItem
734
- title={title}
735
- subtitle={subtitle}
736
- valueTitle={valueTitle}
737
- valueSubtitle={valueSubtitle}
738
- additionalInfo={<ListItem.AdditionalInfo>{additionalInfo}</ListItem.AdditionalInfo>}
739
- prompt={<ListItem.Prompt>{prompt}</ListItem.Prompt>}
740
- control={
741
- <ListItem.IconButton onClick={cb}>
742
- <Edit />
743
- </ListItem.IconButton>
744
- }
745
- />,
746
- );
747
-
748
- expect(screen.getByRole('button')).toHaveAccessibleDescription(
749
- `${title} ${subtitle} ${valueTitle} ${valueSubtitle} ${additionalInfo} ${prompt}`,
750
- );
751
- });
752
-
753
- it('title, subtitle, valueTitle, valueSubtitle, non-interactive additionalInfo, prompt, and inverted layout', () => {
754
- render(
755
- <ListItem
756
- title={title}
757
- subtitle={subtitle}
758
- valueTitle={valueTitle}
759
- valueSubtitle={valueSubtitle}
760
- additionalInfo={<ListItem.AdditionalInfo>{additionalInfo}</ListItem.AdditionalInfo>}
761
- prompt={<ListItem.Prompt>{prompt}</ListItem.Prompt>}
762
- inverted
763
- control={
764
- <ListItem.IconButton onClick={cb}>
765
- <Edit />
766
- </ListItem.IconButton>
767
- }
768
- />,
769
- );
770
-
771
- expect(screen.getByRole('button')).toHaveAccessibleDescription(
772
- `${subtitle} ${title} ${valueSubtitle} ${valueTitle} ${additionalInfo} ${prompt}`,
773
- );
774
- });
775
- });
776
-
777
- describe('Partially interactive', () => {
778
- describe('has accessible name when used with:', () => {
779
- it('title', () => {
780
- render(
781
- <ListItem
782
- title={title}
783
- control={
784
- <ListItem.IconButton partiallyInteractive onClick={cb}>
785
- <Edit />
786
- </ListItem.IconButton>
787
- }
788
- />,
789
- );
790
-
791
- expect(screen.getByRole('button')).toHaveAccessibleDescription(title);
792
- });
793
-
794
- it('title and subtitle', () => {
795
- render(
796
- <ListItem
797
- title={title}
798
- subtitle={subtitle}
799
- control={
800
- <ListItem.IconButton partiallyInteractive onClick={cb}>
801
- <Edit />
802
- </ListItem.IconButton>
803
- }
804
- />,
805
- );
806
-
807
- expect(screen.getByRole('button')).toHaveAccessibleDescription(`${title} ${subtitle}`);
808
- });
809
-
810
- it('title, subtitle, and valueTitle', () => {
811
- render(
812
- <ListItem
813
- title={title}
814
- subtitle={subtitle}
815
- valueTitle={valueTitle}
816
- control={
817
- <ListItem.IconButton partiallyInteractive onClick={cb}>
818
- <Edit />
819
- </ListItem.IconButton>
820
- }
821
- />,
822
- );
823
-
824
- expect(screen.getByRole('button')).toHaveAccessibleDescription(
825
- `${title} ${subtitle} ${valueTitle}`,
826
- );
827
- });
828
-
829
- it('title, subtitle, valueTitle, and valueSubtitle', () => {
830
- render(
831
- <ListItem
832
- title={title}
833
- subtitle={subtitle}
834
- valueTitle={valueTitle}
835
- valueSubtitle={valueSubtitle}
836
- control={
837
- <ListItem.IconButton partiallyInteractive onClick={cb}>
838
- <Edit />
839
- </ListItem.IconButton>
840
- }
841
- />,
842
- );
843
-
844
- expect(screen.getByRole('button')).toHaveAccessibleDescription(
845
- `${title} ${subtitle} ${valueTitle} ${valueSubtitle}`,
846
- );
847
- });
848
-
849
- it('title, subtitle, valueTitle, valueSubtitle and inverted layout', () => {
850
- render(
851
- <ListItem
852
- title={title}
853
- subtitle={subtitle}
854
- valueTitle={valueTitle}
855
- valueSubtitle={valueSubtitle}
856
- inverted
857
- control={
858
- <ListItem.IconButton partiallyInteractive onClick={cb}>
859
- <Edit />
860
- </ListItem.IconButton>
861
- }
862
- />,
863
- );
864
-
865
- expect(screen.getByRole('button')).toHaveAccessibleDescription(
866
- `${subtitle} ${title} ${valueSubtitle} ${valueTitle}`,
867
- );
868
- });
869
-
870
- it('title, subtitle, valueTitle, valueSubtitle, and non-interactive additionalInfo', () => {
871
- render(
872
- <ListItem
873
- title={title}
874
- subtitle={subtitle}
875
- valueTitle={valueTitle}
876
- valueSubtitle={valueSubtitle}
877
- additionalInfo={<ListItem.AdditionalInfo>{additionalInfo}</ListItem.AdditionalInfo>}
878
- control={
879
- <ListItem.IconButton partiallyInteractive onClick={cb}>
880
- <Edit />
881
- </ListItem.IconButton>
882
- }
883
- />,
884
- );
885
-
886
- expect(screen.getByRole('button')).toHaveAccessibleDescription(
887
- `${title} ${subtitle} ${valueTitle} ${valueSubtitle} ${additionalInfo}`,
888
- );
889
- });
890
-
891
- it('title, subtitle, valueTitle, valueSubtitle, and additionalInfo with link action', () => {
892
- render(
893
- <ListItem
894
- title={title}
895
- subtitle={subtitle}
896
- valueTitle={valueTitle}
897
- valueSubtitle={valueSubtitle}
898
- additionalInfo={
899
- <ListItem.AdditionalInfo
900
- action={{
901
- label: additionalInfoAction,
902
- href: 'wise.com',
903
- }}
904
- >
905
- {additionalInfo}
906
- </ListItem.AdditionalInfo>
907
- }
908
- control={
909
- <ListItem.IconButton partiallyInteractive onClick={cb}>
910
- <Edit />
911
- </ListItem.IconButton>
912
- }
913
- />,
914
- );
915
-
916
- expect(screen.getByRole('button')).toHaveAccessibleDescription(
917
- `${title} ${subtitle} ${valueTitle} ${valueSubtitle} ${additionalInfo} ${additionalInfoAction}`,
918
- );
919
- });
920
-
921
- it('title, subtitle, valueTitle, valueSubtitle, and additionalInfo with button action', () => {
922
- render(
923
- <ListItem
924
- title={title}
925
- subtitle={subtitle}
926
- valueTitle={valueTitle}
927
- valueSubtitle={valueSubtitle}
928
- additionalInfo={
929
- <ListItem.AdditionalInfo action={{ label: additionalInfoAction, onClick: cb }}>
930
- {additionalInfo}
931
- </ListItem.AdditionalInfo>
932
- }
933
- control={
934
- <ListItem.IconButton partiallyInteractive onClick={cb}>
935
- <Edit />
936
- </ListItem.IconButton>
937
- }
938
- />,
939
- );
940
-
941
- expect(screen.getAllByRole('button')[0]).toHaveAccessibleDescription(
942
- `${title} ${subtitle} ${valueTitle} ${valueSubtitle} ${additionalInfo} ${additionalInfoAction}`,
943
- );
944
- });
945
-
946
- it('title, subtitle, valueTitle, valueSubtitle, non-interactive additionalInfo, and prompt', () => {
947
- render(
948
- <ListItem
949
- title={title}
950
- subtitle={subtitle}
951
- valueTitle={valueTitle}
952
- valueSubtitle={valueSubtitle}
953
- additionalInfo={<ListItem.AdditionalInfo>{additionalInfo}</ListItem.AdditionalInfo>}
954
- prompt={<ListItem.Prompt>{prompt}</ListItem.Prompt>}
955
- control={
956
- <ListItem.IconButton partiallyInteractive onClick={cb}>
957
- <Edit />
958
- </ListItem.IconButton>
959
- }
960
- />,
961
- );
962
-
963
- expect(screen.getByRole('button')).toHaveAccessibleDescription(
964
- `${title} ${subtitle} ${valueTitle} ${valueSubtitle} ${additionalInfo} ${prompt}`,
965
- );
966
- });
967
-
968
- it('title, subtitle, valueTitle, valueSubtitle, non-interactive additionalInfo, and prompt with inline link', () => {
969
- render(
970
- <ListItem
971
- title={title}
972
- subtitle={subtitle}
973
- valueTitle={valueTitle}
974
- valueSubtitle={valueSubtitle}
975
- additionalInfo={<ListItem.AdditionalInfo>{additionalInfo}</ListItem.AdditionalInfo>}
976
- prompt={<ListItem.Prompt>{promptWithLink}</ListItem.Prompt>}
977
- control={
978
- <ListItem.IconButton partiallyInteractive onClick={cb}>
979
- <Edit />
980
- </ListItem.IconButton>
981
- }
982
- />,
983
- );
984
-
985
- expect(screen.getByRole('button')).toHaveAccessibleDescription(
986
- `${title} ${subtitle} ${valueTitle} ${valueSubtitle} ${additionalInfo} ${prompt} ${promptAction} ${prompt}`,
987
- );
988
- });
989
-
990
- it('title, subtitle, valueTitle, valueSubtitle, non-interactive additionalInfo, and prompt with inline button', () => {
991
- render(
992
- <ListItem
993
- title={title}
994
- subtitle={subtitle}
995
- valueTitle={valueTitle}
996
- valueSubtitle={valueSubtitle}
997
- additionalInfo={<ListItem.AdditionalInfo>{additionalInfo}</ListItem.AdditionalInfo>}
998
- prompt={<ListItem.Prompt>{promptWithButton}</ListItem.Prompt>}
999
- control={
1000
- <ListItem.IconButton partiallyInteractive onClick={cb}>
1001
- <Edit />
1002
- </ListItem.IconButton>
1003
- }
1004
- />,
1005
- );
1006
-
1007
- expect(screen.getAllByRole('button')[0]).toHaveAccessibleDescription(
1008
- `${title} ${subtitle} ${valueTitle} ${valueSubtitle} ${additionalInfo} ${prompt} ${promptAction} ${prompt}`,
1009
- );
1010
- });
1011
-
1012
- it('title, subtitle, valueTitle, valueSubtitle, non-interactive additionalInfo, prompt, and inverted layout', () => {
1013
- render(
1014
- <ListItem
1015
- title={title}
1016
- subtitle={subtitle}
1017
- valueTitle={valueTitle}
1018
- valueSubtitle={valueSubtitle}
1019
- additionalInfo={<ListItem.AdditionalInfo>{additionalInfo}</ListItem.AdditionalInfo>}
1020
- prompt={<ListItem.Prompt>{prompt}</ListItem.Prompt>}
1021
- inverted
1022
- control={
1023
- <ListItem.IconButton partiallyInteractive onClick={cb}>
1024
- <Edit />
1025
- </ListItem.IconButton>
1026
- }
1027
- />,
1028
- );
1029
-
1030
- expect(screen.getByRole('button')).toHaveAccessibleDescription(
1031
- `${subtitle} ${title} ${valueSubtitle} ${valueTitle} ${additionalInfo} ${prompt}`,
1032
- );
1033
- });
1034
- });
1035
- });
1036
- });
1037
-
1038
- describe('Button', () => {
1039
- describe('Fully interactive', () => {
1040
- describe('has accessible name when used with:', () => {
1041
- it('title', () => {
1042
- render(
1043
- <ListItem
1044
- title={title}
1045
- control={<ListItem.Button onClick={cb}>Save</ListItem.Button>}
1046
- />,
1047
- );
1048
-
1049
- const control = screen.getByRole('button');
1050
- expect(control).toHaveAccessibleName(title);
1051
- expect(control).toHaveAccessibleDescription(`Save`);
1052
- });
1053
-
1054
- it('title and subtitle', () => {
1055
- render(
1056
- <ListItem
1057
- title={title}
1058
- subtitle={subtitle}
1059
- control={<ListItem.Button onClick={cb}>Save</ListItem.Button>}
1060
- />,
1061
- );
1062
-
1063
- const control = screen.getByRole('button');
1064
- expect(control).toHaveAccessibleName(`${title} ${subtitle}`);
1065
- expect(control).toHaveAccessibleDescription(`Save`);
1066
- });
1067
-
1068
- it('title, subtitle, and valueTitle', () => {
1069
- render(
1070
- <ListItem
1071
- title={title}
1072
- subtitle={subtitle}
1073
- valueTitle={valueTitle}
1074
- control={<ListItem.Button onClick={cb}>Save</ListItem.Button>}
1075
- />,
1076
- );
1077
-
1078
- const control = screen.getByRole('button');
1079
- expect(control).toHaveAccessibleName(`${title} ${subtitle} ${valueTitle}`);
1080
- expect(control).toHaveAccessibleDescription(`Save`);
1081
- });
1082
-
1083
- it('title, subtitle, valueTitle, and valueSubtitle', () => {
1084
- render(
1085
- <ListItem
1086
- title={title}
1087
- subtitle={subtitle}
1088
- valueTitle={valueTitle}
1089
- valueSubtitle={valueSubtitle}
1090
- control={<ListItem.Button onClick={cb}>Save</ListItem.Button>}
1091
- />,
1092
- );
1093
-
1094
- const control = screen.getByRole('button');
1095
- expect(control).toHaveAccessibleName(
1096
- `${title} ${subtitle} ${valueTitle} ${valueSubtitle}`,
1097
- );
1098
- expect(control).toHaveAccessibleDescription(`Save`);
1099
- });
1100
-
1101
- it('title, subtitle, valueTitle, valueSubtitle and inverted layout', () => {
1102
- render(
1103
- <ListItem
1104
- title={title}
1105
- subtitle={subtitle}
1106
- valueTitle={valueTitle}
1107
- valueSubtitle={valueSubtitle}
1108
- inverted
1109
- control={<ListItem.Button onClick={cb}>Save</ListItem.Button>}
1110
- />,
1111
- );
1112
-
1113
- const control = screen.getByRole('button');
1114
- expect(control).toHaveAccessibleName(
1115
- `${subtitle} ${title} ${valueSubtitle} ${valueTitle}`,
1116
- );
1117
- expect(control).toHaveAccessibleDescription(`Save`);
1118
- });
1119
-
1120
- it('title, subtitle, valueTitle, valueSubtitle, and non-interactive additionalInfo', () => {
1121
- render(
1122
- <ListItem
1123
- title={title}
1124
- subtitle={subtitle}
1125
- valueTitle={valueTitle}
1126
- valueSubtitle={valueSubtitle}
1127
- additionalInfo={<ListItem.AdditionalInfo>{additionalInfo}</ListItem.AdditionalInfo>}
1128
- control={<ListItem.Button onClick={cb}>Save</ListItem.Button>}
1129
- />,
1130
- );
1131
-
1132
- const control = screen.getByRole('button');
1133
- expect(control).toHaveAccessibleName(
1134
- `${title} ${subtitle} ${valueTitle} ${valueSubtitle}`,
1135
- );
1136
- expect(control).toHaveAccessibleDescription(`Save ${additionalInfo}`);
1137
- });
1138
-
1139
- it('title, subtitle, valueTitle, valueSubtitle, non-interactive additionalInfo, and prompt', () => {
1140
- render(
1141
- <ListItem
1142
- title={title}
1143
- subtitle={subtitle}
1144
- valueTitle={valueTitle}
1145
- valueSubtitle={valueSubtitle}
1146
- additionalInfo={<ListItem.AdditionalInfo>{additionalInfo}</ListItem.AdditionalInfo>}
1147
- prompt={<ListItem.Prompt>{prompt}</ListItem.Prompt>}
1148
- control={<ListItem.Button onClick={cb}>Save</ListItem.Button>}
1149
- />,
1150
- );
1151
-
1152
- const control = screen.getByRole('button');
1153
- expect(control).toHaveAccessibleName(
1154
- `${title} ${subtitle} ${valueTitle} ${valueSubtitle}`,
1155
- );
1156
- expect(control).toHaveAccessibleDescription(`Save ${additionalInfo} ${prompt}`);
1157
- });
1158
-
1159
- it('title, subtitle, valueTitle, valueSubtitle, non-interactive additionalInfo, prompt, and inverted layout', () => {
1160
- render(
1161
- <ListItem
1162
- title={title}
1163
- subtitle={subtitle}
1164
- valueTitle={valueTitle}
1165
- valueSubtitle={valueSubtitle}
1166
- additionalInfo={<ListItem.AdditionalInfo>{additionalInfo}</ListItem.AdditionalInfo>}
1167
- prompt={<ListItem.Prompt>{prompt}</ListItem.Prompt>}
1168
- inverted
1169
- control={<ListItem.Button onClick={cb}>Save</ListItem.Button>}
1170
- />,
1171
- );
1172
-
1173
- const control = screen.getByRole('button');
1174
- expect(control).toHaveAccessibleName(
1175
- `${subtitle} ${title} ${valueSubtitle} ${valueTitle}`,
1176
- );
1177
- expect(control).toHaveAccessibleDescription(`Save ${additionalInfo} ${prompt}`);
1178
- });
1179
- });
1180
- });
1181
-
1182
- describe('Partially interactive', () => {
1183
- describe('has accessible name when used with:', () => {
1184
- it('title', () => {
1185
- render(
1186
- <ListItem
1187
- title={title}
1188
- control={
1189
- <ListItem.Button partiallyInteractive onClick={cb}>
1190
- Save
1191
- </ListItem.Button>
1192
- }
1193
- />,
1194
- );
1195
-
1196
- const control = screen.getByRole('button');
1197
- expect(control).toHaveAccessibleName(`Save`);
1198
- expect(control).toHaveAccessibleDescription(title);
1199
- });
1200
-
1201
- it('title and subtitle', () => {
1202
- render(
1203
- <ListItem
1204
- title={title}
1205
- subtitle={subtitle}
1206
- control={
1207
- <ListItem.Button partiallyInteractive onClick={cb}>
1208
- Save
1209
- </ListItem.Button>
1210
- }
1211
- />,
1212
- );
1213
-
1214
- const control = screen.getByRole('button');
1215
- expect(control).toHaveAccessibleName(`Save`);
1216
- expect(control).toHaveAccessibleDescription(`${title} ${subtitle}`);
1217
- });
1218
-
1219
- it('title, subtitle, and valueTitle', () => {
1220
- render(
1221
- <ListItem
1222
- title={title}
1223
- subtitle={subtitle}
1224
- valueTitle={valueTitle}
1225
- control={
1226
- <ListItem.Button partiallyInteractive onClick={cb}>
1227
- Save
1228
- </ListItem.Button>
1229
- }
1230
- />,
1231
- );
1232
-
1233
- const control = screen.getByRole('button');
1234
- expect(control).toHaveAccessibleName(`Save`);
1235
- expect(control).toHaveAccessibleDescription(`${title} ${subtitle} ${valueTitle}`);
1236
- });
1237
-
1238
- it('title, subtitle, valueTitle, and valueSubtitle', () => {
1239
- render(
1240
- <ListItem
1241
- title={title}
1242
- subtitle={subtitle}
1243
- valueTitle={valueTitle}
1244
- valueSubtitle={valueSubtitle}
1245
- control={
1246
- <ListItem.Button partiallyInteractive onClick={cb}>
1247
- Save
1248
- </ListItem.Button>
1249
- }
1250
- />,
1251
- );
1252
-
1253
- const control = screen.getByRole('button');
1254
- expect(control).toHaveAccessibleName(`Save`);
1255
- expect(control).toHaveAccessibleDescription(
1256
- `${title} ${subtitle} ${valueTitle} ${valueSubtitle}`,
1257
- );
1258
- });
1259
-
1260
- it('title, subtitle, valueTitle, valueSubtitle and inverted layout', () => {
1261
- render(
1262
- <ListItem
1263
- title={title}
1264
- subtitle={subtitle}
1265
- valueTitle={valueTitle}
1266
- valueSubtitle={valueSubtitle}
1267
- inverted
1268
- control={
1269
- <ListItem.Button partiallyInteractive onClick={cb}>
1270
- Save
1271
- </ListItem.Button>
1272
- }
1273
- />,
1274
- );
1275
-
1276
- const control = screen.getByRole('button');
1277
- expect(control).toHaveAccessibleName(`Save`);
1278
- expect(control).toHaveAccessibleDescription(
1279
- `${subtitle} ${title} ${valueSubtitle} ${valueTitle}`,
1280
- );
1281
- });
1282
-
1283
- it('title, subtitle, valueTitle, valueSubtitle, and non-interactive additionalInfo', () => {
1284
- render(
1285
- <ListItem
1286
- title={title}
1287
- subtitle={subtitle}
1288
- valueTitle={valueTitle}
1289
- valueSubtitle={valueSubtitle}
1290
- additionalInfo={<ListItem.AdditionalInfo>{additionalInfo}</ListItem.AdditionalInfo>}
1291
- control={
1292
- <ListItem.Button partiallyInteractive onClick={cb}>
1293
- Save
1294
- </ListItem.Button>
1295
- }
1296
- />,
1297
- );
1298
-
1299
- const control = screen.getByRole('button');
1300
- expect(control).toHaveAccessibleName(`Save`);
1301
- expect(control).toHaveAccessibleDescription(
1302
- `${title} ${subtitle} ${valueTitle} ${valueSubtitle} ${additionalInfo}`,
1303
- );
1304
- });
1305
-
1306
- it('title, subtitle, valueTitle, valueSubtitle, and additionalInfo with link action', () => {
1307
- render(
1308
- <ListItem
1309
- title={title}
1310
- subtitle={subtitle}
1311
- valueTitle={valueTitle}
1312
- valueSubtitle={valueSubtitle}
1313
- additionalInfo={
1314
- <ListItem.AdditionalInfo
1315
- action={{
1316
- label: additionalInfoAction,
1317
- href: 'wise.com',
1318
- }}
1319
- >
1320
- {additionalInfo}
1321
- </ListItem.AdditionalInfo>
1322
- }
1323
- control={
1324
- <ListItem.Button partiallyInteractive onClick={cb}>
1325
- Save
1326
- </ListItem.Button>
1327
- }
1328
- />,
1329
- );
1330
- screen.debug(undefined, 99999999);
1331
- const control = screen.getByRole('button');
1332
- expect(control).toHaveAccessibleName(`Save`);
1333
- expect(control).toHaveAccessibleDescription(
1334
- `${title} ${subtitle} ${valueTitle} ${valueSubtitle} ${additionalInfo} ${additionalInfoAction}`,
1335
- );
1336
- });
1337
-
1338
- it('title, subtitle, valueTitle, valueSubtitle, and additionalInfo with button action', () => {
1339
- render(
1340
- <ListItem
1341
- title={title}
1342
- subtitle={subtitle}
1343
- valueTitle={valueTitle}
1344
- valueSubtitle={valueSubtitle}
1345
- additionalInfo={
1346
- <ListItem.AdditionalInfo action={{ label: additionalInfoAction, onClick: cb }}>
1347
- {additionalInfo}
1348
- </ListItem.AdditionalInfo>
1349
- }
1350
- control={
1351
- <ListItem.Button partiallyInteractive onClick={cb}>
1352
- Save
1353
- </ListItem.Button>
1354
- }
1355
- />,
1356
- );
1357
-
1358
- const control = screen.getAllByRole('button')[0];
1359
- expect(control).toHaveAccessibleName(`Save`);
1360
- expect(control).toHaveAccessibleDescription(
1361
- `${title} ${subtitle} ${valueTitle} ${valueSubtitle} ${additionalInfo} ${additionalInfoAction}`,
1362
- );
1363
- });
1364
-
1365
- it('title, subtitle, valueTitle, valueSubtitle, non-interactive additionalInfo, and prompt', () => {
1366
- render(
1367
- <ListItem
1368
- title={title}
1369
- subtitle={subtitle}
1370
- valueTitle={valueTitle}
1371
- valueSubtitle={valueSubtitle}
1372
- additionalInfo={<ListItem.AdditionalInfo>{additionalInfo}</ListItem.AdditionalInfo>}
1373
- prompt={<ListItem.Prompt>{prompt}</ListItem.Prompt>}
1374
- control={
1375
- <ListItem.Button partiallyInteractive onClick={cb}>
1376
- Save
1377
- </ListItem.Button>
1378
- }
1379
- />,
1380
- );
1381
-
1382
- const control = screen.getByRole('button');
1383
- expect(control).toHaveAccessibleName(`Save`);
1384
- expect(control).toHaveAccessibleDescription(
1385
- `${title} ${subtitle} ${valueTitle} ${valueSubtitle} ${additionalInfo} ${prompt}`,
1386
- );
1387
- });
1388
-
1389
- it('title, subtitle, valueTitle, valueSubtitle, non-interactive additionalInfo, and prompt with inline link', () => {
1390
- render(
1391
- <ListItem
1392
- title={title}
1393
- subtitle={subtitle}
1394
- valueTitle={valueTitle}
1395
- valueSubtitle={valueSubtitle}
1396
- additionalInfo={<ListItem.AdditionalInfo>{additionalInfo}</ListItem.AdditionalInfo>}
1397
- prompt={<ListItem.Prompt>{promptWithLink}</ListItem.Prompt>}
1398
- control={
1399
- <ListItem.Button partiallyInteractive onClick={cb}>
1400
- Save
1401
- </ListItem.Button>
1402
- }
1403
- />,
1404
- );
1405
-
1406
- const control = screen.getByRole('button');
1407
- expect(control).toHaveAccessibleName(`Save`);
1408
- expect(control).toHaveAccessibleDescription(
1409
- `${title} ${subtitle} ${valueTitle} ${valueSubtitle} ${additionalInfo} ${prompt} ${promptAction} ${prompt}`,
1410
- );
1411
- });
1412
-
1413
- it('title, subtitle, valueTitle, valueSubtitle, non-interactive additionalInfo, and prompt with inline button', () => {
1414
- render(
1415
- <ListItem
1416
- title={title}
1417
- subtitle={subtitle}
1418
- valueTitle={valueTitle}
1419
- valueSubtitle={valueSubtitle}
1420
- additionalInfo={<ListItem.AdditionalInfo>{additionalInfo}</ListItem.AdditionalInfo>}
1421
- prompt={<ListItem.Prompt>{promptWithButton}</ListItem.Prompt>}
1422
- control={
1423
- <ListItem.Button partiallyInteractive onClick={cb}>
1424
- Save
1425
- </ListItem.Button>
1426
- }
1427
- />,
1428
- );
1429
-
1430
- const control = screen.getAllByRole('button')[0];
1431
- expect(control).toHaveAccessibleName(`Save`);
1432
- expect(control).toHaveAccessibleDescription(
1433
- `${title} ${subtitle} ${valueTitle} ${valueSubtitle} ${additionalInfo} ${prompt} ${promptAction} ${prompt}`,
1434
- );
1435
- });
1436
-
1437
- it('title, subtitle, valueTitle, valueSubtitle, non-interactive additionalInfo, prompt, and inverted layout', () => {
1438
- render(
1439
- <ListItem
1440
- title={title}
1441
- subtitle={subtitle}
1442
- valueTitle={valueTitle}
1443
- valueSubtitle={valueSubtitle}
1444
- additionalInfo={<ListItem.AdditionalInfo>{additionalInfo}</ListItem.AdditionalInfo>}
1445
- prompt={<ListItem.Prompt>{prompt}</ListItem.Prompt>}
1446
- inverted
1447
- control={
1448
- <ListItem.Button partiallyInteractive onClick={cb}>
1449
- Save
1450
- </ListItem.Button>
1451
- }
1452
- />,
1453
- );
1454
-
1455
- const control = screen.getByRole('button');
1456
- expect(control).toHaveAccessibleName(`Save`);
1457
- expect(control).toHaveAccessibleDescription(
1458
- `${subtitle} ${title} ${valueSubtitle} ${valueTitle} ${additionalInfo} ${prompt}`,
1459
- );
1460
- });
1461
- });
1462
- });
1463
- });
1464
- });
1465
-
1466
- describe('spotlight', () => {
1467
- it('only fully interactive variant can have spotlight:active', () => {
1468
- render(<ListItem title="Test Title" spotlight="active" control={<ListItem.Navigation />} />);
1469
- const listItem = screen.getByRole('listitem');
1470
- expect(listItem).toHaveClass('wds-list-item-interactive');
1471
- expect(listItem).toHaveClass('wds-list-item-spotlight-active');
1472
- });
1473
-
1474
- it('only fully interactive variant can have spotlight:inactive', () => {
1475
- render(
1476
- <ListItem
1477
- title="Test Title"
1478
- spotlight="inactive"
1479
- control={<ListItem.Switch onClick={cb} />}
1480
- />,
1481
- );
1482
- const listItem = screen.getByRole('listitem');
1483
- expect(listItem).toHaveClass('wds-list-item-interactive');
1484
- expect(listItem).toHaveClass('wds-list-item-spotlight-inactive');
1485
- });
1486
-
1487
- it('non interactive variant can have spotlight', () => {
1488
- render(<ListItem title="Test Title" spotlight="inactive" />);
1489
- const listItem = screen.getByRole('listitem');
1490
- expect(listItem).toHaveClass('wds-list-item-non-interactive');
1491
- expect(listItem).not.toHaveClass('wds-list-item-interactive');
1492
- expect(listItem).not.toHaveClass('wds-list-item-spotlight-inactive');
1493
- expect(listItem).not.toHaveClass('wds-list-item-spotlight-active');
1494
- });
1495
- });
1496
- });