@unocss/preset-wind 0.20.2 → 0.21.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.
Files changed (3) hide show
  1. package/dist/index.cjs +173 -165
  2. package/dist/index.mjs +169 -161
  3. package/package.json +3 -3
package/dist/index.cjs CHANGED
@@ -2,14 +2,20 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
+ const variants = require('@unocss/preset-mini/variants');
5
6
  const core = require('@unocss/core');
6
7
  const theme$1 = require('@unocss/preset-mini/theme');
7
8
  const presetMini = require('@unocss/preset-mini');
8
9
  const rules$1 = require('@unocss/preset-mini/rules');
9
10
  const utils = require('@unocss/preset-mini/utils');
10
- const variants$1 = require('@unocss/preset-mini/variants');
11
11
 
12
12
  const animations = [
13
+ [/^keyframes-(.+)$/, ([, name], { theme, constructCSS }) => {
14
+ const kf = theme.animation?.keyframes?.[name];
15
+ if (kf)
16
+ return `@keyframes ${name}${kf}
17
+ ${constructCSS({ animation: `${name}` })}`;
18
+ }],
13
19
  [/^animate-(.+)$/, ([, name], { theme, constructCSS }) => {
14
20
  const kf = theme.animation?.keyframes?.[name];
15
21
  if (kf) {
@@ -20,15 +26,15 @@ const animations = [
20
26
  ${constructCSS(Object.assign({ animation: `${name} ${duration} ${timing} infinite` }, props))}`;
21
27
  }
22
28
  }],
23
- [/^animate(?:-duration)?-((.+)(?:(s|ms)?))$/, ([, d]) => ({ "animation-duration": utils.handler.bracket.time(d.replace(/-duration/, "")) })],
24
- [/^animate-delay-((.+)(?:(s|ms)?))$/, ([, d]) => ({ "animation-delay": utils.handler.bracket.time(d) })],
29
+ [/^animate-(?:duration-)?(.+)$/, ([, d]) => ({ "animation-duration": utils.handler.bracket.time(d) })],
30
+ [/^animate-delay-(.+)$/, ([, d]) => ({ "animation-delay": utils.handler.bracket.time(d) })],
25
31
  [/^animate-(?:fill-)?mode-(forwards|backwards|both|inherit|initial|revert|unset)$/, ([, d]) => ({ "animation-fill-mode": d })],
26
32
  ["animate-mode-none", { "animation-fill-mode": "none" }],
27
33
  ["animate-fill-mode-none", { "animation-fill-mode": "none" }],
28
34
  [/^animate-(?:direction-)?(reverse|alternate|alternate-reverse|inherit|initial|revert|unset)$/, ([, d]) => ({ "animation-direction": d })],
29
35
  ["animate-normal", { "animation-direction": "normal" }],
30
36
  ["animate-direction-normal", { "animation-direction": "normal" }],
31
- [/^animate-(?:iteration-)?count-(.+)$/, ([, d]) => ({ "animation-iteration-count": d.replace(/\-/g, ", ") })],
37
+ [/^animate-(?:iteration-)?count-(.+)$/, ([, d]) => ({ "animation-iteration-count": utils.handler.bracket(d) ?? d.replace(/\-/g, ",") })],
32
38
  [/^animate-name-(.+)/, ([, d]) => ({ "animation-name": d })],
33
39
  [/^animate-play(?:-state)?-(paused|running|inherit|initial|revert|unset)$/, ([, d]) => ({ "animation-play-state": d })],
34
40
  ["animate-none", { animation: "none" }]
@@ -64,107 +70,64 @@ const bgGradientColorResolver = (mode) => ([, body], { theme }) => {
64
70
  };
65
71
  }
66
72
  };
67
- const bgGradientDirections = {
68
- t: "top",
69
- tr: "top right",
70
- r: "right",
71
- br: "bottom right",
72
- b: "bottom",
73
- bl: "bottom left",
74
- l: "left",
75
- tl: "top left"
76
- };
77
73
  const backgroundStyles = [
78
- ["bg-fixed", { "background-attachment": "fixed" }],
79
- ["bg-local", { "background-attachment": "local" }],
80
- ["bg-scroll", { "background-attachment": "scroll" }],
81
- ["bg-blend-multiply", { "background-blend-mode": "multiply" }],
82
- ["bg-blend-screen", { "background-blend-mode": "screen" }],
83
- ["bg-blend-overlay", { "background-blend-mode": "overlay" }],
84
- ["bg-blend-darken", { "background-blend-mode": "darken" }],
85
- ["bg-blend-lighten", { "background-blend-mode": "lighten" }],
86
- ["bg-blend-color-dodge", { "background-blend-mode": "color-dodge" }],
87
- ["bg-blend-color-burn", { "background-blend-mode": "color-burn" }],
88
- ["bg-blend-hard-light", { "background-blend-mode": "hard-light" }],
89
- ["bg-blend-soft-light", { "background-blend-mode": "soft-light" }],
90
- ["bg-blend-difference", { "background-blend-mode": "difference" }],
91
- ["bg-blend-exclusion", { "background-blend-mode": "exclusion" }],
92
- ["bg-blend-hue", { "background-blend-mode": "hue" }],
93
- ["bg-blend-saturation", { "background-blend-mode": "saturation" }],
94
- ["bg-blend-color", { "background-blend-mode": "color" }],
95
- ["bg-blend-luminosity", { "background-blend-mode": "luminosity" }],
96
- ["bg-blend-normal", { "background-blend-mode": "normal" }],
97
- ["bg-clip-border", { "-webkit-background-clip": "border-box", "background-attachment": "border-box" }],
98
- ["bg-clip-content", { "-webkit-background-clip": "content-box", "background-attachment": "content-box" }],
99
- ["bg-clip-padding", { "-webkit-background-clip": "padding-box", "background-attachment": "padding-box" }],
100
- ["bg-clip-text", { "-webkit-background-clip": "text", "background-attachment": "text" }],
101
74
  [/^(?:bg-gradient-)?from-(.+)$/, bgGradientColorResolver("from")],
102
75
  [/^(?:bg-gradient-)?to-(.+)$/, bgGradientColorResolver("to")],
103
76
  [/^(?:bg-gradient-)?via-(.+)$/, bgGradientColorResolver("via")],
104
77
  [/^(?:bg-gradient-)?from-op(?:acity)?-?(.+)$/, ([, opacity]) => ({ "--un-from-opacity": utils.handler.bracket.percent(opacity) })],
105
78
  [/^(?:bg-gradient-)?to-op(?:acity)?-?(.+)$/, ([, opacity]) => ({ "--un-to-opacity": utils.handler.bracket.percent(opacity) })],
106
79
  [/^(?:bg-gradient-)?via-op(?:acity)?-?(.+)$/, ([, opacity]) => ({ "--un-via-opacity": utils.handler.bracket.percent(opacity) })],
107
- [/^bg-gradient-to-([trbl]{1,2})$/, ([, d]) => {
108
- const v = bgGradientDirections[d];
109
- if (v)
110
- return { "background-image": `linear-gradient(to ${v}, var(--un-gradient-stops))` };
80
+ [/^bg-gradient-to-([rltb]{1,2})$/, ([, d]) => {
81
+ if (d in utils.positionMap)
82
+ return { "background-image": `linear-gradient(to ${utils.positionMap[d]}, var(--un-gradient-stops))` };
111
83
  }],
112
84
  ["bg-none", { "background-image": "none" }],
113
- ["bg-origin-border", { "background-origin": "border-box" }],
114
- ["bg-origin-padding", { "background-origin": "padding-box" }],
115
- ["bg-origin-content", { "background-origin": "content-box" }],
116
- ["bg-bottom", { "background-position": "bottom" }],
117
- ["bg-center", { "background-position": "center" }],
118
- ["bg-left", { "background-position": "left" }],
119
- ["bg-left-bottom", { "background-position": "left bottom" }],
120
- ["bg-left-top", { "background-position": "left top" }],
121
- ["bg-right", { "background-position": "right" }],
122
- ["bg-right-bottom", { "background-position": "right bottom" }],
123
- ["bg-right-top", { "background-position": "right top" }],
124
- ["bg-top", { "background-position": "top" }],
85
+ ["box-decoration-slice", { "box-decoration-break": "slice" }],
86
+ ["box-decoration-clone", { "box-decoration-break": "clone" }],
87
+ ["bg-auto", { "background-size": "auto" }],
88
+ ["bg-cover", { "background-size": "cover" }],
89
+ ["bg-contain", { "background-size": "contain" }],
90
+ ["bg-fixed", { "background-attachment": "fixed" }],
91
+ ["bg-local", { "background-attachment": "local" }],
92
+ ["bg-scroll", { "background-attachment": "scroll" }],
93
+ ["bg-clip-border", { "-webkit-background-clip": "border-box", "background-attachment": "border-box" }],
94
+ ["bg-clip-content", { "-webkit-background-clip": "content-box", "background-attachment": "content-box" }],
95
+ ["bg-clip-padding", { "-webkit-background-clip": "padding-box", "background-attachment": "padding-box" }],
96
+ ["bg-clip-text", { "-webkit-background-clip": "text", "background-attachment": "text" }],
97
+ [/^bg-([-\w]{3,})$/, ([, s]) => ({ "background-position": utils.positionMap[s] })],
125
98
  ["bg-repeat", { "background-repeat": "repeat" }],
126
99
  ["bg-no-repeat", { "background-repeat": "no-repeat" }],
127
100
  ["bg-repeat-x", { "background-position": "repeat-x" }],
128
101
  ["bg-repeat-y", { "background-position": "repeat-y" }],
129
102
  ["bg-repeat-round", { "background-position": "round" }],
130
103
  ["bg-repeat-space", { "background-position": "space" }],
131
- ["bg-auto", { "background-size": "auto" }],
132
- ["bg-cover", { "background-size": "cover" }],
133
- ["bg-contain", { "background-size": "contain" }]
104
+ ["bg-origin-border", { "background-origin": "border-box" }],
105
+ ["bg-origin-padding", { "background-origin": "padding-box" }],
106
+ ["bg-origin-content", { "background-origin": "content-box" }]
134
107
  ];
135
108
 
136
- const listStyleProps = ["disc", "circle", "square", "decimal", "zero-decimal", "greek", "roman", "upper-roman", "alpha", "upper-alpha"];
137
109
  const listStyle = [
138
- [new RegExp(`^list-((?:${listStyleProps.join("|")})(?:-outside|-inside)?)$`), ([, value]) => {
139
- const style = value.split(/-outside|-inside/)[0];
140
- const position = /outside|inside/.exec(value) ?? [];
141
- if (position.length) {
110
+ [/^list-(disc|circle|square|decimal|zero-decimal|greek|roman|upper-roman|alpha|upper-alpha)(?:-(outside|inside))?$/, ([, style, position]) => {
111
+ if (position != null) {
142
112
  return {
143
- "list-style-position": `${position[0]}`,
113
+ "list-style-position": position,
144
114
  "list-style-type": style
145
115
  };
146
116
  }
147
117
  return { "list-style-type": style };
148
118
  }],
149
- [/^list-(outside|inside)$/, ([, value]) => ({ "list-style-position": value })],
119
+ ["list-outside", { "list-style-position": "outside" }],
120
+ ["list-inside", { "list-style-position": "inside" }],
150
121
  ["list-none", { "list-style-type": "none" }]
151
122
  ];
152
- const boxDecorationBreaks = [
153
- ["decoration-slice", { "box-decoration-break": "slice" }],
154
- ["decoration-clone", { "box-decoration-break": "clone" }]
155
- ];
156
- const accentOpacity = [
123
+ const accents = [
124
+ [/^accent-(.+)$/, utils.colorResolver("accent-color", "accent")],
157
125
  [/^accent-op(?:acity)?-?(.+)$/, ([, d]) => ({ "--un-accent-opacity": utils.handler.bracket.percent(d) })]
158
126
  ];
159
- const accentColors = [
160
- [/^accent-(.+)$/, utils.colorResolver("accent-color", "accent")]
161
- ];
162
- const caretOpacity = [
127
+ const carets = [
128
+ [/^caret-(.+)$/, utils.colorResolver("caret-color", "caret")],
163
129
  [/^caret-op(?:acity)?-?(.+)$/, ([, d]) => ({ "--un-caret-opacity": utils.handler.bracket.percent(d) })]
164
130
  ];
165
- const caretColors = [
166
- [/^caret-(.+)$/, utils.colorResolver("caret-color", "caret")]
167
- ];
168
131
  const imageRenderings = [
169
132
  ["image-render-auto", { "image-rendering": "auto" }],
170
133
  ["image-render-edge", { "image-rendering": "crisp-edges" }],
@@ -176,18 +139,15 @@ const imageRenderings = [
176
139
  ["image-rendering", "pixelated"]
177
140
  ]]
178
141
  ];
179
- const overflowValues = [
180
- "auto",
181
- "hidden",
182
- "visible",
183
- "scroll",
184
- "contain"
185
- ];
186
142
  const overscrolls = [
187
- [/^overscroll-(.+)$/, ([, v]) => overflowValues.includes(v) ? { "overscroll-behavior": v } : void 0],
143
+ ["overscroll-auto", { "overscroll-behavior": "auto" }],
144
+ ["overscroll-contain", { "overscroll-behavior": "contain" }],
188
145
  ["overscroll-none", { "overscroll-behavior": "none" }],
189
- [/^overscroll-([xy])-(.+)$/, ([, d, v]) => overflowValues.includes(v) ? { [`overscroll-behavior-${d}`]: v } : void 0],
146
+ ["overscroll-x-auto", { "overscroll-behavior-x": "auto" }],
147
+ ["overscroll-x-contain", { "overscroll-behavior-x": "contain" }],
190
148
  ["overscroll-x-none", { "overscroll-behavior-x": "none" }],
149
+ ["overscroll-y-auto", { "overscroll-behavior-y": "auto" }],
150
+ ["overscroll-y-contain", { "overscroll-behavior-y": "contain" }],
191
151
  ["overscroll-y-none", { "overscroll-behavior-y": "none" }]
192
152
  ];
193
153
  const scrollBehaviors = [
@@ -253,21 +213,21 @@ const containerShortcuts = [
253
213
  }]
254
214
  ];
255
215
 
256
- const filterContnet = "var(--un-blur) var(--un-brightness) var(--un-contrast) var(--un-grayscale) var(--un-hue-rotate) var(--un-invert) var(--un-saturate) var(--un-sepia) var(--un-drop-shadow)";
216
+ const filterContnet = "var(--un-blur) var(--un-brightness) var(--un-contrast) var(--un-drop-shadow) var(--un-grayscale) var(--un-hue-rotate) var(--un-invert) var(--un-saturate) var(--un-sepia)";
257
217
  const filterBase = {
258
218
  "--un-blur": rules$1.varEmpty,
259
219
  "--un-brightness": rules$1.varEmpty,
260
220
  "--un-contrast": rules$1.varEmpty,
221
+ "--un-drop-shadow": rules$1.varEmpty,
261
222
  "--un-grayscale": rules$1.varEmpty,
262
223
  "--un-hue-rotate": rules$1.varEmpty,
263
224
  "--un-invert": rules$1.varEmpty,
264
225
  "--un-saturate": rules$1.varEmpty,
265
226
  "--un-sepia": rules$1.varEmpty,
266
- "--un-drop-shadow": rules$1.varEmpty,
267
227
  "filter": filterContnet,
268
- [variants$1.CONTROL_BYPASS_PSEUDO_CLASS]: ""
228
+ [variants.CONTROL_BYPASS_PSEUDO_CLASS]: ""
269
229
  };
270
- const backdropFilterContent = "var(--un-backdrop-blur) var(--un-backdrop-brightness) var(--un-backdrop-contrast) var(--un-backdrop-grayscale) var(--un-backdrop-hue-rotate) var(--un-backdrop-invert) var(--un-backdrop-saturate) var(--un-backdrop-sepia)";
230
+ const backdropFilterContent = "var(--un-backdrop-blur) var(--un-backdrop-brightness) var(--un-backdrop-contrast) var(--un-backdrop-grayscale) var(--un-backdrop-hue-rotate) var(--un-backdrop-invert) var(--un-backdrop-opacity) var(--un-backdrop-saturate) var(--un-backdrop-sepia)";
271
231
  const backdropFilterBase = {
272
232
  "--un-backdrop-blur": rules$1.varEmpty,
273
233
  "--un-backdrop-brightness": rules$1.varEmpty,
@@ -275,19 +235,24 @@ const backdropFilterBase = {
275
235
  "--un-backdrop-grayscale": rules$1.varEmpty,
276
236
  "--un-backdrop-hue-rotate": rules$1.varEmpty,
277
237
  "--un-backdrop-invert": rules$1.varEmpty,
238
+ "--un-backdrop-opacity": rules$1.varEmpty,
278
239
  "--un-backdrop-saturate": rules$1.varEmpty,
279
240
  "--un-backdrop-sepia": rules$1.varEmpty,
280
241
  "-webkit-backdrop-filter": backdropFilterContent,
281
242
  "backdrop-filter": backdropFilterContent,
282
- [variants$1.CONTROL_BYPASS_PSEUDO_CLASS]: ""
243
+ [variants.CONTROL_BYPASS_PSEUDO_CLASS]: ""
283
244
  };
284
- const percentWithDefault = (defaultValue = "1") => (str) => {
285
- const v = str ? utils.handler.bracket.percent(str) : defaultValue;
286
- return v && parseFloat(v) <= 1 ? v : void 0;
245
+ const percentWithDefault = (str) => {
246
+ let v = utils.handler.bracket(str || "");
247
+ if (v != null)
248
+ return v;
249
+ v = str ? utils.handler.percent(str) : "1";
250
+ if (v != null && parseFloat(v) <= 1)
251
+ return v;
287
252
  };
288
253
  const toFilter = (varName, resolver) => ([, b, s], { theme }) => {
289
254
  const value = resolver(s, theme);
290
- if (value) {
255
+ if (value != null && value !== "") {
291
256
  return [
292
257
  b ? backdropFilterBase : filterBase,
293
258
  { [`--un-${b || ""}${varName}`]: `${varName}(${value})` }
@@ -298,49 +263,37 @@ const filters = [
298
263
  ["filter", filterBase],
299
264
  ["backdrop-filter", backdropFilterBase],
300
265
  [/^(backdrop-)?blur(?:-(.+))?$/, toFilter("blur", (s, theme) => theme.blur?.[s || "DEFAULT"] || utils.handler.bracket.px(s))],
301
- [/^(backdrop-)?brightness-(\d+)$/, toFilter("brightness", (s) => utils.handler.bracket.percent(s))],
302
- [/^(backdrop-)?contrast-(\d+)$/, toFilter("contrast", (s) => utils.handler.bracket.percent(s))],
266
+ [/^(backdrop-)?brightness-(.+)$/, toFilter("brightness", (s) => utils.handler.bracket.percent(s))],
267
+ [/^(backdrop-)?contrast-(.+)$/, toFilter("contrast", (s) => utils.handler.bracket.percent(s))],
303
268
  [/^()?drop-shadow(?:-(.+))?$/, toFilter("drop-shadow", (s, theme) => {
304
- const v = utils.handler.bracket(s) || theme.dropShadow?.[s || "DEFAULT"];
305
- if (v)
269
+ let v = theme.dropShadow?.[s || "DEFAULT"];
270
+ if (v != null)
306
271
  return core.toArray(v).map((v2) => `drop-shadow(${v2})`).join(" ");
272
+ v = utils.handler.bracket(s);
273
+ if (v != null)
274
+ return `drop-shadow(${v})`;
307
275
  })],
308
- [/^(backdrop-)?grayscale(?:-(\d+))?$/, toFilter("grayscale", percentWithDefault())],
309
- [/^(backdrop-)?hue-rotate-(\d+)$/, toFilter("hue-rotate", (s) => `${utils.handler.bracket.number(s)}deg`)],
310
- [/^(backdrop-)?invert(?:-(\d+))?$/, toFilter("invert", percentWithDefault())],
311
- [/^(backdrop-)?saturate(?:-(\d+))?$/, toFilter("saturate", percentWithDefault("0"))],
312
- [/^(backdrop-)?sepia(?:-(\d+))?$/, toFilter("sepia", percentWithDefault())],
276
+ [/^(backdrop-)?grayscale(?:-(.+))?$/, toFilter("grayscale", percentWithDefault)],
277
+ [/^(backdrop-)?hue-rotate-(.+)$/, toFilter("hue-rotate", (s) => utils.handler.bracket.degree(s))],
278
+ [/^(backdrop-)?invert(?:-(.+))?$/, toFilter("invert", percentWithDefault)],
279
+ [/^(backdrop-)opacity-(.+)$/, toFilter("opacity", (s) => utils.handler.bracket.percent(s))],
280
+ [/^(backdrop-)?saturate-(.+)$/, toFilter("saturate", (s) => utils.handler.bracket.percent(s))],
281
+ [/^(backdrop-)?sepia(?:-(.+))?$/, toFilter("sepia", percentWithDefault)],
313
282
  ["filter-none", { filter: "none" }],
314
283
  ["backdrop-filter-none", {
315
284
  "-webkit-backdrop-filter": "none",
316
285
  "backdrop-filter": "none"
317
- }]
318
- ];
319
-
320
- const mixBlendModes = [
321
- ["mix-blend-multiply", { "mix-blend-mode": "multiply" }],
322
- ["mix-blend-screen", { "mix-blend-mode": "screen" }],
323
- ["mix-blend-overlay", { "mix-blend-mode": "overlay" }],
324
- ["mix-blend-darken", { "mix-blend-mode": "darken" }],
325
- ["mix-blend-lighten", { "mix-blend-mode": "lighten" }],
326
- ["mix-blend-color-dodge", { "mix-blend-mode": "color-dodge" }],
327
- ["mix-blend-color-burn", { "mix-blend-mode": "color-burn" }],
328
- ["mix-blend-color-light", { "mix-blend-mode": "color-light" }],
329
- ["mix-blend-soft-light", { "mix-blend-mode": "soft-light" }],
330
- ["mix-blend-difference", { "mix-blend-mode": "difference" }],
331
- ["mix-blend-exclusion", { "mix-blend-mode": "exclusion" }],
332
- ["mix-blend-hue", { "mix-blend-mode": "hue" }],
333
- ["mix-blend-saturation", { "mix-blend-mode": "saturation" }],
334
- ["mix-blend-color", { "mix-blend-mode": "color" }],
335
- ["mix-blend-luminosity", { "mix-blend-mode": "luminosity" }],
336
- ["mix-blend-normal", { "mix-blend-mode": "normal" }]
286
+ }],
287
+ [/^(blur|brightness|contrast|drop-shadow|grayscale|hue-rotate|invert|saturate|sepia)-none$/, ([, s]) => ({ filter: `${s}(0)` })],
288
+ [/^backdrop-(blur|brightness|contrast|grayscale|hue-rotate|invert|opacity|saturate|sepia)-none$/, ([, s]) => ({
289
+ "-webkit-backdrop-filter": `${s}(0)`,
290
+ "backdrop-filter": `${s}(0)`
291
+ })]
337
292
  ];
338
293
 
339
294
  const spaces = [
340
295
  [/^space-?([xy])-?(-?.+)$/, (match) => {
341
- const [, direction, size] = match;
342
- if (size === "reverse")
343
- return { [`--un-space-${direction}-reverse`]: 1 };
296
+ const [, direction] = match;
344
297
  const results = utils.directionSize("margin")(match)?.map((item) => {
345
298
  const value = item[0].endsWith("right") || item[0].endsWith("bottom") ? `calc(${item[1]} * var(--un-space-${direction}-reverse))` : `calc(${item[1]} * calc(1 - var(--un-space-${direction}-reverse)))`;
346
299
  return [item[0], value];
@@ -351,7 +304,8 @@ const spaces = [
351
304
  ...results
352
305
  ];
353
306
  }
354
- }]
307
+ }],
308
+ [/^space-?([xy])-reverse$/, ([, d]) => ({ [`--un-space-${d}-reverse`]: 1 })]
355
309
  ];
356
310
 
357
311
  const textTransforms = [
@@ -418,7 +372,8 @@ const screenReadersAccess = [
418
372
  ];
419
373
  const isolations = [
420
374
  ["isolate", { isolation: "isolate" }],
421
- ["isolate-auto", { isolation: "auto" }]
375
+ ["isolate-auto", { isolation: "auto" }],
376
+ ["isolation-auto", { isolation: "auto" }]
422
377
  ];
423
378
  const objectPositions = [
424
379
  ["object-cover", { "object-fit": "cover" }],
@@ -426,17 +381,43 @@ const objectPositions = [
426
381
  ["object-fill", { "object-fit": "fill" }],
427
382
  ["object-scale-down", { "object-fit": "scale-down" }],
428
383
  ["object-none", { "object-fit": "none" }],
429
- ["object-center", { "object-position": "center" }],
430
- ["object-bottom", { "object-position": "bottom" }],
431
- ["object-top", { "object-position": "top" }],
432
- ["object-right", { "object-position": "right" }],
433
- ["object-left", { "object-position": "left" }],
434
- ["object-lb", { "object-position": "left bottom" }],
435
- ["object-lt", { "object-position": "left top" }],
436
- ["object-rb", { "object-position": "right bottom" }],
437
- ["object-rt", { "object-position": "right top" }],
438
- ["object-cb", { "object-position": "center bottom" }],
439
- ["object-ct", { "object-position": "center top" }]
384
+ [/^object-([-\w]+)$/, ([, s]) => ({ "object-position": utils.positionMap[s] })]
385
+ ];
386
+ const backgroundBlendModes = [
387
+ ["bg-blend-multiply", { "background-blend-mode": "multiply" }],
388
+ ["bg-blend-screen", { "background-blend-mode": "screen" }],
389
+ ["bg-blend-overlay", { "background-blend-mode": "overlay" }],
390
+ ["bg-blend-darken", { "background-blend-mode": "darken" }],
391
+ ["bg-blend-lighten", { "background-blend-mode": "lighten" }],
392
+ ["bg-blend-color-dodge", { "background-blend-mode": "color-dodge" }],
393
+ ["bg-blend-color-burn", { "background-blend-mode": "color-burn" }],
394
+ ["bg-blend-hard-light", { "background-blend-mode": "hard-light" }],
395
+ ["bg-blend-soft-light", { "background-blend-mode": "soft-light" }],
396
+ ["bg-blend-difference", { "background-blend-mode": "difference" }],
397
+ ["bg-blend-exclusion", { "background-blend-mode": "exclusion" }],
398
+ ["bg-blend-hue", { "background-blend-mode": "hue" }],
399
+ ["bg-blend-saturation", { "background-blend-mode": "saturation" }],
400
+ ["bg-blend-color", { "background-blend-mode": "color" }],
401
+ ["bg-blend-luminosity", { "background-blend-mode": "luminosity" }],
402
+ ["bg-blend-normal", { "background-blend-mode": "normal" }]
403
+ ];
404
+ const mixBlendModes = [
405
+ ["mix-blend-multiply", { "mix-blend-mode": "multiply" }],
406
+ ["mix-blend-screen", { "mix-blend-mode": "screen" }],
407
+ ["mix-blend-overlay", { "mix-blend-mode": "overlay" }],
408
+ ["mix-blend-darken", { "mix-blend-mode": "darken" }],
409
+ ["mix-blend-lighten", { "mix-blend-mode": "lighten" }],
410
+ ["mix-blend-color-dodge", { "mix-blend-mode": "color-dodge" }],
411
+ ["mix-blend-color-burn", { "mix-blend-mode": "color-burn" }],
412
+ ["mix-blend-hard-light", { "mix-blend-mode": "hard-light" }],
413
+ ["mix-blend-soft-light", { "mix-blend-mode": "soft-light" }],
414
+ ["mix-blend-difference", { "mix-blend-mode": "difference" }],
415
+ ["mix-blend-exclusion", { "mix-blend-mode": "exclusion" }],
416
+ ["mix-blend-hue", { "mix-blend-mode": "hue" }],
417
+ ["mix-blend-saturation", { "mix-blend-mode": "saturation" }],
418
+ ["mix-blend-color", { "mix-blend-mode": "color" }],
419
+ ["mix-blend-luminosity", { "mix-blend-mode": "luminosity" }],
420
+ ["mix-blend-normal", { "mix-blend-mode": "normal" }]
440
421
  ];
441
422
 
442
423
  const tables = [
@@ -482,25 +463,19 @@ const cssVariables = [[
482
463
  }
483
464
  ]];
484
465
 
485
- const divideColors = [
486
- [/^divide-(.+)$/, utils.colorResolver("border-color", "divide")],
487
- [/^divide-op(?:acity)?-?(.+)$/, ([, opacity]) => ({ "--un-divide-opacity": utils.handler.bracket.percent(opacity) })]
488
- ];
489
- const divideSizes = [
466
+ const divides = [
490
467
  [/^divide-?([xy])$/, handlerDivide],
491
468
  [/^divide-?([xy])-?(-?.+)$/, handlerDivide],
492
- [/^divide-?([xy])-reverse$/, ([, d]) => [[`--un-divide-${d}-reverse`, 1]]]
493
- ];
494
- const divideStyles = [
469
+ [/^divide-?([xy])-reverse$/, ([, d]) => ({ [`--un-divide-${d}-reverse`]: 1 })],
470
+ [/^divide-(.+)$/, utils.colorResolver("border-color", "divide")],
471
+ [/^divide-op(?:acity)?-?(.+)$/, ([, opacity]) => ({ "--un-divide-opacity": utils.handler.bracket.percent(opacity) })],
495
472
  ["divide-solid", { "border-style": "solid" }],
496
473
  ["divide-dashed", { "border-style": "dashed" }],
497
474
  ["divide-dotted", { "border-style": "dotted" }],
498
475
  ["divide-double", { "border-style": "double" }],
499
476
  ["divide-none", { "border-style": "none" }]
500
477
  ];
501
- const divides = [divideSizes, divideColors, divideStyles].flat(1);
502
- function handlerDivide([, a, b]) {
503
- const [d, s = "1"] = utils.directionMap[a] ? [a, b] : ["", a];
478
+ function handlerDivide([, d, s = "1"]) {
504
479
  const v = utils.handler.bracket.px(s);
505
480
  if (v != null) {
506
481
  const results = utils.directionMap[d].map((item) => {
@@ -534,7 +509,7 @@ const fontVariantNumericBase = {
534
509
  "--un-numeric-spacing": rules$1.varEmpty,
535
510
  "--un-numeric-fraction": rules$1.varEmpty,
536
511
  "font-variant-numeric": "var(--un-ordinal) var(--un-slashed-zero) var(--un-numeric-figure) var(--un-numeric-spacing) var(--un-numeric-fraction)",
537
- [variants$1.CONTROL_BYPASS_PSEUDO_CLASS]: ""
512
+ [variants.CONTROL_BYPASS_PSEUDO_CLASS]: ""
538
513
  };
539
514
  const fontVariantNumeric = [
540
515
  [/^ordinal$/, () => [fontVariantNumericBase, { "--un-ordinal": "ordinal" }]],
@@ -553,7 +528,7 @@ const touchActionBase = {
553
528
  "--un-pan-y": rules$1.varEmpty,
554
529
  "--un-pinch-zoom": rules$1.varEmpty,
555
530
  "--un-touch-action": "var(--un-pan-x) var(--un-pan-y) var(--un-pinch-zoom)",
556
- [variants$1.CONTROL_BYPASS_PSEUDO_CLASS]: ""
531
+ [variants.CONTROL_BYPASS_PSEUDO_CLASS]: ""
557
532
  };
558
533
  const touchActions = [
559
534
  [/^touch-pan-(x|left|right)$/, ([, d]) => [
@@ -583,10 +558,10 @@ const touchActions = [
583
558
  ];
584
559
 
585
560
  const scrolls = [
586
- [/^snap-(x|y|base)$/, ([, d]) => [
561
+ [/^snap-(x|y|both)$/, ([, d]) => [
587
562
  {
588
563
  "--un-scroll-snap-strictness": "proximity",
589
- [variants$1.CONTROL_BYPASS_PSEUDO_CLASS]: ""
564
+ [variants.CONTROL_BYPASS_PSEUDO_CLASS]: ""
590
565
  },
591
566
  {
592
567
  "scroll-snap-type": `${d} var(--un-scroll-snap-strictness)`
@@ -609,6 +584,11 @@ const scrolls = [
609
584
  [/^scroll-p-?([rltb])-?(-?.+)$/, utils.directionSize("scroll-padding")]
610
585
  ];
611
586
 
587
+ const placeholders = [
588
+ [/^\$-placeholder-(.+)$/, utils.colorResolver("color", "placeholder")],
589
+ [/^\$-placeholder-op(?:acity)?-?(.+)$/, ([, opacity]) => ({ "--un-placeholder-opacity": utils.handler.bracket.percent.cssvar(opacity) })]
590
+ ];
591
+
612
592
  const rules = [
613
593
  rules$1.cssVariables,
614
594
  cssVariables,
@@ -655,7 +635,6 @@ const rules = [
655
635
  rules$1.breaks,
656
636
  rules$1.borders,
657
637
  rules$1.bgColors,
658
- boxDecorationBreaks,
659
638
  backgroundStyles,
660
639
  rules$1.svgUtilities,
661
640
  objectPositions,
@@ -676,11 +655,10 @@ const rules = [
676
655
  hyphens,
677
656
  writingModes,
678
657
  writingOrientations,
679
- caretColors,
680
- caretOpacity,
681
- accentColors,
682
- accentOpacity,
658
+ carets,
659
+ accents,
683
660
  rules$1.opacity,
661
+ backgroundBlendModes,
684
662
  mixBlendModes,
685
663
  rules$1.boxShadows,
686
664
  rules$1.outline,
@@ -690,6 +668,7 @@ const rules = [
690
668
  rules$1.transitions,
691
669
  rules$1.willChange,
692
670
  rules$1.contents,
671
+ placeholders,
693
672
  rules$1.questionMark
694
673
  ].flat(1);
695
674
 
@@ -854,13 +833,37 @@ const variantColorsScheme = [
854
833
  utils.variantParentMatcher("@light", "@media (prefers-color-scheme: light)")
855
834
  ];
856
835
 
857
- const variantFilePseudoElement = utils.variantMatcher("file", (input) => `${input}::file-selector-button`);
836
+ const variantSpaceAndDivide = (matcher) => {
837
+ if (/^space-?([xy])-?(-?.+)$/.test(matcher) || /^divide-/.test(matcher)) {
838
+ return {
839
+ matcher,
840
+ selector: (input) => {
841
+ return `${input}>:not([hidden])~:not([hidden])`;
842
+ }
843
+ };
844
+ }
845
+ };
858
846
 
859
- const variants = [
860
- ...variants$1.variants,
861
- variantFilePseudoElement,
862
- ...variantColorsScheme
863
- ];
847
+ const placeholderModifier = (input, { theme }) => {
848
+ const m = input.match(/^(.*)\b(placeholder-)(.+?)$/);
849
+ if (m) {
850
+ const [, pre = "", p, body] = m;
851
+ if (hasColorValue(body, theme) || hasOpacityValue(body)) {
852
+ return {
853
+ matcher: `${pre}${p}$-placeholder-${body}`
854
+ };
855
+ }
856
+ }
857
+ };
858
+ function hasColorValue(body, theme) {
859
+ return !!utils.parseColor(body, theme)?.color;
860
+ }
861
+ function hasOpacityValue(body) {
862
+ const match = body.match(/^op(?:acity)?-?(.+)$/);
863
+ if (match && match[1] != null)
864
+ return utils.handler.bracket.percent.cssvar(match[1]) != null;
865
+ return false;
866
+ }
864
867
 
865
868
  const presetWind = (options = {}) => {
866
869
  options.dark = options.dark ?? "class";
@@ -872,7 +875,12 @@ const presetWind = (options = {}) => {
872
875
  shortcuts: [
873
876
  ...containerShortcuts
874
877
  ],
875
- variants,
878
+ variants: [
879
+ placeholderModifier,
880
+ variantSpaceAndDivide,
881
+ ...variants.variants(options),
882
+ ...variantColorsScheme
883
+ ],
876
884
  options
877
885
  };
878
886
  };
package/dist/index.mjs CHANGED
@@ -1,11 +1,17 @@
1
+ import { CONTROL_BYPASS_PSEUDO_CLASS, variants } from '@unocss/preset-mini/variants';
1
2
  import { toArray } from '@unocss/core';
2
3
  import { theme as theme$1 } from '@unocss/preset-mini/theme';
3
4
  export { colors } from '@unocss/preset-mini';
4
5
  import { varEmpty, cssVariables as cssVariables$1, pointerEvents, appearances, positions, insets, zIndexes, orders, grids, floats, margins, boxSizing, displays, aspectRatio, sizes, flex, transforms, cursors, userSelects, resizes, appearance, placements, alignments, justifies, gaps, overflows, textOverflows, whitespaces, breaks, borders, bgColors, svgUtilities, paddings, textAligns, textIndents, verticalAligns, fonts, fontStyles, textColors, textDecorations, fontSmoothings, tabSizes, textStrokes, textShadows, opacity, boxShadows, outline, rings, transitions, willChange, contents, questionMark } from '@unocss/preset-mini/rules';
5
- import { handler, parseColor, colorResolver, directionSize, directionMap, variantMatcher, variantParentMatcher } from '@unocss/preset-mini/utils';
6
- import { CONTROL_BYPASS_PSEUDO_CLASS, variants as variants$1 } from '@unocss/preset-mini/variants';
6
+ import { handler, positionMap, parseColor, colorResolver, directionSize, directionMap, variantMatcher, variantParentMatcher } from '@unocss/preset-mini/utils';
7
7
 
8
8
  const animations = [
9
+ [/^keyframes-(.+)$/, ([, name], { theme, constructCSS }) => {
10
+ const kf = theme.animation?.keyframes?.[name];
11
+ if (kf)
12
+ return `@keyframes ${name}${kf}
13
+ ${constructCSS({ animation: `${name}` })}`;
14
+ }],
9
15
  [/^animate-(.+)$/, ([, name], { theme, constructCSS }) => {
10
16
  const kf = theme.animation?.keyframes?.[name];
11
17
  if (kf) {
@@ -16,15 +22,15 @@ const animations = [
16
22
  ${constructCSS(Object.assign({ animation: `${name} ${duration} ${timing} infinite` }, props))}`;
17
23
  }
18
24
  }],
19
- [/^animate(?:-duration)?-((.+)(?:(s|ms)?))$/, ([, d]) => ({ "animation-duration": handler.bracket.time(d.replace(/-duration/, "")) })],
20
- [/^animate-delay-((.+)(?:(s|ms)?))$/, ([, d]) => ({ "animation-delay": handler.bracket.time(d) })],
25
+ [/^animate-(?:duration-)?(.+)$/, ([, d]) => ({ "animation-duration": handler.bracket.time(d) })],
26
+ [/^animate-delay-(.+)$/, ([, d]) => ({ "animation-delay": handler.bracket.time(d) })],
21
27
  [/^animate-(?:fill-)?mode-(forwards|backwards|both|inherit|initial|revert|unset)$/, ([, d]) => ({ "animation-fill-mode": d })],
22
28
  ["animate-mode-none", { "animation-fill-mode": "none" }],
23
29
  ["animate-fill-mode-none", { "animation-fill-mode": "none" }],
24
30
  [/^animate-(?:direction-)?(reverse|alternate|alternate-reverse|inherit|initial|revert|unset)$/, ([, d]) => ({ "animation-direction": d })],
25
31
  ["animate-normal", { "animation-direction": "normal" }],
26
32
  ["animate-direction-normal", { "animation-direction": "normal" }],
27
- [/^animate-(?:iteration-)?count-(.+)$/, ([, d]) => ({ "animation-iteration-count": d.replace(/\-/g, ", ") })],
33
+ [/^animate-(?:iteration-)?count-(.+)$/, ([, d]) => ({ "animation-iteration-count": handler.bracket(d) ?? d.replace(/\-/g, ",") })],
28
34
  [/^animate-name-(.+)/, ([, d]) => ({ "animation-name": d })],
29
35
  [/^animate-play(?:-state)?-(paused|running|inherit|initial|revert|unset)$/, ([, d]) => ({ "animation-play-state": d })],
30
36
  ["animate-none", { animation: "none" }]
@@ -60,107 +66,64 @@ const bgGradientColorResolver = (mode) => ([, body], { theme }) => {
60
66
  };
61
67
  }
62
68
  };
