UNPKG

daisyui

Version:

daisyUI 5 - The Tailwind CSS Component Library

87 lines (74 loc) 2.63 kB
import themeOrder from "./themeOrder.js" export const pluginOptionsHandler = (() => { let firstRun = true return (options, addBase, themesObject, packageVersion) => { const { logs = true, root = ":root", themes = ["light --default", "dark --prefersdark"], include, exclude, prefix = "", } = options || {} if (logs !== false && firstRun) { console.log( `${atob("Lyoh")} ${decodeURIComponent("%F0%9F%8C%BC")} ${atob("ZGFpc3lVSQ==")} ${packageVersion} ${atob("Ki8=")}`, ) firstRun = false } const applyTheme = (themeName, flags) => { const theme = themesObject[themeName] if (theme) { let selector = `${root}:has(input.theme-controller[value=${themeName}]:checked),[data-theme=${themeName}]` if (flags.includes("--default")) { selector = `:where(${root}),${selector}` } addBase({ [selector]: theme }) if (flags.includes("--prefersdark")) { addBase({ "@media (prefers-color-scheme: dark)": { [root]: theme } }) } } } if (themes === "all") { if (themesObject["light"]) { applyTheme("light", ["--default"]) } if (themesObject["dark"]) { addBase({ "@media (prefers-color-scheme: dark)": { [root]: themesObject["dark"] } }) } themeOrder.forEach((themeName) => { if (themesObject[themeName]) { applyTheme(themeName, []) } }) } else if (themes) { const themeArray = Array.isArray(themes) ? themes : [themes] // For single theme with --default flag, skip the other applications if (themeArray.length === 1 && themeArray[0].includes("--default")) { const [themeName, ...flags] = themeArray[0].split(" ") applyTheme(themeName, flags) return { include, exclude, prefix } } // default theme themeArray.forEach((themeOption) => { const [themeName, ...flags] = themeOption.split(" ") if (flags.includes("--default")) { applyTheme(themeName, ["--default"]) } }) // prefers dark theme themeArray.forEach((themeOption) => { const [themeName, ...flags] = themeOption.split(" ") if (flags.includes("--prefersdark")) { addBase({ "@media (prefers-color-scheme: dark)": { [root]: themesObject[themeName] } }) } }) // other themes themeArray.forEach((themeOption) => { const [themeName] = themeOption.split(" ") applyTheme(themeName, []) }) } return { include, exclude, prefix } } })()