vael-ui

Global setup

Three singletons. Mount each once, anywhere in your app, and every other component reaches it automatically.

TooltipHost

Powers every v-tooltip. Without one mounted, tooltips silently never appear.

<template>
  <TooltipHost />
  <YourApp />
</template>

It takes the same options every individual tooltip can override:

Props

NameTypeDefaultDescription
side"top" | "right" | "bottom" | "left"Fallbacks for targets whose v-tooltip value doesn't specify them.
openDelaynumber | undefinedDelay before a cold open, ms. Warm-group opens are always instant.
closeDelaynumber | undefinedGrace period after the pointer leaves, ms — long enough to travel onto the tooltip.
beforeClose((done: () => void) => void) | undefinedGlobal default for every v-tooltip target; override per-target with `v-tooltip="{ beforeClose }"`.
forceMountboolean | undefinedGlobal default for every v-tooltip target; override per-target with `v-tooltip="{ forceMount }"`.
uiPartial<{ positioner: UiPartValue; panel: UiPartValue; }> | undefinedPer-instance part-class/style overrides.

DialogHost

Renders whatever openDialog() creates imperatively. Not needed for a <Dialog v-model:open> in your own template. No props, no configuration.

<template>
  <DialogHost />
  <YourApp />
</template>

Toaster

Renders whatever toast() creates. Has real configuration, so it keeps its own page.

<template>
  <Toaster />
  <YourApp />
</template>

All together

Mount all three once, wherever your app's root template lives:

<script setup lang="ts">
import { DialogHost, Toaster, TooltipHost } from 'vael-ui'
</script>

<template>
  <TooltipHost />
  <DialogHost />
  <Toaster />
  <YourApp />
</template>