design_system 0.13.2 → 0.15.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.
Files changed (158) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +36 -3
  3. data/app/assets/stylesheets/design_system/_hljs.scss +131 -0
  4. data/app/assets/stylesheets/design_system/govuk.scss +43 -0
  5. data/app/assets/stylesheets/design_system/nhsuk.scss +55 -0
  6. data/app/components/design_system/base_component.rb +21 -0
  7. data/app/components/design_system/generic/action_link_component.rb +17 -0
  8. data/app/components/design_system/generic/alert_component.rb +25 -0
  9. data/app/components/design_system/generic/breadcrumbs_component.rb +18 -0
  10. data/app/components/design_system/generic/button_component.rb +51 -0
  11. data/app/components/design_system/generic/callout_component.html.erb +8 -0
  12. data/app/components/design_system/generic/callout_component.rb +15 -0
  13. data/app/components/design_system/generic/details_component.html.erb +4 -0
  14. data/app/components/design_system/generic/details_component.rb +13 -0
  15. data/app/components/design_system/generic/grid_component.html.erb +5 -0
  16. data/app/components/design_system/generic/grid_component.rb +31 -0
  17. data/app/components/design_system/generic/heading_component.rb +41 -0
  18. data/app/components/design_system/generic/inset_text_component.html.erb +1 -0
  19. data/app/components/design_system/generic/inset_text_component.rb +24 -0
  20. data/app/components/design_system/generic/link_component.rb +51 -0
  21. data/app/components/design_system/generic/list_component.html.erb +7 -0
  22. data/app/components/design_system/generic/list_component.rb +26 -0
  23. data/app/components/design_system/generic/notification_component.html.erb +15 -0
  24. data/app/components/design_system/generic/notification_component.rb +39 -0
  25. data/app/components/design_system/generic/panel_component.html.erb +4 -0
  26. data/app/components/design_system/generic/panel_component.rb +18 -0
  27. data/app/components/design_system/generic/paragraph_component.rb +46 -0
  28. data/app/components/design_system/generic/start_button_component.html.erb +4 -0
  29. data/app/components/design_system/generic/start_button_component.rb +17 -0
  30. data/app/components/design_system/generic/summary_card_component.html.erb +15 -0
  31. data/app/components/design_system/generic/summary_card_component.rb +40 -0
  32. data/app/components/design_system/generic/summary_list_component.html.erb +21 -0
  33. data/app/components/design_system/generic/summary_list_component.rb +59 -0
  34. data/app/components/design_system/generic/tab_component.html.erb +21 -0
  35. data/app/components/design_system/generic/tab_component.rb +14 -0
  36. data/app/components/design_system/generic/table_component.rb +46 -0
  37. data/app/components/design_system/govuk/action_link_component.html.erb +1 -0
  38. data/app/components/design_system/govuk/action_link_component.rb +8 -0
  39. data/app/components/design_system/govuk/alert_component.rb +6 -0
  40. data/app/components/design_system/govuk/breadcrumbs_component.html.erb +11 -0
  41. data/app/components/design_system/govuk/breadcrumbs_component.rb +7 -0
  42. data/app/components/design_system/govuk/button_component.rb +6 -0
  43. data/app/components/design_system/govuk/callout_component.html.erb +6 -0
  44. data/app/components/design_system/govuk/callout_component.rb +6 -0
  45. data/app/components/design_system/govuk/details_component.rb +6 -0
  46. data/app/components/design_system/govuk/grid_component.rb +6 -0
  47. data/app/components/design_system/govuk/heading_component.rb +6 -0
  48. data/app/components/design_system/govuk/inset_text_component.rb +6 -0
  49. data/app/components/design_system/govuk/link_component.rb +17 -0
  50. data/app/components/design_system/govuk/list_component.rb +6 -0
  51. data/app/components/design_system/govuk/notification_component.rb +6 -0
  52. data/app/components/design_system/govuk/panel_component.rb +10 -0
  53. data/app/components/design_system/govuk/paragraph_component.rb +6 -0
  54. data/app/components/design_system/govuk/start_button_component.rb +6 -0
  55. data/app/components/design_system/govuk/summary_card_component.html.erb +15 -0
  56. data/app/components/design_system/govuk/summary_card_component.rb +13 -0
  57. data/app/components/design_system/govuk/summary_list_component.rb +6 -0
  58. data/app/components/design_system/govuk/tab_component.rb +6 -0
  59. data/app/components/design_system/govuk/table_component.html.erb +30 -0
  60. data/app/components/design_system/govuk/table_component.rb +6 -0
  61. data/app/components/design_system/nhsuk/action_link_component.html.erb +7 -0
  62. data/app/components/design_system/nhsuk/action_link_component.rb +7 -0
  63. data/app/components/design_system/nhsuk/alert_component.rb +6 -0
  64. data/app/components/design_system/nhsuk/breadcrumbs_component.html.erb +16 -0
  65. data/app/components/design_system/nhsuk/breadcrumbs_component.rb +7 -0
  66. data/app/components/design_system/nhsuk/button_component.rb +6 -0
  67. data/app/components/design_system/nhsuk/callout_component.rb +6 -0
  68. data/app/components/design_system/nhsuk/details_component.rb +6 -0
  69. data/app/components/design_system/nhsuk/grid_component.rb +6 -0
  70. data/app/components/design_system/nhsuk/heading_component.rb +6 -0
  71. data/app/components/design_system/nhsuk/inset_text_component.html.erb +4 -0
  72. data/app/components/design_system/nhsuk/inset_text_component.rb +6 -0
  73. data/app/components/design_system/nhsuk/link_component.rb +17 -0
  74. data/app/components/design_system/nhsuk/list_component.rb +6 -0
  75. data/app/components/design_system/nhsuk/notification_component.rb +6 -0
  76. data/app/components/design_system/nhsuk/panel_component.rb +6 -0
  77. data/app/components/design_system/nhsuk/paragraph_component.rb +6 -0
  78. data/app/components/design_system/nhsuk/start_button_component.rb +6 -0
  79. data/app/components/design_system/nhsuk/summary_card_component.rb +6 -0
  80. data/app/components/design_system/nhsuk/summary_list_component.rb +19 -0
  81. data/app/components/design_system/nhsuk/tab_component.rb +6 -0
  82. data/app/components/design_system/nhsuk/table_component.html.erb +43 -0
  83. data/app/components/design_system/nhsuk/table_component.rb +6 -0
  84. data/app/controllers/concerns/design_system/branded.rb +6 -0
  85. data/app/helpers/design_system_helper.rb +65 -27
  86. data/app/javascript/design_system/controllers/clipboard_controller.js +41 -0
  87. data/app/javascript/design_system/controllers/code_highlight_controller.js +9 -0
  88. data/app/javascript/design_system/controllers/hello_world_controller.js +6 -0
  89. data/app/javascript/design_system/index.js +4 -0
  90. data/app/views/layouts/govuk/application.html.erb +20 -7
  91. data/app/views/layouts/nhsuk/application.html.erb +10 -7
  92. data/lib/design_system/brand_derivable.rb +9 -0
  93. data/lib/design_system/engine.rb +1 -0
  94. data/lib/design_system/generic/builders/base.rb +1 -1
  95. data/lib/design_system/generic/builders/code.rb +23 -0
  96. data/lib/design_system/generic/builders/elements/breadcrumbs.rb +4 -24
  97. data/lib/design_system/generic/builders/elements/headings.rb +3 -2
  98. data/lib/design_system/generic/builders/pagination_renderer.rb +5 -4
  99. data/lib/design_system/generic.rb +1 -14
  100. data/lib/design_system/govuk/builders/code.rb +11 -0
  101. data/lib/design_system/govuk/builders/fixed_elements.rb +0 -1
  102. data/lib/design_system/govuk.rb +1 -12
  103. data/lib/design_system/nhsuk/builders/code.rb +11 -0
  104. data/lib/design_system/nhsuk/builders/fixed_elements.rb +0 -1
  105. data/lib/design_system/nhsuk.rb +1 -12
  106. data/lib/design_system/registry.rb +19 -1
  107. data/lib/design_system/version.rb +1 -1
  108. data/public/design_system/static/design_system-0.15.0/design_system.js +53150 -0
  109. metadata +101 -50
  110. data/lib/design_system/generic/builders/action_link.rb +0 -17
  111. data/lib/design_system/generic/builders/button.rb +0 -33
  112. data/lib/design_system/generic/builders/callout.rb +0 -28
  113. data/lib/design_system/generic/builders/concerns/brand_derivable.rb +0 -14
  114. data/lib/design_system/generic/builders/details.rb +0 -30
  115. data/lib/design_system/generic/builders/grid.rb +0 -44
  116. data/lib/design_system/generic/builders/heading.rb +0 -38
  117. data/lib/design_system/generic/builders/inset_text.rb +0 -18
  118. data/lib/design_system/generic/builders/link.rb +0 -44
  119. data/lib/design_system/generic/builders/list.rb +0 -41
  120. data/lib/design_system/generic/builders/notification.rb +0 -68
  121. data/lib/design_system/generic/builders/panel.rb +0 -18
  122. data/lib/design_system/generic/builders/paragraph.rb +0 -28
  123. data/lib/design_system/generic/builders/summary_list.rb +0 -89
  124. data/lib/design_system/generic/builders/tab.rb +0 -14
  125. data/lib/design_system/generic/builders/table.rb +0 -73
  126. data/lib/design_system/govuk/builders/action_link.rb +0 -17
  127. data/lib/design_system/govuk/builders/button.rb +0 -55
  128. data/lib/design_system/govuk/builders/callout.rb +0 -26
  129. data/lib/design_system/govuk/builders/details.rb +0 -10
  130. data/lib/design_system/govuk/builders/elements/breadcrumbs.rb +0 -33
  131. data/lib/design_system/govuk/builders/grid.rb +0 -12
  132. data/lib/design_system/govuk/builders/heading.rb +0 -11
  133. data/lib/design_system/govuk/builders/inset_text.rb +0 -11
  134. data/lib/design_system/govuk/builders/link.rb +0 -21
  135. data/lib/design_system/govuk/builders/list.rb +0 -11
  136. data/lib/design_system/govuk/builders/notification.rb +0 -11
  137. data/lib/design_system/govuk/builders/panel.rb +0 -18
  138. data/lib/design_system/govuk/builders/paragraph.rb +0 -11
  139. data/lib/design_system/govuk/builders/summary_list.rb +0 -32
  140. data/lib/design_system/govuk/builders/tab.rb +0 -54
  141. data/lib/design_system/govuk/builders/table.rb +0 -77
  142. data/lib/design_system/nhsuk/builders/action_link.rb +0 -30
  143. data/lib/design_system/nhsuk/builders/button.rb +0 -11
  144. data/lib/design_system/nhsuk/builders/callout.rb +0 -11
  145. data/lib/design_system/nhsuk/builders/details.rb +0 -10
  146. data/lib/design_system/nhsuk/builders/elements/breadcrumbs.rb +0 -43
  147. data/lib/design_system/nhsuk/builders/grid.rb +0 -12
  148. data/lib/design_system/nhsuk/builders/heading.rb +0 -11
  149. data/lib/design_system/nhsuk/builders/inset_text.rb +0 -23
  150. data/lib/design_system/nhsuk/builders/link.rb +0 -21
  151. data/lib/design_system/nhsuk/builders/list.rb +0 -11
  152. data/lib/design_system/nhsuk/builders/notification.rb +0 -11
  153. data/lib/design_system/nhsuk/builders/panel.rb +0 -11
  154. data/lib/design_system/nhsuk/builders/paragraph.rb +0 -11
  155. data/lib/design_system/nhsuk/builders/summary_list.rb +0 -18
  156. data/lib/design_system/nhsuk/builders/tab.rb +0 -11
  157. data/lib/design_system/nhsuk/builders/table.rb +0 -68
  158. data/public/design_system/static/design_system-0.13.2/design_system.js +0 -1309
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DesignSystem
4
+ module Generic
5
+ module Builders
6
+ # Renders a code block with copy button.
7
+ class Code < Base
8
+ def render_code(code, language)
9
+ content_tag(:div, class: 'app-example__code', data: { controller: 'ds--clipboard' }) do
10
+ content_tag(:button, 'Copy', class: 'app-example__copy-button',
11
+ data: { action: 'click->ds--clipboard#copy', 'ds--clipboard-target': 'buttonText' }) +
12
+ content_tag(:div, class: 'app-example__scroll', tabindex: 0) do
13
+ content_tag(:pre, data: { 'ds--clipboard-target': 'source' }) do
14
+ content_tag(:code, code, data: { controller: 'ds--code-highlight' },
15
+ class: "hljs language-#{language}")
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -2,7 +2,8 @@ module DesignSystem
2
2
  module Generic
