primer_view_components 0.0.61 → 0.0.62

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 (66) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +44 -2
  3. data/app/components/primer/alpha/border_box/header.rb +1 -2
  4. data/app/components/primer/alpha/button_marketing.rb +4 -4
  5. data/app/components/primer/alpha/tab_nav.rb +1 -1
  6. data/app/components/primer/alpha/tab_panels.rb +2 -2
  7. data/app/components/primer/alpha/underline_nav.rb +2 -1
  8. data/app/components/primer/alpha/underline_panels.rb +2 -2
  9. data/app/components/primer/base_component.rb +8 -36
  10. data/app/components/primer/beta/auto_complete/item.rb +1 -1
  11. data/app/components/primer/beta/auto_complete.rb +4 -2
  12. data/app/components/primer/beta/avatar.rb +1 -1
  13. data/app/components/primer/beta/blankslate.html.erb +2 -2
  14. data/app/components/primer/beta/blankslate.rb +6 -3
  15. data/app/components/primer/beta/breadcrumbs.rb +2 -2
  16. data/app/components/primer/beta/text.rb +1 -1
  17. data/app/components/primer/border_box_component.rb +1 -1
  18. data/app/components/primer/box_component.rb +3 -2
  19. data/app/components/primer/button_component.html.erb +3 -9
  20. data/app/components/primer/button_component.rb +21 -2
  21. data/app/components/primer/button_group.rb +1 -1
  22. data/app/components/primer/clipboard_copy.rb +1 -1
  23. data/app/components/primer/close_button.rb +1 -1
  24. data/app/components/primer/component.rb +71 -0
  25. data/app/components/primer/counter_component.rb +1 -1
  26. data/app/components/primer/details_component.rb +1 -1
  27. data/app/components/primer/dropdown/menu.rb +1 -1
  28. data/app/components/primer/dropdown.html.erb +0 -1
  29. data/app/components/primer/dropdown.rb +1 -0
  30. data/app/components/primer/dropdown_menu_component.rb +1 -1
  31. data/app/components/primer/flash_component.rb +2 -1
  32. data/app/components/primer/flex_component.rb +16 -16
  33. data/app/components/primer/flex_item_component.rb +1 -1
  34. data/app/components/primer/hellip_button.rb +1 -1
  35. data/app/components/primer/hidden_text_expander.rb +1 -1
  36. data/app/components/primer/image.rb +1 -1
  37. data/app/components/primer/image_crop.rb +2 -1
  38. data/app/components/primer/layout_component.rb +1 -0
  39. data/app/components/primer/local_time.rb +1 -1
  40. data/app/components/primer/markdown.rb +1 -1
  41. data/app/components/primer/menu_component.rb +2 -1
  42. data/app/components/primer/navigation/tab_component.rb +1 -0
  43. data/app/components/primer/octicon_symbols_component.rb +2 -2
  44. data/app/components/primer/popover_component.rb +1 -1
  45. data/app/components/primer/progress_bar_component.rb +7 -6
  46. data/app/components/primer/spinner_component.rb +1 -1
  47. data/app/components/primer/subhead_component.rb +3 -1
  48. data/app/components/primer/tab_container_component.rb +1 -1
  49. data/app/components/primer/time_ago_component.rb +1 -1
  50. data/app/components/primer/timeline_item_component.rb +4 -3
  51. data/app/components/primer/tooltip.rb +1 -0
  52. data/lib/primer/classify/utilities.rb +26 -23
  53. data/lib/primer/classify/utilities.yml +192 -68
  54. data/lib/primer/classify.rb +92 -178
  55. data/lib/primer/view_components/linters/blankslate_api_migration.rb +11 -5
  56. data/lib/primer/view_components/version.rb +1 -1
  57. data/lib/rubocop/cop/primer/deprecated_layout_component.rb +30 -0
  58. data/lib/rubocop/cop/primer/primer_octicon.rb +1 -3
  59. data/lib/tasks/custom_utilities.yml +192 -0
  60. data/lib/tasks/docs.rake +1 -1
  61. data/lib/tasks/utilities.rake +6 -2
  62. data/static/classes.yml +14 -14
  63. data/static/constants.json +3 -3
  64. metadata +4 -4
  65. data/lib/primer/classify/cache.rb +0 -109
  66. data/lib/primer/classify/flex.rb +0 -111
