primer_view_components 0.0.48 → 0.0.52

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +155 -0
  3. data/app/components/primer/base_component.rb +2 -2
  4. data/app/components/primer/beta/avatar.rb +1 -1
  5. data/app/components/primer/{avatar_stack_component.html.erb → beta/avatar_stack.html.erb} +0 -0
  6. data/app/components/primer/beta/avatar_stack.rb +92 -0
  7. data/app/components/primer/beta/truncate.html.erb +5 -0
  8. data/app/components/primer/beta/truncate.rb +110 -0
  9. data/app/components/primer/border_box_component.rb +27 -1
  10. data/app/components/primer/clipboard_copy.html.erb +2 -2
  11. data/app/components/primer/clipboard_copy.rb +1 -1
  12. data/app/components/primer/dropdown.rb +7 -7
  13. data/app/components/primer/icon_button.rb +1 -1
  14. data/app/components/primer/image_crop.html.erb +4 -4
  15. data/app/components/primer/label_component.rb +13 -12
  16. data/app/components/primer/navigation/tab_component.rb +16 -2
  17. data/app/components/primer/progress_bar_component.rb +0 -3
  18. data/app/components/primer/tab_nav_component.rb +4 -3
  19. data/app/components/primer/truncate.rb +1 -1
  20. data/app/components/primer/underline_nav_component.rb +3 -2
  21. data/app/lib/primer/fetch_or_fallback_helper.rb +2 -0
  22. data/app/lib/primer/octicon/cache.rb +1 -1
  23. data/app/lib/primer/tabbed_component_helper.rb +1 -1
  24. data/app/lib/primer/view_helper.rb +1 -0
  25. data/lib/primer/classify.rb +4 -16
  26. data/lib/primer/classify/cache.rb +0 -5
  27. data/lib/primer/classify/flex.rb +1 -1
  28. data/lib/primer/classify/functional_colors.rb +1 -1
  29. data/lib/primer/classify/utilities.rb +51 -13
  30. data/lib/primer/classify/utilities.yml +16 -0
  31. data/lib/primer/classify/validation.rb +18 -0
  32. data/lib/primer/view_components.rb +34 -6
  33. data/lib/primer/view_components/constants.rb +55 -0
  34. data/lib/primer/view_components/linters/argument_mappers/base.rb +100 -0
  35. data/lib/primer/view_components/linters/argument_mappers/button.rb +33 -46
  36. data/lib/primer/view_components/linters/argument_mappers/clipboard_copy.rb +19 -0
  37. data/lib/primer/view_components/linters/argument_mappers/helpers/erb_block.rb +67 -0
  38. data/lib/primer/view_components/linters/argument_mappers/label.rb +49 -0
  39. data/lib/primer/view_components/linters/argument_mappers/system_arguments.rb +6 -5
  40. data/lib/primer/view_components/linters/autocorrectable.rb +30 -0
  41. data/lib/primer/view_components/linters/button_component_migration_counter.rb +9 -23
  42. data/lib/primer/view_components/linters/clipboard_copy_component_migration_counter.rb +21 -0
  43. data/lib/primer/view_components/linters/close_button_component_migration_counter.rb +16 -0
  44. data/lib/primer/view_components/linters/helpers.rb +47 -42
  45. data/lib/primer/view_components/linters/label_component_migration_counter.rb +25 -0
  46. data/lib/primer/view_components/version.rb +1 -1
  47. data/lib/rubocop/config/default.yml +5 -0
  48. data/lib/rubocop/cop/primer.rb +1 -2
  49. data/lib/rubocop/cop/primer/deprecated_arguments.rb +173 -0
  50. data/lib/rubocop/cop/primer/no_tag_memoize.rb +1 -0
  51. data/lib/rubocop/cop/primer/primer_octicon.rb +178 -0
  52. data/lib/rubocop/cop/primer/system_argument_instead_of_class.rb +12 -16
  53. data/lib/tasks/constants.rake +12 -0
  54. data/lib/tasks/coverage.rake +4 -0
  55. data/lib/tasks/docs.rake +27 -25
  56. data/lib/tasks/utilities.rake +9 -13
  57. data/lib/yard/docs_helper.rb +15 -5
  58. data/static/arguments.yml +980 -0
  59. data/static/assets/view-components.svg +18 -0
  60. data/static/classes.yml +182 -0
  61. data/static/constants.json +640 -0
  62. data/static/statuses.json +4 -2
  63. metadata +29 -10
  64. data/app/components/primer/avatar_stack_component.rb +0 -90
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2c751bc60362c19e97ba5fbe22227e19186efa799862932a6f7b8541ad8e1eaa
4
- data.tar.gz: 4efd584159e4883f8bcc72954fff356c753b0b8980056ee0c58b7a3bd650cb90
3
+ metadata.gz: ad52227798e79cb0259c00e61d24a3e72854dfb4fa4ffb4901fb30a2fa7f3370
4
+ data.tar.gz: 5f2e4decc740b1e9712744819d655091a2a45e9ac8b403beed54c8c9e6a6e332
5
5
  SHA512:
