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

@savantlink/sdk

v2.2.23

Published

A package that contains reusable components and services for the SavantLink design system and architecture.

Readme

SavantLink SDK

The SavantLink SDK provides reusable React components, SCSS-based theming, and services for SavantLink frontend projects. Table of Contents

Tools

  • React: JavaScript library for building user interfaces.
  • SCSS: CSS preprocessor for modular and maintainable styles.
  • Storybook: UI component explorer for developing and testing components in isolation.

Getting Started

  • Install Dependencies: To set up the SDK, install its dependencies:
yarn install
  • View Components in Storybook: To explore the SDK's components in Storybook, run:
yarn storybook

This launches Storybook, typically accessible at http://localhost:6006.

Linking the SDK Locally with Yalc

To test the SDK in a consumer application during development, link it locally using yalc:

  • Ensure yalc is installed globally:
npm install -g yalc
  • In the SDK's root directory, publish the SDK:
yalc publish
  • In the consumer application's root directory, link the SDK:
yalc link @savantlink/sdk

OR

yalc link @savantlink/sdk

The SDK is now linked to the consumer application for local development.

Publishing to the Public npm Registry

Authenticate with npm from the SDK root directory:

npm login

Increment the package version before publishing. For a backward-compatible fix, use a patch release:

npm version patch

Publish the scoped package to the public npm registry:

npm publish --access public

After upgrading the SDK in a Vite application, clear Vite's dependency cache and restart the development server when the old bundle is still being used:

rm -rf node_modules/.vite
yarn dev --force

You are welcome 🚀

Table bulk selection

Pass rowSelection to show row checkboxes and a selected-count footer. Selection is controlled: store selectedRowKeys in your app and update it through onChange. Keys must be unique and stable across sorting and pagination.

const [selectedRowKeys, setSelectedRowKeys] = useState<Array<string | number>>([])

<Table
  columns={columns}
  data={products}
  emptyState={{}}
  rowSelection={{
    getRowKey: (product) => product.id,
    getRowLabel: (product) => product.name,
    selectedRowKeys,
    onChange: setSelectedRowKeys,
    isRowSelectable: (product) => !product.locked,
    renderActions: (keys) => (
      <Button disabled={!keys.length} onClick={() => publishProducts(keys)}>
        Publish
      </Button>
    ),
  }}
/>

Select-all toggles eligible rows in the supplied data only, preserving keys from other pages. The header and footer checkboxes show a mixed state when some eligible rows are selected. renderActions receives all selected keys; the app handles bulk operations and clears selection after deletion or a dataset change when appropriate. Omitting rowSelection preserves the existing table behavior.