primer_view_components 0.0.1 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +46 -1
  3. data/README.md +135 -0
  4. data/app/components/primer/avatar_component.rb +28 -0
  5. data/app/components/primer/base_component.rb +42 -0
  6. data/app/components/primer/blankslate_component.html.erb +27 -0
  7. data/app/components/primer/blankslate_component.rb +156 -0
  8. data/app/components/primer/border_box_component.html.erb +26 -0
  9. data/app/components/primer/border_box_component.rb +77 -0
  10. data/app/components/primer/box_component.rb +14 -0
  11. data/app/components/primer/breadcrumb_component.html.erb +8 -0
  12. data/app/components/primer/breadcrumb_component.rb +52 -0
  13. data/app/components/primer/button_component.rb +58 -0
  14. data/app/components/primer/component.rb +9 -0
  15. data/app/components/primer/counter_component.rb +78 -0
  16. data/app/components/primer/details_component.html.erb +6 -0
  17. data/app/components/primer/details_component.rb +38 -0
  18. data/app/components/primer/dropdown_menu_component.html.erb +8 -0
  19. data/app/components/primer/dropdown_menu_component.rb +28 -0
  20. data/app/components/primer/flex_component.rb +81 -0
  21. data/app/components/primer/flex_item_component.rb +21 -0
  22. data/app/components/primer/heading_component.rb +14 -0
  23. data/app/components/primer/label_component.rb +48 -0
  24. data/app/components/primer/layout_component.html.erb +17 -0
  25. data/app/components/primer/layout_component.rb +21 -0
  26. data/app/components/primer/link_component.rb +19 -0
  27. data/app/components/primer/progress_bar_component.html.erb +5 -0
  28. data/app/components/primer/progress_bar_component.rb +66 -0
  29. data/app/components/primer/slot.rb +8 -0
  30. data/app/components/primer/state_component.rb +53 -0
  31. data/app/components/primer/subhead_component.html.erb +17 -0
  32. data/app/components/primer/subhead_component.rb +89 -0
  33. data/app/components/primer/text_component.rb +14 -0
  34. data/app/components/primer/timeline_item_component.html.erb +17 -0
  35. data/app/components/primer/timeline_item_component.rb +69 -0
  36. data/app/components/primer/underline_nav_component.html.erb +11 -0
  37. data/app/components/primer/underline_nav_component.rb +22 -0
  38. data/app/components/primer/view_components.rb +47 -0
  39. data/lib/primer/class_name_helper.rb +27 -0
  40. data/lib/primer/classify.rb +237 -0
  41. data/lib/primer/fetch_or_fallback_helper.rb +41 -0
  42. data/lib/primer/view_components.rb +3 -0
  43. data/lib/primer/view_components/engine.rb +11 -0
  44. data/lib/primer/view_components/version.rb +1 -1
  45. metadata +159 -4
