<%= pb_rails("flex", props: { gap: "md", wrap: true }) do %> <%= pb_rails("flex/flex_item") do %> <span id='regular-tooltip-1'>Hover here (Top)</span> <%= pb_rails("tooltip", props: { trigger_element_selector: "#regular-tooltip-1", tooltip_id: "tooltip-1", position: 'top' }) do %> Whoa. I'm a tooltip. <% end %> <% end %> <%= pb_rails("flex/flex_item") do %> <span id='regular-tooltip-2'>Hover here (Bottom)</span> <%= pb_rails("tooltip", props: { trigger_element_selector: "#regular-tooltip-2", tooltip_id: "tooltip-2", position: 'bottom' }) do %> Whoa. I'm a tooltip. <% end %> <% end %> <%= pb_rails("flex/flex_item") do %> <span id='regular-tooltip-3'>Hover here (Right)</span> <%= pb_rails("tooltip", props: { trigger_element_selector: "#regular-tooltip-3", tooltip_id: "tooltip-3", position: 'right' }) do %> Whoa. I'm a tooltip. <% end %> <% end %> <%= pb_rails("flex/flex_item") do %> <span id='regular-tooltip-4'>Hover here (Left)</span> <%= pb_rails("tooltip", props: { trigger_element_selector: "#regular-tooltip-4", tooltip_id: "tooltip-4", position: 'left' }) do %> Whoa. I'm a tooltip. <% end %> <% end %> <% end %>
Set the prop interaction as true for cases that require users to copy the content inside the tooltip.
<%= pb_rails("flex", props: { gap: "md", wrap: true }) do %> <%= pb_rails("flex/flex_item") do %> <%= pb_rails("button", props: { text: "With Interaction", id: "tooltip-interaction"}) %> <%= pb_rails("tooltip", props: { trigger_element_selector: "#tooltip-interaction", tooltip_id: "tooltip-with-interaction", position: 'top', interaction: true }) do %> You can copy me <% end %> <% end %> <%= pb_rails("flex/flex_item") do %> <%= pb_rails("button", props: { text: "No Interaction", id: "tooltip-no-interaction"}) %> <%= pb_rails("tooltip", props: { trigger_element_selector: "#tooltip-no-interaction", tooltip_id: "tooltip-without-interaction", position: 'top', }) do %> I'm just a regular tooltip <% end %> <% end %> <% end %>
You can re-use Tooltip by sending trigger_element_selector as a HTML class= attribute.
<%= pb_rails("flex", props: { orientation: "column" }) do %> <%= pb_rails("flex/flex_item", props: {margin_top: "md"}) do %> <%= pb_rails("button", props: {classname: "tooltip-example-trigger", text: "Example 1"}) %> <% end %> <%= pb_rails("flex/flex_item", props: {margin_top: "md"}) do %> <%= pb_rails("button", props: {classname: "tooltip-example-trigger", text: "Example 1"}) %> <% end %> <%= pb_rails("tooltip", props: { trigger_element_selector: ".tooltip-example-trigger", tooltip_id: "example-tooltip", position: 'top' }) do %> Whoa. I'm a re-useable tooltip. <% end %> <% end %>
You can customize the height and width of the tooltip's popover.
When using maxHeight, be sure to set a width as well. The text needs to truncate within the width prop.
<%= pb_rails "flex", props: { flex_direction: "row", gap: "md", wrap: true } do %> <%= pb_rails "button", props: { id: "tool-tip-sizing-1", text: "Height and Width" } %> <%= pb_rails "tooltip", props: { trigger_element_selector: "#tool-tip-sizing-1", tooltip_id: "tool-tip-sizing-1", position: "top", height: "150px", width: "100px" } do %> I'm 150px high and 100px wide! <% end %> <%= pb_rails "button", props: { id: "tool-tip-sizing-2", text: "max_height" } %> <%= pb_rails "tooltip", props: { trigger_element_selector: "#tool-tip-sizing-2", tooltip_id: "tool-tip-sizing-2", position: "top", width: "250px", max_height: "100px" } do %> I have a max_height of 100px! Lorem ipsum dolor sit amet consectetur adipisicing elit. <% end %> <%= pb_rails "button", props: { id: "tool-tip-sizing-3", text: "max_width" } %> <%= pb_rails "tooltip", props: { trigger_element_selector: "#tool-tip-sizing-3", tooltip_id: "tool-tip-sizing-3", position: "top", max_width: "150px" } do %> I have a max_width of 150px! Lorem ipsum dolor sit amet consectetur adipisicing elit. <% end %> <%= pb_rails "button", props: { id: "tool-tip-sizing-4", text: "min_width" } %> <%= pb_rails "tooltip", props: { trigger_element_selector: "#tool-tip-sizing-4", tooltip_id: "tool-tip-sizing-4", position: "top", min_width: "300px" } do %> I have a min_width of 300px! <% end %> <%= pb_rails "button", props: { id: "tool-tip-sizing-5", text: "min_height" } %> <%= pb_rails "tooltip", props: { trigger_element_selector: "#tool-tip-sizing-5", tooltip_id: "tool-tip-sizing-5", position: "top", min_height: "300px", height: "200px" } do %> I have a min_height of 300px! <% end %> <% end %>
<%= pb_rails "flex", props: { flex_direction: "row", gap: "md", wrap: true } do %> <%= pb_rails "button", props: { id: "tool-tip-with-icon-1", text: "Tooltip With Icon" } %> <%= pb_rails "tooltip", props: { trigger_element_selector: "#tool-tip-with-icon-1", tooltip_id: "tool-tip-with-icon-1", position: "top" } do %> <%= pb_rails("icon", props: { icon: "paper-plane", fixed_width: true, color: "white", size: "1x", padding_right: "xxs" }) %> Send Email <% end %> <%= pb_rails "button", props: { id: "tool-tip-with-icon-2", text: "Tooltip With Icon" } %> <%= pb_rails "tooltip", props: { trigger_element_selector: "#tool-tip-with-icon-2", tooltip_id: "tool-tip-with-icon-2", position: "bottom" } do %> <%= pb_rails("icon", props: { icon: "paper-plane", fixed_width: true, color: "white", size: "1x", padding_right: "xxs" }) %> Send Email <% end %> <%= pb_rails "button", props: { id: "tool-tip-with-icon-3", text: "Tooltip With Icon" } %> <%= pb_rails "tooltip", props: { trigger_element_selector: "#tool-tip-with-icon-3", tooltip_id: "tool-tip-with-icon-3", position: "left" } do %> <%= pb_rails("icon", props: { icon: "paper-plane", fixed_width: true, color: "white", size: "1x", padding_right: "xxs" }) %> Send Email <% end %> <%= pb_rails "button", props: { id: "tool-tip-with-icon-4", text: "Tooltip With Icon" } %> <%= pb_rails "tooltip", props: { trigger_element_selector: "#tool-tip-with-icon-4", tooltip_id: "tool-tip-with-icon-4", position: "right" } do %> <%= pb_rails("icon", props: { icon: "paper-plane", fixed_width: true, color: "white", size: "1x", padding_right: "xxs" }) %> Send Email <% end %> <% end %>
Waits for the specified time when the event listener runs before triggering the tooltip.
The delay_open and delay_close accept numbers in milliseconds. 1 second is 1000 milliseconds.
<%= pb_rails("flex", props: { orientation: "row", gap: "md" }) do %> <%= pb_rails("flex/flex_item", props: {margin_top: "md"}) do %> <%= pb_rails("button", props: {classname: "tooltip-delay", text: "1s delay"}) %> <% end %> <%= pb_rails("flex/flex_item", props: {margin_top: "md"}) do %> <%= pb_rails("button", props: {classname: "tooltip-open-delay", text: "Open only"}) %> <% end %> <%= pb_rails("flex/flex_item", props: {margin_top: "md"}) do %> <%= pb_rails("button", props: {classname: "tooltip-close-delay", text: "Close only"}) %> <% end %> <%= pb_rails("tooltip", props: { trigger_element_selector: ".tooltip-delay", tooltip_id: "delay-tooltip", position: 'top', delay_open: 1000, delay_close: 1000 }) do %> 1s open/close delay <% end %> <%= pb_rails("tooltip", props: { trigger_element_selector: ".tooltip-open-delay", tooltip_id: "open-tooltip", position: 'top', delay_open: 1000 }) do %> 1s open delay <% end %> <%= pb_rails("tooltip", props: { trigger_element_selector: ".tooltip-close-delay", tooltip_id: "close-tooltip", position: 'top', delay_close: 1000 }) do %> 1s close delay <% end %> <% end %>
enabled
You can build your own logic to control whether to show or hide the tooltip.
Click on the Toggle state button to change the state of the component and hover over the 'hover me' text to see it in action.
Each Tooltip has a dataset with the pbTooltipShowTooltip property set to true by default. To update it, access the pbTooltipShowTooltip in the dataset of your tooltip element: yourTooltip.dataset.pbTooltipShowTooltip = 'false'
<%= pb_rails("flex", props: { orientation: "column", gap: "md" }) do %> <%= pb_rails("button", props: {text: "Toggle state", id: "toggle-tooltip-button"}) %> <%= pb_rails("body") do %> Tooltip is: <code id="show-tooltip-state">enabled</code> <% end %> <%= pb_rails("flex/flex_item") do %> <span id="truncated-tooltip-1">Hover me</span> <%= pb_rails("tooltip", props: { trigger_element_selector: "#truncated-tooltip-1", tooltip_id: "truncated-1", position: "right", }) do %> Tooltip is enabled <% end %> <% end %> <% end %> <script> const toggleTooltipButton = document.getElementById("toggle-tooltip-button"); const showTooltipStateText = document.getElementById("show-tooltip-state"); function hideTooltipIfNotTruncated(tooltipId) { const tooltipElement = document.querySelector( `[data-pb-tooltip-tooltip-id="${tooltipId}"]` ); tooltipElement.dataset.pbTooltipShowTooltip = tooltipElement.dataset.pbTooltipShowTooltip == "false" ? "true" : "false"; showTooltipStateText.innerText = tooltipElement.dataset.pbTooltipShowTooltip == "false" ? "disabled" : "enabled"; } toggleTooltipButton.addEventListener("click", () => { hideTooltipIfNotTruncated("truncated-1"); }); </script>
Set the prop use_click_to_open as true so that the tooltip will only appear when an item is clicked rather than hovered over.
<%= pb_rails("button", props: { text: "Click to Open", id: "click-tooltip-trigger-1", variant: "primary" }) %> <%= pb_rails("tooltip", props: { trigger_element_selector: "#click-tooltip-trigger-1", tooltip_id: "click-tooltip-1", position: "top", use_click_to_open: true }) do %> Tooltip opened by click! Click trigger again to close. <% end %>
| Props | Type | Values |
|---|---|---|
align_content |
enum | responsive
|
start
end
center
spaceBetween
spaceAround
spaceEvenly
|
align_items |
enum | responsive
|
start
end
center
|
border_radius |
enum
|
none
xs
sm
md
lg
xl
rounded
|
cursor |
enum
|
auto
default
none
contextMenu
help
pointer
progress
wait
cell
|
dark |
boolean
|
true
false
|
flex |
enum | responsive
|
auto
initial
0
1
2
3
4
5
6
7
8
9
10
11
12
none
|
flex_direction |
enum | responsive
|
row
column
rowReverse
columnReverse
|
flex_wrap |
enum | responsive
|
wrap
nowrap
wrapReverse
|
justify_content |
enum | responsive
|
start
end
center
spaceBetween
spaceAround
spaceEvenly
|
line_height |
enum
|
loosest
looser
loose
normal
tight
tighter
tightest
|
margin_right |
array
|
none
xxs
xs
sm
md
lg
xl
|
margin_left |
array
|
none
xxs
xs
sm
md
lg
xl
|
margin_top |
array
|
none
xxs
xs
sm
md
lg
xl
|
margin_bottom |
array
|
none
xxs
xs
sm
md
lg
xl
|
margin_x |
array
|
none
xxs
xs
sm
md
lg
xl
|
margin_y |
array
|
none
xxs
xs
sm
md
lg
xl
|
margin |
array
|
none
xxs
xs
sm
md
lg
xl
|
width |
string
|
|
min_width |
string
|
|
max_width |
string
|
|
gap |
string | responsive
|
|
column_gap |
string | responsive
|
|
row_gap |
string | responsive
|
|
number_spacing |
enum
|
tabular
|
order |
enum | responsive
|
none
first
1
2
3
4
5
6
7
8
9
10
11
12
|
overflow_x |
enum
|
scroll
visible
hidden
auto
|
overflow_y |
enum
|
scroll
visible
hidden
auto
|
overflow |
enum
|
scroll
visible
hidden
auto
|
padding_right |
array
|
none
xxs
xs
sm
md
lg
xl
|
padding_left |
array
|
none
xxs
xs
sm
md
lg
xl
|
padding_top |
array
|
none
xxs
xs
sm
md
lg
xl
|
padding_bottom |
array
|
none
xxs
xs
sm
md
lg
xl
|
padding_x |
array
|
none
xxs
xs
sm
md
lg
xl
|
padding_y |
array
|
none
xxs
xs
sm
md
lg
xl
|
padding |
array
|
none
xxs
xs
sm
md
lg
xl
|
position |
enum
|
relative
absolute
fixed
sticky
static
|
shadow |
enum
|
none
deep
deeper
deepest
|
text_align |
enum | responsive
|
start
end
left
right
center
justify
justifyAll
matchParent
|
truncate |
enum
|
none
1
2
3
4
5
|
vertical_align |
enum | responsive
|
baseline
super
top
middle
bottom
sub
text-top
text-bottom
|
z_index |
enum | responsive
|
1
2
3
4
5
6
7
8
9
10
max
|
top |
enum | object
|
xxs
xs
sm
md
lg
xl
xxl
|
inset |
boolean
|
true
false
|
right |
enum | object
|
xxs
xs
sm
md
lg
xl
xxl
|
bottom |
enum | object
|
xxs
xs
sm
md
lg
xl
xxl
|
left |
enum | object
|
xxs
xs
sm
md
lg
xl
xxl
|
height |
string
|
|
max_height |
string
|
|
min_height |
string
|
|
hover |
object
|
|
group_hover |
boolean
|
true
false
|
| Props | Type | Values | Default |
|---|---|---|---|
use_click_to_open |
boolean
|
true
false
|
false
|
delay |
number | partial<{open: number; close: number}>
|
||
icon |
string
|
||
interaction |
boolean
|
true
false
|
false
|
placement |
placement
|
||
text |
string
|
||
show_tooltip |
boolean
|
true
false
|
|
force_open_tooltip |
boolean
|
true
false
|
|
delay_open |
string
|
||
delay_close |
string
|
||
tooltip_id |
string
|
||
trigger_element_selector |
string
|
||
trigger_element_id |
string
|
||
trigger_method |
enum
|
hover
click
|
hover
|