@ons/design-system 70.0.6 → 70.0.8

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 (308) hide show
  1. package/README.md +11 -17
  2. package/components/access-code/_macro.spec.js +145 -145
  3. package/components/access-code/access-code.dom.js +5 -5
  4. package/components/access-code/access-code.js +16 -16
  5. package/components/access-code/access-code.scss +22 -22
  6. package/components/access-code/access-code.spec.js +17 -17
  7. package/components/accordion/_macro.spec.js +154 -154
  8. package/components/accordion/accordion.dom.js +10 -10
  9. package/components/accordion/accordion.js +50 -50
  10. package/components/accordion/accordion.spec.js +104 -104
  11. package/components/address-input/_macro.spec.js +420 -420
  12. package/components/address-input/autosuggest.address.dom.js +5 -5
  13. package/components/address-input/autosuggest.address.error.js +77 -77
  14. package/components/address-input/autosuggest.address.js +357 -357
  15. package/components/address-input/autosuggest.address.setter.js +95 -95
  16. package/components/address-input/autosuggest.address.spec.js +668 -651
  17. package/components/address-input/example-address-input-editable.njk +1 -1
  18. package/components/address-input/example-address-input.njk +1 -1
  19. package/components/address-output/_address-output.scss +3 -3
  20. package/components/address-output/_macro.spec.js +84 -84
  21. package/components/autosuggest/_autosuggest.scss +114 -114
  22. package/components/autosuggest/_macro.spec.js +255 -255
  23. package/components/autosuggest/autosuggest.dom.js +5 -5
  24. package/components/autosuggest/autosuggest.helpers.js +11 -11
  25. package/components/autosuggest/autosuggest.helpers.spec.js +73 -73
  26. package/components/autosuggest/autosuggest.js +20 -20
  27. package/components/autosuggest/autosuggest.spec.js +542 -536
  28. package/components/autosuggest/autosuggest.ui.js +478 -475
  29. package/components/autosuggest/fuse-config.js +17 -17
  30. package/components/back-to-top/_back-to-top.scss +27 -27
  31. package/components/back-to-top/_macro.spec.js +49 -49
  32. package/components/back-to-top/back-to-top.dom.js +5 -5
  33. package/components/back-to-top/back-to-top.js +52 -52
  34. package/components/back-to-top/back-to-top.spec.js +106 -106
  35. package/components/back-to-top/example-back-to-top.njk +6 -6
  36. package/components/breadcrumbs/_breadcrumbs.scss +63 -65
  37. package/components/breadcrumbs/_macro.spec.js +91 -91
  38. package/components/browser-banner/_browser-banner.scss +23 -23
  39. package/components/browser-banner/_macro.spec.js +92 -92
  40. package/components/button/_button.scss +482 -483
  41. package/components/button/_macro.spec.js +363 -363
  42. package/components/button/button.dom.js +15 -15
  43. package/components/button/button.js +53 -53
  44. package/components/button/button.spec.js +248 -240
  45. package/components/call-to-action/_call-to-action.scss +5 -5
  46. package/components/call-to-action/_macro.spec.js +28 -28
  47. package/components/card/_card.scss +23 -23
  48. package/components/card/_macro.spec.js +180 -180
  49. package/components/char-check-limit/_macro.spec.js +48 -48
  50. package/components/char-check-limit/character-check.js +58 -58
  51. package/components/char-check-limit/character-check.spec.js +173 -173
  52. package/components/char-check-limit/character-limit.js +40 -40
  53. package/components/checkboxes/_checkbox-macro.spec.js +355 -355
  54. package/components/checkboxes/_checkbox.scss +180 -180
  55. package/components/checkboxes/_checkboxes.scss +37 -27
  56. package/components/checkboxes/_macro.spec.js +261 -261
  57. package/components/checkboxes/checkbox-with-autoselect.js +32 -32
  58. package/components/checkboxes/checkbox-with-fieldset.js +21 -21
  59. package/components/checkboxes/checkboxes-with-reveal.js +10 -10
  60. package/components/checkboxes/checkboxes.dom.js +27 -27
  61. package/components/checkboxes/checkboxes.spec.js +183 -183
  62. package/components/content-pagination/_content-pagination.scss +41 -41
  63. package/components/content-pagination/_macro.spec.js +159 -159
  64. package/components/cookies-banner/_cookies-banner.scss +22 -22
  65. package/components/cookies-banner/_macro.spec.js +177 -177
  66. package/components/cookies-banner/cookies-banner.dom.js +7 -7
  67. package/components/cookies-banner/cookies-banner.js +76 -76
  68. package/components/cookies-banner/cookies-banner.spec.js +72 -68
  69. package/components/date-input/_macro.spec.js +338 -338
  70. package/components/description-list/_description-list.scss +23 -23
  71. package/components/description-list/_macro.spec.js +144 -144
  72. package/components/details/_details.scss +109 -109
  73. package/components/details/_macro.spec.js +132 -132
  74. package/components/details/details.dom.js +6 -6
  75. package/components/details/details.js +60 -60
  76. package/components/details/details.spec.js +106 -106
  77. package/components/document-list/_macro.spec.js +444 -444
  78. package/components/document-list/document-list.scss +145 -149
  79. package/components/download-resources/_download-resources.scss +109 -108
  80. package/components/download-resources/download-resources.js +907 -900
  81. package/components/download-resources/download-resources.spec.js +461 -461
  82. package/components/duration/_macro.spec.js +291 -291
  83. package/components/error/_macro.spec.js +72 -72
  84. package/components/external-link/_external-link.scss +19 -19
  85. package/components/external-link/_macro.spec.js +68 -68
  86. package/components/feedback/_feedback.scss +31 -31
  87. package/components/feedback/_macro.spec.js +72 -72
  88. package/components/field/_field-group.scss +10 -10
  89. package/components/field/_field.scss +16 -16
  90. package/components/field/_macro.spec.js +80 -80
  91. package/components/fieldset/_fieldset.scss +27 -27
  92. package/components/fieldset/_macro.spec.js +161 -161
  93. package/components/footer/_footer.scss +45 -45
  94. package/components/footer/_macro.spec.js +452 -452
  95. package/components/header/_header.scss +202 -202
  96. package/components/header/_macro.spec.js +833 -829
  97. package/components/helpers/_grid.scss +4 -4
  98. package/components/hero/_hero.scss +48 -48
  99. package/components/hero/_macro.spec.js +59 -59
  100. package/components/icon/_icon.scss +44 -44
  101. package/components/icon/_macro.spec.js +110 -110
  102. package/components/image/_image.scss +11 -11
  103. package/components/image/_macro.spec.js +81 -81
  104. package/components/input/_input-type.scss +86 -89
  105. package/components/input/_input.scss +123 -124
  106. package/components/input/_macro.spec.js +604 -604
  107. package/components/input/character-check.dom.js +5 -5
  108. package/components/input/input.dom.js +5 -5
  109. package/components/input/input.js +10 -10
  110. package/components/input/input.spec.js +18 -18
  111. package/components/label/_label.scss +24 -24
  112. package/components/label/_macro.spec.js +173 -170
  113. package/components/language-selector/_macro.spec.js +97 -97
  114. package/components/language-selector/language.scss +7 -7
  115. package/components/list/_list.scss +84 -84
  116. package/components/list/_macro.njk +2 -2
  117. package/components/list/_macro.spec.js +583 -583
  118. package/components/message/_macro.njk +5 -5
  119. package/components/message/_macro.spec.js +74 -74
  120. package/components/message/_message.scss +39 -39
  121. package/components/message-list/_macro.spec.js +86 -86
  122. package/components/message-list/_message-list.scss +16 -16
  123. package/components/modal/_macro.spec.js +69 -69
  124. package/components/modal/_modal.scss +36 -36
  125. package/components/modal/modal.dom.js +6 -6
  126. package/components/modal/modal.js +89 -89
  127. package/components/modal/modal.spec.js +50 -50
  128. package/components/mutually-exclusive/_macro.spec.js +140 -140
  129. package/components/mutually-exclusive/mutually-exclusive.checkboxes.spec.js +188 -188
  130. package/components/mutually-exclusive/mutually-exclusive.date.spec.js +211 -211
  131. package/components/mutually-exclusive/mutually-exclusive.dom.js +5 -5
  132. package/components/mutually-exclusive/mutually-exclusive.duration.spec.js +210 -210
  133. package/components/mutually-exclusive/mutually-exclusive.email.spec.js +90 -90
  134. package/components/mutually-exclusive/mutually-exclusive.js +137 -137
  135. package/components/mutually-exclusive/mutually-exclusive.multiple-options.checkboxes.spec.js +197 -197
  136. package/components/mutually-exclusive/mutually-exclusive.number.spec.js +96 -96
  137. package/components/mutually-exclusive/mutually-exclusive.textarea.spec.js +102 -102
  138. package/components/navigation/_macro.spec.js +360 -354
  139. package/components/navigation/_navigation.scss +122 -123
  140. package/components/navigation/navigation.dom.js +35 -35
  141. package/components/navigation/navigation.js +49 -49
  142. package/components/navigation/navigation.spec.js +249 -249
  143. package/components/pagination/_macro.spec.js +342 -335
  144. package/components/pagination/_pagination.scss +58 -58
  145. package/components/panel/_macro.spec.js +372 -372
  146. package/components/panel/_panel.scss +200 -199
  147. package/components/password/_macro.spec.js +95 -95
  148. package/components/password/password.dom.js +5 -5
  149. package/components/password/password.js +10 -10
  150. package/components/password/password.spec.js +26 -26
  151. package/components/phase-banner/_macro.spec.js +86 -86
  152. package/components/phase-banner/_phase-banner.scss +16 -16
  153. package/components/question/_macro.spec.js +235 -235
  154. package/components/question/_question.scss +24 -24
  155. package/components/quote/_macro.spec.js +52 -52
  156. package/components/quote/_quote.scss +24 -24
  157. package/components/radios/_macro.spec.js +524 -524
  158. package/components/radios/_radio.scss +49 -48
  159. package/components/radios/_radios.scss +14 -20
  160. package/components/radios/check-radios.js +21 -21
  161. package/components/radios/clear-radios.js +45 -45
  162. package/components/radios/radio-with-fieldset.js +22 -22
  163. package/components/radios/radios.dom.js +32 -32
  164. package/components/radios/radios.spec.js +251 -251
  165. package/components/related-content/_macro.spec.js +109 -109
  166. package/components/related-content/_related-content.scss +12 -12
  167. package/components/related-content/_section-macro.spec.js +20 -20
  168. package/components/relationships/_macro.spec.js +94 -94
  169. package/components/relationships/_relationships.scss +9 -9
  170. package/components/relationships/relationships.dom.js +5 -5
  171. package/components/relationships/relationships.js +18 -18
  172. package/components/relationships/relationships.spec.js +71 -71
  173. package/components/reply/_macro.spec.js +47 -47
  174. package/components/reply/reply-input.js +15 -15
  175. package/components/reply/reply.dom.js +5 -5
  176. package/components/reply/reply.spec.js +57 -57
  177. package/components/section-navigation/_macro.spec.js +210 -210
  178. package/components/section-navigation/_section-navigation.scss +76 -76
  179. package/components/select/_macro.spec.js +166 -166
  180. package/components/share-page/_macro.spec.js +68 -68
  181. package/components/skip-to-content/_macro.spec.js +54 -54
  182. package/components/skip-to-content/_skip.scss +30 -30
  183. package/components/skip-to-content/skip-to-content.dom.js +6 -6
  184. package/components/skip-to-content/skip-to-content.js +7 -7
  185. package/components/skip-to-content/skip-to-content.spec.js +21 -21
  186. package/components/status/_macro.spec.js +53 -53
  187. package/components/status/_status.scss +32 -32
  188. package/components/summary/_macro.spec.js +551 -535
  189. package/components/summary/_summary.scss +191 -195
  190. package/components/table/_macro.spec.js +499 -499
  191. package/components/table/_table.scss +204 -201
  192. package/components/table/scrollable-table.dom.js +5 -5
  193. package/components/table/scrollable-table.js +60 -60
  194. package/components/table/sortable-table.dom.js +5 -5
  195. package/components/table/sortable-table.js +135 -135
  196. package/components/table/table.spec.js +144 -140
  197. package/components/table-of-contents/_macro.spec.js +125 -125
  198. package/components/table-of-contents/_toc.scss +9 -9
  199. package/components/table-of-contents/toc.dom.js +5 -5
  200. package/components/table-of-contents/toc.js +30 -30
  201. package/components/table-of-contents/toc.spec.js +88 -88
  202. package/components/tabs/_macro.spec.js +92 -92
  203. package/components/tabs/_tabs.scss +120 -115
  204. package/components/tabs/tabs.dom.js +5 -5
  205. package/components/tabs/tabs.js +266 -266
  206. package/components/tabs/tabs.spec.js +268 -268
  207. package/components/text-indent/_macro.spec.js +33 -33
  208. package/components/text-indent/_text-indent.scss +3 -3
  209. package/components/textarea/_macro.spec.js +238 -238
  210. package/components/textarea/textarea.dom.js +5 -5
  211. package/components/textarea/textarea.spec.js +78 -74
  212. package/components/timeline/_macro.spec.js +83 -83
  213. package/components/timeline/_timeline.scss +26 -26
  214. package/components/timeout-modal/_macro.spec.js +47 -47
  215. package/components/timeout-modal/timeout-modal.dom.js +9 -9
  216. package/components/timeout-modal/timeout-modal.js +66 -66
  217. package/components/timeout-modal/timeout-modal.spec.js +157 -157
  218. package/components/timeout-panel/_macro.spec.js +41 -41
  219. package/components/timeout-panel/timeout-panel.dom.js +8 -8
  220. package/components/timeout-panel/timeout-panel.spec.js +118 -118
  221. package/components/upload/_macro.spec.js +52 -52
  222. package/components/upload/_upload.scss +28 -28
  223. package/components/video/_macro.spec.js +42 -42
  224. package/components/video/_video.scss +16 -16
  225. package/components/video/video.dom.js +5 -5
  226. package/components/video/video.js +32 -32
  227. package/components/video/video.spec.js +103 -97
  228. package/css/main.css +1 -1
  229. package/favicons/android-chrome-192x192.png +0 -0
  230. package/favicons/android-chrome-512x512.png +0 -0
  231. package/favicons/apple-touch-icon.png +0 -0
  232. package/favicons/favicon-16x16.png +0 -0
  233. package/favicons/favicon-32x32.png +0 -0
  234. package/favicons/favicon.ico +0 -0
  235. package/favicons/manifest.json +25 -25
  236. package/favicons/maskable_icon.png +0 -0
  237. package/favicons/opengraph.png +0 -0
  238. package/favicons/twitter.png +0 -0
  239. package/img/large/alison-pritchard-featured.jpg +0 -0
  240. package/img/large/alison-pritchard.jpg +0 -0
  241. package/img/large/census-monuments-lights-featured.jpg +0 -0
  242. package/img/large/census-monuments-lights.jpg +0 -0
  243. package/img/large/mother-and-daughter-in-ireland.jpg +0 -0
  244. package/img/large/mum-and-child-healthcare-belfast.jpg +0 -0
  245. package/img/large/ons-award-winners.jpg +0 -0
  246. package/img/large/placeholder-card.png +0 -0
  247. package/img/large/placeholder-news-medium.png +0 -0
  248. package/img/large/placeholder-news.png +0 -0
  249. package/img/large/placeholder-portrait.png +0 -0
  250. package/img/large/students.jpg +0 -0
  251. package/img/large/woman-in-purple-dress-shirt.jpg +0 -0
  252. package/img/small/alison-pritchard-featured.jpg +0 -0
  253. package/img/small/alison-pritchard.jpg +0 -0
  254. package/img/small/census-monuments-lights-featured.jpg +0 -0
  255. package/img/small/census-monuments-lights.jpg +0 -0
  256. package/img/small/mother-and-daughter-in-ireland.jpg +0 -0
  257. package/img/small/mum-and-child-healthcare-belfast.jpg +0 -0
  258. package/img/small/ons-award-winners.jpg +0 -0
  259. package/img/small/placeholder-card.png +0 -0
  260. package/img/small/placeholder-news-medium.png +0 -0
  261. package/img/small/placeholder-news.png +0 -0
  262. package/img/small/placeholder-portrait.png +0 -0
  263. package/img/small/students.jpg +0 -0
  264. package/img/small/woman-in-purple-dress-shirt.jpg +0 -0
  265. package/js/abortable-fetch.js +23 -23
  266. package/js/analytics.js +53 -53
  267. package/js/cookies-functions.js +135 -135
  268. package/js/cookies-settings.dom.js +7 -7
  269. package/js/cookies-settings.js +77 -77
  270. package/js/cookies-settings.spec.js +106 -106
  271. package/js/domready.js +8 -8
  272. package/js/fetch.js +14 -14
  273. package/js/inpagelink.dom.js +5 -5
  274. package/js/inpagelink.js +19 -19
  275. package/js/polyfills.js +0 -1
  276. package/js/print-button.js +6 -6
  277. package/js/timeout.js +211 -211
  278. package/layout/_template.njk +5 -7
  279. package/package.json +131 -127
  280. package/scripts/main.es5.js +1 -1
  281. package/scripts/main.js +1 -1
  282. package/scss/base/_forms.scss +10 -10
  283. package/scss/base/_global.scss +45 -44
  284. package/scss/base/_typography.scss +20 -20
  285. package/scss/helpers/_functions.scss +18 -15
  286. package/scss/helpers/_mixins.scss +59 -53
  287. package/scss/helpers/_mq.scss +62 -65
  288. package/scss/objects/_container.scss +20 -20
  289. package/scss/objects/_page.scss +33 -33
  290. package/scss/objects/_spacing.scss +10 -10
  291. package/scss/overrides/hcm.scss +237 -237
  292. package/scss/overrides/rtl.scss +95 -95
  293. package/scss/print.scss +47 -47
  294. package/scss/utilities/_border.scss +7 -7
  295. package/scss/utilities/_colors.scss +6 -6
  296. package/scss/utilities/_display.scss +8 -8
  297. package/scss/utilities/_float.scss +7 -7
  298. package/scss/utilities/_grid.scss +144 -144
  299. package/scss/utilities/_highlight.scss +4 -4
  300. package/scss/utilities/_margin.scss +17 -17
  301. package/scss/utilities/_pad.scss +15 -15
  302. package/scss/utilities/_typography.scss +35 -33
  303. package/scss/utilities/_utilities.scss +8 -8
  304. package/scss/utilities/_visibility.scss +25 -25
  305. package/scss/vars/_colors.scss +116 -116
  306. package/scss/vars/_forms.scss +22 -22
  307. package/scss/vars/_grid.scss +11 -9
  308. package/scss/vars/_typography.scss +54 -54
