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 🙏

© 2024 – Pkg Stats / Ryan Hefner

tavla

v1.1.11

Published

A lightweight HTML canvas framework with support for event forwarding and automatic adjustment for screen resolution.

Downloads

31

Readme

Tavla

A lightweight HTML canvas framework with support for event forwarding and automatic adjustment for screen resolution.

Installation

npm install tavla

Example

Run the example by installing the framework followed by npm run example.

Usage

const { Tavla, Rect, Draggable } = require('tavla')

/*
Select your canvas element
*/
const el = document.querySelector('canvas')

const tavla = new Tavla(el)

/*
Make yourself a red rectangle
*/
const rectangle = new Rect(0, 0, 100, 120)
rectangle.fillColor = 'red'

/*
Add the rectangle to the view
and start rendering it immediately
*/
tavla.root.addChild(rectangle)

/*
Allow the rectangle to be dragged around
*/
Draggable.make(rectangle)

API

Tavla


new Tavla(el [,opts])

Creates a new instance of Tavla.

Options

{
  drawBoundingBoxes: Boolean // Defaults to false
  pixelRatio: Number // Defaults to window.devicePixelRatio
  isWorker: Boolean // Whether or not the script is running in a worker, if this is true Tavla will skip any DOM-specific logic
  loop: Boolean // Whether to start a draw-loop or not, defaults to true
}

tavla.root

read-only
An instance of View, use this to add your own views.

tavla.draw()

Manually trigger a draw of the current state.

View


new View(x, y, width, height)

Create a new view. Coordinates are relative to the view's parent and drawn from the top-left.

view.id

Contains a unique string used to identify the view.

view.frame

read-only
Get the view's frame.

view.pos

read-only
A convenience wrapper to get the view's position relative to it's parent. This returns the same thing as view.frame.pos.

view.size

read-only
A convenience wrapper to get the view's size. This returns the same thing as view.frame.size.

view.clipping

A boolean indicating whether or not this view should be clipping its children, defaults to false.

view.opacity

A numerical value between 0 and 1 determining the opacity with which the view will be drawn. Opacity will be accumulated downwards through the stack.

view.compositeOperation

Set the composite operation used when drawing the view's children, must be a value supported by the ctx.globalCompositeOperation property.

view.root

read-only
Returns the topmost view that the view is a descendant of.

view.parent

read-only
Returns the view's parent or null if not yet added as a child.

view.absPos

read-only
Get the view's position relative to the root view.

view.setAbsPos(x, y)

Update the position of the view's frame with coordinates relative to the root-view.

view.removeFromParent()

Remove the view from its parent view.

view.addChild(view)

Add a view as a child to this view. The child will start rendering immediately.

view.removeChild(view)

Remove a child-view.

view.getDescendants()

Get a flattened array of all descendants to this view.

view.draw(ctx)

Draw the view and its children to the provided CanvasRenderingContext2D. This method may be overridden by subclasses of View, but note that all overrides should also call view.drawChildren(ctx).

view.drawChildren(ctx)

Trigger all children of the view to be drawn onto the provided CanvasRenderingContext2D.

view.drawWireframe(ctx)

Draw the view's wireframe onto the provided CanvasRenderingContext2D.

view.on(event, handler)

Listen for an event dispatched by the view.

view.on('click', (e, didDispatchChildren) => {
  // e contains the event payload
  // didDispatchChildren is a boolean indicating whether this event was passed on to a child view or not. I.e. if true, the event was meant for a child to this view.
})

view.once(event, handler)

Similar to view.on but the handler will only be called once.

Draggable


Draggable.make(view)

Make a view draggable and enable its drag-event.
This must only be called once per view and after the view has been added as a child to another view.
Tip! Listen for the adopted event which will be fired when the view has been given a parent.

Mask


Mask.make(view)

Turn the view into a mask by setting the ctx.globalCompositeOperation = 'destination-out'.
This will make the view and its children mask any underlying views so that the background becomes visible.
Note that the view must have a fillColor or strokeColor in order to be a mask.

Clamp


Clamp.make(view, anchor)

Clamp a view's coordinates to the coordinates of another view. The clamped view will follow the anchor view.

Clamp.reset(view)

Undo a clamp. This will leave the view in place at its current position

Rect


Rect inherits from View.

new Rect(x, y, width, height)

Create a new rectangle with a position relative to its parent view.

rect.strokeColor

Get or set the stroke-color for the rectangle. Defaults to 'transparent'.

rect.strokeWidth

Get or set the stroke-width for the rectangle. Defaults to 0.

rect.fillColor

Get or set the fill-color for the rectangle. Defaults to 'transparent'.

RoundRect


RoundRect inherits from Rect.

roundRect.borderRadius

Set the border-radius of all of the rectangle's corners.

roundRect.borderRadiusTL

Set the top-left border-radius of the rectangle.

roundRect.borderRadiusTR

Set the top-right border-radius of the rectangle.

roundRect.borderRadiusBR

Set the bottom-right border-radius of the rectangle.

roundRect.borderRadiusBL

Set the bottom-left border-radius of the rectangle.

Image


Draw an image. Inherits from View.

new Image(x, y, width, height, src)

Create a new image with an image source. The source may be a data-url or image path in the form of a string.

image.src

Change the image-source. The new source will be drawn on the next frame.

SVG


Draw an SVG-string as an image. Inherits from Image.

new SVG(x, y, width, height, svgString)

Create a new SVG instance from an SVG-string.

svg.src

Change the SVG-source. The new source will be drawn on the next frame.

Text


Draw some text. Inherits from View.

new Text(text, x, y, fontSize, fontFamily)

Create a new Text instance.

text.text

The text node's text content

text.fontSize

The text node's font size.
Defaults to 16px.

text.fontFamily

The text node's font family.
Defaults to Helvetica.

text.textAlign

The text node's alignment. One of start, end, left, right or center.
Defaults to start.

text.direction

The text node's direction. One of ltr, rtl, inherit.
Defaults to inherit.

text.textBaseline

The text node's baseline setting. One of top, hanging, middle, alphabetic, ideographic or bottom.
Defaults to top.

Frame


new Frame(x?, y?, width?, height?)

Create a new frame. Coordinates are calculated from the top-left.

frame.center

Get coordinates for the frame's center-point.

Events

The following are events fired by instances of View.

click

Fired when the view was clicked.

mousemove

Fired when the cursor moved over the view.

mousedown

Fired when the cursor clicked down on the view.

mouseup

Fired when the cursor let go of a click on the view.

adopted

Fired when the view has been added using view.addChild() to another view.

drag

Will only be fired if the view was made draggable with Draggable.make(view)

dragstop

Fired when a view has stopped being dragged.