primer_view_components 0.0.27 → 0.0.32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (69) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +82 -0
  3. data/README.md +1 -1
  4. data/app/assets/javascripts/primer_view_components.js +1 -1
  5. data/app/assets/javascripts/primer_view_components.js.map +1 -1
  6. data/app/components/primer/auto_complete_component.d.ts +1 -0
  7. data/app/components/primer/auto_complete_component.html.erb +5 -0
  8. data/app/components/primer/auto_complete_component.rb +96 -0
  9. data/app/components/primer/auto_complete_component.ts +1 -0
  10. data/app/components/primer/auto_complete_item_component.rb +38 -0
  11. data/app/components/primer/avatar_component.rb +6 -5
  12. data/app/components/primer/avatar_stack_component.rb +0 -2
  13. data/app/components/primer/base_component.rb +2 -2
  14. data/app/components/primer/blankslate_component.html.erb +1 -5
  15. data/app/components/primer/blankslate_component.rb +0 -2
  16. data/app/components/primer/border_box_component.rb +29 -3
  17. data/app/components/primer/box_component.rb +1 -1
  18. data/app/components/primer/breadcrumb_component.rb +0 -1
  19. data/app/components/primer/button_group_component.rb +0 -2
  20. data/app/components/primer/component.rb +2 -1
  21. data/app/components/primer/counter_component.rb +15 -5
  22. data/app/components/primer/details_component.rb +1 -1
  23. data/app/components/primer/dropdown/menu_component.rb +0 -2
  24. data/app/components/primer/dropdown_component.rb +0 -2
  25. data/app/components/primer/flash_component.html.erb +2 -2
  26. data/app/components/primer/flash_component.rb +0 -2
  27. data/app/components/primer/flex_component.rb +16 -16
  28. data/app/components/primer/heading_component.rb +1 -1
  29. data/app/components/primer/label_component.rb +3 -7
  30. data/app/components/primer/layout_component.rb +0 -2
  31. data/app/components/primer/link_component.rb +37 -7
  32. data/app/components/primer/menu_component.rb +2 -4
  33. data/app/components/primer/navigation/tab_component.html.erb +9 -0
  34. data/app/components/primer/navigation/tab_component.rb +102 -0
  35. data/app/components/primer/octicon_component.rb +5 -5
  36. data/app/components/primer/popover_component.html.erb +3 -7
  37. data/app/components/primer/popover_component.rb +75 -63
  38. data/app/components/primer/primer.d.ts +3 -0
  39. data/app/components/primer/primer.js +1 -0
  40. data/app/components/primer/primer.ts +1 -0
  41. data/app/components/primer/progress_bar_component.rb +5 -6
  42. data/app/components/primer/spinner_component.html.erb +1 -3
  43. data/app/components/primer/spinner_component.rb +1 -0
  44. data/app/components/primer/subhead_component.rb +0 -2
  45. data/app/components/primer/tab_container_component.d.ts +1 -0
  46. data/app/components/primer/tab_nav_component.html.erb +9 -11
  47. data/app/components/primer/tab_nav_component.rb +46 -73
  48. data/app/components/primer/text_component.rb +3 -1
  49. data/app/components/primer/time_ago_component.d.ts +1 -0
  50. data/app/components/primer/time_ago_component.rb +2 -1
  51. data/app/components/primer/timeline_item_component.rb +3 -3
  52. data/app/components/primer/underline_nav_component.html.erb +19 -7
  53. data/app/components/primer/underline_nav_component.rb +80 -14
  54. data/app/lib/primer/classify.rb +15 -18
  55. data/app/lib/primer/classify/cache.rb +8 -3
  56. data/app/lib/primer/classify/functional_background_colors.rb +61 -0
  57. data/app/lib/primer/classify/functional_border_colors.rb +51 -0
  58. data/app/lib/primer/classify/functional_colors.rb +68 -0
  59. data/app/lib/primer/classify/functional_text_colors.rb +62 -0
  60. data/app/lib/primer/fetch_or_fallback_helper.rb +17 -4
  61. data/app/lib/primer/tabbed_component_helper.rb +37 -0
  62. data/app/lib/primer/view_helper.rb +10 -12
  63. data/lib/primer/view_components/engine.rb +4 -0
  64. data/lib/primer/view_components/version.rb +1 -1
  65. data/static/statuses.json +1 -1
  66. metadata +31 -5
  67. data/app/components/primer/slot.rb +0 -10
  68. data/app/lib/primer/classify/functional_colors.rb.orig +0 -124
  69. data/app/lib/primer/view_helper/dsl.rb +0 -34