@@ -6,647 +6,663 @@ import axe from '../../tests/helpers/axe';
6
6
  import { renderComponent, templateFaker } from '../../tests/helpers/rendering';
7
7
 
8
8
  const EXAMPLE_SUMMARY_ROWS = {
9
- rows: [
10
- {
11
- // Contains - row with icon, attributes and rowTitleAttributes, other value, no action
12
- id: 'row-id-1',
13
- rowTitle: 'row title 1',
14
- rowItems: [
9
+ rows: [
15
10
  {
16
- rowTitleAttributes: {
17
- a: 123,
18
- b: 456,
19
- },
20
- attributes: {
21
- a: 'aaa',
22
- b: 'bbb',
23
- },
24
- iconType: 'check',
25
- iconVisuallyHiddenText: 'Section completed',
26
- id: 'item-id-1',
27
- valueList: [
28
- {
29
- text: 'row value 1',
30
- other: 'other value',
31
- },
32
- ],
11
+ // Contains - row with icon, attributes and rowTitleAttributes, other value, no action
12
+ id: 'row-id-1',
13
+ rowTitle: 'row title 1',
14
+ rowItems: [
15
+ {
16
+ rowTitleAttributes: {
17
+ a: 123,
18
+ b: 456,
19
+ },
20
+ attributes: {
21
+ a: 'aaa',
22
+ b: 'bbb',
23
+ },
24
+ iconType: 'check',
25
+ iconVisuallyHiddenText: 'Section completed',
26
+ id: 'item-id-1',
27
+ valueList: [
28
+ {
29
+ text: 'row value 1',
30
+ other: 'other value',
31
+ },
32
+ ],
33
+ },
34
+ ],
33
35
  },
34
- ],
35
- },
36
- {
37
- // Contains - row with error and multiple actions
38
- id: 'row-id-2',
39
- rowTitle: 'row title 2',
40
- error: true,
41
- errorMessage: 'there are errors',
42
- rowItems: [
43
36
  {
44
- id: 'item-id-2',
45
- valueList: [
46
- {
47
- text: 'row value 2',
48
- },
49
- ],
50
- actions: [
51
- {
52
- text: 'Action 1',
53
- visuallyHiddenText: 'action 1 for row title 2',
54
- attributes: {
55
- a: 'abc',
56
- b: 'def',
57
- },
58
- url: '#1',
59
- },
60
- {
61
- text: 'Action 2',
62
- visuallyHiddenText: 'action 2 for row title 2',
63
- url: '#2',
64
- },
65
- ],
37
+ // Contains - row with error and multiple actions
38
+ id: 'row-id-2',
39
+ rowTitle: 'row title 2',
40
+ error: true,
41
+ errorMessage: 'there are errors',
42
+ rowItems: [
43
+ {
44
+ id: 'item-id-2',
45
+ valueList: [
46
+ {
47
+ text: 'row value 2',
48
+ },
49
+ ],
50
+ actions: [
51
+ {
52
+ text: 'Action 1',
53
+ visuallyHiddenText: 'action 1 for row title 2',
54
+ attributes: {
55
+ a: 'abc',
56
+ b: 'def',
57
+ },
58
+ url: '#1',
59
+ },
60
+ {
61
+ text: 'Action 2',
62
+ visuallyHiddenText: 'action 2 for row title 2',
63
+ url: '#2',
64
+ },
65
+ ],
66
+ },
67
+ ],
66
68
  },
67
- ],
68
- },
69
- {
70
- // Contains - row with multiple rows and multiple values
71
- id: 'row-id-3',
72
- rowTitle: 'row title 3',
73
- rowItems: [
74
69
  {
75
- id: 'item-id-3',
76
- valueList: [
77
- {
78
- text: 'row value 3',
79
- },
80
- {
81
- text: 'row value 3b',
82
- },
83
- ],
84
- },
85
- {
86
- id: 'item-id-4',
87
- valueList: [
88
- {
89
- text: 'row value 4',
90
- },
91
- ],
70
+ // Contains - row with multiple rows and multiple values
71
+ id: 'row-id-3',
72
+ rowTitle: 'row title 3',
73
+ rowItems: [
74
+ {
75
+ id: 'item-id-3',
76
+ valueList: [
77
+ {
78
+ text: 'row value 3',
79
+ },
80
+ {
81
+ text: 'row value 3b',
82
+ },
83
+ ],
84
+ },
85
+ {
86
+ id: 'item-id-4',
87
+ valueList: [
88
+ {
89
+ text: 'row value 4',
90
+ },
91
+ ],
92
+ },
93
+ ],
92
94
  },
93
- ],
94
- },
95
- {
96
- // Contains - row with total
97
- id: 'row-id-4',
98
- rowTitle: 'row title 4',
99
- total: true,
100
- rowItems: [
101
95
  {
102
- id: 'item-id-5',
103
- valueList: [
104
- {
105
- text: '£234,000.00',
106
- },
107
- ],
96
+ // Contains - row with total
97
+ id: 'row-id-4',
98
+ rowTitle: 'row title 4',
99
+ total: true,
100
+ rowItems: [
101
+ {
102
+ id: 'item-id-5',
103
+ valueList: [
104
+ {
105
+ text: '£234,000.00',
106
+ },
107
+ ],
108
+ },
109
+ ],
108
110
  },
109
- ],
110
- },
111
- ],
111
+ ],
112
112
  };
