primer_view_components 0.0.1 → 0.0.3

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 (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