All files / src/motion/features definitions.ts

91.67% Statements 11/12
75% Branches 3/4
100% Functions 4/4
100% Lines 9/9

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49      297x 32694x     33x                                                           33x 78x 701x   701x 14x   687x        
import { MotionProps } from "../types"
import { FeatureComponents, LoadedFeatures } from "./types"
 
const createDefinition = (propNames: string[]) => ({
    isEnabled: (props: MotionProps) => propNames.some((name) => !!props[name]),
})
 
export const featureDefinitions: LoadedFeatures = {
    measureLayout: createDefinition(["layout", "layoutId", "drag"]),
    animation: createDefinition([
        "animate",
        "exit",
        "variants",
        "whileHover",
        "whileTap",
        "whileFocus",
        "whileDrag",
        "whileInView",
    ]),
    exit: createDefinition(["exit"]),
    drag: createDefinition(["drag", "dragControls"]),
    focus: createDefinition(["whileFocus"]),
    hover: createDefinition(["whileHover", "onHoverStart", "onHoverEnd"]),
    tap: createDefinition(["whileTap", "onTap", "onTapStart", "onTapCancel"]),
    pan: createDefinition([
        "onPan",
        "onPanStart",
        "onPanSessionStart",
        "onPanEnd",
    ]),
    inView: createDefinition([
        "whileInView",
        "onViewportEnter",
        "onViewportLeave",
    ]),
}
 
export function loadFeatures(features: FeatureComponents) {
    for (const key in features) {
        Iif (features[key] === null) continue
 
        if (key === "projectionNodeConstructor") {
            featureDefinitions.projectionNodeConstructor = features[key]
        } else {
            featureDefinitions[key].Component = features[key]
        }
    }
}