primer_view_components 0.0.114 → 0.0.115
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +36 -0
- data/app/assets/javascripts/primer_view_components.js +1 -1
- data/app/assets/javascripts/primer_view_components.js.map +1 -1
- data/app/assets/styles/primer_view_components.css +2 -2
- data/app/assets/styles/primer_view_components.css.map +1 -1
- data/app/components/primer/alpha/action_list/divider.rb +2 -0
- data/app/components/primer/alpha/action_list/heading.rb +2 -0
- data/app/components/primer/alpha/action_list/item.rb +8 -6
- data/app/components/primer/alpha/action_list.rb +1 -0
- data/app/components/primer/alpha/auto_complete/auto_complete.html.erb +1 -1
- data/app/components/primer/alpha/auto_complete/item.rb +1 -0
- data/app/components/primer/alpha/auto_complete.rb +3 -2
- data/app/components/primer/alpha/banner.html.erb +1 -1
- data/app/components/primer/alpha/banner.rb +1 -0
- data/app/components/primer/alpha/button_marketing.rb +2 -0
- data/app/components/primer/alpha/dialog.rb +3 -0
- data/app/components/primer/alpha/image.rb +1 -0
- data/app/components/primer/alpha/image_crop.html.erb +1 -1
- data/app/components/primer/alpha/layout.css +1 -0
- data/app/components/primer/alpha/layout.css.json +1 -0
- data/app/components/primer/alpha/layout.css.map +1 -0
- data/app/components/primer/alpha/layout.pcss +268 -0
- data/app/components/primer/{menu_component.css → alpha/menu.css} +0 -0
- data/app/components/primer/alpha/menu.css.json +1 -0
- data/app/components/primer/alpha/menu.css.map +1 -0
- data/app/components/primer/{menu_component.html.erb → alpha/menu.html.erb} +0 -0
- data/app/components/primer/{menu_component.pcss → alpha/menu.pcss} +0 -0
- data/app/components/primer/alpha/menu.rb +76 -0
- data/app/components/primer/{octicon_symbols_component.html.erb → alpha/octicon_symbols.html.erb} +0 -0
- data/app/components/primer/alpha/octicon_symbols.rb +61 -0
- data/app/components/primer/alpha/text_field.rb +1 -0
- data/app/components/primer/alpha/toggle_switch.html.erb +2 -2
- data/app/components/primer/alpha/toggle_switch.rb +2 -0
- data/app/components/primer/alpha/tool_tip.js +77 -69
- data/app/components/primer/alpha/tool_tip.ts +63 -51
- data/app/components/primer/alpha/tooltip.rb +2 -0
- data/app/components/primer/beta/auto_complete/item.rb +4 -4
- data/app/components/primer/beta/auto_complete.rb +3 -3
- data/app/components/primer/beta/avatar.rb +1 -0
- data/app/components/primer/beta/base_button.rb +1 -0
- data/app/components/primer/beta/blankslate.rb +5 -5
- data/app/components/primer/beta/button.rb +7 -7
- data/app/components/primer/beta/clipboard_copy.html.erb +2 -2
- data/app/components/primer/beta/clipboard_copy.rb +1 -0
- data/app/components/primer/beta/close_button.rb +2 -1
- data/app/components/primer/beta/counter.rb +1 -0
- data/app/components/primer/beta/heading.rb +1 -0
- data/app/components/primer/beta/icon_button.html.erb +1 -1
- data/app/components/primer/beta/icon_button.rb +1 -0
- data/app/components/primer/beta/label.rb +1 -0
- data/app/components/primer/beta/markdown.rb +1 -0
- data/app/components/primer/{octicon_component.html.erb → beta/octicon.html.erb} +0 -0
- data/app/components/primer/beta/octicon.rb +88 -0
- data/app/components/primer/beta/relative_time.rb +2 -1
- data/app/components/primer/{spinner_component.html.erb → beta/spinner.html.erb} +0 -0
- data/app/components/primer/beta/spinner.rb +46 -0
- data/app/components/primer/beta/text.rb +1 -0
- data/app/components/primer/blankslate_component.rb +3 -3
- data/app/components/primer/box.rb +1 -0
- data/app/components/primer/button_component.rb +3 -3
- data/app/components/primer/conditional_wrapper.rb +2 -0
- data/app/components/primer/hellip_button.rb +2 -0
- data/app/components/primer/icon_button.html.erb +2 -2
- data/app/components/primer/icon_button.rb +1 -0
- data/app/components/primer/layout_component.rb +2 -0
- data/app/components/primer/local_time.rb +3 -0
- data/app/components/primer/menu_component.rb +2 -69
- data/app/components/primer/navigation/tab_component.rb +2 -2
- data/app/components/primer/octicon_component.rb +3 -81
- data/app/components/primer/octicon_symbols_component.rb +2 -52
- data/app/components/primer/primer.d.ts +2 -0
- data/app/components/primer/primer.js +2 -0
- data/app/components/primer/primer.pcss +2 -1
- data/app/components/primer/primer.ts +2 -0
- data/app/components/primer/spinner_component.rb +2 -38
- data/app/components/primer/state_component.rb +1 -0
- data/app/components/primer/subhead_component.rb +2 -0
- data/app/components/primer/tab_container_component.rb +2 -0
- data/app/components/primer/time_ago_component.rb +2 -1
- data/app/components/primer/timeline_item_component.rb +3 -2
- data/app/components/primer/tooltip.rb +1 -0
- data/app/components/primer/truncate.rb +2 -0
- data/app/forms/immediate_validation_form.rb +29 -0
- data/app/forms/multi_input_form.rb +4 -2
- data/app/lib/primer/css/layout.css +1 -378
- data/app/lib/primer/css/layout.css.json +1 -1
- data/app/lib/primer/octicon/cache.rb +1 -1
- data/app/lib/primer/view_helper.rb +1 -1
- data/lib/primer/deprecations.yml +26 -0
- data/lib/primer/forms/builder.rb +48 -8
- data/lib/primer/forms/check_box.html.erb +3 -1
- data/lib/primer/forms/dsl/input.rb +23 -1
- data/lib/primer/forms/dsl/multi_input.rb +6 -9
- data/lib/primer/forms/dsl/select_list_input.rb +1 -1
- data/lib/primer/forms/dsl/text_field_input.rb +31 -1
- data/lib/primer/forms/form_control.html.erb +17 -13
- data/lib/primer/forms/form_control.rb +2 -0
- data/lib/primer/forms/multi.html.erb +6 -2
- data/lib/primer/forms/primer_multi_input.d.ts +10 -0
- data/lib/primer/forms/primer_multi_input.js +45 -0
- data/lib/primer/forms/primer_multi_input.ts +46 -0
- data/lib/primer/forms/primer_text_field.d.ts +1 -0
- data/lib/primer/forms/primer_text_field.js +62 -0
- data/lib/primer/forms/primer_text_field.ts +48 -0
- data/lib/primer/forms/radio_button.html.erb +3 -1
- data/lib/primer/forms/text_field.html.erb +8 -8
- data/lib/primer/forms/text_field.rb +11 -0
- data/lib/primer/view_components/linters/close_button_component_migration_counter.rb +1 -1
- data/lib/primer/view_components/version.rb +1 -1
- data/lib/tasks/docs.rake +5 -5
- data/lib/tasks/helpers/ast_traverser.rb +1 -1
- data/previews/primer/alpha/action_list_preview.rb +1 -1
- data/previews/primer/alpha/auto_complete_preview.rb +62 -6
- data/previews/primer/alpha/layout_preview.rb +179 -6
- data/previews/primer/{menu_component_preview → alpha/menu_preview}/default.html.erb +3 -3
- data/previews/primer/{menu_component_preview → alpha/menu_preview}/playground.html.erb +3 -3
- data/previews/primer/alpha/menu_preview.rb +14 -0
- data/previews/primer/alpha/toggle_switch_preview.rb +11 -9
- data/previews/primer/beta/auto_complete_preview/with_submit_button.html.erb +1 -1
- data/previews/primer/beta/auto_complete_preview.rb +19 -17
- data/previews/primer/beta/octicon_preview.rb +24 -0
- data/previews/primer/beta/spinner_preview.rb +22 -0
- data/previews/primer/forms/forms_preview/immediate_validation_form.html.erb +3 -0
- data/previews/primer/forms/forms_preview/multi_input_form.html.erb +12 -1
- data/previews/primer/forms/forms_preview.rb +2 -0
- data/previews/primer/url_helpers.rb +15 -0
- data/static/arguments.json +159 -159
- data/static/audited_at.json +4 -0
- data/static/constants.json +42 -34
- data/static/statuses.json +10 -6
- metadata +32 -15
- data/app/components/primer/menu_component.css.json +0 -1
- data/app/components/primer/menu_component.css.map +0 -1
- data/previews/primer/menu_component_preview.rb +0 -12
- data/previews/primer/octicon_component_preview.rb +0 -22
- data/previews/primer/spinner_component_preview.rb +0 -20
@@ -0,0 +1,88 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "octicons"
|
4
|
+
|
5
|
+
module Primer
|
6
|
+
module Beta
|
7
|
+
# `Octicon` renders an <%= link_to_octicons %> with <%= link_to_system_arguments_docs %>.
|
8
|
+
# `Octicon` can also be rendered with the `primer_octicon` helper, which accepts the same arguments.
|
9
|
+
class Octicon < Primer::Component
|
10
|
+
status :beta
|
11
|
+
|
12
|
+
SIZE_XSMALL = :xsmall
|
13
|
+
SIZE_DEFAULT = :small
|
14
|
+
SIZE_MEDIUM = :medium
|
15
|
+
|
16
|
+
SIZE_MAPPINGS = {
|
17
|
+
SIZE_XSMALL => 12,
|
18
|
+
SIZE_DEFAULT => 16,
|
19
|
+
SIZE_MEDIUM => 24
|
20
|
+
}.freeze
|
21
|
+
SIZE_OPTIONS = SIZE_MAPPINGS.keys
|
22
|
+
|
23
|
+
# @example Default
|
24
|
+
# <%= render(Primer::Beta::Octicon.new(:check)) %>
|
25
|
+
# <%= render(Primer::Beta::Octicon.new(icon: :check)) %>
|
26
|
+
#
|
27
|
+
# @example Medium
|
28
|
+
# <%= render(Primer::Beta::Octicon.new(:people, size: :medium)) %>
|
29
|
+
#
|
30
|
+
# @example Helper
|
31
|
+
# <%= primer_octicon(:check) %>
|
32
|
+
#
|
33
|
+
# @param icon_name [Symbol, String] Name of <%= link_to_octicons %> to use.
|
34
|
+
# @param icon [Symbol, String] Name of <%= link_to_octicons %> to use.
|
35
|
+
# @param size [Symbol] <%= one_of(Primer::Beta::Octicon::SIZE_MAPPINGS, sort: false) %>
|
36
|
+
# @param use_symbol [Boolean] EXPERIMENTAL (May change or be removed) - Set to true when using with <%= link_to_component(Primer::Alpha::OcticonSymbols) %>.
|
37
|
+
# @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
|
38
|
+
def initialize(icon_name = nil, icon: nil, size: SIZE_DEFAULT, use_symbol: false, **system_arguments)
|
39
|
+
icon_key = icon_name || icon
|
40
|
+
|
41
|
+
# Don't allow sizes under 16px
|
42
|
+
if system_arguments[:height].present? && system_arguments[:height].to_i < 16 || system_arguments[:width].present? && system_arguments[:width].to_i < 16
|
43
|
+
system_arguments.delete(:height)
|
44
|
+
system_arguments.delete(:width)
|
45
|
+
end
|
46
|
+
|
47
|
+
cache_key = Primer::Octicon::Cache.get_key(
|
48
|
+
symbol: icon_key,
|
49
|
+
size: size,
|
50
|
+
height: system_arguments[:height],
|
51
|
+
width: system_arguments[:width]
|
52
|
+
)
|
53
|
+
|
54
|
+
@system_arguments = system_arguments
|
55
|
+
@system_arguments[:tag] = :svg
|
56
|
+
@system_arguments[:aria] ||= {}
|
57
|
+
@use_symbol = use_symbol
|
58
|
+
|
59
|
+
if @system_arguments[:aria][:label] || @system_arguments[:"aria-label"]
|
60
|
+
@system_arguments[:role] = "img"
|
61
|
+
else
|
62
|
+
@system_arguments[:aria][:hidden] = true
|
63
|
+
end
|
64
|
+
|
65
|
+
if (cache_icon = Primer::Octicon::Cache.read(cache_key))
|
66
|
+
@icon = cache_icon
|
67
|
+
else
|
68
|
+
# Filter out classify options to prevent them from becoming invalid html attributes.
|
69
|
+
# Note height and width are both classify options and valid html attributes.
|
70
|
+
octicon_options = {
|
71
|
+
height: @system_arguments[:height] || SIZE_MAPPINGS[fetch_or_fallback(SIZE_OPTIONS, size, SIZE_DEFAULT)],
|
72
|
+
width: @system_arguments[:width]
|
73
|
+
}
|
74
|
+
octicon_options.compact!
|
75
|
+
|
76
|
+
@icon = Octicons::Octicon.new(icon_key, octicon_options)
|
77
|
+
Primer::Octicon::Cache.set(cache_key, @icon)
|
78
|
+
end
|
79
|
+
|
80
|
+
@system_arguments[:classes] = class_names(
|
81
|
+
@icon.options[:class],
|
82
|
+
@system_arguments[:classes]
|
83
|
+
)
|
84
|
+
@system_arguments.merge!(@icon.options.except(:class, :'aria-hidden'))
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
@@ -4,6 +4,7 @@ module Primer
|
|
4
4
|
module Beta
|
5
5
|
# Formats a timestamp as a localized string or as relative text that auto-updates in the user's browser.
|
6
6
|
class RelativeTime < Primer::Component
|
7
|
+
warn_on_deprecated_slot_setter
|
7
8
|
status :beta
|
8
9
|
|
9
10
|
TENSE_DEFAULT = :auto
|
@@ -101,7 +102,7 @@ module Primer
|
|
101
102
|
# @param month [Symbol] What format months should take. <%= one_of(Primer::Beta::RelativeTime::MONTH_OPTIONS) %>
|
102
103
|
# @param year [Symbol] What format years should take. <%= one_of(Primer::Beta::RelativeTime::YEAR_OPTIONS) %>
|
103
104
|
# @param time_zone_name [Symbol] What format the time zone should take. <%= one_of(Primer::Beta::RelativeTime::TIMEZONENAME_OPTIONS) %>
|
104
|
-
# @param threshold [string] The threshold at which relative time displays become absolute.
|
105
|
+
# @param threshold [string] The threshold, in ISO-8601 'durations' format, at which relative time displays become absolute.
|
105
106
|
# @param precision [Symbol] The precision elapsed time should display. <%= one_of(Primer::Beta::RelativeTime::PRECISION_OPTIONS) %>
|
106
107
|
# @param format [Symbol] The format the display should take. <%= one_of(Primer::Beta::RelativeTime::FORMAT_OPTIONS) %>
|
107
108
|
# @param lang [string] The language to use.
|
File without changes
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Primer
|
4
|
+
module Beta
|
5
|
+
# Use `Spinner` to let users know that content is being loaded.
|
6
|
+
class Spinner < Primer::Component
|
7
|
+
warn_on_deprecated_slot_setter
|
8
|
+
status :beta
|
9
|
+
|
10
|
+
DEFAULT_SIZE = :medium
|
11
|
+
SIZE_MAPPINGS = {
|
12
|
+
:small => 16,
|
13
|
+
DEFAULT_SIZE => 32,
|
14
|
+
:large => 64
|
15
|
+
}.freeze
|
16
|
+
SIZE_OPTIONS = SIZE_MAPPINGS.keys
|
17
|
+
# Setting `box-sizing: content-box` allows consumers to add padding
|
18
|
+
# to the spinner without shrinking the icon
|
19
|
+
DEFAULT_STYLE = "box-sizing: content-box; color: var(--color-icon-primary);"
|
20
|
+
|
21
|
+
#
|
22
|
+
# @example Default
|
23
|
+
# <%= render(Primer::Beta::Spinner.new) %>
|
24
|
+
#
|
25
|
+
# @example Small
|
26
|
+
# <%= render(Primer::Beta::Spinner.new(size: :small)) %>
|
27
|
+
#
|
28
|
+
# @example Large
|
29
|
+
# <%= render(Primer::Beta::Spinner.new(size: :large)) %>
|
30
|
+
#
|
31
|
+
# @param size [Symbol] <%= one_of(Primer::Beta::Spinner::SIZE_MAPPINGS) %>
|
32
|
+
# @param style [String] Custom element styles.
|
33
|
+
# @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
|
34
|
+
def initialize(size: DEFAULT_SIZE, style: DEFAULT_STYLE, **system_arguments)
|
35
|
+
@system_arguments = deny_tag_argument(**system_arguments)
|
36
|
+
@system_arguments[:tag] = :svg
|
37
|
+
@system_arguments[:style] ||= style
|
38
|
+
@system_arguments[:animation] = :rotate
|
39
|
+
@system_arguments[:width] = SIZE_MAPPINGS[fetch_or_fallback(SIZE_OPTIONS, size, DEFAULT_SIZE)]
|
40
|
+
@system_arguments[:height] = SIZE_MAPPINGS[fetch_or_fallback(SIZE_OPTIONS, size, DEFAULT_SIZE)]
|
41
|
+
@system_arguments[:viewBox] = "0 0 16 16"
|
42
|
+
@system_arguments[:fill] = :none
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -10,10 +10,10 @@ module Primer
|
|
10
10
|
|
11
11
|
# Optional Spinner.
|
12
12
|
#
|
13
|
-
# @param kwargs [Hash] The same arguments as <%= link_to_component(Primer::
|
13
|
+
# @param kwargs [Hash] The same arguments as <%= link_to_component(Primer::Beta::Spinner) %>.
|
14
14
|
renders_one :spinner, lambda { |**system_arguments|
|
15
15
|
system_arguments[:mb] ||= 3
|
16
|
-
Primer::
|
16
|
+
Primer::Beta::Spinner.new(**system_arguments)
|
17
17
|
}
|
18
18
|
|
19
19
|
#
|
@@ -95,7 +95,7 @@ module Primer
|
|
95
95
|
# @param title [String] Text that appears in a larger bold font.
|
96
96
|
# @param title_tag [Symbol] HTML tag to use for title.
|
97
97
|
# @param icon [Symbol] Octicon icon to use at top of component.
|
98
|
-
# @param icon_size [Symbol] <%= one_of(Primer::
|
98
|
+
# @param icon_size [Symbol] <%= one_of(Primer::Beta::Octicon::SIZE_MAPPINGS, sort: false) %>
|
99
99
|
# @param image_src [String] Image to display.
|
100
100
|
# @param image_alt [String] Alt text for image.
|
101
101
|
# @param description [String] Text that appears below the title. Typically a whole sentence.
|
@@ -28,14 +28,14 @@ module Primer
|
|
28
28
|
#
|
29
29
|
# Use:
|
30
30
|
#
|
31
|
-
# - `leading_visual_icon` for a <%= link_to_component(Primer::
|
31
|
+
# - `leading_visual_icon` for a <%= link_to_component(Primer::Beta::Octicon) %>.
|
32
32
|
#
|
33
|
-
# @param system_arguments [Hash] Same arguments as <%= link_to_component(Primer::
|
33
|
+
# @param system_arguments [Hash] Same arguments as <%= link_to_component(Primer::Beta::Octicon) %>.
|
34
34
|
renders_one :leading_visual, types: {
|
35
35
|
icon: lambda { |**system_arguments|
|
36
36
|
system_arguments[:mr] = 2
|
37
37
|
|
38
|
-
Primer::
|
38
|
+
Primer::Beta::Octicon.new(**system_arguments)
|
39
39
|
}
|
40
40
|
}
|
41
41
|
alias icon leading_visual_icon # remove alias when all buttons are migrated to new slot names
|
@@ -22,6 +22,8 @@ module Primer
|
|
22
22
|
# @param condition [Boolean] Whether or not to wrap the content in a `Primer::BaseComponent`.
|
23
23
|
# @param base_component_arguments [Hash] The arguments to pass to `Primer::BaseComponent`.
|
24
24
|
class ConditionalWrapper < Primer::Component
|
25
|
+
warn_on_deprecated_slot_setter
|
26
|
+
|
25
27
|
def initialize(condition:, **base_component_arguments)
|
26
28
|
@condition = condition
|
27
29
|
@base_component_arguments = base_component_arguments
|
@@ -8,6 +8,8 @@ module Primer
|
|
8
8
|
# * This button is displaying a hellip as its content (The three dots character). Therefore a label is needed for screen readers.
|
9
9
|
# * Set the attribute `aria-label` on the system arguments. E.g. `Primer::HellipButton.new("aria-label": "Expand next part")`
|
10
10
|
class HellipButton < Primer::Component
|
11
|
+
warn_on_deprecated_slot_setter
|
12
|
+
|
11
13
|
# @example Default
|
12
14
|
# <%= render(Primer::HellipButton.new("aria-label": "No effect")) %>
|
13
15
|
#
|
@@ -1,12 +1,12 @@
|
|
1
1
|
<% if render_tooltip? %>
|
2
2
|
<%= render Primer::BaseComponent.new(tag: :div, position: :relative, display: :inline_block) do %>
|
3
3
|
<%= render Primer::Beta::BaseButton.new(**@system_arguments) do -%>
|
4
|
-
<%= render Primer::
|
4
|
+
<%= render Primer::Beta::Octicon.new(icon: @icon) %>
|
5
5
|
<% end -%>
|
6
6
|
<%= render Primer::Alpha::Tooltip.new(**@tooltip_arguments) %>
|
7
7
|
<% end %>
|
8
8
|
<% else %>
|
9
9
|
<%= render Primer::Beta::BaseButton.new(**@system_arguments) do -%>
|
10
|
-
<%= render Primer::
|
10
|
+
<%= render Primer::Beta::Octicon.new(icon: @icon) %>
|
11
11
|
<% end -%>
|
12
12
|
<% end %>
|
@@ -12,6 +12,7 @@ module Primer
|
|
12
12
|
# Either `aria-label` or `aria-description` will be used for the `Tooltip` text, depending on which one is present.
|
13
13
|
# [Learn more about best functional image practices (WAI Images)](https://www.w3.org/WAI/tutorials/images/functional)
|
14
14
|
class IconButton < Primer::Component
|
15
|
+
warn_on_deprecated_slot_setter
|
15
16
|
status :deprecated
|
16
17
|
|
17
18
|
DEFAULT_SCHEME = :default
|
@@ -3,6 +3,9 @@
|
|
3
3
|
module Primer
|
4
4
|
# Use `LocalTime` to format a date and time in the user's preferred locale format. This component requires JavaScript.
|
5
5
|
class LocalTime < Primer::Component
|
6
|
+
warn_on_deprecated_slot_setter
|
7
|
+
status :deprecated
|
8
|
+
|
6
9
|
DEFAULT_DIGIT_TYPE = :numeric
|
7
10
|
DIGIT_TYPE_OPTIONS = [DEFAULT_DIGIT_TYPE, :"2-digit"].freeze
|
8
11
|
|
@@ -1,74 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Primer
|
4
|
-
|
5
|
-
|
6
|
-
HEADING_TAG_OPTIONS = [:h1, :h2, :h3, :h4, :h5, :h6].freeze
|
7
|
-
HEADING_TAG_FALLBACK = :h2
|
8
|
-
|
9
|
-
# Optional menu heading
|
10
|
-
#
|
11
|
-
# @param tag [Symbol] <%= one_of(Primer::MenuComponent::HEADING_TAG_OPTIONS) %>
|
12
|
-
# @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
|
13
|
-
renders_one :heading, lambda { |tag:, **system_arguments|
|
14
|
-
system_arguments[:tag] = fetch_or_fallback(HEADING_TAG_OPTIONS, tag, HEADING_TAG_FALLBACK)
|
15
|
-
system_arguments[:classes] = class_names(
|
16
|
-
"menu-heading",
|
17
|
-
system_arguments[:classes]
|
18
|
-
)
|
19
|
-
|
20
|
-
Primer::BaseComponent.new(**system_arguments)
|
21
|
-
}
|
22
|
-
|
23
|
-
# Required list of navigational links
|
24
|
-
#
|
25
|
-
# @param href [String] URL to be used for the Link
|
26
|
-
# @param selected [Boolean] Whether the item is the current selection
|
27
|
-
# @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
|
28
|
-
renders_many :items, lambda { |href:, selected: false, **system_arguments|
|
29
|
-
deny_tag_argument(**system_arguments)
|
30
|
-
system_arguments[:tag] = :a
|
31
|
-
system_arguments[:href] = href
|
32
|
-
system_arguments[:"aria-current"] = :page if selected
|
33
|
-
system_arguments[:classes] = class_names(
|
34
|
-
"menu-item",
|
35
|
-
system_arguments[:classes]
|
36
|
-
)
|
37
|
-
|
38
|
-
Primer::BaseComponent.new(**system_arguments)
|
39
|
-
}
|
40
|
-
|
41
|
-
# @example Default
|
42
|
-
# <%= render(Primer::MenuComponent.new) do |c| %>
|
43
|
-
# <% c.with_heading(tag: :h2) do %>
|
44
|
-
# Heading
|
45
|
-
# <% end %>
|
46
|
-
# <% c.with_item(selected: true, href: "#url") do %>
|
47
|
-
# Item 1
|
48
|
-
# <% end %>
|
49
|
-
# <% c.with_item(href: "#url") do %>
|
50
|
-
# <%= render(Primer::OcticonComponent.new("check")) %>
|
51
|
-
# With Icon
|
52
|
-
# <% end %>
|
53
|
-
# <% c.with_item(href: "#url") do %>
|
54
|
-
# <%= render(Primer::OcticonComponent.new("check")) %>
|
55
|
-
# With Icon and Counter
|
56
|
-
# <%= render(Primer::Beta::Counter.new(count: 25)) %>
|
57
|
-
# <% end %>
|
58
|
-
# <% end %>
|
59
|
-
#
|
60
|
-
# @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
|
61
|
-
def initialize(**system_arguments)
|
62
|
-
@system_arguments = deny_tag_argument(**system_arguments)
|
63
|
-
@system_arguments[:tag] = :nav
|
64
|
-
@system_arguments[:classes] = class_names(
|
65
|
-
"menu",
|
66
|
-
@system_arguments[:classes]
|
67
|
-
)
|
68
|
-
end
|
69
|
-
|
70
|
-
def render?
|
71
|
-
items.any?
|
72
|
-
end
|
4
|
+
class MenuComponent < Primer::Alpha::Menu
|
5
|
+
status :deprecated
|
73
6
|
end
|
74
7
|
end
|
@@ -41,13 +41,13 @@ module Primer
|
|
41
41
|
|
42
42
|
# Icon to be rendered in the Tab left.
|
43
43
|
#
|
44
|
-
# @param kwargs [Hash] The same arguments as <%= link_to_component(Primer::
|
44
|
+
# @param kwargs [Hash] The same arguments as <%= link_to_component(Primer::Beta::Octicon) %>.
|
45
45
|
renders_one :icon, lambda { |icon = nil, **system_arguments|
|
46
46
|
system_arguments[:classes] = class_names(
|
47
47
|
@icon_classes,
|
48
48
|
system_arguments[:classes]
|
49
49
|
)
|
50
|
-
Primer::
|
50
|
+
Primer::Beta::Octicon.new(icon, **system_arguments)
|
51
51
|
}
|
52
52
|
|
53
53
|
# The Tab's text.
|
@@ -1,86 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "octicons"
|
4
|
-
|
5
3
|
module Primer
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
status :beta
|
10
|
-
|
11
|
-
SIZE_XSMALL = :xsmall
|
12
|
-
SIZE_DEFAULT = :small
|
13
|
-
SIZE_MEDIUM = :medium
|
14
|
-
|
15
|
-
SIZE_MAPPINGS = {
|
16
|
-
SIZE_XSMALL => 12,
|
17
|
-
SIZE_DEFAULT => 16,
|
18
|
-
SIZE_MEDIUM => 24
|
19
|
-
}.freeze
|
20
|
-
SIZE_OPTIONS = SIZE_MAPPINGS.keys
|
21
|
-
|
22
|
-
# @example Default
|
23
|
-
# <%= render(Primer::OcticonComponent.new(:check)) %>
|
24
|
-
# <%= render(Primer::OcticonComponent.new(icon: :check)) %>
|
25
|
-
#
|
26
|
-
# @example Medium
|
27
|
-
# <%= render(Primer::OcticonComponent.new(:people, size: :medium)) %>
|
28
|
-
#
|
29
|
-
# @example Helper
|
30
|
-
# <%= primer_octicon(:check) %>
|
31
|
-
#
|
32
|
-
# @param icon_name [Symbol, String] Name of <%= link_to_octicons %> to use.
|
33
|
-
# @param icon [Symbol, String] Name of <%= link_to_octicons %> to use.
|
34
|
-
# @param size [Symbol] <%= one_of(Primer::OcticonComponent::SIZE_MAPPINGS, sort: false) %>
|
35
|
-
# @param use_symbol [Boolean] EXPERIMENTAL (May change or be removed) - Set to true when using with <%= link_to_component(Primer::OcticonSymbolsComponent) %>.
|
36
|
-
# @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
|
37
|
-
def initialize(icon_name = nil, icon: nil, size: SIZE_DEFAULT, use_symbol: false, **system_arguments)
|
38
|
-
icon_key = icon_name || icon
|
39
|
-
|
40
|
-
# Don't allow sizes under 16px
|
41
|
-
if system_arguments[:height].present? && system_arguments[:height].to_i < 16 || system_arguments[:width].present? && system_arguments[:width].to_i < 16
|
42
|
-
system_arguments.delete(:height)
|
43
|
-
system_arguments.delete(:width)
|
44
|
-
end
|
45
|
-
|
46
|
-
cache_key = Primer::Octicon::Cache.get_key(
|
47
|
-
symbol: icon_key,
|
48
|
-
size: size,
|
49
|
-
height: system_arguments[:height],
|
50
|
-
width: system_arguments[:width]
|
51
|
-
)
|
52
|
-
|
53
|
-
@system_arguments = system_arguments
|
54
|
-
@system_arguments[:tag] = :svg
|
55
|
-
@system_arguments[:aria] ||= {}
|
56
|
-
@use_symbol = use_symbol
|
57
|
-
|
58
|
-
if @system_arguments[:aria][:label] || @system_arguments[:"aria-label"]
|
59
|
-
@system_arguments[:role] = "img"
|
60
|
-
else
|
61
|
-
@system_arguments[:aria][:hidden] = true
|
62
|
-
end
|
63
|
-
|
64
|
-
if (cache_icon = Primer::Octicon::Cache.read(cache_key))
|
65
|
-
@icon = cache_icon
|
66
|
-
else
|
67
|
-
# Filter out classify options to prevent them from becoming invalid html attributes.
|
68
|
-
# Note height and width are both classify options and valid html attributes.
|
69
|
-
octicon_options = {
|
70
|
-
height: @system_arguments[:height] || SIZE_MAPPINGS[fetch_or_fallback(SIZE_OPTIONS, size, SIZE_DEFAULT)],
|
71
|
-
width: @system_arguments[:width]
|
72
|
-
}
|
73
|
-
octicon_options.compact!
|
74
|
-
|
75
|
-
@icon = Octicons::Octicon.new(icon_key, octicon_options)
|
76
|
-
Primer::Octicon::Cache.set(cache_key, @icon)
|
77
|
-
end
|
78
|
-
|
79
|
-
@system_arguments[:classes] = class_names(
|
80
|
-
@icon.options[:class],
|
81
|
-
@system_arguments[:classes]
|
82
|
-
)
|
83
|
-
@system_arguments.merge!(@icon.options.except(:class, :'aria-hidden'))
|
84
|
-
end
|
4
|
+
class OcticonComponent < Primer::Beta::Octicon
|
5
|
+
warn_on_deprecated_slot_setter
|
6
|
+
status :deprecated
|
85
7
|
end
|
86
8
|
end
|
@@ -1,57 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "octicons"
|
4
|
-
|
5
3
|
module Primer
|
6
|
-
|
7
|
-
|
8
|
-
# @example Symbol dictionary
|
9
|
-
# <%= render(Primer::OcticonComponent.new(icon: :check, use_symbol: true, color: :success)) %>
|
10
|
-
# <%= render(Primer::OcticonComponent.new(icon: :check, use_symbol: true, color: :danger)) %>
|
11
|
-
# <%= render(Primer::OcticonComponent.new(icon: :check, use_symbol: true, size: :medium)) %>
|
12
|
-
# <%= render(Primer::OcticonSymbolsComponent.new(icons: [{ symbol: :check }, { symbol: :check, size: :medium }])) %>
|
13
|
-
#
|
14
|
-
# @param icons [Array<Hash>] List of icons to render, in the format { symbol: :icon_name, size: :small }
|
15
|
-
def initialize(icons: [])
|
16
|
-
@icons = {}
|
17
|
-
icons.each do |icon|
|
18
|
-
symbol = icon[:symbol]
|
19
|
-
size = Primer::OcticonComponent::SIZE_MAPPINGS[
|
20
|
-
fetch_or_fallback(Primer::OcticonComponent::SIZE_OPTIONS, icon[:size] || Primer::OcticonComponent::SIZE_DEFAULT, Primer::OcticonComponent::SIZE_DEFAULT)
|
21
|
-
]
|
22
|
-
|
23
|
-
cache_key = Primer::Octicon::Cache.get_key(symbol: symbol, size: size)
|
24
|
-
|
25
|
-
if (cache_icon = Primer::Octicon::Cache.read(cache_key))
|
26
|
-
icon_instance = cache_icon
|
27
|
-
else
|
28
|
-
icon_instance = Octicons::Octicon.new(symbol, height: size)
|
29
|
-
|
30
|
-
Primer::Octicon::Cache.set(cache_key, icon_instance)
|
31
|
-
end
|
32
|
-
|
33
|
-
# Don't put the same icon twice
|
34
|
-
@icons[[symbol, icon_instance.height]] = icon_instance if @icons[[symbol, icon_instance.height]].nil?
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
def render?
|
39
|
-
@icons.any?
|
40
|
-
end
|
41
|
-
|
42
|
-
def symbol_tags
|
43
|
-
safe_join(
|
44
|
-
@icons.values.map do |icon|
|
45
|
-
content_tag(
|
46
|
-
:symbol,
|
47
|
-
icon.path.html_safe, # rubocop:disable Rails/OutputSafety
|
48
|
-
id: "octicon_#{icon.symbol}_#{icon.height}",
|
49
|
-
viewBox: icon.options[:viewBox],
|
50
|
-
width: icon.width,
|
51
|
-
height: icon.height
|
52
|
-
)
|
53
|
-
end
|
54
|
-
)
|
55
|
-
end
|
4
|
+
class OcticonSymbolsComponent < Primer::Alpha::OcticonSymbols
|
5
|
+
status :deprecated
|
56
6
|
end
|
57
7
|
end
|
@@ -6,12 +6,14 @@
|
|
6
6
|
@import "./alpha/banner.pcss";
|
7
7
|
@import "./alpha/dialog.pcss";
|
8
8
|
@import "./alpha/dropdown.pcss";
|
9
|
+
@import "./alpha/layout.pcss";
|
9
10
|
@import "./alpha/tab_nav.pcss";
|
10
11
|
@import "./alpha/text_field.pcss";
|
11
12
|
@import "./alpha/button_marketing.pcss";
|
12
13
|
@import "./alpha/toggle_switch.pcss";
|
13
14
|
@import "./alpha/underline_nav.pcss";
|
14
15
|
@import "./alpha/segmented_control.pcss";
|
16
|
+
@import "./alpha/menu.pcss";
|
15
17
|
|
16
18
|
/* beta */
|
17
19
|
@import "./beta/avatar.pcss";
|
@@ -29,7 +31,6 @@
|
|
29
31
|
@import "./beta/truncate.pcss";
|
30
32
|
|
31
33
|
/* to be renamed */
|
32
|
-
@import "./menu_component.pcss";
|
33
34
|
@import "./state_component.pcss";
|
34
35
|
@import "./subhead_component.pcss";
|
35
36
|
@import "./timeline_item_component.pcss";
|
@@ -1,43 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Primer
|
4
|
-
|
5
|
-
|
6
|
-
status :beta
|
7
|
-
|
8
|
-
DEFAULT_SIZE = :medium
|
9
|
-
SIZE_MAPPINGS = {
|
10
|
-
:small => 16,
|
11
|
-
DEFAULT_SIZE => 32,
|
12
|
-
:large => 64
|
13
|
-
}.freeze
|
14
|
-
SIZE_OPTIONS = SIZE_MAPPINGS.keys
|
15
|
-
# Setting `box-sizing: content-box` allows consumers to add padding
|
16
|
-
# to the spinner without shrinking the icon
|
17
|
-
DEFAULT_STYLE = "box-sizing: content-box; color: var(--color-icon-primary);"
|
18
|
-
|
19
|
-
#
|
20
|
-
# @example Default
|
21
|
-
# <%= render(Primer::SpinnerComponent.new) %>
|
22
|
-
#
|
23
|
-
# @example Small
|
24
|
-
# <%= render(Primer::SpinnerComponent.new(size: :small)) %>
|
25
|
-
#
|
26
|
-
# @example Large
|
27
|
-
# <%= render(Primer::SpinnerComponent.new(size: :large)) %>
|
28
|
-
#
|
29
|
-
# @param size [Symbol] <%= one_of(Primer::SpinnerComponent::SIZE_MAPPINGS) %>
|
30
|
-
# @param style [String] Custom element styles.
|
31
|
-
# @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
|
32
|
-
def initialize(size: DEFAULT_SIZE, style: DEFAULT_STYLE, **system_arguments)
|
33
|
-
@system_arguments = deny_tag_argument(**system_arguments)
|
34
|
-
@system_arguments[:tag] = :svg
|
35
|
-
@system_arguments[:style] ||= style
|
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
|
41
|
-
end
|
4
|
+
class SpinnerComponent < Primer::Beta::Spinner
|
5
|
+
status :deprecated
|
42
6
|
end
|
43
7
|
end
|
@@ -11,6 +11,8 @@ module Primer
|
|
11
11
|
# The `:heading` slot defaults to rendering a `<div>`. Update the tag to a heading element with the appropriate level to improve page navigation for assistive technologies.
|
12
12
|
# <%= link_to_heading_practices %>
|
13
13
|
class SubheadComponent < Primer::Component
|
14
|
+
warn_on_deprecated_slot_setter
|
15
|
+
|
14
16
|
status :beta
|
15
17
|
|
16
18
|
DEFAULT_HEADING_TAG = :div
|
@@ -3,7 +3,8 @@
|
|
3
3
|
module Primer
|
4
4
|
# Use `TimeAgo` to display a time relative to how long ago it was. This component requires JavaScript.
|
5
5
|
class TimeAgoComponent < Primer::Component
|
6
|
-
|
6
|
+
warn_on_deprecated_slot_setter
|
7
|
+
status :deprecated
|
7
8
|
|
8
9
|
# @example Default
|
9
10
|
# <%= render(Primer::TimeAgoComponent.new(time: Time.at(628232400))) %>
|