@@ -0,0 +1,11 @@
1
+ <%= render Primer::BaseComponent.new(**@kwargs) do %>
2
+ <% if actions && @align == :right %>
3
+ <%= actions %>
4
+ <% end %>
5
+ <%= render Primer::BaseComponent.new(tag: :ul, classes: "UnderlineNav-body list-style-none") do %>
6
+ <%= body %>
7
+ <% end %>
8
+ <% if actions && @align == :left %>
9
+ <%= actions %>
10
+ <% end %>
11
+ <% end %>
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Primer
4
+ class UnderlineNavComponent < Primer::Component
5
+ ALIGN_DEFAULT = :left
6
+ ALIGN_OPTIONS = [ALIGN_DEFAULT, :right]
7
+
8
+ with_content_areas :body, :actions
9
+
10
+ def initialize(align: ALIGN_DEFAULT, **kwargs)
11
+ @align = fetch_or_fallback(ALIGN_OPTIONS, align, ALIGN_DEFAULT)
12
+
13
+ @kwargs = kwargs
14
+ @kwargs[:tag] = :nav
15
+ @kwargs[:classes] = class_names(
16
+ @kwargs[:classes],
17
+ "UnderlineNav",
18
+ "UnderlineNav--right" => @align == :right
19
+ )
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "active_support/core_ext"
4
+
5
+ # ViewComponent
6
+
7
+ require "view_component/engine"
8
+
9
+ # Octicons
10
+
11
+ require "octicons_helper/helper"
12
+
13
+ # Helpers
14
+
15
+ require "primer/class_name_helper"
16
+ require "primer/classify"
17
+ require "primer/fetch_or_fallback_helper"
18
+
19
+ # Base configurations
20
+
21
+ require_relative "component"
22
+ require_relative "base_component"
23
+ require_relative "slot"
24
+
25
+ # Components
26
+
27
+ require_relative "avatar_component"
28
+ require_relative "blankslate_component"
29
+ require_relative "border_box_component"
30
+ require_relative "box_component"
31
+ require_relative "breadcrumb_component"
32
+ require_relative "button_component"
33
+ require_relative "counter_component"
34
+ require_relative "details_component"
35
+ require_relative "dropdown_menu_component"
36
+ require_relative "flex_component"
37
+ require_relative "flex_item_component"
38
+ require_relative "heading_component"
39
+ require_relative "label_component"
40
+ require_relative "layout_component"
41
+ require_relative "link_component"
42
+ require_relative "progress_bar_component"
43
+ require_relative "state_component"
44
+ require_relative "subhead_component"
45
+ require_relative "text_component"
46
+ require_relative "timeline_item_component"
47
+ require_relative "underline_nav_component"
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Inspired by https://github.com/JedWatson/classnames
4
+ #
5
+ # Helps build a list of conditional class names
6
+ module Primer
7
+ module ClassNameHelper
8
+ def class_names(*args)
9
+ classes = []
10
+
11
+ args.each do |class_name|
12
+ case class_name
13
+ when String
14
+ classes << class_name if class_name.present?
15
+ when Hash
16
+ class_name.each do |key, val|
17
+ classes << key if val
18
+ end
19
+ when Array
20
+ classes << class_names(*class_name).presence
21
+ end
22
+ end
23
+
24
+ classes.compact.uniq.join(" ")
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,237 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Primer
4
+ class Classify
5
+ MARGIN_DIRECTION_KEYS = [:mt, :ml, :mb, :mr]
6
+ SPACING_KEYS = ([:m, :my, :mx, :p, :py, :px, :pt, :pl, :pb, :pr] + MARGIN_DIRECTION_KEYS).freeze
7
+ DIRECTION_KEY = :direction
8
+ JUSTIFY_CONTENT_KEY = :justify_content
9
+ ALIGN_ITEMS_KEY = :align_items
10
+ DISPLAY_KEY = :display
11
+ RESPONSIVE_KEYS = ([DISPLAY_KEY, DIRECTION_KEY, JUSTIFY_CONTENT_KEY, ALIGN_ITEMS_KEY, :col, :float] + SPACING_KEYS).freeze
12
+ BREAKPOINTS = ["", "-sm", "-md", "-lg"]
13
+
14
+ # Keys where we can simply translate { key: value } into ".key-value"
15
+ CONCAT_KEYS = SPACING_KEYS + [:hide, :position, :v, :float, :col, :text].freeze
16
+
17
+ INVALID_CLASS_NAME_PREFIXES =
18
+ (["bg-", "color-", "text-", "d-", "v-align-", "wb-", "text-"] + CONCAT_KEYS.map { |k| "#{k}-" }).freeze
19
+
20
+ COLOR_KEY = :color
21
+ BG_KEY = :bg
22
+ VERTICAL_ALIGN_KEY = :vertical_align
23
+ WORD_BREAK_KEY = :word_break
24
+ TEXT_KEYS = [:text_align, :font_weight]
25
+ FLEX_KEY = :flex
26
+ FLEX_GROW_KEY = :flex_grow
27
+ FLEX_SHRINK_KEY = :flex_shrink
28
+ ALIGN_SELF_KEY = :align_self
29
+ WIDTH_KEY = :width
30
+ HEIGHT_KEY = :height
31
+
32
+
33
+ BOOLEAN_MAPPINGS = {
34
+ underline: {
35
+ mappings: [
36
+ {
37
+ value: true,
38
+ css_class: "text-underline",
39
+ },
40
+ {
41
+ value: false,
42
+ css_class: "no-underline",
43
+ },
44
+ ],
45
+ },
46
+ top: {
47
+ mappings: [
48
+ {
49
+ value: false,
50
+ css_class: "top-0"
51
+ }
52
+ ]
53
+ },
54
+ bottom: {
55
+ mappings: [
56
+ {
57
+ value: false,
58
+ css_class: "bottom-0"
59
+ }
60
+ ]
61
+ },
62
+ left: {
63
+ mappings: [
64
+ {
65
+ value: false,
66
+ css_class: "left-0"
67
+ }
68
+ ]
69
+ },
70
+ right: {
71
+ mappings: [
72
+ {
73
+ value: false,
74
+ css_class: "right-0"
75
+ }
76
+ ]
77
+ }
78
+ }.freeze
79
+ BORDER_KEYS = [:border, :border_color].freeze
80
+ TYPOGRAPHY_KEYS = [:font_size].freeze
81
+ VALID_KEYS = (
82
+ CONCAT_KEYS +
83
+ BOOLEAN_MAPPINGS.keys +
84
+ BORDER_KEYS +
85
+ TYPOGRAPHY_KEYS +
86
+ TEXT_KEYS +
87
+ [
88
+ COLOR_KEY,
89
+ BG_KEY,
90
+ DISPLAY_KEY,
91
+ VERTICAL_ALIGN_KEY,
92
+ WORD_BREAK_KEY,
93
+ DIRECTION_KEY,
94
+ JUSTIFY_CONTENT_KEY,
95
+ ALIGN_ITEMS_KEY,
96
+ FLEX_KEY,
97
+ FLEX_GROW_KEY,
98
+ FLEX_SHRINK_KEY,
99
+ ALIGN_SELF_KEY,
100
+ WIDTH_KEY,
101
+ HEIGHT_KEY
102
+ ]
103
+ ).freeze
104
+
105
+ class << self
106
+ def call(classes: "", style: nil, **args)
107
+ extracted_results = extract_hash(args)
108
+
109
+ {
110
+ class: [validated_class_names(classes), extracted_results[:classes]].compact.join(" ").presence,
111
+ style: [extracted_results[:styles], style].compact.join("").presence,
112
+ }.merge(extracted_results.except(:classes, :styles))
113
+ end
114
+
115
+ private
116
+
117
+ def validated_class_names(classes)
118
+ return unless classes.present?
119
+
120
+ if ENV["RAILS_ENV"] == "development"
121
+ invalid_class_names =
122
+ classes.split(" ").each_with_object([]) do |class_name, memo|
123
+ if INVALID_CLASS_NAME_PREFIXES.any? { |prefix| class_name.start_with?(prefix) }
124
+ memo << class_name
125
+ end
126
+ end
127
+
128
+ if invalid_class_names.any?
129
+ raise ArgumentError.new(
130
+ "Primer CSS class #{'name'.pluralize(invalid_class_names.length)} \
131
+ #{invalid_class_names.to_sentence} #{'is'.pluralize(invalid_class_names.length)} \
132
+ not allowed, use hash syntax instead. This warning will not be raised in production.",
133
+ )
134
+ end
135
+ end
136
+
137
+ classes
138
+ end
139
+
140
+ # NOTE: This is a fairly naive implementation that we're building as we go.
141
+ # Feel free to refactor as this is thoroughly tested.
142
+ #
143
+ # Utility for mapping component configuration into Primer CSS class names
144
+ #
145
+ # styles_hash - A hash with utility keys that mimic the interface used by https://github.com/primer/components
146
+ #
147
+ # Returns a string of Primer CSS class names to be added to an HTML class attribute
148
+ #
149
+ # Example usage:
150
+ # extract_hash({ mt: 4, py: 2 }) => "mt-4 py-2"
151
+ def extract_hash(styles_hash)
152
+ out = styles_hash.each_with_object({ classes: [], styles: [] }) do |(key, value), memo|
153
+ next unless VALID_KEYS.include?(key)
154
+
155
+ if value.is_a?(Array) && !RESPONSIVE_KEYS.include?(key)
156
+ raise ArgumentError, "#{key} does not support responsive values"
157
+ end
158
+
159
+ Array(value).each_with_index do |val, index|
160
+ next if val.nil?
161
+
162
+ if SPACING_KEYS.include?(key)
163
+ if MARGIN_DIRECTION_KEYS.include?(key)
164
+ raise ArgumentError, "value must be between -6 and 6" if (val < -6 || val > 6)
165
+ else
166
+ raise ArgumentError, "value must be between 0 and 6" if (val < 0 || val > 6)
167
+ end
168
+ end
169
+
170
+ dasherized_val = val.to_s.dasherize
171
+ breakpoint = BREAKPOINTS[index]
172
+
173
+ if BOOLEAN_MAPPINGS.has_key?(key)
174
+ BOOLEAN_MAPPINGS[key][:mappings].map { |m| m[:css_class] if m[:value] == val }.compact.each do |css_class|
175
+ memo[:classes] << css_class
176
+ end
177
+ elsif key == BG_KEY
178
+ if val.to_s.starts_with?("#")
179
+ memo[:styles] << "background-color: #{val};"
180
+ else
181
+ memo[:classes] << "bg-#{dasherized_val}"
182
+ end
183
+ elsif key == COLOR_KEY
184
+ if val.to_s.chars.last !~ /\D/
185
+ memo[:classes] << "color-#{dasherized_val}"
186
+ else
187
+ memo[:classes] << "text-#{dasherized_val}"
188
+ end
189
+ elsif key == DISPLAY_KEY
190
+ memo[:classes] << "d#{breakpoint}-#{dasherized_val}"
191
+ elsif key == VERTICAL_ALIGN_KEY
192
+ memo[:classes] << "v-align-#{dasherized_val}"
193
+ elsif key == WORD_BREAK_KEY
194
+ memo[:classes] << "wb-#{dasherized_val}"
195
+ elsif BORDER_KEYS.include?(key)
196
+ memo[:classes] << "border-#{dasherized_val}"
197
+ elsif key == DIRECTION_KEY
198
+ memo[:classes] << "flex#{breakpoint}-#{dasherized_val}"
199
+ elsif key == JUSTIFY_CONTENT_KEY
200
+ formatted_value = val.to_s.gsub(/(flex\_|space\_)/, "")
201
+ memo[:classes] << "flex#{breakpoint}-justify-#{formatted_value}"
202
+ elsif key == ALIGN_ITEMS_KEY
203
+ memo[:classes] << "flex#{breakpoint}-items-#{val.to_s.gsub("flex_", "")}"
204
+ elsif key == FLEX_KEY
205
+ memo[:classes] << "flex-#{val}"
206
+ elsif key == FLEX_GROW_KEY
207
+ memo[:classes] << "flex-grow-#{val}"
208
+ elsif key == FLEX_SHRINK_KEY
209
+ memo[:classes] << "flex-shrink-#{val}"
210
+ elsif key == ALIGN_SELF_KEY
211
+ memo[:classes] << "flex-self-#{val}"
212
+ elsif key == WIDTH_KEY || key == HEIGHT_KEY
213
+ if val == :fit || val == :fill
214
+ memo[:classes] << "#{key}-#{val}"
215
+ else
216
+ memo[key] = val
217
+ end
218
+ elsif TEXT_KEYS.include?(key)
219
+ memo[:classes] << "text-#{dasherized_val}"
220
+ elsif TYPOGRAPHY_KEYS.include?(key)
221
+ memo[:classes] << "f#{dasherized_val}"
222
+ elsif MARGIN_DIRECTION_KEYS.include?(key) && val < 0
223
+ memo[:classes] << "#{key.to_s.dasherize}#{breakpoint}-n#{val.abs}"
224
+ else
225
+ memo[:classes] << "#{key.to_s.dasherize}#{breakpoint}-#{dasherized_val}"
226
+ end
227
+ end
228
+ end
229
+
230
+ {
231
+ classes: out[:classes].join(" "),
232
+ styles: out[:styles].join(" ")
233
+ }.merge(out.except(:classes, :styles))
234
+ end
235
+ end
236
+ end
237
+ end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Primer::FetchOrFallbackHelper
4
+ # A little helper to enable graceful fallbacks
5
+ #
6
+ # Use this helper to quietly ensure a value is
7
+ # one that you expect:
8
+ #
9
+ # allowed_values - allowed options for *value*
10
+ # given_value - input being coerced
11
+ # fallback - returned if *given_value* is not included in *allowed_values*
12
+ #
13
+ # fetch_or_fallback([1,2,3], 5, 2) => 2
14
+ # fetch_or_fallback([1,2,3], 1, 2) => 1
15
+ # fetch_or_fallback([1,2,3], nil, 2) => 2
16
+ module Primer
17
+ module FetchOrFallbackHelper
18
+ mattr_accessor :fallback_raises, default: true
19
+
20
+ InvalidValueError = Class.new(StandardError)
21
+
22
+ def fetch_or_fallback(allowed_values, given_value, fallback = nil)
23
+ if allowed_values.include?(given_value)
24
+ given_value
25
+ else
26
+ if fallback_raises && ENV["RAILS_ENV"] != "production"
27
+ raise InvalidValueError, <<~MSG
28
+ fetch_or_fallback was called with an invalid value.
29
+
30
+ Expected one of: #{allowed_values.inspect}
31
+ Got: #{given_value.inspect}
32
+
33
+ This will not raise in production, but will instead fallback to: #{fallback.inspect}
34
+ MSG
35
+ end
36
+
37
+ fallback
38
+ end
39
+ end
40
+ end
41
+ end
@@ -1,4 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "primer/view_components/version"
4
+ require "primer/view_components/engine"
2
5
 
