let plugin = require("tailwindcss/plugin"); let multiThemePlugin = plugin.withOptions( function (options) { return function ({ addBase }) { let themes = options?.themes ?? []; addBase(generateForRoot(themes)); Object.keys(themes).forEach((themeName) => { addBase(generateForTheme(themes, themeName)); }); }; }, function (options) { return { themes: options?.themes ?? [], }; } ); function generateForRoot(themes) { let defaultThemeName = Object.keys(themes)[0]; return Object.entries(themes[defaultThemeName]).map(([colourName, value]) => { return { ":root": { [`--color-${colourName}`]: value, }, }; }); } function generateForTheme(themes, themeName) { return Object.entries(themes[themeName]).map(([colourName, value]) => { return { [`[data-theme=${themeName}]`]: { [`--color-${colourName}`]: value, }, }; }); } module.exports = multiThemePlugin;