63
- const bgGradientDirections = {
64
- t: "top",
65
- tr: "top right",
66
- r: "right",
67
- br: "bottom right",
68
- b: "bottom",
69
- bl: "bottom left",
70
- l: "left",
71
- tl: "top left"
72
- };
73
69
  const backgroundStyles = [
74
- ["bg-fixed", { "background-attachment": "fixed" }],
75
- ["bg-local", { "background-attachment": "local" }],
76
- ["bg-scroll", { "background-attachment": "scroll" }],
77
- ["bg-blend-multiply", { "background-blend-mode": "multiply" }],
78
- ["bg-blend-screen", { "background-blend-mode": "screen" }],
79
- ["bg-blend-overlay", { "background-blend-mode": "overlay" }],
80
- ["bg-blend-darken", { "background-blend-mode": "darken" }],
81
- ["bg-blend-lighten", { "background-blend-mode": "lighten" }],
82
- ["bg-blend-color-dodge", { "background-blend-mode": "color-dodge" }],
83
- ["bg-blend-color-burn", { "background-blend-mode": "color-burn" }],
84
- ["bg-blend-hard-light", { "background-blend-mode": "hard-light" }],
85
- ["bg-blend-soft-light", { "background-blend-mode": "soft-light" }],
86
- ["bg-blend-difference", { "background-blend-mode": "difference" }],
87
- ["bg-blend-exclusion", { "background-blend-mode": "exclusion" }],
88
- ["bg-blend-hue", { "background-blend-mode": "hue" }],
89
- ["bg-blend-saturation", { "background-blend-mode": "saturation" }],
90
- ["bg-blend-color", { "background-blend-mode": "color" }],
91
- ["bg-blend-luminosity", { "background-blend-mode": "luminosity" }],
92
- ["bg-blend-normal", { "background-blend-mode": "normal" }],
93
- ["bg-clip-border", { "-webkit-background-clip": "border-box", "background-attachment": "border-box" }],
94
- ["bg-clip-content", { "-webkit-background-clip": "content-box", "background-attachment": "content-box" }],
95
- ["bg-clip-padding", { "-webkit-background-clip": "padding-box", "background-attachment": "padding-box" }],
96
- ["bg-clip-text", { "-webkit-background-clip": "text", "background-attachment": "text" }],
97
70
  [/^(?:bg-gradient-)?from-(.+)$/, bgGradientColorResolver("from")],
98
71
  [/^(?:bg-gradient-)?to-(.+)$/, bgGradientColorResolver("to")],
99
72
  [/^(?:bg-gradient-)?via-(.+)$/, bgGradientColorResolver("via")],
100
73
  [/^(?:bg-gradient-)?from-op(?:acity)?-?(.+)$/, ([, opacity]) => ({ "--un-from-opacity": handler.bracket.percent(opacity) })],
101
74
  [/^(?:bg-gradient-)?to-op(?:acity)?-?(.+)$/, ([, opacity]) => ({ "--un-to-opacity": handler.bracket.percent(opacity) })],
102
75
  [/^(?:bg-gradient-)?via-op(?:acity)?-?(.+)$/, ([, opacity]) => ({ "--un-via-opacity": handler.bracket.percent(opacity) })],
103
- [/^bg-gradient-to-([trbl]{1,2})$/, ([, d]) => {
104
- const v = bgGradientDirections[d];
105
- if (v)
106
- return { "background-image": `linear-gradient(to ${v}, var(--un-gradient-stops))` };
76
+ [/^bg-gradient-to-([rltb]{1,2})$/, ([, d]) => {
77
+ if (d in positionMap)
78
+ return { "background-image": `linear-gradient(to ${positionMap[d]}, var(--un-gradient-stops))` };
107
79
  }],
108
80
  ["bg-none", { "background-image": "none" }],
109
- ["bg-origin-border", { "background-origin": "border-box" }],
110
- ["bg-origin-padding", { "background-origin": "padding-box" }],
111
- ["bg-origin-content", { "background-origin": "content-box" }],
112
- ["bg-bottom", { "background-position": "bottom" }],
113
- ["bg-center", { "background-position": "center" }],
114
- ["bg-left", { "background-position": "left" }],
115
- ["bg-left-bottom", { "background-position": "left bottom" }],
116
- ["bg-left-top", { "background-position": "left top" }],
117
- ["bg-right", { "background-position": "right" }],
118
- ["bg-right-bottom", { "background-position": "right bottom" }],
119
- ["bg-right-top", { "background-position": "right top" }],
120
- ["bg-top", { "background-position": "top" }],
81
+ ["box-decoration-slice", { "box-decoration-break": "slice" }],
82
+ ["box-decoration-clone", { "box-decoration-break": "clone" }],
83
+ ["bg-auto", { "background-size": "auto" }],
84
+ ["bg-cover", { "background-size": "cover" }],
85
+ ["bg-contain", { "background-size": "contain" }],
86
+ ["bg-fixed", { "background-attachment": "fixed" }],
87
+ ["bg-local", { "background-attachment": "local" }],
88
+ ["bg-scroll", { "background-attachment": "scroll" }],
89
+ ["bg-clip-border", { "-webkit-background-clip": "border-box", "background-attachment": "border-box" }],
90
+ ["bg-clip-content", { "-webkit-background-clip": "content-box", "background-attachment": "content-box" }],
91
+ ["bg-clip-padding", { "-webkit-background-clip": "padding-box", "background-attachment": "padding-box" }],
92
+ ["bg-clip-text", { "-webkit-background-clip": "text", "background-attachment": "text" }],
93
+ [/^bg-([-\w]{3,})$/, ([, s]) => ({ "background-position": positionMap[s] })],
121
94
  ["bg-repeat", { "background-repeat": "repeat" }],
122
95
  ["bg-no-repeat", { "background-repeat": "no-repeat" }],
123
96
  ["bg-repeat-x", { "background-position": "repeat-x" }],
124
97
  ["bg-repeat-y", { "background-position": "repeat-y" }],
125
98
  ["bg-repeat-round", { "background-position": "round" }],
126
99
  ["bg-repeat-space", { "background-position": "space" }],
127
- ["bg-auto", { "background-size": "auto" }],
128
- ["bg-cover", { "background-size": "cover" }],
129
- ["bg-contain", { "background-size": "contain" }]
100
+ ["bg-origin-border", { "background-origin": "border-box" }],
101
+ ["bg-origin-padding", { "background-origin": "padding-box" }],
102
+ ["bg-origin-content", { "background-origin": "content-box" }]
130
103
  ];
131
104
 
132
- const listStyleProps = ["disc", "circle", "square", "decimal", "zero-decimal", "greek", "roman", "upper-roman", "alpha", "upper-alpha"];
133
105
  const listStyle = [
134
- [new RegExp(`^list-((?:${listStyleProps.join("|")})(?:-outside|-inside)?)$`), ([, value]) => {
135
- const style = value.split(/-outside|-inside/)[0];
136
- const position = /outside|inside/.exec(value) ?? [];
137
- if (position.length) {
106
+ [/^list-(disc|circle|square|decimal|zero-decimal|greek|roman|upper-roman|alpha|upper-alpha)(?:-(outside|inside))?$/, ([, style, position]) => {
107
+ if (position != null) {
138
108
  return {
139
- "list-style-position": `${position[0]}`,
109
+ "list-style-position": position,
140
110
  "list-style-type": style
141
111
  };
142
112
  }
143
113
  return { "list-style-type": style };
144
114
  }],
145
- [/^list-(outside|inside)$/, ([, value]) => ({ "list-style-position": value })],
115
+ ["list-outside", { "list-style-position": "outside" }],
116
+ ["list-inside", { "list-style-position": "inside" }],
146
117
  ["list-none", { "list-style-type": "none" }]
147
118
  ];
148
- const boxDecorationBreaks = [
149
- ["decoration-slice", { "box-decoration-break": "slice" }],
150
- ["decoration-clone", { "box-decoration-break": "clone" }]
151
- ];
152
- const accentOpacity = [
119
+ const accents = [
120
+ [/^accent-(.+)$/, colorResolver("accent-color", "accent")],
153
121
  [/^accent-op(?:acity)?-?(.+)$/, ([, d]) => ({ "--un-accent-opacity": handler.bracket.percent(d) })]
154
122
  ];
155
- const accentColors = [
156
- [/^accent-(.+)$/, colorResolver("accent-color", "accent")]
157
- ];
158
- const caretOpacity = [
123
+ const carets = [
124
+ [/^caret-(.+)$/, colorResolver("caret-color", "caret")],
159
125
  [/^caret-op(?:acity)?-?(.+)$/, ([, d]) => ({ "--un-caret-opacity": handler.bracket.percent(d) })]
160
126
  ];
161
- const caretColors = [
162
- [/^caret-(.+)$/, colorResolver("caret-color", "caret")]
163
- ];
164
127
  const imageRenderings = [
165
128
  ["image-render-auto", { "image-rendering": "auto" }],
166
129
  ["image-render-edge", { "image-rendering": "crisp-edges" }],
@@ -172,18 +135,15 @@ const imageRenderings = [
172
135
  ["image-rendering", "pixelated"]
173
136
  ]]
174
137
  ];
175
- const overflowValues = [
176
- "auto",
177
- "hidden",
178
- "visible",
179
- "scroll",
180
- "contain"
181
- ];
182
138
  const overscrolls = [
183
- [/^overscroll-(.+)$/, ([, v]) => overflowValues.includes(v) ? { "overscroll-behavior": v } : void 0],
139
+ ["overscroll-auto", { "overscroll-behavior": "auto" }],
140
+ ["overscroll-contain", { "overscroll-behavior": "contain" }],
184
141
  ["overscroll-none", { "overscroll-behavior": "none" }],
185
- [/^overscroll-([xy])-(.+)$/, ([, d, v]) => overflowValues.includes(v) ? { [`overscroll-behavior-${d}`]: v } : void 0],
142
+ ["overscroll-x-auto", { "overscroll-behavior-x": "auto" }],
143
+ ["overscroll-x-contain", { "overscroll-behavior-x": "contain" }],
186
144
  ["overscroll-x-none", { "overscroll-behavior-x": "none" }],
145
+ ["overscroll-y-auto", { "overscroll-behavior-y": "auto" }],
146
+ ["overscroll-y-contain", { "overscroll-behavior-y": "contain" }],
187
147
  ["overscroll-y-none", { "overscroll-behavior-y": "none" }]
188
148
  ];
189
149
  const scrollBehaviors = [
@@ -249,21 +209,21 @@ const containerShortcuts = [
249
209
  }]
250
210
  ];
251
211
 
252
- const filterContnet = "var(--un-blur) var(--un-brightness) var(--un-contrast) var(--un-grayscale) var(--un-hue-rotate) var(--un-invert) var(--un-saturate) var(--un-sepia) var(--un-drop-shadow)";
212
+ const filterContnet = "var(--un-blur) var(--un-brightness) var(--un-contrast) var(--un-drop-shadow) var(--un-grayscale) var(--un-hue-rotate) var(--un-invert) var(--un-saturate) var(--un-sepia)";
253
213
  const filterBase = {
254
214
  "--un-blur": varEmpty,
255
215
  "--un-brightness": varEmpty,
256
216
  "--un-contrast": varEmpty,
217
+ "--un-drop-shadow": varEmpty,
257
218
  "--un-grayscale": varEmpty,
258
219
  "--un-hue-rotate": varEmpty,
259
220
  "--un-invert": varEmpty,
260
221
  "--un-saturate": varEmpty,
261
222
  "--un-sepia": varEmpty,
262
- "--un-drop-shadow": varEmpty,
263
223
  "filter": filterContnet,
264
224
  [CONTROL_BYPASS_PSEUDO_CLASS]: ""
265
225
  };
266
- const backdropFilterContent = "var(--un-backdrop-blur) var(--un-backdrop-brightness) var(--un-backdrop-contrast) var(--un-backdrop-grayscale) var(--un-backdrop-hue-rotate) var(--un-backdrop-invert) var(--un-backdrop-saturate) var(--un-backdrop-sepia)";
226
+ const backdropFilterContent = "var(--un-backdrop-blur) var(--un-backdrop-brightness) var(--un-backdrop-contrast) var(--un-backdrop-grayscale) var(--un-backdrop-hue-rotate) var(--un-backdrop-invert) var(--un-backdrop-opacity) var(--un-backdrop-saturate) var(--un-backdrop-sepia)";
267
227
  const backdropFilterBase = {
268
228
  "--un-backdrop-blur": varEmpty,
269
229
  "--un-backdrop-brightness": varEmpty,
@@ -271,19 +231,24 @@ const backdropFilterBase = {
271
231
  "--un-backdrop-grayscale": varEmpty,
272
232
  "--un-backdrop-hue-rotate": varEmpty,
273
233
  "--un-backdrop-invert": varEmpty,
234
+ "--un-backdrop-opacity": varEmpty,
274
235
  "--un-backdrop-saturate": varEmpty,
275
236
  "--un-backdrop-sepia": varEmpty,
276
237
  "-webkit-backdrop-filter": backdropFilterContent,
277
238
  "backdrop-filter": backdropFilterContent,
278
239
  [CONTROL_BYPASS_PSEUDO_CLASS]: ""
279
240
  };
280
- const percentWithDefault = (defaultValue = "1") => (str) => {
281
- const v = str ? handler.bracket.percent(str) : defaultValue;
282
- return v && parseFloat(v) <= 1 ? v : void 0;
241
+ const percentWithDefault = (str) => {
242
+ let v = handler.bracket(str || "");
243
+ if (v != null)
244
+ return v;
245
+ v = str ? handler.percent(str) : "1";
246
+ if (v != null && parseFloat(v) <= 1)
247
+ return v;
283
248
  };
284
249
  const toFilter = (varName, resolver) => ([, b, s], { theme }) => {
285
250
  const value = resolver(s, theme);
286
- if (value) {
251
+ if (value != null && value !== "") {
287
252
  return [
288
253
  b ? backdropFilterBase : filterBase,
289
254
  { [`--un-${b || ""}${varName}`]: `${varName}(${value})` }
@@ -294,49 +259,37 @@ const filters = [
294
259
  ["filter", filterBase],
295
260
  ["backdrop-filter", backdropFilterBase],
296
261
  [/^(backdrop-)?blur(?:-(.+))?$/, toFilter("blur", (s, theme) => theme.blur?.[s || "DEFAULT"] || handler.bracket.px(s))],
297
- [/^(backdrop-)?brightness-(\d+)$/, toFilter("brightness", (s) => handler.bracket.percent(s))],
298
- [/^(backdrop-)?contrast-(\d+)$/, toFilter("contrast", (s) => handler.bracket.percent(s))],
262
+ [/^(backdrop-)?brightness-(.+)$/, toFilter("brightness", (s) => handler.bracket.percent(s))],
263
+ [/^(backdrop-)?contrast-(.+)$/, toFilter("contrast", (s) => handler.bracket.percent(s))],
299
264
  [/^()?drop-shadow(?:-(.+))?$/, toFilter("drop-shadow", (s, theme) => {
300
- const v = handler.bracket(s) || theme.dropShadow?.[s || "DEFAULT"];
301
- if (v)
265
+ let v = theme.dropShadow?.[s || "DEFAULT"];
266
+ if (v != null)
302
267
  return toArray(v).map((v2) => `drop-shadow(${v2})`).join(" ");
268
+ v = handler.bracket(s);
269
+ if (v != null)
270
+ return `drop-shadow(${v})`;
303
271
  })],
304
- [/^(backdrop-)?grayscale(?:-(\d+))?$/, toFilter("grayscale", percentWithDefault())],
305
- [/^(backdrop-)?hue-rotate-(\d+)$/, toFilter("hue-rotate", (s) => `${handler.bracket.number(s)}deg`)],
306
- [/^(backdrop-)?invert(?:-(\d+))?$/, toFilter("invert", percentWithDefault())],
307
- [/^(backdrop-)?saturate(?:-(\d+))?$/, toFilter("saturate", percentWithDefault("0"))],
308
- [/^(backdrop-)?sepia(?:-(\d+))?$/, toFilter("sepia", percentWithDefault())],
272
+ [/^(backdrop-)?grayscale(?:-(.+))?$/, toFilter("grayscale", percentWithDefault)],
273
+ [/^(backdrop-)?hue-rotate-(.+)$/, toFilter("hue-rotate", (s) => handler.bracket.degree(s))],
274
+ [/^(backdrop-)?invert(?:-(.+))?$/, toFilter("invert", percentWithDefault)],
275
+ [/^(backdrop-)opacity-(.+)$/, toFilter("opacity", (s) => handler.bracket.percent(s))],
276
+ [/^(backdrop-)?saturate-(.+)$/, toFilter("saturate", (s) => handler.bracket.percent(s))],
277
+ [/^(backdrop-)?sepia(?:-(.+))?$/, toFilter("sepia", percentWithDefault)],
309
278
  ["filter-none", { filter: "none" }],
310
279
  ["backdrop-filter-none", {
311
280
  "-webkit-backdrop-filter": "none",
312
281
  "backdrop-filter": "none"
313
- }]
314
- ];
315
-
316
- const mixBlendModes = [
317
- ["mix-blend-multiply", { "mix-blend-mode": "multiply" }],
318
- ["mix-blend-screen", { "mix-blend-mode": "screen" }],
319
- ["mix-blend-overlay", { "mix-blend-mode": "overlay" }],
320
- ["mix-blend-darken", { "mix-blend-mode": "darken" }],
321
- ["mix-blend-lighten", { "mix-blend-mode": "lighten" }],
322
- ["mix-blend-color-dodge", { "mix-blend-mode": "color-dodge" }],
323
- ["mix-blend-color-burn", { "mix-blend-mode": "color-burn" }],
324
- ["mix-blend-color-light", { "mix-blend-mode": "color-light" }],
325
- ["mix-blend-soft-light", { "mix-blend-mode": "soft-light" }],
326
- ["mix-blend-difference", { "mix-blend-mode": "difference" }],
327
- ["mix-blend-exclusion", { "mix-blend-mode": "exclusion" }],
328
- ["mix-blend-hue", { "mix-blend-mode": "hue" }],
329
- ["mix-blend-saturation", { "mix-blend-mode": "saturation" }],
330
- ["mix-blend-color", { "mix-blend-mode": "color" }],
331
- ["mix-blend-luminosity", { "mix-blend-mode": "luminosity" }],
332
- ["mix-blend-normal", { "mix-blend-mode": "normal" }]
282
+ }],
283
+ [/^(blur|brightness|contrast|drop-shadow|grayscale|hue-rotate|invert|saturate|sepia)-none$/, ([, s]) => ({ filter: `${s}(0)` })],
284
+ [/^backdrop-(blur|brightness|contrast|grayscale|hue-rotate|invert|opacity|saturate|sepia)-none$/, ([, s]) => ({
285
+ "-webkit-backdrop-filter": `${s}(0)`,
286
+ "backdrop-filter": `${s}(0)`
287
+ })]
333
288
  ];
334
289
 
335
290
  const spaces = [
336
291
  [/^space-?([xy])-?(-?.+)$/, (match) => {
337
- const [, direction, size] = match;
338
- if (size === "reverse")
339
- return { [`--un-space-${direction}-reverse`]: 1 };
292
+ const [, direction] = match;
340
293
  const results = directionSize("margin")(match)?.map((item) => {
341
294
  const value = item[0].endsWith("right") || item[0].endsWith("bottom") ? `calc(${item[1]} * var(--un-space-${direction}-reverse))` : `calc(${item[1]} * calc(1 - var(--un-space-${direction}-reverse)))`;
342
295
  return [item[0], value];
@@ -347,7 +300,8 @@ const spaces = [
347
300
  ...results
348
301
  ];
349
302
  }
350
- }]
303
+ }],
304
+ [/^space-?([xy])-reverse$/, ([, d]) => ({ [`--un-space-${d}-reverse`]: 1 })]
351
305
  ];
352
306
 
353
307
  const textTransforms = [
@@ -414,7 +368,8 @@ const screenReadersAccess = [
414
368
  ];
415
369
  const isolations = [
416
370
  ["isolate", { isolation: "isolate" }],
417
- ["isolate-auto", { isolation: "auto" }]
371
+ ["isolate-auto", { isolation: "auto" }],
372
+ ["isolation-auto", { isolation: "auto" }]
418
373
  ];
419
374
  const objectPositions = [
420
375
  ["object-cover", { "object-fit": "cover" }],
@@ -422,17 +377,43 @@ const objectPositions = [
422
377
  ["object-fill", { "object-fit": "fill" }],
423
378
  ["object-scale-down", { "object-fit": "scale-down" }],
424
379
  ["object-none", { "object-fit": "none" }],
425
- ["object-center", { "object-position": "center" }],
426
- ["object-bottom", { "object-position": "bottom" }],
427
- ["object-top", { "object-position": "top" }],
428
- ["object-right", { "object-position": "right" }],
429
- ["object-left", { "object-position": "left" }],
430
- ["object-lb", { "object-position": "left bottom" }],
431
- ["object-lt", { "object-position": "left top" }],
432
- ["object-rb", { "object-position": "right bottom" }],
433
- ["object-rt", { "object-position": "right top" }],
434
- ["object-cb", { "object-position": "center bottom" }],
435
- ["object-ct", { "object-position": "center top" }]
380
+ [/^object-([-\w]+)$/, ([, s]) => ({ "object-position": positionMap[s] })]
381
+ ];
382
+ const backgroundBlendModes = [
383
+ ["bg-blend-multiply", { "background-blend-mode": "multiply" }],
384
+ ["bg-blend-screen", { "background-blend-mode": "screen" }],
385
+ ["bg-blend-overlay", { "background-blend-mode": "overlay" }],
386
+ ["bg-blend-darken", { "background-blend-mode": "darken" }],
387
+ ["bg-blend-lighten", { "background-blend-mode": "lighten" }],
388
+ ["bg-blend-color-dodge", { "background-blend-mode": "color-dodge" }],
389
+ ["bg-blend-color-burn", { "background-blend-mode": "color-burn" }],
390
+ ["bg-blend-hard-light", { "background-blend-mode": "hard-light" }],
391
+ ["bg-blend-soft-light", { "background-blend-mode": "soft-light" }],
392
+ ["bg-blend-difference", { "background-blend-mode": "difference" }],
393
+ ["bg-blend-exclusion", { "background-blend-mode": "exclusion" }],
394
+ ["bg-blend-hue", { "background-blend-mode": "hue" }],
395
+ ["bg-blend-saturation", { "background-blend-mode": "saturation" }],
396
+ ["bg-blend-color", { "background-blend-mode": "color" }],
397
+ ["bg-blend-luminosity", { "background-blend-mode": "luminosity" }],
398
+ ["bg-blend-normal", { "background-blend-mode": "normal" }]
399
+ ];
400
+ const mixBlendModes = [
401
+ ["mix-blend-multiply", { "mix-blend-mode": "multiply" }],
402
+ ["mix-blend-screen", { "mix-blend-mode": "screen" }],
403
+ ["mix-blend-overlay", { "mix-blend-mode": "overlay" }],
404
+ ["mix-blend-darken", { "mix-blend-mode": "darken" }],
405
+ ["mix-blend-lighten", { "mix-blend-mode": "lighten" }],
406
+ ["mix-blend-color-dodge", { "mix-blend-mode": "color-dodge" }],
407
+ ["mix-blend-color-burn", { "mix-blend-mode": "color-burn" }],
408
+ ["mix-blend-hard-light", { "mix-blend-mode": "hard-light" }],
409
+ ["mix-blend-soft-light", { "mix-blend-mode": "soft-light" }],
410
+ ["mix-blend-difference", { "mix-blend-mode": "difference" }],
411
+ ["mix-blend-exclusion", { "mix-blend-mode": "exclusion" }],
412
+ ["mix-blend-hue", { "mix-blend-mode": "hue" }],
413
+ ["mix-blend-saturation", { "mix-blend-mode": "saturation" }],
414
+ ["mix-blend-color", { "mix-blend-mode": "color" }],
415
+ ["mix-blend-luminosity", { "mix-blend-mode": "luminosity" }],
416
+ ["mix-blend-normal", { "mix-blend-mode": "normal" }]
436
417
  ];
437
418
 
438
419
  const tables = [
@@ -478,25 +459,19 @@ const cssVariables = [[
478
459
  }
479
460
  ]];
480
461
 
481
- const divideColors = [
482
- [/^divide-(.+)$/, colorResolver("border-color", "divide")],
483
- [/^divide-op(?:acity)?-?(.+)$/, ([, opacity]) => ({ "--un-divide-opacity": handler.bracket.percent(opacity) })]
484
- ];
485
- const divideSizes = [
462
+ const divides = [
486
463
  [/^divide-?([xy])$/, handlerDivide],
487
464
  [/^divide-?([xy])-?(-?.+)$/, handlerDivide],
488
- [/^divide-?([xy])-reverse$/, ([, d]) => [[`--un-divide-${d}-reverse`, 1]]]
489
- ];
490
- const divideStyles = [
465
+ [/^divide-?([xy])-reverse$/, ([, d]) => ({ [`--un-divide-${d}-reverse`]: 1 })],
466
+ [/^divide-(.+)$/, colorResolver("border-color", "divide")],
467
+ [/^divide-op(?:acity)?-?(.+)$/, ([, opacity]) => ({ "--un-divide-opacity": handler.bracket.percent(opacity) })],
491
468
  ["divide-solid", { "border-style": "solid" }],
492
469
  ["divide-dashed", { "border-style": "dashed" }],
493
470
  ["divide-dotted", { "border-style": "dotted" }],
494
471
  ["divide-double", { "border-style": "double" }],
495
472
  ["divide-none", { "border-style": "none" }]
496
473
  ];
497
- const divides = [divideSizes, divideColors, divideStyles].flat(1);
498
- function handlerDivide([, a, b]) {
499
- const [d, s = "1"] = directionMap[a] ? [a, b] : ["", a];
474
+ function handlerDivide([, d, s = "1"]) {
500
475
  const v = handler.bracket.px(s);
501
476
  if (v != null) {
502
477
  const results = directionMap[d].map((item) => {
@@ -579,7 +554,7 @@ const touchActions = [
579
554
  ];
580
555
 
581
556
  const scrolls = [
582
- [/^snap-(x|y|base)$/, ([, d]) => [
557
+ [/^snap-(x|y|both)$/, ([, d]) => [
583
558
  {
584
559
  "--un-scroll-snap-strictness": "proximity",
585
560
  [CONTROL_BYPASS_PSEUDO_CLASS]: ""
@@ -605,6 +580,11 @@ const scrolls = [
605
580
  [/^scroll-p-?([rltb])-?(-?.+)$/, directionSize("scroll-padding")]
606
581
  ];
607
582
 
583
+ const placeholders = [
584
+ [/^\$-placeholder-(.+)$/, colorResolver("color", "placeholder")],
585
+ [/^\$-placeholder-op(?:acity)?-?(.+)$/, ([, opacity]) => ({ "--un-placeholder-opacity": handler.bracket.percent.cssvar(opacity) })]
586
+ ];
587
+
608
588
  const rules = [
609
589
  cssVariables$1,
610
590
  cssVariables,
@@ -651,7 +631,6 @@ const rules = [
651
631
  breaks,
652
632
  borders,
653
633
  bgColors,
654
- boxDecorationBreaks,
655
634
  backgroundStyles,
656
635
  svgUtilities,
657
636
  objectPositions,
@@ -672,11 +651,10 @@ const rules = [
672
651
  hyphens,
673
652
  writingModes,
674
653
  writingOrientations,
675
- caretColors,
676
- caretOpacity,
677
- accentColors,
678
- accentOpacity,
654
+ carets,
655
+ accents,
679
656
  opacity,
657
+ backgroundBlendModes,
680
658
  mixBlendModes,
681
659
  boxShadows,
682
660
  outline,
@@ -686,6 +664,7 @@ const rules = [
686
664
  transitions,
687
665
  willChange,
688
666
  contents,
667
+ placeholders,
689
668
  questionMark
690
669
  ].flat(1);
691
670
 
@@ -850,13 +829,37 @@ const variantColorsScheme = [
850
829
  variantParentMatcher("@light", "@media (prefers-color-scheme: light)")
851
830
  ];
852
831
 
853
- const variantFilePseudoElement = variantMatcher("file", (input) => `${input}::file-selector-button`);
832
+ const variantSpaceAndDivide = (matcher) => {
833
+ if (/^space-?([xy])-?(-?.+)$/.test(matcher) || /^divide-/.test(matcher)) {
834
+ return {
835
+ matcher,
836
+ selector: (input) => {
837
+ return `${input}>:not([hidden])~:not([hidden])`;
838
+ }
839
+ };
840
+ }
841
+ };
854
842
 
855
- const variants = [
856
- ...variants$1,
857
- variantFilePseudoElement,
858
- ...variantColorsScheme
859
- ];
843
+ const placeholderModifier = (input, { theme }) => {
844
+ const m = input.match(/^(.*)\b(placeholder-)(.+?)$/);
845
+ if (m) {
846
+ const [, pre = "", p, body] = m;
847
+ if (hasColorValue(body, theme) || hasOpacityValue(body)) {
848
+ return {
849
+ matcher: `${pre}${p}$-placeholder-${body}`
850
+ };
851
+ }
852
+ }
853
+ };
854
+ function hasColorValue(body, theme) {
855
+ return !!parseColor(body, theme)?.color;
856
+ }
857
+ function hasOpacityValue(body) {
858
+ const match = body.match(/^op(?:acity)?-?(.+)$/);
859
+ if (match && match[1] != null)
860
+ return handler.bracket.percent.cssvar(match[1]) != null;
861
+ return false;
862
+ }
860
863
 
861
864
  const presetWind = (options = {}) => {
862
865
  options.dark = options.dark ?? "class";
@@ -868,7 +871,12 @@ const presetWind = (options = {}) => {
868
871
  shortcuts: [
869
872
  ...containerShortcuts
870
873
  ],
871
- variants,
874
+ variants: [
875
+ placeholderModifier,
876
+ variantSpaceAndDivide,
877
+ ...variants(options),
878
+ ...variantColorsScheme
879
+ ],
872
880
  options
873
881
  };
874
882
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unocss/preset-wind",
3
- "version": "0.20.2",
3
+ "version": "0.21.2",
4
4
  "description": "Tailwind / Windi CSS compact preset for UnoCSS",
5
5
  "keywords": [
6
6
  "unocss",
@@ -35,8 +35,8 @@
35
35
  "*.css"
36
36
  ],
37
37
  "dependencies": {
38
- "@unocss/core": "0.20.2",
39
- "@unocss/preset-mini": "0.20.2"
38
+ "@unocss/core": "0.21.2",
39
+ "@unocss/preset-mini": "0.21.2"
40
40
  },
41
41
  "scripts": {
42
42
  "build": "unbuild",