primer_view_components 0.0.89 → 0.0.90

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 (51) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +18 -0
  3. data/app/assets/javascripts/primer_view_components.js +1 -1
  4. data/app/assets/javascripts/primer_view_components.js.map +1 -1
  5. data/app/components/primer/alpha/auto_complete.rb +2 -2
  6. data/app/components/primer/alpha/layout.rb +34 -32
  7. data/app/components/primer/alpha/tab_nav.rb +20 -20
  8. data/app/components/primer/alpha/tab_panels.rb +2 -2
  9. data/app/components/primer/alpha/tool-tip-element.d.ts +1 -3
  10. data/app/components/primer/alpha/tool-tip-element.js +13 -19
  11. data/app/components/primer/alpha/tool-tip-element.ts +14 -22
  12. data/app/components/primer/alpha/tooltip.rb +1 -1
  13. data/app/components/primer/alpha/underline_nav.rb +16 -16
  14. data/app/components/primer/alpha/underline_panels.rb +3 -3
  15. data/app/components/primer/beta/auto_complete/item.rb +2 -2
  16. data/app/components/primer/beta/auto_complete.rb +2 -2
  17. data/app/components/primer/beta/avatar_stack.rb +9 -9
  18. data/app/components/primer/beta/border_box/header.rb +4 -2
  19. data/app/components/primer/beta/border_box.rb +13 -13
  20. data/app/components/primer/beta/breadcrumbs.rb +3 -3
  21. data/app/components/primer/beta/button_group.rb +9 -9
  22. data/app/components/primer/beta/close_button.rb +41 -0
  23. data/app/components/primer/beta/counter.rb +113 -0
  24. data/app/components/primer/beta/flash.rb +1 -1
  25. data/app/components/primer/beta/truncate.rb +17 -17
  26. data/app/components/primer/blankslate_component.rb +1 -1
  27. data/app/components/primer/button_component.rb +8 -8
  28. data/app/components/primer/close_button.rb +2 -34
  29. data/app/components/primer/counter_component.rb +2 -106
  30. data/app/components/primer/details_component.rb +2 -2
  31. data/app/components/primer/dropdown.rb +14 -14
  32. data/app/components/primer/image_crop.rb +1 -1
  33. data/app/components/primer/layout_component.rb +4 -4
  34. data/app/components/primer/link_component.rb +1 -1
  35. data/app/components/primer/menu_component.rb +5 -5
  36. data/app/components/primer/navigation/tab_component.rb +12 -12
  37. data/app/components/primer/popover_component.rb +8 -8
  38. data/app/components/primer/subhead_component.rb +10 -10
  39. data/app/components/primer/timeline_item_component.rb +3 -3
  40. data/app/lib/primer/join_style_arguments_helper.rb +1 -1
  41. data/lib/primer/view_components/linters/argument_mappers/close_button.rb +2 -2
  42. data/lib/primer/view_components/linters/close_button_component_migration_counter.rb +2 -2
  43. data/lib/primer/view_components/linters/helpers/deprecated_components_helpers.rb +2 -0
  44. data/lib/primer/view_components/version.rb +1 -1
  45. data/lib/rubocop/cop/primer/component_name_migration.rb +2 -0
  46. data/lib/tasks/docs.rake +2 -2
  47. data/static/arguments.yml +44 -44
  48. data/static/audited_at.json +2 -0
  49. data/static/constants.json +26 -22
  50. data/static/statuses.json +5 -3
  51. metadata +4 -2
@@ -5,8 +5,10 @@ module Primer
5
5
  class BorderBox
6
6
  # `BorderBox::Header` is used inside `BorderBox` to render its header slot.
7
7
  #
8
- # @accessibility When using `header.title`, set `tag` to one of `h1`, `h2`, `h3`, etc. based on what is appropriate for the page context. <%= link_to_heading_practices %>
8
+ # @accessibility When using `header.with_title`, set `tag` to one of `h1`, `h2`, `h3`, etc. based on what is appropriate for the page context. <%= link_to_heading_practices %>
9
9
  class Header < Primer::Component
