primer_view_components 0.0.86 → 0.0.89

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 (46) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +34 -0
  3. data/app/components/primer/alpha/text_field.rb +1 -1
  4. data/app/components/primer/alpha/tooltip.rb +1 -0
  5. data/app/components/primer/{button_group.html.erb → beta/button_group.html.erb} +0 -0
  6. data/app/components/primer/beta/button_group.rb +57 -0
  7. data/app/components/primer/blankslate_component.html.erb +25 -0
  8. data/app/components/primer/blankslate_component.rb +150 -2
  9. data/app/components/primer/box.rb +25 -0
  10. data/app/components/primer/box_component.rb +2 -20
  11. data/app/components/primer/button_group.rb +2 -50
  12. data/app/components/primer/flex_component.rb +20 -20
  13. data/app/components/primer/flex_item_component.rb +4 -4
  14. data/app/components/primer/icon_button.html.erb +8 -2
  15. data/app/components/primer/icon_button.rb +6 -0
  16. data/app/components/primer/label_component.rb +32 -10
  17. data/app/components/primer/link_component.rb +14 -0
  18. data/app/components/primer/popover_component.rb +1 -1
  19. data/app/helpers/primer/form_helper.rb +10 -0
  20. data/lib/primer/form_components.rb +2 -2
  21. data/lib/primer/forms/base.html.erb +1 -1
  22. data/lib/primer/forms/base.rb +5 -0
  23. data/lib/primer/forms/base_component.rb +4 -0
  24. data/lib/primer/forms/buffer_rewriter.rb +3 -2
  25. data/lib/primer/forms/builder.rb +48 -0
  26. data/lib/primer/forms/check_box_group.html.erb +1 -1
  27. data/lib/primer/forms/dsl/input.rb +1 -23
  28. data/lib/primer/forms/dsl/input_group.rb +0 -7
  29. data/lib/primer/forms/group.html.erb +1 -1
  30. data/lib/primer/forms/multi.html.erb +1 -1
  31. data/lib/primer/view_components/engine.rb +11 -0
  32. data/lib/primer/view_components/linters/argument_mappers/label.rb +11 -4
  33. data/lib/primer/view_components/linters/flash_migration_counter.rb +1 -1
  34. data/lib/primer/view_components/linters/helpers/deprecated_components_helpers.rb +2 -0
  35. data/lib/primer/view_components/version.rb +1 -1
  36. data/lib/rubocop/cop/primer/component_name_migration.rb +2 -0
  37. data/lib/rubocop/cop/primer/deprecated_label_variants.rb +71 -0
  38. data/lib/tasks/docs.rake +2 -2
  39. data/lib/yard/docs_helper.rb +1 -1
  40. data/static/arguments.yml +56 -48
  41. data/static/audited_at.json +2 -0
  42. data/static/classes.yml +2 -0
  43. data/static/constants.json +20 -7
  44. data/static/statuses.json +4 -2
  45. metadata +11 -6
  46. data/app/components/primer/link_component.html.erb +0 -12
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f85b7d98dc85b59a5312ea5c3c5cfe35c966a1ad495263837032249bc7782d89
4
- data.tar.gz: d4829969cc3672f7e3e492e3179d48f75fe9cd2299fa03b2153b5d2892ed04b4
3
+ metadata.gz: 549fdec61b2c1c8c5ae3632f2cc567939f00e7679c7b350e86198e6c50db00fe
4
+ data.tar.gz: e2ea2f9570dbb93b53c5cddc6d4e98f1ed7b6918b4c7f1a879179b48ccfda0b3
5
5
  SHA512:
