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

acture-palette-react

v1.0.1

Published

acture command palette for React — minimal Phase 1 version. Parameter-free commands only.

Downloads

230

Readme

acture-palette-react

acture is a development tool first. This package is an optional accelerator — an agent can hand-write this integration into your project instead, with no acture-* dependency. Installing it is a deliberate, opt-in choice to reuse tested code rather than own it. See docs/positioning.md.

Command palette for acture. Wraps cmdk and reads commands directly off the registry.

Phase 2 surface

  • Parameter-free commands dispatch on selection.
  • Parameterized commands route through deriveKind:
    • kind: 'atomic' → inline picker chain (Linear / Discord-style) inside the palette.
    • kind: 'handoff' → renders a host-supplied form adapter inline; if none, fires onParameterizedSelect and the host opens its own form view.
  • commandsChanged events drive incremental re-renders.

The kind is auto-derived from the schema unless record.kind is set explicitly. Per research-2 §9.3:

| Param shape | Auto kind | | --- | --- | | 0 params | atomic | | 1–2 params, all picker-typed (enum, boolean) | atomic | | 3 params, all picker-typed + all with defaults | atomic | | Anything else | handoff |

Install

pnpm add acture-palette-react cmdk react
# pick a form adapter for handoff commands:
pnpm add acture-forms-autoform   # Zod-native (recommended)
# or
pnpm add acture-forms-rjsf       # JSON-Schema-native

Usage

import { CommandPalette } from 'acture-palette-react';
import { AutoForm } from 'acture-forms-autoform';
import { registry } from './registry';

function PaletteOverlay({ context, onClose }) {
  return (
    <div className="palette-overlay">
      <CommandPalette
        registry={registry}
        context={context}
        formAdapter={AutoForm}
        onDispatched={() => onClose()}
      />
    </div>
  );
}

Picker-typed schemas

The atomic picker chain renders for z.enum, z.boolean, and z.nativeEnum schemas out of the box. To mark a custom string field as picker-typed, attach an explicit hint:

import { z } from 'zod';

params: z.object({
  channel: z.string().meta({ paramKind: 'picker' }),  // treated as picker
});

Context prefill

Use paramDefaults to inject context-aware defaults (Things-style — research-2 L2):

<CommandPalette
  registry={registry}
  context={ctx}
  paramDefaults={(cmd) => {
    if (cmd.id === 'app.task.assign') return { assignee: ctx.user.id };
    return undefined;
  }}
/>

Styling

Every meaningful node carries a data-acture-* attribute. Style with CSS — the package does not ship a stylesheet.

  • [data-acture-palette-view="list" | "picker-chain" | "form"]
  • [data-acture-palette-item]
  • [data-acture-kind="atomic" | "handoff"]
  • [data-acture-picker-chain]

See also