10
+ status :beta
11
+
10
12
  TITLE_TAG_FALLBACK = :h2
11
13
  TITLE_TAG_OPTIONS = [:h1, TITLE_TAG_FALLBACK, :h3, :h4, :h5, :h6].freeze
12
14
 
@@ -32,7 +34,7 @@ module Primer
32
34
  #
33
35
  # @example with title
34
36
  # <%= render(Primer::Beta::BorderBox::Header.new) do |h| %>
35
- # <% h.title(tag: :h3) do %>I am a title<% end %>
37
+ # <% h.with_title(tag: :h3) do %>I am a title<% end %>
36
38
  # <% end %>
37
39
  #
38
40
  # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
@@ -72,55 +72,55 @@ module Primer
72
72
 
73
73
  # @example Header with title, body, rows, and footer
74
74
  # <%= render(Primer::Beta::BorderBox.new) do |component| %>
75
- # <% component.header do |h| %>
75
+ # <% component.with_header do |h| %>
76
76
  # <% h.title(tag: :h2) do %>
77
77
  # Header
78
78
  # <% end %>
79
79
  # <% end %>
80
- # <% component.body do %>
80
+ # <% component.with_body do %>
81
81
  # Body
82
82
  # <% end %>
83
- # <% component.row do %>
83
+ # <% component.with_row do %>
84
84
  # <% if true %>
85
85
  # Row one
86
86
  # <% end %>
87
87
  # <% end %>
88
- # <% component.row do %>
88
+ # <% component.with_row do %>
89
89
  # Row two
90
90
  # <% end %>
91
- # <% component.footer do %>
91
+ # <% component.with_footer do %>
92
92
  # Footer
93
93
  # <% end %>
94
94
  # <% end %>
95
95
  #
96
96
  # @example Padding density
97
97
  # <%= render(Primer::Beta::BorderBox.new(padding: :condensed)) do |component| %>
98
- # <% component.header do %>
98
+ # <% component.with_header do %>
99
99
  # Header
100
100
  # <% end %>
101
- # <% component.body do %>
101
+ # <% component.with_body do %>
102
102
  # Body
103
103
  # <% end %>
104
- # <% component.row do %>
104
+ # <% component.with_row do %>
105
105
  # Row two
106
106
  # <% end %>
107
- # <% component.footer do %>
107
+ # <% component.with_footer do %>
108
108
  # Footer
109
109
  # <% end %>
110
110
  # <% end %>
111
111
  #
112
112
  # @example Row colors
113
113
  # <%= render(Primer::Beta::BorderBox.new) do |component| %>
114
- # <% component.row do %>
114
+ # <% component.with_row do %>
115
115
  # Default
116
116
  # <% end %>
117
- # <% component.row(scheme: :neutral) do %>
117
+ # <% component.with_row(scheme: :neutral) do %>
118
118
  # Neutral
119
119
  # <% end %>
120
- # <% component.row(scheme: :info) do %>
120
+ # <% component.with_row(scheme: :info) do %>
121
121
  # Info
122
122
  # <% end %>
123
- # <% component.row(scheme: :warning) do %>
123
+ # <% component.with_row(scheme: :warning) do %>
124
124
  # Warning
125
125
  # <% end %>
126
126
  # <% end %>
@@ -33,9 +33,9 @@ module Primer
33
33
 
34
34
  # @example Basic
35
35
  # <%= render(Primer::Beta::Breadcrumbs.new) do |component| %>
36
- # <% component.item(href: "/") do %>Home<% end %>
37
- # <% component.item(href: "/about") do %>About<% end %>
38
- # <% component.item(href: "/about/team") do %>Team<% end %>
36
+ # <% component.with_item(href: "/") do %>Home<% end %>
37
+ # <% component.with_item(href: "/about") do %>About<% end %>
38
+ # <% component.with_item(href: "/about/team") do %>Team<% end %>
39
39
  # <% end %>
40
40
  #
41
41
  # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
@@ -19,20 +19,20 @@ module Primer
19
19
  # @example Default