113
113
 
114
114
  const EXAMPLE_SUMMARY_GROUPS = {
115
- groups: [
116
- {
117
- id: 'group-id-1',
118
- groupTitle: 'group title',
119
- ...EXAMPLE_SUMMARY_ROWS,
120
- },
121
- ],
115
+ groups: [
116
+ {
117
+ id: 'group-id-1',
118
+ groupTitle: 'group title',
119
+ ...EXAMPLE_SUMMARY_ROWS,
120
+ },
121
+ ],
122
122
  };
123
123
 
124
124
  const EXAMPLE_SUMMARY_GROUPS_NO_ROWS = {
125
- groups: [
126
- {
127
- placeholderText: 'Placeholder text',
128
- summaryLink: {
129
- text: 'Summary link',
130
- url: '#0',
131
- attributes: {
132
- a: 'xyz',
125
+ groups: [
126
+ {
127
+ placeholderText: 'Placeholder text',
128
+ summaryLink: {
129
+ text: 'Summary link',
130
+ url: '#0',
131
+ attributes: {
132
+ a: 'xyz',
133
+ },
134
+ },
133
135
  },
134
- },
135
- },
136
- ],
136
+ ],
137
137
  };
138
138
 
139
139
  const EXAMPLE_SUMMARY_HOUSEHOLD_GROUP = {
140
- rows: [
141
- {
142
- rowItems: [
140
+ rows: [
143
141
  {
144
- rowTitle: 'row item 1',
145
- valueList: [
146
- {
147
- text: 'list item 1',
148
- },
149
- ],
150
- actions: [
151
- {
152
- text: 'Change',
153
- visuallyHiddenText: 'change list item',
154
- url: '#0',
155
- },
156
- {
157
- text: 'Remove',
158
- visuallyHiddenText: 'remove list item',
159
- url: '#0',
160
- },
161
- ],
142
+ rowItems: [
143
+ {
144
+ rowTitle: 'row item 1',
145
+ valueList: [
146
+ {
147
+ text: 'list item 1',
148
+ },
149
+ ],
150
+ actions: [
151
+ {
152
+ text: 'Change',
153
+ visuallyHiddenText: 'change list item',
154
+ url: '#0',
155
+ },
156
+ {
157
+ text: 'Remove',
158
+ visuallyHiddenText: 'remove list item',
159
+ url: '#0',
160
+ },
161
+ ],
162
+ },
163
+ {
164
+ rowTitle: 'row item 2',
165
+ valueList: [
166
+ {
167
+ text: 'list item 2',
168
+ },
169
+ ],
170
+ actions: [
171
+ {
172
+ text: 'Change',
173
+ visuallyHiddenText: 'change list item',
174
+ url: '#0',
175
+ },
176
+ ],
177
+ },
178
+ {
179
+ rowTitle: 'row item 3',
180
+ valueList: [
181
+ {
182
+ text: 'list item 3',
183
+ },
184
+ ],
185
+ actions: [
186
+ {
187
+ text: 'Change',
188
+ visuallyHiddenText: 'change list item',
189
+ url: '#0',
190
+ },
191
+ ],
192
+ },
193
+ ],
162
194
  },
163
195
  {
164
- rowTitle: 'row item 2',
165
- valueList: [
166
- {
167
- text: 'list item 2',
168
- },
169
- ],
170
- actions: [
171
- {
172
- text: 'Change',
173
- visuallyHiddenText: 'change list item',
174
- url: '#0',
175
- },
176
- ],
177
- },
178
- {
179
- rowTitle: 'row item 3',
180
- valueList: [
181
- {
182
- text: 'list item 3',
183
- },
184
- ],
185
- actions: [
186
- {
187
- text: 'Change',
188
- visuallyHiddenText: 'change list item',
189
- url: '#0',
190
- },
191
- ],
192
- },
193
- ],
194
- },
195
- {
196
- rowItems: [
197
- {
198
- rowTitle: 'row item 4',
199
- valueList: [
200
- {
201
- text: 'list item 4',
202
- },
203
- ],
204
- actions: [
205
- {
206
- text: 'Change',
207
- visuallyHiddenText: 'change answer',
208
- url: '#0',
209
- },
210
- {
211
- text: 'Remove',
212
- visuallyHiddenText: 'remove list item',
213
- url: '#0',
214
- },
215
- ],
196
+ rowItems: [
197
+ {
198
+ rowTitle: 'row item 4',
199
+ valueList: [
200
+ {
201
+ text: 'list item 4',
202
+ },
203
+ ],
204
+ actions: [
205
+ {
206
+ text: 'Change',
207
+ visuallyHiddenText: 'change answer',
208
+ url: '#0',
209
+ },
210
+ {
211
+ text: 'Remove',
212
+ visuallyHiddenText: 'remove list item',
213
+ url: '#0',
214
+ },
215
+ ],
216
+ },
217
+ {
218
+ rowTitle: 'row item 5',
219
+ valueList: [
220
+ {
221
+ text: 'list item 5',
222
+ },
223
+ ],
224
+ actions: [
225
+ {
226
+ text: 'Change',
227
+ visuallyHiddenText: 'change list item',
228
+ url: '#0',
229
+ },
230
+ ],
231
+ },
232
+ {
233
+ rowTitle: 'row item 6',
234
+ valueList: [
235
+ {
236
+ text: 'list item 6',
237
+ },
238
+ ],
239
+ actions: [
240
+ {
241
+ text: 'Change',
242
+ visuallyHiddenText: 'change list item',
243
+ url: '#0',
244
+ },
245
+ ],
246
+ },
247
+ ],
216
248
  },
217
- {
218
- rowTitle: 'row item 5',
219
- valueList: [
220
- {
221
- text: 'list item 5',
222
- },
223
- ],
224
- actions: [
225
- {
226
- text: 'Change',
227
- visuallyHiddenText: 'change list item',
228
- url: '#0',
229
- },
230
- ],
231
- },
232
- {
233
- rowTitle: 'row item 6',
234
- valueList: [
235
- {
236
- text: 'list item 6',
237
- },
238
- ],
239
- actions: [
240
- {
241
- text: 'Change',
242
- visuallyHiddenText: 'change list item',
243
- url: '#0',
244
- },
245
- ],
246
- },
247
- ],
249
+ ],
250
+ summaryLink: {
251
+ text: 'Summary link',
252
+ url: '#0',
248
253
  },
249
- ],
250
- summaryLink: {
251
- text: 'Summary link',
252
- url: '#0',
253
- },
254
254
  };
255
255
 
256
256
  const EXAMPLE_SUMMARY_BASIC = {
257
- summaries: [
258
- {
259
- ...EXAMPLE_SUMMARY_GROUPS,
260
- },
261
- ],
257
+ summaries: [
258
+ {
259
+ ...EXAMPLE_SUMMARY_GROUPS,
260
+ },
261
+ ],
262
262
  };
263
263
 
264
264
  const EXAMPLE_SUMMARY_WITH_TITLE = {
265
- summaries: [
266
- {
267
- summaryTitle: 'summary title',
268
- ...EXAMPLE_SUMMARY_GROUPS,
269
- },
270
- ],
265
+ summaries: [
266
+ {
267
+ summaryTitle: 'summary title',
268
+ ...EXAMPLE_SUMMARY_GROUPS,
269
+ },
270
+ ],
271
271
  };
272
272
 
273
273
  const EXAMPLE_SUMMARY_WITH_NO_ROWS = {
274
- summaries: [
275
- {
276
- summaryTitle: 'summary title',
277
- ...EXAMPLE_SUMMARY_GROUPS_NO_ROWS,
278
- },
279
- ],
274
+ summaries: [
275
+ {
276
+ summaryTitle: 'summary title',
277
+ ...EXAMPLE_SUMMARY_GROUPS_NO_ROWS,
278
+ },
279
+ ],
280
280
  };
281
281
 
282
282
  const EXAMPLE_SUMMARY_MULTIPLE_GROUPS = {
283
- summaries: [
284
- {
285
- summaryTitle: 'summary title',
286
- groups: [
283
+ summaries: [
287
284
  {
288
- id: 'group-id-1',
289
- groupTitle: 'group title',
290
- ...EXAMPLE_SUMMARY_ROWS,
285
+ summaryTitle: 'summary title',
286
+ groups: [
287
+ {
288
+ id: 'group-id-1',
289
+ groupTitle: 'group title',
290
+ ...EXAMPLE_SUMMARY_ROWS,
291
+ },
292
+ {
293
+ id: 'group-id-2',
294
+ groupTitle: 'group title',
295
+ ...EXAMPLE_SUMMARY_HOUSEHOLD_GROUP,
296
+ },
297
+ {
298
+ id: 'group-id-3',
299
+ groupTitle: 'group title',
300
+ ...EXAMPLE_SUMMARY_ROWS,
301
+ },
302
+ ],
291
303
  },
292
- {
293
- id: 'group-id-2',
294
- groupTitle: 'group title',
295
- ...EXAMPLE_SUMMARY_HOUSEHOLD_GROUP,
296
- },
297
- {
298
- id: 'group-id-3',
299
- groupTitle: 'group title',
300
- ...EXAMPLE_SUMMARY_ROWS,
301
- },
302
- ],
303
- },
304
- ],
304
+ ],
305
305
  };
306
306
 
307
307
  // To address a DAC issue, we've disabled specific axe definition list rules causing test failures.
308
308
  // While resolving it would require a significant refactor, the failures are deemed non-critical for accessibility,
309
309
  // leading to their removal in this context. [https://github.com/ONSdigital/design-system/issues/3027]
310
310
  const axeRules = {
311
- rules: {
312
- dlitem: {
313
- enabled: false,
314
- },
315
- 'definition-list': {
316
- enabled: false,
311
+ rules: {
312
+ dlitem: {
313
+ enabled: false,
314
+ },
315
+ 'definition-list': {
316
+ enabled: false,
317
+ },
317
318
  },
318
- },
319
319
  };
320
320
 
321
321
  describe('macro: summary', () => {
322
- describe('mode: general', () => {
323
- it('passes jest-axe checks', async () => {
324
- const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_BASIC));
325
- const results = await axe($.html(), axeRules);
326
-
327
- expect(results).toHaveNoViolations();
328
- });
329
-
330
- it('has custom classes applied', () => {
331
- const $ = cheerio.load(
332
- renderComponent('summary', {
333
- ...EXAMPLE_SUMMARY_BASIC,
334
- classes: 'ons-custom-class',
335
- }),
336
- );
322
+ describe('mode: general', () => {
323
+ it('passes jest-axe checks', async () => {
324
+ const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_BASIC));
325
+ const results = await axe($.html(), axeRules);
337
326
 
338
- expect($('.ons-summary').hasClass('ons-custom-class')).toBe(true);
339
- });
340
-
341
- describe('part: group', () => {
342
- it('has the correct group `id`', () => {
343
- const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_BASIC));
344
-
345
- expect($('#group-id-1').length).toBe(1);
346
- });
327
+ expect(results).toHaveNoViolations();
328
+ });
347
329
 
348
- it('has the correct `groupTitle` tag', () => {
349
- const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_BASIC));
330
+ it('has custom classes applied', () => {
331
+ const $ = cheerio.load(
332
+ renderComponent('summary', {
333
+ ...EXAMPLE_SUMMARY_BASIC,
334
+ classes: 'ons-custom-class',
335
+ }),
336
+ );
350
337
 
351
- expect($('.ons-summary__group-title')[0].tagName).toBe('h2');
352
- });
338
+ expect($('.ons-summary').hasClass('ons-custom-class')).toBe(true);
339
+ });
353
340
 
354
- it('has the `groupTitle` text', () => {
355
- const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_BASIC));
341
+ describe('part: group', () => {
342
+ it('has the correct group `id`', () => {
343
+ const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_BASIC));
356
344
 
357
- expect($('.ons-summary__group-title').text()).toBe('group title');
358
- });
345
+ expect($('#group-id-1').length).toBe(1);
346
+ });
359
347
 
360
- it('has larger margin between groups if the top one is a household style summary', () => {
361
- const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_MULTIPLE_GROUPS));
348
+ it('has the correct `groupTitle` tag', () => {
349
+ const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_BASIC));
362
350
 
363
- expect($('.ons-summary__group:nth-last-of-type(2) .ons-summary__link').hasClass('ons-u-mb-xl')).toBe(true);
364
- });
365
- });
351
+ expect($('.ons-summary__group-title')[0].tagName).toBe('h2');
352
+ });
366
353
 
