npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

floating-ember

v0.2.0

Published

Headless Ember tooltips and popovers, positioned with Floating UI.

Readme

floating-ember

Headless tooltips and popovers for Ember 6+, positioned with @floating-ui/dom.

  • Tooltip — hover + focus, rich but non-interactive text
  • Popover — click to open, interactive content
  • No wrapper element around your trigger
  • GTS / TypeScript types published

Install

pnpm add floating-ember

Peer: ember-source >= 6.

Tooltip — modifier (common case)

import tooltip from 'floating-ember/modifiers/tooltip';

<button type="button" {{tooltip "Save your changes"}}>
  Save
</button>

Named args: placement, delay, closeDelay, disabled, contentClass.

Tooltip — named blocks (rich, still non-interactive)

import Tooltip from 'floating-ember/components/tooltip';

<Tooltip @placement="top" @delay={{200}}>
  <:trigger as |trigger|>
    <button type="button" {{trigger}}>
      Save
    </button>
  </:trigger>

  <:content>
    Saves your changes to the server.
    <br />
    <strong>Cannot be undone.</strong>
  </:content>
</Tooltip>

<Tooltip> is a template boundary only. Your button stays a direct child of its parent. Content portals to document.body.

Do not put links or buttons in :content. That is a popover.

Popover

import Popover from 'floating-ember/components/popover';

<Popover @placement="bottom-start">
  <:trigger as |trigger|>
    <button type="button" {{trigger}}>More</button>
  </:trigger>
  <:content>
    <a href="/docs">Learn more</a>
  </:content>
</Popover>

Also included

| API | Purpose | |---|---| | <TooltipGroup> | Shared hover delay across a toolbar | | @arrow / arrow=true | SVG pointer arrow toward the trigger — see Styling below | | @renderInPlace | Skip the portal | | @modal on <Popover> | Scrim + focus lock | | @open / @onOpenChange | Controlled mode | | @container | Portal target (document.body by default) | | @contentClass | Class on the floating node |

Styling

The addon is headless. Pass contentClass (or wrap markup in :content).

  • Plain CSS — your class, your colors
  • Tailwind (optional) — utilities on contentClass. Not a dependency.
  • DaisyUI (optional) — bg-base-content text-base-100 (inverted against the page, so it stays readable across themes). Not a dependency.

Position, z-index, and pointer-events are set inline by the addon regardless of CSS. The one thing that genuinely needs this stylesheet is <Popover @modal={{true}}>'s dimmed backdrop — skip the import if you don't use that:

@import 'floating-ember/styles/floating.css';

The cookbook at the demo app has a Styling section with live recipes for all three.

The arrow is an SVG triangle, not a CSS-rotated square — fill and stroke are inherited SVG properties, so setting them once on the panel's class (or directly on [data-floating-arrow]) reaches the arrow automatically, with no stylesheet import needed for that. @arrowStrokeWidth defaults to 1; pass 0 for a borderless arrow, or match it to the panel's border width so the arrow's stroke geometry sits flush with the border.

Accessibility

  • Tooltip: role="tooltip", aria-describedby, Escape closes
  • Popover: role="dialog", aria-expanded / aria-haspopup, focus trap, Escape and click-outside close
  • Disabled native buttons do not fire hover/focus. Use aria-disabled if the tooltip must still open
  • Icon-only triggers need an aria-label on the button

Tests

import { openTooltip, openPopover } from 'floating-ember/test-support';

Compatibility

Ember 6+. Integration tests run in Chrome and Firefox.

Changelog

See CHANGELOG.md.

License

MIT