20
20
  #
21
21
  # <%= render(Primer::Beta::ButtonGroup.new) do |component| %>
22
- # <% component.button { "Default" } %>
23
- # <% component.button(scheme: :primary) { "Primary" } %>
24
- # <% component.button(scheme: :danger) { "Danger" } %>
25
- # <% component.button(scheme: :outline) { "Outline" } %>
26
- # <% component.button(classes: "custom-class") { "Custom class" } %>
22
+ # <% component.with_button { "Default" } %>
23
+ # <% component.with_button(scheme: :primary) { "Primary" } %>
24
+ # <% component.with_button(scheme: :danger) { "Danger" } %>
25
+ # <% component.with_button(scheme: :outline) { "Outline" } %>
26
+ # <% component.with_button(classes: "custom-class") { "Custom class" } %>
27
27
  # <% end %>
28
28
  #
29
29
  # @example Sizes
30
30
  #
31
31
  # <%= render(Primer::Beta::ButtonGroup.new(size: :small)) do |component| %>
32
- # <% component.button { "Default" } %>
33
- # <% component.button(scheme: :primary) { "Primary" } %>
34
- # <% component.button(scheme: :danger) { "Danger" } %>
35
- # <% component.button(scheme: :outline) { "Outline" } %>
32
+ # <% component.with_button { "Default" } %>
33
+ # <% component.with_button(scheme: :primary) { "Primary" } %>
34
+ # <% component.with_button(scheme: :danger) { "Danger" } %>
35
+ # <% component.with_button(scheme: :outline) { "Outline" } %>
36
36
  # <% end %>
37
37
  #
