govuk_design_system_formbuilder 1.2.4 → 2.0.0b2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -2
  3. data/lib/govuk_design_system_formbuilder.rb +1 -1
  4. data/lib/govuk_design_system_formbuilder/base.rb +1 -1
  5. data/lib/govuk_design_system_formbuilder/builder.rb +201 -78
  6. data/lib/govuk_design_system_formbuilder/containers/character_count.rb +2 -2
  7. data/lib/govuk_design_system_formbuilder/containers/check_boxes.rb +13 -12
  8. data/lib/govuk_design_system_formbuilder/containers/check_boxes_fieldset.rb +4 -3
  9. data/lib/govuk_design_system_formbuilder/containers/fieldset.rb +12 -62
  10. data/lib/govuk_design_system_formbuilder/containers/form_group.rb +19 -10
  11. data/lib/govuk_design_system_formbuilder/containers/radio_buttons_fieldset.rb +4 -3
  12. data/lib/govuk_design_system_formbuilder/containers/radios.rb +17 -13
  13. data/lib/govuk_design_system_formbuilder/containers/supplemental.rb +3 -1
  14. data/lib/govuk_design_system_formbuilder/elements/caption.rb +14 -7
  15. data/lib/govuk_design_system_formbuilder/elements/check_boxes/collection.rb +12 -11
  16. data/lib/govuk_design_system_formbuilder/elements/check_boxes/collection_check_box.rb +9 -7
  17. data/lib/govuk_design_system_formbuilder/elements/check_boxes/fieldset_check_box.rb +19 -15
  18. data/lib/govuk_design_system_formbuilder/elements/date.rb +18 -17
  19. data/lib/govuk_design_system_formbuilder/elements/error_message.rb +4 -4
  20. data/lib/govuk_design_system_formbuilder/elements/error_summary.rb +15 -15
  21. data/lib/govuk_design_system_formbuilder/elements/file.rb +11 -10
  22. data/lib/govuk_design_system_formbuilder/elements/hint.rb +37 -10
  23. data/lib/govuk_design_system_formbuilder/elements/inputs/email.rb +2 -2
  24. data/lib/govuk_design_system_formbuilder/elements/inputs/number.rb +0 -2
  25. data/lib/govuk_design_system_formbuilder/elements/inputs/password.rb +0 -2
  26. data/lib/govuk_design_system_formbuilder/elements/inputs/phone.rb +0 -2
  27. data/lib/govuk_design_system_formbuilder/elements/inputs/text.rb +0 -2
  28. data/lib/govuk_design_system_formbuilder/elements/inputs/url.rb +0 -2
  29. data/lib/govuk_design_system_formbuilder/elements/label.rb +28 -22
  30. data/lib/govuk_design_system_formbuilder/elements/legend.rb +87 -0
  31. data/lib/govuk_design_system_formbuilder/elements/radios/collection.rb +14 -13
  32. data/lib/govuk_design_system_formbuilder/elements/radios/collection_radio_button.rb +13 -7
  33. data/lib/govuk_design_system_formbuilder/elements/radios/fieldset_radio_button.rb +15 -7
  34. data/lib/govuk_design_system_formbuilder/elements/select.rb +18 -17
  35. data/lib/govuk_design_system_formbuilder/elements/submit.rb +9 -4
  36. data/lib/govuk_design_system_formbuilder/elements/text_area.rb +10 -9
  37. data/lib/govuk_design_system_formbuilder/traits/caption.rb +1 -9
  38. data/lib/govuk_design_system_formbuilder/traits/collection_item.rb +1 -1
  39. data/lib/govuk_design_system_formbuilder/traits/conditional.rb +1 -1
  40. data/lib/govuk_design_system_formbuilder/traits/hint.rb +15 -2
  41. data/lib/govuk_design_system_formbuilder/traits/input.rb +4 -3
  42. data/lib/govuk_design_system_formbuilder/version.rb +1 -1
  43. metadata +12 -11
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5d0ec456d05c0f92a86c39b688f0ac2a498160f473002f2fb4004567f4b17496
4
- data.tar.gz: 0aa054ef3feb33eaf5b402aaea08ab2942e9b9be6708f04de41c1255e455dc86
3
+ metadata.gz: bd1f1c56336a4852ae5915c148e7c47abeef5590f87fc083437a4f4a680addba
4
+ data.tar.gz: 929a16808249de59a675c3215837e1522d2982a46497fea6b207e90f9c9d8aa0
5
5
  SHA512:
