@oku-ui/motion
Version:
A tiny, performant animation library for VueJS
62 lines (57 loc) • 1.66 kB
JavaScript
;
const kit = require('@nuxt/kit');
const motion = require('@oku-ui/motion');
const index = kit.defineNuxtModule({
meta: {
name: "@oku-ui/motion",
configKey: "okuMotion",
compatibility: {
nuxt: ">=3.14"
}
},
defaults: {
prefix: "",
components: true
},
setup(options, _nuxtApp) {
kit.addPluginTemplate({
filename: "001.okumotion.client.mjs",
getContents() {
return `import { motionPlugin } from '@oku-ui/motion'
export default defineNuxtPlugin((nuxtApp) => {
nuxtApp.vueApp.use(motionPlugin)
})`;
}
});
function getComponents() {
if (typeof options.components === "object") {
return Object.entries(motion.components).filter(([name]) => options.components[name]).flatMap(([_, components]) => components);
}
if (options.components)
return Object.values(motion.components).flat();
return [];
}
for (const component of getComponents()) {
kit.addComponent({
name: `${options.prefix}${component}`,
export: component,
filePath: "@oku-ui/motion"
});
}
function getUtilities() {
if (typeof options.components === "object") {
return Object.entries(motion.utilities).filter(([name]) => options.components[name]).flatMap(([_, utilities]) => utilities);
}
if (options.components)
return Object.values(motion.utilities).flat();
return [];
}
for (const utility of getUtilities()) {
kit.addImports({
from: "@oku-ui/motion",
name: utility
});
}
}
});
module.exports = index;