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

decompose-dommatrix

v1.1.0

Published

A small library to decompose a DOMMatrix into transform values.

Downloads

66

Readme

Decompose DOMMatrix

Takes in a DOMMatrix and returns a set of transforms (translateX, rotateZ, etc). This code is mostly lifted from https://github.com/facebook/react-native/blob/master/Libraries/Utilities/MatrixMath.js and can be considered as a standalone decompose function. This is actually useful though since a standalone decompose/unmatrix function for javascript was impossible to find.

Important Note: the transforms are specified in a way that they need to be applied in a specific order to get the same result. Specifically, given a decomposed matrix, to "recompose" the matrix properly you must apply the transforms in the following order: translate, rotate, skew, scale. This is why if you apply some transforms, then get the decomposed matrix you may get different values. i.e. if you do

element.style.transform = 'scale(2) rotate(30deg) translateX(30px)';
const decomposed = decomposeDOMMatrix(new DOMMatrix(getComputedStyle(element).getPropertyValue('transform')));
console.log(JSON.stringify(decomposed));

you will get a different set of numbers. But if you apply those new set of numbers in the specified order (translate, rotate, skew, scale) your element will look the exact same as your original.

Usage

import decomposeDOMMatrix from 'decompose-dommatrix';

const decomposed = decomposeDOMMatrix(new DOMMatrix(getComputedStyle(element).getPropertyValue('transform')));
console.log(decomposed.translateX);

API

decomposeDOMMatrix(matrix: DOMMatrix): TransformValues

Takes in a DOMMatrix and returns a map of transforms to values. All values are either in pixels or degrees, depending on the transform.

TransformValues

translateX, translateY, translateZ: number

The translate values along the various axis. In pixels (px).

rotateX, rotateY, rotateZ: number

The rotation values along the various axis. In degrees (deg).

scaleX, scaleY, scaleZ: number

The scale values along the various axis. Unitless.

skewXY, skewXZ, skewYZ: number

The skew values along the various axis. In degrees (deg).