govuk_publishing_components 16.10.1 → 16.11.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '08655ae6d9a58f9aae28373e15b632ea8c57afd01964b1f35e97da6cd6dc139c'
4
- data.tar.gz: e788d563adcf94fe97fbe952941bdb1df2bb40033a5f616a4d6c6df2dee8592b
3
+ metadata.gz: b0f7149647a844701e08e1592bfcfcd345a5e91d7d9bf7f8a3b56dd65665d30a
4
+ data.tar.gz: 3154dd32d9da143993c2cdda363dac84607647af7fd463c3ca1d46429ca31fa8
5
5
  SHA512:
6
- metadata.gz: 963441d25764cc36d97fd6a81ddacddcdab6057dded3788ca86385da56b1cd26f1b35d224a5f1ce14a00391d7e2fde35b9ad1403707a58eaf02e2e2bce1b5652
7
- data.tar.gz: 83c4cd8d61aa04e3ac4ff85c9fe53f4b1074ef38cfb5282414f8236234ae6ccbfd20a525cf21693949c09057f69c56e05aa8688afd4c28efb426b59f4929c4d9
6
+ metadata.gz: 1f7ca0eeab97cc5be4c1df01908791947ef3cf76e64f863a2bf769e6b5fd90e91746a86f7862b7add278e00cdae26d03b32f3e1d740ce0559a2e3d14e0aaa75a
7
+ data.tar.gz: 035105c93e8e29651565ea190f571fb30fa2b029f8895624f661dcd4e5ecf9a8943cafa116a6ace28c9220a94ab1b117a04f30471c3c0db26d154650a832381b
@@ -4,7 +4,7 @@
4
4
  'use strict'
5
5
 
