UNPKG

@tokens-studio/graph-engine

Version:

An execution engine to handle Token Studios generators and resolvers

60 lines 2.2 kB
import { BooleanSchema, FloatCurveSchema } from '../../schemas/index.js'; import { Node } from '../../programmatic/node.js'; import { setToPrecision } from '../../utils/precision.js'; export default class NodeDefinition extends Node { static title = 'Flip Float Curve'; static type = 'studio.tokens.curve.flipFloat'; static description = 'Flips a float curve horizontally, vertically, or both'; constructor(props) { super(props); this.addInput('curve', { type: FloatCurveSchema }); this.addInput('flipHorizontal', { type: { ...BooleanSchema, default: false } }); this.addInput('flipVertical', { type: { ...BooleanSchema, default: false } }); this.addOutput('curve', { type: FloatCurveSchema }); } flipPoint(point, flipH, flipV) { const [x, y] = point; return [ setToPrecision(flipV ? 1 - x : x, 5), setToPrecision(flipH ? 1 - y : y, 5) ]; } execute() { const { curve, flipHorizontal, flipVertical } = this.getAllInputs(); if (!flipHorizontal && !flipVertical) { this.outputs.curve.set(curve); return; } const flippedSegments = curve.segments.map(segment => this.flipPoint(segment, flipHorizontal, flipVertical)); const flippedControlPoints = curve.controlPoints.map(([c1, c2]) => [ this.flipPoint(c1, flipHorizontal, flipVertical), this.flipPoint(c2, flipHorizontal, flipVertical) ]); // If flipping horizontally, we need to reverse the order of points if (flipHorizontal) { flippedSegments.reverse(); flippedControlPoints.reverse(); // Also swap control points within each pair when flipping horizontally flippedControlPoints.forEach(points => points.reverse()); } this.outputs.curve.set({ segments: flippedSegments, controlPoints: flippedControlPoints }); } } //# sourceMappingURL=flipFloatCurve.js.map