UNPKG

unocss-preset-ease

Version:
100 lines (96 loc) 2.98 kB
function camelCase(str) { return str.replace(/-([a-z])/g, (_, char) => char.toUpperCase()); } function kebabCase(str) { return str.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase(); } const css = "ease"; const cssIn = "ease-in"; const cssOut = "ease-out"; const cssInOut = "ease-in-out"; const inSine = "cubic-bezier(0.12, 0, 0.39, 0)"; const inCubic = "cubic-bezier(0.32, 0, 0.67, 0)"; const inQuint = "cubic-bezier(0.64, 0, 0.78, 0)"; const inCirc = "cubic-bezier(0.55, 0, 1, 0.45)"; const inQuad = "cubic-bezier(0.11, 0, 0.5, 0)"; const inQuart = "cubic-bezier(0.5, 0, 0.75, 0)"; const inExpo = "cubic-bezier(0.7, 0, 0.84, 0)"; const inBack = "cubic-bezier(0.36, 0, 0.66, -0.56)"; const outSine = "cubic-bezier(0.61, 1, 0.88, 1)"; const outCubic = "cubic-bezier(0.33, 1, 0.68, 1)"; const outQuint = "cubic-bezier(0.22, 1, 0.36, 1)"; const outCirc = "cubic-bezier(0, 0.55, 0.45, 1)"; const outQuad = "cubic-bezier(0.5, 1, 0.89, 1)"; const outQuart = "cubic-bezier(0.25, 1, 0.5, 1)"; const outExpo = "cubic-bezier(0.16, 1, 0.3, 1)"; const outBack = "cubic-bezier(0.34, 1.56, 0.64, 1)"; const inOutSine = "cubic-bezier(0.37, 0, 0.63, 1)"; const inOutCubic = "cubic-bezier(0.65, 0, 0.35, 1)"; const inOutQuint = "cubic-bezier(0.83, 0, 0.17, 1)"; const inOutCirc = "cubic-bezier(0.85, 0, 0.15, 1)"; const inOutQuad = "cubic-bezier(0.45, 0, 0.55, 1)"; const inOutQuart = "cubic-bezier(0.76, 0, 0.24, 1)"; const inOutExpo = "cubic-bezier(0.87, 0, 0.13, 1)"; const inOutBack = "cubic-bezier(0.68, -0.6, 0.32, 1.6)"; const easing = { // CSS css, cssIn, cssOut, cssInOut, /** * Easing function for smooth entrance. * 平滑入场的缓动函数。 */ inSine, inCubic, inQuint, inCirc, inQuad, inQuart, inExpo, inBack, /** * Easing function for smooth exit. * 平滑退出的缓动函数。 */ outSine, outCubic, outQuint, outCirc, outQuad, outQuart, outExpo, outBack, /** * Easing function for smooth entrance and exit. * 平滑入场和退出的缓动函数。 */ inOutSine, inOutCubic, inOutQuint, inOutCirc, inOutQuad, inOutQuart, inOutExpo, inOutBack }; function presetEase({ prefix = "ease-" } = {}) { const easingFunctionNames = Object.keys(easing).map((name) => kebabCase(name)).join("|"); const easingFunctionSelector = `${prefix}(${easingFunctionNames})`; return { name: "unocss-preset-ease", rules: [ [ new RegExp(`^${easingFunctionSelector}$`), ([, name]) => ({ "transition-timing-function": easing[camelCase(name)] }) ] ], autocomplete: { templates: [easingFunctionSelector] } }; } export { css, cssIn, cssInOut, cssOut, presetEase as default, easing, inBack, inCirc, inCubic, inExpo, inOutBack, inOutCirc, inOutCubic, inOutExpo, inOutQuad, inOutQuart, inOutQuint, inOutSine, inQuad, inQuart, inQuint, inSine, outBack, outCirc, outCubic, outExpo, outQuad, outQuart, outQuint, outSine, presetEase };