3
3
  module Builders
4
4
  module Elements
5
- # This mixin module is used to provide breadcrumbs.
5
+ # This mixin accumulates breadcrumbs and renders them into the
6
+ # :breadcrumbs content_for slot via the per-brand BreadcrumbsComponent.
6
7
  module Breadcrumbs
7
8
  def breadcrumb(label, path)
8
9
  @breadcrumbs ||= []
@@ -13,31 +14,10 @@ module DesignSystem
13
14
 
14
15
  def content_for_breadcrumbs
15
16
  content_for(:breadcrumbs) do
16
- safe_buffer = ActiveSupport::SafeBuffer.new
17
-
18
- @breadcrumbs.each do |breadcrumb|
19
- safe_buffer.concat(render_breadcrumb(breadcrumb))
20
- safe_buffer.concat(' > ') unless @breadcrumbs.last == breadcrumb
21
- end
22
-
23
- safe_buffer
17
+ component = ::DesignSystem::Registry.component(brand, :breadcrumbs).new(breadcrumbs: @breadcrumbs)
18
+ @context.render(component)
24
19
  end
25
20
  end
26
-
27
- def home_path?(path)
28
- root_hash = Rails.application.routes.recognize_path(@context.root_path)
29
- path_hash = Rails.application.routes.recognize_path(path)
30
-
31
- %i[controller action].each do |key|
32
- return false if root_hash[key] != path_hash[key]
33
- end
34
-
35
- true
36
- end
37
-
38
- def render_breadcrumb(breadcrumb)
39
- link_to_unless_current(breadcrumb[:label], breadcrumb[:path])
40
- end
41
21
  end
