motion-v
Version:
<h1 align="center"> <img width="35" height="35" alt="Motion logo" src="https://github.com/user-attachments/assets/00d6d1c3-72c4-4c2f-a664-69da13182ffc" /><br />Motion for Vue</h1>
101 lines (100 loc) • 2.31 kB
JavaScript
function resolveVariantValue(definition, variants, custom) {
if (Array.isArray(definition)) return definition.reduce((acc, item) => {
const resolvedVariant = resolveVariantValue(item, variants, custom);
return resolvedVariant ? {
...acc,
...resolvedVariant
} : acc;
}, {});
else if (typeof definition === "object") return definition;
else if (definition && variants) {
const variant = variants[definition];
return typeof variant === "function" ? variant(custom) : variant;
}
}
function resolveVariant(definition, variants, custom) {
const resolved = resolveVariantValue(definition, variants, custom);
if (!resolved) return void 0;
const { transition, transitionEnd, ...target } = resolved;
return {
...target,
...transitionEnd
};
}
function resolveInitialValues(options, context) {
const sources = (options.initial === void 0 && options.variants ? context?.initial : options.initial) === false ? ["initial", "animate"] : ["initial"];
const custom = options.custom ?? options.presenceContext?.custom;
return sources.reduce((acc, variant) => {
return {
...acc,
...resolveVariant(options[variant] || context?.[variant], options.variants, custom)
};
}, {});
}
function shallowCompare(next, prev) {
const prevLength = prev?.length;
if (prevLength !== next.length) return false;
for (let i = 0; i < prevLength; i++) if (prev[i] !== next[i]) return false;
return true;
}
var svgElementSet = new Set([
"animate",
"circle",
"defs",
"desc",
"ellipse",
"g",
"image",
"line",
"filter",
"marker",
"mask",
"metadata",
"path",
"pattern",
"polygon",
"polyline",
"rect",
"stop",
"svg",
"switch",
"symbol",
"text",
"tspan",
"use",
"view",
"clipPath",
"feBlend",
"feColorMatrix",
"feComponentTransfer",
"feComposite",
"feConvolveMatrix",
"feDiffuseLighting",
"feDisplacementMap",
"feDistantLight",
"feDropShadow",
"feFlood",
"feFuncA",
"feFuncB",
"feFuncG",
"feFuncR",
"feGaussianBlur",
"feImage",
"feMerge",
"feMergeNode",
"feMorphology",
"feOffset",
"fePointLight",
"feSpecularLighting",
"feSpotLight",
"feTile",
"feTurbulence",
"foreignObject",
"linearGradient",
"radialGradient",
"textPath"
]);
function isSVGElement(as) {
return svgElementSet.has(as);
}
export { isSVGElement, resolveInitialValues, shallowCompare };