floating-ui-vue-skilld
Floating UI for Vue (@floating-ui/vue@2.0.1). ALWAYS use when writing code importing "@floating-ui/vue" or using useFloating, arrow, floatingStyles, or autoUpdate. Consult for middleware setup, anchoring, virtual elements, and v1 to v2 migration. Vue 3.3+ only.
How do I install this agent skill?
npx skills add https://github.com/skilld-dev/vue-ecosystem-skills --skill floating-ui-vue-skilldIs this agent skill safe to install?
- Gen Agent Trust Hubpass
This skill is a comprehensive documentation and reference package for the @floating-ui/vue library. It includes API references, best practices, version changelogs, and exports from GitHub issues and discussions. No security risks or malicious patterns were detected.
- Socketpass
No alerts
- Snykpass
Risk: LOW · No issues
What does this agent skill do?
@floating-ui/vue 2.0.1
Vue 3 composable for anchor positioning. useFloating() computes x/y coordinates that place a floating element (tooltip, popover, menu) next to a reference element.
Version limits
- Vue
>=3.3.0only (peer dependency,package.json:58). v2.0.0 dropped thevue-demilayer, ending Vue 2 and Vue <3.3 support. - Vue 2 or Vue <3.3 projects must stay on
npm install @floating-ui/vue@1(https://floating-ui.com/docs/vue). - Runtime dependencies:
@floating-ui/dom@^1.8.0,@floating-ui/utils@^0.2.12(package.json:46-49). - TypeScript with
exactOptionalPropertyTypes: supported since v2.0.1 (optional properties are typedT | undefined,dist/floating-ui.vue.d.ts:198-224).
Quick start
<script setup>
import {ref} from 'vue';
import {useFloating, offset, flip, shift, autoUpdate} from '@floating-ui/vue';
const reference = ref(null);
const floating = ref(null);
const open = ref(false);
const {floatingStyles, isPositioned} = useFloating(reference, floating, {
open,
middleware: [offset(10), flip(), shift()],
whileElementsMounted: autoUpdate,
});
</script>
<template>
<button ref="reference" @click="open = !open">Button</button>
<div v-if="open" ref="floating" :style="floatingStyles">Tooltip</div>
</template>
Default placement is bottom; positioning uses transform by default (https://floating-ui.com/docs/vue).
API changes since 1.x
- BREAKING (2.0.0):
vue-demiremoved. Vue 2 and Vue <3.3 no longer supported. No other breaking API changes;useFloating,arrow, and all re-exports keep their 1.1.x signatures (https://github.com/floating-ui/floating-ui/releases/tag/@floating-ui/vue@2.0.0). - FIX (2.0.1): optional
useFloatingoptions accept explicitundefinedunderexactOptionalPropertyTypes(https://github.com/floating-ui/floating-ui/releases/tag/@floating-ui/vue@2.0.1). - Unchanged behaviors carried from 1.x:
x/ydefault to0(notnull);floatingStylesreturns ready-to-bind positioning styles; options accept refs and getters (MaybeReadonlyRefOrGetter) since 1.1.0 (verified indist/floating-ui.vue.d.ts:193-225,dist/floating-ui.vue.mjs:83-84).
Best practices
- Pass
whileElementsMounted: autoUpdateso the floating element stays anchored during scroll, resize, and layout changes (dist/floating-ui.vue.mjs:146-156; https://floating-ui.com/docs/vue). - When wrapping
autoUpdateto pass options, always return the cleanup function (dist/floating-ui.vue.mjs:140-145):
useFloating(reference, floating, {
whileElementsMounted(...args) {
return autoUpdate(...args, {animationFrame: true});
},
});
- Use
v-iffor the floating element when usingwhileElementsMounted. Withv-show, skipwhileElementsMountedand manageautoUpdatemanually, or listeners leak on hidden elements (https://floating-ui.com/docs/vue). - Pass an
openref and gate side effects onisPositioned; positioning resolves in a microtask, so the element sits at (0, 0) until then.isPositionedstaysfalsewhileopenisfalse(dist/floating-ui.vue.mjs:137,dist/floating-ui.vue.mjs:157-161):
const {isPositioned} = useFloating(reference, floating, {open});
watch(isPositioned, (positioned) => {
if (positioned) inputRef.value?.focus();
});
- Pass refs or getters (
() => props.placement) toopen,placement,strategy,middleware,transformoptions for reactivity; they are watched withflush: 'sync'(dist/floating-ui.vue.mjs:162-164). - Pass component template refs directly. Components are unwrapped via
$el; a component that renders a comment node resolves tonulland positioning safely no-ops (dist/floating-ui.vue.mjs:6-15). - Keep the default
transform: trueand animate an inner wrapper element if you need CSS transform animations; the outer positioned node keepstranslate()positioning (https://floating-ui.com/docs/vue). - Use
arrow({element: arrowRef})with a template ref. It no-ops (returns{}) until the arrow element mounts; readmiddlewareData.arrow?.x/.yfor placement (dist/floating-ui.vue.mjs:27-34).
Common tasks
- Arrow positioning example and full option defaults: API reference.
- Upgrading from 1.x or pinning for Vue 2: Migration guide.
Package exports
useFloating, arrow, plus re-exports from @floating-ui/dom: autoPlacement, autoUpdate, computePosition, detectOverflow, flip, getOverflowAncestors, hide, inline, limitShift, offset, platform, shift, size (dist/floating-ui.vue.mjs:2). Import middleware from @floating-ui/vue, not @floating-ui/dom, to keep the Vue-aware arrow behavior.
How can the creator link this skill?
Add the canonical catalog link to the repository README so users can inspect current installs and available audits. The publishing guide covers the complete discovery path.
<a href="https://skillzs.dev/skills/skilld-dev/vue-ecosystem-skills/floating-ui-vue-skilld">View floating-ui-vue-skilld on skillZs</a>