42
22
  end
43
23
  end
@@ -15,8 +15,9 @@ module DesignSystem
15
15
  safe_buffer = ActiveSupport::SafeBuffer.new
16
16
 
17
17
  safe_buffer.concat(render_caption) if @caption
18
- safe_buffer.concat(DesignSystem::Registry.builder(brand, 'heading', self).render_heading(@main_heading,
19
- level: 1))
18
+ safe_buffer.concat(
19
+ DesignSystem::Registry.component(brand, :heading).new(@main_heading, level: 1).render_in(@context)
20
+ )
20
21
 
21
22
  safe_buffer
22
23
  end
@@ -7,7 +7,7 @@ module DesignSystem
7
7
  module Builders
8
8
  # This class is used to provide will_paginate renderer.
9
9
  class PaginationRenderer < WillPaginate::ActionView::LinkRenderer
10
- include DesignSystem::Generic::Builders::Concerns::BrandDerivable
10
+ include DesignSystem::BrandDerivable
11
11
 
12
12
  def initialize(context)
13
13
  @context = context
@@ -49,12 +49,13 @@ module DesignSystem
49
49
  'aria-label': aria_label)
50
50
  end
51
51
 
52
- def disabled_link_with_title(text, title, aria_label = nil)
52
+ def disabled_link_with_title(text, title, _aria_label = nil)
53
+ # No aria-label here: it is prohibited on a role-less <span>. The visible
54
+ # title plus the visually-hidden text already provide an accessible name.
53
55
  tag(:span,
54
56
  tag(:span, title, class: "#{brand}-pagination__title") +
55
57
  tag(:span, text, class: "#{brand}-u-visually-hidden"),
56
- class: "#{brand}-pagination__link disabled",
57
- 'aria-label': aria_label)
58
+ class: "#{brand}-pagination__link disabled")
58
59
  end
