@ons/design-system 70.0.7 → 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 (270) 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.spec.js +583 -583
  117. package/components/message/_macro.njk +5 -5
  118. package/components/message/_macro.spec.js +74 -74
  119. package/components/message/_message.scss +39 -39
  120. package/components/message-list/_macro.spec.js +86 -86
  121. package/components/message-list/_message-list.scss +16 -16
  122. package/components/modal/_macro.spec.js +69 -69
  123. package/components/modal/_modal.scss +36 -36
  124. package/components/modal/modal.dom.js +6 -6
  125. package/components/modal/modal.js +89 -89
  126. package/components/modal/modal.spec.js +50 -50
  127. package/components/mutually-exclusive/_macro.spec.js +140 -140
  128. package/components/mutually-exclusive/mutually-exclusive.checkboxes.spec.js +188 -188
  129. package/components/mutually-exclusive/mutually-exclusive.date.spec.js +211 -211
  130. package/components/mutually-exclusive/mutually-exclusive.dom.js +5 -5
  131. package/components/mutually-exclusive/mutually-exclusive.duration.spec.js +210 -210
  132. package/components/mutually-exclusive/mutually-exclusive.email.spec.js +90 -90
  133. package/components/mutually-exclusive/mutually-exclusive.js +137 -137
  134. package/components/mutually-exclusive/mutually-exclusive.multiple-options.checkboxes.spec.js +197 -197
  135. package/components/mutually-exclusive/mutually-exclusive.number.spec.js +96 -96
  136. package/components/mutually-exclusive/mutually-exclusive.textarea.spec.js +102 -102
  137. package/components/navigation/_macro.spec.js +360 -354
  138. package/components/navigation/_navigation.scss +122 -123
  139. package/components/navigation/navigation.dom.js +35 -35
  140. package/components/navigation/navigation.js +49 -49
  141. package/components/navigation/navigation.spec.js +249 -249
  142. package/components/pagination/_macro.spec.js +342 -335
  143. package/components/pagination/_pagination.scss +58 -58
  144. package/components/panel/_macro.spec.js +372 -372
  145. package/components/panel/_panel.scss +200 -199
  146. package/components/password/_macro.spec.js +95 -95
  147. package/components/password/password.dom.js +5 -5
  148. package/components/password/password.js +10 -10
  149. package/components/password/password.spec.js +26 -26
  150. package/components/phase-banner/_macro.spec.js +86 -86
  151. package/components/phase-banner/_phase-banner.scss +16 -16
  152. package/components/question/_macro.spec.js +235 -235
  153. package/components/question/_question.scss +24 -24
  154. package/components/quote/_macro.spec.js +52 -52
  155. package/components/quote/_quote.scss +24 -24
  156. package/components/radios/_macro.spec.js +524 -524
  157. package/components/radios/_radio.scss +49 -48
  158. package/components/radios/_radios.scss +14 -20
  159. package/components/radios/check-radios.js +21 -21
  160. package/components/radios/clear-radios.js +45 -45
  161. package/components/radios/radio-with-fieldset.js +22 -22
  162. package/components/radios/radios.dom.js +32 -32
  163. package/components/radios/radios.spec.js +251 -251
  164. package/components/related-content/_macro.spec.js +109 -109
  165. package/components/related-content/_related-content.scss +12 -12
  166. package/components/related-content/_section-macro.spec.js +20 -20
  167. package/components/relationships/_macro.spec.js +94 -94
  168. package/components/relationships/_relationships.scss +9 -9
  169. package/components/relationships/relationships.dom.js +5 -5
  170. package/components/relationships/relationships.js +18 -18
  171. package/components/relationships/relationships.spec.js +71 -71
  172. package/components/reply/_macro.spec.js +47 -47
  173. package/components/reply/reply-input.js +15 -15
  174. package/components/reply/reply.dom.js +5 -5
  175. package/components/reply/reply.spec.js +57 -57
  176. package/components/section-navigation/_macro.spec.js +210 -210
  177. package/components/section-navigation/_section-navigation.scss +76 -76
  178. package/components/select/_macro.spec.js +166 -166
  179. package/components/share-page/_macro.spec.js +68 -68
  180. package/components/skip-to-content/_macro.spec.js +54 -54
  181. package/components/skip-to-content/_skip.scss +30 -30
  182. package/components/skip-to-content/skip-to-content.dom.js +6 -6
  183. package/components/skip-to-content/skip-to-content.js +7 -7
  184. package/components/skip-to-content/skip-to-content.spec.js +21 -21
  185. package/components/status/_macro.spec.js +53 -53
  186. package/components/status/_status.scss +32 -32
  187. package/components/summary/_macro.spec.js +551 -535
  188. package/components/summary/_summary.scss +191 -195
  189. package/components/table/_macro.spec.js +499 -499
  190. package/components/table/_table.scss +204 -201
  191. package/components/table/scrollable-table.dom.js +5 -5
  192. package/components/table/scrollable-table.js +60 -60
  193. package/components/table/sortable-table.dom.js +5 -5
  194. package/components/table/sortable-table.js +135 -135
  195. package/components/table/table.spec.js +144 -140
  196. package/components/table-of-contents/_macro.spec.js +125 -125
  197. package/components/table-of-contents/_toc.scss +9 -9
  198. package/components/table-of-contents/toc.dom.js +5 -5
  199. package/components/table-of-contents/toc.js +30 -30
  200. package/components/table-of-contents/toc.spec.js +88 -88
  201. package/components/tabs/_macro.spec.js +92 -92
  202. package/components/tabs/_tabs.scss +120 -115
  203. package/components/tabs/tabs.dom.js +5 -5
  204. package/components/tabs/tabs.js +266 -266
  205. package/components/tabs/tabs.spec.js +268 -268
  206. package/components/text-indent/_macro.spec.js +33 -33
  207. package/components/text-indent/_text-indent.scss +3 -3
  208. package/components/textarea/_macro.spec.js +238 -238
  209. package/components/textarea/textarea.dom.js +5 -5
  210. package/components/textarea/textarea.spec.js +78 -74
  211. package/components/timeline/_macro.spec.js +83 -83
  212. package/components/timeline/_timeline.scss +26 -26
  213. package/components/timeout-modal/_macro.spec.js +47 -47
  214. package/components/timeout-modal/timeout-modal.dom.js +9 -9
  215. package/components/timeout-modal/timeout-modal.js +66 -66
  216. package/components/timeout-modal/timeout-modal.spec.js +157 -157
  217. package/components/timeout-panel/_macro.spec.js +41 -41
  218. package/components/timeout-panel/timeout-panel.dom.js +8 -8
  219. package/components/timeout-panel/timeout-panel.spec.js +118 -118
  220. package/components/upload/_macro.spec.js +52 -52
  221. package/components/upload/_upload.scss +28 -28
  222. package/components/video/_macro.spec.js +42 -42
  223. package/components/video/_video.scss +16 -16
  224. package/components/video/video.dom.js +5 -5
  225. package/components/video/video.js +32 -32
  226. package/components/video/video.spec.js +103 -97
  227. package/css/main.css +1 -1
  228. package/favicons/manifest.json +25 -25
  229. package/js/abortable-fetch.js +23 -23
  230. package/js/analytics.js +53 -53
  231. package/js/cookies-functions.js +135 -135
  232. package/js/cookies-settings.dom.js +7 -7
  233. package/js/cookies-settings.js +77 -77
  234. package/js/cookies-settings.spec.js +106 -106
  235. package/js/domready.js +8 -8
  236. package/js/fetch.js +14 -14
  237. package/js/inpagelink.dom.js +5 -5
  238. package/js/inpagelink.js +19 -19
  239. package/js/polyfills.js +0 -1
  240. package/js/print-button.js +6 -6
  241. package/js/timeout.js +211 -211
  242. package/layout/_template.njk +5 -7
  243. package/package.json +131 -128
  244. package/scss/base/_forms.scss +10 -10
  245. package/scss/base/_global.scss +45 -44
  246. package/scss/base/_typography.scss +20 -20
  247. package/scss/helpers/_functions.scss +18 -15
  248. package/scss/helpers/_mixins.scss +59 -53
  249. package/scss/helpers/_mq.scss +62 -65
  250. package/scss/objects/_container.scss +20 -20
  251. package/scss/objects/_page.scss +33 -33
  252. package/scss/objects/_spacing.scss +10 -10
  253. package/scss/overrides/hcm.scss +237 -237
  254. package/scss/overrides/rtl.scss +95 -95
  255. package/scss/print.scss +47 -47
  256. package/scss/utilities/_border.scss +7 -7
  257. package/scss/utilities/_colors.scss +6 -6
  258. package/scss/utilities/_display.scss +8 -8
  259. package/scss/utilities/_float.scss +7 -7
  260. package/scss/utilities/_grid.scss +144 -144
  261. package/scss/utilities/_highlight.scss +4 -4
  262. package/scss/utilities/_margin.scss +17 -17
  263. package/scss/utilities/_pad.scss +15 -15
  264. package/scss/utilities/_typography.scss +35 -33
  265. package/scss/utilities/_utilities.scss +8 -8
  266. package/scss/utilities/_visibility.scss +25 -25
  267. package/scss/vars/_colors.scss +116 -116
  268. package/scss/vars/_forms.scss +22 -22
  269. package/scss/vars/_grid.scss +11 -9
  270. package/scss/vars/_typography.scss +54 -54
