Skip to content

Commit 69a7b95

Browse files
committed
feat(Tooltip): add reference prop
Resolves #4430
1 parent 3b67d54 commit 69a7b95

File tree

3 files changed

+58
-2
lines changed

3 files changed

+58
-2
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
<script setup lang="ts">
2+
const open = ref(false)
3+
const anchor = ref({ x: 0, y: 0 })
4+
5+
const reference = computed(() => ({
6+
getBoundingClientRect: () =>
7+
({
8+
width: 0,
9+
height: 0,
10+
left: anchor.value.x,
11+
right: anchor.value.x,
12+
top: anchor.value.y,
13+
bottom: anchor.value.y,
14+
...anchor.value
15+
} as DOMRect)
16+
}))
17+
</script>
18+
19+
<template>
20+
<UTooltip
21+
:open="open"
22+
:reference="reference"
23+
:content="{ side: 'top', sideOffset: 16, updatePositionStrategy: 'always' }"
24+
>
25+
<div
26+
class="flex items-center justify-center rounded-md border border-dashed border-accented text-sm aspect-video w-72"
27+
@pointerenter="open = true"
28+
@pointerleave="open = false"
29+
@pointermove="(ev) => {
30+
anchor.x = ev.clientX
31+
anchor.y = ev.clientY
32+
}"
33+
>
34+
Hover me
35+
</div>
36+
37+
<template #content>
38+
{{ anchor.x.toFixed(0) }} - {{ anchor.y.toFixed(0) }}
39+
</template>
40+
</UTooltip>
41+
</template>

‎docs/content/3.components/tooltip.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,20 @@ name: 'tooltip-open-example'
186186
In this example, leveraging [`defineShortcuts`](/composables/define-shortcuts), you can toggle the Tooltip by pressing :kbd{value="O"}.
187187
::
188188

189+
### With following cursor :badge{label="Soon" class="align-text-top"}
190+
191+
You can make the Tooltip follow the cursor when hovering over an element using the [`reference`](https://reka-ui.com/docs/components/tooltip#trigger) prop:
192+
193+
::component-example
194+
---
195+
name: 'tooltip-cursor-example'
196+
---
197+
::
198+
199+
::note
200+
This example is based on Reka UI's [Tooltip Cursor](https://reka-ui.com/examples/tooltip-cursor) example.
201+
::
202+
189203
## API
190204

191205
### Props

‎src/runtime/components/Tooltip.vue

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<script lang="ts">
2-
import type { TooltipRootProps, TooltipRootEmits, TooltipContentProps, TooltipContentEmits, TooltipArrowProps } from 'reka-ui'
2+
import type { TooltipRootProps, TooltipRootEmits, TooltipContentProps, TooltipContentEmits, TooltipArrowProps, TooltipTriggerProps } from 'reka-ui'
33
import type { AppConfig } from '@nuxt/schema'
44
import theme from '#build/ui/tooltip'
55
import type { KbdProps } from '../types'
@@ -27,6 +27,7 @@ export interface TooltipProps extends TooltipRootProps {
2727
* @defaultValue true
2828
*/
2929
portal?: boolean | string | HTMLElement
30+
reference?: TooltipTriggerProps['reference']
3031
class?: any
3132
ui?: Tooltip['slots']
3233
}
@@ -70,7 +71,7 @@ const ui = computed(() => tv({ extend: tv(theme), ...(appConfig.ui?.tooltip || {
7071

7172
<template>
7273
<TooltipRoot v-slot="{ open }" v-bind="rootProps">
73-
<TooltipTrigger v-if="!!slots.default" v-bind="$attrs" as-child :class="props.class">
74+
<TooltipTrigger v-if="!!slots.default || !!reference" v-bind="$attrs" as-child :reference="reference" :class="props.class">
7475
<slot :open="open" />
7576
</TooltipTrigger>
7677

0 commit comments

Comments
 (0)