3
6
  module Primer
4
7
  module ViewComponents
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Primer
4
+ module ViewComponents
5
+ class Engine < ::Rails::Engine
6
+ isolate_namespace Primer::ViewComponents
7
+ end
8
+ end
9
+ end
10
+
11
+ require "#{Primer::ViewComponents::Engine.root}/app/components/primer/view_components.rb"
@@ -5,7 +5,7 @@ module Primer
5
5
  module VERSION
6
6
  MAJOR = 0
7
7
  MINOR = 0
8
- PATCH = 1
8
+ PATCH = 3
9
9
 
10
10
  STRING = [MAJOR, MINOR, PATCH].join(".")
11
11
  end
metadata CHANGED
@@ -1,15 +1,131 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: primer_view_components
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - GitHub Open Source
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-08-03 00:00:00.000000000 Z
12
- dependencies: []
11
+ date: 2020-08-13 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 5.0.0
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '7.0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: 5.0.0
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '7.0'
33
+ - !ruby/object:Gem::Dependency
34
+ name: view_component
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: 2.0.0
40
+ - - "<"
41
+ - !ruby/object:Gem::Version
42
+ version: '3.0'
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: 2.0.0
50
+ - - "<"
51
+ - !ruby/object:Gem::Version
52
+ version: '3.0'
53
+ - !ruby/object:Gem::Dependency
54
+ name: octicons_helper
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: 9.0.0
60
+ - - "<"
61
+ - !ruby/object:Gem::Version
62
+ version: 11.0.0
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: 9.0.0
70
+ - - "<"
71
+ - !ruby/object:Gem::Version
72
+ version: 11.0.0
73
+ - !ruby/object:Gem::Dependency
74
+ name: minitest
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - '='
78
+ - !ruby/object:Gem::Version
79
+ version: 5.6.0
80
+ type: :development
81
+ prerelease: false
82
+ version_requirements: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - '='
85
+ - !ruby/object:Gem::Version
86
+ version: 5.6.0
87
+ - !ruby/object:Gem::Dependency
88
+ name: pry
89
+ requirement: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ type: :development
95
+ prerelease: false
96
+ version_requirements: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
101
+ - !ruby/object:Gem::Dependency
102
+ name: rubocop
103
+ requirement: !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - '='
106
+ - !ruby/object:Gem::Version
107
+ version: '0.74'
108
+ type: :development
109
+ prerelease: false
110
+ version_requirements: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - '='
113
+ - !ruby/object:Gem::Version
114
+ version: '0.74'
115
+ - !ruby/object:Gem::Dependency
116
+ name: rubocop-github
117
+ requirement: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - "~>"
120
+ - !ruby/object:Gem::Version
121
+ version: 0.13.0
122
+ type: :development
123
+ prerelease: false
124
+ version_requirements: !ruby/object:Gem::Requirement
125
+ requirements:
126
+ - - "~>"
127
+ - !ruby/object:Gem::Version
128
+ version: 0.13.0
13
129
  description:
