Tooltips
This example shows how to add tooltips using Tippy.js.
INFO
When manually adding tooltips using CSS, you might want to overwrite the contain: strict CSS declaration on those timeline items. Setting it to layout size will still benefit from increased performance and allows overflown content (such as tooltips) to be visible.
Jan 1, 1970 00:00
00:00:10
00:00:20
00:00:30
00:00:40
00:00:50
Code
vue
<script setup>
import { onMounted } from 'vue';
// import tippy from 'tippy.js'; (disabled for vitepress, but should be enabled)
let tippyInstances = [];
function resetTooltips () {
if (!window.tippy) {
// ensure tippy is loaded (due to import within vitepress)
setTimeout(() => resetTooltips(), 100);
return;
}
tippyInstances.forEach((instance) => instance.destroy());
tippyInstances = [];
tippy('[data-tippy-content]', {
followCursor: 'horizontal',
onCreate: (instance) => {
tippyInstances.push(instance);
},
});
}
onMounted(() => {
resetTooltips();
});
const items = [
{ id: 'item-1', tooltip: 'Tooltip 1', name: 'Hover me!', group: 'group1', type: 'range', start: 1707135072000, end: 1708431072000, cssVariables: { '--item-background': 'var(--color-4)' } },
{ id: 'item-2', tooltip: 'Tooltip 2', name: 'Hover me!', group: 'group1', type: 'range', start: 1708517472000, end: 1709813472000, cssVariables: { '--item-background': 'var(--color-2)' } },
{ id: 'item-3', tooltip: 'Tooltip 3', name: 'Hover me!', group: 'group1', type: 'range', start: 1709903872000, end: 1711199872000, cssVariables: { '--item-background': 'var(--color-3)' } },
];
</script>
<template>
<Timeline
:items="items"
:groups="[ { id: 'group1' } ]"
:viewportMin="1705587257600"
:viewportMax="1711639872000"
@changeViewport="resetTooltips"
>
<template #item="{ item }">
<div
style="inset: 0; position: absolute; padding: .2em 1em; color: white; font-weight: bold;"
:data-tippy-content="item.tooltip"
>
⚑ {{ item.name }}
</div>
</template>
</Timeline>
</template>