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

morbido

v0.3.0

Published

Morbido simplify the management of transitions for DOM elements with changing size.

Downloads

8

Readme

Morbido 🧸

Morbido simplify the management of transitions for DOM elements with changing size.

Use cases

  • Slider with changing height due to items with different sizes
  • Accordion with opening/closing areas

Install

yarn add morbido

Usage

import Morbido from 'morbido';

...

const morbido = new Morbido(target, {
  timeout: {
    exit: 600,
    mutate: 1200,
    enter: 600,
  },
});

...

target.innerText =
  'Tombola caprese, forte ballerina. Cupola lasagne tombola tortellini \
pronto zucchini ciao confetti paparazzi, panini maestro, pepperoni \
pronto lasagne ciao barista. Parmigiana fritti forte fritti cappuccino \
pizza macaroni, espresso pasta gnocchi pepperoni paparazzi biscotti, \
biscotti. Mamma mandolino pronto macaroni mamma berlusconi spaghetti \
tombola caprese cupola. Espresso barista barista salami.';

morbido.mutate();

Key concepts

Mutation lifecycle

  1. Previous state is restored without transition and previous width and heigth are set inline
  2. Await for onExit callback
  3. New width and height are set inline to the exiting element
  4. Await for onMutate callback
  5. The exiting element is replaced with the entering one
  6. Await for onEnter callback
  7. Current state is saved for future mutations

Mutation object

The mutation object contains information about size change, with values before and after the mutation occurs.

{
  width: {
    from: 480,
    to: 480,
  },
  height: {
    from: 240,
    to: 480,
  },
};

Exiting element

The exiting element is a target clone with previous state. This is updated (a new clone is created) on these circumstances:

  • the Morbido instance is created
  • watch method is called
  • a mutation is ended

Entering element

The target passed when the Morbido instance is created.

API

Morbido(target, options?)

options

Type: object

watchAttributes

Type: boolean Default: true

When true on watch mode it observes for attribute changes

watchCharacterData

Type: boolean Default: true

When true on watch mode it observes for text node changes

watchChildList

Type: boolean Default: true

When true on watch mode it observes for child list changes

watchSubtree

Type: boolean Default: true

When true on watch mode it observes for changes on all discendants too

classes

Type: object Default:

{
  exit: 'exit',
  mutate: 'mutate',
  enter: 'enter',
},

These classes will be added during the three phases of a mutation.

timeout

Type: object Default:

{
  exit: 0,
  mutate: 0,
  enter: 0
}

This object can be set to avoid the return of promises in the callbacks.

onExit

Type: function Default: f => f

This function is called before the previous state element starts exiting. As soon as the returned value resolves (if it's a promise) and timeout.exit time passed the exiting element receives the width and height inline.

onMutate

Type: function Default: f => f

This function is called just after the width and height of the exiting element changed. As soon as the returned value resolves (if it's a promise) and timeout.mutate time passed the exiting element is replaced with the entering one.

onEnter

Type: function Default: f => f

This function is called after the exiting element is replaced with the entering one. As soon as the returned value resolves (if it's a promise) and timeout.enter time passed the "previous state" is saved again.

morbido.mutate()

Starts a mutation process (see mutation lifecycle).

morbido.watch()

Starts watching for mutations relaying on the Mutation Observer API.

Use this mode with caution: every dom change will start a mutation process.

morbido.stop()

Stops the watch mode.

Maintainers