@@ -61,31 +61,31 @@ module Primer
61
61
  ALLOWED_DIRECTIONS = [DEFAULT_DIRECTION, :column, :column_reverse, :row, :row_reverse].freeze
62
62
 
63
63
  # @example Default
64
- # <%= render(Primer::FlexComponent.new(bg: :tertiary)) do %>
65
- # <%= render(Primer::BoxComponent.new(p: 5, bg: :secondary, classes: "border")) { "Item 1" } %>
66
- # <%= render(Primer::BoxComponent.new(p: 5, bg: :secondary, classes: "border")) { "Item 2" } %>
67
- # <%= render(Primer::BoxComponent.new(p: 5, bg: :secondary, classes: "border")) { "Item 3" } %>
64
+ # <%= render(Primer::FlexComponent.new(bg: :subtle)) do %>
65
+ # <%= render(Primer::BoxComponent.new(p: 5, bg: :subtle, classes: "border")) { "Item 1" } %>
66
+ # <%= render(Primer::BoxComponent.new(p: 5, bg: :subtle, classes: "border")) { "Item 2" } %>
67
+ # <%= render(Primer::BoxComponent.new(p: 5, bg: :subtle, classes: "border")) { "Item 3" } %>
68
68
  # <% end %>
69
69
  #
70
70
  # @example Justify center
71
- # <%= render(Primer::FlexComponent.new(justify_content: :center, bg: :tertiary)) do %>
72
- # <%= render(Primer::BoxComponent.new(p: 5, bg: :secondary, classes: "border")) { "Item 1" } %>
73
- # <%= render(Primer::BoxComponent.new(p: 5, bg: :secondary, classes: "border")) { "Item 2" } %>
74
- # <%= render(Primer::BoxComponent.new(p: 5, bg: :secondary, classes: "border")) { "Item 3" } %>
71
+ # <%= render(Primer::FlexComponent.new(justify_content: :center, bg: :subtle)) do %>
72
+ # <%= render(Primer::BoxComponent.new(p: 5, bg: :subtle, classes: "border")) { "Item 1" } %>
73
+ # <%= render(Primer::BoxComponent.new(p: 5, bg: :subtle, classes: "border")) { "Item 2" } %>
74
+ # <%= render(Primer::BoxComponent.new(p: 5, bg: :subtle, classes: "border")) { "Item 3" } %>
75
75
  # <% end %>
76
76
  #
77
77
  # @example Align end
78
- # <%= render(Primer::FlexComponent.new(align_items: :end, bg: :tertiary)) do %>
79
- # <%= render(Primer::BoxComponent.new(p: 5, bg: :secondary, classes: "border")) { "Item 1" } %>
80
- # <%= render(Primer::BoxComponent.new(p: 5, bg: :secondary, classes: "border")) { "Item 2" } %>
81
- # <%= render(Primer::BoxComponent.new(p: 5, bg: :secondary, classes: "border")) { "Item 3" } %>
78
+ # <%= render(Primer::FlexComponent.new(align_items: :end, bg: :subtle)) do %>
79
+ # <%= render(Primer::BoxComponent.new(p: 5, bg: :subtle, classes: "border")) { "Item 1" } %>
80
+ # <%= render(Primer::BoxComponent.new(p: 5, bg: :subtle, classes: "border")) { "Item 2" } %>
81
+ # <%= render(Primer::BoxComponent.new(p: 5, bg: :subtle, classes: "border")) { "Item 3" } %>
82
82
  # <% end %>
83
83
  #
84
84
  # @example Direction column
85
- # <%= render(Primer::FlexComponent.new(direction: :column, bg: :tertiary)) do %>
86
- # <%= render(Primer::BoxComponent.new(p: 5, bg: :secondary, classes: "border")) { "Item 1" } %>
87
- # <%= render(Primer::BoxComponent.new(p: 5, bg: :secondary, classes: "border")) { "Item 2" } %>
88
- # <%= render(Primer::BoxComponent.new(p: 5, bg: :secondary, classes: "border")) { "Item 3" } %>
85
+ # <%= render(Primer::FlexComponent.new(direction: :column, bg: :subtle)) do %>
86
+ # <%= render(Primer::BoxComponent.new(p: 5, bg: :subtle, classes: "border")) { "Item 1" } %>
87
+ # <%= render(Primer::BoxComponent.new(p: 5, bg: :subtle, classes: "border")) { "Item 2" } %>
88
+ # <%= render(Primer::BoxComponent.new(p: 5, bg: :subtle, classes: "border")) { "Item 3" } %>
89
89
  # <% end %>
