@poupe/tailwindcss
Version:
TailwindCSS v4 plugin for Poupe UI framework with theme customization support
265 lines (261 loc) • 7.25 kB
JavaScript
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