38
38
  # @param variant [Symbol] DEPRECATED. <%= one_of(Primer::ButtonComponent::SIZE_OPTIONS) %>
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Primer
4
+ module Beta
5
+ # Use `CloseButton` to render an `×` without default button styles.
6
+ #
7
+ # @accessibility
8
+ # `CloseButton` has a default `aria-label` of "Close" to provides assistive technologies with an accessible label.
9
+ # You may choose to override this label with something more descriptive via [system_arguments][0].
10
+ # [0]: https://primer.style/view-components/system-arguments#html-attributes
11
+ class CloseButton < Primer::Component
12
+ status :beta
13
+
14
+ DEFAULT_TYPE = :button
15
+ TYPE_OPTIONS = [DEFAULT_TYPE, :submit].freeze
16
+
17
+ # @example Default
18
+ # <%= render(Primer::Beta::CloseButton.new) %>
19
+ #
20
+ # @param type [Symbol] <%= one_of(Primer::Beta::CloseButton::TYPE_OPTIONS) %>
21
+ # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
22
+ def initialize(type: DEFAULT_TYPE, **system_arguments)
23
+ @system_arguments = deny_tag_argument(**system_arguments)
24
+ @system_arguments[:tag] = :button
25
+ @system_arguments[:block] = false
26
+ @system_arguments[:type] = fetch_or_fallback(TYPE_OPTIONS, type, DEFAULT_TYPE)
27
+ @system_arguments[:classes] = class_names(
28
+ "close-button",
29
+ system_arguments[:classes]
30
+ )
31
+ @system_arguments[:"aria-label"] ||= "Close"
32
+ end
33
+
34
+ def call
35
+ render(Primer::Beta::BaseButton.new(**@system_arguments)) do
36
+ render(Primer::OcticonComponent.new("x"))
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,113 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Primer
4
+ module Beta
5
+ # Use `Counter` to add a count to navigational elements and buttons.
6
+ #
7
+ # @accessibility
8
+ # Always use `Counter` with adjacent text that provides supplementary information regarding what the count is for. For instance, `Counter`
9
+ # should be accompanied with text such as `issues` or `pull requests`.
10
+ #
11
+ class Counter < Primer::Component
12
+ status :beta
13
+
14
+ DEFAULT_SCHEME = :default
15
+ SCHEME_MAPPINGS = {
16
+ DEFAULT_SCHEME => "",
17
+ :primary => "Counter--primary",
18
+ :secondary => "Counter--secondary",
19
+ # deprecated
20
+ :gray => "Counter--primary",
21
+ :light_gray => "Counter--secondary"
22
+ }.freeze
23
+ DEPRECATED_SCHEME_OPTIONS = [:gray, :light_gray].freeze
24
+ SCHEME_OPTIONS = (SCHEME_MAPPINGS.keys - DEPRECATED_SCHEME_OPTIONS).freeze
25
+
26
+ #
27
+ # @example Default
28
+ # <%= render(Primer::Beta::Counter.new(count: 25)) %>
29
+ #
30
+ # @example Schemes
31
+ # <%= render(Primer::Beta::Counter.new(count: 25, scheme: :primary)) %>
32
+ # <%= render(Primer::Beta::Counter.new(count: 25, scheme: :secondary)) %>
33
+ #
34
+ # @param count [Integer, Float::INFINITY, nil] The number to be displayed (e.x. # of issues, pull requests)
35
+ # @param scheme [Symbol] Color scheme. <%= one_of(Primer::Beta::Counter::SCHEME_OPTIONS) %>
36
+ # @param limit [Integer, nil] Maximum value to display. Pass `nil` for no limit. (e.x. if `count` == 6,000 and `limit` == 5000, counter will display "5,000+")
37
+ # @param hide_if_zero [Boolean] If true, a `hidden` attribute is added to the counter if `count` is zero.
38
+ # @param text [String] Text to display instead of count.
39
+ # @param round [Boolean] Whether to apply our standard rounding logic to value.
40
+ # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
41
+ def initialize(
42
+ count: 0,
43
+ scheme: DEFAULT_SCHEME,
44
+ limit: 5_000,
45
+ hide_if_zero: false,
46
+ text: "",
47
+ round: false,
48
+ **system_arguments
49
+ )
50
+ @count = count
51
+ @limit = limit
52
+ @hide_if_zero = hide_if_zero
53
+ @text = text
54
+ @round = round
55
+ @system_arguments = deny_tag_argument(**system_arguments)
56
+
57
+ @has_limit = !@limit.nil?
58
+ @system_arguments[:title] = title
59
+ @system_arguments[:tag] = :span
60
+ @system_arguments[:classes] = class_names(
61
+ "Counter",
62
+ @system_arguments[:classes],
63
+ SCHEME_MAPPINGS[fetch_or_fallback(SCHEME_OPTIONS, scheme, DEFAULT_SCHEME, deprecated_values: DEPRECATED_SCHEME_OPTIONS)]
64
+ )
65
+ @system_arguments[:hidden] = true if count == 0 && hide_if_zero # rubocop:disable Style/NumericPredicate
66
+ end
67
+
68
+ def call
69
+ render(Primer::BaseComponent.new(**@system_arguments)) { value }
70
+ end
71
+
72
+ private
73
+
74
+ def title
75
+ if @text.present?
76
+ @text
77
+ elsif @count.nil?
78
+ "Not available"
79
+ elsif @count == Float::INFINITY
80
+ "Infinity"
81
+ else
82
+ count = @count.to_i
83
+ str = number_with_delimiter(@has_limit ? [count, @limit].min : count)
84
+ str += "+" if @has_limit && count > @limit
85
+ str
86
+ end
87
+ end
88
+
89
+ def value
90
+ if @text.present?
91
+ @text
92
+ elsif @count.nil?
93
+ "" # CSS will hide it
94
+ elsif @count == Float::INFINITY
95
+ "∞"
96
+ else
97
+ if @round
98
+ count = @has_limit ? [@count.to_i, @limit].min : @count.to_i
99
+ precision = count.between?(100_000, 999_999) ? 0 : 1
100
+ units = { thousand: "k", million: "m", billion: "b" }
101
+ str = number_to_human(count, precision: precision, significant: false, units: units, format: "%n%u")
102
+ else
103
+ @count = @count.to_i
104
+ str = number_with_delimiter(@has_limit ? [@count, @limit].min : @count)
105
+ end
106
+
107
+ str += "+" if @has_limit && @count.to_i > @limit
108
+ str
109
+ end
110
+ end
111
+ end
112
+ end
113
+ end
@@ -42,7 +42,7 @@ module Primer
42
42
  # @example With actions