90
90
  #
91
91
  # @param justify_content [Symbol] Use this param to distribute space between and around flex items along the main axis of the container. <%= one_of(Primer::FlexComponent::JUSTIFY_CONTENT_OPTIONS) %>
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Primer
4
4
  # Use `FlexItem` to specify the ability of a flex item to alter its
5
- # dimensions to fill available space
5
+ # dimensions to fill available space.
6
6
  #
7
7
  # @deprecated
8
8
  # Use <%= link_to_component(Primer::BoxComponent) %> instead.
@@ -20,7 +20,7 @@ module Primer
20
20
  # @param inline [Boolean] Whether or not the button is inline.
21
21
  # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
22
22
  def initialize(inline: false, **system_arguments)
23
- @system_arguments = system_arguments
23
+ @system_arguments = deny_tag_argument(**system_arguments)
24
24
 
25
25
  validate_aria_label
26
26
 
@@ -22,7 +22,7 @@ module Primer
22
22
  # @param button_arguments [Hash] <%= link_to_system_arguments_docs %> for the button element.
23
23
  # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
24
24
  def initialize(inline: false, button_arguments: {}, **system_arguments)
25
- @system_arguments = system_arguments
25
+ @system_arguments = deny_tag_argument(**system_arguments)
26
26
  @button_arguments = button_arguments
27
27
 
28
28
  @system_arguments[:tag] = :span
@@ -27,7 +27,7 @@ module Primer
27
27
  # @param lazy [Boolean] Whether or not to lazily load the image.
28
28
  # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
29
29
  def initialize(src:, alt:, lazy: false, **system_arguments)
30
- @system_arguments = system_arguments
30
+ @system_arguments = deny_tag_argument(**system_arguments)
31
31
 
32
32
  @system_arguments[:tag] = :img
33
33
  @system_arguments[:src] = src
@@ -6,6 +6,7 @@ module Primer
6
6
  # A loading indicator that is shown while the image is loading.
7
7
  # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
