primer_view_components 0.0.114 → 0.0.115
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.
- 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))) %>
|