43
43
  # <%= render(Primer::Beta::Flash.new) do |component| %>
44
44
  # This is a flash message with actions!
45
- # <% component.action do %>
45
+ # <% component.with_action do %>
46
46
  # <%= render(Primer::ButtonComponent.new(size: :small)) { "Take action" } %>
47
47
  # <% end %>
48
48
  # <% end %>
@@ -19,49 +19,49 @@ module Primer
19
19
  #
20
20
  # @example Multiple items
21
21
  # <%= render(Primer::Beta::Truncate.new) do |component| %>
22
- # <% component.item do %>really-long-repository-owner-name<% end %>
23
- # <% component.item(font_weight: :bold) do %>
22
+ # <% component.with_item do %>really-long-repository-owner-name<% end %>
23
+ # <% component.with_item(font_weight: :bold) do %>
24
24
  # <%= render(Primer::BaseComponent.new(tag: :span, font_weight: :normal)) { "/" } %> really-long-repository-name
25
25
  # <% end %>
26
26
  # <% end %>
27
27
  #
28
28
  # @example Advanced multiple items
29
29
  # <%= render(Primer::Beta::Truncate.new(tag: :ol)) do |component| %>
30
- # <% component.item(tag: :li) do %>primer<% end %>
31
- # <% component.item(tag: :li, priority: true) do %>/ css<% end %>
32
- # <% component.item(tag: :li) do %>/ Issues<% end %>
33
- # <% component.item(tag: :li) do %>/ #123 —<% end %>
34
- # <% component.item(tag: :li, priority: true) do %>
30
+ # <% component.with_item(tag: :li) do %>primer<% end %>
31
+ # <% component.with_item(tag: :li, priority: true) do %>/ css<% end %>
32
+ # <% component.with_item(tag: :li) do %>/ Issues<% end %>
33
+ # <% component.with_item(tag: :li) do %>/ #123 —<% end %>
34
+ # <% component.with_item(tag: :li, priority: true) do %>
35
35
  # Visual bug on primer.style found in lists
36
36
  # <% end %>
37
37
  # <% end %>
38
38
  #
39
39
  # @example Expand on hover or focus
40
40
  # <%= render(Primer::Beta::Truncate.new) do |component| %>
41
- # <% component.item(tag: :a, href: "#", expandable: true) do %>really-long-repository-owner-name<% end %>
42
- # <% component.item(tag: :a, href: "#", expandable: true) do %>really-long-repository-owner-name<% end %>
43
- # <% component.item(tag: :a, href: "#", expandable: true) do %>really-long-repository-owner-name<% end %>
44
- # <% component.item(tag: :a, href: "#", expandable: true) do %>really-long-repository-owner-name<% end %>
41
+ # <% component.with_item(tag: :a, href: "#", expandable: true) do %>really-long-repository-owner-name<% end %>
42
+ # <% component.with_item(tag: :a, href: "#", expandable: true) do %>really-long-repository-owner-name<% end %>
43
+ # <% component.with_item(tag: :a, href: "#", expandable: true) do %>really-long-repository-owner-name<% end %>
44
+ # <% component.with_item(tag: :a, href: "#", expandable: true) do %>really-long-repository-owner-name<% end %>
45
45
  # <% end %>
46
46
  #
47
47
  # @example Max widths
48
48
  # <%= render(Primer::Beta::Truncate.new) do |component| %>
