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

@feezal/feezal-eink-base

v3.0.2

Published

Shared base class for the feezal e-ink element family — redraw dedup for e-paper panels, 1-bit mono CSS tokens, inverted mode. Not an element package (no tag).

Readme

@feezal/feezal-eink-base

Shared base class for the feezal e-ink / mono element family (@feezal/feezal-elements-eink). This is not an element package — it defines no custom-element tag and is deliberately named without the feezal-element- prefix so feezal's package manager never treats it as installable on its own. Member elements depend on it and it gets inlined into their bundles at install time.

Why it exists

E-paper partial refresh is expensive: re-rendering an unchanged value once per second ghosts the panel. The family rule is that the DOM changes only when the rendered text actually differs — and that dedup lives here, once, instead of in every element.

API

import {
    FeezalEinkBase,            // base class, extends FeezalElement
    feezalEinkStyles,          // 1-bit tokens + inverted swap + .eink-numeral
    einkAttributeDescriptors,  // spread into feezal().attributes  → 'inverted'
    einkStyleDescriptors,      // spread into feezal().styles      → --feezal-eink-fg/-bg
    feezalBaseStyles, FeezalElement, html, css   // re-exports for single-import
} from '@feezal/feezal-eink-base';

FeezalEinkBase (extends FeezalElement)

| Member | Purpose | |---|---| | setDisplayed(key, value, format?)boolean | The dedup write path. Formats value (raw → string), compares against what slot key currently renders; only when different stores it and schedules one Lit update (synchronous calls batch). Returns false when deduped — DOM untouched. null/undefined display as ''. | | displayed(key, fallback = '')string | Read a slot in render(). fallback shows only while the slot was never set — use for the unconfigured-state hint. | | clearDisplayed(key?) | Forget one slot (or all) — fallback shows again, next setDisplayed is never deduped. Call when a value goes stale (e.g. subscribe changed). | | inverted | Reactive Boolean, reflected — swaps the ink/paper tokens (white-on-black). |

Rule for members: never assign a displayed value to reactive state directly — always route it through setDisplayed.

class FeezalElementEinkValue extends FeezalEinkBase {
    static styles = [feezalBaseStyles, feezalEinkStyles, css`/* … */`];

    connectedCallback() {
        super.connectedCallback();
        if (this.subscribe) {
            this.addSubscription(this.subscribe, msg => {
                this.setDisplayed('value',
                    this.getProperty(msg, this.messageProperty),
                    v => Number(v).toFixed(1));
            });
        }
    }

    render() {
        return html`<div class="eink-numeral">${this.displayed('value', '--')}</div>`;
    }
}

CSS tokens (feezalEinkStyles)

| Token | Default | Inverted | |---|---|---| | --feezal-eink-fg (ink) | #000 | #fff | | --feezal-eink-bg (paper) | #fff | #000 |

Hard mono defaults on :host so elements survive any theme; a mono type stack and the .eink-numeral helper class (bold, tabular numerals, tight leading) come along. feezal-theme-eink is companion polish, not a requirement.

License

MIT