mirror of
https://github.com/hanzoai/svelte.git
synced 2026-10-01 00:41:47 +00:00
36 lines
891 B
Svelte
36 lines
891 B
Svelte
<!--
|
|
Tooltip root — a relative wrapper that opens its content on hover/focus of the
|
|
trigger and closes on leave/blur. `openDelay` gates the hover-open (focus opens
|
|
immediately, matching accessible-tooltip behaviour).
|
|
-->
|
|
<script lang="ts">
|
|
import { onDestroy } from 'svelte'
|
|
import { createDisclosure, TOOLTIP } from './internal/context'
|
|
|
|
export let openDelay = 200
|
|
|
|
const { openIt, close } = createDisclosure(TOOLTIP, 'tooltip')
|
|
|
|
let timer: ReturnType<typeof setTimeout> | undefined
|
|
function scheduleOpen() {
|
|
clearTimeout(timer)
|
|
timer = setTimeout(openIt, openDelay)
|
|
}
|
|
function cancel() {
|
|
clearTimeout(timer)
|
|
close()
|
|
}
|
|
onDestroy(() => clearTimeout(timer))
|
|
</script>
|
|
|
|
<div
|
|
class="relative inline-block"
|
|
data-slot="tooltip"
|
|
on:mouseenter={scheduleOpen}
|
|
on:mouseleave={cancel}
|
|
on:focusin={openIt}
|
|
on:focusout={close}
|
|
>
|
|
<slot />
|
|
</div>
|