49
- # <% component.item(max_width: 300, expandable: true) do %>branch-name-that-is-really-long-branch-name-that-is-really-long-branch-name-that-is-really-long<% end %>
50
- # <% component.item(max_width: 200, expandable: true) do %>branch-name-that-is-really-long-branch-name-that-is-really-long-branch-name-that-is-really-long<% end %>
51
- # <% component.item(max_width: 100, expandable: true) do %>branch-name-that-is-really-long-branch-name-that-is-really-long-branch-name-that-is-really-long<% end %>
49
+ # <% component.with_item(max_width: 300, expandable: true) do %>branch-name-that-is-really-long-branch-name-that-is-really-long-branch-name-that-is-really-long<% end %>
50
+ # <% component.with_item(max_width: 200, expandable: true) do %>branch-name-that-is-really-long-branch-name-that-is-really-long-branch-name-that-is-really-long<% end %>
51
+ # <% component.with_item(max_width: 100, expandable: true) do %>branch-name-that-is-really-long-branch-name-that-is-really-long-branch-name-that-is-really-long<% end %>
52
52
  # <% end %>
53
53
  #
54
54
  # @example Max widths on new lines
55
55
  # <%= render(Primer::Beta::Truncate.new) do |component| %>
56
- # <% component.item(max_width: 300, expandable: true) do %>branch-name-that-is-really-long-branch-name-that-is-really-long-branch-name-that-is-really-long<% end %>
56
+ # <% component.with_item(max_width: 300, expandable: true) do %>branch-name-that-is-really-long-branch-name-that-is-really-long-branch-name-that-is-really-long<% end %>
57
57
  # <% end %>
58
58
  # <br/>
59
59
  # <%= render(Primer::Beta::Truncate.new) do |component| %>
60
- # <% component.item(max_width: 200, expandable: true) do %>branch-name-that-is-really-long-branch-name-that-is-really-long-branch-name-that-is-really-long<% end %>
60
+ # <% component.with_item(max_width: 200, expandable: true) do %>branch-name-that-is-really-long-branch-name-that-is-really-long-branch-name-that-is-really-long<% end %>
61
61
  # <% end %>
62
62
  # <br/>
63
63
  # <%= render(Primer::Beta::Truncate.new) do |component| %>
64
- # <% component.item(max_width: 100, expandable: true) do %>branch-name-that-is-really-long-branch-name-that-is-really-long-branch-name-that-is-really-long<% end %>
64
+ # <% component.with_item(max_width: 100, expandable: true) do %>branch-name-that-is-really-long-branch-name-that-is-really-long-branch-name-that-is-really-long<% end %>
65
65
  # <% end %>
66
66
  #
67
67
  # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
@@ -41,7 +41,7 @@ module Primer
41
41
  # title: "Title",
42
42
  # description: "Description",
43
43
  # ) do |component| %>
44
- # <% component.spinner(size: :large) %>
44
+ # <% component.with_spinner(size: :large) %>
45
45
  # <% end %>
46
46
  #
47
47
  # @example Custom content
@@ -44,14 +44,14 @@ module Primer
44
44
  #
45
45
  # Use:
46
46
  #
47
- # - `trailing_visual_counter` for a <%= link_to_component(Primer::CounterComponent) %>.
47
+ # - `trailing_visual_counter` for a <%= link_to_component(Primer::Beta::Counter) %>.
48
48
  #
49
- # @param system_arguments [Hash] Same arguments as <%= link_to_component(Primer::CounterComponent) %>.
49
+ # @param system_arguments [Hash] Same arguments as <%= link_to_component(Primer::Beta::Counter) %>.
50
50
  renders_one :trailing_visual, types: {
51
51
  counter: lambda { |**system_arguments|
52
52
  system_arguments[:ml] = 2
53
53
 
54
- Primer::CounterComponent.new(**system_arguments)
54
+ Primer::Beta::Counter.new(**system_arguments)
55
55
  }
56
56
  }
57
57
  alias counter trailing_visual_counter # remove alias when all buttons are migrated to new slot names
@@ -89,20 +89,20 @@ module Primer
89
89
  #
90
90
  # @example With leading visual
91
91
  # <%= render(Primer::ButtonComponent.new) do |c| %>
92
- # <% c.leading_visual_icon(icon: :star) %>
92
+ # <% c.with_leading_visual_icon(icon: :star) %>
93
93
  # Button
94
94
  # <% end %>
95
95
  #
96
96
  # @example With trailing visual
