@ons/design-system 74.0.0-next.1 → 74.0.0-next.11

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 (139) hide show
  1. package/README.md +15 -3
  2. package/components/access-code/example-access-code-error.njk +2 -2
  3. package/components/access-code/example-access-code.njk +2 -2
  4. package/components/address-input/_macro.njk +6 -6
  5. package/components/address-input/_macro.spec.js +0 -3
  6. package/components/address-input/autosuggest.address.spec.js +23 -0
  7. package/components/address-output/_macro.njk +1 -1
  8. package/components/announcement-banner/_announcement-banner.scss +5 -0
  9. package/components/autosuggest/_autosuggest.scss +8 -0
  10. package/components/autosuggest/autosuggest.ui.js +11 -5
  11. package/components/back-to-top/_back-to-top.scss +7 -0
  12. package/components/back-to-top/_macro.njk +1 -1
  13. package/components/back-to-top/example-full-page-back-to-top.njk +1 -1
  14. package/components/breadcrumbs/_breadcrumbs.scss +4 -7
  15. package/components/breadcrumbs/_macro.njk +29 -25
  16. package/components/breadcrumbs/_macro.spec.js +39 -0
  17. package/components/breadcrumbs/example-breadcrumbs-wide.njk +52 -0
  18. package/components/char-check-limit/_macro.njk +16 -14
  19. package/components/chart/_chart.scss +0 -9
  20. package/components/chart/_macro.njk +96 -128
  21. package/components/chart/_macro.spec.js +43 -28
  22. package/components/chart/example-area-chart-with-axis-min-and-max-values.njk +6 -3
  23. package/components/chart/example-area-chart.njk +6 -3
  24. package/components/chart/example-bar-chart-with-annotations.njk +6 -3
  25. package/components/chart/example-bar-chart-with-axis-min-and-max-values.njk +6 -3
  26. package/components/chart/example-bar-chart-with-point-range-and-reference-line-annotations.njk +6 -3
  27. package/components/chart/example-bar-chart.njk +6 -3
  28. package/components/chart/example-bar-with-confidence-levels.njk +6 -3
  29. package/components/chart/example-clustered-bar-chart.njk +6 -3
  30. package/components/chart/example-clustered-column-chart.njk +6 -3
  31. package/components/chart/example-column-chart-with-annotations.njk +6 -3
  32. package/components/chart/example-column-chart-with-axis-min-and-max-values.njk +6 -3
  33. package/components/chart/example-column-chart-with-custom-reference-line-value.njk +6 -3
  34. package/components/chart/example-column-chart-with-range-annotations.njk +6 -3
  35. package/components/chart/example-column-chart-with-reference-line-annotations.njk +6 -3
  36. package/components/chart/example-column-chart.njk +6 -3
  37. package/components/chart/example-column-with-confidence-levels.njk +6 -3
  38. package/components/chart/example-column-with-line-chart.njk +6 -3
  39. package/components/chart/example-iframe-chart.njk +6 -3
  40. package/components/chart/example-line-chart-with-annotations.njk +6 -3
  41. package/components/chart/example-line-chart-with-axis-min-and-max-values.njk +6 -3
  42. package/components/chart/example-line-chart-with-custom-reference-line-value.njk +6 -3
  43. package/components/chart/example-line-chart-with-label-format.njk +6 -3
  44. package/components/chart/example-line-chart-with-markers.njk +6 -3
  45. package/components/chart/example-line-chart-with-range-annotations-inside.njk +6 -3
  46. package/components/chart/example-line-chart-with-range-annotations-outside-left-right.njk +6 -3
  47. package/components/chart/example-line-chart-with-range-annotations-outside-top-bottom.njk +6 -3
  48. package/components/chart/example-line-chart-with-reference-line-annotations.njk +6 -3
  49. package/components/chart/example-line-chart.njk +6 -3
  50. package/components/chart/example-scatter-chart-with-axis-min-and-max-values.njk +6 -3
  51. package/components/chart/example-scatter-chart.njk +6 -3
  52. package/components/chart/example-stacked-bar-chart.njk +6 -3
  53. package/components/chart/example-stacked-column-chart.njk +6 -3
  54. package/components/details/_details.scss +9 -0
  55. package/components/details/example-details-with-warning.njk +1 -1
  56. package/components/document-list/_macro.njk +2 -2
  57. package/components/document-list/_macro.spec.js +55 -0
  58. package/components/featured-article/_macro.njk +6 -40
  59. package/components/featured-article/example-featured-article-with-chart.njk +19 -14
  60. package/components/featured-article/example-featured-article-with-image.njk +12 -7
  61. package/components/featured-article/featured-article.scss +1 -1
  62. package/components/featured-article/macro.spec.js +46 -69
  63. package/components/feedback/_macro.njk +4 -1
  64. package/components/feedback/_macro.spec.js +1 -1
  65. package/components/figure/_figure.scss +32 -0
  66. package/components/figure/_macro.njk +98 -0
  67. package/components/figure/_macro.spec.js +520 -0
  68. package/components/figure/example-figure-heading-level-2.njk +34 -0
  69. package/components/figure/example-figure-with-div.njk +29 -0
  70. package/components/figure/example-figure-without-footer.njk +12 -0
  71. package/components/figure/example-figure-without-header.njk +24 -0
  72. package/components/figure/example-figure.njk +34 -0
  73. package/components/footer/_macro.njk +5 -2
  74. package/components/header/_header.scss +1 -3
  75. package/components/header/_macro.njk +8 -4
  76. package/components/header/_macro.spec.js +48 -0
  77. package/components/hero/_hero.scss +4 -0
  78. package/components/hero/_macro.njk +3 -2
  79. package/components/hero/_macro.spec.js +36 -0
  80. package/components/hero/example-hero-dark-wide.njk +17 -0
  81. package/components/hero/example-hero-dark-with-external-breadcrumbs.njk +17 -21
  82. package/components/hero/example-hero-default-full-width.njk +16 -0
  83. package/components/hero/example-hero-default-with-external-breadcrumbs.njk +165 -169
  84. package/components/hero/example-hero-grey-with-external-breadcrumbs.njk +207 -211
  85. package/components/hero/example-hero-navy-blue-with-external-breadcrumbs.njk +163 -167
  86. package/components/hero/example-hero-pale-blue-with-external-breadcrumbs.njk +165 -169
  87. package/components/image/_image.scss +0 -7
  88. package/components/image/_macro.njk +25 -14
  89. package/components/image/_macro.spec.js +122 -7
  90. package/components/image/example-image-with-figure-fields.njk +25 -0
  91. package/components/input/_input.scss +4 -0
  92. package/components/input/_macro.njk +4 -1
  93. package/components/label/_label.scss +3 -0
  94. package/components/list/_list.scss +5 -0
  95. package/components/list/_macro.njk +1 -0
  96. package/components/list/_macro.spec.js +16 -0
  97. package/components/message-list/_message-list.scss +2 -0
  98. package/components/panel/_macro.njk +1 -1
  99. package/components/panel/_panel.scss +8 -0
  100. package/components/panel/example-panel-bare.njk +1 -1
  101. package/components/phase-banner/_phase-banner.scss +1 -0
  102. package/components/question/example-question-ccs.njk +1 -1
  103. package/components/question/example-question-fieldset.njk +1 -1
  104. package/components/question/example-question-interviewer-note.njk +1 -1
  105. package/components/question/example-question-no-fieldset.njk +1 -1
  106. package/components/quote/_macro.njk +1 -1
  107. package/components/relationships/example-relationships-error.njk +1 -1
  108. package/components/relationships/example-relationships-you.njk +1 -1
  109. package/components/relationships/example-relationships.njk +1 -1
  110. package/components/skip-to-content/_macro.njk +1 -1
  111. package/components/skip-to-content/_skip.scss +8 -0
  112. package/components/table/_macro.njk +138 -111
  113. package/components/table/_macro.spec.js +175 -16
  114. package/components/table/_table.scss +6 -1
  115. package/components/table/example-table-basic-no-caption.njk +46 -0
  116. package/components/table/example-table-basic-visually-hidden-caption.njk +47 -0
  117. package/components/table/example-table-with-figure-fields.njk +86 -0
  118. package/components/table/table.spec.js +2 -0
  119. package/components/table-of-contents/_macro.njk +6 -4
  120. package/components/table-of-contents/_macro.spec.js +43 -3
  121. package/components/table-of-contents/example-table-of-contents-ordered.njk +64 -0
  122. package/components/table-of-contents/example-table-of-contents-sticky-full-page-ordered.njk +156 -0
  123. package/components/table-of-contents/example-table-of-contents-sticky-full-page.njk +1 -1
  124. package/components/table-of-contents/table-of-contents.spec.js +4 -5
  125. package/css/main.css +1 -1
  126. package/layout/_template.njk +66 -46
  127. package/package.json +45 -36
  128. package/scripts/main.es5.js +3 -3
  129. package/scripts/main.js +2 -2
  130. package/scss/base/_global.scss +8 -0
  131. package/scss/base/_typography.scss +9 -0
  132. package/scss/helpers/_mixins.scss +8 -0
  133. package/scss/main.scss +1 -0
  134. package/scss/objects/_page.scss +1 -1
  135. package/scss/objects/_spacing.scss +0 -4
  136. package/scss/utilities/_utilities.scss +10 -0
  137. package/scss/vars/_forms.scss +2 -1
  138. package/scss/vars/_index.scss +1 -0
  139. package/scss/vars/_utilities.scss +2 -0
