@ons/design-system 70.0.7 → 70.0.9

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 (454) hide show
  1. package/README.md +11 -17
  2. package/components/access-code/_macro.njk +31 -25
  3. package/components/access-code/_macro.spec.js +145 -145
  4. package/components/access-code/access-code.dom.js +5 -5
  5. package/components/access-code/access-code.js +16 -16
  6. package/components/access-code/access-code.scss +22 -22
  7. package/components/access-code/access-code.spec.js +17 -17
  8. package/components/access-code/example-access-code-error.njk +49 -37
  9. package/components/access-code/example-access-code.njk +40 -30
  10. package/components/accordion/_macro.njk +7 -6
  11. package/components/accordion/_macro.spec.js +154 -154
  12. package/components/accordion/accordion.dom.js +10 -10
  13. package/components/accordion/accordion.js +50 -50
  14. package/components/accordion/accordion.spec.js +104 -104
  15. package/components/accordion/example-accordion-open.njk +0 -1
  16. package/components/address-input/_macro.njk +23 -11
  17. package/components/address-input/_macro.spec.js +420 -420
  18. package/components/address-input/autosuggest.address.dom.js +5 -5
  19. package/components/address-input/autosuggest.address.error.js +77 -77
  20. package/components/address-input/autosuggest.address.js +354 -359
  21. package/components/address-input/autosuggest.address.setter.js +95 -95
  22. package/components/address-input/autosuggest.address.spec.js +668 -651
  23. package/components/address-input/example-address-input-editable.njk +52 -50
  24. package/components/address-input/example-address-input-manual.njk +23 -21
  25. package/components/address-input/example-address-input.njk +40 -38
  26. package/components/address-output/_address-output.scss +3 -3
  27. package/components/address-output/_macro.njk +6 -6
  28. package/components/address-output/_macro.spec.js +84 -84
  29. package/components/autosuggest/_autosuggest.scss +114 -114
  30. package/components/autosuggest/_macro.njk +57 -37
  31. package/components/autosuggest/_macro.spec.js +255 -255
  32. package/components/autosuggest/autosuggest.dom.js +5 -5
  33. package/components/autosuggest/autosuggest.helpers.js +11 -11
  34. package/components/autosuggest/autosuggest.helpers.spec.js +73 -73
  35. package/components/autosuggest/autosuggest.js +20 -20
  36. package/components/autosuggest/autosuggest.spec.js +542 -536
  37. package/components/autosuggest/autosuggest.ui.js +478 -475
  38. package/components/autosuggest/example-autosuggest-country-multiple.njk +26 -26
  39. package/components/autosuggest/example-autosuggest-country.njk +24 -24
  40. package/components/autosuggest/fuse-config.js +17 -17
  41. package/components/back-to-top/_back-to-top.scss +27 -27
  42. package/components/back-to-top/_macro.spec.js +49 -49
  43. package/components/back-to-top/back-to-top.dom.js +5 -5
  44. package/components/back-to-top/back-to-top.js +52 -52
  45. package/components/back-to-top/back-to-top.spec.js +106 -106
  46. package/components/back-to-top/example-back-to-top.njk +183 -6
  47. package/components/back-to-top/example-full-page-back-to-top.njk +135 -123
  48. package/components/breadcrumbs/_breadcrumbs.scss +63 -65
  49. package/components/breadcrumbs/_macro.njk +12 -4
  50. package/components/breadcrumbs/_macro.spec.js +91 -91
  51. package/components/browser-banner/_browser-banner.scss +23 -23
  52. package/components/browser-banner/_macro.njk +6 -3
  53. package/components/browser-banner/_macro.spec.js +92 -92
  54. package/components/button/_button.scss +525 -491
  55. package/components/button/_macro.njk +63 -62
  56. package/components/button/_macro.spec.js +363 -363
  57. package/components/button/button.dom.js +15 -15
  58. package/components/button/button.js +53 -53
  59. package/components/button/button.spec.js +248 -240
  60. package/components/button/example-button-ghost.njk +1 -0
  61. package/components/call-to-action/_call-to-action.scss +5 -5
  62. package/components/call-to-action/_macro.njk +7 -5
  63. package/components/call-to-action/_macro.spec.js +28 -28
  64. package/components/call-to-action/example-call-to-action-default.njk +3 -2
  65. package/components/card/_card.scss +23 -23
  66. package/components/card/_macro.njk +26 -10
  67. package/components/card/_macro.spec.js +180 -180
  68. package/components/card/example-card-set-with-images.njk +31 -29
  69. package/components/card/example-card-set-with-lists.njk +58 -56
  70. package/components/card/example-card-set.njk +28 -26
  71. package/components/card/example-card.njk +9 -7
  72. package/components/char-check-limit/_macro.njk +1 -3
  73. package/components/char-check-limit/_macro.spec.js +48 -48
  74. package/components/char-check-limit/character-check.js +58 -58
  75. package/components/char-check-limit/character-check.spec.js +173 -173
  76. package/components/char-check-limit/character-limit.js +40 -40
  77. package/components/checkboxes/_checkbox-macro.njk +19 -15
  78. package/components/checkboxes/_checkbox-macro.spec.js +355 -355
  79. package/components/checkboxes/_checkbox.scss +180 -180
  80. package/components/checkboxes/_checkboxes.scss +37 -27
  81. package/components/checkboxes/_macro.njk +81 -72
  82. package/components/checkboxes/_macro.spec.js +261 -261
  83. package/components/checkboxes/checkbox-with-autoselect.js +32 -32
  84. package/components/checkboxes/checkbox-with-fieldset.js +21 -21
  85. package/components/checkboxes/checkboxes-with-reveal.js +10 -10
  86. package/components/checkboxes/checkboxes.dom.js +27 -27
  87. package/components/checkboxes/checkboxes.spec.js +183 -183
  88. package/components/checkboxes/example-checkboxes-disabled.njk +30 -30
  89. package/components/checkboxes/example-checkboxes-error.njk +0 -1
  90. package/components/checkboxes/example-checkboxes-with-descriptions.njk +7 -5
  91. package/components/checkboxes/example-checkboxes-with-hidden-label.njk +162 -170
  92. package/components/checkboxes/example-checkboxes-with-revealed-checkboxes-expanded.njk +81 -81
  93. package/components/checkboxes/example-checkboxes-with-revealed-checkboxes.njk +79 -79
  94. package/components/checkboxes/example-checkboxes-with-revealed-select-expanded.njk +7 -5
  95. package/components/checkboxes/example-checkboxes-with-revealed-select.njk +7 -5
  96. package/components/checkboxes/example-checkboxes-with-revealed-text-input-expanded.njk +7 -5
  97. package/components/checkboxes/example-checkboxes-with-revealed-text-input.njk +7 -5
  98. package/components/checkboxes/example-checkboxes-with-select-all-button.njk +7 -5
  99. package/components/checkboxes/example-checkboxes-with-visible-text-input.njk +7 -5
  100. package/components/checkboxes/example-checkboxes.njk +7 -5
  101. package/components/content-pagination/_content-pagination.scss +41 -41
  102. package/components/content-pagination/_macro.njk +34 -32
  103. package/components/content-pagination/_macro.spec.js +159 -159
  104. package/components/content-pagination/example-content-pagination.njk +17 -17
  105. package/components/cookies-banner/_cookies-banner.scss +22 -22
  106. package/components/cookies-banner/_macro.njk +19 -6
  107. package/components/cookies-banner/_macro.spec.js +177 -177
  108. package/components/cookies-banner/cookies-banner.dom.js +7 -7
  109. package/components/cookies-banner/cookies-banner.js +76 -76
  110. package/components/cookies-banner/cookies-banner.spec.js +72 -68
  111. package/components/cookies-banner/example-cookies-banner-cymraeg.njk +2 -1
  112. package/components/cookies-banner/example-cookies-banner.njk +3 -4
  113. package/components/date-input/_macro.njk +71 -63
  114. package/components/date-input/_macro.spec.js +338 -338
  115. package/components/date-input/example-date-input-error-for-single-field.njk +0 -1
  116. package/components/date-input/example-date-input-error.njk +0 -1
  117. package/components/description-list/_description-list.scss +23 -23
  118. package/components/description-list/_macro.njk +20 -11
  119. package/components/description-list/_macro.spec.js +144 -144
  120. package/components/details/_details.scss +109 -109
  121. package/components/details/_macro.njk +18 -11
  122. package/components/details/_macro.spec.js +132 -132
  123. package/components/details/details.dom.js +6 -6
  124. package/components/details/details.js +60 -60
  125. package/components/details/details.spec.js +106 -106
  126. package/components/details/example-details-with-warning.njk +15 -10
  127. package/components/document-list/_macro.njk +102 -93
  128. package/components/document-list/_macro.spec.js +444 -444
  129. package/components/document-list/document-list.scss +145 -149
  130. package/components/document-list/example-document-list-article-featured.njk +27 -25
  131. package/components/document-list/example-document-list-articles.njk +55 -53
  132. package/components/document-list/example-document-list-downloads.njk +49 -47
  133. package/components/document-list/example-document-list-search-result-featured.njk +19 -17
  134. package/components/document-list/example-document-list-search-results.njk +60 -58
  135. package/components/download-resources/_download-resources.scss +109 -108
  136. package/components/download-resources/download-resources.js +907 -900
  137. package/components/download-resources/download-resources.spec.js +461 -461
  138. package/components/duration/_macro.njk +61 -55
  139. package/components/duration/_macro.spec.js +291 -291
  140. package/components/duration/example-duration-error-for-single-field.njk +28 -26
  141. package/components/duration/example-duration-single-field.njk +23 -19
  142. package/components/duration/example-duration.njk +33 -29
  143. package/components/error/_macro.njk +8 -6
  144. package/components/error/_macro.spec.js +72 -72
  145. package/components/external-link/_external-link.scss +19 -19
  146. package/components/external-link/_macro.njk +7 -5
  147. package/components/external-link/_macro.spec.js +68 -68
  148. package/components/external-link/example-external-link.njk +9 -6
  149. package/components/feedback/_feedback.scss +31 -31
  150. package/components/feedback/_macro.njk +7 -5
  151. package/components/feedback/_macro.spec.js +72 -72
  152. package/components/field/_field-group.scss +10 -10
  153. package/components/field/_field.scss +16 -16
  154. package/components/field/_macro.njk +2 -2
  155. package/components/field/_macro.spec.js +80 -80
  156. package/components/fieldset/_fieldset.scss +27 -27
  157. package/components/fieldset/_macro.njk +23 -16
  158. package/components/fieldset/_macro.spec.js +161 -161
  159. package/components/footer/_footer.scss +45 -45
  160. package/components/footer/_macro.njk +28 -21
  161. package/components/footer/_macro.spec.js +452 -452
  162. package/components/footer/example-footer-cymraeg.njk +2 -1
  163. package/components/footer/example-footer-default.njk +3 -4
  164. package/components/footer/example-footer-transactional.njk +2 -1
  165. package/components/footer/example-footer-warning.njk +2 -1
  166. package/components/footer/example-footer-with-alternative-organisation.njk +2 -1
  167. package/components/footer/example-footer-with-coat-of-arms.njk +2 -1
  168. package/components/footer/example-footer-with-copyright.njk +2 -1
  169. package/components/footer/example-footer.njk +2 -1
  170. package/components/header/_header.scss +207 -202
  171. package/components/header/_macro.njk +183 -141
  172. package/components/header/_macro.spec.js +833 -829
  173. package/components/header/example-header-default.njk +2 -1
  174. package/components/header/example-header-external-for-survey-with-description.njk +2 -1
  175. package/components/header/example-header-external-for-surveys.njk +2 -1
  176. package/components/header/example-header-external-welsh.njk +7 -7
  177. package/components/header/example-header-external-with-navigation-and-search.njk +3 -2
  178. package/components/header/example-header-external-with-navigation.njk +2 -1
  179. package/components/header/example-header-external-with-service-links.njk +2 -1
  180. package/components/header/example-header-external-with-sub-navigation-removed.njk +2 -1
  181. package/components/header/example-header-external-with-sub-navigation.njk +3 -2
  182. package/components/header/example-header-internal.njk +2 -1
  183. package/components/header/example-header-multiple-logos.njk +2 -1
  184. package/components/header/{example-header-neutral-for-multicoloured-logo.njk → example-header-neutral.njk} +2 -1
  185. package/components/helpers/_grid.scss +4 -4
  186. package/components/helpers/grid.njk +17 -16
  187. package/components/hero/_hero.scss +48 -48
  188. package/components/hero/_macro.njk +6 -11
  189. package/components/hero/_macro.spec.js +59 -59
  190. package/components/hero/example-hero-dark.njk +2 -1
  191. package/components/hero/example-hero-default.njk +2 -1
  192. package/components/icon/_icon.scss +44 -44
  193. package/components/icon/_macro.njk +601 -168
  194. package/components/icon/_macro.spec.js +110 -110
  195. package/components/image/_image.scss +11 -11
  196. package/components/image/_macro.njk +7 -5
  197. package/components/image/_macro.spec.js +81 -81
  198. package/components/input/_input-type.scss +86 -89
  199. package/components/input/_input.scss +123 -124
  200. package/components/input/_macro.njk +114 -95
  201. package/components/input/_macro.spec.js +604 -604
  202. package/components/input/character-check.dom.js +5 -5
  203. package/components/input/example-input-search-with-character-check.njk +1 -1
  204. package/components/input/example-input-search-with-placeholder.njk +1 -1
  205. package/components/input/example-input-search.njk +1 -1
  206. package/components/input/input.dom.js +5 -5
  207. package/components/input/input.js +10 -10
  208. package/components/input/input.spec.js +18 -18
  209. package/components/label/_label.scss +24 -24
  210. package/components/label/_macro.njk +32 -26
  211. package/components/label/_macro.spec.js +173 -170
  212. package/components/language-selector/_macro.njk +11 -2
  213. package/components/language-selector/_macro.spec.js +97 -97
  214. package/components/language-selector/language.scss +7 -7
  215. package/components/list/_list.scss +110 -97
  216. package/components/list/_macro.njk +93 -73
  217. package/components/list/_macro.spec.js +583 -583
  218. package/components/message/_macro.njk +20 -7
  219. package/components/message/_macro.spec.js +74 -74
  220. package/components/message/_message.scss +39 -39
  221. package/components/message-list/_macro.njk +26 -20
  222. package/components/message-list/_macro.spec.js +86 -86
  223. package/components/message-list/_message-list.scss +16 -16
  224. package/components/modal/_macro.njk +11 -12
  225. package/components/modal/_macro.spec.js +69 -69
  226. package/components/modal/_modal.scss +36 -36
  227. package/components/modal/modal.dom.js +6 -6
  228. package/components/modal/modal.js +89 -89
  229. package/components/modal/modal.spec.js +50 -50
  230. package/components/multiple-input-fields/_macro.njk +30 -28
  231. package/components/mutually-exclusive/_macro.njk +20 -13
  232. package/components/mutually-exclusive/_macro.spec.js +140 -140
  233. package/components/mutually-exclusive/example-mutually-exclusive-checkboxes.njk +6 -4
  234. package/components/mutually-exclusive/example-mutually-exclusive-date.njk +7 -5
  235. package/components/mutually-exclusive/example-mutually-exclusive-duration.njk +44 -40
  236. package/components/mutually-exclusive/example-mutually-exclusive-email.njk +7 -5
  237. package/components/mutually-exclusive/example-mutually-exclusive-multiple-options.njk +6 -4
  238. package/components/mutually-exclusive/example-mutually-exclusive-number.njk +6 -4
  239. package/components/mutually-exclusive/example-mutually-exclusive-textarea.njk +6 -4
  240. package/components/mutually-exclusive/mutually-exclusive.checkboxes.spec.js +188 -188
  241. package/components/mutually-exclusive/mutually-exclusive.date.spec.js +211 -211
  242. package/components/mutually-exclusive/mutually-exclusive.dom.js +5 -5
  243. package/components/mutually-exclusive/mutually-exclusive.duration.spec.js +210 -210
  244. package/components/mutually-exclusive/mutually-exclusive.email.spec.js +90 -90
  245. package/components/mutually-exclusive/mutually-exclusive.js +137 -137
  246. package/components/mutually-exclusive/mutually-exclusive.multiple-options.checkboxes.spec.js +197 -197
  247. package/components/mutually-exclusive/mutually-exclusive.number.spec.js +96 -96
  248. package/components/mutually-exclusive/mutually-exclusive.textarea.spec.js +102 -102
  249. package/components/navigation/_macro.njk +133 -67
  250. package/components/navigation/_macro.spec.js +360 -354
  251. package/components/navigation/_navigation.scss +112 -122
  252. package/components/navigation/navigation.dom.js +35 -35
  253. package/components/navigation/navigation.js +49 -49
  254. package/components/navigation/navigation.spec.js +249 -249
  255. package/components/pagination/_macro.njk +42 -20
  256. package/components/pagination/_macro.spec.js +342 -335
  257. package/components/pagination/_pagination.scss +58 -58
  258. package/components/panel/_macro.njk +27 -16
  259. package/components/panel/_macro.spec.js +372 -372
  260. package/components/panel/_panel.scss +200 -199
  261. package/components/panel/example-panel-bare.njk +6 -4
  262. package/components/panel/example-panel-with-announcement.njk +7 -4
  263. package/components/panel/example-panel-with-error-summary.njk +6 -4
  264. package/components/panel/example-panel-with-warning.njk +5 -3
  265. package/components/password/_macro.njk +7 -5
  266. package/components/password/_macro.spec.js +95 -95
  267. package/components/password/password.dom.js +5 -5
  268. package/components/password/password.js +10 -10
  269. package/components/password/password.spec.js +26 -26
  270. package/components/phase-banner/_macro.njk +3 -3
  271. package/components/phase-banner/_macro.spec.js +86 -86
  272. package/components/phase-banner/_phase-banner.scss +16 -16
  273. package/components/phase-banner/example-phase-banner-alpha.njk +2 -1
  274. package/components/phase-banner/example-phase-banner-beta.njk +4 -3
  275. package/components/question/_macro.njk +62 -47
  276. package/components/question/_macro.spec.js +235 -235
  277. package/components/question/_question.scss +24 -24
  278. package/components/question/example-question-ccs.njk +40 -35
  279. package/components/question/example-question-fieldset.njk +84 -80
  280. package/components/question/example-question-interviewer-note.njk +27 -24
  281. package/components/question/example-question-no-fieldset.njk +39 -33
  282. package/components/quote/_macro.njk +3 -1
  283. package/components/quote/_macro.spec.js +52 -52
  284. package/components/quote/_quote.scss +24 -24
  285. package/components/radios/_macro.njk +54 -36
  286. package/components/radios/_macro.spec.js +545 -524
  287. package/components/radios/_radio.scss +49 -48
  288. package/components/radios/_radios.scss +14 -20
  289. package/components/radios/check-radios.js +21 -21
  290. package/components/radios/clear-radios.js +45 -45
  291. package/components/radios/example-radios-with-clear-button-expanded.njk +6 -4
  292. package/components/radios/example-radios-with-clear-button.njk +6 -4
  293. package/components/radios/example-radios-with-descriptions.njk +7 -5
  294. package/components/radios/example-radios-with-revealed-select-expanded.njk +6 -4
  295. package/components/radios/example-radios-with-revealed-select.njk +6 -4
  296. package/components/radios/example-radios-with-revealed-text-area-expanded.njk +7 -5
  297. package/components/radios/example-radios-with-revealed-text-area.njk +7 -5
  298. package/components/radios/example-radios-with-revealed-text-input-expanded.njk +7 -5
  299. package/components/radios/example-radios-with-revealed-text-input.njk +7 -5
  300. package/components/radios/example-radios-with-separator.njk +6 -4
  301. package/components/radios/example-radios-with-visible-text-input.njk +7 -5
  302. package/components/radios/example-radios-without-border.njk +0 -1
  303. package/components/radios/example-radios.njk +7 -5
  304. package/components/radios/radio-with-fieldset.js +22 -22
  305. package/components/radios/radios.dom.js +32 -32
  306. package/components/radios/radios.spec.js +251 -251
  307. package/components/related-content/_macro.njk +10 -11
  308. package/components/related-content/_macro.spec.js +109 -109
  309. package/components/related-content/_related-content.scss +12 -12
  310. package/components/related-content/_section-macro.njk +7 -7
  311. package/components/related-content/_section-macro.spec.js +20 -20
  312. package/components/related-content/example-related-content-general.njk +5 -3
  313. package/components/related-content/example-related-content-multiple-rows-of-links.njk +51 -49
  314. package/components/related-content/example-related-content-social-media.njk +40 -38
  315. package/components/relationships/_macro.njk +10 -8
  316. package/components/relationships/_macro.spec.js +94 -94
  317. package/components/relationships/_relationships.scss +9 -9
  318. package/components/relationships/example-relationships-error.njk +176 -168
  319. package/components/relationships/example-relationships-you.njk +169 -163
  320. package/components/relationships/example-relationships.njk +167 -161
  321. package/components/relationships/relationships.dom.js +5 -5
  322. package/components/relationships/relationships.js +18 -18
  323. package/components/relationships/relationships.spec.js +71 -71
  324. package/components/reply/_macro.spec.js +47 -47
  325. package/components/reply/reply-input.js +15 -15
  326. package/components/reply/reply.dom.js +5 -5
  327. package/components/reply/reply.spec.js +57 -57
  328. package/components/section-navigation/_macro.njk +34 -12
  329. package/components/section-navigation/_macro.spec.js +210 -210
  330. package/components/section-navigation/_section-navigation.scss +76 -76
  331. package/components/select/_macro.njk +21 -18
  332. package/components/select/_macro.spec.js +166 -166
  333. package/components/share-page/_macro.njk +10 -5
  334. package/components/share-page/_macro.spec.js +68 -68
  335. package/components/skip-to-content/_macro.njk +1 -1
  336. package/components/skip-to-content/_macro.spec.js +54 -54
  337. package/components/skip-to-content/_skip.scss +30 -30
  338. package/components/skip-to-content/example-skip-to-content.njk +1 -0
  339. package/components/skip-to-content/skip-to-content.dom.js +6 -6
  340. package/components/skip-to-content/skip-to-content.js +7 -7
  341. package/components/skip-to-content/skip-to-content.spec.js +21 -21
  342. package/components/status/_macro.njk +1 -1
  343. package/components/status/_macro.spec.js +53 -53
  344. package/components/status/_status.scss +32 -32
  345. package/components/summary/_macro.njk +53 -23
  346. package/components/summary/_macro.spec.js +551 -535
  347. package/components/summary/_summary.scss +191 -195
  348. package/components/summary/example-summary-household-no-rows.njk +18 -16
  349. package/components/summary/example-summary-household.njk +75 -73
  350. package/components/summary/example-summary-hub-minimal.njk +74 -72
  351. package/components/summary/example-summary-hub.njk +169 -167
  352. package/components/table/_macro.njk +72 -45
  353. package/components/table/_macro.spec.js +499 -499
  354. package/components/table/_table.scss +204 -201
  355. package/components/table/scrollable-table.dom.js +5 -5
  356. package/components/table/scrollable-table.js +60 -60
  357. package/components/table/sortable-table.dom.js +5 -5
  358. package/components/table/sortable-table.js +135 -135
  359. package/components/table/table.spec.js +144 -140
  360. package/components/table-of-contents/_macro.njk +34 -32
  361. package/components/table-of-contents/_macro.spec.js +125 -125
  362. package/components/table-of-contents/_toc.scss +9 -9
  363. package/components/table-of-contents/example-table-of-contents-grouped.njk +1 -1
  364. package/components/table-of-contents/example-table-of-contents-single.njk +1 -1
  365. package/components/table-of-contents/example-table-of-contents-sticky-full-page.njk +79 -38
  366. package/components/table-of-contents/example-table-of-contents-sticky.njk +50 -13
  367. package/components/table-of-contents/toc.dom.js +5 -5
  368. package/components/table-of-contents/toc.js +30 -30
  369. package/components/table-of-contents/toc.spec.js +88 -88
  370. package/components/tabs/_macro.njk +12 -6
  371. package/components/tabs/_macro.spec.js +92 -92
  372. package/components/tabs/_tabs.scss +120 -115
  373. package/components/tabs/example-tabs-details.njk +5 -6
  374. package/components/tabs/tabs.dom.js +5 -5
  375. package/components/tabs/tabs.js +266 -266
  376. package/components/tabs/tabs.spec.js +268 -268
  377. package/components/text-indent/_macro.njk +1 -3
  378. package/components/text-indent/_macro.spec.js +33 -33
  379. package/components/text-indent/_text-indent.scss +3 -3
  380. package/components/textarea/_macro.njk +49 -46
  381. package/components/textarea/_macro.spec.js +227 -238
  382. package/components/textarea/textarea.dom.js +5 -5
  383. package/components/textarea/textarea.spec.js +78 -74
  384. package/components/timeline/_macro.njk +4 -6
  385. package/components/timeline/_macro.spec.js +83 -83
  386. package/components/timeline/_timeline.scss +26 -26
  387. package/components/timeout-modal/_macro.njk +21 -19
  388. package/components/timeout-modal/_macro.spec.js +47 -47
  389. package/components/timeout-modal/example-timeout-modal.njk +16 -14
  390. package/components/timeout-modal/timeout-modal.dom.js +9 -9
  391. package/components/timeout-modal/timeout-modal.js +66 -66
  392. package/components/timeout-modal/timeout-modal.spec.js +157 -157
  393. package/components/timeout-panel/_macro.njk +19 -17
  394. package/components/timeout-panel/_macro.spec.js +41 -41
  395. package/components/timeout-panel/example-panel-with-timeout-warning.njk +13 -11
  396. package/components/timeout-panel/timeout-panel.dom.js +8 -8
  397. package/components/timeout-panel/timeout-panel.spec.js +118 -118
  398. package/components/upload/_macro.njk +20 -16
  399. package/components/upload/_macro.spec.js +52 -52
  400. package/components/upload/_upload.scss +28 -28
  401. package/components/video/_macro.njk +16 -2
  402. package/components/video/_macro.spec.js +42 -42
  403. package/components/video/_video.scss +16 -16
  404. package/components/video/example-video.njk +2 -2
  405. package/components/video/video.dom.js +5 -5
  406. package/components/video/video.js +32 -32
  407. package/components/video/video.spec.js +103 -97
  408. package/css/main.css +1 -1
  409. package/favicons/manifest.json +25 -25
  410. package/js/abortable-fetch.js +23 -23
  411. package/js/analytics.js +53 -53
  412. package/js/cookies-functions.js +135 -135
  413. package/js/cookies-settings.dom.js +7 -7
  414. package/js/cookies-settings.js +77 -77
  415. package/js/cookies-settings.spec.js +106 -106
  416. package/js/domready.js +8 -8
  417. package/js/fetch.js +14 -14
  418. package/js/inpagelink.dom.js +5 -5
  419. package/js/inpagelink.js +19 -19
  420. package/js/polyfills.js +0 -1
  421. package/js/print-button.js +6 -6
  422. package/js/timeout.js +211 -211
  423. package/layout/_dsTemplate.njk +22 -20
  424. package/layout/_template.njk +63 -51
  425. package/package.json +132 -128
  426. package/scripts/main.es5.js +1 -1
  427. package/scripts/main.js +1 -1
  428. package/scss/base/_forms.scss +10 -10
  429. package/scss/base/_global.scss +45 -44
  430. package/scss/base/_typography.scss +20 -20
  431. package/scss/helpers/_functions.scss +18 -15
  432. package/scss/helpers/_mixins.scss +59 -53
  433. package/scss/helpers/_mq.scss +62 -65
  434. package/scss/objects/_container.scss +20 -20
  435. package/scss/objects/_page.scss +33 -33
  436. package/scss/objects/_spacing.scss +10 -10
  437. package/scss/overrides/hcm.scss +237 -237
  438. package/scss/overrides/rtl.scss +95 -95
  439. package/scss/print.scss +47 -47
  440. package/scss/utilities/_border.scss +7 -7
  441. package/scss/utilities/_colors.scss +6 -6
  442. package/scss/utilities/_display.scss +8 -8
  443. package/scss/utilities/_float.scss +7 -7
  444. package/scss/utilities/_grid.scss +144 -144
  445. package/scss/utilities/_highlight.scss +4 -4
  446. package/scss/utilities/_margin.scss +17 -17
  447. package/scss/utilities/_pad.scss +15 -15
  448. package/scss/utilities/_typography.scss +35 -33
  449. package/scss/utilities/_utilities.scss +8 -8
  450. package/scss/utilities/_visibility.scss +25 -25
  451. package/scss/vars/_colors.scss +116 -116
  452. package/scss/vars/_forms.scss +22 -22
  453. package/scss/vars/_grid.scss +11 -9
  454. package/scss/vars/_typography.scss +54 -54
