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

editable-creative-board

v0.1.1

Published

A powerful ReactJS plugin for creating interactive canvas boards with Fabric.js

Readme

Editable Creative Board

A powerful ReactJS plugin for creating interactive canvas boards with Fabric.js. Built with TypeScript and styled with TailwindCSS.

Features

  • 🖌️ Advanced drawing tools with customizable brush sizes and colors
  • 🔶 Shape creation tools (rectangle, circle, triangle, line, polygon)
  • 📝 Text tools with font customization
  • 🖼️ Image uploading and manipulation
  • 🔙 Undo/Redo support
  • 🔍 Zoom and pan functionality
  • 🎨 Customizable UI with TailwindCSS
  • 📱 Responsive design
  • 🌓 Light and dark mode support
  • 🧩 Layer management (bring forward, send backward, delete)

Installation

npm install editable-creative-board
# or
yarn add editable-creative-board

Basic Usage

import React from 'react';
import { EditableCreativeBoard } from 'editable-creative-board';
import 'editable-creative-board/dist/index.css';

function App() {
  return (
    <div style={{ width: '100vw', height: '100vh' }}>
      <EditableCreativeBoard 
        width={800} 
        height={600} 
        background="#f8f8f8"
      />
    </div>
  );
}

export default App;

Props

| Prop | Type | Default | Description | |------|------|---------|-------------| | width | number | 800 | Canvas width in pixels | | height | number | 600 | Canvas height in pixels | | background | string | "#ffffff" | Canvas background color | | className | string | undefined | Additional CSS classes for the container | | onSave | function | undefined | Callback function when canvas state changes. Receives the current canvas state. | | onLoad | function | undefined | Callback function when canvas is loaded. Can be used to initialize with a specific state. | | initialState | object | undefined | Initial canvas state to load | | tools | object | see below | Configure which tools to show |

Tools Configuration

You can customize which tools are displayed:

<EditableCreativeBoard 
  tools={{
    draw: true,     // Free drawing tool
    shape: true,    // Shapes (rect, circle, triangle)
    text: true,     // Text tool
    image: true,    // Image upload
    undo: true,     // Undo button
    redo: true,     // Redo button
    clear: true,    // Clear canvas button
    download: true, // Download canvas as image
    save: true,     // Save state button
    load: true,     // Load state button
    zoomIn: true,   // Zoom in button
    zoomOut: true,  // Zoom out button
    pan: true,      // Pan tool
  }}
/>

Advanced Usage

Saving & Loading Canvas State

import React, { useState } from 'react';
import { EditableCreativeBoard, CanvasState } from 'editable-creative-board';

function App() {
  const [savedState, setSavedState] = useState<CanvasState | null>(null);
  
  const handleSave = (state: CanvasState) => {
    setSavedState(state);
    localStorage.setItem('canvas-state', JSON.stringify(state));
  };
  
  // Load initial state from localStorage if available
  const initialState = localStorage.getItem('canvas-state') 
    ? JSON.parse(localStorage.getItem('canvas-state')!) 
    : undefined;
  
  return (
    <div style={{ width: '100vw', height: '100vh' }}>
      <EditableCreativeBoard 
        onSave={handleSave}
        initialState={initialState}
      />
    </div>
  );
}

export default App;

Custom Image Uploading

import React from 'react';
import { EditableCreativeBoard, useCanvasStore } from 'editable-creative-board';

function App() {
  const addImageToCanvas = (url: string) => {
    const { addImage } = useCanvasStore.getState();
    addImage(url);
  };
  
  return (
    <div>
      <button onClick={() => addImageToCanvas('https://example.com/image.jpg')}>
        Add Image from URL
      </button>
      
      <EditableCreativeBoard />
    </div>
  );
}

export default App;

Browser Support

  • Chrome (latest)
  • Firefox (latest)
  • Safari (latest)
  • Edge (latest)

License

MIT