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

gilded

v1.0.5

Published

Gilded is a JS animation and styling library to add some shine to your website!

Downloads

7

Readme

Gilded

Gilded is a JS animation and styling library to add some shine to your website!

Installation

This is a browser (not Node.js) module and needs to be bundled with tools such as Webpack or Rollup.
Gilded is available on NPM:

$ npm install gilded

Then you'll be able to import the Gilded module and access its API like so:

import g from "gilded"

What stands out

  • Discrete CSS transforms.
  • Concise syntax.
  • Full use of Promises.
  • Low learning curve - It's as simple as it gets.

Docs

Static methods

g.tr()

Creates a transition of specified length (in milliseconds) and calls a callback function for each animation frame. A promise is returned and can be awaited to sequence multiple transitions together, with an optional overlap parameter that specifies a custom resolve time to allow for overlapping transitions.

// Move div1 box by 100px
await g.tr(1000, t => div1.style.left = `${100*t}px`)

// Resolve div1 after it's just 50% done and start playing div2 immediately:
await g.tr(1000, 500, t => div1.style.left = `${100*t}px`)
await g.tr(1000,      t => div2.style.left = `${100*t}px`)

// Apply an easing function:
await g.tr(1000, g.f.easeInQuad, t => div1.style.left = `${100*t}px`)

// Combine easing with overlaps:
await g.tr(1000, 300, g.f.easeInQuad, t => div1.style.left = `${100*t}px`)
await g.tr(1000,      g.f.easeInQuad, t => div2.style.left = `${100*t}px`)

g.time()

Returns a promise resolved after a specified amount of time for use in animation sequences to create time gaps.

Accepts an optional callback function for use in the same way as regular setTimeout, but with swapped parameters for better readability.

// Create a time gap inside an async function:
console.log('start')
await g.time(1000) 
console.log('end')

// Or use as a readable `setTimeout` replacement:
g.time(1000, () => {
    console.log('finished')
})

Math

The math (m) object holds a number of mathematical and color manipulation methods.

g.m.rand()

Returns a random number within boundaries set by min and max.

g.m.rand(1, 100) // -> 32, 11, 29, 85, 69, etc...

g.m.avg()

Calculates the average from an array of numbers.

m.avg([20, 40, 60]) // -> 40

g.m.clamp()

Caps the value in a range specified by min and max.
This method is a rough implementation of the CSS clamp() function.

m.clamp(0, -5, 10) // 0
m.clamp(0, 5, 10)  // 5
m.clamp(0, 15, 10) // 10

g.m.slide()

Takes the time t and maps it onto a transition between from and to.

m.slide(0.5, 20, 70)  // -> 45
m.slide(0.5, 0, -100) // -> -50

g.m.toHex()

Works the same as int.toString(16) while making sure that the output string is at least 2 characters long and works nicely when put together into a hex color code.

m.toHex(1)   // -> 01 (number.toString(16) would leave a single "1")
m.toHex(128) // -. 80

g.m.hexToRgb()

Takes a hex color code and converts it into the RGB CSS function format.
Long & shorthand syntax is supported.

m.hexToRGB('#4cddca')   // -> rgb(75, 221, 201) 
m.hexToRGB('#4cddca80') // -> rgba(75, 221, 201, 0.5) 
m.hexToRGB('#fff')      // -> rgb(255, 255, 255) 
m.hexToRGB('#fff8')     // -> rgba(255, 255, 255, 0.53) 

g.m.rgbToHex()

Takes an RGB color function and returns a hex code.

m.rgbToHex('rgb(75, 221, 201)')       // -> #4cddca
m.rgbToHex('rgba(75, 221, 201, 0.5)') // -> #4cddca88

g.m.hexTransform()

Returns a transition value between two hex color codes based on the progress t.
Both long and shorthand hex codes are supported, as well as alpha values.

// Using long syntax
m.hexTransform(0.5, '#000000', '#ffffff') // -> #808080

// Using shorthand syntax:
m.hexTransform(0.5, '#000', '#fff') // -> #808080

// Using alpha channel:
m.hexTransform(0.5, '#000000ff', '#ffffff00') // -> #80808080

// Mixing:
// If one of the parameters is an alpha channel, the other one will be treated
// as if it also had an alpha channel, but with opacity set to 1.
m.hexTransform(0.5, '#000000aa', '#888888') // -> #444444d5

// Mixing (long & short syntax):
m.hexTransform(0.5, '#0004', '#888888') // -> #444444a2

