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

@useclickly/react

v1.6.0

Published

Click-to-annotate dev toolbar for React 18+ apps. Generates agent-ready prompts. Drop in one component — no config.

Readme

@useclickly/react

npm version license

Click-to-annotate dev toolbar for React. Generates prompts your AI coding agent can actually act on.

Drop <Clickly /> into your React app (dev only). A small floating action button appears in the bottom-right corner. Open it, click any element, write a comment — copy a perfectly-formatted markdown prompt into Claude Code, Cursor, Codex, or any MCP-aware tool.

Install

npm install -D @useclickly/react
# or:
pnpm add -D @useclickly/react
yarn add -D @useclickly/react

Use

import { Clickly } from "@useclickly/react";

export default function App() {
  return (
    <>
      <YourApp />
      {process.env.NODE_ENV === "development" && <Clickly />}
    </>
  );
}

That's it. The component returns null on the server (safe under SSR / Next App Router) and ships with "use client" already baked into the bundle.

What it does

| Mode | How | |---|---| | Single | Click any element → popup with comment box | | Multi-select | Press 2 or shift-click to pin elements, hit Annotate (N) when done | | Area drag | Press 3, drag a rectangle, every intersecting element gets pinned | | Draw | Press 4 to sketch freehand strokes — saved as AFS stroke annotations | | Layout mode | Press L for a component palette + section-rearrange overlay. Optional wireframe sub-mode fades the page so you can sketch a fresh layout. | | Animation pause | Press P to freeze CSS / WAAPI / GSAP / videos for annotating a specific frame | | Persistent pins | Annotated elements stay numbered on the page across page interactions | | Auto-copy | Submitting an annotation copies markdown to clipboard (toggleable) | | Settings | Output detail tier, React component info, marker colour — all in the gear menu |

What gets captured

For every selected element, Clickly automatically collects:

  • Short + full CSS selector (section.hero > button.cta)
  • Computed styles (curated by detail tier)
  • Bounding box + position (handles fixed / sticky)
  • ARIA / role / tabindex / title
  • Visible nearby text (truncated)
  • React component tree (App > Dashboard > Button) via Fiber walk
  • Source file + line (src/Button.tsx:42) on Vite/Next — instant grep target

Keyboard shortcuts

| Key | Action | |---|---| | ⌘/Ctrl + Shift + F | Toggle the toolbar | | 1 / 2 / 3 / 4 | Switch mode (single / multi / area / draw) | | L | Toggle layout mode (palette + section rearrange) | | P | Pause / resume page animations | | Enter | Open the popup with all pinned elements | | Esc | Cancel popup · cancel a layout drag · clear pins · or collapse toolbar | | C | Copy all annotations as markdown | | X | Clear all annotations |

Props

All optional; <Clickly /> works with zero config.

interface ClicklyProps {
  className?: string;
  endpoint?: string;          // MCP server URL — see @useclickly/mcp-server
  sessionId?: string;
  onAnnotationAdd?: (id: string) => void;
  onAnnotationDelete?: (id: string) => void;
  onAnnotationsClear?: () => void;
  onCopy?: (markdown: string) => void;
  onSessionCreated?: (sessionId: string) => void;
}

Output

## Annotation #1
**Element:** `button.cta.primary`
**Path:** `body > main > section.hero > button.cta.primary`
**Position:** 120px, 480px (200×48px)
**Source:** `src/components/Hero.tsx:42`
**React:** App > LandingPage > HeroSection > CTAButton
**Feedback:** Button is cut off on mobile viewport

Configurable via the settings popover: compact (one-liner) → standarddetailedforensic (full computed styles).

The shape is AFS 1.1-compatible — every MCP-aware agent can parse it.

Requirements

  • React 18+ or 19+
  • Browser environment (no SSR; component returns null server-side)
  • Desktop only — touch / mobile is not optimised
  • Not for React Native — see the main README

Advanced

For framework-agnostic engine access — building your own UI on top of Clickly's selection + metadata — see @useclickly/core.

For agent integration over MCP — your agent reading/responding to annotations directly — see @useclickly/mcp-server.

License

MIT