From 3ea4a3706ba001db8fe156f7bb6329b82a590e97 Mon Sep 17 00:00:00 2001 From: Jay George Date: Tue, 18 Aug 2026 16:18:05 +0100 Subject: [PATCH 01/10] Improve hover tunnel --- resources/css/components/tooltips.css | 4 ++++ resources/js/components/Tooltips.vue | 12 +++++++++--- resources/js/composables/tooltip.js | 11 +++++++++-- resources/js/directives/tooltip.js | 6 +++++- 4 files changed, 27 insertions(+), 6 deletions(-) diff --git a/resources/css/components/tooltips.css b/resources/css/components/tooltips.css index ec610e1bea8..7b14ea5d213 100644 --- a/resources/css/components/tooltips.css +++ b/resources/css/components/tooltips.css @@ -9,3 +9,7 @@ .v-popper--theme-tooltip .v-popper__inner { padding: 5px 10px !important; } + +.v-popper--theme-tooltip:has(.tooltip-popper-interactive) { + pointer-events: auto; +} diff --git a/resources/js/components/Tooltips.vue b/resources/js/components/Tooltips.vue index d1d2a963361..705adcc1cf1 100644 --- a/resources/js/components/Tooltips.vue +++ b/resources/js/components/Tooltips.vue @@ -4,7 +4,7 @@ import { Tooltip as VTooltip } from 'floating-vue'; import DOMPurify from 'dompurify'; import { useTooltip } from '@/composables/tooltip.js'; -const { isVisible, content, html, targetEl } = useTooltip(); +const { isVisible, content, html, targetEl, persist, hide } = useTooltip(); const showTooltip = ref(false); const wrapperStyle = ref({}); @@ -66,8 +66,14 @@ watch([isVisible, targetEl, content], async ([visible, target]) => { > diff --git a/resources/js/composables/tooltip.js b/resources/js/composables/tooltip.js index 2b5c1778dab..9ed958afceb 100644 --- a/resources/js/composables/tooltip.js +++ b/resources/js/composables/tooltip.js @@ -23,11 +23,15 @@ function setContent(el, options) { } } -function show(el, options) { +function persist() { if (hideTimeout) { clearTimeout(hideTimeout); hideTimeout = null; } +} + +function show(el, options) { + persist(); if (showTimeout) { clearTimeout(showTimeout); @@ -54,12 +58,14 @@ function hide() { showTimeout = null; } + persist(); + hideTimeout = setTimeout(() => { isVisible.value = false; targetEl.value = null; content.value = ''; html.value = false; - }, 50); + }, html.value ? 200 : 50); } export function useTooltip() { @@ -69,6 +75,7 @@ export function useTooltip() { html: readonly(html), targetEl: readonly(targetEl), show, + persist, hide, }; } diff --git a/resources/js/directives/tooltip.js b/resources/js/directives/tooltip.js index 8ae42ce4e22..4ed97ea4e80 100644 --- a/resources/js/directives/tooltip.js +++ b/resources/js/directives/tooltip.js @@ -19,7 +19,11 @@ function handleMouseEnter(el, binding) { } } -function handleMouseLeave() { +function handleMouseLeave(event) { + if (event.relatedTarget?.closest?.('.v-popper__popper')) { + return; + } + hide(); } From d3cc403a20b14e753c3c442b247a9ac0f5e44776 Mon Sep 17 00:00:00 2001 From: Jay George Date: Tue, 18 Aug 2026 16:38:05 +0100 Subject: [PATCH 02/10] Copy the tooltip on click --- resources/js/components/Tooltips.vue | 24 ++++++++++++++++---- resources/js/components/ui/Publish/Field.vue | 2 +- resources/js/composables/tooltip.js | 8 ++++++- 3 files changed, 27 insertions(+), 7 deletions(-) diff --git a/resources/js/components/Tooltips.vue b/resources/js/components/Tooltips.vue index 705adcc1cf1..bd98ff8e73e 100644 --- a/resources/js/components/Tooltips.vue +++ b/resources/js/components/Tooltips.vue @@ -1,10 +1,12 @@