@@ -1,22 +1,20 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Primer
4
- # Module to allow shorthand calls for registered Primer components
5
- #
6
- # Registered components can be called with
7
- # `primer(:name, **kwargs) { block }` instead of
8
- # `render Primer::NameComponent.new(**kwargs) { block }`
4
+ # Module to allow shorthand calls for Primer components
9
5
  module ViewHelper
10
- extend ActiveSupport::Concern
11
-
12
6
  class ViewHelperNotFound < StandardError; end
13
7
 
14
- def primer(name, **component_args, &block)
15
- component = Primer::Component.primer_helpers[name]
16
-
17
- raise ViewHelperNotFound, "no component defined for helper #{name}" if component.blank?
8
+ HELPERS = {
9
+ octicon: "Primer::OcticonComponent",
10
+ heading: "Primer::HeadingComponent",
11
+ time_ago: "Primer::TimeAgoComponent"
12
+ }.freeze
18
13
 
19
- render component.new(**component_args), &block
14
+ HELPERS.each do |name, component|
15
+ define_method "primer_#{name}" do |*args, **kwargs, &block|
16
+ render component.constantize.new(*args, **kwargs), &block
17
+ end
20
18
  end
21
19
  end
22
20
  end
@@ -12,6 +12,10 @@ module Primer
12
12
  #{root}/app/lib
13
13
  ]
14
14
 
15
+ config.primer_view_components = ActiveSupport::OrderedOptions.new
16
+ config.primer_view_components.force_functional_colors = true
17
+ config.primer_view_components.silence_deprecations = false
18
+
15
19
  initializer "primer_view_components.assets" do |app|
16
20
  app.config.assets.precompile += %w[primer_view_components] if app.config.respond_to?(:assets)
17
21
  end
@@ -5,7 +5,7 @@ module Primer
5
5
  module VERSION
6
6
  MAJOR = 0
7
7
  MINOR = 0
8
- PATCH = 27
8
+ PATCH = 32
9
9
 
10
10
  STRING = [MAJOR, MINOR, PATCH].join(".")
11
11
  end
