diff --git a/packages/preset-mini/src/variants/misc.ts b/packages/preset-mini/src/variants/misc.ts index b0591de95d..8cb7565291 100644 --- a/packages/preset-mini/src/variants/misc.ts +++ b/packages/preset-mini/src/variants/misc.ts @@ -77,7 +77,7 @@ const numberRE = /[0-9.]+(?:[a-z]+|%)?/ export const variantNegative: Variant = { name: 'negative', match(matcher) { - if (!matcher.startsWith('-') || !matcher.match(/\d|-px|-full/)) + if (!matcher.startsWith('-')) return return { diff --git a/test/__snapshots__/preset-mini.test.ts.snap b/test/__snapshots__/preset-mini.test.ts.snap index 30be3f20ca..f1db27c981 100644 --- a/test/__snapshots__/preset-mini.test.ts.snap +++ b/test/__snapshots__/preset-mini.test.ts.snap @@ -7,6 +7,15 @@ exports[`preset-mini > custom var prefix 1`] = ` .scale-100{--hi-scale-x:1;--hi-scale-y:1;transform:var(--hi-transform);}" `; +exports[`preset-mini > stray targets 1`] = ` +"/* layer: preflights */ +*,::before,::after{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-transform:translateX(var(--un-translate-x)) translateY(var(--un-translate-y)) translateZ(var(--un-translate-z)) rotate(var(--un-rotate)) rotateX(var(--un-rotate-x)) rotateY(var(--un-rotate-y)) rotateZ(var(--un-rotate-z)) skewX(var(--un-skew-x)) skewY(var(--un-skew-y)) scaleX(var(--un-scale-x)) scaleY(var(--un-scale-y)) scaleZ(var(--un-scale-z));--un-ring-offset-shadow:0 0 #0000;--un-ring-shadow:0 0 #0000;--un-shadow-inset:var(--un-empty,/*!*/ /*!*/);--un-shadow:0 0 #0000;--un-ring-inset:var(--un-empty,/*!*/ /*!*/);--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgba(147,197,253,0.5);} +/* layer: default */ +.-border-solid{border-style:solid;} +.-decoration-none{text-decoration:none;} +.-color-blue-400{--un-text-opacity:-1;color:rgba(-96,165,250,var(--un-text-opacity));}" +`; + exports[`preset-mini > targets 1`] = ` "/* layer: preflights */ *,::before,::after{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-transform:translateX(var(--un-translate-x)) translateY(var(--un-translate-y)) translateZ(var(--un-translate-z)) rotate(var(--un-rotate)) rotateX(var(--un-rotate-x)) rotateY(var(--un-rotate-y)) rotateZ(var(--un-rotate-z)) skewX(var(--un-skew-x)) skewY(var(--un-skew-y)) scaleX(var(--un-scale-x)) scaleY(var(--un-scale-y)) scaleZ(var(--un-scale-z));--un-ring-offset-shadow:0 0 #0000;--un-ring-shadow:0 0 #0000;--un-shadow-inset:var(--un-empty,/*!*/ /*!*/);--un-shadow:0 0 #0000;--un-ring-inset:var(--un-empty,/*!*/ /*!*/);--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgba(147,197,253,0.5);} @@ -65,6 +74,7 @@ div:hover .group-\\\\[div\\\\:hover\\\\]-\\\\[combinator\\\\:test-4\\\\]{combina .pis{padding-inline-start:1rem;} .pbs-\\\\$title2{padding-block-start:var(--title2);} .pis-10px{padding-inline-start:10px;} +.-m-lg{margin:-1.125rem;} .\\\\!m-\\\\$c-m{margin:var(--c-m) !important;} .all\\\\:m-auto *, .children\\\\:m-auto>*, diff --git a/test/assets/preset-mini-targets.ts b/test/assets/preset-mini-targets.ts index a31c8af1e7..7459b8c30c 100644 --- a/test/assets/preset-mini-targets.ts +++ b/test/assets/preset-mini-targets.ts @@ -500,6 +500,7 @@ export const presetMiniTargets: string[] = [ 'mbs', 'mxy', 'm-xy', + '-m-lg', // static 'contents', @@ -863,3 +864,10 @@ export const presetMiniTargets: string[] = [ 'parent-hover:text-center', 'previous-checked:bg-red-500', ] + +export const presetMiniStrayTargets: string[] = [ + // variants - negative + '-border-solid', + '-color-blue-400', + '-decoration-none', +] diff --git a/test/assets/preset-wind-targets.ts b/test/assets/preset-wind-targets.ts index a4331b0e45..7305b294b1 100644 --- a/test/assets/preset-wind-targets.ts +++ b/test/assets/preset-wind-targets.ts @@ -365,5 +365,4 @@ export const presetWindTargets: string[] = [ export const presetWindNonTargets: string[] = [ '[outline~="active\:none"]', '[i~="dark\:carbon-moon"]', - '-border-solid', ] diff --git a/test/preset-mini.test.ts b/test/preset-mini.test.ts index 9ac33a9d93..344dcffa80 100644 --- a/test/preset-mini.test.ts +++ b/test/preset-mini.test.ts @@ -1,7 +1,7 @@ import { createGenerator, escapeSelector } from '@unocss/core' import presetMini from '@unocss/preset-mini' import { describe, expect, test } from 'vitest' -import { presetMiniTargets } from './assets/preset-mini-targets' +import { presetMiniStrayTargets, presetMiniTargets } from './assets/preset-mini-targets' import { presetWindTargets } from './assets/preset-wind-targets' const uno = createGenerator({ @@ -61,4 +61,19 @@ describe('preset-mini', () => { expect(css).toMatchSnapshot() }) + + test('stray targets', async () => { + const code = presetMiniStrayTargets.join(' ') + const { css } = await uno.generate(code) + const { css: css2 } = await uno.generate(code) + + const unmatched = [] + for (const i of presetMiniStrayTargets) { + if (!css.includes(escapeSelector(i))) + unmatched.push(i) + } + expect(unmatched).toEqual([]) + expect(css).toMatchSnapshot() + expect(css).toEqual(css2) + }) })