Skip to content

Cursor JSTwig

Use the cursor component to add a custom cursor to your project.

It reads the pointer, damps its position, and publishes what it knows on its own element: --cursor-x and --cursor-y for the position, data-cursor-state for what the pointer is over, data-cursor-down for the button. The visual is a stylesheet.

Usage

After you install the package, include the template in your project:

js
import { registerComponent } from '@studiometa/js-toolkit';
import { Cursor } from '@studiometa/ui';

registerComponent(Cursor);
twig
{% include '@ui/Cursor/Cursor.twig' only %}

Name the states you want, then style them:

html
<div
  data-component="Cursor"
  data-option-states='{"a, button": "grow", "[data-cursor-shrink]": "shrink"}'></div>
css
[data-component='Cursor'] {
  position: fixed;
  top: 0;
  left: 0;
  width: 3rem;
  height: 3rem;
  margin: -1.5rem 0 0 -1.5rem;
  border-radius: 9999px;
  background-color: #000;
  pointer-events: none;
  transition: scale 300ms cubic-bezier(0.25, 1, 0.5, 1);
}

[data-component='Cursor'][data-cursor-state='grow'] {
  scale: 2;
}

[data-component='Cursor'][data-cursor-state='shrink'] {
  scale: 0.5;
}

Any number of states, any property, your own easing. See the JS API for the full published surface.