6
- metadata.gz: 7270b517ed8032991f97b9369975704fb8596efaf5867f73987b8a0993ef9809df91a4e3673ceb17e29699cb975143ce5644c677ac68149b54e28ada734d2df8
7
- data.tar.gz: e512281e87914e23b3dd7b24c1bd5b1bd89d531e97f733687f872dc8d2bff56079810f5017686af4b84ee7cd05e56e1231d56058a67ccbaca1b0b0ea0c210928
6
+ metadata.gz: cd33068d7ba46698d4e31afff8bf2edbb51472d04fdddd3a776835721ee80bf56e2fe2c398fd8545a66cdf1250b65b55f567ce488e14791737a6ccc955e54e90
7
+ data.tar.gz: 7bc316d92551cd6cfd15108fd864ad39a9322f3988936dc8d6aab73583d1ece0f8be035cadd637d2a352ea96ac2722b752926ee6e6136f6c61bdb70b4388f9e5
data/CHANGELOG.md CHANGED
@@ -1,5 +1,39 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## 0.0.89
4
+
5
+ ### Patch Changes
6
+
7
+ - [#1284](https://github.com/primer/view_components/pull/1284) [`401dac2a`](https://github.com/primer/view_components/commit/401dac2a1ab2e026b231399ddb03cfb51bc7742f) Thanks [@jonrohan](https://github.com/jonrohan)! - Don't render tooltip on IconButton when tag is a summary element
8
+
9
+ * [#1283](https://github.com/primer/view_components/pull/1283) [`ea1c29d7`](https://github.com/primer/view_components/commit/ea1c29d7fa0d917a729cba684bf5f8ae039bb228) Thanks [@jonrohan](https://github.com/jonrohan)! - Updating label component to not always have large
10
+
11
+ ## 0.0.88
12
+
13
+ ### Patch Changes
14
+
15
+ - [#1275](https://github.com/primer/view_components/pull/1275) [`1e9ce95c`](https://github.com/primer/view_components/commit/1e9ce95cdc942acdb51807839b2924731a1ab295) Thanks [@mxriverlynn](https://github.com/mxriverlynn)! - move Primer::ButtonGroup to Primer::Beta::ButtonGroup, update all references, and add deprecated Primer::ButtonGroup for backwards compatibility
16
+
17
+ * [#1266](https://github.com/primer/view_components/pull/1266) [`7d2949de`](https://github.com/primer/view_components/commit/7d2949de758b97aa940287a1ceabd5d16209cae2) Thanks [@mxriverlynn](https://github.com/mxriverlynn)! - moving Primer::BoxComponent to Primer::Box and creating deprecated Primer::BoxComponent for backward compatibility
18
+
19
+ - [#1281](https://github.com/primer/view_components/pull/1281) [`843061de`](https://github.com/primer/view_components/commit/843061de168a1927a80fd22e7da795c1a9ddaacd) Thanks [@jonrohan](https://github.com/jonrohan)! - Always set `:absolute` position on Primer::Alpha::Tooltip
20
+
21
+ * [#934](https://github.com/primer/view_components/pull/934) [`d638fefb`](https://github.com/primer/view_components/commit/d638fefbb55ce9802e91b374903bcde9cc6ab612) Thanks [@pouretrebelle](https://github.com/pouretrebelle)! - Refactor the LabelComponent API
22
+
23
+ ## 0.0.87
24
+
25
+ ### Patch Changes
26
+
27
+ - [#1274](https://github.com/primer/view_components/pull/1274) [`c153f734`](https://github.com/primer/view_components/commit/c153f734a891fc3bc7dfc3bed34630ff38ab39d7) Thanks [@jonrohan](https://github.com/jonrohan)! - Fixing whitespace in rendered LinkComponent
28
+
29
+ * [#1273](https://github.com/primer/view_components/pull/1273) [`f38517ac`](https://github.com/primer/view_components/commit/f38517acf1aed43b27f2c6b94634d70b124883e6) Thanks [@camertron](https://github.com/camertron)! - Revert removal of BlankslateComponent
30
+
31
+ - [#1270](https://github.com/primer/view_components/pull/1270) [`44919308`](https://github.com/primer/view_components/commit/4491930812d16a9bcb5d8f05b4d94e49e469afa5) Thanks [@camertron](https://github.com/camertron)! - Use a custom form builder; introduce primer_form_for
32
+
33
+ * [#1269](https://github.com/primer/view_components/pull/1269) [`9ae9615f`](https://github.com/primer/view_components/commit/9ae9615f31acf43875feb89661cac6311527f9fd) Thanks [@mxriverlynn](https://github.com/mxriverlynn)! - updating component migrator script with improvements in component reference updates, deprecations, etc.
34
+
35
+ - [#1276](https://github.com/primer/view_components/pull/1276) [`759ea56f`](https://github.com/primer/view_components/commit/759ea56f00cbe3e536f4e558a9fb9a3e1b89bf7b) Thanks [@mxriverlynn](https://github.com/mxriverlynn)! - correcting the updates to nav.yml in the component status migrator
36
+
3
37
  ## 0.0.86
4
38
 
5
39
  ### Patch Changes
@@ -6,7 +6,7 @@ module Primer
6
6
 
7
7
  # A text field suitable for use outside a form. For a text field input suitable for use
8
8
  # within an HTML form, see the `Primer::Forms` namespace.
9
- class TextField
9
+ class TextField < Primer::Component
10
10
  status :alpha
11
11
 
12
12
  # @!method initialize
@@ -91,6 +91,7 @@ module Primer
91
91
  @system_arguments[:tag] = :"tool-tip"
92
92
  @system_arguments[:style] = join_style_arguments(@system_arguments[:style], "visibility: hidden")
93
93
  @system_arguments[:for] = for_id
94
+ @system_arguments[:position] = :absolute
94
95
  @system_arguments[:"data-direction"] = fetch_or_fallback(DIRECTION_OPTIONS, direction, DIRECTION_DEFAULT).to_s
95
96
  @system_arguments[:"data-type"] = fetch_or_fallback(TYPE_OPTIONS, type, TYPE_FALLBACK).to_s
96
97
  end
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Primer
4
+ module Beta
5
+ # Use `ButtonGroup` to render a series of buttons.
6
+ class ButtonGroup < Primer::Component
7
+ status :beta
8
+
9
+ # Required list of buttons to be rendered.
10
+ #
11
+ # @param kwargs [Hash] The same arguments as <%= link_to_component(Primer::ButtonComponent) %> except for `size` and `group_item`.
12
+ renders_many :buttons, lambda { |**kwargs|
13
+ kwargs[:group_item] = true
14
+ kwargs[:size] = @size
15
+
16
+ Primer::ButtonComponent.new(**kwargs)
17
+ }
18
+
19
+ # @example Default
20
+ #
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" } %>
27
+ # <% end %>
28
+ #
29
+ # @example Sizes
30
+ #
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" } %>
36
+ # <% end %>
37
+ #
38
+ # @param variant [Symbol] DEPRECATED. <%= one_of(Primer::ButtonComponent::SIZE_OPTIONS) %>
39
+ # @param size [Symbol] <%= one_of(Primer::ButtonComponent::SIZE_OPTIONS) %>
40
+ # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
41
+ def initialize(variant: nil, size: Primer::ButtonComponent::DEFAULT_SIZE, **system_arguments)
42
+ @size = variant || size
43
+ @system_arguments = deny_tag_argument(**system_arguments)
44
+ @system_arguments[:tag] = :div
45
+
46
+ @system_arguments[:classes] = class_names(
47
+ "BtnGroup",
48
+ system_arguments[:classes]
49
+ )
50
+ end
51
+
52
+ def render?
53
+ buttons.any?
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,25 @@
1
+ <%# erblint:counter ButtonComponentMigrationCounter 1 %>
2
+ <%= render Primer::BaseComponent.new(**@system_arguments) do %>
3
+ <% if spinner.present? %>
4
+ <%= spinner %>
5
+ <% elsif @icon.present? %>
6
+ <%= primer_octicon @icon, size: @icon_size, classes: "blankslate-icon" %>
7
+ <% elsif @image_src.present? && @image_alt.present? %>
8
+ <%= image_tag @image_src.to_s, class: "mb-3", size: "56x56", alt: @image_alt.to_s %>
9
+ <% end %>
10
+ <% if @title.present? %>
11
+ <%= render Primer::BaseComponent.new(tag: @title_tag, mb: 1) do %><%= @title %><% end %>
12
+ <% end %>
13
+ <% if @description.present? %>
14
+ <p><%= @description %></p>
15
+ <% end %>
16
+ <%= content %>
17
+ <% if @button_text.present? && @button_url.present? %>
18
+ <a class="btn <%= @button_classes %>" href="<%= @button_url %>"><%= @button_text %></a>
19
+ <% end %>
20
+ <% if @link_text.present? && @link_url.present? %>
21
+ <p>
22
+ <%= link_to @link_url.to_s do %><%= @link_text %><% end %>
23
+ </p>
24
+ <% end %>
25
+ <% end %>
@@ -1,8 +1,156 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Primer
4
- # BlankslateComponent is deprecated. Please use `Primer::Beta::Blankslate` instead.
5
- class BlankslateComponent < Primer::Beta::Blankslate
4
+ # Use `Blankslate` when there is a lack of content within a page or section. Use as placeholder to tell users why something isn't there.
5
+ # @accessibility
6
+ # `Blankslate` renders an `<h3>` element for the title by default. Update the heading level based on what is appropriate for your page hierarchy by setting `title_tag`.
7
+ # <%= link_to_heading_practices %>
8
+ class BlankslateComponent < Primer::Component
6
9
  status :deprecated
10
+
11
+ # Optional Spinner.
12
+ #
13
+ # @param kwargs [Hash] The same arguments as <%= link_to_component(Primer::SpinnerComponent) %>.
14
+ renders_one :spinner, lambda { |**system_arguments|
15
+ system_arguments[:mb] ||= 3
16
+ Primer::SpinnerComponent.new(**system_arguments)
17
+ }
18
+
19
+ #
20
+ # @example Basic
21
+ # <%= render Primer::BlankslateComponent.new(
22
+ # title: "Title",
23
+ # description: "Description",
24
+ # ) %>
25
+ #
26
+ # @example Icon
27
+ # @description
28
+ # Add an `icon` to give additional context. Refer to the [Octicons](https://primer.style/octicons/) documentation to choose an icon.
29
+ # @code
30
+ # <%= render Primer::BlankslateComponent.new(
31
+ # icon: :globe,
32
+ # title: "Title",
33
+ # description: "Description",
34
+ # ) %>
35
+ #
36
+ # @example Loading
37
+ # @description
38
+ # Add a [SpinnerComponent](https://primer.style/view-components/components/spinner) to the blankslate in place of an icon.
39
+ # @code
40
+ # <%= render Primer::BlankslateComponent.new(
41
+ # title: "Title",
42
+ # description: "Description",
43
+ # ) do |component| %>
44
+ # <% component.spinner(size: :large) %>
45
+ # <% end %>
46
+ #
47
+ # @example Custom content
48
+ # @description
49
+ # Pass custom content as a block in place of `description`.
50
+ # @code
51
+ # <%= render Primer::BlankslateComponent.new(
52
+ # title: "Title",
53
+ # ) do %>
54
+ # <em>Your custom content here</em>
55
+ # <% end %>
56
+ #
57
+ # @example Action button
58
+ # @description
59
+ # Provide a button to guide users to take action from the blankslate. The button appears below the description and custom content.
60
+ # @code
61
+ # <%= render Primer::BlankslateComponent.new(
62
+ # icon: :book,
63
+ # title: "Welcome to the mona wiki!",
64
+ # description: "Wikis provide a place in your repository to lay out the roadmap of your project, show the current status, and document software better, together.",
65
+ #
66
+ # button_text: "Create the first page",
67
+ # button_url: "https://github.com/monalisa/mona/wiki/_new",
68
+ # ) %>
69
+ #
70
+ # @example Link
71
+ # @description
72
+ # Add an additional link to help users learn more about a feature. The link will be shown at the very bottom:
73
+ # @code
74
+ # <%= render Primer::BlankslateComponent.new(
75
+ # icon: :book,
76
+ # title: "Welcome to the mona wiki!",
77
+ # description: "Wikis provide a place in your repository to lay out the roadmap of your project, show the current status, and document software better, together.",
78
+ # link_text: "Learn more about wikis",
79
+ # link_url: "https://docs.github.com/en/github/building-a-strong-community/about-wikis",
80
+ # ) %>
81
+ #
82
+ # @example Variations
83
+ # @description
84
+ # There are a few variations of how the Blankslate appears: `narrow` adds a maximum width, `large` increases the font size, and `spacious` adds extra padding.
85
+ # @code
86
+ # <%= render Primer::BlankslateComponent.new(
87
+ # icon: :book,
88
+ # title: "Welcome to the mona wiki!",
89
+ # description: "Wikis provide a place in your repository to lay out the roadmap of your project, show the current status, and document software better, together.",
90
+ # narrow: true,
91
+ # large: true,
92
+ # spacious: true,
93
+ # ) %>
94
+ #
95
+ # @param title [String] Text that appears in a larger bold font.
96
+ # @param title_tag [Symbol] HTML tag to use for title.
97
+ # @param icon [Symbol] Octicon icon to use at top of component.
98
+ # @param icon_size [Symbol] <%= one_of(Primer::OcticonComponent::SIZE_MAPPINGS, sort: false) %>
99
+ # @param image_src [String] Image to display.
100
+ # @param image_alt [String] Alt text for image.
101
+ # @param description [String] Text that appears below the title. Typically a whole sentence.
102
+ # @param button_text [String] The text of the button.
103
+ # @param button_url [String] The URL where the user will be taken after clicking the button.
104
+ # @param button_classes [String] Classes to apply to action button
105
+ # @param link_text [String] The text of the link.
106
+ # @param link_url [String] The URL where the user will be taken after clicking the link.
107
+ # @param narrow [Boolean] Adds a maximum width.
108
+ # @param large [Boolean] Increases the font size.
109
+ # @param spacious [Boolean] Adds extra padding.
110
+ # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
111
+ def initialize(
112
+ title: "",
113
+ title_tag: :h3,
114
+ icon: "",
115
+ icon_size: :medium,
116
+ image_src: "",
117
+ image_alt: " ",
118
+ description: "",
119
+ button_text: "",
120
+ button_url: "",
121
+ button_classes: "btn-primary my-3",
122
+ link_text: "",
123
+ link_url: "",
124
+
125
+ # variations
126
+ narrow: false,
127
+ large: false,
128
+ spacious: false,
129
+
130
+ **system_arguments
131
+ )
132
+ @system_arguments = system_arguments
133
+ @system_arguments[:tag] = :div
134
+ @system_arguments[:classes] = class_names(
135
+ @system_arguments[:classes],
136
+ "blankslate",
137
+ "blankslate-narrow": narrow,
138
+ "blankslate-large": large,
139
+ "blankslate-spacious": spacious
140
+ )
141
+
142
+ @title_tag = title_tag
143
+ @icon = icon
144
+ @icon_size = icon_size
145
+ @image_src = image_src
146
+ @image_alt = image_alt
147
+ @title = title
148
+ @description = description
149
+ @button_text = button_text
150
+ @button_url = button_url
151
+ @button_classes = button_classes
152
+ @link_text = link_text
153
+ @link_url = link_url
154
+ end
7
155
  end
8
156
  end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Primer
4
+ # `Box` is a basic wrapper component for most layout related needs.
5
+ class Box < Primer::Component
6
+ status :stable
7
+
8
+ # @example Default
9
+ # <%= render(Primer::Box.new) { "Your content here" } %>
10
+ #
11
+ # @example Color and padding
12
+ # <%= render(Primer::Box.new(bg: :subtle, p: 3)) { "Hello world" } %>
13
+ #
14
+ # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
15
+ def initialize(**system_arguments)
16
+ @system_arguments = deny_tag_argument(**system_arguments)
17
+
18
+ @system_arguments[:tag] = :div
19
+ end
20
+
21
+ def call
22
+ render(Primer::BaseComponent.new(**@system_arguments)) { content }
23
+ end
24
+ end
25
+ end
@@ -1,25 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Primer
4
- # `Box` is a basic wrapper component for most layout related needs.
5
- class BoxComponent < Primer::Component
6
- status :stable
7
-
8
- # @example Default
9
- # <%= render(Primer::BoxComponent.new) { "Your content here" } %>
10
- #
11
- # @example Color and padding
12
- # <%= render(Primer::BoxComponent.new(bg: :subtle, p: 3)) { "Hello world" } %>
13
- #
14
- # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
15
- def initialize(**system_arguments)
16
- @system_arguments = deny_tag_argument(**system_arguments)
17
-
18
- @system_arguments[:tag] = :div
19
- end
20
-
21
- def call
22
- render(Primer::BaseComponent.new(**@system_arguments)) { content }
23
- end
4
+ class BoxComponent < Primer::Box
5
+ status :deprecated
24
6
  end
25
7
  end
@@ -1,55 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Primer
4
- # Use `ButtonGroup` to render a series of buttons.
5
- class ButtonGroup < Primer::Component
6
- status :beta
7
-
8
- # Required list of buttons to be rendered.
9
- #
10
- # @param kwargs [Hash] The same arguments as <%= link_to_component(Primer::ButtonComponent) %> except for `size` and `group_item`.
11
- renders_many :buttons, lambda { |**kwargs|
12
- kwargs[:group_item] = true
13
- kwargs[:size] = @size
14
-
15
- Primer::ButtonComponent.new(**kwargs)
16
- }
17
-
18
- # @example Default
19
- #
20
- # <%= render(Primer::ButtonGroup.new) do |component| %>
21
- # <% component.button { "Default" } %>
22
- # <% component.button(scheme: :primary) { "Primary" } %>
23
- # <% component.button(scheme: :danger) { "Danger" } %>
24
- # <% component.button(scheme: :outline) { "Outline" } %>
25
- # <% component.button(classes: "custom-class") { "Custom class" } %>
26
- # <% end %>
27
- #
28
- # @example Sizes
29
- #
30
- # <%= render(Primer::ButtonGroup.new(size: :small)) do |component| %>
31
- # <% component.button { "Default" } %>
32
- # <% component.button(scheme: :primary) { "Primary" } %>
33
- # <% component.button(scheme: :danger) { "Danger" } %>
34
- # <% component.button(scheme: :outline) { "Outline" } %>
35
- # <% end %>
36
- #
37
- # @param variant [Symbol] DEPRECATED. <%= one_of(Primer::ButtonComponent::SIZE_OPTIONS) %>
38
- # @param size [Symbol] <%= one_of(Primer::ButtonComponent::SIZE_OPTIONS) %>
39
- # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
40
- def initialize(variant: nil, size: Primer::ButtonComponent::DEFAULT_SIZE, **system_arguments)
41
- @size = variant || size
42
- @system_arguments = deny_tag_argument(**system_arguments)
43
- @system_arguments[:tag] = :div
44
-
45
- @system_arguments[:classes] = class_names(
46
- "BtnGroup",
47
- system_arguments[:classes]
48
- )
49
- end
50
-
51
- def render?
52
- buttons.any?
53
- end
4
+ class ButtonGroup < Primer::Beta::ButtonGroup
5
+ status :deprecated
54
6
  end
55
7
  end
@@ -7,7 +7,7 @@ module Primer
7
7
  # Boxes](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flexible_Box_Layout/Basic_Concepts_of_Flexbox).
8
8
  #
9
9
  # @deprecated
10
- # Use <%= link_to_component(Primer::BoxComponent) %> instead.
10
+ # Use <%= link_to_component(Primer::Box) %> instead.
11
11
  #
12
12
  # **Before**:
13
13
  #
@@ -22,11 +22,11 @@ module Primer
22
22
  # **After**:
23
23
  #
24
24
  # ```erb
25
- # <%%= render Primer::BoxComponent.new(display: :flex, justify_content: :center) %>
26
- # <%%= render Primer::BoxComponent.new(display: :inline_flex) %>
27
- # <%%= render Primer::BoxComponent.new(display: :flex, flex_wrap: :wrap) %>
28
- # <%%= render Primer::BoxComponent.new(display: :flex, align_items: :start) %>
29
- # <%%= render Primer::BoxComponent.new(display: :flex, direction: :column) %>
25
+ # <%%= render Primer::Box.new(display: :flex, justify_content: :center) %>
26
+ # <%%= render Primer::Box.new(display: :inline_flex) %>
27
+ # <%%= render Primer::Box.new(display: :flex, flex_wrap: :wrap) %>
28
+ # <%%= render Primer::Box.new(display: :flex, align_items: :start) %>
29
+ # <%%= render Primer::Box.new(display: :flex, direction: :column) %>
30
30
  # ```
31
31
  class FlexComponent < Primer::Component
32
32
  status :deprecated
@@ -62,30 +62,30 @@ module Primer
62
62
 
63
63
  # @example Default
64
64
  # <%= render(Primer::FlexComponent.new(bg: :subtle)) do %>
65
- # <%= render(Primer::BoxComponent.new(p: 5, bg: :subtle, classes: "border")) { "Item 1" } %>
66
- # <%= render(Primer::BoxComponent.new(p: 5, bg: :subtle, classes: "border")) { "Item 2" } %>
67
- # <%= render(Primer::BoxComponent.new(p: 5, bg: :subtle, classes: "border")) { "Item 3" } %>
65
+ # <%= render(Primer::Box.new(p: 5, bg: :subtle, classes: "border")) { "Item 1" } %>
66
+ # <%= render(Primer::Box.new(p: 5, bg: :subtle, classes: "border")) { "Item 2" } %>
67
+ # <%= render(Primer::Box.new(p: 5, bg: :subtle, classes: "border")) { "Item 3" } %>
68
68
  # <% end %>
69
69
  #
70
70
  # @example Justify center
71
71
  # <%= render(Primer::FlexComponent.new(justify_content: :center, bg: :subtle)) do %>
72
- # <%= render(Primer::BoxComponent.new(p: 5, bg: :subtle, classes: "border")) { "Item 1" } %>
73
- # <%= render(Primer::BoxComponent.new(p: 5, bg: :subtle, classes: "border")) { "Item 2" } %>
74
- # <%= render(Primer::BoxComponent.new(p: 5, bg: :subtle, classes: "border")) { "Item 3" } %>
72
+ # <%= render(Primer::Box.new(p: 5, bg: :subtle, classes: "border")) { "Item 1" } %>
73
+ # <%= render(Primer::Box.new(p: 5, bg: :subtle, classes: "border")) { "Item 2" } %>
74
+ # <%= render(Primer::Box.new(p: 5, bg: :subtle, classes: "border")) { "Item 3" } %>
75
75
  # <% end %>
76
76
  #
77
77
  # @example Align end
78
78
  # <%= render(Primer::FlexComponent.new(align_items: :end, bg: :subtle)) do %>
79
- # <%= render(Primer::BoxComponent.new(p: 5, bg: :subtle, classes: "border")) { "Item 1" } %>
80
- # <%= render(Primer::BoxComponent.new(p: 5, bg: :subtle, classes: "border")) { "Item 2" } %>
81
- # <%= render(Primer::BoxComponent.new(p: 5, bg: :subtle, classes: "border")) { "Item 3" } %>
79
+ # <%= render(Primer::Box.new(p: 5, bg: :subtle, classes: "border")) { "Item 1" } %>
80
+ # <%= render(Primer::Box.new(p: 5, bg: :subtle, classes: "border")) { "Item 2" } %>
81
+ # <%= render(Primer::Box.new(p: 5, bg: :subtle, classes: "border")) { "Item 3" } %>
82
82
  # <% end %>
83
83
  #
84
84
  # @example Direction column
85
85
  # <%= render(Primer::FlexComponent.new(direction: :column, bg: :subtle)) do %>
86
- # <%= render(Primer::BoxComponent.new(p: 5, bg: :subtle, classes: "border")) { "Item 1" } %>
87
- # <%= render(Primer::BoxComponent.new(p: 5, bg: :subtle, classes: "border")) { "Item 2" } %>
88
- # <%= render(Primer::BoxComponent.new(p: 5, bg: :subtle, classes: "border")) { "Item 3" } %>
86
+ # <%= render(Primer::Box.new(p: 5, bg: :subtle, classes: "border")) { "Item 1" } %>
87
+ # <%= render(Primer::Box.new(p: 5, bg: :subtle, classes: "border")) { "Item 2" } %>
88
+ # <%= render(Primer::Box.new(p: 5, bg: :subtle, classes: "border")) { "Item 3" } %>
89
89
  # <% end %>
90
90
  #
91
91
  # @param justify_content [Symbol] Use this param to distribute space between and around flex items along the main axis of the container. <%= one_of(Primer::FlexComponent::JUSTIFY_CONTENT_OPTIONS) %>
@@ -102,7 +102,7 @@ module Primer
102
102
  direction: nil,
103
103
  **system_arguments
104
104
  )
105
- deprecated_component_warning(new_class: Primer::BoxComponent, version: "0.0.40")
105
+ deprecated_component_warning(new_class: Primer::Box, version: "0.0.40")
106
106
 
107
107
  @align_items = fetch_or_fallback(ALIGN_ITEMS_OPTIONS, align_items, ALIGN_ITEMS_DEFAULT)
108
108
  @justify_content = fetch_or_fallback(JUSTIFY_CONTENT_OPTIONS, justify_content, JUSTIFY_CONTENT_DEFAULT)
@@ -122,7 +122,7 @@ module Primer
122
122
  end
123
123
 
124
124
  def call
125
- render(Primer::BoxComponent.new(**@system_arguments)) { content }
125
+ render(Primer::Box.new(**@system_arguments)) { content }
126
126
  end
127
127
 
128
128
  private
@@ -5,7 +5,7 @@ module Primer
5
5
  # dimensions to fill available space.
6
6
  #
7
7
  # @deprecated
8
- # Use <%= link_to_component(Primer::BoxComponent) %> instead.
8
+ # Use <%= link_to_component(Primer::Box) %> instead.
9
9
  #
10
10
  # **Before**:
11
11
  #
@@ -16,7 +16,7 @@ module Primer
16
16
  # **After**:
17
17
  #
18
18
  # ```erb
19
- # <%%= render Primer::BoxComponent.new(flex: :auto) %>
19
+ # <%%= render Primer::Box.new(flex: :auto) %>
20
20
  # ```
21
21
  class FlexItemComponent < Primer::Component
22
22
  status :deprecated
@@ -38,7 +38,7 @@ module Primer
38
38
  # @param flex_auto [Boolean] Fills available space and auto-sizes based on the content. Defaults to <%= Primer::FlexItemComponent::FLEX_AUTO_DEFAULT %>
39
39
  # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
40
40
  def initialize(flex_auto: FLEX_AUTO_DEFAULT, **system_arguments)
41
- deprecated_component_warning(new_class: Primer::BoxComponent, version: "0.0.40")
41
+ deprecated_component_warning(new_class: Primer::Box, version: "0.0.40")
42
42
 
43
43
  @system_arguments = system_arguments
44
44
  @system_arguments[:classes] =
@@ -49,7 +49,7 @@ module Primer
49
49
  end
50
50
 
51
51
  def call
52
- render(Primer::BoxComponent.new(**@system_arguments)) { content }
52
+ render(Primer::Box.new(**@system_arguments)) { content }
53
53
  end
54
54
  end
55
55
  end
@@ -1,6 +1,12 @@
1
- <%= render Primer::BaseComponent.new(tag: :div, position: :relative, display: :inline_block) do %>
1
+ <% if render_tooltip? %>
2
+ <%= render Primer::BaseComponent.new(tag: :div, position: :relative, display: :inline_block) do %>
3
+ <%= render Primer::Beta::BaseButton.new(**@system_arguments) do -%>
4
+ <%= render Primer::OcticonComponent.new(icon: @icon) %>
5
+ <% end -%>
6
+ <%= render Primer::Alpha::Tooltip.new(**@tooltip_arguments) %>
7
+ <% end %>
8
+ <% else %>
2
9
  <%= render Primer::Beta::BaseButton.new(**@system_arguments) do -%>
3
10
  <%= render Primer::OcticonComponent.new(icon: @icon) %>
4
11
  <% end -%>
5
- <%= render Primer::Alpha::Tooltip.new(**@tooltip_arguments) %>
6
12
  <% end %>
@@ -97,5 +97,11 @@ module Primer
97
97
  @tooltip_arguments[:type] = :label
98
98
  end
99
99
  end
100
+
101
+ private
102
+
103
+ def render_tooltip?
104
+ @system_arguments[:tag] != :summary
105
+ end
100
106
  end
101
107
  end
@@ -32,11 +32,18 @@ module Primer
32
32
  DEPRECATED_SCHEME_OPTIONS = [:info, :warning, :orange, :purple].freeze
33
33
  SCHEME_OPTIONS = (SCHEME_MAPPINGS.keys - DEPRECATED_SCHEME_OPTIONS).freeze
34
34
 
35
- VARIANT_MAPPINGS = {
36
- large: "Label--large",
37
- inline: "Label--inline"
35
+ DEFAULT_SIZE = :medium
36
+ SIZE_MAPPINGS = {
37
+ DEFAULT_SIZE => nil,
38
+ :large => "Label--large"
38
39
  }.freeze
39
- VARIANT_OPTIONS = VARIANT_MAPPINGS.keys << nil
40
+ SIZE_OPTIONS = SIZE_MAPPINGS.keys
41
+
42
+ DEFAULT_VARIANT = :none
43
+ VARIANT_OPTIONS = [DEFAULT_VARIANT].freeze
44
+ DEPRECATED_VARIANT_OPTIONS = [:large, :inline].freeze
45
+
46
+ INLINE_CLASS = "Label--inline"
40
47
 
41
48
  # @example Schemes
42
49
  # <%= render(Primer::LabelComponent.new) { "Default" } %>
@@ -50,22 +57,37 @@ module Primer
50
57
  # <%= render(Primer::LabelComponent.new(scheme: :done)) { "Done" } %>
51
58
  # <%= render(Primer::LabelComponent.new(scheme: :sponsors)) { "Sponsors" } %>
52
59
  #
53
- # @example Variants
60
+ # @example Sizes
61
+ # <%= render(Primer::LabelComponent.new) { "Medium" } %>
62
+ # <%= render(Primer::LabelComponent.new(size: :large)) { "Large" } %>
63
+ #
64
+ # @example Inline
54
65
  # <%= render(Primer::LabelComponent.new) { "Default" } %>
55
- # <%= render(Primer::LabelComponent.new(variant: :large)) { "Large" } %>
66
+ # <%= render(Primer::LabelComponent.new(inline: true)) { "Inline" } %>
56
67
  #
57
68
  # @param tag [Symbol] <%= one_of(Primer::LabelComponent::TAG_OPTIONS) %>
58
69
  # @param scheme [Symbol] <%= one_of(Primer::LabelComponent::SCHEME_MAPPINGS.keys) %>
59
- # @param variant [Symbol] <%= one_of(Primer::LabelComponent::VARIANT_OPTIONS) %>
70
+ # @param size [Symbol] <%= one_of(Primer::LabelComponent::SIZE_OPTIONS) %>
71
+ # @param inline [Boolean] Whether or not to render this label inline.
72
+ # @param variant [Symbol] <%= one_of(Primer::LabelComponent::VARIANT_OPTIONS + Primer::LabelComponent::DEPRECATED_VARIANT_OPTIONS) %>
60
73
  # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
61
- def initialize(tag: DEFAULT_TAG, scheme: DEFAULT_SCHEME, variant: nil, **system_arguments)
74
+
75
+ def initialize(tag: DEFAULT_TAG, scheme: DEFAULT_SCHEME, size: DEFAULT_SIZE, inline: false, variant: DEFAULT_VARIANT, **system_arguments)
62
76
  @system_arguments = system_arguments
77
+
78
+ @variant = fetch_or_fallback(VARIANT_OPTIONS, variant, nil, deprecated_values: DEPRECATED_VARIANT_OPTIONS)
79
+ @scheme = fetch_or_fallback(SCHEME_OPTIONS, scheme, DEFAULT_SCHEME, deprecated_values: DEPRECATED_SCHEME_OPTIONS)
80
+ @size = fetch_or_fallback(SIZE_OPTIONS, size, DEFAULT_SIZE)
81
+ @size = :large if @variant == :large
82
+ @inline = inline || @variant == :inline
83
+
63
84
  @system_arguments[:tag] = fetch_or_fallback(TAG_OPTIONS, tag, DEFAULT_TAG)
64
85
  @system_arguments[:classes] = class_names(
65
86
  "Label",
66
87
  system_arguments[:classes],
67
- SCHEME_MAPPINGS[fetch_or_fallback(SCHEME_OPTIONS, scheme, deprecated_values: DEPRECATED_SCHEME_OPTIONS)],
68
- VARIANT_MAPPINGS[fetch_or_fallback(VARIANT_OPTIONS, variant)]
88
+ SCHEME_MAPPINGS[@scheme],
89
+ SIZE_MAPPINGS[@size],
90
+ @inline ? INLINE_CLASS : nil
69
91
  )
70
92
  end
71
93