primer_view_components 0.0.63 → 0.0.67
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +718 -641
- data/app/components/primer/auto_complete/auto_complete.d.ts +1 -0
- data/app/components/primer/auto_complete/auto_complete.js +1 -0
- data/app/components/primer/beta/blankslate.rb +5 -3
- data/app/components/primer/button_component.html.erb +1 -1
- data/app/components/primer/button_component.rb +12 -10
- data/app/components/primer/button_group.rb +8 -7
- data/app/components/primer/component.rb +9 -4
- data/app/components/primer/content.rb +12 -0
- data/app/components/primer/dropdown.rb +3 -3
- data/app/components/primer/flash_component.rb +1 -1
- data/app/components/primer/image.rb +2 -2
- data/app/components/primer/label_component.rb +23 -13
- data/app/components/primer/octicon_component.rb +4 -2
- data/app/components/primer/popover_component.rb +10 -11
- data/app/components/primer/spinner_component.html.erb +2 -13
- data/app/components/primer/spinner_component.rb +6 -5
- data/app/lib/primer/octicon/cache.rb +4 -10
- data/lib/primer/classify/utilities.rb +0 -1
- data/lib/primer/classify/utilities.yml +98 -0
- data/lib/primer/classify.rb +1 -1
- data/lib/primer/view_components/engine.rb +1 -0
- data/lib/primer/view_components/linters/argument_mappers/button.rb +4 -4
- data/lib/primer/view_components/version.rb +1 -1
- data/lib/rubocop/cop/primer/deprecated_arguments.rb +1 -1
- data/lib/rubocop/cop/primer/deprecated_button_arguments.rb +51 -0
- data/lib/rubocop/cop/primer/deprecated_label_schemes.rb +68 -0
- data/lib/tasks/custom_utilities.yml +98 -0
- data/lib/tasks/docs.rake +9 -4
- data/static/arguments.yml +12 -3
- data/static/audited_at.json +1 -0
- data/static/classes.yml +5 -4
- data/static/constants.json +22 -8
- data/static/statuses.json +1 -0
- metadata +10 -5
@@ -0,0 +1 @@
|
|
1
|
+
import '@github/auto-complete-element';
|
@@ -0,0 +1 @@
|
|
1
|
+
import '@github/auto-complete-element';
|
@@ -5,9 +5,11 @@ module Primer
|
|
5
5
|
# 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.
|
6
6
|
#
|
7
7
|
# @accessibility
|
8
|
-
# -
|
9
|
-
# -
|
8
|
+
# - The blankslate uses a semantic heading that must be set at the appropriate level based on the hierarchy of the page.
|
9
|
+
# - All blankslate visuals have been programmed as decorative images, using `aria-hidden=”true”` and `img alt=””`, which will hide the visual from screen reader users.
|
10
|
+
# - The blankslate supports a primary and secondary action. Both actions have been built as semantic links with primary and secondary styling.
|
10
11
|
# - `secondary_action` text should be meaningful out of context and clearly describe the destination. Avoid using vague text like, "Learn more" or "Click here".
|
12
|
+
# - The blankslate can leverage the spinner component, which will communicate to screen reader users that the content is still loading.
|
11
13
|
class Blankslate < Primer::Component
|
12
14
|
status :beta
|
13
15
|
|
@@ -81,7 +83,7 @@ module Primer
|
|
81
83
|
system_arguments[:tag] = :a
|
82
84
|
system_arguments[:href] = href
|
83
85
|
system_arguments[:mt] = 5
|
84
|
-
system_arguments[:
|
86
|
+
system_arguments[:size] = :medium
|
85
87
|
system_arguments[:scheme] ||= :primary
|
86
88
|
|
87
89
|
Primer::ButtonComponent.new(**system_arguments)
|
@@ -1,3 +1,3 @@
|
|
1
1
|
<%= render Primer::BaseButton.new(**@system_arguments) do -%>
|
2
|
-
<%= leading_visual %><%= trimmed_content %><%= trailing_visual %><%= primer_octicon("triangle-down", mr: -1) if @dropdown %>
|
2
|
+
<%= leading_visual %><%= trimmed_content %><%= trailing_visual %><%= primer_octicon("triangle-down", ml: 2, mr: -1) if @dropdown %>
|
3
3
|
<% end -%>
|
@@ -17,12 +17,12 @@ module Primer
|
|
17
17
|
}.freeze
|
18
18
|
SCHEME_OPTIONS = SCHEME_MAPPINGS.keys
|
19
19
|
|
20
|
-
|
21
|
-
|
20
|
+
DEFAULT_SIZE = :medium
|
21
|
+
SIZE_MAPPINGS = {
|
22
22
|
:small => "btn-sm",
|
23
|
-
|
23
|
+
DEFAULT_SIZE => ""
|
24
24
|
}.freeze
|
25
|
-
|
25
|
+
SIZE_OPTIONS = SIZE_MAPPINGS.keys
|
26
26
|
|
27
27
|
# Leading visuals appear to the left of the button text.
|
28
28
|
#
|
@@ -64,9 +64,9 @@ module Primer
|
|
64
64
|
# <%= render(Primer::ButtonComponent.new(scheme: :invisible)) { "Invisible" } %>
|
65
65
|
# <%= render(Primer::ButtonComponent.new(scheme: :link)) { "Link" } %>
|
66
66
|
#
|
67
|
-
# @example
|
68
|
-
# <%= render(Primer::ButtonComponent.new(
|
69
|
-
# <%= render(Primer::ButtonComponent.new(
|
67
|
+
# @example Sizes
|
68
|
+
# <%= render(Primer::ButtonComponent.new(size: :small)) { "Small" } %>
|
69
|
+
# <%= render(Primer::ButtonComponent.new(size: :medium)) { "Medium" } %>
|
70
70
|
#
|
71
71
|
# @example Block
|
72
72
|
# <%= render(Primer::ButtonComponent.new(block: :true)) { "Block" } %>
|
@@ -97,7 +97,8 @@ module Primer
|
|
97
97
|
# <% end %>
|
98
98
|
#
|
99
99
|
# @param scheme [Symbol] <%= one_of(Primer::ButtonComponent::SCHEME_OPTIONS) %>
|
100
|
-
# @param variant [Symbol] <%= one_of(Primer::ButtonComponent::
|
100
|
+
# @param variant [Symbol] DEPRECATED. <%= one_of(Primer::ButtonComponent::SIZE_OPTIONS) %>
|
101
|
+
# @param size [Symbol] <%= one_of(Primer::ButtonComponent::SIZE_OPTIONS) %>
|
101
102
|
# @param tag [Symbol] (Primer::BaseButton::DEFAULT_TAG) <%= one_of(Primer::BaseButton::TAG_OPTIONS) %>
|
102
103
|
# @param type [Symbol] (Primer::BaseButton::DEFAULT_TYPE) <%= one_of(Primer::BaseButton::TYPE_OPTIONS) %>
|
103
104
|
# @param group_item [Boolean] Whether button is part of a ButtonGroup.
|
@@ -106,7 +107,8 @@ module Primer
|
|
106
107
|
# @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
|
107
108
|
def initialize(
|
108
109
|
scheme: DEFAULT_SCHEME,
|
109
|
-
variant:
|
110
|
+
variant: nil,
|
111
|
+
size: DEFAULT_SIZE,
|
110
112
|
group_item: false,
|
111
113
|
block: false,
|
112
114
|
dropdown: false,
|
@@ -119,7 +121,7 @@ module Primer
|
|
119
121
|
@system_arguments[:classes] = class_names(
|
120
122
|
system_arguments[:classes],
|
121
123
|
SCHEME_MAPPINGS[fetch_or_fallback(SCHEME_OPTIONS, scheme, DEFAULT_SCHEME)],
|
122
|
-
|
124
|
+
SIZE_MAPPINGS[fetch_or_fallback(SIZE_OPTIONS, variant || size, DEFAULT_SIZE)],
|
123
125
|
"btn" => !link?,
|
124
126
|
"btn-block" => block,
|
125
127
|
"BtnGroup-item" => group_item
|
@@ -7,10 +7,10 @@ module Primer
|
|
7
7
|
|
8
8
|
# Required list of buttons to be rendered.
|
9
9
|
#
|
10
|
-
# @param kwargs [Hash] The same arguments as <%= link_to_component(Primer::ButtonComponent) %> except for `
|
10
|
+
# @param kwargs [Hash] The same arguments as <%= link_to_component(Primer::ButtonComponent) %> except for `size` and `group_item`.
|
11
11
|
renders_many :buttons, lambda { |**kwargs|
|
12
12
|
kwargs[:group_item] = true
|
13
|
-
kwargs[:
|
13
|
+
kwargs[:size] = @size
|
14
14
|
|
15
15
|
Primer::ButtonComponent.new(**kwargs)
|
16
16
|
}
|
@@ -25,19 +25,20 @@ module Primer
|
|
25
25
|
# <% component.button(classes: "custom-class") { "Custom class" } %>
|
26
26
|
# <% end %>
|
27
27
|
#
|
28
|
-
# @example
|
28
|
+
# @example Sizes
|
29
29
|
#
|
30
|
-
# <%= render(Primer::ButtonGroup.new(
|
30
|
+
# <%= render(Primer::ButtonGroup.new(size: :small)) do |component| %>
|
31
31
|
# <% component.button { "Default" } %>
|
32
32
|
# <% component.button(scheme: :primary) { "Primary" } %>
|
33
33
|
# <% component.button(scheme: :danger) { "Danger" } %>
|
34
34
|
# <% component.button(scheme: :outline) { "Outline" } %>
|
35
35
|
# <% end %>
|
36
36
|
#
|
37
|
-
# @param variant [Symbol] <%= one_of(Primer::ButtonComponent::
|
37
|
+
# @param variant [Symbol] DEPRECATED. <%= one_of(Primer::ButtonComponent::SIZE_OPTIONS) %>
|
38
|
+
# @param size [Symbol] <%= one_of(Primer::ButtonComponent::SIZE_OPTIONS) %>
|
38
39
|
# @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
|
39
|
-
def initialize(variant: Primer::ButtonComponent::
|
40
|
-
@
|
40
|
+
def initialize(variant: nil, size: Primer::ButtonComponent::DEFAULT_SIZE, **system_arguments)
|
41
|
+
@size = variant || size
|
41
42
|
@system_arguments = deny_tag_argument(**system_arguments)
|
42
43
|
@system_arguments[:tag] = :div
|
43
44
|
|
@@ -23,6 +23,10 @@ module Primer
|
|
23
23
|
Rails.application.config.primer_view_components.raise_on_invalid_options
|
24
24
|
end
|
25
25
|
|
26
|
+
def raise_on_invalid_aria?
|
27
|
+
Rails.application.config.primer_view_components.raise_on_invalid_aria
|
28
|
+
end
|
29
|
+
|
26
30
|
def deprecated_component_warning(new_class: nil, version: nil)
|
27
31
|
return if Rails.env.production? || silence_deprecations?
|
28
32
|
|
@@ -101,10 +105,7 @@ module Primer
|
|
101
105
|
return unless aria(:label, arguments)
|
102
106
|
return unless INVALID_ARIA_LABEL_TAGS.include?(tag)
|
103
107
|
|
104
|
-
raise ArgumentError, "Don't use `aria-label` on `#{tag}` elements. See https://www.tpgi.com/short-note-on-aria-label-aria-labelledby-and-aria-describedby/" if
|
105
|
-
|
106
|
-
arguments.except!(:"aria-label")
|
107
|
-
arguments[:aria] = arguments[:aria].except!(:label) if arguments[:aria]
|
108
|
+
raise ArgumentError, "Don't use `aria-label` on `#{tag}` elements. See https://www.tpgi.com/short-note-on-aria-label-aria-labelledby-and-aria-describedby/" if should_raise_aria_error?
|
108
109
|
end
|
109
110
|
|
110
111
|
def deny_tag_argument(**arguments)
|
@@ -114,5 +115,9 @@ module Primer
|
|
114
115
|
def should_raise_error?
|
115
116
|
raise_on_invalid_options? && !ENV["PRIMER_WARNINGS_DISABLED"]
|
116
117
|
end
|
118
|
+
|
119
|
+
def should_raise_aria_error?
|
120
|
+
raise_on_invalid_aria? && !ENV["PRIMER_WARNINGS_DISABLED"]
|
121
|
+
end
|
117
122
|
end
|
118
123
|
end
|
@@ -6,12 +6,12 @@ module Primer
|
|
6
6
|
class Dropdown < Primer::Component
|
7
7
|
# Required trigger for the dropdown. Has the same arguments as <%= link_to_component(Primer::ButtonComponent) %>,
|
8
8
|
# but it is locked as a `summary` tag.
|
9
|
-
renders_one :button, lambda { |**system_arguments
|
9
|
+
renders_one :button, lambda { |**system_arguments|
|
10
10
|
@button_arguments = system_arguments
|
11
11
|
@button_arguments[:button] = true
|
12
12
|
@button_arguments[:dropdown] = @with_caret
|
13
13
|
|
14
|
-
|
14
|
+
Primer::Content.new
|
15
15
|
}
|
16
16
|
|
17
17
|
# Required context menu for the dropdown.
|
@@ -88,7 +88,7 @@ module Primer
|
|
88
88
|
#
|
89
89
|
# @example Customizing the button
|
90
90
|
# <%= render(Primer::Dropdown.new) do |c| %>
|
91
|
-
# <% c.button(scheme: :primary,
|
91
|
+
# <% c.button(scheme: :primary, size: :small) do %>
|
92
92
|
# Dropdown
|
93
93
|
# <% end %>
|
94
94
|
#
|
@@ -42,7 +42,7 @@ module Primer
|
|
42
42
|
# <%= render(Primer::FlashComponent.new) do |component| %>
|
43
43
|
# This is a flash message with actions!
|
44
44
|
# <% component.action do %>
|
45
|
-
# <%= render(Primer::ButtonComponent.new(
|
45
|
+
# <%= render(Primer::ButtonComponent.new(size: :small)) { "Take action" } %>
|
46
46
|
# <% end %>
|
47
47
|
# <% end %>
|
48
48
|
#
|
@@ -29,8 +29,8 @@ module Primer
|
|
29
29
|
def initialize(src:, alt:, lazy: false, **system_arguments)
|
30
30
|
@system_arguments = deny_tag_argument(**system_arguments)
|
31
31
|
|
32
|
+
@src = src
|
32
33
|
@system_arguments[:tag] = :img
|
33
|
-
@system_arguments[:src] = src
|
34
34
|
@system_arguments[:alt] = alt
|
35
35
|
|
36
36
|
return unless lazy
|
@@ -40,7 +40,7 @@ module Primer
|
|
40
40
|
end
|
41
41
|
|
42
42
|
def call
|
43
|
-
render(Primer::BaseComponent.new(**@system_arguments))
|
43
|
+
render(Primer::BaseComponent.new(src: image_path(@src), **@system_arguments))
|
44
44
|
end
|
45
45
|
end
|
46
46
|
end
|
@@ -11,19 +11,26 @@ module Primer
|
|
11
11
|
DEFAULT_TAG = :span
|
12
12
|
TAG_OPTIONS = [DEFAULT_TAG, :summary, :a, :div].freeze
|
13
13
|
|
14
|
+
DEFAULT_SCHEME = :default
|
14
15
|
SCHEME_MAPPINGS = {
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
16
|
+
DEFAULT_SCHEME => "",
|
17
|
+
:primary => "Label--primary",
|
18
|
+
:secondary => "Label--secondary",
|
19
|
+
:accent => "Label--accent",
|
20
|
+
:success => "Label--success",
|
21
|
+
:attention => "Label--attention",
|
22
|
+
:danger => "Label--danger",
|
23
|
+
:severe => "Label--severe",
|
24
|
+
:done => "Label--done",
|
25
|
+
:sponsors => "Label--sponsors",
|
21
26
|
# deprecated
|
22
|
-
|
23
|
-
|
27
|
+
:info => "Label--info",
|
28
|
+
:warning => "Label--warning",
|
29
|
+
:orange => "Label--orange",
|
30
|
+
:purple => "Label--purple"
|
24
31
|
}.freeze
|
25
|
-
DEPRECATED_SCHEME_OPTIONS = [:orange, :purple].freeze
|
26
|
-
SCHEME_OPTIONS = (
|
32
|
+
DEPRECATED_SCHEME_OPTIONS = [:info, :warning, :orange, :purple].freeze
|
33
|
+
SCHEME_OPTIONS = (SCHEME_MAPPINGS.keys - DEPRECATED_SCHEME_OPTIONS).freeze
|
27
34
|
|
28
35
|
VARIANT_MAPPINGS = {
|
29
36
|
large: "Label--large",
|
@@ -35,10 +42,13 @@ module Primer
|
|
35
42
|
# <%= render(Primer::LabelComponent.new) { "Default" } %>
|
36
43
|
# <%= render(Primer::LabelComponent.new(scheme: :primary)) { "Primary" } %>
|
37
44
|
# <%= render(Primer::LabelComponent.new(scheme: :secondary)) { "Secondary" } %>
|
38
|
-
# <%= render(Primer::LabelComponent.new(scheme: :
|
45
|
+
# <%= render(Primer::LabelComponent.new(scheme: :accent)) { "Accent" } %>
|
39
46
|
# <%= render(Primer::LabelComponent.new(scheme: :success)) { "Success" } %>
|
40
|
-
# <%= render(Primer::LabelComponent.new(scheme: :
|
47
|
+
# <%= render(Primer::LabelComponent.new(scheme: :attention)) { "Attention" } %>
|
41
48
|
# <%= render(Primer::LabelComponent.new(scheme: :danger)) { "Danger" } %>
|
49
|
+
# <%= render(Primer::LabelComponent.new(scheme: :severe)) { "Severe" } %>
|
50
|
+
# <%= render(Primer::LabelComponent.new(scheme: :done)) { "Done" } %>
|
51
|
+
# <%= render(Primer::LabelComponent.new(scheme: :sponsors)) { "Sponsors" } %>
|
42
52
|
#
|
43
53
|
# @example Variants
|
44
54
|
# <%= render(Primer::LabelComponent.new) { "Default" } %>
|
@@ -48,7 +58,7 @@ module Primer
|
|
48
58
|
# @param scheme [Symbol] <%= one_of(Primer::LabelComponent::SCHEME_MAPPINGS.keys) %>
|
49
59
|
# @param variant [Symbol] <%= one_of(Primer::LabelComponent::VARIANT_OPTIONS) %>
|
50
60
|
# @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
|
51
|
-
def initialize(tag: DEFAULT_TAG, scheme:
|
61
|
+
def initialize(tag: DEFAULT_TAG, scheme: DEFAULT_SCHEME, variant: nil, **system_arguments)
|
52
62
|
@system_arguments = system_arguments
|
53
63
|
@system_arguments[:tag] = fetch_or_fallback(TAG_OPTIONS, tag, DEFAULT_TAG)
|
54
64
|
@system_arguments[:classes] = class_names(
|
@@ -65,8 +65,10 @@ module Primer
|
|
65
65
|
# Filter out classify options to prevent them from becoming invalid html attributes.
|
66
66
|
# Note height and width are both classify options and valid html attributes.
|
67
67
|
octicon_options = {
|
68
|
-
height: SIZE_MAPPINGS[fetch_or_fallback(SIZE_OPTIONS, size, SIZE_DEFAULT)]
|
69
|
-
|
68
|
+
height: @system_arguments[:height] || SIZE_MAPPINGS[fetch_or_fallback(SIZE_OPTIONS, size, SIZE_DEFAULT)],
|
69
|
+
width: @system_arguments[:width]
|
70
|
+
}
|
71
|
+
octicon_options.compact!
|
70
72
|
|
71
73
|
@icon = Octicons::Octicon.new(icon_key, octicon_options)
|
72
74
|
Primer::Octicon::Cache.set(cache_key, @icon)
|
@@ -41,22 +41,21 @@ module Primer
|
|
41
41
|
# @param caret [Symbol] <%= one_of(Primer::PopoverComponent::CARET_MAPPINGS.keys) %>
|
42
42
|
# @param large [Boolean] Whether to use the large version of the component.
|
43
43
|
# @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
|
44
|
-
renders_one :body, lambda { |caret: CARET_DEFAULT, large: false, **system_arguments
|
45
|
-
|
46
|
-
|
44
|
+
renders_one :body, lambda { |caret: CARET_DEFAULT, large: false, **system_arguments|
|
45
|
+
@body_arguments = system_arguments
|
46
|
+
@body_arguments[:classes] = class_names(
|
47
|
+
@body_arguments[:classes],
|
47
48
|
"Popover-message Box",
|
48
49
|
CARET_MAPPINGS[fetch_or_fallback(CARET_MAPPINGS.keys, caret, CARET_DEFAULT)],
|
49
50
|
"Popover-message--large" => large
|
50
51
|
)
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
52
|
+
@body_arguments[:p] ||= 4
|
53
|
+
@body_arguments[:mt] ||= 2
|
54
|
+
@body_arguments[:mx] ||= :auto
|
55
|
+
@body_arguments[:text_align] ||= :left
|
56
|
+
@body_arguments[:box_shadow] ||= :large
|
56
57
|
|
57
|
-
|
58
|
-
@body_arguments = system_arguments
|
59
|
-
view_context.capture { block&.call }
|
58
|
+
Primer::Content.new
|
60
59
|
}
|
61
60
|
|
62
61
|
# @example Default
|
@@ -1,15 +1,4 @@
|
|
1
1
|
<%= render Primer::BaseComponent.new(**@system_arguments) do %>
|
2
|
-
<
|
3
|
-
|
4
|
-
tag: :svg,
|
5
|
-
viewBox: '0 0 16 16',
|
6
|
-
fill: :none,
|
7
|
-
animation: :rotate,
|
8
|
-
width: @size,
|
9
|
-
height: @size,
|
10
|
-
vertical_align: :bottom
|
11
|
-
) do %>
|
12
|
-
<circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" />
|
13
|
-
<path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" />
|
14
|
-
<% end %>
|
2
|
+
<circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" />
|
3
|
+
<path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" />
|
15
4
|
<% end %>
|
@@ -31,12 +31,13 @@ module Primer
|
|
31
31
|
# @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
|
32
32
|
def initialize(size: DEFAULT_SIZE, style: DEFAULT_STYLE, **system_arguments)
|
33
33
|
@system_arguments = deny_tag_argument(**system_arguments)
|
34
|
-
@system_arguments[:tag] = :
|
35
|
-
@system_arguments[:role] = :status
|
36
|
-
@system_arguments[:display] = :inline_block
|
34
|
+
@system_arguments[:tag] = :svg
|
37
35
|
@system_arguments[:style] ||= style
|
38
|
-
|
39
|
-
@
|
36
|
+
@system_arguments[:animation] = :rotate
|
37
|
+
@system_arguments[:width] = SIZE_MAPPINGS[fetch_or_fallback(SIZE_OPTIONS, size, DEFAULT_SIZE)]
|
38
|
+
@system_arguments[:height] = SIZE_MAPPINGS[fetch_or_fallback(SIZE_OPTIONS, size, DEFAULT_SIZE)]
|
39
|
+
@system_arguments[:viewBox] = "0 0 16 16"
|
40
|
+
@system_arguments[:fill] = :none
|
40
41
|
end
|
41
42
|
end
|
42
43
|
end
|
@@ -9,9 +9,10 @@ module Primer
|
|
9
9
|
PRELOADED_ICONS = [:alert, :check, :"chevron-down", :paste, :clock, :"dot-fill", :info, :"kebab-horizontal", :link, :lock, :mail, :pencil, :plus, :question, :repo, :search, :"shield-lock", :star, :trash, :x].freeze
|
10
10
|
|
11
11
|
class << self
|
12
|
-
def get_key(
|
13
|
-
|
14
|
-
|
12
|
+
def get_key(symbol:, size:, width: nil, height: nil)
|
13
|
+
attrs = { symbol: symbol, size: size, width: width, height: height }
|
14
|
+
attrs.compact!
|
15
|
+
attrs.hash
|
15
16
|
end
|
16
17
|
|
17
18
|
def read(key)
|
@@ -37,13 +38,6 @@ module Primer
|
|
37
38
|
def preload!
|
38
39
|
PRELOADED_ICONS.each { |icon| Primer::OcticonComponent.new(icon: icon) }
|
39
40
|
end
|
40
|
-
|
41
|
-
private
|
42
|
-
|
43
|
-
def correct_key_args?(symbol:, size:, width: nil, height: nil)
|
44
|
-
# This method does nothing but will raise an ArgumentError if the
|
45
|
-
# wrong args are passed.
|
46
|
-
end
|
47
41
|
end
|
48
42
|
end
|
49
43
|
end
|
@@ -1578,6 +1578,12 @@
|
|
1578
1578
|
- border-x
|
1579
1579
|
true:
|
1580
1580
|
- border
|
1581
|
+
0:
|
1582
|
+
- border-0
|
1583
|
+
false:
|
1584
|
+
- border-0
|
1585
|
+
:dashed:
|
1586
|
+
- border-dashed
|
1581
1587
|
:border_top:
|
1582
1588
|
0:
|
1583
1589
|
- border-top-0
|
@@ -1602,32 +1608,84 @@
|
|
1602
1608
|
:justify_content:
|
1603
1609
|
:flex_start:
|
1604
1610
|
- flex-justify-start
|
1611
|
+
- flex-sm-justify-start
|
1612
|
+
- flex-md-justify-start
|
1613
|
+
- flex-lg-justify-start
|
1614
|
+
- flex-xl-justify-start
|
1605
1615
|
:flex_end:
|
1606
1616
|
- flex-justify-end
|
1617
|
+
- flex-sm-justify-end
|
1618
|
+
- flex-md-justify-end
|
1619
|
+
- flex-lg-justify-end
|
1620
|
+
- flex-xl-justify-end
|
1607
1621
|
:center:
|
1608
1622
|
- flex-justify-center
|
1623
|
+
- flex-sm-justify-center
|
1624
|
+
- flex-md-justify-center
|
1625
|
+
- flex-lg-justify-center
|
1626
|
+
- flex-xl-justify-center
|
1609
1627
|
:space_between:
|
1610
1628
|
- flex-justify-between
|
1629
|
+
- flex-sm-justify-between
|
1630
|
+
- flex-md-justify-between
|
1631
|
+
- flex-lg-justify-between
|
1632
|
+
- flex-xl-justify-between
|
1611
1633
|
:space_around:
|
1612
1634
|
- flex-justify-around
|
1635
|
+
- flex-sm-justify-around
|
1636
|
+
- flex-md-justify-around
|
1637
|
+
- flex-lg-justify-around
|
1638
|
+
- flex-xl-justify-around
|
1613
1639
|
:align_items:
|
1614
1640
|
:flex_start:
|
1615
1641
|
- flex-items-start
|
1642
|
+
- flex-sm-items-start
|
1643
|
+
- flex-md-items-start
|
1644
|
+
- flex-lg-items-start
|
1645
|
+
- flex-xl-items-start
|
1616
1646
|
:flex_end:
|
1617
1647
|
- flex-items-end
|
1648
|
+
- flex-sm-items-end
|
1649
|
+
- flex-md-items-end
|
1650
|
+
- flex-lg-items-end
|
1651
|
+
- flex-xl-items-end
|
1618
1652
|
:center:
|
1619
1653
|
- flex-items-center
|
1654
|
+
- flex-sm-items-center
|
1655
|
+
- flex-md-items-center
|
1656
|
+
- flex-lg-items-center
|
1657
|
+
- flex-xl-items-center
|
1620
1658
|
:baseline:
|
1621
1659
|
- flex-items-baseline
|
1660
|
+
- flex-sm-items-baseline
|
1661
|
+
- flex-md-items-baseline
|
1662
|
+
- flex-lg-items-baseline
|
1663
|
+
- flex-xl-items-baseline
|
1622
1664
|
:stretch:
|
1623
1665
|
- flex-items-stretch
|
1666
|
+
- flex-sm-items-stretch
|
1667
|
+
- flex-md-items-stretch
|
1668
|
+
- flex-lg-items-stretch
|
1669
|
+
- flex-xl-items-stretch
|
1624
1670
|
:flex_wrap:
|
1625
1671
|
:wrap:
|
1626
1672
|
- flex-wrap
|
1673
|
+
- flex-sm-wrap
|
1674
|
+
- flex-md-wrap
|
1675
|
+
- flex-lg-wrap
|
1676
|
+
- flex-xl-wrap
|
1627
1677
|
:nowrap:
|
1628
1678
|
- flex-nowrap
|
1679
|
+
- flex-sm-nowrap
|
1680
|
+
- flex-md-nowrap
|
1681
|
+
- flex-lg-nowrap
|
1682
|
+
- flex-xl-nowrap
|
1629
1683
|
:reverse:
|
1630
1684
|
- flex-wrap-reverse
|
1685
|
+
- flex-sm-wrap-reverse
|
1686
|
+
- flex-md-wrap-reverse
|
1687
|
+
- flex-lg-wrap-reverse
|
1688
|
+
- flex-xl-wrap-reverse
|
1631
1689
|
:direction:
|
1632
1690
|
:column:
|
1633
1691
|
- flex-column
|
@@ -1656,24 +1714,64 @@
|
|
1656
1714
|
:flex:
|
1657
1715
|
1:
|
1658
1716
|
- flex-1
|
1717
|
+
- flex-sm-1
|
1718
|
+
- flex-md-1
|
1719
|
+
- flex-lg-1
|
1720
|
+
- flex-xl-1
|
1659
1721
|
:auto:
|
1660
1722
|
- flex-auto
|
1723
|
+
- flex-sm-auto
|
1724
|
+
- flex-md-auto
|
1725
|
+
- flex-lg-auto
|
1726
|
+
- flex-xl-auto
|
1661
1727
|
:align_self:
|
1662
1728
|
:auto:
|
1663
1729
|
- flex-self-auto
|
1730
|
+
- flex-sm-self-auto
|
1731
|
+
- flex-md-self-auto
|
1732
|
+
- flex-lg-self-auto
|
1733
|
+
- flex-xl-self-auto
|
1664
1734
|
:start:
|
1665
1735
|
- flex-self-start
|
1736
|
+
- flex-sm-self-start
|
1737
|
+
- flex-md-self-start
|
1738
|
+
- flex-lg-self-start
|
1739
|
+
- flex-xl-self-start
|
1666
1740
|
:end:
|
1667
1741
|
- flex-self-end
|
1742
|
+
- flex-sm-self-end
|
1743
|
+
- flex-md-self-end
|
1744
|
+
- flex-lg-self-end
|
1745
|
+
- flex-xl-self-end
|
1668
1746
|
:center:
|
1669
1747
|
- flex-self-center
|
1748
|
+
- flex-sm-self-center
|
1749
|
+
- flex-md-self-center
|
1750
|
+
- flex-lg-self-center
|
1751
|
+
- flex-xl-self-center
|
1670
1752
|
:baseline:
|
1671
1753
|
- flex-self-baseline
|
1754
|
+
- flex-sm-self-baseline
|
1755
|
+
- flex-md-self-baseline
|
1756
|
+
- flex-lg-self-baseline
|
1757
|
+
- flex-xl-self-baseline
|
1672
1758
|
:stretch:
|
1673
1759
|
- flex-self-stretch
|
1760
|
+
- flex-sm-self-stretch
|
1761
|
+
- flex-md-self-stretch
|
1762
|
+
- flex-lg-self-stretch
|
1763
|
+
- flex-xl-self-stretch
|
1674
1764
|
:flex_grow:
|
1675
1765
|
0:
|
1676
1766
|
- flex-grow-0
|
1767
|
+
- flex-sm-grow-0
|
1768
|
+
- flex-md-grow-0
|
1769
|
+
- flex-lg-grow-0
|
1770
|
+
- flex-xl-grow-0
|
1677
1771
|
:flex_shrink:
|
1678
1772
|
0:
|
1679
1773
|
- flex-shrink-0
|
1774
|
+
- flex-sm-shrink-0
|
1775
|
+
- flex-md-shrink-0
|
1776
|
+
- flex-lg-shrink-0
|
1777
|
+
- flex-xl-shrink-0
|
data/lib/primer/classify.rb
CHANGED
@@ -42,7 +42,7 @@ module Primer
|
|
42
42
|
# extract_css_attrs(classes: "d-flex", mt: 4, py: 2) => { classes: "d-flex mt-4 py-2", style: nil }
|
43
43
|
# extract_css_attrs(classes: "d-flex", style: "float: left", mt: 4, py: 2) => { classes: "d-flex mt-4 py-2", style: "float: left" }
|
44
44
|
#
|
45
|
-
def call(
|
45
|
+
def call(args = {})
|
46
46
|
style = nil
|
47
47
|
classes = [].tap do |result|
|
48
48
|
args.each do |key, val|
|
@@ -18,6 +18,7 @@ module Primer
|
|
18
18
|
config.primer_view_components.raise_on_invalid_options = false
|
19
19
|
config.primer_view_components.silence_deprecations = false
|
20
20
|
config.primer_view_components.validate_class_names = !Rails.env.production?
|
21
|
+
config.primer_view_components.raise_on_invalid_aria = false
|
21
22
|
|
22
23
|
initializer "primer_view_components.assets" do |app|
|
23
24
|
app.config.assets.precompile += %w[primer_view_components] if app.config.respond_to?(:assets)
|
@@ -13,9 +13,9 @@ module ERBLint
|
|
13
13
|
symbolize: true
|
14
14
|
).freeze
|
15
15
|
|
16
|
-
|
16
|
+
SIZE_MAPPINGS = Primer::ViewComponents::Constants.get(
|
17
17
|
component: "Primer::ButtonComponent",
|
18
|
-
constant: "
|
18
|
+
constant: "SIZE_MAPPINGS",
|
19
19
|
symbolize: true
|
20
20
|
).freeze
|
21
21
|
|
@@ -55,8 +55,8 @@ module ERBLint
|
|
55
55
|
|
56
56
|
if SCHEME_MAPPINGS[class_name] && acc[:scheme].nil?
|
57
57
|
acc[:scheme] = SCHEME_MAPPINGS[class_name]
|
58
|
-
elsif
|
59
|
-
acc[:
|
58
|
+
elsif SIZE_MAPPINGS[class_name] && acc[:size].nil?
|
59
|
+
acc[:size] = SIZE_MAPPINGS[class_name]
|
60
60
|
elsif class_name == "btn-block"
|
61
61
|
acc[:block] = true
|
62
62
|
elsif class_name == "BtnGroup-item"
|
@@ -22,7 +22,7 @@ module RuboCop
|
|
22
22
|
#
|
23
23
|
# * The top level key is the argument.
|
24
24
|
# * The second level key is the value.
|
25
|
-
# * The
|
25
|
+
# * The second level value is a string of the full replacement. e.g. "new_argument: :new_value"
|
26
26
|
# If the value is nil, then there is no replacement.
|
27
27
|
#
|
28
28
|
# e.g.
|