6
6
  if (document.querySelectorAll && document.addEventListener) {
7
- var els = document.querySelectorAll('.js-header-toggle')
7
+ var els = document.querySelectorAll('a.js-header-toggle')
8
8
  var i
9
9
  var _i
10
10
  for (i = 0, _i = els.length; i < _i; i++) {
@@ -1,4 +1,5 @@
1
1
  <%
2
+ # cb_helper.css_classes generates "gem-c-checkboxes"
2
3
  cb_helper = GovukPublishingComponents::Presenters::CheckboxesHelper.new(local_assigns)
3
4
  id = cb_helper.id
4
5
  %>
@@ -17,7 +18,7 @@
17
18
  <%= tag.span error, id: "#{id}-error", class: "govuk-error-message" %>
18
19
  <% end %>
19
20
 
20
- <%= tag.ul class: "govuk-checkboxes gem-c-checkboxes__list", data: {
21
+ <%= tag.ul class: cb_helper.list_classes, data: {
21
22
  module: ('checkboxes' if cb_helper.has_conditional),
22
23
  nested: ('true' if cb_helper.has_nested),
23
24
  } do %>
@@ -4,6 +4,7 @@
4
4
 
5
5
  label ||= nil
6
6
  heading ||= nil
7
+ small ||= false
7
8
  is_page_heading ||= false
8
9
  hint ||= nil
9
10
  error_message ||= nil
@@ -16,6 +17,9 @@
16
17
  form_group_css_classes = %w(govuk-form-group)
17
18
  form_group_css_classes << "govuk-form-group--error" if has_error
18
19
 
20
+ radio_classes = %w(govuk-radios)
21
+ radio_classes << "govuk-radios--small" if small
22
+
19
23
  aria = "#{hint_id} #{"#{error_id}" if has_error}".strip if hint or has_error
20
24
 
21
25
  # check if any item is set as being conditional
@@ -53,7 +57,7 @@
53
57
  } %>
54
58
  <% end %>
55
59
 
56
- <%= content_tag :div, class: "govuk-radios",
60
+ <%= content_tag :div, class: radio_classes,
57
61
  data: {
58
62
  module: ('radios' if has_conditional)
59
63
  } do %>
@@ -32,6 +32,16 @@ examples:
32
32
  value: "green"
33
33
  - label: "Blue"
34
34
  value: "blue"
35
+ with_small_checkboxes:
36
+ data:
37
+ name: "favourite_small_synonym"
38
+ heading: "What is your favourite synonym for small?"
39
+ small: true
40
+ items:
41
+ - label: "Tiny"
42
+ value: "tiny"
43
+ - label: "Little"
44
+ value: "little"
35
45
  with_a_heading_on_one_checkbox:
36
46
  description: One checkbox does not require a fieldset and therefore does not require a legend. However, if a heading is supplied, a fieldset will be included in the component and the heading used as the legend, as shown.
37
47
  data:
@@ -44,6 +44,15 @@ examples:
44
44
  text: "Use Government Gateway"
45
45
  - value: "govuk-verify"
46
46
  text: "Use GOV.UK Verify"
47
+ with_small_radios:
48
+ data:
49
+ name: "radio-group"
50
+ small: true
51
+ items:
52
+ - value: "government-gateway"
53
+ text: "Use Government Gateway"
54
+ - value: "govuk-verify"
55
+ text: "Use GOV.UK Verify"
47
56
  with_bold:
48
57
  description: 'Used to provide better contrast between long labels and hint text, Note that the `:or` option [is documented as a string due to a bug](https://github.com/alphagov/govuk_publishing_components/issues/102)'
49
58
  data:
@@ -4,7 +4,7 @@ module GovukPublishingComponents
4
4
  include ActionView::Helpers
5
5
  include ActionView::Context
6
6
 
7
- attr_reader :items, :name, :css_classes, :error, :has_conditional, :has_nested, :id, :hint_text
7
+ attr_reader :items, :name, :css_classes, :list_classes, :error, :has_conditional, :has_nested, :id, :hint_text
8
8
 
9
9
  def initialize(options)
10
10
  @items = options[:items] || []
@@ -13,6 +13,9 @@ module GovukPublishingComponents
13
13
  @css_classes << "govuk-form-group--error" if options[:error]
14
14
  @error = true if options[:error]
15
15
 
16
+ @list_classes = %w(govuk-checkboxes gem-c-checkboxes__list)
17
+ @list_classes << "govuk-checkboxes--small" if options[:small]
18
+
16
19
  # check if any item is set as being conditional
17
20
  @has_conditional = options[:items].any? { |item| item.is_a?(Hash) && item[:conditional] }
18
21
  @has_nested = options[:items].any? { |item| item.is_a?(Hash) && item[:items] }
@@ -1,3 +1,3 @@
1
1
  module GovukPublishingComponents
2
- VERSION = '16.10.1'.freeze
2
+ VERSION = '16.11.0'.freeze
3
3
  end
@@ -49,7 +49,7 @@
49
49
  "/"
50
50
  ],
51
51
  "_resolved": "git://github.com/alphagov/accessible-autocomplete.git#0c518b4fa79b9a95b544410858486ed9e6403c84",
52
- "_shasum": "978047a05492695e21154f9ec9403d5c46ea26ff",
52
+ "_shasum": "8110fa374a6fa8c8f301c94e46d4513f8bb0131c",
53
53
  "_shrinkwrap": null,
54
54
  "_spec": "accessible-autocomplete@git://github.com/alphagov/accessible-autocomplete.git#add-multiselect-support",
55
55
  "_where": "/var/lib/jenkins/workspace/ublishing_components_master-N4FWJIUY4CIFHKGZOAAEVVXODRY3YBORQOPIBBXWX72VUPSGJRRQ",
@@ -8,7 +8,10 @@
8
8
  @import "../label/label";
9
9
 
10
10
  @include govuk-exports("govuk/component/checkboxes") {
11
- $govuk-checkboxes-size: govuk-spacing(7);
11
+
12
+ $govuk-touch-target-size: 44px;
13
+ $govuk-checkboxes-size: 40px;
14
+ $govuk-small-checkboxes-size: 24px;
12
15
  $govuk-checkboxes-label-padding-left-right: govuk-spacing(3);
13
16
 
14
17
  .govuk-checkboxes__item {
@@ -20,7 +23,7 @@
20
23
  min-height: $govuk-checkboxes-size;
21
24
 
22
25
  margin-bottom: govuk-spacing(2);
23
- padding: 0 0 0 $govuk-checkboxes-size;
26
+ padding-left: $govuk-checkboxes-size;
24
27
 
25
28
  clear: left;
26
29
  }
@@ -31,25 +34,33 @@
31
34
  }
32
35
 
33
36
  .govuk-checkboxes__input {
34
- position: absolute;
35
-
36
- z-index: 1;
37
- top: 0;
38
- left: 0;
39
-
40
- width: $govuk-checkboxes-size;
41
- height: $govuk-checkboxes-size;
37
+ $input-offset: ($govuk-touch-target-size - $govuk-checkboxes-size) / 2;
42
38
 
43
39
  cursor: pointer;
44
40
 
45
- // IE8 doesn’t support pseudoelements, so we don’t want to hide native elements there.
41
+ // IE8 doesn’t support pseudo-elements, so we don’t want to hide native
42
+ // elements there.
46
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;
47
52
  margin: 0;
53
+
48
54
  opacity: 0;
49
55
  }
50
56
 
51
- // add focus outline to input element for IE8
52
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
53
64
  &:focus {
54
65
  outline: $govuk-focus-width solid $govuk-focus-colour;
55
66
  }
@@ -63,16 +74,11 @@
63
74
  cursor: pointer;
64
75
  // remove 300ms pause on mobile
65
76
  -ms-touch-action: manipulation;
66
- touch-action: manipulation;
77
+ touch-action: manipulation;
67
78
  }
68
79
 