97
97
  # <%= render(Primer::ButtonComponent.new) do |c| %>
98
- # <% c.trailing_visual_counter(count: 15) %>
98
+ # <% c.with_trailing_visual_counter(count: 15) %>
99
99
  # Button
100
100
  # <% end %>
101
101
  #
102
102
  # @example With leading and trailing visuals
103
103
  # <%= render(Primer::ButtonComponent.new) do |c| %>
104
- # <% c.leading_visual_icon(icon: :star) %>
105
- # <% c.trailing_visual_counter(count: 15) %>
104
+ # <% c.with_leading_visual_icon(icon: :star) %>
105
+ # <% c.with_trailing_visual_counter(count: 15) %>
106
106
  # Button
107
107
  # <% end %>
108
108
  #
@@ -116,7 +116,7 @@ module Primer
116
116
  # Use tooltips sparingly and as a last resort. Consult the <%= link_to_component(Primer::Alpha::Tooltip) %> documentation for more information.
117
117
  # @code
118
118
  # <%= render(Primer::ButtonComponent.new(id: "button-with-tooltip")) do |c| %>
119
- # <% c.tooltip(text: "Tooltip text") %>
119
+ # <% c.with_tooltip(text: "Tooltip text") %>
120
120
  # Button
121
121
  # <% end %>
122
122
  #
@@ -1,39 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Primer
4
- # Use `CloseButton` to render an `×` without default button styles.
5
- #
6
- # @accessibility
7
- # `CloseButton` has a default `aria-label` of "Close" to provides assistive technologies with an accessible label.
8
- # You may choose to override this label with something more descriptive via [system_arguments][0].
9
- # [0]: https://primer.style/view-components/system-arguments#html-attributes
10
- class CloseButton < Primer::Component
11
- status :beta
12
-
13
- DEFAULT_TYPE = :button
14
- TYPE_OPTIONS = [DEFAULT_TYPE, :submit].freeze
15
-
16
- # @example Default
17
- # <%= render(Primer::CloseButton.new) %>
18
- #
19
- # @param type [Symbol] <%= one_of(Primer::CloseButton::TYPE_OPTIONS) %>
20
- # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
21
- def initialize(type: DEFAULT_TYPE, **system_arguments)
22
- @system_arguments = deny_tag_argument(**system_arguments)
23
- @system_arguments[:tag] = :button
24
- @system_arguments[:block] = false
25
- @system_arguments[:type] = fetch_or_fallback(TYPE_OPTIONS, type, DEFAULT_TYPE)
26
- @system_arguments[:classes] = class_names(
27
- "close-button",
28
- system_arguments[:classes]
29
- )
30
- @system_arguments[:"aria-label"] ||= "Close"
31
- end
32
-
33
- def call
34
- render(Primer::Beta::BaseButton.new(**@system_arguments)) do
35
- render(Primer::OcticonComponent.new("x"))
36
- end
37
- end
4
+ class CloseButton < Primer::Beta::CloseButton
5
+ status :deprecated
38
6
  end
39
7
  end
