primitives

Tooltip

Tooltip — базовый примитив RevueUI (Reka UI + shadcn-совместимый API).

Загрузка превью…

src/ui/tooltip/Tooltip.vue

<script setup lang="ts">
import { TooltipRoot } from "reka-ui"
</script>

<template>
  <TooltipRoot data-slot="tooltip">
    <slot />
  </TooltipRoot>
</template>

src/ui/tooltip/TooltipContent.vue

<script setup lang="ts">
import type { HTMLAttributes } from "vue"
import { TooltipArrow, TooltipContent, TooltipPortal } from "reka-ui"
import { cn } from "@/lib/utils"

const props = withDefaults(
  defineProps<{
    class?: HTMLAttributes["class"]
    sideOffset?: number
  }>(),
  {
    sideOffset: 0,
  }
)
</script>

<template>
  <TooltipPortal>
    <TooltipContent
      data-slot="tooltip-content"
      :side-offset="props.sideOffset"
      :class="
        cn(
          'cn-tooltip-content z-50 w-fit max-w-xs origin-(--radix-tooltip-content-transform-origin) bg-foreground text-background',
          props.class
        )
      "
    >
      <slot />
      <TooltipArrow class="cn-tooltip-arrow z-50 translate-y-[calc(-50%_-_2px)] bg-foreground fill-foreground" />
    </TooltipContent>
  </TooltipPortal>
</template>

src/ui/tooltip/TooltipProvider.vue

<script setup lang="ts">
/**
 * Порт базового радикс-слоя (registry/bases/radix/ui/tooltip.tsx, MIT).
 * Radix TooltipPrimitive -> reka-ui Tooltip*, один в один. Позиционирующая
 * CSS-переменная Radix (`--radix-tooltip-content-transform-origin`)
 * оставлена буквально как в оригинале (правило 1); см. docs/PORTING.md.
 */
import { TooltipProvider } from "reka-ui"

const props = withDefaults(
  defineProps<{
    delayDuration?: number
  }>(),
  {
    delayDuration: 0,
  }
)
</script>

<template>
  <TooltipProvider data-slot="tooltip-provider" :delay-duration="props.delayDuration">
    <slot />
  </TooltipProvider>
</template>

src/ui/tooltip/TooltipTrigger.vue

<script setup lang="ts">
import { TooltipTrigger } from "reka-ui"
</script>

<template>
  <TooltipTrigger data-slot="tooltip-trigger">
    <slot />
  </TooltipTrigger>
</template>

src/ui/tooltip/index.ts

export { default as Tooltip } from "./Tooltip.vue"
export { default as TooltipContent } from "./TooltipContent.vue"
export { default as TooltipProvider } from "./TooltipProvider.vue"
export { default as TooltipTrigger } from "./TooltipTrigger.vue"

Установка

npx shadcn-vue@latest add https://revueui.rootapi.dev/r/tooltip.json

Зависимости реестра

npm-зависимости

  • reka-ui

Источник: порт из ReUI (Keenthemes, MIT)