@@ -22,37 +22,32 @@ const CSS_VAR_NAME_EXTRACTOR = /^var\((.*)\)$/;
22
22
function validateCSSCustomPropertyName ( name : string ) : boolean {
23
23
if ( ! name ) return false ;
24
24
25
- try {
26
- // Remove leading -- if present for validation
27
- const propertyName = name . startsWith ( "--" ) ? name . slice ( 2 ) : name ;
28
-
29
- // First check if it's a valid CSS identifier pattern
30
- if ( ! / ^ [ a - z A - Z _ \- \\ ] [ a - z A - Z 0 - 9 _ \- \\ ] * $ / . test ( propertyName ) ) {
31
- return false ;
32
- }
33
-
34
- // Process the string to validate escape sequences
35
- const result = propertyName ;
36
-
37
- // Only reject literal spaces, not escaped ones
38
- if ( result . includes ( " " ) ) {
39
- return false ;
40
- }
41
-
42
- // Validate non-escaped parts
43
- const parts = result . split ( / \\ [ 0 - 9 a - f A - F ] { 1 , 6 } \s ? / ) ;
44
- return parts . every ( ( part ) => {
45
- if ( ! part ) return true ; // Empty parts are OK between escape sequences
46
- const escaped = cssesc ( part , { isIdentifier : true } ) ;
47
- return escaped === part ;
48
- } ) ;
49
- } catch {
25
+ // Remove leading -- if present for validation
26
+ const propertyName = name . startsWith ( "--" ) ? name . slice ( 2 ) : name ;
27
+
28
+ // First check if it's a valid CSS identifier pattern
29
+ if ( ! / ^ [ a - z A - Z _ \- \\ ] [ a - z A - Z 0 - 9 _ \- \\ ] * $ / . test ( propertyName ) ) {
50
30
return false ;
51
31
}
32
+
33
+ // Validate non-escaped parts
34
+ const parts = propertyName . split ( / \\ [ 0 - 9 a - f A - F ] { 1 , 6 } \s ? / ) ;
35
+ return parts . every ( ( part ) => {
36
+ if ( ! part ) return true ; // Empty parts are OK between escape sequences
37
+ const escaped = cssesc ( part , { isIdentifier : true } ) ;
38
+ return escaped === part ;
39
+ } ) ;
52
40
}
53
41
54
42
/**
55
43
* Checks if a name is a valid CSS variable name without -- prefix.
44
+ *
45
+ * @param name - The name to validate
46
+ * @returns True if the name is a valid CSS variable name, false otherwise
47
+ *
48
+ * @example
49
+ * isValidCSSVarName('my-var') // true
50
+ * isValidCSSVarName('--my-var') // false
56
51
*/
57
52
export function isValidCSSVarName ( name : string ) : boolean {
58
53
return validateCSSCustomPropertyName ( name ) ;
@@ -65,6 +60,13 @@ export function isValidCSSVarName(name: string): boolean {
65
60
* - Are case-sensitive
66
61
* - Can contain letters, numbers, underscores, and hyphens
67
62
* - Cannot start with a digit after the dashes
63
+ *
64
+ * @param value - The value to validate
65
+ * @returns True if the value is a valid CSS variable name (including --), false otherwise
66
+ *
67
+ * @example
68
+ * isCSSVarName('--my-var') // true
69
+ * isCSSVarName('my-var') // false
68
70
*/
69
71
export function isCSSVarName ( value : string ) : value is CSSVarName {
70
72
if ( ! value . startsWith ( "--" ) ) return false ;
@@ -75,6 +77,14 @@ export function isCSSVarName(value: string): value is CSSVarName {
75
77
76
78
/**
77
79
* Creates a CSS variable function with optional fallback.
80
+ *
81
+ * @param name - The name of the CSS variable
82
+ * @param options - Optional options for the CSS variable
83
+ * @returns A CSS variable function
84
+ *
85
+ * @example
86
+ * createCSSVar('my-var') // var(--my-var)
87
+ * createCSSVar('my-var', { fallback: '#fff' }) // var(--my-var, #fff)
78
88
*/
79
89
export function createCSSVar (
80
90
name : string ,
@@ -108,6 +118,12 @@ function isCSSVarFunction(value: string): value is CSSVarFunction {
108
118
109
119
/**
110
120
* Creates a fallback CSS variable function.
121
+ *
122
+ * @param values - The values to fallback to
123
+ * @returns A CSS variable function with fallback
124
+ *
125
+ * @example
126
+ * fallbackCSSVar('var(--my-var)', '#fff') // var(--my-var, #fff)
111
127
*/
112
128
export function fallbackCSSVar (
113
129
...values : [ string , ...Array < string > ]
@@ -138,6 +154,12 @@ export function fallbackCSSVar(
138
154
139
155
/**
140
156
* Returns the variable name from a CSS variable function.
157
+ *
158
+ * @param variable - The CSS variable function
159
+ * @returns The variable name
160
+ *
161
+ * @example
162
+ * getCSSVarName('var(--my-var)') // --my-var
141
163
*/
142
164
export function getCSSVarName ( variable : string ) : string {
143
165
const matches = variable . match ( CSS_VAR_NAME_EXTRACTOR ) ;
@@ -146,6 +168,13 @@ export function getCSSVarName(variable: string): string {
146
168
147
169
/**
148
170
* Assigns a value to a CSS variable.
171
+ *
172
+ * @param variable - The CSS variable function
173
+ * @param value - The value to assign to the CSS variable
174
+ * @returns The CSS variable definition
175
+ *
176
+ * @example
177
+ * assignCSSVar('var(--my-var)', '#fff') // { '--my-var': '#fff' }
149
178
*/
150
179
export function assignCSSVar (
151
180
variable : CSSVarFunction ,
@@ -164,8 +193,5 @@ export function assignCSSVar(
164
193
throw new Error ( "Invalid CSS variable name" ) ;
165
194
}
166
195
167
- return {
168
- name : varName ,
169
- value,
170
- } ;
196
+ return { [ varName ] : value } ;
171
197
}
0 commit comments