diff --git a/src/cli/core/ConfigScanner.ts b/src/cli/core/ConfigScanner.ts index 3fce3873..4dbe2dc0 100644 --- a/src/cli/core/ConfigScanner.ts +++ b/src/cli/core/ConfigScanner.ts @@ -57,7 +57,28 @@ export class ConfigScanner { return this._themeConfig; }; - public getVariants = (): TConfigVariants => this._variantsConfig; + public getVariants = (): Omit => { + // Get the `variants.extend` object + const variantsConfigExtend = this._variantsConfig?.extend; + + // If the variants.extend exists... + if (!!variantsConfigExtend) { + //Return the result of merging the variants with extend + return _.mergeWith( + this._variantsConfig, + variantsConfigExtend, + (variantsValues, variantsExtendValues) => { + if (_.isArray(variantsValues)) { + return variantsValues.concat(variantsExtendValues); + } + }, + ); + // Otherwise... + } else { + // Return the variants + return this._variantsConfig; + } + }; public getThemeProperty = ( themeProperty: keyof TThemeItems, diff --git a/src/cli/lib/types/config.ts b/src/cli/lib/types/config.ts index 9d7adaf7..bfedcbb3 100644 --- a/src/cli/lib/types/config.ts +++ b/src/cli/lib/types/config.ts @@ -8,6 +8,8 @@ export type TConfigDarkMode = false | 'media' | 'class'; export type TConfigTheme = TThemeItems & {extend?: TThemeItems}; -export type TConfigVariants = typeof defaultTailwindConfig.variants; +export type TConfigVariants = TVariantsItems & {extend?: Partial}; export type TThemeItems = typeof defaultTailwindConfig.theme; + +type TVariantsItems = typeof defaultTailwindConfig.variants;