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

@daeinc/sketch-wrapper

v0.13.3

Published

Helpers for creative coding sketches with HTML Canvas

Downloads

7

Readme

sketch-wrapper

npm version badge npm bundle size badge

Helpers for creative coding sketches with HTML5 Canvas. It is heavily inspired by canvas-sketch. Many of the props and settings are compatible.

⚠️ This module is in a very early stage of development, and there may be unexpected bugs.

Install

npm i @daeinc/sketch-wrapper

Features

  • TypeScript: It can work both in JavaScript or TypeScript projects.
  • Multiple sketch modes: It supports vanilla Canvas 2D API, WebGL context, or use with other Canvas libraries (Three.js, OGL, Two.js, Pts.js) as long as they support an existing canvas and context. (p5.js instance mode is not supported in the current version)
  • Animation loop: It has playhead prop that repeats 0..1 and makes it easy to create a seamless animation loop. Other props such as time, deltaTime are provided as well. You can also adjust frame rate for both playing and recording.
  • Sketch settings: Use settings object to reduce boilerplate code in your sketch - set up animation duration, playback frame rate, filename, etc.
  • Sketch props: Use props for each mode to help your coding.
  • File exports: Export canvas as image, animated GIF or WebM video at various frame rates using keyboard shortcuts.

Motivation

In 2022, I started using canvas-sketch for all my creative coding sketches, and it was wonderful and met most of my needs. However, there were a few features that I wish it had. First was external ESM support. Due to the bundler it was using, I could not import the latest packages that I liked such as pts or thi.ng/umbrella. Another was TypeScript. I've only used TS for a few months, but it quickly became a very essential tool in my workflow. So, I thought maybe I'd make my own tool. Sketch-wraper is incomplete and a work-in-progress but it's been a great learning experience personally. If it can find some use in your sketches, that would be great, too.

How to use

Documentation is updated for v0.13.0

Example Usage

The module supports both JavaScript and TypeScript.

import sketchWrapper from "@daeinc/sketch-wrapper";

const sketch = ({ canvas, width, height }) => {
  // any setup code
  const bgFill = `#999`;
  const circleFill = `#333`;

  // render loop
  return ({ context: ctx, width, height, playhead }) => {
    ctx.fillStyle = bgFill;
    ctx.fillRect(0, 0, width, height);

    const d = Math.sin(playhead * Math.PI * 2) * 50;

    ctx.beginPath();
    ctx.arc(width / 2, height / 2, width / 4 + d, 0, Math.PI * 2);
    ctx.fillStyle = circleFill;
    ctx.fill();
  };
};

const settings = {
  title: "Sketch Wrapper Demo",
  background: "#333",
  dimensions: [600, 600],
  pixelRatio: window.devicePixelRatio,
  animate: true,
  duration: 4000,
  suffix: "-demo",
};

sketchWrapper(sketch, settings);

References

License

MIT