@@ -5,364 +5,364 @@ import { renderComponent, setTestPage } from '../../tests/helpers/rendering';
5
5
  const iPhoneX = KnownDevices['iPhone X'];
6
6
 
7
7
  const EXAMPLE_TABS = {
8
- title: 'Example tabs',
9
- titleClasses: 'ons-u-fs-m',
10
- tabs: [
11
- {
12
- id: 'tab.id.1',
13
- title: 'Tab 1',
14
- showTitle: true,
15
- content: 'First content...',
16
- },
17
- {
18
- id: 'tab.id.2',
19
- title: 'Tab 2',
20
- content: 'Second content...',
21
- },
22
- {
23
- id: 'tab.id.3',
24
- title: 'Tab 3',
25
- content: 'Third content...',
26
- },
27
- ],
8
+ title: 'Example tabs',
9
+ titleClasses: 'ons-u-fs-m',
10
+ tabs: [
11
+ {
12
+ id: 'tab.id.1',
13
+ title: 'Tab 1',
14
+ showTitle: true,
15
+ content: 'First content...',
16
+ },
17
+ {
18
+ id: 'tab.id.2',
19
+ title: 'Tab 2',
20
+ content: 'Second content...',
21
+ },
22
+ {
23
+ id: 'tab.id.3',
24
+ title: 'Tab 3',
25
+ content: 'Third content...',
26
+ },
27
+ ],
28
28
  };
