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 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 | 39x 29574x 39x 30486x 824x 824x 824x 824x 824x 668x 824x 39x 1274x 1274x 1049x 10x 1049x 490x 1049x 26x 1049x 39x 824x 824x 39x 4280x 39x 1430x | import { AnimationControls } from "../../animation/types" import { MotionProps } from "../../motion/types" import { TargetAndTransition, TargetResolver } from "../../types" import { ResolvedValues, VisualElement } from "../types" /** * Decides if the supplied variable is an array of variant labels */ export function isVariantLabels(v: unknown): v is string[] { return Array.isArray(v) } /** * Decides if the supplied variable is variant label */ export function isVariantLabel(v: unknown): v is string | string[] { return typeof v === "string" || isVariantLabels(v) } /** * Creates an object containing the latest state of every MotionValue on a VisualElement */ function getCurrent(visualElement: VisualElement) { const current = {} visualElement.forEachValue((value, key) => (current[key] = value.get())) return current } /** * Creates an object containing the latest velocity of every MotionValue on a VisualElement */ function getVelocity(visualElement: VisualElement) { const velocity = {} visualElement.forEachValue( (value, key) => (velocity[key] = value.getVelocity()) ) return velocity } export function resolveVariantFromProps( props: MotionProps, definition: TargetAndTransition | TargetResolver, custom?: any, currentValues?: ResolvedValues, currentVelocity?: ResolvedValues ): TargetAndTransition export function resolveVariantFromProps( props: MotionProps, definition?: string | TargetAndTransition | TargetResolver, custom?: any, currentValues?: ResolvedValues, currentVelocity?: ResolvedValues ): undefined | TargetAndTransition export function resolveVariantFromProps( props: MotionProps, definition?: string | TargetAndTransition | TargetResolver, custom?: any, currentValues: ResolvedValues = {}, currentVelocity: ResolvedValues = {} ) { /** * If the variant definition is a function, resolve. */ if (typeof definition === "function") { definition = definition( custom ?? props.custom, currentValues, currentVelocity ) } /** * If the variant definition is a variant label, or * the function returned a variant label, resolve. */ if (typeof definition === "string") { definition = props.variants?.[definition] } /** * At this point we've resolved both functions and variant labels, * but the resolved variant label might itself have been a function. * If so, resolve. This can only have returned a valid target object. */ if (typeof definition === "function") { definition = definition( custom ?? props.custom, currentValues, currentVelocity ) } return definition } /** * Resovles a variant if it's a variant resolver */ export function resolveVariant( visualElement: VisualElement, definition: TargetAndTransition | TargetResolver, custom?: any ): TargetAndTransition export function resolveVariant( visualElement: VisualElement, definition?: string | TargetAndTransition | TargetResolver, custom?: any ): TargetAndTransition | undefined export function resolveVariant( visualElement: VisualElement, definition?: string | TargetAndTransition | TargetResolver, custom?: any ) { const props = visualElement.getProps() return resolveVariantFromProps( props, definition, custom ?? props.custom, getCurrent(visualElement), getVelocity(visualElement) ) } export function checkIfControllingVariants(props: MotionProps) { return ( typeof (props.animate as AnimationControls)?.start === "function" || isVariantLabel(props.initial) || isVariantLabel(props.animate) || isVariantLabel(props.whileHover) || isVariantLabel(props.whileDrag) || isVariantLabel(props.whileTap) || isVariantLabel(props.whileFocus) || isVariantLabel(props.exit) ) } export function checkIfVariantNode(props: MotionProps) { return Boolean(checkIfControllingVariants(props) || props.variants) } |