nestable-tailwind-variants 0.4.2 → 0.4.4
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 +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/merge.d.ts.map +1 -1
- package/dist/merge.js +6 -4
- package/dist/merge.js.map +1 -1
- package/dist/ntv.d.ts +3 -3
- package/dist/ntv.d.ts.map +1 -1
- package/dist/ntv.js +22 -12
- package/dist/ntv.js.map +1 -1
- package/dist/types.d.ts +18 -21
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -3
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { createMergeNtv, mergeNtv, mergeNtvWithOptions } from './merge.js';
|
|
2
2
|
export { createNtv, ntv } from './ntv.js';
|
|
3
|
-
export type { AnyStyleFunction, ClassProp, ClassValue, MergeStyleFunctionProps, NtvOptions, Props,
|
|
3
|
+
export type { AnyStyleFunction, ClassProp, ClassValue, MergeStyleFunctionProps, NtvOptions, Props, Scheme, StyleFunction, TwMergeConfig, ValidateProps, } from './types.js';
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC1C,YAAY,EACV,gBAAgB,EAChB,SAAS,EACT,UAAU,EACV,uBAAuB,EACvB,UAAU,EACV,KAAK,EACL,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC1C,YAAY,EACV,gBAAgB,EAChB,SAAS,EACT,UAAU,EACV,uBAAuB,EACvB,UAAU,EACV,KAAK,EACL,MAAM,EACN,aAAa,EACb,aAAa,EACb,aAAa,GACd,MAAM,YAAY,CAAC"}
|
package/dist/merge.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../src/merge.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,gBAAgB,EAEhB,uBAAuB,EACvB,UAAU,EACV,aAAa,EACd,MAAM,YAAY,CAAC;AAGpB;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,SAAS,gBAAgB,EAAE,EACvE,GAAG,QAAQ,EAAE,CAAC,GACb,CAAC,OAAO,CAAC,EAAE,UAAU,KAAK,aAAa,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../src/merge.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,gBAAgB,EAEhB,uBAAuB,EACvB,UAAU,EACV,aAAa,EACd,MAAM,YAAY,CAAC;AAGpB;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,SAAS,gBAAgB,EAAE,EACvE,GAAG,QAAQ,EAAE,CAAC,GACb,CAAC,OAAO,CAAC,EAAE,UAAU,KAAK,aAAa,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAmBrE;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,SAAS,gBAAgB,EAAE,EAC5D,GAAG,QAAQ,EAAE,CAAC,GACb,aAAa,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAE3C;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,cAAc,CAC5B,cAAc,CAAC,EAAE,UAAU,GAC1B,CAAC,CAAC,SAAS,SAAS,gBAAgB,EAAE,EACvC,GAAG,QAAQ,EAAE,CAAC,KACX,aAAa,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAQ7C"}
|
package/dist/merge.js
CHANGED
|
@@ -13,15 +13,17 @@ import { getCachedTwMerge } from './cache.js';
|
|
|
13
13
|
* ```
|
|
14
14
|
*/
|
|
15
15
|
export function mergeNtvWithOptions(...styleFns) {
|
|
16
|
-
return function withOptions(
|
|
16
|
+
return function withOptions(options = {}) {
|
|
17
|
+
// Determine the class merging strategy
|
|
18
|
+
const { twMerge: usesTwMerge = true, twMergeConfig } = options;
|
|
17
19
|
const mergeClassNames = usesTwMerge
|
|
18
20
|
? twMergeConfig
|
|
19
21
|
? getCachedTwMerge(twMergeConfig)
|
|
20
22
|
: twMerge
|
|
21
23
|
: twJoin;
|
|
22
24
|
return function styleFunction({ class: slotClass, className: slotClassName, ...props } = {}) {
|
|
23
|
-
const
|
|
24
|
-
return mergeClassNames(...
|
|
25
|
+
const resolvedClasses = styleFns.map((fn) => fn(props));
|
|
26
|
+
return mergeClassNames(...resolvedClasses, slotClass, slotClassName);
|
|
25
27
|
};
|
|
26
28
|
};
|
|
27
29
|
}
|
|
@@ -71,7 +73,7 @@ export function mergeNtv(...styleFns) {
|
|
|
71
73
|
* ```
|
|
72
74
|
*/
|
|
73
75
|
export function createMergeNtv(defaultOptions) {
|
|
74
|
-
return function
|
|
76
|
+
return function mergeNtvWithDefaults(...styleFns) {
|
|
75
77
|
return mergeNtvWithOptions(...styleFns)(defaultOptions);
|
|
76
78
|
};
|
|
77
79
|
}
|
package/dist/merge.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge.js","sourceRoot":"","sources":["../src/merge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAQjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,mBAAmB,CACjC,GAAG,QAAW;IAEd,OAAO,SAAS,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"merge.js","sourceRoot":"","sources":["../src/merge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAQjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,mBAAmB,CACjC,GAAG,QAAW;IAEd,OAAO,SAAS,WAAW,CAAC,UAAsB,EAAE;QAClD,uCAAuC;QACvC,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;QAC/D,MAAM,eAAe,GAAG,WAAW;YACjC,CAAC,CAAC,aAAa;gBACb,CAAC,CAAC,gBAAgB,CAAC,aAAa,CAAC;gBACjC,CAAC,CAAC,OAAO;YACX,CAAC,CAAC,MAAM,CAAC;QAEX,OAAO,SAAS,aAAa,CAAC,EAC5B,KAAK,EAAE,SAAS,EAChB,SAAS,EAAE,aAAa,EACxB,GAAG,KAAK,KAC+B,EAAE;YACzC,MAAM,eAAe,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,KAAY,CAAC,CAAC,CAAC;YAC/D,OAAO,eAAe,CAAC,GAAG,eAAe,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;QACvE,CAAyD,CAAC;IAC5D,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,QAAQ,CACtB,GAAG,QAAW;IAEd,OAAO,mBAAmB,CAAC,GAAG,QAAQ,CAAC,EAA0D,CAAC;AACpG,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,cAAc,CAC5B,cAA2B;IAI3B,OAAO,SAAS,oBAAoB,CAClC,GAAG,QAAW;QAEd,OAAO,mBAAmB,CAAC,GAAG,QAAQ,CAAC,CAAC,cAAc,CAErD,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
|
package/dist/ntv.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { NtvOptions, Props, Scheme, StyleFunction } from './types.js';
|
|
1
|
+
import type { NtvOptions, Props, Scheme, StyleFunction, ValidateProps } from './types.js';
|
|
2
2
|
/**
|
|
3
3
|
* Create a nestable tailwind variants style function.
|
|
4
4
|
*
|
|
@@ -23,7 +23,7 @@ import type { NtvOptions, Props, Scheme, StyleFunction } from './types.js';
|
|
|
23
23
|
* button({ variant: 'primary', isDisabled: true }); // 'px-4 py-2 rounded bg-blue-500 text-white opacity-50 cursor-not-allowed'
|
|
24
24
|
* ```
|
|
25
25
|
*/
|
|
26
|
-
export declare function ntv<TProps extends Props>(scheme: Scheme<TProps>, options?: NtvOptions): StyleFunction<TProps>;
|
|
26
|
+
export declare function ntv<TProps extends Props>(scheme: ValidateProps<TProps> extends TProps ? Scheme<TProps> : ValidateProps<TProps>, options?: NtvOptions): StyleFunction<TProps>;
|
|
27
27
|
export declare function ntv(scheme: Scheme & Record<string, unknown>, options?: NtvOptions): StyleFunction<any>;
|
|
28
28
|
/**
|
|
29
29
|
* Create a pre-configured ntv function with fixed options.
|
|
@@ -53,7 +53,7 @@ export declare function ntv(scheme: Scheme & Record<string, unknown>, options?:
|
|
|
53
53
|
* ```
|
|
54
54
|
*/
|
|
55
55
|
export declare function createNtv(defaultOptions?: NtvOptions): {
|
|
56
|
-
<TProps extends Props>(scheme: Scheme<TProps>): StyleFunction<TProps>;
|
|
56
|
+
<TProps extends Props>(scheme: ValidateProps<TProps> extends TProps ? Scheme<TProps> : ValidateProps<TProps>): StyleFunction<TProps>;
|
|
57
57
|
(scheme: Scheme & Record<string, unknown>): StyleFunction<any>;
|
|
58
58
|
};
|
|
59
59
|
//# sourceMappingURL=ntv.d.ts.map
|
package/dist/ntv.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ntv.d.ts","sourceRoot":"","sources":["../src/ntv.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"ntv.d.ts","sourceRoot":"","sources":["../src/ntv.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAGV,UAAU,EACV,KAAK,EACL,MAAM,EACN,aAAa,EACb,aAAa,EACd,MAAM,YAAY,CAAC;AAoEpB;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,GAAG,CAAC,MAAM,SAAS,KAAK,EACtC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,SAAS,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,EACrF,OAAO,CAAC,EAAE,UAAU,GACnB,aAAa,CAAC,MAAM,CAAC,CAAC;AACzB,wBAAgB,GAAG,CACjB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACxC,OAAO,CAAC,EAAE,UAAU,GACnB,aAAa,CAAC,GAAG,CAAC,CAAC;AA4BtB;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,SAAS,CAAC,cAAc,CAAC,EAAE,UAAU,GAAG;IACtD,CAAC,MAAM,SAAS,KAAK,EACnB,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,SAAS,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,GACpF,aAAa,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;CAChE,CAIA"}
|
package/dist/ntv.js
CHANGED
|
@@ -11,44 +11,54 @@ function isPlainObject(value) {
|
|
|
11
11
|
* - Variant matches do NOT suppress $default at their level
|
|
12
12
|
* - Nested levels evaluate their own $default independently
|
|
13
13
|
*/
|
|
14
|
-
function resolveConditions(
|
|
14
|
+
function resolveConditions(scheme, props) {
|
|
15
|
+
const { $base, $default, ...conditions } = scheme;
|
|
15
16
|
const classes = [];
|
|
16
|
-
let
|
|
17
|
+
let hasMatchedBooleanCondition = false;
|
|
17
18
|
function toClassValues(value) {
|
|
18
|
-
|
|
19
|
+
if (isPlainObject(value)) {
|
|
20
|
+
return resolveConditions(value, props);
|
|
21
|
+
}
|
|
22
|
+
return [value];
|
|
19
23
|
}
|
|
20
24
|
for (const [key, value] of Object.entries(conditions)) {
|
|
21
25
|
const propValue = props[key];
|
|
26
|
+
// Validate reserved values
|
|
22
27
|
if (propValue === '$default') {
|
|
23
28
|
throw new Error(`"$default" is reserved for defining fallback styles and cannot be used as a value for "${key}".`);
|
|
24
29
|
}
|
|
25
|
-
//
|
|
26
|
-
if (/^is
|
|
30
|
+
// Handle boolean conditions (isXxx or allowsXxx patterns)
|
|
31
|
+
if (/^(is|allows)[A-Z]/.test(key)) {
|
|
27
32
|
if (propValue) {
|
|
28
|
-
|
|
33
|
+
hasMatchedBooleanCondition = true;
|
|
29
34
|
classes.push(...toClassValues(value));
|
|
30
35
|
}
|
|
31
36
|
continue;
|
|
32
37
|
}
|
|
33
|
-
//
|
|
38
|
+
// Handle variant conditions (nested objects with variant mapping)
|
|
34
39
|
if (isPlainObject(value)) {
|
|
35
|
-
const
|
|
36
|
-
classes.push(...toClassValues(value[
|
|
40
|
+
const selectedVariant = typeof propValue === 'string' && propValue in value ? propValue : '$default';
|
|
41
|
+
classes.push(...toClassValues(value[selectedVariant]));
|
|
37
42
|
}
|
|
38
43
|
}
|
|
39
|
-
if
|
|
44
|
+
// Apply $default if no boolean conditions matched
|
|
45
|
+
if (!hasMatchedBooleanCondition) {
|
|
40
46
|
classes.unshift($default);
|
|
41
47
|
}
|
|
48
|
+
// Always apply $base first
|
|
42
49
|
classes.unshift($base);
|
|
43
50
|
return classes;
|
|
44
51
|
}
|
|
45
|
-
export function ntv(scheme,
|
|
52
|
+
export function ntv(scheme, options = {}) {
|
|
53
|
+
// Validate that reserved properties are not used
|
|
46
54
|
if ('class' in scheme) {
|
|
47
55
|
throw new Error('The "class" property is not allowed in ntv scheme. Use "$base" instead.');
|
|
48
56
|
}
|
|
49
57
|
if ('className' in scheme) {
|
|
50
58
|
throw new Error('The "className" property is not allowed in ntv scheme. Use "$base" instead.');
|
|
51
59
|
}
|
|
60
|
+
// Determine the class merging strategy
|
|
61
|
+
const { twMerge: usesTwMerge = true, twMergeConfig } = options;
|
|
52
62
|
const mergeClassNames = usesTwMerge
|
|
53
63
|
? twMergeConfig
|
|
54
64
|
? getCachedTwMerge(twMergeConfig)
|
|
@@ -87,7 +97,7 @@ export function ntv(scheme, { twMerge: usesTwMerge = true, twMergeConfig } = {})
|
|
|
87
97
|
* ```
|
|
88
98
|
*/
|
|
89
99
|
export function createNtv(defaultOptions) {
|
|
90
|
-
return function
|
|
100
|
+
return function ntvWithDefaults(scheme) {
|
|
91
101
|
return ntv(scheme, defaultOptions);
|
|
92
102
|
};
|
|
93
103
|
}
|
package/dist/ntv.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ntv.js","sourceRoot":"","sources":["../src/ntv.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"ntv.js","sourceRoot":"","sources":["../src/ntv.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { ClassNameValue as ClassValue, extendTailwindMerge } from 'tailwind-merge';
|
|
2
2
|
export type { ClassValue };
|
|
3
|
-
export type
|
|
4
|
-
export type Props = Record<string, PropValue | undefined>;
|
|
3
|
+
export type Props = Record<string, any>;
|
|
5
4
|
export type ClassProp = {
|
|
6
5
|
class?: ClassValue;
|
|
7
6
|
className?: never;
|
|
@@ -13,12 +12,27 @@ type Flatten<T> = {
|
|
|
13
12
|
[K in keyof T]: T[K];
|
|
14
13
|
};
|
|
15
14
|
type RequiredKeys<T> = {
|
|
16
|
-
[K in keyof T]-?:
|
|
15
|
+
[K in keyof T]-?: undefined extends T[K] ? never : K;
|
|
17
16
|
}[keyof T];
|
|
18
17
|
type OptionalKeys<T> = Exclude<keyof T, RequiredKeys<T>>;
|
|
19
18
|
type KeysOfUnion<T> = T extends unknown ? keyof T : never;
|
|
19
|
+
/**
|
|
20
|
+
* Checks if a key is required in at least one member of a union type.
|
|
21
|
+
* Returns `true` if the key is required in any member, `never` otherwise.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```ts
|
|
25
|
+
* // Usage: `true extends IsRequiredInAny<T, K> ? ... : ...`
|
|
26
|
+
* // When K is required in any union member, the result includes `true`,
|
|
27
|
+
* // so `true extends (true | never)` evaluates to true.
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
20
30
|
type IsRequiredInAny<T, K extends PropertyKey> = T extends unknown ? K extends keyof T ? K extends RequiredKeys<T> ? true : never : never : never;
|
|
21
31
|
type ValueFromUnion<T, K extends PropertyKey> = T extends unknown ? K extends keyof T ? Exclude<T[K], undefined> : never : never;
|
|
32
|
+
type InvalidPropKey<T> = {
|
|
33
|
+
[K in keyof T]: NonNullable<T[K]> extends boolean | string ? never : K;
|
|
34
|
+
}[keyof T];
|
|
35
|
+
export type ValidateProps<T, TInvalidKey = InvalidPropKey<T>> = [TInvalidKey] extends [never] ? T : `Error: Property '${TInvalidKey & string}' must be boolean or string`;
|
|
22
36
|
type NestedScheme<TProps extends Props = {}> = {
|
|
23
37
|
$base?: ClassValue;
|
|
24
38
|
$default?: ClassValue | NestedScheme<TProps>;
|
|
@@ -48,15 +62,7 @@ type NormalizeProps<T, TOriginal = T> = T extends unknown ? Flatten<{
|
|
|
48
62
|
} & {
|
|
49
63
|
[K in Exclude<KeysOfUnion<TOriginal>, keyof T>]?: never;
|
|
50
64
|
}> : never;
|
|
51
|
-
/**
|
|
52
|
-
* Checks if a props type has at least one required key.
|
|
53
|
-
*/
|
|
54
65
|
type HasRequiredKey<T> = true extends IsRequiredInAny<T, KeysOfUnion<T>> ? true : false;
|
|
55
|
-
/**
|
|
56
|
-
* Function signature for style functions.
|
|
57
|
-
* If the props have no required keys, the props parameter is optional.
|
|
58
|
-
* Otherwise, the props parameter is required.
|
|
59
|
-
*/
|
|
60
66
|
type StyleFunctionSignature<TProps> = HasRequiredKey<TProps> extends false ? (props?: NormalizeProps<TProps> & ClassProp) => string : (props: NormalizeProps<TProps> & ClassProp) => string;
|
|
61
67
|
/**
|
|
62
68
|
* A style function that generates class names based on props.
|
|
@@ -80,23 +86,14 @@ type MergeProps<T> = Flatten<{
|
|
|
80
86
|
}>;
|
|
81
87
|
/**
|
|
82
88
|
* Applies MergeProps distributively across all combinations of two union types.
|
|
83
|
-
* This ensures that each combination of union members is properly merged.
|
|
84
|
-
*
|
|
85
89
|
* Example: MergeTwoUnions<A | B, C | D> = MergeProps<A | C> | MergeProps<A | D> | MergeProps<B | C> | MergeProps<B | D>
|
|
86
90
|
*/
|
|
87
91
|
type MergeTwoUnions<TFirst, TSecond> = TFirst extends unknown ? TSecond extends unknown ? MergeProps<TFirst | TSecond> : never : never;
|
|
88
92
|
/**
|
|
89
93
|
* Recursively merges a tuple of props types, applying distributive merge at each step.
|
|
90
|
-
*
|
|
91
|
-
*
|
|
92
|
-
* Example: MergeAllProps<[A | B, C, D | E]> produces all combinations:
|
|
93
|
-
* MergeProps<A | C | D> | MergeProps<A | C | E> | MergeProps<B | C | D> | MergeProps<B | C | E>
|
|
94
|
+
* Example: MergeAllProps<[A | B, C, D | E]> produces all combinations.
|
|
94
95
|
*/
|
|
95
96
|
type MergeAllProps<TTuple extends readonly unknown[]> = TTuple extends readonly [] ? unknown : TTuple extends readonly [infer TOnly] ? TOnly : TTuple extends readonly [infer TFirst, infer TSecond, ...infer TRest] ? MergeAllProps<[MergeTwoUnions<TFirst, TSecond>, ...TRest]> : unknown;
|
|
96
|
-
/**
|
|
97
|
-
* Extracts the props type from a style function.
|
|
98
|
-
* Style functions store their props type in the __ntvProps property.
|
|
99
|
-
*/
|
|
100
97
|
type ExtractStyleFunctionProps<T> = T extends {
|
|
101
98
|
readonly __ntvProps?: infer P;
|
|
102
99
|
} ? NonNullable<P> : never;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,IAAI,UAAU,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAExF,YAAY,EAAE,UAAU,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nestable-tailwind-variants",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.4",
|
|
4
4
|
"description": "Tailwind CSS variant library with nestable conditions for compound styling instead of flat compoundVariants.",
|
|
5
5
|
"homepage": "https://github.com/yuheiy/nestable-tailwind-variants#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -47,8 +47,7 @@
|
|
|
47
47
|
}
|
|
48
48
|
},
|
|
49
49
|
"scripts": {
|
|
50
|
-
"build": "tsc -p tsconfig.build.json",
|
|
51
|
-
"clean": "git clean -fx dist/",
|
|
50
|
+
"build": "git clean -fx dist/ && tsc -p tsconfig.build.json",
|
|
52
51
|
"format": "oxfmt",
|
|
53
52
|
"format:check": "oxfmt --check",
|
|
54
53
|
"knip": "knip",
|