0.0.7 • Published 4 months ago

peakflow v0.0.7

Weekly downloads
-
License
MIT
Repository
github
Last release
4 months ago

Peakflow for Alpine.js

Introduction

Peakflow is a powerful Alpine.js plugin that simplifies common workflows for crafting rich, animated experiences on the web.

Installation

npm install peakflow alpinejs

Peer Dependencies

Peakflow uses GSAP's ticker for a global animation loop, ensuring smooth and synchronized animations across your application. To use Peakflow, ensure that you have GSAP installed in your project.

Required Version: GSAP >= 3.0.0

npm install gsap

Features

Simplified setup

Instead of repeating Alpine.data for every component and Alpine.store for everything in your store, Peakflow allows you to use an object like so:

import Alpine from 'alpinejs'
import { peakflow } from 'peakflow'

Alpine.plugin(
  peakflow({
    components: {
      // Define your components here
    },
    store: {
      // Define your store here
    },
  }),
)

Alpine.start()

Enhanced components

In addition to the usual init and destroy lifecycle methods available within Alpine.js components, Peakflow enhances this further with the following lifecycle events:

NameDescription
resizeRuns on window resize
beforeResizeRuns before resize*
afterResizeRuns after resize*
rafAnimation loop powered by GSAP Ticker. Runs every frame
pointermoveRuns on pointermove

* Used rarely, but can come in handy for scheduling complex responsive logic

Peakflow also adds several dynamic values to the global $store:

NameDescription
windowWidthwindow.innerWidth
windowHeightwindow.innerHeight
pointerXX coordinate of pointer (event.clientX)
pointerYY coordinate of pointer (event.clientY)

Responsive directive

x-resize directive for handling simple responsive logic directly in your markup.

Advanced DOM element selection

Peakflow introduces the x-array-ref directive and $arrayRefs magic, overcoming the limitation of x-ref in selecting multiple elements. This enhancement functions similarly to x-ref but returns an array of elements. By assigning the x-array-ref attribute with the same identifier (e.g., foo) to multiple elements, you can access all these elements as an array through $arrayRefs.foo.

Example

Below is an example of a Peakflow-enhanced Alpine.js component that utilizes the resize and raf methods, accesses this.$arrayRefs, and retrieves window dimensions from this.$store.

<div x-data="example">
  <div x-array-ref="items">Item 1</div>
  <div x-array-ref="items">Item 2</div>
  <div x-array-ref="items">Item 3</div>
  <span
    x-text="'Window width: ' + $store.windowWidth + ', Height: ' + $store.windowHeight"
  ></span>
</div>
import Alpine from 'alpinejs'
import { peakflow } from 'peakflow'

Alpine.plugin(
  peakflow({
    components: {
      example: () => ({
        init() {
          console.log('Component initialized')
        },
        resize() {
          console.log(
            'Window resized:',
            this.$store.windowWidth,
            this.$store.windowHeight,
          )
        },
        raf() {
          this.$arrayRefs.items.forEach((item, index) => {
            item.style.transform = `translateY(${
              Math.sin(Date.now() / 1000 + index) * 10
            }px)`
          })
        },
      }),
    },
  }),
)

Alpine.start()
0.0.5

4 months ago

0.0.7

4 months ago

0.0.6

4 months ago

0.0.3

4 months ago

0.0.2

4 months ago

0.0.4

4 months ago

0.0.1

5 months ago