data/static/statuses.json CHANGED
@@ -1 +1 @@
1
- {"Primer::AvatarComponent":"beta","Primer::AvatarStackComponent":"alpha","Primer::BaseComponent":"beta","Primer::BlankslateComponent":"beta","Primer::BorderBoxComponent":"beta","Primer::BoxComponent":"stable","Primer::BreadcrumbComponent":"beta","Primer::BreadcrumbComponent::ItemComponent":"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":"beta","Primer::LayoutComponent":"alpha","Primer::LinkComponent":"beta","Primer::MarkdownComponent":"alpha","Primer::MenuComponent":"alpha","Primer::OcticonComponent":"beta","Primer::PopoverComponent":"alpha","Primer::ProgressBarComponent":"beta","Primer::SpinnerComponent":"beta","Primer::StateComponent":"beta","Primer::SubheadComponent":"beta","Primer::TabContainerComponent":"alpha","Primer::TabNavComponent":"alpha","Primer::TabNavComponent::TabComponent":"alpha","Primer::TextComponent":"alpha","Primer::TimeAgoComponent":"alpha","Primer::TimelineItemComponent":"alpha","Primer::TimelineItemComponent::BadgeComponent":"alpha","Primer::TooltipComponent":"alpha","Primer::TruncateComponent":"alpha","Primer::UnderlineNavComponent":"alpha"}
1
+ {"Primer::AutoCompleteComponent":"alpha","Primer::AutoCompleteItemComponent":"alpha","Primer::AvatarComponent":"beta","Primer::AvatarStackComponent":"alpha","Primer::BaseComponent":"beta","Primer::BlankslateComponent":"beta","Primer::BorderBoxComponent":"beta","Primer::BoxComponent":"stable","Primer::BreadcrumbComponent":"beta","Primer::BreadcrumbComponent::ItemComponent":"alpha","Primer::ButtonComponent":"alpha","Primer::ButtonGroupComponent":"alpha","Primer::ButtonMarketingComponent":"alpha","Primer::CounterComponent":"beta","Primer::DetailsComponent":"beta","Primer::Dropdown::MenuComponent":"alpha","Primer::DropdownComponent":"alpha","Primer::DropdownMenuComponent":"deprecated","Primer::FlashComponent":"beta","Primer::FlexComponent":"alpha","Primer::FlexItemComponent":"alpha","Primer::HeadingComponent":"beta","Primer::LabelComponent":"beta","Primer::LayoutComponent":"alpha","Primer::LinkComponent":"beta","Primer::MarkdownComponent":"alpha","Primer::MenuComponent":"alpha","Primer::Navigation::TabComponent":"alpha","Primer::OcticonComponent":"beta","Primer::PopoverComponent":"beta","Primer::ProgressBarComponent":"beta","Primer::SpinnerComponent":"beta","Primer::StateComponent":"beta","Primer::SubheadComponent":"beta","Primer::TabContainerComponent":"alpha","Primer::TabNavComponent":"alpha","Primer::TextComponent":"beta","Primer::TimeAgoComponent":"beta","Primer::TimelineItemComponent":"beta","Primer::TimelineItemComponent::BadgeComponent":"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.27
4
+ version: 0.0.32
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-03-08 00:00:00.000000000 Z
11
+ date: 2021-03-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: octicons_helper
@@ -126,6 +126,20 @@ dependencies:
126
126
  - - '='
127
127
  - !ruby/object:Gem::Version
128
128
  version: 5.6.0
129
+ - !ruby/object:Gem::Dependency
130
+ name: mocha
131
+ requirement: !ruby/object:Gem::Requirement
132
+ requirements:
133
+ - - ">="
134
+ - !ruby/object:Gem::Version
135
+ version: '0'
136
+ type: :development
137
+ prerelease: false
138
+ version_requirements: !ruby/object:Gem::Requirement
139
+ requirements:
140
+ - - ">="
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
129
143
  - !ruby/object:Gem::Dependency
130
144
  name: pry
131
145
  requirement: !ruby/object:Gem::Requirement
@@ -238,7 +252,12 @@ files:
238
252
  - app/assets/javascripts/primer_view_components.js.map
239
253
  - app/assets/javascripts/primer_view_components.js.map.orig
240
254
  - app/assets/javascripts/primer_view_components.js.orig
255
+ - app/components/primer/auto_complete_component.d.ts
256
+ - app/components/primer/auto_complete_component.html.erb
241
257
  - app/components/primer/auto_complete_component.js
258
+ - app/components/primer/auto_complete_component.rb
259
+ - app/components/primer/auto_complete_component.ts
260
+ - app/components/primer/auto_complete_item_component.rb
242
261
  - app/components/primer/avatar_component.rb
243
262
  - app/components/primer/avatar_stack_component.html.erb
244
263
  - app/components/primer/avatar_stack_component.rb
@@ -276,25 +295,29 @@ files:
276
295
  - app/components/primer/markdown_component.rb
277
296
  - app/components/primer/menu_component.html.erb
278
297
  - app/components/primer/menu_component.rb
298
+ - app/components/primer/navigation/tab_component.html.erb
299
+ - app/components/primer/navigation/tab_component.rb
279
300
  - app/components/primer/octicon_component.rb
280
301
  - app/components/primer/popover_component.html.erb
281
302
  - app/components/primer/popover_component.rb
303
+ - app/components/primer/primer.d.ts
282
304
  - app/components/primer/primer.js
283
305
  - app/components/primer/primer.ts
284
306
  - app/components/primer/progress_bar_component.html.erb
285
307
  - app/components/primer/progress_bar_component.rb
286
- - app/components/primer/slot.rb
287
308
  - app/components/primer/spinner_component.html.erb
288
309
  - app/components/primer/spinner_component.rb
289
310
  - app/components/primer/state_component.rb
290
311
  - app/components/primer/subhead_component.html.erb
291
312
  - app/components/primer/subhead_component.rb
313
+ - app/components/primer/tab_container_component.d.ts
292
314
  - app/components/primer/tab_container_component.js
293
315
  - app/components/primer/tab_container_component.rb
294
316
  - app/components/primer/tab_container_component.ts
295
317
  - app/components/primer/tab_nav_component.html.erb
296
318
  - app/components/primer/tab_nav_component.rb
297
319
  - app/components/primer/text_component.rb
320
+ - app/components/primer/time_ago_component.d.ts
298
321
  - app/components/primer/time_ago_component.js
299
322
  - app/components/primer/time_ago_component.rb
300
323
  - app/components/primer/time_ago_component.ts
@@ -307,13 +330,16 @@ files:
307
330
  - app/lib/primer/class_name_helper.rb
308
331
  - app/lib/primer/classify.rb
309
332
  - app/lib/primer/classify/cache.rb
310
- - app/lib/primer/classify/functional_colors.rb.orig
333
+ - app/lib/primer/classify/functional_background_colors.rb
334
+ - app/lib/primer/classify/functional_border_colors.rb
335
+ - app/lib/primer/classify/functional_colors.rb
336
+ - app/lib/primer/classify/functional_text_colors.rb
311
337
  - app/lib/primer/fetch_or_fallback_helper.rb
312
338
  - app/lib/primer/join_style_arguments_helper.rb
313
339
  - app/lib/primer/status/dsl.rb
340
+ - app/lib/primer/tabbed_component_helper.rb
314
341
  - app/lib/primer/test_selector_helper.rb
315
342
  - app/lib/primer/view_helper.rb
316
- - app/lib/primer/view_helper/dsl.rb
317
343
  - lib/primer/view_components.rb
318
344
  - lib/primer/view_components/engine.rb
319
345
  - lib/primer/view_components/version.rb
@@ -1,10 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Primer
4
- # @private
5
- class Slot < ViewComponent::Slot
6
- include ClassNameHelper
7
- include FetchOrFallbackHelper
8
- include JoinStyleArgumentsHelper
9
- end
10
- end
@@ -1,124 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Primer
4
- class Classify
5
- # https://primer-css-git-mkt-color-modes-docs-primer.vercel.app/css/support/v16-migration
6
- class FunctionalColors
7
- FUNCTIONAL_COLOR_REGEX = /(primary|secondary|tertiary|link|success|warning|danger|info|inverse|text_white)/.freeze
8
-
9
- FUNCTIONAL_TEXT_OPTIONS = {
10
- primary: :text_primary,
11
- secondary: :text_secondary,
12
- tertiary: :text_tertiary,
13
- link: :text_link,
14
- success: :text_success,
15
- warning: :text_warning,
16
- danger: :text_danger,
17
- white: :text_white,
18
- inverse: :text_inverse,
19
- }.freeze
20
-
21
- TEXT_COLOR_MAPPINGS = {
22
- gray_dark: FUNCTIONAL_TEXT_OPTIONS[:primary],
23
- gray: FUNCTIONAL_TEXT_OPTIONS[:secondary],
24
- gray_light: FUNCTIONAL_TEXT_OPTIONS[:tertiary],
25
- blue: FUNCTIONAL_TEXT_OPTIONS[:link],
26
- green: FUNCTIONAL_TEXT_OPTIONS[:success],
27
- yellow: FUNCTIONAL_TEXT_OPTIONS[:warning],
28
- red: FUNCTIONAL_TEXT_OPTIONS[:danger],
29
- white: FUNCTIONAL_TEXT_OPTIONS[:white],
30
- # still unsure what will happen with these colors
31
- black: nil,
32
- orange: nil,
33
- orange_light: nil,
34
- purple: nil,
35
- pink: nil,
36
- inherit: nil
37
- }.freeze
38
-
39
- <<<<<<< HEAD
40
- TEXT_OPTIONS = [
41
- :icon_primary,
42
- :icon_secondary,
43
- :icon_tertiary,
44
- :icon_info,
45
- :icon_success,
46
- :icon_warning,
47
- :icon_danger,
48
- *FUNCTIONAL_TEXT_OPTIONS.values
49
- ].freeze
50
- DEPRECATED_TEXT_OPTIONS = TEXT_COLOR_MAPPINGS.keys.freeze
51
- =======
52
- BORDER_COLOR_MAPPINGS = {
53
- gray: :primary,
54
- gray_light: :secondary,
55
- gray_dark: :tertiary,
56
- blue: :info,
57
- green: :success,
58
- yellow: :warning,
59
- red: :danger,
60
- white: :inverse,
61
- # still unsure what will happen with these colors
62
- gray_darker: nil,
63
- blue_light: nil,
64
- red_light: nil,
65
- purple: nil,
66
- black_fade: nil,
67
- white_fade: nil
68
- }.freeze
69
- >>>>>>> extract functional color method and apply it to border
70
-
71
- class << self
72
- def text_color(val)
73
- functional_color(
74
- value: val,
75
- functional_prefix: "color",
76
- non_functional_prefix: "text",
77
- mappings: TEXT_COLOR_MAPPINGS,
78
- key: "color"
79
- )
80
- end
81
-
82
- def border_color(val)
83
- functional_color(
84
- value: val,
85
- functional_prefix: "color-border",
86
- non_functional_prefix: "border",
87
- mappings: BORDER_COLOR_MAPPINGS,
88
- key: "border"
89
- )
90
- end
91
-
92
- private
93
-
94
- def functional_color(value:, functional_prefix:, non_functional_prefix:, mappings:, key:)
95
- # the value is a functional color
96
- return "#{functional_prefix}-#{value.to_s.dasherize}" if ends_with_number?(value) || FUNCTIONAL_COLOR_REGEX.match?(value)
97
- # if the app still allows non functional colors
98
- return "#{non_functional_prefix}-#{value.to_s.dasherize}" unless force_functional_colors?
99
-
100
- if mappings.key?(value)
101
- functional_color = mappings[value]
102
- # colors without functional mapping stay the same
103
- return "#{non_functional_prefix}-#{value.to_s.dasherize}" if functional_color.blank?
104
-
105
- ActiveSupport::Deprecation.warn("#{key} #{value} is deprecated. Please use #{functional_color} instead.") unless Rails.env.production?
106
-
107
- return "#{functional_prefix}-#{functional_color.to_s.dasherize}"
108
- end
109
-
110
- raise ArgumentError, "#{key} #{value} does not exist."
111
- end
112
-
113
- def ends_with_number?(val)
114
- char_code = val[-1].ord
115
- char_code >= 48 && char_code <= 57
116
- end
117
-
118
- def force_functional_colors?
119
- Rails.application.config.primer_view_components.force_functional_colors
120
- end
121
- end
122
- end
123
- end
124
- end
@@ -1,34 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "active_support/concern"
4
-
5
- module Primer
6
- # :nodoc:
7
- module ViewHelper
8
- # DSL to allow components to register a View Helper for shorthand calls.
9
- #
10
- # Example:
11
- #
12
- # class MyComponent < ViewComponent::Base
13
- # include Primer::ViewHelper::Dsl
14
- # view_helper :my_component
15
- # end
16
- module Dsl
17
- extend ActiveSupport::Concern
18
-
19
- class ViewHelperAlreadyDefined < StandardError; end
20
-
21
- included do
22
- class_attribute :primer_helpers, instance_writer: false, default: {}
23
- end
24
-
25
- class_methods do
26
- def view_helper(name)
27
- raise ViewHelperAlreadyDefined, "#{name} is already defined" if primer_helpers[name].present?
28
-
29
- primer_helpers[name] = self
30
- end
31
- end
32
- end
33
- end
34
- end