59
60
 
60
61
  # SVG for the "Previous" icon
@@ -2,19 +2,6 @@
2
2
 
3
3
  # This is the generic (unbranded) adapter for design system
4
4
 
5
- require_relative 'generic/builders/concerns/brand_derivable'
6
- require_relative 'generic/builders/button'
7
- require_relative 'generic/builders/callout'
8
- require_relative 'generic/builders/details'
5
+ require_relative 'generic/builders/code'
9
6
  require_relative 'generic/builders/fixed_elements'
10
- require_relative 'generic/builders/grid'
11
- require_relative 'generic/builders/heading'
12
- require_relative 'generic/builders/inset_text'
13
- require_relative 'generic/builders/link'
14
- require_relative 'generic/builders/list'
15
- require_relative 'generic/builders/notification'
16
7
  require_relative 'generic/builders/pagination_renderer'
17
- require_relative 'generic/builders/panel'
18
- require_relative 'generic/builders/paragraph'
19
- require_relative 'generic/builders/tab'
20
- require_relative 'generic/builders/table'
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DesignSystem
4
+ module Govuk
5
+ module Builders
6
+ # This class provides GOVUK methods to display code blocks.
7
+ class Code < ::DesignSystem::Generic::Builders::Code
8
+ end
9
+ end
10
+ end
11
+ end
@@ -5,7 +5,6 @@ module DesignSystem
5
5
  module Builders
6
6
  # This class is used to provide the GOVUK fixed elements builder.