@@ -4,170 +4,165 @@ layout: ~
4
4
  ---
5
5
 
6
6
  {% from "components/hero/_macro.njk" import onsHero %}
7
- {% from "components/breadcrumbs/_macro.njk" import onsBreadcrumbs %}
8
7
  {% extends "layout/_template.njk" %}
9
8
  {%
10
9
  set pageConfig = {
11
10
  "header": {
12
11
  "variants": 'basic',
13
12
  "menuLinks": {
14
- "id": "menu-links",
15
- "keyLinks": [
16
- {
17
- 'heading': 'Taking part in a survey?',
18
- 'description': 'It’s never been more important.'
19
- },
20
- {
21
- 'heading': 'Release calendar',
22
- 'description': 'View our latest and upcoming releases.'
23
- },
24
- {
25
- 'heading': 'Explore local statistics',
26
- 'url': '#0',
27
- 'description': 'Explore statistics across the UK.'
28
- }
29
- ],
30
- "columns": [
31
- {
32
- "groups": [
33
- {
34
- "heading": "People, population and community",
35
- "groupItems": [
36
- {
37
- "text": "Armed forces community"
38
- },
39
- {
40
- "text": "Births, deaths and marriages"
41
- },
42
- {
43
- "text": "Crime and justice"
44
- },
45
- {
46
- "text": "Cultural identity"
47
- },
48
- {
49
- "text": "Education and childcare"
50
- },
51
- {
52
- "text": "Elections"
53
- },
54
- {
55
- "text": "Health and social care"
56
- },
57
- {
58
- "text": "Household characteristics"
59
- },
60
- {
61
- "text": "Housing"
62
- },
63
- {
64
- "text": "Leisure and tourism"
65
- },
66
- {
67
- "text": "Personal and household finances"
68
- },
69
- {
70
- "text": "Population and migration"
71
- },
72
- {
73
- "text": "Well-being"
74
- }
75
- ]
76
- }
77
- ]
78
- },
79
- {
80
- "groups": [
81
- {
82
- "heading": "Business, industry and trade",
83
- "groupItems": [
84
- {
85
- "text": "Business"
86
- },
87
- {
88
- "text": "Changes to business"
89
- },
90
- {
91
- "text": "Construction industry"
92
- },
93
- {
94
- "text": "International trade"
95
- },
96
- {
97
- "text": "IT and internet industry"
98
- },
99
- {
100
- "text": "Manufacturing and production industry"
101
- },
102
- {
103
- "text": "Retail industry",
104
- "url": "#0"
105
- },
106
- {
107
- "text": "Tourism industry"
108
- }
109
- ]
110
- },
111
- {
112
- "heading": "Employment and labour market",
113
- "url": "#0",
114
- "groupItems":
115
- [
116
- {
117
- "text": "People in work"
118
- },
119
- {
120
- "text": "People not in work"
121
- }
122
- ]
13
+ "id": "menu-links",
14
+ "keyLinks": [
15
+ {
16
+ 'heading': 'Taking part in a survey?',
17
+ 'description': 'It’s never been more important.'
18
+ },
19
+ {
20
+ 'heading': 'Release calendar',
21
+ 'description': 'View our latest and upcoming releases.'
22
+ },
23
+ {
24
+ 'heading': 'Explore local statistics',
25
+ 'url': '#0',
26
+ 'description': 'Explore statistics across the UK.'
27
+ }
28
+ ],
29
+ "columns": [
30
+ {
31
+ "groups": [
32
+ {
33
+ "heading": "People, population and community",
34
+ "groupItems": [
35
+ {
36
+ "text": "Armed forces community"
37
+ },
38
+ {
39
+ "text": "Births, deaths and marriages"
40
+ },
41
+ {
42
+ "text": "Crime and justice"
43
+ },
44
+ {
45
+ "text": "Cultural identity"
46
+ },
47
+ {
48
+ "text": "Education and childcare"
49
+ },
50
+ {
51
+ "text": "Elections"
52
+ },
53
+ {
54
+ "text": "Health and social care"
55
+ },
56
+ {
57
+ "text": "Household characteristics"
58
+ },
59
+ {
60
+ "text": "Housing"
61
+ },
62
+ {
63
+ "text": "Leisure and tourism"
64
+ },
65
+ {
66
+ "text": "Personal and household finances"
67
+ },
68
+ {
69
+ "text": "Population and migration"
70
+ },
71
+ {
72
+ "text": "Well-being"
73
+ }
74
+ ]
75
+ }
76
+ ]
77
+ },
78
+ {
79
+ "groups": [
80
+ {
81
+ "heading": "Business, industry and trade",
82
+ "groupItems": [
83
+ {
84
+ "text": "Business"
85
+ },
86
+ {
87
+ "text": "Changes to business"
88
+ },
89
+ {
90
+ "text": "Construction industry"
91
+ },
92
+ {
93
+ "text": "International trade"
94
+ },
95
+ {
96
+ "text": "IT and internet industry"
97
+ },
98
+ {
99
+ "text": "Manufacturing and production industry"
100
+ },
101
+ {
102
+ "text": "Retail industry",
103
+ "url": "#0"
104
+ },
105
+ {
106
+ "text": "Tourism industry"
107
+ }
108
+ ]
109
+ },
110
+ {
111
+ "heading": "Employment and labour market",
112
+ "url": "#0",
113
+ "groupItems":
114
+ [
115
+ {
116
+ "text": "People in work"
117
+ },
118
+ {
119
+ "text": "People not in work"
120
+ }
121
+ ]
123
122
 
124
- }
125
- ]
126
- },
127
- {
128
- "groups": [
129
- {
130
- "heading": "Economy",
131
- "groupItems": [
132
- {
133
- "text": "Economic output and productivity"
134
- },
135
- {
136
- "text": "Government, public sector and taxes"
137
- },
138
- {
139
- "text": "Gross Value Added (GVA)"
140
- },
141
- {
142
- "text": "Investments, pensions and trusts"
143
- },
144
- {
145
- "text": "Regional accounts"
146
- },
147
- {
148
- "text": "Environmental accounts"
149
- },
150
- {
151
- "text": "Gross Domestic Product (GDP)"
152
- },
153
- {
154
- "text": "Inflation and price indices"
155
- },
156
- {
157
- "text": "National accounts"
158
- }
159
- ]
160
- }
161
- ]
162
- }
163
- ]
164
- }
165
- }
166
- }
167
- %}
168
- {% block pageContent %}
169
- {{
170
- onsBreadcrumbs({
123
+ }
124
+ ]
125
+ },
126
+ {
127
+ "groups": [
128
+ {
129
+ "heading": "Economy",
130
+ "groupItems": [
131
+ {
132
+ "text": "Economic output and productivity"
133
+ },
134
+ {
135
+ "text": "Government, public sector and taxes"
136
+ },
137
+ {
138
+ "text": "Gross Value Added (GVA)"
139
+ },
140
+ {
141
+ "text": "Investments, pensions and trusts"
142
+ },
143
+ {
144
+ "text": "Regional accounts"
145
+ },
146
+ {
147
+ "text": "Environmental accounts"
148
+ },
149
+ {
150
+ "text": "Gross Domestic Product (GDP)"
151
+ },
152
+ {
153
+ "text": "Inflation and price indices"
154
+ },
155
+ {
156
+ "text": "National accounts"
157
+ }
158
+ ]
159
+ }
160
+ ]
161
+ }
162
+ ]
163
+ }
164
+ },
165
+ breadcrumbs: {
171
166
  "ariaLabel": 'Breadcrumbs',
172
167
  "variant": "pale-blue",
173
168
  "itemsList": [
@@ -184,18 +179,19 @@ layout: ~
184
179
  "text": 'Retail industry'
185
180
  }
186
181
  ]
182
+ }
183
+ }
184
+ %}
185
+
186
+ {% block hero %}
187
+ {{
188
+ onsHero({
189
+ "topic": 'Topic',
190
+ "title": 'Retail Industry',
191
+ "text": 'Sales by retailers in Great Britain directly to end consumers, including spending on goods (in store and online)
192
+ (Retail Sales Index) and spending on services (Index of Services). The industry as a whole is used as an indicator
193
+ of how the wider economy is performing and the strength of consumer spending.',
194
+ "variants": 'pale-blue'
187
195
  })
188
196
  }}
