playbook_ui 14.14.0.pre.alpha.revert4339revert4242play1633displaytitle6456 → 14.14.0.pre.rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/_playbook.scss +1 -0
  3. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.scss +0 -3
  4. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.tsx +5 -6
  5. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.rb +1 -8
  6. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props.html.erb +1 -1
  7. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_rails.md +1 -3
  8. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_react.md +1 -1
  9. data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +0 -2
  10. data/app/pb_kits/playbook/pb_advanced_table/docs/index.js +1 -2
  11. data/app/pb_kits/playbook/pb_avatar_action_button/_avatar_action_button.scss +66 -0
  12. data/app/pb_kits/playbook/pb_avatar_action_button/_avatar_action_button.tsx +98 -0
  13. data/app/pb_kits/playbook/pb_avatar_action_button/avatar_action_button.html.erb +28 -0
  14. data/app/pb_kits/playbook/pb_avatar_action_button/avatar_action_button.rb +42 -0
  15. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_actions.html.erb +19 -0
  16. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_actions.jsx +26 -0
  17. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_default.html.erb +10 -0
  18. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_default.jsx +17 -0
  19. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_on_click.jsx +19 -0
  20. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_onclick.html.erb +16 -0
  21. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_placement.html.erb +35 -0
  22. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_placement.jsx +42 -0
  23. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_tooltip.html.erb +13 -0
  24. data/app/pb_kits/playbook/pb_avatar_action_button/docs/example.yml +15 -0
  25. data/app/pb_kits/playbook/pb_avatar_action_button/docs/index.js +4 -0
  26. data/app/pb_kits/playbook/pb_avatar_action_button/pb_avatar_action_button.test.js +31 -0
  27. data/app/pb_kits/playbook/pb_bar_graph/docs/example.yml +0 -1
  28. data/app/pb_kits/playbook/pb_bar_graph/docs/index.js +0 -1
  29. data/app/pb_kits/playbook/pb_checkbox/_checkbox.tsx +8 -17
  30. data/app/pb_kits/playbook/pb_checkbox/checkbox.test.js +0 -16
  31. data/app/pb_kits/playbook/pb_checkbox/docs/example.yml +1 -2
  32. data/app/pb_kits/playbook/pb_checkbox/docs/index.js +0 -1
  33. data/app/pb_kits/playbook/pb_currency/_currency.tsx +31 -46
  34. data/app/pb_kits/playbook/pb_currency/currency.html.erb +8 -15
  35. data/app/pb_kits/playbook/pb_currency/currency.rb +2 -17
  36. data/app/pb_kits/playbook/pb_currency/docs/example.yml +0 -2
  37. data/app/pb_kits/playbook/pb_currency/docs/index.js +1 -2
  38. data/app/pb_kits/playbook/pb_date_picker/_date_picker.tsx +1 -3
  39. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_table.html.erb +2 -2
  40. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_table.md +1 -4
  41. data/app/pb_kits/playbook/pb_draggable/docs/example.yml +0 -2
  42. data/app/pb_kits/playbook/pb_draggable/docs/index.js +1 -2
  43. data/app/pb_kits/playbook/pb_draggable/subcomponents/DraggableContainer.tsx +4 -7
  44. data/app/pb_kits/playbook/pb_draggable/subcomponents/DraggableItem.tsx +3 -6
  45. data/app/pb_kits/playbook/pb_drawer/_drawer.scss +8 -32
  46. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_default.html.erb +1 -20
  47. data/app/pb_kits/playbook/pb_drawer/docs/example.yml +0 -5
  48. data/app/pb_kits/playbook/pb_drawer/drawer.html.erb +12 -20
  49. data/app/pb_kits/playbook/pb_drawer/drawer.rb +1 -49
  50. data/app/pb_kits/playbook/pb_form/docs/_form_form_with.html.erb +0 -1
  51. data/app/pb_kits/playbook/pb_form/docs/_form_form_with_validate.html.erb +1 -2
  52. data/app/pb_kits/playbook/pb_icon_button/docs/_icon_button_default.html.erb +2 -1
  53. data/app/pb_kits/playbook/pb_icon_button/docs/example.yml +3 -5
  54. data/app/pb_kits/playbook/pb_icon_button/icon_button.html.erb +1 -1
  55. data/app/pb_kits/playbook/pb_icon_button/icon_button.rb +0 -3
  56. data/app/pb_kits/playbook/pb_multi_level_select/multi_level_select.html.erb +6 -1
  57. data/app/pb_kits/playbook/pb_nav/item.html.erb +19 -7
  58. data/app/pb_kits/playbook/pb_nav/nav.html.erb +8 -3
  59. data/app/pb_kits/playbook/pb_online_status/online_status.html.erb +6 -1
  60. data/app/pb_kits/playbook/pb_overlay/_overlay.tsx +0 -4
  61. data/app/pb_kits/playbook/pb_overlay/docs/example.yml +0 -2
  62. data/app/pb_kits/playbook/pb_overlay/docs/index.js +0 -1
  63. data/app/pb_kits/playbook/pb_overlay/overlay.html.erb +3 -5
  64. data/app/pb_kits/playbook/pb_overlay/overlay.rb +0 -9
  65. data/app/pb_kits/playbook/pb_overlay/subcomponents/_overlay_token.tsx +10 -48
  66. data/app/pb_kits/playbook/pb_popover/popover.html.erb +6 -1
  67. data/app/pb_kits/playbook/pb_progress_pills/_progress_pills.scss +1 -6
  68. data/app/pb_kits/playbook/pb_progress_pills/_progress_pills.tsx +5 -7
  69. data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_default.html.erb +0 -1
  70. data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_default.jsx +0 -7
  71. data/app/pb_kits/playbook/pb_progress_pills/docs/example.yml +0 -2
  72. data/app/pb_kits/playbook/pb_progress_pills/docs/index.js +0 -1
  73. data/app/pb_kits/playbook/pb_progress_pills/progress_pills.html.erb +7 -2
  74. data/app/pb_kits/playbook/pb_progress_pills/progress_pills.rb +0 -6
  75. data/app/pb_kits/playbook/pb_progress_pills/progress_pills.test.js +1 -26
  76. data/app/pb_kits/playbook/pb_progress_simple/progress_simple.html.erb +5 -1
  77. data/app/pb_kits/playbook/pb_progress_step/progress_step.html.erb +5 -1
  78. data/app/pb_kits/playbook/pb_progress_step/progress_step_item.html.erb +7 -3
  79. data/app/pb_kits/playbook/pb_radio/radio.html.erb +11 -6
  80. data/app/pb_kits/playbook/pb_select/select.rb +0 -8
  81. data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible.jsx +1 -1
  82. data/app/pb_kits/playbook/pb_table/docs/example.yml +0 -5
  83. data/app/pb_kits/playbook/pb_table/docs/index.js +1 -3
  84. data/app/pb_kits/playbook/pb_table/index.ts +9 -41
  85. data/app/pb_kits/playbook/pb_table/styles/_collapsible.scss +0 -4
  86. data/app/pb_kits/playbook/pb_table/subcomponents/_table_body.tsx +2 -29
  87. data/app/pb_kits/playbook/pb_table/subcomponents/_table_row.tsx +3 -31
  88. data/app/pb_kits/playbook/pb_table/table_body.html.erb +7 -13
  89. data/app/pb_kits/playbook/pb_table/table_body.rb +0 -2
  90. data/app/pb_kits/playbook/pb_table/table_row.html.erb +7 -14
  91. data/app/pb_kits/playbook/pb_table/table_row.rb +1 -14
  92. data/app/pb_kits/playbook/pb_text_input/docs/_text_input_mask.html.erb +0 -14
  93. data/app/pb_kits/playbook/pb_text_input/index.js +0 -9
  94. data/app/pb_kits/playbook/pb_text_input/text_input.rb +2 -5
  95. data/app/pb_kits/playbook/pb_title/_title.scss +0 -32
  96. data/app/pb_kits/playbook/pb_title/_title.tsx +1 -10
  97. data/app/pb_kits/playbook/pb_title/docs/_title_default.html.erb +2 -1
  98. data/app/pb_kits/playbook/pb_title/docs/_title_default.jsx +1 -1
  99. data/app/pb_kits/playbook/pb_title/docs/example.yml +0 -2
  100. data/app/pb_kits/playbook/pb_title/docs/index.js +0 -1
  101. data/app/pb_kits/playbook/pb_title/title.rb +1 -10
  102. data/app/pb_kits/playbook/pb_tooltip/_tooltip.scss +3 -0
  103. data/app/pb_kits/playbook/pb_tooltip/docs/example.yml +0 -2
  104. data/app/pb_kits/playbook/pb_tooltip/index.js +2 -2
  105. data/app/pb_kits/playbook/pb_tooltip/tooltip.rb +2 -10
  106. data/dist/chunks/{_typeahead-_d2af7Id.js → _typeahead-btjo1UN5.js} +4 -4
  107. data/dist/chunks/_weekday_stacked-TIh9nTmZ.js +45 -0
  108. data/dist/chunks/{lib-Fr78pbpF.js → lib-DjpLC8uO.js} +2 -2
  109. data/dist/chunks/{pb_form_validation-CN51bfsD.js → pb_form_validation-S56UaHZl.js} +1 -1
  110. data/dist/chunks/vendor.js +1 -1
  111. data/dist/menu.yml +10 -3
  112. data/dist/playbook-doc.js +1 -1
  113. data/dist/playbook-rails-react-bindings.js +1 -1
  114. data/dist/playbook-rails.js +1 -1
  115. data/dist/playbook.css +1 -1
  116. data/lib/playbook/forms/builder.rb +0 -1
  117. data/lib/playbook/version.rb +2 -2
  118. metadata +23 -62
  119. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_headers_custom_cell.jsx +0 -75
  120. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_sticky_header.html.erb +0 -33
  121. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_sticky_header_rails.md +0 -3
  122. data/app/pb_kits/playbook/pb_bar_graph/BarGraphStyles.scss +0 -58
  123. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_pb_styles.jsx +0 -64
  124. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_pb_styles.md +0 -1
  125. data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_react_hook.jsx +0 -69
  126. data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_react_hook.md +0 -1
  127. data/app/pb_kits/playbook/pb_currency/docs/_currency_null_display.html.erb +0 -22
  128. data/app/pb_kits/playbook/pb_currency/docs/_currency_null_display.jsx +0 -34
  129. data/app/pb_kits/playbook/pb_currency/docs/_currency_null_display_rails.md +0 -1
  130. data/app/pb_kits/playbook/pb_currency/docs/_currency_null_display_react.md +0 -1
  131. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_table_react.jsx +0 -90
  132. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_table_react.md +0 -5
  133. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_behavior.html.erb +0 -8
  134. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_borders.html.erb +0 -33
  135. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_breakpoints.html.erb +0 -0
  136. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_menu.html.erb +0 -24
  137. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_overlay.html.erb +0 -21
  138. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_overlay.md +0 -1
  139. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_sizes.html.erb +0 -49
  140. data/app/pb_kits/playbook/pb_drawer/index.js +0 -257
  141. data/app/pb_kits/playbook/pb_icon_button/_icon_button.tsx +0 -71
  142. data/app/pb_kits/playbook/pb_icon_button/docs/_icon_button_default.jsx +0 -17
  143. data/app/pb_kits/playbook/pb_icon_button/docs/_icon_button_sizes.html.erb +0 -27
  144. data/app/pb_kits/playbook/pb_icon_button/docs/_icon_button_sizes.jsx +0 -61
  145. data/app/pb_kits/playbook/pb_icon_button/docs/index.js +0 -2
  146. data/app/pb_kits/playbook/pb_icon_button/icon_button.test.jsx +0 -39
  147. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_vertical_dynamic_multi_directional.html.erb +0 -11
  148. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_vertical_dynamic_multi_directional.jsx +0 -37
  149. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_vertical_dynamic_multi_directional.md +0 -1
  150. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_vertical_dynamic_multi_directional_react.md +0 -1
  151. data/app/pb_kits/playbook/pb_overlay/index.js +0 -61
  152. data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_default.md +0 -1
  153. data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_full_width.html.erb +0 -1
  154. data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_full_width.jsx +0 -18
  155. data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_full_width_rails.md +0 -1
  156. data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_full_width_react.md +0 -1
  157. data/app/pb_kits/playbook/pb_select/index.js +0 -38
  158. data/app/pb_kits/playbook/pb_table/docs/_table_with_clickable_rows.html.erb +0 -47
  159. data/app/pb_kits/playbook/pb_table/docs/_table_with_clickable_rows.jsx +0 -88
  160. data/app/pb_kits/playbook/pb_table/docs/_table_with_clickable_rows.md +0 -1
  161. data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_custom_click.html.erb +0 -51
  162. data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_custom_click_rails.md +0 -2
  163. data/app/pb_kits/playbook/pb_table/docs/_table_with_selectable_rows.html.erb +0 -96
  164. data/app/pb_kits/playbook/pb_table/docs/_table_with_selectable_rows.jsx +0 -101
  165. data/app/pb_kits/playbook/pb_table/docs/_table_with_selectable_rows.md +0 -1
  166. data/app/pb_kits/playbook/pb_title/docs/_title_display_size.html.erb +0 -7
  167. data/app/pb_kits/playbook/pb_title/docs/_title_display_size.jsx +0 -54
  168. data/app/pb_kits/playbook/pb_title/docs/_title_display_size.md +0 -1
  169. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_delay_rails.html.erb +0 -39
  170. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_delay_rails.md +0 -3
  171. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_interaction.html.erb +0 -26
  172. data/app/pb_kits/playbook/pb_tooltip/floating_ui.js +0 -282
  173. data/dist/chunks/_weekday_stacked-BZe1DgW-.js +0 -45
  174. data/lib/playbook/forms/builder/time_zone_select_field.rb +0 -19
  175. /data/app/pb_kits/playbook/pb_table/docs/{_table_with_collapsible_with_custom_click_react.md → _table_with_collapsible_with_custom_click.md} +0 -0
