From a255a61ae7b956f14acbd289847b2821bc7cf52e Mon Sep 17 00:00:00 2001 From: Saya Date: Sun, 26 Jun 2022 17:08:33 +0800 Subject: [PATCH 1/3] feat(preset-mini,preset-wind): add global keywords --- packages/preset-mini/src/rules/align.ts | 3 +- packages/preset-mini/src/rules/behaviors.ts | 4 +- packages/preset-mini/src/rules/border.ts | 4 +- packages/preset-mini/src/rules/decoration.ts | 4 +- packages/preset-mini/src/rules/gap.ts | 2 +- packages/preset-mini/src/rules/layout.ts | 2 + packages/preset-mini/src/rules/position.ts | 19 ++++- packages/preset-mini/src/rules/size.ts | 4 +- packages/preset-mini/src/rules/static.ts | 17 ++++- packages/preset-mini/src/rules/transform.ts | 3 +- packages/preset-mini/src/rules/transition.ts | 14 +++- packages/preset-mini/src/rules/typography.ts | 4 +- packages/preset-mini/src/utils/utilities.ts | 11 ++- packages/preset-wind/src/rules/background.ts | 9 ++- packages/preset-wind/src/rules/behaviors.ts | 15 ++-- packages/preset-wind/src/rules/columns.ts | 5 +- packages/preset-wind/src/rules/filters.ts | 8 +- packages/preset-wind/src/rules/static.ts | 26 +++---- .../preset-wind/src/rules/touch-actions.ts | 2 + test/__snapshots__/autocomplete.test.ts.snap | 14 ++-- test/__snapshots__/preset-mini.test.ts.snap | 71 ++++++++++++++++++ test/__snapshots__/preset-wind.test.ts.snap | 20 +++++ test/assets/preset-mini-targets.ts | 73 ++++++++++++++++++- test/assets/preset-wind-targets.ts | 20 +++++ test/preset-uno.test.ts | 2 - 25 files changed, 290 insertions(+), 66 deletions(-) diff --git a/packages/preset-mini/src/rules/align.ts b/packages/preset-mini/src/rules/align.ts index e540e2a245..6fba150fc2 100644 --- a/packages/preset-mini/src/rules/align.ts +++ b/packages/preset-mini/src/rules/align.ts @@ -13,10 +13,11 @@ const verticalAlignAlias: Record = { 'text-bottom': 'text-bottom', 'sub': 'sub', 'super': 'super', + ...Object.fromEntries(globalKeywords.map(x => [x, x])), } export const verticalAligns: Rule[] = [ - [/^(?:vertical|align|v)-(.+)$/, ([, v]) => ({ 'vertical-align': verticalAlignAlias[v] }), { autocomplete: `(vertical|align|v)-(${Object.keys(verticalAlignAlias).join('|')})` }], + [/^(?:vertical|align|v)-([-\w]+)$/, ([, v]) => ({ 'vertical-align': verticalAlignAlias[v] }), { autocomplete: `(vertical|align|v)-(${Object.keys(verticalAlignAlias).join('|')})` }], ] export const textAligns: Rule[] = ['center', 'left', 'right', 'justify', 'start', 'end', ...globalKeywords].map(v => [`text-${v}`, { 'text-align': v }]) diff --git a/packages/preset-mini/src/rules/behaviors.ts b/packages/preset-mini/src/rules/behaviors.ts index 511fe2d582..c28b6e0eca 100644 --- a/packages/preset-mini/src/rules/behaviors.ts +++ b/packages/preset-mini/src/rules/behaviors.ts @@ -4,13 +4,13 @@ import { colorResolver, globalKeywords, handler as h } from '../utils' export const outline: Rule[] = [ // size - [/^outline-(?:width-|size-)?(.+)$/, ([, d], { theme }) => ({ 'outline-width': theme.lineWidth?.[d] ?? h.bracket.cssvar.px(d) }), { autocomplete: 'outline-(width|size)-' }], + [/^outline-(?:width-|size-)?(.+)$/, ([, d], { theme }) => ({ 'outline-width': theme.lineWidth?.[d] ?? h.bracket.cssvar.global.px(d) }), { autocomplete: 'outline-(width|size)-' }], // color [/^outline-(?:color-)?(.+)$/, colorResolver('outline-color', 'outline-color'), { autocomplete: 'outline-$colors' }], // offset - [/^outline-offset-(.+)$/, ([, d], { theme }) => ({ 'outline-offset': theme.lineWidth?.[d] ?? h.bracket.cssvar.px(d) }), { autocomplete: 'outline-(offset)-' }], + [/^outline-offset-(.+)$/, ([, d], { theme }) => ({ 'outline-offset': theme.lineWidth?.[d] ?? h.bracket.cssvar.global.px(d) }), { autocomplete: 'outline-(offset)-' }], // style ['outline', { 'outline-style': 'solid' }], diff --git a/packages/preset-mini/src/rules/border.ts b/packages/preset-mini/src/rules/border.ts index afad7bbaa8..add509a888 100644 --- a/packages/preset-mini/src/rules/border.ts +++ b/packages/preset-mini/src/rules/border.ts @@ -96,7 +96,7 @@ function handlerBorder(m: string[], ctx: RuleContext): CSSEntries | undefined { } function handlerBorderSize([, a = '', b]: string[], { theme }: RuleContext): CSSEntries | undefined { - const v = theme.lineWidth?.[b || 'DEFAULT'] ?? h.bracket.cssvar.px(b || '1') + const v = theme.lineWidth?.[b || 'DEFAULT'] ?? h.bracket.cssvar.global.px(b || '1') if (a in directionMap && v != null) return directionMap[a].map(i => [`border${i}-width`, v]) } @@ -117,7 +117,7 @@ function handlerBorderOpacity([, a = '', opacity]: string[]): CSSEntries | undef } function handlerRounded([, a = '', s]: string[], { theme }: RuleContext): CSSEntries | undefined { - const v = theme.borderRadius?.[s || 'DEFAULT'] || h.bracket.cssvar.fraction.rem(s || '1') + const v = theme.borderRadius?.[s || 'DEFAULT'] || h.bracket.cssvar.global.fraction.rem(s || '1') if (a in cornerMap && v != null) return cornerMap[a].map(i => [`border${i}-radius`, v]) } diff --git a/packages/preset-mini/src/rules/decoration.ts b/packages/preset-mini/src/rules/decoration.ts index 6f1152feb6..e603865e30 100644 --- a/packages/preset-mini/src/rules/decoration.ts +++ b/packages/preset-mini/src/rules/decoration.ts @@ -8,7 +8,7 @@ export const textDecorations: Rule[] = [ [/^(?:decoration-)?(underline|overline|line-through)$/, ([, s]) => ({ 'text-decoration-line': s }), { autocomplete: 'decoration-(underline|overline|line-through)' }], // size - [/^(?:underline|decoration)-(?:size-)?(.+)$/, ([, s], { theme }) => ({ 'text-decoration-thickness': theme.lineWidth?.[s] ?? h.bracket.cssvar.px(s) }), { autocomplete: '(underline|decoration)-' }], + [/^(?:underline|decoration)-(?:size-)?(.+)$/, ([, s], { theme }) => ({ 'text-decoration-thickness': theme.lineWidth?.[s] ?? h.bracket.cssvar.global.px(s) }), { autocomplete: '(underline|decoration)-' }], [/^(?:underline|decoration)-(auto|from-font)$/, ([, s]) => ({ 'text-decoration-thickness': s }), { autocomplete: '(underline|decoration)-(auto|from-font)' }], // colors @@ -24,7 +24,7 @@ export const textDecorations: Rule[] = [ [/^(?:underline|decoration)-op(?:acity)?-?(.+)$/, ([, opacity]) => ({ '--un-line-opacity': h.bracket.percent(opacity) }), { autocomplete: '(underline|decoration)-(op|opacity)-' }], // offset - [/^(?:underline|decoration)-offset-(.+)$/, ([, s], { theme }) => ({ 'text-underline-offset': theme.lineWidth?.[s] ?? h.auto.bracket.cssvar.px(s) }), { autocomplete: '(underline|decoration)-(offset)-' }], + [/^(?:underline|decoration)-offset-(.+)$/, ([, s], { theme }) => ({ 'text-underline-offset': theme.lineWidth?.[s] ?? h.auto.bracket.cssvar.global.px(s) }), { autocomplete: '(underline|decoration)-(offset)-' }], // style ...decorationStyles.map(v => [`underline-${v}`, { 'text-decoration-style': v }] as Rule), diff --git a/packages/preset-mini/src/rules/gap.ts b/packages/preset-mini/src/rules/gap.ts index bc240a6964..0ab5073dbd 100644 --- a/packages/preset-mini/src/rules/gap.ts +++ b/packages/preset-mini/src/rules/gap.ts @@ -9,7 +9,7 @@ const directions: Record = { } const handleGap = ([, d = '', s]: string[], { theme }: RuleContext) => { - const v = theme.spacing?.[s] ?? h.bracket.cssvar.rem(s) + const v = theme.spacing?.[s] ?? h.bracket.cssvar.global.rem(s) if (v != null) { return { [`grid-${directions[d]}gap`]: v, diff --git a/packages/preset-mini/src/rules/layout.ts b/packages/preset-mini/src/rules/layout.ts index fe07ebc8e4..010ae2ec15 100644 --- a/packages/preset-mini/src/rules/layout.ts +++ b/packages/preset-mini/src/rules/layout.ts @@ -1,4 +1,5 @@ import type { Rule } from '@unocss/core' +import { globalKeywords } from '../utils' const overflowValues = [ 'auto', @@ -6,6 +7,7 @@ const overflowValues = [ 'clip', 'visible', 'scroll', + ...globalKeywords, ] export const overflows: Rule[] = [ diff --git a/packages/preset-mini/src/rules/position.ts b/packages/preset-mini/src/rules/position.ts index dd5370b630..468805dc43 100644 --- a/packages/preset-mini/src/rules/position.ts +++ b/packages/preset-mini/src/rules/position.ts @@ -1,9 +1,10 @@ import type { CSSEntries, Rule, RuleContext } from '@unocss/core' import type { Theme } from '../theme' -import { handler as h, insetMap } from '../utils' +import { globalKeywords, handler as h, insetMap, makeGlobalStaticRules } from '../utils' export const positions: Rule[] = [ [/^(?:position-|pos-)?(relative|absolute|fixed|sticky)$/, ([, v]) => ({ position: v })], + [/^(?:position-|pos-)([-\w]+)$/, ([, v]) => globalKeywords.includes(v) ? { position: v } : undefined], [/^(?:position-|pos-)?(static)$/, ([, v]) => ({ position: v })], ] @@ -15,12 +16,14 @@ export const justifies: Rule[] = [ ['justify-between', { 'justify-content': 'space-between' }], ['justify-around', { 'justify-content': 'space-around' }], ['justify-evenly', { 'justify-content': 'space-evenly' }], + ...makeGlobalStaticRules('justify', 'justify-content'), // items ['justify-items-start', { 'justify-items': 'start' }], ['justify-items-end', { 'justify-items': 'end' }], ['justify-items-center', { 'justify-items': 'center' }], ['justify-items-stretch', { 'justify-items': 'stretch' }], + ...makeGlobalStaticRules('justify-items'), // selfs ['justify-self-auto', { 'justify-self': 'auto' }], @@ -28,6 +31,7 @@ export const justifies: Rule[] = [ ['justify-self-end', { 'justify-self': 'end' }], ['justify-self-center', { 'justify-self': 'center' }], ['justify-self-stretch', { 'justify-self': 'stretch' }], + ...makeGlobalStaticRules('justify-self'), ] export const orders: Rule[] = [ @@ -45,6 +49,7 @@ export const alignments: Rule[] = [ ['content-between', { 'align-content': 'space-between' }], ['content-around', { 'align-content': 'space-around' }], ['content-evenly', { 'align-content': 'space-evenly' }], + ...makeGlobalStaticRules('content', 'align-content'), // items ['items-start', { 'align-items': 'flex-start' }], @@ -52,6 +57,7 @@ export const alignments: Rule[] = [ ['items-center', { 'align-items': 'center' }], ['items-baseline', { 'align-items': 'baseline' }], ['items-stretch', { 'align-items': 'stretch' }], + ...makeGlobalStaticRules('items', 'align-items'), // selfs ['self-auto', { 'align-self': 'auto' }], @@ -60,6 +66,7 @@ export const alignments: Rule[] = [ ['self-center', { 'align-self': 'center' }], ['self-stretch', { 'align-self': 'stretch' }], ['self-baseline', { 'align-self': 'baseline' }], + ...makeGlobalStaticRules('self', 'align-self'), ] export const placements: Rule[] = [ @@ -71,12 +78,14 @@ export const placements: Rule[] = [ ['place-content-around', { 'place-content': 'space-around' }], ['place-content-evenly', { 'place-content': 'space-evenly' }], ['place-content-stretch', { 'place-content': 'stretch' }], + ...makeGlobalStaticRules('place-content'), // items ['place-items-start', { 'place-items': 'start' }], ['place-items-end', { 'place-items': 'end' }], ['place-items-center', { 'place-items': 'center' }], ['place-items-stretch', { 'place-items': 'stretch' }], + ...makeGlobalStaticRules('place-items'), // selfs ['place-self-auto', { 'place-self': 'auto' }], @@ -84,10 +93,11 @@ export const placements: Rule[] = [ ['place-self-end', { 'place-self': 'end' }], ['place-self-center', { 'place-self': 'center' }], ['place-self-stretch', { 'place-self': 'stretch' }], + ...makeGlobalStaticRules('place-self'), ] function handleInsetValue(v: string, { theme }: RuleContext): string | number | undefined { - return theme.spacing?.[v] ?? h.bracket.cssvar.auto.fraction.rem(v) + return theme.spacing?.[v] ?? h.bracket.cssvar.global.auto.fraction.rem(v) } function handleInsetValues([, d, v]: string[], ctx: RuleContext): CSSEntries | undefined { @@ -119,20 +129,23 @@ export const floats: Rule[] = [ ['float-left', { float: 'left' }], ['float-right', { float: 'right' }], ['float-none', { float: 'none' }], + ...makeGlobalStaticRules('float'), // clears ['clear-left', { clear: 'left' }], ['clear-right', { clear: 'right' }], ['clear-both', { clear: 'both' }], ['clear-none', { clear: 'none' }], + ...makeGlobalStaticRules('clear'), ] export const zIndexes: Rule[] = [ [/^z([\d.]+)$/, ([, v]) => ({ 'z-index': h.number(v) })], - [/^z-(.+)$/, ([, v]) => ({ 'z-index': h.bracket.cssvar.auto.number(v) }), { autocomplete: 'z-' }], + [/^z-(.+)$/, ([, v]) => ({ 'z-index': h.bracket.cssvar.global.auto.number(v) }), { autocomplete: 'z-' }], ] export const boxSizing: Rule[] = [ ['box-border', { 'box-sizing': 'border-box' }], ['box-content', { 'box-sizing': 'content-box' }], + ...makeGlobalStaticRules('box', 'box-sizing'), ] diff --git a/packages/preset-mini/src/rules/size.ts b/packages/preset-mini/src/rules/size.ts index 59d5c51354..df6c46d979 100644 --- a/packages/preset-mini/src/rules/size.ts +++ b/packages/preset-mini/src/rules/size.ts @@ -28,7 +28,7 @@ function getSizeValue(minmax: string, hw: string, theme: Theme, prop: string) { return `${prop}-content` } - return h.bracket.cssvar.auto.fraction.rem(prop) + return h.bracket.cssvar.global.auto.fraction.rem(prop) } export const sizes: Rule[] = [ @@ -60,7 +60,7 @@ function getAspectRatio(prop: string) { case 'video': return '16/9' } - return h.bracket.cssvar.auto.number(prop) + return h.bracket.cssvar.global.auto.number(prop) } export const aspectRatio: Rule[] = [ diff --git a/packages/preset-mini/src/rules/static.ts b/packages/preset-mini/src/rules/static.ts index 0392585aff..a90ee473b3 100644 --- a/packages/preset-mini/src/rules/static.ts +++ b/packages/preset-mini/src/rules/static.ts @@ -1,5 +1,5 @@ import type { Rule } from '@unocss/core' -import { handler as h } from '../utils' +import { globalKeywords, handler as h, makeGlobalStaticRules } from '../utils' export const varEmpty = 'var(--un-empty,/*!*/ /*!*/)' @@ -12,7 +12,7 @@ export const displays: Rule[] = [ ['flow-root', { display: 'flow-root' }], ['list-item', { display: 'list-item' }], ['hidden', { display: 'none' }], - [/^display-(.+)$/, ([, c]) => ({ display: h.bracket.cssvar(c) || c })], + [/^display-(.+)$/, ([, c]) => ({ display: h.bracket.cssvar.global(c) || c })], ] export const appearances: Rule[] = [ @@ -20,15 +20,17 @@ export const appearances: Rule[] = [ ['invisible', { visibility: 'hidden' }], ['backface-visible', { 'backface-visibility': 'visible' }], ['backface-hidden', { 'backface-visibility': 'hidden' }], + ...makeGlobalStaticRules('backface', 'backface-visibility'), ] export const cursors: Rule[] = [ - [/^cursor-(.+)$/, ([, c]) => ({ cursor: h.bracket.cssvar(c) || c })], + [/^cursor-(.+)$/, ([, c]) => ({ cursor: h.bracket.cssvar.global(c) || c })], ] export const pointerEvents: Rule[] = [ ['pointer-events-auto', { 'pointer-events': 'auto' }], ['pointer-events-none', { 'pointer-events': 'none' }], + ...makeGlobalStaticRules('pointer-events'), ] export const resizes: Rule[] = [ @@ -36,6 +38,7 @@ export const resizes: Rule[] = [ ['resize-y', { resize: 'vertical' }], ['resize', { resize: 'both' }], ['resize-none', { resize: 'none' }], + ...makeGlobalStaticRules('resize'), ] export const userSelects: Rule[] = [ @@ -43,10 +46,15 @@ export const userSelects: Rule[] = [ ['select-all', { 'user-select': 'all' }], ['select-text', { 'user-select': 'text' }], ['select-none', { 'user-select': 'none' }], + ...makeGlobalStaticRules('select', 'user-select'), ] export const whitespaces: Rule[] = [ - [/^(?:whitespace|ws)-(normal|nowrap|pre|pre-line|pre-wrap|break-spaces)$/, ([, v]) => ({ 'white-space': v }), { autocomplete: '(whitespace|ws)-(normal|nowrap|pre|pre-line|pre-wrap|break-spaces)' }], + [ + /^(?:whitespace-|ws-)([-\w]+)$/, + ([, v]) => ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces', ...globalKeywords].includes(v) ? { 'white-space': v } : undefined, + { autocomplete: '(whitespace|ws)-(normal|nowrap|pre|pre-line|pre-wrap|break-spaces)' }, + ], ] export const contents: Rule[] = [ @@ -73,6 +81,7 @@ export const textTransforms: Rule[] = [ ['case-lower', { 'text-transform': 'lowercase' }], ['case-capital', { 'text-transform': 'capitalize' }], ['case-normal', { 'text-transform': 'none' }], + ...makeGlobalStaticRules('case', 'text-transform'), ] export const fontStyles: Rule[] = [ diff --git a/packages/preset-mini/src/rules/transform.ts b/packages/preset-mini/src/rules/transform.ts index d043877a37..60457d3d0b 100644 --- a/packages/preset-mini/src/rules/transform.ts +++ b/packages/preset-mini/src/rules/transform.ts @@ -1,6 +1,6 @@ import type { CSSValues, Rule, RuleContext } from '@unocss/core' import type { Theme } from '../theme' -import { handler as h, positionMap, xyzMap } from '../utils' +import { handler as h, makeGlobalStaticRules, positionMap, xyzMap } from '../utils' const transformCpu = [ 'translateX(var(--un-translate-x))', @@ -90,6 +90,7 @@ export const transforms: Rule[] = [ ['transform-cpu', { transform: transformCpu }], ['transform-gpu', { transform: transformGpu }], ['transform-none', { transform: 'none' }], + ...makeGlobalStaticRules('transform'), ] function handleTranslate([, d, b]: string[], { theme }: RuleContext): CSSValues | undefined { diff --git a/packages/preset-mini/src/rules/transition.ts b/packages/preset-mini/src/rules/transition.ts index 59cee8921d..11712b604d 100644 --- a/packages/preset-mini/src/rules/transition.ts +++ b/packages/preset-mini/src/rules/transition.ts @@ -1,6 +1,6 @@ import type { Rule } from '@unocss/core' import type { Theme } from '../theme' -import { globalKeywords, handler as h } from '../utils' +import { globalKeywords, handler as h, makeGlobalStaticRules } from '../utils' const transitionPropertyGroup: Record = { all: 'all', @@ -35,15 +35,21 @@ export const transitions: Rule[] = [ [/^(?:transition-)?duration-(.+)$/, ([, d], { theme }) => ({ 'transition-duration': theme.duration?.[d || 'DEFAULT'] ?? h.bracket.cssvar.time(d) }), { autocomplete: ['transition-duration-$duration', 'duration-$duration'] }], - [/^(?:transition-)?delay-(.+)$/, ([, d], { theme }) => ({ 'transition-delay': theme.duration?.[d || 'DEFAULT'] ?? h.bracket.cssvar.time(d) }), + + [/^(?:transition-)?delay-(.+)$/, + ([, d], { theme }) => ({ 'transition-delay': theme.duration?.[d || 'DEFAULT'] ?? h.bracket.cssvar.time(d) }), { autocomplete: ['transition-delay-$duration', 'delay-$duration'] }], - [/^(?:transition-)?ease(?:-(.+))?$/, ([, d], { theme }) => ({ 'transition-timing-function': theme.easing?.[d || 'DEFAULT'] ?? h.bracket.cssvar(d) }), + + [/^(?:transition-)?ease(?:-(.+))?$/, + ([, d], { theme }) => ({ 'transition-timing-function': theme.easing?.[d || 'DEFAULT'] ?? h.bracket.cssvar(d) }), { autocomplete: ['transition-ease-(linear|in|out|in-out|DEFAULT)', 'ease-(linear|in|out|in-out|DEFAULT)'] }], // props - [/^(?:transition-)?property-(.+)$/, ([, v]) => ({ 'transition-property': h.global(v) || transitionProperty(v) }), + [/^(?:transition-)?property-(.+)$/, + ([, v]) => ({ 'transition-property': h.global(v) || transitionProperty(v) }), { autocomplete: [`transition-property-(${[...globalKeywords, ...Object.keys(transitionPropertyGroup)].join('|')})`] }], // none ['transition-none', { transition: 'none' }], + ...makeGlobalStaticRules('transition'), ] diff --git a/packages/preset-mini/src/rules/typography.ts b/packages/preset-mini/src/rules/typography.ts index 294a205a29..91c307eb6d 100644 --- a/packages/preset-mini/src/rules/typography.ts +++ b/packages/preset-mini/src/rules/typography.ts @@ -43,7 +43,7 @@ export const fonts: Rule[] = [ ], [/^text-size-(.+)$/, ([, s], { theme }) => { const themed = toArray(theme.fontSize?.[s]) - const size = themed?.[0] ?? h.bracket.cssvar.rem(s) + const size = themed?.[0] ?? h.bracket.cssvar.global.rem(s) if (size != null) return { 'font-size': size } }, { autocomplete: 'text-size-$fontSize' }], @@ -119,7 +119,7 @@ export const textShadows: Rule[] = [ 'text-shadow': 'var(--un-text-shadow)', } } - return { 'text-shadow': h.bracket.cssvar(s) } + return { 'text-shadow': h.bracket.cssvar.global(s) } }, { autocomplete: 'text-shadow-$textShadow' }], // colors diff --git a/packages/preset-mini/src/utils/utilities.ts b/packages/preset-mini/src/utils/utilities.ts index 1ce4ce6907..8f3dbf57bd 100644 --- a/packages/preset-mini/src/utils/utilities.ts +++ b/packages/preset-mini/src/utils/utilities.ts @@ -1,9 +1,9 @@ -import type { CSSEntries, CSSObject, ParsedColorValue, RuleContext, VariantContext } from '@unocss/core' +import type { CSSEntries, CSSObject, ParsedColorValue, Rule, RuleContext, VariantContext } from '@unocss/core' import { toArray } from '@unocss/core' import type { Theme } from '../theme' import { colorOpacityToString, colorToString, getComponents, parseCssColor } from './colors' import { handler as h } from './handlers' -import { directionMap } from './mappings' +import { directionMap, globalKeywords } from './mappings' export const CONTROL_MINI_NO_NEGATIVE = '$$mini-no-negative' @@ -15,7 +15,7 @@ export const CONTROL_MINI_NO_NEGATIVE = '$$mini-no-negative' * @see {@link directionMap} */ export const directionSize = (propertyPrefix: string) => ([_, direction, size]: string[], { theme }: RuleContext): CSSEntries | undefined => { - const v = theme.spacing?.[size || 'DEFAULT'] ?? h.bracket.cssvar.auto.fraction.rem(size) + const v = theme.spacing?.[size || 'DEFAULT'] ?? h.bracket.cssvar.global.auto.fraction.rem(size) if (v != null) return directionMap[direction].map(i => [`${propertyPrefix}${i}`, v]) } @@ -200,3 +200,8 @@ export const resolveVerticalBreakpoints = ({ theme, generator }: Readonly { + return globalKeywords.map(keyword => [`${prefix}-${keyword}`, { [property ?? prefix]: keyword }] as Rule) +} + diff --git a/packages/preset-wind/src/rules/background.ts b/packages/preset-wind/src/rules/background.ts index 5f0e3abf28..2e64ebfb37 100644 --- a/packages/preset-wind/src/rules/background.ts +++ b/packages/preset-wind/src/rules/background.ts @@ -1,5 +1,5 @@ import type { CSSColorValue, Rule, RuleContext } from '@unocss/core' -import { colorOpacityToString, colorToString, handler as h, parseColor, positionMap } from '@unocss/preset-mini/utils' +import { colorOpacityToString, colorToString, globalKeywords, handler as h, makeGlobalStaticRules, parseColor, positionMap } from '@unocss/preset-mini/utils' import type { Theme } from '@unocss/preset-mini' const bgGradientToValue = (cssColor: CSSColorValue | undefined) => { @@ -105,6 +105,7 @@ export const backgroundStyles: Rule[] = [ ['box-decoration-slice', { 'box-decoration-break': 'slice' }], ['box-decoration-clone', { 'box-decoration-break': 'clone' }], + ...makeGlobalStaticRules('box-decoration', 'box-decoration-break'), // size ['bg-auto', { 'background-size': 'auto' }], @@ -121,6 +122,10 @@ export const backgroundStyles: Rule[] = [ ['bg-clip-content', { '-webkit-background-clip': 'content-box', 'background-clip': 'content-box' }], ['bg-clip-padding', { '-webkit-background-clip': 'padding-box', 'background-clip': 'padding-box' }], ['bg-clip-text', { '-webkit-background-clip': 'text', 'background-clip': 'text' }], + ...globalKeywords.map(keyword => [`bg-clip-${keyword}`, { + '-webkit-background-clip': keyword, + 'background-clip': keyword, + }] as Rule), // positions // skip 1 & 2 letters shortcut @@ -133,9 +138,11 @@ export const backgroundStyles: Rule[] = [ ['bg-repeat-y', { 'background-repeat': 'repeat-y' }], ['bg-repeat-round', { 'background-repeat': 'round' }], ['bg-repeat-space', { 'background-repeat': 'space' }], + ...makeGlobalStaticRules('bg-repeat', 'background-repeat'), // origins ['bg-origin-border', { 'background-origin': 'border-box' }], ['bg-origin-padding', { 'background-origin': 'padding-box' }], ['bg-origin-content', { 'background-origin': 'content-box' }], + ...makeGlobalStaticRules('bg-origin', 'background-origin'), ] diff --git a/packages/preset-wind/src/rules/behaviors.ts b/packages/preset-wind/src/rules/behaviors.ts index 1bc5f1f190..b2963ae2a6 100644 --- a/packages/preset-wind/src/rules/behaviors.ts +++ b/packages/preset-wind/src/rules/behaviors.ts @@ -1,5 +1,5 @@ import type { Rule } from '@unocss/core' -import { colorResolver, handler as h } from '@unocss/preset-mini/utils' +import { colorResolver, globalKeywords, handler as h, makeGlobalStaticRules } from '@unocss/preset-mini/utils' const listStyles: Record = { 'disc': 'disc', @@ -31,6 +31,7 @@ export const listStyle: Rule[] = [ ['list-outside', { 'list-style-position': 'outside' }], ['list-inside', { 'list-style-position': 'inside' }], ['list-none', { 'list-style-type': 'none' }], + ...makeGlobalStaticRules('list', 'list-style'), ] export const accents: Rule[] = [ @@ -56,18 +57,12 @@ export const imageRenderings: Rule[] = [ ] export const overscrolls: Rule[] = [ - ['overscroll-auto', { 'overscroll-behavior': 'auto' }], - ['overscroll-contain', { 'overscroll-behavior': 'contain' }], - ['overscroll-none', { 'overscroll-behavior': 'none' }], - ['overscroll-x-auto', { 'overscroll-behavior-x': 'auto' }], - ['overscroll-x-contain', { 'overscroll-behavior-x': 'contain' }], - ['overscroll-x-none', { 'overscroll-behavior-x': 'none' }], - ['overscroll-y-auto', { 'overscroll-behavior-y': 'auto' }], - ['overscroll-y-contain', { 'overscroll-behavior-y': 'contain' }], - ['overscroll-y-none', { 'overscroll-behavior-y': 'none' }], + [/^overscroll-([-\w]+)$/, ([, s]) => ['auto', 'contain', 'none', ...globalKeywords].includes(s) ? { 'overscroll-behavior': s } : undefined], + [/^overscroll-([xy])-([-\w]+)$/, ([, d, s]) => ['auto', 'contain', 'none', ...globalKeywords].includes(s) ? { [`overscroll-behavior-${d}`]: s } : undefined], ] export const scrollBehaviors: Rule[] = [ ['scroll-auto', { 'scroll-behavior': 'auto' }], ['scroll-smooth', { 'scroll-behavior': 'smooth' }], + ...makeGlobalStaticRules('scroll', 'scroll-behavior'), ] diff --git a/packages/preset-wind/src/rules/columns.ts b/packages/preset-wind/src/rules/columns.ts index c97ac853c0..4dad976076 100644 --- a/packages/preset-wind/src/rules/columns.ts +++ b/packages/preset-wind/src/rules/columns.ts @@ -1,5 +1,5 @@ import type { Rule } from '@unocss/core' -import { handler as h } from '@unocss/preset-mini/utils' +import { handler as h, makeGlobalStaticRules } from '@unocss/preset-mini/utils' export const columns: Rule[] = [ [/^columns-(.+)$/, ([, v]) => ({ columns: h.bracket.global.number.auto.numberWithUnit(v) }), { autocomplete: 'columns-' }], @@ -13,12 +13,14 @@ export const columns: Rule[] = [ ['break-before-left', { 'break-before': 'left' }], ['break-before-right', { 'break-before': 'right' }], ['break-before-column', { 'break-before': 'column' }], + ...makeGlobalStaticRules('break-before'), // break inside ['break-inside-auto', { 'break-inside': 'auto' }], ['break-inside-avoid', { 'break-inside': 'avoid' }], ['break-inside-avoid-page', { 'break-inside': 'avoid-page' }], ['break-inside-avoid-column', { 'break-inside': 'avoid-column' }], + ...makeGlobalStaticRules('break-inside'), // break after ['break-after-auto', { 'break-after': 'auto' }], @@ -29,4 +31,5 @@ export const columns: Rule[] = [ ['break-after-left', { 'break-after': 'left' }], ['break-after-right', { 'break-after': 'right' }], ['break-after-column', { 'break-after': 'column' }], + ...makeGlobalStaticRules('break-after'), ] diff --git a/packages/preset-wind/src/rules/filters.ts b/packages/preset-wind/src/rules/filters.ts index 4614db3973..fe86b263bc 100644 --- a/packages/preset-wind/src/rules/filters.ts +++ b/packages/preset-wind/src/rules/filters.ts @@ -1,6 +1,6 @@ import type { CSSValues, Rule, RuleContext } from '@unocss/core' import type { Theme } from '@unocss/preset-mini' -import { colorResolver, colorableShadows, handler as h } from '@unocss/preset-mini/utils' +import { colorResolver, colorableShadows, globalKeywords, handler as h } from '@unocss/preset-mini/utils' import { varEmpty } from '@unocss/preset-mini/rules' export const filterBase = { @@ -116,4 +116,10 @@ export const filters: Rule[] = [ '-webkit-backdrop-filter': 'none', 'backdrop-filter': 'none', }], + + ...globalKeywords.map(keyword => [`filter-${keyword}`, { filter: keyword }] as Rule), + ...globalKeywords.map(keyword => [`backdrop-filter-${keyword}`, { + '-webkit-backdrop-filter': keyword, + 'backdrop-filter': keyword, + }] as Rule), ] diff --git a/packages/preset-wind/src/rules/static.ts b/packages/preset-wind/src/rules/static.ts index 9c6c6cba93..6d8a97fa34 100644 --- a/packages/preset-wind/src/rules/static.ts +++ b/packages/preset-wind/src/rules/static.ts @@ -1,5 +1,5 @@ import type { Rule } from '@unocss/core' -import { handler as h, positionMap } from '@unocss/preset-mini/utils' +import { globalKeywords, handler as h, makeGlobalStaticRules, positionMap } from '@unocss/preset-mini/utils' export const textTransforms: Rule[] = [ // tailwind compat @@ -10,33 +10,25 @@ export const textTransforms: Rule[] = [ ] export const hyphens: Rule[] = [ - ['hyphens-manual', { - '-webkit-hyphens': 'manual', - '-ms-hyphens': 'manual', - 'hyphens': 'manual', - }], - ['hyphens-auto', { - '-webkit-hyphens': 'auto', - '-ms-hyphens': 'auto', - 'hyphens': 'auto', - }], - ['hyphens-none', { - '-webkit-hyphens': 'none', - '-ms-hyphens': 'none', - 'hyphens': 'none', - }], + ...['manual', 'auto', 'none', ...globalKeywords].map(keyword => [`hyphens-${keyword}`, { + '-webkit-hyphens': keyword, + '-ms-hyphens': keyword, + 'hyphens': keyword, + }] as Rule), ] export const writingModes: Rule[] = [ ['write-vertical-right', { 'writing-mode': 'vertical-rl' }], ['write-vertical-left', { 'writing-mode': 'vertical-lr' }], ['write-normal', { 'writing-mode': 'horizontal-tb' }], + ...makeGlobalStaticRules('write', 'writing-mode'), ] export const writingOrientations: Rule[] = [ ['write-orient-mixed', { 'text-orientation': 'mixed' }], ['write-orient-sideways', { 'text-orientation': 'sideways' }], ['write-orient-upright', { 'text-orientation': 'upright' }], + ...makeGlobalStaticRules('write-orient', 'text-orientation'), ] export const screenReadersAccess: Rule[] = [ @@ -109,6 +101,7 @@ export const backgroundBlendModes: Rule[] = [ ['bg-blend-color', { 'background-blend-mode': 'color' }], ['bg-blend-luminosity', { 'background-blend-mode': 'luminosity' }], ['bg-blend-normal', { 'background-blend-mode': 'normal' }], + ...makeGlobalStaticRules('bg-blend', 'background-blend'), ] export const mixBlendModes: Rule[] = [ @@ -129,4 +122,5 @@ export const mixBlendModes: Rule[] = [ ['mix-blend-luminosity', { 'mix-blend-mode': 'luminosity' }], ['mix-blend-plus-lighter', { 'mix-blend-mode': 'plus-lighter' }], ['mix-blend-normal', { 'mix-blend-mode': 'normal' }], + ...makeGlobalStaticRules('mix-blend'), ] diff --git a/packages/preset-wind/src/rules/touch-actions.ts b/packages/preset-wind/src/rules/touch-actions.ts index ce5de86c6d..7438f6b75f 100644 --- a/packages/preset-wind/src/rules/touch-actions.ts +++ b/packages/preset-wind/src/rules/touch-actions.ts @@ -1,5 +1,6 @@ import type { Rule } from '@unocss/core' import { varEmpty } from '@unocss/preset-mini/rules' +import { makeGlobalStaticRules } from '@unocss/preset-mini/utils' export const touchActionBase = { '--un-pan-x': varEmpty, @@ -25,4 +26,5 @@ export const touchActions: Rule[] = [ ['touch-auto', { 'touch-action': 'auto' }], ['touch-manipulation', { 'touch-action': 'manipulation' }], ['touch-none', { 'touch-action': 'none' }], + ...makeGlobalStaticRules('touch', 'touch-action'), ] diff --git a/test/__snapshots__/autocomplete.test.ts.snap b/test/__snapshots__/autocomplete.test.ts.snap index a30a9b2279..16b49e3ce2 100644 --- a/test/__snapshots__/autocomplete.test.ts.snap +++ b/test/__snapshots__/autocomplete.test.ts.snap @@ -20,10 +20,10 @@ exports[`autocomplete > should accept variants 1`] = ` exports[`autocomplete > should provide autocomplete 1`] = ` { - "align-": "align-base align-baseline align-bottom align-btm align-mid align-middle align-sub align-super align-text-bottom align-text-top", + "align-": "align-base align-baseline align-bottom align-btm align-inherit align-initial align-mid align-middle align-revert align-revert-layer", "bg-": "bg-amber bg-auto bg-black bg-blend-color bg-blend-color-burn bg-blend-color-dodge bg-blend-darken bg-blend-difference bg-blend-exclusion bg-blend-hard-light", "bg-gradient-": "bg-gradient-conic bg-gradient-from bg-gradient-linear bg-gradient-radial bg-gradient-repeating bg-gradient-shape bg-gradient-to bg-gradient-via", - "bg-r": "bg-red bg-repeat bg-repeat-round bg-repeat-space bg-repeat-x bg-repeat-y bg-rose", + "bg-r": "bg-red bg-repeat bg-repeat-inherit bg-repeat-initial bg-repeat-revert bg-repeat-revert-layer bg-repeat-round bg-repeat-space bg-repeat-unset bg-repeat-x", "border": "border border-collapse border-separate border-spacing border-style", "border-": "border-0 border-1 border-2 border-3 border-4 border-5 border-6 border-8 border-10 border-12", "border-r": "border-r border-r-style border-rd border-red border-revert border-revert-layer border-ridge border-rose border-rounded", @@ -31,7 +31,7 @@ exports[`autocomplete > should provide autocomplete 1`] = ` "columns-": "columns-0 columns-1 columns-2 columns-3 columns-4 columns-5 columns-6 columns-8 columns-10 columns-12", "divide-": "divide-amber divide-black divide-block divide-block-reverse divide-blue divide-bluegray divide-blueGray divide-coolgray divide-coolGray divide-current", "fill-": "fill-amber fill-black fill-blue fill-bluegray fill-blueGray fill-coolgray fill-coolGray fill-current fill-cyan fill-dark", - "filter-": "filter-drop filter-drop-shadow filter-drop-shadow-color filter-grayscale filter-invert filter-none filter-saturate filter-sepia", + "filter-": "filter-drop filter-drop-shadow filter-drop-shadow-color filter-grayscale filter-inherit filter-initial filter-invert filter-none filter-revert filter-revert-layer", "fle": "flex flex-1 flex-auto flex-col flex-col-reverse flex-initial flex-inline flex-none flex-nowrap flex-row", "font-": "font-100 font-200 font-300 font-400 font-500 font-600 font-700 font-800 font-900 font-black", "keyframes-": "keyframes-back-in-down keyframes-back-in-left keyframes-back-in-right keyframes-back-in-up keyframes-back-out-down keyframes-back-out-left keyframes-back-out-right keyframes-back-out-up keyframes-bounce keyframes-bounce-alt", @@ -45,15 +45,15 @@ exports[`autocomplete > should provide autocomplete 1`] = ` "outline-": "outline-amber outline-auto outline-black outline-blue outline-bluegray outline-blueGray outline-coolgray outline-coolGray outline-current outline-cyan", "outline-offset-": "outline-offset-0 outline-offset-1 outline-offset-2 outline-offset-3 outline-offset-4 outline-offset-5 outline-offset-6 outline-offset-8 outline-offset-10 outline-offset-12", "placeholder-": "placeholder-.dark: placeholder-.light: placeholder-@dark: placeholder-@light: placeholder-active: placeholder-after: placeholder-animate-delay placeholder-animate-direction placeholder-animate-duration placeholder-animate-none", - "scroll-": "scroll-auto scroll-block scroll-inline scroll-m scroll-ma scroll-p scroll-pa scroll-smooth", + "scroll-": "scroll-auto scroll-block scroll-inherit scroll-initial scroll-inline scroll-m scroll-ma scroll-p scroll-pa scroll-revert", "scroll-m-": "scroll-m-2xl scroll-m-3xl scroll-m-4xl scroll-m-5xl scroll-m-6xl scroll-m-7xl scroll-m-8xl scroll-m-9xl scroll-m-b scroll-m-be", "shadow-": "shadow-2xl shadow-amber shadow-black shadow-blue shadow-bluegray shadow-blueGray shadow-coolgray shadow-coolGray shadow-current shadow-cyan", "space-": "space-block space-block-reverse space-inline space-inline-reverse space-x space-x-reverse space-y space-y-reverse", "text-r": "text-red text-revert text-revert-layer text-right text-rose", "text-red-": "text-red-1 text-red-2 text-red-3 text-red-4 text-red-5 text-red-6 text-red-7 text-red-8 text-red-9 text-red-50", - "touch-": "touch-auto touch-manipulation touch-none touch-pan touch-pinch-zoom", - "transition-": "transition-all transition-colors transition-none transition-opacity transition-shadow transition-transform", - "v-": "v-base v-baseline v-bottom v-btm v-mid v-middle v-sub v-super v-text-bottom v-text-top", + "touch-": "touch-auto touch-inherit touch-initial touch-manipulation touch-none touch-pan touch-pinch-zoom touch-revert touch-revert-layer touch-unset", + "transition-": "transition-all transition-colors transition-inherit transition-initial transition-none transition-opacity transition-revert transition-revert-layer transition-shadow transition-transform", + "v-": "v-base v-baseline v-bottom v-btm v-inherit v-initial v-mid v-middle v-revert v-revert-layer", "w-": "w-2xl w-3xl w-4xl w-5xl w-6xl w-7xl w-auto w-lg w-md w-none", "z-": "z-0 z-1 z-2 z-3 z-4 z-5 z-6 z-8 z-10 z-12", } diff --git a/test/__snapshots__/preset-mini.test.ts.snap b/test/__snapshots__/preset-mini.test.ts.snap index 82885c8482..20c7bb896c 100644 --- a/test/__snapshots__/preset-mini.test.ts.snap +++ b/test/__snapshots__/preset-mini.test.ts.snap @@ -49,6 +49,7 @@ div:hover .group-\\\\[div\\\\:hover\\\\]-\\\\[combinator\\\\:test-4\\\\]{combina .not-hover\\\\:p-4px:not(:hover){padding:4px;} .not-hover\\\\:p-3:not(:hover){padding:0.75rem;} .p-none{padding:0rem;} +.p-unset{padding:unset;} .pa{padding:auto;} .\\\\!hover\\\\:px-10:hover{padding-left:2.5rem !important;padding-right:2.5rem !important;} .p-x, @@ -58,11 +59,13 @@ div:hover .group-\\\\[div\\\\:hover\\\\]-\\\\[combinator\\\\:test-4\\\\]{combina .pt2{padding-top:0.5rem;} .pb{padding-bottom:1rem;} .pl-10px{padding-left:10px;} +.pl-revert{padding-left:revert;} .pt-\\\\$title2{padding-top:var(--title2);} .p-bs-2, .pbs-2, .pbs2{padding-block-start:0.5rem;} .p-ie-none{padding-inline-end:0rem;} +.p-ie-revert{padding-inline-end:revert;} .p-is, .pis{padding-inline-start:1rem;} .pbs-\\\\$title2{padding-block-start:var(--title2);} @@ -81,22 +84,28 @@ div:hover .group-\\\\[div\\\\:hover\\\\]-\\\\[combinator\\\\:test-4\\\\]{combina .m-0, .m-none{margin:0rem;} .m-1\\\\/2{margin:50%;} +.m-inherit{margin:inherit;} *>.\\\\[\\\\*\\\\>\\\\&\\\\]\\\\:m-12{margin:3rem;} .m-xy, .mxy{margin:1rem;} .my-auto{margin-top:auto;margin-bottom:auto;} +.my-revert-layer{margin-top:revert-layer;margin-bottom:revert-layer;} .-mb-px{margin-bottom:-1px;} .mt-\\\\[-10\\\\.2\\\\%\\\\]{margin-top:-10.2%;} .mt-\\\\$height{margin-top:var(--height);} .next\\\\:mt-0+*{margin-top:0rem;} .m-block{margin-block-start:1rem;margin-block-end:1rem;} .m-block-auto{margin-block-start:auto;margin-block-end:auto;} +.m-block-inherit{margin-block-start:inherit;margin-block-end:inherit;} .m-inline-none{margin-inline-start:0rem;margin-inline-end:0rem;} .mbs{margin-block-start:1rem;} .mbs-\\\\[-10\\\\.2\\\\%\\\\]{margin-block-start:-10.2%;} .mbs-\\\\$height{margin-block-start:var(--height);} +.mbs-unset{margin-block-start:unset;} .unocss .scope-unocss\\\\:block{display:block;} .contents{display:contents;} +.display-\\\\$var{display:var(--var);} +.display-inherit{display:inherit;} .disabled\\\\:op50:disabled{opacity:0.5;} .op-10{opacity:0.1;} .opacity-\\\\$opa{opacity:var(--opa);} @@ -175,6 +184,7 @@ div:hover .group-\\\\[div\\\\:hover\\\\]-\\\\[combinator\\\\:test-4\\\\]{combina .border-width-\\\\$variable{border-width:var(--variable);} .border-size-2{border-width:2px;} .border-size-none{border-width:0px;} +.border-size-unset{border-width:unset;} .border-width-3{border-width:3px;} .border-x-size-2{border-left-width:2px;border-right-width:2px;} .border-x-width-3{border-left-width:3px;border-right-width:3px;} @@ -218,6 +228,8 @@ div:hover .group-\\\\[div\\\\:hover\\\\]-\\\\[combinator\\\\:test-4\\\\]{combina .rounded-full{border-radius:9999px;} .rounded-md{border-radius:0.375rem;} .rounded-none{border-radius:0rem;} +.rounded-unset{border-radius:unset;} +.rounded-b-revert{border-bottom-left-radius:revert;border-bottom-right-radius:revert;} .rounded-t-sm{border-top-left-radius:0.125rem;border-top-right-radius:0.125rem;} .rounded-rb-1\\\\/2{border-bottom-right-radius:50%;} .rounded-tr{border-top-right-radius:0.25rem;} @@ -236,6 +248,7 @@ div:hover .group-\\\\[div\\\\:hover\\\\]-\\\\[combinator\\\\:test-4\\\\]{combina .border-none{border-style:none;} .b-solid, .border-solid{border-style:solid;} +.border-inherit{border-style:inherit;} .border-x-dashed{border-left-style:dashed;border-right-style:dashed;} .border-y-revert-layer{border-top-style:revert-layer;border-bottom-style:revert-layer;} .border-y-unset{border-top-style:unset;border-bottom-style:unset;} @@ -246,6 +259,7 @@ div:hover .group-\\\\[div\\\\:hover\\\\]-\\\\[combinator\\\\:test-4\\\\]{combina .border-s-dashed{border-inline-start-style:dashed;} .border-t-dashed{border-top-style:dashed;} .border-block-style-double{border-block-start-style:double;border-block-end-style:double;} +.border-ie-unset{border-inline-end-style:unset;} .border-is-style-double{border-inline-start-style:double;} .after\\\\:content-\\\\[unocss\\\\]::after, .content-\\\\[unocss\\\\]{content:\\"unocss\\";} @@ -271,6 +285,7 @@ div:hover .group-\\\\[div\\\\:hover\\\\]-\\\\[combinator\\\\:test-4\\\\]{combina .text-base{font-size:1rem;line-height:1.5rem;} .text-lg{font-size:1.125rem;line-height:1.75rem;} .text-size-\\\\$variable{font-size:var(--variable);} +.text-size-unset{font-size:unset;} .font-050, .font-50, .fw-050, @@ -285,6 +300,7 @@ div:hover .group-\\\\[div\\\\:hover\\\\]-\\\\[combinator\\\\:test-4\\\\]{combina .lh-\\\\$variable{line-height:var(--variable);} .leading-inherit{line-height:inherit;} .lh-\\\\[1\\\\.5\\\\]{line-height:1.5;} +.font-synthesis-inherit{font-synthesis:inherit;} .font-synthesis-small-caps{font-synthesis:small-caps;} .font-synthesis-weight{font-synthesis:weight;} .font-tracking-1em{letter-spacing:1em;} @@ -312,6 +328,7 @@ div:hover .group-\\\\[div\\\\:hover\\\\]-\\\\[combinator\\\\:test-4\\\\]{combina .decoration-5, .underline-5{text-decoration-thickness:5px;} .decoration-size-none{text-decoration-thickness:0px;} +.decoration-size-unset{text-decoration-thickness:unset;} .underline-1rem{text-decoration-thickness:1rem;} .underline-auto{text-decoration-thickness:auto;} .decoration-purple\\\\/50{-webkit-text-decoration-color:rgba(192,132,252,0.5);text-decoration-color:rgba(192,132,252,0.5);} @@ -324,6 +341,7 @@ div:hover .group-\\\\[div\\\\:hover\\\\]-\\\\[combinator\\\\:test-4\\\\]{combina .underline-offset-4{text-underline-offset:4px;} .underline-offset-auto{text-underline-offset:auto;} .underline-dashed{text-decoration-style:dashed;} +.underline-inherit{text-decoration-style:inherit;} .decoration-none{text-decoration:none;} .text-stroke-6{-webkit-text-stroke-width:6px;} .text-stroke-sm{-webkit-text-stroke-width:thin;} @@ -337,6 +355,7 @@ div:hover .group-\\\\[div\\\\:hover\\\\]-\\\\[combinator\\\\:test-4\\\\]{combina .text-shadow-color-op-30{--un-text-shadow-opacity:0.3;} .case-upper{text-transform:uppercase;} .case-normal{text-transform:none;} +.case-inherit{text-transform:inherit;} .group:hover:focus .group-hover\\\\:group-focus\\\\:text-center, .parent:hover>.parent-hover\\\\:text-center{text-align:center;} .text-left, @@ -503,16 +522,20 @@ div:hover .group-\\\\[div\\\\:hover\\\\]-\\\\[combinator\\\\:test-4\\\\]{combina .grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr));} .gap-\\\\$variable{grid-gap:var(--variable);gap:var(--variable);} .gap-4{grid-gap:1rem;gap:1rem;} +.gap-inherit{grid-gap:inherit;gap:inherit;} .gap-none{grid-gap:0rem;gap:0rem;} .gap2{grid-gap:0.5rem;gap:0.5rem;} .-gap-y-5{grid-row-gap:-1.25rem;row-gap:-1.25rem;} .flex-gap-y-1, .grid-gap-y-1{grid-row-gap:0.25rem;row-gap:0.25rem;} +.flex-gap-y-unset{grid-row-gap:unset;row-gap:unset;} .gap-x-1{grid-column-gap:0.25rem;column-gap:0.25rem;} .absolute{position:absolute;} .pos-fixed{position:fixed;} .position-sticky{position:sticky;} .relative{position:relative;} +.pos-unset{position:unset;} +.position-inherit{position:inherit;} .static{position:static;} .h-\\\\[calc\\\\(1000px-4rem\\\\)\\\\]{height:calc(1000px - 4rem);} .h-\\\\$var{height:var(--var);} @@ -540,20 +563,25 @@ div:hover .group-\\\\[div\\\\:hover\\\\]-\\\\[combinator\\\\:test-4\\\\]{combina .h-6\\\\/7{height:85.7142857143%;} .h-8\\\\/7{height:114.2857142857%;} .h-auto{height:auto;} +.h-inherit{height:inherit;} .h-lg{height:32rem;} .h20{height:5rem;} .max-h-\\\\[1px\\\\]{max-height:1px;} +.max-h-unset{max-height:unset;} .max-w-\\\\$var{max-width:var(--var);} .max-w-20{max-width:5rem;} .max-w-full{max-width:100%;} .max-w-lg{max-width:32rem;} .max-w-none{max-width:none;} +.max-w-revert{max-width:revert;} .min-h-\\\\[1px\\\\]{min-height:1px;} +.min-h-unset{min-height:unset;} .min-w-\\\\$var{min-width:var(--var);} .min-w-20{min-width:5rem;} .min-w-full{min-width:100%;} .min-w-lg{min-width:32rem;} .min-w-none{min-width:none;} +.min-w-revert-layer{min-width:revert-layer;} .w-\\\\[calc\\\\(calc\\\\(100px\\\\*10\\\\)-4rem\\\\)\\\\]{width:calc(calc(100px * 10) - 4rem);} .w-1{width:0.25rem;} .w-1\\\\/4{width:25%;} @@ -561,6 +589,7 @@ div:hover .group-\\\\[div\\\\:hover\\\\]-\\\\[combinator\\\\:test-4\\\\]{combina .w-21{width:5.25rem;} .w-auto{width:auto;} .w-lg{width:32rem;} +.w-unset{width:unset;} .block-\\\\[calc\\\\(1000px-4rem\\\\)\\\\]{block-size:calc(1000px - 4rem);} .block-\\\\$var{block-size:var(--var);} .block-1{block-size:0.25rem;} @@ -569,16 +598,20 @@ div:hover .group-\\\\[div\\\\:hover\\\\]-\\\\[combinator\\\\:test-4\\\\]{combina .block-8\\\\/7{block-size:114.2857142857%;} .block-auto{block-size:auto;} .block-lg{block-size:32rem;} +.block-unset{block-size:unset;} .inline-\\\\[calc\\\\(calc\\\\(100px\\\\*10\\\\)-4rem\\\\)\\\\]{inline-size:calc(calc(100px * 10) - 4rem);} .inline-1{inline-size:0.25rem;} .inline-1\\\\/4{inline-size:25%;} .inline-21{inline-size:5.25rem;} .inline-auto{inline-size:auto;} +.inline-inherit{inline-size:inherit;} .inline-lg{inline-size:32rem;} .max-block-\\\\[1px\\\\]{max-block-size:1px;} +.max-block-revert{max-block-size:revert;} .max-inline-\\\\$var{max-inline-size:var(--var);} .max-inline-20{max-inline-size:5rem;} .max-inline-full{max-inline-size:100%;} +.max-inline-inherit{max-inline-size:inherit;} .max-inline-lg{max-inline-size:32rem;} .max-inline-none{max-inline-size:none;} .min-block-\\\\[1px\\\\]{min-block-size:1px;} @@ -597,28 +630,43 @@ div:hover .group-\\\\[div\\\\:hover\\\\]-\\\\[combinator\\\\:test-4\\\\]{combina .aspect-ratio-\\\\$var{aspect-ratio:var(--var);} .aspect-ratio-0\\\\.7{aspect-ratio:0.7;} .aspect-ratio-3\\\\/2{aspect-ratio:3/2;} +.aspect-ratio-revert{aspect-ratio:revert;} .aspect-ratio-square{aspect-ratio:1/1;} .aspect-ratio-video{aspect-ratio:16/9;} +.aspect-unset{aspect-ratio:unset;} .cursor-\\\\[url\\\\(cursor_2\\\\.png\\\\)_2_2\\\\,_pointer\\\\]{cursor:url(cursor\\\\_2.png) 2 2, pointer;} .cursor-\\\\$pointer-var{cursor:var(--pointer-var);} +.cursor-inherit{cursor:inherit;} .cursor-pointer{cursor:pointer;} +.visible{visibility:visible;} .backface-hidden{backface-visibility:hidden;} +.backface-revert{backface-visibility:revert;} .pointer-events-auto{pointer-events:auto;} .pointer-events-none{pointer-events:none;} +.pointer-events-unset{pointer-events:unset;} .resize{resize:both;} .resize-none{resize:none;} +.resize-inherit{resize:inherit;} +.align-revert{vertical-align:revert;} .align-text-bottom{vertical-align:text-bottom;} .v-mid{vertical-align:middle;} .v-top{vertical-align:top;} +.v-unset{vertical-align:unset;} .vertical-baseline{vertical-align:baseline;} +.vertical-inherit{vertical-align:inherit;} .vertical-super{vertical-align:super;} .select-all{user-select:all;} .select-none{user-select:none;} +.select-inherit{user-select:inherit;} .whitespace-pre-wrap{white-space:pre-wrap;} +.whitespace-unset{white-space:unset;} .ws-nowrap{white-space:nowrap;} +.ws-revert{white-space:revert;} .break-normal{overflow-wrap:normal;word-break:normal;} .break-words{overflow-wrap:break-word;} .overflow-auto{overflow:auto;} +.overflow-inherit{overflow:inherit;} +.of-x-unset{overflow-x:unset;} .of-y-visible{overflow-y:visible;} .overflow-x-scroll{overflow-x:scroll;} .overflow-y-clip{overflow-y:clip;} @@ -629,7 +677,9 @@ div:hover .group-\\\\[div\\\\:hover\\\\]-\\\\[combinator\\\\:test-4\\\\]{combina .outline-size-4, .outline-width-4{outline-width:4px;} .outline-size-none{outline-width:0px;} +.outline-size-unset{outline-width:unset;} .outline-width-10px{outline-width:10px;} +.outline-width-revert{outline-width:revert;} .outline-\\\\[var\\\\(--red\\\\)\\\\]{outline-color:var(--red);} .outline-\\\\$variable{outline-color:var(--variable);} .outline-blue-2{--un-outline-color-opacity:1;outline-color:rgba(191,219,254,var(--un-outline-color-opacity));} @@ -639,11 +689,13 @@ div:hover .group-\\\\[div\\\\:hover\\\\]-\\\\[combinator\\\\:test-4\\\\]{combina .outline-offset-\\\\[var\\\\(--offset\\\\)\\\\]{outline-offset:var(--offset);} .outline-offset-\\\\$variable{outline-offset:var(--variable);} .outline-offset-4{outline-offset:4px;} +.outline-offset-inherit{outline-offset:inherit;} .outline-offset-none{outline-offset:0px;} .outline, .outline-solid{outline-style:solid;} .outline-hidden{outline-style:hidden;} .outline-inset{outline-style:inset;} +.outline-inherit{outline-style:inherit;} .outline-revert-layer{outline-style:revert-layer;} .outline-unset{outline-style:unset;} .outline-none{outline:2px solid transparent;outline-offset:2px;} @@ -653,37 +705,52 @@ div:hover .group-\\\\[div\\\\:hover\\\\]-\\\\[combinator\\\\:test-4\\\\]{combina .order-none{order:0;} .justify-start{justify-content:flex-start;} .justify-center{justify-content:center;} +.justify-inherit{justify-content:inherit;} .justify-items-end{justify-items:end;} +.justify-items-unset{justify-items:unset;} .justify-self-stretch{justify-self:stretch;} +.justify-self-revert{justify-self:revert;} .content-center{align-content:center;} .content-start{align-content:flex-start;} +.content-inherit{align-content:inherit;} .items-end{align-items:flex-end;} +.items-unset{align-items:unset;} .self-stretch{align-self:stretch;} +.self-revert{align-self:revert;} .place-content-stretch{place-content:stretch;} +.place-content-inherit{place-content:inherit;} .place-items-stretch{place-items:stretch;} +.place-items-unset{place-items:unset;} .place-self-stretch{place-self:stretch;} +.place-self-revert{place-self:revert;} .inset-\\\\[5px\\\\]{inset:5px;} .inset-\\\\$variable{inset:var(--variable);} .inset-0, .inset-none{inset:0rem;} .inset-5{inset:1.25rem;} +.inset-unset{inset:unset;} .inset-x-5{left:1.25rem;right:1.25rem;} .inset-y-5{top:1.25rem;bottom:1.25rem;} .inset-b-5{bottom:1.25rem;} .inset-e-5, .inset-ie-5{inset-inline-end:1.25rem;} +.inset-e-inherit{inset-inline-end:inherit;} .inset-s-\\\\$variable{inset-inline-start:var(--variable);} .inset-t-5{top:1.25rem;} .inset-block-5{inset-block-start:1.25rem;inset-block-end:1.25rem;} +.inset-block-unset{inset-block-start:unset;inset-block-end:unset;} .inset-inline-\\\\$variable{inset-inline-start:var(--variable);inset-inline-end:var(--variable);} .inset-inline-5{inset-inline-start:1.25rem;inset-inline-end:1.25rem;} .inset-bs-5{inset-block-start:1.25rem;} +.inset-ie-revert{inset-inline-end:revert;} .top-\\\\$top-height{top:var(--top-height);} .top-0{top:0rem;} .float-left{float:left;} .float-none{float:none;} +.float-unset{float:unset;} .clear-both{clear:both;} .clear-none{clear:none;} +.clear-revert{clear:revert;} .z-0, .z0{z-index:0;} .-z-1{z-index:-1;} @@ -691,8 +758,10 @@ div:hover .group-\\\\[div\\\\:hover\\\\]-\\\\[combinator\\\\:test-4\\\\]{combina .z-1{z-index:1;} .z-100{z-index:100;} .z-auto{z-index:auto;} +.z-inherit{z-index:inherit;} .box-border{box-sizing:border-box;} .box-content{box-sizing:content-box;} +.box-inherit{box-sizing:inherit;} .transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:150ms;} .transition-200{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:200ms;} .transition-background-color\\\\,color-200{transition-property:background-color,color;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:200ms;} @@ -715,6 +784,7 @@ div:hover .group-\\\\[div\\\\:hover\\\\]-\\\\[combinator\\\\:test-4\\\\]{combina .property-unset{transition-property:unset;} .transition-property-width{transition-property:width;} .transition-none{transition:none;} +.transition-revert-layer{transition:revert-layer;} .origin-top-left{transform-origin:top left;} .perspect-\\\\$variable{-webkit-perspective:var(--variable);perspective:var(--variable);} .perspect-100{-webkit-perspective:100px;perspective:100px;} @@ -773,6 +843,7 @@ div:hover .group-\\\\[div\\\\:hover\\\\]-\\\\[combinator\\\\:test-4\\\\]{combina .transform-cpu{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));} .transform-gpu{transform:translate3d(var(--un-translate-x), var(--un-translate-y), 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));} .transform-none{transform:none;} +.transform-unset{transform:unset;} .will-change-auto{will-change:auto;} .will-change-contents{will-change:contents;} .will-change-margin\\\\,padding{will-change:margin,padding;} diff --git a/test/__snapshots__/preset-wind.test.ts.snap b/test/__snapshots__/preset-wind.test.ts.snap index 40fc55b292..54175dab05 100644 --- a/test/__snapshots__/preset-wind.test.ts.snap +++ b/test/__snapshots__/preset-wind.test.ts.snap @@ -117,6 +117,7 @@ exports[`preset-wind > targets 1`] = ` .touch-pinch-zoom{--un-pinch-zoom:pinch-zoom;touch-action:var(--un-pan-x) var(--un-pan-y) var(--un-pinch-zoom);} .touch-manipulation{touch-action:manipulation;} .touch-none{touch-action:none;} +.touch-initial{touch-action:initial;} .snap-y{scroll-snap-type:y var(--un-scroll-snap-strictness);} .snap-both{scroll-snap-type:both var(--un-scroll-snap-strictness);} .snap-mandatory{--un-scroll-snap-strictness:mandatory;} @@ -146,15 +147,20 @@ exports[`preset-wind > targets 1`] = ` .list-greek{list-style-type:lower-greek;} .list-outside{list-style-position:outside;} .list-none{list-style-type:none;} +.list-inherit{list-style:inherit;} .columns-\\\\[3_auto\\\\]{columns:3 auto;} .columns-\\\\[auto_13em\\\\]{columns:auto 13em;} .columns-\\\\[auto_auto\\\\]{columns:auto auto;} .columns-3{columns:3;} .columns-5em{columns:5em;} .columns-auto{columns:auto;} +.columns-unset{columns:unset;} .break-before-avoid-page{break-before:avoid-page;} +.break-before-initial{break-before:initial;} .break-inside-avoid-column{break-inside:avoid-column;} +.break-inside-revert{break-inside:revert;} .break-after-column{break-after:column;} +.break-after-unset{break-after:unset;} .-space-x-4>:not([hidden])~:not([hidden]){--un-space-x-reverse:0;margin-left:calc(-1rem * calc(1 - var(--un-space-x-reverse)));margin-right:calc(-1rem * var(--un-space-x-reverse));} .space-x-\\\\$space>:not([hidden])~:not([hidden]){--un-space-x-reverse:0;margin-left:calc(var(--space) * calc(1 - var(--un-space-x-reverse)));margin-right:calc(var(--space) * var(--un-space-x-reverse));} .space-x-2>:not([hidden])~:not([hidden]){--un-space-x-reverse:0;margin-left:calc(0.5rem * calc(1 - var(--un-space-x-reverse)));margin-right:calc(0.5rem * var(--un-space-x-reverse));} @@ -186,8 +192,11 @@ exports[`preset-wind > targets 1`] = ` .divide-none>:not([hidden])~:not([hidden]){border-style:none;} .overscroll-contain{overscroll-behavior:contain;} .overscroll-none{overscroll-behavior:none;} +.overscroll-revert-layer{overscroll-behavior:revert-layer;} .overscroll-x-auto{overscroll-behavior-x:auto;} +.overscroll-y-unset{overscroll-behavior-y:unset;} .scroll-auto{scroll-behavior:auto;} +.scroll-unset{scroll-behavior:unset;} .bg-\\\\[length\\\\:1\\\\/2_20rem\\\\]{background-size:50% 20rem;} .bg-\\\\[length\\\\:10_20rem\\\\]{background-size:10px 20rem;} .bg-\\\\[position\\\\:1\\\\/2_20rem\\\\]{background-position:50% 20rem;} @@ -243,6 +252,7 @@ exports[`preset-wind > targets 1`] = ` .shape-\\\\[from_3\\\\.1416rad_at_10\\\\%_50\\\\%\\\\]{--un-gradient-shape:from 3.1416rad at 10% 50%;--un-gradient:var(--un-gradient-shape), var(--un-gradient-stops);} .bg-none{background-image:none;} .box-decoration-slice{box-decoration-break:slice;} +.box-decoration-initial{box-decoration-break:initial;} .bg-auto{background-size:auto;} .bg-cover{background-size:cover;} .bg-fixed{background-attachment:fixed;} @@ -250,11 +260,14 @@ exports[`preset-wind > targets 1`] = ` .bg-scroll{background-attachment:scroll;} .bg-clip-border{-webkit-background-clip:border-box;background-clip:border-box;} .bg-clip-text{-webkit-background-clip:text;background-clip:text;} +.bg-clip-unset{-webkit-background-clip:unset;background-clip:unset;} .bg-bottom{background-position:bottom;} .bg-right-bottom{background-position:right bottom;} .bg-no-repeat{background-repeat:no-repeat;} .bg-repeat-space{background-repeat:space;} +.bg-repeat-revert{background-repeat:revert;} .bg-origin-border{background-origin:border-box;} +.bg-origin-initial{background-origin:initial;} .svg\\\\:fill-red svg{--un-fill-opacity:1;fill:rgba(248,113,113,var(--un-fill-opacity));} .object-none{object-fit:none;} .object-\\\\[center_25\\\\%\\\\]{object-position:center 25%;} @@ -271,8 +284,11 @@ exports[`preset-wind > targets 1`] = ` .normal-nums{font-variant-numeric:normal;} .hyphens-auto{-webkit-hyphens:auto;-ms-hyphens:auto;hyphens:auto;} .hyphens-none{-webkit-hyphens:none;-ms-hyphens:none;hyphens:none;} +.hyphens-unset{-webkit-hyphens:unset;-ms-hyphens:unset;hyphens:unset;} .write-normal{writing-mode:horizontal-tb;} +.write-unset{writing-mode:unset;} .write-orient-sideways{text-orientation:sideways;} +.write-orient-revert{text-orientation:revert;} .caret-red{--un-caret-opacity:1;caret-color:rgba(248,113,113,var(--un-caret-opacity));} .caret-op-90{--un-caret-opacity:0.9;} .accent-red{--un-accent-opacity:1;accent-color:rgba(248,113,113,var(--un-accent-opacity));} @@ -280,9 +296,11 @@ exports[`preset-wind > targets 1`] = ` .bg-blend-color-burn{background-blend-mode:color-burn;} .bg-blend-luminosity{background-blend-mode:luminosity;} .bg-blend-normal{background-blend-mode:normal;} +.bg-blend-unset{background-blend:unset;} .mix-blend-hard-light{mix-blend-mode:hard-light;} .mix-blend-plus-lighter{mix-blend-mode:plus-lighter;} .mix-blend-normal{mix-blend-mode:normal;} +.mix-blend-revert{mix-blend:revert;} .image-render-pixel{-ms-interpolation-mode:nearest-neighbor;image-rendering:-webkit-optimize-contrast;image-rendering:-moz-crisp-edges;image-rendering:-o-pixelated;image-rendering:pixelated;} .backdrop-blur{--un-backdrop-blur:blur(8px);-webkit-backdrop-filter: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);backdrop-filter: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);} .backdrop-blur-4{--un-backdrop-blur:blur(4px);-webkit-backdrop-filter: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);backdrop-filter: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);} @@ -346,6 +364,8 @@ exports[`preset-wind > targets 1`] = ` .backdrop-filter{-webkit-backdrop-filter: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);backdrop-filter: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);} .filter-none{filter:none;} .backdrop-filter-none{-webkit-backdrop-filter:none;backdrop-filter:none;} +.filter-unset{filter:unset;} +.backdrop-filter-revert{-webkit-backdrop-filter:revert;backdrop-filter:revert;} .placeholder-inherit::placeholder{color:inherit;} .placeholder-red-400::placeholder{--un-placeholder-opacity:1;color:rgba(248,113,113,var(--un-placeholder-opacity));} @media (orientation: landscape){ diff --git a/test/assets/preset-mini-targets.ts b/test/assets/preset-mini-targets.ts index 59af61cb0d..6b365eaa03 100644 --- a/test/assets/preset-mini-targets.ts +++ b/test/assets/preset-mini-targets.ts @@ -5,12 +5,19 @@ export const presetMiniTargets: string[] = [ 'align-text-bottom', 'v-top', 'v-mid', + 'vertical-inherit', + 'align-revert', + 'v-unset', 'text-left', // behaviors 'outline-none', 'outline', + 'outline-inherit', 'outline-size-none', + 'outline-size-unset', + 'outline-width-revert', + 'outline-offset-inherit', 'outline-hidden', 'outline-gray', 'outline-gray-400', @@ -43,26 +50,32 @@ export const presetMiniTargets: string[] = [ 'border', 'border-double', 'border-none', + 'border-inherit', 'border-size-none', 'border-4', 'border-b', 'border-x', 'border-t-2', 'border-be', + 'border-ie-unset', 'border-inline', 'border-bs-2', 'border-size-2', 'border-x-size-2', 'border-t-size-2', 'border-width-3', + 'border-size-unset', 'border-x-width-3', 'border-t-width-3', 'rounded-[4px]', 'rounded-1/2', 'rounded-full', + 'rounded-unset', 'rounded-md', 'rounded-rb-1/2', + 'rounded-rb-1/2', 'rounded-t-sm', + 'rounded-b-revert', 'rounded-tr', 'rounded-ie-be-1/2', 'rounded-bs-sm', @@ -225,11 +238,13 @@ export const presetMiniTargets: string[] = [ 'decoration-offset-0.6rem', 'decoration-offset-none', 'decoration-underline', + 'decoration-size-unset', 'underline', 'underline-dashed', 'underline-red-500', 'underline-op80', 'underline-auto', + 'underline-inherit', 'underline-5', 'underline-1rem', 'underline-offset-auto', @@ -261,10 +276,12 @@ export const presetMiniTargets: string[] = [ 'basis-auto', 'basis-none', 'gap-none', + 'gap-inherit', 'gap-4', 'gap-x-1', 'gap2', 'flex-gap-y-1', + 'flex-gap-y-unset', 'grid-gap-y-1', // grid @@ -294,7 +311,9 @@ export const presetMiniTargets: string[] = [ // layout 'of-y-visible', + 'of-x-unset', 'overflow-auto', + 'overflow-inherit', 'overflow-x-scroll', 'overflow-y-clip', @@ -303,50 +322,69 @@ export const presetMiniTargets: string[] = [ 'relative', 'absolute', 'pos-fixed', + 'pos-unset', 'position-sticky', + 'position-inherit', + 'justify-inherit', 'justify-start', 'justify-center', 'justify-items-end', + 'justify-items-unset', 'justify-self-stretch', + 'justify-self-revert', 'order-first', 'order-none', 'content-start', + 'content-inherit', 'content-center', 'items-end', + 'items-unset', 'self-stretch', + 'self-revert', 'place-content-stretch', 'place-items-stretch', 'place-self-stretch', + 'place-content-inherit', + 'place-items-unset', + 'place-self-revert', // position - insets 'top-0', 'top-$top-height', 'inset-none', + 'inset-unset', 'inset-x-5', 'inset-y-5', 'inset-t-5', 'inset-b-5', 'inset-e-5', + 'inset-e-inherit', 'inset-bs-5', 'inset-ie-5', + 'inset-ie-revert', 'inset-0', 'inset-5', 'inset-[5px]', 'inset-inline-5', 'inset-block-5', + 'inset-block-unset', // position - others 'float-left', 'float-none', + 'float-unset', 'clear-both', 'clear-none', + 'clear-revert', 'z0', 'z-0', 'z-1', 'z-100', 'z-auto', + 'z-inherit', 'box-content', 'box-border', + 'box-inherit', // ring, shadow 'ring', @@ -369,6 +407,7 @@ export const presetMiniTargets: string[] = [ // size 'h-auto', + 'h-inherit', 'h-1', 'h-1.000%', 'h-1.001%', @@ -396,6 +435,7 @@ export const presetMiniTargets: string[] = [ 'h-lg', 'w-none', 'w-auto', + 'w-unset', 'w-1', 'w-21', 'w-1/4', @@ -404,36 +444,44 @@ export const presetMiniTargets: string[] = [ 'h-screen-sm', 'h-screen-lg', 'max-h-[1px]', + 'max-h-unset', 'max-w-none', 'max-w-20', 'max-w-lg', 'max-w-full', 'max-w-$var', 'max-w-screen-lg', + 'max-w-revert', 'min-h-[1px]', + 'min-h-unset', 'min-w-none', 'min-w-20', 'min-w-lg', 'min-w-full', 'min-w-$var', 'min-w-screen-lg', + 'min-w-revert-layer', 'h-$var', 'h-[calc(1000px-4rem)]', 'w-[calc(calc(100px*10)-4rem)]', // size - logical 'block-auto', + 'block-unset', 'block-1', 'block-21', 'block-1/2', 'block-8/7', 'block-lg', 'inline-auto', + 'inline-inherit', 'inline-1', 'inline-21', 'inline-1/4', 'inline-lg', 'max-block-[1px]', + 'max-block-revert', + 'max-inline-inherit', 'max-inline-none', 'max-inline-20', 'max-inline-lg', @@ -452,7 +500,9 @@ export const presetMiniTargets: string[] = [ // size - ar 'aspect-ratio-square', 'aspect-ratio-video', + 'aspect-ratio-revert', 'aspect-auto', + 'aspect-unset', 'aspect-ratio-3/2', 'aspect-ratio-0.7', 'aspect-ratio-$var', @@ -461,14 +511,17 @@ export const presetMiniTargets: string[] = [ // spacing 'p-none', + 'p-unset', 'p-2', 'p-t-2', 'p2', 'pl-10px', + 'pl-revert', 'pt-2', 'pt2', 'pt-$title2', 'pa', + 'm-inherit', 'm-[3em]', 'm-0', 'm-1/2', @@ -476,19 +529,23 @@ export const presetMiniTargets: string[] = [ 'mt-[-10.2%]', 'mt-$height', 'my-auto', + 'my-revert-layer', 'm-none', // spacing - logical 'p-ie-none', + 'p-ie-revert', 'p-bs-2', 'pis-10px', 'pbs-2', 'pbs2', 'pbs-$title2', + 'mbs-unset', 'mbs-[-10.2%]', 'mbs-$height', 'm-block-auto', 'm-inline-none', + 'm-block-inherit', // spacing - default 'p', @@ -507,24 +564,35 @@ export const presetMiniTargets: string[] = [ // static 'contents', + 'display-$var', + 'display-inherit', + 'visible', 'backface-hidden', + 'backface-revert', 'cursor-pointer', + 'cursor-inherit', 'cursor-$pointer-var', 'cursor-[url(cursor_2.png)_2_2,_pointer]', 'pointer-events-none', 'pointer-events-auto', + 'pointer-events-unset', 'resize', 'resize-none', + 'resize-inherit', 'select-all', 'select-none', + 'select-inherit', 'whitespace-pre-wrap', + 'whitespace-unset', 'ws-nowrap', + 'ws-revert', 'break-normal', 'break-words', 'text-clip', 'case-upper', // ! 'case-normal', // ! + 'case-inherit', // ! 'italic', 'oblique', 'antialiased', @@ -576,6 +644,7 @@ export const presetMiniTargets: string[] = [ 'transform-gpu', 'transform-cpu', 'transform-none', + 'transform-unset', 'translate-none', 'translate-y-1/4', 'translate-y-px', @@ -623,6 +692,7 @@ export const presetMiniTargets: string[] = [ 'transition-color,background-color-200', 'transition-background-color,color-200', 'transition', + 'transition-revert-layer', 'property-none', 'property-all', 'property-unset', @@ -643,6 +713,7 @@ export const presetMiniTargets: string[] = [ 'text-base', 'text-lg', 'text-2em', + 'text-size-unset', 'text-size-[2em]', 'font-thin', 'font-900', @@ -650,7 +721,7 @@ export const presetMiniTargets: string[] = [ 'font-50', 'font-synthesis-weight', 'font-synthesis-small-caps', - 'font-synthesis-small-caps', + 'font-synthesis-inherit', 'font-inherit', 'fw-900', 'fw-050', diff --git a/test/assets/preset-wind-targets.ts b/test/assets/preset-wind-targets.ts index defa5ae6c5..44334a33ad 100644 --- a/test/assets/preset-wind-targets.ts +++ b/test/assets/preset-wind-targets.ts @@ -46,9 +46,11 @@ export const presetWindTargets: string[] = [ 'bg-blend-normal', 'bg-blend-color-burn', 'bg-blend-luminosity', + 'bg-blend-unset', 'bg-bottom', 'bg-clip-border', 'bg-clip-text', + 'bg-clip-unset', 'bg-cover', 'bg-fixed', 'bg-gradient-to-t', @@ -57,7 +59,9 @@ export const presetWindTargets: string[] = [ 'bg-no-repeat', 'bg-none', 'bg-origin-border', + 'bg-origin-initial', 'bg-repeat-space', + 'bg-repeat-revert', 'bg-right-bottom', 'bg-scroll', 'bg-[length:10_20rem]', @@ -120,16 +124,21 @@ export const presetWindTargets: string[] = [ 'list-alpha', 'list-greek', 'list-outside', + 'list-inherit', 'box-decoration-slice', + 'box-decoration-initial', 'accent-op-90', 'accent-red', 'caret-op-90', 'caret-red', 'image-render-pixel', 'overscroll-x-auto', + 'overscroll-y-unset', 'overscroll-contain', 'overscroll-none', + 'overscroll-revert-layer', 'scroll-auto', + 'scroll-unset', // columns 'columns-3', @@ -138,9 +147,13 @@ export const presetWindTargets: string[] = [ 'columns-[3_auto]', 'columns-[auto_13em]', 'columns-[auto_auto]', + 'columns-unset', 'break-before-avoid-page', 'break-inside-avoid-column', 'break-after-column', + 'break-before-initial', + 'break-inside-revert', + 'break-after-unset', // container // @@ -170,6 +183,7 @@ export const presetWindTargets: string[] = [ 'filter-blur-md', 'filter-blur-4', 'filter-blur-none', + 'filter-unset', 'blur', 'blur-md', 'blur-4', @@ -198,6 +212,7 @@ export const presetWindTargets: string[] = [ // filters - backdrop 'backdrop-filter', 'backdrop-filter-none', + 'backdrop-filter-revert', 'backdrop-blur', 'backdrop-blur-md', 'backdrop-blur-4', @@ -252,6 +267,7 @@ export const presetWindTargets: string[] = [ 'mix-blend-normal', 'mix-blend-hard-light', 'mix-blend-plus-lighter', + 'mix-blend-revert', 'space-y-none', 'space-x-2', 'space-y-4', @@ -268,8 +284,11 @@ export const presetWindTargets: string[] = [ 'normal-case', 'hyphens-none', 'hyphens-auto', + 'hyphens-unset', 'write-normal', 'write-orient-sideways', + 'write-unset', + 'write-orient-revert', 'not-sr-only', 'isolate', 'isolate-auto', @@ -308,6 +327,7 @@ export const presetWindTargets: string[] = [ 'touch-pinch-zoom', 'touch-manipulation', 'touch-none', + 'touch-initial', // typography 'lining-nums', diff --git a/test/preset-uno.test.ts b/test/preset-uno.test.ts index 0db0daf4c4..1fada48a6d 100644 --- a/test/preset-uno.test.ts +++ b/test/preset-uno.test.ts @@ -94,8 +94,6 @@ const nonTargets = [ 'property-colour', 'property-background-color,colour-300', 'property-colour-background-color-300', - 'transition-unset', - 'transition-revert-layer', 'transition-colour', 'transition-background-color,colour-300', 'transition-colour,background-color-300', From c948b1b34afcfba67040359bf972e2e19a0669c7 Mon Sep 17 00:00:00 2001 From: Saya Date: Sun, 26 Jun 2022 20:46:16 +0800 Subject: [PATCH 2/3] revert overscrolls --- packages/preset-wind/src/rules/behaviors.ts | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/packages/preset-wind/src/rules/behaviors.ts b/packages/preset-wind/src/rules/behaviors.ts index b2963ae2a6..3c0a5ab038 100644 --- a/packages/preset-wind/src/rules/behaviors.ts +++ b/packages/preset-wind/src/rules/behaviors.ts @@ -57,8 +57,18 @@ export const imageRenderings: Rule[] = [ ] export const overscrolls: Rule[] = [ - [/^overscroll-([-\w]+)$/, ([, s]) => ['auto', 'contain', 'none', ...globalKeywords].includes(s) ? { 'overscroll-behavior': s } : undefined], - [/^overscroll-([xy])-([-\w]+)$/, ([, d, s]) => ['auto', 'contain', 'none', ...globalKeywords].includes(s) ? { [`overscroll-behavior-${d}`]: s } : undefined], + ['overscroll-auto', { 'overscroll-behavior': 'auto' }], + ['overscroll-contain', { 'overscroll-behavior': 'contain' }], + ['overscroll-none', { 'overscroll-behavior': 'none' }], + ...makeGlobalStaticRules('overscroll', 'overscroll-behavior'), + ['overscroll-x-auto', { 'overscroll-behavior-x': 'auto' }], + ['overscroll-x-contain', { 'overscroll-behavior-x': 'contain' }], + ['overscroll-x-none', { 'overscroll-behavior-x': 'none' }], + ...makeGlobalStaticRules('overscroll-x', 'overscroll-behavior-x'), + ['overscroll-y-auto', { 'overscroll-behavior-y': 'auto' }], + ['overscroll-y-contain', { 'overscroll-behavior-y': 'contain' }], + ['overscroll-y-none', { 'overscroll-behavior-y': 'none' }], + ...makeGlobalStaticRules('overscroll-y', 'overscroll-behavior-y'), ] export const scrollBehaviors: Rule[] = [ From 23e764201b98045a68c3f32cf8251f2c8073ade4 Mon Sep 17 00:00:00 2001 From: Saya Date: Sun, 26 Jun 2022 20:49:56 +0800 Subject: [PATCH 3/3] lint --- packages/preset-wind/src/rules/behaviors.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/preset-wind/src/rules/behaviors.ts b/packages/preset-wind/src/rules/behaviors.ts index 3c0a5ab038..5846c5c89d 100644 --- a/packages/preset-wind/src/rules/behaviors.ts +++ b/packages/preset-wind/src/rules/behaviors.ts @@ -1,5 +1,5 @@ import type { Rule } from '@unocss/core' -import { colorResolver, globalKeywords, handler as h, makeGlobalStaticRules } from '@unocss/preset-mini/utils' +import { colorResolver, handler as h, makeGlobalStaticRules } from '@unocss/preset-mini/utils' const listStyles: Record = { 'disc': 'disc',