g.m.rgbTransform()

Returns a transition value between two rgb/rgba color functions based on the progress t.
Both RGB and RGBA CSS functions can be used interchangeably.

// Using RGB:
m.rgbTransform(0.5, 'rgb(0, 0, 0)', 'rgb(255, 255, 255)') // -> rgb(128, 128, 128)

// Using RGBA:
m.rgbTransform(0.5, 'rgba(0, 0, 0, 1)', 'rgba(255, 255, 255, 0)') // -> rgba(128, 128, 128, 0.5)

// Mixing: 
// If one of the parameters is an RGBA function, the other one will also be 
// treated as RGBA with opacity of 1.
m.rgbTransform(0.5, 'rgb(0, 0, 0)', 'rgba(255, 255, 255, 0)') // -> rgba(128, 128, 128, 0.5)

Easing

Gilded exports a set of easing functions letting you change the behavior of a transition.

Available methods include:

  • easeInQuad
  • easeInCubic
  • easeInQuart
  • easeInQuint
  • easeInCirc
  • easeInExpo
  • easeOutQuad
  • easeOutCubic
  • easeOutQuart
  • easeOutQuint
  • easeOutCirc
  • easeOutExpo
  • easeInOutQuad
  • easeInOutCubic
  • easeInOutQuart
  • easeInOutQuint
  • easeInOutCirc
  • easeInOutExpo
  • easeOutElastic
  • easeOutBounce

These methods are can be used to modify the transition curve of the transition method and can be accessed like so:

const eox = g.f.easeOutExpo
g.transition(1000, eox, t => button.style.left = `${t*100}px`)

Dynamic methods

The dynamic methods are accessible only after instantiating a Gilded selector. That's because these methods aren't simple utility functions. They all produce side-effects on the selected DOM elements. They manipulate element classes, styles and CSS variables.

You can easily select a number of items like you would when using JQuery. Additionally, type-safety is provided for all known HTML and SVG element tags like button, input, clipPath, circle, etc:

const inputs = g('input')
for (let input of inputs) {
    // Won't need type casting, as the type is already set to "HTMLInputElement":
    input.value
}

You can wrap existing elements and NodeMaps:

const button = document.getElementById("#myButton")
g(button).addClass('my-class')

const items = document.querySelectorAll("*")
g(items).addClass('my-class')

g().forEach()

Performs the specified action for each selected element. Direct alias to Array.forEach.

g('input').forEach((element, index, array) => {
    console.log(element, index. array)
})

Optionally, Gilded implements an iterator for use in for of loops:

for (let input of g('input')) {
    console.log(input.value)
}

g().addClass()

Adds a class name to all selected elements.

g('button').addClass('my-class')

g().removeClass()

Removes a class name from selected elements.

g('button').removeClass('my-class')

g().toggleClass()

Toggles a class name on all selected elements.

g('button').toggleClass('my-class')

g().on()

Applies one or more event listeners to all selected elements.

g('button').on('click', (e) => ...)
// or
g('button').on(['mouseenter', 'mouseleave'], (e) => ...)

g().off()

Removes one or more event listeners from all selected elements.

g('button').off('click', callback)
// or
g('button').off(['mouseenter', 'mouseleave'], callback)

CSS

The css Object holds various CSS manipulation methods.

g().css.style()

Applies an inline CSS property to every selected element.

g('button').css.style('color', '#000')
g('button').css.style('border-radius', '10px')

g().css.transform()

Applies a transform function to all selected elements. Unlike element.style.transform, it does not affect the already existing transforms, meaning that changing a property like translateX won't reset translateY.

Note: For this method to work properly, all the transforms of the target elements must be transferred over to an inline style tag.

g('button').css.toInline('transform')
g('button').css.transform('translateX', '100px')

g().css.toInline()

Transfers the specified computed CSS styles of the target element into its inline style tag. The main use of this method is to avoid bugs when performing transform transitions on elements with external CSS styling.

Example:

// Transfer the computed "transform" style into the
// inline style tag before using "g.transform":
g('button').css.toInline('transform')
g('button').css.transform('translateX', '100px')

g().css.var()

Sets a CSS variable on the target elements.
Starting double-dash (--) can be omitted and will be handled automatically.

g('button').css.var('size', '20px')
// Would result in
<button style="--size: 20px;"></button>

// Or if you need to set a global variable:
g(document.documentElement).css.var('theme-color', '#ffffff')