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

@pablocorso/tactical-board

v0.1.37

Published

Reusable tactical board/editor library for embedding coach-facing planning boards in React applications.

Readme

Tactical Board

Reusable tactical board/editor library for embedding coach-facing planning boards in React applications.

Tactical Board lets a host app create, edit, render, and serialize bounded visual planning canvases for sport workflows such as tactics, game plans, and practice drills. It provides the editing engine, canvas rendering, React integration, standard tools, and board UI primitives; sport adapters such as football and basketball add pitch/court frames, object presets, skins, themes, and tool registrations.

The package is centered on composable BoardEditor and BoardViewer components. Sport packages provide defaults that a host app composes into its own board experience.

Architecture

The framework-independent Editor Engine owns Document state and editing rules; the Canvas Renderer paints it; React and sport modules provide adapters and coach-facing workflows. See architecture.md for the source map, CONTEXT.md for shared terminology, and docs/adr for durable decisions.

React integration

React consumers create one Board Editor instance and share it through the React Provider. The instance owns its Editor Store and resolved Theme runtime, so a Host App cannot accidentally configure editing and React UI differently. Sport factories supply useful defaults, including an empty Board when initial state is omitted:

import {
  BoardEditor,
  BoardEditorCanvas,
  BoardEditorProvider,
  createFootballBoardEditor,
} from "@pablocorso/tactical-board/react";

const editor = createFootballBoardEditor();

export function MatchPlanEditor() {
  return (
    <BoardEditorProvider editor={editor}>
      <BoardEditor className="relative h-dvh w-full overflow-hidden">
        <BoardEditorCanvas />
      </BoardEditor>
    </BoardEditorProvider>
  );
}

Pass initialBoard when loading existing state. Instance creation options are initial-only; persistent Board changes go through the Editor Store. Host Apps compose the exported canvas, toolbar, Selection, and panel primitives explicitly under the same Provider.

The maintained football example shows the complete composition: toolbars, team panels, pitch controls, labels, and customization seams. It is executable and is the canonical host-app example. Import @pablocorso/tactical-board/styles.css once in the host app.

Host apps own persistence, migration, save/export/share workflows, analytics, and routing. The library provides editor state, rendering, serialization, and composable UI primitives.

SSR compatibility

The package is safe to statically import and server-render in React SSR apps. Consumers should not need useEffect or dynamic import() merely to avoid browser globals.

During SSR the React adapter renders structural HTML, including empty <canvas> elements. Browser-only work such as canvas.getContext("2d"), ResizeObserver, pointer input, focus management, and animation frame scheduling runs after hydration.