367
- describe('part: row', () => {
368
- it('has the correct row class when `error` is `true`', () => {
369
- const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_BASIC));
354
+ it('has the `groupTitle` text', () => {
355
+ const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_BASIC));
370
356
 
371
- expect($('.ons-summary__items .ons-summary__item:nth-of-type(2)').hasClass('ons-summary__item--error')).toBe(true);
372
- });
357
+ expect($('.ons-summary__group-title').text()).toBe('group title');
358
+ });
373
359
 
374
- it('has the correct row class when `total` is `true`', () => {
375
- const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_BASIC));
360
+ it('has larger margin between groups if the top one is a household style summary', () => {
361
+ const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_MULTIPLE_GROUPS));
376
362
 
377
- expect($('.ons-summary__items .ons-summary__item:nth-of-type(4)').hasClass('ons-summary__item--total')).toBe(true);
378
- });
363
+ expect($('.ons-summary__group:nth-last-of-type(2) .ons-summary__link').hasClass('ons-u-mb-xl')).toBe(true);
364
+ });
365
+ });
379
366
 
380
- it('displays the `rowTitle` text', () => {
381
- const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_BASIC));
367
+ describe('part: row', () => {
368
+ it('has the correct row class when `error` is `true`', () => {
369
+ const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_BASIC));
382
370
 
383
- expect($('.ons-summary__items .ons-summary__item:nth-of-type(3) .ons-summary__row-title').text()).toBe('row title 3');
384
- });
371
+ expect($('.ons-summary__items .ons-summary__item:nth-of-type(2)').hasClass('ons-summary__item--error')).toBe(true);
372
+ });
385
373
 
