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

@emdzej/inpax-ui-provider-core

v0.6.2

Published

Abstract UI provider — shared state + IUIProvider implementation that TUI and Web subclasses build on.

Readme

@emdzej/inpax-ui-provider-core

Abstract UIProvider for INPA runtimes — owns the state shape that the rendering layer reads (cell grid, menu items, input dialogs, analog values, …) and the BEST2 system-function surface the dispatcher writes to.

Subclassed by:

Usage

Most consumers don't import this directly — they instantiate one of the concrete subclasses above. If you're writing a new renderer:

import { UIProvider } from "@emdzej/inpax-ui-provider-core";

class MyUIProvider extends UIProvider {
  // Optionally override paint hooks. The base class already handles
  // the cell grid + menu state + input dialog plumbing — you mostly
  // just consume `getTextLines()`, `getAnalogValues()`,
  // `getDigitalValues()`, `getMenuItems()` from your render loop.
}

State shape (read by renderers)

| Getter | Used for | |---|---| | screenBuffer | Cell grid (80×30 by default) — the canonical text layer | | getTextLines() | fTextOut entries with fontSize > 0 — variable-font overlays | | getAnalogValues() | analogout gauge overlays | | getDigitalValues() | digitalout LED overlays | | getUserBoxes() | userbox modals | | getMenuItems() | F-key bar contents | | getInputDialog() | Active dialog (text / number / hex / digital / connect / scriptselect) | | state.menuTitle | Menu title bar text | | state.screenCyclic | Whether the active SCREEN re-runs INIT/LINE each cycle | | state.firstVisibleLine / totalLines / visibleLineCount | LINE-block pagination window |

Mutators (called by the dispatcher)

The BEST2 dispatcher routes opcodes through methods on this provider: setScreen, setMenu, setItem, setMenuTitle, text, textOut, fTextOut, clearRect, blankScreen, digitalOut, analogOut, hexDump, userBoxOpen / userBoxClose, setColor, setTitle, setLineBaseRow, etc.

Events

Provider extends an EventEmitter. Useful subscriptions:

| Event | Fires when | |---|---| | state:changed | Any state mutation — coarse-grained, drives reactive UIs | | screen:ready | setScreen completed — host can start painting | | menu:select | User picked an F-key item | | menu:back | User hit Escape in a menu | | input:submit / input:cancel | Input dialog resolved | | cycle:complete | Full SCREEN cycle finished (INIT + every visible LINE) — atomic paint boundary |

See also

  • AGENTS.md — workspace map showing where this package sits relative to subclasses.