govuk_publishing_components 21.54.0 → 21.55.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (116) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/images/govuk_publishing_components/action-link--nhs.png +0 -0
  3. data/app/assets/images/govuk_publishing_components/action-link--nhs.svg +1 -0
  4. data/app/assets/images/govuk_publishing_components/action-link-arrow--dark.png +0 -0
  5. data/app/assets/images/govuk_publishing_components/action-link-arrow--simple.png +0 -0
  6. data/app/assets/images/govuk_publishing_components/action-link-arrow.png +0 -0
  7. data/app/assets/stylesheets/govuk_publishing_components/components/_action-link.scss +38 -7
  8. data/app/assets/stylesheets/govuk_publishing_components/components/_back-link.scss +0 -38
  9. data/app/views/govuk_publishing_components/components/_action_link.html.erb +23 -3
  10. data/app/views/govuk_publishing_components/components/docs/action_link.yml +43 -15
  11. data/lib/govuk_publishing_components/presenters/breadcrumb_selector.rb +1 -1
  12. data/lib/govuk_publishing_components/presenters/contextual_navigation.rb +1 -1
  13. data/lib/govuk_publishing_components/presenters/machine_readable/faq_page_schema.rb +7 -6
  14. data/lib/govuk_publishing_components/presenters/machine_readable/html_publication_schema.rb +77 -0
  15. data/lib/govuk_publishing_components/presenters/schema_org.rb +24 -16
  16. data/lib/govuk_publishing_components/version.rb +1 -1
  17. data/node_modules/govuk-frontend/README.md +6 -6
  18. data/node_modules/govuk-frontend/govuk/_base.scss +3 -0
  19. data/node_modules/govuk-frontend/govuk/all.js +1 -1
  20. data/node_modules/govuk-frontend/govuk/all.scss +1 -3
  21. data/node_modules/govuk-frontend/govuk/components/_all.scss +31 -29
  22. data/node_modules/govuk-frontend/govuk/components/accordion/_accordion.scss +2 -208
  23. data/node_modules/govuk-frontend/govuk/components/accordion/_index.scss +207 -0
  24. data/node_modules/govuk-frontend/govuk/components/accordion/accordion.js +1 -1
  25. data/node_modules/govuk-frontend/govuk/components/back-link/_back-link.scss +2 -65
  26. data/node_modules/govuk-frontend/govuk/components/back-link/_index.scss +112 -0
  27. data/node_modules/govuk-frontend/govuk/components/breadcrumbs/_breadcrumbs.scss +2 -118
  28. data/node_modules/govuk-frontend/govuk/components/breadcrumbs/_index.scss +138 -0
  29. data/node_modules/govuk-frontend/govuk/components/breadcrumbs/macro-options.json +6 -0
  30. data/node_modules/govuk-frontend/govuk/components/breadcrumbs/template.njk +12 -1
  31. data/node_modules/govuk-frontend/govuk/components/button/_button.scss +2 -284
  32. data/node_modules/govuk-frontend/govuk/components/button/_index.scss +280 -0
  33. data/node_modules/govuk-frontend/govuk/components/character-count/_character-count.scss +2 -31
  34. data/node_modules/govuk-frontend/govuk/components/character-count/_index.scss +28 -0
  35. data/node_modules/govuk-frontend/govuk/components/checkboxes/_checkboxes.scss +2 -308
  36. data/node_modules/govuk-frontend/govuk/components/checkboxes/_index.scss +304 -0
  37. data/node_modules/govuk-frontend/govuk/components/date-input/_date-input.scss +2 -30
  38. data/node_modules/govuk-frontend/govuk/components/date-input/_index.scss +26 -0
  39. data/node_modules/govuk-frontend/govuk/components/details/_details.scss +2 -88
  40. data/node_modules/govuk-frontend/govuk/components/details/_index.scss +84 -0
  41. data/node_modules/govuk-frontend/govuk/components/error-message/_error-message.scss +2 -15
  42. data/node_modules/govuk-frontend/govuk/components/error-message/_index.scss +11 -0
  43. data/node_modules/govuk-frontend/govuk/components/error-summary/_error-summary.scss +2 -59
  44. data/node_modules/govuk-frontend/govuk/components/error-summary/_index.scss +55 -0
  45. data/node_modules/govuk-frontend/govuk/components/fieldset/_fieldset.scss +2 -68
  46. data/node_modules/govuk-frontend/govuk/components/fieldset/_index.scss +64 -0
  47. data/node_modules/govuk-frontend/govuk/components/file-upload/_file-upload.scss +2 -81
  48. data/node_modules/govuk-frontend/govuk/components/file-upload/_index.scss +77 -0
  49. data/node_modules/govuk-frontend/govuk/components/footer/_footer.scss +2 -244
  50. data/node_modules/govuk-frontend/govuk/components/footer/_index.scss +238 -0
  51. data/node_modules/govuk-frontend/govuk/components/header/_header.scss +2 -318
  52. data/node_modules/govuk-frontend/govuk/components/header/_index.scss +312 -0
  53. data/node_modules/govuk-frontend/govuk/components/header/macro-options.json +7 -1
  54. data/node_modules/govuk-frontend/govuk/components/header/template.njk +2 -2
  55. data/node_modules/govuk-frontend/govuk/components/hint/_hint.scss +2 -50
  56. data/node_modules/govuk-frontend/govuk/components/hint/_index.scss +46 -0
  57. data/node_modules/govuk-frontend/govuk/components/input/_index.scss +99 -0
  58. data/node_modules/govuk-frontend/govuk/components/input/_input.scss +2 -103
  59. data/node_modules/govuk-frontend/govuk/components/inset-text/_index.scss +24 -0
  60. data/node_modules/govuk-frontend/govuk/components/inset-text/_inset-text.scss +2 -28
  61. data/node_modules/govuk-frontend/govuk/components/label/_index.scss +41 -0
  62. data/node_modules/govuk-frontend/govuk/components/label/_label.scss +2 -45
  63. data/node_modules/govuk-frontend/govuk/components/panel/_index.scss +40 -0
  64. data/node_modules/govuk-frontend/govuk/components/panel/_panel.scss +2 -44
  65. data/node_modules/govuk-frontend/govuk/components/phase-banner/_index.scss +27 -0
  66. data/node_modules/govuk-frontend/govuk/components/phase-banner/_phase-banner.scss +2 -31
  67. data/node_modules/govuk-frontend/govuk/components/radios/_index.scss +342 -0
  68. data/node_modules/govuk-frontend/govuk/components/radios/_radios.scss +2 -346
  69. data/node_modules/govuk-frontend/govuk/components/select/_index.scss +53 -0
  70. data/node_modules/govuk-frontend/govuk/components/select/_select.scss +2 -57
  71. data/node_modules/govuk-frontend/govuk/components/skip-link/_index.scss +33 -0
  72. data/node_modules/govuk-frontend/govuk/components/skip-link/_skip-link.scss +2 -37
  73. data/node_modules/govuk-frontend/govuk/components/summary-list/_index.scss +153 -0
  74. data/node_modules/govuk-frontend/govuk/components/summary-list/_summary-list.scss +2 -157
  75. data/node_modules/govuk-frontend/govuk/components/table/_index.scss +50 -0
  76. data/node_modules/govuk-frontend/govuk/components/table/_table.scss +2 -54
  77. data/node_modules/govuk-frontend/govuk/components/tabs/_index.scss +138 -0
  78. data/node_modules/govuk-frontend/govuk/components/tabs/_tabs.scss +2 -142
  79. data/node_modules/govuk-frontend/govuk/components/tag/_index.scss +87 -0
  80. data/node_modules/govuk-frontend/govuk/components/tag/_tag.scss +2 -91
  81. data/node_modules/govuk-frontend/govuk/components/textarea/_index.scss +51 -0
  82. data/node_modules/govuk-frontend/govuk/components/textarea/_textarea.scss +2 -55
  83. data/node_modules/govuk-frontend/govuk/components/warning-text/_index.scss +56 -0
  84. data/node_modules/govuk-frontend/govuk/components/warning-text/_warning-text.scss +2 -60
  85. data/node_modules/govuk-frontend/govuk/core/_global-styles.scss +5 -3
  86. data/node_modules/govuk-frontend/govuk/core/_links.scss +5 -3
  87. data/node_modules/govuk-frontend/govuk/core/_lists.scss +17 -3
  88. data/node_modules/govuk-frontend/govuk/core/_section-break.scss +5 -3
  89. data/node_modules/govuk-frontend/govuk/core/_template.scss +5 -3
  90. data/node_modules/govuk-frontend/govuk/core/_typography.scss +5 -3
  91. data/node_modules/govuk-frontend/govuk/helpers/_clearfix.scss +1 -1
  92. data/node_modules/govuk-frontend/govuk/helpers/_focused.scss +1 -1
  93. data/node_modules/govuk-frontend/govuk/helpers/_grid.scss +2 -1
  94. data/node_modules/govuk-frontend/govuk/helpers/_links.scss +1 -1
  95. data/node_modules/govuk-frontend/govuk/helpers/_media-queries.scss +1 -1
  96. data/node_modules/govuk-frontend/govuk/helpers/_shape-arrow.scss +1 -1
  97. data/node_modules/govuk-frontend/govuk/helpers/_spacing.scss +1 -1
  98. data/node_modules/govuk-frontend/govuk/helpers/_typography.scss +1 -1
  99. data/node_modules/govuk-frontend/govuk/helpers/_visually-hidden.scss +1 -1
  100. data/node_modules/govuk-frontend/govuk/objects/_form-group.scss +1 -3
  101. data/node_modules/govuk-frontend/govuk/objects/_grid.scss +1 -3
  102. data/node_modules/govuk-frontend/govuk/objects/_main-wrapper.scss +5 -3
  103. data/node_modules/govuk-frontend/govuk/objects/_width-container.scss +2 -4
  104. data/node_modules/govuk-frontend/govuk/overrides/_display.scss +5 -3
  105. data/node_modules/govuk-frontend/govuk/overrides/_spacing.scss +5 -3
  106. data/node_modules/govuk-frontend/govuk/overrides/_typography.scss +5 -3
  107. data/node_modules/govuk-frontend/govuk/overrides/_width.scss +5 -3
  108. data/node_modules/govuk-frontend/govuk/settings/_ie8.scss +1 -1
  109. data/node_modules/govuk-frontend/govuk/tools/_compatibility.scss +1 -1
  110. data/node_modules/govuk-frontend/govuk/tools/_font-url.scss +1 -1
  111. data/node_modules/govuk-frontend/govuk/tools/_ie8.scss +1 -1
  112. data/node_modules/govuk-frontend/govuk/tools/_image-url.scss +1 -1
  113. data/node_modules/govuk-frontend/govuk/tools/_px-to-em.scss +1 -1
  114. data/node_modules/govuk-frontend/govuk/tools/_px-to-rem.scss +1 -1
  115. data/node_modules/govuk-frontend/package.json +21 -21
  116. metadata +49 -2
