From 822d82950311c2ddb54d3c72002f1355afa3e350 Mon Sep 17 00:00:00 2001 From: Johnk-Mj Date: Sat, 6 Apr 2024 12:23:08 +0200 Subject: [PATCH] feat(preset-mini): Add support for peer and group variants on aria-*, fix #3691 --- packages/preset-mini/src/_variants/aria.ts | 27 ++++++++++++++++++- packages/preset-mini/src/_variants/default.ts | 3 ++- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/packages/preset-mini/src/_variants/aria.ts b/packages/preset-mini/src/_variants/aria.ts index 8a0254ea4d..86edb3e931 100644 --- a/packages/preset-mini/src/_variants/aria.ts +++ b/packages/preset-mini/src/_variants/aria.ts @@ -1,4 +1,4 @@ -import type { VariantContext, VariantObject } from '@unocss/core' +import type { Variant, VariantContext, VariantObject } from '@unocss/core' import type { Theme } from '../theme' import { h, variantGetParameter } from '../utils' @@ -18,3 +18,28 @@ export const variantAria: VariantObject = { } }, } + +function taggedAria(tagName: string): Variant { + return { + name: `${tagName}-aria`, + match(matcher, ctx: VariantContext) { + const variant = variantGetParameter(`${tagName}-aria-`, matcher, ctx.generator.config.separators) + if (variant) { + const [match, rest] = variant + const ariaAttribute = h.bracket(match) ?? ctx.theme.aria?.[match] ?? '' + if (ariaAttribute) { + return { + matcher: `${tagName}-[[aria-${ariaAttribute}]]:${rest}`, + } + } + } + }, + } +} + +export const variantTaggedAriaAttributes: Variant[] = [ + taggedAria('group'), + taggedAria('peer'), + taggedAria('parent'), + taggedAria('previous'), +] diff --git a/packages/preset-mini/src/_variants/default.ts b/packages/preset-mini/src/_variants/default.ts index faf1182823..ba06e01593 100644 --- a/packages/preset-mini/src/_variants/default.ts +++ b/packages/preset-mini/src/_variants/default.ts @@ -11,7 +11,7 @@ import { variantImportant } from './important' import { variantCustomMedia, variantPrint } from './media' import { variantSupports } from './supports' import { variantPartClasses, variantPseudoClassFunctions, variantPseudoClassesAndElements, variantTaggedPseudoClasses } from './pseudo' -import { variantAria } from './aria' +import { variantAria, variantTaggedAriaAttributes } from './aria' import { variantDataAttribute, variantTaggedDataAttributes } from './data' import { variantContainerQuery } from './container' @@ -43,6 +43,7 @@ export function variants(options: PresetMiniOptions): Variant[] { variantContainerQuery, variantVariables, ...variantTaggedDataAttributes, + ...variantTaggedAriaAttributes, variantTheme, ]