clava 0.2.1 → 0.2.2
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/CHANGELOG.md +4 -0
- package/dist/index.js +79 -34
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +63 -49
- package/src/utils.ts +47 -3
package/CHANGELOG.md
CHANGED
package/dist/index.js
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import clsx from "clsx";
|
|
2
2
|
//#region src/utils.ts
|
|
3
3
|
const hasOwn$1 = Object.prototype.hasOwnProperty;
|
|
4
|
+
function isAsciiLetter(code) {
|
|
5
|
+
if (code >= 65 && code <= 90) return true;
|
|
6
|
+
return code >= 97 && code <= 122;
|
|
7
|
+
}
|
|
4
8
|
/**
|
|
5
9
|
* Converts a hyphenated CSS property name to camelCase.
|
|
6
10
|
* @example
|
|
@@ -9,8 +13,28 @@ const hasOwn$1 = Object.prototype.hasOwnProperty;
|
|
|
9
13
|
*/
|
|
10
14
|
function hyphenToCamel(str) {
|
|
11
15
|
if (str.length >= 2 && str.charCodeAt(0) === 45 && str.charCodeAt(1) === 45) return str;
|
|
12
|
-
|
|
13
|
-
|
|
16
|
+
let hyphenIndex = str.indexOf("-");
|
|
17
|
+
if (hyphenIndex === -1) return str;
|
|
18
|
+
let result = "";
|
|
19
|
+
let lastIndex = 0;
|
|
20
|
+
while (hyphenIndex !== -1) {
|
|
21
|
+
result += str.slice(lastIndex, hyphenIndex);
|
|
22
|
+
const nextIndex = hyphenIndex + 1;
|
|
23
|
+
if (nextIndex >= str.length) {
|
|
24
|
+
result += "-";
|
|
25
|
+
lastIndex = nextIndex;
|
|
26
|
+
break;
|
|
27
|
+
}
|
|
28
|
+
if (isAsciiLetter(str.charCodeAt(nextIndex))) {
|
|
29
|
+
result += str[nextIndex].toUpperCase();
|
|
30
|
+
lastIndex = nextIndex + 1;
|
|
31
|
+
} else {
|
|
32
|
+
result += "-";
|
|
33
|
+
lastIndex = nextIndex;
|
|
34
|
+
}
|
|
35
|
+
hyphenIndex = str.indexOf("-", lastIndex);
|
|
36
|
+
}
|
|
37
|
+
return result + str.slice(lastIndex);
|
|
14
38
|
}
|
|
15
39
|
/**
|
|
16
40
|
* Converts a camelCase CSS property name to hyphenated form.
|
|
@@ -20,7 +44,18 @@ function hyphenToCamel(str) {
|
|
|
20
44
|
*/
|
|
21
45
|
function camelToHyphen(str) {
|
|
22
46
|
if (str.length >= 2 && str.charCodeAt(0) === 45 && str.charCodeAt(1) === 45) return str;
|
|
23
|
-
|
|
47
|
+
let result = "";
|
|
48
|
+
let lastIndex = 0;
|
|
49
|
+
for (let i = 0; i < str.length; i++) {
|
|
50
|
+
const code = str.charCodeAt(i);
|
|
51
|
+
if (code < 65 || code > 90) continue;
|
|
52
|
+
result += str.slice(lastIndex, i);
|
|
53
|
+
result += "-";
|
|
54
|
+
result += str[i].toLowerCase();
|
|
55
|
+
lastIndex = i + 1;
|
|
56
|
+
}
|
|
57
|
+
if (lastIndex === 0) return str;
|
|
58
|
+
return result + str.slice(lastIndex);
|
|
24
59
|
}
|
|
25
60
|
/**
|
|
26
61
|
* Parses a length value, adding "px" if it's a number.
|
|
@@ -370,8 +405,7 @@ function splitPropsImpl(selfKeys, selfIsComponent, props, sources) {
|
|
|
370
405
|
results.push(selfResult);
|
|
371
406
|
const effectiveKeyArrays = [selfKeys];
|
|
372
407
|
for (let s = 0; s < sourcesLength; s++) {
|
|
373
|
-
const source = sources[s];
|
|
374
|
-
if (source === void 0) continue;
|
|
408
|
+
const source = normalizeKeySource(sources[s]);
|
|
375
409
|
const sourceResult = {};
|
|
376
410
|
const effectiveKeys = source.isComponent && stylingClaimed ? source.variantKeys : source.keys;
|
|
377
411
|
const effectiveKeysLength = effectiveKeys.length;
|
|
@@ -411,10 +445,7 @@ function splitPropsImpl(selfKeys, selfIsComponent, props, sources) {
|
|
|
411
445
|
*/
|
|
412
446
|
const splitProps = ((props, source1, ...sources) => {
|
|
413
447
|
const normalizedSource1 = normalizeKeySource(source1);
|
|
414
|
-
|
|
415
|
-
const normalizedSources = [];
|
|
416
|
-
for (let i = 0; i < sourcesLength; i++) normalizedSources.push(normalizeKeySource(sources[i]));
|
|
417
|
-
return splitPropsImpl(normalizedSource1.keys, normalizedSource1.isComponent, props, normalizedSources);
|
|
448
|
+
return splitPropsImpl(normalizedSource1.keys, normalizedSource1.isComponent, props, sources);
|
|
418
449
|
});
|
|
419
450
|
function buildPrebuiltVariant(variantDef) {
|
|
420
451
|
if (!isRecordObject(variantDef)) return {
|
|
@@ -499,7 +530,8 @@ function create({ transformClass = (className) => className } = {}) {
|
|
|
499
530
|
const disabledVariantKeys = collectDisabledVariantKeys(config);
|
|
500
531
|
const disabledVariantValues = collectDisabledVariantValues(config);
|
|
501
532
|
const hasDisabledVariantKeys = disabledVariantKeys.size > 0;
|
|
502
|
-
const
|
|
533
|
+
const disabledVariantValueKeys = Object.keys(disabledVariantValues);
|
|
534
|
+
const hasDisabledVariantValues = disabledVariantValueKeys.length > 0;
|
|
503
535
|
const hasAnyDisabled = hasDisabledVariantKeys || hasDisabledVariantValues;
|
|
504
536
|
const inputPropsKeys = [
|
|
505
537
|
"class",
|
|
@@ -597,6 +629,7 @@ function create({ transformClass = (className) => className } = {}) {
|
|
|
597
629
|
if (v === void 0) continue;
|
|
598
630
|
defaults[k] = v;
|
|
599
631
|
}
|
|
632
|
+
if (!hasAnyDisabled) return defaults;
|
|
600
633
|
const result = {};
|
|
601
634
|
filterDisabledInto(defaults, result);
|
|
602
635
|
return result;
|
|
@@ -620,18 +653,23 @@ function create({ transformClass = (className) => className } = {}) {
|
|
|
620
653
|
const result = computed({
|
|
621
654
|
variants: resolvedVariants,
|
|
622
655
|
setVariants: (newVariants) => {
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
656
|
+
if (!hasAnyDisabled) Object.assign(updatedVariants, newVariants);
|
|
657
|
+
else {
|
|
658
|
+
const filtered = {};
|
|
659
|
+
filterDisabledInto(newVariants, filtered);
|
|
660
|
+
Object.assign(updatedVariants, filtered);
|
|
661
|
+
}
|
|
626
662
|
},
|
|
627
663
|
setDefaultVariants: (newDefaults) => {
|
|
628
664
|
for (const key in newDefaults) {
|
|
629
665
|
if (!hasOwn.call(newDefaults, key)) continue;
|
|
630
666
|
if (variantProps[key] !== void 0) continue;
|
|
631
|
-
if (disabledVariantKeys.has(key)) continue;
|
|
632
667
|
const value = newDefaults[key];
|
|
633
|
-
|
|
634
|
-
|
|
668
|
+
if (hasAnyDisabled) {
|
|
669
|
+
if (disabledVariantKeys.has(key)) continue;
|
|
670
|
+
const valueKey = getVariantValueKey(value);
|
|
671
|
+
if (valueKey != null && disabledVariantValues[key]?.has(valueKey)) continue;
|
|
672
|
+
}
|
|
635
673
|
updatedVariants[key] = value;
|
|
636
674
|
}
|
|
637
675
|
},
|
|
@@ -651,13 +689,15 @@ function create({ transformClass = (className) => className } = {}) {
|
|
|
651
689
|
assign(cStyle, r.style);
|
|
652
690
|
}
|
|
653
691
|
}
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
692
|
+
if (hasAnyDisabled) {
|
|
693
|
+
const filteredUpdated = {};
|
|
694
|
+
filterDisabledInto(updatedVariants, filteredUpdated);
|
|
695
|
+
resolvedVariants = filteredUpdated;
|
|
696
|
+
} else resolvedVariants = updatedVariants;
|
|
657
697
|
computedClassesArr = cClasses;
|
|
658
698
|
computedStyleObj = cStyle;
|
|
659
699
|
}
|
|
660
|
-
const hasSkipKeys = !!skipStyleKeysIn ||
|
|
700
|
+
const hasSkipKeys = !!skipStyleKeysIn || hasDisabledVariantKeys;
|
|
661
701
|
let currentVariantKeys = null;
|
|
662
702
|
if (hasSkipKeys) {
|
|
663
703
|
currentVariantKeys = /* @__PURE__ */ new Set();
|
|
@@ -674,9 +714,7 @@ function create({ transformClass = (className) => className } = {}) {
|
|
|
674
714
|
}
|
|
675
715
|
let computedVariantValues = null;
|
|
676
716
|
const hasInValues = !!skipStyleVariantValuesIn;
|
|
677
|
-
|
|
678
|
-
const hasDisabledValues = disabledValuesKeys.length > 0;
|
|
679
|
-
if (hasExtend && (hasInValues || hasDisabledValues)) {
|
|
717
|
+
if (hasExtend && (hasInValues || hasDisabledVariantValues)) {
|
|
680
718
|
computedVariantValues = {};
|
|
681
719
|
if (hasInValues) for (const k in skipStyleVariantValuesIn) {
|
|
682
720
|
if (!hasOwn.call(skipStyleVariantValuesIn, k)) continue;
|
|
@@ -684,8 +722,8 @@ function create({ transformClass = (className) => className } = {}) {
|
|
|
684
722
|
for (const v of skipStyleVariantValuesIn[k]) set.add(v);
|
|
685
723
|
computedVariantValues[k] = set;
|
|
686
724
|
}
|
|
687
|
-
for (let i = 0; i <
|
|
688
|
-
const k =
|
|
725
|
+
for (let i = 0; i < disabledVariantValueKeys.length; i++) {
|
|
726
|
+
const k = disabledVariantValueKeys[i];
|
|
689
727
|
let bucket = computedVariantValues[k];
|
|
690
728
|
if (!bucket) {
|
|
691
729
|
bucket = /* @__PURE__ */ new Set();
|
|
@@ -792,27 +830,34 @@ function create({ transformClass = (className) => className } = {}) {
|
|
|
792
830
|
computed({
|
|
793
831
|
variants: resolvedVariants,
|
|
794
832
|
setVariants: (newVariants) => {
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
833
|
+
if (!hasAnyDisabled) Object.assign(updatedVariants, newVariants);
|
|
834
|
+
else {
|
|
835
|
+
const filtered = {};
|
|
836
|
+
filterDisabledInto(newVariants, filtered);
|
|
837
|
+
Object.assign(updatedVariants, filtered);
|
|
838
|
+
}
|
|
798
839
|
},
|
|
799
840
|
setDefaultVariants: (newDefaults) => {
|
|
800
841
|
for (const key in newDefaults) {
|
|
801
842
|
if (!hasOwn.call(newDefaults, key)) continue;
|
|
802
843
|
if (variantProps[key] !== void 0) continue;
|
|
803
|
-
if (disabledVariantKeys.has(key)) continue;
|
|
804
844
|
const value = newDefaults[key];
|
|
805
|
-
|
|
806
|
-
|
|
845
|
+
if (hasAnyDisabled) {
|
|
846
|
+
if (disabledVariantKeys.has(key)) continue;
|
|
847
|
+
const valueKey = getVariantValueKey(value);
|
|
848
|
+
if (valueKey != null && disabledVariantValues[key]?.has(valueKey)) continue;
|
|
849
|
+
}
|
|
807
850
|
updatedVariants[key] = value;
|
|
808
851
|
}
|
|
809
852
|
},
|
|
810
853
|
addClass: () => {},
|
|
811
854
|
addStyle: () => {}
|
|
812
855
|
});
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
856
|
+
if (hasAnyDisabled) {
|
|
857
|
+
const filteredUpdated = {};
|
|
858
|
+
filterDisabledInto(updatedVariants, filteredUpdated);
|
|
859
|
+
resolvedVariants = filteredUpdated;
|
|
860
|
+
} else resolvedVariants = updatedVariants;
|
|
816
861
|
}
|
|
817
862
|
return resolvedVariants;
|
|
818
863
|
};
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["hasOwn"],"sources":["../src/utils.ts","../src/index.ts"],"sourcesContent":["import type * as CSS from \"csstype\";\nimport type {\n HTMLCSSProperties,\n JSXCSSProperties,\n StyleValue,\n} from \"./types.ts\";\n\nexport const MODES = [\"jsx\", \"html\", \"htmlObj\"] as const;\nexport type Mode = (typeof MODES)[number];\n\n// eslint-disable-next-line @typescript-eslint/unbound-method\nconst hasOwn = Object.prototype.hasOwnProperty;\n\n/**\n * Returns the appropriate class property name based on the mode.\n * @example\n * getClassPropertyName(\"jsx\") // \"className\"\n * getClassPropertyName(\"html\") // \"class\"\n */\nexport function getClassPropertyName(mode: Mode) {\n return mode === \"jsx\" ? \"className\" : \"class\";\n}\n\n/**\n * Converts a hyphenated CSS property name to camelCase.\n * @example\n * hyphenToCamel(\"background-color\") // \"backgroundColor\"\n * hyphenToCamel(\"--custom-var\") // \"--custom-var\" (CSS variables are preserved)\n */\nexport function hyphenToCamel(str: string) {\n // CSS custom properties (variables) should not be converted\n if (str.length >= 2 && str.charCodeAt(0) === 45 && str.charCodeAt(1) === 45) {\n return str;\n }\n // Fast path: no hyphen -> return as-is\n if (str.indexOf(\"-\") === -1) return str;\n return str.replace(/-([a-z])/gi, (_, letter) => letter.toUpperCase());\n}\n\n/**\n * Converts a camelCase CSS property name to hyphenated form.\n * @example\n * camelToHyphen(\"backgroundColor\") // \"background-color\"\n * camelToHyphen(\"--customVar\") // \"--customVar\" (CSS variables are preserved)\n */\nexport function camelToHyphen(str: string) {\n // CSS custom properties (variables) should not be converted\n if (str.length >= 2 && str.charCodeAt(0) === 45 && str.charCodeAt(1) === 45) {\n return str;\n }\n return str.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`);\n}\n\n/**\n * Parses a length value, adding \"px\" if it's a number.\n * @example\n * parseLengthValue(16); // \"16px\"\n * parseLengthValue(\"2em\"); // \"2em\"\n */\nexport function parseLengthValue(value: string | number) {\n if (typeof value === \"string\") return value;\n return `${value}px`;\n}\n\n/**\n * Parses a CSS style string into a StyleValue object.\n * @example\n * htmlStyleToStyleValue(\"background-color: red; font-size: 16px;\");\n * // { backgroundColor: \"red\", fontSize: \"16px\" }\n */\nexport function htmlStyleToStyleValue(styleString: string) {\n if (!styleString) return {};\n\n const result: StyleValue = {};\n const len = styleString.length;\n let i = 0;\n while (i < len) {\n // Skip leading whitespace and stray semicolons\n while (i < len) {\n const c = styleString.charCodeAt(i);\n if (c !== 32 && c !== 9 && c !== 10 && c !== 13 && c !== 59) break;\n i++;\n }\n if (i >= len) break;\n // Read property name until ':' or ';'\n const propStart = i;\n while (i < len) {\n const c = styleString.charCodeAt(i);\n if (c === 58 || c === 59) break;\n i++;\n }\n if (i >= len || styleString.charCodeAt(i) === 59) {\n // No colon found - skip this declaration\n if (i < len) i++; // skip ';'\n continue;\n }\n let propEnd = i;\n // Trim trailing whitespace from property name\n while (propEnd > propStart) {\n const c = styleString.charCodeAt(propEnd - 1);\n if (c !== 32 && c !== 9 && c !== 10 && c !== 13) break;\n propEnd--;\n }\n if (propEnd === propStart) {\n // Empty property - skip\n while (i < len && styleString.charCodeAt(i) !== 59) i++;\n if (i < len) i++;\n continue;\n }\n const property = styleString.slice(propStart, propEnd);\n i++; // skip ':'\n // Skip whitespace before value\n while (i < len) {\n const c = styleString.charCodeAt(i);\n if (c !== 32 && c !== 9 && c !== 10 && c !== 13) break;\n i++;\n }\n const valStart = i;\n while (i < len && styleString.charCodeAt(i) !== 59) i++;\n let valEnd = i;\n while (valEnd > valStart) {\n const c = styleString.charCodeAt(valEnd - 1);\n if (c !== 32 && c !== 9 && c !== 10 && c !== 13) break;\n valEnd--;\n }\n if (i < len) i++; // skip ';'\n if (valEnd === valStart) continue;\n const value = styleString.slice(valStart, valEnd);\n // CSS property names and values are dynamic - cast required for index access\n (result as Record<string, string>)[hyphenToCamel(property)] = value;\n }\n\n return result;\n}\n\n/**\n * Converts a hyphenated style object to a camelCase StyleValue object.\n * @example\n * htmlObjStyleToStyleValue({ \"background-color\": \"red\", \"font-size\": \"16px\" });\n * // { backgroundColor: \"red\", fontSize: \"16px\" }\n */\nexport function htmlObjStyleToStyleValue(style: HTMLCSSProperties) {\n const result: StyleValue = {};\n for (const key in style) {\n if (!hasOwn.call(style, key)) continue;\n const value = (style as Record<string, unknown>)[key];\n if (value == null) continue;\n // CSS property names and values are dynamic - cast required for index access\n (result as Record<string, string>)[hyphenToCamel(key)] = parseLengthValue(\n value as string | number,\n );\n }\n return result;\n}\n\n/**\n * Converts a camelCase style object to a StyleValue object.\n * @example\n * jsxStyleToStyleValue({ backgroundColor: \"red\", fontSize: 16 });\n * // { backgroundColor: \"red\", fontSize: \"16px\" }\n */\nexport function jsxStyleToStyleValue(style: JSXCSSProperties) {\n const result: StyleValue = {};\n for (const key in style) {\n if (!hasOwn.call(style, key)) continue;\n const value = (style as Record<string, unknown>)[key];\n if (value == null) continue;\n // CSS property names and values are dynamic - cast required for index access\n (result as Record<string, string>)[key] = parseLengthValue(\n value as string | number,\n );\n }\n return result;\n}\n\n/**\n * Converts a StyleValue object to a CSS style string.\n * @example\n * styleValueToHTMLStyle({ backgroundColor: \"red\", fontSize: \"16px\" });\n * // \"background-color: red; font-size: 16px;\"\n */\nexport function styleValueToHTMLStyle(style: StyleValue): string {\n let result = \"\";\n for (const key in style) {\n if (!hasOwn.call(style, key)) continue;\n const value = (style as Record<string, unknown>)[key];\n if (value == null) continue;\n if (result) result += \"; \";\n result += camelToHyphen(key);\n result += \": \";\n result += value as string | number;\n }\n if (!result) return \"\";\n return `${result};`;\n}\n\n/**\n * Converts a StyleValue object to a hyphenated style object.\n * @example\n * styleValueToHTMLObjStyle({ backgroundColor: \"red\", fontSize: \"16px\" });\n * // { \"background-color\": \"red\", \"font-size\": \"16px\" }\n */\nexport function styleValueToHTMLObjStyle(style: StyleValue) {\n const result: CSS.PropertiesHyphen = {};\n for (const key in style) {\n if (!hasOwn.call(style, key)) continue;\n const value = (style as Record<string, unknown>)[key];\n if (value == null) continue;\n (result as Record<string, unknown>)[camelToHyphen(key)] = value;\n }\n return result;\n}\n\n/**\n * Converts a StyleValue object to a camelCase style object.\n * @example\n * styleValueToJSXStyle({ backgroundColor: \"red\", fontSize: \"16px\" });\n * // { backgroundColor: \"red\", fontSize: \"16px\" }\n */\nexport function styleValueToJSXStyle(style: StyleValue) {\n return style as JSXCSSProperties;\n}\n\n/**\n * Type guard to check if a style object has hyphenated keys.\n * @example\n * isHTMLObjStyle({ \"background-color\": \"red\" }); // true\n * isHTMLObjStyle({ backgroundColor: \"red\" }); // false\n */\nexport function isHTMLObjStyle(\n style: CSS.Properties<any> | CSS.PropertiesHyphen<any>,\n): style is CSS.PropertiesHyphen {\n for (const key in style) {\n if (!hasOwn.call(style, key)) continue;\n // Quick exclusion of CSS custom properties (--foo)\n if (\n key.length >= 2 &&\n key.charCodeAt(0) === 45 &&\n key.charCodeAt(1) === 45\n ) {\n continue;\n }\n if (key.indexOf(\"-\") !== -1) return true;\n }\n return false;\n}\n","import clsx, { type ClassValue as ClsxClassValue } from \"clsx\";\nimport type {\n AnyComponent,\n CVComponent,\n ClassValue,\n ComponentProps,\n ComponentResult,\n Computed,\n ComputedVariants,\n ExtendableVariants,\n HTMLObjProps,\n HTMLProps,\n JSXProps,\n MergeVariants,\n ModalComponent,\n SplitPropsFunction,\n StyleClassProps,\n StyleClassValue,\n StyleValue,\n VariantValues,\n Variants,\n} from \"./types.ts\";\nimport {\n htmlObjStyleToStyleValue,\n htmlStyleToStyleValue,\n isHTMLObjStyle,\n jsxStyleToStyleValue,\n styleValueToHTMLObjStyle,\n styleValueToHTMLStyle,\n styleValueToJSXStyle,\n} from \"./utils.ts\";\n\n// Internal metadata stored on components but hidden from public types\ninterface ComponentMeta {\n baseClass: string;\n staticDefaults: Record<string, unknown>;\n resolveDefaults: (\n childDefaults: Record<string, unknown>,\n userProps?: Record<string, unknown>,\n ) => Record<string, unknown>;\n}\n\nconst META_KEY = \"__meta\";\n\n// Symbol property used to pass skip keys through the props object without\n// polluting the actual variant values. This allows the computed function to\n// see actual variant values while still skipping styling for overridden keys.\nconst SKIP_STYLE_KEYS = Symbol(\"skipStyleKeys\");\nconst SKIP_STYLE_VARIANT_VALUES = Symbol(\"skipStyleVariantValues\");\n\n// eslint-disable-next-line @typescript-eslint/unbound-method\nconst hasOwn = Object.prototype.hasOwnProperty;\n\n// Dynamic property access on function requires cast through unknown\nfunction getComponentMeta(component: AnyComponent): ComponentMeta | undefined {\n return (component as unknown as Record<string, unknown>)[META_KEY] as\n | ComponentMeta\n | undefined;\n}\n\nfunction setComponentMeta(component: AnyComponent, meta: ComponentMeta): void {\n (component as unknown as Record<string, unknown>)[META_KEY] = meta;\n}\n\n/**\n * Mutates target by assigning all properties from source. Avoids object spread\n * overhead in hot paths where we're building up a result object.\n */\nfunction assign<T extends object>(target: T, source: T): void {\n for (const key in source) {\n if (!hasOwn.call(source, key)) continue;\n (target as Record<string, unknown>)[key] = (\n source as Record<string, unknown>\n )[key];\n }\n}\n\nexport type {\n ClassValue,\n StyleValue,\n StyleClassProps,\n StyleClassValue,\n JSXProps,\n HTMLProps,\n HTMLObjProps,\n CVComponent,\n};\n\nexport type VariantProps<T extends Pick<AnyComponent, \"getVariants\">> =\n ReturnType<T[\"getVariants\"]>;\n\n// Variant props expose booleans, but variant object keys are always strings.\ntype VariantKey<T> = T extends boolean ? \"true\" | \"false\" : Extract<T, string>;\n\nexport type Variant<\n T extends Pick<AnyComponent, \"getVariants\">,\n K extends keyof VariantProps<T>,\n> = Record<\n VariantKey<NonNullable<VariantProps<T>[K]>>,\n ClassValue | StyleClassValue\n>;\n\nexport interface CVConfig<\n V extends Variants = {},\n CV extends ComputedVariants = {},\n E extends AnyComponent[] = [],\n> {\n extend?: E;\n class?: ClassValue;\n style?: StyleValue;\n variants?: ExtendableVariants<V, E>;\n computedVariants?: CV;\n defaultVariants?: VariantValues<MergeVariants<V, CV, E>>;\n computed?: Computed<MergeVariants<V, CV, E>>;\n}\n\ninterface CreateParams {\n transformClass?: (className: string) => string;\n}\n\nfunction isRecordObject(value: unknown): value is Record<string, unknown> {\n if (typeof value !== \"object\") return false;\n if (value == null) return false;\n if (Array.isArray(value)) return false;\n return true;\n}\n\n/**\n * Checks if a value is a style-class object (`{ style, class? }`).\n */\nfunction isStyleClassValue(value: unknown): value is StyleClassValue {\n if (!isRecordObject(value)) return false;\n return \"style\" in value || \"class\" in value;\n}\n\n/**\n * Converts any style input (string, JSX object, or HTML object) to a normalized\n * StyleValue.\n */\nfunction normalizeStyle(style: unknown): StyleValue {\n if (typeof style === \"string\") {\n return htmlStyleToStyleValue(style);\n }\n if (typeof style === \"object\" && style != null) {\n if (isHTMLObjStyle(style as Record<string, unknown>)) {\n return htmlObjStyleToStyleValue(style as Record<string, string | number>);\n }\n return jsxStyleToStyleValue(style as Record<string, string | number>);\n }\n return {};\n}\n\n/**\n * Pre-extracts the class and (normalized) style from a variant value once at\n * component creation time. Returns `null` if the value contributes nothing.\n */\ninterface PrebuiltValue {\n class: ClassValue;\n style: StyleValue | null;\n}\n\nfunction extractStyleClassPrebuilt(value: StyleClassValue): PrebuiltValue {\n const styleNorm = normalizeStyle(value.style);\n return {\n class: value.class ?? null,\n style: styleNorm && Object.keys(styleNorm).length > 0 ? styleNorm : null,\n };\n}\n\nfunction extractClassAndStylePrebuilt(value: unknown): PrebuiltValue {\n if (isStyleClassValue(value)) {\n return extractStyleClassPrebuilt(value);\n }\n if (isRecordObject(value)) {\n return { class: null, style: null };\n }\n return { class: value as ClassValue, style: null };\n}\n\n/**\n * Gets all variant keys from a component's config, including extended\n * components.\n */\nfunction collectVariantKeys(\n config: CVConfig<Variants, ComputedVariants, AnyComponent[]>,\n): string[] {\n const keys = new Set<string>();\n\n if (config.extend) {\n for (const ext of config.extend) {\n const extKeys = ext.variantKeys as readonly string[];\n for (let i = 0; i < extKeys.length; i++) {\n keys.add(extKeys[i]);\n }\n }\n }\n\n if (config.variants) {\n for (const key in config.variants) {\n if (!hasOwn.call(config.variants, key)) continue;\n const variant = (config.variants as Record<string, unknown>)[key];\n if (variant === null) {\n keys.delete(key);\n continue;\n }\n keys.add(key);\n }\n }\n\n if (config.computedVariants) {\n for (const key in config.computedVariants) {\n if (!hasOwn.call(config.computedVariants, key)) continue;\n keys.add(key);\n }\n }\n\n return Array.from(keys);\n}\n\nfunction isVariantDisabled(\n config: CVConfig<Variants, ComputedVariants, AnyComponent[]>,\n key: string,\n): boolean {\n return config.variants?.[key] === null;\n}\n\nfunction getVariantValueKey(value: unknown): string | undefined {\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\") return String(value);\n if (typeof value === \"boolean\") return String(value);\n return undefined;\n}\n\nfunction isVariantValueDisabled(\n config: CVConfig<Variants, ComputedVariants, AnyComponent[]>,\n key: string,\n value: unknown,\n): boolean {\n const valueKey = getVariantValueKey(value);\n if (valueKey == null) return false;\n const variant = config.variants?.[key];\n if (!isRecordObject(variant)) return false;\n return variant[valueKey] === null;\n}\n\nfunction collectDisabledVariantKeys(\n config: CVConfig<Variants, ComputedVariants, AnyComponent[]>,\n): Set<string> {\n const keys = new Set<string>();\n if (!config.variants) return keys;\n for (const key in config.variants) {\n if (!hasOwn.call(config.variants, key)) continue;\n if ((config.variants as Record<string, unknown>)[key] === null) {\n keys.add(key);\n }\n }\n return keys;\n}\n\nfunction collectDisabledVariantValues(\n config: CVConfig<Variants, ComputedVariants, AnyComponent[]>,\n): Record<string, Set<string>> {\n const values: Record<string, Set<string>> = {};\n if (!config.variants) return values;\n for (const key in config.variants) {\n if (!hasOwn.call(config.variants, key)) continue;\n const variant = (config.variants as Record<string, unknown>)[key];\n if (!isRecordObject(variant)) continue;\n let bucket: Set<string> | undefined;\n for (const variantValue in variant) {\n if (!hasOwn.call(variant, variantValue)) continue;\n if (variant[variantValue] !== null) continue;\n if (!bucket) {\n bucket = new Set<string>();\n values[key] = bucket;\n }\n bucket.add(variantValue);\n }\n }\n return values;\n}\n\n/**\n * Extracts classes from fullClass that are not in baseClass. Uses string\n * comparison optimization: if fullClass starts with baseClass, just take the\n * suffix.\n */\nfunction extractVariantClasses(fullClass: string, baseClass: string): string {\n if (!fullClass) return \"\";\n if (!baseClass) return fullClass;\n\n // Fast path: fullClass starts with baseClass (common case)\n if (fullClass.startsWith(baseClass)) {\n return fullClass.slice(baseClass.length).trim();\n }\n\n // Slow path: need to diff the class sets\n const baseClassSet = new Set(baseClass.split(\" \").filter(Boolean));\n return fullClass\n .split(\" \")\n .filter((c) => c && !baseClassSet.has(c))\n .join(\" \");\n}\n\ninterface NormalizedSource {\n keys: string[];\n variantKeys: string[];\n isComponent: boolean;\n}\n\nconst EMPTY_SOURCE: NormalizedSource = {\n keys: [],\n variantKeys: [],\n isComponent: false,\n};\n\nfunction normalizeKeySource(source: unknown): NormalizedSource {\n if (Array.isArray(source)) {\n return {\n keys: source as string[],\n variantKeys: source as string[],\n isComponent: false,\n };\n }\n\n if (!source) return EMPTY_SOURCE;\n if (typeof source !== \"object\" && typeof source !== \"function\") {\n return EMPTY_SOURCE;\n }\n if (!(\"keys\" in source)) return EMPTY_SOURCE;\n if (!(\"variantKeys\" in source)) return EMPTY_SOURCE;\n\n // Component-provided arrays are immutable metadata — reference directly.\n const typed = source as {\n keys: string[];\n variantKeys: string[];\n };\n return {\n keys: typed.keys,\n variantKeys: typed.variantKeys,\n isComponent: true,\n };\n}\n\n/**\n * Splits props into multiple groups based on key sources. Only the first\n * component claims styling props (class/className/style). Subsequent components\n * only receive variant props. Arrays always receive their listed keys but don't\n * claim styling props.\n */\nfunction splitPropsImpl(\n selfKeys: string[],\n selfIsComponent: boolean,\n props: Record<string, unknown>,\n sources: NormalizedSource[],\n): Record<string, unknown>[] {\n const sourcesLength = sources.length;\n const results: Record<string, unknown>[] = [];\n let stylingClaimed = selfIsComponent;\n\n const selfResult: Record<string, unknown> = {};\n const selfKeysLength = selfKeys.length;\n for (let i = 0; i < selfKeysLength; i++) {\n const key = selfKeys[i];\n if (key !== undefined && key in props) {\n selfResult[key] = props[key];\n }\n }\n results.push(selfResult);\n\n // Track effective key arrays for the rest computation — for typical inputs\n // a linear scan beats building a Set up-front.\n const effectiveKeyArrays: string[][] = [selfKeys];\n\n for (let s = 0; s < sourcesLength; s++) {\n const source = sources[s];\n if (source === undefined) continue;\n const sourceResult: Record<string, unknown> = {};\n\n const effectiveKeys =\n source.isComponent && stylingClaimed ? source.variantKeys : source.keys;\n\n const effectiveKeysLength = effectiveKeys.length;\n for (let i = 0; i < effectiveKeysLength; i++) {\n const key = effectiveKeys[i];\n if (key !== undefined && key in props) {\n sourceResult[key] = props[key];\n }\n }\n results.push(sourceResult);\n effectiveKeyArrays.push(effectiveKeys);\n\n if (source.isComponent && !stylingClaimed) {\n stylingClaimed = true;\n }\n }\n\n const rest: Record<string, unknown> = {};\n const propKeys = Object.keys(props);\n const propKeysLength = propKeys.length;\n const groupCount = sourcesLength + 1;\n outer: for (let i = 0; i < propKeysLength; i++) {\n const key = propKeys[i];\n if (key === undefined) continue;\n for (let g = 0; g < groupCount; g++) {\n const arr = effectiveKeyArrays[g];\n if (arr === undefined) continue;\n const arrLength = arr.length;\n for (let j = 0; j < arrLength; j++) {\n if (arr[j] === key) continue outer;\n }\n }\n rest[key] = props[key];\n }\n results.push(rest);\n\n return results;\n}\n\n/**\n * Splits props into multiple groups based on key sources. Each source gets its\n * own result object containing all its matching keys. The first component\n * source claims styling props (class/className/style). Subsequent components\n * only receive variant props. Arrays receive their listed keys but don't claim\n * styling props. The last element is always the \"rest\" containing keys not\n * claimed by any source.\n */\nexport const splitProps: SplitPropsFunction = ((\n props: Record<string, unknown>,\n source1: unknown,\n ...sources: unknown[]\n) => {\n const normalizedSource1 = normalizeKeySource(source1);\n const sourcesLength = sources.length;\n const normalizedSources: NormalizedSource[] = [];\n for (let i = 0; i < sourcesLength; i++) {\n normalizedSources.push(normalizeKeySource(sources[i]));\n }\n return splitPropsImpl(\n normalizedSource1.keys,\n normalizedSource1.isComponent,\n props,\n normalizedSources,\n );\n}) as SplitPropsFunction;\n\n/**\n * A pre-built variant. Maps variant value keys (or the literal \"true\"/\"false\"\n * strings for boolean variants) to PrebuiltValue. Includes a \"shorthand\"\n * fallback when the variant is a single class value (treated as `{ true: ... }`).\n */\ninterface PrebuiltVariant {\n // For object variants: map of value -> prebuilt class/style\n values: Record<string, PrebuiltValue> | null;\n // For shorthand variants: the value to use when selectedValue is true\n shorthand: PrebuiltValue | null;\n // Set of value keys that are disabled (value === null in the original variant\n // definition)\n disabledValues: Set<string> | null;\n}\n\nfunction buildPrebuiltVariant(variantDef: unknown): PrebuiltVariant {\n if (!isRecordObject(variantDef)) {\n return {\n values: null,\n shorthand: extractClassAndStylePrebuilt(variantDef),\n disabledValues: null,\n };\n }\n const values: Record<string, PrebuiltValue> = {};\n let disabledValues: Set<string> | null = null;\n for (const key in variantDef) {\n if (!hasOwn.call(variantDef, key)) continue;\n const value = variantDef[key];\n if (value === null) {\n if (!disabledValues) disabledValues = new Set<string>();\n disabledValues.add(key);\n continue;\n }\n values[key] = extractClassAndStylePrebuilt(value);\n }\n return {\n values,\n shorthand: null,\n disabledValues,\n };\n}\n\n/**\n * Creates the resolveDefaults function for a component. This function returns\n * only the variants set via setDefaultVariants in the computed function. Used\n * by child components to get parent's computed defaults.\n */\nfunction createResolveDefaults(\n config: CVConfig<Variants, ComputedVariants, AnyComponent[]>,\n staticDefaults: Record<string, unknown>,\n): ComponentMeta[\"resolveDefaults\"] {\n const computed = config.computed;\n const extend = config.extend;\n return (childDefaults, userProps = {}) => {\n // Merge: parent static < child static < user props\n // This is what parent's computed will see in `variants`\n const resolvedVariants: Record<string, unknown> = {};\n Object.assign(resolvedVariants, staticDefaults);\n for (const key in childDefaults) {\n if (!hasOwn.call(childDefaults, key)) continue;\n const v = childDefaults[key];\n if (v === undefined) continue;\n resolvedVariants[key] = v;\n }\n for (const key in userProps) {\n if (!hasOwn.call(userProps, key)) continue;\n const v = userProps[key];\n if (v === undefined) continue;\n resolvedVariants[key] = v;\n }\n\n // Track which keys are set via setDefaultVariants\n const computedDefaults: Record<string, unknown> = {};\n\n // Propagate to extended components so their computed functions can run\n if (extend) {\n for (const ext of extend) {\n const meta = getComponentMeta(ext);\n if (!meta) continue;\n const extDefaults = meta.resolveDefaults(childDefaults, userProps);\n for (const k in extDefaults) {\n if (hasOwn.call(extDefaults, k)) {\n computedDefaults[k] = extDefaults[k];\n }\n }\n }\n }\n\n if (computed) {\n computed({\n variants: resolvedVariants as VariantValues<Record<string, unknown>>,\n setVariants: () => {},\n setDefaultVariants: (newDefaults) => {\n for (const key in newDefaults) {\n if (!hasOwn.call(newDefaults, key)) continue;\n const value = (newDefaults as Record<string, unknown>)[key];\n if (userProps[key] !== undefined) continue;\n if (isVariantDisabled(config, key)) continue;\n if (isVariantValueDisabled(config, key, value)) continue;\n computedDefaults[key] = value;\n }\n },\n addClass: () => {},\n addStyle: () => {},\n });\n }\n\n return computedDefaults;\n };\n}\n\n/**\n * Creates the cv and cx functions.\n */\nexport function create({\n transformClass = (className) => className,\n}: CreateParams = {}) {\n const cx = (...classes: ClsxClassValue[]) => transformClass(clsx(...classes));\n\n const cv = <\n V extends Variants = {},\n CV extends ComputedVariants = {},\n const E extends AnyComponent[] = [],\n >(\n config: CVConfig<V, CV, E> = {},\n ): CVComponent<V, CV, E> => {\n type MergedVariants = MergeVariants<V, CV, E>;\n\n // ----- Pre-computed at creation time -----\n const variantKeys = collectVariantKeys(config);\n const disabledVariantKeys = collectDisabledVariantKeys(config);\n const disabledVariantValues = collectDisabledVariantValues(config);\n const hasDisabledVariantKeys = disabledVariantKeys.size > 0;\n const hasDisabledVariantValues =\n Object.keys(disabledVariantValues).length > 0;\n const hasAnyDisabled = hasDisabledVariantKeys || hasDisabledVariantValues;\n\n const inputPropsKeys = [\"class\", \"className\", \"style\", ...variantKeys];\n\n const extend = config.extend;\n const hasExtend = !!extend && extend.length > 0;\n const variants = config.variants;\n const computedVariantsCfg = config.computedVariants;\n const computed = config.computed;\n const baseStyle = config.style;\n const baseClass: ClassValue =\n config.class === undefined ? null : (config.class as ClassValue);\n\n // Pre-build variant entries for fast iteration. For each variant key in\n // `variants`, we have a name and a PrebuiltVariant with normalized values.\n const variantEntryNames: string[] = [];\n const variantEntryDefs: PrebuiltVariant[] = [];\n if (variants) {\n for (const name in variants) {\n if (!hasOwn.call(variants, name)) continue;\n const variant = (variants as Record<string, unknown>)[name];\n if (variant === null) continue;\n variantEntryNames.push(name);\n variantEntryDefs.push(buildPrebuiltVariant(variant));\n }\n }\n const variantEntryCount = variantEntryNames.length;\n\n // Pre-built computed-variants entries.\n const computedVariantNames: string[] = [];\n const computedVariantFns: Array<(value: unknown) => unknown> = [];\n if (computedVariantsCfg) {\n for (const name in computedVariantsCfg) {\n if (!hasOwn.call(computedVariantsCfg, name)) continue;\n computedVariantNames.push(name);\n computedVariantFns.push(\n (computedVariantsCfg as Record<string, (value: unknown) => unknown>)[\n name\n ] as (value: unknown) => unknown,\n );\n }\n }\n const computedVariantCount = computedVariantNames.length;\n\n // Pre-compute static defaults. Includes:\n // - extended components' static defaults\n // - implicit boolean defaults (variants with a `false` key default to false)\n // - this config's defaultVariants (overriding the above)\n // Then filtered through disabled-variants.\n const staticDefaults: Record<string, unknown> = {};\n if (extend) {\n for (const ext of extend) {\n const meta = getComponentMeta(ext);\n if (meta) Object.assign(staticDefaults, meta.staticDefaults);\n }\n }\n if (variants) {\n for (const name in variants) {\n if (!hasOwn.call(variants, name)) continue;\n const variantDef = (variants as Record<string, unknown>)[name];\n if (!isRecordObject(variantDef)) continue;\n if (\n hasOwn.call(variantDef, \"false\") &&\n staticDefaults[name] === undefined\n ) {\n staticDefaults[name] = false;\n }\n }\n }\n if (config.defaultVariants) {\n Object.assign(staticDefaults, config.defaultVariants);\n }\n if (hasAnyDisabled) {\n // Filter disabled variants in-place\n for (const key in staticDefaults) {\n if (!hasOwn.call(staticDefaults, key)) continue;\n if (disabledVariantKeys.has(key)) {\n delete staticDefaults[key];\n continue;\n }\n if (hasDisabledVariantValues) {\n const value = staticDefaults[key];\n const valueKey = getVariantValueKey(value);\n if (valueKey != null && disabledVariantValues[key]?.has(valueKey)) {\n delete staticDefaults[key];\n }\n }\n }\n }\n\n // Pre-build extended component info, so we don't have to call\n // `getComponentMeta` per render.\n const extEntries: AnyComponent[] = extend ? (extend as AnyComponent[]) : [];\n const extBaseClassesArr: string[] = [];\n const extMetas: (ComponentMeta | undefined)[] = [];\n if (extend) {\n for (const ext of extend) {\n const meta = getComponentMeta(ext);\n extMetas.push(meta);\n extBaseClassesArr.push(meta?.baseClass ?? \"\");\n }\n }\n const extCount = extEntries.length;\n\n // Inlined \"filter disabled\" - mutates `out` adding only allowed entries.\n // Most components have no disabled variants, in which case we can skip\n // the filter entirely.\n function filterDisabledInto(\n input: Record<string, unknown>,\n out: Record<string, unknown>,\n ): void {\n if (!hasAnyDisabled) {\n for (const key in input) {\n if (hasOwn.call(input, key)) out[key] = input[key];\n }\n return;\n }\n for (const key in input) {\n if (!hasOwn.call(input, key)) continue;\n if (disabledVariantKeys.has(key)) continue;\n const value = input[key];\n if (hasDisabledVariantValues) {\n const valueKey = getVariantValueKey(value);\n if (valueKey != null && disabledVariantValues[key]?.has(valueKey)) {\n continue;\n }\n }\n out[key] = value;\n }\n }\n\n // Pre-create default-variants resolver which is referenced during the hot\n // path through extended components' meta. The closure captures\n // staticDefaults, extend, computed, etc.\n const resolveDefaultsFn = createResolveDefaults(config, staticDefaults);\n\n // Resolve variants: defaults -> computed defaults from extended -> props.\n function resolveVariantsHot(\n propsVariants: Record<string, unknown>,\n ): Record<string, unknown> {\n // Start with static defaults\n const defaults: Record<string, unknown> = {};\n Object.assign(defaults, staticDefaults);\n\n // Apply computed defaults from extended components\n if (hasExtend) {\n for (let i = 0; i < extCount; i++) {\n const meta = extMetas[i];\n if (!meta) continue;\n const extComputed = meta.resolveDefaults(defaults, propsVariants);\n for (const k in extComputed) {\n if (hasOwn.call(extComputed, k)) {\n defaults[k] = extComputed[k];\n }\n }\n }\n }\n\n // Now merge: defaults < propsVariants (filter undefined)\n // Apply propsVariants on top\n for (const k in propsVariants) {\n if (!hasOwn.call(propsVariants, k)) continue;\n const v = propsVariants[k];\n if (v === undefined) continue;\n defaults[k] = v;\n }\n\n // Filter disabled\n const result: Record<string, unknown> = {};\n filterDisabledInto(defaults, result);\n return result;\n }\n\n // Hot path: build a fresh result.\n const computeResult = (\n props: ComponentProps<MergedVariants> = {},\n ): { className: string; style: StyleValue } => {\n // Extract skip style keys from props (set by child's computedVariants)\n const skipStyleKeysIn = (props as Record<symbol, unknown>)[\n SKIP_STYLE_KEYS\n ] as Set<string> | undefined;\n const skipStyleVariantValuesIn = (props as Record<symbol, unknown>)[\n SKIP_STYLE_VARIANT_VALUES\n ] as Record<string, Set<string>> | undefined;\n\n // Extract variant props from input. Also remember the propsVariants for\n // computed-defaults application.\n const variantProps: Record<string, unknown> = {};\n for (let i = 0; i < variantKeys.length; i++) {\n const key = variantKeys[i];\n if (key in props) {\n variantProps[key] = (props as Record<string, unknown>)[key];\n }\n }\n\n // Resolve variants with defaults\n let resolvedVariants = resolveVariantsHot(variantProps);\n\n // Run computed function (may update variants and emit class/style)\n let computedClassesArr: ClassValue[] | null = null;\n let computedStyleObj: StyleValue | null = null;\n\n if (computed) {\n const updatedVariants: Record<string, unknown> = {};\n Object.assign(updatedVariants, resolvedVariants);\n const cClasses: ClassValue[] = [];\n let cStyle: StyleValue | null = null;\n const ctx = {\n variants: resolvedVariants as VariantValues<Record<string, unknown>>,\n setVariants: (\n newVariants: VariantValues<Record<string, unknown>>,\n ) => {\n const filtered: Record<string, unknown> = {};\n filterDisabledInto(\n newVariants as Record<string, unknown>,\n filtered,\n );\n Object.assign(updatedVariants, filtered);\n },\n setDefaultVariants: (\n newDefaults: VariantValues<Record<string, unknown>>,\n ) => {\n for (const key in newDefaults) {\n if (!hasOwn.call(newDefaults, key)) continue;\n if (variantProps[key] !== undefined) continue;\n if (disabledVariantKeys.has(key)) continue;\n const value = (newDefaults as Record<string, unknown>)[key];\n const valueKey = getVariantValueKey(value);\n if (\n valueKey != null &&\n disabledVariantValues[key]?.has(valueKey)\n ) {\n continue;\n }\n updatedVariants[key] = value;\n }\n },\n addClass: (className: ClassValue) => {\n cClasses.push(className);\n },\n addStyle: (newStyle: StyleValue) => {\n if (!cStyle) cStyle = {};\n assign(cStyle, newStyle);\n },\n };\n const result = computed(ctx);\n if (result != null) {\n const r = extractClassAndStylePrebuilt(result);\n if (r.class != null) cClasses.push(r.class);\n if (r.style) {\n if (!cStyle) cStyle = {};\n assign(cStyle, r.style);\n }\n }\n // Apply filterDisabled to updatedVariants\n const filteredUpdated: Record<string, unknown> = {};\n filterDisabledInto(updatedVariants, filteredUpdated);\n resolvedVariants = filteredUpdated;\n computedClassesArr = cClasses;\n computedStyleObj = cStyle;\n }\n\n // Compute skip-style sets for the extended components and current\n // component. Only allocate when needed.\n const hasSkipKeys = !!skipStyleKeysIn || disabledVariantKeys.size > 0;\n let currentVariantKeys: Set<string> | null = null;\n if (hasSkipKeys) {\n currentVariantKeys = new Set<string>();\n if (skipStyleKeysIn) {\n for (const k of skipStyleKeysIn) currentVariantKeys.add(k);\n }\n for (const k of disabledVariantKeys) currentVariantKeys.add(k);\n }\n // computedVariantKeys is currentVariantKeys + computedVariants names\n let computedVariantKeysSet: Set<string> | null = null;\n if (hasExtend) {\n if (currentVariantKeys || computedVariantNames.length > 0) {\n computedVariantKeysSet = new Set<string>();\n if (currentVariantKeys) {\n for (const k of currentVariantKeys) computedVariantKeysSet.add(k);\n }\n for (let i = 0; i < computedVariantNames.length; i++) {\n computedVariantKeysSet.add(computedVariantNames[i]);\n }\n }\n }\n\n // computedVariantValues = mergeDisabledVariantValues(skipIn, disabledValues)\n let computedVariantValues: Record<string, Set<string>> | null = null;\n const hasInValues = !!skipStyleVariantValuesIn;\n const disabledValuesKeys = Object.keys(disabledVariantValues);\n const hasDisabledValues = disabledValuesKeys.length > 0;\n if (hasExtend && (hasInValues || hasDisabledValues)) {\n computedVariantValues = {};\n if (hasInValues) {\n for (const k in skipStyleVariantValuesIn) {\n if (!hasOwn.call(skipStyleVariantValuesIn, k)) continue;\n const set = new Set<string>();\n for (const v of skipStyleVariantValuesIn[k]) {\n set.add(v);\n }\n computedVariantValues[k] = set;\n }\n }\n for (let i = 0; i < disabledValuesKeys.length; i++) {\n const k = disabledValuesKeys[i];\n let bucket = computedVariantValues[k];\n if (!bucket) {\n bucket = new Set<string>();\n computedVariantValues[k] = bucket;\n }\n for (const v of disabledVariantValues[k]) bucket.add(v);\n }\n }\n\n // ----- Build classes/styles in proper order -----\n // 1. Extended base classes & their styles (with skip applied)\n // 2. Current base class & base style\n // 3. Extended variant classes\n // 4. Current variants\n // 5. computed results\n // 6. props.class / props.className\n // 7. props.style\n const allClasses: ClassValue[] = [];\n const allStyle: StyleValue = {};\n\n // Process extended components\n if (hasExtend) {\n const hasComputedVariantKeysSet =\n !!computedVariantKeysSet && computedVariantKeysSet.size > 0;\n const hasComputedVariantValues =\n !!computedVariantValues &&\n Object.keys(computedVariantValues).length > 0;\n const hasSkipForExt =\n hasComputedVariantKeysSet || hasComputedVariantValues;\n\n const extVariantClasses: ClassValue[] = [];\n\n for (let i = 0; i < extCount; i++) {\n const ext = extEntries[i];\n const extBaseClass = extBaseClassesArr[i];\n let propsForExt: Record<string | symbol, unknown>;\n if (hasSkipForExt) {\n propsForExt = {};\n // Copy resolvedVariants\n for (const k in resolvedVariants) {\n if (hasOwn.call(resolvedVariants, k)) {\n propsForExt[k] = resolvedVariants[k];\n }\n }\n if (hasComputedVariantKeysSet) {\n propsForExt[SKIP_STYLE_KEYS] = computedVariantKeysSet;\n }\n if (hasComputedVariantValues) {\n propsForExt[SKIP_STYLE_VARIANT_VALUES] = computedVariantValues;\n }\n } else {\n propsForExt = resolvedVariants as Record<string | symbol, unknown>;\n }\n\n const extResult = ext(\n propsForExt as ComponentProps<Record<string, unknown>>,\n );\n // ext may be a modal component (.html / .htmlObj), whose style is a\n // CSS string or hyphen-keyed object — normalize before merging.\n if (extResult.style != null) {\n assign(allStyle, normalizeStyle(extResult.style));\n }\n\n allClasses.push(extBaseClass);\n const fullClass =\n \"className\" in extResult ? extResult.className : extResult.class;\n const variantPortion = extractVariantClasses(fullClass, extBaseClass);\n if (variantPortion) extVariantClasses.push(variantPortion);\n }\n\n // 2. Current base class\n allClasses.push(baseClass);\n if (baseStyle) assign(allStyle, baseStyle);\n\n // 4. Extended variant classes\n for (let i = 0; i < extVariantClasses.length; i++) {\n allClasses.push(extVariantClasses[i]);\n }\n } else {\n // No extends: just current base\n allClasses.push(baseClass);\n if (baseStyle) assign(allStyle, baseStyle);\n }\n\n // 5. Current component's variants (skip keys overridden)\n // Walk pre-built variant entries\n for (let i = 0; i < variantEntryCount; i++) {\n const variantName = variantEntryNames[i];\n const variant = variantEntryDefs[i];\n if (currentVariantKeys && currentVariantKeys.has(variantName)) continue;\n const selectedValue = resolvedVariants[variantName];\n if (selectedValue === undefined) continue;\n const selectedKey = getVariantValueKey(selectedValue);\n // disabled values from current config:\n if (\n variant.disabledValues &&\n selectedKey != null &&\n variant.disabledValues.has(selectedKey)\n ) {\n continue;\n }\n // skipVariantValues comes from skipStyleVariantValuesIn (only relevant\n // if this is being called as an extended component). For top-level it\n // would be undefined.\n if (\n skipStyleVariantValuesIn &&\n selectedKey != null &&\n skipStyleVariantValuesIn[variantName]?.has(selectedKey)\n ) {\n continue;\n }\n\n if (variant.values) {\n if (selectedKey == null) continue;\n const v = variant.values[selectedKey];\n if (!v) continue;\n if (v.class != null) allClasses.push(v.class);\n if (v.style) assign(allStyle, v.style);\n } else if (variant.shorthand) {\n // shorthand: applies when selectedValue === true\n if (selectedValue === true) {\n const v = variant.shorthand;\n if (v.class != null) allClasses.push(v.class);\n if (v.style) assign(allStyle, v.style);\n }\n }\n }\n\n // computedVariants\n for (let i = 0; i < computedVariantCount; i++) {\n const variantName = computedVariantNames[i];\n const fn = computedVariantFns[i];\n if (currentVariantKeys && currentVariantKeys.has(variantName)) continue;\n const selectedValue = resolvedVariants[variantName];\n if (selectedValue === undefined) continue;\n const selectedKey = getVariantValueKey(selectedValue);\n if (\n skipStyleVariantValuesIn &&\n selectedKey != null &&\n skipStyleVariantValuesIn[variantName]?.has(selectedKey)\n ) {\n continue;\n }\n const computedResult = fn(selectedValue);\n if (computedResult == null) continue;\n const r = extractClassAndStylePrebuilt(computedResult);\n if (r.class != null) allClasses.push(r.class);\n if (r.style) assign(allStyle, r.style);\n }\n\n // computed function results\n if (computedClassesArr) {\n for (let i = 0; i < computedClassesArr.length; i++) {\n allClasses.push(computedClassesArr[i]);\n }\n }\n if (computedStyleObj) assign(allStyle, computedStyleObj);\n\n // props.class / props.className\n if (\"class\" in props)\n allClasses.push((props as { class: ClassValue }).class);\n if (\"className\" in props)\n allClasses.push((props as { className: ClassValue }).className);\n\n // props.style\n const psv = (props as { style?: unknown }).style;\n if (psv != null) {\n // Fast path: if it's an object with no keys, skip\n if (typeof psv === \"string\") {\n if (psv.length > 0) {\n assign(allStyle, htmlStyleToStyleValue(psv));\n }\n } else if (typeof psv === \"object\") {\n // Could be HTMLObj or JSX form. Don't allocate when empty.\n let hasAnyKey = false;\n for (const _ in psv) {\n hasAnyKey = true;\n break;\n }\n if (hasAnyKey) {\n assign(allStyle, normalizeStyle(psv));\n }\n }\n }\n\n return {\n className: cx(...(allClasses as ClsxClassValue[])),\n style: allStyle,\n };\n };\n\n const getVariants = (variants?: VariantValues<MergedVariants>) => {\n const variantProps = (variants ?? {}) as Record<string, unknown>;\n let resolvedVariants = resolveVariantsHot(variantProps);\n // Run computed function to get variants set via setVariants and\n // setDefaultVariants\n if (computed) {\n const updatedVariants: Record<string, unknown> = {};\n Object.assign(updatedVariants, resolvedVariants);\n const ctx = {\n variants: resolvedVariants as VariantValues<Record<string, unknown>>,\n setVariants: (\n newVariants: VariantValues<Record<string, unknown>>,\n ) => {\n const filtered: Record<string, unknown> = {};\n filterDisabledInto(\n newVariants as Record<string, unknown>,\n filtered,\n );\n Object.assign(updatedVariants, filtered);\n },\n setDefaultVariants: (\n newDefaults: VariantValues<Record<string, unknown>>,\n ) => {\n for (const key in newDefaults) {\n if (!hasOwn.call(newDefaults, key)) continue;\n if (variantProps[key] !== undefined) continue;\n if (disabledVariantKeys.has(key)) continue;\n const value = (newDefaults as Record<string, unknown>)[key];\n const valueKey = getVariantValueKey(value);\n if (\n valueKey != null &&\n disabledVariantValues[key]?.has(valueKey)\n ) {\n continue;\n }\n updatedVariants[key] = value;\n }\n },\n addClass: () => {},\n addStyle: () => {},\n };\n computed(ctx);\n const filteredUpdated: Record<string, unknown> = {};\n filterDisabledInto(updatedVariants, filteredUpdated);\n resolvedVariants = filteredUpdated;\n }\n return resolvedVariants as VariantValues<MergedVariants>;\n };\n\n // Compute base class (without variants) - includes extended base classes.\n // Reuses `extBaseClassesArr` (built earlier) so we don't walk `extend` and\n // call `getComponentMeta` a second time.\n const computedBaseClass = cx(\n ...(extBaseClassesArr as ClsxClassValue[]),\n config.class as ClsxClassValue,\n );\n\n // Shared closures across the default and modal components.\n const classFn = (props: ComponentProps<MergedVariants> = {}) => {\n return computeResult(props).className;\n };\n const meta: ComponentMeta = {\n baseClass: computedBaseClass,\n staticDefaults,\n resolveDefaults: resolveDefaultsFn,\n };\n\n const initComponent = <\n R extends ComponentResult,\n T extends ModalComponent<MergedVariants, R>,\n >(\n c: T,\n keys: string[],\n style: T[\"style\"],\n ): T => {\n c.class = classFn;\n c.style = style;\n c.getVariants = getVariants;\n c.keys = keys;\n c.variantKeys = variantKeys;\n c.propKeys = keys;\n setComponentMeta(c, meta);\n return c;\n };\n\n // Default component\n const defaultComponent = ((props: ComponentProps<MergedVariants> = {}) => {\n const { className, style } = computeResult(props);\n return { class: className, style };\n }) as CVComponent<V, CV, E>;\n initComponent(defaultComponent, inputPropsKeys, (props = {}) => {\n return computeResult(props).style;\n });\n\n // JSX component\n const jsxComponent = ((props: ComponentProps<MergedVariants> = {}) => {\n const { className, style } = computeResult(props);\n return { className, style: styleValueToJSXStyle(style) };\n }) as ModalComponent<MergedVariants, JSXProps>;\n initComponent(\n jsxComponent,\n [\"className\", \"style\", ...variantKeys],\n (props = {}) => styleValueToJSXStyle(computeResult(props).style),\n );\n\n // HTML component\n const htmlComponent = ((props: ComponentProps<MergedVariants> = {}) => {\n const { className, style } = computeResult(props);\n return { class: className, style: styleValueToHTMLStyle(style) };\n }) as ModalComponent<MergedVariants, HTMLProps>;\n initComponent(\n htmlComponent,\n [\"class\", \"style\", ...variantKeys],\n (props = {}) => styleValueToHTMLStyle(computeResult(props).style),\n );\n\n // HTMLObj component\n const htmlObjComponent = ((props: ComponentProps<MergedVariants> = {}) => {\n const { className, style } = computeResult(props);\n return { class: className, style: styleValueToHTMLObjStyle(style) };\n }) as ModalComponent<MergedVariants, HTMLObjProps>;\n initComponent(\n htmlObjComponent,\n [\"class\", \"style\", ...variantKeys],\n (props = {}) => styleValueToHTMLObjStyle(computeResult(props).style),\n );\n\n defaultComponent.jsx = jsxComponent;\n defaultComponent.html = htmlComponent;\n defaultComponent.htmlObj = htmlObjComponent;\n\n return defaultComponent;\n };\n\n return { cv, cx };\n}\n\nexport const { cv, cx } = create();\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["hasOwn","hasDisabledValues"],"sources":["../src/utils.ts","../src/index.ts"],"sourcesContent":["import type * as CSS from \"csstype\";\nimport type {\n HTMLCSSProperties,\n JSXCSSProperties,\n StyleValue,\n} from \"./types.ts\";\n\nexport const MODES = [\"jsx\", \"html\", \"htmlObj\"] as const;\nexport type Mode = (typeof MODES)[number];\n\n// eslint-disable-next-line @typescript-eslint/unbound-method\nconst hasOwn = Object.prototype.hasOwnProperty;\n\nfunction isAsciiLetter(code: number) {\n if (code >= 65 && code <= 90) return true;\n return code >= 97 && code <= 122;\n}\n\n/**\n * Returns the appropriate class property name based on the mode.\n * @example\n * getClassPropertyName(\"jsx\") // \"className\"\n * getClassPropertyName(\"html\") // \"class\"\n */\nexport function getClassPropertyName(mode: Mode) {\n return mode === \"jsx\" ? \"className\" : \"class\";\n}\n\n/**\n * Converts a hyphenated CSS property name to camelCase.\n * @example\n * hyphenToCamel(\"background-color\") // \"backgroundColor\"\n * hyphenToCamel(\"--custom-var\") // \"--custom-var\" (CSS variables are preserved)\n */\nexport function hyphenToCamel(str: string) {\n // CSS custom properties (variables) should not be converted\n if (str.length >= 2 && str.charCodeAt(0) === 45 && str.charCodeAt(1) === 45) {\n return str;\n }\n // Fast path: no hyphen -> return as-is\n let hyphenIndex = str.indexOf(\"-\");\n if (hyphenIndex === -1) return str;\n\n let result = \"\";\n let lastIndex = 0;\n while (hyphenIndex !== -1) {\n result += str.slice(lastIndex, hyphenIndex);\n\n const nextIndex = hyphenIndex + 1;\n if (nextIndex >= str.length) {\n result += \"-\";\n lastIndex = nextIndex;\n break;\n }\n\n const code = str.charCodeAt(nextIndex);\n if (isAsciiLetter(code)) {\n result += str[nextIndex].toUpperCase();\n lastIndex = nextIndex + 1;\n } else {\n result += \"-\";\n lastIndex = nextIndex;\n }\n\n hyphenIndex = str.indexOf(\"-\", lastIndex);\n }\n\n return result + str.slice(lastIndex);\n}\n\n/**\n * Converts a camelCase CSS property name to hyphenated form.\n * @example\n * camelToHyphen(\"backgroundColor\") // \"background-color\"\n * camelToHyphen(\"--customVar\") // \"--customVar\" (CSS variables are preserved)\n */\nexport function camelToHyphen(str: string) {\n // CSS custom properties (variables) should not be converted\n if (str.length >= 2 && str.charCodeAt(0) === 45 && str.charCodeAt(1) === 45) {\n return str;\n }\n\n let result = \"\";\n let lastIndex = 0;\n for (let i = 0; i < str.length; i++) {\n const code = str.charCodeAt(i);\n if (code < 65 || code > 90) continue;\n result += str.slice(lastIndex, i);\n result += \"-\";\n result += str[i].toLowerCase();\n lastIndex = i + 1;\n }\n\n if (lastIndex === 0) return str;\n return result + str.slice(lastIndex);\n}\n\n/**\n * Parses a length value, adding \"px\" if it's a number.\n * @example\n * parseLengthValue(16); // \"16px\"\n * parseLengthValue(\"2em\"); // \"2em\"\n */\nexport function parseLengthValue(value: string | number) {\n if (typeof value === \"string\") return value;\n return `${value}px`;\n}\n\n/**\n * Parses a CSS style string into a StyleValue object.\n * @example\n * htmlStyleToStyleValue(\"background-color: red; font-size: 16px;\");\n * // { backgroundColor: \"red\", fontSize: \"16px\" }\n */\nexport function htmlStyleToStyleValue(styleString: string) {\n if (!styleString) return {};\n\n const result: StyleValue = {};\n const len = styleString.length;\n let i = 0;\n while (i < len) {\n // Skip leading whitespace and stray semicolons\n while (i < len) {\n const c = styleString.charCodeAt(i);\n if (c !== 32 && c !== 9 && c !== 10 && c !== 13 && c !== 59) break;\n i++;\n }\n if (i >= len) break;\n // Read property name until ':' or ';'\n const propStart = i;\n while (i < len) {\n const c = styleString.charCodeAt(i);\n if (c === 58 || c === 59) break;\n i++;\n }\n if (i >= len || styleString.charCodeAt(i) === 59) {\n // No colon found - skip this declaration\n if (i < len) i++; // skip ';'\n continue;\n }\n let propEnd = i;\n // Trim trailing whitespace from property name\n while (propEnd > propStart) {\n const c = styleString.charCodeAt(propEnd - 1);\n if (c !== 32 && c !== 9 && c !== 10 && c !== 13) break;\n propEnd--;\n }\n if (propEnd === propStart) {\n // Empty property - skip\n while (i < len && styleString.charCodeAt(i) !== 59) i++;\n if (i < len) i++;\n continue;\n }\n const property = styleString.slice(propStart, propEnd);\n i++; // skip ':'\n // Skip whitespace before value\n while (i < len) {\n const c = styleString.charCodeAt(i);\n if (c !== 32 && c !== 9 && c !== 10 && c !== 13) break;\n i++;\n }\n const valStart = i;\n while (i < len && styleString.charCodeAt(i) !== 59) i++;\n let valEnd = i;\n while (valEnd > valStart) {\n const c = styleString.charCodeAt(valEnd - 1);\n if (c !== 32 && c !== 9 && c !== 10 && c !== 13) break;\n valEnd--;\n }\n if (i < len) i++; // skip ';'\n if (valEnd === valStart) continue;\n const value = styleString.slice(valStart, valEnd);\n // CSS property names and values are dynamic - cast required for index access\n (result as Record<string, string>)[hyphenToCamel(property)] = value;\n }\n\n return result;\n}\n\n/**\n * Converts a hyphenated style object to a camelCase StyleValue object.\n * @example\n * htmlObjStyleToStyleValue({ \"background-color\": \"red\", \"font-size\": \"16px\" });\n * // { backgroundColor: \"red\", fontSize: \"16px\" }\n */\nexport function htmlObjStyleToStyleValue(style: HTMLCSSProperties) {\n const result: StyleValue = {};\n for (const key in style) {\n if (!hasOwn.call(style, key)) continue;\n const value = (style as Record<string, unknown>)[key];\n if (value == null) continue;\n // CSS property names and values are dynamic - cast required for index access\n (result as Record<string, string>)[hyphenToCamel(key)] = parseLengthValue(\n value as string | number,\n );\n }\n return result;\n}\n\n/**\n * Converts a camelCase style object to a StyleValue object.\n * @example\n * jsxStyleToStyleValue({ backgroundColor: \"red\", fontSize: 16 });\n * // { backgroundColor: \"red\", fontSize: \"16px\" }\n */\nexport function jsxStyleToStyleValue(style: JSXCSSProperties) {\n const result: StyleValue = {};\n for (const key in style) {\n if (!hasOwn.call(style, key)) continue;\n const value = (style as Record<string, unknown>)[key];\n if (value == null) continue;\n // CSS property names and values are dynamic - cast required for index access\n (result as Record<string, string>)[key] = parseLengthValue(\n value as string | number,\n );\n }\n return result;\n}\n\n/**\n * Converts a StyleValue object to a CSS style string.\n * @example\n * styleValueToHTMLStyle({ backgroundColor: \"red\", fontSize: \"16px\" });\n * // \"background-color: red; font-size: 16px;\"\n */\nexport function styleValueToHTMLStyle(style: StyleValue): string {\n let result = \"\";\n for (const key in style) {\n if (!hasOwn.call(style, key)) continue;\n const value = (style as Record<string, unknown>)[key];\n if (value == null) continue;\n if (result) result += \"; \";\n result += camelToHyphen(key);\n result += \": \";\n result += value as string | number;\n }\n if (!result) return \"\";\n return `${result};`;\n}\n\n/**\n * Converts a StyleValue object to a hyphenated style object.\n * @example\n * styleValueToHTMLObjStyle({ backgroundColor: \"red\", fontSize: \"16px\" });\n * // { \"background-color\": \"red\", \"font-size\": \"16px\" }\n */\nexport function styleValueToHTMLObjStyle(style: StyleValue) {\n const result: CSS.PropertiesHyphen = {};\n for (const key in style) {\n if (!hasOwn.call(style, key)) continue;\n const value = (style as Record<string, unknown>)[key];\n if (value == null) continue;\n (result as Record<string, unknown>)[camelToHyphen(key)] = value;\n }\n return result;\n}\n\n/**\n * Converts a StyleValue object to a camelCase style object.\n * @example\n * styleValueToJSXStyle({ backgroundColor: \"red\", fontSize: \"16px\" });\n * // { backgroundColor: \"red\", fontSize: \"16px\" }\n */\nexport function styleValueToJSXStyle(style: StyleValue) {\n return style as JSXCSSProperties;\n}\n\n/**\n * Type guard to check if a style object has hyphenated keys.\n * @example\n * isHTMLObjStyle({ \"background-color\": \"red\" }); // true\n * isHTMLObjStyle({ backgroundColor: \"red\" }); // false\n */\nexport function isHTMLObjStyle(\n style: CSS.Properties<any> | CSS.PropertiesHyphen<any>,\n): style is CSS.PropertiesHyphen {\n for (const key in style) {\n if (!hasOwn.call(style, key)) continue;\n // Quick exclusion of CSS custom properties (--foo)\n if (\n key.length >= 2 &&\n key.charCodeAt(0) === 45 &&\n key.charCodeAt(1) === 45\n ) {\n continue;\n }\n if (key.indexOf(\"-\") !== -1) return true;\n }\n return false;\n}\n","import clsx, { type ClassValue as ClsxClassValue } from \"clsx\";\nimport type {\n AnyComponent,\n CVComponent,\n ClassValue,\n ComponentProps,\n ComponentResult,\n Computed,\n ComputedVariants,\n ExtendableVariants,\n HTMLObjProps,\n HTMLProps,\n JSXProps,\n MergeVariants,\n ModalComponent,\n SplitPropsFunction,\n StyleClassProps,\n StyleClassValue,\n StyleValue,\n VariantValues,\n Variants,\n} from \"./types.ts\";\nimport {\n htmlObjStyleToStyleValue,\n htmlStyleToStyleValue,\n isHTMLObjStyle,\n jsxStyleToStyleValue,\n styleValueToHTMLObjStyle,\n styleValueToHTMLStyle,\n styleValueToJSXStyle,\n} from \"./utils.ts\";\n\n// Internal metadata stored on components but hidden from public types\ninterface ComponentMeta {\n baseClass: string;\n staticDefaults: Record<string, unknown>;\n resolveDefaults: (\n childDefaults: Record<string, unknown>,\n userProps?: Record<string, unknown>,\n ) => Record<string, unknown>;\n}\n\nconst META_KEY = \"__meta\";\n\n// Symbol property used to pass skip keys through the props object without\n// polluting the actual variant values. This allows the computed function to\n// see actual variant values while still skipping styling for overridden keys.\nconst SKIP_STYLE_KEYS = Symbol(\"skipStyleKeys\");\nconst SKIP_STYLE_VARIANT_VALUES = Symbol(\"skipStyleVariantValues\");\n\n// eslint-disable-next-line @typescript-eslint/unbound-method\nconst hasOwn = Object.prototype.hasOwnProperty;\n\n// Dynamic property access on function requires cast through unknown\nfunction getComponentMeta(component: AnyComponent): ComponentMeta | undefined {\n return (component as unknown as Record<string, unknown>)[META_KEY] as\n | ComponentMeta\n | undefined;\n}\n\nfunction setComponentMeta(component: AnyComponent, meta: ComponentMeta): void {\n (component as unknown as Record<string, unknown>)[META_KEY] = meta;\n}\n\n/**\n * Mutates target by assigning all properties from source. Avoids object spread\n * overhead in hot paths where we're building up a result object.\n */\nfunction assign<T extends object>(target: T, source: T): void {\n for (const key in source) {\n if (!hasOwn.call(source, key)) continue;\n (target as Record<string, unknown>)[key] = (\n source as Record<string, unknown>\n )[key];\n }\n}\n\nexport type {\n ClassValue,\n StyleValue,\n StyleClassProps,\n StyleClassValue,\n JSXProps,\n HTMLProps,\n HTMLObjProps,\n CVComponent,\n};\n\nexport type VariantProps<T extends Pick<AnyComponent, \"getVariants\">> =\n ReturnType<T[\"getVariants\"]>;\n\n// Variant props expose booleans, but variant object keys are always strings.\ntype VariantKey<T> = T extends boolean ? \"true\" | \"false\" : Extract<T, string>;\n\nexport type Variant<\n T extends Pick<AnyComponent, \"getVariants\">,\n K extends keyof VariantProps<T>,\n> = Record<\n VariantKey<NonNullable<VariantProps<T>[K]>>,\n ClassValue | StyleClassValue\n>;\n\nexport interface CVConfig<\n V extends Variants = {},\n CV extends ComputedVariants = {},\n E extends AnyComponent[] = [],\n> {\n extend?: E;\n class?: ClassValue;\n style?: StyleValue;\n variants?: ExtendableVariants<V, E>;\n computedVariants?: CV;\n defaultVariants?: VariantValues<MergeVariants<V, CV, E>>;\n computed?: Computed<MergeVariants<V, CV, E>>;\n}\n\ninterface CreateParams {\n transformClass?: (className: string) => string;\n}\n\nfunction isRecordObject(value: unknown): value is Record<string, unknown> {\n if (typeof value !== \"object\") return false;\n if (value == null) return false;\n if (Array.isArray(value)) return false;\n return true;\n}\n\n/**\n * Checks if a value is a style-class object (`{ style, class? }`).\n */\nfunction isStyleClassValue(value: unknown): value is StyleClassValue {\n if (!isRecordObject(value)) return false;\n return \"style\" in value || \"class\" in value;\n}\n\n/**\n * Converts any style input (string, JSX object, or HTML object) to a normalized\n * StyleValue.\n */\nfunction normalizeStyle(style: unknown): StyleValue {\n if (typeof style === \"string\") {\n return htmlStyleToStyleValue(style);\n }\n if (typeof style === \"object\" && style != null) {\n if (isHTMLObjStyle(style as Record<string, unknown>)) {\n return htmlObjStyleToStyleValue(style as Record<string, string | number>);\n }\n return jsxStyleToStyleValue(style as Record<string, string | number>);\n }\n return {};\n}\n\n/**\n * Pre-extracts the class and (normalized) style from a variant value once at\n * component creation time. Returns `null` if the value contributes nothing.\n */\ninterface PrebuiltValue {\n class: ClassValue;\n style: StyleValue | null;\n}\n\nfunction extractStyleClassPrebuilt(value: StyleClassValue): PrebuiltValue {\n const styleNorm = normalizeStyle(value.style);\n return {\n class: value.class ?? null,\n style: styleNorm && Object.keys(styleNorm).length > 0 ? styleNorm : null,\n };\n}\n\nfunction extractClassAndStylePrebuilt(value: unknown): PrebuiltValue {\n if (isStyleClassValue(value)) {\n return extractStyleClassPrebuilt(value);\n }\n if (isRecordObject(value)) {\n return { class: null, style: null };\n }\n return { class: value as ClassValue, style: null };\n}\n\n/**\n * Gets all variant keys from a component's config, including extended\n * components.\n */\nfunction collectVariantKeys(\n config: CVConfig<Variants, ComputedVariants, AnyComponent[]>,\n): string[] {\n const keys = new Set<string>();\n\n if (config.extend) {\n for (const ext of config.extend) {\n const extKeys = ext.variantKeys as readonly string[];\n for (let i = 0; i < extKeys.length; i++) {\n keys.add(extKeys[i]);\n }\n }\n }\n\n if (config.variants) {\n for (const key in config.variants) {\n if (!hasOwn.call(config.variants, key)) continue;\n const variant = (config.variants as Record<string, unknown>)[key];\n if (variant === null) {\n keys.delete(key);\n continue;\n }\n keys.add(key);\n }\n }\n\n if (config.computedVariants) {\n for (const key in config.computedVariants) {\n if (!hasOwn.call(config.computedVariants, key)) continue;\n keys.add(key);\n }\n }\n\n return Array.from(keys);\n}\n\nfunction isVariantDisabled(\n config: CVConfig<Variants, ComputedVariants, AnyComponent[]>,\n key: string,\n): boolean {\n return config.variants?.[key] === null;\n}\n\nfunction getVariantValueKey(value: unknown): string | undefined {\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\") return String(value);\n if (typeof value === \"boolean\") return String(value);\n return undefined;\n}\n\nfunction isVariantValueDisabled(\n config: CVConfig<Variants, ComputedVariants, AnyComponent[]>,\n key: string,\n value: unknown,\n): boolean {\n const valueKey = getVariantValueKey(value);\n if (valueKey == null) return false;\n const variant = config.variants?.[key];\n if (!isRecordObject(variant)) return false;\n return variant[valueKey] === null;\n}\n\nfunction collectDisabledVariantKeys(\n config: CVConfig<Variants, ComputedVariants, AnyComponent[]>,\n): Set<string> {\n const keys = new Set<string>();\n if (!config.variants) return keys;\n for (const key in config.variants) {\n if (!hasOwn.call(config.variants, key)) continue;\n if ((config.variants as Record<string, unknown>)[key] === null) {\n keys.add(key);\n }\n }\n return keys;\n}\n\nfunction collectDisabledVariantValues(\n config: CVConfig<Variants, ComputedVariants, AnyComponent[]>,\n): Record<string, Set<string>> {\n const values: Record<string, Set<string>> = {};\n if (!config.variants) return values;\n for (const key in config.variants) {\n if (!hasOwn.call(config.variants, key)) continue;\n const variant = (config.variants as Record<string, unknown>)[key];\n if (!isRecordObject(variant)) continue;\n let bucket: Set<string> | undefined;\n for (const variantValue in variant) {\n if (!hasOwn.call(variant, variantValue)) continue;\n if (variant[variantValue] !== null) continue;\n if (!bucket) {\n bucket = new Set<string>();\n values[key] = bucket;\n }\n bucket.add(variantValue);\n }\n }\n return values;\n}\n\n/**\n * Extracts classes from fullClass that are not in baseClass. Uses string\n * comparison optimization: if fullClass starts with baseClass, just take the\n * suffix.\n */\nfunction extractVariantClasses(fullClass: string, baseClass: string): string {\n if (!fullClass) return \"\";\n if (!baseClass) return fullClass;\n\n // Fast path: fullClass starts with baseClass (common case)\n if (fullClass.startsWith(baseClass)) {\n return fullClass.slice(baseClass.length).trim();\n }\n\n // Slow path: need to diff the class sets\n const baseClassSet = new Set(baseClass.split(\" \").filter(Boolean));\n return fullClass\n .split(\" \")\n .filter((c) => c && !baseClassSet.has(c))\n .join(\" \");\n}\n\ninterface NormalizedSource {\n keys: string[];\n variantKeys: string[];\n isComponent: boolean;\n}\n\nconst EMPTY_SOURCE: NormalizedSource = {\n keys: [],\n variantKeys: [],\n isComponent: false,\n};\n\nfunction normalizeKeySource(source: unknown): NormalizedSource {\n if (Array.isArray(source)) {\n return {\n keys: source as string[],\n variantKeys: source as string[],\n isComponent: false,\n };\n }\n\n if (!source) return EMPTY_SOURCE;\n if (typeof source !== \"object\" && typeof source !== \"function\") {\n return EMPTY_SOURCE;\n }\n if (!(\"keys\" in source)) return EMPTY_SOURCE;\n if (!(\"variantKeys\" in source)) return EMPTY_SOURCE;\n\n // Component-provided arrays are immutable metadata — reference directly.\n const typed = source as {\n keys: string[];\n variantKeys: string[];\n };\n return {\n keys: typed.keys,\n variantKeys: typed.variantKeys,\n isComponent: true,\n };\n}\n\n/**\n * Splits props into multiple groups based on key sources. Only the first\n * component claims styling props (class/className/style). Subsequent components\n * only receive variant props. Arrays always receive their listed keys but don't\n * claim styling props.\n */\nfunction splitPropsImpl(\n selfKeys: string[],\n selfIsComponent: boolean,\n props: Record<string, unknown>,\n sources: unknown[],\n): Record<string, unknown>[] {\n const sourcesLength = sources.length;\n const results: Record<string, unknown>[] = [];\n let stylingClaimed = selfIsComponent;\n\n const selfResult: Record<string, unknown> = {};\n const selfKeysLength = selfKeys.length;\n for (let i = 0; i < selfKeysLength; i++) {\n const key = selfKeys[i];\n if (key !== undefined && key in props) {\n selfResult[key] = props[key];\n }\n }\n results.push(selfResult);\n\n // Track effective key arrays for the rest computation — for typical inputs\n // a linear scan beats building a Set up-front.\n const effectiveKeyArrays: string[][] = [selfKeys];\n\n for (let s = 0; s < sourcesLength; s++) {\n const source = normalizeKeySource(sources[s]);\n const sourceResult: Record<string, unknown> = {};\n\n const effectiveKeys =\n source.isComponent && stylingClaimed ? source.variantKeys : source.keys;\n\n const effectiveKeysLength = effectiveKeys.length;\n for (let i = 0; i < effectiveKeysLength; i++) {\n const key = effectiveKeys[i];\n if (key !== undefined && key in props) {\n sourceResult[key] = props[key];\n }\n }\n results.push(sourceResult);\n effectiveKeyArrays.push(effectiveKeys);\n\n if (source.isComponent && !stylingClaimed) {\n stylingClaimed = true;\n }\n }\n\n const rest: Record<string, unknown> = {};\n const propKeys = Object.keys(props);\n const propKeysLength = propKeys.length;\n const groupCount = sourcesLength + 1;\n outer: for (let i = 0; i < propKeysLength; i++) {\n const key = propKeys[i];\n if (key === undefined) continue;\n for (let g = 0; g < groupCount; g++) {\n const arr = effectiveKeyArrays[g];\n if (arr === undefined) continue;\n const arrLength = arr.length;\n for (let j = 0; j < arrLength; j++) {\n if (arr[j] === key) continue outer;\n }\n }\n rest[key] = props[key];\n }\n results.push(rest);\n\n return results;\n}\n\n/**\n * Splits props into multiple groups based on key sources. Each source gets its\n * own result object containing all its matching keys. The first component\n * source claims styling props (class/className/style). Subsequent components\n * only receive variant props. Arrays receive their listed keys but don't claim\n * styling props. The last element is always the \"rest\" containing keys not\n * claimed by any source.\n */\nexport const splitProps: SplitPropsFunction = ((\n props: Record<string, unknown>,\n source1: unknown,\n ...sources: unknown[]\n) => {\n const normalizedSource1 = normalizeKeySource(source1);\n return splitPropsImpl(\n normalizedSource1.keys,\n normalizedSource1.isComponent,\n props,\n sources,\n );\n}) as SplitPropsFunction;\n\n/**\n * A pre-built variant. Maps variant value keys (or the literal \"true\"/\"false\"\n * strings for boolean variants) to PrebuiltValue. Includes a \"shorthand\"\n * fallback when the variant is a single class value (treated as `{ true: ... }`).\n */\ninterface PrebuiltVariant {\n // For object variants: map of value -> prebuilt class/style\n values: Record<string, PrebuiltValue> | null;\n // For shorthand variants: the value to use when selectedValue is true\n shorthand: PrebuiltValue | null;\n // Set of value keys that are disabled (value === null in the original variant\n // definition)\n disabledValues: Set<string> | null;\n}\n\nfunction buildPrebuiltVariant(variantDef: unknown): PrebuiltVariant {\n if (!isRecordObject(variantDef)) {\n return {\n values: null,\n shorthand: extractClassAndStylePrebuilt(variantDef),\n disabledValues: null,\n };\n }\n const values: Record<string, PrebuiltValue> = {};\n let disabledValues: Set<string> | null = null;\n for (const key in variantDef) {\n if (!hasOwn.call(variantDef, key)) continue;\n const value = variantDef[key];\n if (value === null) {\n if (!disabledValues) disabledValues = new Set<string>();\n disabledValues.add(key);\n continue;\n }\n values[key] = extractClassAndStylePrebuilt(value);\n }\n return {\n values,\n shorthand: null,\n disabledValues,\n };\n}\n\n/**\n * Creates the resolveDefaults function for a component. This function returns\n * only the variants set via setDefaultVariants in the computed function. Used\n * by child components to get parent's computed defaults.\n */\nfunction createResolveDefaults(\n config: CVConfig<Variants, ComputedVariants, AnyComponent[]>,\n staticDefaults: Record<string, unknown>,\n): ComponentMeta[\"resolveDefaults\"] {\n const computed = config.computed;\n const extend = config.extend;\n return (childDefaults, userProps = {}) => {\n // Merge: parent static < child static < user props\n // This is what parent's computed will see in `variants`\n const resolvedVariants: Record<string, unknown> = {};\n Object.assign(resolvedVariants, staticDefaults);\n for (const key in childDefaults) {\n if (!hasOwn.call(childDefaults, key)) continue;\n const v = childDefaults[key];\n if (v === undefined) continue;\n resolvedVariants[key] = v;\n }\n for (const key in userProps) {\n if (!hasOwn.call(userProps, key)) continue;\n const v = userProps[key];\n if (v === undefined) continue;\n resolvedVariants[key] = v;\n }\n\n // Track which keys are set via setDefaultVariants\n const computedDefaults: Record<string, unknown> = {};\n\n // Propagate to extended components so their computed functions can run\n if (extend) {\n for (const ext of extend) {\n const meta = getComponentMeta(ext);\n if (!meta) continue;\n const extDefaults = meta.resolveDefaults(childDefaults, userProps);\n for (const k in extDefaults) {\n if (hasOwn.call(extDefaults, k)) {\n computedDefaults[k] = extDefaults[k];\n }\n }\n }\n }\n\n if (computed) {\n computed({\n variants: resolvedVariants as VariantValues<Record<string, unknown>>,\n setVariants: () => {},\n setDefaultVariants: (newDefaults) => {\n for (const key in newDefaults) {\n if (!hasOwn.call(newDefaults, key)) continue;\n const value = (newDefaults as Record<string, unknown>)[key];\n if (userProps[key] !== undefined) continue;\n if (isVariantDisabled(config, key)) continue;\n if (isVariantValueDisabled(config, key, value)) continue;\n computedDefaults[key] = value;\n }\n },\n addClass: () => {},\n addStyle: () => {},\n });\n }\n\n return computedDefaults;\n };\n}\n\n/**\n * Creates the cv and cx functions.\n */\nexport function create({\n transformClass = (className) => className,\n}: CreateParams = {}) {\n const cx = (...classes: ClsxClassValue[]) => transformClass(clsx(...classes));\n\n const cv = <\n V extends Variants = {},\n CV extends ComputedVariants = {},\n const E extends AnyComponent[] = [],\n >(\n config: CVConfig<V, CV, E> = {},\n ): CVComponent<V, CV, E> => {\n type MergedVariants = MergeVariants<V, CV, E>;\n\n // ----- Pre-computed at creation time -----\n const variantKeys = collectVariantKeys(config);\n const disabledVariantKeys = collectDisabledVariantKeys(config);\n const disabledVariantValues = collectDisabledVariantValues(config);\n const hasDisabledVariantKeys = disabledVariantKeys.size > 0;\n const disabledVariantValueKeys = Object.keys(disabledVariantValues);\n const hasDisabledVariantValues = disabledVariantValueKeys.length > 0;\n const hasAnyDisabled = hasDisabledVariantKeys || hasDisabledVariantValues;\n\n const inputPropsKeys = [\"class\", \"className\", \"style\", ...variantKeys];\n\n const extend = config.extend;\n const hasExtend = !!extend && extend.length > 0;\n const variants = config.variants;\n const computedVariantsCfg = config.computedVariants;\n const computed = config.computed;\n const baseStyle = config.style;\n const baseClass: ClassValue =\n config.class === undefined ? null : (config.class as ClassValue);\n\n // Pre-build variant entries for fast iteration. For each variant key in\n // `variants`, we have a name and a PrebuiltVariant with normalized values.\n const variantEntryNames: string[] = [];\n const variantEntryDefs: PrebuiltVariant[] = [];\n if (variants) {\n for (const name in variants) {\n if (!hasOwn.call(variants, name)) continue;\n const variant = (variants as Record<string, unknown>)[name];\n if (variant === null) continue;\n variantEntryNames.push(name);\n variantEntryDefs.push(buildPrebuiltVariant(variant));\n }\n }\n const variantEntryCount = variantEntryNames.length;\n\n // Pre-built computed-variants entries.\n const computedVariantNames: string[] = [];\n const computedVariantFns: Array<(value: unknown) => unknown> = [];\n if (computedVariantsCfg) {\n for (const name in computedVariantsCfg) {\n if (!hasOwn.call(computedVariantsCfg, name)) continue;\n computedVariantNames.push(name);\n computedVariantFns.push(\n (computedVariantsCfg as Record<string, (value: unknown) => unknown>)[\n name\n ] as (value: unknown) => unknown,\n );\n }\n }\n const computedVariantCount = computedVariantNames.length;\n\n // Pre-compute static defaults. Includes:\n // - extended components' static defaults\n // - implicit boolean defaults (variants with a `false` key default to false)\n // - this config's defaultVariants (overriding the above)\n // Then filtered through disabled-variants.\n const staticDefaults: Record<string, unknown> = {};\n if (extend) {\n for (const ext of extend) {\n const meta = getComponentMeta(ext);\n if (meta) Object.assign(staticDefaults, meta.staticDefaults);\n }\n }\n if (variants) {\n for (const name in variants) {\n if (!hasOwn.call(variants, name)) continue;\n const variantDef = (variants as Record<string, unknown>)[name];\n if (!isRecordObject(variantDef)) continue;\n if (\n hasOwn.call(variantDef, \"false\") &&\n staticDefaults[name] === undefined\n ) {\n staticDefaults[name] = false;\n }\n }\n }\n if (config.defaultVariants) {\n Object.assign(staticDefaults, config.defaultVariants);\n }\n if (hasAnyDisabled) {\n // Filter disabled variants in-place\n for (const key in staticDefaults) {\n if (!hasOwn.call(staticDefaults, key)) continue;\n if (disabledVariantKeys.has(key)) {\n delete staticDefaults[key];\n continue;\n }\n if (hasDisabledVariantValues) {\n const value = staticDefaults[key];\n const valueKey = getVariantValueKey(value);\n if (valueKey != null && disabledVariantValues[key]?.has(valueKey)) {\n delete staticDefaults[key];\n }\n }\n }\n }\n\n // Pre-build extended component info, so we don't have to call\n // `getComponentMeta` per render.\n const extEntries: AnyComponent[] = extend ? (extend as AnyComponent[]) : [];\n const extBaseClassesArr: string[] = [];\n const extMetas: (ComponentMeta | undefined)[] = [];\n if (extend) {\n for (const ext of extend) {\n const meta = getComponentMeta(ext);\n extMetas.push(meta);\n extBaseClassesArr.push(meta?.baseClass ?? \"\");\n }\n }\n const extCount = extEntries.length;\n\n // Inlined \"filter disabled\" - mutates `out` adding only allowed entries.\n // Most components have no disabled variants, in which case we can skip\n // the filter entirely.\n function filterDisabledInto(\n input: Record<string, unknown>,\n out: Record<string, unknown>,\n ): void {\n if (!hasAnyDisabled) {\n for (const key in input) {\n if (hasOwn.call(input, key)) out[key] = input[key];\n }\n return;\n }\n for (const key in input) {\n if (!hasOwn.call(input, key)) continue;\n if (disabledVariantKeys.has(key)) continue;\n const value = input[key];\n if (hasDisabledVariantValues) {\n const valueKey = getVariantValueKey(value);\n if (valueKey != null && disabledVariantValues[key]?.has(valueKey)) {\n continue;\n }\n }\n out[key] = value;\n }\n }\n\n // Pre-create default-variants resolver which is referenced during the hot\n // path through extended components' meta. The closure captures\n // staticDefaults, extend, computed, etc.\n const resolveDefaultsFn = createResolveDefaults(config, staticDefaults);\n\n // Resolve variants: defaults -> computed defaults from extended -> props.\n function resolveVariantsHot(\n propsVariants: Record<string, unknown>,\n ): Record<string, unknown> {\n // Start with static defaults\n const defaults: Record<string, unknown> = {};\n Object.assign(defaults, staticDefaults);\n\n // Apply computed defaults from extended components\n if (hasExtend) {\n for (let i = 0; i < extCount; i++) {\n const meta = extMetas[i];\n if (!meta) continue;\n const extComputed = meta.resolveDefaults(defaults, propsVariants);\n for (const k in extComputed) {\n if (hasOwn.call(extComputed, k)) {\n defaults[k] = extComputed[k];\n }\n }\n }\n }\n\n // Now merge: defaults < propsVariants (filter undefined)\n // Apply propsVariants on top\n for (const k in propsVariants) {\n if (!hasOwn.call(propsVariants, k)) continue;\n const v = propsVariants[k];\n if (v === undefined) continue;\n defaults[k] = v;\n }\n\n if (!hasAnyDisabled) return defaults;\n\n // Filter disabled\n const result: Record<string, unknown> = {};\n filterDisabledInto(defaults, result);\n return result;\n }\n\n // Hot path: build a fresh result.\n const computeResult = (\n props: ComponentProps<MergedVariants> = {},\n ): { className: string; style: StyleValue } => {\n // Extract skip style keys from props (set by child's computedVariants)\n const skipStyleKeysIn = (props as Record<symbol, unknown>)[\n SKIP_STYLE_KEYS\n ] as Set<string> | undefined;\n const skipStyleVariantValuesIn = (props as Record<symbol, unknown>)[\n SKIP_STYLE_VARIANT_VALUES\n ] as Record<string, Set<string>> | undefined;\n\n // Extract variant props from input. Also remember the propsVariants for\n // computed-defaults application.\n const variantProps: Record<string, unknown> = {};\n for (let i = 0; i < variantKeys.length; i++) {\n const key = variantKeys[i];\n if (key in props) {\n variantProps[key] = (props as Record<string, unknown>)[key];\n }\n }\n\n // Resolve variants with defaults\n let resolvedVariants = resolveVariantsHot(variantProps);\n\n // Run computed function (may update variants and emit class/style)\n let computedClassesArr: ClassValue[] | null = null;\n let computedStyleObj: StyleValue | null = null;\n\n if (computed) {\n const updatedVariants: Record<string, unknown> = {};\n Object.assign(updatedVariants, resolvedVariants);\n const cClasses: ClassValue[] = [];\n let cStyle: StyleValue | null = null;\n const ctx = {\n variants: resolvedVariants as VariantValues<Record<string, unknown>>,\n setVariants: (\n newVariants: VariantValues<Record<string, unknown>>,\n ) => {\n if (!hasAnyDisabled) {\n Object.assign(updatedVariants, newVariants);\n } else {\n const filtered: Record<string, unknown> = {};\n filterDisabledInto(\n newVariants as Record<string, unknown>,\n filtered,\n );\n Object.assign(updatedVariants, filtered);\n }\n },\n setDefaultVariants: (\n newDefaults: VariantValues<Record<string, unknown>>,\n ) => {\n for (const key in newDefaults) {\n if (!hasOwn.call(newDefaults, key)) continue;\n if (variantProps[key] !== undefined) continue;\n const value = (newDefaults as Record<string, unknown>)[key];\n if (hasAnyDisabled) {\n if (disabledVariantKeys.has(key)) continue;\n const valueKey = getVariantValueKey(value);\n if (\n valueKey != null &&\n disabledVariantValues[key]?.has(valueKey)\n ) {\n continue;\n }\n }\n updatedVariants[key] = value;\n }\n },\n addClass: (className: ClassValue) => {\n cClasses.push(className);\n },\n addStyle: (newStyle: StyleValue) => {\n if (!cStyle) cStyle = {};\n assign(cStyle, newStyle);\n },\n };\n const result = computed(ctx);\n if (result != null) {\n const r = extractClassAndStylePrebuilt(result);\n if (r.class != null) cClasses.push(r.class);\n if (r.style) {\n if (!cStyle) cStyle = {};\n assign(cStyle, r.style);\n }\n }\n if (hasAnyDisabled) {\n const filteredUpdated: Record<string, unknown> = {};\n filterDisabledInto(updatedVariants, filteredUpdated);\n resolvedVariants = filteredUpdated;\n } else {\n resolvedVariants = updatedVariants;\n }\n computedClassesArr = cClasses;\n computedStyleObj = cStyle;\n }\n\n // Compute skip-style sets for the extended components and current\n // component. Only allocate when needed.\n const hasSkipKeys = !!skipStyleKeysIn || hasDisabledVariantKeys;\n let currentVariantKeys: Set<string> | null = null;\n if (hasSkipKeys) {\n currentVariantKeys = new Set<string>();\n if (skipStyleKeysIn) {\n for (const k of skipStyleKeysIn) currentVariantKeys.add(k);\n }\n for (const k of disabledVariantKeys) currentVariantKeys.add(k);\n }\n // computedVariantKeys is currentVariantKeys + computedVariants names\n let computedVariantKeysSet: Set<string> | null = null;\n if (hasExtend) {\n if (currentVariantKeys || computedVariantNames.length > 0) {\n computedVariantKeysSet = new Set<string>();\n if (currentVariantKeys) {\n for (const k of currentVariantKeys) computedVariantKeysSet.add(k);\n }\n for (let i = 0; i < computedVariantNames.length; i++) {\n computedVariantKeysSet.add(computedVariantNames[i]);\n }\n }\n }\n\n // computedVariantValues = mergeDisabledVariantValues(skipIn, disabledValues)\n let computedVariantValues: Record<string, Set<string>> | null = null;\n const hasInValues = !!skipStyleVariantValuesIn;\n const hasDisabledValues = hasDisabledVariantValues;\n if (hasExtend && (hasInValues || hasDisabledValues)) {\n computedVariantValues = {};\n if (hasInValues) {\n for (const k in skipStyleVariantValuesIn) {\n if (!hasOwn.call(skipStyleVariantValuesIn, k)) continue;\n const set = new Set<string>();\n for (const v of skipStyleVariantValuesIn[k]) {\n set.add(v);\n }\n computedVariantValues[k] = set;\n }\n }\n for (let i = 0; i < disabledVariantValueKeys.length; i++) {\n const k = disabledVariantValueKeys[i];\n let bucket = computedVariantValues[k];\n if (!bucket) {\n bucket = new Set<string>();\n computedVariantValues[k] = bucket;\n }\n for (const v of disabledVariantValues[k]) bucket.add(v);\n }\n }\n\n // ----- Build classes/styles in proper order -----\n // 1. Extended base classes & their styles (with skip applied)\n // 2. Current base class & base style\n // 3. Extended variant classes\n // 4. Current variants\n // 5. computed results\n // 6. props.class / props.className\n // 7. props.style\n const allClasses: ClassValue[] = [];\n const allStyle: StyleValue = {};\n\n // Process extended components\n if (hasExtend) {\n const hasComputedVariantKeysSet =\n !!computedVariantKeysSet && computedVariantKeysSet.size > 0;\n const hasComputedVariantValues =\n !!computedVariantValues &&\n Object.keys(computedVariantValues).length > 0;\n const hasSkipForExt =\n hasComputedVariantKeysSet || hasComputedVariantValues;\n\n const extVariantClasses: ClassValue[] = [];\n\n for (let i = 0; i < extCount; i++) {\n const ext = extEntries[i];\n const extBaseClass = extBaseClassesArr[i];\n let propsForExt: Record<string | symbol, unknown>;\n if (hasSkipForExt) {\n propsForExt = {};\n // Copy resolvedVariants\n for (const k in resolvedVariants) {\n if (hasOwn.call(resolvedVariants, k)) {\n propsForExt[k] = resolvedVariants[k];\n }\n }\n if (hasComputedVariantKeysSet) {\n propsForExt[SKIP_STYLE_KEYS] = computedVariantKeysSet;\n }\n if (hasComputedVariantValues) {\n propsForExt[SKIP_STYLE_VARIANT_VALUES] = computedVariantValues;\n }\n } else {\n propsForExt = resolvedVariants as Record<string | symbol, unknown>;\n }\n\n const extResult = ext(\n propsForExt as ComponentProps<Record<string, unknown>>,\n );\n // ext may be a modal component (.html / .htmlObj), whose style is a\n // CSS string or hyphen-keyed object — normalize before merging.\n if (extResult.style != null) {\n assign(allStyle, normalizeStyle(extResult.style));\n }\n\n allClasses.push(extBaseClass);\n const fullClass =\n \"className\" in extResult ? extResult.className : extResult.class;\n const variantPortion = extractVariantClasses(fullClass, extBaseClass);\n if (variantPortion) extVariantClasses.push(variantPortion);\n }\n\n // 2. Current base class\n allClasses.push(baseClass);\n if (baseStyle) assign(allStyle, baseStyle);\n\n // 4. Extended variant classes\n for (let i = 0; i < extVariantClasses.length; i++) {\n allClasses.push(extVariantClasses[i]);\n }\n } else {\n // No extends: just current base\n allClasses.push(baseClass);\n if (baseStyle) assign(allStyle, baseStyle);\n }\n\n // 5. Current component's variants (skip keys overridden)\n // Walk pre-built variant entries\n for (let i = 0; i < variantEntryCount; i++) {\n const variantName = variantEntryNames[i];\n const variant = variantEntryDefs[i];\n if (currentVariantKeys && currentVariantKeys.has(variantName)) continue;\n const selectedValue = resolvedVariants[variantName];\n if (selectedValue === undefined) continue;\n const selectedKey = getVariantValueKey(selectedValue);\n // disabled values from current config:\n if (\n variant.disabledValues &&\n selectedKey != null &&\n variant.disabledValues.has(selectedKey)\n ) {\n continue;\n }\n // skipVariantValues comes from skipStyleVariantValuesIn (only relevant\n // if this is being called as an extended component). For top-level it\n // would be undefined.\n if (\n skipStyleVariantValuesIn &&\n selectedKey != null &&\n skipStyleVariantValuesIn[variantName]?.has(selectedKey)\n ) {\n continue;\n }\n\n if (variant.values) {\n if (selectedKey == null) continue;\n const v = variant.values[selectedKey];\n if (!v) continue;\n if (v.class != null) allClasses.push(v.class);\n if (v.style) assign(allStyle, v.style);\n } else if (variant.shorthand) {\n // shorthand: applies when selectedValue === true\n if (selectedValue === true) {\n const v = variant.shorthand;\n if (v.class != null) allClasses.push(v.class);\n if (v.style) assign(allStyle, v.style);\n }\n }\n }\n\n // computedVariants\n for (let i = 0; i < computedVariantCount; i++) {\n const variantName = computedVariantNames[i];\n const fn = computedVariantFns[i];\n if (currentVariantKeys && currentVariantKeys.has(variantName)) continue;\n const selectedValue = resolvedVariants[variantName];\n if (selectedValue === undefined) continue;\n const selectedKey = getVariantValueKey(selectedValue);\n if (\n skipStyleVariantValuesIn &&\n selectedKey != null &&\n skipStyleVariantValuesIn[variantName]?.has(selectedKey)\n ) {\n continue;\n }\n const computedResult = fn(selectedValue);\n if (computedResult == null) continue;\n const r = extractClassAndStylePrebuilt(computedResult);\n if (r.class != null) allClasses.push(r.class);\n if (r.style) assign(allStyle, r.style);\n }\n\n // computed function results\n if (computedClassesArr) {\n for (let i = 0; i < computedClassesArr.length; i++) {\n allClasses.push(computedClassesArr[i]);\n }\n }\n if (computedStyleObj) assign(allStyle, computedStyleObj);\n\n // props.class / props.className\n if (\"class\" in props)\n allClasses.push((props as { class: ClassValue }).class);\n if (\"className\" in props)\n allClasses.push((props as { className: ClassValue }).className);\n\n // props.style\n const psv = (props as { style?: unknown }).style;\n if (psv != null) {\n // Fast path: if it's an object with no keys, skip\n if (typeof psv === \"string\") {\n if (psv.length > 0) {\n assign(allStyle, htmlStyleToStyleValue(psv));\n }\n } else if (typeof psv === \"object\") {\n // Could be HTMLObj or JSX form. Don't allocate when empty.\n let hasAnyKey = false;\n for (const _ in psv) {\n hasAnyKey = true;\n break;\n }\n if (hasAnyKey) {\n assign(allStyle, normalizeStyle(psv));\n }\n }\n }\n\n return {\n className: cx(...(allClasses as ClsxClassValue[])),\n style: allStyle,\n };\n };\n\n const getVariants = (variants?: VariantValues<MergedVariants>) => {\n const variantProps = (variants ?? {}) as Record<string, unknown>;\n let resolvedVariants = resolveVariantsHot(variantProps);\n // Run computed function to get variants set via setVariants and\n // setDefaultVariants\n if (computed) {\n const updatedVariants: Record<string, unknown> = {};\n Object.assign(updatedVariants, resolvedVariants);\n const ctx = {\n variants: resolvedVariants as VariantValues<Record<string, unknown>>,\n setVariants: (\n newVariants: VariantValues<Record<string, unknown>>,\n ) => {\n if (!hasAnyDisabled) {\n Object.assign(updatedVariants, newVariants);\n } else {\n const filtered: Record<string, unknown> = {};\n filterDisabledInto(\n newVariants as Record<string, unknown>,\n filtered,\n );\n Object.assign(updatedVariants, filtered);\n }\n },\n setDefaultVariants: (\n newDefaults: VariantValues<Record<string, unknown>>,\n ) => {\n for (const key in newDefaults) {\n if (!hasOwn.call(newDefaults, key)) continue;\n if (variantProps[key] !== undefined) continue;\n const value = (newDefaults as Record<string, unknown>)[key];\n if (hasAnyDisabled) {\n if (disabledVariantKeys.has(key)) continue;\n const valueKey = getVariantValueKey(value);\n if (\n valueKey != null &&\n disabledVariantValues[key]?.has(valueKey)\n ) {\n continue;\n }\n }\n updatedVariants[key] = value;\n }\n },\n addClass: () => {},\n addStyle: () => {},\n };\n computed(ctx);\n if (hasAnyDisabled) {\n const filteredUpdated: Record<string, unknown> = {};\n filterDisabledInto(updatedVariants, filteredUpdated);\n resolvedVariants = filteredUpdated;\n } else {\n resolvedVariants = updatedVariants;\n }\n }\n return resolvedVariants as VariantValues<MergedVariants>;\n };\n\n // Compute base class (without variants) - includes extended base classes.\n // Reuses `extBaseClassesArr` (built earlier) so we don't walk `extend` and\n // call `getComponentMeta` a second time.\n const computedBaseClass = cx(\n ...(extBaseClassesArr as ClsxClassValue[]),\n config.class as ClsxClassValue,\n );\n\n // Shared closures across the default and modal components.\n const classFn = (props: ComponentProps<MergedVariants> = {}) => {\n return computeResult(props).className;\n };\n const meta: ComponentMeta = {\n baseClass: computedBaseClass,\n staticDefaults,\n resolveDefaults: resolveDefaultsFn,\n };\n\n const initComponent = <\n R extends ComponentResult,\n T extends ModalComponent<MergedVariants, R>,\n >(\n c: T,\n keys: string[],\n style: T[\"style\"],\n ): T => {\n c.class = classFn;\n c.style = style;\n c.getVariants = getVariants;\n c.keys = keys;\n c.variantKeys = variantKeys;\n c.propKeys = keys;\n setComponentMeta(c, meta);\n return c;\n };\n\n // Default component\n const defaultComponent = ((props: ComponentProps<MergedVariants> = {}) => {\n const { className, style } = computeResult(props);\n return { class: className, style };\n }) as CVComponent<V, CV, E>;\n initComponent(defaultComponent, inputPropsKeys, (props = {}) => {\n return computeResult(props).style;\n });\n\n // JSX component\n const jsxComponent = ((props: ComponentProps<MergedVariants> = {}) => {\n const { className, style } = computeResult(props);\n return { className, style: styleValueToJSXStyle(style) };\n }) as ModalComponent<MergedVariants, JSXProps>;\n initComponent(\n jsxComponent,\n [\"className\", \"style\", ...variantKeys],\n (props = {}) => styleValueToJSXStyle(computeResult(props).style),\n );\n\n // HTML component\n const htmlComponent = ((props: ComponentProps<MergedVariants> = {}) => {\n const { className, style } = computeResult(props);\n return { class: className, style: styleValueToHTMLStyle(style) };\n }) as ModalComponent<MergedVariants, HTMLProps>;\n initComponent(\n htmlComponent,\n [\"class\", \"style\", ...variantKeys],\n (props = {}) => styleValueToHTMLStyle(computeResult(props).style),\n );\n\n // HTMLObj component\n const htmlObjComponent = ((props: ComponentProps<MergedVariants> = {}) => {\n const { className, style } = computeResult(props);\n return { class: className, style: styleValueToHTMLObjStyle(style) };\n }) as ModalComponent<MergedVariants, HTMLObjProps>;\n initComponent(\n htmlObjComponent,\n [\"class\", \"style\", ...variantKeys],\n (props = {}) => styleValueToHTMLObjStyle(computeResult(props).style),\n );\n\n defaultComponent.jsx = jsxComponent;\n defaultComponent.html = htmlComponent;\n defaultComponent.htmlObj = htmlObjComponent;\n\n return defaultComponent;\n };\n\n return { cv, cx };\n}\n\nexport const { cv, cx } = create();\n"],"mappings":"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"}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -352,7 +352,7 @@ function splitPropsImpl(
|
|
|
352
352
|
selfKeys: string[],
|
|
353
353
|
selfIsComponent: boolean,
|
|
354
354
|
props: Record<string, unknown>,
|
|
355
|
-
sources:
|
|
355
|
+
sources: unknown[],
|
|
356
356
|
): Record<string, unknown>[] {
|
|
357
357
|
const sourcesLength = sources.length;
|
|
358
358
|
const results: Record<string, unknown>[] = [];
|
|
@@ -373,8 +373,7 @@ function splitPropsImpl(
|
|
|
373
373
|
const effectiveKeyArrays: string[][] = [selfKeys];
|
|
374
374
|
|
|
375
375
|
for (let s = 0; s < sourcesLength; s++) {
|
|
376
|
-
const source = sources[s];
|
|
377
|
-
if (source === undefined) continue;
|
|
376
|
+
const source = normalizeKeySource(sources[s]);
|
|
378
377
|
const sourceResult: Record<string, unknown> = {};
|
|
379
378
|
|
|
380
379
|
const effectiveKeys =
|
|
@@ -431,16 +430,11 @@ export const splitProps: SplitPropsFunction = ((
|
|
|
431
430
|
...sources: unknown[]
|
|
432
431
|
) => {
|
|
433
432
|
const normalizedSource1 = normalizeKeySource(source1);
|
|
434
|
-
const sourcesLength = sources.length;
|
|
435
|
-
const normalizedSources: NormalizedSource[] = [];
|
|
436
|
-
for (let i = 0; i < sourcesLength; i++) {
|
|
437
|
-
normalizedSources.push(normalizeKeySource(sources[i]));
|
|
438
|
-
}
|
|
439
433
|
return splitPropsImpl(
|
|
440
434
|
normalizedSource1.keys,
|
|
441
435
|
normalizedSource1.isComponent,
|
|
442
436
|
props,
|
|
443
|
-
|
|
437
|
+
sources,
|
|
444
438
|
);
|
|
445
439
|
}) as SplitPropsFunction;
|
|
446
440
|
|
|
@@ -577,8 +571,8 @@ export function create({
|
|
|
577
571
|
const disabledVariantKeys = collectDisabledVariantKeys(config);
|
|
578
572
|
const disabledVariantValues = collectDisabledVariantValues(config);
|
|
579
573
|
const hasDisabledVariantKeys = disabledVariantKeys.size > 0;
|
|
580
|
-
const
|
|
581
|
-
|
|
574
|
+
const disabledVariantValueKeys = Object.keys(disabledVariantValues);
|
|
575
|
+
const hasDisabledVariantValues = disabledVariantValueKeys.length > 0;
|
|
582
576
|
const hasAnyDisabled = hasDisabledVariantKeys || hasDisabledVariantValues;
|
|
583
577
|
|
|
584
578
|
const inputPropsKeys = ["class", "className", "style", ...variantKeys];
|
|
@@ -746,6 +740,8 @@ export function create({
|
|
|
746
740
|
defaults[k] = v;
|
|
747
741
|
}
|
|
748
742
|
|
|
743
|
+
if (!hasAnyDisabled) return defaults;
|
|
744
|
+
|
|
749
745
|
// Filter disabled
|
|
750
746
|
const result: Record<string, unknown> = {};
|
|
751
747
|
filterDisabledInto(defaults, result);
|
|
@@ -791,12 +787,16 @@ export function create({
|
|
|
791
787
|
setVariants: (
|
|
792
788
|
newVariants: VariantValues<Record<string, unknown>>,
|
|
793
789
|
) => {
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
filtered,
|
|
798
|
-
|
|
799
|
-
|
|
790
|
+
if (!hasAnyDisabled) {
|
|
791
|
+
Object.assign(updatedVariants, newVariants);
|
|
792
|
+
} else {
|
|
793
|
+
const filtered: Record<string, unknown> = {};
|
|
794
|
+
filterDisabledInto(
|
|
795
|
+
newVariants as Record<string, unknown>,
|
|
796
|
+
filtered,
|
|
797
|
+
);
|
|
798
|
+
Object.assign(updatedVariants, filtered);
|
|
799
|
+
}
|
|
800
800
|
},
|
|
801
801
|
setDefaultVariants: (
|
|
802
802
|
newDefaults: VariantValues<Record<string, unknown>>,
|
|
@@ -804,14 +804,16 @@ export function create({
|
|
|
804
804
|
for (const key in newDefaults) {
|
|
805
805
|
if (!hasOwn.call(newDefaults, key)) continue;
|
|
806
806
|
if (variantProps[key] !== undefined) continue;
|
|
807
|
-
if (disabledVariantKeys.has(key)) continue;
|
|
808
807
|
const value = (newDefaults as Record<string, unknown>)[key];
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
valueKey
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
808
|
+
if (hasAnyDisabled) {
|
|
809
|
+
if (disabledVariantKeys.has(key)) continue;
|
|
810
|
+
const valueKey = getVariantValueKey(value);
|
|
811
|
+
if (
|
|
812
|
+
valueKey != null &&
|
|
813
|
+
disabledVariantValues[key]?.has(valueKey)
|
|
814
|
+
) {
|
|
815
|
+
continue;
|
|
816
|
+
}
|
|
815
817
|
}
|
|
816
818
|
updatedVariants[key] = value;
|
|
817
819
|
}
|
|
@@ -833,17 +835,20 @@ export function create({
|
|
|
833
835
|
assign(cStyle, r.style);
|
|
834
836
|
}
|
|
835
837
|
}
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
838
|
+
if (hasAnyDisabled) {
|
|
839
|
+
const filteredUpdated: Record<string, unknown> = {};
|
|
840
|
+
filterDisabledInto(updatedVariants, filteredUpdated);
|
|
841
|
+
resolvedVariants = filteredUpdated;
|
|
842
|
+
} else {
|
|
843
|
+
resolvedVariants = updatedVariants;
|
|
844
|
+
}
|
|
840
845
|
computedClassesArr = cClasses;
|
|
841
846
|
computedStyleObj = cStyle;
|
|
842
847
|
}
|
|
843
848
|
|
|
844
849
|
// Compute skip-style sets for the extended components and current
|
|
845
850
|
// component. Only allocate when needed.
|
|
846
|
-
const hasSkipKeys = !!skipStyleKeysIn ||
|
|
851
|
+
const hasSkipKeys = !!skipStyleKeysIn || hasDisabledVariantKeys;
|
|
847
852
|
let currentVariantKeys: Set<string> | null = null;
|
|
848
853
|
if (hasSkipKeys) {
|
|
849
854
|
currentVariantKeys = new Set<string>();
|
|
@@ -869,8 +874,7 @@ export function create({
|
|
|
869
874
|
// computedVariantValues = mergeDisabledVariantValues(skipIn, disabledValues)
|
|
870
875
|
let computedVariantValues: Record<string, Set<string>> | null = null;
|
|
871
876
|
const hasInValues = !!skipStyleVariantValuesIn;
|
|
872
|
-
const
|
|
873
|
-
const hasDisabledValues = disabledValuesKeys.length > 0;
|
|
877
|
+
const hasDisabledValues = hasDisabledVariantValues;
|
|
874
878
|
if (hasExtend && (hasInValues || hasDisabledValues)) {
|
|
875
879
|
computedVariantValues = {};
|
|
876
880
|
if (hasInValues) {
|
|
@@ -883,8 +887,8 @@ export function create({
|
|
|
883
887
|
computedVariantValues[k] = set;
|
|
884
888
|
}
|
|
885
889
|
}
|
|
886
|
-
for (let i = 0; i <
|
|
887
|
-
const k =
|
|
890
|
+
for (let i = 0; i < disabledVariantValueKeys.length; i++) {
|
|
891
|
+
const k = disabledVariantValueKeys[i];
|
|
888
892
|
let bucket = computedVariantValues[k];
|
|
889
893
|
if (!bucket) {
|
|
890
894
|
bucket = new Set<string>();
|
|
@@ -1089,12 +1093,16 @@ export function create({
|
|
|
1089
1093
|
setVariants: (
|
|
1090
1094
|
newVariants: VariantValues<Record<string, unknown>>,
|
|
1091
1095
|
) => {
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
filtered,
|
|
1096
|
-
|
|
1097
|
-
|
|
1096
|
+
if (!hasAnyDisabled) {
|
|
1097
|
+
Object.assign(updatedVariants, newVariants);
|
|
1098
|
+
} else {
|
|
1099
|
+
const filtered: Record<string, unknown> = {};
|
|
1100
|
+
filterDisabledInto(
|
|
1101
|
+
newVariants as Record<string, unknown>,
|
|
1102
|
+
filtered,
|
|
1103
|
+
);
|
|
1104
|
+
Object.assign(updatedVariants, filtered);
|
|
1105
|
+
}
|
|
1098
1106
|
},
|
|
1099
1107
|
setDefaultVariants: (
|
|
1100
1108
|
newDefaults: VariantValues<Record<string, unknown>>,
|
|
@@ -1102,14 +1110,16 @@ export function create({
|
|
|
1102
1110
|
for (const key in newDefaults) {
|
|
1103
1111
|
if (!hasOwn.call(newDefaults, key)) continue;
|
|
1104
1112
|
if (variantProps[key] !== undefined) continue;
|
|
1105
|
-
if (disabledVariantKeys.has(key)) continue;
|
|
1106
1113
|
const value = (newDefaults as Record<string, unknown>)[key];
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
valueKey
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1114
|
+
if (hasAnyDisabled) {
|
|
1115
|
+
if (disabledVariantKeys.has(key)) continue;
|
|
1116
|
+
const valueKey = getVariantValueKey(value);
|
|
1117
|
+
if (
|
|
1118
|
+
valueKey != null &&
|
|
1119
|
+
disabledVariantValues[key]?.has(valueKey)
|
|
1120
|
+
) {
|
|
1121
|
+
continue;
|
|
1122
|
+
}
|
|
1113
1123
|
}
|
|
1114
1124
|
updatedVariants[key] = value;
|
|
1115
1125
|
}
|
|
@@ -1118,9 +1128,13 @@ export function create({
|
|
|
1118
1128
|
addStyle: () => {},
|
|
1119
1129
|
};
|
|
1120
1130
|
computed(ctx);
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1131
|
+
if (hasAnyDisabled) {
|
|
1132
|
+
const filteredUpdated: Record<string, unknown> = {};
|
|
1133
|
+
filterDisabledInto(updatedVariants, filteredUpdated);
|
|
1134
|
+
resolvedVariants = filteredUpdated;
|
|
1135
|
+
} else {
|
|
1136
|
+
resolvedVariants = updatedVariants;
|
|
1137
|
+
}
|
|
1124
1138
|
}
|
|
1125
1139
|
return resolvedVariants as VariantValues<MergedVariants>;
|
|
1126
1140
|
};
|
package/src/utils.ts
CHANGED
|
@@ -11,6 +11,11 @@ export type Mode = (typeof MODES)[number];
|
|
|
11
11
|
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
12
12
|
const hasOwn = Object.prototype.hasOwnProperty;
|
|
13
13
|
|
|
14
|
+
function isAsciiLetter(code: number) {
|
|
15
|
+
if (code >= 65 && code <= 90) return true;
|
|
16
|
+
return code >= 97 && code <= 122;
|
|
17
|
+
}
|
|
18
|
+
|
|
14
19
|
/**
|
|
15
20
|
* Returns the appropriate class property name based on the mode.
|
|
16
21
|
* @example
|
|
@@ -33,8 +38,34 @@ export function hyphenToCamel(str: string) {
|
|
|
33
38
|
return str;
|
|
34
39
|
}
|
|
35
40
|
// Fast path: no hyphen -> return as-is
|
|
36
|
-
|
|
37
|
-
|
|
41
|
+
let hyphenIndex = str.indexOf("-");
|
|
42
|
+
if (hyphenIndex === -1) return str;
|
|
43
|
+
|
|
44
|
+
let result = "";
|
|
45
|
+
let lastIndex = 0;
|
|
46
|
+
while (hyphenIndex !== -1) {
|
|
47
|
+
result += str.slice(lastIndex, hyphenIndex);
|
|
48
|
+
|
|
49
|
+
const nextIndex = hyphenIndex + 1;
|
|
50
|
+
if (nextIndex >= str.length) {
|
|
51
|
+
result += "-";
|
|
52
|
+
lastIndex = nextIndex;
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const code = str.charCodeAt(nextIndex);
|
|
57
|
+
if (isAsciiLetter(code)) {
|
|
58
|
+
result += str[nextIndex].toUpperCase();
|
|
59
|
+
lastIndex = nextIndex + 1;
|
|
60
|
+
} else {
|
|
61
|
+
result += "-";
|
|
62
|
+
lastIndex = nextIndex;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
hyphenIndex = str.indexOf("-", lastIndex);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
return result + str.slice(lastIndex);
|
|
38
69
|
}
|
|
39
70
|
|
|
40
71
|
/**
|
|
@@ -48,7 +79,20 @@ export function camelToHyphen(str: string) {
|
|
|
48
79
|
if (str.length >= 2 && str.charCodeAt(0) === 45 && str.charCodeAt(1) === 45) {
|
|
49
80
|
return str;
|
|
50
81
|
}
|
|
51
|
-
|
|
82
|
+
|
|
83
|
+
let result = "";
|
|
84
|
+
let lastIndex = 0;
|
|
85
|
+
for (let i = 0; i < str.length; i++) {
|
|
86
|
+
const code = str.charCodeAt(i);
|
|
87
|
+
if (code < 65 || code > 90) continue;
|
|
88
|
+
result += str.slice(lastIndex, i);
|
|
89
|
+
result += "-";
|
|
90
|
+
result += str[i].toLowerCase();
|
|
91
|
+
lastIndex = i + 1;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
if (lastIndex === 0) return str;
|
|
95
|
+
return result + str.slice(lastIndex);
|
|
52
96
|
}
|
|
53
97
|
|
|
54
98
|
/**
|