@yaredfall/class-variants 0.1.0 → 0.1.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.
@@ -0,0 +1,2 @@
1
+ import{a as C,b as c,c as m}from"./chunk-BV75ULQK.js";import{clsx as v}from"clsx";var U=(a,x={})=>{let h=x.merge??v,{variants:e,defaultVariant:r,base:k}=a,V=e?C(e):[],l=e?m(e):{},f=r??{},R=e?typeof a.compoundVariants=="function"?a.compoundVariants({variants:e,keys:V,options:l,defaults:f}):a.compoundVariants:void 0;return Object.assign(s=>{let g=e?V.map(t=>{let i=s?.[t],d=r?.[t],o=i?.toString()||d?.toString();return o?e[t][o]:void 0}):void 0,O=R?.reduce((t,{class:i,className:d,...o})=>(c(o).every(([u,n])=>{let _=r?.[u],p=s?.[u];if(typeof n=="object"&&"__token"in n){if(n.__token===S.__token)return p!==void 0;if(n.__token===W.__token)return p===void 0}let y=p??_;return Array.isArray(n)?n.some(P=>y===P):y===n})&&t.push(i,d),t),new Array);return h(k,g,O,s?.class,s?.className)},{keys:V,options:l,defaults:f})},S={__token:"OnlyWhenDefined"},W={__token:"OnlyWhenUndefined"};export{U as a,S as b,W as c};
2
+ //# sourceMappingURL=chunk-3XL4COYB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { ClassValue, clsx } from \"clsx\";\r\nimport { MarkRequired, Prettify, StrictExclude, Opaque } from \"ts-essentials\";\r\nimport { getEntries, getKeys, getVariantsOptions, KeysOf, VariantOptions } from \"./utils\";\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport type VariantProps<CVR extends (args?: any) => string> = Prettify<\r\n Omit<NonNullable<StrictExclude<Parameters<CVR>[0], void>>, \"class\" | \"className\">\r\n>;\r\n\r\ntype ClassProp =\r\n | { class?: ClassValue; className?: never }\r\n | { class?: never; className?: ClassValue };\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport type WithClassProp<T extends Record<string, any>> = T & ClassProp;\r\n\r\ntype BooleanStringToBoolean<T> = T extends \"true\" | \"false\" ? boolean : T;\r\n\r\nexport type CVVariantsSchema = Record<string, Record<string, ClassValue>>;\r\n\r\nexport type CVVariant<V extends CVVariantsSchema> = {\r\n [K in keyof V]?: BooleanStringToBoolean<keyof V[K]>;\r\n};\r\nexport type CVCompoundVariant<V extends CVVariantsSchema> = WithClassProp<{\r\n [K in keyof V]?:\r\n | BooleanStringToBoolean<keyof V[K]>\r\n | BooleanStringToBoolean<keyof V[K]>[]\r\n | CVToken;\r\n}>;\r\n\r\nexport type CVCompoundVariantsSchema<V extends CVVariantsSchema> = CVCompoundVariant<V>[];\r\n\r\nexport interface CVConfig<V extends CVVariantsSchema, R extends keyof V> {\r\n base?: ClassValue;\r\n variants?: V;\r\n compoundVariants?:\r\n | CVCompoundVariantsSchema<V>\r\n | ((arg: {\r\n variants: V;\r\n keys: KeysOf<V>;\r\n options: VariantOptions<V>;\r\n defaults: CVVariant<V>;\r\n }) => CVCompoundVariantsSchema<V>);\r\n defaultVariant?: CVVariant<V>;\r\n requiredProps?: R[];\r\n}\r\nexport interface CVOptions {\r\n merge?: (...args: ClassValue[]) => string;\r\n}\r\n\r\ntype CVReturnProps<V extends CVVariantsSchema, R extends keyof V = never> =\r\n | Prettify<WithClassProp<MarkRequired<CVVariant<V>, R>>>\r\n | ([R] extends [never] ? void : never);\r\nexport interface CVReturn<V extends CVVariantsSchema, R extends keyof V = never> {\r\n (props: CVReturnProps<V, R>): string;\r\n keys: KeysOf<V>;\r\n options: VariantOptions<V>;\r\n defaults: CVVariant<V>;\r\n}\r\n\r\nexport interface CV {\r\n // eslint-disable-next-line @typescript-eslint/prefer-function-type\r\n <V extends CVVariantsSchema, R extends keyof V = never>(\r\n config: CVConfig<V, R>,\r\n cvOptions?: CVOptions,\r\n ): CVReturn<V, R>;\r\n}\r\n\r\nexport const cv: CV = (config, cvOptions = {}) => {\r\n const merge = cvOptions.merge ?? clsx;\r\n\r\n const { variants, defaultVariant, base } = config;\r\n\r\n type ResolvedV = NonNullable<typeof variants>;\r\n\r\n const keys = variants ? getKeys(variants) : [];\r\n const options = variants ? getVariantsOptions(variants) : ({} as VariantOptions<ResolvedV>);\r\n const defaults = defaultVariant ?? ({} as CVVariant<ResolvedV>);\r\n\r\n const compoundVariants = variants\r\n ? typeof config.compoundVariants === \"function\"\r\n ? config.compoundVariants({ variants, keys, options, defaults })\r\n : config.compoundVariants\r\n : undefined;\r\n\r\n const getVariant = <V extends ResolvedV, R extends keyof V = never>(\r\n props: CVReturnProps<V, R>,\r\n ) => {\r\n const variantClassNames = variants\r\n ? keys.map((variant) => {\r\n const variantProp = props?.[variant];\r\n const defaultVariantProp = defaultVariant?.[variant];\r\n\r\n const variantKey = variantProp?.toString() || defaultVariantProp?.toString();\r\n\r\n return variantKey ? variants[variant][variantKey] : undefined;\r\n })\r\n : undefined;\r\n\r\n const compoundVariantClassNames = compoundVariants?.reduce(\r\n (acc, { class: cvClass, className: cvClassName, ...cvConfig }) => {\r\n const shouldApplyCompoundVariant = getEntries(cvConfig).every(\r\n ([cvKey, cvSelector]) => {\r\n const defaultsSelector =\r\n defaultVariant?.[cvKey as keyof typeof defaultVariant];\r\n const propsSelector = props?.[cvKey as keyof typeof props];\r\n\r\n if (typeof cvSelector === \"object\" && \"__token\" in cvSelector) {\r\n if (cvSelector.__token === onlyWhenDefined.__token) {\r\n return propsSelector !== undefined;\r\n } else if (cvSelector.__token === onlyWhenUndefined.__token) {\r\n return propsSelector === undefined;\r\n }\r\n }\r\n\r\n const selector = propsSelector ?? defaultsSelector;\r\n\r\n return Array.isArray(cvSelector)\r\n ? cvSelector.some((cvSelector) => selector === cvSelector)\r\n : selector === cvSelector;\r\n },\r\n );\r\n\r\n if (shouldApplyCompoundVariant) acc.push(cvClass, cvClassName);\r\n return acc;\r\n },\r\n new Array<ClassValue>(),\r\n );\r\n\r\n return merge(\r\n base,\r\n variantClassNames,\r\n compoundVariantClassNames,\r\n props?.class,\r\n props?.className,\r\n );\r\n };\r\n\r\n return Object.assign(getVariant, { keys, options, defaults });\r\n};\r\n\r\ntype OnlyWhenDefined = Opaque<{ __token: string }, \"OnlyWhenDefined\">;\r\ntype OnlyWhenUndefined = Opaque<{ __token: string }, \"OnlyWhenUndefined\">;\r\n\r\ntype CVToken = OnlyWhenDefined | OnlyWhenUndefined;\r\n\r\n/** Apply compound variant only if prop **is** specified */\r\nexport const onlyWhenDefined = { __token: \"OnlyWhenDefined\" } as OnlyWhenDefined;\r\n/** Apply compound variant only if prop **is not** specified */\r\nexport const onlyWhenUndefined = { __token: \"OnlyWhenUndefined\" } as OnlyWhenUndefined;\r\n"],"mappings":"sDAAA,OAAqB,QAAAA,MAAY,OAoE1B,IAAMC,EAAS,CAACC,EAAQC,EAAY,CAAC,IAAM,CAC9C,IAAMC,EAAQD,EAAU,OAASE,EAE3B,CAAE,SAAAC,EAAU,eAAAC,EAAgB,KAAAC,CAAK,EAAIN,EAIrCO,EAAOH,EAAWI,EAAQJ,CAAQ,EAAI,CAAC,EACvCK,EAAUL,EAAWM,EAAmBN,CAAQ,EAAK,CAAC,EACtDO,EAAWN,GAAmB,CAAC,EAE/BO,EAAmBR,EACnB,OAAOJ,EAAO,kBAAqB,WAC/BA,EAAO,iBAAiB,CAAE,SAAAI,EAAU,KAAAG,EAAM,QAAAE,EAAS,SAAAE,CAAS,CAAC,EAC7DX,EAAO,iBACX,OAuDN,OAAO,OAAO,OApDVa,GACC,CACD,IAAMC,EAAoBV,EACpBG,EAAK,IAAKQ,GAAY,CAClB,IAAMC,EAAcH,IAAQE,CAAO,EAC7BE,EAAqBZ,IAAiBU,CAAO,EAE7CG,EAAaF,GAAa,SAAS,GAAKC,GAAoB,SAAS,EAE3E,OAAOC,EAAad,EAASW,CAAO,EAAEG,CAAU,EAAI,MACxD,CAAC,EACD,OAEAC,EAA4BP,GAAkB,OAChD,CAACQ,EAAK,CAAE,MAAOC,EAAS,UAAWC,EAAa,GAAGC,CAAS,KACrBC,EAAWD,CAAQ,EAAE,MACpD,CAAC,CAACE,EAAOC,CAAU,IAAM,CACrB,IAAMC,EACFtB,IAAiBoB,CAAoC,EACnDG,EAAgBf,IAAQY,CAA2B,EAEzD,GAAI,OAAOC,GAAe,UAAY,YAAaA,EAAY,CAC3D,GAAIA,EAAW,UAAYG,EAAgB,QACvC,OAAOD,IAAkB,OACtB,GAAIF,EAAW,UAAYI,EAAkB,QAChD,OAAOF,IAAkB,MAEjC,CAEA,IAAMG,EAAWH,GAAiBD,EAElC,OAAO,MAAM,QAAQD,CAAU,EACzBA,EAAW,KAAMA,GAAeK,IAAaL,CAAU,EACvDK,IAAaL,CACvB,CACJ,GAEgCN,EAAI,KAAKC,EAASC,CAAW,EACtDF,GAEX,IAAI,KACR,EAEA,OAAOlB,EACHI,EACAQ,EACAK,EACAN,GAAO,MACPA,GAAO,SACX,CACJ,EAEiC,CAAE,KAAAN,EAAM,QAAAE,EAAS,SAAAE,CAAS,CAAC,CAChE,EAQakB,EAAkB,CAAE,QAAS,iBAAkB,EAE/CC,EAAoB,CAAE,QAAS,mBAAoB","names":["clsx","cv","config","cvOptions","merge","clsx","variants","defaultVariant","base","keys","getKeys","options","getVariantsOptions","defaults","compoundVariants","props","variantClassNames","variant","variantProp","defaultVariantProp","variantKey","compoundVariantClassNames","acc","cvClass","cvClassName","cvConfig","getEntries","cvKey","cvSelector","defaultsSelector","propsSelector","onlyWhenDefined","onlyWhenUndefined","selector"]}
@@ -0,0 +1,2 @@
1
+ function r(e){return Object.keys(e)}function o(e){return Object.entries(e)}function i(e){return Object.fromEntries(o(e).map(([n,t])=>[n,r(t)]))}function s(e){return Object.fromEntries(e)}export{r as a,o as b,i as c,s as d};
2
+ //# sourceMappingURL=chunk-BV75ULQK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils.ts"],"sourcesContent":["import { DeepReadonly, DeepWritable, Prettify, UnionToIntersection } from \"ts-essentials\";\nimport { CVVariantsSchema } from \".\";\n\nexport type KeysOf<O extends Record<string, unknown>> = (keyof O)[];\nexport function getKeys<O extends Record<string, unknown>>(obj: O) {\n return Object.keys(obj) as KeysOf<O>;\n}\n\nexport type EntriesOf<O extends Record<string, unknown>> = { [K in keyof O]: [K, O[K]] };\nexport function getEntries<O extends Record<string, unknown>>(obj: O) {\n return Object.entries(obj) as EntriesOf<O>[keyof EntriesOf<O>][];\n}\n\nexport type VariantOptions<V extends CVVariantsSchema> = {\n [K in keyof V]: KeysOf<V[K]>;\n};\nexport function getVariantsOptions<V extends CVVariantsSchema>(variants: V) {\n return Object.fromEntries(\n getEntries(variants).map(([cvKey, cvVal]) => [cvKey, getKeys(cvVal)]),\n ) as VariantOptions<V>;\n}\n\ntype Entries = [PropertyKey, unknown][] | DeepReadonly<[PropertyKey, unknown][]>;\ntype UnionFromPairs<TArr extends Entries> =\n DeepWritable<TArr> extends (infer R)[]\n ? R extends [infer key, infer val]\n ? { [prop in key & PropertyKey]: val }\n : never\n : never;\n\ntype MergeIntersectingObjects<O> = { [K in keyof O]: O[K] };\n\nexport function objectFromEntries<E extends Entries>(entries: E) {\n return Object.fromEntries(entries) as Prettify<\n MergeIntersectingObjects<UnionToIntersection<UnionFromPairs<E>>>\n >;\n}\n"],"mappings":"AAIO,SAASA,EAA2CC,EAAQ,CAC/D,OAAO,OAAO,KAAKA,CAAG,CAC1B,CAGO,SAASC,EAA8CD,EAAQ,CAClE,OAAO,OAAO,QAAQA,CAAG,CAC7B,CAKO,SAASE,EAA+CC,EAAa,CACxE,OAAO,OAAO,YACVF,EAAWE,CAAQ,EAAE,IAAI,CAAC,CAACC,EAAOC,CAAK,IAAM,CAACD,EAAOL,EAAQM,CAAK,CAAC,CAAC,CACxE,CACJ,CAYO,SAASC,EAAqCC,EAAY,CAC7D,OAAO,OAAO,YAAYA,CAAO,CAGrC","names":["getKeys","obj","getEntries","getVariantsOptions","variants","cvKey","cvVal","objectFromEntries","entries"]}
@@ -0,0 +1,79 @@
1
+ import { ClassValue } from 'clsx';
2
+ import { Prettify, UnionToIntersection, DeepReadonly, DeepWritable, StrictExclude, MarkRequired, Opaque } from 'ts-essentials';
3
+
4
+ type KeysOf<O extends Record<string, unknown>> = (keyof O)[];
5
+ declare function getKeys<O extends Record<string, unknown>>(obj: O): KeysOf<O>;
6
+ type EntriesOf<O extends Record<string, unknown>> = {
7
+ [K in keyof O]: [K, O[K]];
8
+ };
9
+ declare function getEntries<O extends Record<string, unknown>>(obj: O): EntriesOf<O>[keyof EntriesOf<O>][];
10
+ type VariantOptions<V extends CVVariantsSchema> = {
11
+ [K in keyof V]: KeysOf<V[K]>;
12
+ };
13
+ declare function getVariantsOptions<V extends CVVariantsSchema>(variants: V): VariantOptions<V>;
14
+ type Entries = [PropertyKey, unknown][] | DeepReadonly<[PropertyKey, unknown][]>;
15
+ type UnionFromPairs<TArr extends Entries> = DeepWritable<TArr> extends (infer R)[] ? R extends [infer key, infer val] ? {
16
+ [prop in key & PropertyKey]: val;
17
+ } : never : never;
18
+ type MergeIntersectingObjects<O> = {
19
+ [K in keyof O]: O[K];
20
+ };
21
+ declare function objectFromEntries<E extends Entries>(entries: E): Prettify<MergeIntersectingObjects<UnionToIntersection<UnionFromPairs<E>>>>;
22
+
23
+ type VariantProps<CVR extends (args?: any) => string> = Prettify<Omit<NonNullable<StrictExclude<Parameters<CVR>[0], void>>, "class" | "className">>;
24
+ type ClassProp = {
25
+ class?: ClassValue;
26
+ className?: never;
27
+ } | {
28
+ class?: never;
29
+ className?: ClassValue;
30
+ };
31
+ type WithClassProp<T extends Record<string, any>> = T & ClassProp;
32
+ type BooleanStringToBoolean<T> = T extends "true" | "false" ? boolean : T;
33
+ type CVVariantsSchema = Record<string, Record<string, ClassValue>>;
34
+ type CVVariant<V extends CVVariantsSchema> = {
35
+ [K in keyof V]?: BooleanStringToBoolean<keyof V[K]>;
36
+ };
37
+ type CVCompoundVariant<V extends CVVariantsSchema> = WithClassProp<{
38
+ [K in keyof V]?: BooleanStringToBoolean<keyof V[K]> | BooleanStringToBoolean<keyof V[K]>[] | CVToken;
39
+ }>;
40
+ type CVCompoundVariantsSchema<V extends CVVariantsSchema> = CVCompoundVariant<V>[];
41
+ interface CVConfig<V extends CVVariantsSchema, R extends keyof V> {
42
+ base?: ClassValue;
43
+ variants?: V;
44
+ compoundVariants?: CVCompoundVariantsSchema<V> | ((arg: {
45
+ variants: V;
46
+ keys: KeysOf<V>;
47
+ options: VariantOptions<V>;
48
+ defaults: CVVariant<V>;
49
+ }) => CVCompoundVariantsSchema<V>);
50
+ defaultVariant?: CVVariant<V>;
51
+ requiredProps?: R[];
52
+ }
53
+ interface CVOptions {
54
+ merge?: (...args: ClassValue[]) => string;
55
+ }
56
+ type CVReturnProps<V extends CVVariantsSchema, R extends keyof V = never> = Prettify<WithClassProp<MarkRequired<CVVariant<V>, R>>> | ([R] extends [never] ? void : never);
57
+ interface CVReturn<V extends CVVariantsSchema, R extends keyof V = never> {
58
+ (props: CVReturnProps<V, R>): string;
59
+ keys: KeysOf<V>;
60
+ options: VariantOptions<V>;
61
+ defaults: CVVariant<V>;
62
+ }
63
+ interface CV {
64
+ <V extends CVVariantsSchema, R extends keyof V = never>(config: CVConfig<V, R>, cvOptions?: CVOptions): CVReturn<V, R>;
65
+ }
66
+ declare const cv: CV;
67
+ type OnlyWhenDefined = Opaque<{
68
+ __token: string;
69
+ }, "OnlyWhenDefined">;
70
+ type OnlyWhenUndefined = Opaque<{
71
+ __token: string;
72
+ }, "OnlyWhenUndefined">;
73
+ type CVToken = OnlyWhenDefined | OnlyWhenUndefined;
74
+ /** Apply compound variant only if prop **is** specified */
75
+ declare const onlyWhenDefined: OnlyWhenDefined;
76
+ /** Apply compound variant only if prop **is not** specified */
77
+ declare const onlyWhenUndefined: OnlyWhenUndefined;
78
+
79
+ export { type CVVariantsSchema as C, type EntriesOf as E, type KeysOf as K, type VariantOptions as V, type WithClassProp as W, type CVReturn as a, type CVConfig as b, type CVOptions as c, getEntries as d, getVariantsOptions as e, type VariantProps as f, getKeys as g, type CVVariant as h, type CVCompoundVariant as i, type CVCompoundVariantsSchema as j, type CV as k, cv as l, onlyWhenDefined as m, onlyWhenUndefined as n, objectFromEntries as o };
@@ -0,0 +1,79 @@
1
+ import { ClassValue } from 'clsx';
2
+ import { Prettify, UnionToIntersection, DeepReadonly, DeepWritable, StrictExclude, MarkRequired, Opaque } from 'ts-essentials';
3
+
4
+ type KeysOf<O extends Record<string, unknown>> = (keyof O)[];
5
+ declare function getKeys<O extends Record<string, unknown>>(obj: O): KeysOf<O>;
6
+ type EntriesOf<O extends Record<string, unknown>> = {
7
+ [K in keyof O]: [K, O[K]];
8
+ };
9
+ declare function getEntries<O extends Record<string, unknown>>(obj: O): EntriesOf<O>[keyof EntriesOf<O>][];
10
+ type VariantOptions<V extends CVVariantsSchema> = {
11
+ [K in keyof V]: KeysOf<V[K]>;
12
+ };
13
+ declare function getVariantsOptions<V extends CVVariantsSchema>(variants: V): VariantOptions<V>;
14
+ type Entries = [PropertyKey, unknown][] | DeepReadonly<[PropertyKey, unknown][]>;
15
+ type UnionFromPairs<TArr extends Entries> = DeepWritable<TArr> extends (infer R)[] ? R extends [infer key, infer val] ? {
16
+ [prop in key & PropertyKey]: val;
17
+ } : never : never;
18
+ type MergeIntersectingObjects<O> = {
19
+ [K in keyof O]: O[K];
20
+ };
21
+ declare function objectFromEntries<E extends Entries>(entries: E): Prettify<MergeIntersectingObjects<UnionToIntersection<UnionFromPairs<E>>>>;
22
+
23
+ type VariantProps<CVR extends (args?: any) => string> = Prettify<Omit<NonNullable<StrictExclude<Parameters<CVR>[0], void>>, "class" | "className">>;
24
+ type ClassProp = {
25
+ class?: ClassValue;
26
+ className?: never;
27
+ } | {
28
+ class?: never;
29
+ className?: ClassValue;
30
+ };
31
+ type WithClassProp<T extends Record<string, any>> = T & ClassProp;
32
+ type BooleanStringToBoolean<T> = T extends "true" | "false" ? boolean : T;
33
+ type CVVariantsSchema = Record<string, Record<string, ClassValue>>;
34
+ type CVVariant<V extends CVVariantsSchema> = {
35
+ [K in keyof V]?: BooleanStringToBoolean<keyof V[K]>;
36
+ };
37
+ type CVCompoundVariant<V extends CVVariantsSchema> = WithClassProp<{
38
+ [K in keyof V]?: BooleanStringToBoolean<keyof V[K]> | BooleanStringToBoolean<keyof V[K]>[] | CVToken;
39
+ }>;
40
+ type CVCompoundVariantsSchema<V extends CVVariantsSchema> = CVCompoundVariant<V>[];
41
+ interface CVConfig<V extends CVVariantsSchema, R extends keyof V> {
42
+ base?: ClassValue;
43
+ variants?: V;
44
+ compoundVariants?: CVCompoundVariantsSchema<V> | ((arg: {
45
+ variants: V;
46
+ keys: KeysOf<V>;
47
+ options: VariantOptions<V>;
48
+ defaults: CVVariant<V>;
49
+ }) => CVCompoundVariantsSchema<V>);
50
+ defaultVariant?: CVVariant<V>;
51
+ requiredProps?: R[];
52
+ }
53
+ interface CVOptions {
54
+ merge?: (...args: ClassValue[]) => string;
55
+ }
56
+ type CVReturnProps<V extends CVVariantsSchema, R extends keyof V = never> = Prettify<WithClassProp<MarkRequired<CVVariant<V>, R>>> | ([R] extends [never] ? void : never);
57
+ interface CVReturn<V extends CVVariantsSchema, R extends keyof V = never> {
58
+ (props: CVReturnProps<V, R>): string;
59
+ keys: KeysOf<V>;
60
+ options: VariantOptions<V>;
61
+ defaults: CVVariant<V>;
62
+ }
63
+ interface CV {
64
+ <V extends CVVariantsSchema, R extends keyof V = never>(config: CVConfig<V, R>, cvOptions?: CVOptions): CVReturn<V, R>;
65
+ }
66
+ declare const cv: CV;
67
+ type OnlyWhenDefined = Opaque<{
68
+ __token: string;
69
+ }, "OnlyWhenDefined">;
70
+ type OnlyWhenUndefined = Opaque<{
71
+ __token: string;
72
+ }, "OnlyWhenUndefined">;
73
+ type CVToken = OnlyWhenDefined | OnlyWhenUndefined;
74
+ /** Apply compound variant only if prop **is** specified */
75
+ declare const onlyWhenDefined: OnlyWhenDefined;
76
+ /** Apply compound variant only if prop **is not** specified */
77
+ declare const onlyWhenUndefined: OnlyWhenUndefined;
78
+
79
+ export { type CVVariantsSchema as C, type EntriesOf as E, type KeysOf as K, type VariantOptions as V, type WithClassProp as W, type CVReturn as a, type CVConfig as b, type CVOptions as c, getEntries as d, getVariantsOptions as e, type VariantProps as f, getKeys as g, type CVVariant as h, type CVCompoundVariant as i, type CVCompoundVariantsSchema as j, type CV as k, cv as l, onlyWhenDefined as m, onlyWhenUndefined as n, objectFromEntries as o };
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/utils.ts"],"sourcesContent":["import { ClassValue, clsx } from \"clsx\";\r\nimport { MarkRequired, Prettify, StrictExclude, Opaque } from \"ts-essentials\";\r\nimport { getEntries, getKeys, getVariantsOptions, KeysOf, VariantOptions } from \"./utils\";\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport type VariantProps<CVR extends (args?: any) => string> = Prettify<\r\n Omit<NonNullable<StrictExclude<Parameters<CVR>[0], void>>, \"class\" | \"className\">\r\n>;\r\n\r\ntype ClassProp =\r\n | { class?: ClassValue; className?: never }\r\n | { class?: never; className?: ClassValue };\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport type WithClassProp<T extends Record<string, any>> = T & ClassProp;\r\n\r\ntype BooleanStringToBoolean<T> = T extends \"true\" | \"false\" ? boolean : T;\r\n\r\nexport type CVVariantsSchema = Record<string, Record<string, ClassValue>>;\r\n\r\nexport type CVVariant<V extends CVVariantsSchema> = {\r\n [K in keyof V]?: BooleanStringToBoolean<keyof V[K]>;\r\n};\r\nexport type CVCompoundVariant<V extends CVVariantsSchema> = WithClassProp<{\r\n [K in keyof V]?:\r\n | BooleanStringToBoolean<keyof V[K]>\r\n | BooleanStringToBoolean<keyof V[K]>[]\r\n | CVToken;\r\n}>;\r\n\r\nexport type CVCompoundVariantsSchema<V extends CVVariantsSchema> = CVCompoundVariant<V>[];\r\n\r\nexport interface CVConfig<V extends CVVariantsSchema, R extends keyof V> {\r\n base?: ClassValue;\r\n variants?: V;\r\n compoundVariants?:\r\n | CVCompoundVariantsSchema<V>\r\n | ((arg: {\r\n variants: V;\r\n keys: KeysOf<V>;\r\n options: VariantOptions<V>;\r\n defaults: CVVariant<V>;\r\n }) => CVCompoundVariantsSchema<V>);\r\n defaultVariant?: CVVariant<V>;\r\n requiredProps?: R[];\r\n}\r\nexport interface CVOptions {\r\n merge?: (...args: ClassValue[]) => string;\r\n}\r\n\r\ntype CVReturnProps<V extends CVVariantsSchema, R extends keyof V = never> =\r\n | Prettify<WithClassProp<MarkRequired<CVVariant<V>, R>>>\r\n | ([R] extends [never] ? void : never);\r\nexport interface CVReturn<V extends CVVariantsSchema, R extends keyof V = never> {\r\n (props: CVReturnProps<V, R>): string;\r\n keys: KeysOf<V>;\r\n options: VariantOptions<V>;\r\n defaults: CVVariant<V>;\r\n}\r\n\r\nexport interface CV {\r\n // eslint-disable-next-line @typescript-eslint/prefer-function-type\r\n <V extends CVVariantsSchema, R extends keyof V = never>(\r\n config: CVConfig<V, R>,\r\n cvOptions?: CVOptions,\r\n ): CVReturn<V, R>;\r\n}\r\n\r\nexport const cv: CV = (config, cvOptions = {}) => {\r\n const merge = cvOptions.merge ?? clsx;\r\n\r\n const { variants, defaultVariant, base } = config;\r\n\r\n type ResolvedV = NonNullable<typeof variants>;\r\n\r\n const keys = variants ? getKeys(variants) : [];\r\n const options = variants ? getVariantsOptions(variants) : ({} as VariantOptions<ResolvedV>);\r\n const defaults = defaultVariant ?? ({} as CVVariant<ResolvedV>);\r\n\r\n const compoundVariants = variants\r\n ? typeof config.compoundVariants === \"function\"\r\n ? config.compoundVariants({ variants, keys, options, defaults })\r\n : config.compoundVariants\r\n : undefined;\r\n\r\n const getVariant = <V extends ResolvedV, R extends keyof V = never>(\r\n props: CVReturnProps<V, R>,\r\n ) => {\r\n const variantClassNames = variants\r\n ? keys.map((variant) => {\r\n const variantProp = props?.[variant];\r\n const defaultVariantProp = defaultVariant?.[variant];\r\n\r\n const variantKey = variantProp?.toString() || defaultVariantProp?.toString();\r\n\r\n return variantKey ? variants[variant][variantKey] : undefined;\r\n })\r\n : undefined;\r\n\r\n const compoundVariantClassNames = compoundVariants?.reduce(\r\n (acc, { class: cvClass, className: cvClassName, ...cvConfig }) => {\r\n const shouldApplyCompoundVariant = getEntries(cvConfig).every(\r\n ([cvKey, cvSelector]) => {\r\n const defaultsSelector =\r\n defaultVariant?.[cvKey as keyof typeof defaultVariant];\r\n const propsSelector = props?.[cvKey as keyof typeof props];\r\n\r\n if (typeof cvSelector === \"object\" && \"__token\" in cvSelector) {\r\n if (cvSelector.__token === onlyWhenDefined.__token) {\r\n return propsSelector !== undefined;\r\n } else if (cvSelector.__token === onlyWhenUndefined.__token) {\r\n return propsSelector === undefined;\r\n }\r\n }\r\n\r\n const selector = propsSelector ?? defaultsSelector;\r\n\r\n return Array.isArray(cvSelector)\r\n ? cvSelector.some((cvSelector) => selector === cvSelector)\r\n : selector === cvSelector;\r\n },\r\n );\r\n\r\n if (shouldApplyCompoundVariant) acc.push(cvClass, cvClassName);\r\n return acc;\r\n },\r\n new Array<ClassValue>(),\r\n );\r\n\r\n return merge(\r\n base,\r\n variantClassNames,\r\n compoundVariantClassNames,\r\n props?.class,\r\n props?.className,\r\n );\r\n };\r\n\r\n return Object.assign(getVariant, { keys, options, defaults });\r\n};\r\n\r\ntype OnlyWhenDefined = Opaque<{ __token: string }, \"OnlyWhenDefined\">;\r\ntype OnlyWhenUndefined = Opaque<{ __token: string }, \"OnlyWhenUndefined\">;\r\n\r\ntype CVToken = OnlyWhenDefined | OnlyWhenUndefined;\r\n\r\n/** Apply compound variant only if prop **is** specified */\r\nexport const onlyWhenDefined = { __token: \"OnlyWhenDefined\" } as OnlyWhenDefined;\r\n/** Apply compound variant only if prop **is not** specified */\r\nexport const onlyWhenUndefined = { __token: \"OnlyWhenUndefined\" } as OnlyWhenUndefined;\r\n","import { DeepReadonly, DeepWritable, Prettify, UnionToIntersection } from \"ts-essentials\";\nimport { CVVariantsSchema } from \".\";\n\nexport type KeysOf<O extends Record<string, unknown>> = (keyof O)[];\nexport function getKeys<O extends Record<string, unknown>>(obj: O) {\n return Object.keys(obj) as KeysOf<O>;\n}\n\nexport type EntriesOf<O extends Record<string, unknown>> = { [K in keyof O]: [K, O[K]] };\nexport function getEntries<O extends Record<string, unknown>>(obj: O) {\n return Object.entries(obj) as EntriesOf<O>[keyof EntriesOf<O>][];\n}\n\nexport type VariantOptions<V extends CVVariantsSchema> = {\n [K in keyof V]: KeysOf<V[K]>;\n};\nexport function getVariantsOptions<V extends CVVariantsSchema>(variants: V) {\n return Object.fromEntries(\n getEntries(variants).map(([cvKey, cvVal]) => [cvKey, getKeys(cvVal)]),\n ) as VariantOptions<V>;\n}\n\ntype Entries = [PropertyKey, unknown][] | DeepReadonly<[PropertyKey, unknown][]>;\ntype UnionFromPairs<TArr extends Entries> =\n DeepWritable<TArr> extends (infer R)[]\n ? R extends [infer key, infer val]\n ? { [prop in key & PropertyKey]: val }\n : never\n : never;\n\ntype MergeIntersectingObjects<O> = { [K in keyof O]: O[K] };\n\nexport function objectFromEntries<E extends Entries>(entries: E) {\n return Object.fromEntries(entries) as Prettify<\n MergeIntersectingObjects<UnionToIntersection<UnionFromPairs<E>>>\n >;\n}\n"],"mappings":"yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,QAAAE,EAAA,oBAAAC,EAAA,sBAAAC,IAAA,eAAAC,EAAAL,GAAA,IAAAM,EAAiC,gBCI1B,SAASC,EAA2CC,EAAQ,CAC/D,OAAO,OAAO,KAAKA,CAAG,CAC1B,CAGO,SAASC,EAA8CD,EAAQ,CAClE,OAAO,OAAO,QAAQA,CAAG,CAC7B,CAKO,SAASE,EAA+CC,EAAa,CACxE,OAAO,OAAO,YACVF,EAAWE,CAAQ,EAAE,IAAI,CAAC,CAACC,EAAOC,CAAK,IAAM,CAACD,EAAOL,EAAQM,CAAK,CAAC,CAAC,CACxE,CACJ,CDgDO,IAAMC,EAAS,CAACC,EAAQC,EAAY,CAAC,IAAM,CAC9C,IAAMC,EAAQD,EAAU,OAAS,OAE3B,CAAE,SAAAE,EAAU,eAAAC,EAAgB,KAAAC,CAAK,EAAIL,EAIrCM,EAAOH,EAAWI,EAAQJ,CAAQ,EAAI,CAAC,EACvCK,EAAUL,EAAWM,EAAmBN,CAAQ,EAAK,CAAC,EACtDO,EAAWN,GAAmB,CAAC,EAE/BO,EAAmBR,EACnB,OAAOH,EAAO,kBAAqB,WAC/BA,EAAO,iBAAiB,CAAE,SAAAG,EAAU,KAAAG,EAAM,QAAAE,EAAS,SAAAE,CAAS,CAAC,EAC7DV,EAAO,iBACX,OAuDN,OAAO,OAAO,OApDVY,GACC,CACD,IAAMC,EAAoBV,EACpBG,EAAK,IAAKQ,GAAY,CAClB,IAAMC,EAAcH,IAAQE,CAAO,EAC7BE,EAAqBZ,IAAiBU,CAAO,EAE7CG,EAAaF,GAAa,SAAS,GAAKC,GAAoB,SAAS,EAE3E,OAAOC,EAAad,EAASW,CAAO,EAAEG,CAAU,EAAI,MACxD,CAAC,EACD,OAEAC,EAA4BP,GAAkB,OAChD,CAACQ,EAAK,CAAE,MAAOC,EAAS,UAAWC,EAAa,GAAGC,CAAS,KACrBC,EAAWD,CAAQ,EAAE,MACpD,CAAC,CAACE,EAAOC,CAAU,IAAM,CACrB,IAAMC,EACFtB,IAAiBoB,CAAoC,EACnDG,EAAgBf,IAAQY,CAA2B,EAEzD,GAAI,OAAOC,GAAe,UAAY,YAAaA,EAAY,CAC3D,GAAIA,EAAW,UAAYG,EAAgB,QACvC,OAAOD,IAAkB,OACtB,GAAIF,EAAW,UAAYI,EAAkB,QAChD,OAAOF,IAAkB,MAEjC,CAEA,IAAMG,EAAWH,GAAiBD,EAElC,OAAO,MAAM,QAAQD,CAAU,EACzBA,EAAW,KAAMA,GAAeK,IAAaL,CAAU,EACvDK,IAAaL,CACvB,CACJ,GAEgCN,EAAI,KAAKC,EAASC,CAAW,EACtDF,GAEX,IAAI,KACR,EAEA,OAAOjB,EACHG,EACAQ,EACAK,EACAN,GAAO,MACPA,GAAO,SACX,CACJ,EAEiC,CAAE,KAAAN,EAAM,QAAAE,EAAS,SAAAE,CAAS,CAAC,CAChE,EAQakB,EAAkB,CAAE,QAAS,iBAAkB,EAE/CC,EAAoB,CAAE,QAAS,mBAAoB","names":["src_exports","__export","cv","onlyWhenDefined","onlyWhenUndefined","__toCommonJS","import_clsx","getKeys","obj","getEntries","getVariantsOptions","variants","cvKey","cvVal","cv","config","cvOptions","merge","variants","defaultVariant","base","keys","getKeys","options","getVariantsOptions","defaults","compoundVariants","props","variantClassNames","variant","variantProp","defaultVariantProp","variantKey","compoundVariantClassNames","acc","cvClass","cvClassName","cvConfig","getEntries","cvKey","cvSelector","defaultsSelector","propsSelector","onlyWhenDefined","onlyWhenUndefined","selector"]}
@@ -0,0 +1,3 @@
1
+ import 'clsx';
2
+ import 'ts-essentials';
3
+ export { k as CV, i as CVCompoundVariant, j as CVCompoundVariantsSchema, b as CVConfig, c as CVOptions, a as CVReturn, h as CVVariant, C as CVVariantsSchema, f as VariantProps, W as WithClassProp, l as cv, m as onlyWhenDefined, n as onlyWhenUndefined } from './index-DUG5hPfi.cjs';
@@ -0,0 +1,3 @@
1
+ import 'clsx';
2
+ import 'ts-essentials';
3
+ export { k as CV, i as CVCompoundVariant, j as CVCompoundVariantsSchema, b as CVConfig, c as CVOptions, a as CVReturn, h as CVVariant, C as CVVariantsSchema, f as VariantProps, W as WithClassProp, l as cv, m as onlyWhenDefined, n as onlyWhenUndefined } from './index-DUG5hPfi.js';
package/build/index.js ADDED
@@ -0,0 +1,2 @@
1
+ import{a,b,c}from"./chunk-3XL4COYB.js";import"./chunk-BV75ULQK.js";export{a as cv,b as onlyWhenDefined,c as onlyWhenUndefined};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,2 @@
1
+ "use strict";var o=Object.defineProperty;var a=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var y=Object.prototype.hasOwnProperty;var f=(e,n)=>{for(var t in n)o(e,t,{get:n[t],enumerable:!0})},c=(e,n,t,i)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of p(n))!y.call(e,r)&&r!==t&&o(e,r,{get:()=>n[r],enumerable:!(i=a(n,r))||i.enumerable});return e};var x=e=>c(o({},"__esModule",{value:!0}),e);var k={};f(k,{getEntries:()=>O,getKeys:()=>s,getVariantsOptions:()=>d,objectFromEntries:()=>V});module.exports=x(k);function s(e){return Object.keys(e)}function O(e){return Object.entries(e)}function d(e){return Object.fromEntries(O(e).map(([n,t])=>[n,s(t)]))}function V(e){return Object.fromEntries(e)}0&&(module.exports={getEntries,getKeys,getVariantsOptions,objectFromEntries});
2
+ //# sourceMappingURL=utils.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils.ts"],"sourcesContent":["import { DeepReadonly, DeepWritable, Prettify, UnionToIntersection } from \"ts-essentials\";\nimport { CVVariantsSchema } from \".\";\n\nexport type KeysOf<O extends Record<string, unknown>> = (keyof O)[];\nexport function getKeys<O extends Record<string, unknown>>(obj: O) {\n return Object.keys(obj) as KeysOf<O>;\n}\n\nexport type EntriesOf<O extends Record<string, unknown>> = { [K in keyof O]: [K, O[K]] };\nexport function getEntries<O extends Record<string, unknown>>(obj: O) {\n return Object.entries(obj) as EntriesOf<O>[keyof EntriesOf<O>][];\n}\n\nexport type VariantOptions<V extends CVVariantsSchema> = {\n [K in keyof V]: KeysOf<V[K]>;\n};\nexport function getVariantsOptions<V extends CVVariantsSchema>(variants: V) {\n return Object.fromEntries(\n getEntries(variants).map(([cvKey, cvVal]) => [cvKey, getKeys(cvVal)]),\n ) as VariantOptions<V>;\n}\n\ntype Entries = [PropertyKey, unknown][] | DeepReadonly<[PropertyKey, unknown][]>;\ntype UnionFromPairs<TArr extends Entries> =\n DeepWritable<TArr> extends (infer R)[]\n ? R extends [infer key, infer val]\n ? { [prop in key & PropertyKey]: val }\n : never\n : never;\n\ntype MergeIntersectingObjects<O> = { [K in keyof O]: O[K] };\n\nexport function objectFromEntries<E extends Entries>(entries: E) {\n return Object.fromEntries(entries) as Prettify<\n MergeIntersectingObjects<UnionToIntersection<UnionFromPairs<E>>>\n >;\n}\n"],"mappings":"yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,gBAAAE,EAAA,YAAAC,EAAA,uBAAAC,EAAA,sBAAAC,IAAA,eAAAC,EAAAN,GAIO,SAASG,EAA2CI,EAAQ,CAC/D,OAAO,OAAO,KAAKA,CAAG,CAC1B,CAGO,SAASL,EAA8CK,EAAQ,CAClE,OAAO,OAAO,QAAQA,CAAG,CAC7B,CAKO,SAASH,EAA+CI,EAAa,CACxE,OAAO,OAAO,YACVN,EAAWM,CAAQ,EAAE,IAAI,CAAC,CAACC,EAAOC,CAAK,IAAM,CAACD,EAAON,EAAQO,CAAK,CAAC,CAAC,CACxE,CACJ,CAYO,SAASL,EAAqCM,EAAY,CAC7D,OAAO,OAAO,YAAYA,CAAO,CAGrC","names":["utils_exports","__export","getEntries","getKeys","getVariantsOptions","objectFromEntries","__toCommonJS","obj","variants","cvKey","cvVal","entries"]}
@@ -0,0 +1,3 @@
1
+ import 'ts-essentials';
2
+ export { E as EntriesOf, K as KeysOf, V as VariantOptions, d as getEntries, g as getKeys, e as getVariantsOptions, o as objectFromEntries } from './index-DUG5hPfi.cjs';
3
+ import 'clsx';
@@ -0,0 +1,3 @@
1
+ import 'ts-essentials';
2
+ export { E as EntriesOf, K as KeysOf, V as VariantOptions, d as getEntries, g as getKeys, e as getVariantsOptions, o as objectFromEntries } from './index-DUG5hPfi.js';
3
+ import 'clsx';
package/build/utils.js ADDED
@@ -0,0 +1,2 @@
1
+ import{a,b,c,d}from"./chunk-BV75ULQK.js";export{b as getEntries,a as getKeys,c as getVariantsOptions,d as objectFromEntries};
2
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
package/build/vue.cjs ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";var c=Object.defineProperty;var E=Object.getOwnPropertyDescriptor;var T=Object.getOwnPropertyNames;var D=Object.prototype.hasOwnProperty;var N=(e,n)=>{for(var r in n)c(e,r,{get:n[r],enumerable:!0})},j=(e,n,r,t)=>{if(n&&typeof n=="object"||typeof n=="function")for(let s of T(n))!D.call(e,s)&&s!==r&&c(e,s,{get:()=>n[s],enumerable:!(t=E(n,s))||t.enumerable});return e};var U=e=>j(c({},"__esModule",{value:!0}),e);var A={};N(A,{cvWithProps:()=>w,getPropsDeclaration:()=>P});module.exports=U(A);var g=require("clsx");function i(e){return Object.keys(e)}function l(e){return Object.entries(e)}function R(e){return Object.fromEntries(l(e).map(([n,r])=>[n,i(r)]))}function k(e){return Object.fromEntries(e)}var h=(e,n={})=>{let r=n.merge??g.clsx,{variants:t,defaultVariant:s,base:v}=e,d=t?i(t):[],C=t?R(t):{},m=s??{},K=t?typeof e.compoundVariants=="function"?e.compoundVariants({variants:t,keys:d,options:C,defaults:m}):e.compoundVariants:void 0;return Object.assign(V=>{let S=t?d.map(a=>{let f=V?.[a],y=s?.[a],p=f?.toString()||y?.toString();return p?t[a][p]:void 0}):void 0,W=K?.reduce((a,{class:f,className:y,...p})=>(l(p).every(([x,o])=>{let _=s?.[x],u=V?.[x];if(typeof o=="object"&&"__token"in o){if(o.__token===q.__token)return u!==void 0;if(o.__token===B.__token)return u===void 0}let O=u??_;return Array.isArray(o)?o.some(b=>O===b):O===o})&&a.push(f,y),a),new Array);return r(v,S,W,V?.class,V?.className)},{keys:d,options:C,defaults:m})},q={__token:"OnlyWhenDefined"},B={__token:"OnlyWhenUndefined"};function P(e){return typeof e?.variants>"u"?{}:k(i(e.variants).map(n=>[n,{type:String,required:e.requiredProps?.includes(n)}]))}var w=(e,n)=>{let r=h(e,n),t=P(e);return{getClass:r,props:t}};0&&(module.exports={cvWithProps,getPropsDeclaration});
2
+ //# sourceMappingURL=vue.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/vue.ts","../src/index.ts","../src/utils.ts"],"sourcesContent":["import { Prettify } from \"ts-essentials\";\nimport { PropType } from \"vue\";\nimport { CVConfig, CVOptions, CVReturn, CVVariantsSchema, cv } from \".\";\nimport { getKeys, objectFromEntries } from \"./utils\";\n\ntype PropsDeclaration<V extends CVVariantsSchema, R extends keyof V = never> = Prettify<{\n [K in keyof V]: {\n type: PropType<keyof V[K] | (K extends R ? never : undefined)>;\n required: K extends R ? true : false;\n };\n}>;\nexport interface CVWithPropsReturn<V extends CVVariantsSchema, R extends keyof V = never> {\n getClass: CVReturn<V, R>;\n props: PropsDeclaration<NoInfer<V>, NoInfer<R>>;\n}\n\nexport interface CVWithProps {\n // eslint-disable-next-line @typescript-eslint/prefer-function-type\n <V extends CVVariantsSchema, R extends keyof V = never>(\n config: CVConfig<V, R>,\n options?: CVOptions,\n ): CVWithPropsReturn<V, R>;\n}\n\nexport function getPropsDeclaration<V extends CVVariantsSchema, R extends keyof V = never>(\n config: CVConfig<V, R>,\n) {\n if (typeof config?.variants === \"undefined\") {\n return {};\n }\n\n return objectFromEntries(\n getKeys(config.variants).map(\n (key) =>\n [\n key,\n {\n type: String,\n required: config.requiredProps?.includes(key as R),\n },\n ] as const,\n ),\n );\n}\n\nexport const cvWithProps: CVWithProps = ((config, options) => {\n const getClass = cv(config, options);\n const props = getPropsDeclaration(config);\n\n return { getClass, props };\n}) as CVWithProps;\n","import { ClassValue, clsx } from \"clsx\";\r\nimport { MarkRequired, Prettify, StrictExclude, Opaque } from \"ts-essentials\";\r\nimport { getEntries, getKeys, getVariantsOptions, KeysOf, VariantOptions } from \"./utils\";\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport type VariantProps<CVR extends (args?: any) => string> = Prettify<\r\n Omit<NonNullable<StrictExclude<Parameters<CVR>[0], void>>, \"class\" | \"className\">\r\n>;\r\n\r\ntype ClassProp =\r\n | { class?: ClassValue; className?: never }\r\n | { class?: never; className?: ClassValue };\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport type WithClassProp<T extends Record<string, any>> = T & ClassProp;\r\n\r\ntype BooleanStringToBoolean<T> = T extends \"true\" | \"false\" ? boolean : T;\r\n\r\nexport type CVVariantsSchema = Record<string, Record<string, ClassValue>>;\r\n\r\nexport type CVVariant<V extends CVVariantsSchema> = {\r\n [K in keyof V]?: BooleanStringToBoolean<keyof V[K]>;\r\n};\r\nexport type CVCompoundVariant<V extends CVVariantsSchema> = WithClassProp<{\r\n [K in keyof V]?:\r\n | BooleanStringToBoolean<keyof V[K]>\r\n | BooleanStringToBoolean<keyof V[K]>[]\r\n | CVToken;\r\n}>;\r\n\r\nexport type CVCompoundVariantsSchema<V extends CVVariantsSchema> = CVCompoundVariant<V>[];\r\n\r\nexport interface CVConfig<V extends CVVariantsSchema, R extends keyof V> {\r\n base?: ClassValue;\r\n variants?: V;\r\n compoundVariants?:\r\n | CVCompoundVariantsSchema<V>\r\n | ((arg: {\r\n variants: V;\r\n keys: KeysOf<V>;\r\n options: VariantOptions<V>;\r\n defaults: CVVariant<V>;\r\n }) => CVCompoundVariantsSchema<V>);\r\n defaultVariant?: CVVariant<V>;\r\n requiredProps?: R[];\r\n}\r\nexport interface CVOptions {\r\n merge?: (...args: ClassValue[]) => string;\r\n}\r\n\r\ntype CVReturnProps<V extends CVVariantsSchema, R extends keyof V = never> =\r\n | Prettify<WithClassProp<MarkRequired<CVVariant<V>, R>>>\r\n | ([R] extends [never] ? void : never);\r\nexport interface CVReturn<V extends CVVariantsSchema, R extends keyof V = never> {\r\n (props: CVReturnProps<V, R>): string;\r\n keys: KeysOf<V>;\r\n options: VariantOptions<V>;\r\n defaults: CVVariant<V>;\r\n}\r\n\r\nexport interface CV {\r\n // eslint-disable-next-line @typescript-eslint/prefer-function-type\r\n <V extends CVVariantsSchema, R extends keyof V = never>(\r\n config: CVConfig<V, R>,\r\n cvOptions?: CVOptions,\r\n ): CVReturn<V, R>;\r\n}\r\n\r\nexport const cv: CV = (config, cvOptions = {}) => {\r\n const merge = cvOptions.merge ?? clsx;\r\n\r\n const { variants, defaultVariant, base } = config;\r\n\r\n type ResolvedV = NonNullable<typeof variants>;\r\n\r\n const keys = variants ? getKeys(variants) : [];\r\n const options = variants ? getVariantsOptions(variants) : ({} as VariantOptions<ResolvedV>);\r\n const defaults = defaultVariant ?? ({} as CVVariant<ResolvedV>);\r\n\r\n const compoundVariants = variants\r\n ? typeof config.compoundVariants === \"function\"\r\n ? config.compoundVariants({ variants, keys, options, defaults })\r\n : config.compoundVariants\r\n : undefined;\r\n\r\n const getVariant = <V extends ResolvedV, R extends keyof V = never>(\r\n props: CVReturnProps<V, R>,\r\n ) => {\r\n const variantClassNames = variants\r\n ? keys.map((variant) => {\r\n const variantProp = props?.[variant];\r\n const defaultVariantProp = defaultVariant?.[variant];\r\n\r\n const variantKey = variantProp?.toString() || defaultVariantProp?.toString();\r\n\r\n return variantKey ? variants[variant][variantKey] : undefined;\r\n })\r\n : undefined;\r\n\r\n const compoundVariantClassNames = compoundVariants?.reduce(\r\n (acc, { class: cvClass, className: cvClassName, ...cvConfig }) => {\r\n const shouldApplyCompoundVariant = getEntries(cvConfig).every(\r\n ([cvKey, cvSelector]) => {\r\n const defaultsSelector =\r\n defaultVariant?.[cvKey as keyof typeof defaultVariant];\r\n const propsSelector = props?.[cvKey as keyof typeof props];\r\n\r\n if (typeof cvSelector === \"object\" && \"__token\" in cvSelector) {\r\n if (cvSelector.__token === onlyWhenDefined.__token) {\r\n return propsSelector !== undefined;\r\n } else if (cvSelector.__token === onlyWhenUndefined.__token) {\r\n return propsSelector === undefined;\r\n }\r\n }\r\n\r\n const selector = propsSelector ?? defaultsSelector;\r\n\r\n return Array.isArray(cvSelector)\r\n ? cvSelector.some((cvSelector) => selector === cvSelector)\r\n : selector === cvSelector;\r\n },\r\n );\r\n\r\n if (shouldApplyCompoundVariant) acc.push(cvClass, cvClassName);\r\n return acc;\r\n },\r\n new Array<ClassValue>(),\r\n );\r\n\r\n return merge(\r\n base,\r\n variantClassNames,\r\n compoundVariantClassNames,\r\n props?.class,\r\n props?.className,\r\n );\r\n };\r\n\r\n return Object.assign(getVariant, { keys, options, defaults });\r\n};\r\n\r\ntype OnlyWhenDefined = Opaque<{ __token: string }, \"OnlyWhenDefined\">;\r\ntype OnlyWhenUndefined = Opaque<{ __token: string }, \"OnlyWhenUndefined\">;\r\n\r\ntype CVToken = OnlyWhenDefined | OnlyWhenUndefined;\r\n\r\n/** Apply compound variant only if prop **is** specified */\r\nexport const onlyWhenDefined = { __token: \"OnlyWhenDefined\" } as OnlyWhenDefined;\r\n/** Apply compound variant only if prop **is not** specified */\r\nexport const onlyWhenUndefined = { __token: \"OnlyWhenUndefined\" } as OnlyWhenUndefined;\r\n","import { DeepReadonly, DeepWritable, Prettify, UnionToIntersection } from \"ts-essentials\";\nimport { CVVariantsSchema } from \".\";\n\nexport type KeysOf<O extends Record<string, unknown>> = (keyof O)[];\nexport function getKeys<O extends Record<string, unknown>>(obj: O) {\n return Object.keys(obj) as KeysOf<O>;\n}\n\nexport type EntriesOf<O extends Record<string, unknown>> = { [K in keyof O]: [K, O[K]] };\nexport function getEntries<O extends Record<string, unknown>>(obj: O) {\n return Object.entries(obj) as EntriesOf<O>[keyof EntriesOf<O>][];\n}\n\nexport type VariantOptions<V extends CVVariantsSchema> = {\n [K in keyof V]: KeysOf<V[K]>;\n};\nexport function getVariantsOptions<V extends CVVariantsSchema>(variants: V) {\n return Object.fromEntries(\n getEntries(variants).map(([cvKey, cvVal]) => [cvKey, getKeys(cvVal)]),\n ) as VariantOptions<V>;\n}\n\ntype Entries = [PropertyKey, unknown][] | DeepReadonly<[PropertyKey, unknown][]>;\ntype UnionFromPairs<TArr extends Entries> =\n DeepWritable<TArr> extends (infer R)[]\n ? R extends [infer key, infer val]\n ? { [prop in key & PropertyKey]: val }\n : never\n : never;\n\ntype MergeIntersectingObjects<O> = { [K in keyof O]: O[K] };\n\nexport function objectFromEntries<E extends Entries>(entries: E) {\n return Object.fromEntries(entries) as Prettify<\n MergeIntersectingObjects<UnionToIntersection<UnionFromPairs<E>>>\n >;\n}\n"],"mappings":"yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,iBAAAE,EAAA,wBAAAC,IAAA,eAAAC,EAAAJ,GCAA,IAAAK,EAAiC,gBCI1B,SAASC,EAA2CC,EAAQ,CAC/D,OAAO,OAAO,KAAKA,CAAG,CAC1B,CAGO,SAASC,EAA8CD,EAAQ,CAClE,OAAO,OAAO,QAAQA,CAAG,CAC7B,CAKO,SAASE,EAA+CC,EAAa,CACxE,OAAO,OAAO,YACVF,EAAWE,CAAQ,EAAE,IAAI,CAAC,CAACC,EAAOC,CAAK,IAAM,CAACD,EAAOL,EAAQM,CAAK,CAAC,CAAC,CACxE,CACJ,CAYO,SAASC,EAAqCC,EAAY,CAC7D,OAAO,OAAO,YAAYA,CAAO,CAGrC,CDgCO,IAAMC,EAAS,CAACC,EAAQC,EAAY,CAAC,IAAM,CAC9C,IAAMC,EAAQD,EAAU,OAAS,OAE3B,CAAE,SAAAE,EAAU,eAAAC,EAAgB,KAAAC,CAAK,EAAIL,EAIrCM,EAAOH,EAAWI,EAAQJ,CAAQ,EAAI,CAAC,EACvCK,EAAUL,EAAWM,EAAmBN,CAAQ,EAAK,CAAC,EACtDO,EAAWN,GAAmB,CAAC,EAE/BO,EAAmBR,EACnB,OAAOH,EAAO,kBAAqB,WAC/BA,EAAO,iBAAiB,CAAE,SAAAG,EAAU,KAAAG,EAAM,QAAAE,EAAS,SAAAE,CAAS,CAAC,EAC7DV,EAAO,iBACX,OAuDN,OAAO,OAAO,OApDVY,GACC,CACD,IAAMC,EAAoBV,EACpBG,EAAK,IAAKQ,GAAY,CAClB,IAAMC,EAAcH,IAAQE,CAAO,EAC7BE,EAAqBZ,IAAiBU,CAAO,EAE7CG,EAAaF,GAAa,SAAS,GAAKC,GAAoB,SAAS,EAE3E,OAAOC,EAAad,EAASW,CAAO,EAAEG,CAAU,EAAI,MACxD,CAAC,EACD,OAEAC,EAA4BP,GAAkB,OAChD,CAACQ,EAAK,CAAE,MAAOC,EAAS,UAAWC,EAAa,GAAGC,CAAS,KACrBC,EAAWD,CAAQ,EAAE,MACpD,CAAC,CAACE,EAAOC,CAAU,IAAM,CACrB,IAAMC,EACFtB,IAAiBoB,CAAoC,EACnDG,EAAgBf,IAAQY,CAA2B,EAEzD,GAAI,OAAOC,GAAe,UAAY,YAAaA,EAAY,CAC3D,GAAIA,EAAW,UAAYG,EAAgB,QACvC,OAAOD,IAAkB,OACtB,GAAIF,EAAW,UAAYI,EAAkB,QAChD,OAAOF,IAAkB,MAEjC,CAEA,IAAMG,EAAWH,GAAiBD,EAElC,OAAO,MAAM,QAAQD,CAAU,EACzBA,EAAW,KAAMA,GAAeK,IAAaL,CAAU,EACvDK,IAAaL,CACvB,CACJ,GAEgCN,EAAI,KAAKC,EAASC,CAAW,EACtDF,GAEX,IAAI,KACR,EAEA,OAAOjB,EACHG,EACAQ,EACAK,EACAN,GAAO,MACPA,GAAO,SACX,CACJ,EAEiC,CAAE,KAAAN,EAAM,QAAAE,EAAS,SAAAE,CAAS,CAAC,CAChE,EAQakB,EAAkB,CAAE,QAAS,iBAAkB,EAE/CC,EAAoB,CAAE,QAAS,mBAAoB,ED7HzD,SAASE,EACZC,EACF,CACE,OAAI,OAAOA,GAAQ,SAAa,IACrB,CAAC,EAGLC,EACHC,EAAQF,EAAO,QAAQ,EAAE,IACpBG,GACG,CACIA,EACA,CACI,KAAM,OACN,SAAUH,EAAO,eAAe,SAASG,CAAQ,CACrD,CACJ,CACR,CACJ,CACJ,CAEO,IAAMC,EAA4B,CAACJ,EAAQK,IAAY,CAC1D,IAAMC,EAAWC,EAAGP,EAAQK,CAAO,EAC7BG,EAAQT,EAAoBC,CAAM,EAExC,MAAO,CAAE,SAAAM,EAAU,MAAAE,CAAM,CAC7B","names":["vue_exports","__export","cvWithProps","getPropsDeclaration","__toCommonJS","import_clsx","getKeys","obj","getEntries","getVariantsOptions","variants","cvKey","cvVal","objectFromEntries","entries","cv","config","cvOptions","merge","variants","defaultVariant","base","keys","getKeys","options","getVariantsOptions","defaults","compoundVariants","props","variantClassNames","variant","variantProp","defaultVariantProp","variantKey","compoundVariantClassNames","acc","cvClass","cvClassName","cvConfig","getEntries","cvKey","cvSelector","defaultsSelector","propsSelector","onlyWhenDefined","onlyWhenUndefined","selector","getPropsDeclaration","config","objectFromEntries","getKeys","key","cvWithProps","options","getClass","cv","props"]}
@@ -0,0 +1,22 @@
1
+ import { Prettify } from 'ts-essentials';
2
+ import { PropType } from 'vue';
3
+ import { C as CVVariantsSchema, a as CVReturn, b as CVConfig, c as CVOptions } from './index-DUG5hPfi.cjs';
4
+ import 'clsx';
5
+
6
+ type PropsDeclaration<V extends CVVariantsSchema, R extends keyof V = never> = Prettify<{
7
+ [K in keyof V]: {
8
+ type: PropType<keyof V[K] | (K extends R ? never : undefined)>;
9
+ required: K extends R ? true : false;
10
+ };
11
+ }>;
12
+ interface CVWithPropsReturn<V extends CVVariantsSchema, R extends keyof V = never> {
13
+ getClass: CVReturn<V, R>;
14
+ props: PropsDeclaration<NoInfer<V>, NoInfer<R>>;
15
+ }
16
+ interface CVWithProps {
17
+ <V extends CVVariantsSchema, R extends keyof V = never>(config: CVConfig<V, R>, options?: CVOptions): CVWithPropsReturn<V, R>;
18
+ }
19
+ declare function getPropsDeclaration<V extends CVVariantsSchema, R extends keyof V = never>(config: CVConfig<V, R>): {};
20
+ declare const cvWithProps: CVWithProps;
21
+
22
+ export { type CVWithProps, type CVWithPropsReturn, cvWithProps, getPropsDeclaration };
package/build/vue.d.ts ADDED
@@ -0,0 +1,22 @@
1
+ import { Prettify } from 'ts-essentials';
2
+ import { PropType } from 'vue';
3
+ import { C as CVVariantsSchema, a as CVReturn, b as CVConfig, c as CVOptions } from './index-DUG5hPfi.js';
4
+ import 'clsx';
5
+
6
+ type PropsDeclaration<V extends CVVariantsSchema, R extends keyof V = never> = Prettify<{
7
+ [K in keyof V]: {
8
+ type: PropType<keyof V[K] | (K extends R ? never : undefined)>;
9
+ required: K extends R ? true : false;
10
+ };
11
+ }>;
12
+ interface CVWithPropsReturn<V extends CVVariantsSchema, R extends keyof V = never> {
13
+ getClass: CVReturn<V, R>;
14
+ props: PropsDeclaration<NoInfer<V>, NoInfer<R>>;
15
+ }
16
+ interface CVWithProps {
17
+ <V extends CVVariantsSchema, R extends keyof V = never>(config: CVConfig<V, R>, options?: CVOptions): CVWithPropsReturn<V, R>;
18
+ }
19
+ declare function getPropsDeclaration<V extends CVVariantsSchema, R extends keyof V = never>(config: CVConfig<V, R>): {};
20
+ declare const cvWithProps: CVWithProps;
21
+
22
+ export { type CVWithProps, type CVWithPropsReturn, cvWithProps, getPropsDeclaration };
package/build/vue.js ADDED
@@ -0,0 +1,2 @@
1
+ import{a as o}from"./chunk-3XL4COYB.js";import{a as t,d as n}from"./chunk-BV75ULQK.js";function V(e){return typeof e?.variants>"u"?{}:n(t(e.variants).map(r=>[r,{type:String,required:e.requiredProps?.includes(r)}]))}var R=(e,r)=>{let s=o(e,r),i=V(e);return{getClass:s,props:i}};export{R as cvWithProps,V as getPropsDeclaration};
2
+ //# sourceMappingURL=vue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/vue.ts"],"sourcesContent":["import { Prettify } from \"ts-essentials\";\nimport { PropType } from \"vue\";\nimport { CVConfig, CVOptions, CVReturn, CVVariantsSchema, cv } from \".\";\nimport { getKeys, objectFromEntries } from \"./utils\";\n\ntype PropsDeclaration<V extends CVVariantsSchema, R extends keyof V = never> = Prettify<{\n [K in keyof V]: {\n type: PropType<keyof V[K] | (K extends R ? never : undefined)>;\n required: K extends R ? true : false;\n };\n}>;\nexport interface CVWithPropsReturn<V extends CVVariantsSchema, R extends keyof V = never> {\n getClass: CVReturn<V, R>;\n props: PropsDeclaration<NoInfer<V>, NoInfer<R>>;\n}\n\nexport interface CVWithProps {\n // eslint-disable-next-line @typescript-eslint/prefer-function-type\n <V extends CVVariantsSchema, R extends keyof V = never>(\n config: CVConfig<V, R>,\n options?: CVOptions,\n ): CVWithPropsReturn<V, R>;\n}\n\nexport function getPropsDeclaration<V extends CVVariantsSchema, R extends keyof V = never>(\n config: CVConfig<V, R>,\n) {\n if (typeof config?.variants === \"undefined\") {\n return {};\n }\n\n return objectFromEntries(\n getKeys(config.variants).map(\n (key) =>\n [\n key,\n {\n type: String,\n required: config.requiredProps?.includes(key as R),\n },\n ] as const,\n ),\n );\n}\n\nexport const cvWithProps: CVWithProps = ((config, options) => {\n const getClass = cv(config, options);\n const props = getPropsDeclaration(config);\n\n return { getClass, props };\n}) as CVWithProps;\n"],"mappings":"uFAwBO,SAASA,EACZC,EACF,CACE,OAAI,OAAOA,GAAQ,SAAa,IACrB,CAAC,EAGLC,EACHC,EAAQF,EAAO,QAAQ,EAAE,IACpBG,GACG,CACIA,EACA,CACI,KAAM,OACN,SAAUH,EAAO,eAAe,SAASG,CAAQ,CACrD,CACJ,CACR,CACJ,CACJ,CAEO,IAAMC,EAA4B,CAACJ,EAAQK,IAAY,CAC1D,IAAMC,EAAWC,EAAGP,EAAQK,CAAO,EAC7BG,EAAQT,EAAoBC,CAAM,EAExC,MAAO,CAAE,SAAAM,EAAU,MAAAE,CAAM,CAC7B","names":["getPropsDeclaration","config","objectFromEntries","getKeys","key","cvWithProps","options","getClass","cv","props"]}
package/package.json CHANGED
@@ -5,10 +5,10 @@
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
8
- "version": "0.1.0",
8
+ "version": "0.1.1",
9
9
  "type": "module",
10
10
  "files": [
11
- "dist"
11
+ "build"
12
12
  ],
13
13
  "main": "build/index.cjs",
14
14
  "module": "build/index.js",