6
- metadata.gz: c6169f90241d046f9cee4faf1fb971cac34360c8ebb116e2c2e39fdd0aeff5e8cca17e899bdd8a97f94ebefa4c3705d6929b0978a96f0264dcab3fa96342faaf
7
- data.tar.gz: 8576857a521647f43ccb3fe413b0e24b5d65a8c06e9036dd3035b37d8fb5989aa43a7ac2d33863f5faa022c099c6a8386d30de8b764e19cf93b9dcb207fd4eef
6
+ metadata.gz: c7cac3105837c025730e7c6e01395db680d1c750bf4d2240594f00c4758a7d404802d184dd3bd53a14c8a2e14e25776152792e97fceb2a686182aaf1474ae162
7
+ data.tar.gz: f296ae7b5e8f6217b05e719169db5f08b1d1d8d7fb9293e083ae9a836f12d98c73e88cc320df3522a902f4dada28ac10ce7c9f37a96f0b175aaa1e2940e1bec9
data/CHANGELOG.md CHANGED
@@ -30,6 +30,161 @@ The category for changes related to documentation, testing and tooling. Also, fo
30
30
 
31
31
  ## main
32
32
 
33
+ ## 0.0.52
34
+
35
+ ### New
36
+
37
+ * Adding `Primer::Beta::Truncate` component to reflect changes in primer/css component [Truncate](https://primer.style/css/components/truncate).
38
+
39
+ *Jon Rohan*
40
+
41
+ * Add cop to look for deprecated system arguments and suggest replacements.
42
+
43
+ *Jon Rohan*
44
+
45
+ * Add cop to use `primer_octicon` in favor of `octicon`.
46
+
47
+ *Manuel Puyol*
48
+
49
+ * Fix release script so it doesn't loop continuously.
50
+
51
+ *Cameron Dutro*
52
+
53
+ ### Updates
54
+
55
+ * Promote `ClipboardCopy` to beta.
56
+
57
+ *Manuel Puyol*
58
+
59
+ * PrimerOcticon linter supports `aria-` and `data-` attributes.
60
+
61
+ *Manuel Puyol*
62
+
63
+ * Linters can:
64
+ * convert values with ERB interpolations.
65
+ * autocorrect cases with custom classes.
66
+
67
+ *Manuel Puyol*
68
+
69
+ * Add a `scheme` option to `BorderBoxComponent` rows.
70
+
71
+ *Cameron Dutro*
72
+
73
+ * Upgrade rubocop and support Ruby 3.0.
74
+
75
+ *Cameron Dutro*
76
+
77
+ * Linters will not autocorrect cases where a required argument is missing.
78
+
79
+ *Manuel Puyol*
80
+
81
+ ### Misc
82
+
83
+ * Update benchmarks to run in every supported Ruby version.
84
+
85
+ *Manuel Puyol*
86
+
87
+ ## 0.0.51
88
+
89
+ ### Breaking changes
90
+
91
+ * Rename `width` and `height` System Arguments to `w` and `h`, resolving conflict with HTML attribute names.
92
+
93
+ *Manuel Puyol*
94
+
95
+ ### Updates
96
+
97
+ * `SystemArgumentInsteadOfClass` linter will check for arguments in ViewHelpers.
98
+
99
+ *Manuel Puyol*
100
+
101
+ ## 0.0.50
102
+
103
+ ### Updates
104
+
105
+ * Fix incorrect slots syntax in docs.
106
+
107
+ *Joel Hawksley*, *Blake Williams*
108
+
109
+ ### New
110
+
111
+ * Add linter suggestions for `CloseButton` component.
112
+
113
+ *Manuel Puyol*
114
+
115
+ ### Breaking changes
116
+
117
+ * Update to `octicons` `v15`, removing open-ended dependency. See [https://github.com/primer/octicons/releases/tag/v15.0.0] for icon name changes in release.
118
+
119
+ *Joel Hawksley*
120
+
121
+ ### Updates
122
+
123
+ * Don't require `title` for `Label`.
124
+
125
+ *Manuel Puyol*
126
+
127
+ * Improve autocorrectable linters to convert known SystemArgument classes.
128
+
129
+ *Manuel Puyol*
130
+
131
+ * Add support for `width: :full` and `height: :full` to System Arguments.
132
+
133
+ *Joel Hawksley*
134
+
135
+ ### Bug fixes
136
+
137
+ * Update linters to not autocorrect attributes with ERB blocks.
138
+
139
+ *Manuel Puyol*
140
+
141
+ * Fix `:height` and `:width` docs to pull from Utilities
142
+
143
+ *Jon Rohan*
144
+
145
+ ## 0.0.49
146
+
147
+ ### New
148
+
149
+ * Add linter suggestions for `Label` component.
150
+
151
+ *Manuel Puyol*
152
+
153
+ * Add linter suggestions for `ClipboardCopy` component.
154
+
155
+ *Manuel Puyol*
156
+
157
+ ### Updates
158
+
159
+ * Update the `Truncate` component to accept `:strong` as a tag.
160
+
161
+ *Amélia Chavot*
162
+
163
+ * Improve `Primer::Classify::Utilities.classes_to_hash` performance.
164
+
165
+ *Manuel Puyol*
166
+
167
+ ### Breaking changes
168
+
169
+ * Require tab with panels to have `panel_id` so `aria-controls` can be set.
170
+
171
+ *Kate Higa*
172
+
173
+ * Renames:
174
+ * `Primer::AvatarStackComponent` to `Primer::Beta::AvatarStack`.
175
+
176
+ *Manuel Puyol*
177
+
178
+ ### Misc
179
+
180
+ * Extract example tag parsing into helper.
181
+
182
+ *Kate Higa*
183
+
184
+ * Generate a static constant JSON and use it when defining linters.
185
+
186
+ *Manuel Puyol*
187
+
33
188
  ## 0.0.48
34
189
 
35
190
  ### Breaking changes
@@ -79,7 +79,6 @@ module Primer
79
79
  # | `flex_shrink` | Integer | To enable, set to `0`. |
80
80
  # | `flex_wrap` | Symbol | <%= one_of(Primer::Classify::Flex::WRAP_MAPPINGS.keys) %> |
81
81
  # | `justify_content` | Symbol | <%= one_of(Primer::Classify::Flex::JUSTIFY_CONTENT_VALUES) %> |
82
- # | `width` | Symbol | <%= one_of([:fit]) %> |
83
82
  #
84
83
  # ## Grid
85
84
  #
@@ -94,7 +93,8 @@ module Primer
94
93
  # | Name | Type | Description |
95
94
  # | :- | :- | :- |
96
95
  # | `display` | Symbol | <%= one_of(Primer::Classify::Utilities.mappings(:display)) %> |
97
- # | `height` | Symbol | <%= one_of([:fit]) %> |
96
+ # | `w` | Symbol | <%= one_of(Primer::Classify::Utilities.mappings(:w)) %> Also supports integer values. |
97
+ # | `h` | Symbol | <%= one_of(Primer::Classify::Utilities.mappings(:h)) %> Also supports integer values. |
98
98
  # | `hide` | Symbol | Hide the element at a specific breakpoint. <%= one_of(Primer::Classify::Utilities.mappings(:hide)) %> |
99
99
  # | `visibility` | Symbol | Visibility. <%= one_of(Primer::Classify::Utilities.mappings(:visibility)) %> |
100
100
  # | `vertical_align` | Symbol | <%= one_of(Primer::Classify::Utilities.mappings(:vertical_align)) %> |
@@ -8,7 +8,7 @@ module Primer
8
8
  # for organizations or any other non-human avatars.
9
9
  # - By default, `Avatar` will render a static `<img>`. To have `Avatar` function as a link, set the `href` which will wrap the `<img>` in a `<a>`.
10
10
  # - Set `size` to update the height and width of the `Avatar` in pixels.
11
- # - To stack multiple avatars together, use <%= link_to_component(Primer::AvatarStackComponent) %>.
11
+ # - To stack multiple avatars together, use <%= link_to_component(Primer::Beta::AvatarStack) %>.
12
12
  #
13
13
  # @accessibility
14
14
  # Images should have text alternatives that describe the information or function represented.
@@ -0,0 +1,92 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Primer
4
+ module Beta
5
+ # Use `AvatarStack` to stack multiple avatars together.
6
+ class AvatarStack < Primer::Component
7
+ status :beta
8
+
9
+ ALIGN_DEFAULT = :left
10
+ ALIGN_OPTIONS = [ALIGN_DEFAULT, :right].freeze
11
+
12
+ DEFAULT_TAG = :div
13
+ TAG_OPTIONS = [DEFAULT_TAG, :span].freeze
14
+
15
+ DEFAULT_BODY_TAG = :div
16
+ BODY_TAG_OPTIONS = [DEFAULT_BODY_TAG, :span].freeze
17
+ # Required list of stacked avatars.
18
+ #
19
+ # @param kwargs [Hash] The same arguments as <%= link_to_component(Primer::Beta::Avatar) %>.
20
+ renders_many :avatars, "Primer::Beta::Avatar"
21
+
22
+ # @example Default
23
+ # <%= render(Primer::Beta::AvatarStack.new) do |c| %>
24
+ # <% c.avatar(src: "http://placekitten.com/200/200", alt: "@kittenuser") %>
25
+ # <% c.avatar(src: "http://placekitten.com/200/200", alt: "@kittenuser") %>
26
+ # <% c.avatar(src: "http://placekitten.com/200/200", alt: "@kittenuser") %>
27
+ # <% end %>
28
+ #
29
+ # @example Align right
30
+ # <%= render(Primer::Beta::AvatarStack.new(align: :right)) do |c| %>
31
+ # <% c.avatar(src: "http://placekitten.com/200/200", alt: "@kittenuser") %>
32
+ # <% c.avatar(src: "http://placekitten.com/200/200", alt: "@kittenuser") %>
33
+ # <% c.avatar(src: "http://placekitten.com/200/200", alt: "@kittenuser") %>
34
+ # <% end %>
35
+ #
36
+ # @example With tooltip
37
+ # <%= render(Primer::Beta::AvatarStack.new(tooltipped: true, body_arguments: { label: 'This is a tooltip!' })) do |c| %>
38
+ # <% c.avatar(src: "http://placekitten.com/200/200", alt: "@kittenuser") %>
39
+ # <% c.avatar(src: "http://placekitten.com/200/200", alt: "@kittenuser") %>
40
+ # <% c.avatar(src: "http://placekitten.com/200/200", alt: "@kittenuser") %>
41
+ # <% end %>
42
+ #
43
+ # @param tag [Symbol] <%= one_of(Primer::Beta::AvatarStack::TAG_OPTIONS) %>
44
+ # @param align [Symbol] <%= one_of(Primer::Beta::AvatarStack::ALIGN_OPTIONS) %>
45
+ # @param tooltipped [Boolean] Whether to add a tooltip to the stack or not.
46
+ # @param body_arguments [Hash] Parameters to add to the Body. If `tooltipped` is set, has the same arguments as <%= link_to_component(Primer::Tooltip) %>.
47
+ # The default tag is <%= pretty_value(Primer::Beta::AvatarStack::DEFAULT_BODY_TAG) %> but can be changed using `tag:`
48
+ # to <%= one_of(Primer::Beta::AvatarStack::BODY_TAG_OPTIONS, lower: true) %>
49
+ # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
50
+ def initialize(tag: DEFAULT_TAG, align: ALIGN_DEFAULT, tooltipped: false, body_arguments: {}, **system_arguments)
51
+ @align = fetch_or_fallback(ALIGN_OPTIONS, align, ALIGN_DEFAULT)
52
+ @system_arguments = system_arguments
53
+ @tooltipped = tooltipped
54
+ @body_arguments = body_arguments
55
+
56
+ body_tag = @body_arguments[:tag] || DEFAULT_BODY_TAG
57
+ @body_arguments[:tag] = fetch_or_fallback(BODY_TAG_OPTIONS, body_tag, DEFAULT_BODY_TAG)
58
+ @body_arguments[:classes] = class_names(
59
+ "AvatarStack-body",
60
+ @body_arguments[:classes]
61
+ )
62
+
63
+ @system_arguments[:tag] = fetch_or_fallback(TAG_OPTIONS, tag, DEFAULT_TAG)
64
+ @system_arguments[:classes] = class_names(
65
+ "AvatarStack",
66
+ system_arguments[:classes],
67
+ "AvatarStack--right" => @align == :right
68
+ )
69
+ end
70
+
71
+ def body_component
72
+ if @tooltipped
73
+ Primer::Tooltip.new(**@body_arguments)
74
+ else
75
+ Primer::BaseComponent.new(**@body_arguments)
76
+ end
77
+ end
78
+
79
+ def before_render
80
+ @system_arguments[:classes] = class_names(
81
+ @system_arguments[:classes],
82
+ "AvatarStack--two" => avatars.size == 2,
83
+ "AvatarStack--three-plus" => avatars.size > 2
84
+ )
85
+ end
86
+
87
+ def render?
88
+ avatars.any?
89
+ end
90
+ end
91
+ end
92
+ end
@@ -0,0 +1,5 @@
1
+ <%= render Primer::BaseComponent.new(**@system_arguments) do %>
2
+ <% items.each do |item| %>
3
+ <%= item %>
4
+ <% end %>
5
+ <% end %>
@@ -0,0 +1,110 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Primer
4
+ module Beta
5
+ # Use `Truncate` to shorten overflowing text with an ellipsis.
6
+ class Truncate < Primer::Component
7
+ status :beta
8
+
9
+ # Text slot used for the truncated text.
10
+ #
11
+ # @param priority [Boolean] if true, the text will be given priority
12
+ # @param expandable [Boolean] if true, the text will expand on hover or focus
13
+ # @param max_width [Integer] if provided, the text will be truncated at a maximum width
14
+ # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
15
+ renders_many :items, "TruncateText"
16
+
17
+ # @example Default
18
+ # <%= render(Primer::Beta::Truncate.new) { "branch-name-that-is-really-long" } %>
19
+ #
20
+ # @example Multiple items
21
+ # <%= render(Primer::Beta::Truncate.new) do |component| %>
22
+ # <% component.item do %>really-long-repository-owner-name<% end %>
23
+ # <% component.item(font_weight: :bold) do %>
24
+ # <%= render(Primer::BaseComponent.new(tag: :span, font_weight: :normal)) { "/" } %> really-long-repository-name
25
+ # <% end %>
26
+ # <% end %>
27
+ #
28
+ # @example Advanced multiple items
29
+ # <%= render(Primer::Beta::Truncate.new(tag: :ol)) do |component| %>
30
+ # <% component.item(tag: :li) do %>primer<% end %>
31
+ # <% component.item(tag: :li, priority: true) do %>/ css<% end %>
32
+ # <% component.item(tag: :li) do %>/ Issues<% end %>
33
+ # <% component.item(tag: :li) do %>/ #123 —<% end %>
34
+ # <% component.item(tag: :li, priority: true) do %>
35
+ # Visual bug on primer.style found in lists
36
+ # <% end %>
37
+ # <% end %>
38
+ #
39
+ # @example Expand on hover or focus
40
+ # <%= render(Primer::Beta::Truncate.new) do |component| %>
41
+ # <% component.item(tag: :a, href: "#", expandable: true) do %>really-long-repository-owner-name<% end %>
42
+ # <% component.item(tag: :a, href: "#", expandable: true) do %>really-long-repository-owner-name<% end %>
43
+ # <% component.item(tag: :a, href: "#", expandable: true) do %>really-long-repository-owner-name<% end %>
44
+ # <% component.item(tag: :a, href: "#", expandable: true) do %>really-long-repository-owner-name<% end %>
45
+ # <% end %>
46
+ #
47
+ # @example Max widths
48
+ # <%= render(Primer::Beta::Truncate.new) do |component| %>
49
+ # <% component.item(max_width: 300, expandable: true) do %>branch-name-that-is-really-long-branch-name-that-is-really-long-branch-name-that-is-really-long<% end %>
50
+ # <% component.item(max_width: 200, expandable: true) do %>branch-name-that-is-really-long-branch-name-that-is-really-long-branch-name-that-is-really-long<% end %>
51
+ # <% component.item(max_width: 100, expandable: true) do %>branch-name-that-is-really-long-branch-name-that-is-really-long-branch-name-that-is-really-long<% end %>
52
+ # <% end %>
53
+ #
54
+ # @example Max widths on new lines
55
+ # <%= render(Primer::Beta::Truncate.new) do |component| %>
56
+ # <% component.item(max_width: 300, expandable: true) do %>branch-name-that-is-really-long-branch-name-that-is-really-long-branch-name-that-is-really-long<% end %>
57
+ # <% end %>
58
+ # <br/>
59
+ # <%= render(Primer::Beta::Truncate.new) do |component| %>
60
+ # <% component.item(max_width: 200, expandable: true) do %>branch-name-that-is-really-long-branch-name-that-is-really-long-branch-name-that-is-really-long<% end %>
61
+ # <% end %>
62
+ # <br/>
63
+ # <%= render(Primer::Beta::Truncate.new) do |component| %>
64
+ # <% component.item(max_width: 100, expandable: true) do %>branch-name-that-is-really-long-branch-name-that-is-really-long-branch-name-that-is-really-long<% end %>
65
+ # <% end %>
66
+ #
67
+ # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
68
+ def initialize(**system_arguments)
69
+ @system_arguments = system_arguments
70
+ @system_arguments[:tag] = system_arguments[:tag] || :span
71
+ @system_arguments[:classes] = class_names(
72
+ "Truncate",
73
+ system_arguments[:classes]
74
+ )
75
+ end
76
+
77
+ def before_render
78
+ return unless content.present? && items.empty?
79
+
80
+ item { content }
81
+ end
82
+
83
+ def render?
84
+ items.any?
85
+ end
86
+
87
+ # This component is part of `Primer::Beta::Truncate` and should not be
88
+ # used as a standalone component.
89
+ class TruncateText < Primer::Component
90
+ def initialize(priority: false, expandable: false, max_width: nil, **system_arguments)
91
+ @system_arguments = system_arguments
92
+ @system_arguments[:tag] = system_arguments[:tag] || :span
93
+ @system_arguments[:classes] = class_names(
94
+ "Truncate-text",
95
+ "Truncate-text--primary": priority,
96
+ "Truncate-text--expandable": expandable
97
+ )
98
+
99
+ @system_arguments[:style] = join_style_arguments(@system_arguments[:style], "max-width: #{max_width}px;") unless max_width.nil?
100
+ end
101
+
102
+ def call
103
+ render(Primer::BaseComponent.new(**@system_arguments)) do
104
+ content
105
+ end
106
+ end
107
+ end
108
+ end
109
+ end
110
+ end
@@ -13,6 +13,14 @@ module Primer
13
13
  }.freeze
14
14
  PADDING_SUGGESTION = "Perhaps you could consider using :padding options of #{PADDING_MAPPINGS.keys.to_sentence}?"
15
15
 
16
+ DEFAULT_ROW_SCHEME = :default
17
+ ROW_SCHEME_MAPPINGS = {
18
+ DEFAULT_ROW_SCHEME => "",
19
+ :neutral => "Box-row--gray",
20
+ :info => "Box-row--blue",
21
+ :warning => "Box-row--yellow"
22
+ }.freeze
23
+
16
24
  # Optional Header.
17
25
  #
18
26
  # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
@@ -54,11 +62,13 @@ module Primer
54
62
 
55
63
  # Use Rows to add rows with borders and maintain the same padding.
56
64
  #
65
+ # @param scheme [Symbol] Color scheme. <%= one_of(Primer::BorderBoxComponent::ROW_SCHEME_MAPPINGS.keys) %>
57
66
  # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
58
- renders_many :rows, lambda { |**system_arguments|
67
+ renders_many :rows, lambda { |scheme: DEFAULT_ROW_SCHEME, **system_arguments|
59
68
  system_arguments[:tag] = :li
60
69
  system_arguments[:classes] = class_names(
61
70
  "Box-row",
71
+ ROW_SCHEME_MAPPINGS[fetch_or_fallback(ROW_SCHEME_MAPPINGS.keys, scheme, DEFAULT_ROW_SCHEME)],
62
72
  system_arguments[:classes]
63
73
  )
64
74
 
@@ -102,6 +112,22 @@ module Primer
102
112
  # <% end %>
103
113
  # <% end %>
104
114
  #
115
+ # @example Row colors
116
+ # <%= render(Primer::BorderBoxComponent.new) do |component| %>
117
+ # <% component.row do %>
118
+ # Default
119
+ # <% end %>
120
+ # <% component.row(scheme: :neutral) do %>
121
+ # Neutral
122
+ # <% end %>
123
+ # <% component.row(scheme: :info) do %>
124
+ # Info
125
+ # <% end %>
126
+ # <% component.row(scheme: :warning) do %>
127
+ # Warning
128
+ # <% end %>
129
+ # <% end %>
130
+ #
105
131
  # @param padding [Symbol] <%= one_of(Primer::BorderBoxComponent::PADDING_MAPPINGS.keys) %>
106
132
  # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
107
133
  def initialize(padding: DEFAULT_PADDING, **system_arguments)