386
- it('overrides the `rowTitle` with the `errorMessage` if provided', () => {
387
- const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_WITH_TITLE));
374
+ it('has the correct row class when `total` is `true`', () => {
375
+ const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_BASIC));
388
376
 
389
- expect($('.ons-summary__items .ons-summary__item:nth-of-type(2) .ons-summary__row-title--error').text()).toBe('there are errors');
390
- });
377
+ expect($('.ons-summary__items .ons-summary__item:nth-of-type(4)').hasClass('ons-summary__item--total')).toBe(true);
378
+ });
391
379
 
392
- it('has the correct row `id` for each row', () => {
393
- const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_BASIC));
380
+ it('displays the `rowTitle` text', () => {
381
+ const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_BASIC));
394
382
 
395
- expect($('#row-id-1').length).toBe(1);
396
- expect($('#row-id-2').length).toBe(1);
397
- expect($('#row-id-3').length).toBe(1);
398
- });
383
+ expect($('.ons-summary__items .ons-summary__item:nth-of-type(3) .ons-summary__row-title').text()).toBe('row title 3');
384
+ });
399
385
 
400
- it('has the correct class for each row when there is a `valueList`', () => {
401
- const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_BASIC));
386
+ it('overrides the `rowTitle` with the `errorMessage` if provided', () => {
387
+ const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_WITH_TITLE));
402
388
 