@@ -1,268 +1,276 @@
1
1
  import { renderComponent, setTestPage } from '../../tests/helpers/rendering';
2
2
 
3
3
  describe('script: button', () => {
4
- describe('mode: link', () => {
5
- it('navigates to url when button is clicked with the spacebar', async () => {
6
- await setTestPage(
7
- '/test',
8
- renderComponent('button', {
9
- id: 'test-button',
10
- url: '/test/path#abc',
11
- }),
12
- );
13
-
14
- await page.focus('#test-button');
15
-
16
- await Promise.all([page.waitForNavigation(), page.keyboard.press('Space')]);
17
-
18
- const url = await page.url();
19
- expect(url).toBe(`http://localhost:${process.env.TEST_PORT}/test/path#abc`);
20
- });
21
- });
22
-
23
- describe('mode: standard', () => {
24
- it('allow rapidly repeated submissions when in a form', async () => {
25
- await setTestPage(
26
- '/test',
27
- `
28
- <form>
29
- ${renderComponent('button', { id: 'test-button' })}
30
- </form>
31
- `,
32
- );
33
-
34
- await page.evaluate(() => {
35
- window.__COUNTER = 0;
36
- document.querySelector('form').addEventListener('submit', (event) => {
37
- window.__COUNTER++;
38
- event.preventDefault();
4
+ describe('mode: link', () => {
5
+ it('navigates to url when button is clicked with the spacebar', async () => {
6
+ await setTestPage(
7
+ '/test',
8
+ renderComponent('button', {
9
+ id: 'test-button',
10
+ url: '/test/path#abc',
11
+ }),
12
+ );
13
+
14
+ await page.focus('#test-button');
15
+
16
+ await Promise.all([page.waitForNavigation(), page.keyboard.press('Space')]);
17
+
18
+ const url = await page.url();
19
+ expect(url).toBe(`http://localhost:${process.env.TEST_PORT}/test/path#abc`);
39
20
  });
40
- });
41
-
42
- await page.click('#test-button');
43
- await page.click('#test-button');
44
-
45
- const counter = await page.evaluate(() => window.__COUNTER);
46
- expect(counter).toBe(2);
47
- });
48
- });
49
-
50
- describe('mode: loader', () => {
51
- it('disables button when clicked', async () => {
52
- await setTestPage(
53
- '/test',
54
- renderComponent('button', {
55
- id: 'test-button',
56
- text: 'Submit',
57
- variants: 'loader',
58
- }),
59
- );
60
-
61
- await page.click('#test-button');
62
-
63
- const isButtonDisabled = await page.evaluate(() => document.querySelector('#test-button').getAttribute('disabled'));
64
- expect(isButtonDisabled).toBe('true');
65
21
  });
66
22
 
67
- it('initialised without loading style applied', async () => {
68
- await setTestPage(
69
- '/test',
70
- renderComponent('button', {
71
- id: 'test-button',
72
- text: 'Submit',
73
- variants: 'loader',
74
- }),
75
- );
76
-
77
- const hasIsLoadingClass = await page.evaluate(() => document.querySelector('#test-button').classList.contains('ons-is-loading'));
78
- expect(hasIsLoadingClass).toBe(false);
79
- });
80
-
81
- it('applies loading style when clicked', async () => {
82
- await setTestPage(
83
- '/test',
84
- renderComponent('button', {
85
- id: 'test-button',
86
- text: 'Submit',
87
- variants: 'loader',
88
- }),
89
- );
90
-
91
- await page.click('#test-button');
92
-
93
- const hasIsLoadingClass = await page.evaluate(() => document.querySelector('#test-button').classList.contains('ons-is-loading'));
94
- expect(hasIsLoadingClass).toBe(true);
23
+ describe('mode: standard', () => {
24
+ it('allow rapidly repeated submissions when in a form', async () => {
25
+ await setTestPage(
26
+ '/test',
27
+ `
28
+ <form>
29
+ ${renderComponent('button', { id: 'test-button' })}
30
+ </form>
31
+ `,
32
+ );
33
+
34
+ await page.evaluate(() => {
35
+ window.__COUNTER = 0;
36
+ document.querySelector('form').addEventListener('submit', (event) => {
37
+ window.__COUNTER++;
38
+ event.preventDefault();
39
+ });
40
+ });
41
+
42
+ await page.click('#test-button');
43
+ await page.click('#test-button');
44
+
45
+ const counter = await page.evaluate(() => window.__COUNTER);
46
+ expect(counter).toBe(2);
47
+ });
95
48
  });
96
49
 
97
- it('disables button when clicked when in a form', async () => {
98
- await setTestPage(
99
- '/test',
100
- `
101
- <form onsubmit="return false;">
102
- ${renderComponent('button', { id: 'test-button', text: 'Submit', variants: 'loader' })}
103
- </form>
104
- `,
105
- );
106
-
107
- await page.click('#test-button');
50
+ describe('mode: loader', () => {
51
+ it('disables button when clicked', async () => {
52
+ await setTestPage(
53
+ '/test',
54
+ renderComponent('button', {
55
+ id: 'test-button',
56
+ text: 'Submit',
57
+ variants: 'loader',
58
+ }),
59
+ );
60
+
61
+ await page.click('#test-button');
62
+
63
+ const isButtonDisabled = await page.evaluate(() => document.querySelector('#test-button').getAttribute('disabled'));
64
+ expect(isButtonDisabled).toBe('true');
65
+ });
108
66
 
109
- const isButtonDisabled = (await page.$('#test-button[disabled]')) !== null;
110
- expect(isButtonDisabled).toBe(true);
111
- });
67
+ it('initialised without loading style applied', async () => {
68
+ await setTestPage(
69
+ '/test',
70
+ renderComponent('button', {
71
+ id: 'test-button',
72
+ text: 'Submit',
73
+ variants: 'loader',
74
+ }),
75
+ );
76
+
77
+ const hasIsLoadingClass = await page.evaluate(() =>
78
+ document.querySelector('#test-button').classList.contains('ons-is-loading'),
79
+ );
80
+ expect(hasIsLoadingClass).toBe(false);
81
+ });
112
82
 
113
- it('initialised without loading style applied when in a form', async () => {
114
- await setTestPage(
115
- '/test',
116
- `
117
- <form>
118
- ${renderComponent('button', { id: 'test-button', text: 'Submit', variants: 'loader' })}
119
- </form>
120
- `,
121
- );
122
-
123
- const hasIsLoadingClass = await page.evaluate(() => document.querySelector('#test-button').classList.contains('ons-is-loading'));
124
- expect(hasIsLoadingClass).toBe(false);
125
- });
83
+ it('applies loading style when clicked', async () => {
84
+ await setTestPage(
85
+ '/test',
86
+ renderComponent('button', {
87
+ id: 'test-button',
88
+ text: 'Submit',
89
+ variants: 'loader',
90
+ }),
91
+ );
92
+
93
+ await page.click('#test-button');
94
+
95
+ const hasIsLoadingClass = await page.evaluate(() =>
96
+ document.querySelector('#test-button').classList.contains('ons-is-loading'),
97
+ );
98
+ expect(hasIsLoadingClass).toBe(true);
99
+ });
126
100
 
127
- it('applies loading style when clicked when in a form', async () => {
128
- await setTestPage(
129
- '/test',
130
- `
131
- <form onsubmit="return false;">
132
- ${renderComponent('button', { id: 'test-button', text: 'Submit', variants: 'loader' })}
133
- </form>
134
- `,
135
- );
101
+ it('disables button when clicked when in a form', async () => {
102
+ await setTestPage(
103
+ '/test',
104
+ `
105
+ <form onsubmit="return false;">
106
+ ${renderComponent('button', { id: 'test-button', text: 'Submit', variants: 'loader' })}
107
+ </form>
108
+ `,
109
+ );
136
110
 
137
- await page.click('#test-button');
111
+ await page.click('#test-button');
138
112
 
139
- const hasIsLoadingClass = await page.evaluate(() => document.querySelector('#test-button').classList.contains('ons-is-loading'));
140
- expect(hasIsLoadingClass).toBe(true);
141
- });
142
- });
143
-
144
- describe('mode: timer', () => {
145
- it('allow intentional repeated submissions', async () => {
146
- await setTestPage(
147
- '/test',
148
- renderComponent('button', {
149
- id: 'test-button',
150
- variants: 'timer',
151
- text: 'Submit',
152
- }),
153
- );
154
-
155
- await page.evaluate(() => {
156
- window.__COUNTER = 0;
157
- document.querySelector('#test-button').addEventListener('click', (event) => {
158
- window.__COUNTER++;
159
- event.preventDefault();
113
+ const isButtonDisabled = (await page.$('#test-button[disabled]')) !== null;
114
+ expect(isButtonDisabled).toBe(true);
160
115
  });
161
- });
162
116
 
163
- await page.click('#test-button');
164
- await page.click('#test-button', { delay: 1000 });
117
+ it('initialised without loading style applied when in a form', async () => {
118
+ await setTestPage(
119
+ '/test',
120
+ `
121
+ <form>
122
+ ${renderComponent('button', { id: 'test-button', text: 'Submit', variants: 'loader' })}
123
+ </form>
124
+ `,
125
+ );
126
+
127
+ const hasIsLoadingClass = await page.evaluate(() =>
128
+ document.querySelector('#test-button').classList.contains('ons-is-loading'),
129
+ );
130
+ expect(hasIsLoadingClass).toBe(false);
131
+ });
165
132
 
166
- const counter = await page.evaluate(() => window.__COUNTER);
167
- expect(counter).toBe(2);
133
+ it('applies loading style when clicked when in a form', async () => {
134
+ await setTestPage(
135
+ '/test',
136
+ `
137
+ <form onsubmit="return false;">
138
+ ${renderComponent('button', { id: 'test-button', text: 'Submit', variants: 'loader' })}
139
+ </form>
140
+ `,
141
+ );
142
+
143
+ await page.click('#test-button');
144
+
145
+ const hasIsLoadingClass = await page.evaluate(() =>
146
+ document.querySelector('#test-button').classList.contains('ons-is-loading'),
147
+ );
148
+ expect(hasIsLoadingClass).toBe(true);
149
+ });
168
150
  });
169
151
 
170
- it('prevents unintentional repeated submissions', async () => {
171
- await setTestPage(
172
- '/test',
173
- renderComponent('button', {
174
- id: 'test-button',
175
- variants: 'timer',
176
- text: 'Submit',
177
- }),
178
- );
179
-
180
- await page.evaluate(() => {
181
- window.__COUNTER = 0;
182
- document.querySelector('#test-button').addEventListener('click', (event) => {
183
- window.__COUNTER++;
184
- event.preventDefault();
152
+ describe('mode: timer', () => {
153
+ it('allow intentional repeated submissions', async () => {
154
+ await setTestPage(
155
+ '/test',
156
+ renderComponent('button', {
157
+ id: 'test-button',
158
+ variants: 'timer',
159
+ text: 'Submit',
160
+ }),
161
+ );
162
+
163
+ await page.evaluate(() => {
164
+ window.__COUNTER = 0;
165
+ document.querySelector('#test-button').addEventListener('click', (event) => {
166
+ window.__COUNTER++;
167
+ event.preventDefault();
168
+ });
169
+ });
170
+
171
+ await page.click('#test-button');
172
+ await page.click('#test-button', { delay: 1000 });
173
+
174
+ const counter = await page.evaluate(() => window.__COUNTER);
175
+ expect(counter).toBe(2);
185
176
  });
186
- });
187
-
188
- await page.click('#test-button');
189
- await page.click('#test-button');
190
177
 
191
- const counter = await page.evaluate(() => window.__COUNTER);
192
- expect(counter).toBe(1);
193
- });
194
-
195
- it('allow intentional repeated submissions when in a form', async () => {
196
- await setTestPage(
197
- '/test',
198
- `
199
- <form>
200
- ${renderComponent('button', { id: 'test-button', variants: 'timer', text: 'Submit' })}
201
- </form>
202
- `,
203
- );
204
-
205
- await page.evaluate(() => {
206
- window.__COUNTER = 0;
207
- document.querySelector('form').addEventListener('submit', (event) => {
208
- window.__COUNTER++;
209
- event.preventDefault();
178
+ it('prevents unintentional repeated submissions', async () => {
179
+ await setTestPage(
180
+ '/test',
181
+ renderComponent('button', {
182
+ id: 'test-button',
183
+ variants: 'timer',
184
+ text: 'Submit',
185
+ }),
186
+ );
187
+
188
+ await page.evaluate(() => {
189
+ window.__COUNTER = 0;
190
+ document.querySelector('#test-button').addEventListener('click', (event) => {
191
+ window.__COUNTER++;
192
+ event.preventDefault();
193
+ });
194
+ });
195
+
196
+ await page.click('#test-button');
197
+ await page.click('#test-button');
198
+
199
+ const counter = await page.evaluate(() => window.__COUNTER);
200
+ expect(counter).toBe(1);
210
201
  });
211
- });
212
202
 
213
- await page.click('#test-button');
214
- await page.click('#test-button', { delay: 1000 });
203
+ it('allow intentional repeated submissions when in a form', async () => {
204
+ await setTestPage(
205
+ '/test',
206
+ `
207
+ <form>
208
+ ${renderComponent('button', { id: 'test-button', variants: 'timer', text: 'Submit' })}
209
+ </form>
210
+ `,
211
+ );
212
+
213
+ await page.evaluate(() => {
214
+ window.__COUNTER = 0;
215
+ document.querySelector('form').addEventListener('submit', (event) => {
216
+ window.__COUNTER++;
217
+ event.preventDefault();
218
+ });
219
+ });
220
+
221
+ await page.click('#test-button');
222
+ await page.click('#test-button', { delay: 1000 });
223
+
224
+ const counter = await page.evaluate(() => window.__COUNTER);
225
+ expect(counter).toBe(2);
226
+ });
215
227
 
216
- const counter = await page.evaluate(() => window.__COUNTER);
217
- expect(counter).toBe(2);
228
+ it('prevents unintentional repeated submissions when in a form', async () => {
229
+ await setTestPage(
230
+ '/test',
231
+ `
232
+ <form>
233
+ ${renderComponent('button', { id: 'test-button', variants: 'timer', text: 'Submit' })}
234
+ </form>
235
+ `,
236
+ );
237
+
238
+ await page.evaluate(() => {
239
+ window.__COUNTER = 0;
240
+ document.querySelector('form').addEventListener('submit', (event) => {
241
+ window.__COUNTER++;
242
+ event.preventDefault();
243
+ });
244
+ });
245
+
246
+ await page.click('#test-button');
247
+ await page.click('#test-button');
248
+
249
+ const counter = await page.evaluate(() => window.__COUNTER);
250
+ expect(counter).toBe(1);
251
+ });
218
252
  });
219
253
 
220
- it('prevents unintentional repeated submissions when in a form', async () => {
221
- await setTestPage(
222
- '/test',
223
- `
224
- <form>
225
- ${renderComponent('button', { id: 'test-button', variants: 'timer', text: 'Submit' })}
226
- </form>
227
- `,
228
- );
229
-
230
- await page.evaluate(() => {
231
- window.__COUNTER = 0;
232
- document.querySelector('form').addEventListener('submit', (event) => {
233
- window.__COUNTER++;
234
- event.preventDefault();
254
+ describe('style: print', () => {
255
+ it('displays the browsers print interface', async () => {
256
+ await setTestPage(
257
+ '/test',
258
+ renderComponent('button', {
259
+ id: 'test-button',
260
+ type: 'button',
261
+ text: 'Print this page',
262
+ variants: 'print',
263
+ }),
264
+ );
265
+
266
+ await page.evaluate(() => {
267
+ window.print = () => (window.wasPrinted = 'yes');
268
+ });
269
+
270
+ await page.click('#test-button');
271
+
272
+ const wasPrinted = await page.evaluate(() => window.wasPrinted);
273
+ expect(wasPrinted).toBe('yes');
235
274
  });
236
- });
237
-
238
- await page.click('#test-button');
239
- await page.click('#test-button');
240
-
241
- const counter = await page.evaluate(() => window.__COUNTER);
242
- expect(counter).toBe(1);
243
- });
244
- });
245
-
246
- describe('style: print', () => {
247
- it('displays the browsers print interface', async () => {
248
- await setTestPage(
249
- '/test',
250
- renderComponent('button', {
251
- id: 'test-button',
252
- type: 'button',
253
- text: 'Print this page',
254
- variants: 'print',
255
- }),
256
- );
257
-
258
- await page.evaluate(() => {
259
- window.print = () => (window.wasPrinted = 'yes');
260
- });
261
-
262
- await page.click('#test-button');
263
-
264
- const wasPrinted = await page.evaluate(() => window.wasPrinted);
265
- expect(wasPrinted).toBe('yes');
266
275
  });
267
- });
268
276
  });
@@ -1,8 +1,8 @@
1
1
  .ons-call-to-action {
2
- background: var(--ons-color-cta-bg);
3
- padding: 0.85rem 0;
2
+ background: var(--ons-color-cta-bg);
3
+ padding: 0.85rem 0;
4
4
 
5
- &__heading {
6
- padding-right: 0.2rem;
7
- }
5
+ &__heading {
6
+ padding-right: 0.2rem;
7
+ }
8
8
  }
@@ -6,43 +6,43 @@ import axe from '../../tests/helpers/axe';
6
6
  import { renderComponent, templateFaker } from '../../tests/helpers/rendering';
7
7
 
8
8
  const EXAMPLE_CALL_TO_ACTION = {
9
- headingText: 'Call to action heading.',
10
- paragraphText: 'Descriptive text about call to action',
11
- button: {
12
- text: 'Start',
13
- url: 'https://example.com/start',
14
- },
9
+ headingText: 'Call to action heading.',
10
+ paragraphText: 'Descriptive text about call to action',
11
+ button: {
12
+ text: 'Start',
13
+ url: 'https://example.com/start',
14
+ },
15
15
  };
16
16
 
17
17
  describe('macro: call-to-action', () => {
18
- it('passes jest-axe checks', async () => {
19
- const $ = cheerio.load(renderComponent('call-to-action', EXAMPLE_CALL_TO_ACTION));
18
+ it('passes jest-axe checks', async () => {
19
+ const $ = cheerio.load(renderComponent('call-to-action', EXAMPLE_CALL_TO_ACTION));
20
20
 
21
- const results = await axe($.html());
22
- expect(results).toHaveNoViolations();
23
- });
21
+ const results = await axe($.html());
22
+ expect(results).toHaveNoViolations();
23
+ });
24
24
 
25
- it('has the provided `headingText`', () => {
26
- const $ = cheerio.load(renderComponent('call-to-action', EXAMPLE_CALL_TO_ACTION));
25
+ it('has the provided `headingText`', () => {
26
+ const $ = cheerio.load(renderComponent('call-to-action', EXAMPLE_CALL_TO_ACTION));
27
27
 
28
- const headingText = $('.ons-call-to-action__heading').text().trim();
29
- expect(headingText).toBe('Call to action heading.');
30
- });
28
+ const headingText = $('.ons-call-to-action__heading').text().trim();
29
+ expect(headingText).toBe('Call to action heading.');
30
+ });
31
31
 
32
- it('has the provided `paragraphText`', () => {
33
- const $ = cheerio.load(renderComponent('call-to-action', EXAMPLE_CALL_TO_ACTION));
32
+ it('has the provided `paragraphText`', () => {
33
+ const $ = cheerio.load(renderComponent('call-to-action', EXAMPLE_CALL_TO_ACTION));
34
34
 
35
- const paragraphText = $('.ons-call-to-action__text').text().trim();
36
- expect(paragraphText).toBe('Descriptive text about call to action');
37
- });
35
+ const paragraphText = $('.ons-call-to-action__text').text().trim();
36
+ expect(paragraphText).toBe('Descriptive text about call to action');
37
+ });
38
38
 
39
- it('outputs the expected call-to-action button', () => {
40
- const faker = templateFaker();
41
- const buttonSpy = faker.spy('button');
39
+ it('outputs the expected call-to-action button', () => {
40
+ const faker = templateFaker();
41
+ const buttonSpy = faker.spy('button');
42
42
 
43
- faker.renderComponent('call-to-action', EXAMPLE_CALL_TO_ACTION);
43
+ faker.renderComponent('call-to-action', EXAMPLE_CALL_TO_ACTION);
44
44
 
45
- expect(buttonSpy.occurrences[0]).toHaveProperty('text', 'Start');
46
- expect(buttonSpy.occurrences[0]).toHaveProperty('url', 'https://example.com/start');
47
- });
45
+ expect(buttonSpy.occurrences[0]).toHaveProperty('text', 'Start');
46
+ expect(buttonSpy.occurrences[0]).toHaveProperty('url', 'https://example.com/start');
47
+ });
48
48
  });
@@ -1,32 +1,32 @@
1
1
  .ons-card {
2
- margin: 0 0 2rem;
3
- width: 100%;
2
+ margin: 0 0 2rem;
3
+ width: 100%;
4
4
 
5
- &__link {
6
- display: flex;
7
- flex-direction: column;
8
- margin-bottom: 1rem;
9
- width: fit-content;
5
+ &__link {
6
+ display: flex;
7
+ flex-direction: column;
8
+ margin-bottom: 1rem;
9
+ width: fit-content;
10
10
 
11
- & > .ons-card__title {
12
- margin-bottom: 0;
11
+ > .ons-card__title {
12
+ margin-bottom: 0;
13
+ }
13
14
  }
14
- }
15
15
 
16
- &__link:hover {
17
- text-decoration-thickness: 3px;
18
- }
16
+ &__link:hover {
17
+ text-decoration-thickness: 3px;
18
+ }
19
19
 
20
- &__title {
21
- // This is to allow the focus state for multi lined title links to render the focus style correctly.
22
- // This should be corrected when the typography scale is improved.
23
- line-height: 1.65 !important;
24
- }
20
+ &__title {
21
+ // This is to allow the focus state for multi lined title links to render the focus style correctly.
22
+ // This should be corrected when the typography scale is improved.
23
+ line-height: 1.65 !important;
24
+ }
25
25
 
26
- @include mq(m) {
27
- margin: 0;
28
- .ons-grid__col & {
29
- padding-right: 1rem;
26
+ @include mq(m) {
27
+ margin: 0;
28
+ .ons-grid__col & {
29
+ padding-right: 1rem;
30
+ }
30
31
  }
31
- }
32
32
  }