@@ -1,111 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Primer
4
- # Use `Counter` to add a count to navigational elements and buttons.
5
- #
6
- # @accessibility
7
- # Always use `Counter` with adjacent text that provides supplementary information regarding what the count is for. For instance, `Counter`
8
- # should be accompanied with text such as `issues` or `pull requests`.
9
- #
10
- class CounterComponent < Primer::Component
11
- status :beta
12
-
13
- DEFAULT_SCHEME = :default
14
- SCHEME_MAPPINGS = {
15
- DEFAULT_SCHEME => "",
16
- :primary => "Counter--primary",
17
- :secondary => "Counter--secondary",
18
- # deprecated
19
- :gray => "Counter--primary",
20
- :light_gray => "Counter--secondary"
21
- }.freeze
22
- DEPRECATED_SCHEME_OPTIONS = [:gray, :light_gray].freeze
23
- SCHEME_OPTIONS = (SCHEME_MAPPINGS.keys - DEPRECATED_SCHEME_OPTIONS).freeze
24
-
25
- #
26
- # @example Default
27
- # <%= render(Primer::CounterComponent.new(count: 25)) %>
28
- #
29
- # @example Schemes
30
- # <%= render(Primer::CounterComponent.new(count: 25, scheme: :primary)) %>
31
- # <%= render(Primer::CounterComponent.new(count: 25, scheme: :secondary)) %>
32
- #
33
- # @param count [Integer, Float::INFINITY, nil] The number to be displayed (e.x. # of issues, pull requests)
34
- # @param scheme [Symbol] Color scheme. <%= one_of(Primer::CounterComponent::SCHEME_OPTIONS) %>
35
- # @param limit [Integer, nil] Maximum value to display. Pass `nil` for no limit. (e.x. if `count` == 6,000 and `limit` == 5000, counter will display "5,000+")
36
- # @param hide_if_zero [Boolean] If true, a `hidden` attribute is added to the counter if `count` is zero.
37
- # @param text [String] Text to display instead of count.
38
- # @param round [Boolean] Whether to apply our standard rounding logic to value.
39
- # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
40
- def initialize(
41
- count: 0,
42
- scheme: DEFAULT_SCHEME,
43
- limit: 5_000,
44
- hide_if_zero: false,
45
- text: "",
46
- round: false,
47
- **system_arguments
48
- )
49
- @count = count
50
- @limit = limit
51
- @hide_if_zero = hide_if_zero
52
- @text = text
53
- @round = round
54
- @system_arguments = deny_tag_argument(**system_arguments)
55
-
56
- @has_limit = !@limit.nil?
57
- @system_arguments[:title] = title
58
- @system_arguments[:tag] = :span
59
- @system_arguments[:classes] = class_names(
60
- "Counter",
61
- @system_arguments[:classes],
62
- SCHEME_MAPPINGS[fetch_or_fallback(SCHEME_OPTIONS, scheme, DEFAULT_SCHEME, deprecated_values: DEPRECATED_SCHEME_OPTIONS)]
63
- )
64
- @system_arguments[:hidden] = true if count == 0 && hide_if_zero # rubocop:disable Style/NumericPredicate
65
- end
66
-
67
- def call
68
- render(Primer::BaseComponent.new(**@system_arguments)) { value }
69
- end
70
-
71
- private
72
-
73
- def title
74
- if @text.present?
75
- @text
76
- elsif @count.nil?
77
- "Not available"
78
- elsif @count == Float::INFINITY
79
- "Infinity"
80
- else
81
- count = @count.to_i
82
- str = number_with_delimiter(@has_limit ? [count, @limit].min : count)
83
- str += "+" if @has_limit && count > @limit
84
- str
85
- end
86
- end
87
-
88
- def value
89
- if @text.present?
90
- @text
91
- elsif @count.nil?
92
- "" # CSS will hide it
93
- elsif @count == Float::INFINITY
94
- "∞"
95
- else
96
- if @round
97
- count = @has_limit ? [@count.to_i, @limit].min : @count.to_i
98
- precision = count.between?(100_000, 999_999) ? 0 : 1
99
- units = { thousand: "k", million: "m", billion: "b" }
100
- str = number_to_human(count, precision: precision, significant: false, units: units, format: "%n%u")
101
- else
102
- @count = @count.to_i
103
- str = number_with_delimiter(@has_limit ? [@count, @limit].min : @count)
104
- end
105
-
106
- str += "+" if @has_limit && @count.to_i > @limit
107
- str
108
- end
109
- end
4
+ class CounterComponent < Primer::Beta::Counter
5
+ status :deprecated
110
6
  end
111
7
  end
@@ -40,10 +40,10 @@ module Primer
40
40
  # @example Default
41
41
  #
42
42
  # <%= render Primer::DetailsComponent.new do |c| %>
43
- # <% c.summary do %>
43
+ # <% c.with_summary do %>
44
44
  # Summary
45
45
  # <% end %>
46
- # <% c.body do %>
46
+ # <% c.with_body do %>
47
47
  # Body
48
48
  # <% end %>
49
49
  # <% end %>