Skip to content

Commit 700d6d0

Browse files
committed
fix(preset-wind4): add spacing property support and related CSS variables
close: #4965
1 parent 5ea2c6e commit 700d6d0

3 files changed

Lines changed: 22 additions & 1 deletion

File tree

packages-presets/preset-wind4/src/rules/variables.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,22 @@ export const cssVariables: Rule<Theme>[] = [
3838
}],
3939
]
4040

41+
// #4965
42+
const SPACING_PROPERTY_REGEX = /(--spacing)\(([\s\S]+?)\)/
4143
export const cssProperty: Rule<Theme>[] = [
4244
[/^\[(.*)\]$/, ([_, body]) => {
4345
if (!body.includes(':'))
4446
return
4547

4648
const [prop, ...rest] = body.split(':')
47-
const value = rest.join(':')
49+
let value = rest.join(':')
50+
51+
if (SPACING_PROPERTY_REGEX.test(value)) {
52+
const spacingMatch = value.match(SPACING_PROPERTY_REGEX)!
53+
const spacingValue = spacingMatch[2]
54+
const spacingVar = spacingMatch[1]
55+
value = value.replace(SPACING_PROPERTY_REGEX, `calc(var(${spacingVar}) * ${spacingValue})`)
56+
}
4857

4958
if (!isURI(body) && /^[\w-]+$/.test(prop) && isValidCSSBody(value)) {
5059
const parsed = h.bracket(`[${value}]`)

test/assets/output/preset-wind4-targets.css

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1192,6 +1192,11 @@ unocss .scope-\[unocss\]\:block{display:block;}
11921192
.object-\$fit{object-fit:var(--fit);}
11931193
.object-position-\$variable{object-position:var(--variable);}
11941194
.ws-\$variable{white-space:var(--variable);}
1195+
.\[--cell-size\:--spacing\(1\.5\)\]{--cell-size:calc(var(--spacing) * 1.5);}
1196+
.\[--cell-size\:--spacing\(8\)\]{--cell-size:calc(var(--spacing) * 8);}
1197+
.\[--cell-size\:--spacing\(var\(--count\,1\)\)_hello\]{--cell-size:calc(var(--spacing) * var(--count,1)) hello;}
1198+
.\[--cell-size\:--spacing\(var\(--count\,1\)\)\]{--cell-size:calc(var(--spacing) * var(--count,1));}
1199+
.\[--cell-size\:--spacing\(var\(--count\)\)\]{--cell-size:calc(var(--spacing) * var(--count));}
11951200
.\[--css-spacing\:theme\(spacing\.sm\)\]{--css-spacing:0.875rem;}
11961201
.\[--css-variable-4\:\"\"wght\"_400\,_\"opsz\"_14\"\]{--css-variable-4:""wght" 400, "opsz" 14";}
11971202
.\[--css-variable-color\:theme\(colors\.green\.500\)\,theme\(colors\.blue\.500\)\]{--css-variable-color:oklch(72.3% 0.219 149.579),oklch(62.3% 0.214 259.815);}

test/assets/preset-wind4-targets.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -642,6 +642,13 @@ export const presetWind4Targets: string[] = [
642642

643643
// inert
644644
'inert:opacity-25',
645+
646+
// property shortcuts
647+
'[--cell-size:--spacing(8)]',
648+
'[--cell-size:--spacing(1.5)]',
649+
'[--cell-size:--spacing(var(--count))]',
650+
'[--cell-size:--spacing(var(--count,1))]',
651+
'[--cell-size:--spacing(var(--count,1))_hello]',
645652
]
646653

647654
export const presetWindNonTargets: string[] = [

0 commit comments

Comments
 (0)