189
- <main id="main-content">
190
- {{
191
- onsHero({
192
- "topic": 'Topic',
193
- "title": 'Retail Industry',
194
- "text": 'Sales by retailers in Great Britain directly to end consumers, including spending on goods (in store and online)
195
- (Retail Sales Index) and spending on services (Index of Services). The industry as a whole is used as an indicator
196
- of how the wider economy is performing and the strength of consumer spending.',
197
- "variants": 'pale-blue'
198
- })
199
- }}
200
- </main>
201
197
  {% endblock %}
@@ -7,11 +7,4 @@
7
7
  display: block;
8
8
  max-width: 100%;
9
9
  }
10
-
11
- &__caption {
12
- @extend .ons-u-fs-s;
13
-
14
- display: block;
15
- padding: 0.5rem 0 0;
16
- }
17
10
  }
@@ -1,17 +1,28 @@
1
1
  {%- macro onsImage(params) -%}
2
- <figure class="ons-image">
3
- {% if params.image %}
4
- <img
5
- class="ons-image__img"
6
- {% if params.image.largeSrc %}srcset="{{ params.image.smallSrc }} 1x, {{ params.image.largeSrc }} 2x"{% endif %}src="{{ params.image.smallSrc }}"
7
- alt="{{ params.alt if params.alt }}"
8
- />
9
- {% else %}
10
- <img class="ons-image__img" src="{{ params.src }}" alt="{{ params.alt }}" />
11
- {% endif %}
2
+ {% from "components/figure/_macro.njk" import onsFigure %}
12
3
 
