@adam.plesnik/tailwindcss-scroll-driven-animations
Version:
A plugin for Tailwind CSS v3.4+ that provides utilities for scroll-driven animations.
101 lines (100 loc) • 2.8 kB
JavaScript
var _plugin = /*#__PURE__*/ _interop_require_default(require("tailwindcss/plugin"));
function _interop_require_default(obj) {
return obj && obj.__esModule ? obj : {
default: obj
};
}
function splitAndCombine(values, modifiers) {
var valueArray = (values || "").split(" ");
var modifierArray = (modifiers || [
"0_100%"
].join("_")).split("_");
var combinedValues = [
valueArray[0],
modifierArray[0],
valueArray[1],
modifierArray[1]
];
return combinedValues.join(" ");
}
module.exports = (0, _plugin.default)(function scrollDrivenAnimations(param) {
var matchUtilities = param.matchUtilities, addVariant = param.addVariant, theme = param.theme;
matchUtilities({
timeline: function(value, param) {
var modifier = param.modifier;
return {
animationTimeline: modifier ? "--".concat(modifier) : value
};
}
}, {
values: {
DEFAULT: "scroll(y)",
auto: "auto",
none: "none",
"scroll-x": "scroll(x)",
view: "view()"
},
modifiers: "any"
});
matchUtilities({
"scroll-timeline": function(value, param) {
var modifier = param.modifier;
return {
scrollTimeline: (modifier ? "--".concat(modifier, " ") : "none ") + value
};
}
}, {
values: theme("timelineValues"),
modifiers: "any"
});
matchUtilities({
"view-timeline": function(value, param) {
var modifier = param.modifier;
return {
viewTimeline: (modifier ? "--".concat(modifier, " ") : "none ") + value
};
}
}, {
values: theme("timelineValues"),
modifiers: "any"
});
matchUtilities({
scope: function(value, param) {
var modifier = param.modifier;
return {
timelineScope: "--".concat(modifier)
};
}
}, {
values: {
DEFAULT: ""
},
modifiers: "any"
});
matchUtilities({
range: function(value, param) {
var modifier = param.modifier;
return {
animationRange: splitAndCombine(value, modifier)
};
}
}, {
values: {
DEFAULT: "cover cover",
"on-entry": "entry entry",
"on-exit": "exit exit",
contain: "contain contain"
},
modifiers: "any"
});
addVariant("no-animations", "@supports not (animation-range: cover)");
}, {
theme: {
timelineValues: {
DEFAULT: "y",
block: "block",
x: "x"
}
}
});
;