@ons/design-system 72.0.1 → 72.1.1
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.
- package/README.md +1 -1
- package/components/accordion/_macro.spec.js +2 -2
- package/components/address-input/_macro.spec.js +245 -322
- package/components/address-input/autosuggest.address.spec.js +16 -14
- package/components/address-output/_macro.spec.js +121 -74
- package/components/address-output/_test_examples.js +8 -0
- package/components/autosuggest/_macro.njk +1 -0
- package/components/autosuggest/_macro.spec.js +373 -178
- package/components/autosuggest/autosuggest.spec.js +3 -1
- package/components/autosuggest/autosuggest.ui.js +39 -10
- package/components/autosuggest/example-autosuggest-country.njk +2 -1
- package/components/autosuggest/fuse-config.js +7 -2
- package/components/back-to-top/back-to-top.dom.js +4 -4
- package/components/back-to-top/back-to-top.js +1 -1
- package/components/browser-banner/_macro.spec.js +11 -11
- package/components/button/_macro.njk +1 -1
- package/components/button/_macro.spec.js +405 -351
- package/components/button/example-button-group.njk +1 -0
- package/components/checkboxes/_checkbox-macro.njk +20 -0
- package/components/checkboxes/_checkbox.scss +3 -3
- package/components/checkboxes/_macro.njk +5 -0
- package/components/checkboxes/_macro.spec.js +35 -0
- package/components/checkboxes/example-checkboxes-with-revealed-text-area-expanded.njk +68 -0
- package/components/checkboxes/example-checkboxes-with-revealed-text-area.njk +67 -0
- package/components/details/_details.scss +1 -2
- package/components/details/example-details-open.njk +10 -0
- package/components/external-link/_macro.spec.js +66 -69
- package/components/external-link/_test_examples.js +4 -0
- package/components/feedback/_macro.spec.js +109 -80
- package/components/feedback/_test_examples.js +17 -0
- package/components/field/_macro.spec.js +106 -69
- package/components/section-navigation/_macro.njk +9 -6
- package/components/summary/_macro.njk +73 -78
- package/components/summary/_macro.spec.js +5 -15
- package/components/summary/_summary.scss +16 -11
- package/components/table-of-contents/_macro.njk +3 -3
- package/components/table-of-contents/_macro.spec.js +3 -3
- package/components/table-of-contents/{_toc.scss → _table-of-contents.scss} +1 -1
- package/components/table-of-contents/table-of-contents.dom.js +13 -0
- package/components/table-of-contents/{toc.js → table-of-contents.js} +4 -4
- package/components/table-of-contents/{toc.spec.js → table-of-contents.spec.js} +2 -2
- package/components/tabs/_tabs.scss +10 -11
- package/components/tabs/tabs.js +3 -3
- package/components/timeout-modal/timeout-modal.spec.js +1 -1
- package/css/main.css +1 -1
- package/js/analytics.js +1 -1
- package/js/main.js +1 -1
- package/package.json +2 -2
- package/scripts/main.es5.js +1 -1
- package/scripts/main.js +1 -1
- package/scss/main.scss +1 -1
- package/scss/objects/_page.scss +1 -1
- package/scss/utilities/_margin.scss +4 -0
- package/scss/utilities/_padding.scss +4 -0
- package/components/table-of-contents/toc.dom.js +0 -13
|
@@ -4,103 +4,132 @@ import * as cheerio from 'cheerio';
|
|
|
4
4
|
|
|
5
5
|
import axe from '../../tests/helpers/axe';
|
|
6
6
|
import { renderComponent } from '../../tests/helpers/rendering';
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
linkUrl: 'http://example.com',
|
|
23
|
-
linkText: 'Feedback link text',
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
describe('macro: feedback', () => {
|
|
27
|
-
it('passes jest-axe checks with minimum parameters', async () => {
|
|
28
|
-
const $ = cheerio.load(renderComponent('feedback', EXAMPLE_FEEDBACK_MINIMAL));
|
|
29
|
-
|
|
30
|
-
const results = await axe($.html());
|
|
31
|
-
expect(results).toHaveNoViolations();
|
|
7
|
+
import { EXAMPLE_FEEDBACK, EXAMPLE_FEEDBACK_ALL_PARAMS } from './_test_examples';
|
|
8
|
+
|
|
9
|
+
describe('FOR: Macro: Feedback', () => {
|
|
10
|
+
describe('GIVEN: Params: required', () => {
|
|
11
|
+
describe('WHEN: all required params are provided', () => {
|
|
12
|
+
const $ = cheerio.load(renderComponent('feedback', EXAMPLE_FEEDBACK));
|
|
13
|
+
test('THEN: jest-axe checks pass', async () => {
|
|
14
|
+
const results = await axe($.html());
|
|
15
|
+
expect(results).toHaveNoViolations();
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
test('THEN: the title has a default headingLevel of 2', () => {
|
|
19
|
+
expect($(`h2.ons-feedback__heading`).text().trim()).toBe('Feedback heading');
|
|
20
|
+
});
|
|
21
|
+
});
|
|
32
22
|
});
|
|
33
23
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
24
|
+
describe('GIVEN: Params: all', () => {
|
|
25
|
+
describe('WHEN: all params are provided', () => {
|
|
26
|
+
const $ = cheerio.load(renderComponent('feedback', EXAMPLE_FEEDBACK_ALL_PARAMS));
|
|
27
|
+
test('THEN: jest-axe checks pass', async () => {
|
|
28
|
+
const results = await axe($.html());
|
|
29
|
+
expect(results).toHaveNoViolations();
|
|
30
|
+
});
|
|
31
|
+
});
|
|
39
32
|
});
|
|
40
33
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
34
|
+
describe('GIVEN: Params: id', () => {
|
|
35
|
+
describe('WHEN: id is provided', () => {
|
|
36
|
+
const $ = cheerio.load(
|
|
37
|
+
renderComponent('feedback', {
|
|
38
|
+
...EXAMPLE_FEEDBACK,
|
|
39
|
+
id: 'example-id',
|
|
40
|
+
}),
|
|
41
|
+
);
|
|
42
|
+
test('THEN: renders with provided id', () => {
|
|
43
|
+
expect($('#example-id').length).toBe(1);
|
|
44
|
+
});
|
|
45
|
+
});
|
|
49
46
|
});
|
|
50
47
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
48
|
+
describe('GIVEN: Params: classes', () => {
|
|
49
|
+
describe('WHEN: additional style classes are provided', () => {
|
|
50
|
+
const $ = cheerio.load(
|
|
51
|
+
renderComponent('feedback', {
|
|
52
|
+
...EXAMPLE_FEEDBACK,
|
|
53
|
+
classes: 'extra-class another-extra-class',
|
|
54
|
+
}),
|
|
55
|
+
);
|
|
56
|
+
test('THEN: renders with provided classes', () => {
|
|
57
|
+
expect($('.ons-feedback').hasClass('extra-class')).toBe(true);
|
|
58
|
+
expect($('.ons-feedback').hasClass('another-extra-class')).toBe(true);
|
|
59
|
+
});
|
|
60
|
+
});
|
|
60
61
|
});
|
|
61
62
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
expect($(`${expectedTitleTag}.ons-feedback__heading`).text().trim()).toBe('Feedback heading');
|
|
63
|
+
describe('GIVEN: Params: heading', () => {
|
|
64
|
+
describe('WHEN: heading is provided', () => {
|
|
65
|
+
const $ = cheerio.load(
|
|
66
|
+
renderComponent('feedback', {
|
|
67
|
+
...EXAMPLE_FEEDBACK,
|
|
68
|
+
}),
|
|
69
|
+
);
|
|
70
|
+
test('THEN: renders with provided heading text', () => {
|
|
71
|
+
expect($('.ons-feedback__heading').text().trim()).toBe('Feedback heading');
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
74
|
});
|
|
75
75
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
76
|
+
describe('GIVEN: Params: headingLevel', () => {
|
|
77
|
+
describe('WHEN: headingLevel is provided', () => {
|
|
78
|
+
test.each([
|
|
79
|
+
[1, 'h1'],
|
|
80
|
+
[4, 'h4'],
|
|
81
|
+
])('THEN: has the correct heading element type for the provided headingLevel (%i -> %s)', (headingLevel, expectedTitleTag) => {
|
|
82
|
+
const $ = cheerio.load(
|
|
83
|
+
renderComponent('feedback', {
|
|
84
|
+
...EXAMPLE_FEEDBACK,
|
|
85
|
+
headingLevel,
|
|
86
|
+
}),
|
|
87
|
+
);
|
|
88
|
+
const titleTag = $(`${expectedTitleTag}.ons-feedback__heading`)[0].tagName;
|
|
89
|
+
expect(titleTag).toBe(expectedTitleTag);
|
|
90
|
+
});
|
|
91
|
+
});
|
|
80
92
|
});
|
|
81
93
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
94
|
+
describe('GIVEN: Params: headingClasses', () => {
|
|
95
|
+
describe('WHEN: additional heading style classes are provided', () => {
|
|
96
|
+
const $ = cheerio.load(
|
|
97
|
+
renderComponent('feedback', {
|
|
98
|
+
...EXAMPLE_FEEDBACK,
|
|
99
|
+
headingClasses: 'extra-heading-class another-extra-heading-class',
|
|
100
|
+
}),
|
|
101
|
+
);
|
|
102
|
+
test('THEN: renders with provided classes', () => {
|
|
103
|
+
expect($('.ons-feedback__heading').hasClass('extra-heading-class')).toBe(true);
|
|
104
|
+
expect($('.ons-feedback__heading').hasClass('another-extra-heading-class')).toBe(true);
|
|
105
|
+
});
|
|
106
|
+
});
|
|
87
107
|
});
|
|
88
108
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
109
|
+
describe('GIVEN: Params: content', () => {
|
|
110
|
+
describe('WHEN: content is provided', () => {
|
|
111
|
+
const $ = cheerio.load(renderComponent('feedback', EXAMPLE_FEEDBACK));
|
|
112
|
+
test('THEN: renders paragraph with the provided content', () => {
|
|
113
|
+
expect($('p').text().trim()).toBe('Feedback content...');
|
|
114
|
+
});
|
|
115
|
+
});
|
|
93
116
|
});
|
|
94
117
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
118
|
+
describe('GIVEN: Params: linkUrl', () => {
|
|
119
|
+
describe('WHEN: linkUrl is provided', () => {
|
|
120
|
+
const $ = cheerio.load(renderComponent('feedback', EXAMPLE_FEEDBACK));
|
|
121
|
+
test('THEN: renders a link with the provided linkUrl', () => {
|
|
122
|
+
expect($('.ons-feedback__link').attr('href')).toBe('http://example.com');
|
|
123
|
+
});
|
|
124
|
+
});
|
|
99
125
|
});
|
|
100
126
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
127
|
+
describe('GIVEN: Params: linkText', () => {
|
|
128
|
+
describe('WHEN: linkText is provided', () => {
|
|
129
|
+
const $ = cheerio.load(renderComponent('feedback', EXAMPLE_FEEDBACK));
|
|
130
|
+
test('THEN: renders a link with the provided linkText', () => {
|
|
131
|
+
expect($('.ons-feedback__link').text().trim()).toBe('Feedback link text');
|
|
132
|
+
});
|
|
133
|
+
});
|
|
105
134
|
});
|
|
106
135
|
});
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export const EXAMPLE_FEEDBACK = {
|
|
2
|
+
heading: 'Feedback heading',
|
|
3
|
+
content: 'Feedback content...',
|
|
4
|
+
linkUrl: 'http://example.com',
|
|
5
|
+
linkText: 'Feedback link text',
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
export const EXAMPLE_FEEDBACK_ALL_PARAMS = {
|
|
9
|
+
id: 'example-feedback',
|
|
10
|
+
classes: 'extra-class',
|
|
11
|
+
heading: 'Feedback heading',
|
|
12
|
+
headingLevel: 5,
|
|
13
|
+
headingClasses: 'extra-heading-class another-extra-heading-class',
|
|
14
|
+
content: 'Feedback content...',
|
|
15
|
+
linkUrl: 'http://example.com',
|
|
16
|
+
linkText: 'Feedback link text',
|
|
17
|
+
};
|
|
@@ -5,91 +5,128 @@ import * as cheerio from 'cheerio';
|
|
|
5
5
|
import axe from '../../tests/helpers/axe';
|
|
6
6
|
import { renderComponent, templateFaker } from '../../tests/helpers/rendering';
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
expect(results).toHaveNoViolations();
|
|
8
|
+
describe('FOR: Macro: Field', () => {
|
|
9
|
+
describe('GIVEN: Params: none', () => {
|
|
10
|
+
describe('WHEN: no params are provided', () => {
|
|
11
|
+
const $ = cheerio.load(renderComponent('field'));
|
|
12
|
+
test('THEN: passes jest-axe checks', async () => {
|
|
13
|
+
const results = await axe($.html());
|
|
14
|
+
expect(results).toHaveNoViolations();
|
|
15
|
+
});
|
|
16
|
+
});
|
|
18
17
|
});
|
|
19
18
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
19
|
+
describe('GIVEN: Params: id', () => {
|
|
20
|
+
describe('WHEN: id is provided', () => {
|
|
21
|
+
const $ = cheerio.load(
|
|
22
|
+
renderComponent('field', {
|
|
23
|
+
id: 'example-field',
|
|
24
|
+
}),
|
|
25
|
+
);
|
|
26
|
+
test('THEN: renders with the provided id', () => {
|
|
27
|
+
expect($('.ons-field').attr('id')).toBe('example-field');
|
|
28
|
+
});
|
|
29
|
+
});
|
|
24
30
|
});
|
|
25
31
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
32
|
+
describe('GIVEN: Params: classes', () => {
|
|
33
|
+
describe('WHEN: additional style classes are provided', () => {
|
|
34
|
+
const $ = cheerio.load(
|
|
35
|
+
renderComponent('field', {
|
|
36
|
+
classes: 'extra-class another-extra-class',
|
|
37
|
+
}),
|
|
38
|
+
);
|
|
39
|
+
test('THEN: renders with provided classes', () => {
|
|
40
|
+
expect($('.ons-field').hasClass('extra-class')).toBe(true);
|
|
41
|
+
expect($('.ons-field').hasClass('another-extra-class')).toBe(true);
|
|
42
|
+
});
|
|
43
|
+
});
|
|
36
44
|
});
|
|
37
45
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
46
|
+
describe('GIVEN: Params: inline', () => {
|
|
47
|
+
describe('WHEN: inline is provided', () => {
|
|
48
|
+
const $ = cheerio.load(
|
|
49
|
+
renderComponent('field', {
|
|
50
|
+
inline: true,
|
|
51
|
+
}),
|
|
52
|
+
);
|
|
53
|
+
test('THEN: renders with the inline class', () => {
|
|
54
|
+
expect($('.ons-field').hasClass('ons-field--inline')).toBe(true);
|
|
55
|
+
});
|
|
56
|
+
});
|
|
47
57
|
});
|
|
48
58
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
59
|
+
describe('GIVEN: Params: attributes', () => {
|
|
60
|
+
describe('WHEN: custom attributes are provided', () => {
|
|
61
|
+
const $ = cheerio.load(
|
|
62
|
+
renderComponent('field', {
|
|
63
|
+
attributes: {
|
|
64
|
+
a: 123,
|
|
65
|
+
b: 456,
|
|
66
|
+
},
|
|
67
|
+
}),
|
|
68
|
+
);
|
|
69
|
+
test('THEN: renders with additionally provided attributes', () => {
|
|
70
|
+
expect($('.ons-field').attr('a')).toBe('123');
|
|
71
|
+
expect($('.ons-field').attr('b')).toBe('456');
|
|
72
|
+
});
|
|
73
|
+
});
|
|
62
74
|
});
|
|
63
75
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
76
|
+
describe('GIVEN: Params: dontWrap', () => {
|
|
77
|
+
describe('WHEN: dontWrap is set to true', () => {
|
|
78
|
+
const $ = cheerio.load(
|
|
79
|
+
renderComponent('field', {
|
|
80
|
+
dontWrap: true,
|
|
81
|
+
}),
|
|
82
|
+
);
|
|
83
|
+
test('THEN: renders the content without being wrapped in a field div', () => {
|
|
84
|
+
expect($('.ons-field').length).toBe(0);
|
|
85
|
+
});
|
|
86
|
+
});
|
|
74
87
|
|
|
75
|
-
|
|
76
|
-
|
|
88
|
+
describe('WHEN: dontWrap is set to false', () => {
|
|
89
|
+
const $ = cheerio.load(
|
|
90
|
+
renderComponent('field', {
|
|
91
|
+
dontWrap: false,
|
|
92
|
+
}),
|
|
93
|
+
);
|
|
94
|
+
test('THEN: renders the content wrapped in a field div', () => {
|
|
95
|
+
expect($('.ons-field').length).toBe(1);
|
|
96
|
+
});
|
|
97
|
+
});
|
|
77
98
|
|
|
78
|
-
|
|
79
|
-
|
|
99
|
+
describe('WHEN: dontWrap is not provided', () => {
|
|
100
|
+
const $ = cheerio.load(renderComponent('field', {}));
|
|
101
|
+
test('THEN: renders the content wrapped in a field div', () => {
|
|
102
|
+
expect($('.ons-field').length).toBe(1);
|
|
103
|
+
});
|
|
104
|
+
});
|
|
80
105
|
});
|
|
81
106
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
107
|
+
describe('GIVEN: Params: error', () => {
|
|
108
|
+
describe('WHEN: error is provided', () => {
|
|
109
|
+
const faker = templateFaker();
|
|
110
|
+
const errorSpy = faker.spy('error');
|
|
111
|
+
|
|
112
|
+
faker.renderComponent('field', {
|
|
113
|
+
error: { text: 'There is an error' },
|
|
114
|
+
});
|
|
115
|
+
test('THEN" calls the error component', () => {
|
|
116
|
+
expect(errorSpy.occurrences[0]).toEqual({
|
|
117
|
+
text: 'There is an error',
|
|
118
|
+
});
|
|
119
|
+
});
|
|
89
120
|
});
|
|
121
|
+
});
|
|
90
122
|
|
|
91
|
-
|
|
92
|
-
|
|
123
|
+
describe('GIVEN: Content', () => {
|
|
124
|
+
describe('WHEN: field is called with content provided', () => {
|
|
125
|
+
const $ = cheerio.load(renderComponent('field', {}, 'Example content...'));
|
|
126
|
+
const content = $('.ons-field').html().trim();
|
|
127
|
+
test('THEN: renders the field with the provided content', () => {
|
|
128
|
+
expect(content).toEqual(expect.stringContaining('Example content...'));
|
|
129
|
+
});
|
|
93
130
|
});
|
|
94
131
|
});
|
|
95
132
|
});
|
|
@@ -31,9 +31,12 @@
|
|
|
31
31
|
class="ons-section-nav__item{{ ' ' + item.classes if item.classes else '' }}{{ ' ons-section-nav__item--active' if isCurrent == true }}"
|
|
32
32
|
>
|
|
33
33
|
{% if isCurrent == true %}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
34
|
+
<a
|
|
35
|
+
class="ons-section-nav__link ons-section-nav__item-header"
|
|
36
|
+
href="{{ item.url }}"
|
|
37
|
+
aria-current="location"
|
|
38
|
+
>{{ item.text }}</a
|
|
39
|
+
>
|
|
37
40
|
{% else %}
|
|
38
41
|
<a class="ons-section-nav__link" href="{{ item.url }}">{{ item.text }}</a>
|
|
39
42
|
{% endif %}
|
|
@@ -71,9 +74,9 @@
|
|
|
71
74
|
class="ons-section-nav__item{{ ' ' + item.classes if item.classes else '' }}{% if isCurrent == true %}{{ ' ' }}ons-section-nav__item--active{% endif %}"
|
|
72
75
|
>
|
|
73
76
|
{% if isCurrent == true %}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
+
<a class="ons-section-nav__link ons-section-nav__item-header" href="{{ item.url }}" aria-current="location"
|
|
78
|
+
>{{ item.text }}</a
|
|
79
|
+
>
|
|
77
80
|
{% else %}
|
|
78
81
|
<a class="ons-section-nav__link" href="{{ item.url }}">{{ item.text }}</a>
|
|
79
82
|
{% endif %}
|