primer_view_components 0.0.114 → 0.0.116
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +52 -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/item.rb +6 -6
- data/app/components/primer/alpha/auto_complete/auto_complete.html.erb +1 -1
- data/app/components/primer/alpha/auto_complete.rb +10 -10
- data/app/components/primer/alpha/banner.html.erb +1 -1
- data/app/components/primer/alpha/dialog.rb +2 -0
- data/app/components/primer/alpha/dropdown/menu.rb +2 -0
- data/app/components/primer/alpha/dropdown.html.erb +3 -3
- 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/alpha/layout.rb +1 -1
- 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 +59 -0
- data/app/components/primer/alpha/segmented_control.css +1 -1
- data/app/components/primer/alpha/segmented_control.css.json +1 -1
- data/app/components/primer/alpha/segmented_control.css.map +1 -1
- data/app/components/primer/alpha/segmented_control.pcss +12 -0
- data/app/components/primer/alpha/segmented_control.rb +5 -5
- data/app/components/primer/alpha/tab_panels.rb +6 -6
- data/app/components/primer/alpha/toggle_switch.html.erb +2 -2
- data/app/components/primer/alpha/toggle_switch.rb +6 -6
- 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/underline_panels.rb +6 -6
- data/app/components/primer/beta/auto_complete/item.rb +5 -4
- data/app/components/primer/beta/auto_complete.rb +15 -13
- data/app/components/primer/beta/avatar_stack.rb +2 -0
- data/app/components/primer/beta/blankslate.rb +48 -47
- data/app/components/primer/beta/border_box/header.rb +2 -0
- data/app/components/primer/beta/border_box.rb +2 -0
- data/app/components/primer/beta/breadcrumbs.rb +1 -0
- data/app/components/primer/beta/button.css +1 -1
- data/app/components/primer/beta/button.css.json +1 -1
- data/app/components/primer/beta/button.css.map +1 -1
- data/app/components/primer/beta/button.pcss +5 -0
- data/app/components/primer/beta/button.rb +8 -7
- data/app/components/primer/beta/button_group.rb +3 -0
- data/app/components/primer/beta/clipboard_copy.html.erb +2 -2
- data/app/components/primer/beta/close_button.rb +1 -1
- data/app/components/primer/beta/details.rb +6 -3
- data/app/components/primer/beta/flash.rb +1 -0
- data/app/components/primer/beta/icon_button.html.erb +1 -1
- data/app/components/primer/beta/link.rb +1 -0
- data/app/components/primer/{octicon_component.html.erb → beta/octicon.html.erb} +0 -0
- data/app/components/primer/beta/octicon.rb +89 -0
- data/app/components/primer/beta/popover.rb +1 -0
- data/app/components/primer/beta/progress_bar.rb +7 -7
- data/app/components/primer/beta/relative_time.rb +1 -1
- data/app/components/primer/{spinner_component.html.erb → beta/spinner.html.erb} +0 -0
- data/app/components/primer/beta/spinner.rb +45 -0
- data/app/components/primer/beta/truncate.rb +3 -2
- data/app/components/primer/blankslate_component.rb +3 -3
- data/app/components/primer/button_component.rb +5 -5
- data/app/components/primer/component.rb +1 -0
- data/app/components/primer/dropdown_menu_component.rb +3 -3
- data/app/components/primer/icon_button.html.erb +2 -2
- data/app/components/primer/local_time.rb +2 -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 +2 -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/time_ago_component.rb +1 -1
- data/app/components/primer/timeline_item_component.rb +2 -2
- 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 +47 -8
- data/lib/primer/forms/check_box.html.erb +3 -1
- data/lib/primer/forms/dsl/form_reference_input.rb +25 -2
- data/lib/primer/forms/dsl/input.rb +50 -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/form_reference.html.erb +1 -1
- data/lib/primer/forms/form_reference.rb +4 -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/tab_panels_preview.rb +8 -8
- 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/details_preview.rb +6 -6
- 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/local_time_component_preview.rb +3 -0
- data/previews/primer/time_ago_component_preview.rb +3 -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,59 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "octicons"
|
4
|
+
|
5
|
+
module Primer
|
6
|
+
module Alpha
|
7
|
+
# OcticonSymbols renders a symbol dictionary using a list of <%= link_to_octicons %>.
|
8
|
+
class OcticonSymbols < Primer::Component
|
9
|
+
# @example Symbol dictionary
|
10
|
+
# <%= render(Primer::Beta::Octicon.new(icon: :check, use_symbol: true, color: :success)) %>
|
11
|
+
# <%= render(Primer::Beta::Octicon.new(icon: :check, use_symbol: true, color: :danger)) %>
|
12
|
+
# <%= render(Primer::Beta::Octicon.new(icon: :check, use_symbol: true, size: :medium)) %>
|
13
|
+
# <%= render(Primer::Alpha::OcticonSymbols.new(icons: [{ symbol: :check }, { symbol: :check, size: :medium }])) %>
|
14
|
+
#
|
15
|
+
# @param icons [Array<Hash>] List of icons to render, in the format { symbol: :icon_name, size: :small }
|
16
|
+
def initialize(icons: [])
|
17
|
+
@icons = {}
|
18
|
+
icons.each do |icon|
|
19
|
+
symbol = icon[:symbol]
|
20
|
+
size = Primer::Beta::Octicon::SIZE_MAPPINGS[
|
21
|
+
fetch_or_fallback(Primer::Beta::Octicon::SIZE_OPTIONS, icon[:size] || Primer::Beta::Octicon::SIZE_DEFAULT, Primer::Beta::Octicon::SIZE_DEFAULT)
|
22
|
+
]
|
23
|
+
|
24
|
+
cache_key = Primer::Octicon::Cache.get_key(symbol: symbol, size: size)
|
25
|
+
|
26
|
+
if (cache_icon = Primer::Octicon::Cache.read(cache_key))
|
27
|
+
icon_instance = cache_icon
|
28
|
+
else
|
29
|
+
icon_instance = Octicons::Octicon.new(symbol, height: size)
|
30
|
+
|
31
|
+
Primer::Octicon::Cache.set(cache_key, icon_instance)
|
32
|
+
end
|
33
|
+
|
34
|
+
# Don't put the same icon twice
|
35
|
+
@icons[[symbol, icon_instance.height]] = icon_instance if @icons[[symbol, icon_instance.height]].nil?
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def render?
|
40
|
+
@icons.any?
|
41
|
+
end
|
42
|
+
|
43
|
+
def symbol_tags
|
44
|
+
safe_join(
|
45
|
+
@icons.values.map do |icon|
|
46
|
+
content_tag(
|
47
|
+
:symbol,
|
48
|
+
icon.path.html_safe, # rubocop:disable Rails/OutputSafety
|
49
|
+
id: "octicon_#{icon.symbol}_#{icon.height}",
|
50
|
+
viewBox: icon.options[:viewBox],
|
51
|
+
width: icon.width,
|
52
|
+
height: icon.height
|
53
|
+
)
|
54
|
+
end
|
55
|
+
)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -1 +1 @@
|
|
1
|
-
.SegmentedControl{background-color:var(--color-segmented-control-bg);border-radius:var(--primer-borderRadius-medium,6px);box-shadow:var(--primer-borderInset-thin,inset 0 0 0 max(1px,.0625rem)) var(--color-border-default);display:inline-flex;list-style:none}.SegmentedControl-item{border:var(--primer-borderWidth-thin,max(1px,.0625rem)) solid #0000;border-radius:var(--primer-borderRadius-medium,6px);display:inline-flex;padding:var(--primer-control-xsmall-paddingInline-condensed,4px);position:relative}.SegmentedControl-item.SegmentedControl-item--selected{background-color:var(--color-btn-bg);border-color:var(--color-segmented-control-button-selected-border)}.SegmentedControl-item.SegmentedControl-item--selected .Button{font-weight:var(--base-text-weight-semibold,600)}.SegmentedControl-item.SegmentedControl-item--selected .Button:hover{background-color:initial}.SegmentedControl-item.SegmentedControl-item--selected+.SegmentedControl-item:before,.SegmentedControl-item.SegmentedControl-item--selected:before{border-color:#0000}.SegmentedControl-item .Button-label[data-content]:before{content:attr(data-content);display:block;font-weight:var(--base-text-weight-semibold,600);height:0;visibility:hidden}.SegmentedControl-item:before{border-left:var(--primer-borderWidth-thin,max(1px,.0625rem)) solid var(--color-border-default);content:"";inset:0 0 0 -1px;margin-bottom:var(--primer-control-medium-paddingBlock,6px);margin-top:var(--primer-control-medium-paddingBlock,6px);position:absolute}.SegmentedControl-item .Button{border:0;color:var(--color-btn-text);font-weight:var(--base-text-weight-normal,400);transition:none}.SegmentedControl-item .Button:focus-visible{border-radius:calc(var(--primer-borderRadius-medium, 6px) - 5px);outline-offset:calc(var(--primer-control-xsmall-paddingInline-condensed, 4px) - var(--primer-borderWidth-thin, 1px))}.SegmentedControl-item .Button--small{height:calc(var(--primer-control-small-size, 28px) - var(--primer-control-xsmall-paddingInline-condensed, 4px)*2 - var(--primer-borderWidth-thin, 1px)*2);padding:0 calc(var(--primer-control-small-paddingInline-condensed, 8px) - var(--primer-control-xsmall-paddingInline-condensed, 4px))}.SegmentedControl-item .Button--small.Button--iconOnly{width:calc(var(--primer-control-medium-size, 32px) - var(--primer-control-xsmall-paddingInline-condensed, 4px)*2 - var(--primer-borderWidth-thin, 1px)*2)}.SegmentedControl-item .Button--medium{height:calc(var(--primer-control-medium-size, 32px) - var(--primer-control-xsmall-paddingInline-condensed, 4px)*2 - var(--primer-borderWidth-thin, 1px)*2);padding:0 calc(var(--primer-control-medium-paddingInline-normal, 12px) - var(--primer-control-xsmall-paddingInline-condensed, 4px))}.SegmentedControl-item .Button--medium.Button--iconOnly{width:calc(var(--primer-control-medium-size, 32px) - var(--primer-control-xsmall-paddingInline-condensed, 4px)*2 - var(--primer-borderWidth-thin, 1px)*2)}.SegmentedControl-item .Button--large{height:calc(var(--primer-control-large-size, 40px) - var(--primer-control-xsmall-paddingInline-condensed, 4px)*2 - var(--primer-borderWidth-thin, 1px)*2);padding:0 calc(var(--primer-control-large-paddingInline-spacious, 16px) - var(--primer-control-xsmall-paddingInline-condensed, 4px))}.SegmentedControl-item .Button--large.Button--iconOnly{width:calc(var(--primer-control-large-size, 40px) - var(--primer-control-xsmall-paddingInline-condensed, 4px)*2 - var(--primer-borderWidth-thin, 1px)*2)}.SegmentedControl-item .Button--iconOnly{padding:initial}.SegmentedControl-item .Button--invisible.Button--invisible-noVisuals .Button-label{color:var(--color-btn-text)}.SegmentedControl--fullWidth{display:flex}.SegmentedControl--fullWidth .SegmentedControl-item{flex:1;justify-content:center}.SegmentedControl--fullWidth .Button--iconOnly,.SegmentedControl--fullWidth .Button-withTooltip{width:100%}
|
1
|
+
.SegmentedControl{background-color:var(--color-segmented-control-bg);border-radius:var(--primer-borderRadius-medium,6px);box-shadow:var(--primer-borderInset-thin,inset 0 0 0 max(1px,.0625rem)) var(--color-border-default);display:inline-flex;list-style:none}.SegmentedControl-item{border:var(--primer-borderWidth-thin,max(1px,.0625rem)) solid #0000;border-radius:var(--primer-borderRadius-medium,6px);display:inline-flex;padding:var(--primer-control-xsmall-paddingInline-condensed,4px);position:relative}.SegmentedControl-item.SegmentedControl-item--selected{background-color:var(--color-btn-bg);border-color:var(--color-segmented-control-button-selected-border)}.SegmentedControl-item.SegmentedControl-item--selected .Button{font-weight:var(--base-text-weight-semibold,600)}.SegmentedControl-item.SegmentedControl-item--selected .Button:hover{background-color:initial}.SegmentedControl-item.SegmentedControl-item--selected+.SegmentedControl-item:before,.SegmentedControl-item.SegmentedControl-item--selected:before{border-color:#0000}.SegmentedControl-item .Button-label[data-content]:before{content:attr(data-content);display:block;font-weight:var(--base-text-weight-semibold,600);height:0;visibility:hidden}.SegmentedControl-item:before{border-left:var(--primer-borderWidth-thin,max(1px,.0625rem)) solid var(--color-border-default);content:"";inset:0 0 0 -1px;margin-bottom:var(--primer-control-medium-paddingBlock,6px);margin-top:var(--primer-control-medium-paddingBlock,6px);position:absolute}.SegmentedControl-item .Button{border:0;color:var(--color-btn-text);font-weight:var(--base-text-weight-normal,400);transition:none}.SegmentedControl-item .Button:focus-visible{border-radius:calc(var(--primer-borderRadius-medium, 6px) - 5px);outline-offset:calc(var(--primer-control-xsmall-paddingInline-condensed, 4px) - var(--primer-borderWidth-thin, 1px))}.SegmentedControl-item .Button--small{height:calc(var(--primer-control-small-size, 28px) - var(--primer-control-xsmall-paddingInline-condensed, 4px)*2 - var(--primer-borderWidth-thin, 1px)*2);padding:0 calc(var(--primer-control-small-paddingInline-condensed, 8px) - var(--primer-control-xsmall-paddingInline-condensed, 4px))}.SegmentedControl-item .Button--small.Button--iconOnly{width:calc(var(--primer-control-medium-size, 32px) - var(--primer-control-xsmall-paddingInline-condensed, 4px)*2 - var(--primer-borderWidth-thin, 1px)*2)}.SegmentedControl-item .Button--small.Button--iconOnly:before{content:"";height:100%;left:50%;min-height:var(--primer-control-medium-size,32px);min-width:var(--primer-control-medium-size,32px);position:absolute;top:50%;transform:translateX(-50%) translateY(-50%);width:100%}.SegmentedControl-item .Button--medium{height:calc(var(--primer-control-medium-size, 32px) - var(--primer-control-xsmall-paddingInline-condensed, 4px)*2 - var(--primer-borderWidth-thin, 1px)*2);padding:0 calc(var(--primer-control-medium-paddingInline-normal, 12px) - var(--primer-control-xsmall-paddingInline-condensed, 4px))}.SegmentedControl-item .Button--medium.Button--iconOnly{width:calc(var(--primer-control-medium-size, 32px) - var(--primer-control-xsmall-paddingInline-condensed, 4px)*2 - var(--primer-borderWidth-thin, 1px)*2)}.SegmentedControl-item .Button--medium.Button--iconOnly:before{content:"";height:100%;left:50%;min-height:var(--primer-control-medium-size,32px);min-width:var(--primer-control-medium-size,32px);position:absolute;top:50%;transform:translateX(-50%) translateY(-50%);width:100%}.SegmentedControl-item .Button--large{height:calc(var(--primer-control-large-size, 40px) - var(--primer-control-xsmall-paddingInline-condensed, 4px)*2 - var(--primer-borderWidth-thin, 1px)*2);padding:0 calc(var(--primer-control-large-paddingInline-spacious, 16px) - var(--primer-control-xsmall-paddingInline-condensed, 4px))}.SegmentedControl-item .Button--large.Button--iconOnly{width:calc(var(--primer-control-large-size, 40px) - var(--primer-control-xsmall-paddingInline-condensed, 4px)*2 - var(--primer-borderWidth-thin, 1px)*2)}.SegmentedControl-item .Button--large.Button--iconOnly:before{content:"";height:100%;left:50%;min-height:var(--primer-control-large-size,40px);min-width:var(--primer-control-large-size,40px);position:absolute;top:50%;transform:translateX(-50%) translateY(-50%);width:100%}.SegmentedControl-item .Button--iconOnly{padding:initial}.SegmentedControl-item .Button--invisible.Button--invisible-noVisuals .Button-label{color:var(--color-btn-text)}.SegmentedControl--fullWidth{display:flex}.SegmentedControl--fullWidth .SegmentedControl-item{flex:1;justify-content:center}.SegmentedControl--fullWidth .Button--iconOnly,.SegmentedControl--fullWidth .Button-withTooltip{width:100%}
|
@@ -1 +1 @@
|
|
1
|
-
{"name":"alpha/segmented_control","selectors":[".SegmentedControl",".SegmentedControl-item",".SegmentedControl-item.SegmentedControl-item--selected",".SegmentedControl-item.SegmentedControl-item--selected .Button",".SegmentedControl-item.SegmentedControl-item--selected .Button:hover",".SegmentedControl-item.SegmentedControl-item--selected+.SegmentedControl-item:before",".SegmentedControl-item.SegmentedControl-item--selected:before",".SegmentedControl-item .Button-label[data-content]:before",".SegmentedControl-item:before",".SegmentedControl-item .Button",".SegmentedControl-item .Button:focus-visible",".SegmentedControl-item .Button--small",".SegmentedControl-item .Button--small.Button--iconOnly",".SegmentedControl-item .Button--medium",".SegmentedControl-item .Button--medium.Button--iconOnly",".SegmentedControl-item .Button--large",".SegmentedControl-item .Button--large.Button--iconOnly",".SegmentedControl-item .Button--iconOnly",".SegmentedControl-item .Button--invisible.Button--invisible-noVisuals .Button-label",".SegmentedControl--fullWidth",".SegmentedControl--fullWidth .SegmentedControl-item",".SegmentedControl--fullWidth .Button--iconOnly",".SegmentedControl--fullWidth .Button-withTooltip"]}
|
1
|
+
{"name":"alpha/segmented_control","selectors":[".SegmentedControl",".SegmentedControl-item",".SegmentedControl-item.SegmentedControl-item--selected",".SegmentedControl-item.SegmentedControl-item--selected .Button",".SegmentedControl-item.SegmentedControl-item--selected .Button:hover",".SegmentedControl-item.SegmentedControl-item--selected+.SegmentedControl-item:before",".SegmentedControl-item.SegmentedControl-item--selected:before",".SegmentedControl-item .Button-label[data-content]:before",".SegmentedControl-item:before",".SegmentedControl-item .Button",".SegmentedControl-item .Button:focus-visible",".SegmentedControl-item .Button--small",".SegmentedControl-item .Button--small.Button--iconOnly",".SegmentedControl-item .Button--small.Button--iconOnly:before",".SegmentedControl-item .Button--medium",".SegmentedControl-item .Button--medium.Button--iconOnly",".SegmentedControl-item .Button--medium.Button--iconOnly:before",".SegmentedControl-item .Button--large",".SegmentedControl-item .Button--large.Button--iconOnly",".SegmentedControl-item .Button--large.Button--iconOnly:before",".SegmentedControl-item .Button--iconOnly",".SegmentedControl-item .Button--invisible.Button--invisible-noVisuals .Button-label",".SegmentedControl--fullWidth",".SegmentedControl--fullWidth .SegmentedControl-item",".SegmentedControl--fullWidth .Button--iconOnly",".SegmentedControl--fullWidth .Button-withTooltip"]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["segmented_control.pcss"],"names":[],"mappings":"AAEA,kBAGE,kDAAmD,CACnD,mDAAqD,CACrD,mGAAuG,CAJvG,mBAAoB,CACpB,eAIF,CAEA,uBAGE,mEAA6E,CAC7E,mDAAqD,CAFrD,mBAAoB,CAGpB,gEAAkE,CAJlE,
|
1
|
+
{"version":3,"sources":["segmented_control.pcss","<no source>"],"names":[],"mappings":"AAEA,kBAGE,kDAAmD,CACnD,mDAAqD,CACrD,mGAAuG,CAJvG,mBAAoB,CACpB,eAIF,CAEA,uBAGE,mEAA6E,CAC7E,mDAAqD,CAFrD,mBAAoB,CAGpB,gEAAkE,CAJlE,iBA0GF,CAnGE,uDACE,oCAAqC,CACrC,kEAiBF,CAfE,+DACE,gDAKF,CAHE,qEACE,wBACF,CAOF,mJACE,kBACF,CAIF,0DAKE,0BAA2B,CAJ3B,aAAc,CAEd,gDAAkD,CADlD,QAAS,CAET,iBAEF,CAGA,8BAME,8FAAkG,CADlG,UAAW,CAHX,gBAAiB,CAEjB,2DAA6D,CAD7D,wDAA0D,CAF1D,iBAMF,CAGA,+BACE,QAAS,CAGT,2BAA4B,CAF5B,8CAAgD,CAChD,eAOF,CAJE,6CAEE,gEAAiE,CADjE,oHAEF,CAGF,sCACE,yJAA8J,CAC9J,oIASF,CAPE,uDACE,yJAKF,CAFI,8DC/ER,WAAA,YAAA,SAAA,kDAAA,iDAAA,kBAAA,QAAA,4CAAA,UD+E8G,CAK5G,uCACE,0JAA+J,CAC/J,mIASF,CAPE,wDACE,yJAKF,CAFI,+DC5FR,WAAA,YAAA,SAAA,kDAAA,iDAAA,kBAAA,QAAA,4CAAA,UD4F8G,CAK5G,sCACE,yJAA8J,CAC9J,oIASF,CAPE,uDACE,wJAKF,CAFI,8DCzGR,WAAA,YAAA,SAAA,iDAAA,gDAAA,kBAAA,QAAA,4CAAA,UDyG4G,CAK1G,yCACE,eACF,CAEA,oFACE,2BACF,CAIF,6BACE,YAYF,CAVE,oDACE,MAAO,CACP,sBACF,CAGA,gGAEE,UACF","file":"segmented_control.css","sourcesContent":["/* SegmentedControl */\n\n.SegmentedControl {\n display: inline-flex;\n list-style: none;\n background-color: var(--color-segmented-control-bg);\n border-radius: var(--primer-borderRadius-medium, 6px);\n box-shadow: var(--primer-borderInset-thin, inset 0 0 0 max(1px, 0.0625rem)) var(--color-border-default);\n}\n\n.SegmentedControl-item {\n position: relative;\n display: inline-flex;\n border: var(--primer-borderWidth-thin, max(1px, 0.0625rem)) solid transparent;\n border-radius: var(--primer-borderRadius-medium, 6px);\n padding: var(--primer-control-xsmall-paddingInline-condensed, 4px);\n\n /* Selected ---------------------------------------- */\n &.SegmentedControl-item--selected {\n background-color: var(--color-btn-bg);\n border-color: var(--color-segmented-control-button-selected-border);\n\n & .Button {\n font-weight: var(--base-text-weight-semibold, 600);\n\n &:hover {\n background-color: transparent;\n }\n }\n\n &::before {\n border-color: transparent;\n }\n\n & + .SegmentedControl-item::before {\n border-color: transparent;\n }\n }\n\n /* renders a visibly hidden \"copy\" of the text in bold, reserving box space for when text becomes bold on selected */\n & .Button-label[data-content]::before {\n display: block;\n height: 0;\n font-weight: var(--base-text-weight-semibold, 600);\n visibility: hidden;\n content: attr(data-content);\n }\n\n /* Separator lines */\n &::before {\n position: absolute;\n inset: 0 0 0 -1px;\n margin-top: var(--primer-control-medium-paddingBlock, 6px);\n margin-bottom: var(--primer-control-medium-paddingBlock, 6px);\n content: '';\n border-left: var(--primer-borderWidth-thin, max(1px, 0.0625rem)) solid var(--color-border-default);\n }\n\n /* Button ----------------------------------------- */\n & .Button {\n border: 0;\n font-weight: var(--base-text-weight-normal, 400);\n transition: none;\n color: var(--color-btn-text);\n\n &:focus-visible {\n outline-offset: calc(var(--primer-control-xsmall-paddingInline-condensed, 4px) - var(--primer-borderWidth-thin, 1px));\n border-radius: calc(var(--primer-borderRadius-medium, 6px) - 5px);\n }\n }\n\n & .Button--small {\n height: calc(var(--primer-control-small-size, 28px) - var(--primer-control-xsmall-paddingInline-condensed, 4px) * 2 - var(--primer-borderWidth-thin, 1px) * 2);\n padding: 0 calc(var(--primer-control-small-paddingInline-condensed, 8px) - var(--primer-control-xsmall-paddingInline-condensed, 4px));\n\n &.Button--iconOnly {\n width: calc(var(--primer-control-medium-size, 32px) - var(--primer-control-xsmall-paddingInline-condensed, 4px) * 2 - var(--primer-borderWidth-thin, 1px) * 2);\n\n &::before {\n @mixin minTouchTarget var(--primer-control-medium-size, 32px), var(--primer-control-medium-size, 32px);\n }\n }\n }\n\n & .Button--medium {\n height: calc(var(--primer-control-medium-size, 32px) - var(--primer-control-xsmall-paddingInline-condensed, 4px) * 2 - var(--primer-borderWidth-thin, 1px) * 2);\n padding: 0 calc(var(--primer-control-medium-paddingInline-normal, 12px) - var(--primer-control-xsmall-paddingInline-condensed, 4px));\n\n &.Button--iconOnly {\n width: calc(var(--primer-control-medium-size, 32px) - var(--primer-control-xsmall-paddingInline-condensed, 4px) * 2 - var(--primer-borderWidth-thin, 1px) * 2);\n\n &::before {\n @mixin minTouchTarget var(--primer-control-medium-size, 32px), var(--primer-control-medium-size, 32px);\n }\n }\n }\n\n & .Button--large {\n height: calc(var(--primer-control-large-size, 40px) - var(--primer-control-xsmall-paddingInline-condensed, 4px) * 2 - var(--primer-borderWidth-thin, 1px) * 2);\n padding: 0 calc(var(--primer-control-large-paddingInline-spacious, 16px) - var(--primer-control-xsmall-paddingInline-condensed, 4px));\n\n &.Button--iconOnly {\n width: calc(var(--primer-control-large-size, 40px) - var(--primer-control-xsmall-paddingInline-condensed, 4px) * 2 - var(--primer-borderWidth-thin, 1px) * 2);\n\n &::before {\n @mixin minTouchTarget var(--primer-control-large-size, 40px), var(--primer-control-large-size, 40px);\n }\n }\n }\n\n & .Button--iconOnly {\n padding: initial;\n }\n\n & .Button--invisible.Button--invisible-noVisuals .Button-label {\n color: var(--color-btn-text);\n }\n}\n\n/* fullWidth */\n.SegmentedControl--fullWidth {\n display: flex;\n\n & .SegmentedControl-item {\n flex: 1;\n justify-content: center;\n }\n\n /* is .Button-withTooltip used anywhere? can't find use of it */\n & .Button--iconOnly,\n & .Button-withTooltip {\n width: 100%;\n }\n}\n",null]}
|
@@ -75,6 +75,10 @@
|
|
75
75
|
|
76
76
|
&.Button--iconOnly {
|
77
77
|
width: calc(var(--primer-control-medium-size, 32px) - var(--primer-control-xsmall-paddingInline-condensed, 4px) * 2 - var(--primer-borderWidth-thin, 1px) * 2);
|
78
|
+
|
79
|
+
&::before {
|
80
|
+
@mixin minTouchTarget var(--primer-control-medium-size, 32px), var(--primer-control-medium-size, 32px);
|
81
|
+
}
|
78
82
|
}
|
79
83
|
}
|
80
84
|
|
@@ -84,6 +88,10 @@
|
|
84
88
|
|
85
89
|
&.Button--iconOnly {
|
86
90
|
width: calc(var(--primer-control-medium-size, 32px) - var(--primer-control-xsmall-paddingInline-condensed, 4px) * 2 - var(--primer-borderWidth-thin, 1px) * 2);
|
91
|
+
|
92
|
+
&::before {
|
93
|
+
@mixin minTouchTarget var(--primer-control-medium-size, 32px), var(--primer-control-medium-size, 32px);
|
94
|
+
}
|
87
95
|
}
|
88
96
|
}
|
89
97
|
|
@@ -93,6 +101,10 @@
|
|
93
101
|
|
94
102
|
&.Button--iconOnly {
|
95
103
|
width: calc(var(--primer-control-large-size, 40px) - var(--primer-control-xsmall-paddingInline-condensed, 4px) * 2 - var(--primer-borderWidth-thin, 1px) * 2);
|
104
|
+
|
105
|
+
&::before {
|
106
|
+
@mixin minTouchTarget var(--primer-control-large-size, 40px), var(--primer-control-large-size, 40px);
|
107
|
+
}
|
96
108
|
}
|
97
109
|
}
|
98
110
|
|
@@ -26,7 +26,7 @@ module Primer
|
|
26
26
|
|
27
27
|
# @example Basic usage
|
28
28
|
#
|
29
|
-
# <%= render(Primer::Alpha::SegmentedControl.new) do |c| %>
|
29
|
+
# <%= render(Primer::Alpha::SegmentedControl.new("aria-label": "File view")) do |c| %>
|
30
30
|
# <%= c.with_item(label: "Preview", selected: true) %>
|
31
31
|
# <%= c.with_item(label: "Raw") %>
|
32
32
|
# <%= c.with_item(label: "Blame") %>
|
@@ -34,28 +34,28 @@ module Primer
|
|
34
34
|
#
|
35
35
|
# @example Small
|
36
36
|
#
|
37
|
-
# <%= render(Primer::Alpha::SegmentedControl.new(size: :small)) do |c| %>
|
37
|
+
# <%= render(Primer::Alpha::SegmentedControl.new("aria-label": "File view", size: :small)) do |c| %>
|
38
38
|
# <%= c.with_item(label: "Preview", selected: true) %>
|
39
39
|
# <%= c.with_item(label: "Raw") %>
|
40
40
|
# <%= c.with_item(label: "Blame") %>
|
41
41
|
# <% end %>
|
42
42
|
#
|
43
43
|
# @example With icons
|
44
|
-
# <%= render(Primer::Alpha::SegmentedControl.new) do |c| %>
|
44
|
+
# <%= render(Primer::Alpha::SegmentedControl.new("aria-label": "File view")) do |c| %>
|
45
45
|
# <%= c.with_item(label: "Preview", icon: :eye, selected: true) %>
|
46
46
|
# <%= c.with_item(label: "Raw", icon: :"file-code") %>
|
47
47
|
# <%= c.with_item(label: "Blame", icon: :people) %>
|
48
48
|
# <% end %>
|
49
49
|
#
|
50
50
|
# @example With icons only
|
51
|
-
# <%= render(Primer::Alpha::SegmentedControl.new(hide_labels: true)) do |c| %>
|
51
|
+
# <%= render(Primer::Alpha::SegmentedControl.new("aria-label": "File view", hide_labels: true)) do |c| %>
|
52
52
|
# <%= c.with_item(label: "Preview", icon: :eye, selected: true) %>
|
53
53
|
# <%= c.with_item(label: "Raw", icon: :"file-code") %>
|
54
54
|
# <%= c.with_item(label: "Blame", icon: :people) %>
|
55
55
|
# <% end %>
|
56
56
|
#
|
57
57
|
# @example Fill width of parent
|
58
|
-
# <%= render(Primer::Alpha::SegmentedControl.new(full_width: true)) do |c| %>
|
58
|
+
# <%= render(Primer::Alpha::SegmentedControl.new("aria-label": "File view", full_width: true)) do |c| %>
|
59
59
|
# <%= c.with_item(label: "Preview", icon: :eye, selected: true) %>
|
60
60
|
# <%= c.with_item(label: "Raw", icon: :"file-code") %>
|
61
61
|
# <%= c.with_item(label: "Blame", icon: :people) %>
|
@@ -43,15 +43,15 @@ module Primer
|
|
43
43
|
|
44
44
|
# @example Default
|
45
45
|
# <%= render(Primer::Alpha::TabPanels.new(label: "With panels")) do |component| %>
|
46
|
-
# <% component.with_tab(id: "tab-1", selected: true) do |
|
47
|
-
# <%
|
48
|
-
# <%
|
46
|
+
# <% component.with_tab(id: "tab-1", selected: true) do |tab| %>
|
47
|
+
# <% tab.with_text { "Tab 1" } %>
|
48
|
+
# <% tab.with_panel do %>
|
49
49
|
# Panel 1
|
50
50
|
# <% end %>
|
51
51
|
# <% end %>
|
52
|
-
# <% component.with_tab(id: "tab-2") do |
|
53
|
-
# <%
|
54
|
-
# <%
|
52
|
+
# <% component.with_tab(id: "tab-2") do |tab| %>
|
53
|
+
# <% tab.with_text { "Tab 2" } %>
|
54
|
+
# <% tab.with_panel do %>
|
55
55
|
# Panel 2
|
56
56
|
# <% end %>
|
57
57
|
# <% end %>
|
@@ -1,6 +1,6 @@
|
|
1
1
|
<%= render(Primer::BaseComponent.new(tag: "toggle-switch", **@system_arguments)) do %>
|
2
|
-
<%= render(Primer::
|
3
|
-
<%= render(Primer::
|
2
|
+
<%= render(Primer::Beta::Octicon.new(size: :small, color: :danger, icon: :alert, hidden: "true", data: { target: "toggle-switch.errorIcon" })) %>
|
3
|
+
<%= render(Primer::Beta::Spinner.new(size: :small, hidden: "true", data: { target: "toggle-switch.loadingSpinner" })) %>
|
4
4
|
<%= render(Primer::Beta::Text.new(aria: { hidden: true }, classes: "ToggleSwitch-status")) do %>
|
5
5
|
<%= render(Primer::Box.new(classes: "ToggleSwitch-statusOn").with_content("On")) %>
|
6
6
|
<%= render(Primer::Box.new(classes: "ToggleSwitch-statusOff").with_content("Off")) %>
|
@@ -21,22 +21,22 @@ module Primer
|
|
21
21
|
STATUS_LABEL_POSITION_OPTIONS = STATUS_LABEL_POSITION_MAPPINGS.keys.freeze
|
22
22
|
|
23
23
|
# @example Default
|
24
|
-
# <%= render(Primer::Alpha::ToggleSwitch.new(src: "/
|
24
|
+
# <%= render(Primer::Alpha::ToggleSwitch.new(src: "/view-components/rails-app/toggle_switch")) %>
|
25
25
|
#
|
26
26
|
# @example Checked
|
27
|
-
# <%= render(Primer::Alpha::ToggleSwitch.new(src: "/
|
27
|
+
# <%= render(Primer::Alpha::ToggleSwitch.new(src: "/view-components/rails-app/toggle_switch", checked: true)) %>
|
28
28
|
#
|
29
29
|
# @example Disabled
|
30
|
-
# <%= render(Primer::Alpha::ToggleSwitch.new(src: "/
|
30
|
+
# <%= render(Primer::Alpha::ToggleSwitch.new(src: "/view-components/rails-app/toggle_switch", enabled: false)) %>
|
31
31
|
#
|
32
32
|
# @example Checked and Disabled
|
33
|
-
# <%= render(Primer::Alpha::ToggleSwitch.new(src: "/
|
33
|
+
# <%= render(Primer::Alpha::ToggleSwitch.new(src: "/view-components/rails-app/toggle_switch", checked: true, enabled: false)) %>
|
34
34
|
#
|
35
35
|
# @example Small
|
36
|
-
# <%= render(Primer::Alpha::ToggleSwitch.new(src: "/
|
36
|
+
# <%= render(Primer::Alpha::ToggleSwitch.new(src: "/view-components/rails-app/toggle_switch", size: :small)) %>
|
37
37
|
#
|
38
38
|
# @example With status label positioned at the end
|
39
|
-
# <%= render(Primer::Alpha::ToggleSwitch.new(src: "/
|
39
|
+
# <%= render(Primer::Alpha::ToggleSwitch.new(src: "/view-components/rails-app/toggle_switch", status_label_position: :end)) %>
|
40
40
|
#
|
41
41
|
# @param src [String] The URL to POST to when the toggle switch is toggled. If `nil`, the toggle switch will not make any requests.
|
42
42
|
# @param csrf_token [String] A CSRF token that will be sent to the server as "authenticity_token" when the toggle switch is toggled. Unused if `src` is `nil`.
|
@@ -9,7 +9,7 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (
|
|
9
9
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
10
10
|
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
11
11
|
};
|
12
|
-
var _ToolTipElement_instances, _ToolTipElement_abortController, _ToolTipElement_align, _ToolTipElement_side, _ToolTipElement_allowUpdatePosition, _ToolTipElement_update, _ToolTipElement_updatePosition;
|
12
|
+
var _ToolTipElement_instances, _ToolTipElement_abortController, _ToolTipElement_align, _ToolTipElement_side, _ToolTipElement_allowUpdatePosition, _ToolTipElement_update, _ToolTipElement_updateControlReference, _ToolTipElement_updateDirection, _ToolTipElement_updatePosition;
|
13
13
|
import { getAnchoredPosition } from '@primer/behaviors';
|
14
14
|
const TOOLTIP_OPEN_CLASS = 'tooltip-open';
|
15
15
|
const TOOLTIP_ARROW_EDGE_OFFSET = 6;
|
@@ -187,6 +187,8 @@ class ToolTipElement extends HTMLElement {
|
|
187
187
|
}
|
188
188
|
connectedCallback() {
|
189
189
|
var _a;
|
190
|
+
__classPrivateFieldGet(this, _ToolTipElement_instances, "m", _ToolTipElement_updateControlReference).call(this);
|
191
|
+
__classPrivateFieldGet(this, _ToolTipElement_instances, "m", _ToolTipElement_updateDirection).call(this);
|
190
192
|
if (!this.shadowRoot) {
|
191
193
|
const shadow = this.attachShadow({ mode: 'open' });
|
192
194
|
// eslint-disable-next-line github/no-inner-html
|
@@ -241,77 +243,13 @@ class ToolTipElement extends HTMLElement {
|
|
241
243
|
}
|
242
244
|
}
|
243
245
|
attributeChangedCallback(name) {
|
246
|
+
if (!this.isConnected)
|
247
|
+
return;
|
244
248
|
if (name === 'id' || name === 'data-type') {
|
245
|
-
|
246
|
-
return;
|
247
|
-
if (this.type === 'label') {
|
248
|
-
let labelledBy = this.control.getAttribute('aria-labelledby');
|
249
|
-
if (labelledBy) {
|
250
|
-
if (!labelledBy.split(' ').includes(this.id)) {
|
251
|
-
labelledBy = `${labelledBy} ${this.id}`;
|
252
|
-
}
|
253
|
-
else {
|
254
|
-
labelledBy = `${labelledBy}`;
|
255
|
-
}
|
256
|
-
}
|
257
|
-
else {
|
258
|
-
labelledBy = this.id;
|
259
|
-
}
|
260
|
-
this.control.setAttribute('aria-labelledby', labelledBy);
|
261
|
-
// Prevent duplicate accessible name announcements.
|
262
|
-
this.setAttribute('aria-hidden', 'true');
|
263
|
-
}
|
264
|
-
else {
|
265
|
-
let describedBy = this.control.getAttribute('aria-describedby');
|
266
|
-
if (describedBy) {
|
267
|
-
if (!describedBy.split(' ').includes(this.id)) {
|
268
|
-
describedBy = `${describedBy} ${this.id}`;
|
269
|
-
}
|
270
|
-
else {
|
271
|
-
describedBy = `${describedBy}`;
|
272
|
-
}
|
273
|
-
}
|
274
|
-
else {
|
275
|
-
describedBy = this.id;
|
276
|
-
}
|
277
|
-
this.control.setAttribute('aria-describedby', describedBy);
|
278
|
-
}
|
249
|
+
__classPrivateFieldGet(this, _ToolTipElement_instances, "m", _ToolTipElement_updateControlReference).call(this);
|
279
250
|
}
|
280
251
|
else if (name === 'data-direction') {
|
281
|
-
this.
|
282
|
-
const direction = this.direction;
|
283
|
-
if (direction === 'n') {
|
284
|
-
__classPrivateFieldSet(this, _ToolTipElement_align, 'center', "f");
|
285
|
-
__classPrivateFieldSet(this, _ToolTipElement_side, 'outside-top', "f");
|
286
|
-
}
|
287
|
-
else if (direction === 'ne') {
|
288
|
-
__classPrivateFieldSet(this, _ToolTipElement_align, 'start', "f");
|
289
|
-
__classPrivateFieldSet(this, _ToolTipElement_side, 'outside-top', "f");
|
290
|
-
}
|
291
|
-
else if (direction === 'e') {
|
292
|
-
__classPrivateFieldSet(this, _ToolTipElement_align, 'center', "f");
|
293
|
-
__classPrivateFieldSet(this, _ToolTipElement_side, 'outside-right', "f");
|
294
|
-
}
|
295
|
-
else if (direction === 'se') {
|
296
|
-
__classPrivateFieldSet(this, _ToolTipElement_align, 'start', "f");
|
297
|
-
__classPrivateFieldSet(this, _ToolTipElement_side, 'outside-bottom', "f");
|
298
|
-
}
|
299
|
-
else if (direction === 's') {
|
300
|
-
__classPrivateFieldSet(this, _ToolTipElement_align, 'center', "f");
|
301
|
-
__classPrivateFieldSet(this, _ToolTipElement_side, 'outside-bottom', "f");
|
302
|
-
}
|
303
|
-
else if (direction === 'sw') {
|
304
|
-
__classPrivateFieldSet(this, _ToolTipElement_align, 'end', "f");
|
305
|
-
__classPrivateFieldSet(this, _ToolTipElement_side, 'outside-bottom', "f");
|
306
|
-
}
|
307
|
-
else if (direction === 'w') {
|
308
|
-
__classPrivateFieldSet(this, _ToolTipElement_align, 'center', "f");
|
309
|
-
__classPrivateFieldSet(this, _ToolTipElement_side, 'outside-left', "f");
|
310
|
-
}
|
311
|
-
else if (direction === 'nw') {
|
312
|
-
__classPrivateFieldSet(this, _ToolTipElement_align, 'end', "f");
|
313
|
-
__classPrivateFieldSet(this, _ToolTipElement_side, 'outside-top', "f");
|
314
|
-
}
|
252
|
+
__classPrivateFieldGet(this, _ToolTipElement_instances, "m", _ToolTipElement_updateDirection).call(this);
|
315
253
|
}
|
316
254
|
}
|
317
255
|
}
|
@@ -327,6 +265,76 @@ _ToolTipElement_abortController = new WeakMap(), _ToolTipElement_align = new Wea
|
|
327
265
|
}
|
328
266
|
__classPrivateFieldGet(this, _ToolTipElement_instances, "m", _ToolTipElement_updatePosition).call(this);
|
329
267
|
}
|
268
|
+
}, _ToolTipElement_updateControlReference = function _ToolTipElement_updateControlReference() {
|
269
|
+
if (!this.id || !this.control)
|
270
|
+
return;
|
271
|
+
if (this.type === 'label') {
|
272
|
+
let labelledBy = this.control.getAttribute('aria-labelledby');
|
273
|
+
if (labelledBy) {
|
274
|
+
if (!labelledBy.split(' ').includes(this.id)) {
|
275
|
+
labelledBy = `${labelledBy} ${this.id}`;
|
276
|
+
}
|
277
|
+
else {
|
278
|
+
labelledBy = `${labelledBy}`;
|
279
|
+
}
|
280
|
+
}
|
281
|
+
else {
|
282
|
+
labelledBy = this.id;
|
283
|
+
}
|
284
|
+
this.control.setAttribute('aria-labelledby', labelledBy);
|
285
|
+
// Prevent duplicate accessible name announcements.
|
286
|
+
this.setAttribute('aria-hidden', 'true');
|
287
|
+
}
|
288
|
+
else {
|
289
|
+
let describedBy = this.control.getAttribute('aria-describedby');
|
290
|
+
if (describedBy) {
|
291
|
+
if (!describedBy.split(' ').includes(this.id)) {
|
292
|
+
describedBy = `${describedBy} ${this.id}`;
|
293
|
+
}
|
294
|
+
else {
|
295
|
+
describedBy = `${describedBy}`;
|
296
|
+
}
|
297
|
+
}
|
298
|
+
else {
|
299
|
+
describedBy = this.id;
|
300
|
+
}
|
301
|
+
this.control.setAttribute('aria-describedby', describedBy);
|
302
|
+
}
|
303
|
+
}, _ToolTipElement_updateDirection = function _ToolTipElement_updateDirection() {
|
304
|
+
this.classList.remove(...DIRECTION_CLASSES);
|
305
|
+
const direction = this.direction;
|
306
|
+
if (direction === 'n') {
|
307
|
+
__classPrivateFieldSet(this, _ToolTipElement_align, 'center', "f");
|
308
|
+
__classPrivateFieldSet(this, _ToolTipElement_side, 'outside-top', "f");
|
309
|
+
}
|
310
|
+
else if (direction === 'ne') {
|
311
|
+
__classPrivateFieldSet(this, _ToolTipElement_align, 'start', "f");
|
312
|
+
__classPrivateFieldSet(this, _ToolTipElement_side, 'outside-top', "f");
|
313
|
+
}
|
314
|
+
else if (direction === 'e') {
|
315
|
+
__classPrivateFieldSet(this, _ToolTipElement_align, 'center', "f");
|
316
|
+
__classPrivateFieldSet(this, _ToolTipElement_side, 'outside-right', "f");
|
317
|
+
}
|
318
|
+
else if (direction === 'se') {
|
319
|
+
__classPrivateFieldSet(this, _ToolTipElement_align, 'start', "f");
|
320
|
+
__classPrivateFieldSet(this, _ToolTipElement_side, 'outside-bottom', "f");
|
321
|
+
}
|
322
|
+
else if (direction === 's') {
|
323
|
+
__classPrivateFieldSet(this, _ToolTipElement_align, 'center', "f");
|
324
|
+
__classPrivateFieldSet(this, _ToolTipElement_side, 'outside-bottom', "f");
|
325
|
+
}
|
326
|
+
else if (direction === 'sw') {
|
327
|
+
__classPrivateFieldSet(this, _ToolTipElement_align, 'end', "f");
|
328
|
+
__classPrivateFieldSet(this, _ToolTipElement_side, 'outside-bottom', "f");
|
329
|
+
}
|
330
|
+
else if (direction === 'w') {
|
331
|
+
__classPrivateFieldSet(this, _ToolTipElement_align, 'center', "f");
|
332
|
+
__classPrivateFieldSet(this, _ToolTipElement_side, 'outside-left', "f");
|
333
|
+
}
|
334
|
+
else if (direction === 'nw') {
|
335
|
+
__classPrivateFieldSet(this, _ToolTipElement_align, 'end', "f");
|
336
|
+
__classPrivateFieldSet(this, _ToolTipElement_side, 'outside-top', "f");
|
337
|
+
}
|
330
338
|
}, _ToolTipElement_updatePosition = function _ToolTipElement_updatePosition() {
|
331
339
|
if (!this.control)
|
332
340
|
return;
|
@@ -186,6 +186,8 @@ class ToolTipElement extends HTMLElement {
|
|
186
186
|
}
|
187
187
|
|
188
188
|
connectedCallback() {
|
189
|
+
this.#updateControlReference()
|
190
|
+
this.#updateDirection()
|
189
191
|
if (!this.shadowRoot) {
|
190
192
|
const shadow = this.attachShadow({mode: 'open'})
|
191
193
|
// eslint-disable-next-line github/no-inner-html
|
@@ -259,64 +261,74 @@ class ToolTipElement extends HTMLElement {
|
|
259
261
|
}
|
260
262
|
|
261
263
|
attributeChangedCallback(name: string) {
|
264
|
+
if (!this.isConnected) return
|
265
|
+
|
262
266
|
if (name === 'id' || name === 'data-type') {
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
267
|
+
this.#updateControlReference()
|
268
|
+
} else if (name === 'data-direction') {
|
269
|
+
this.#updateDirection()
|
270
|
+
}
|
271
|
+
}
|
272
|
+
|
273
|
+
#updateControlReference() {
|
274
|
+
if (!this.id || !this.control) return
|
275
|
+
if (this.type === 'label') {
|
276
|
+
let labelledBy = this.control.getAttribute('aria-labelledby')
|
277
|
+
if (labelledBy) {
|
278
|
+
if (!labelledBy.split(' ').includes(this.id)) {
|
279
|
+
labelledBy = `${labelledBy} ${this.id}`
|
272
280
|
} else {
|
273
|
-
labelledBy =
|
281
|
+
labelledBy = `${labelledBy}`
|
274
282
|
}
|
275
|
-
this.control.setAttribute('aria-labelledby', labelledBy)
|
276
|
-
|
277
|
-
// Prevent duplicate accessible name announcements.
|
278
|
-
this.setAttribute('aria-hidden', 'true')
|
279
283
|
} else {
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
284
|
+
labelledBy = this.id
|
285
|
+
}
|
286
|
+
this.control.setAttribute('aria-labelledby', labelledBy)
|
287
|
+
|
288
|
+
// Prevent duplicate accessible name announcements.
|
289
|
+
this.setAttribute('aria-hidden', 'true')
|
290
|
+
} else {
|
291
|
+
let describedBy = this.control.getAttribute('aria-describedby')
|
292
|
+
if (describedBy) {
|
293
|
+
if (!describedBy.split(' ').includes(this.id)) {
|
294
|
+
describedBy = `${describedBy} ${this.id}`
|
287
295
|
} else {
|
288
|
-
describedBy =
|
296
|
+
describedBy = `${describedBy}`
|
289
297
|
}
|
290
|
-
|
291
|
-
|
292
|
-
} else if (name === 'data-direction') {
|
293
|
-
this.classList.remove(...DIRECTION_CLASSES)
|
294
|
-
const direction = this.direction
|
295
|
-
if (direction === 'n') {
|
296
|
-
this.#align = 'center'
|
297
|
-
this.#side = 'outside-top'
|
298
|
-
} else if (direction === 'ne') {
|
299
|
-
this.#align = 'start'
|
300
|
-
this.#side = 'outside-top'
|
301
|
-
} else if (direction === 'e') {
|
302
|
-
this.#align = 'center'
|
303
|
-
this.#side = 'outside-right'
|
304
|
-
} else if (direction === 'se') {
|
305
|
-
this.#align = 'start'
|
306
|
-
this.#side = 'outside-bottom'
|
307
|
-
} else if (direction === 's') {
|
308
|
-
this.#align = 'center'
|
309
|
-
this.#side = 'outside-bottom'
|
310
|
-
} else if (direction === 'sw') {
|
311
|
-
this.#align = 'end'
|
312
|
-
this.#side = 'outside-bottom'
|
313
|
-
} else if (direction === 'w') {
|
314
|
-
this.#align = 'center'
|
315
|
-
this.#side = 'outside-left'
|
316
|
-
} else if (direction === 'nw') {
|
317
|
-
this.#align = 'end'
|
318
|
-
this.#side = 'outside-top'
|
298
|
+
} else {
|
299
|
+
describedBy = this.id
|
319
300
|
}
|
301
|
+
this.control.setAttribute('aria-describedby', describedBy)
|
302
|
+
}
|
303
|
+
}
|
304
|
+
|
305
|
+
#updateDirection() {
|
306
|
+
this.classList.remove(...DIRECTION_CLASSES)
|
307
|
+
const direction = this.direction
|
308
|
+
if (direction === 'n') {
|
309
|
+
this.#align = 'center'
|
310
|
+
this.#side = 'outside-top'
|
311
|
+
} else if (direction === 'ne') {
|
312
|
+
this.#align = 'start'
|
313
|
+
this.#side = 'outside-top'
|
314
|
+
} else if (direction === 'e') {
|
315
|
+
this.#align = 'center'
|
316
|
+
this.#side = 'outside-right'
|
317
|
+
} else if (direction === 'se') {
|
318
|
+
this.#align = 'start'
|
319
|
+
this.#side = 'outside-bottom'
|
320
|
+
} else if (direction === 's') {
|
321
|
+
this.#align = 'center'
|
322
|
+
this.#side = 'outside-bottom'
|
323
|
+
} else if (direction === 'sw') {
|
324
|
+
this.#align = 'end'
|
325
|
+
this.#side = 'outside-bottom'
|
326
|
+
} else if (direction === 'w') {
|
327
|
+
this.#align = 'center'
|
328
|
+
this.#side = 'outside-left'
|
329
|
+
} else if (direction === 'nw') {
|
330
|
+
this.#align = 'end'
|
331
|
+
this.#side = 'outside-top'
|
320
332
|
}
|
321
333
|
}
|
322
334
|
|
@@ -38,15 +38,15 @@ module Primer
|
|
38
38
|
|
39
39
|
# @example Default
|
40
40
|
# <%= render(Primer::Alpha::UnderlinePanels.new(label: "With panels")) do |component| %>
|
41
|
-
# <% component.with_tab(id: "tab-1", selected: true) do |
|
42
|
-
# <%
|
43
|
-
# <%
|
41
|
+
# <% component.with_tab(id: "tab-1", selected: true) do |tab| %>
|
42
|
+
# <% tab.with_text { "Tab 1" } %>
|
43
|
+
# <% tab.with_panel do %>
|
44
44
|
# Panel 1
|
45
45
|
# <% end %>
|
46
46
|
# <% end %>
|
47
|
-
# <% component.with_tab(id: "tab-2") do |
|
48
|
-
# <%
|
49
|
-
# <%
|
47
|
+
# <% component.with_tab(id: "tab-2") do |tab| %>
|
48
|
+
# <% tab.with_text { "Tab 2" } %>
|
49
|
+
# <% tab.with_panel do %>
|
50
50
|
# Panel 2
|
51
51
|
# <% end %>
|
52
52
|
# <% end %>
|
@@ -6,15 +6,16 @@ module Primer
|
|
6
6
|
class AutoComplete
|
7
7
|
# Use `AutoCompleteItem` to list results of an auto-completed search.
|
8
8
|
class Item < Primer::Component
|
9
|
+
warn_on_deprecated_slot_setter
|
9
10
|
status :beta
|
10
11
|
|
11
12
|
ALLOWED_DESCRIPTION_VARIANTS = [:inline, :block].freeze
|
12
13
|
|
13
14
|
# The leading visual rendered before the link.
|
14
15
|
#
|
15
|
-
# @param kwargs [Hash] The arguments accepted by <%= link_to_component(Primer::Beta::Avatar) %> or <%= link_to_component(Primer::
|
16
|
+
# @param kwargs [Hash] The arguments accepted by <%= link_to_component(Primer::Beta::Avatar) %> or <%= link_to_component(Primer::Beta::Octicon) %>
|
16
17
|
renders_one :leading_visual, types: {
|
17
|
-
icon: Primer::
|
18
|
+
icon: Primer::Beta::Octicon,
|
18
19
|
avatar: lambda { |**kwargs|
|
19
20
|
Primer::Beta::Avatar.new(**{ **kwargs, size: 16 })
|
20
21
|
}
|
@@ -22,9 +23,9 @@ module Primer
|
|
22
23
|
|
23
24
|
# The trailing visual rendered after the link.
|
24
25
|
#
|
25
|
-
# @param kwargs [Hash] The arguments accepted by <%= link_to_component(Primer::
|
26
|
+
# @param kwargs [Hash] The arguments accepted by <%= link_to_component(Primer::Beta::Octicon) %>, <%= link_to_component(Primer::Beta::Label) %>, or <%= link_to_component(Primer::Beta::Counter) %>
|
26
27
|
renders_one :trailing_visual, types: {
|
27
|
-
icon: Primer::
|
28
|
+
icon: Primer::Beta::Octicon,
|
28
29
|
label: Primer::Beta::Label,
|
29
30
|
counter: Primer::Beta::Counter
|
30
31
|
}
|