69
- .govuk-checkboxes__hint {
70
- display: block;
71
- padding-right: $govuk-checkboxes-label-padding-left-right;
72
- padding-left: $govuk-checkboxes-label-padding-left-right;
73
- }
74
-
75
- .govuk-checkboxes__input + .govuk-checkboxes__label::before {
80
+ // [ ] Check box
81
+ .govuk-checkboxes__label::before {
76
82
  content: "";
77
83
  box-sizing: border-box;
78
84
  position: absolute;
@@ -82,11 +88,13 @@
82
88
  height: $govuk-checkboxes-size;
83
89
  border: $govuk-border-width-form-element solid currentColor;
84
90
  background: transparent;
85
-
86
- // padding-bottom: 1px;
87
91
  }
88
92
 
89
- .govuk-checkboxes__input + .govuk-checkboxes__label::after {
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 {
90
98
  content: "";
91
99
 
92
100
  position: absolute;
@@ -111,10 +119,16 @@
111
119
  background: transparent;
112
120
  }
113
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
+
114
128
  // Focused state
115
129
  .govuk-checkboxes__input:focus + .govuk-checkboxes__label::before {
116
- // Since box-shadows are removed when users customise their colours
117
- // We set a transparent outline that is shown instead.
130
+ // Since box-shadows are removed when users customise their colours, we set
131
+ // a transparent outline that is shown instead.
118
132
  // https://accessibility.blog.gov.uk/2017/03/27/how-users-change-colours-on-websites/
119
133
  outline: $govuk-focus-width solid transparent;
120
134
  outline-offset: $govuk-focus-width;
@@ -136,6 +150,10 @@
136
150
  opacity: .5;
137
151
  }
138
152
 
153
+ // =========================================================
154
+ // Conditional reveals
155
+ // =========================================================
156
+
139
157
  $conditional-border-width: $govuk-border-width-mobile;
140
158
  // Calculate the amount of padding needed to keep the border centered against the checkbox.
141
159
  $conditional-border-padding: ($govuk-checkboxes-size / 2) - ($conditional-border-width / 2);
@@ -158,4 +176,135 @@
158
176
  margin-bottom: 0;
159
177
  }
160
178
  }
179
+
180
+ // =========================================================
181
+ // Small checkboxes
182
+ // =========================================================
183
+
184
+ .govuk-checkboxes--small {
185
+
186
+ $input-offset: ($govuk-touch-target-size - $govuk-small-checkboxes-size) / 2;
187
+ $label-offset: $govuk-touch-target-size - $input-offset;
188
+
189
+ .govuk-checkboxes__item {
190
+ @include govuk-clearfix;
191
+ min-height: 0;
192
+ margin-bottom: 0;
193
+ padding-left: $label-offset;
194
+ float: left;
195
+ }
196
+
197
+ // Shift the touch target into the left margin so that the visible edge of
198
+ // the control is aligned
199
+ //
200
+ // ┆What colours do you like?
201
+ // ┌┆───┐
202
+ // │┆[] │ Purple
203
+ // └┆▲──┘
204
+ // ▲┆└─ Check box pseudo element, aligned with margin
205
+ // └─── Touch target (invisible input), shifted into the margin
206
+ .govuk-checkboxes__input {
207
+ @include govuk-not-ie8 {
208
+ left: $input-offset * -1;
209
+ }
210
+
211
+ @include govuk-if-ie8 {
212
+ margin-left: $govuk-small-checkboxes-size * -1;
213
+ }
214
+ }
215
+
216
+ // Adjust the size and position of the label.
217
+ //
218
+ // Unlike larger checkboxes, we also have to float the label in order to
219
+ // 'shrink' it, preventing the hover state from kicking in across the full
220
+ // width of the parent element.
221
+ .govuk-checkboxes__label {
222
+ margin-top: -2px;
223
+ padding: 13px govuk-spacing(3) 13px 1px;
224
+ float: left;
225
+
226
+ @include govuk-media-query($from: tablet) {
227
+ padding: 11px govuk-spacing(3) 10px 1px;
228
+ }
229
+ }
230
+
231
+ // [ ] Check box
232
+ //
233
+ // Reduce the size of the check box [1], vertically center it within the
234
+ // touch target [2]
235
+ .govuk-checkboxes__label::before {
236
+ top: $input-offset - $govuk-border-width-form-element; // 2
237
+ width: $govuk-small-checkboxes-size; // 1
238
+ height: $govuk-small-checkboxes-size; // 1
239
+ }
240
+
241
+ // ✔ Check mark
242
+ //
243
+ // Reduce the size of the check mark and re-align within the checkbox
244
+ .govuk-checkboxes__label::after {
245
+ top: 15px;
246
+ left: 6px;
247
+ width: 9px;
248
+ height: 3.5px;
249
+ border-width: 0 0 3px 3px;
250
+ }
251
+
252
+ // Fix position of hint with small checkboxes
253
+ //
254
+ // Do not use hints with small checkboxes – because they're within the input
255
+ // wrapper they trigger the hover state, but clicking them doesn't actually
256
+ // activate the control.
257
+ //
258
+ // (If you do use them, they won't look completely broken... but seriously,
259
+ // don't use them)
260
+ .govuk-checkboxes__hint {
261
+ padding: 0;
262
+ clear: both;
263
+ }
264
+
265
+ // Align conditional reveals with small checkboxes
266
+ .govuk-checkboxes__conditional {
267
+ $margin-left: ($govuk-small-checkboxes-size / 2) - ($conditional-border-width / 2);
268
+ margin-left: $margin-left;
269
+ padding-left: $label-offset - ($margin-left + $conditional-border-width);
270
+ clear: both;
271
+ }
272
+
273
+ // Hover state for small checkboxes.
274
+ //
275
+ // We use a hover state for small checkboxes because the touch target size
276
+ // is so much larger than their visible size, and so we need to provide
277
+ // feedback to the user as to which checkbox they will select when their
278
+ // cursor is outside of the visible area.
279
+ .govuk-checkboxes__item:hover .govuk-checkboxes__input:not(:disabled) + .govuk-checkboxes__label::before {
280
+ box-shadow: 0 0 0 $govuk-hover-width $govuk-hover-colour;
281
+ }
282
+
283
+ // Because we've overridden the border-shadow provided by the focus state,
284
+ // we need to redefine that too.
285
+ //
286
+ // We use two box shadows, one that restores the original focus state [1]
287
+ // and another that then applies the hover state [2].
288
+ .govuk-checkboxes__item:hover .govuk-checkboxes__input:focus + .govuk-checkboxes__label::before {
289
+ // sass-lint:disable indentation
290
+ box-shadow: 0 0 0 $govuk-focus-width $govuk-focus-colour, // 1
291
+ 0 0 0 $govuk-hover-width $govuk-hover-colour; // 2
292
+ }
293
+
294
+ // For devices that explicitly don't support hover, don't provide a hover
295
+ // state (e.g. on touch devices like iOS).
296
+ //
297
+ // We can't use `@media (hover: hover)` because we wouldn't get the hover
298
+ // state in browsers that don't support `@media (hover)` (like Internet
299
+ // Explorer) – so we have to 'undo' the hover state instead.
300
+ @media (hover: none), (pointer: coarse) {
301
+ .govuk-checkboxes__item:hover .govuk-checkboxes__input:not(:disabled) + .govuk-checkboxes__label::before {
302
+ box-shadow: initial;
303
+ }
304
+
305
+ .govuk-checkboxes__item:hover .govuk-checkboxes__input:focus + .govuk-checkboxes__label::before {
306
+ box-shadow: 0 0 0 $govuk-focus-width $govuk-focus-colour;
307
+ }
308
+ }
309
+ }
161
310
  }
