govuk_publishing_components 5.1.3 → 5.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fa48ba590fd58d68a1a54ffec60c38a87c705415c7cd6e2d60bd6847bea674b9
4
- data.tar.gz: '069479f197d9edd22c46232606fb13e7c404fe8f9dabac8ca53e15bcaa24fe3b'
3
+ metadata.gz: 03f20110c0dabc04645577702eafe2331de4c0f0e29f451c3f3c2afff0224564
4
+ data.tar.gz: 96066fa35b68926dfde283d683563c504b59beb723a563c4d2157c45415d6b32
5
5
  SHA512:
6
- metadata.gz: bbda965032a7665f5e69c2a6c4df2a0fafe8021759a33971b6080f1151a577b3d33b36fd4cc6e0f45d6035bb75a925c18f250794ddd9357932f6ee1bc103bc15
7
- data.tar.gz: 6bdca0f6c816436e9e279b2ac97aa4736476f64f131fac5810b67ace5823a5dad3da644b20f4d7023604e173386f7c48ee3cb62c3d63399ece43bf7399745d88
6
+ metadata.gz: 48b785e1fb91b2d41359f540b03e82f871f8cb403fbe1953936a25dc6ae2ee2ec9c4752800d53f11841a74a7d5ea2dd97eadc92391c79d9fe727c8f20295cbc5
7
+ data.tar.gz: 9a9ddfbef2158e78e8aeb1e321798869a15373197b189c9cd4f220240050bbab23e0a41ead74808ab282133999576ca3c47e48db0083a60ae7a84db773e59409
@@ -13,6 +13,7 @@
13
13
  @import "components/input";
14
14
  @import "components/label";
15
15
  @import "components/radio";
16
+ @import "components/related-navigation";
16
17
  @import "components/step-by-step-nav";
17
18
  @import "components/step-by-step-nav-header";
18
19
  @import "components/step-by-step-nav-related";