7
7
  class FixedElements < ::DesignSystem::Generic::Builders::FixedElements
8
- include Elements::Breadcrumbs
9
8
  include Elements::Headings
10
9
  end
11
10
  end
@@ -2,20 +2,9 @@
2
2
 
3
3
  # This is the GOV.UK adapter for the design system
4
4
 
5
- require_relative 'govuk/builders/button'
6
- require_relative 'govuk/builders/callout'
7
- require_relative 'govuk/builders/details'
5
+ require_relative 'govuk/builders/code'
8
6
  require_relative 'govuk/builders/fixed_elements'
9
- require_relative 'govuk/builders/heading'
10
- require_relative 'govuk/builders/link'
11
- require_relative 'govuk/builders/list'
12
- require_relative 'govuk/builders/notification'
13
7
  require_relative 'govuk/builders/pagination_renderer'
14
- require_relative 'govuk/builders/panel'
15
- require_relative 'govuk/builders/paragraph'
16
- require_relative 'govuk/builders/summary_list'
17
- require_relative 'govuk/builders/tab'
18
- require_relative 'govuk/builders/table'
19
8
 
20
9
  require_relative 'govuk/form_builder'
21
10
 
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DesignSystem
4
+ module Nhsuk
5
+ module Builders
6
+ # This class provides NHSUK methods to display code blocks.
7
+ class Code < ::DesignSystem::Generic::Builders::Code
8
+ end
9
+ end
10
+ end
11
+ end
@@ -5,7 +5,6 @@ module DesignSystem
5
5
  module Builders
6
6
  # This class is used to provide the NHSUK fixed elements builder.
7
7
  class FixedElements < ::DesignSystem::Govuk::Builders::FixedElements
8
- include Elements::Breadcrumbs
9
8
  end
10
9
  end
11
10
  end
@@ -1,19 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'nhsuk/builders/button'
4
- require_relative 'nhsuk/builders/callout'
3
+ require_relative 'nhsuk/builders/code'
5
4
  require_relative 'nhsuk/builders/fixed_elements'
6
- require_relative 'nhsuk/builders/details'
7
- require_relative 'nhsuk/builders/heading'
8
- require_relative 'nhsuk/builders/link'
9
- require_relative 'nhsuk/builders/list'
10
- require_relative 'nhsuk/builders/notification'
11
5
  require_relative 'nhsuk/builders/pagination_renderer'
12
- require_relative 'nhsuk/builders/panel'
13
- require_relative 'nhsuk/builders/paragraph'
14
- require_relative 'nhsuk/builders/summary_list'
15
- require_relative 'nhsuk/builders/tab'
16
- require_relative 'nhsuk/builders/table'
17
6
 
18
7
  require_relative 'nhsuk/form_builder'
19
8
 
@@ -22,14 +22,32 @@ module DesignSystem
22
22
  klass.new(context)
23
23
  end
24
24
 
25
+ # Resolves a per-brand component class. The component is responsible for
26
+ # rendering — call `render(component(brand, :panel).new(...))` from a
27
+ # helper. Coexists with `builder` during the gradual migration from
28
+ # PORO builders to ViewComponents.
29
+ def component(brand, name)
30
+ raise ArgumentError, "Unknown brand: #{brand}" unless registered?(brand)
31
+
32
+ klass_name = "DesignSystem::#{brand.camelize}::#{name.to_s.camelize}Component"
33
+ klass_name.safe_constantize ||
34
+ raise(ArgumentError, "Unknown component: #{name} for brand #{brand}")
35
+ end
36
+
25
37
  def form_builder(brand)
38
+ raise ArgumentError, "Unknown brand: #{brand}" unless registered?(brand)
39
+
26
40
  "DesignSystem::#{brand.camelcase}::FormBuilder".constantize
27
41
  end
28
42
 
43
+ def registered?(brand)
44
+ Array(design_systems).include?(brand)
45
+ end
46
+
29
47
  private
30
48
 
31
49
  def namespaced_builder_klass(brand, klass_name)
32
- raise ArgumentError, "Unknown brand: #{brand}" unless design_systems.include?(brand)
50
+ raise ArgumentError, "Unknown brand: #{brand}" unless registered?(brand)
33
51
 
34
52
  "DesignSystem::#{brand.camelize}::Builders::#{klass_name.camelize}".constantize
35
53
  end
@@ -1,3 +1,3 @@
1
1
  module DesignSystem
2
- VERSION = '0.13.2'.freeze
2
+ VERSION = '0.15.0'.freeze
3
3
  end