29
29
 
30
30
  const EXAMPLE_TABS_LONGER = {
31
- title: 'Example tabs',
32
- tabs: [
33
- {
34
- id: 'tab.id.1',
35
- title: 'Tab 1',
36
- showTitle: true,
37
- content: 'First content...',
38
- },
39
- {
40
- id: 'tab.id.2',
41
- title: 'Tab 2',
42
- content: 'Second content...',
43
- },
44
- {
45
- id: 'tab.id.3',
46
- title: 'Tab 3',
47
- content: 'Third content...',
48
- },
49
- {
50
- id: 'tab.id.4',
51
- title: 'Tab 4',
52
- content: 'Fourth content...',
53
- },
54
- {
55
- id: 'tab.id.5',
56
- title: 'Tab 5',
57
- content: 'Fifth content...',
58
- },
59
- ],
31
+ title: 'Example tabs',
32
+ tabs: [
33
+ {
34
+ id: 'tab.id.1',
35
+ title: 'Tab 1',
36
+ showTitle: true,
37
+ content: 'First content...',
38
+ },
39
+ {
40
+ id: 'tab.id.2',
41
+ title: 'Tab 2',
42
+ content: 'Second content...',
43
+ },
44
+ {
45
+ id: 'tab.id.3',
46
+ title: 'Tab 3',
47
+ content: 'Third content...',
48
+ },
49
+ {
50
+ id: 'tab.id.4',
51
+ title: 'Tab 4',
52
+ content: 'Fourth content...',
53
+ },
54
+ {
55
+ id: 'tab.id.5',
56
+ title: 'Tab 5',
57
+ content: 'Fifth content...',
58
+ },
59
+ ],
60
60
  };