@@ -1,54 +0,0 @@
1
- import React from 'react'
2
-
3
- import Title from '../_title'
4
-
5
- const TitleDisplaySize = (props) => {
6
- return (
7
- <div>
8
- <Title
9
- displaySize="xs"
10
- tag="h1"
11
- text="Display Size xs"
12
- {...props}
13
- />
14
- <Title
15
- displaySize="sm"
16
- tag="h1"
17
- text="Display Size sm"
18
- {...props}
19
- />
20
- <Title
21
- displaySize="md"
22
- tag="h1"
23
- text="Display Size md"
24
- {...props}
25
- />
26
- <Title
27
- displaySize="lg"
28
- tag="h1"
29
- text="Display Size lg"
30
- {...props}
31
- />
32
- <Title
33
- displaySize="xl"
34
- tag="h1"
35
- text="Display Size xl"
36
- {...props}
37
- />
38
- <Title
39
- displaySize="xxl"
40
- tag="h1"
41
- text="Display Size xxl"
42
- {...props}
43
- />
44
- <Title
45
- size="display"
46
- tag="h1"
47
- text="This is a size of display"
48
- {...props}
49
- />
50
- </div>
51
- )
52
- }
53
-
54
- export default TitleDisplaySize
@@ -1 +0,0 @@
1
- Responsive sizes for large screens and tablets, perfect for digital signage.
@@ -1,39 +0,0 @@
1
- <%= pb_rails("flex", props: { orientation: "row", gap: "md" }) do %>
2
- <%= pb_rails("flex/flex_item", props: {margin_top: "md"}) do %>
3
- <%= pb_rails("button", props: {classname: "tooltip-delay", text: "1s delay"}) %>
4
- <% end %>
5
-
6
- <%= pb_rails("flex/flex_item", props: {margin_top: "md"}) do %>
7
- <%= pb_rails("button", props: {classname: "tooltip-open-delay", text: "Open only"}) %>
8
- <% end %>
9
-
10
- <%= pb_rails("flex/flex_item", props: {margin_top: "md"}) do %>
11
- <%= pb_rails("button", props: {classname: "tooltip-close-delay", text: "Close only"}) %>
12
- <% end %>
13
-
14
- <%= pb_rails("tooltip", props: {
15
- trigger_element_selector: ".tooltip-delay",
16
- tooltip_id: "delay-tooltip",
17
- position: 'top',
18
- delay_open: 1000,
19
- delay_close: 1000
20
- }) do %>
21
- 1s open/close delay
22
- <% end %>
23
- <%= pb_rails("tooltip", props: {
24
- trigger_element_selector: ".tooltip-open-delay",
25
- tooltip_id: "open-tooltip",
26
- position: 'top',
27
- delay_open: 1000
28
- }) do %>
29
- 1s open delay
30
- <% end %>
31
- <%= pb_rails("tooltip", props: {
32
- trigger_element_selector: ".tooltip-close-delay",
33
- tooltip_id: "close-tooltip",
34
- position: 'top',
35
- delay_close: 1000
36
- }) do %>
37
- 1s close delay
38
- <% end %>
39
- <% end %>
@@ -1,3 +0,0 @@
1
- Waits for the specified time when the event listener runs before triggering the tooltip.
2
-
3
- The `delay_open` and `delay_close` accept numbers in milliseconds. 1 second is 1000 milliseconds.
@@ -1,26 +0,0 @@
1
- <%= pb_rails("flex", props: { gap: "md", wrap: true }) do %>
2
- <%= pb_rails("flex/flex_item") do %>
3
- <%= pb_rails("button", props: { text: "With Interaction", id: "tooltip-interaction"}) %>
4
-
5
- <%= pb_rails("tooltip", props: {
6
- trigger_element_selector: "#tooltip-interaction",
7
- tooltip_id: "tooltip-with-interaction",
8
- position: 'top',
9
- interaction: true
10
- }) do %>
11
- You can copy me
12
- <% end %>
13
- <% end %>
14
-
15
- <%= pb_rails("flex/flex_item") do %>
16
- <%= pb_rails("button", props: { text: "No Interaction", id: "tooltip-no-interaction"}) %>
17
-
18
- <%= pb_rails("tooltip", props: {
19
- trigger_element_selector: "#tooltip-no-interaction",
20
- tooltip_id: "tooltip-without-interaction",
21
- position: 'top',
22
- }) do %>
23
- I'm just a regular tooltip
24
- <% end %>
25
- <% end %>
26
- <% end %>
@@ -1,282 +0,0 @@
1
- import PbEnhancedElement from '../pb_enhanced_element'
2
- import { computePosition, offset, flip, shift, arrow, autoUpdate } from '@floating-ui/dom'
3
-
4
- const TOOLTIP_OFFSET = 20
5
- const TOOLTIP_TIMEOUT = 250
6
- const SAFE_ZONE_MARGIN = 1
7
-
8
- export default class PbTooltipFloatingUi extends PbEnhancedElement {
9
- static get selector() {
10
- return '[data-pb-tooltip-kit="true"][data-pb-tooltip-delay-open], [data-pb-tooltip-kit="true"][data-pb-tooltip-delay-close], [data-pb-tooltip-kit="true"][data-pb-tooltip-interaction="true"]'
11
- }
12
-
13
- connect() {
14
- if (this.tooltipInteraction) {
15
- document.addEventListener('mousemove', (e) => {
16
- this.lastMouseX = e.clientX
17
- this.lastMouseY = e.clientY
18
- })
19
- }
20
-
21
- this.triggerElements.forEach((trigger) => {
22
- const method = this.triggerMethod
23
- const interactionEnabled = this.tooltipInteraction
24
-
25
- if (method === 'click') {
26
- trigger.addEventListener('click', () => {
27
- this.showTooltip(trigger)
28
- })
29
- } else {
30
- trigger.addEventListener('mouseenter', () => {
31
- clearSafeZoneListener(this)
32
- clearTimeout(this.mouseleaveTimeout)
33
- this.currentTrigger = trigger
34
- const delayOpen = this.delayOpen ? parseInt(this.delayOpen) : TOOLTIP_TIMEOUT
35
- this.mouseenterTimeout = setTimeout(() => {
36
- this.showTooltip(trigger)
37
- if (interactionEnabled) {
38
- this.checkCloseTooltip(trigger)
39
- }
40
- }, delayOpen)
41
- })
42
-
43
- trigger.addEventListener('mouseleave', () => {
44
- clearTimeout(this.mouseenterTimeout)
45
- if (this.delayClose) {
46
- const delayClose = parseInt(this.delayClose)
47
- this.mouseleaveTimeout = setTimeout(() => {
48
- if (interactionEnabled) {
49
- this.attachSafeZoneListener()
50
- } else {
51
- this.hideTooltip()
52
- }
53
- }, delayClose)
54
- } else {
55
- if (interactionEnabled) {
56
- this.attachSafeZoneListener()
57
- } else {
58
- this.hideTooltip()
59
- }
60
- }
61
- })
62
-
63
- if (interactionEnabled) {
64
- this.tooltip.addEventListener('mouseenter', () => {
65
- clearSafeZoneListener(this)
66
- })
67
-
68
- this.tooltip.addEventListener('mouseleave', () => {
69
- this.attachSafeZoneListener()
70
- })
71
- }
72
- }
73
- })
74
- }
75
-
76
- attachSafeZoneListener() {
77
- clearSafeZoneListener(this)
78
- this.safeZoneHandler = (e) => {
79
- if (!this.currentTrigger) return
80
- const triggerRect = this.currentTrigger.getBoundingClientRect()
81
- const tooltipRect = this.tooltip.getBoundingClientRect()
82
- const safeRect = getSafeZone(triggerRect, tooltipRect, this.position, SAFE_ZONE_MARGIN)
83
- if (!isPointInsideRect(e.clientX, e.clientY, safeRect)) {
84
- this.hideTooltip()
85
- clearSafeZoneListener(this)
86
- }
87
- }
88
- document.addEventListener('mousemove', this.safeZoneHandler)
89
- }
90
-
91
- checkCloseTooltip(trigger) {
92
- document.querySelector('body').addEventListener('click', ({ target }) => {
93
- const isTooltip = target.closest(`#${this.tooltipId}`) === this.tooltip
94
- const isTrigger = target.closest(this.triggerElementSelector) === trigger
95
- if (isTrigger || isTooltip) {
96
- this.checkCloseTooltip(trigger)
97
- } else {
98
- this.hideTooltip()
99
- }
100
- }, { once: true })
101
- }
102
-
103
- showTooltip(trigger) {
104
- if (this.shouldShowTooltip === 'false') return
105
-
106
- clearSafeZoneListener(this)
107
-
108
- this.tooltip.style.opacity = '1'
109
- this.tooltip.style.visibility = 'visible'
110
- this.tooltip.style.pointerEvents = 'auto'
111
-
112
- if (this.cleanup) {
113
- this.cleanup()
114
- }
115
-
116
- const arrowElement = document.querySelector(`#${this.tooltipId}-arrow`)
117
-
118
- this.cleanup = autoUpdate(trigger, this.tooltip, () => {
119
- computePosition(trigger, this.tooltip, {
120
- placement: this.position,
121
- strategy: 'fixed',
122
- middleware: [
123
- offset({ mainAxis: TOOLTIP_OFFSET, crossAxis: 0 }),
124
- flip(),
125
- shift(),
126
- arrow({ element: arrowElement })
127
- ],
128
- }).then(({ x, y, placement, middlewareData }) => {
129
- Object.assign(this.tooltip.style, {
130
- left: `${x}px`,
131
- top: `${y}px`,
132
- position: 'fixed'
133
- })
134
- this.tooltip.setAttribute('data-popper-placement', placement)
135
- if (arrowElement && middlewareData.arrow) {
136
- const { x: arrowX, y: arrowY } = middlewareData.arrow
137
- Object.assign(arrowElement.style, {
138
- left: arrowX != null ? `${arrowX}px` : '',
139
- top: arrowY != null ? `${arrowY}px` : '',
140
- position: 'absolute'
141
- })
142
- }
143
- })
144
- })
145
-
146
- this.tooltip.classList.add('show')
147
-
148
- if (this.triggerMethod === 'click') {
149
- clearTimeout(this.autoHideTimeout)
150
- this.autoHideTimeout = setTimeout(() => {
151
- this.hideTooltip()
152
- }, 1000)
153
- }
154
- }
155
-
156
- hideTooltip() {
157
- if (!this.tooltip) return
158
-
159
- this.tooltip.classList.add('fade_out')
160
- setTimeout(() => {
161
- if (this.cleanup) {
162
- this.cleanup()
163
- this.cleanup = null
164
- }
165
- this.tooltip.classList.remove('show')
166
- this.tooltip.classList.remove('fade_out')
167
- this.tooltip.style.opacity = '0'
168
- this.tooltip.style.visibility = 'hidden'
169
- this.tooltip.style.pointerEvents = 'none'
170
- this.tooltip.style.position = ''
171
- this.tooltip.style.top = ''
172
- this.tooltip.style.left = ''
173
- this.tooltip.style.transform = ''
174
- }, TOOLTIP_TIMEOUT)
175
- }
176
-
177
- get triggerElements() {
178
- let triggerEl
179
- if (this.triggerElementId) {
180
- triggerEl = document.querySelector(`#${this.triggerElementId}`)
181
- } else if (this.triggerElementSelector) {
182
- const selectorIsId = this.triggerElementSelector.indexOf('#') > -1
183
- triggerEl = selectorIsId
184
- ? document.querySelector(this.triggerElementSelector)
185
- : document.querySelectorAll(this.triggerElementSelector)
186
- } else {
187
- triggerEl = this.element
188
- }
189
- if (!triggerEl) {
190
- console.error('Tooltip Kit: No valid trigger element found!')
191
- return []
192
- }
193
- if (triggerEl.length === undefined) {
194
- triggerEl = [triggerEl]
195
- }
196
- return triggerEl
197
- }
198
-
199
- get tooltip() {
200
- return (this._tooltip = this._tooltip || this.element.querySelector(`#${this.tooltipId}`))
201
- }
202
-
203
- get position() {
204
- return this.element.dataset.pbTooltipPosition
205
- }
206
-
207
- get triggerElementId() {
208
- return this.element.dataset.pbTooltipTriggerElementId
209
- }
210
-
211
- get tooltipId() {
212
- return this.element.dataset.pbTooltipTooltipId
213
- }
214
-
215
- get triggerElementSelector() {
216
- return this.element.dataset.pbTooltipTriggerElementSelector
217
- }
218
-
219
- get shouldShowTooltip() {
220
- return this.element.dataset.pbTooltipShowTooltip
221
- }
222
-
223
- get triggerMethod() {
224
- return this.element.dataset.pbTooltipTriggerMethod || 'hover'
225
- }
226
-
227
- get tooltipInteraction() {
228
- return this.element.dataset.pbTooltipInteraction === 'true'
229
- }
230
-
231
- get delayOpen() {
232
- return this.element.dataset.pbTooltipDelayOpen
233
- }
234
-
235
- get delayClose() {
236
- return this.element.dataset.pbTooltipDelayClose
237
- }
238
- }
239
-
240
- function clearSafeZoneListener(context) {
241
- if (context.safeZoneHandler) {
242
- document.removeEventListener('mousemove', context.safeZoneHandler)
243
- context.safeZoneHandler = null
244
- }
245
- }
246
-
247
- function getSafeZone(triggerRect, tooltipRect, placement, margin) {
248
- let safeRect = {}
249
- if (placement.startsWith('top')) {
250
- safeRect.left = triggerRect.left - margin
251
- safeRect.right = triggerRect.right + margin
252
- safeRect.top = tooltipRect.bottom - margin
253
- safeRect.bottom = triggerRect.top + margin
254
- } else if (placement.startsWith('bottom')) {
255
- safeRect.left = triggerRect.left - margin
256
- safeRect.right = triggerRect.right + margin
257
- safeRect.top = triggerRect.bottom - margin
258
- safeRect.bottom = tooltipRect.top + margin
259
- } else if (placement.startsWith('left')) {
260
- safeRect.top = triggerRect.top - margin
261
- safeRect.bottom = triggerRect.bottom + margin
262
- safeRect.left = tooltipRect.right - margin
263
- safeRect.right = triggerRect.left + margin
264
- } else if (placement.startsWith('right')) {
265
- safeRect.top = triggerRect.top - margin
266
- safeRect.bottom = triggerRect.bottom + margin
267
- safeRect.left = triggerRect.right - margin
268
- safeRect.right = tooltipRect.left + margin
269
- } else {
270
- safeRect = {
271
- left: triggerRect.left - margin,
272
- right: triggerRect.right + margin,
273
- top: triggerRect.top - margin,
274
- bottom: triggerRect.bottom + margin,
275
- }
276
- }
277
- return safeRect
278
- }
279
-
280
- function isPointInsideRect(x, y, rect) {
281
- return x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom
282
- }