403
- expect($('.ons-summary__row--has-values').length).toBe(5);
404
- });
389
+ expect($('.ons-summary__items .ons-summary__item:nth-of-type(2) .ons-summary__row-title--error').text()).toBe(
390
+ 'there are errors',
391
+ );
392
+ });
405
393
 
406
- it('has custom `rowTitleAttributes`', () => {
407
- const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_BASIC));
394
+ it('has the correct row `id` for each row', () => {
395
+ const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_BASIC));
408
396
 
409
- expect($('.ons-summary__item-title').attr('a')).toBe('123');
410
- expect($('.ons-summary__item-title').attr('b')).toBe('456');
411
- });
412
- });
397
+ expect($('#row-id-1').length).toBe(1);
398
+ expect($('#row-id-2').length).toBe(1);
399
+ expect($('#row-id-3').length).toBe(1);
400
+ });
413
401
 
414
- describe('part: item title', () => {
415
- it('displays the `rowTitle` text', () => {
416
- const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_BASIC));
402
+ it('has the correct class for each row when there is a `valueList`', () => {
403
+ const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_BASIC));
417
404
 
418
- expect($('.ons-summary__items .ons-summary__item:nth-of-type(1) .ons-summary__item--text').text().trim()).toBe('row title 1');
419
- });
405
+ expect($('.ons-summary__row--has-values').length).toBe(5);
406
+ });
420
407
 
421
- it('has a custom icon `iconType`', () => {
422
- const faker = templateFaker();
423
- const iconsSpy = faker.spy('icon');
408
+ it('has custom `rowTitleAttributes`', () => {
409
+ const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_BASIC));
424
410
 
425
- faker.renderComponent('summary', EXAMPLE_SUMMARY_BASIC);
411
+ expect($('.ons-summary__item-title').attr('a')).toBe('123');
412
+ expect($('.ons-summary__item-title').attr('b')).toBe('456');
413
+ });
414
+ });
426
415
 
427
- expect(iconsSpy.occurrences[0].iconType).toBe('check');
428
- });
416
+ describe('part: item title', () => {
417
+ it('displays the `rowTitle` text', () => {
418
+ const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_BASIC));
429
419
 
430
- it('has the correct icon class when `iconType` is `check`', () => {
431
- const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_BASIC));
420
+ expect($('.ons-summary__items .ons-summary__item:nth-of-type(1) .ons-summary__item--text').text().trim()).toBe(
421
+ 'row title 1',
422
+ );
423
+ });
432
424
 
433
- expect($('.ons-summary__item-title-icon').hasClass('ons-summary__item-title-icon--check')).toBe(true);
434
- });
425
+ it('has a custom icon `iconType`', () => {
426
+ const faker = templateFaker();
427
+ const iconsSpy = faker.spy('icon');
435
428
 
436
- it('has the visually hidden text <span> text when `iconType` is `check`', () => {
437
- const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_BASIC));
429
+ faker.renderComponent('summary', EXAMPLE_SUMMARY_BASIC);
438
430
 
439
- expect($('.ons-summary__item-title-icon').text().trim()).toBe('Section completed');
440
- });
431
+ expect(iconsSpy.occurrences[0].iconType).toBe('check');
432
+ });
441
433
 
442
- it('has the correct item text class when `iconType` is provided', () => {
443
- const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_BASIC));
434
+ it('has the correct icon class when `iconType` is `check`', () => {
435
+ const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_BASIC));
444
436
 
445
- expect($('.ons-summary__item--text').hasClass('ons-summary__item-title--text')).toBe(true);
446
- });
437
+ expect($('.ons-summary__item-title-icon').hasClass('ons-summary__item-title-icon--check')).toBe(true);
438
+ });
447
439
 
448
- it('has custom `attributes`', () => {
449
- const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_BASIC));
440
+ it('has the visually hidden text <span> text when `iconType` is `check`', () => {
441
+ const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_BASIC));
450
442
 
