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

@loomidev/emoji-picker

v0.3.0

Published

<loomi-emoji-picker> — a searchable, form-associated emoji picker.

Readme

@loomidev/emoji-picker

<loomi-emoji-picker> is a searchable, keyboard-friendly emoji picker web component. The trigger is the emoji itself — clicking it opens a dropdown (built on @loomidev/popover) with a search box, category tabs, and a 7-per-row emoji grid. It is form-associated, so a selected emoji submits under name like a native form control.

npm install @loomidev/emoji-picker lit
import "@loomidev/emoji-picker";
<loomi-emoji-picker name="reaction" label="Reaction"></loomi-emoji-picker>

Custom emoji data

The built-in emoji set is a compact curated list, not the full operating-system emoji keyboard. Assign .data with your own larger set when your product needs a different selection, or newer platform-specific symbols the built-in set doesn't have yet. Each item accepts emoji, name or label, value, category, and keywords — custom items don't get the skin-tone picker described below, since they carry no tone variants of their own.

const picker = document.querySelector("loomi-emoji-picker");
picker.data = [
  { emoji: "🟢", name: "Green status", value: "green", category: "status" },
  { emoji: "🔴", name: "Red status", value: "red", category: "status" },
];
<loomi-emoji-picker emojis="😀, 😎, 🚀, ❤️"></loomi-emoji-picker>

Dropdown, search, and categories

Clicking the trigger opens a dropdown containing a search box, a row of category tabs, and a grid of emoji (7 per row). Set searchable="false" or show-categories="false" to drop either piece; inline renders the same body permanently in place of a trigger, with no dropdown at all.

<loomi-emoji-picker searchable="false" show-categories="false"></loomi-emoji-picker>
<loomi-emoji-picker inline></loomi-emoji-picker>

Skin tone

When the active emoji set includes emoji that support skin tones (true of the built-in curated set), a hand emoji sits as a suffix on the search input. Clicking it opens a 6-way tone menu (default plus the 5 Fitzpatrick tones); the chosen tone applies to every emoji in the grid that has tone variants — and to selected-value/the submitted form value once one is picked. The choice is remembered in localStorage for the next time the picker opens.

Emoji supplied through .data or emojis don't carry tone variants, so the hand suffix is omitted when the picker is showing only custom data.

Trigger label

By default the trigger shows only the selected emoji (or a placeholder face) — nothing else. Set show-text to also show the name/placeholder text next to it, useful when the picker needs to read clearly as a labeled field rather than a compact icon button.

<loomi-emoji-picker show-text selected-value="🚀"></loomi-emoji-picker>

Unlike most boolean HTML attributes, show-text (along with show-categories and searchable) understands the literal string "false", so turning it back off in markup works as expected too:

<loomi-emoji-picker show-text="false"></loomi-emoji-picker>

Accessibility

For the library-wide baseline, see Foundations — Accessibility.

Responsive behavior

For the shared container and viewport rules, see Foundations — Responsive behavior.

Dark mode

For theme activation, token overrides, and contrast guidance, see Foundations — Dark mode.

Attributes and properties

| Name | Default | Description | | ----------------- | --------------- | -------------------------------------------------------------------------- | | name | "" | Form field name. | | selected-value | "" | Current submitted value. Defaults to the emoji itself. | | label | "" | Optional field label. | | placeholder | Pick an emoji | Closed trigger placeholder. | | inline | false | Render the panel directly instead of a trigger dropdown. | | searchable | true | Show the search input. | | show-categories | true | Show category tabs. | | show-text | false | Show the selected emoji's name (or placeholder) next to the trigger emoji. | | required | false | Mark the picker invalid until a value is selected. | | disabled | false | Disable the trigger. | | readonly | false | Prevent changes while keeping the current value readable. | | size | medium | small, regular, medium, or big. |

Events

change fires with detail: { value, emoji, item } after selection.

loomi-emoji-select fires with detail: { value, emoji, name, category, item }.

Methods

| Method | Description | | ------------------ | --------------------------------------------------------- | | reset() | Clears the selected value. | | validate() | Shows validation and returns whether the picker is valid. | | checkValidity() | Mirrors native form validity. | | reportValidity() | Shows the browser validation UI where supported. |

Dependencies

  • @loomidev/core
  • @loomidev/popover