@@ -22,37 +22,32 @@ const CSS_VAR_NAME_EXTRACTOR = /^var\((.*)\)$/;
2222function validateCSSCustomPropertyName ( name : string ) : boolean {
2323 if ( ! name ) return false ;
2424
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 ) ) {
5030 return false ;
5131 }
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+ } ) ;
5240}
5341
5442/**
5543 * 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
5651 */
5752export function isValidCSSVarName ( name : string ) : boolean {
5853 return validateCSSCustomPropertyName ( name ) ;
@@ -65,6 +60,13 @@ export function isValidCSSVarName(name: string): boolean {
6560 * - Are case-sensitive
6661 * - Can contain letters, numbers, underscores, and hyphens
6762 * - 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
6870 */
6971export function isCSSVarName ( value : string ) : value is CSSVarName {
7072 if ( ! value . startsWith ( "--" ) ) return false ;
@@ -75,6 +77,14 @@ export function isCSSVarName(value: string): value is CSSVarName {
7577
7678/**
7779 * 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)
7888 */
7989export function createCSSVar (
8090 name : string ,
@@ -108,6 +118,12 @@ function isCSSVarFunction(value: string): value is CSSVarFunction {
108118
109119/**
110120 * 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)
111127 */
112128export function fallbackCSSVar (
113129 ...values : [ string , ...Array < string > ]
@@ -138,6 +154,12 @@ export function fallbackCSSVar(
138154
139155/**
140156 * 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
141163 */
142164export function getCSSVarName ( variable : string ) : string {
143165 const matches = variable . match ( CSS_VAR_NAME_EXTRACTOR ) ;
@@ -146,6 +168,13 @@ export function getCSSVarName(variable: string): string {
146168
147169/**
148170 * 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' }
149178 */
150179export function assignCSSVar (
151180 variable : CSSVarFunction ,
@@ -164,8 +193,5 @@ export function assignCSSVar(
164193 throw new Error ( "Invalid CSS variable name" ) ;
165194 }
166195
167- return {
168- name : varName ,
169- value,
170- } ;
196+ return { [ varName ] : value } ;
171197}
0 commit comments