primer_view_components 0.0.18 → 0.0.19

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 (53) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +38 -0
  3. data/app/components/primer/avatar_component.rb +24 -6
  4. data/app/components/primer/avatar_stack_component.html.erb +10 -0
  5. data/app/components/primer/avatar_stack_component.rb +81 -0
  6. data/app/components/primer/base_component.rb +3 -3
  7. data/app/components/primer/blankslate_component.rb +8 -8
  8. data/app/components/primer/border_box_component.rb +29 -17
  9. data/app/components/primer/box_component.rb +2 -2
  10. data/app/components/primer/breadcrumb_component.rb +1 -1
  11. data/app/components/primer/button_component.rb +2 -2
  12. data/app/components/primer/button_group_component.rb +4 -1
  13. data/app/components/primer/button_marketing_component.rb +2 -2
  14. data/app/components/primer/component.rb +5 -6
  15. data/app/components/primer/counter_component.rb +5 -1
  16. data/app/components/primer/dropdown/menu_component.html.erb +12 -0
  17. data/app/components/primer/dropdown/menu_component.rb +48 -0
  18. data/app/components/primer/dropdown_component.html.erb +9 -0
  19. data/app/components/primer/dropdown_component.rb +77 -0
  20. data/app/components/primer/dropdown_menu_component.rb +4 -0
  21. data/app/components/primer/flash_component.rb +10 -6
  22. data/app/components/primer/flex_component.rb +38 -1
  23. data/app/components/primer/flex_item_component.rb +15 -1
  24. data/app/components/primer/heading_component.rb +1 -1
  25. data/app/components/primer/label_component.rb +2 -2
  26. data/app/components/primer/layout_component.rb +2 -2
  27. data/app/components/primer/link_component.rb +6 -2
  28. data/app/components/primer/markdown_component.rb +293 -0
  29. data/app/components/primer/menu_component.html.erb +6 -0
  30. data/app/components/primer/menu_component.rb +71 -0
  31. data/app/components/primer/octicon_component.rb +7 -3
  32. data/app/components/primer/popover_component.rb +5 -5
  33. data/app/components/primer/progress_bar_component.rb +5 -5
  34. data/app/components/primer/spinner_component.rb +7 -3
  35. data/app/components/primer/state_component.rb +3 -3
  36. data/app/components/primer/subhead_component.rb +6 -6
  37. data/app/components/primer/text_component.rb +1 -1
  38. data/app/components/primer/timeline_item_component.rb +4 -4
  39. data/app/components/primer/tooltip_component.rb +5 -5
  40. data/app/components/primer/truncate_component.rb +4 -4
  41. data/app/components/primer/underline_nav_component.rb +2 -2
  42. data/app/components/primer/view_components.rb +4 -0
  43. data/lib/primer/classify.rb +22 -9
  44. data/lib/primer/classify/cache.rb +125 -0
  45. data/lib/primer/fetch_or_fallback_helper.rb +1 -1
  46. data/lib/primer/join_style_arguments_helper.rb +1 -1
  47. data/lib/primer/view_components.rb +32 -1
  48. data/lib/primer/view_components/engine.rb +1 -1
  49. data/lib/primer/view_components/version.rb +1 -1
  50. data/lib/yard/renders_many_handler.rb +19 -0
  51. data/lib/yard/renders_one_handler.rb +19 -0
  52. data/static/statuses.json +1 -0
  53. metadata +46 -5
