primer_view_components 0.0.27 → 0.0.32

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