@@ -1,31 +1,2 @@
1
- @import "../../settings/all";
2
- @import "../../tools/all";
3
- @import "../../helpers/all";
4
-
5
- @import "../error-message/error-message";
6
- @import "../hint/hint";
7
- @import "../label/label";
8
-
9
- @include govuk-exports("govuk/component/character-count") {
10
- .govuk-character-count {
11
- @include govuk-responsive-margin(6, "bottom");
12
-
13
- .govuk-form-group,
14
- .govuk-textarea {
15
- margin-bottom: govuk-spacing(1);
16
- }
17
-
18
- .govuk-textarea--error {
19
- padding: govuk-spacing(1) - 2; // Stop a "jump" when width of border changes
20
- }
21
- }
22
-
23
- .govuk-character-count__message {
24
- margin-top: 0;
25
- margin-bottom: 0;
26
- }
27
-
28
- .govuk-character-count__message--disabled {
29
- visibility: hidden;
30
- }
31
- }
1
+ @import "../../base";
2
+ @import "./index";
@@ -0,0 +1,28 @@
1
+ @import "../error-message/index";
2
+ @import "../hint/index";
3
+ @import "../label/index";
4
+ @import "../textarea/index";
5
+
6
+ @include govuk-exports("govuk/component/character-count") {
7
+ .govuk-character-count {
8
+ @include govuk-responsive-margin(6, "bottom");
9
+
10
+ .govuk-form-group,
11
+ .govuk-textarea {
12
+ margin-bottom: govuk-spacing(1);
13
+ }
14
+
15
+ .govuk-textarea--error {
16
+ padding: govuk-spacing(1) - 2; // Stop a "jump" when width of border changes
17
+ }
18
+ }
19
+
20
+ .govuk-character-count__message {
21
+ margin-top: 0;
22
+ margin-bottom: 0;
23
+ }
24
+
25
+ .govuk-character-count__message--disabled {
26
+ visibility: hidden;
27
+ }
28
+ }
@@ -1,308 +1,2 @@
1
- @import "../../settings/all";
2
- @import "../../tools/all";
3
- @import "../../helpers/all";
4
-
5
- @import "../error-message/error-message";
6
- @import "../fieldset/fieldset";
7
- @import "../hint/hint";
8
- @import "../label/label";
9
-
10
- @include govuk-exports("govuk/component/checkboxes") {
11
-
12
- $govuk-touch-target-size: 44px;
13
- $govuk-checkboxes-size: 40px;
14
- $govuk-small-checkboxes-size: 24px;
15
- $govuk-checkboxes-label-padding-left-right: govuk-spacing(3);
16
-
17
- .govuk-checkboxes__item {
18
- @include govuk-font($size: 19);
19
-
20
- display: block;
21
- position: relative;
22
-
23
- min-height: $govuk-checkboxes-size;
24
-
25
- margin-bottom: govuk-spacing(2);
26
- padding-left: $govuk-checkboxes-size;
27
-
28
- clear: left;
29
- }
30
-
31
- .govuk-checkboxes__item:last-child,
32
- .govuk-checkboxes__item:last-of-type {
33
- margin-bottom: 0;
34
- }
35
-
36
- .govuk-checkboxes__input {
37
- $input-offset: ($govuk-touch-target-size - $govuk-checkboxes-size) / 2;
38
-
39
- cursor: pointer;
40
-
41
- // IE8 doesn’t support pseudo-elements, so we don’t want to hide native
42
- // elements there.
43
- @include govuk-not-ie8 {
44
- position: absolute;
45
-
46
- z-index: 1;
47
- top: $input-offset * -1;
48
- left: $input-offset * -1;
49
-
50
- width: $govuk-touch-target-size;
51
- height: $govuk-touch-target-size;
52
- margin: 0;
53
-
54
- opacity: 0;
55
- }
56
-
57
- @include govuk-if-ie8 {
58
- margin-top: 10px;
59
- margin-right: $govuk-checkboxes-size / -2;
60
- margin-left: $govuk-checkboxes-size / -2;
61
- float: left;
62
-
63
- // add focus outline to input
64
- &:focus {
65
- outline: $govuk-focus-width solid $govuk-focus-colour;
66
- }
67
- }
68
- }
69
-
70
- .govuk-checkboxes__label {
71
- display: inline-block;
72
- margin-bottom: 0;
73
- padding: 8px $govuk-checkboxes-label-padding-left-right govuk-spacing(1);
74
- cursor: pointer;
75
- // remove 300ms pause on mobile
76
- -ms-touch-action: manipulation;
77
- touch-action: manipulation;
78
- }
79
-
80
- // [ ] Check box
81
- .govuk-checkboxes__label::before {
82
- content: "";
83
- box-sizing: border-box;
84
- position: absolute;
85
- top: 0;
86
- left: 0;
87
- width: $govuk-checkboxes-size;
88
- height: $govuk-checkboxes-size;
89
- border: $govuk-border-width-form-element solid currentColor;
90
- background: transparent;
91
- }
92
-
93
- // ✔ Check mark
94
- //
95
- // The check mark is a box with a border on the left and bottom side (└──),
96
- // rotated 45 degrees
97
- .govuk-checkboxes__label::after {
98
- content: "";
99
-
100
- position: absolute;
101
- top: 11px;
102
- left: 9px;
103
- width: 18px;
104
- height: 7px;
105
-
106
- -webkit-transform: rotate(-45deg);
107
-
108
- -ms-transform: rotate(-45deg);
109
-
110
- transform: rotate(-45deg);
111
- border: solid;
112
- border-width: 0 0 $govuk-border-width $govuk-border-width;
113
- // Fix bug in IE11 caused by transform rotate (-45deg).
114
- // See: alphagov/govuk_elements/issues/518
115
- border-top-color: transparent;
116
-
117
- opacity: 0;
118
-
119
- background: transparent;
120
- }
121
-
122
- .govuk-checkboxes__hint {
123
- display: block;
124
- padding-right: $govuk-checkboxes-label-padding-left-right;
125
- padding-left: $govuk-checkboxes-label-padding-left-right;
126
- }
127
-
128
- // Focused state
129
- .govuk-checkboxes__input:focus + .govuk-checkboxes__label::before {
130
- border-width: 4px;
131
- box-shadow: 0 0 0 $govuk-focus-width $govuk-focus-colour;
132
- }
133
-
134
- // Selected state
135
- .govuk-checkboxes__input:checked + .govuk-checkboxes__label::after {
136
- opacity: 1;
137
- }
138
-
139
- // Disabled state
140
- .govuk-checkboxes__input:disabled,
141
- .govuk-checkboxes__input:disabled + .govuk-checkboxes__label {
142
- cursor: default;
143
- }
144
-
145
- .govuk-checkboxes__input:disabled + .govuk-checkboxes__label {
146
- opacity: .5;
147
- }
148
-
149
- // =========================================================
150
- // Conditional reveals
151
- // =========================================================
152
-
153
- // The narrow border is used in the conditional reveals because the border has
154
- // to be an even number in order to be centred under the 40px checkbox or radio.
155
- $conditional-border-width: $govuk-border-width-narrow;
156
- // Calculate the amount of padding needed to keep the border centered against the checkbox.
157
- $conditional-border-padding: ($govuk-checkboxes-size / 2) - ($conditional-border-width / 2);
158
- // Move the border centered with the checkbox
159
- $conditional-margin-left: $conditional-border-padding;
160
- // Move the contents of the conditional inline with the label
161
- $conditional-padding-left: $conditional-border-padding + $govuk-checkboxes-label-padding-left-right;
162
-
163
- .govuk-checkboxes__conditional {
164
- @include govuk-responsive-margin(4, "bottom");
165
- margin-left: $conditional-margin-left;
166
- padding-left: $conditional-padding-left;
167
- border-left: $conditional-border-width solid $govuk-border-colour;
168
-
169
- .js-enabled &--hidden {
170
- display: none;
171
- }
172
-
173
- & > :last-child {
174
- margin-bottom: 0;
175
- }
176
- }
177
-
178
- // =========================================================
179
- // Small checkboxes
180
- // =========================================================
181
-
182
- .govuk-checkboxes--small {
183
-
184
- $input-offset: ($govuk-touch-target-size - $govuk-small-checkboxes-size) / 2;
185
- $label-offset: $govuk-touch-target-size - $input-offset;
186
-
187
- .govuk-checkboxes__item {
188
- @include govuk-clearfix;
189
- min-height: 0;
190
- margin-bottom: 0;
191
- padding-left: $label-offset;
192
- float: left;
193
- }
194
-
195
- // Shift the touch target into the left margin so that the visible edge of
196
- // the control is aligned
197
- //
198
- // ┆What colours do you like?
199
- // ┌┆───┐
200
- // │┆[] │ Purple
201
- // └┆▲──┘
202
- // ▲┆└─ Check box pseudo element, aligned with margin
203
- // └─── Touch target (invisible input), shifted into the margin
204
- .govuk-checkboxes__input {
205
- @include govuk-not-ie8 {
206
- left: $input-offset * -1;
207
- }
208
-
209
- @include govuk-if-ie8 {
210
- margin-left: $govuk-small-checkboxes-size * -1;
211
- }
212
- }
213
-
214
- // Adjust the size and position of the label.
215
- //
216
- // Unlike larger checkboxes, we also have to float the label in order to
217
- // 'shrink' it, preventing the hover state from kicking in across the full
218
- // width of the parent element.
219
- .govuk-checkboxes__label {
220
- margin-top: -2px;
221
- padding: 13px govuk-spacing(3) 13px 1px;
222
- float: left;
223
-
224
- @include govuk-media-query($from: tablet) {
225
- padding: 11px govuk-spacing(3) 10px 1px;
226
- }
227
- }
228
-
229
- // [ ] Check box
230
- //
231
- // Reduce the size of the check box [1], vertically center it within the
232
- // touch target [2]
233
- .govuk-checkboxes__label::before {
234
- top: $input-offset - $govuk-border-width-form-element; // 2
235
- width: $govuk-small-checkboxes-size; // 1
236
- height: $govuk-small-checkboxes-size; // 1
237
- }
238
-
239
- // ✔ Check mark
240
- //
241
- // Reduce the size of the check mark and re-align within the checkbox
242
- .govuk-checkboxes__label::after {
243
- top: 15px;
244
- left: 6px;
245
- width: 9px;
246
- height: 3.5px;
247
- border-width: 0 0 3px 3px;
248
- }
249
-
250
- // Fix position of hint with small checkboxes
251
- //
252
- // Do not use hints with small checkboxes – because they're within the input
253
- // wrapper they trigger the hover state, but clicking them doesn't actually
254
- // activate the control.
255
- //
256
- // (If you do use them, they won't look completely broken... but seriously,
257
- // don't use them)
258
- .govuk-checkboxes__hint {
259
- padding: 0;
260
- clear: both;
261
- }
262
-
263
- // Align conditional reveals with small checkboxes
264
- .govuk-checkboxes__conditional {
265
- $margin-left: ($govuk-small-checkboxes-size / 2) - ($conditional-border-width / 2);
266
- margin-left: $margin-left;
267
- padding-left: $label-offset - ($margin-left + $conditional-border-width);
268
- clear: both;
269
- }
270
-
271
- // Hover state for small checkboxes.
272
- //
273
- // We use a hover state for small checkboxes because the touch target size
274
- // is so much larger than their visible size, and so we need to provide
275
- // feedback to the user as to which checkbox they will select when their
276
- // cursor is outside of the visible area.
277
- .govuk-checkboxes__item:hover .govuk-checkboxes__input:not(:disabled) + .govuk-checkboxes__label::before {
278
- box-shadow: 0 0 0 $govuk-hover-width $govuk-hover-colour;
279
- }
280
-
281
- // Because we've overridden the border-shadow provided by the focus state,
282
- // we need to redefine that too.
283
- //
284
- // We use two box shadows, one that restores the original focus state [1]
285
- // and another that then applies the hover state [2].
286
- .govuk-checkboxes__item:hover .govuk-checkboxes__input:focus + .govuk-checkboxes__label::before {
287
- // sass-lint:disable indentation
288
- box-shadow: 0 0 0 $govuk-focus-width $govuk-focus-colour, // 1
289
- 0 0 0 $govuk-hover-width $govuk-hover-colour; // 2
290
- }
291
-
292
- // For devices that explicitly don't support hover, don't provide a hover
293
- // state (e.g. on touch devices like iOS).
294
- //
295
- // We can't use `@media (hover: hover)` because we wouldn't get the hover
296
- // state in browsers that don't support `@media (hover)` (like Internet
297
- // Explorer) – so we have to 'undo' the hover state instead.
298
- @media (hover: none), (pointer: coarse) {
299
- .govuk-checkboxes__item:hover .govuk-checkboxes__input:not(:disabled) + .govuk-checkboxes__label::before {
300
- box-shadow: initial;
301
- }
302
-
303
- .govuk-checkboxes__item:hover .govuk-checkboxes__input:focus + .govuk-checkboxes__label::before {
304
- box-shadow: 0 0 0 $govuk-focus-width $govuk-focus-colour;
305
- }
306
- }
307
- }
308
- }
1
+ @import "../../base";
2
+ @import "./index";
@@ -0,0 +1,304 @@
1
+ @import "../error-message/index";
2
+ @import "../fieldset/index";
3
+ @import "../hint/index";
4
+ @import "../label/index";
5
+
6
+ @include govuk-exports("govuk/component/checkboxes") {
7
+
8
+ $govuk-touch-target-size: 44px;
9
+ $govuk-checkboxes-size: 40px;
10
+ $govuk-small-checkboxes-size: 24px;
11
+ $govuk-checkboxes-label-padding-left-right: govuk-spacing(3);
12
+
13
+ .govuk-checkboxes__item {
14
+ @include govuk-font($size: 19);
15
+
16
+ display: block;
17
+ position: relative;
18
+
19
+ min-height: $govuk-checkboxes-size;
20
+
21
+ margin-bottom: govuk-spacing(2);
22
+ padding-left: $govuk-checkboxes-size;
23
+
24
+ clear: left;
25
+ }
26
+
27
+ .govuk-checkboxes__item:last-child,
28
+ .govuk-checkboxes__item:last-of-type {
29
+ margin-bottom: 0;
30
+ }
31
+
32
+ .govuk-checkboxes__input {
33
+ $input-offset: ($govuk-touch-target-size - $govuk-checkboxes-size) / 2;
34
+
35
+ cursor: pointer;
36
+
37
+ // IE8 doesn’t support pseudo-elements, so we don’t want to hide native
38
+ // elements there.
39
+ @include govuk-not-ie8 {
40
+ position: absolute;
41
+
42
+ z-index: 1;
43
+ top: $input-offset * -1;
44
+ left: $input-offset * -1;
45
+
46
+ width: $govuk-touch-target-size;
47
+ height: $govuk-touch-target-size;
48
+ margin: 0;
49
+
50
+ opacity: 0;
51
+ }
52
+
53
+ @include govuk-if-ie8 {
54
+ margin-top: 10px;
55
+ margin-right: $govuk-checkboxes-size / -2;
56
+ margin-left: $govuk-checkboxes-size / -2;
57
+ float: left;
58
+
59
+ // add focus outline to input
60
+ &:focus {
61
+ outline: $govuk-focus-width solid $govuk-focus-colour;
62
+ }
63
+ }
64
+ }
65
+
66
+ .govuk-checkboxes__label {
67
+ display: inline-block;
68
+ margin-bottom: 0;
69
+ padding: 8px $govuk-checkboxes-label-padding-left-right govuk-spacing(1);
70
+ cursor: pointer;
71
+ // remove 300ms pause on mobile
72
+ -ms-touch-action: manipulation;
73
+ touch-action: manipulation;
74
+ }
75
+
76
+ // [ ] Check box
77
+ .govuk-checkboxes__label::before {
78
+ content: "";
79
+ box-sizing: border-box;
80
+ position: absolute;
81
+ top: 0;
82
+ left: 0;
83
+ width: $govuk-checkboxes-size;
84
+ height: $govuk-checkboxes-size;
85
+ border: $govuk-border-width-form-element solid currentColor;
86
+ background: transparent;
87
+ }
88
+
89
+ // ✔ Check mark
90
+ //
91
+ // The check mark is a box with a border on the left and bottom side (└──),
92
+ // rotated 45 degrees
93
+ .govuk-checkboxes__label::after {
94
+ content: "";
95
+
96
+ position: absolute;
97
+ top: 11px;
98
+ left: 9px;
99
+ width: 18px;
100
+ height: 7px;
101
+
102
+ -webkit-transform: rotate(-45deg);
103
+
104
+ -ms-transform: rotate(-45deg);
105
+
106
+ transform: rotate(-45deg);
107
+ border: solid;
108
+ border-width: 0 0 $govuk-border-width $govuk-border-width;
109
+ // Fix bug in IE11 caused by transform rotate (-45deg).
110
+ // See: alphagov/govuk_elements/issues/518
111
+ border-top-color: transparent;
112
+
113
+ opacity: 0;
114
+
115
+ background: transparent;
116
+ }
117
+
118
+ .govuk-checkboxes__hint {
119
+ display: block;
120
+ padding-right: $govuk-checkboxes-label-padding-left-right;
121
+ padding-left: $govuk-checkboxes-label-padding-left-right;
122
+ }
123
+
124
+ // Focused state
125
+ .govuk-checkboxes__input:focus + .govuk-checkboxes__label::before {
126
+ border-width: 4px;
127
+ box-shadow: 0 0 0 $govuk-focus-width $govuk-focus-colour;
128
+ }
129
+
130
+ // Selected state
131
+ .govuk-checkboxes__input:checked + .govuk-checkboxes__label::after {
132
+ opacity: 1;
133
+ }
134
+
135
+ // Disabled state
136
+ .govuk-checkboxes__input:disabled,
137
+ .govuk-checkboxes__input:disabled + .govuk-checkboxes__label {
138
+ cursor: default;
139
+ }
140
+
141
+ .govuk-checkboxes__input:disabled + .govuk-checkboxes__label {
142
+ opacity: .5;
143
+ }
144
+
145
+ // =========================================================
146
+ // Conditional reveals
147
+ // =========================================================
148
+
149
+ // The narrow border is used in the conditional reveals because the border has
150
+ // to be an even number in order to be centred under the 40px checkbox or radio.
151
+ $conditional-border-width: $govuk-border-width-narrow;
152
+ // Calculate the amount of padding needed to keep the border centered against the checkbox.
153
+ $conditional-border-padding: ($govuk-checkboxes-size / 2) - ($conditional-border-width / 2);
154
+ // Move the border centered with the checkbox
155
+ $conditional-margin-left: $conditional-border-padding;
156
+ // Move the contents of the conditional inline with the label
157
+ $conditional-padding-left: $conditional-border-padding + $govuk-checkboxes-label-padding-left-right;
158
+
159
+ .govuk-checkboxes__conditional {
160
+ @include govuk-responsive-margin(4, "bottom");
161
+ margin-left: $conditional-margin-left;
162
+ padding-left: $conditional-padding-left;
163
+ border-left: $conditional-border-width solid $govuk-border-colour;
164
+
165
+ .js-enabled &--hidden {
166
+ display: none;
167
+ }
168
+
169
+ & > :last-child {
170
+ margin-bottom: 0;
171
+ }
172
+ }
173
+
174
+ // =========================================================
175
+ // Small checkboxes
176
+ // =========================================================
177
+
178
+ .govuk-checkboxes--small {
179
+
180
+ $input-offset: ($govuk-touch-target-size - $govuk-small-checkboxes-size) / 2;
181
+ $label-offset: $govuk-touch-target-size - $input-offset;
182
+
183
+ .govuk-checkboxes__item {
184
+ @include govuk-clearfix;
185
+ min-height: 0;
186
+ margin-bottom: 0;
187
+ padding-left: $label-offset;
188
+ float: left;
189
+ }
190
+
191
+ // Shift the touch target into the left margin so that the visible edge of
192
+ // the control is aligned
193
+ //
194
+ // ┆What colours do you like?
195
+ // ┌┆───┐
196
+ // │┆[] │ Purple
197
+ // └┆▲──┘
198
+ // ▲┆└─ Check box pseudo element, aligned with margin
199
+ // └─── Touch target (invisible input), shifted into the margin
200
+ .govuk-checkboxes__input {
201
+ @include govuk-not-ie8 {
202
+ left: $input-offset * -1;
203
+ }
204
+
205
+ @include govuk-if-ie8 {
206
+ margin-left: $govuk-small-checkboxes-size * -1;
207
+ }
208
+ }
209
+
210
+ // Adjust the size and position of the label.
211
+ //
212
+ // Unlike larger checkboxes, we also have to float the label in order to
213
+ // 'shrink' it, preventing the hover state from kicking in across the full
214
+ // width of the parent element.
215
+ .govuk-checkboxes__label {
216
+ margin-top: -2px;
217
+ padding: 13px govuk-spacing(3) 13px 1px;
218
+ float: left;
219
+
220
+ @include govuk-media-query($from: tablet) {
221
+ padding: 11px govuk-spacing(3) 10px 1px;
222
+ }
223
+ }
224
+
225
+ // [ ] Check box
226
+ //
227
+ // Reduce the size of the check box [1], vertically center it within the
228
+ // touch target [2]
229
+ .govuk-checkboxes__label::before {
230
+ top: $input-offset - $govuk-border-width-form-element; // 2
231
+ width: $govuk-small-checkboxes-size; // 1
232
+ height: $govuk-small-checkboxes-size; // 1
233
+ }
234
+
235
+ // ✔ Check mark
236
+ //
237
+ // Reduce the size of the check mark and re-align within the checkbox
238
+ .govuk-checkboxes__label::after {
239
+ top: 15px;
240
+ left: 6px;
241
+ width: 9px;
242
+ height: 3.5px;
243
+ border-width: 0 0 3px 3px;
244
+ }
245
+
246
+ // Fix position of hint with small checkboxes
247
+ //
248
+ // Do not use hints with small checkboxes – because they're within the input
249
+ // wrapper they trigger the hover state, but clicking them doesn't actually
250
+ // activate the control.
251
+ //
252
+ // (If you do use them, they won't look completely broken... but seriously,
253
+ // don't use them)
254
+ .govuk-checkboxes__hint {
255
+ padding: 0;
256
+ clear: both;
257
+ }
258
+
259
+ // Align conditional reveals with small checkboxes
260
+ .govuk-checkboxes__conditional {
261
+ $margin-left: ($govuk-small-checkboxes-size / 2) - ($conditional-border-width / 2);
262
+ margin-left: $margin-left;
263
+ padding-left: $label-offset - ($margin-left + $conditional-border-width);
264
+ clear: both;
265
+ }
266
+
267
+ // Hover state for small checkboxes.
268
+ //
269
+ // We use a hover state for small checkboxes because the touch target size
270
+ // is so much larger than their visible size, and so we need to provide
271
+ // feedback to the user as to which checkbox they will select when their
272
+ // cursor is outside of the visible area.
273
+ .govuk-checkboxes__item:hover .govuk-checkboxes__input:not(:disabled) + .govuk-checkboxes__label::before {
274
+ box-shadow: 0 0 0 $govuk-hover-width $govuk-hover-colour;
275
+ }
276
+
277
+ // Because we've overridden the border-shadow provided by the focus state,
278
+ // we need to redefine that too.
279
+ //
280
+ // We use two box shadows, one that restores the original focus state [1]
281
+ // and another that then applies the hover state [2].
282
+ .govuk-checkboxes__item:hover .govuk-checkboxes__input:focus + .govuk-checkboxes__label::before {
283
+ // sass-lint:disable indentation
284
+ box-shadow: 0 0 0 $govuk-focus-width $govuk-focus-colour, // 1
285
+ 0 0 0 $govuk-hover-width $govuk-hover-colour; // 2
286
+ }
287
+
288
+ // For devices that explicitly don't support hover, don't provide a hover
289
+ // state (e.g. on touch devices like iOS).
290
+ //
291
+ // We can't use `@media (hover: hover)` because we wouldn't get the hover
292
+ // state in browsers that don't support `@media (hover)` (like Internet
293
+ // Explorer) – so we have to 'undo' the hover state instead.
294
+ @media (hover: none), (pointer: coarse) {
295
+ .govuk-checkboxes__item:hover .govuk-checkboxes__input:not(:disabled) + .govuk-checkboxes__label::before {
296
+ box-shadow: initial;
297
+ }
298
+
299
+ .govuk-checkboxes__item:hover .govuk-checkboxes__input:focus + .govuk-checkboxes__label::before {
300
+ box-shadow: 0 0 0 $govuk-focus-width $govuk-focus-colour;
301
+ }
302
+ }
303
+ }
304
+ }