451
- expect($('.ons-summary__values').attr('a')).toBe('aaa');
452
- expect($('.ons-summary__values').attr('b')).toBe('bbb');
453
- });
443
+ expect($('.ons-summary__item-title-icon').text().trim()).toBe('Section completed');
444
+ });
445
+
446
+ it('has the correct item text class when `iconType` is provided', () => {
447
+ const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_BASIC));
448
+
449
+ expect($('.ons-summary__item--text').hasClass('ons-summary__item-title--text')).toBe(true);
450
+ });
451
+
452
+ it('has custom `attributes`', () => {
453
+ const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_BASIC));
454
+
455
+ expect($('.ons-summary__values').attr('a')).toBe('aaa');
456
+ expect($('.ons-summary__values').attr('b')).toBe('bbb');
457
+ });
458
+ });
459
+
460
+ describe('part: item value', () => {
461
+ it('displays the `valueList` text', () => {
462
+ const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_BASIC));
463
+
464
+ expect(
465
+ $('.ons-summary__items .ons-summary__item:nth-of-type(1) .ons-summary__row .ons-summary__values .ons-summary__text')
466
+ .text()
467
+ .trim(),
468
+ ).toBe('row value 1');
469
+ });
470
+
471
+ it('displays the `other` text', () => {
472
+ const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_BASIC));
473
+
474
+ expect(
475
+ $('.ons-summary__items .ons-summary__item:nth-of-type(1) .ons-summary__row .ons-summary__values ul li').text().trim(),
476
+ ).toBe('other value');
477
+ });
478
+
479
+ it('wraps the `valueList` in a ul if multiple values provided', () => {
480
+ const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_BASIC));
481
+
482
+ expect($('.ons-summary__items .ons-summary__item:nth-of-type(3) .ons-summary__values ul').length).toBe(1);
483
+ });
484
+ });
485
+
486
+ describe('part: item action', () => {
487
+ it('has a spacer element if multiple actions are provided', () => {
488
+ const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_BASIC));
489
+
490
+ expect($('.ons-summary__items .ons-summary__item:nth-of-type(2) .ons-summary__actions .ons-summary__spacer').length).toBe(
491
+ 1,
492
+ );
493
+ });
494
+
495
+ it('has the correct `url` for each action provided', () => {
496
+ const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_BASIC));
497
+
498
+ expect(
499
+ $('.ons-summary__items .ons-summary__item:nth-of-type(2) .ons-summary__actions .ons-summary__button:first-child').attr(
500
+ 'href',
501
+ ),
502
+ ).toBe('#1');
503
+ expect(
504
+ $('.ons-summary__items .ons-summary__item:nth-of-type(2) .ons-summary__actions .ons-summary__button:last-child').attr(
505
+ 'href',
506
+ ),
507
+ ).toBe('#2');
508
+ });
509
+
510
+ it('has the action `text` for each action provided', () => {
511
+ const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_BASIC));
512
+
513
+ expect(
514
+ $(
515
+ '.ons-summary__items .ons-summary__item:nth-of-type(2) .ons-summary__actions .ons-summary__button:first-child .ons-summary__button-text',
516
+ ).text(),
517
+ ).toBe('Action 1');
518
+ expect(
519
+ $(
520
+ '.ons-summary__items .ons-summary__item:nth-of-type(2) .ons-summary__actions .ons-summary__button:last-child .ons-summary__button-text',
521
+ ).text(),
522
+ ).toBe('Action 2');
523
+ });
524
+
525
+ it('has the correct visually hidden <span> text', () => {
526
+ const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_BASIC));
527
+
528
+ expect(
529
+ $(
530
+ '.ons-summary__items .ons-summary__item:nth-of-type(2) .ons-summary__actions .ons-summary__button:first-child .ons-u-vh',
531
+ ).text(),
532
+ ).toBe('action 1 for row title 2');
533
+ expect(
534
+ $(
535
+ '.ons-summary__items .ons-summary__item:nth-of-type(2) .ons-summary__actions .ons-summary__button:last-child .ons-u-vh',
536
+ ).text(),
537
+ ).toBe('action 2 for row title 2');
538
+ });
539
+
540
+ it('has custom `attributes`', () => {
541
+ const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_BASIC));
542
+
543
+ expect(
544
+ $('.ons-summary__items .ons-summary__item:nth-of-type(2) .ons-summary__actions .ons-summary__button:first-child').attr(
545
+ 'a',
546
+ ),
547
+ ).toBe('abc');
548
+ expect(
549
+ $('.ons-summary__items .ons-summary__item:nth-of-type(2) .ons-summary__actions .ons-summary__button:first-child').attr(
550
+ 'b',
551
+ ),
552
+ ).toBe('def');
553
+ });
554
+ });
454
555
  });
455
556
 
456
- describe('part: item value', () => {
457
- it('displays the `valueList` text', () => {
458
- const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_BASIC));
557
+ describe('mode: with title', () => {
558
+ it('passes jest-axe checks', async () => {
559
+ const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_WITH_TITLE));
560
+ const results = await axe($.html(), axeRules);
459
561
 
460
- expect(
461
- $('.ons-summary__items .ons-summary__item:nth-of-type(1) .ons-summary__row .ons-summary__values .ons-summary__text')
462
- .text()
463
- .trim(),
464
- ).toBe('row value 1');
465
- });
562
+ expect(results).toHaveNoViolations();
563
+ });
466
564
 
467
- it('displays the `other` text', () => {
468
- const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_BASIC));
565
+ it('displays the `summaryTitle`', () => {
566
+ const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_WITH_TITLE));
469
567
 
470
- expect($('.ons-summary__items .ons-summary__item:nth-of-type(1) .ons-summary__row .ons-summary__values ul li').text().trim()).toBe(
471
- 'other value',
472
- );
473
- });
474
-
475
- it('wraps the `valueList` in a ul if multiple values provided', () => {
476
- const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_BASIC));
477
-
478
- expect($('.ons-summary__items .ons-summary__item:nth-of-type(3) .ons-summary__values ul').length).toBe(1);
479
- });
480
- });
481
-
482
- describe('part: item action', () => {
483
- it('has a spacer element if multiple actions are provided', () => {
484
- const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_BASIC));
485
-
486
- expect($('.ons-summary__items .ons-summary__item:nth-of-type(2) .ons-summary__actions .ons-summary__spacer').length).toBe(1);
487
- });
488
-
489
- it('has the correct `url` for each action provided', () => {
490
- const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_BASIC));
491
-
492
- expect(
493
- $('.ons-summary__items .ons-summary__item:nth-of-type(2) .ons-summary__actions .ons-summary__button:first-child').attr('href'),
494
- ).toBe('#1');
495
- expect(
496
- $('.ons-summary__items .ons-summary__item:nth-of-type(2) .ons-summary__actions .ons-summary__button:last-child').attr('href'),
497
- ).toBe('#2');
498
- });
499
-
500
- it('has the action `text` for each action provided', () => {
501
- const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_BASIC));
502
-
503
- expect(
504
- $(
505
- '.ons-summary__items .ons-summary__item:nth-of-type(2) .ons-summary__actions .ons-summary__button:first-child .ons-summary__button-text',
506
- ).text(),
507
- ).toBe('Action 1');
508
- expect(
509
- $(
510
- '.ons-summary__items .ons-summary__item:nth-of-type(2) .ons-summary__actions .ons-summary__button:last-child .ons-summary__button-text',
511
- ).text(),
512
- ).toBe('Action 2');
513
- });
514
-
515
- it('has the correct visually hidden <span> text', () => {
516
- const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_BASIC));
517
-
518
- expect(
519
- $(
520
- '.ons-summary__items .ons-summary__item:nth-of-type(2) .ons-summary__actions .ons-summary__button:first-child .ons-u-vh',
521
- ).text(),
522
- ).toBe('action 1 for row title 2');
523
- expect(
524
- $('.ons-summary__items .ons-summary__item:nth-of-type(2) .ons-summary__actions .ons-summary__button:last-child .ons-u-vh').text(),
525
- ).toBe('action 2 for row title 2');
526
- });
527
-
528
- it('has custom `attributes`', () => {
529
- const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_BASIC));
530
-
531
- expect(
532
- $('.ons-summary__items .ons-summary__item:nth-of-type(2) .ons-summary__actions .ons-summary__button:first-child').attr('a'),
533
- ).toBe('abc');
534
- expect(
535
- $('.ons-summary__items .ons-summary__item:nth-of-type(2) .ons-summary__actions .ons-summary__button:first-child').attr('b'),
536
- ).toBe('def');
537
- });
538
- });
539
- });
540
-
541
- describe('mode: with title', () => {
542
- it('passes jest-axe checks', async () => {
543
- const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_WITH_TITLE));
544
- const results = await axe($.html(), axeRules);
545
-
546
- expect(results).toHaveNoViolations();
568
+ expect($('.ons-summary__title').text()).toBe('summary title');
569
+ });
547
570
  });
