@oku-ui/motion
Version:
A tiny, performant animation library for VueJS
60 lines (56 loc) • 1.67 kB
JavaScript
import { defineNuxtModule, addPluginTemplate, addComponent, addImports } from '@nuxt/kit';
import { components, utilities } from '@oku-ui/motion';
const index = defineNuxtModule({
meta: {
name: "@oku-ui/motion",
configKey: "okuMotion",
compatibility: {
nuxt: ">=3.14"
}
},
defaults: {
prefix: "",
components: true
},
setup(options, _nuxtApp) {
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(components).filter(([name]) => options.components[name]).flatMap(([_, components]) => components);
}
if (options.components)
return Object.values(components).flat();
return [];
}
for (const component of getComponents()) {
addComponent({
name: `${options.prefix}${component}`,
export: component,
filePath: "@oku-ui/motion"
});
}
function getUtilities() {
if (typeof options.components === "object") {
return Object.entries(utilities).filter(([name]) => options.components[name]).flatMap(([_, utilities]) => utilities);
}
if (options.components)
return Object.values(utilities).flat();
return [];
}
for (const utility of getUtilities()) {
addImports({
from: "@oku-ui/motion",
name: utility
});
}
}
});
export { index as default };