13
- {% if params.caption %}
14
- <figcaption class="ons-image__caption">{{ params.caption }}</figcaption>
15
- {% endif %}
16
- </figure>
4
+ {%
5
+ call onsFigure({
6
+ "id": params.id,
7
+ "headingLevel": params.headingLevel,
8
+ "figureNumber": params.figureNumber,
9
+ "title": params.title,
10
+ "subtitle": params.subtitle,
11
+ "caption": params.caption,
12
+ "footnotes": params.footnotes,
13
+ "download": params.download
14
+ })
15
+ %}
16
+ <div class="ons-image">
17
+ {% if params.image %}
18
+ <img
19
+ class="ons-image__img"
20
+ {% if params.image.largeSrc %}srcset="{{ params.image.smallSrc }} 1x, {{ params.image.largeSrc }} 2x"{% endif %}src="{{ params.image.smallSrc }}"
21
+ alt="{{ params.alt if params.alt }}"
22
+ />
23
+ {% else %}
24
+ <img class="ons-image__img" src="{{ params.src }}" alt="{{ params.alt }}" />
25
+ {% endif %}
26
+ </div>
27
+ {% endcall %}
17
28
  {%- endmacro -%}
@@ -3,7 +3,7 @@
3
3
  import * as cheerio from 'cheerio';
