UNPKG

@poupe/tailwindcss

Version:

TailwindCSS v4 plugin for Poupe UI framework with theme customization support

265 lines (261 loc) 7.25 kB
import '@poupe/theme-builder'; import '@poupe/theme-builder/core'; import { v as validShade, h as makeThemeFromPartialOptions, g as makeConfig, f as themePluginFunction, z as validThemeSuffix, A as validThemePrefix, B as validColorName, C as flattenColorOptions, D as validColorOptions, i as defaultShades } from './shared/tailwindcss.BlKYX9OC.mjs'; export { t as themePlugin } from './shared/tailwindcss.BlKYX9OC.mjs'; import { kebabCase } from '@poupe/css'; import { p as pluginWithOptions } from './shared/tailwindcss.CwibpYHY.mjs'; import 'tailwindcss/colors'; function getShadeValue(value, negative = false) { if (typeof value !== "number" || Math.round(value) !== value) { return void 0; } else if (validShade(value)) { return value; } else if (negative && validShade(-value)) { return value; } return void 0; } function getStringValue(value) { if (typeof value === "string") { return value; } return void 0; } function getStringOrBooleanValue(value) { if (typeof value === "boolean") { return value; } else if (typeof value !== "string") { return void 0; } else if (value === "true") { return true; } else if (value === "false") { return false; } else { return value; } } function getBooleanValue(value) { if (typeof value === "boolean") { return value; } else if (value === "true") { return true; } else if (value === "false") { return false; } return void 0; } function debugLog(enabled, ...a) { if (enabled) { console.log(logPrefix, ...a); } } function warnLog(...a) { console.warn(logPrefix, ...a); } const logPrefix = "@poupe/tailwindcss/flat"; const flatPlugin = pluginWithOptions( themePluginFunction, makeConfig, (params) => makeThemeFromPartialOptions(makeOptions(params)) ); function makeOptions(params = {}) { const debug = params.debug ?? false; debugLog(debug, "params", params); const options = {}; for (const [key, value] of Object.entries(params)) { if (!processParam(options, debug, key, value)) { warnLog("invalid param:", key, value); } } debugLog(debug, "options", options); return options; } function processParam(options, debug, key, value) { switch (key) { case "debug": { const v = getBooleanValue(value); if (v === void 0) { return false; } options.debug = v; debugLog(debug, "debug", v); return true; } case "themePrefix": case "theme-prefix": { const v = getStringValue(value); if (v === void 0 || !validThemePrefix(v)) { return false; } options.themePrefix = v; debugLog(debug, "theme-prefix", v); return true; } case "surfacePrefix": case "surface-prefix": { const v = getStringOrBooleanValue(value); switch (v) { case void 0: return false; case true: options.surfacePrefix = void 0; break; case false: case "": options.surfacePrefix = false; break; default: if (!validThemePrefix(v)) { return false; } options.surfacePrefix = v; } debugLog(debug, "surface-prefix", options.surfacePrefix); return true; } case "omitTheme": case "omit-theme": { const v = getBooleanValue(value); if (v === void 0) { return false; } options.omitTheme = v; debugLog(debug, "omit-theme", v); return true; } case "darkSuffix": case "dark-suffix": { const v = getStringValue(value); if (v === void 0 || !validThemeSuffix(v)) { return false; } options.darkSuffix = v; debugLog(debug, "dark-suffix", v); return true; } case "lightSuffix": case "light-suffix": { const v = getStringValue(value); if (v === void 0 || !validThemeSuffix(v)) { return false; } options.lightSuffix = v; debugLog(debug, "light-suffix", v); return true; } case "shades": return processShadesParam(options, debug, value); default: return processColorParam(options, debug, key, value); } } function processColorParam(options, debug, key, value) { const colorName = kebabCase(key); const colorOptions = {}; if (!validColorName(colorName)) { return false; } else if (typeof value === "string") { if (value === "") { return false; } colorOptions.value = value; } else if (typeof value === "boolean") { colorOptions.harmonized = value; } else if (!Array.isArray(value)) { return false; } else if (!processColorParamArray(colorOptions, debug, value)) { return false; } if (options.colors === void 0) { options.colors = { primary: {} }; } const mergedOptions = { ...flattenColorOptions(options.colors[colorName]), ...colorOptions }; if (!validColorOptions(colorName, mergedOptions)) { return false; } options.colors[colorName] = mergedOptions; debugLog(debug, "color", colorName, mergedOptions); return true; } function processColorParamArray(options, debug, values) { if (values.length === 0) { return false; } else if (typeof values[0] === "boolean") { options.harmonized = values[0]; return processColorParamShades(options, debug, values.slice(1)); } else if (typeof values[0] === "number") { return processColorParamShades(options, debug, values); } else if (typeof values[0] !== "string") { return false; } options.value = values[0]; values = values.slice(1); if (values.length === 0) { return true; } if (typeof values[0] === "boolean") { options.harmonized = values[0]; values = values.slice(1); if (values.length === 0) { return true; } } return processColorParamShades(options, debug, values); } function processColorParamShades(options, debug, values) { if (values.length === 0) { return false; } else if (values.length === 1 && values[0] === 0) { options.shades = false; return true; } const shades = /* @__PURE__ */ new Set(); let append = false; for (const v of values) { let shade = getShadeValue(v, true); if (shade === void 0) { return false; } else if (shade < 0) { append = true; shade = -shade; } shades.add(shade); } if (append) { for (const shade of defaultShades) { shades.add(shade); } } options.shades = [...shades].sort((a, b) => a - b); return true; } function processShadesParam(options, debug, value) { if (value === false || value === 0) { options.shades = false; } else if (value === true) { options.shades = defaultShades; } else if (Array.isArray(value)) { const shades = /* @__PURE__ */ new Set(); for (const v of value) { const shade = getShadeValue(v); if (shade === void 0) { return false; } shades.add(shade); } options.shades = [...shades].sort((a, b) => a - b); } else { const v = getShadeValue(value); if (v === void 0) { return false; } options.shades = [v]; } debugLog(debug, "shades", options.shades); return true; } export { flatPlugin as default }; //# sourceMappingURL=index.mjs.map