primer_view_components 0.0.88 → 0.0.91
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +44 -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 +0 -0
- data/app/assets/styles/primer_view_components.css.map +1 -0
- data/app/components/primer/alpha/auto_complete.rb +2 -2
- data/app/components/primer/alpha/hidden_text_expander.rb +57 -0
- data/app/components/primer/alpha/layout.rb +34 -32
- data/app/components/primer/alpha/segmented-control-element.js +5 -4
- data/app/components/primer/alpha/tab_nav.rb +20 -20
- data/app/components/primer/alpha/tab_panels.rb +2 -2
- data/app/components/primer/alpha/tool-tip-element.d.ts +1 -3
- data/app/components/primer/alpha/tool-tip-element.js +13 -19
- data/app/components/primer/alpha/tool-tip-element.ts +14 -22
- data/app/components/primer/alpha/tooltip.rb +72 -53
- data/app/components/primer/alpha/underline_nav.rb +16 -16
- data/app/components/primer/alpha/underline_panels.rb +3 -3
- data/app/components/primer/base_component.rb +1 -1
- data/app/components/primer/beta/auto_complete/item.rb +2 -2
- data/app/components/primer/beta/auto_complete.rb +2 -2
- data/app/components/primer/beta/avatar_stack.rb +9 -9
- data/app/components/primer/beta/blankslate.rb +2 -2
- data/app/components/primer/beta/border_box/header.rb +4 -2
- data/app/components/primer/beta/border_box.rb +13 -13
- data/app/components/primer/beta/breadcrumbs.rb +3 -3
- data/app/components/primer/beta/button_group.rb +9 -9
- data/app/components/primer/beta/close_button.rb +41 -0
- data/app/components/primer/beta/counter.rb +113 -0
- data/app/components/primer/{details_component.html.erb → beta/details.html.erb} +0 -0
- data/app/components/primer/beta/details.rb +70 -0
- data/app/components/primer/beta/flash.rb +1 -1
- data/app/components/primer/beta/heading.rb +46 -0
- data/app/components/primer/beta/truncate.rb +17 -17
- data/app/components/primer/blankslate_component.rb +1 -1
- data/app/components/primer/button_component.rb +8 -8
- data/app/components/primer/close_button.rb +2 -34
- data/app/components/primer/counter_component.rb +2 -106
- data/app/components/primer/details_component.rb +2 -63
- data/app/components/primer/dropdown.html.erb +1 -1
- data/app/components/primer/dropdown.rb +15 -15
- data/app/components/primer/dropdown_menu_component.rb +1 -1
- data/app/components/primer/heading_component.rb +2 -39
- data/app/components/primer/hidden_text_expander.rb +2 -48
- data/app/components/primer/icon_button.html.erb +8 -2
- data/app/components/primer/icon_button.rb +7 -0
- data/app/components/primer/image_crop.rb +1 -1
- data/app/components/primer/label_component.rb +2 -1
- data/app/components/primer/layout_component.rb +4 -4
- data/app/components/primer/link_component.rb +1 -1
- data/app/components/primer/menu_component.rb +5 -5
- data/app/components/primer/navigation/tab_component.rb +12 -12
- data/app/components/primer/popover_component.rb +10 -10
- data/app/components/primer/primer.pcss +1 -0
- data/app/components/primer/subhead_component.rb +10 -10
- data/app/components/primer/timeline_item_component.rb +3 -3
- data/app/lib/primer/join_style_arguments_helper.rb +1 -1
- data/app/lib/primer/view_helper.rb +1 -1
- data/lib/primer/view_components/linters/argument_mappers/close_button.rb +2 -2
- data/lib/primer/view_components/linters/close_button_component_migration_counter.rb +2 -2
- data/lib/primer/view_components/linters/flash_migration_counter.rb +1 -1
- data/lib/primer/view_components/linters/helpers/deprecated_components_helpers.rb +5 -0
- data/lib/primer/view_components/version.rb +1 -1
- data/lib/rubocop/cop/primer/component_name_migration.rb +5 -0
- data/lib/tasks/docs.rake +5 -5
- data/static/arguments.yml +87 -87
- data/static/audited_at.json +5 -0
- data/static/constants.json +54 -44
- data/static/statuses.json +11 -6
- metadata +11 -3
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"primer_view_components.css"}
|
@@ -94,12 +94,12 @@ module Primer
|
|
94
94
|
#
|
95
95
|
# @example With custom classes for the input
|
96
96
|
# <%= render(Primer::Alpha::AutoComplete.new(label_text: "Fruits", src: "/auto_complete", input_id: "fruits-input--custom-input", list_id: "fruits-popup--custom-input")) do |c| %>
|
97
|
-
# <% c.
|
97
|
+
# <% c.with_input(classes: "custom-class") %>
|
98
98
|
# <% end %>
|
99
99
|
#
|
100
100
|
# @example With custom classes for the results
|
101
101
|
# <%= render(Primer::Alpha::AutoComplete.new(label_text: "Fruits", src: "/auto_complete", input_id: "fruits-input--custom-results", list_id: "fruits-popup--custom-results")) do |c| %>
|
102
|
-
# <% c.
|
102
|
+
# <% c.with_results(classes: "custom-class") do %>
|
103
103
|
# <%= render(Primer::Alpha::AutoComplete::Item.new(selected: true, value: "apple")) do |c| %>
|
104
104
|
# Apple
|
105
105
|
# <% end %>
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Primer
|
4
|
+
module Alpha
|
5
|
+
# Use `HiddenTextExpander` to indicate and toggle hidden text.
|
6
|
+
#
|
7
|
+
# @accessibility
|
8
|
+
# `HiddenTextExpander` requires an `aria-label`, which will provide assistive technologies with an accessible label.
|
9
|
+
# The `aria-label` should describe the action to be invoked by the `HiddenTextExpander`. For instance,
|
10
|
+
# if your `HiddenTextExpander` expands a list of 5 comments, the `aria-label` should be
|
11
|
+
# `"Expand 5 more comments"` instead of `"More"`.
|
12
|
+
class HiddenTextExpander < Primer::Component
|
13
|
+
status :alpha
|
14
|
+
|
15
|
+
# @example Default
|
16
|
+
# <%= render(Primer::Alpha::HiddenTextExpander.new("aria-label": "No effect")) %>
|
17
|
+
#
|
18
|
+
# @example Inline
|
19
|
+
# <%= render(Primer::Alpha::HiddenTextExpander.new(inline: true, "aria-label": "No effect")) %>
|
20
|
+
#
|
21
|
+
# @example Styling the button
|
22
|
+
# <%= render(Primer::Alpha::HiddenTextExpander.new("aria-label": "No effect", button_arguments: { p: 1, classes: "custom-class" })) %>
|
23
|
+
#
|
24
|
+
# @param inline [Boolean] Whether or not the expander is inline.
|
25
|
+
# @param button_arguments [Hash] <%= link_to_system_arguments_docs %> for the button element.
|
26
|
+
# @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
|
27
|
+
def initialize(inline: false, button_arguments: {}, **system_arguments)
|
28
|
+
@system_arguments = deny_tag_argument(**system_arguments)
|
29
|
+
@button_arguments = button_arguments
|
30
|
+
|
31
|
+
@system_arguments[:tag] = :span
|
32
|
+
@system_arguments[:classes] = class_names(
|
33
|
+
"hidden-text-expander",
|
34
|
+
@system_arguments[:classes],
|
35
|
+
"inline" => inline
|
36
|
+
)
|
37
|
+
|
38
|
+
aria_label = system_arguments[:"aria-label"] || system_arguments.dig(:aria, :label) || @aria_label
|
39
|
+
if aria_label.present?
|
40
|
+
@button_arguments[:"aria-label"] = aria_label
|
41
|
+
@system_arguments[:aria]&.delete(:label)
|
42
|
+
end
|
43
|
+
|
44
|
+
@button_arguments[:classes] = class_names(
|
45
|
+
"ellipsis-expander",
|
46
|
+
button_arguments[:classes]
|
47
|
+
)
|
48
|
+
end
|
49
|
+
|
50
|
+
def call
|
51
|
+
render(Primer::BaseComponent.new(**@system_arguments)) do
|
52
|
+
render(Primer::HellipButton.new(**@button_arguments))
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -14,6 +14,8 @@ module Primer
|
|
14
14
|
# Keyboard navigation follows the markup order. Decide carefully how the focus order should be be by deciding whether
|
15
15
|
# `main` or `sidebar` comes first in code. The code order won’t affect the visual position.
|
16
16
|
class Layout < Primer::Component
|
17
|
+
status :alpha
|
18
|
+
|
17
19
|
FIRST_IN_SOURCE_DEFAULT = :sidebar
|
18
20
|
FIRST_IN_SOURCE_OPTIONS = [FIRST_IN_SOURCE_DEFAULT, :main].freeze
|
19
21
|
|
@@ -80,8 +82,8 @@ module Primer
|
|
80
82
|
# @example Default
|
81
83
|
#
|
82
84
|
# <%= render(Primer::Alpha::Layout.new) do |c| %>
|
83
|
-
# <% c.
|
84
|
-
# <% c.
|
85
|
+
# <% c.with_main(border: true) { "Main" } %>
|
86
|
+
# <% c.with_sidebar(border: true) { "Sidebar" } %>
|
85
87
|
# <% end %>
|
86
88
|
#
|
87
89
|
# @example Main widths
|
@@ -96,20 +98,20 @@ module Primer
|
|
96
98
|
#
|
97
99
|
# @code
|
98
100
|
# <%= render(Primer::Alpha::Layout.new) do |c| %>
|
99
|
-
# <% c.
|
100
|
-
# <% c.
|
101
|
+
# <% c.with_main(width: :full, border: true) { "Main" } %>
|
102
|
+
# <% c.with_sidebar(border: true) { "Sidebar" } %>
|
101
103
|
# <% end %>
|
102
104
|
# <%= render(Primer::Alpha::Layout.new(mt: 5)) do |c| %>
|
103
|
-
# <% c.
|
104
|
-
# <% c.
|
105
|
+
# <% c.with_main(width: :md, border: true) { "Main" } %>
|
106
|
+
# <% c.with_sidebar(border: true) { "Sidebar" } %>
|
105
107
|
# <% end %>
|
106
108
|
# <%= render(Primer::Alpha::Layout.new(mt: 5)) do |c| %>
|
107
|
-
# <% c.
|
108
|
-
# <% c.
|
109
|
+
# <% c.with_main(width: :lg, border: true) { "Main" } %>
|
110
|
+
# <% c.with_sidebar(border: true) { "Sidebar" } %>
|
109
111
|
# <% end %>
|
110
112
|
# <%= render(Primer::Alpha::Layout.new(mt: 5)) do |c| %>
|
111
|
-
# <% c.
|
112
|
-
# <% c.
|
113
|
+
# <% c.with_main(width: :xl, border: true) { "Main" } %>
|
114
|
+
# <% c.with_sidebar(border: true) { "Sidebar" } %>
|
113
115
|
# <% end %>
|
114
116
|
#
|
115
117
|
# @example Sidebar widths
|
@@ -125,16 +127,16 @@ module Primer
|
|
125
127
|
#
|
126
128
|
# @code
|
127
129
|
# <%= render(Primer::Alpha::Layout.new) do |c| %>
|
128
|
-
# <% c.
|
129
|
-
# <% c.
|
130
|
+
# <% c.with_main(border: true) { "Main" } %>
|
131
|
+
# <% c.with_sidebar(width: :default, border: true) { "Sidebar" } %>
|
130
132
|
# <% end %>
|
131
133
|
# <%= render(Primer::Alpha::Layout.new(mt: 5)) do |c| %>
|
132
|
-
# <% c.
|
133
|
-
# <% c.
|
134
|
+
# <% c.with_main(border: true) { "Main" } %>
|
135
|
+
# <% c.with_sidebar(width: :narrow, border: true) { "Sidebar" } %>
|
134
136
|
# <% end %>
|
135
137
|
# <%= render(Primer::Alpha::Layout.new(mt: 5)) do |c| %>
|
136
|
-
# <% c.
|
137
|
-
# <% c.
|
138
|
+
# <% c.with_main(border: true) { "Main" } %>
|
139
|
+
# <% c.with_sidebar(width: :wide, border: true) { "Sidebar" } %>
|
138
140
|
# <% end %>
|
139
141
|
#
|
140
142
|
# @example Sidebar placement
|
@@ -144,12 +146,12 @@ module Primer
|
|
144
146
|
#
|
145
147
|
# @code
|
146
148
|
# <%= render(Primer::Alpha::Layout.new) do |c| %>
|
147
|
-
# <% c.
|
148
|
-
# <% c.
|
149
|
+
# <% c.with_main(border: true) { "Main" } %>
|
150
|
+
# <% c.with_sidebar(col_placement: :start, border: true) { "Sidebar" } %>
|
149
151
|
# <% end %>
|
150
152
|
# <%= render(Primer::Alpha::Layout.new( mt: 5)) do |c| %>
|
151
|
-
# <% c.
|
152
|
-
# <% c.
|
153
|
+
# <% c.with_main(border: true) { "Main" } %>
|
154
|
+
# <% c.with_sidebar(col_placement: :end, border: true) { "Sidebar" } %>
|
153
155
|
# <% end %>
|
154
156
|
#
|
155
157
|
# @example Sidebar placement as row
|
@@ -163,16 +165,16 @@ module Primer
|
|
163
165
|
#
|
164
166
|
# @code
|
165
167
|
# <%= render(Primer::Alpha::Layout.new) do |c| %>
|
166
|
-
# <% c.
|
167
|
-
# <% c.
|
168
|
+
# <% c.with_main(border: true) { "Main" } %>
|
169
|
+
# <% c.with_sidebar(row_placement: :start, border: true) { "Sidebar" } %>
|
168
170
|
# <% end %>
|
169
171
|
# <%= render(Primer::Alpha::Layout.new(mt: 5)) do |c| %>
|
170
|
-
# <% c.
|
171
|
-
# <% c.
|
172
|
+
# <% c.with_main(border: true) { "Main" } %>
|
173
|
+
# <% c.with_sidebar(row_placement: :end, border: true) { "Sidebar" } %>
|
172
174
|
# <% end %>
|
173
175
|
# <%= render(Primer::Alpha::Layout.new(mt: 5)) do |c| %>
|
174
|
-
# <% c.
|
175
|
-
# <% c.
|
176
|
+
# <% c.with_main(border: true) { "Main" } %>
|
177
|
+
# <% c.with_sidebar(row_placement: :none, border: true) { "Sidebar" } %>
|
176
178
|
# <% end %>
|
177
179
|
#
|
178
180
|
# @example Changing when to render `Layout` as columns
|
@@ -183,16 +185,16 @@ module Primer
|
|
183
185
|
#
|
184
186
|
# @code
|
185
187
|
# <%= render(Primer::Alpha::Layout.new(stacking_breakpoint: :sm)) do |c| %>
|
186
|
-
# <% c.
|
187
|
-
# <% c.
|
188
|
+
# <% c.with_main(border: true) { "Main" } %>
|
189
|
+
# <% c.with_sidebar(border: true) { "Sidebar" } %>
|
188
190
|
# <% end %>
|
189
191
|
# <%= render(Primer::Alpha::Layout.new(stacking_breakpoint: :md, mt: 5)) do |c| %>
|
190
|
-
# <% c.
|
191
|
-
# <% c.
|
192
|
+
# <% c.with_main(border: true) { "Main" } %>
|
193
|
+
# <% c.with_sidebar(border: true) { "Sidebar" } %>
|
192
194
|
# <% end %>
|
193
195
|
# <%= render(Primer::Alpha::Layout.new(stacking_breakpoint: :lg, mt: 5)) do |c| %>
|
194
|
-
# <% c.
|
195
|
-
# <% c.
|
196
|
+
# <% c.with_main(border: true) { "Main" } %>
|
197
|
+
# <% c.with_sidebar(border: true) { "Sidebar" } %>
|
196
198
|
# <% end %>
|
197
199
|
#
|
198
200
|
# @param stacking_breakpoint [Symbol] When the `Layout` should change from rows into columns. <%= one_of(Primer::Alpha::Layout::STACKING_BREAKPOINT_OPTIONS) %>
|
@@ -3,19 +3,20 @@ export default class SegmentedControlElement extends HTMLElement {
|
|
3
3
|
constructor() {
|
4
4
|
super();
|
5
5
|
this.addEventListener('click', (event) => {
|
6
|
-
|
6
|
+
var _a, _b;
|
7
|
+
const controls = Array.from(this.querySelectorAll('ul button')).filter(tab => tab instanceof HTMLElement && tab.closest(this.tagName) === this);
|
7
8
|
if (!(event.target instanceof Element))
|
8
9
|
return;
|
9
10
|
if (event.target.closest(this.tagName) !== this)
|
10
11
|
return;
|
11
12
|
const selectedControl = event.target.closest('button');
|
12
|
-
if (!(selectedControl instanceof HTMLElement) || !selectedControl.closest('
|
13
|
+
if (!(selectedControl instanceof HTMLElement) || !selectedControl.closest('ul'))
|
13
14
|
return;
|
14
15
|
for (const control of controls) {
|
15
|
-
control.classList.remove('SegmentedControl-
|
16
|
+
(_a = control.closest('li')) === null || _a === void 0 ? void 0 : _a.classList.remove('SegmentedControl-item--selected');
|
16
17
|
control.setAttribute('aria-current', 'false');
|
17
18
|
}
|
18
|
-
selectedControl.classList.add('SegmentedControl-
|
19
|
+
(_b = selectedControl.closest('li')) === null || _b === void 0 ? void 0 : _b.classList.add('SegmentedControl-item--selected');
|
19
20
|
selectedControl.setAttribute('aria-current', 'true');
|
20
21
|
selectedControl.focus();
|
21
22
|
});
|
@@ -49,30 +49,30 @@ module Primer
|
|
49
49
|
# `<nav>` is a landmark and should be reserved for main navigation links. See <%= link_to_accessibility %>.
|
50
50
|
# @code
|
51
51
|
# <%= render(Primer::Alpha::TabNav.new(label: "Default")) do |c| %>
|
52
|
-
# <% c.
|
53
|
-
# <% c.
|
54
|
-
# <% c.
|
52
|
+
# <% c.with_tab(selected: true, href: "#") { "Tab 1" } %>
|
53
|
+
# <% c.with_tab(href: "#") { "Tab 2" } %>
|
54
|
+
# <% c.with_tab(href: "#") { "Tab 3" } %>
|
55
55
|
# <% end %>
|
56
56
|
#
|
57
57
|
# @example Default with `<div>`
|
58
58
|
# <%= render(Primer::Alpha::TabNav.new(label: "Default")) do |c| %>
|
59
|
-
# <% c.
|
60
|
-
# <% c.
|
61
|
-
# <% c.
|
59
|
+
# <% c.with_tab(selected: true, href: "#") { "Tab 1" } %>
|
60
|
+
# <% c.with_tab(href: "#") { "Tab 2" } %>
|
61
|
+
# <% c.with_tab(href: "#") { "Tab 3" } %>
|
62
62
|
# <% end %>
|
63
63
|
#
|
64
64
|
# @example With icons and counters
|
65
65
|
# <%= render(Primer::Alpha::TabNav.new(label: "With icons and counters")) do |component| %>
|
66
|
-
# <% component.
|
66
|
+
# <% component.with_tab(href: "#", selected: true) do |t| %>
|
67
67
|
# <% t.icon(icon: :star) %>
|
68
68
|
# <% t.text { "Item 1" } %>
|
69
69
|
# <% end %>
|
70
|
-
# <% component.
|
70
|
+
# <% component.with_tab(href: "#") do |t| %>
|
71
71
|
# <% t.icon(icon: :star) %>
|
72
72
|
# <% t.text { "Item 2" } %>
|
73
73
|
# <% t.counter(count: 10) %>
|
74
74
|
# <% end %>
|
75
|
-
# <% component.
|
75
|
+
# <% component.with_tab(href: "#") do |t| %>
|
76
76
|
# <% t.text { "Item 3" } %>
|
77
77
|
# <% t.counter(count: 10) %>
|
78
78
|
# <% end %>
|
@@ -80,20 +80,20 @@ module Primer
|
|
80
80
|
#
|
81
81
|
# @example With extra content
|
82
82
|
# <%= render(Primer::Alpha::TabNav.new(label: "With extra content")) do |c| %>
|
83
|
-
# <% c.
|
84
|
-
# <% c.
|
85
|
-
# <% c.
|
86
|
-
# <% c.
|
83
|
+
# <% c.with_tab(selected: true, href: "#") { "Tab 1" }%>
|
84
|
+
# <% c.with_tab(href: "#") { "Tab 2" } %>
|
85
|
+
# <% c.with_tab(href: "#") { "Tab 3" } %>
|
86
|
+
# <% c.with_extra do %>
|
87
87
|
# <%= render(Primer::ButtonComponent.new(float: :right)) { "Button" } %>
|
88
88
|
# <% end %>
|
89
89
|
# <% end %>
|
90
90
|
#
|
91
91
|
# @example Adding extra content after the tabs
|
92
92
|
# <%= render(Primer::Alpha::TabNav.new(label: "Adding extra content after the tabs", display: :flex, body_arguments: { flex: 1 })) do |c| %>
|
93
|
-
# <% c.
|
94
|
-
# <% c.
|
95
|
-
# <% c.
|
96
|
-
# <% c.
|
93
|
+
# <% c.with_tab(selected: true, href: "#") { "Tab 1" }%>
|
94
|
+
# <% c.with_tab(href: "#") { "Tab 2" } %>
|
95
|
+
# <% c.with_tab(href: "#") { "Tab 3" } %>
|
96
|
+
# <% c.with_extra(align: :right) do %>
|
97
97
|
# <div>
|
98
98
|
# <%= render(Primer::ButtonComponent.new) { "Button" } %>
|
99
99
|
# </div>
|
@@ -102,9 +102,9 @@ module Primer
|
|
102
102
|
#
|
103
103
|
# @example Customizing the body
|
104
104
|
# <%= render(Primer::Alpha::TabNav.new(label: "Default", body_arguments: { classes: "custom-class", border: true, border_color: :accent_emphasis })) do |c| %>
|
105
|
-
# <% c.
|
106
|
-
# <% c.
|
107
|
-
# <% c.
|
105
|
+
# <% c.with_tab(selected: true, href: "#") { "Tab 1" }%>
|
106
|
+
# <% c.with_tab(href: "#") { "Tab 2" } %>
|
107
|
+
# <% c.with_tab(href: "#") { "Tab 3" } %>
|
108
108
|
# <% end %>
|
109
109
|
#
|
110
110
|
# @param tag [Symbol] <%= one_of(Primer::Alpha::TabNav::TAG_OPTIONS) %>
|
@@ -43,13 +43,13 @@ module Primer
|
|
43
43
|
|
44
44
|
# @example Default
|
45
45
|
# <%= render(Primer::Alpha::TabPanels.new(label: "With panels")) do |component| %>
|
46
|
-
# <% component.
|
46
|
+
# <% component.with_tab(id: "tab-1", selected: true) do |t| %>
|
47
47
|
# <% t.text { "Tab 1" } %>
|
48
48
|
# <% t.panel do %>
|
49
49
|
# Panel 1
|
50
50
|
# <% end %>
|
51
51
|
# <% end %>
|
52
|
-
# <% component.
|
52
|
+
# <% component.with_tab(id: "tab-2") do |t| %>
|
53
53
|
# <% t.text { "Tab 2" } %>
|
54
54
|
# <% t.panel do %>
|
55
55
|
# Panel 2
|
@@ -9,13 +9,11 @@ declare class ToolTipElement extends HTMLElement {
|
|
9
9
|
get direction(): Direction;
|
10
10
|
set direction(value: Direction);
|
11
11
|
get control(): HTMLElement | null;
|
12
|
-
set visibilityHidden(value: true | false);
|
13
|
-
get visibilityHidden(): true | false;
|
14
12
|
connectedCallback(): void;
|
15
13
|
disconnectedCallback(): void;
|
16
14
|
handleEvent(event: Event): void;
|
17
15
|
static observedAttributes: string[];
|
18
|
-
attributeChangedCallback(name: string
|
16
|
+
attributeChangedCallback(name: string): void;
|
19
17
|
}
|
20
18
|
declare global {
|
21
19
|
interface Window {
|
@@ -176,12 +176,6 @@ class ToolTipElement extends HTMLElement {
|
|
176
176
|
get control() {
|
177
177
|
return this.ownerDocument.getElementById(this.htmlFor);
|
178
178
|
}
|
179
|
-
set visibilityHidden(value) {
|
180
|
-
this.style.visibility = value ? 'hidden' : '';
|
181
|
-
}
|
182
|
-
get visibilityHidden() {
|
183
|
-
return this.style.visibility === 'hidden';
|
184
|
-
}
|
185
179
|
connectedCallback() {
|
186
180
|
var _a;
|
187
181
|
if (!this.shadowRoot) {
|
@@ -194,7 +188,7 @@ class ToolTipElement extends HTMLElement {
|
|
194
188
|
<slot></slot>
|
195
189
|
`;
|
196
190
|
}
|
197
|
-
this.
|
191
|
+
this.hidden = true;
|
198
192
|
__classPrivateFieldSet(this, _ToolTipElement_allowUpdatePosition, true, "f");
|
199
193
|
if (!this.id) {
|
200
194
|
this.id = `tooltip-${Date.now()}-${(Math.random() * 10000).toFixed(0)}`;
|
@@ -222,22 +216,22 @@ class ToolTipElement extends HTMLElement {
|
|
222
216
|
return;
|
223
217
|
// Ensures that tooltip stays open when hovering between tooltip and element
|
224
218
|
// WCAG Success Criterion 1.4.13 Hoverable
|
225
|
-
if ((event.type === 'mouseenter' || event.type === 'focus') && this.
|
226
|
-
this.
|
219
|
+
if ((event.type === 'mouseenter' || event.type === 'focus') && this.hidden) {
|
220
|
+
this.hidden = false;
|
227
221
|
}
|
228
222
|
else if (event.type === 'blur') {
|
229
|
-
this.
|
223
|
+
this.hidden = true;
|
230
224
|
}
|
231
225
|
else if (event.type === 'mouseleave' &&
|
232
226
|
event.relatedTarget !== this.control &&
|
233
227
|
event.relatedTarget !== this) {
|
234
|
-
this.
|
228
|
+
this.hidden = true;
|
235
229
|
}
|
236
|
-
else if (event.type === 'keydown' && event.key === 'Escape' && !this.
|
237
|
-
this.
|
230
|
+
else if (event.type === 'keydown' && event.key === 'Escape' && !this.hidden) {
|
231
|
+
this.hidden = true;
|
238
232
|
}
|
239
233
|
}
|
240
|
-
attributeChangedCallback(name
|
234
|
+
attributeChangedCallback(name) {
|
241
235
|
if (name === 'id' || name === 'data-type') {
|
242
236
|
if (!this.id || !this.control)
|
243
237
|
return;
|
@@ -251,7 +245,7 @@ class ToolTipElement extends HTMLElement {
|
|
251
245
|
this.control.setAttribute('aria-describedby', describedBy);
|
252
246
|
}
|
253
247
|
}
|
254
|
-
else if (this.isConnected && name === '
|
248
|
+
else if (this.isConnected && name === 'hidden') {
|
255
249
|
__classPrivateFieldGet(this, _ToolTipElement_instances, "m", _ToolTipElement_update).call(this);
|
256
250
|
}
|
257
251
|
else if (name === 'data-direction') {
|
@@ -293,21 +287,21 @@ class ToolTipElement extends HTMLElement {
|
|
293
287
|
}
|
294
288
|
}
|
295
289
|
_ToolTipElement_abortController = new WeakMap(), _ToolTipElement_align = new WeakMap(), _ToolTipElement_side = new WeakMap(), _ToolTipElement_allowUpdatePosition = new WeakMap(), _ToolTipElement_instances = new WeakSet(), _ToolTipElement_update = function _ToolTipElement_update() {
|
296
|
-
if (this.
|
290
|
+
if (this.hidden) {
|
297
291
|
this.classList.remove(TOOLTIP_OPEN_CLASS, ...DIRECTION_CLASSES);
|
298
292
|
}
|
299
293
|
else {
|
300
294
|
this.classList.add(TOOLTIP_OPEN_CLASS);
|
301
295
|
for (const tooltip of this.ownerDocument.querySelectorAll(this.tagName)) {
|
302
296
|
if (tooltip !== this)
|
303
|
-
tooltip.
|
297
|
+
tooltip.hidden = true;
|
304
298
|
}
|
305
299
|
__classPrivateFieldGet(this, _ToolTipElement_instances, "m", _ToolTipElement_updatePosition).call(this);
|
306
300
|
}
|
307
301
|
}, _ToolTipElement_updatePosition = function _ToolTipElement_updatePosition() {
|
308
302
|
if (!this.control)
|
309
303
|
return;
|
310
|
-
if (!__classPrivateFieldGet(this, _ToolTipElement_allowUpdatePosition, "f") || this.
|
304
|
+
if (!__classPrivateFieldGet(this, _ToolTipElement_allowUpdatePosition, "f") || this.hidden)
|
311
305
|
return;
|
312
306
|
const TOOLTIP_OFFSET = 10;
|
313
307
|
this.style.left = `0px`; // Ensures we have reliable tooltip width in `getAnchoredPosition`
|
@@ -351,7 +345,7 @@ _ToolTipElement_abortController = new WeakMap(), _ToolTipElement_align = new Wea
|
|
351
345
|
}
|
352
346
|
this.classList.add(`tooltip-${direction}`);
|
353
347
|
};
|
354
|
-
ToolTipElement.observedAttributes = ['data-type', 'data-direction', 'id', '
|
348
|
+
ToolTipElement.observedAttributes = ['data-type', 'data-direction', 'id', 'hidden'];
|
355
349
|
if (!window.customElements.get('tool-tip')) {
|
356
350
|
window.ToolTipElement = ToolTipElement;
|
357
351
|
window.customElements.define('tool-tip', ToolTipElement);
|
@@ -176,14 +176,6 @@ class ToolTipElement extends HTMLElement {
|
|
176
176
|
return this.ownerDocument.getElementById(this.htmlFor)
|
177
177
|
}
|
178
178
|
|
179
|
-
set visibilityHidden(value: true | false) {
|
180
|
-
this.style.visibility = value ? 'hidden' : ''
|
181
|
-
}
|
182
|
-
|
183
|
-
get visibilityHidden() {
|
184
|
-
return this.style.visibility === 'hidden'
|
185
|
-
}
|
186
|
-
|
187
179
|
connectedCallback() {
|
188
180
|
if (!this.shadowRoot) {
|
189
181
|
const shadow = this.attachShadow({mode: 'open'})
|
@@ -195,7 +187,7 @@ class ToolTipElement extends HTMLElement {
|
|
195
187
|
<slot></slot>
|
196
188
|
`
|
197
189
|
}
|
198
|
-
this.
|
190
|
+
this.hidden = true
|
199
191
|
this.#allowUpdatePosition = true
|
200
192
|
|
201
193
|
if (!this.id) {
|
@@ -228,36 +220,36 @@ class ToolTipElement extends HTMLElement {
|
|
228
220
|
|
229
221
|
// Ensures that tooltip stays open when hovering between tooltip and element
|
230
222
|
// WCAG Success Criterion 1.4.13 Hoverable
|
231
|
-
if ((event.type === 'mouseenter' || event.type === 'focus') && this.
|
232
|
-
this.
|
223
|
+
if ((event.type === 'mouseenter' || event.type === 'focus') && this.hidden) {
|
224
|
+
this.hidden = false
|
233
225
|
} else if (event.type === 'blur') {
|
234
|
-
this.
|
226
|
+
this.hidden = true
|
235
227
|
} else if (
|
236
228
|
event.type === 'mouseleave' &&
|
237
229
|
(event as MouseEvent).relatedTarget !== this.control &&
|
238
230
|
(event as MouseEvent).relatedTarget !== this
|
239
231
|
) {
|
240
|
-
this.
|
241
|
-
} else if (event.type === 'keydown' && (event as KeyboardEvent).key === 'Escape' && !this.
|
242
|
-
this.
|
232
|
+
this.hidden = true
|
233
|
+
} else if (event.type === 'keydown' && (event as KeyboardEvent).key === 'Escape' && !this.hidden) {
|
234
|
+
this.hidden = true
|
243
235
|
}
|
244
236
|
}
|
245
237
|
|
246
|
-
static observedAttributes = ['data-type', 'data-direction', 'id', '
|
238
|
+
static observedAttributes = ['data-type', 'data-direction', 'id', 'hidden']
|
247
239
|
|
248
240
|
#update() {
|
249
|
-
if (this.
|
241
|
+
if (this.hidden) {
|
250
242
|
this.classList.remove(TOOLTIP_OPEN_CLASS, ...DIRECTION_CLASSES)
|
251
243
|
} else {
|
252
244
|
this.classList.add(TOOLTIP_OPEN_CLASS)
|
253
|
-
for (const tooltip of this.ownerDocument.querySelectorAll<
|
254
|
-
if (tooltip !== this) tooltip.
|
245
|
+
for (const tooltip of this.ownerDocument.querySelectorAll<HTMLElement>(this.tagName)) {
|
246
|
+
if (tooltip !== this) tooltip.hidden = true
|
255
247
|
}
|
256
248
|
this.#updatePosition()
|
257
249
|
}
|
258
250
|
}
|
259
251
|
|
260
|
-
attributeChangedCallback(name: string
|
252
|
+
attributeChangedCallback(name: string) {
|
261
253
|
if (name === 'id' || name === 'data-type') {
|
262
254
|
if (!this.id || !this.control) return
|
263
255
|
if (this.type === 'label') {
|
@@ -268,7 +260,7 @@ class ToolTipElement extends HTMLElement {
|
|
268
260
|
describedBy ? (describedBy = `${describedBy} ${this.id}`) : (describedBy = this.id)
|
269
261
|
this.control.setAttribute('aria-describedby', describedBy)
|
270
262
|
}
|
271
|
-
} else if (this.isConnected && name === '
|
263
|
+
} else if (this.isConnected && name === 'hidden') {
|
272
264
|
this.#update()
|
273
265
|
} else if (name === 'data-direction') {
|
274
266
|
this.classList.remove(...DIRECTION_CLASSES)
|
@@ -303,7 +295,7 @@ class ToolTipElement extends HTMLElement {
|
|
303
295
|
|
304
296
|
#updatePosition() {
|
305
297
|
if (!this.control) return
|
306
|
-
if (!this.#allowUpdatePosition || this.
|
298
|
+
if (!this.#allowUpdatePosition || this.hidden) return
|
307
299
|
|
308
300
|
const TOOLTIP_OFFSET = 10
|
309
301
|
|