61
61
 
62
62
  const EXAMPLE_TABS_WITH_NO_INITIAL_ACTIVE_TAB = {
63
- ...EXAMPLE_TABS,
64
- noInitialActiveTab: true,
63
+ ...EXAMPLE_TABS,
64
+ noInitialActiveTab: true,
65
65
  };
66
66
 
67
67
  describe('script: tabs', () => {
68
- afterEach(async () => {
69
- // Clear viewport size and browser emulation after each test.
70
- await jestPuppeteer.resetPage();
71
- });
72
-
73
- describe('when the viewport is large', () => {
74
- beforeEach(async () => {
75
- await setViewport(page, { width: 1650, height: 1050 });
76
- await setTestPage('/test', renderComponent('tabs', EXAMPLE_TABS));
68
+ afterEach(async () => {
69
+ // Clear viewport size and browser emulation after each test.
70
+ await jestPuppeteer.resetPage();
77
71
  });
78
72
 
79
- it('has additionally provided `titleClasses`', async () => {
80
- const hasClass = await page.$eval('.ons-tabs__title', (node) => node.classList.contains('ons-u-fs-m'));
73
+ describe('when the viewport is large', () => {
74
+ beforeEach(async () => {
75
+ await setViewport(page, { width: 1650, height: 1050 });
76
+ await setTestPage('/test', renderComponent('tabs', EXAMPLE_TABS));
77
+ });
81
78
 
82
- expect(hasClass).toBe(true);
83
- });
79
+ it('has additionally provided `titleClasses`', async () => {
80
+ const hasClass = await page.$eval('.ons-tabs__title', (node) => node.classList.contains('ons-u-fs-m'));
84
81
 
85
- it('has the "presentation" role assigned to tab list items', async () => {
86
- const role = await page.$eval('.ons-tab__list-item', (node) => node.getAttribute('role'));
87
- expect(role).toBe('presentation');
88
- });
82
+ expect(hasClass).toBe(true);
83
+ });
89
84
 
90
- it('has the "tab" role assigned to each tab', async () => {
91
- const tabRoleValues = await page.$$eval('.ons-tab', (nodes) => nodes.map((node) => node.getAttribute('role')));
85
+ it('has the "presentation" role assigned to tab list items', async () => {
86
+ const role = await page.$eval('.ons-tab__list-item', (node) => node.getAttribute('role'));
87
+ expect(role).toBe('presentation');
88
+ });
92
89
 
93
- expect(tabRoleValues).toEqual(['tab', 'tab', 'tab']);
94
- });
90
+ it('has the "tab" role assigned to each tab', async () => {
91
+ const tabRoleValues = await page.$$eval('.ons-tab', (nodes) => nodes.map((node) => node.getAttribute('role')));
95
92
 
96
- it('has "aria-controls" assigned to each tab with the corresponding panel id', async () => {
97
- const ariaControlsValues = await page.$$eval('.ons-tab', (nodes) => nodes.map((node) => node.getAttribute('aria-controls')));
93
+ expect(tabRoleValues).toEqual(['tab', 'tab', 'tab']);
94
+ });
98
95
 
99
- expect(ariaControlsValues).toEqual(['tab.id.1', 'tab.id.2', 'tab.id.3']);
100
- });
96
+ it('has "aria-controls" assigned to each tab with the corresponding panel id', async () => {
97
+ const ariaControlsValues = await page.$$eval('.ons-tab', (nodes) => nodes.map((node) => node.getAttribute('aria-controls')));
101
98
 
102
- it('has "aria-selected" assigned to the first tab', async () => {
103
- const ariaSelectedValue = await page.$eval('.ons-tab', (node) => node.getAttribute('aria-selected'));
99
+ expect(ariaControlsValues).toEqual(['tab.id.1', 'tab.id.2', 'tab.id.3']);
100
+ });
104
101
 
105
- expect(ariaSelectedValue).toBe('true');
106
- });
102
+ it('has "aria-selected" assigned to the first tab', async () => {
103
+ const ariaSelectedValue = await page.$eval('.ons-tab', (node) => node.getAttribute('aria-selected'));
107
104
 
108
- it('has the "ons-tab--selected" class assigned to the first tab', async () => {
109
- const hasClass = await page.$eval('.ons-tab', (node) => node.classList.contains('ons-tab--selected'));
105
+ expect(ariaSelectedValue).toBe('true');
106
+ });
110
107
 
111
- expect(hasClass).toBe(true);
112
- });
108
+ it('has the "ons-tab--selected" class assigned to the first tab', async () => {
109
+ const hasClass = await page.$eval('.ons-tab', (node) => node.classList.contains('ons-tab--selected'));
113
110
 
114
- it('has "tabindex" assigned to each tab', async () => {
115
- const tabIndexValues = await page.$$eval('.ons-tab', (nodes) => nodes.map((node) => node.getAttribute('tabindex')));
111
+ expect(hasClass).toBe(true);
112
+ });
116
113
 
117
- expect(tabIndexValues).toEqual(['0', '-1', '-1']);
118
- });
114
+ it('has "tabindex" assigned to each tab', async () => {
115
+ const tabIndexValues = await page.$$eval('.ons-tab', (nodes) => nodes.map((node) => node.getAttribute('tabindex')));
119
116
 
120
- it('has only one visible tab panel', async () => {
121
- const panelHiddenStates = await page.$$eval('.ons-tabs__panel', (nodes) =>
122
- nodes.map((node) => node.classList.contains('ons-tabs__panel--hidden')),
123
- );
117
+ expect(tabIndexValues).toEqual(['0', '-1', '-1']);
118
+ });
124
119
 
125
- expect(panelHiddenStates).toEqual([false, true, true]);
126
- });
120
+ it('has only one visible tab panel', async () => {
121
+ const panelHiddenStates = await page.$$eval('.ons-tabs__panel', (nodes) =>
122
+ nodes.map((node) => node.classList.contains('ons-tabs__panel--hidden')),
123
+ );
127
124
 
128
- describe('when a tab is clicked', () => {
129
- beforeEach(async () => {
130
- await page.focus('a[href="#tab.id.2"]');
131
- await page.keyboard.press('Enter');
132
- });
125
+ expect(panelHiddenStates).toEqual([false, true, true]);
126
+ });
133
127
 
134
- it('is assigned a "tabindex" value', async () => {
135
- const tabIndexValues = await page.$$eval('.ons-tab', (nodes) => nodes.map((node) => node.getAttribute('tabindex')));
128
+ describe('when a tab is clicked', () => {
129
+ beforeEach(async () => {
130
+ await page.focus('a[href="#tab.id.2"]');
131
+ await page.keyboard.press('Enter');
132
+ });
136
133
 
137
- expect(tabIndexValues).toEqual(['-1', '0', '-1']);
138
- });
134
+ it('is assigned a "tabindex" value', async () => {
135
+ const tabIndexValues = await page.$$eval('.ons-tab', (nodes) => nodes.map((node) => node.getAttribute('tabindex')));
139
136
 
140
- it('has the "aria-selected" attribute', async () => {
141
- const ariaSelectedValue = await page.$eval('a[href="#tab.id.2"]', (node) => node.getAttribute('aria-selected'));
137
+ expect(tabIndexValues).toEqual(['-1', '0', '-1']);
138
+ });
142
139
 
143
- expect(ariaSelectedValue).toBe('true');
144
- });
140
+ it('has the "aria-selected" attribute', async () => {
141
+ const ariaSelectedValue = await page.$eval('a[href="#tab.id.2"]', (node) => node.getAttribute('aria-selected'));
145
142
 
146
- it('has the "ons-tab--selected" class assigned', async () => {
147
- const hasClass = await page.$eval('a[href="#tab.id.2"]', (node) => node.classList.contains('ons-tab--selected'));
143
+ expect(ariaSelectedValue).toBe('true');
144
+ });
148
145
 
149
- expect(hasClass).toBe(true);
150
- });
146
+ it('has the "ons-tab--selected" class assigned', async () => {
147
+ const hasClass = await page.$eval('a[href="#tab.id.2"]', (node) => node.classList.contains('ons-tab--selected'));
151
148
 
152
- it('shows the corresponding panel', async () => {
153
- const panelHiddenStates = await page.$$eval('.ons-tabs__panel', (nodes) =>
154
- nodes.map((node) => node.classList.contains('ons-tabs__panel--hidden')),
155
- );
149
+ expect(hasClass).toBe(true);
150
+ });
156
151
 
157
- expect(panelHiddenStates).toEqual([true, false, true]);
158
- });
159
- });
152
+ it('shows the corresponding panel', async () => {
153
+ const panelHiddenStates = await page.$$eval('.ons-tabs__panel', (nodes) =>
154
+ nodes.map((node) => node.classList.contains('ons-tabs__panel--hidden')),
155
+ );
160
156
 
161
- describe('when the right arrow key is pressed', () => {
162
- it('focuses the next tab', async () => {
163
- await page.focus('a[href="#tab.id.2"]');
164
- await page.keyboard.press('ArrowRight');
157
+ expect(panelHiddenStates).toEqual([true, false, true]);
158
+ });
159
+ });
165
160
 
166
- const activeElement = await page.evaluate(() => document.activeElement.innerText);
167
- expect(activeElement).toBe('Tab 3');
168
- });
169
- });
161
+ describe('when the right arrow key is pressed', () => {
162
+ it('focuses the next tab', async () => {
163
+ await page.focus('a[href="#tab.id.2"]');
164
+ await page.keyboard.press('ArrowRight');
170
165
 
171
- describe('when the left arrow key is pressed', () => {
172
- it('focuses the previous tab', async () => {
173
- await page.focus('a[href="#tab.id.2"]');
174
- await page.keyboard.press('ArrowLeft');
166
+ const activeElement = await page.evaluate(() => document.activeElement.innerText);
167
+ expect(activeElement).toBe('Tab 3');
168
+ });
169
+ });
175
170
 
176
- const activeElement = await page.evaluate(() => document.activeElement.innerText);
177
- expect(activeElement).toBe('Tab 1');
178
- });
179
- });
180
- });
171
+ describe('when the left arrow key is pressed', () => {
172
+ it('focuses the previous tab', async () => {
173
+ await page.focus('a[href="#tab.id.2"]');
174
+ await page.keyboard.press('ArrowLeft');
181
175
 
182
- describe('when a hash for a tab is in the url', () => {
183
- beforeEach(async () => {
184
- await setViewport(page, { width: 1650, height: 1050 });
185
- await setTestPage('/test#tab.id.2', renderComponent('tabs', EXAMPLE_TABS));
176
+ const activeElement = await page.evaluate(() => document.activeElement.innerText);
177
+ expect(activeElement).toBe('Tab 1');
178
+ });
179
+ });
186
180
  });
187
181
 
188
- it('is assigned a "tabindex" value', async () => {
189
- const tabIndexValues = await page.$$eval('.ons-tab', (nodes) => nodes.map((node) => node.getAttribute('tabindex')));
182
+ describe('when a hash for a tab is in the url', () => {
183
+ beforeEach(async () => {
184
+ await setViewport(page, { width: 1650, height: 1050 });
185
+ await setTestPage('/test#tab.id.2', renderComponent('tabs', EXAMPLE_TABS));
186
+ });
190
187
 
191
- expect(tabIndexValues).toEqual(['-1', '0', '-1']);
192
- });
188
+ it('is assigned a "tabindex" value', async () => {
189
+ const tabIndexValues = await page.$$eval('.ons-tab', (nodes) => nodes.map((node) => node.getAttribute('tabindex')));
193
190
 
194
- it('has the "aria-selected" attribute', async () => {
195
- const ariaSelectedValue = await page.$eval('a[href="#tab.id.2"]', (node) => node.getAttribute('aria-selected'));
191
+ expect(tabIndexValues).toEqual(['-1', '0', '-1']);
192
+ });
196
193
 
197
- expect(ariaSelectedValue).toBe('true');
198
- });
194
+ it('has the "aria-selected" attribute', async () => {
195
+ const ariaSelectedValue = await page.$eval('a[href="#tab.id.2"]', (node) => node.getAttribute('aria-selected'));
199
196
 
200
- it('has the "ons-tab--selected" class assigned', async () => {
201
- const hasClass = await page.$eval('a[href="#tab.id.2"]', (node) => node.classList.contains('ons-tab--selected'));
197
+ expect(ariaSelectedValue).toBe('true');
198
+ });
202
199
 
203
- expect(hasClass).toBe(true);
204
- });
200
+ it('has the "ons-tab--selected" class assigned', async () => {
201
+ const hasClass = await page.$eval('a[href="#tab.id.2"]', (node) => node.classList.contains('ons-tab--selected'));
202
+
203
+ expect(hasClass).toBe(true);
204
+ });
205
205
 
206
- it('shows the corresponding panel', async () => {
207
- const panelHiddenStates = await page.$$eval('.ons-tabs__panel', (nodes) =>
208
- nodes.map((node) => node.classList.contains('ons-tabs__panel--hidden')),
209
- );
206
+ it('shows the corresponding panel', async () => {
207
+ const panelHiddenStates = await page.$$eval('.ons-tabs__panel', (nodes) =>
208
+ nodes.map((node) => node.classList.contains('ons-tabs__panel--hidden')),
209
+ );
210
210
 
211
- expect(panelHiddenStates).toEqual([true, false, true]);
211
+ expect(panelHiddenStates).toEqual([true, false, true]);
212
+ });
212
213
  });
213
- });
214
214
 
215
- describe('when the viewport is small', () => {
216
- beforeEach(async () => {
217
- await page.emulate(iPhoneX);
215
+ describe('when the viewport is small', () => {
216
+ beforeEach(async () => {
217
+ await page.emulate(iPhoneX);
218
218
 
219
- await setTestPage('/test', renderComponent('tabs', EXAMPLE_TABS_LONGER));
220
- });
219
+ await setTestPage('/test', renderComponent('tabs', EXAMPLE_TABS_LONGER));
220
+ });
221
221
 
222
- it('has no aria attributes on tabs', async () => {
223
- const tabElements = await page.$$('.ons-tab');
224
- for (let i = 0; i < 3; ++i) {
225
- const hasRoleAttribute = await tabElements[i].evaluate((node) => node.getAttribute('role') !== null);
226
- expect(hasRoleAttribute).toBe(false);
222
+ it('has no aria attributes on tabs', async () => {
223
+ const tabElements = await page.$$('.ons-tab');
224
+ for (let i = 0; i < 3; ++i) {
225
+ const hasRoleAttribute = await tabElements[i].evaluate((node) => node.getAttribute('role') !== null);
226
+ expect(hasRoleAttribute).toBe(false);
227
227
 
228
- const hasAriaControlsAttribute = await tabElements[i].evaluate((node) => node.getAttribute('aria-controls') !== null);
229
- expect(hasAriaControlsAttribute).toBe(false);
228
+ const hasAriaControlsAttribute = await tabElements[i].evaluate((node) => node.getAttribute('aria-controls') !== null);
229
+ expect(hasAriaControlsAttribute).toBe(false);
230
230
 
231
- const hasAriaSelectedAttribute = await tabElements[i].evaluate((node) => node.getAttribute('aria-selected') !== null);
232
- expect(hasAriaSelectedAttribute).toBe(false);
233
- }
234
- });
231
+ const hasAriaSelectedAttribute = await tabElements[i].evaluate((node) => node.getAttribute('aria-selected') !== null);
232
+ expect(hasAriaSelectedAttribute).toBe(false);
233
+ }
234
+ });
235
235
 
236
- it('has no hidden tab panels', async () => {
237
- const panelCount = await page.$$eval('.ons-tabs__panel', (nodes) => nodes.length);
238
- expect(panelCount).toBe(5);
236
+ it('has no hidden tab panels', async () => {
237
+ const panelCount = await page.$$eval('.ons-tabs__panel', (nodes) => nodes.length);
238
+ expect(panelCount).toBe(5);
239
239
 
240
- const hiddenPanelCount = await page.$$eval('.ons-tabs__panel--hidden', (nodes) => nodes.length);
241
- expect(hiddenPanelCount).toBe(0);
242
- });
240
+ const hiddenPanelCount = await page.$$eval('.ons-tabs__panel--hidden', (nodes) => nodes.length);
241
+ expect(hiddenPanelCount).toBe(0);
242
+ });
243
243
 
244
- it('displays a h2 element with a unique id', async () => {
245
- const panelCount = await page.$$eval('#tab-1-content-title', (nodes) => nodes.length);
246
- expect(panelCount).toBe(1);
244
+ it('displays a h2 element with a unique id', async () => {
245
+ const panelCount = await page.$$eval('#tab-1-content-title', (nodes) => nodes.length);
246
+ expect(panelCount).toBe(1);
247
+ });
247
248
  });
248
- });
249
249
 
250
- describe('when `data-no-initial-active-tab` is present', () => {
251
- beforeEach(async () => {
252
- await setViewport(page, { width: 1650, height: 1050 });
253
- await setTestPage('/test', renderComponent('tabs', EXAMPLE_TABS_WITH_NO_INITIAL_ACTIVE_TAB));
254
- });
250
+ describe('when `data-no-initial-active-tab` is present', () => {
251
+ beforeEach(async () => {
252
+ await setViewport(page, { width: 1650, height: 1050 });
253
+ await setTestPage('/test', renderComponent('tabs', EXAMPLE_TABS_WITH_NO_INITIAL_ACTIVE_TAB));
254
+ });
255
255
 
256
- it('does not assign "aria-selected" to the first tab', async () => {
257
- const ariaSelectedValue = await page.$eval('.ons-tab', (node) => node.getAttribute('aria-selected'));
256
+ it('does not assign "aria-selected" to the first tab', async () => {
257
+ const ariaSelectedValue = await page.$eval('.ons-tab', (node) => node.getAttribute('aria-selected'));
258
258
 
259
- expect(ariaSelectedValue).not.toBe('true');
260
- });
259
+ expect(ariaSelectedValue).not.toBe('true');
260
+ });
261
261
 
262
- it('does not assign the "ons-tab--selected" class to the first tab', async () => {
263
- const hasClass = await page.$eval('.ons-tab', (node) => node.classList.contains('ons-tab--selected'));
262
+ it('does not assign the "ons-tab--selected" class to the first tab', async () => {
263
+ const hasClass = await page.$eval('.ons-tab', (node) => node.classList.contains('ons-tab--selected'));
264
264
 
265
- expect(hasClass).toBe(false);
266
- });
265
+ expect(hasClass).toBe(false);
266
+ });
267
267
 
268
- describe('when a tab is clicked', () => {
269
- beforeEach(async () => {
270
- await page.focus('a[href="#tab.id.1"]');
271
- await page.keyboard.press('Enter');
272
- });
268
+ describe('when a tab is clicked', () => {
269
+ beforeEach(async () => {
270
+ await page.focus('a[href="#tab.id.1"]');
271
+ await page.keyboard.press('Enter');
272
+ });
273
273
 
274
- it('is assigned a "tabindex" value', async () => {
275
- const tabIndexValues = await page.$$eval('.ons-tab', (nodes) => nodes.map((node) => node.getAttribute('tabindex')));
274
+ it('is assigned a "tabindex" value', async () => {
275
+ const tabIndexValues = await page.$$eval('.ons-tab', (nodes) => nodes.map((node) => node.getAttribute('tabindex')));
276
276
 
277
- expect(tabIndexValues).toEqual(['0', '-1', '-1']);
278
- });
277
+ expect(tabIndexValues).toEqual(['0', '-1', '-1']);
278
+ });
279
279
 
280
- it('has the "aria-selected" attribute', async () => {
281
- const ariaSelectedValue = await page.$eval('a[href="#tab.id.1"]', (node) => node.getAttribute('aria-selected'));
280
+ it('has the "aria-selected" attribute', async () => {
281
+ const ariaSelectedValue = await page.$eval('a[href="#tab.id.1"]', (node) => node.getAttribute('aria-selected'));
282
282
 
283
- expect(ariaSelectedValue).toBe('true');
284
- });
283
+ expect(ariaSelectedValue).toBe('true');
284
+ });
285
285
 
286
- it('has the "ons-tab--selected" class assigned', async () => {
287
- const hasClass = await page.$eval('a[href="#tab.id.1"]', (node) => node.classList.contains('ons-tab--selected'));
286
+ it('has the "ons-tab--selected" class assigned', async () => {
287
+ const hasClass = await page.$eval('a[href="#tab.id.1"]', (node) => node.classList.contains('ons-tab--selected'));
288
288
 
289
- expect(hasClass).toBe(true);
290
- });
289
+ expect(hasClass).toBe(true);
290
+ });
291
291
 
292
- it('shows the corresponding panel', async () => {
293
- const panelHiddenStates = await page.$$eval('.ons-tabs__panel', (nodes) =>
294
- nodes.map((node) => node.classList.contains('ons-tabs__panel--hidden')),
295
- );
292
+ it('shows the corresponding panel', async () => {
293
+ const panelHiddenStates = await page.$$eval('.ons-tabs__panel', (nodes) =>
294
+ nodes.map((node) => node.classList.contains('ons-tabs__panel--hidden')),
295
+ );
296
296
 
297
- expect(panelHiddenStates).toEqual([false, true, true]);
298
- });
299
- });
297
+ expect(panelHiddenStates).toEqual([false, true, true]);
298
+ });
299
+ });
300
300
 
301
- describe('when a tab is clicked twice', () => {
302
- beforeEach(async () => {
303
- await page.focus('a[href="#tab.id.2"]');
304
- await page.keyboard.press('Enter');
305
- await page.keyboard.press('Enter');
306
- });
301
+ describe('when a tab is clicked twice', () => {
302
+ beforeEach(async () => {
303
+ await page.focus('a[href="#tab.id.2"]');
304
+ await page.keyboard.press('Enter');
305
+ await page.keyboard.press('Enter');
306
+ });
307
307
 
308
- it('is assigned a "tabindex" value', async () => {
309
- const tabIndexValues = await page.$$eval('.ons-tab', (nodes) => nodes.map((node) => node.getAttribute('tabindex')));
308
+ it('is assigned a "tabindex" value', async () => {
309
+ const tabIndexValues = await page.$$eval('.ons-tab', (nodes) => nodes.map((node) => node.getAttribute('tabindex')));
310
310
 
311
- expect(tabIndexValues).toEqual(['0', '-1', '-1']);
312
- });
311
+ expect(tabIndexValues).toEqual(['0', '-1', '-1']);
312
+ });
313
313
 
314
- it('does not have the "aria-selected" attribute', async () => {
315
- const ariaSelectedValue = await page.$eval('a[href="#tab.id.2"]', (node) => node.getAttribute('aria-selected'));
314
+ it('does not have the "aria-selected" attribute', async () => {
315
+ const ariaSelectedValue = await page.$eval('a[href="#tab.id.2"]', (node) => node.getAttribute('aria-selected'));
316
316
 
317
- expect(ariaSelectedValue).not.toBe('true');
318
- });
317
+ expect(ariaSelectedValue).not.toBe('true');
318
+ });
319
319
 
320
- it('does not have the "ons-tab--selected" class assigned', async () => {
321
- const hasClass = await page.$eval('a[href="#tab.id.2"]', (node) => node.classList.contains('ons-tab--selected'));
320
+ it('does not have the "ons-tab--selected" class assigned', async () => {
321
+ const hasClass = await page.$eval('a[href="#tab.id.2"]', (node) => node.classList.contains('ons-tab--selected'));
322
322
 
323
- expect(hasClass).toBe(false);
324
- });
323
+ expect(hasClass).toBe(false);
324
+ });
325
325
 
326
- it('hides the corresponding panel', async () => {
327
- const panelHiddenStates = await page.$$eval('.ons-tabs__panel', (nodes) =>
328
- nodes.map((node) => node.classList.contains('ons-tabs__panel--hidden')),
329
- );
326
+ it('hides the corresponding panel', async () => {
327
+ const panelHiddenStates = await page.$$eval('.ons-tabs__panel', (nodes) =>
328
+ nodes.map((node) => node.classList.contains('ons-tabs__panel--hidden')),
329
+ );
330
330
 
331
- expect(panelHiddenStates).toEqual([true, true, true]);
332
- });
331
+ expect(panelHiddenStates).toEqual([true, true, true]);
332
+ });
333
+ });
333
334
  });
334
- });
335
335
 
336
- describe('when a hash for a tab is in the url and `data-no-initial-active-tab` is present', () => {
337
- beforeEach(async () => {
338
- await setViewport(page, { width: 1650, height: 1050 });
339
- await setTestPage('/test#tab.id.2', renderComponent('tabs', EXAMPLE_TABS_WITH_NO_INITIAL_ACTIVE_TAB));
340
- });
336
+ describe('when a hash for a tab is in the url and `data-no-initial-active-tab` is present', () => {
337
+ beforeEach(async () => {
338
+ await setViewport(page, { width: 1650, height: 1050 });
339
+ await setTestPage('/test#tab.id.2', renderComponent('tabs', EXAMPLE_TABS_WITH_NO_INITIAL_ACTIVE_TAB));
340
+ });
341
341
 
342
- it('is assigned a "tabindex" value', async () => {
343
- const tabIndexValues = await page.$$eval('.ons-tab', (nodes) => nodes.map((node) => node.getAttribute('tabindex')));
342
+ it('is assigned a "tabindex" value', async () => {
343
+ const tabIndexValues = await page.$$eval('.ons-tab', (nodes) => nodes.map((node) => node.getAttribute('tabindex')));
344
344
 
345
- expect(tabIndexValues).toEqual(['-1', '0', '-1']);
346
- });
345
+ expect(tabIndexValues).toEqual(['-1', '0', '-1']);
346
+ });
347
347
 
348
- it('has the "aria-selected" attribute', async () => {
349
- const ariaSelectedValue = await page.$eval('a[href="#tab.id.2"]', (node) => node.getAttribute('aria-selected'));
348
+ it('has the "aria-selected" attribute', async () => {
349
+ const ariaSelectedValue = await page.$eval('a[href="#tab.id.2"]', (node) => node.getAttribute('aria-selected'));
350
350
 
351
- expect(ariaSelectedValue).toBe('true');
352
- });
351
+ expect(ariaSelectedValue).toBe('true');
352
+ });
353
353
 
354
- it('has the "ons-tab--selected" class assigned', async () => {
355
- const hasClass = await page.$eval('a[href="#tab.id.2"]', (node) => node.classList.contains('ons-tab--selected'));
354
+ it('has the "ons-tab--selected" class assigned', async () => {
355
+ const hasClass = await page.$eval('a[href="#tab.id.2"]', (node) => node.classList.contains('ons-tab--selected'));
356
356
 
357
- expect(hasClass).toBe(true);
358
- });
357
+ expect(hasClass).toBe(true);
358
+ });
359
359
 
360
- it('shows the corresponding panel', async () => {
361
- const panelHiddenStates = await page.$$eval('.ons-tabs__panel', (nodes) =>
362
- nodes.map((node) => node.classList.contains('ons-tabs__panel--hidden')),
363
- );
360
+ it('shows the corresponding panel', async () => {
361
+ const panelHiddenStates = await page.$$eval('.ons-tabs__panel', (nodes) =>
362
+ nodes.map((node) => node.classList.contains('ons-tabs__panel--hidden')),
363
+ );
364
364
 
365
- expect(panelHiddenStates).toEqual([true, false, true]);
365
+ expect(panelHiddenStates).toEqual([true, false, true]);
366
+ });
366
367
  });
367
- });
368
368
  });