14
130
  email:
15
131
  - opensource+primer_view_components@github.com
@@ -20,7 +136,46 @@ files:
20
136
  - CHANGELOG.md
21
137
  - LICENSE.txt
22
138
  - README.md
139
+ - app/components/primer/avatar_component.rb
140
+ - app/components/primer/base_component.rb
141
+ - app/components/primer/blankslate_component.html.erb
142
+ - app/components/primer/blankslate_component.rb
143
+ - app/components/primer/border_box_component.html.erb
144
+ - app/components/primer/border_box_component.rb
145
+ - app/components/primer/box_component.rb
146
+ - app/components/primer/breadcrumb_component.html.erb
147
+ - app/components/primer/breadcrumb_component.rb
148
+ - app/components/primer/button_component.rb
149
+ - app/components/primer/component.rb
150
+ - app/components/primer/counter_component.rb
151
+ - app/components/primer/details_component.html.erb
152
+ - app/components/primer/details_component.rb
153
+ - app/components/primer/dropdown_menu_component.html.erb
154
+ - app/components/primer/dropdown_menu_component.rb
155
+ - app/components/primer/flex_component.rb
156
+ - app/components/primer/flex_item_component.rb
157
+ - app/components/primer/heading_component.rb
158
+ - app/components/primer/label_component.rb
159
+ - app/components/primer/layout_component.html.erb
160
+ - app/components/primer/layout_component.rb
161
+ - app/components/primer/link_component.rb
162
+ - app/components/primer/progress_bar_component.html.erb
163
+ - app/components/primer/progress_bar_component.rb
164
+ - app/components/primer/slot.rb
165
+ - app/components/primer/state_component.rb
166
+ - app/components/primer/subhead_component.html.erb
167
+ - app/components/primer/subhead_component.rb
168
+ - app/components/primer/text_component.rb
169
+ - app/components/primer/timeline_item_component.html.erb
170
+ - app/components/primer/timeline_item_component.rb
171
+ - app/components/primer/underline_nav_component.html.erb
172
+ - app/components/primer/underline_nav_component.rb
173
+ - app/components/primer/view_components.rb
174
+ - lib/primer/class_name_helper.rb
175
+ - lib/primer/classify.rb
176
+ - lib/primer/fetch_or_fallback_helper.rb
23
177
  - lib/primer/view_components.rb
178
+ - lib/primer/view_components/engine.rb
24
179
  - lib/primer/view_components/version.rb
25
180
  homepage: https://github.com/primer/view_components
26
181
  licenses:
@@ -42,7 +197,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
42
197
  - !ruby/object:Gem::Version
43
198
  version: '0'
44
199
  requirements: []
45
- rubygems_version: 3.0.3
200
+ rubygems_version: 3.1.2
46
201
  signing_key:
47
202
  specification_version: 4
48
203
  summary: ViewComponents for the Primer Design System