playbook_ui 7.8.3 → 7.11.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/playbook/application_controller.rb +5 -3
- data/app/helpers/playbook/application_helper.rb +13 -19
- data/app/helpers/playbook/pb_doc_helper.rb +41 -20
- data/app/helpers/playbook/pb_kit_helper.rb +1 -25
- data/app/helpers/playbook/pb_sample_helper.rb +24 -23
- data/app/pb_kits/playbook/_playbook.scss +0 -1
- data/app/pb_kits/playbook/config/_kit_example.html.erb +18 -4
- data/app/pb_kits/playbook/config/_kit_ui.html.erb +21 -21
- data/app/pb_kits/playbook/pb_currency/_currency.html.erb +1 -1
- data/app/pb_kits/playbook/pb_currency/_currency.jsx +16 -1
- data/app/pb_kits/playbook/pb_currency/_currency.scss +23 -1
- data/app/pb_kits/playbook/pb_currency/currency.rb +22 -0
- data/app/pb_kits/playbook/pb_currency/docs/{_currency_small.html.erb → _currency_alignment.html.erb} +3 -3
- data/app/pb_kits/playbook/pb_currency/docs/{_currency_small.jsx → _currency_alignment.jsx} +5 -5
- data/app/pb_kits/playbook/pb_currency/docs/_currency_no_symbol.html.erb +7 -0
- data/app/pb_kits/playbook/pb_currency/docs/_currency_no_symbol.jsx +17 -0
- data/app/pb_kits/playbook/pb_currency/docs/{_currency_large.html.erb → _currency_size.html.erb} +8 -7
- data/app/pb_kits/playbook/pb_currency/docs/{_currency_large.jsx → _currency_size.jsx} +9 -8
- data/app/pb_kits/playbook/pb_currency/docs/_currency_variants.html.erb +24 -0
- data/app/pb_kits/playbook/pb_currency/docs/{_currency_medium.jsx → _currency_variants.jsx} +13 -10
- data/app/pb_kits/playbook/pb_currency/docs/example.yml +8 -6
- data/app/pb_kits/playbook/pb_currency/docs/index.js +4 -3
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_anti_patterns.html.erb +23 -0
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default_date.html.erb +4 -4
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default_date.jsx +2 -2
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default_date.md +3 -1
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_disabled.html.erb +8 -8
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_flatpickr_methods.html.erb +27 -0
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_flatpickr_methods.jsx +44 -0
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_format.html.erb +4 -4
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_min_max.html.erb +2 -2
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_range.html.erb +1 -1
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_range.jsx +1 -1
- data/app/pb_kits/playbook/pb_date_picker/docs/_description.md +4 -2
- data/app/pb_kits/playbook/pb_date_picker/docs/example.yml +3 -1
- data/app/pb_kits/playbook/pb_date_picker/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_filter/Filter/FilterDouble.jsx +20 -3
- data/app/pb_kits/playbook/pb_filter/Filter/FilterSingle.jsx +51 -31
- data/app/pb_kits/playbook/pb_filter/Filter/FiltersPopover.jsx +3 -4
- data/app/pb_kits/playbook/pb_filter/Filter/SortMenu.jsx +2 -2
- data/app/pb_kits/playbook/pb_filter/Filter/index.jsx +17 -16
- data/app/pb_kits/playbook/pb_filter/_filter.html.erb +1 -1
- data/app/pb_kits/playbook/pb_filter/_filter.scss +0 -2
- data/app/pb_kits/playbook/pb_filter/docs/_filter_min_width.html.erb +41 -0
- data/app/pb_kits/playbook/pb_filter/docs/_filter_min_width.jsx +57 -0
- data/app/pb_kits/playbook/pb_filter/docs/_filter_no_background.jsx +0 -41
- data/app/pb_kits/playbook/pb_filter/docs/_filter_no_background.md +1 -0
- data/app/pb_kits/playbook/pb_filter/docs/_filter_no_sort.html.erb +35 -0
- data/app/pb_kits/playbook/pb_filter/docs/_filter_no_sort.jsx +47 -0
- data/app/pb_kits/playbook/pb_filter/docs/_filter_no_sort.md +1 -0
- data/app/pb_kits/playbook/pb_filter/docs/_filter_only.html.erb +1 -1
- data/app/pb_kits/playbook/pb_filter/docs/_filter_single.html.erb +1 -1
- data/app/pb_kits/playbook/pb_filter/docs/example.yml +4 -0
- data/app/pb_kits/playbook/pb_filter/docs/index.js +2 -0
- data/app/pb_kits/playbook/pb_filter/filter.rb +1 -0
- data/app/pb_kits/playbook/pb_filter/templates/_core.html.erb +9 -9
- data/app/pb_kits/playbook/pb_filter/templates/_default.html.erb +1 -1
- data/app/pb_kits/playbook/pb_nav/_horizontal_nav.scss +22 -0
- data/app/pb_kits/playbook/pb_nav/_item.jsx +3 -0
- data/app/pb_kits/playbook/pb_nav/_subtle_mixin.scss +47 -0
- data/app/pb_kits/playbook/pb_nav/_vertical_nav.scss +2 -46
- data/app/pb_kits/playbook/pb_nav/docs/_new_tab.html.erb +6 -0
- data/app/pb_kits/playbook/pb_nav/docs/_new_tab.jsx +34 -0
- data/app/pb_kits/playbook/pb_nav/docs/_subtle_horizontal_nav.html.erb +6 -0
- data/app/pb_kits/playbook/pb_nav/docs/_subtle_horizontal_nav.jsx +33 -0
- data/app/pb_kits/playbook/pb_nav/docs/example.yml +4 -1
- data/app/pb_kits/playbook/pb_nav/docs/index.js +2 -0
- data/app/pb_kits/playbook/pb_nav/item.rb +5 -2
- data/app/pb_kits/playbook/pb_radio/_radio.jsx +4 -3
- data/app/pb_kits/playbook/pb_radio/docs/_radio_default.jsx +3 -0
- data/app/pb_kits/playbook/pb_radio/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_radio/radio.test.js +71 -0
- data/app/pb_kits/playbook/pb_rich_text_editor/_rich_text_editor.scss +1 -0
- data/app/pb_kits/playbook/pb_rich_text_editor/_trix_styles.scss +375 -0
- data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_preview.html.erb +25 -0
- data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_preview.jsx +45 -0
- data/app/pb_kits/playbook/pb_rich_text_editor/docs/example.yml +3 -1
- data/app/pb_kits/playbook/pb_rich_text_editor/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_select/_select.jsx +4 -3
- data/app/pb_kits/playbook/pb_select/select.test.js +51 -0
- data/app/pb_kits/playbook/pb_stat_change/_stat_change.html.erb +1 -1
- data/app/pb_kits/playbook/pb_stat_change/_stat_change.jsx +8 -4
- data/app/pb_kits/playbook/pb_stat_change/docs/_stat_change_default.html.erb +1 -1
- data/app/pb_kits/playbook/pb_stat_change/docs/_stat_change_unit.html.erb +17 -0
- data/app/pb_kits/playbook/pb_stat_change/docs/_stat_change_unit.jsx +28 -0
- data/app/pb_kits/playbook/pb_stat_change/docs/_stat_change_unit_two.html.erb +20 -0
- data/app/pb_kits/playbook/pb_stat_change/docs/_stat_change_unit_two.jsx +31 -0
- data/app/pb_kits/playbook/pb_stat_change/docs/_stat_change_unit_two.md +1 -0
- data/app/pb_kits/playbook/pb_stat_change/docs/example.yml +6 -4
- data/app/pb_kits/playbook/pb_stat_change/docs/index.js +2 -0
- data/app/pb_kits/playbook/pb_stat_change/stat_change.rb +12 -7
- data/app/pb_kits/playbook/pb_table/_table.scss +1 -57
- data/app/pb_kits/playbook/pb_table/docs/_table_alignment_shift_row.html.erb +1 -1
- data/app/pb_kits/playbook/pb_table/docs/_table_alignment_shift_row.jsx +1 -1
- data/app/pb_kits/playbook/pb_table/styles/_alignment.scss +32 -0
- data/app/pb_kits/playbook/pb_table/styles/_all.scss +4 -3
- data/app/pb_kits/playbook/pb_table/styles/_side_highlight.scss +24 -0
- data/app/pb_kits/playbook/pb_text_input/_text_input.jsx +8 -4
- data/app/pb_kits/playbook/pb_text_input/docs/_description.md +2 -1
- data/app/pb_kits/playbook/pb_text_input/docs/_text_input_custom.jsx +7 -1
- data/app/pb_kits/playbook/pb_text_input/docs/_text_input_default.jsx +78 -56
- data/app/pb_kits/playbook/pb_text_input/docs/_text_input_error.jsx +19 -11
- data/app/pb_kits/playbook/pb_text_input/text_input.test.js +77 -0
- data/app/pb_kits/playbook/pb_textarea/_textarea.jsx +5 -5
- data/app/pb_kits/playbook/pb_tooltip/_tooltip.scss +10 -7
- data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_default.html.erb +4 -4
- data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_selectors.html.erb +17 -0
- data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_selectors.md +3 -0
- data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_white.html.erb +1 -1
- data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_with_icon_circle.html.erb +10 -0
- data/app/pb_kits/playbook/pb_tooltip/docs/example.yml +2 -0
- data/app/pb_kits/playbook/pb_tooltip/index.js +87 -37
- data/app/pb_kits/playbook/pb_tooltip/tooltip.rb +3 -1
- data/app/pb_kits/playbook/pb_typeahead/_typeahead.jsx +5 -1
- data/app/pb_kits/playbook/pb_typeahead/components/Option.jsx +2 -3
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills_async.html.erb +19 -3
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills_async.jsx +4 -2
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills_async.md +10 -2
- data/app/pb_kits/playbook/pb_typeahead/typeahead.rb +5 -0
- data/app/pb_kits/playbook/react_rails_kits.js +1 -0
- data/lib/playbook.rb +6 -17
- data/lib/playbook/engine.rb +0 -3
- data/{app/pb_kits → lib}/playbook/props.rb +0 -0
- data/{app/pb_kits → lib}/playbook/props/array.rb +0 -0
- data/{app/pb_kits → lib}/playbook/props/base.rb +19 -3
- data/{app/pb_kits → lib}/playbook/props/boolean.rb +0 -0
- data/{app/pb_kits → lib}/playbook/props/date.rb +0 -0
- data/{app/pb_kits → lib}/playbook/props/enum.rb +0 -0
- data/{app/pb_kits → lib}/playbook/props/hash.rb +0 -0
- data/{app/pb_kits → lib}/playbook/props/hash_array.rb +0 -0
- data/{app/pb_kits → lib}/playbook/props/number.rb +0 -0
- data/{app/pb_kits → lib}/playbook/props/number_array.rb +0 -0
- data/{app/pb_kits → lib}/playbook/props/numeric.rb +0 -0
- data/{app/pb_kits → lib}/playbook/props/percentage.rb +0 -0
- data/{app/pb_kits → lib}/playbook/props/proc.rb +0 -0
- data/{app/pb_kits → lib}/playbook/props/string.rb +0 -0
- data/lib/playbook/version.rb +1 -1
- metadata +59 -28
- data/app/helpers/playbook/layout_helper.rb +0 -9
- data/app/pb_kits/playbook/pb_currency/docs/_currency_medium.html.erb +0 -21
- data/app/pb_kits/playbook/pb_table/styles/_mixins.scss +0 -0
@@ -24,9 +24,11 @@ $tooltip_shadow: rgba(60, 106, 172, 0.18);
|
|
24
24
|
|
25
25
|
[class^="pb_tooltip_kit"] {
|
26
26
|
.tooltip_tooltip {
|
27
|
-
display:
|
27
|
+
display: block;
|
28
28
|
opacity: 0;
|
29
|
-
|
29
|
+
position: absolute;
|
30
|
+
left: -9999px;
|
31
|
+
top: 0;
|
30
32
|
animation-name: fadeIn;
|
31
33
|
animation-duration: 150ms;
|
32
34
|
animation-timing-function: linear;
|
@@ -49,11 +51,9 @@ $tooltip_shadow: rgba(60, 106, 172, 0.18);
|
|
49
51
|
border-style: solid;
|
50
52
|
border-width: 10px;
|
51
53
|
margin-bottom: 50px;
|
52
|
-
margin-left: -10px;
|
53
54
|
}
|
54
55
|
&.show {
|
55
56
|
opacity: 1;
|
56
|
-
display: block;
|
57
57
|
z-index: $z_9;
|
58
58
|
margin-bottom: $space_sm;
|
59
59
|
background-color: $white;
|
@@ -89,12 +89,14 @@ $tooltip_shadow: rgba(60, 106, 172, 0.18);
|
|
89
89
|
|
90
90
|
// Right
|
91
91
|
[class^="pb_tooltip_kit"] .tooltip_tooltip {
|
92
|
+
$arrow_vertical_offset: calc(50% - #{$space_xs * 1.2});
|
92
93
|
|
93
|
-
&[
|
94
|
+
&[data-popper-placement="right"] {
|
94
95
|
box-shadow: -8px 0 28px 0 $tooltip_shadow;
|
95
96
|
margin: 0 0 0 $space_sm;
|
96
97
|
.arrow {
|
97
98
|
left: -#{$space_xs};
|
99
|
+
top: $arrow_vertical_offset;
|
98
100
|
margin-bottom: 0;
|
99
101
|
transform: rotate(90deg);
|
100
102
|
}
|
@@ -103,7 +105,7 @@ $tooltip_shadow: rgba(60, 106, 172, 0.18);
|
|
103
105
|
}
|
104
106
|
}
|
105
107
|
|
106
|
-
&[
|
108
|
+
&[data-popper-placement="bottom"] {
|
107
109
|
box-shadow: 0 -12px 28px 0 $tooltip_shadow;
|
108
110
|
margin: $space_sm 0 0 0;
|
109
111
|
.arrow {
|
@@ -116,13 +118,14 @@ $tooltip_shadow: rgba(60, 106, 172, 0.18);
|
|
116
118
|
}
|
117
119
|
}
|
118
120
|
|
119
|
-
&[
|
121
|
+
&[data-popper-placement="left"] {
|
120
122
|
box-shadow: 8px 0 28px 0 $tooltip_shadow;
|
121
123
|
margin: 0 $space_sm 0 0;
|
122
124
|
.arrow {
|
123
125
|
margin-bottom: 0;
|
124
126
|
right: -18px;
|
125
127
|
left: auto;
|
128
|
+
top: $arrow_vertical_offset;
|
126
129
|
transform: rotate(270deg);
|
127
130
|
}
|
128
131
|
&.flipped .arrow {
|
@@ -3,7 +3,7 @@
|
|
3
3
|
<span id='regular-tooltip-1'>Hover here (Top)</span>
|
4
4
|
|
5
5
|
<%= pb_rails("tooltip", props: {
|
6
|
-
|
6
|
+
trigger_element_selector: "#regular-tooltip-1",
|
7
7
|
tooltip_id: "tooltip-1",
|
8
8
|
position: 'top'
|
9
9
|
}) do %>
|
@@ -14,7 +14,7 @@
|
|
14
14
|
<%= pb_rails("flex/flex_item", props: {margin_top: "md"}) do %>
|
15
15
|
<span id='regular-tooltip-2'>Hover here (Bottom)</span>
|
16
16
|
<%= pb_rails("tooltip", props: {
|
17
|
-
|
17
|
+
trigger_element_selector: "#regular-tooltip-2",
|
18
18
|
tooltip_id: "tooltip-2",
|
19
19
|
position: 'bottom'
|
20
20
|
}) do %>
|
@@ -25,7 +25,7 @@
|
|
25
25
|
<%= pb_rails("flex/flex_item", props: {margin_top: "md"}) do %>
|
26
26
|
<span id='regular-tooltip-3'>Hover here (Right)</span>
|
27
27
|
<%= pb_rails("tooltip", props: {
|
28
|
-
|
28
|
+
trigger_element_selector: "#regular-tooltip-3",
|
29
29
|
tooltip_id: "tooltip-3",
|
30
30
|
position: 'right'
|
31
31
|
}) do %>
|
@@ -36,7 +36,7 @@
|
|
36
36
|
<%= pb_rails("flex/flex_item", props: {margin_top: "md"}) do %>
|
37
37
|
<span id='regular-tooltip-4'>Hover here (Left)</span>
|
38
38
|
<%= pb_rails("tooltip", props: {
|
39
|
-
|
39
|
+
trigger_element_selector: "#regular-tooltip-4",
|
40
40
|
tooltip_id: "tooltip-4",
|
41
41
|
position: 'left'
|
42
42
|
}) do %>
|
@@ -0,0 +1,17 @@
|
|
1
|
+
<%= pb_rails("flex", props: { horizontal: "center", orientation: "column" }) do %>
|
2
|
+
<%= pb_rails("flex/flex_item", props: {margin_top: "md"}) do %>
|
3
|
+
<%= pb_rails("button", props: {classname: "tooltip-example-trigger", text: "Example 1"}) %>
|
4
|
+
<% end %>
|
5
|
+
|
6
|
+
<%= pb_rails("flex/flex_item", props: {margin_top: "md"}) do %>
|
7
|
+
<%= pb_rails("button", props: {classname: "tooltip-example-trigger", text: "Example 1"}) %>
|
8
|
+
<% end %>
|
9
|
+
|
10
|
+
<%= pb_rails("tooltip", props: {
|
11
|
+
trigger_element_selector: ".tooltip-example-trigger",
|
12
|
+
tooltip_id: "example-tooltip",
|
13
|
+
position: 'top'
|
14
|
+
}) do %>
|
15
|
+
Whoa. I'm a re-useable tooltip.
|
16
|
+
<% end %>
|
17
|
+
<% end %>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<%= pb_rails("icon_circle", props: { icon: "paper-plane", id: "result-1-sample-email-link" }) %>
|
2
|
+
|
3
|
+
<%= pb_rails("tooltip", props: {
|
4
|
+
trigger_element_id: "result-1-sample-email-link",
|
5
|
+
tooltip_id: "sample-email-tooltip-result-1",
|
6
|
+
position: "top",
|
7
|
+
dark: true
|
8
|
+
}) do %>
|
9
|
+
Send Email
|
10
|
+
<% end %>
|
@@ -1,7 +1,13 @@
|
|
1
1
|
import PbEnhancedElement from '../pb_enhanced_element'
|
2
|
-
import Popper from 'popper.js'
|
3
2
|
|
4
|
-
|
3
|
+
import {
|
4
|
+
createPopperLite as createPopper,
|
5
|
+
flip,
|
6
|
+
offset,
|
7
|
+
preventOverflow,
|
8
|
+
} from '@popperjs/core'
|
9
|
+
|
10
|
+
const TOOLTIP_OFFSET = [0, 20]
|
5
11
|
const TOOLTIP_TIMEOUT = 250
|
6
12
|
|
7
13
|
export default class PbTooltip extends PbEnhancedElement {
|
@@ -10,56 +16,96 @@ export default class PbTooltip extends PbEnhancedElement {
|
|
10
16
|
}
|
11
17
|
|
12
18
|
connect() {
|
13
|
-
this.
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
},
|
19
|
-
arrow: {
|
20
|
-
element: `#${this.tooltipId}-arrow`,
|
21
|
-
},
|
22
|
-
},
|
23
|
-
onUpdate: (p) => {
|
24
|
-
p.instance.popper.classList.toggle('flipped', p.flipped)
|
25
|
-
},
|
26
|
-
})
|
19
|
+
this.triggerElements.forEach((trigger) => {
|
20
|
+
trigger.addEventListener('mouseenter', () => {
|
21
|
+
this.mouseenterTimeout = setTimeout(() => {
|
22
|
+
this.showTooltip(trigger)
|
23
|
+
this.checkCloseTooltip(trigger)
|
24
|
+
}, TOOLTIP_TIMEOUT)
|
27
25
|
|
28
|
-
|
29
|
-
|
30
|
-
})
|
31
|
-
|
32
|
-
this.triggerElement.addEventListener('mouseenter', () => {
|
33
|
-
this.mouseenterTimeout = setTimeout(() => {
|
34
|
-
this.popper.scheduleUpdate()
|
35
|
-
this.showTooltip()
|
36
|
-
}, TOOLTIP_TIMEOUT)
|
26
|
+
trigger.addEventListener('mouseleave', () => {
|
27
|
+
clearTimeout(this.mouseenterTimeout)
|
37
28
|
|
38
|
-
this.triggerElement.addEventListener('mouseleave', (event) => {
|
39
|
-
clearTimeout(this.mouseenterTimeout)
|
40
|
-
if (event.target.closest(`#${this.tooltipId}`) !== this.tooltip) {
|
41
29
|
setTimeout(() => {
|
42
30
|
this.hideTooltip()
|
43
31
|
}, 0)
|
44
|
-
}
|
45
|
-
}
|
32
|
+
}, { once: true })
|
33
|
+
})
|
34
|
+
})
|
35
|
+
|
36
|
+
this.tooltip.addEventListener('mouseenter', () => {
|
37
|
+
clearTimeout(this.mouseenterTimeout)
|
46
38
|
})
|
39
|
+
this.tooltip.addEventListener('mouseleave', () => {
|
40
|
+
this.hideTooltip()
|
41
|
+
})
|
42
|
+
}
|
43
|
+
|
44
|
+
checkCloseTooltip(trigger) {
|
45
|
+
document.querySelector('body').addEventListener('click', ({ target }) => {
|
46
|
+
const isTooltip = target.closest(`#${this.tooltipId}`) === this.tooltip
|
47
|
+
const isTrigger = target.closest(this.triggerElementSelector) === trigger
|
48
|
+
if (isTrigger || isTooltip) {
|
49
|
+
this.checkCloseTooltip(trigger)
|
50
|
+
} else {
|
51
|
+
this.hideTooltip()
|
52
|
+
}
|
53
|
+
}, { once: true })
|
47
54
|
}
|
48
55
|
|
49
|
-
showTooltip() {
|
56
|
+
showTooltip(trigger) {
|
57
|
+
this.popper = createPopper(trigger, this.tooltip, {
|
58
|
+
placement: this.position,
|
59
|
+
modifiers: [
|
60
|
+
{
|
61
|
+
name: 'offset',
|
62
|
+
options: {
|
63
|
+
offset: TOOLTIP_OFFSET,
|
64
|
+
},
|
65
|
+
},
|
66
|
+
{
|
67
|
+
name: 'arrow',
|
68
|
+
options: {
|
69
|
+
element: document.querySelector(`#${this.tooltipId}-arrow`),
|
70
|
+
},
|
71
|
+
},
|
72
|
+
offset,
|
73
|
+
preventOverflow,
|
74
|
+
flip,
|
75
|
+
],
|
76
|
+
})
|
50
77
|
this.tooltip.classList.add('show')
|
51
78
|
}
|
52
79
|
|
53
80
|
hideTooltip() {
|
54
|
-
this.tooltip.classList.
|
81
|
+
this.tooltip.classList.add('fade_out')
|
82
|
+
setTimeout(() => {
|
83
|
+
if (!this.popper) return
|
84
|
+
this.popper.destroy()
|
85
|
+
this.tooltip.classList.remove('show')
|
86
|
+
this.tooltip.classList.remove('fade_out')
|
87
|
+
}, TOOLTIP_TIMEOUT)
|
55
88
|
}
|
56
89
|
|
57
|
-
|
58
|
-
|
59
|
-
|
90
|
+
get triggerElements() {
|
91
|
+
let triggerEl
|
92
|
+
|
93
|
+
if (this.triggerElementId) {
|
94
|
+
triggerEl = document.querySelector(`#${this.triggerElementId}`) //deprecated
|
95
|
+
} else {
|
96
|
+
const selectorIsId = this.triggerElementSelector.indexOf('#') > -1
|
97
|
+
triggerEl = selectorIsId ? document.querySelector(`${this.triggerElementSelector}`) :
|
98
|
+
document.querySelectorAll(`${this.triggerElementSelector}`)
|
99
|
+
}
|
60
100
|
|
61
|
-
|
62
|
-
|
101
|
+
if (!triggerEl) {
|
102
|
+
/* eslint no-console: ["error", { allow: ["warn", "error"] }] */
|
103
|
+
console.error('Tooltip Kit: an invalid or unavailable DOM reference was provided!')
|
104
|
+
return []
|
105
|
+
}
|
106
|
+
|
107
|
+
if (!triggerEl.length) triggerEl = [triggerEl]
|
108
|
+
return this._triggerElements = (this._triggerElements || triggerEl)
|
63
109
|
}
|
64
110
|
|
65
111
|
get tooltip() {
|
@@ -77,4 +123,8 @@ export default class PbTooltip extends PbEnhancedElement {
|
|
77
123
|
get tooltipId() {
|
78
124
|
return this.element.dataset.pbTooltipTooltipId
|
79
125
|
}
|
126
|
+
|
127
|
+
get triggerElementSelector() {
|
128
|
+
return this.element.dataset.pbTooltipTriggerElementSelector
|
129
|
+
}
|
80
130
|
}
|
@@ -7,7 +7,8 @@ module Playbook
|
|
7
7
|
partial "pb_tooltip/tooltip"
|
8
8
|
|
9
9
|
prop :position
|
10
|
-
prop :
|
10
|
+
prop :trigger_element_selector
|
11
|
+
prop :trigger_element_id, deprecated: true
|
11
12
|
prop :tooltip_id
|
12
13
|
prop :dark, type: Playbook::Props::Boolean,
|
13
14
|
default: false
|
@@ -20,6 +21,7 @@ module Playbook
|
|
20
21
|
Hash(values[:data]).merge(
|
21
22
|
pb_tooltip_kit: true,
|
22
23
|
pb_tooltip_position: position,
|
24
|
+
pb_tooltip_trigger_element_selector: trigger_element_selector,
|
23
25
|
pb_tooltip_trigger_element_id: trigger_element_id,
|
24
26
|
pb_tooltip_tooltip_id: tooltip_id,
|
25
27
|
)
|
@@ -27,6 +27,8 @@ type Props = {
|
|
27
27
|
async?: boolean,
|
28
28
|
label?: string,
|
29
29
|
loadOptions?: noop | string,
|
30
|
+
getOptionLabel?: () => any,
|
31
|
+
getOptionValue?: () => any,
|
30
32
|
name?: string,
|
31
33
|
}
|
32
34
|
|
@@ -38,7 +40,6 @@ type Props = {
|
|
38
40
|
const Typeahead = (props: Props) => {
|
39
41
|
const selectProps = {
|
40
42
|
cacheOptions: true,
|
41
|
-
defaultOptions: true,
|
42
43
|
components: {
|
43
44
|
Control,
|
44
45
|
ClearIndicator,
|
@@ -50,6 +51,7 @@ const Typeahead = (props: Props) => {
|
|
50
51
|
Placeholder,
|
51
52
|
ValueContainer,
|
52
53
|
},
|
54
|
+
defaultOptions: true,
|
53
55
|
id: 'react-select-input',
|
54
56
|
isClearable: true,
|
55
57
|
isSearchable: true,
|
@@ -58,6 +60,8 @@ const Typeahead = (props: Props) => {
|
|
58
60
|
}
|
59
61
|
|
60
62
|
if (typeof(props.loadOptions) === 'string') selectProps.loadOptions = get(window, props.loadOptions)
|
63
|
+
if (typeof(props.getOptionLabel) === 'string') selectProps.getOptionLabel = get(window, props.getOptionLabel)
|
64
|
+
if (typeof(props.getOptionValue) === 'string') selectProps.getOptionValue = get(window, props.getOptionValue)
|
61
65
|
|
62
66
|
const Tag = props.async ? AsyncSelect : Select
|
63
67
|
|
@@ -10,7 +10,6 @@ import {
|
|
10
10
|
const Option = (props: any) => {
|
11
11
|
const {
|
12
12
|
imageUrl,
|
13
|
-
label,
|
14
13
|
} = props.data
|
15
14
|
|
16
15
|
return (
|
@@ -21,12 +20,12 @@ const Option = (props: any) => {
|
|
21
20
|
<User
|
22
21
|
align="left"
|
23
22
|
avatarUrl={imageUrl}
|
24
|
-
name={label}
|
23
|
+
name={props.label}
|
25
24
|
orientation="horizontal"
|
26
25
|
/>
|
27
26
|
</When>
|
28
27
|
<When condition={!imageUrl}>
|
29
|
-
{label}
|
28
|
+
{props.label}
|
30
29
|
</When>
|
31
30
|
</Choose>
|
32
31
|
</div>
|
@@ -1,4 +1,13 @@
|
|
1
|
-
<%= pb_rails("typeahead", props: {
|
1
|
+
<%= pb_rails("typeahead", props: {
|
2
|
+
async: true,
|
3
|
+
get_option_label: 'getOptionLabel',
|
4
|
+
get_option_value: 'getOptionValue',
|
5
|
+
load_options: 'asyncPillsPromiseOptions',
|
6
|
+
label: "Github Users",
|
7
|
+
name: :foo,
|
8
|
+
pills: true,
|
9
|
+
placeholder: "type the name of a Github user"
|
10
|
+
}) %>
|
2
11
|
|
3
12
|
<!-- This section is an example of how to provide load_options prop for using dynamic options -->
|
4
13
|
<%= javascript_tag defer: "defer" do %>
|
@@ -7,8 +16,8 @@
|
|
7
16
|
const filterResults = function(results) {
|
8
17
|
return results.items.map(function(result) {
|
9
18
|
return {
|
10
|
-
|
11
|
-
|
19
|
+
name: result.login,
|
20
|
+
id: result.id,
|
12
21
|
}
|
13
22
|
})
|
14
23
|
}
|
@@ -27,4 +36,11 @@
|
|
27
36
|
}
|
28
37
|
})
|
29
38
|
}
|
39
|
+
|
40
|
+
window.getOptionLabel = function(option) {
|
41
|
+
return option.name;
|
42
|
+
}
|
43
|
+
window.getOptionValue = function(option) {
|
44
|
+
return option.id;
|
45
|
+
}
|
30
46
|
<% end %>
|
@@ -20,8 +20,8 @@ import {
|
|
20
20
|
const filterResults = (results) =>
|
21
21
|
results.items.map((result) => {
|
22
22
|
return {
|
23
|
-
|
24
|
-
|
23
|
+
name: result.login,
|
24
|
+
id: result.id,
|
25
25
|
}
|
26
26
|
})
|
27
27
|
|
@@ -71,6 +71,8 @@ const TypeaheadWithPillsAsync = () => {
|
|
71
71
|
</If>
|
72
72
|
<Typeahead
|
73
73
|
async
|
74
|
+
getOptionLabel={(option) => option.name}
|
75
|
+
getOptionValue={(option) => option.id}
|
74
76
|
isMulti
|
75
77
|
label="Github Users"
|
76
78
|
loadOptions={promiseOptions}
|
@@ -4,8 +4,16 @@
|
|
4
4
|
|
5
5
|
The prop `load_options`, when used in conjunction with `async: true` and `pills: true`, points to a JavaScript function located within the global window namespace. This function should return a `Promise` which resolves with the list of formatted options as described in prior examples above. This function is identical to the function provided to the React version of this kit. See the code example for more details.
|
6
6
|
|
7
|
-
#### React
|
7
|
+
#### React
|
8
|
+
|
9
|
+
##### `loadOptions`
|
8
10
|
|
9
11
|
**Additional required props: ** `async: true`
|
10
12
|
|
11
|
-
[As outlined in the react-select Async docs](https://react-select.com/async), `loadOptions` expects to return a Promise that resolves resolves with the list of formatted options as described in prior examples above. See the code example for more details.
|
13
|
+
[As outlined in the react-select Async docs](https://react-select.com/async), `loadOptions` expects to return a Promise that resolves resolves with the list of formatted options as described in prior examples above. See the code example for more details.
|
14
|
+
|
15
|
+
##### `getOptionLabel` + `getOptionValue`
|
16
|
+
|
17
|
+
If your server returns data that requires differing field names other than `label` and `value`
|
18
|
+
|
19
|
+
See `react-select` docs for more information: https://react-select.com/advanced#replacing-builtins
|