@@ -0,0 +1,49 @@
1
+ .gem-c-related-navigation {
2
+ border-top: 2px solid $govuk-blue;
3
+ }
4
+
5
+ .gem-c-related-navigation__main-heading {
6
+ margin-top: $gutter-half;
7
+ margin-bottom: $gutter-one-third;
8
+ @include bold-19;
9
+ }
10
+
11
+ .gem-c-related-navigation__sub-heading {
12
+ border-top: 1px solid $border-colour;
13
+ padding-top: $gutter-half;
14
+ }
15
+
16
+ .gem-c-related-navigation__main-heading + .gem-c-related-navigation__sub-heading {
17
+ border-top: none;
18
+ padding-top: 0;
19
+ }
20
+
21
+ .gem-c-related-navigation__sub-heading--other {
22
+ @include bold-19;
23
+ }
24
+
25
+ .gem-c-related-navigation__nav-section {
26
+ margin-bottom: $gutter;
27
+ }
28
+
29
+ .gem-c-related-navigation__link {
30
+ list-style-type: none;
31
+ margin-bottom: $gutter-one-third;
32
+ }
33
+
34
+ .gem-c-related-navigation__section-link {
35
+ text-decoration: none;
36
+ @include bold-19;
37
+ }
38
+
39
+ .gem-c-related-navigation__section-link--other {
40
+ text-decoration: none;
41
+ }
42
+
43
+ // reset the default browser styles
44
+ .gem-c-related-navigation__link-list {
45
+ padding: 0;
46
+ margin: 0;
47
+ list-style: none;
48
+ margin-bottom: 1.25em;
49
+ }
@@ -0,0 +1,77 @@
1
+ <% related_nav_helper = RelatedNavigationHelper.new(local_assigns) %>
2
+ <% related_content = related_nav_helper.related_navigation %>
3
+ <% if related_content.map(&:values).flatten.any? || related_nav_helper.other.flatten.any? %>
4
+ <% random = SecureRandom.hex(4) %>
5
+ <aside class="gem-c-related-navigation" role="complementary">
6
+ <h2 id="related-nav-related_items-<%= random %>"
7
+ class="gem-c-related-navigation__main-heading"
8
+ data-track-count="sidebarRelatedItemSection" >
9
+ <%= t('components.related_navigation.related_content') %>
10
+ </h2>
11
+ <% section_index = 0 %>
12
+ <% related_content.each do |section| %>
13
+ <% section.each do |section_title, links| %>
14
+ <% if links.any? %>
15
+ <% section_index += 1 %>
16
+ <% unless section_title === "related_items" %>
17
+ <h3 id="related-nav-<%= section_title %>-<%= random %>"
18
+ data-track-count="sidebarRelatedItemSection"
19
+ class="<%= related_nav_helper.section_css_class("gem-c-related-navigation__sub-heading", section_title) %>">
20
+ <%= related_nav_helper.construct_section_heading(section_title) %>
21
+ </h3>
22
+ <% end %>
23
+ <nav role="navigation"
24
+ class="gem-c-related-navigation__nav-section"
25
+ aria-labelledby="related-nav-<%= section_title %>-<%= random %>"
26
+ data-module="toggle">
27
+ <ul class="gem-c-related-navigation_link-list" data-module="track-click">
28
+ <% constructed_link_array = [] %>
29
+ <% section_link_limit = related_nav_helper.calculate_section_link_limit(links) %>
30
+ <% links.each.with_index(1) do |link, index| %>
31
+ <%
32
+ link_element = link_to(
33
+ link[:text],
34
+ link[:path],
35
+ class: related_nav_helper.section_css_class("gem-c-related-navigation__section-link", section_title, link),
36
+ rel: link[:rel],
37
+ data: {
38
+ track_category: 'relatedLinkClicked',
39
+ track_action: "#{section_index}.#{index} #{related_nav_helper.construct_section_heading(section_title) || t('components.related_navigation.related_content')}",
40
+ track_label: link[:path],
41
+ track_options: {
42
+ dimension28: links.length.to_s,
43
+ dimension29: link[:text]
44
+ }
45
+ }
46
+ )
47
+ %>
48
+ <% if index <= section_link_limit %>
49
+ <li class="gem-c-related-navigation__link"><%= link_element %></li>
50
+ <% else %>
51
+ <% constructed_link_array.push(link_element) %>
52
+ <% end %>
53
+ <% end %>
54
+ <% if links.length > section_link_limit %>
55
+ <li class="gem-c-related-navigation__link toggle-wrap">
56
+ <a href="#"
57
+ data-controls="toggle_<%= section_title %>"
58
+ data-expanded="false"
59
+ data-toggled-text="<%= t("govuk_component.metadata.toggle_less", default: "Show fewer") %>">
60
+ <%= t("govuk_component.metadata.toggle_more",
61
+ number: related_nav_helper.remaining_link_count(links),
62
+ default: "+ #{related_nav_helper.remaining_link_count(links)} more") %>
63
+ </a>
64
+ </li>
65
+ <li class="gem-c-related-navigation__link">
66
+ <span id="toggle_<%= section_title %>" class="js-hidden">
67
+ <%= constructed_link_array.to_sentence.html_safe %>
68
+ </span>
69
+ </li>
70
+ <% end %>
71
+ </ul>
72
+ </nav>
73
+ <% end %>
74
+ <% end %>
75
+ <% end %>
76
+ </aside>
77
+ <% end %>
@@ -0,0 +1,168 @@
1
+ name: Related Navigation
2
+ description: Component showing related content, including topics, guidance, collections and policies (where applicable)
3
+ accessibility_criteria: |
4
+ - Should have a role of 'complementary' as it complements the main page content
5
+ - Should have a role of 'navigation' on any navigation elements inside the component
6
+ shared_accessibility_criteria:
7
+ - link
8
+ accessibility_excluded_rules:
9
+ - duplicate-id
10
+ examples:
11
+ default:
12
+ data:
13
+ links:
14
+ ordered_related_items:
15
+ - title: Find an apprenticeship
16
+ base_path: /apply-apprenticeship
17
+ - title: Training and study at work
18
+ base_path: /training-study-work-your-rights
19
+ - title: Careers helpline for teenagers
20
+ base_path: /careers-helpline-for-teenagers
21
+ with_curated_topics:
22
+ data:
23
+ links:
24
+ topics:
25
+ - title: Apprenticeships, 14 to 19 education and training for work
26
+ base_path: /browse/education/find-course
27
+ document_type: topic
28
+ - title: Finding a job
29
+ base_path: /browse/working/finding-job
30
+ document_type: topic
31
+ - title: Apprenticeships
32
+ base_path: /topic/further-education-skills/apprenticeships
33
+ document_type: topic
34
+ with_collections:
35
+ data:
36
+ links:
37
+ document_collections:
38
+ - title: Recruit an apprentice (formerly apprenticeship vacancies)
39
+ base_path: /government/collections/apprenticeship-vacancies
40
+ document_type: document_collection
41
+ - title: The future of jobs and skills
42
+ base_path: /government/collections/the-future-of-jobs-and-skills
43
+ document_type: document_collection
44
+ with_policies:
45
+ data:
46
+ links:
47
+ related_policies:
48
+ - title: Further education and training
49
+ base_path: /government/policies/further-education-and-training
50
+ document_type: policy
51
+ - title: Primary school education
52
+ base_path: /government/policies/primary-school-education
53
+ document_type: policy
54
+ with_topical_events:
55
+ data:
56
+ links:
57
+ topical_events:
58
+ - title: UK-China High-Level People to People Dialogue 2017
59
+ base_path: /government/topical-events/uk-china-high-level-people-to-people-dialogue-2017
60
+ document_type: topical_event
61
+ with_world_locations:
62
+ data:
63
+ links:
64
+ world_locations:
65
+ - title: South Sudan
66
+ base_path: /world/south-sudan/news
67
+ - title: USA
68
+ base_path: /world/usa/news
69
+ with_external_related_links:
70
+ description: The component can accept other related links, such as external links or other contacts.
71
+ data:
72
+ details:
73
+ external_related_links:
74
+ - url: "http://media.slc.co.uk/sfe/1718/ft/sfe_terms_and_conditions_guide_1718_d.pdf"
75
+ title: "Student loans: terms and conditions 2017 to 2018 (PDF, 136KB)"
76
+ - url: "https://www.thestudentroom.co.uk/content.php?r=5967-Repaying-your-student-loan"
77
+ title: "The Student Room: repaying your student loan"
78
+ with_extensive_world_locations:
79
+ description: The component handles having a long list of content passed to it, by only showing the first few items and hiding the rest behind a Show More toggle.
80
+ data:
81
+ links:
82
+ world_locations:
83
+ - title: Algeria
84
+ base_path: /world/algeria/news
85
+ - title: Austria
86
+ base_path: /world/austria/news
87
+ - title: Belarus
88
+ base_path: /world/belarus/news
89
+ - title: Belgium
90
+ base_path: /world/belgium/news
91
+ - title: Bolivia
92
+ base_path: /world/bolivia/news
93
+ - title: Brazil
94
+ base_path: /world/brazil/news
95
+ - title: Canada
96
+ base_path: /world/canada/news
97
+ - title: Chile
98
+ base_path: /world/chile/news
99
+ - title: China
100
+ base_path: /world/China/news
101
+ - title: Cuba
102
+ base_path: /world/cuba/news
103
+ - title: Denmark
104
+ base_path: /world/denmark/news
105
+ - title: Egypt
106
+ base_path: /world/egypt/news
107
+ - title: Fiji
108
+ base_path: /world/fiji/news
109
+ - title: Finland
110
+ base_path: /world/finland/news
111
+ - title: France
112
+ base_path: /world/france/news
113
+ - title: Germany
114
+ base_path: /world/germany/news
115
+ - title: Greece
116
+ base_path: /world/greece/news
117
+ - title: Norway
118
+ base_path: /world/norway/news
119
+ - title: Russia
120
+ base_path: /world/russia/news
121
+ - title: Sweden
122
+ base_path: /world/sweden/news
123
+ - title: United Kingdom
124
+ base_path: /world/united-kingdom/news
125
+ - title: USA
126
+ base_path: /world/usa/news
127
+ with_all_related-content:
128
+ data:
129
+ links:
130
+ ordered_related_items:
131
+ - title: Find an apprenticeship
132
+ base_path: /apply-apprenticeship
133
+ - title: Training and study at work
134
+ base_path: /training-study-work-your-rights
135
+ - title: Careers helpline for teenagers
136
+ base_path: /careers-helpline-for-teenagers
137
+ topics:
138
+ - title: Apprenticeships, 14 to 19 education and training for work
139
+ base_path: /browse/education/find-course
140
+ document_type: topic
141
+ - title: Finding a job
142
+ base_path: /browse/working/finding-job
143
+ document_type: topic
144
+ - title: Apprenticeships
145
+ base_path: /topic/further-education-skills/apprenticeships
146
+ document_type: topic
147
+ document_collections:
148
+ - title: Recruit an apprentice (formerly apprenticeship vacancies)
149
+ base_path: /government/collections/apprenticeship-vacancies
150
+ document_type: document_collection
151
+ - title: The future of jobs and skills
152
+ base_path: /government/collections/the-future-of-jobs-and-skills
153
+ document_type: document_collection
154
+ related_policies:
155
+ - title: Further education and training
156
+ base_path: /government/policies/further-education-and-training
157
+ document_type: policy
158
+ world_locations:
159
+ - title: South Sudan
160
+ base_path: /world/south-sudan/news
161
+ - title: USA
162
+ base_path: /world/usa/news
163
+ details:
164
+ external_related_links:
165
+ - url: "http://media.slc.co.uk/sfe/1718/ft/sfe_terms_and_conditions_guide_1718_d.pdf"
166
+ title: "Student loans: terms and conditions 2017 to 2018 (PDF, 136KB)"
167
+ - title: The Student Room repaying your student loan
168
+ url: https://www.thestudentroom.co.uk/content.php?r=5967-Repaying-your-student-loan
@@ -21,9 +21,20 @@
21
21
 