4
4
 
5
5
  import axe from '../../tests/helpers/axe';
6
- import { renderComponent } from '../../tests/helpers/rendering';
6
+ import { renderComponent, templateFaker } from '../../tests/helpers/rendering';
7
7
 
8
8
  const EXAMPLE_IMAGE_SRC_URL_MINIMAL = {
9
9
  src: 'example.png',
@@ -17,13 +17,14 @@ const EXAMPLE_IMAGE_IMAGE_MINIMAL = {
17
17
  };
18
18
 
19
19
  describe('macro: image', () => {
20
- it('outputs a `figure` element', () => {
20
+ it('outputs a `figure` element wrapping the image', () => {
21
21
  const $ = cheerio.load(renderComponent('image', EXAMPLE_IMAGE_SRC_URL_MINIMAL));
22
22
 
23
- expect($('.ons-image')[0].tagName).toBe('figure');
23
+ expect($('.ons-figure')[0].tagName).toBe('figure');
24
+ expect($('.ons-figure .ons-image').length).toBe(1);
24
25
  });
25
26
 
26
- it('outputs a `figurecaption` element when `caption` is provided', () => {
27
+ it('outputs a `figcaption` element when `caption` is provided', () => {
27
28
  const $ = cheerio.load(
28
29
  renderComponent('image', {
29
30
  ...EXAMPLE_IMAGE_SRC_URL_MINIMAL,
@@ -31,10 +32,10 @@ describe('macro: image', () => {
31
32
  }),
32
33
  );
33
34
 
34
- expect($('.ons-image__caption')[0].tagName).toBe('figcaption');
35
+ expect($('.ons-figure__caption')[0].tagName).toBe('figcaption');
35
36
  });
36
37
 
37
- it('outputs a `figurecaption` element with provided `caption` text', () => {
38
+ it('outputs a `figcaption` element with provided `caption` text', () => {
38
39
  const $ = cheerio.load(
39
40
  renderComponent('image', {
40
41
  ...EXAMPLE_IMAGE_SRC_URL_MINIMAL,
@@ -42,7 +43,121 @@ describe('macro: image', () => {
42
43
  }),
43
44
  );
44
45
 
45
- expect($('.ons-image__caption').text().trim()).toBe('Example image caption');
46
+ expect($('.ons-figure__caption').text().trim()).toBe('Example image caption');
47
+ });
48
+
49
+ describe('figure params', () => {
50
+ it('passes `id` to the figure component', () => {
51
+ const faker = templateFaker();
52
+ const figureSpy = faker.spy('figure');
53
+
54
+ faker.renderComponent('image', {
55
+ ...EXAMPLE_IMAGE_SRC_URL_MINIMAL,
56
+ id: 'my-image',
57
+ });
58
+
59
+ expect(figureSpy.occurrences[0].id).toBe('my-image');
60
+ });
61
+
62
+ it('passes `headingLevel` to the figure component', () => {
63
+ const faker = templateFaker();
64
+ const figureSpy = faker.spy('figure');
65
+
66
+ faker.renderComponent('image', {
67
+ ...EXAMPLE_IMAGE_SRC_URL_MINIMAL,
68
+ headingLevel: 4,
69
+ });
70
+
71
+ expect(figureSpy.occurrences[0].headingLevel).toBe(4);
72
+ });
73
+
74
+ it('passes `figureNumber` to the figure component', () => {
75
+ const faker = templateFaker();
76
+ const figureSpy = faker.spy('figure');
77
+
78
+ faker.renderComponent('image', {
79
+ ...EXAMPLE_IMAGE_SRC_URL_MINIMAL,
80
+ figureNumber: 'Image 1',
81
+ });
82
+
83
+ expect(figureSpy.occurrences[0].figureNumber).toBe('Image 1');
84
+ });
85
+
86
+ it('passes `title` to the figure component', () => {
87
+ const faker = templateFaker();
88
+ const figureSpy = faker.spy('figure');
89
+
90
+ faker.renderComponent('image', {
91
+ ...EXAMPLE_IMAGE_SRC_URL_MINIMAL,
92
+ title: 'Image title',
93
+ });
94
+
95
+ expect(figureSpy.occurrences[0].title).toBe('Image title');
96
+ });
97
+
98
+ it('passes `subtitle` to the figure component', () => {
99
+ const faker = templateFaker();
100
+ const figureSpy = faker.spy('figure');
101
+
102
+ faker.renderComponent('image', {
103
+ ...EXAMPLE_IMAGE_SRC_URL_MINIMAL,
104
+ subtitle: 'Image subtitle',
105
+ });
106
+
107
+ expect(figureSpy.occurrences[0].subtitle).toBe('Image subtitle');
108
+ });
109
+
110
+ it('passes `caption` to the figure component', () => {
111
+ const faker = templateFaker();
112
+ const figureSpy = faker.spy('figure');
113
+
114
+ faker.renderComponent('image', {
115
+ ...EXAMPLE_IMAGE_SRC_URL_MINIMAL,
116
+ caption: 'A caption',
117
+ });
118
+
119
+ expect(figureSpy.occurrences[0].caption).toBe('A caption');
120
+ });
121
+
122
+ it('passes `footnotes` to the figure component', () => {
123
+ const faker = templateFaker();
124
+ const figureSpy = faker.spy('figure');
125
+
126
+ const footnotes = {
127
+ title: 'Footnotes',
128
+ content: 'Some notes about this image.',
129
+ };
130
+
131
+ faker.renderComponent('image', {
132
+ ...EXAMPLE_IMAGE_SRC_URL_MINIMAL,
133
+ footnotes,
134
+ });
135
+
136
+ expect(figureSpy.occurrences[0].footnotes).toEqual(footnotes);
137
+ });
138
+
139
+ it('passes `download` to the figure component', () => {
140
+ const faker = templateFaker();
141
+ const figureSpy = faker.spy('figure');
142
+
143
+ const download = {
144
+ title: 'Download this image',
145
+ itemsList: [
146
+ {
147
+ text: 'High resolution image (JPG, 1.2MB)',
148
+ url: '/img/example.jpg',
149
+ download: 'file',
150
+ },
151
+ ],
152
+ };
153
+
154
+ faker.renderComponent('image', {
155
+ ...EXAMPLE_IMAGE_SRC_URL_MINIMAL,
156
+ download,
157
+ });
158
+
159
+ expect(figureSpy.occurrences[0].download).toEqual(download);
160
+ });
46
161
  });
47
162
 
48
163
  describe('mode: src', () => {
@@ -0,0 +1,25 @@
1
+ {% from "components/image/_macro.njk" import onsImage %}
2
+ {{
3
+ onsImage({
4
+ "id": "image-with-extra-fields",
5
+ "src": '/img/small/woman-in-purple-dress-shirt.jpg',
6
+ "alt": 'Woman in a purple dress shirt using a laptop',
7
+ "title": "Image 1: Working from home",
8
+ "subtitle": "A growing proportion of the workforce now works remotely",
9
+ "caption": "Image 1 - Woman in a purple dress shirt using a laptop",
10
+ "footnotes": {
11
+ "title": "Footnotes",
12
+ "content": "Image is for illustrative purposes only."
13
+ },
14
+ "download": {
15
+ "title": "Download this image",
16
+ "itemsList": [
17
+ {
18
+ "text": "High resolution image (JPG format, 1.2MB)",
19
+ "url": "/img/small/woman-in-purple-dress-shirt.jpg",
20
+ "download": "file"
21
+ }
22
+ ]
23
+ }
24
+ })
25
+ }}
@@ -43,6 +43,10 @@
43
43
  &--textarea {
44
44
  // Prevent inner shadow on iOS
45
45
  appearance: none;
46
+
47
+ &:not(.ons-input--header-search, [class*='--w-']) {
48
+ @include reading-width;
49
+ }
46
50
  }
47
51
 
48
52
  &:focus {
@@ -60,7 +60,10 @@
60
60
  <!-- prettier-ignore-end -->
61
61
  {% endif %}
62
62
  {% if params.postTextboxLinkText %}
63
- <a class="ons-u-fs-s ons-input__post-link" href="{{ params.postTextboxLinkUrl }}">{{ params.postTextboxLinkText }}</a>
63
+ {# p tag ensures reading width is applied #}
64
+ <p class="ons-u-mb-no">
65
+ <a class="ons-u-fs-s ons-input__post-link" href="{{ params.postTextboxLinkUrl }}">{{ params.postTextboxLinkText }}</a>
66
+ </p>
64
67
  {% endif %}
65
68
  {% endset %}
66
69
 
@@ -1,4 +1,6 @@
1
1
  .ons-label {
2
+ @include reading-width;
3
+
2
4
  color: inherit;
3
5
  display: block;
4
6
  font-weight: $font-weight-bold;
@@ -6,6 +8,7 @@
6
8
 
7
9
  &__description {
8
10
  @extend .ons-u-fs-s;
11
+ @include reading-width;
9
12
 
10
13
  display: block;
11
14
  }