@@ -0,0 +1,125 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Primer
4
+ class Classify
5
+ # :nodoc:
6
+ class Cache
7
+ # rubocop:disable Style/MutableConstant
8
+ LOOKUP = {}
9
+ # rubocop:enable Style/MutableConstant
10
+
11
+ class <<self
12
+ def read(memo, key, val, breakpoint)
13
+ value = LOOKUP.dig(breakpoint, key, val)
14
+ memo[:classes] << value if value
15
+ end
16
+
17
+ def clear!
18
+ LOOKUP.clear
19
+ end
20
+
21
+ def preload!
22
+ preload(
23
+ keys: Primer::Classify::MARGIN_DIRECTION_KEYS,
24
+ values: [-6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6]
25
+ )
26
+
27
+ preload(
28
+ keys: (Primer::Classify::SPACING_KEYS - Primer::Classify::MARGIN_DIRECTION_KEYS),
29
+ values: [0, 1, 2, 3, 4, 5, 6]
30
+ )
31
+
32
+ preload(
33
+ keys: Primer::Classify::DIRECTION_KEY,
34
+ values: [:row, :column]
35
+ )
36
+
37
+ preload(
38
+ keys: Primer::Classify::JUSTIFY_CONTENT_KEY,
39
+ values: [:flex_start, :flex_end, :center, :space_between, :space_around]
40
+ )
41
+
42
+ preload(
43
+ keys: Primer::Classify::ALIGN_ITEMS_KEY,
44
+ values: [:flex_start, :flex_end, :center, :baseline, :stretch]
45
+ )
46
+
47
+ preload(
48
+ keys: Primer::Classify::DISPLAY_KEY,
49
+ values: [:flex, :block, :inline_block, :inline_flex, :none, :table, :table_cell]
50
+ )
51
+
52
+ preload(
53
+ keys: [Primer::Classify::COLOR_KEY, Primer::Classify::BG_KEY],
54
+ values: [:blue, :gray_dark, :gray, :gray_light, :red, :orange, :orange_light, :yellow, :green, :purple, :white, :pink]
55
+ )
56
+
57
+ preload(
58
+ keys: Primer::Classify::VERTICAL_ALIGN_KEY,
59
+ values: [:baseline, :top, :middle, :bottom, :text_top, :text_bottom]
60
+ )
61
+
62
+ preload(
63
+ keys: Primer::Classify::WORD_BREAK_KEY,
64
+ values: [:break_all]
65
+ )
66
+
67
+ preload(
68
+ keys: :text_align,
69
+ values: [:left, :center, :right]
70
+ )
71
+
72
+ preload(
73
+ keys: :font_weight,
74
+ values: [:bold, :light, :normal]
75
+ )
76
+
77
+ preload(
78
+ keys: Primer::Classify::FLEX_KEY,
79
+ values: [1, :auto]
80
+ )
81
+
82
+ preload(
83
+ keys: [Primer::Classify::FLEX_GROW_KEY, Primer::Classify::FLEX_SHRINK_KEY],
84
+ values: [0]
85
+ )
86
+
87
+ preload(
88
+ keys: [Primer::Classify::ALIGN_SELF_KEY],
89
+ values: [:auto, :start, :end, :center, :baseline, :stretch]
90
+ )
91
+
92
+ preload(
93
+ keys: [Primer::Classify::WIDTH_KEY, Primer::Classify::HEIGHT_KEY],
94
+ values: [:fit, :fill]
95
+ )
96
+
97
+ preload(
98
+ keys: Primer::Classify::BOX_SHADOW_KEY,
99
+ values: [true, :medium, :large, :extra_large, :none]
100
+ )
101
+
102
+ preload(
103
+ keys: Primer::Classify::VISIBILITY_KEY,
104
+ values: [:hidden, :visible]
105
+ )
106
+ end
107
+
108
+ def preload(keys:, values:)
109
+ BREAKPOINTS.each do |breakpoint|
110
+ Array(keys).each do |key|
111
+ values.each do |value|
112
+ classes = { classes: [] }
113
+ Primer::Classify.send(:extract_value, classes, key, value, breakpoint)
114
+
115
+ LOOKUP[breakpoint] ||= {}
116
+ LOOKUP[breakpoint][key] ||= {}
117
+ LOOKUP[breakpoint][key][value] = classes[:classes].first
118
+ end
119
+ end
120
+ end
121
+ end
122
+ end
123
+ end
124
+ end
125
+ end
@@ -14,7 +14,7 @@
14
14
  # fetch_or_fallback([1,2,3], 1, 2) => 1
15
15
  # fetch_or_fallback([1,2,3], nil, 2) => 2
16
16
  module Primer
17
- # :nodoc
17
+ # :nodoc:
18
18
  module FetchOrFallbackHelper
19
19
  mattr_accessor :fallback_raises, default: true
20
20
 
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Primer
4
- # :nodoc
4
+ # :nodoc:
5
5
  module JoinStyleArgumentsHelper
6
6
  # Join two `style` arguments
7
7
  #
@@ -4,7 +4,38 @@ require "primer/view_components/version"
4
4
  require "primer/view_components/engine"
5
5
 
6
6
  module Primer
7
- # :nodoc
7
+ # :nodoc:
8
8
  module ViewComponents
