cva 1.0.0-beta.0 → 1.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +8 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +17 -5
package/dist/index.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ type StringToBoolean<T> = T extends "true" | "false" ? boolean : T;
|
|
|
6
6
|
type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
|
|
7
7
|
export type VariantProps<Component extends (...args: any) => any> = Omit<OmitUndefined<Parameters<Component>[0]>, "class" | "className">;
|
|
8
8
|
export interface Compose {
|
|
9
|
-
<T extends ReturnType<CVA>[]>(...components: [...T]): (props
|
|
9
|
+
<T extends ReturnType<CVA>[]>(...components: [...T]): (props?: (UnionToIntersection<{
|
|
10
10
|
[K in keyof T]: VariantProps<T[K]>;
|
|
11
11
|
}[number]> | undefined) & CVAClassProp) => string;
|
|
12
12
|
}
|
|
@@ -44,7 +44,14 @@ export interface CVA {
|
|
|
44
44
|
}
|
|
45
45
|
export interface DefineConfigOptions {
|
|
46
46
|
hooks?: {
|
|
47
|
+
/**
|
|
48
|
+
* @deprecated please use `onComplete`
|
|
49
|
+
*/
|
|
47
50
|
"cx:done"?: (className: string) => string;
|
|
51
|
+
/**
|
|
52
|
+
* Returns the completed string of concatenated classes/classNames.
|
|
53
|
+
*/
|
|
54
|
+
onComplete?: (className: string) => string;
|
|
48
55
|
};
|
|
49
56
|
}
|
|
50
57
|
export interface DefineConfig {
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.cx=exports.cva=exports.compose=exports.defineConfig=void 0;var _clsx=require("clsx");const falsyToString=value=>typeof value==="boolean"?"".concat(value):value===0?"0":value;const defineConfig=options=>{const cx1=function(){for(var _len=arguments.length,inputs=new Array(_len),_key=0;_key<_len;_key++){inputs[_key]=arguments[_key]}var ref;
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.cx=exports.cva=exports.compose=exports.defineConfig=void 0;var _clsx=require("clsx");const falsyToString=value=>typeof value==="boolean"?"".concat(value):value===0?"0":value;const defineConfig=options=>{const cx1=function(){for(var _len=arguments.length,inputs=new Array(_len),_key=0;_key<_len;_key++){inputs[_key]=arguments[_key]}var ref,ref1;if(typeof(options===null||options===void 0?void 0:(ref=options.hooks)===null||ref===void 0?void 0:ref["cx:done"])!=="undefined")return options===null||options===void 0?void 0:options.hooks["cx:done"]((0,_clsx).clsx(inputs));if(typeof(options===null||options===void 0?void 0:(ref1=options.hooks)===null||ref1===void 0?void 0:ref1.onComplete)!=="undefined")return options===null||options===void 0?void 0:options.hooks.onComplete((0,_clsx).clsx(inputs));return(0,_clsx).clsx(inputs)};const cva1=config=>{return props=>{var ref;if((config===null||config===void 0?void 0:config.variants)==null)return cx1(config===null||config===void 0?void 0:config.base,props===null||props===void 0?void 0:props.class,props===null||props===void 0?void 0:props.className);const{variants,defaultVariants}=config;const getVariantClassNames=Object.keys(variants).map(variant=>{const variantProp=props===null||props===void 0?void 0:props[variant];const defaultVariantProp=defaultVariants===null||defaultVariants===void 0?void 0:defaultVariants[variant];const variantKey=falsyToString(variantProp)||falsyToString(defaultVariantProp);return variants[variant][variantKey]});const defaultsAndProps={...defaultVariants,...props&&Object.entries(props).reduce((acc,param)=>{let[key,value]=param;return typeof value==="undefined"?acc:{...acc,[key]:value}},{})};const getCompoundVariantClassNames=config===null||config===void 0?void 0:(ref=config.compoundVariants)===null||ref===void 0?void 0:ref.reduce((acc,param1)=>{let{class:cvClass,className:cvClassName,...cvConfig}=param1;return Object.entries(cvConfig).every(param=>{let[cvKey,cvSelector]=param;const selector=defaultsAndProps[cvKey];return Array.isArray(cvSelector)?cvSelector.includes(selector):selector===cvSelector})?[...acc,cvClass,cvClassName]:acc},[]);return cx1(config===null||config===void 0?void 0:config.base,getVariantClassNames,getCompoundVariantClassNames,props===null||props===void 0?void 0:props.class,props===null||props===void 0?void 0:props.className)}};const compose1=function(){for(var _len=arguments.length,components=new Array(_len),_key=0;_key<_len;_key++){components[_key]=arguments[_key]}return props=>{const propsWithoutClass=Object.fromEntries(Object.entries(props||{}).filter(param=>{let[key]=param;return!["class","className"].includes(key)}));return cx1(components.map(component=>component(propsWithoutClass)),props===null||props===void 0?void 0:props.class,props===null||props===void 0?void 0:props.className)}};return{compose:compose1,cva:cva1,cx:cx1}};exports.defineConfig=defineConfig;const{compose,cva,cx}=defineConfig();exports.compose=compose;exports.cva=cva;exports.cx=cx
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import { clsx } from \"clsx\";\n\n/* Types\n ============================================ */\n\n/* clsx\n ---------------------------------- */\n\n// When compiling with `declaration: true`, many projects experience the dreaded\n// TS2742 error. To combat this, we copy clsx's types manually.\n// Should this project move to JSDoc, this workaround would no longer be needed.\n\ntype ClassValue =\n | ClassArray\n | ClassDictionary\n | string\n | number\n | null\n | boolean\n | undefined;\ntype ClassDictionary = Record<string, any>;\ntype ClassArray = ClassValue[];\n\n/* Utils\n ---------------------------------- */\n\ntype OmitUndefined<T> = T extends undefined ? never : T;\ntype StringToBoolean<T> = T extends \"true\" | \"false\" ? boolean : T;\ntype UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (\n k: infer I\n) => void\n ? I\n : never;\n\nexport type VariantProps<Component extends (...args: any) => any> = Omit<\n OmitUndefined<Parameters<Component>[0]>,\n \"class\" | \"className\"\n>;\n\n/* compose\n ---------------------------------- */\n\nexport interface Compose {\n <T extends ReturnType<CVA>[]>(...components: [...T]): (\n props: (\n | UnionToIntersection<\n {\n [K in keyof T]: VariantProps<T[K]>;\n }[number]\n >\n | undefined\n ) &\n CVAClassProp\n ) => string;\n}\n\n/* cx\n ---------------------------------- */\n\nexport interface CX {\n (...inputs: ClassValue[]): string;\n}\n\nexport type CXOptions = Parameters<CX>;\nexport type CXReturn = ReturnType<CX>;\n\n/* cva\n ============================================ */\n\ntype CVAConfigBase = { base?: ClassValue };\ntype CVAVariantShape = Record<string, Record<string, ClassValue>>;\ntype CVAVariantSchema<V extends CVAVariantShape> = {\n [Variant in keyof V]?: StringToBoolean<keyof V[Variant]> | undefined;\n};\ntype CVAClassProp =\n | {\n class?: ClassValue;\n className?: never;\n }\n | {\n class?: never;\n className?: ClassValue;\n };\n\nexport interface CVA {\n <\n _ extends \"cva's generic parameters are restricted to internal use only.\",\n V\n >(\n config: V extends CVAVariantShape\n ? CVAConfigBase & {\n variants?: V;\n compoundVariants?: (V extends CVAVariantShape\n ? (\n | CVAVariantSchema<V>\n | {\n [Variant in keyof V]?:\n | StringToBoolean<keyof V[Variant]>\n | StringToBoolean<keyof V[Variant]>[]\n | undefined;\n }\n ) &\n CVAClassProp\n : CVAClassProp)[];\n defaultVariants?: CVAVariantSchema<V>;\n }\n : CVAConfigBase & {\n variants?: never;\n compoundVariants?: never;\n defaultVariants?: never;\n }\n ): (\n props?: V extends CVAVariantShape\n ? CVAVariantSchema<V> & CVAClassProp\n : CVAClassProp\n ) => string;\n}\n\n/* defineConfig\n ---------------------------------- */\n\nexport interface DefineConfigOptions {\n hooks?: {\n \"cx:done\"?: (className: string) => string;\n };\n}\n\nexport interface DefineConfig {\n (options?: DefineConfigOptions): {\n compose: Compose;\n cx: CX;\n cva: CVA;\n };\n}\n\n/* Exports\n ============================================ */\n\nconst falsyToString = <T extends unknown>(value: T) =>\n typeof value === \"boolean\" ? `${value}` : value === 0 ? \"0\" : value;\n\nexport const defineConfig: DefineConfig = (options) => {\n const cx: CX = (...inputs) =>\n typeof options?.hooks?.[\"cx:done\"] !== \"undefined\"\n ? options?.hooks[\"cx:done\"](clsx(inputs))\n : clsx(inputs);\n\n const cva: CVA = (config) => (props) => {\n if (config?.variants == null)\n return cx(config?.base, props?.class, props?.className);\n\n const { variants, defaultVariants } = config;\n\n const getVariantClassNames = Object.keys(variants).map(\n (variant: keyof typeof variants) => {\n const variantProp = props?.[variant as keyof typeof props];\n const defaultVariantProp = defaultVariants?.[variant];\n\n const variantKey = (falsyToString(variantProp) ||\n falsyToString(\n defaultVariantProp\n )) as keyof typeof variants[typeof variant];\n\n return variants[variant][variantKey];\n }\n );\n\n const defaultsAndProps = {\n ...defaultVariants,\n // remove `undefined` props\n ...(props &&\n Object.entries(props).reduce<typeof props>(\n (acc, [key, value]) =>\n typeof value === \"undefined\" ? acc : { ...acc, [key]: value },\n {} as typeof props\n )),\n };\n\n const getCompoundVariantClassNames = config?.compoundVariants?.reduce(\n (acc, { class: cvClass, className: cvClassName, ...cvConfig }) =>\n Object.entries(cvConfig).every(([cvKey, cvSelector]) => {\n const selector =\n defaultsAndProps[cvKey as keyof typeof defaultsAndProps];\n\n return Array.isArray(cvSelector)\n ? cvSelector.includes(selector)\n : selector === cvSelector;\n })\n ? [...acc, cvClass, cvClassName]\n : acc,\n [] as ClassValue[]\n );\n\n return cx(\n config?.base,\n getVariantClassNames,\n getCompoundVariantClassNames,\n props?.class,\n props?.className\n );\n };\n\n const compose: Compose =\n (...components) =>\n (props) => {\n const propsWithoutClass = Object.fromEntries(\n Object.entries(props || {}).filter(\n ([key]) => ![\"class\", \"className\"].includes(key)\n )\n );\n\n return cx(\n components.map((component) => component(propsWithoutClass)),\n props?.class,\n props?.className\n );\n };\n\n return {\n compose,\n cva,\n cx,\n };\n};\n\nexport const { compose, cva, cx } = defineConfig();\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import { clsx } from \"clsx\";\n\n/* Types\n ============================================ */\n\n/* clsx\n ---------------------------------- */\n\n// When compiling with `declaration: true`, many projects experience the dreaded\n// TS2742 error. To combat this, we copy clsx's types manually.\n// Should this project move to JSDoc, this workaround would no longer be needed.\n\ntype ClassValue =\n | ClassArray\n | ClassDictionary\n | string\n | number\n | null\n | boolean\n | undefined;\ntype ClassDictionary = Record<string, any>;\ntype ClassArray = ClassValue[];\n\n/* Utils\n ---------------------------------- */\n\ntype OmitUndefined<T> = T extends undefined ? never : T;\ntype StringToBoolean<T> = T extends \"true\" | \"false\" ? boolean : T;\ntype UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (\n k: infer I\n) => void\n ? I\n : never;\n\nexport type VariantProps<Component extends (...args: any) => any> = Omit<\n OmitUndefined<Parameters<Component>[0]>,\n \"class\" | \"className\"\n>;\n\n/* compose\n ---------------------------------- */\n\nexport interface Compose {\n <T extends ReturnType<CVA>[]>(...components: [...T]): (\n props?: (\n | UnionToIntersection<\n {\n [K in keyof T]: VariantProps<T[K]>;\n }[number]\n >\n | undefined\n ) &\n CVAClassProp\n ) => string;\n}\n\n/* cx\n ---------------------------------- */\n\nexport interface CX {\n (...inputs: ClassValue[]): string;\n}\n\nexport type CXOptions = Parameters<CX>;\nexport type CXReturn = ReturnType<CX>;\n\n/* cva\n ============================================ */\n\ntype CVAConfigBase = { base?: ClassValue };\ntype CVAVariantShape = Record<string, Record<string, ClassValue>>;\ntype CVAVariantSchema<V extends CVAVariantShape> = {\n [Variant in keyof V]?: StringToBoolean<keyof V[Variant]> | undefined;\n};\ntype CVAClassProp =\n | {\n class?: ClassValue;\n className?: never;\n }\n | {\n class?: never;\n className?: ClassValue;\n };\n\nexport interface CVA {\n <\n _ extends \"cva's generic parameters are restricted to internal use only.\",\n V\n >(\n config: V extends CVAVariantShape\n ? CVAConfigBase & {\n variants?: V;\n compoundVariants?: (V extends CVAVariantShape\n ? (\n | CVAVariantSchema<V>\n | {\n [Variant in keyof V]?:\n | StringToBoolean<keyof V[Variant]>\n | StringToBoolean<keyof V[Variant]>[]\n | undefined;\n }\n ) &\n CVAClassProp\n : CVAClassProp)[];\n defaultVariants?: CVAVariantSchema<V>;\n }\n : CVAConfigBase & {\n variants?: never;\n compoundVariants?: never;\n defaultVariants?: never;\n }\n ): (\n props?: V extends CVAVariantShape\n ? CVAVariantSchema<V> & CVAClassProp\n : CVAClassProp\n ) => string;\n}\n\n/* defineConfig\n ---------------------------------- */\n\nexport interface DefineConfigOptions {\n hooks?: {\n /**\n * @deprecated please use `onComplete`\n */\n \"cx:done\"?: (className: string) => string;\n /**\n * Returns the completed string of concatenated classes/classNames.\n */\n onComplete?: (className: string) => string;\n };\n}\n\nexport interface DefineConfig {\n (options?: DefineConfigOptions): {\n compose: Compose;\n cx: CX;\n cva: CVA;\n };\n}\n\n/* Exports\n ============================================ */\n\nconst falsyToString = <T extends unknown>(value: T) =>\n typeof value === \"boolean\" ? `${value}` : value === 0 ? \"0\" : value;\n\nexport const defineConfig: DefineConfig = (options) => {\n const cx: CX = (...inputs) => {\n if (typeof options?.hooks?.[\"cx:done\"] !== \"undefined\")\n return options?.hooks[\"cx:done\"](clsx(inputs));\n\n if (typeof options?.hooks?.onComplete !== \"undefined\")\n return options?.hooks.onComplete(clsx(inputs));\n\n return clsx(inputs);\n };\n\n const cva: CVA = (config) => (props) => {\n if (config?.variants == null)\n return cx(config?.base, props?.class, props?.className);\n\n const { variants, defaultVariants } = config;\n\n const getVariantClassNames = Object.keys(variants).map(\n (variant: keyof typeof variants) => {\n const variantProp = props?.[variant as keyof typeof props];\n const defaultVariantProp = defaultVariants?.[variant];\n\n const variantKey = (falsyToString(variantProp) ||\n falsyToString(\n defaultVariantProp\n )) as keyof typeof variants[typeof variant];\n\n return variants[variant][variantKey];\n }\n );\n\n const defaultsAndProps = {\n ...defaultVariants,\n // remove `undefined` props\n ...(props &&\n Object.entries(props).reduce<typeof props>(\n (acc, [key, value]) =>\n typeof value === \"undefined\" ? acc : { ...acc, [key]: value },\n {} as typeof props\n )),\n };\n\n const getCompoundVariantClassNames = config?.compoundVariants?.reduce(\n (acc, { class: cvClass, className: cvClassName, ...cvConfig }) =>\n Object.entries(cvConfig).every(([cvKey, cvSelector]) => {\n const selector =\n defaultsAndProps[cvKey as keyof typeof defaultsAndProps];\n\n return Array.isArray(cvSelector)\n ? cvSelector.includes(selector)\n : selector === cvSelector;\n })\n ? [...acc, cvClass, cvClassName]\n : acc,\n [] as ClassValue[]\n );\n\n return cx(\n config?.base,\n getVariantClassNames,\n getCompoundVariantClassNames,\n props?.class,\n props?.className\n );\n };\n\n const compose: Compose =\n (...components) =>\n (props) => {\n const propsWithoutClass = Object.fromEntries(\n Object.entries(props || {}).filter(\n ([key]) => ![\"class\", \"className\"].includes(key)\n )\n );\n\n return cx(\n components.map((component) => component(propsWithoutClass)),\n props?.class,\n props?.className\n );\n };\n\n return {\n compose,\n cva,\n cx,\n };\n};\n\nexport const { compose, cva, cx } = defineConfig();\n"]}
|
package/dist/index.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{clsx}from"clsx";const falsyToString=value=>typeof value==="boolean"?"".concat(value):value===0?"0":value;export const defineConfig=options=>{const cx1=function(){for(var _len=arguments.length,inputs=new Array(_len),_key=0;_key<_len;_key++){inputs[_key]=arguments[_key]}var ref;
|
|
1
|
+
import{clsx}from"clsx";const falsyToString=value=>typeof value==="boolean"?"".concat(value):value===0?"0":value;export const defineConfig=options=>{const cx1=function(){for(var _len=arguments.length,inputs=new Array(_len),_key=0;_key<_len;_key++){inputs[_key]=arguments[_key]}var ref,ref1;if(typeof(options===null||options===void 0?void 0:(ref=options.hooks)===null||ref===void 0?void 0:ref["cx:done"])!=="undefined")return options===null||options===void 0?void 0:options.hooks["cx:done"](clsx(inputs));if(typeof(options===null||options===void 0?void 0:(ref1=options.hooks)===null||ref1===void 0?void 0:ref1.onComplete)!=="undefined")return options===null||options===void 0?void 0:options.hooks.onComplete(clsx(inputs));return clsx(inputs)};const cva1=config=>{return props=>{var ref;if((config===null||config===void 0?void 0:config.variants)==null)return cx1(config===null||config===void 0?void 0:config.base,props===null||props===void 0?void 0:props.class,props===null||props===void 0?void 0:props.className);const{variants,defaultVariants}=config;const getVariantClassNames=Object.keys(variants).map(variant=>{const variantProp=props===null||props===void 0?void 0:props[variant];const defaultVariantProp=defaultVariants===null||defaultVariants===void 0?void 0:defaultVariants[variant];const variantKey=falsyToString(variantProp)||falsyToString(defaultVariantProp);return variants[variant][variantKey]});const defaultsAndProps={...defaultVariants,...props&&Object.entries(props).reduce((acc,param)=>{let[key,value]=param;return typeof value==="undefined"?acc:{...acc,[key]:value}},{})};const getCompoundVariantClassNames=config===null||config===void 0?void 0:(ref=config.compoundVariants)===null||ref===void 0?void 0:ref.reduce((acc,param1)=>{let{class:cvClass,className:cvClassName,...cvConfig}=param1;return Object.entries(cvConfig).every(param=>{let[cvKey,cvSelector]=param;const selector=defaultsAndProps[cvKey];return Array.isArray(cvSelector)?cvSelector.includes(selector):selector===cvSelector})?[...acc,cvClass,cvClassName]:acc},[]);return cx1(config===null||config===void 0?void 0:config.base,getVariantClassNames,getCompoundVariantClassNames,props===null||props===void 0?void 0:props.class,props===null||props===void 0?void 0:props.className)}};const compose1=function(){for(var _len=arguments.length,components=new Array(_len),_key=0;_key<_len;_key++){components[_key]=arguments[_key]}return props=>{const propsWithoutClass=Object.fromEntries(Object.entries(props||{}).filter(param=>{let[key]=param;return!["class","className"].includes(key)}));return cx1(components.map(component=>component(propsWithoutClass)),props===null||props===void 0?void 0:props.class,props===null||props===void 0?void 0:props.className)}};return{compose:compose1,cva:cva1,cx:cx1}};export const{compose,cva,cx}=defineConfig()
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAS,IAAI,KAAQ,MAAM,AAAC,
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["import { clsx } from \"clsx\";\n\n/* Types\n ============================================ */\n\n/* clsx\n ---------------------------------- */\n\n// When compiling with `declaration: true`, many projects experience the dreaded\n// TS2742 error. To combat this, we copy clsx's types manually.\n// Should this project move to JSDoc, this workaround would no longer be needed.\n\ntype ClassValue =\n | ClassArray\n | ClassDictionary\n | string\n | number\n | null\n | boolean\n | undefined;\ntype ClassDictionary = Record<string, any>;\ntype ClassArray = ClassValue[];\n\n/* Utils\n ---------------------------------- */\n\ntype OmitUndefined<T> = T extends undefined ? never : T;\ntype StringToBoolean<T> = T extends \"true\" | \"false\" ? boolean : T;\ntype UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (\n k: infer I\n) => void\n ? I\n : never;\n\nexport type VariantProps<Component extends (...args: any) => any> = Omit<\n OmitUndefined<Parameters<Component>[0]>,\n \"class\" | \"className\"\n>;\n\n/* compose\n ---------------------------------- */\n\nexport interface Compose {\n <T extends ReturnType<CVA>[]>(...components: [...T]): (\n props?: (\n | UnionToIntersection<\n {\n [K in keyof T]: VariantProps<T[K]>;\n }[number]\n >\n | undefined\n ) &\n CVAClassProp\n ) => string;\n}\n\n/* cx\n ---------------------------------- */\n\nexport interface CX {\n (...inputs: ClassValue[]): string;\n}\n\nexport type CXOptions = Parameters<CX>;\nexport type CXReturn = ReturnType<CX>;\n\n/* cva\n ============================================ */\n\ntype CVAConfigBase = { base?: ClassValue };\ntype CVAVariantShape = Record<string, Record<string, ClassValue>>;\ntype CVAVariantSchema<V extends CVAVariantShape> = {\n [Variant in keyof V]?: StringToBoolean<keyof V[Variant]> | undefined;\n};\ntype CVAClassProp =\n | {\n class?: ClassValue;\n className?: never;\n }\n | {\n class?: never;\n className?: ClassValue;\n };\n\nexport interface CVA {\n <\n _ extends \"cva's generic parameters are restricted to internal use only.\",\n V\n >(\n config: V extends CVAVariantShape\n ? CVAConfigBase & {\n variants?: V;\n compoundVariants?: (V extends CVAVariantShape\n ? (\n | CVAVariantSchema<V>\n | {\n [Variant in keyof V]?:\n | StringToBoolean<keyof V[Variant]>\n | StringToBoolean<keyof V[Variant]>[]\n | undefined;\n }\n ) &\n CVAClassProp\n : CVAClassProp)[];\n defaultVariants?: CVAVariantSchema<V>;\n }\n : CVAConfigBase & {\n variants?: never;\n compoundVariants?: never;\n defaultVariants?: never;\n }\n ): (\n props?: V extends CVAVariantShape\n ? CVAVariantSchema<V> & CVAClassProp\n : CVAClassProp\n ) => string;\n}\n\n/* defineConfig\n ---------------------------------- */\n\nexport interface DefineConfigOptions {\n hooks?: {\n /**\n * @deprecated please use `onComplete`\n */\n \"cx:done\"?: (className: string) => string;\n /**\n * Returns the completed string of concatenated classes/classNames.\n */\n onComplete?: (className: string) => string;\n };\n}\n\nexport interface DefineConfig {\n (options?: DefineConfigOptions): {\n compose: Compose;\n cx: CX;\n cva: CVA;\n };\n}\n\n/* Exports\n ============================================ */\n\nconst falsyToString = <T extends unknown>(value: T) =>\n typeof value === \"boolean\" ? `${value}` : value === 0 ? \"0\" : value;\n\nexport const defineConfig: DefineConfig = (options) => {\n const cx: CX = (...inputs) => {\n if (typeof options?.hooks?.[\"cx:done\"] !== \"undefined\")\n return options?.hooks[\"cx:done\"](clsx(inputs));\n\n if (typeof options?.hooks?.onComplete !== \"undefined\")\n return options?.hooks.onComplete(clsx(inputs));\n\n return clsx(inputs);\n };\n\n const cva: CVA = (config) => (props) => {\n if (config?.variants == null)\n return cx(config?.base, props?.class, props?.className);\n\n const { variants, defaultVariants } = config;\n\n const getVariantClassNames = Object.keys(variants).map(\n (variant: keyof typeof variants) => {\n const variantProp = props?.[variant as keyof typeof props];\n const defaultVariantProp = defaultVariants?.[variant];\n\n const variantKey = (falsyToString(variantProp) ||\n falsyToString(\n defaultVariantProp\n )) as keyof typeof variants[typeof variant];\n\n return variants[variant][variantKey];\n }\n );\n\n const defaultsAndProps = {\n ...defaultVariants,\n // remove `undefined` props\n ...(props &&\n Object.entries(props).reduce<typeof props>(\n (acc, [key, value]) =>\n typeof value === \"undefined\" ? acc : { ...acc, [key]: value },\n {} as typeof props\n )),\n };\n\n const getCompoundVariantClassNames = config?.compoundVariants?.reduce(\n (acc, { class: cvClass, className: cvClassName, ...cvConfig }) =>\n Object.entries(cvConfig).every(([cvKey, cvSelector]) => {\n const selector =\n defaultsAndProps[cvKey as keyof typeof defaultsAndProps];\n\n return Array.isArray(cvSelector)\n ? cvSelector.includes(selector)\n : selector === cvSelector;\n })\n ? [...acc, cvClass, cvClassName]\n : acc,\n [] as ClassValue[]\n );\n\n return cx(\n config?.base,\n getVariantClassNames,\n getCompoundVariantClassNames,\n props?.class,\n props?.className\n );\n };\n\n const compose: Compose =\n (...components) =>\n (props) => {\n const propsWithoutClass = Object.fromEntries(\n Object.entries(props || {}).filter(\n ([key]) => ![\"class\", \"className\"].includes(key)\n )\n );\n\n return cx(\n components.map((component) => component(propsWithoutClass)),\n props?.class,\n props?.className\n );\n };\n\n return {\n compose,\n cva,\n cx,\n };\n};\n\nexport const { compose, cva, cx } = defineConfig();\n"]}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -42,7 +42,7 @@ export type VariantProps<Component extends (...args: any) => any> = Omit<
|
|
|
42
42
|
|
|
43
43
|
export interface Compose {
|
|
44
44
|
<T extends ReturnType<CVA>[]>(...components: [...T]): (
|
|
45
|
-
props
|
|
45
|
+
props?: (
|
|
46
46
|
| UnionToIntersection<
|
|
47
47
|
{
|
|
48
48
|
[K in keyof T]: VariantProps<T[K]>;
|
|
@@ -121,7 +121,14 @@ export interface CVA {
|
|
|
121
121
|
|
|
122
122
|
export interface DefineConfigOptions {
|
|
123
123
|
hooks?: {
|
|
124
|
+
/**
|
|
125
|
+
* @deprecated please use `onComplete`
|
|
126
|
+
*/
|
|
124
127
|
"cx:done"?: (className: string) => string;
|
|
128
|
+
/**
|
|
129
|
+
* Returns the completed string of concatenated classes/classNames.
|
|
130
|
+
*/
|
|
131
|
+
onComplete?: (className: string) => string;
|
|
125
132
|
};
|
|
126
133
|
}
|
|
127
134
|
|
|
@@ -140,10 +147,15 @@ const falsyToString = <T extends unknown>(value: T) =>
|
|
|
140
147
|
typeof value === "boolean" ? `${value}` : value === 0 ? "0" : value;
|
|
141
148
|
|
|
142
149
|
export const defineConfig: DefineConfig = (options) => {
|
|
143
|
-
const cx: CX = (...inputs) =>
|
|
144
|
-
typeof options?.hooks?.["cx:done"] !== "undefined"
|
|
145
|
-
|
|
146
|
-
|
|
150
|
+
const cx: CX = (...inputs) => {
|
|
151
|
+
if (typeof options?.hooks?.["cx:done"] !== "undefined")
|
|
152
|
+
return options?.hooks["cx:done"](clsx(inputs));
|
|
153
|
+
|
|
154
|
+
if (typeof options?.hooks?.onComplete !== "undefined")
|
|
155
|
+
return options?.hooks.onComplete(clsx(inputs));
|
|
156
|
+
|
|
157
|
+
return clsx(inputs);
|
|
158
|
+
};
|
|
147
159
|
|
|
148
160
|
const cva: CVA = (config) => (props) => {
|
|
149
161
|
if (config?.variants == null)
|