22
22
  en:
23
23
  components:
24
- radio:
25
- or: 'or'
26
24
  back_link:
27
25
  back: 'Back'
26
+ radio:
27
+ or: 'or'
28
+ related_navigation:
29
+ collections: "Collection"
30
+ external_links: "Elsewhere on the web"
31
+ policies: "Policy"
32
+ publishers: "Published by"
33
+ related_content: "Related content"
34
+ related_guides: "Detailed guidance"
35
+ statistical_data_sets: "Statistical data set"
36
+ topics: "Explore the topic"
37
+ topical_events: "Topical event"
38
+ world_locations: "World locations"
28
39
  step_by_step_nav_related:
29
40
  part_of: "Part of"
@@ -1,6 +1,7 @@
1
1
  require "govuk_publishing_components/config"
2
2
  require "govuk_publishing_components/engine"
3
3
  require "govuk_publishing_components/components/step_by_step_nav_helper"
4
+ require "govuk_publishing_components/components/related_navigation_helper"
4
5
 
5
6
  module GovukPublishingComponents
6
7
  end
@@ -0,0 +1,245 @@
1
+ class RelatedNavigationHelper
2
+ MAX_SECTION_LENGTH = 5
3
+ DEFINED_SECTIONS = %w(
4
+ related_guides
5
+ topics
6
+ collections
7
+ policies
8
+ topical_events
9
+ world_locations
10
+ statistical_data_sets
11
+ ).freeze
12
+
13
+ def initialize(content_item)
14
+ @content_item = content_item
15
+ end
16
+
17
+ def related_navigation
18
+ @related_content ||= [
19
+ { "related_items" => related_items },
20
+ { "related_guides" => related_guides },
21
+ { "collections" => related_collections },
22
+ { "topics" => related_topics },
23
+ { "policies" => related_policies },
24
+ { "topical_events" => related_topical_events },
25
+ { "world_locations" => related_world_locations },
26
+ { "statistical_data_sets" => related_statistical_data_sets },
27
+ { "worldwide_organisations" => related_worldwide_organisations },
28
+ ]
29
+
30
+ other = [related_external_links, related_contacts] || []
31
+ other.each do |sections|
32
+ sections.each do |section|
33
+ @related_content.push(
34
+ section["title"].tr(' ', '_') => section["links"]
35
+ )
36
+ end
37
+ end
38
+
39
+ @related_content
40
+ end
41
+
42
+ def other
43
+ @other ||= []
44
+ end
45
+
46
+ def construct_section_heading(section_title)
47
+ unless section_title === "related_items"
48
+ I18n.t('components.related_navigation.' + section_title, default: section_title.tr('_', ' '))
49
+ end
50
+ end
51
+
52
+ def section_css_class(css_class, section_title, link = {})
53
+ unless DEFINED_SECTIONS.include?(section_title) || link.fetch(:finder, false)
54
+ css_class += "--other"
55
+ end
56
+ css_class
57
+ end
58
+
59
+ def calculate_section_link_limit(links)
60
+ links.length == MAX_SECTION_LENGTH + 1 ? MAX_SECTION_LENGTH + 1 : MAX_SECTION_LENGTH
61
+ end
62
+
63
+ def remaining_link_count(links)
64
+ links.length - MAX_SECTION_LENGTH
65
+ end
66
+
67
+ private
68
+
69
+ def build_links_for_sidebar(collection, path_key = "base_path", additional_attr = {})
70
+ collection.map do |link|
71
+ {
72
+ path: link[path_key],
73
+ text: link["title"]
74
+ }.merge(additional_attr)
75
+ end
76
+ end
77
+
78
+ def world_location_base_path(title)
79
+ "/world/#{parameterise(title)}/news"
80
+ end
81
+
82
+ def related_items
83
+ links = build_links_for_sidebar(quick_links, "url")
84
+ mainstream_links = related_mainstream_content
85
+ related_ordered_items = link_group("ordered_related_items")
86
+ if links.any?
87
+ links + mainstream_links
88
+ else
89
+ build_links_for_sidebar(related_ordered_items) + mainstream_links
90
+ end
91
+ end
92
+
93
+ def quick_links
94
+ @content_item.dig("details", "quick_links").to_a
95
+ end
96
+
97
+ def related_world_locations
98
+ locations = link_group("world_locations")
99
+ locations.map! { |link| link.merge("base_path" => world_location_base_path(link["title"])) }
100
+ build_links_for_sidebar(locations)
101
+ end
102
+
103
+ def related_worldwide_organisations
104
+ organisations = filter_link_type("worldwide_organisations", "worldwide_organisation")
105
+ build_links_for_sidebar(organisations)
106
+ end
107
+
108
+ def related_collections
109
+ collections = filter_link_type("document_collections", "document_collection")
110
+ build_links_for_sidebar(collections)
111
+ end
112
+
113
+ def filter_link_type(group, type)
114
+ links = link_group(group)
115
+ links.select do |link|
116
+ link["document_type"] == type
117
+ end
118
+ end
119
+
120
+ def related_policies
121
+ policies = filter_link_type("related_policies", "policy")
122
+ build_links_for_sidebar(policies)
123
+ end
124
+
125
+ def related_statistical_data_sets
126
+ statistical_data_sets = filter_link_type("related_statistical_data_sets", "statistical_data_set")
127
+ build_links_for_sidebar(statistical_data_sets)
128
+ end
129
+
130
+ def related_topics
131
+ topics = filter_link_type("topics", "topic")
132
+ links = build_links_for_sidebar(topics)
133
+ links << related_mainstream_topic << related_mainstream_parent_topic
134
+ deduplicate_topics_by_title(links.compact)
135
+ end
136
+
137
+ def related_topical_events
138
+ topical_events = filter_link_type("topical_events", "topical_event")
139
+ build_links_for_sidebar(topical_events)
140
+ end
141
+
142
+ def related_contacts
143
+ contacts = filter_link_type("related", "contact")
144
+ return [] unless contacts.any?
145
+ [
146
+ title: "Other contacts",
147
+ links: build_links_for_sidebar(contacts).map
148
+ ]
149
+ end
150
+
151
+ def related_external_links
152
+ external_links = @content_item.dig("details", "external_related_links").to_a
153
+ return [] unless external_links.any?
154
+ [
155
+ "title" => "Elsewhere on the web",
156
+ "links" => build_links_for_sidebar(external_links, "url", rel: 'external')
157
+ ]
158
+ end
159
+
160
+ def related_mainstream_topic
161
+ return unless tagged_to_same_mainstream_browse_page.any?
162
+ { text: parent["title"], path: parent["base_path"] }
163
+ end
164
+
165
+ def related_mainstream_parent_topic
166
+ return unless parents_tagged_to_same_mainstream_browse_page.any?
167
+ { text: grandparent["title"], path: grandparent["base_path"] }
168
+ end
169
+
170
+ def parent
171
+ link_group("parent").first
172
+ end
173
+
174
+ def grandparent
175
+ parent.dig("parent", 0)
176
+ end
177
+
178
+ # This method post-processes the topics collated by the helper.
179
+ # We add mainstream browse page links if they are present, however
180
+ # if these have the same title as an existing topic we should prefer
181
+ # the mainstream version and remove the existing topic.
182
+ # @see spec/related_navigation_helper_spec.rb for test coverage.
183
+ def deduplicate_topics_by_title(topics)
184
+ is_dupe = lambda { |a, b| a && a != b && a[:text] == b[:text] }
185
+
186
+ topics.delete_if do |t|
187
+ is_dupe.call(related_mainstream_topic, t) ||
188
+ is_dupe.call(related_mainstream_parent_topic, t)
189
+ end
190
+
191
+ topics
192
+ end
193
+
194
+ def parameterise(str, sep = "-")
195
+ parameterised_str = str.gsub(/[^\w\-]+/, sep)
196
+ unless sep.nil? || sep.empty?
197
+ re_sep = Regexp.escape(sep)
198
+ # No more than one of the separator in a row.
199
+ parameterised_str.gsub!(/#{re_sep}{2,}/, sep)
200
+ # Remove leading/trailing separator.
201
+ parameterised_str.gsub!(/^#{re_sep}|#{re_sep}$/, '')
202
+ end
203
+ parameterised_str.downcase
204
+ end
205
+
206
+ def tagged_to_same_mainstream_browse_page
207
+ return [] unless parent
208
+ @tagged_to_same_mainstream_browse_page ||= related_links.select do |related_item|
209
+ links = related_item.dig("links", "mainstream_browse_pages") || []
210
+ content_ids = links.any? ? links.map { |page| page["content_id"] } : []
211
+ content_ids.include?(parent["content_id"])
212
+ end
213
+ end
214
+
215
+ def parents_tagged_to_same_mainstream_browse_page
216
+ return [] unless parent && grandparent
217
+
218
+ common_parent_content_ids = tagged_to_same_mainstream_browse_page.map(&:content_id)
219
+
220
+ @parents_tagged_to_same_mainstream_browse_page ||= related_links.select do |related_item|
221
+ next if common_parent_content_ids.include?(related_item["content_id"])
222
+ related_item.dig("links", "mainstream_browse_pages").map(&:parent).map(&:content_id).include?(grandparent["content_id"])
223
+ end
224
+ end
225
+
226
+ def related_links
227
+ link_group("ordered_related_items")
228
+ end
229
+
230
+ def related_mainstream_content
231
+ return [] unless @content_item["document_type"] == "detailed_guide"
232
+ content = link_group("related_mainstream_content")
233
+ build_links_for_sidebar(content)
234
+ end
235
+
236
+ def related_guides
237
+ return [] unless @content_item["document_type"] == "detailed_guide"
238
+ guides = link_group("related_guides")
239
+ build_links_for_sidebar(guides)
240
+ end
241
+
242
+ def link_group(type)
243
+ @content_item.dig("links", type).to_a
244
+ end
245
+ end
@@ -1,3 +1,3 @@
1
1
  module GovukPublishingComponents
2
- VERSION = '5.1.3'.freeze
2
+ VERSION = '5.2.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: govuk_publishing_components
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.1.3
4
+ version: 5.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - GOV.UK Dev
@@ -220,6 +220,20 @@ dependencies:
220
220
  - - "~>"
221
221
  - !ruby/object:Gem::Version
222
222
  version: '0.64'
223
+ - !ruby/object:Gem::Dependency
224
+ name: govuk_schemas
225
+ requirement: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - "~>"
228
+ - !ruby/object:Gem::Version
229
+ version: '1.0'
230
+ type: :development
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - "~>"
235
+ - !ruby/object:Gem::Version
236
+ version: '1.0'
223
237
  - !ruby/object:Gem::Dependency
224
238
  name: webmock
225
239
  requirement: !ruby/object:Gem::Requirement
@@ -265,6 +279,7 @@ files:
265
279
  - app/assets/stylesheets/govuk_publishing_components/components/_input.scss
266
280
  - app/assets/stylesheets/govuk_publishing_components/components/_label.scss
267
281
  - app/assets/stylesheets/govuk_publishing_components/components/_radio.scss
282
+ - app/assets/stylesheets/govuk_publishing_components/components/_related-navigation.scss
268
283
  - app/assets/stylesheets/govuk_publishing_components/components/_step-by-step-nav-header.scss
269
284
  - app/assets/stylesheets/govuk_publishing_components/components/_step-by-step-nav-related.scss
270
285
  - app/assets/stylesheets/govuk_publishing_components/components/_step-by-step-nav.scss
@@ -295,6 +310,7 @@ files:
295
310
  - app/views/govuk_publishing_components/components/_input.html.erb
296
311
  - app/views/govuk_publishing_components/components/_label.html.erb
297
312
  - app/views/govuk_publishing_components/components/_radio.html.erb
313
+ - app/views/govuk_publishing_components/components/_related_navigation.html.erb
298
314
  - app/views/govuk_publishing_components/components/_step_by_step_nav.html.erb
299
315
  - app/views/govuk_publishing_components/components/_step_by_step_nav_header.html.erb
300
316
  - app/views/govuk_publishing_components/components/_step_by_step_nav_related.html.erb
@@ -305,6 +321,7 @@ files:
305
321
  - app/views/govuk_publishing_components/components/docs/input.yml
306
322
  - app/views/govuk_publishing_components/components/docs/label.yml
307
323
  - app/views/govuk_publishing_components/components/docs/radio.yml
324
+ - app/views/govuk_publishing_components/components/docs/related_navigation.yml
308
325
  - app/views/govuk_publishing_components/components/docs/step_by_step_nav.yml
309
326
  - app/views/govuk_publishing_components/components/docs/step_by_step_nav_header.yml
310
327
  - app/views/govuk_publishing_components/components/docs/step_by_step_nav_related.yml
@@ -319,6 +336,7 @@ files:
319
336
  - lib/generators/govuk_publishing_components/templates/_component.scss
320
337
  - lib/generators/govuk_publishing_components/templates/component.yml.erb
321
338
  - lib/govuk_publishing_components.rb
339
+ - lib/govuk_publishing_components/components/related_navigation_helper.rb
322
340
  - lib/govuk_publishing_components/components/step_by_step_nav_helper.rb
323
341
  - lib/govuk_publishing_components/config.rb
324
342
  - lib/govuk_publishing_components/engine.rb