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

@lxpack/components

v0.7.0

Published

Reusable UI components for LXPack courses

Downloads

3,357

Readme

@lxpack/components

Documentation npm version CI License Node.js

Reusable UI widgets for LXPack type: component lessons — built-ins, registry API, and a browser bundle for SCORM and preview.

Part of LXPack. Docs: Components reference · Lesson types.

| Related | Package | |---------|---------| | CLI / build | @lxpack/cli | | Component ID validation | @lxpack/validators (BUILTIN_COMPONENT_IDS) | | Runtime mounting | @lxpack/runtime (renderComponentLesson) | | Packaging | @lxpack/scorm (lxpack-components.js) |

Install

npm install @lxpack/components

Requires Node.js 18 or 20 (18+) for the build toolchain. The published browser bundle runs in modern browsers.

Package exports

| Import | Description | |--------|-------------| | @lxpack/components | Registry API (registerComponent, getComponentMount, registerBuiltinComponents) | | @lxpack/components/bundle | Prebuilt dist/bundle.js — sets window.__LXPACK_COMPONENTS__ |

Built-in components

| ID | Description | |----|-------------| | callout | Info/warning callout (variant, body) | | image-card | Image with caption | | checklist | Interactive checklist |

Built-in IDs are validated at course build time via BUILTIN_COMPONENT_IDS in @lxpack/validators.

Authoring

Writing lessons · Course structure.

Add a component lesson in course.yaml:

lessons:
  - id: tip
    title: Pro tip
    type: component
    component: callout
    props:
      variant: info
      body: Remember to validate your course before export.

The CLI and SCORM packager copy the bundle to lxpack-components.js and load it before the runtime client. Preview serves it at /runtime/components.js.

Course overrides

Optional custom widgets live under course/components/<id>/ (validated at build time). Override IDs can replace or extend built-ins when the course manifest references them.

Registry API

import {
  registerComponent,
  getComponentMount,
  listBuiltinComponentIds,
  registerBuiltinComponents,
  type ComponentMount,
} from "@lxpack/components";

registerBuiltinComponents();

registerComponent("my-widget", (container, props) => {
  container.textContent = String(props?.label ?? "");
});

const mount = getComponentMount("callout");

ComponentMount receives the DOM container and lesson props from the manifest.

Browser bundle

The Vite build produces dist/bundle.js, which registers built-ins and exposes mounts on:

window.__LXPACK_COMPONENTS__

@lxpack/runtime renderComponentLesson() looks up mounts from this global when rendering component lessons.

Build output

| Artifact | Role | |----------|------| | dist/index.js | Node/library entry | | dist/bundle.js | Browser bundle for export and preview | | dist/styles.css | Component styles (copied at build) | | dist/*.d.ts | Type declarations |

Development

From the monorepo root:

pnpm --filter @lxpack/components build
pnpm --filter @lxpack/components test
pnpm --filter @lxpack/components typecheck

Links

License

Apache-2.0