8
8
  renders_one :loading, lambda { |**system_arguments|
9
+ deny_tag_argument(**system_arguments)
9
10
  system_arguments[:tag] = :div
10
11
  system_arguments[:"data-loading-slot"] = true
11
12
 
@@ -27,7 +28,7 @@ module Primer
27
28
  # @param rounded [Boolean] If the crop mask should be a circle. Defaults to true.
28
29
  # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
29
30
  def initialize(src:, rounded: true, **system_arguments)
30
- @system_arguments = system_arguments
31
+ @system_arguments = deny_tag_argument(**system_arguments)
31
32
  @system_arguments[:tag] = "image-crop"
32
33
  @system_arguments[:src] = src
33
34
  @system_arguments[:rounded] = true if rounded
@@ -7,6 +7,7 @@ module Primer
7
7
  #
8
8
  # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
9
9
  renders_one :main, lambda { |**system_arguments|
10
+ deny_tag_argument(**system_arguments)
10
11
  system_arguments[:classes] = class_names("flex-shrink-0", system_arguments[:classes])
11
12
  system_arguments[:col] = (@responsive ? [12, nil, @main_col] : @main_col)
12
13
  system_arguments[:mb] = (@responsive ? [4, nil, 0] : nil)
@@ -33,7 +33,7 @@ module Primer
33
33
  # @param time_zone_name [Symbol] <%= one_of(Primer::LocalTime::TEXT_TYPE_OPTIONS) %>
34
34
  # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
35
35
  def initialize(datetime:, initial_text: nil, weekday: DEFAULT_TEXT_TYPE, year: DEFAULT_DIGIT_TYPE, month: DEFAULT_TEXT_TYPE, day: DEFAULT_DIGIT_TYPE, hour: DEFAULT_DIGIT_TYPE, minute: DEFAULT_DIGIT_TYPE, second: DEFAULT_DIGIT_TYPE, time_zone_name: DEFAULT_TEXT_TYPE, **system_arguments)
36
- @system_arguments = system_arguments
36
+ @system_arguments = deny_tag_argument(**system_arguments)
37
37
 
38
38
  @datetime = datetime
39
39
 
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Primer
4
- # Use `Markdown` to wrap markdown content
4
+ # Use `Markdown` to wrap markdown content.
5
5
  class Markdown < Primer::Component
6
6
  status :beta
7
7
 
@@ -26,6 +26,7 @@ module Primer
26
26
  # @param selected [Boolean] Whether the item is the current selection
27
27
  # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
28
28
  renders_many :items, lambda { |href:, selected: false, **system_arguments|
29
+ deny_tag_argument(**system_arguments)
29
30
  system_arguments[:tag] = :a
30
31
  system_arguments[:href] = href
31
32
  system_arguments[:"aria-current"] = :page if selected
@@ -58,7 +59,7 @@ module Primer
58
59
  #
59
60
  # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
60
61
  def initialize(**system_arguments)
61
- @system_arguments = system_arguments
62
+ @system_arguments = deny_tag_argument(**system_arguments)
62
63
  @system_arguments[:tag] = :nav
63
64
  @system_arguments[:classes] = class_names(
64
65
  "menu",
@@ -20,6 +20,7 @@ module Primer
20
20
  renders_one :panel, lambda { |**system_arguments|
21
21
  return unless @with_panel
22
22
 
23
+ deny_tag_argument(**system_arguments)
23
24
  system_arguments[:id] = @panel_id
24
25
  system_arguments[:tag] = :div
25
26
  system_arguments[:role] ||= :tabpanel
@@ -6,8 +6,8 @@ module Primer
6
6
  # OcticonSymbols renders a symbol dictionary using a list of <%= link_to_octicons %>.
7
7
  class OcticonSymbolsComponent < Primer::Component
8
8
  # @example Symbol dictionary
9
- # <%= render(Primer::OcticonComponent.new(icon: :check, use_symbol: true, color: :icon_success)) %>
10
- # <%= render(Primer::OcticonComponent.new(icon: :check, use_symbol: true, color: :text_danger)) %>
9
+ # <%= render(Primer::OcticonComponent.new(icon: :check, use_symbol: true, color: :success)) %>
10
+ # <%= render(Primer::OcticonComponent.new(icon: :check, use_symbol: true, color: :danger)) %>
11
11
  # <%= render(Primer::OcticonComponent.new(icon: :check, use_symbol: true, size: :medium)) %>
12
12
  # <%= render(Primer::OcticonSymbolsComponent.new(icons: [{ symbol: :check }, { symbol: :check, size: :medium }])) %>
13
13
  #
@@ -108,7 +108,7 @@ module Primer
108
108
  #
109
109
  # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
110
110
  def initialize(**system_arguments)
111
- @system_arguments = system_arguments
111
+ @system_arguments = deny_tag_argument(**system_arguments)
112
112
  @system_arguments[:tag] = :div
113
113
  @system_arguments[:classes] = class_names(
114
114
  system_arguments[:classes],
@@ -10,7 +10,8 @@ module Primer
10
10
  # @param percentage [Integer] The percent complete
11
11
  # @param bg [Symbol] The background color
12
12
  # @param kwargs [Hash] The same arguments as <%= link_to_system_arguments_docs %>.
13
- renders_many :items, lambda { |percentage: 0, bg: :success_inverse, **system_arguments|
13
+ renders_many :items, lambda { |percentage: 0, bg: :success_emphasis, **system_arguments|
14
+ deny_tag_argument(**system_arguments)
14
15
  system_arguments[:tag] = :span
15
16
  system_arguments[:bg] = bg
16
17
  system_arguments[:style] = join_style_arguments(system_arguments[:style], "width: #{percentage}%;")
@@ -35,25 +36,25 @@ module Primer
35
36
  #
36
37
  # @example Small
37
38
  # <%= render(Primer::ProgressBarComponent.new(size: :small)) do |component| %>
38
- # <% component.item(bg: :info_inverse, percentage: 50) %>
39
+ # <% component.item(bg: :accent_emphasis, percentage: 50) %>
39
40
  # <% end %>
40
41
  #
41
42
  # @example Large
42
43
  # <%= render(Primer::ProgressBarComponent.new(size: :large)) do |component| %>
43
- # <% component.item(bg: :danger_inverse, percentage: 75) %>
44
+ # <% component.item(bg: :danger_emphasis, percentage: 75) %>
44
45
  # <% end %>
45
46
  #
46
47
  # @example Multiple items
47
48
  # <%= render(Primer::ProgressBarComponent.new) do |component| %>
48
49
  # <% component.item(percentage: 10) %>
49
- # <% component.item(bg: :info_inverse, percentage: 20) %>
50
- # <% component.item(bg: :danger_inverse, percentage: 30) %>
50
+ # <% component.item(bg: :accent_emphasis, percentage: 20) %>
51
+ # <% component.item(bg: :danger_emphasis, percentage: 30) %>
51
52
  # <% end %>
52
53
  #
53
54
  # @param size [Symbol] <%= one_of(Primer::ProgressBarComponent::SIZE_OPTIONS) %> Increases height.
54
55
  # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
55
56
  def initialize(size: SIZE_DEFAULT, **system_arguments)
56
- @system_arguments = system_arguments
57
+ @system_arguments = deny_tag_argument(**system_arguments)
57
58
  @system_arguments[:classes] = class_names(
58
59
  @system_arguments[:classes],
59
60
  "Progress",
@@ -30,7 +30,7 @@ module Primer
30
30
  # @param style [String] Custom element styles.
31
31
  # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
32
32
  def initialize(size: DEFAULT_SIZE, style: DEFAULT_STYLE, **system_arguments)
33
- @system_arguments = system_arguments
33
+ @system_arguments = deny_tag_argument(**system_arguments)
34
34
  @system_arguments[:tag] = :svg
35
35
  @system_arguments[:style] ||= style
36
36
  @system_arguments[:animation] = :rotate
@@ -36,6 +36,7 @@ module Primer
36
36
  #
37
37
  # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
38
38
  renders_one :actions, lambda { |**system_arguments|
39
+ deny_tag_argument(**system_arguments)
39
40
  system_arguments[:tag] = :div
40
41
  system_arguments[:classes] = class_names(system_arguments[:classes], "Subhead-actions")
41
42
 
@@ -46,6 +47,7 @@ module Primer
46
47
  #
47
48
  # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
48
49
  renders_one :description, lambda { |**system_arguments|
50
+ deny_tag_argument(**system_arguments)
49
51
  system_arguments[:tag] = :div
50
52
  system_arguments[:classes] = class_names(system_arguments[:classes], "Subhead-description")
51
53
 
@@ -111,7 +113,7 @@ module Primer
111
113
  # @param hide_border [Boolean] Whether to hide the border under the heading.
112
114
  # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
113
115
  def initialize(spacious: false, hide_border: false, **system_arguments)
114
- @system_arguments = system_arguments
116
+ @system_arguments = deny_tag_argument(**system_arguments)
115
117
 
116
118
  @system_arguments[:tag] = :div
117
119
  @system_arguments[:classes] =
@@ -26,7 +26,7 @@ module Primer
26
26
  #
27
27
  # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
28
28
  def initialize(**system_arguments)
29
- @system_arguments = system_arguments
29
+ @system_arguments = deny_tag_argument(**system_arguments)
30
30
  @system_arguments[:tag] = "tab-container"
31
31
  end
32
32
 
@@ -12,7 +12,7 @@ module Primer
12
12
  # @param micro [Boolean] If true then the text will be formatted in "micro" mode, using as few characters as possible
13
13
  # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
14
14
  def initialize(time:, micro: false, **system_arguments)
15
- @system_arguments = system_arguments
15
+ @system_arguments = deny_tag_argument(**system_arguments)
16
16
  @system_arguments[:datetime] = time.utc.iso8601
17
17
  @system_arguments[:classes] = class_names("no-wrap", @system_arguments[:classes])
18
18
  @system_arguments[:tag] = "time-ago"
@@ -27,6 +27,7 @@ module Primer
27
27
  #
28
28
  # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
29
29
  renders_one :body, lambda { |**system_arguments|
30
+ deny_tag_argument(**system_arguments)
30
31
  system_arguments[:tag] = :div
31
32
  system_arguments[:classes] = class_names(
32
33
  "TimelineItem-body",
@@ -40,7 +41,7 @@ module Primer
40
41
  # <div style="padding-left: 60px">
41
42
  # <%= render(Primer::TimelineItemComponent.new) do |component| %>
42
43
  # <% component.avatar(src: "https://github.com/github.png", alt: "github") %>
43
- # <% component.badge(bg: :success_inverse, color: :text_white, icon: :check) %>
44
+ # <% component.badge(bg: :success_emphasis, color: :on_emphasis, icon: :check) %>
44
45
  # <% component.body { "Success!" } %>
45
46
  # <% end %>
46
47
  # </div>
@@ -48,7 +49,7 @@ module Primer
48
49
  # @param condensed [Boolean] Reduce the vertical padding and remove the background from the badge item. Most commonly used in commits.
49
50
  # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
50
51
  def initialize(condensed: false, **system_arguments)
51
- @system_arguments = system_arguments
52
+ @system_arguments = deny_tag_argument(**system_arguments)
52
53
  @system_arguments[:tag] = :div
53
54
  @system_arguments[:classes] = class_names(
54
55
  "TimelineItem",
@@ -67,7 +68,7 @@ module Primer
67
68
  def initialize(icon: nil, **system_arguments)
68
69
  @icon = icon
69
70
 
70
- @system_arguments = system_arguments
71
+ @system_arguments = deny_tag_argument(**system_arguments)
71
72
  @system_arguments[:tag] = :div
72
73
  @system_arguments[:classes] = class_names(
73
74
  "TimelineItem-badge",
@@ -72,6 +72,7 @@ module Primer
72
72
  @system_arguments = system_arguments
73
73
  @system_arguments[:tag] ||= :span # rubocop:disable Primer/NoTagMemoize
74
74
  @system_arguments[:aria] = { label: label }
75
+ @system_arguments[:skip_aria_label_check] = true
75
76
 
76
77
  @system_arguments[:classes] = class_names(
77
78
  @system_arguments[:classes],
@@ -16,6 +16,7 @@ module Primer
16
16
  )
17
17
  ).freeze
18
18
  # rubocop:enable Security/YAMLLoad
19
+
19
20
  BREAKPOINTS = ["", "-sm", "-md", "-lg", "-xl"].freeze
20
21
 
21
22
  # Replacements for some classnames that end up being a different argument key
@@ -145,6 +146,30 @@ module Primer
145
146
  end.join(", ")
146
147
  end
147
148
 
149
+ def validate(key, val, breakpoint)
150
+ unless supported_key?(key)
151
+ raise ArgumentError, "#{key} is not a valid Primer utility key" if validate_class_names?
152
+
153
+ return ""
154
+ end
155
+
156
+ unless breakpoint.empty? || responsive?(key, val)
157
+ raise ArgumentError, "#{key} does not support responsive values" if validate_class_names?
158
+
159
+ return ""
160
+ end
161
+
162
+ unless supported_value?(key, val)
163
+ raise ArgumentError, "#{val} is not a valid value for :#{key}. Use one of #{mappings(key)}" if validate_class_names?
164
+
165
+ return nil if [true, false].include?(val)
166
+
167
+ return "#{key.to_s.dasherize}-#{val.to_s.dasherize}"
168
+ end
169
+
170
+ nil
171
+ end
172
+
148
173
  private
149
174
 
150
175
  def find_selector(selector)
@@ -160,7 +185,7 @@ module Primer
160
185
  next unless classnames.include?(selector)
161
186
 
162
187
  # Return [:mr, 0, 1]
163
- # has index of classname, so we can match it up with responsvie array `mr: [nil, 0]`
188
+ # has index of classname, so we can match it up with responsive array `mr: [nil, 0]`
164
189
  return [key, key_argument, classnames.index(selector)]
165
190
  end
166
191
 
@@ -174,28 +199,6 @@ module Primer
174
199
 
175
200
  selector.split("-").first.to_sym
176
201
  end
177
-
178
- def validate(key, val, breakpoint)
179
- unless supported_key?(key)
180
- raise ArgumentError, "#{key} is not a valid Primer utility key" if validate_class_names?
181
-
182
- return ""
183
- end
184
-
185
- unless breakpoint.empty? || responsive?(key, val)
186
- raise ArgumentError, "#{key} does not support responsive values" if validate_class_names?
187
-
188
- return ""
189
- end
190
-
191
- unless supported_value?(key, val)
192
- raise ArgumentError, "#{val} is not a valid value for :#{key}. Use one of #{mappings(key)}" if validate_class_names?
193
-
194
- return "#{key.to_s.dasherize}-#{val.to_s.dasherize}"
195
- end
196
-
197
- nil
198
- end
199
202
  end
200
203
  end
201
204
  end