@@ -54,15 +54,15 @@
54
54
  {% set name = item.name if item.name else params.name %}
55
55
  {% set conditionalId = "conditional-" + id %}
56
56
  {% set hasHint = true if item.hint.text or item.hint.html %}
57
- {% set itemHintId = id + '-item-hint' %}
57
+ {% set itemHintId = id + "-item-hint" if hasHint else "" %}
58
+ {% set itemDescribedBy = describedBy if not hasFieldset else "" %}
59
+ {% set itemDescribedBy = (itemDescribedBy + " " + itemHintId) | trim %}
58
60
  <div class="govuk-checkboxes__item">
59
61
  <input class="govuk-checkboxes__input" id="{{ id }}" name="{{ name }}" type="checkbox" value="{{ item.value }}"
60
62
  {{-" checked" if item.checked }}
61
63
  {{-" disabled" if item.disabled }}
62
- {#- fieldset is false by default -#}
63
- {%- if (not hasFieldset) and ((describedBy | length) > 0) %} aria-describedby="{{ describedBy }}"{% endif -%}
64
64
  {%- if item.conditional %} data-aria-controls="{{ conditionalId }}"{% endif -%}
65
- {%- if hasHint %} aria-describedby="{{ itemHintId }}"{% endif -%}
65
+ {%- if itemDescribedBy %} aria-describedby="{{ itemDescribedBy }}"{% endif -%}
66
66
  {%- for attribute, value in item.attributes %} {{ attribute }}="{{ value }}"{% endfor -%}>
67
67
  {{ govukLabel({
68
68
  html: item.html,
@@ -4,13 +4,13 @@
4
4
  {%- for attribute, value in params.attributes %} {{ attribute }}="{{ value }}"{% endfor %}>
5
5
  {% if params.legend.html or params.legend.text %}
6
6
  <legend class="govuk-fieldset__legend {%- if params.legend.classes %} {{ params.legend.classes }}{% endif %}">
7
- {%- if params.legend.isPageHeading %}
7
+ {% if params.legend.isPageHeading %}
8
8
  <h1 class="govuk-fieldset__heading">
9
9
  {{ params.legend.html | safe if params.legend.html else params.legend.text }}
10
10
  </h1>
11
11
  {% else %}
12
12
  {{ params.legend.html | safe if params.legend.html else params.legend.text }}
13
- {% endif -%}
13
+ {% endif %}
14
14
  </legend>
15
15
  {% endif %}
16
16
  {{ caller() if caller }} {#- if statement allows usage of `call` to be optional -#}
@@ -8,7 +8,10 @@
8
8
  @import "../label/label";
9
9
 
10
10
  @include govuk-exports("govuk/component/radios") {
11
- $govuk-radios-size: govuk-spacing(7);
11
+
12
+ $govuk-touch-target-size: 44px;
13
+ $govuk-radios-size: 40px;
14
+ $govuk-small-radios-size: 24px;
12
15
  $govuk-radios-label-padding-left-right: govuk-spacing(3);
13
16
  // When the default focus width is used on a curved edge it looks visually smaller.
14
17
  // So for the circular radios we bump the default to make it look visually consistent.
@@ -18,13 +21,12 @@
18
21
  @include govuk-font($size: 19);
19
22
 
20
23
  display: block;
21
-
22
24
  position: relative;
23
25
 
24
26
  min-height: $govuk-radios-size;
25
27
 
26
28
  margin-bottom: govuk-spacing(2);
27
- padding: 0 0 0 $govuk-radios-size;
29
+ padding-left: $govuk-radios-size;
28
30
 
29
31
  clear: left;
30
32
  }
@@ -35,25 +37,33 @@
35
37
  }
36
38
 
37
39
  .govuk-radios__input {
38
- position: absolute;
39
-
40
- z-index: 1;
41
- top: 0;
42
- left: 0;
43
-
44
- width: $govuk-radios-size;
45
- height: $govuk-radios-size;
40
+ $input-offset: ($govuk-touch-target-size - $govuk-radios-size) / 2;
46
41
 
47
42
  cursor: pointer;
48
43
 
49
- // IE8 doesn’t support pseudoelements, so we don’t want to hide native elements there. Double colons get ommited by IE8.
44
+ // IE8 doesn’t support pseudo-elements, so we don’t want to hide native
45
+ // elements there.
50
46
  @include govuk-not-ie8 {
47
+ position: absolute;
48
+
49
+ z-index: 1;
50
+ top: $input-offset * -1;
51
+ left: $input-offset * -1;
52
+
53
+ width: $govuk-touch-target-size;
54
+ height: $govuk-touch-target-size;
51
55
  margin: 0;
56
+
52
57
  opacity: 0;
53
58
  }
54
59
 
55
- // add focus outline to input element for IE8
56
60
  @include govuk-if-ie8 {
61
+ margin-top: 10px;
62
+ margin-right: $govuk-radios-size / -2;
63
+ margin-left: $govuk-radios-size / -2;
64
+ float: left;
65
+
66
+ // add focus outline to input
57
67
  &:focus {
58
68
  outline: $govuk-focus-width solid $govuk-focus-colour;
59
69
  }
@@ -67,16 +77,11 @@
67
77
  cursor: pointer;
68
78
  // remove 300ms pause on mobile
69
79
  -ms-touch-action: manipulation;
70
- touch-action: manipulation;
71
- }
72
-
73
- .govuk-radios__hint {
74
- display: block;
75
- padding-right: $govuk-radios-label-padding-left-right;
76
- padding-left: $govuk-radios-label-padding-left-right;
80
+ touch-action: manipulation;
77
81
  }
78
82
 
79
- .govuk-radios__input + .govuk-radios__label::before {
83
+ // ( ) Radio ring
84
+ .govuk-radios__label::before {
80
85
  content: "";
81
86
  box-sizing: border-box;
82
87
  position: absolute;
@@ -91,7 +96,11 @@
91
96
  background: transparent;
92
97
  }
93
98
 
94
- .govuk-radios__input + .govuk-radios__label::after {
99
+ // • Radio button
100
+ //
101
+ // We create the 'button' entirely out of 'border' so that they remain
102
+ // 'filled' even when colours are overridden in the browser.
103
+ .govuk-radios__label::after {
95
104
  content: "";
96
105
 
97
106
  position: absolute;
@@ -107,10 +116,16 @@
107
116
  background: currentColor;
108
117
  }
109
118
 
119
+ .govuk-radios__hint {
120
+ display: block;
121
+ padding-right: $govuk-radios-label-padding-left-right;
122
+ padding-left: $govuk-radios-label-padding-left-right;
123
+ }
124
+
110
125
  // Focused state
111
126
  .govuk-radios__input:focus + .govuk-radios__label::before {
112
- // Since box-shadows are removed when users customise their colours
113
- // We set a transparent outline that is shown instead.
127
+ // Since box-shadows are removed when users customise their colours we set a
128
+ // transparent outline that is shown instead.
114
129
  // https://accessibility.blog.gov.uk/2017/03/27/how-users-change-colours-on-websites/
115
130
  outline: $govuk-focus-width solid transparent;
116
131
  outline-offset: $govuk-focus-width;
@@ -132,7 +147,10 @@
132
147
  opacity: .5;
133
148
  }
134
149
 
135
- // Inline variant
150
+ // =========================================================
151
+ // Inline radios
152
+ // =========================================================
153
+
136
154
  .govuk-radios--inline {
137
155
  @include mq ($from: tablet) {
138
156
  @include govuk-clearfix;
@@ -153,6 +171,10 @@
153
171
  }
154
172
  }
155
173
 
174
+ // =========================================================
175
+ // Dividers ('or')
176
+ // =========================================================
177
+
156
178
  .govuk-radios__divider {
157
179
  $govuk-divider-size: $govuk-radios-size !default;
158
180
  @include govuk-font($size: 19);
@@ -162,6 +184,10 @@
162
184
  text-align: center;
163
185
  }
164
186
 
187
+ // =========================================================
188
+ // Conditional reveals
189
+ // =========================================================
190
+
165
191
  $conditional-border-width: $govuk-border-width-mobile;
166
192
  // Calculate the amount of padding needed to keep the border centered against the radios.
167
193
  $conditional-border-padding: ($govuk-radios-size / 2) - ($conditional-border-width / 2);
@@ -184,4 +210,139 @@
184
210
  margin-bottom: 0;
185
211
  }
186
212
  }
213
+
214
+ // =========================================================
215
+ // Small checkboxes
216
+ // =========================================================
217
+
218
+ .govuk-radios--small {
219
+
220
+ $input-offset: ($govuk-touch-target-size - $govuk-small-radios-size) / 2;
221
+ $label-offset: $govuk-touch-target-size - $input-offset;
222
+
223
+ .govuk-radios__item {
224
+ @include govuk-clearfix;
225
+ min-height: 0;
226
+ margin-bottom: 0;
227
+ padding-left: $label-offset;
228
+ float: left;
229
+ }
230
+
231
+ // Shift the touch target into the left margin so that the visible edge of
232
+ // the control is aligned
233
+ //
234
+ // ┆Which colour is your favourite?
235
+ // ┌┆───┐
236
+ // │┆() │ Purple
237
+ // └┆▲──┘
238
+ // ▲┆└─ Radio pseudo element, aligned with margin
239
+ // └─── Touch target (invisible input), shifted into the margin
240
+ .govuk-radios__input {
241
+ @include govuk-not-ie8 {
242
+ left: $input-offset * -1;
243
+ }
244
+
245
+ @include govuk-if-ie8 {
246
+ margin-left: $govuk-small-radios-size * -1;
247
+ }
248
+ }
249
+
250
+ // Adjust the size and position of the label.
251
+ //
252
+ // Unlike larger radios, we also have to float the label in order to
253
+ // 'shrink' it, preventing the hover state from kicking in across the full
254
+ // width of the parent element.
255
+ .govuk-radios__label {
256
+ margin-top: -2px;
257
+ padding: 13px govuk-spacing(3) 13px 1px;
258
+ float: left;
259
+
260
+ @include govuk-media-query($from: tablet) {
261
+ padding: 11px govuk-spacing(3) 10px 1px;
262
+ }
263
+ }
264
+
265
+ // ( ) Radio ring
266
+ //
267
+ // Reduce the size of the control [1], vertically centering it within the
268
+ // touch target [2]
269
+ .govuk-radios__label::before {
270
+ top: $input-offset - $govuk-border-width-form-element; // 2
271
+ width: $govuk-small-radios-size; // 1
272
+ height: $govuk-small-radios-size; // 1
273
+ }
274
+
275
+ // • Radio button
276
+ //
277
+ // Reduce the size of the 'button' and center it within the ring
278
+ .govuk-radios__label::after {
279
+ top: 14px;
280
+ left: 6px;
281
+ border-width: 6px;
282
+ }
283
+
284
+ // Fix position of hint with small radios
285
+ //
286
+ // Do not use hints with small radios – because they're within the input
287
+ // wrapper they trigger the hover state, but clicking them doesn't actually
288
+ // activate the control.
289
+ //
290
+ // (If you do use them, they won't look completely broken... but seriously,
291
+ // don't use them)
292
+ .govuk-radios__hint {
293
+ padding: 0;
294
+ clear: both;
295
+ pointer-events: none;
296
+ }
297
+
298
+ // Align conditional reveals with small radios
299
+ .govuk-radios__conditional {
300
+ $margin-left: ($govuk-small-radios-size / 2) - ($conditional-border-width / 2);
301
+ margin-left: $margin-left;
302
+ padding-left: $label-offset - ($margin-left + $conditional-border-width);
303
+ clear: both;
304
+ }
305
+
306
+ .govuk-radios__divider {
307
+ width: $govuk-small-radios-size;
308
+ margin-bottom: govuk-spacing(1);
309
+ }
310
+
311
+ // Hover state for small radios.
312
+ //
313
+ // We use a hover state for small radios because the touch target size
314
+ // is so much larger than their visible size, and so we need to provide
315
+ // feedback to the user as to which radio they will select when their
316
+ // cursor is outside of the visible area.
317
+ .govuk-radios__item:hover .govuk-radios__input:not(:disabled) + .govuk-radios__label::before {
318
+ box-shadow: 0 0 0 $govuk-hover-width $govuk-hover-colour;
319
+ }
320
+
321
+ // Because we've overridden the border-shadow provided by the focus state,
322
+ // we need to redefine that too.
323
+ //
324
+ // We use two box shadows, one that restores the original focus state [1]
325
+ // and another that then applies the hover state [2].
326
+ .govuk-radios__item:hover .govuk-radios__input:focus + .govuk-radios__label::before {
327
+ // sass-lint:disable indentation
328
+ box-shadow: 0 0 0 $govuk-radios-focus-width $govuk-focus-colour, // 1
329
+ 0 0 0 $govuk-hover-width $govuk-hover-colour; // 2
330
+ }
331
+
332
+ // For devices that explicitly don't support hover, don't provide a hover
333
+ // state (e.g. on touch devices like iOS).
334
+ //
335
+ // We can't use `@media (hover: hover)` because we wouldn't get the hover
336
+ // state in browsers that don't support `@media (hover)` (like Internet
337
+ // Explorer) – so we have to 'undo' the hover state instead.
338
+ @media (hover: none), (pointer: coarse) {
339
+ .govuk-radios__item:hover .govuk-radios__input:not(:disabled) + .govuk-radios__label::before {
340
+ box-shadow: initial;
341
+ }
342
+
343
+ .govuk-radios__item:hover .govuk-radios__input:focus + .govuk-radios__label::before {
344
+ box-shadow: 0 0 0 $govuk-radios-focus-width $govuk-focus-colour;
345
+ }
346
+ }
347
+ }
187
348
  }
@@ -5,6 +5,7 @@
5
5
  @include govuk-exports("govuk/objects/form-group") {
6
6
 
7
7
  .govuk-form-group {
8
+ @include govuk-clearfix;
8
9
  @include govuk-responsive-margin(6, "bottom");
9
10
 
10
11
  .govuk-form-group:last-of-type {
@@ -2,26 +2,26 @@
2
2
  "_args": [
3
3
  [
4
4
  {
5
- "raw": "govuk-frontend@2.9.0",
5
+ "raw": "govuk-frontend@2.10.0",
6
6
  "scope": null,
7
7
  "escapedName": "govuk-frontend",
8
8
  "name": "govuk-frontend",
9
- "rawSpec": "2.9.0",
10
- "spec": "2.9.0",
9
+ "rawSpec": "2.10.0",
10
+ "spec": "2.10.0",
11
11
  "type": "version"
12
12
  },
13
13
  "/var/lib/jenkins/workspace/ublishing_components_master-N4FWJIUY4CIFHKGZOAAEVVXODRY3YBORQOPIBBXWX72VUPSGJRRQ"
14
14
  ]
15
15
  ],
16
- "_from": "govuk-frontend@2.9.0",
16
+ "_from": "govuk-frontend@2.10.0",
17
17
  "_hasShrinkwrap": false,
18
- "_id": "govuk-frontend@2.9.0",
18
+ "_id": "govuk-frontend@2.10.0",
19
19
  "_inCache": true,
20
20
  "_location": "/govuk-frontend",
21
21
  "_nodeVersion": "10.15.1",
22
22
  "_npmOperationalInternal": {
23
23
  "host": "s3://npm-registry-packages",
24
- "tmp": "tmp/govuk-frontend_2.9.0_1552926783752_0.3498067304922825"
24
+ "tmp": "tmp/govuk-frontend_2.10.0_1555055585302_0.0635054432296085"
25
25
  },
26
26
  "_npmUser": {
27
27
  "name": "govuk-patterns-and-tools",
@@ -30,21 +30,21 @@
30
30
  "_npmVersion": "6.4.1",
31
31
  "_phantomChildren": {},
32
32
  "_requested": {
33
- "raw": "govuk-frontend@2.9.0",
33
+ "raw": "govuk-frontend@2.10.0",
34
34
  "scope": null,
35
35
  "escapedName": "govuk-frontend",
36
36
  "name": "govuk-frontend",
37
- "rawSpec": "2.9.0",
38
- "spec": "2.9.0",
37
+ "rawSpec": "2.10.0",
38
+ "spec": "2.10.0",
39
39
  "type": "version"
40
40
  },
41
41
  "_requiredBy": [
42
42
  "/"
43
43
  ],
44
- "_resolved": "https://registry.npmjs.org/govuk-frontend/-/govuk-frontend-2.9.0.tgz",
45
- "_shasum": "bc3ee6ee124d19e2d1ff4802c9eb7ea15039a205",
44
+ "_resolved": "https://registry.npmjs.org/govuk-frontend/-/govuk-frontend-2.10.0.tgz",
45
+ "_shasum": "c3302db7187696797ca52541d7cb16cadee7d485",
46
46
  "_shrinkwrap": null,
47
- "_spec": "govuk-frontend@2.9.0",
47
+ "_spec": "govuk-frontend@2.10.0",
48
48
  "_where": "/var/lib/jenkins/workspace/ublishing_components_master-N4FWJIUY4CIFHKGZOAAEVVXODRY3YBORQOPIBBXWX72VUPSGJRRQ",
49
49
  "author": {
50
50
  "name": "GOV.UK Design System Team",
@@ -59,12 +59,12 @@
59
59
  "devDependencies": {},
60
60
  "directories": {},
61
61
  "dist": {
62
- "integrity": "sha512-aE8Jg82H76qpMPKtnnvZbkmDQAzAtuc5uMEffkWo0fv6sWEwTISrqUF5jXWZ8tmtdWF8JGeAp71oSCL2x+RkFg==",
63
- "shasum": "bc3ee6ee124d19e2d1ff4802c9eb7ea15039a205",
64
- "tarball": "https://registry.npmjs.org/govuk-frontend/-/govuk-frontend-2.9.0.tgz",
62
+ "integrity": "sha512-Tfo76yz5ybFMX1heojeiWAyxUx0gABM2/hfMk1zu+9hWvApmfxeTaQOJkje4jeo1ybRo+FhgKFqqAzkBOOUnqg==",
63
+ "shasum": "c3302db7187696797ca52541d7cb16cadee7d485",
64
+ "tarball": "https://registry.npmjs.org/govuk-frontend/-/govuk-frontend-2.10.0.tgz",
65
65
  "fileCount": 257,
66
- "unpackedSize": 1354165,
67
- "npm-signature": "-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcj8hACRA9TVsSAnZWagAA6FcP/16vi1XjsyKkH9TbRauq\nzMzGD3K6jL6Isgudc1leiLlsBV3tIdB/0QE5s3B4gC4qg18QuuYKvIvRgrIe\nv2A8TTrtomGc998YySjReR4J+OGoBe5d8jweRHgu95x5o6nElekZPwJF+ROC\nvJMtoNjz0cnh35MRq/f3m7VYtRnfNIeKbnLkQNfSOEJyKYaw8aEbBPGFWAVd\nZFgswK8IpbJw32eM6R0J/+50Oa2anF67vbV+zw25PFh3IGddKqsbhLp2bPQd\nbYpO9tV5Xc/1gbvXKkyTHCl25gkURrhONmb+EuX0UpBVmyFq/sPjQlWU9cYk\nB5ecmok5MK2AZ4DnhPeqR2uUKRF5nWcb6jN3kQCPusQ0SLTERFYRFbO+SL/b\njq/WmdawYqvta3UrU/jl0XpCXT3B3lRE8ee1zvZ5UOLte7RpZcZfa5BDmp6X\nVz6f53tzY1Ryn96ub3MSumvZ0yforKjy+/XJ51KD7oar26ulTNjUZdBMImha\nUdJgtr573EiHaIfE/EL+UB93X1uJ6OI8dhaDjGRVvaCRgLJdeHrI8oaAJhPP\nMCsBGdkkeydKPYlYGo3sFUMVeyns/45OyL7Mm1xw67I5u/N8O9Uwxocw2MRP\nLDGkk1mD5prJeNZ5BmfaeSS6HZrQHO8lGMEjZW6ccoNjanFTvaVaEsXanl+x\niO8T\r\n=74aj\r\n-----END PGP SIGNATURE-----\r\n"
66
+ "unpackedSize": 1365294,
67
+ "npm-signature": "-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcsEPiCRA9TVsSAnZWagAABYcQAJk38n/9YbuZlUtjPNJq\n08cGptMVEFy4DWvQed/wf0nBmlKX07sWUPwAOs0T2fB9E7jVqfATsG9fOdlT\nzfX6vmrWWMZMZ6TklvDf8qIg6mxp8PGy6yemZoP+maoZ4Ab+fHw54MxU2SIJ\nIPFQ/ky3VthzSZo2jdPiEB0UgmJJEK4wmBITVgp8f8lMukkpSpmHPqWeXEoH\nkec4D/2ga6ICbu1JhdTmwu//P+I0BW8M7Xfv4pCY3tJ56F3ZBIVReM5vfM2p\n4J3tl+2+RNXZ/tERmGUmYg/fp3YNx2hE6EWfpQDTs2bewTf1iYZBV5mExmnv\nNKY3cVC7/gYm49Sc7e3edZAwN7QAgujUrcVcE0h7yWGUcx9dcCqMaHHOcQ1i\nh7bc9V2VCyJs4uaEGc5S5YCE1Jzm0hTV5+bQ4i7oKF9WyEWaYpj+UzOb8h1d\nwzd3Jd9VxnWV4Ahzy1r4hwt0BNrZo+9dB2gcVi/Nb+H5yQdC7CpZm38YVAy1\nsY8X8dMBQPjNdzd9j/fcM3QYlWB2xWqRXAhx/YQhw91TpAsvqPQ1Xeh8NQX8\nHQHtRmXHMgItO72nueLPEyDbgjqGfLIYVSYqdSHytWe7uczcKTg4AQPMWK9K\nZ6/KwDuDCysJngFNfdR7lJPFD1hAucp8fujBuezk48HAr1jbGKrMj2+c/EDT\nRNaI\r\n=YoFh\r\n-----END PGP SIGNATURE-----\r\n"
68
68
  },
69
69
  "engines": {
70
70
  "node": ">= 4.2.0"
@@ -92,5 +92,5 @@
92
92
  "url": "git+https://github.com/alphagov/govuk-frontend.git"
93
93
  },
94
94
  "sass": "all.scss",
95
- "version": "2.9.0"
95
+ "version": "2.10.0"
96
96
  }
@@ -105,6 +105,14 @@ $govuk-border-colour: govuk-colour("grey-2") !default;
105
105
 
106
106
  $govuk-input-border-colour: govuk-colour("black") !default;
107
107
 
108
+ /// Input hover colour
109
+ ///
110
+ /// Used for hover states on form controls
111
+ ///
112
+ /// @type Colour
113
+ /// @access public
114
+
115
+ $govuk-hover-colour: govuk-colour("grey-3") !default;
108
116
 
109
117
 
110
118
  // =============================================================================
@@ -97,3 +97,10 @@ $govuk-border-width-form-group-error: $govuk-border-width !default;
97
97
  /// @access public
98
98
 
99
99
  $govuk-focus-width: 3px !default;
100
+
101
+ /// Hover width for form controls with a hover state
102
+ ///
103
+ /// @type Number
104
+ /// @access public
105
+
106
+ $govuk-hover-width: 10px !default;
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: govuk_publishing_components
3
3
  version: !ruby/object:Gem::Version
4
- version: 16.10.1
4
+ version: 16.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - GOV.UK Dev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-04-09 00:00:00.000000000 Z
11
+ date: 2019-04-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: govspeak