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

@lilydesignsystem/angular-picker-bar

v0.3.0

Published

Lily Design System Angular picker bar: composes link-picker (optional), search-picker, theme-picker, locale-picker, text-size-picker, and share-picker into one page-header row. Headless, SSR-safe, no CSS.

Readme

Lily Design System™ — Angular PickerBar

Link picker (0.3.0). Pass links (and labels.link) to add a link-picker — a home icon opening the page links your app defines — as the leftmost icon. It renders only when both are given.

A single page-header row that composes five of the Lily *-picker helpers — search, theme, locale, text size, and share, in that order — with two catalog-wide defaults pre-wired, so you can drop one component into a header instead of assembling and configuring five.

motion-picker and date-time-picker are not part of the bar: motion has no natural spot next to the other three header preferences, and date-time-picker is a form control, not a header control.

Install

npm install @lilydesignsystem/angular-picker-bar

@lilydesignsystem/angular-search-picker, -theme-picker, -locale-picker, -text-size-picker, and -share-picker install automatically as regular dependencies — PickerBar is a thin wrapper around them, not a reimplementation.

Usage

import { Component } from "@angular/core";
import { PickerBar } from "@lilydesignsystem/angular-picker-bar";

@Component({
  selector: "app-header",
  standalone: true,
  imports: [PickerBar],
  template: `
    <lily-picker-bar
      [labels]="{
        search: 'Search this site',
        searchInput: 'Search terms',
        searchSubmit: 'Search',
        theme: 'Theme',
        locale: 'Language',
        textSize: 'Text size',
        share: 'Share',
      }"
      themesUrl="/assets/themes/"
      [locales]="['en', 'cy', 'gd', 'ga']"
      [shareTargets]="[{ id: 'email', label: 'Email', href: (url, title) => 'mailto:?subject=' + title + '&body=' + url }]"
    />
  `,
})
export class HeaderComponent {}

That's a complete, working header row: site search (a search for foo goes to /?foo), 45 themes, four locales, the seven-step text-size scale, and one share destination plus copy-to-URL if you add [copyLabel]="'Copy link'".

Defaults

  • themes defaults to DEFAULT_THEMES — all 45 Lily reference theme slugs, alphabetical, with the 8 United Kingdom / United States government themes moved to their own alphabetical group at the bottom. Pass your own [themes] array to override.
  • sizes defaults to DEFAULT_SIZES — the seven-step scale largest, larger, large, normal, small, smaller, smallest — and the text-size picker starts on normal. Pass your own [sizes] array (and [textSizeDefaultValue]="'…'" for a different starting point) to override.

Both are exported as named constants:

import { DEFAULT_THEMES, DEFAULT_SIZES } from "@lilydesignsystem/angular-picker-bar";

Overriding one picker's extra options

Unlike the canonical Svelte contract's per-picker *Props bag, Angular inputs are always named bindings — there is no generic spread onto a child component's inputs. PickerBar flattens the most common extras onto its own inputs, prefixed by which picker they belong to:

<lily-picker-bar
  [labels]="labels"
  themesUrl="/assets/themes/"
  [locales]="['en', 'cy']"
  themeStorageKey="lily-theme"
  [themeDetectFromSystem]="true"
  localeStorageKey="lily-locale"
  [localeDetectFromNavigator]="true"
  textSizeStorageKey="lily-text-size"
  searchAction="/search"
  searchPlaceholder="Search…"
  copyLabel="Copy link"
  copiedLabel="Copied"
/>

In a single-page app, pass [searchNavigate]="(href) => router.navigateByUrl(href)" (as a component field) to keep searches client-side; (searched) re-emits the search picker's { query, href } before navigating.

Two-way bind a picker's current value with the matching model() input:

<lily-picker-bar ... [(themeValue)]="currentTheme" />

For anything not flattened here (a custom icon template, for instance), compose the five wrapped pickers directly instead of using PickerBar — see each picker's own index.md.

Styling

PickerBar renders no CSS of its own beyond the picker-bar root wrapper — style each child through its own package's class hooks (search-picker, theme-picker, locale-picker, text-size-picker, share-picker; see each package's own index.md). A typical header layout:

.picker-bar {
  display: flex;
  gap: var(--theme-space-sm, 0.5rem);
  align-items: center;
}

Accessibility

Every accessible name comes from labels — seven names, three of them for the search picker (search for its button and search landmark, searchInput for the field, searchSubmit for the ⏎ button). There is no English default, because a set of names this catalog invented is exactly the case the rest of Lily's i18n rule exists for. Each wrapped picker keeps its own WAI-ARIA APG contract unchanged; see that picker's own index.md.

Full contract

See spec/index.md.


Lily™ and Lily Design System™ are trademarks.