govuk_publishing_components 16.10.1 → 16.11.0

Sign up to get free protection for your applications and to get access to all the features.
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