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

@netlisian/softconfig

v0.2.8

Published

The core library for building and managing **Soft Components** within the Netlisian ecosystem. It provides type-safe field definitions, recursive mapping logic, and state management for the Puck editor.

Readme

@netlisian/soft-config

The core library for building and managing Soft Components within the Netlisian ecosystem. It provides type-safe field definitions, recursive mapping logic, and state management for the Puck editor.

Installation

npm install @netlisian/soft-config

Features

  • Soft Component Builder: Easy-to-use interface for creating versioned components.
  • Dynamic Field Options: Automatically generates dot-notated mapping paths for nested objects and arrays.
  • Custom Field Support: Extend the editor with custom UI while maintaining return type safety.
  • Puck Overrides: Pre-built component overrides (ActionBar, Header, ComponentList) to seamlessly integrate Soft Components into the Puck editor.

Key Concepts

Initialization

To ensure Soft Components have access to Puck's internal state (for resolving mapping configurations and handling dispatch events), you must pass getPuck and setPuckDispatch into the Soft Config store from within your custom Puck overrides (e.g., HeaderActions or Document).

import { createUsePuck, useGetPuck } from "@puckeditor/core";
import { useSoftConfig } from "@netlisian/soft-config";
import React, { useEffect } from "react";

const useCustomPuck = createUsePuck();

export const HeaderActions = ({ children }) => {
  const dispatch = useCustomPuck((s) => s.dispatch);
  const getPuck = useGetPuck();

  const setPuckDispatch = useSoftConfig((s) => s.setPuckDispatch);
  const setGetPuck = useSoftConfig((s) => s.setGetPuck);

  useEffect(() => {
    setPuckDispatch(dispatch);
    setGetPuck(getPuck);
  }, [dispatch, getPuck, setPuckDispatch, setGetPuck]);

  return <>{children}</>;
};

Soft Component Definitions

A Soft Component consists of fields, default props, and typed components.

import { SoftFieldDefinition } from "@netlisian/soft-config";

const galleryField: SoftFieldDefinition = {
  name: "gallery",
  type: "array",
  subFields: [
    { name: "src", type: "text" },
    { name: "alt", type: "text" }
  ]
};

Custom Field Extensibility

Define custom field types with specified return types (string, number, boolean, object, array).

import { CustomFields } from "@netlisian/soft-config";

export const myCustomFields: CustomFields = {
  "my-color": {
    field: { type: "custom", render: () => <div>Color Picker</div> },
    returnType: "string"
  }
};

Field Mapping

The library handles the logic for mapping configuration data to component props, including recursive array iteration using [] syntax (e.g., features[].title).

Soft Action Handler

To easily integrate soft configuration behavior inside Puck without manually managing undo guards or state validations, wrap your actions using useSoftPuckAction:

import { useSoftPuckAction } from "@netlisian/soft-config/puck";

const onAction = useSoftPuckAction((action, appState, previousState) => {
  // your custom intercept logic here
});

<Puck onAction={onAction} />

Documentation

For detailed guides and API references, check the Netlisian Docs.

License

MIT