6
- metadata.gz: 8a79e3ac6187857d917f7eb253abfbb414b8ed44a3a4488a29f82052ca234daeba9f1926a0df12697544fa266420ebe8eba8ab26840fe8d371b713d82c2df312
7
- data.tar.gz: 1334ddb5eb6a36dfbcd5b8f91b50548ecfac38481682e683aec5071d2f91b7577f3cadd532c8dd8c1b1c5dba34fa837479ef55d5f63669b15756159e5b9fb5aa
6
+ metadata.gz: ad2ad55fb5f7752862fde79ec8ffcfba5ef9cb1ea20e30b266c7152a7d78eef6fa9f40682f69a7db395b9f8104645735eb71c1efbc538506d3015fb888542932
7
+ data.tar.gz: 2c1d49579c09742a5dc2f8be8ddf7bcee4edb6d2d9d39e610705dfd10efc4bf0df18ad00026cd932d10b790aca1ee93a964079329ee9be0067c4c4f84c84a83a
data/README.md CHANGED
@@ -7,10 +7,10 @@
7
7
  [![Test Coverage](https://api.codeclimate.com/v1/badges/fde73b5dc9476197281b/test_coverage)](https://codeclimate.com/github/DFE-Digital/govuk_design_system_formbuilder/test_coverage)
8
8
  [![Dependabot Status](https://api.dependabot.com/badges/status?host=github&repo=DFE-Digital/govuk_design_system_formbuilder)](https://dependabot.com)
9
9
  [![GitHub license](https://img.shields.io/github/license/DFE-Digital/govuk_design_system_formbuilder)](https://github.com/DFE-Digital/govuk_design_system_formbuilder/blob/master/LICENSE)
10
- [![GOV.UK Design System Version](https://img.shields.io/badge/GOV.UK%20Design%20System-3.7.0-brightgreen)](https://design-system.service.gov.uk)
10
+ [![GOV.UK Design System Version](https://img.shields.io/badge/GOV.UK%20Design%20System-3.8.1-brightgreen)](https://design-system.service.gov.uk)
11
11
 
12
12
  This gem provides a easy-to-use form builder that generates forms that are
13
- fully-compliant with version 3.7.0 of the [GOV.UK Design System](https://design-system.service.gov.uk/),
13
+ fully-compliant with version 3.8.1 of the [GOV.UK Design System](https://design-system.service.gov.uk/),
14
14
  minimising the amount of markup you need to write.
15
15
 
16
16
  In addition to the basic markup, the more-advanced functionality of the Design
@@ -88,7 +88,7 @@ module GOVUKDesignSystemFormBuilder
88
88
  end
89
89
 
90
90
  class FormBuilder < ActionView::Helpers::FormBuilder
91
- delegate :content_tag, :tag, :safe_join, :safe_concat, :capture, :link_to, :raw, to: :@template
91
+ delegate :content_tag, :tag, :safe_join, :link_to, :capture, to: :@template
92
92
 
93
93
  include GOVUKDesignSystemFormBuilder::Builder
94
94
  end
@@ -8,7 +8,7 @@ module GOVUKDesignSystemFormBuilder
8
8
  end
9
9
 
10
10
  class Base
11
- delegate :capture, :content_tag, :safe_join, :tag, :raw, :link_to, to: :@builder
11
+ delegate :content_tag, :safe_join, :tag, :link_to, :capture, to: :@builder
12
12
  delegate :config, to: GOVUKDesignSystemFormBuilder
13
13
 
14
14
  def initialize(builder, object_name, attribute_name, &block)
@@ -5,7 +5,11 @@ module GOVUKDesignSystemFormBuilder
5
5
  # Generates a input of type +text+
6
6
  #
7
7
  # @param attribute_name [Symbol] The name of the attribute
8
- # @param hint_text [String] The content of the hint. No hint will be injected if left +nil+
8
+ # @param hint [Hash,Proc] The content of the hint. No hint will be added if 'text' is left +nil+. When a +Proc+ is
9
+ # supplied the hint will be wrapped in a +div+ instead of a +span+
10
+ # @option hint text [String] the hint text
11
+ # @option hint kwargs [Hash] additional arguments are applied as attributes to the hint
12
+ #
9
13
  # @param width [Integer,String] sets the width of the input, can be +2+, +3+ +4+, +5+, +10+ or +20+ characters
10
14
  # or +one-quarter+, +one-third+, +one-half+, +two-thirds+ or +full+ width of the container
11
15
  # @param label [Hash,Proc] configures or sets the associated label content
@@ -13,10 +17,15 @@ module GOVUKDesignSystemFormBuilder
13
17
  # @option label size [String] the size of the label font, can be +xl+, +l+, +m+, +s+ or nil
14
18
  # @option label tag [Symbol,String] the label's wrapper tag, intended to allow labels to act as page headings
15
19
  # @option label hidden [Boolean] control the visability of the label. Hidden labels will stil be read by screenreaders
20
+ # @option label kwargs [Hash] additional arguments are applied as attributes on the +label+ element
16
21
  # @param caption [Hash] configures or sets the caption content which is inserted above the label
17
22
  # @option caption text [String] the caption text
18
23
  # @option caption size [String] the size of the caption, can be +xl+, +l+ or +m+. Defaults to +m+
19
- # @option args [Hash] args additional arguments are applied as attributes to the +input+ element
24
+ # @option caption kwargs [Hash] additional arguments are applied as attributes on the caption +span+ element
25
+ # @option kwargs [Hash] kwargs additional arguments are applied as attributes to the +input+ element
26
+ # @param form_group [Hash] configures the form group
27
+ # @option form_group classes [Array,String] sets the form group's classes
28
+ # @option form_group kwargs [Hash] additional attributes added to the form group
20
29
  # @param block [Block] arbitrary HTML that will be rendered between the hint and the input
21
30
  # @return [ActiveSupport::SafeBuffer] HTML output
22
31
  # @see https://design-system.service.gov.uk/components/text-input/ GOV.UK Text input
@@ -25,7 +34,7 @@ module GOVUKDesignSystemFormBuilder
25
34
  # @example A required full name field with a placeholder
26
35
  # = f.govuk_text_field :name,
27
36
  # label: { text: 'Full name' },
28
- # hint_text: 'It says it on your birth certificate',
37
+ # hint: { text: 'It says it on your birth certificate' },
29
38
  # required: true,
30
39
  # placeholder: 'Ralph Wiggum'
31
40
  #
@@ -40,14 +49,17 @@ module GOVUKDesignSystemFormBuilder
40
49
  # = f.govuk_text_field :callsign,
41
50
  # label: -> { tag.h3('Call-sign') }
42
51
  #
43
- def govuk_text_field(attribute_name, hint_text: nil, label: {}, caption: {}, width: nil, **args, &block)
44
- Elements::Inputs::Text.new(self, object_name, attribute_name, hint_text: hint_text, label: label, caption: caption, width: width, **args, &block).html
52
+ def govuk_text_field(attribute_name, hint: {}, label: {}, caption: {}, width: nil, form_group: {}, **kwargs, &block)
53
+ Elements::Inputs::Text.new(self, object_name, attribute_name, hint: hint, label: label, caption: caption, width: width, form_group: form_group, **kwargs, &block).html
45
54
  end
46
55
 
47
56
  # Generates a input of type +tel+
48
57
  #
49
58
  # @param attribute_name [Symbol] The name of the attribute
50
- # @param hint_text [String] The content of the hint. No hint will be injected if left +nil+
59
+ # @param hint [Hash,Proc] The content of the hint. No hint will be added if 'text' is left +nil+. When a +Proc+ is
60
+ # supplied the hint will be wrapped in a +div+ instead of a +span+
61
+ # @option hint text [String] the hint text
62
+ # @option hint kwargs [Hash] additional arguments are applied as attributes to the hint
51
63
  # @param width [Integer,String] sets the width of the input, can be +2+, +3+ +4+, +5+, +10+ or +20+ characters
52
64
  # or +one-quarter+, +one-third+, +one-half+, +two-thirds+ or +full+ width of the container
53
65
  # @param label [Hash,Proc] configures or sets the associated label content
@@ -55,10 +67,15 @@ module GOVUKDesignSystemFormBuilder
55
67
  # @option label size [String] the size of the label font, can be +xl+, +l+, +m+, +s+ or nil
56
68
  # @option label tag [Symbol,String] the label's wrapper tag, intended to allow labels to act as page headings
57
69
  # @option label hidden [Boolean] control the visability of the label. Hidden labels will stil be read by screenreaders
70
+ # @option label kwargs [Hash] additional arguments are applied as attributes on the +label+ element
58
71
  # @param caption [Hash] configures or sets the caption content which is inserted above the label
59
72
  # @option caption text [String] the caption text
60
73
  # @option caption size [String] the size of the caption, can be +xl+, +l+ or +m+. Defaults to +m+
61
- # @option args [Hash] args additional arguments are applied as attributes to the +input+ element
74
+ # @option caption kwargs [Hash] additional arguments are applied as attributes on the caption +span+ element
75
+ # @option kwargs [Hash] kwargs additional arguments are applied as attributes to the +input+ element
76
+ # @param form_group [Hash] configures the form group
77
+ # @option form_group classes [Array,String] sets the form group's classes
78
+ # @option form_group kwargs [Hash] additional attributes added to the form group
62
79
  # @param block [Block] arbitrary HTML that will be rendered between the hint and the input
63
80
  # @return [ActiveSupport::SafeBuffer] HTML output
64
81
  # @see https://design-system.service.gov.uk/components/text-input/ GOV.UK Text input
@@ -68,7 +85,7 @@ module GOVUKDesignSystemFormBuilder
68
85
  # @example A required phone number field with a placeholder
69
86
  # = f.govuk_phone_field :phone_number,
70
87
  # label: { text: 'UK telephone number' },
71
- # hint_text: 'Include the dialling code',
88
+ # hint: { text: 'Include the dialling code' },
72
89
  # required: true,
73
90
  # placeholder: '0123 456 789'
74
91
  #
@@ -83,14 +100,17 @@ module GOVUKDesignSystemFormBuilder
83
100
  # = f.govuk_phone_field :work_number,
84
101
  # label: -> { tag.h3('Work number') }
85
102
  #
86
- def govuk_phone_field(attribute_name, hint_text: nil, label: {}, caption: {}, width: nil, **args, &block)
87
- Elements::Inputs::Phone.new(self, object_name, attribute_name, hint_text: hint_text, label: label, caption: caption, width: width, **args, &block).html
103
+ def govuk_phone_field(attribute_name, hint: {}, label: {}, caption: {}, width: nil, form_group: {}, **kwargs, &block)
104
+ Elements::Inputs::Phone.new(self, object_name, attribute_name, hint: hint, label: label, caption: caption, width: width, form_group: form_group, **kwargs, &block).html
88
105
  end
89
106
 
90
107
  # Generates a input of type +email+
91
108
  #
92
109
  # @param attribute_name [Symbol] The name of the attribute
93
- # @param hint_text [String] The content of the hint. No hint will be injected if left +nil+
110
+ # @param hint [Hash,Proc] The content of the hint. No hint will be added if 'text' is left +nil+. When a +Proc+ is
111
+ # supplied the hint will be wrapped in a +div+ instead of a +span+
112
+ # @option hint text [String] the hint text
113
+ # @option hint kwargs [Hash] additional arguments are applied as attributes to the hint
94
114
  # @param width [Integer,String] sets the width of the input, can be +2+, +3+ +4+, +5+, +10+ or +20+ characters
95
115
  # or +one-quarter+, +one-third+, +one-half+, +two-thirds+ or +full+ width of the container
96
116
  # @param label [Hash,Proc] configures or sets the associated label content
@@ -98,10 +118,15 @@ module GOVUKDesignSystemFormBuilder
98
118
  # @option label size [String] the size of the label font, can be +xl+, +l+, +m+, +s+ or nil
99
119
  # @option label tag [Symbol,String] the label's wrapper tag, intended to allow labels to act as page headings
100
120
  # @option label hidden [Boolean] control the visability of the label. Hidden labels will stil be read by screenreaders
121
+ # @option label kwargs [Hash] additional arguments are applied as attributes on the +label+ element
101
122
  # @param caption [Hash] configures or sets the caption content which is inserted above the label
102
123
  # @option caption text [String] the caption text
103
124
  # @option caption size [String] the size of the caption, can be +xl+, +l+ or +m+. Defaults to +m+
104
- # @option args [Hash] args additional arguments are applied as attributes to the +input+ element
125
+ # @option caption kwargs [Hash] additional arguments are applied as attributes on the caption +span+ element
126
+ # @option kwargs [Hash] kwargs additional arguments are applied as attributes to the +input+ element
127
+ # @param form_group [Hash] configures the form group
128
+ # @option form_group classes [Array,String] sets the form group's classes
129
+ # @option form_group kwargs [Hash] additional attributes added to the form group
105
130
  # @param block [Block] arbitrary HTML that will be rendered between the hint and the input
106
131
  # @return [ActiveSupport::SafeBuffer] HTML output
107
132
  # @see https://design-system.service.gov.uk/components/text-input/ GOV.UK Text input
@@ -124,14 +149,17 @@ module GOVUKDesignSystemFormBuilder
124
149
  # = f.govuk_email_field :personal_email,
125
150
  # label: -> { tag.h3('Personal email address') }
126
151
  #
127
- def govuk_email_field(attribute_name, hint_text: nil, label: {}, caption: {}, width: nil, **args, &block)
128
- Elements::Inputs::Email.new(self, object_name, attribute_name, hint_text: hint_text, label: label, caption: caption, width: width, **args, &block).html
152
+ def govuk_email_field(attribute_name, hint: {}, label: {}, caption: {}, width: nil, form_group: {}, **kwargs, &block)
153
+ Elements::Inputs::Email.new(self, object_name, attribute_name, hint: hint, label: label, caption: caption, width: width, form_group: form_group, **kwargs, &block).html
129
154
  end
130
155
 
131
156
  # Generates a input of type +password+
132
157
  #
133
158
  # @param attribute_name [Symbol] The name of the attribute
134
- # @param hint_text [String] The content of the hint. No hint will be injected if left +nil+
159
+ # @param hint [Hash,Proc] The content of the hint. No hint will be added if 'text' is left +nil+. When a +Proc+ is
160
+ # supplied the hint will be wrapped in a +div+ instead of a +span+
161
+ # @option hint text [String] the hint text
162
+ # @option hint kwargs [Hash] additional arguments are applied as attributes to the hint
135
163
  # @param width [Integer,String] sets the width of the input, can be +2+, +3+ +4+, +5+, +10+ or +20+ characters
136
164
  # or +one-quarter+, +one-third+, +one-half+, +two-thirds+ or +full+ width of the container
137
165
  # @param label [Hash,Proc] configures or sets the associated label content
@@ -139,10 +167,15 @@ module GOVUKDesignSystemFormBuilder
139
167
  # @option label size [String] the size of the label font, can be +xl+, +l+, +m+, +s+ or nil
140
168
  # @option label tag [Symbol,String] the label's wrapper tag, intended to allow labels to act as page headings
141
169
  # @option label hidden [Boolean] control the visability of the label. Hidden labels will stil be read by screenreaders
170
+ # @option label kwargs [Hash] additional arguments are applied as attributes on the +label+ element
142
171
  # @param caption [Hash] configures or sets the caption content which is inserted above the label
143
172
  # @option caption text [String] the caption text
144
173
  # @option caption size [String] the size of the caption, can be +xl+, +l+ or +m+. Defaults to +m+
145
- # @option args [Hash] args additional arguments are applied as attributes to the +input+ element
174
+ # @option caption kwargs [Hash] additional arguments are applied as attributes on the caption +span+ element
175
+ # @option kwargs [Hash] kwargs additional arguments are applied as attributes to the +input+ element
176
+ # @param form_group [Hash] configures the form group
177
+ # @option form_group classes [Array,String] sets the form group's classes
178
+ # @option form_group kwargs [Hash] additional attributes added to the form group
146
179
  # @param block [Block] arbitrary HTML that will be rendered between the hint and the input
147
180
  # @return [ActiveSupport::SafeBuffer] HTML output
148
181
  # @see https://design-system.service.gov.uk/components/text-input/ GOV.UK Text input
@@ -164,14 +197,17 @@ module GOVUKDesignSystemFormBuilder
164
197
  # = f.govuk_password_field :passcode,
165
198
  # label: -> { tag.h3('What is your secret pass code?') }
166
199
  #
167
- def govuk_password_field(attribute_name, hint_text: nil, label: {}, width: nil, caption: {}, **args, &block)
168
- Elements::Inputs::Password.new(self, object_name, attribute_name, hint_text: hint_text, label: label, caption: caption, width: width, **args, &block).html
200
+ def govuk_password_field(attribute_name, hint: {}, label: {}, width: nil, form_group: {}, caption: {}, **kwargs, &block)
201
+ Elements::Inputs::Password.new(self, object_name, attribute_name, hint: hint, label: label, caption: caption, width: width, form_group: form_group, **kwargs, &block).html
169
202
  end
170
203
 
171
204
  # Generates a input of type +url+
172
205
  #
173
206
  # @param attribute_name [Symbol] The name of the attribute
174
- # @param hint_text [String] The content of the hint. No hint will be injected if left +nil+
207
+ # @param hint [Hash,Proc] The content of the hint. No hint will be added if 'text' is left +nil+. When a +Proc+ is
208
+ # supplied the hint will be wrapped in a +div+ instead of a +span+
209
+ # @option hint text [String] the hint text
210
+ # @option hint kwargs [Hash] additional arguments are applied as attributes to the hint
175
211
  # @param width [Integer,String] sets the width of the input, can be +2+, +3+ +4+, +5+, +10+ or +20+ characters
176
212
  # or +one-quarter+, +one-third+, +one-half+, +two-thirds+ or +full+ width of the container
177
213
  # @param label [Hash,Proc] configures or sets the associated label content
@@ -179,10 +215,15 @@ module GOVUKDesignSystemFormBuilder
179
215
  # @option label size [String] the size of the label font, can be +xl+, +l+, +m+, +s+ or nil
180
216
  # @option label tag [Symbol,String] the label's wrapper tag, intended to allow labels to act as page headings
181
217
  # @option label hidden [Boolean] control the visability of the label. Hidden labels will stil be read by screenreaders
218
+ # @option label kwargs [Hash] additional arguments are applied as attributes on the +label+ element
182
219
  # @param caption [Hash] configures or sets the caption content which is inserted above the label
183
220
  # @option caption text [String] the caption text
184
221
  # @option caption size [String] the size of the caption, can be +xl+, +l+ or +m+. Defaults to +m+
185
- # @option args [Hash] args additional arguments are applied as attributes to the +input+ element
222
+ # @option caption kwargs [Hash] additional arguments are applied as attributes on the caption +span+ element
223
+ # @option kwargs [Hash] kwargs additional arguments are applied as attributes to the +input+ element
224
+ # @param form_group [Hash] configures the form group
225
+ # @option form_group classes [Array,String] sets the form group's classes
226
+ # @option form_group kwargs [Hash] additional attributes added to the form group
186
227
  # @param block [Block] arbitrary HTML that will be rendered between the hint and the input
187
228
  # @return [ActiveSupport::SafeBuffer] HTML output
188
229
  # @see https://design-system.service.gov.uk/components/text-input/ GOV.UK Text input
@@ -205,14 +246,17 @@ module GOVUKDesignSystemFormBuilder
205
246
  # = f.govuk_url_field :work_website,
206
247
  # label: -> { tag.h3("Enter your company's website") }
207
248
  #
208
- def govuk_url_field(attribute_name, hint_text: nil, label: {}, caption: {}, width: nil, **args, &block)
209
- Elements::Inputs::URL.new(self, object_name, attribute_name, hint_text: hint_text, label: label, caption: caption, width: width, **args, &block).html
249
+ def govuk_url_field(attribute_name, hint: {}, label: {}, caption: {}, width: nil, form_group: {}, **kwargs, &block)
250
+ Elements::Inputs::URL.new(self, object_name, attribute_name, hint: hint, label: label, caption: caption, width: width, form_group: form_group, **kwargs, &block).html
210
251
  end
211
252
 
212
253
  # Generates a input of type +number+
213
254
  #
214
255
  # @param attribute_name [Symbol] The name of the attribute
215
- # @param hint_text [String] The content of the hint. No hint will be injected if left +nil+
256
+ # @param hint [Hash,Proc] The content of the hint. No hint will be added if 'text' is left +nil+. When a +Proc+ is
257
+ # supplied the hint will be wrapped in a +div+ instead of a +span+
258
+ # @option hint text [String] the hint text
259
+ # @option hint kwargs [Hash] additional arguments are applied as attributes to the hint
216
260
  # @param width [Integer,String] sets the width of the input, can be +2+, +3+ +4+, +5+, +10+ or +20+ characters
217
261
  # or +one-quarter+, +one-third+, +one-half+, +two-thirds+ or +full+ width of the container
218
262
  # @param label [Hash,Proc] configures or sets the associated label content
@@ -220,10 +264,15 @@ module GOVUKDesignSystemFormBuilder
220
264
  # @option label size [String] the size of the label font, can be +xl+, +l+, +m+, +s+ or nil
221
265
  # @option label tag [Symbol,String] the label's wrapper tag, intended to allow labels to act as page headings
222
266
  # @option label hidden [Boolean] control the visability of the label. Hidden labels will stil be read by screenreaders
267
+ # @option label kwargs [Hash] additional arguments are applied as attributes on the +label+ element
223
268
  # @param caption [Hash] configures or sets the caption content which is inserted above the label
224
269
  # @option caption text [String] the caption text
225
270
  # @option caption size [String] the size of the caption, can be +xl+, +l+ or +m+. Defaults to +m+
226
- # @option args [Hash] args additional arguments are applied as attributes to the +input+ element
271
+ # @option caption kwargs [Hash] additional arguments are applied as attributes on the caption +span+ element
272
+ # @option kwargs [Hash] kwargs additional arguments are applied as attributes to the +input+ element
273
+ # @param form_group [Hash] configures the form group
274
+ # @option form_group classes [Array,String] sets the form group's classes
275
+ # @option form_group kwargs [Hash] additional attributes added to the form group
227
276
  # @param block [Block] arbitrary HTML that will be rendered between the hint and the input
228
277
  # @return [ActiveSupport::SafeBuffer] HTML output
229
278
  # @see https://design-system.service.gov.uk/components/text-input/ GOV.UK Text input
@@ -249,8 +298,8 @@ module GOVUKDesignSystemFormBuilder
249
298
  # = f.govuk_url_field :personal_best_over_100m,
250
299
  # label: -> { tag.h3("How many seconds does it take you to run 100m?") }
251
300
  #
252
- def govuk_number_field(attribute_name, hint_text: nil, label: {}, caption: {}, width: nil, **args, &block)
253
- Elements::Inputs::Number.new(self, object_name, attribute_name, hint_text: hint_text, label: label, caption: caption, width: width, **args, &block).html
301
+ def govuk_number_field(attribute_name, hint: {}, label: {}, caption: {}, width: nil, form_group: {}, **kwargs, &block)
302
+ Elements::Inputs::Number.new(self, object_name, attribute_name, hint: hint, label: label, caption: caption, width: width, form_group: form_group, **kwargs, &block).html
254
303
  end
255
304
 
256
305
  # Generates a +textarea+ element with a label, optional hint. Also offers
@@ -258,20 +307,28 @@ module GOVUKDesignSystemFormBuilder
258
307
  # automatically
259
308
  #
260
309
  # @param attribute_name [Symbol] The name of the attribute
261
- # @param hint_text [String] The content of the hint. No hint will be injected if left +nil+
310
+ # @param hint [Hash,Proc] The content of the hint. No hint will be added if 'text' is left +nil+. When a +Proc+ is
311
+ # supplied the hint will be wrapped in a +div+ instead of a +span+
312
+ # @option hint text [String] the hint text
313
+ # @option hint kwargs [Hash] additional arguments are applied as attributes to the hint
262
314
  # @param label [Hash,Proc] configures or sets the associated label content
263
315
  # @option label text [String] the label text
264
316
  # @option label size [String] the size of the label font, can be +xl+, +l+, +m+, +s+ or nil
265
317
  # @option label tag [Symbol,String] the label's wrapper tag, intended to allow labels to act as page headings
266
318
  # @option label hidden [Boolean] control the visability of the label. Hidden labels will stil be read by screenreaders
319
+ # @option label kwargs [Hash] additional arguments are applied as attributes on the +label+ element
267
320
  # @param caption [Hash] configures or sets the caption content which is inserted above the label
268
321
  # @option caption text [String] the caption text
269
322
  # @option caption size [String] the size of the caption, can be +xl+, +l+ or +m+. Defaults to +m+
323
+ # @option caption kwargs [Hash] additional arguments are applied as attributes on the caption +span+ element
270
324
  # @param max_words [Integer] adds the GOV.UK max word count
271
325
  # @param max_chars [Integer] adds the GOV.UK max characters count
272
326
  # @param threshold [Integer] only show the +max_words+ and +max_chars+ warnings once a threshold (percentage) is reached
273
327
  # @param rows [Integer] sets the initial number of rows
274
- # @option args [Hash] args additional arguments are applied as attributes to the +textarea+ element
328
+ # @option kwargs [Hash] kwargs additional arguments are applied as attributes to the +textarea+ element
329
+ # @param form_group [Hash] configures the form group
330
+ # @option form_group classes [Array,String] sets the form group's classes
331
+ # @option form_group kwargs [Hash] additional attributes added to the form group
275
332
  # @param block [Block] arbitrary HTML that will be rendered between the hint and the input
276
333
  # @return [ActiveSupport::SafeBuffer] HTML output
277
334
  # @see https://design-system.service.gov.uk/components/textarea/ GOV.UK text area component
@@ -297,8 +354,8 @@ module GOVUKDesignSystemFormBuilder
297
354
  # = f.govuk_text_area :instructions,
298
355
  # label: -> { tag.h3("How do you set it up?") }
299
356
  #
300
- def govuk_text_area(attribute_name, hint_text: nil, label: {}, caption: {}, max_words: nil, max_chars: nil, rows: 5, threshold: nil, **args, &block)
301
- Elements::TextArea.new(self, object_name, attribute_name, hint_text: hint_text, label: label, caption: caption, max_words: max_words, max_chars: max_chars, rows: rows, threshold: threshold, **args, &block).html
357
+ def govuk_text_area(attribute_name, hint: {}, label: {}, caption: {}, max_words: nil, max_chars: nil, rows: 5, threshold: nil, form_group: {}, **kwargs, &block)
358
+ Elements::TextArea.new(self, object_name, attribute_name, hint: hint, label: label, caption: caption, max_words: max_words, max_chars: max_chars, rows: rows, threshold: threshold, form_group: form_group, **kwargs, &block).html
302
359
  end
303
360
 
304
361
  # Generates a +select+ element containing +option+ for each member in the provided collection
@@ -307,13 +364,20 @@ module GOVUKDesignSystemFormBuilder
307
364
  # @param collection [Enumerable<Object>] Options to be added to the +select+ element
308
365
  # @param value_method [Symbol] The method called against each member of the collection to provide the value
309
366
  # @param text_method [Symbol] The method called against each member of the collection to provide the text
310
- # @param hint_text [String] The content of the hint. No hint will be injected if left +nil+
367
+ # @param hint [Hash,Proc] The content of the hint. No hint will be added if 'text' is left +nil+. When a +Proc+ is
368
+ # supplied the hint will be wrapped in a +div+ instead of a +span+
369
+ # @option hint text [String] the hint text
370
+ # @option hint kwargs [Hash] additional arguments are applied as attributes to the hint
311
371
  # @option label text [String] the label text
312
372
  # @option label size [String] the size of the label font, can be +xl+, +l+, +m+, +s+ or nil
313
373
  # @option label tag [Symbol,String] the label's wrapper tag, intended to allow labels to act as page headings
314
374
  # @option label hidden [Boolean] control the visability of the label. Hidden labels will stil be read by screenreaders
375
+ # @option label kwargs [Hash] additional arguments are applied as attributes on the +label+ element
315
376
  # @param options [Hash] Options hash passed through to Rails' +collection_select+ helper
316
377
  # @param html_options [Hash] HTML Options hash passed through to Rails' +collection_select+ helper
378
+ # @param form_group [Hash] configures the form group
379
+ # @option form_group classes [Array,String] sets the form group's classes
380
+ # @option form_group kwargs [Hash] additional attributes added to the form group
317
381
  # @param block [Block] arbitrary HTML that will be rendered between the hint and the input
318
382
  # @see https://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#method-i-collection_select Rails collection_select (called by govuk_collection_select)
319
383
  # @return [ActiveSupport::SafeBuffer] HTML output
@@ -323,7 +387,7 @@ module GOVUKDesignSystemFormBuilder
323
387
  # @grades,
324
388
  # :id,
325
389
  # :name,
326
- # hint_text: "If you took the test more than once enter your highest grade"
390
+ # hint: { text: "If you took the test more than once enter your highest grade" }
327
391
  #
328
392
  # @example A select box with injected content
329
393
  # = f.govuk_collection_select(:favourite_colour, @colours, :id, :name) do
@@ -335,7 +399,7 @@ module GOVUKDesignSystemFormBuilder
335
399
  # = f.govuk_collection_select(:team, @teams, :id, :name) do
336
400
  # label: -> { tag.h3("Which team did you represent?") }
337
401
  #
338
- def govuk_collection_select(attribute_name, collection, value_method, text_method, options: {}, html_options: {}, hint_text: nil, label: {}, caption: {}, &block)
402
+ def govuk_collection_select(attribute_name, collection, value_method, text_method, options: {}, html_options: {}, hint: {}, label: {}, caption: {}, form_group: {}, &block)
339
403
  Elements::Select.new(
340
404
  self,
341
405
  object_name,
@@ -343,11 +407,12 @@ module GOVUKDesignSystemFormBuilder
343
407
  collection,
344
408
  value_method: value_method,
345
409
  text_method: text_method,
346
- hint_text: hint_text,
410
+ hint: hint,
347
411
  label: label,
348
412
  caption: caption,
349
413
  options: options,
350
414
  html_options: html_options,
415
+ form_group: form_group,
351
416
  &block
352
417
  ).html
353
418
  end
@@ -371,19 +436,24 @@ module GOVUKDesignSystemFormBuilder
371
436
  # @param hint_method [Symbol, Proc, nil] The method called against each member of the collection to provide the hint text.
372
437
  # When a +Proc+ is provided it must take a single argument that is a single member of the collection.
373
438
  # When a +nil+ value is provided the hint text will be retrieved from the locale. This is the default and param can be omitted.
374
- # @param hint_text [String] The content of the fieldset hint. No hint will be injected if left +nil+
375
- # @param legend [Hash,Proc] options for configuring the legend
439
+ # @param hint [Hash,Proc] The content of the hint. No hint will be added if 'text' is left +nil+. When a +Proc+ is
440
+ # supplied the hint will be wrapped in a +div+ instead of a +span+
441
+ # @option hint text [String] the hint text
442
+ # @option hint kwargs [Hash] additional arguments are applied as attributes to the hint
443
+ # @param legend [NilClass,Hash,Proc] options for configuring the legend. Legend will be omitted if +nil+.
376
444
  # @param inline [Boolean] controls whether the radio buttons are displayed inline or not
377
445
  # @param small [Boolean] controls whether small radio buttons are used instead of regular-sized ones
378
446
  # @param bold_labels [Boolean] controls whether the radio button labels are bold
379
- # @param classes [String] Classes to add to the radio button container.
447
+ # @param classes [Array,String] Classes to add to the radio button container.
380
448
  # @option legend text [String] the fieldset legend's text content
381
449
  # @option legend size [String] the size of the fieldset legend font, can be +xl+, +l+, +m+ or +s+
382
450
  # @option legend tag [Symbol,String] the tag used for the fieldset's header, defaults to +h1+
383
451
  # @option legend hidden [Boolean] control the visibility of the legend. Hidden legends will still be read by screenreaders
452
+ # @option legend kwargs [Hash] additional arguments are applied as attributes on the +legend+ element
384
453
  # @param caption [Hash] configures or sets the caption content which is inserted above the legend
385
454
  # @option caption text [String] the caption text
386
455
  # @option caption size [String] the size of the caption, can be +xl+, +l+ or +m+. Defaults to +m+
456
+ # @option caption kwargs [Hash] additional arguments are applied as attributes on the caption +span+ element
387
457
  # @return [ActiveSupport::SafeBuffer] HTML output
388
458
  #
389
459
  # @example A collection of radio buttons for favourite colours, labels capitalised via a proc
@@ -399,7 +469,7 @@ module GOVUKDesignSystemFormBuilder
399
469
  # ->(option) { option.name.upcase },
400
470
  # :description,
401
471
  # legend: { text: 'Pick your favourite colour', size: 'm' },
402
- # hint_text: 'If you cannot find the exact match choose something close',
472
+ # hint: { text: 'If you cannot find the exact match choose something close' },
403
473
  # inline: false
404
474
  #
405
475
  # @example A collection of radio buttons for grades with injected content
@@ -418,7 +488,7 @@ module GOVUKDesignSystemFormBuilder
418
488
  # :name,
419
489
  # legend: -> { tag.h3('Which category do you belong to?') }
420
490
  #
421
- def govuk_collection_radio_buttons(attribute_name, collection, value_method, text_method, hint_method = nil, hint_text: nil, legend: {}, caption: {}, inline: false, small: false, bold_labels: false, classes: nil, &block)
491
+ def govuk_collection_radio_buttons(attribute_name, collection, value_method, text_method, hint_method = nil, hint: {}, legend: {}, caption: {}, inline: false, small: false, bold_labels: false, classes: nil, form_group: {}, &block)
422
492
  Elements::Radios::Collection.new(
423
493
  self,
424
494
  object_name,
@@ -427,13 +497,14 @@ module GOVUKDesignSystemFormBuilder
427
497
  value_method: value_method,
428
498
  text_method: text_method,
429
499
  hint_method: hint_method,
430
- hint_text: hint_text,
500
+ hint: hint,
431
501
  legend: legend,
432
502
  caption: caption,
433
503
  inline: inline,
434
504
  small: small,
435
505
  bold_labels: bold_labels,
436
506
  classes: classes,
507
+ form_group: form_group,
437
508
  &block
438
509
  ).html
439
510
  end
@@ -446,19 +517,27 @@ module GOVUKDesignSystemFormBuilder
446
517
  # is set to +link_errors: true+
447
518
  #
448
519
  # @param attribute_name [Symbol] The name of the attribute
449
- # @param hint_text [String] The content of the fieldset hint. No hint will be injected if left +nil+
450
- # @param legend [Hash,Proc] options for configuring the legend
520
+ # @param hint [Hash,Proc] The content of the hint. No hint will be added if 'text' is left +nil+. When a +Proc+ is
521
+ # supplied the hint will be wrapped in a +div+ instead of a +span+
522
+ # @option hint text [String] the hint text
523
+ # @option hint kwargs [Hash] additional arguments are applied as attributes to the hint
524
+ # @param legend [NilClass,Hash,Proc] options for configuring the legend. Legend will be omitted if +nil+.
451
525
  # @param inline [Boolean] controls whether the radio buttons are displayed inline or not
452
526
  # @param small [Boolean] controls whether small radio buttons are used instead of regular-sized ones
453
527
  # @option legend text [String] the fieldset legend's text content
454
528
  # @option legend size [String] the size of the fieldset legend font, can be +xl+, +l+, +m+ or +s+
455
529
  # @option legend tag [Symbol,String] the tag used for the fieldset's header, defaults to +h1+
456
530
  # @option legend hidden [Boolean] control the visibility of the legend. Hidden legends will still be read by screenreaders
531
+ # @option legend kwargs [Hash] additional arguments are applied as attributes on the +legend+ element
457
532
  # @param caption [Hash] configures or sets the caption content which is inserted above the legend
458
533
  # @option caption text [String] the caption text
459
534
  # @option caption size [String] the size of the caption, can be +xl+, +l+ or +m+. Defaults to +m+
535
+ # @option caption kwargs [Hash] additional arguments are applied as attributes on the caption +span+ element
536
+ # @param form_group [Hash] configures the form group
537
+ # @option form_group classes [Array,String] sets the form group's classes
538
+ # @option form_group kwargs [Hash] additional attributes added to the form group
460
539
  # @param block [Block] a block of HTML that will be used to populate the fieldset
461
- # @param classes [String] Classes to add to the radio button container.
540
+ # @param classes [Array,String] Classes to add to the radio button container.
462
541
  # @see https://design-system.service.gov.uk/components/radios/ GOV.UK Radios
463
542
  # @see https://design-system.service.gov.uk/styles/typography/#headings-with-captions Headings with captions
464
543
  # @return [ActiveSupport::SafeBuffer] HTML output
@@ -480,19 +559,24 @@ module GOVUKDesignSystemFormBuilder
480
559
  # = f.govuk_radio_button :burger_id, :regular, label: { text: 'Hamburger' }, link_errors: true
481
560
  # = f.govuk_radio_button :burger_id, :cheese, label: { text: 'Cheeseburger' }
482
561
  #
483
- def govuk_radio_buttons_fieldset(attribute_name, hint_text: nil, legend: {}, caption: {}, inline: false, small: false, classes: nil, &block)
484
- Containers::RadioButtonsFieldset.new(self, object_name, attribute_name, hint_text: hint_text, legend: legend, caption: caption, inline: inline, small: small, classes: classes, &block).html
562
+ def govuk_radio_buttons_fieldset(attribute_name, hint: {}, legend: {}, caption: {}, inline: false, small: false, classes: nil, form_group: {}, &block)
563
+ Containers::RadioButtonsFieldset.new(self, object_name, attribute_name, hint: hint, legend: legend, caption: caption, inline: inline, small: small, classes: classes, form_group: form_group, &block).html
485
564
  end
486
565
 
487
566
  # Generates a radio button
488
567
  #
489
568
  # @note This should only be used from within a {#govuk_radio_buttons_fieldset}
490
569
  # @param attribute_name [Symbol] The name of the attribute
491
- # @param hint_text [String] the contents of the hint
492
- # @option legend text [String] the fieldset legend's text content
493
- # @option legend size [String] the size of the fieldset legend font, can be +xl+, +l+, +m+ or +s+
494
- # @option legend tag [Symbol,String] the tag used for the fieldset's header, defaults to +h1+
495
- # @option legend hidden [Boolean] control the visibility of the legend. Hidden legends will still be read by screenreaders
570
+ # @param hint [Hash,Proc] The content of the hint. No hint will be added if 'text' is left +nil+. When a +Proc+ is
571
+ # supplied the hint will be wrapped in a +div+ instead of a +span+
572
+ # @option hint text [String] the hint text
573
+ # @option hint kwargs [Hash] additional arguments are applied as attributes to the hint
574
+ # @param label [Hash,Proc] configures or sets the associated label content
575
+ # @option label text [String] the label text
576
+ # @option label size [String] the size of the label font, can be +xl+, +l+, +m+, +s+ or nil
577
+ # @option label tag [Symbol,String] the label's wrapper tag, intended to allow labels to act as page headings
578
+ # @option label hidden [Boolean] control the visability of the label. Hidden labels will stil be read by screenreaders
579
+ # @option label kwargs [Hash] additional arguments are applied as attributes on the +label+ element
496
580
  # @see https://design-system.service.gov.uk/components/radios/ GOV.UK Radios
497
581
  # @see https://design-system.service.gov.uk/styles/typography/#headings-with-captions Headings with captions
498
582
  # @param block [Block] Any supplied HTML will be wrapped in a conditional
@@ -506,8 +590,8 @@ module GOVUKDesignSystemFormBuilder
506
590
  # = f.govuk_radio_buttons_fieldset :favourite_colour do
507
591
  # = f.govuk_radio_button :favourite_colour, :red, label: { text: 'Red' }
508
592
  #
509
- def govuk_radio_button(attribute_name, value, hint_text: nil, label: {}, link_errors: false, &block)
510
- Elements::Radios::FieldsetRadioButton.new(self, object_name, attribute_name, value, hint_text: hint_text, label: label, link_errors: link_errors, &block).html
593
+ def govuk_radio_button(attribute_name, value, hint: {}, label: {}, link_errors: false, &block)
594
+ Elements::Radios::FieldsetRadioButton.new(self, object_name, attribute_name, value, hint: hint, label: label, link_errors: link_errors, &block).html
511
595
  end
512
596
 
513
597
  # Inserts a text divider into a list of radio buttons
@@ -530,10 +614,13 @@ module GOVUKDesignSystemFormBuilder
530
614
  # @param text_method [Symbol] The method called against each member of the collection to provide the label text
531
615
  # @param hint_method [Symbol, Proc] The method called against each member of the collection to provide the hint text.
532
616
  # When a +Proc+ is provided it must take a single argument that is a single member of the collection
533
- # @param hint_text [String] The content of the fieldset hint. No hint will be injected if left +nil+
617
+ # @param hint [Hash,Proc] The content of the hint. No hint will be added if 'text' is left +nil+. When a +Proc+ is
618
+ # supplied the hint will be wrapped in a +div+ instead of a +span+
619
+ # @option hint text [String] the hint text
620
+ # @option hint kwargs [Hash] additional arguments are applied as attributes to the hint
534
621
  # @param small [Boolean] controls whether small check boxes are used instead of regular-sized ones
535
- # @param classes [String] Classes to add to the checkbox container.
536
- # @param legend [Hash,Proc] options for configuring the legend
622
+ # @param classes [Array,String] Classes to add to the checkbox container.
623
+ # @param legend [NilClass,Hash,Proc] options for configuring the legend. Legend will be omitted if +nil+.
537
624
  # @option legend text [String] the fieldset legend's text content
538
625
  # @option legend size [String] the size of the fieldset legend font, can be +xl+, +l+, +m+ or +s+
539
626
  # @option legend tag [Symbol,String] the tag used for the fieldset's header, defaults to +h1+
@@ -541,6 +628,10 @@ module GOVUKDesignSystemFormBuilder
541
628
  # @param caption [Hash] configures or sets the caption content which is inserted above the legend
542
629
  # @option caption text [String] the caption text
543
630
  # @option caption size [String] the size of the caption, can be +xl+, +l+ or +m+. Defaults to +m+
631
+ # @option caption kwargs [Hash] additional arguments are applied as attributes on the caption +span+ element
632
+ # @param form_group [Hash] configures the form group
633
+ # @option form_group classes [Array,String] sets the form group's classes
634
+ # @option form_group kwargs [Hash] additional attributes added to the form group
544
635
  # @param block [Block] any HTML passed in will be injected into the fieldset, after the hint and before the checkboxes
545
636
  # @return [ActiveSupport::SafeBuffer] HTML output
546
637
  #
@@ -557,7 +648,7 @@ module GOVUKDesignSystemFormBuilder
557
648
  # :name,
558
649
  # :description,
559
650
  # legend: { text: 'What do you want in your sandwich?', size: 'm' },
560
- # hint_text: "If it isn't listed here, tough luck",
651
+ # hint: { text: "If it isn't listed here, tough luck" },
561
652
  # inline: false,
562
653
  # classes: 'app-overflow-scroll',
563
654
  #
@@ -577,7 +668,7 @@ module GOVUKDesignSystemFormBuilder
577
668
  # :name,
578
669
  # legend: -> { tag.h3('What kind of sandwich do you want?') }
579
670
  #
580
- def govuk_collection_check_boxes(attribute_name, collection, value_method, text_method, hint_method = nil, hint_text: nil, legend: {}, caption: {}, small: false, classes: nil, &block)
671
+ def govuk_collection_check_boxes(attribute_name, collection, value_method, text_method, hint_method = nil, hint: {}, legend: {}, caption: {}, small: false, classes: nil, form_group: {}, &block)
581
672
  Elements::CheckBoxes::Collection.new(
582
673
  self,
583
674
  object_name,
@@ -586,11 +677,12 @@ module GOVUKDesignSystemFormBuilder
586
677
  value_method: value_method,
587
678
  text_method: text_method,
588
679
  hint_method: hint_method,
589
- hint_text: hint_text,
680
+ hint: hint,
590
681
  legend: legend,
591
682
  caption: caption,
592
683
  small: small,
593
684
  classes: classes,
685
+ form_group: form_group,
594
686
  &block
595
687
  ).html
596
688
  end
@@ -601,17 +693,25 @@ module GOVUKDesignSystemFormBuilder
601
693
  # is set to +link_errors: true+
602
694
  #
603
695
  # @param attribute_name [Symbol] The name of the attribute
604
- # @param hint_text [String] The content of the fieldset hint. No hint will be injected if left +nil+
696
+ # @param hint [Hash,Proc] The content of the hint. No hint will be added if 'text' is left +nil+. When a +Proc+ is
697
+ # supplied the hint will be wrapped in a +div+ instead of a +span+
698
+ # @option hint text [String] the hint text
699
+ # @option hint kwargs [Hash] additional arguments are applied as attributes to the hint
605
700
  # @param small [Boolean] controls whether small check boxes are used instead of regular-sized ones
606
- # @param legend [Hash,Proc] options for configuring the legend
701
+ # @param legend [NilClass,Hash,Proc] options for configuring the legend. Legend will be omitted if +nil+.
607
702
  # @option legend text [String] the fieldset legend's text content
608
703
  # @option legend size [String] the size of the fieldset legend font, can be +xl+, +l+, +m+ or +s+
609
704
  # @option legend tag [Symbol,String] the tag used for the fieldset's header, defaults to +h1+
610
705
  # @option legend hidden [Boolean] control the visibility of the legend. Hidden legends will still be read by screenreaders
706
+ # @option legend kwargs [Hash] additional arguments are applied as attributes on the +legend+ element
611
707
  # @param caption [Hash] configures or sets the caption content which is inserted above the legend
612
708
  # @option caption text [String] the caption text
613
709
  # @option caption size [String] the size of the caption, can be +xl+, +l+ or +m+. Defaults to +m+
614
- # @param classes [String] Classes to add to the checkbox container.
710
+ # @option caption kwargs [Hash] additional arguments are applied as attributes on the caption +span+ element
711
+ # @param classes [Array,String] Classes to add to the checkbox container.
712
+ # @param form_group [Hash] configures the form group
713
+ # @option form_group classes [Array,String] sets the form group's classes
714
+ # @option form_group kwargs [Hash] additional attributes added to the form group
615
715
  # @param block [Block] a block of HTML that will be used to populate the fieldset
616
716
  # @return [ActiveSupport::SafeBuffer] HTML output
617
717
  #
@@ -625,16 +725,17 @@ module GOVUKDesignSystemFormBuilder
625
725
  # = f.govuk_check_box :desired_filling, :lemonade, label: { text: 'Lemonade' }, link_errors: true
626
726
  # = f.govuk_check_box :desired_filling, :fizzy_orange, label: { text: 'Fizzy orange' }
627
727
  #
628
- def govuk_check_boxes_fieldset(attribute_name, legend: {}, caption: {}, hint_text: {}, small: false, classes: nil, &block)
728
+ def govuk_check_boxes_fieldset(attribute_name, legend: {}, caption: {}, hint: {}, small: false, classes: nil, form_group: {}, &block)
629
729
  Containers::CheckBoxesFieldset.new(
630
730
  self,
631
731
  object_name,
632
732
  attribute_name,
633
- hint_text: hint_text,
733
+ hint: hint,
634
734
  legend: legend,
635
735
  caption: caption,
636
736
  small: small,
637
737
  classes: classes,
738
+ form_group: form_group,
638
739
  &block
639
740
  ).html
640
741
  end
@@ -643,12 +744,16 @@ module GOVUKDesignSystemFormBuilder
643
744
  #
644
745
  # @param attribute_name [Symbol] The name of the attribute
645
746
  # @param value [Boolean,String,Symbol,Integer] The value of the checkbox when it is checked
646
- # @param hint_text [String] the contents of the hint
747
+ # @param hint [Hash,Proc] The content of the hint. No hint will be added if 'text' is left +nil+. When a +Proc+ is
748
+ # supplied the hint will be wrapped in a +div+ instead of a +span+
749
+ # @option hint text [String] the hint text
750
+ # @option hint kwargs [Hash] additional arguments are applied as attributes to the hint
647
751
  # @param link_errors [Boolean] controls whether this radio button should be linked to from {#govuk_error_summary}
648
752
  # @option label text [String] the label text
649
753
  # @option label size [String] the size of the label font, can be +xl+, +l+, +m+, +s+ or nil
650
754
  # @option label tag [Symbol,String] the label's wrapper tag, intended to allow labels to act as page headings
651
755
  # @option label hidden [Boolean] control the visability of the label. Hidden labels will stil be read by screenreaders
756
+ # @option label kwargs [Hash] additional arguments are applied as attributes on the +label+ element
652
757
  # @param multiple [Boolean] controls whether the check box is part of a collection or represents a single attribute
653
758
  # @param block [Block] any HTML passed in will form the contents of the fieldset
654
759
  # @return [ActiveSupport::SafeBuffer] HTML output
@@ -659,15 +764,15 @@ module GOVUKDesignSystemFormBuilder
659
764
  # multiple: false,
660
765
  # link_errors: true,
661
766
  # label: { text: 'Do you agree with our terms and conditions?' },
662
- # hint_text: 'You will not be able to proceed unless you do'
767
+ # hint: { text: 'You will not be able to proceed unless you do' }
663
768
  #
664
- def govuk_check_box(attribute_name, value, hint_text: nil, label: {}, link_errors: false, multiple: true, &block)
769
+ def govuk_check_box(attribute_name, value, hint: {}, label: {}, link_errors: false, multiple: true, &block)
665
770
  Elements::CheckBoxes::FieldsetCheckBox.new(
666
771
  self,
667
772
  object_name,
668
773
  attribute_name,
669
774
  value,
670
- hint_text: hint_text,
775
+ hint: hint,
671
776
  label: label,
672
777
  link_errors: link_errors,
673
778
  multiple: multiple,
@@ -680,7 +785,7 @@ module GOVUKDesignSystemFormBuilder
680
785
  # @param text [String] the button text
681
786
  # @param warning [Boolean] makes the button red ({https://design-system.service.gov.uk/components/button/#warning-buttons warning}) when true
682
787
  # @param secondary [Boolean] makes the button grey ({https://design-system.service.gov.uk/components/button/#secondary-buttons secondary}) when true
683
- # @param classes [String] Classes to add to the submit button
788
+ # @param classes [Array,String] Classes to add to the submit button
684
789
  # @param prevent_double_click [Boolean] adds JavaScript to safeguard the
685
790
  # form from being submitted more than once
686
791
  # @param validate [Boolean] adds the formnovalidate to the submit button when true, this disables all
@@ -711,16 +816,24 @@ module GOVUKDesignSystemFormBuilder
711
816
  # of {https://bugs.ruby-lang.org/issues/5988 this} bug, so incorrect dates like +2019-09-31+ will
712
817
  # be 'rounded' up to +2019-10-01+.
713
818
  # @param attribute_name [Symbol] The name of the attribute
714
- # @param hint_text [String] the contents of the hint
715
- # @param legend [Hash,Proc] options for configuring the legend
819
+ # @param hint [Hash,Proc] The content of the hint. No hint will be added if 'text' is left +nil+. When a +Proc+ is
820
+ # supplied the hint will be wrapped in a +div+ instead of a +span+
821
+ # @option hint text [String] the hint text
822
+ # @option hint kwargs [Hash] additional arguments are applied as attributes to the hint
823
+ # @param legend [NilClass,Hash,Proc] options for configuring the legend. Legend will be omitted if +nil+.
716
824
  # @option legend text [String] the fieldset legend's text content
717
825
  # @option legend size [String] the size of the fieldset legend font, can be +xl+, +l+, +m+ or +s+
718
826
  # @option legend tag [Symbol,String] the tag used for the fieldset's header, defaults to +h1+
719
827
  # @option legend hidden [Boolean] control the visibility of the legend. Hidden legends will still be read by screenreaders
828
+ # @option legend kwargs [Hash] additional arguments are applied as attributes on the +legend+ element
720
829
  # @param caption [Hash] configures or sets the caption content which is inserted above the legend
721
830
  # @option caption text [String] the caption text
722
831
  # @option caption size [String] the size of the caption, can be +xl+, +l+ or +m+. Defaults to +m+
832
+ # @option caption kwargs [Hash] additional arguments are applied as attributes on the caption +span+ element
723
833
  # @param omit_day [Boolean] do not render a day input, only capture month and year
834
+ # @param form_group [Hash] configures the form group
835
+ # @option form_group classes [Array,String] sets the form group's classes
836
+ # @option form_group kwargs [Hash] additional attributes added to the form group
724
837
  # @param block [Block] arbitrary HTML that will be rendered between the hint and the input group
725
838
  # @param date_of_birth [Boolean] if +true+ {https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete#Values birth date auto completion attributes}
726
839
  # will be added to the inputs
@@ -732,7 +845,7 @@ module GOVUKDesignSystemFormBuilder
732
845
  # @example A regular date input with a legend, hint and injected content
733
846
  # = f.govuk_date_field :starts_on,
734
847
  # legend: { 'When does your event start?' },
735
- # hint_text: 'Leave this field blank if you don't know exactly' } do
848
+ # hint: { text: 'Leave this field blank if you don't know exactly' } do
736
849
  #
737
850
  # p.govuk-inset-text
738
851
  # | If you don't fill this in you won't be eligable for a refund
@@ -740,8 +853,8 @@ module GOVUKDesignSystemFormBuilder
740
853
  # @example A date input with legend supplied as a proc
741
854
  # = f.govuk_date_field :finishes_on,
742
855
  # legend: -> { tag.h3('Which category do you belong to?') }
743
- def govuk_date_field(attribute_name, hint_text: nil, legend: {}, caption: {}, date_of_birth: false, omit_day: false, &block)
744
- Elements::Date.new(self, object_name, attribute_name, hint_text: hint_text, legend: legend, caption: caption, date_of_birth: date_of_birth, omit_day: omit_day, &block).html
856
+ def govuk_date_field(attribute_name, hint: {}, legend: {}, caption: {}, date_of_birth: false, omit_day: false, form_group: {}, &block)
857
+ Elements::Date.new(self, object_name, attribute_name, hint: hint, legend: legend, caption: caption, date_of_birth: date_of_birth, omit_day: omit_day, form_group: form_group, &block).html
745
858
  end
746
859
 
747
860
  # Generates a summary of errors in the form, each linking to the corresponding
@@ -759,15 +872,17 @@ module GOVUKDesignSystemFormBuilder
759
872
 
760
873
  # Generates a fieldset containing the contents of the block
761
874
  #
762
- # @param legend [Hash,Proc] options for configuring the legend
875
+ # @param legend [NilClass,Hash,Proc] options for configuring the legend. Legend will be omitted if +nil+.
763
876
  # @param described_by [Array<String>] the ids of the elements that describe this fieldset, usually hints and errors
764
877
  # @option legend text [String] the fieldset legend's text content
765
878
  # @option legend size [String] the size of the fieldset legend font, can be +xl+, +l+, +m+ or +s+
766
879
  # @option legend tag [Symbol,String] the tag used for the fieldset's header, defaults to +h1+
767
880
  # @option legend hidden [Boolean] control the visibility of the legend. Hidden legends will still be read by screenreaders
881
+ # @option legend kwargs [Hash] additional arguments are applied as attributes on the +legend+ element
768
882
  # @param caption [Hash] configures or sets the caption content which is inserted above the label
769
883
  # @option caption text [String] the caption text
770
884
  # @option caption size [String] the size of the caption, can be +xl+, +l+ or +m+. Defaults to +m+
885
+ # @option caption kwargs [Hash] additional arguments are applied as attributes on the caption +span+ element
771
886
  #
772
887
  # @example A fieldset containing address fields
773
888
  # = f.govuk_fieldset legend: { text: 'Address' }
@@ -794,11 +909,19 @@ module GOVUKDesignSystemFormBuilder
794
909
  # @option label tag [Symbol,String] the label's wrapper tag, intended to allow labels to act as page headings
795
910
  # @option label size [String] the size of the label font, can be +xl+, +l+, +m+, +s+ or nil
796
911
  # @option label hidden [Boolean] control the visability of the label. Hidden labels will stil be read by screenreaders
912
+ # @option label kwargs [Hash] additional arguments are applied as attributes on the +label+ element
797
913
  # @param caption [Hash] configures or sets the caption content which is inserted above the label
798
914
  # @option caption text [String] the caption text
799
915
  # @option caption size [String] the size of the caption, can be +xl+, +l+ or +m+. Defaults to +m+
800
- # @param hint_text [String] The content of the hint. No hint will be injected if left +nil+
801
- # @option args [Hash] args additional arguments are applied as attributes to the +input+ element
916
+ # @option caption kwargs [Hash] additional arguments are applied as attributes on the caption +span+ element
917
+ # @param hint [Hash,Proc] The content of the hint. No hint will be added if 'text' is left +nil+. When a +Proc+ is
918
+ # supplied the hint will be wrapped in a +div+ instead of a +span+
919
+ # @option hint text [String] the hint text
920
+ # @option hint kwargs [Hash] additional arguments are applied as attributes to the hint
921
+ # @option kwargs [Hash] kwargs additional arguments are applied as attributes to the +input+ element
922
+ # @param form_group [Hash] configures the form group
923
+ # @option form_group classes [Array,String] sets the form group's classes
924
+ # @option form_group kwargs [Hash] additional attributes added to the form group
802
925
  # @param block [Block] arbitrary HTML that will be rendered between the hint and the input
803
926
  #
804
927
  # @example A photo upload field with file type specifier and injected content
@@ -817,8 +940,8 @@ module GOVUKDesignSystemFormBuilder
817
940
  # @note Remember to set +multipart: true+ when creating a form with file
818
941
  # uploads, {https://guides.rubyonrails.org/form_helpers.html#uploading-files see
819
942
  # the Rails documentation} for more information
820
- def govuk_file_field(attribute_name, label: {}, caption: {}, hint_text: nil, **args, &block)
821
- Elements::File.new(self, object_name, attribute_name, label: label, caption: caption, hint_text: hint_text, **args, &block).html
943
+ def govuk_file_field(attribute_name, label: {}, caption: {}, hint: {}, form_group: {}, **kwargs, &block)
944
+ Elements::File.new(self, object_name, attribute_name, label: label, caption: caption, hint: hint, form_group: form_group, **kwargs, &block).html
822
945
  end
823
946
  end
824
947
  end