UNPKG

@poupe/tailwindcss

Version:

TailwindCSS v4 plugin for Poupe UI framework with theme customization support

1 lines 18.5 kB
{"version":3,"file":"index.mjs","sources":["../src/flat/utils.ts","../src/flat/plugin.ts"],"sourcesContent":["import {\n validShade,\n} from '../theme/shades';\n\nexport * from '../utils';\n\nexport function getShadeValue(value: unknown, negative: boolean = false): number | undefined {\n if (typeof value !== 'number' || Math.round(value) !== value) {\n return undefined;\n } else if (validShade(value)) {\n return value;\n } else if (negative && validShade(-value)) {\n return value;\n }\n return undefined;\n}\n\nexport function getStringValue(value: unknown): string | undefined {\n if (typeof value === 'string') {\n return value;\n }\n return undefined;\n}\n\nexport function getStringOrBooleanValue(value: unknown): string | boolean | undefined {\n if (typeof value === 'boolean') {\n return value;\n } else if (typeof value !== 'string') {\n return undefined;\n } else if (value === 'true') {\n return true;\n } else if (value === 'false') {\n return false;\n } else {\n return value;\n }\n}\n\nexport function getBooleanValue(value: unknown): boolean | undefined {\n if (typeof value === 'boolean') {\n return value;\n } else if (value === 'true') {\n return true;\n } else if (value === 'false') {\n return false;\n }\n\n return undefined;\n}\nexport function debugLog(enabled: boolean, ...a: unknown[]) {\n if (enabled) {\n console.log(logPrefix, ...a);\n }\n}\n\nexport function warnLog(...a: unknown[]) {\n console.warn(logPrefix, ...a);\n}\n\nconst logPrefix = '@poupe/tailwindcss/flat';\n","import {\n type ThemeOptions,\n type ThemeColorOptions,\n\n themePluginFunction,\n themeConfigFunction,\n makeThemeFromPartialOptions,\n\n defaultShades,\n} from '../theme/index';\n\nimport {\n flattenColorOptions,\n} from '../theme/options';\n\nimport {\n type PluginWithOptions,\n pluginWithOptions,\n\n validThemePrefix,\n validThemeSuffix,\n validColorName,\n validColorOptions,\n} from '../theme/utils';\n\nimport {\n getBooleanValue,\n getStringValue,\n getStringOrBooleanValue,\n toKebabCase,\n} from './utils';\n\nexport type FlatOptions = {\n /** Enables options parser logs */\n debug?: boolean\n\n /**\n * Prefix used for color CSS variables\n * @defaultValue 'md-'\n */\n themePrefix?: string\n\n /**\n * Prefix used for surface components\n * @defaultValue 'surface-'\n */\n surfacePrefix?: string | false\n\n /**\n * When true, only generates variable references without color values\n * @defaultValue false\n **/\n omitTheme?: boolean\n\n /** @defaultValue `''` */\n darkSuffix?: string\n\n /** @defaultValue `''` */\n lightSuffix?: string\n\n /** @defaultValue [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950] */\n shades?: number[] | false\n} & {\n /**\n * Color configuration options. Supported formats:\n *\n * - `string`: Define color using colord-compatible value or name\n * - `boolean`: Whether to harmonize known-color with primary\n * - `number[]`: Custom shades (0 disables, negative adds to defaults)\n * - `[boolean, ...number[]]`: Harmonize flag with custom shades\n * - `[string, ...number[]]`: Custom color with custom shades\n * - `[string, boolean, ...number[]]`: Custom color with harmonize flag\n * and custom shades\n *\n * Colors are harmonized by default using colord for parsing.\n */\n [color: string]: PluginColorOptions\n};\n\nexport type PluginColorOptions = string | boolean |\n [ ...number[] ] |\n [boolean, ...number[]] |\n [string, boolean] |\n [string, boolean, ...number[]] |\n [string, ...number[]];\n\n/** poupe plugin for tailwindcss v4 embedded in the default CSS */\nexport const flatPlugin: PluginWithOptions<FlatOptions> = pluginWithOptions(\n themePluginFunction,\n themeConfigFunction,\n (params?: FlatOptions) => makeThemeFromPartialOptions(makeOptions(params)),\n);\n\n/** @returns a partial {@link ThemeOptions} pre-populated from the\n * parameters given to the {@link defaultPlugin}\n * */\nexport function makeOptions(params: FlatOptions = {}): Partial<ThemeOptions> {\n const debug = params.debug ?? false;\n\n debugLog(debug, 'params', params);\n\n const options: Partial<ThemeOptions> = {};\n\n for (const [key, value] of Object.entries(params)) {\n if (!(processParam(options, debug, key, value))) {\n warnLog('invalid param:', key, value);\n }\n }\n\n debugLog(debug, 'options', options);\n\n return options;\n}\n\n/** @returns true if the value was accepted for the specified key */\nexport function processParam(options: Partial<ThemeOptions>, debug: boolean, key: string, value: unknown): boolean {\n switch (key) {\n case 'debug': {\n const v = getBooleanValue(value);\n if (v === undefined) {\n return false;\n }\n options.debug = v;\n debugLog(debug, 'debug', v);\n return true;\n }\n\n case 'themePrefix':\n case 'theme-prefix': {\n const v = getStringValue(value);\n if (v === undefined || !validThemePrefix(v)) {\n return false;\n }\n options.themePrefix = v;\n debugLog(debug, 'theme-prefix', v);\n return true;\n }\n\n case 'surfacePrefix':\n case 'surface-prefix': {\n const v = getStringOrBooleanValue(value);\n switch (v) {\n case undefined:\n // invalid value\n return false;\n case true:\n // default value\n options.surfacePrefix = undefined; // reset to get default value\n break;\n case false:\n case '':\n // empty string is equivalent to false\n options.surfacePrefix = false;\n break;\n default:\n if (!validThemePrefix(v)) {\n // invalid value\n return false;\n }\n\n options.surfacePrefix = v;\n }\n\n debugLog(debug, 'surface-prefix', options.surfacePrefix);\n return true;\n }\n\n case 'omitTheme':\n case 'omit-theme': {\n const v = getBooleanValue(value);\n if (v === undefined) {\n return false;\n }\n options.omitTheme = v;\n debugLog(debug, 'omit-theme', v);\n return true;\n }\n\n case 'darkSuffix':\n case 'dark-suffix': {\n const v = getStringValue(value);\n if (v === undefined || !validThemeSuffix(v)) {\n return false;\n }\n options.darkSuffix = v;\n debugLog(debug, 'dark-suffix', v);\n return true;\n }\n\n case 'lightSuffix':\n case 'light-suffix': {\n const v = getStringValue(value);\n if (v === undefined || !validThemeSuffix(v)) {\n return false;\n }\n options.lightSuffix = v;\n debugLog(debug, 'light-suffix', v);\n return true;\n }\n\n case 'shades':\n return processShadesParam(options, debug, value);\n default:\n return processColorParam(options, debug, key, value);\n }\n}\n\nfunction processColorParam(options: Partial<ThemeOptions>, debug: boolean, key: string, value: unknown): boolean {\n const colorName = toKebabCase(key);\n const colorOptions: ThemeColorOptions = {};\n\n if (!validColorName(colorName)) {\n return false;\n } else if (typeof value === 'string') {\n if (value === '') {\n return false;\n }\n colorOptions.value = value;\n } else if (typeof value === 'boolean') {\n colorOptions.harmonized = value;\n } else if (!Array.isArray(value)) {\n return false;\n } else if (!processColorParamArray(colorOptions, debug, value)) {\n return false;\n }\n\n if (options.colors === undefined) {\n options.colors = { primary: {} };\n }\n\n const mergedOptions: ThemeColorOptions = {\n ...flattenColorOptions(options.colors[colorName]),\n ...colorOptions,\n };\n\n if (!validColorOptions(colorName, mergedOptions)) {\n return false;\n }\n\n options.colors[colorName] = mergedOptions;\n\n debugLog(debug, 'color', colorName, mergedOptions);\n return true;\n}\n\nfunction processColorParamArray(options: ThemeColorOptions, debug: boolean, values: unknown[]): boolean {\n if (values.length === 0) {\n // empty, invalid.\n return false;\n } else if (typeof values[0] === 'boolean') {\n // [boolean, ...number[]]\n options.harmonized = values[0];\n return processColorParamShades(options, debug, values.slice(1));\n } else if (typeof values[0] === 'number') {\n // [...number[]]\n return processColorParamShades(options, debug, values);\n } else if (typeof values[0] !== 'string') {\n // invalid.\n return false;\n }\n\n options.value = values[0];\n values = values.slice(1);\n if (values.length === 0) {\n // [string]\n return true;\n }\n\n if (typeof values[0] === 'boolean') {\n options.harmonized = values[0];\n values = values.slice(1);\n if (values.length === 0) {\n // [string, boolean]\n return true;\n }\n\n // [string, boolean, ...number[]]\n // fallthrough\n }\n\n // [string, ...number[]]\n return processColorParamShades(options, debug, values);\n}\n\nfunction processColorParamShades(options: ThemeColorOptions, debug: boolean, values: unknown[]): boolean {\n if (values.length === 0) {\n // empty, invalid.\n return false;\n } else if (values.length === 1 && values[0] === 0) {\n // disable.\n options.shades = false;\n return true;\n }\n\n const shades = new Set<number>();\n let append = false;\n\n for (const v of values) {\n let shade = getShadeValue(v, true); // allow negatives\n\n if (shade === undefined) {\n // invalid shade value\n return false;\n } else if (shade < 0) {\n // append to defaults\n append = true;\n shade = -shade;\n }\n\n shades.add(shade);\n }\n\n // unique and sorted\n if (append) {\n for (const shade of defaultShades) {\n shades.add(shade);\n }\n }\n options.shades = [...shades].sort((a, b) => a - b);\n return true;\n}\n\nfunction processShadesParam(options: Partial<ThemeOptions>, debug: boolean, value: unknown): boolean {\n if (value === false || value === 0) {\n // disable shades\n options.shades = false;\n } else if (value === true) {\n // default shades\n options.shades = defaultShades;\n } else if (Array.isArray(value)) {\n // use given shades array\n const shades = new Set<number>();\n\n for (const v of value) {\n const shade = getShadeValue(v);\n if (shade === undefined) {\n // invalid shade value\n return false;\n }\n shades.add(shade);\n }\n\n // unique and sorted\n options.shades = [...shades].sort((a, b) => a - b);\n } else {\n // single shade?\n const v = getShadeValue(value);\n if (v === undefined) {\n // invalid shade value\n return false;\n }\n options.shades = [v];\n }\n\n debugLog(debug, 'shades', options.shades);\n return true;\n}\n\nimport {\n debugLog,\n warnLog,\n\n getShadeValue,\n} from './utils';\n"],"names":["themeConfigFunction","toKebabCase"],"mappings":"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"}