9
+ DEFAULT_STATUSES_PATH = File.expand_path("static")
10
+ DEFAULT_STATUS_FILE_NAME = "statuses.json"
11
+
12
+ # generate_statuses returns a hash mapping component name to
13
+ # the component's status sorted alphabetically by the component name.
14
+ def self.generate_statuses
15
+ statuses = Primer::Component.descendants.each_with_object({}) do |component, mem|
16
+ mem[component.to_s] = component.status.to_s
17
+ end
18
+
19
+ statuses.sort_by { |k, _v| k }.to_h
20
+ end
21
+
22
+ # dump_statuses generates the status hash and then serializes
23
+ # it as json at the given path
24
+ def self.dump_statuses(path: DEFAULT_STATUSES_PATH)
25
+ require "json"
26
+
27
+ statuses = generate_statuses
28
+
29
+ File.open(File.join(path, DEFAULT_STATUS_FILE_NAME), "w") do |f|
30
+ f.write(statuses.to_json)
31
+ f.write($INPUT_RECORD_SEPARATOR)
32
+ end
33
+ end
34
+
35
+ # read_statuses returns a JSON string matching the output of
36
+ # generate_statuses
37
+ def self.read_statuses(path: DEFAULT_STATUSES_PATH)
38
+ File.read(File.join(path, DEFAULT_STATUS_FILE_NAME))
39
+ end
9
40
  end
10
41
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Primer
4
4
  module ViewComponents
5
- # :nodoc
5
+ # :nodoc:
6
6
  class Engine < ::Rails::Engine
7
7
  isolate_namespace Primer::ViewComponents
8
8
  end
@@ -5,7 +5,7 @@ module Primer
5
5
  module VERSION
6
6
  MAJOR = 0
7
7
  MINOR = 0
8
- PATCH = 18
8
+ PATCH = 19
9
9
 
10
10
  STRING = [MAJOR, MINOR, PATCH].join(".")
11
11
  end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module YARD
4
+ # YARD Handler to parse `renders_many` calls.
5
+ class RendersManyHandler < YARD::Handlers::Ruby::Base
6
+ handles method_call(:renders_many)
7
+ namespace_only
8
+
9
+ process do
10
+ name = statement.parameters.first.jump(:tstring_content, :ident).source
11
+ object = YARD::CodeObjects::MethodObject.new(namespace, name)
12
+ register(object)
13
+ parse_block(statement.last, owner: object)
14
+
15
+ object.dynamic = true
16
+ object[:renders_many] = true
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module YARD
4
+ # YARD Handler to parse `renders_one` calls.
5
+ class RendersOneHandler < YARD::Handlers::Ruby::Base
6
+ handles method_call(:renders_one)
7
+ namespace_only
8
+
9
+ process do
10
+ name = statement.parameters.first.jump(:tstring_content, :ident).source
11
+ object = YARD::CodeObjects::MethodObject.new(namespace, name)
12
+ register(object)
13
+ parse_block(statement.last, owner: object)
14
+
15
+ object.dynamic = true
16
+ object[:renders_one] = true
17
+ end
18
+ end
19
+ end
@@ -0,0 +1 @@
1
+ {"Primer::AvatarComponent":"beta","Primer::AvatarStackComponent":"alpha","Primer::BaseComponent":"alpha","Primer::BlankslateComponent":"alpha","Primer::BorderBoxComponent":"beta","Primer::BoxComponent":"stable","Primer::BreadcrumbComponent":"alpha","Primer::ButtonComponent":"alpha","Primer::ButtonGroupComponent":"alpha","Primer::ButtonMarketingComponent":"alpha","Primer::CounterComponent":"beta","Primer::DetailsComponent":"alpha","Primer::Dropdown::MenuComponent":"alpha","Primer::DropdownComponent":"alpha","Primer::DropdownMenuComponent":"deprecated","Primer::FlashComponent":"beta","Primer::FlexComponent":"alpha","Primer::FlexItemComponent":"alpha","Primer::HeadingComponent":"alpha","Primer::LabelComponent":"alpha","Primer::LayoutComponent":"alpha","Primer::LinkComponent":"beta","Primer::MarkdownComponent":"alpha","Primer::MenuComponent":"alpha","Primer::OcticonComponent":"beta","Primer::PopoverComponent":"alpha","Primer::ProgressBarComponent":"alpha","Primer::SpinnerComponent":"beta","Primer::StateComponent":"alpha","Primer::SubheadComponent":"alpha","Primer::TextComponent":"alpha","Primer::TimelineItemComponent":"alpha","Primer::TooltipComponent":"alpha","Primer::TruncateComponent":"alpha","Primer::UnderlineNavComponent":"alpha"}
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: primer_view_components
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.18
4
+ version: 0.0.19
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: 2021-02-08 00:00:00.000000000 Z
11
+ date: 2021-02-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: octicons_helper
@@ -19,7 +19,7 @@ dependencies:
19
19
  version: 9.0.0
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
- version: 12.0.0
22
+ version: 13.0.0
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -29,7 +29,7 @@ dependencies:
29
29
  version: 9.0.0
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
- version: 12.0.0
32
+ version: 13.0.0
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: rails
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -70,6 +70,34 @@ dependencies:
70
70
  - - "<"
