@selkit/floating
v0.19.0
Published
Optional advanced dropdown positioner for Selkit — flip / shift / size collision handling powered by @floating-ui/dom.
Readme
@selkit/floating
Optional advanced dropdown positioner for Selkit —
the framework-agnostic select toolkit. Upgrades the built-in zero-dependency
positioner with collision handling (flip / shift / size) powered by
@floating-ui/dom.
@selkit/dom ships a lightweight, zero-dependency positioner by default
(vertical flip only). Install this package when you need horizontal
collision avoidance, viewport-aware max-height, or robust positioning inside
transform / fixed-header containers — without giving up Selkit's zero-runtime-dependency core.
Install
pnpm add @selkit/dom @selkit/floating @selkit/themesUsage
Pass createFloatingPositioner as the positioner factory:
import { createSelkitDom } from '@selkit/dom'
import { createFloatingPositioner } from '@selkit/floating'
import '@selkit/themes/base.css'
createSelkitDom(document.getElementById('host'), {
options: [
{ value: 'a', label: 'Apple' },
{ value: 'b', label: 'Banana' },
],
positioner: createFloatingPositioner,
})Customize placement / padding by wrapping it in a closure:
createSelkitDom(host, {
positioner: (trigger, dropdown, opts) =>
createFloatingPositioner(trigger, dropdown, {
...opts,
placement: 'top-start',
padding: 12,
}),
})API
createFloatingPositioner(reference, floating, opts?)— aPositionerFactory-compatible factory with anautoUpdateloop. Drop-in for@selkit/dom'spositioneroption.position(reference, floating, opts?)— framework-agnostic positioning computation returning{ x, y, placement, availableWidth, availableHeight }. No style mutation; usable by any adapter.applyPosition(floating, referenceWidth, result, opts?)— pure helper that applies aFloatingResultto an element (position: fixed, width,data-placement).
FloatingOptions: { autoWidth?, gap?, placement?, padding? }.
Docs
📖 cluion.github.io/selkit · 繁體中文