548
571
 
549
- it('displays the `summaryTitle`', () => {
550
- const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_WITH_TITLE));
551
-
552
- expect($('.ons-summary__title').text()).toBe('summary title');
572
+ describe('mode: hub', () => {
573
+ it('passes jest-axe checks', async () => {
574
+ const $ = cheerio.load(
575
+ renderComponent('summary', {
576
+ ...EXAMPLE_SUMMARY_BASIC,
577
+ variant: 'hub',
578
+ }),
579
+ );
580
+ const results = await axe($.html(), axeRules);
581
+
582
+ expect(results).toHaveNoViolations();
583
+ });
584
+
585
+ it('has the correct class applied', () => {
586
+ const $ = cheerio.load(
587
+ renderComponent('summary', {
588
+ ...EXAMPLE_SUMMARY_BASIC,
589
+ variant: 'hub',
590
+ }),
591
+ );
592
+
593
+ expect($('.ons-summary').hasClass('ons-summary--hub')).toBe(true);
594
+ });
595
+
596
+ it('has the value rendered after the `rowTitle` that shows on mobile', () => {
597
+ const $ = cheerio.load(
598
+ renderComponent('summary', {
599
+ ...EXAMPLE_SUMMARY_BASIC,
600
+ variant: 'hub',
601
+ }),
602
+ );
603
+
604
+ expect($('.ons-summary__items .ons-summary__item:nth-of-type(2) .ons-summary__row .ons-summary__item-title span').text()).toBe(
605
+ ' — row value 2',
606
+ );
607
+ });
553
608
  });
554
- });
555
609
 
556
- describe('mode: hub', () => {
557
- it('passes jest-axe checks', async () => {
558
- const $ = cheerio.load(
559
- renderComponent('summary', {
560
- ...EXAMPLE_SUMMARY_BASIC,
561
- variant: 'hub',
562
- }),
563
- );
564
- const results = await axe($.html(), axeRules);
565
-
566
- expect(results).toHaveNoViolations();
567
- });
610
+ describe('mode: no rows', () => {
611
+ it('passes jest-axe checks', async () => {
612
+ const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_WITH_NO_ROWS));
568
613
 
569
- it('has the correct class applied', () => {
570
- const $ = cheerio.load(
571
- renderComponent('summary', {
572
- ...EXAMPLE_SUMMARY_BASIC,
573
- variant: 'hub',
574
- }),
575
- );
614
+ const results = await axe($.html(), axeRules);
615
+ expect(results).toHaveNoViolations();
616
+ });
576
617
 
577
- expect($('.ons-summary').hasClass('ons-summary--hub')).toBe(true);
578
- });
618
+ it('has the `placeholderText` provided', () => {
619
+ const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_WITH_NO_ROWS));
579
620
 
580
- it('has the value rendered after the `rowTitle` that shows on mobile', () => {
581
- const $ = cheerio.load(
582
- renderComponent('summary', {
583
- ...EXAMPLE_SUMMARY_BASIC,
584
- variant: 'hub',
585
- }),
586
- );
587
-
588
- expect($('.ons-summary__items .ons-summary__item:nth-of-type(2) .ons-summary__row .ons-summary__item-title span').text()).toBe(
589
- ' — row value 2',
590
- );
591
- });
592
- });
621
+ expect($('.ons-summary__group .ons-summary__placeholder').text()).toBe('Placeholder text');
622
+ });
593
623
 
594
- describe('mode: no rows', () => {
595
- it('passes jest-axe checks', async () => {
596
- const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_WITH_NO_ROWS));
624
+ it('has the correct class added to the `summaryLink` when `placeholderText` is provided', () => {
625
+ const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_WITH_NO_ROWS));
597
626
 
598
- const results = await axe($.html(), axeRules);
599
- expect(results).toHaveNoViolations();
600
- });
627
+ expect($('.ons-summary__group .ons-summary__link').hasClass('ons-u-pt-s')).toBe(true);
628
+ });
601
629
 
602
- it('has the `placeholderText` provided', () => {
603
- const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_WITH_NO_ROWS));
630
+ it('has custom `attributes` on the `summaryLink`', () => {
631
+ const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_WITH_NO_ROWS));
604
632
 
605
- expect($('.ons-summary__group .ons-summary__placeholder').text()).toBe('Placeholder text');
606
- });
633
+ expect($('.ons-summary__group .ons-summary__link a').attr('a')).toBe('xyz');
634
+ });
607
635
 
608
- it('has the correct class added to the `summaryLink` when `placeholderText` is provided', () => {
609
- const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_WITH_NO_ROWS));
636
+ it('has the correct link `text`', () => {
637
+ const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_WITH_NO_ROWS));
610
638
 
611
- expect($('.ons-summary__group .ons-summary__link').hasClass('ons-u-pt-s')).toBe(true);
612
- });
639
+ expect($('.ons-summary__group .ons-summary__link a').text().trim()).toBe('Summary link');
640
+ });
613
641
 
614
- it('has custom `attributes` on the `summaryLink`', () => {
615
- const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_WITH_NO_ROWS));
642
+ it('has the correct link `url`', () => {
643
+ const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_WITH_NO_ROWS));
616
644
 
617
- expect($('.ons-summary__group .ons-summary__link a').attr('a')).toBe('xyz');
645
+ expect($('.ons-summary__group .ons-summary__link a').attr('href')).toBe('#0');
646
+ });
618
647
  });
648
+ });
619
649
 
620
- it('has the correct link `text`', () => {
621
- const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_WITH_NO_ROWS));
650
+ describe('mode: card', () => {
651
+ it('passes jest-axe checks', async () => {
652
+ const $ = cheerio.load(renderComponent('summary', { ...EXAMPLE_SUMMARY_BASIC, variant: 'card' }));
653
+ const results = await axe($.html(), axeRules);
622
654
 
623
- expect($('.ons-summary__group .ons-summary__link a').text().trim()).toBe('Summary link');
655
+ expect(results).toHaveNoViolations();
624
656
  });
625
657
 
626
- it('has the correct link `url`', () => {
627
- const $ = cheerio.load(renderComponent('summary', EXAMPLE_SUMMARY_WITH_NO_ROWS));
658
+ it('has the correct classes applied', () => {
659
+ const $ = cheerio.load(
660
+ renderComponent('summary', {
661
+ ...EXAMPLE_SUMMARY_MULTIPLE_GROUPS,
662
+ variant: 'card',
663
+ }),
664
+ );
628
665
 
629
- expect($('.ons-summary__group .ons-summary__link a').attr('href')).toBe('#0');
666
+ expect($('.ons-summary__group').hasClass('ons-summary__group--card')).toBe(true);
630
667
  });
631
- });
632
- });
633
-
634
- describe('mode: card', () => {
635
- it('passes jest-axe checks', async () => {
636
- const $ = cheerio.load(renderComponent('summary', { ...EXAMPLE_SUMMARY_BASIC, variant: 'card' }));
637
- const results = await axe($.html(), axeRules);
638
-
639
- expect(results).toHaveNoViolations();
640
- });
641
-
642
- it('has the correct classes applied', () => {
643
- const $ = cheerio.load(
644
- renderComponent('summary', {
645
- ...EXAMPLE_SUMMARY_MULTIPLE_GROUPS,
646
- variant: 'card',
647
- }),
648
- );
649
-
650
- expect($('.ons-summary__group').hasClass('ons-summary__group--card')).toBe(true);
651
- });
652
668
  });