JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 218
  • Score
    100M100P100Q71915F
  • License MIT

A lightweight, object-based abstraction over the HTML Canvas 2D API. Compose drawings declaratively with chainable element builders.

Package Exports

  • @armniko/canvas
  • @armniko/canvas/package.json

Readme

Canvas

npm last published zero dependencies types

A lightweight, object-based abstraction over the HTML Canvas 2D API. Compose drawings declaratively with chainable element builders.


Why Canvas?

  • 🧩 Object-based — describe what to draw, not how to draw it
  • 🧮 Reactive-friendly — pass functions (or signals) into any setter; attributes update with your app state, no manual rewiring
  • 🔍 Built-in change detection — every element exposes getHash(), making memoization and dirty-checking trivial
  • 🌐 Framework-agnostic — drop into Vue, Angular, React, or vanilla TS
  • 📦 Zero dependencies and fully typed

Installation

npm install @armniko/canvas

Usage

Create a canvas with existing HTMLCanvasElement:

import { Canvas, TextElement, PositionPoint } from '@armniko/canvas';

// assuming that there is <canvas id="canvas"></canvas> in dom
const canvas: Canvas = new Canvas(document.getElementById('canvas'));

canvas.draw(
    new TextElement()
        .setText('Hello world!')
        .setFillColor('#ff0000')
        .setFontSize(20)
        .setPosition({ x: 100, y: 50 }, PositionPoint.Center)
);

Changelog

v2.2.0 Features:
- option to set border radius for a rectangle element
- more precise text fitting in bounds

v2.1.0 Technical:
- removed minification of build
- added exports field for proper module resolution and types
- marked package as side-effect free
v2.0.0 Features:
- pass callable attributes to element set methods
- method to get hash for each element
- option to set multiple rotations for all elements with `setRotations()` method which replaces `setDegrees()`
- option to set scale for all elements
- option to set crop area for an image element
- option to set radius scale for radial gradient
- option to pass position, scale, opacity and rotations into draw method
- removed interface suffix from interfaces

Bugfixes:
- incorrect linear gradient position when rotating

Technical:
- migrated from webpack to vite
- update all dependencies
v1.2.0 Technical:
- precompile UMD and ESM
v1.1.1 Bugfixes:
- missing ImageSource type
- no shadow for an image element with border radius
v1.1.0 Features:
- added line element
- added gradient colors for usage as fill and border color for all elements
v1.0.0 Initial version