Skip to content

Custom Middleware

Solution

ts
import { computePosition, flip, offset, type Middleware } from '@vielzeug/floatit';

const snap =
  (grid: number): Middleware =>
  ({ x, y }) => ({
    data: { snap: { grid } },
    x: Math.round(x / grid) * grid,
    y: Math.round(y / grid) * grid,
  });

const result = computePosition(trigger, floating, {
  placement: 'bottom',
  middleware: [offset(8), flip(), snap(4)],
});

console.log(result.middlewareData.snap);