71
71
  - !ruby/object:Gem::Version
72
72
  version: '3.0'
73
+ - !ruby/object:Gem::Dependency
74
+ name: allocation_tracer
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - "~>"
78
+ - !ruby/object:Gem::Version
79
+ version: 0.6.3
80
+ type: :development
81
+ prerelease: false
82
+ version_requirements: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - "~>"
85
+ - !ruby/object:Gem::Version
86
+ version: 0.6.3
87
+ - !ruby/object:Gem::Dependency
88
+ name: benchmark-ips
89
+ requirement: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - "~>"
92
+ - !ruby/object:Gem::Version
93
+ version: 2.8.4
94
+ type: :development
95
+ prerelease: false
96
+ version_requirements: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - "~>"
99
+ - !ruby/object:Gem::Version
100
+ version: 2.8.4
73
101
  - !ruby/object:Gem::Dependency
74
102
  name: listen
75
103
  requirement: !ruby/object:Gem::Requirement
@@ -207,6 +235,8 @@ files:
207
235
  - LICENSE.txt
208
236
  - README.md
209
237
  - app/components/primer/avatar_component.rb
238
+ - app/components/primer/avatar_stack_component.html.erb
239
+ - app/components/primer/avatar_stack_component.rb
210
240
  - app/components/primer/base_component.rb
211
241
  - app/components/primer/blankslate_component.html.erb
212
242
  - app/components/primer/blankslate_component.rb
@@ -223,6 +253,10 @@ files:
223
253
  - app/components/primer/counter_component.rb
224
254
  - app/components/primer/details_component.html.erb
225
255
  - app/components/primer/details_component.rb
256
+ - app/components/primer/dropdown/menu_component.html.erb
257
+ - app/components/primer/dropdown/menu_component.rb
258
+ - app/components/primer/dropdown_component.html.erb
259
+ - app/components/primer/dropdown_component.rb
226
260
  - app/components/primer/dropdown_menu_component.html.erb
227
261
  - app/components/primer/dropdown_menu_component.rb
228
262
  - app/components/primer/flash_component.html.erb
@@ -234,6 +268,9 @@ files:
234
268
  - app/components/primer/layout_component.html.erb
235
269
  - app/components/primer/layout_component.rb
236
270
  - app/components/primer/link_component.rb
271
+ - app/components/primer/markdown_component.rb
272
+ - app/components/primer/menu_component.html.erb
273
+ - app/components/primer/menu_component.rb
237
274
  - app/components/primer/octicon_component.rb
238
275
  - app/components/primer/popover_component.html.erb
239
276
  - app/components/primer/popover_component.rb
@@ -255,11 +292,15 @@ files:
255
292
  - app/components/primer/view_components.rb
256
293
  - lib/primer/class_name_helper.rb
257
294
  - lib/primer/classify.rb
295
+ - lib/primer/classify/cache.rb
258
296
  - lib/primer/fetch_or_fallback_helper.rb
259
297
  - lib/primer/join_style_arguments_helper.rb
260
298
  - lib/primer/view_components.rb
261
299
  - lib/primer/view_components/engine.rb
262
300
  - lib/primer/view_components/version.rb
301
+ - lib/yard/renders_many_handler.rb
302
+ - lib/yard/renders_one_handler.rb
303
+ - static/statuses.json
263
304
  homepage: https://github.com/primer/view_components
264
305
  licenses:
265
306
  - MIT
@@ -273,7 +314,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
273
314
  requirements:
274
315
  - - ">="
275
316
  - !ruby/object:Gem::Version
276
- version: 2.3.0
317
+ version: 2.5.0
277
318
  required_rubygems_version: !ruby/object:Gem::Requirement
278
319
  requirements:
279
320
  - - ">="