From 7789fd0f85b873973bb97499c1660ad7962b832b Mon Sep 17 00:00:00 2001 From: cuiluc Date: Thu, 3 Nov 2022 13:36:28 +0800 Subject: [PATCH 1/5] feat: selection-style --- packages/core/src/generator/index.ts | 1 + packages/core/src/types.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/packages/core/src/generator/index.ts b/packages/core/src/generator/index.ts index 39e901fd8d..313ce8591e 100644 --- a/packages/core/src/generator/index.ts +++ b/packages/core/src/generator/index.ts @@ -284,6 +284,7 @@ export class UnoGenerator { } return { + sheet, get css() { return getLayers() }, layers, matched, diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index 33087ea014..cebe75ecae 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -635,6 +635,7 @@ RequiredByKey, 'mergeSelectors' | 'theme' | 'rules' | 'variant } export interface GenerateResult { + sheet?: any css: string layers: string[] getLayer(name?: string): string | undefined From 195c2c261eabed20a25041c9f73b262a98e5aab5 Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Mon, 7 Nov 2022 17:52:24 +0800 Subject: [PATCH 2/5] chore: update --- packages/core/src/types.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index cebe75ecae..427d78b775 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -635,12 +635,12 @@ RequiredByKey, 'mergeSelectors' | 'theme' | 'rules' | 'variant } export interface GenerateResult { - sheet?: any css: string layers: string[] getLayer(name?: string): string | undefined getLayers(includes?: string[], excludes?: string[]): string matched: Set + sheet?: Map } export type VariantMatchedResult = readonly [ From 8859ff63e91e6a7d1811ff16b40388d124a74584 Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Tue, 8 Nov 2022 21:48:14 +0800 Subject: [PATCH 3/5] chore: clean up --- packages/core/src/generator/index.ts | 1 - packages/core/src/types.ts | 1 - 2 files changed, 2 deletions(-) diff --git a/packages/core/src/generator/index.ts b/packages/core/src/generator/index.ts index 313ce8591e..39e901fd8d 100644 --- a/packages/core/src/generator/index.ts +++ b/packages/core/src/generator/index.ts @@ -284,7 +284,6 @@ export class UnoGenerator { } return { - sheet, get css() { return getLayers() }, layers, matched, diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index 427d78b775..33087ea014 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -640,7 +640,6 @@ export interface GenerateResult { getLayer(name?: string): string | undefined getLayers(includes?: string[], excludes?: string[]): string matched: Set - sheet?: Map } export type VariantMatchedResult = readonly [ From 4d7c5ac3ae77212532863a15b261aa4307b92ccf Mon Sep 17 00:00:00 2001 From: cuiluc Date: Wed, 9 Nov 2022 11:50:14 +0800 Subject: [PATCH 4/5] fix: selection with media --- packages/vscode/src/selectionStyle.ts | 31 +++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/packages/vscode/src/selectionStyle.ts b/packages/vscode/src/selectionStyle.ts index cda9af0f5d..87d9c318e9 100644 --- a/packages/vscode/src/selectionStyle.ts +++ b/packages/vscode/src/selectionStyle.ts @@ -44,16 +44,26 @@ export async function registerSelectionStyle(cwd: string, contextLoader: Context const classNamePlaceholder = '___' const sheetMap = new Map() + const mediaSheetMap = new Map>() await Promise.all(Array.from(uniqMap.values()) .map(async (name) => { const tokens = await ctx.uno.parseToken(name, classNamePlaceholder) || [] - tokens.forEach((token) => { - if (token[1] && token[2]) { - const key = token[1] + tokens.forEach(([, className, cssText, media]) => { + if (className && cssText) { + const key = className .replace(`.${classNamePlaceholder}`, '&') .replace(regexScopePlaceholder, ' ') .trim() - sheetMap.set(key, (sheetMap.get(key) || '') + token[2]) + + let activeSheetMap = sheetMap + if (media) { + if (!mediaSheetMap.has(media)) + mediaSheetMap.set(media, new Map()) + + activeSheetMap = mediaSheetMap.get(media)! + } + + activeSheetMap.set(key, (activeSheetMap.get(key) || '') + cssText) } }) }), @@ -62,6 +72,19 @@ export async function registerSelectionStyle(cwd: string, contextLoader: Context const css = Array.from(sheetMap.keys()) .sort() .map(key => `${key}{${sheetMap.get(key)}}`) + .concat( + Array.from(mediaSheetMap.keys()) + .sort() + .map((media) => { + const sheetMap = mediaSheetMap.get(media)! + return `${media}{${ + Array.from(sheetMap!.keys()) + .sort() + .map(key => `${key}{${sheetMap!.get(key)}}`) + .join('\n') + }}` + }), + ) .join('\n') const prettified = prettier.format(css, { From c449060db8a21f50dc238b56fba95908dce78c7d Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Wed, 9 Nov 2022 15:46:28 +0800 Subject: [PATCH 5/5] chore: update --- packages/vscode/src/selectionStyle.ts | 33 +++++---------------------- 1 file changed, 6 insertions(+), 27 deletions(-) diff --git a/packages/vscode/src/selectionStyle.ts b/packages/vscode/src/selectionStyle.ts index 87d9c318e9..5be746ed41 100644 --- a/packages/vscode/src/selectionStyle.ts +++ b/packages/vscode/src/selectionStyle.ts @@ -35,7 +35,7 @@ export async function registerSelectionStyle(cwd: string, contextLoader: Context code = `${code} >` const ctx = await contextLoader.resolveContext(code, id) || (await contextLoader.resolveClosestContext(code, id)) const result = await getMatchedPositionsFromCode(ctx.uno, code) - if (!result.length) + if (result.length <= 1) return reset() const uniqMap = new Map() @@ -44,26 +44,18 @@ export async function registerSelectionStyle(cwd: string, contextLoader: Context const classNamePlaceholder = '___' const sheetMap = new Map() - const mediaSheetMap = new Map>() await Promise.all(Array.from(uniqMap.values()) .map(async (name) => { const tokens = await ctx.uno.parseToken(name, classNamePlaceholder) || [] tokens.forEach(([, className, cssText, media]) => { if (className && cssText) { - const key = className + let key = className .replace(`.${classNamePlaceholder}`, '&') .replace(regexScopePlaceholder, ' ') .trim() - - let activeSheetMap = sheetMap - if (media) { - if (!mediaSheetMap.has(media)) - mediaSheetMap.set(media, new Map()) - - activeSheetMap = mediaSheetMap.get(media)! - } - - activeSheetMap.set(key, (activeSheetMap.get(key) || '') + cssText) + if (media) + key = `${media}{${key}` + sheetMap.set(key, (sheetMap.get(key) || '') + cssText) } }) }), @@ -71,20 +63,7 @@ export async function registerSelectionStyle(cwd: string, contextLoader: Context const css = Array.from(sheetMap.keys()) .sort() - .map(key => `${key}{${sheetMap.get(key)}}`) - .concat( - Array.from(mediaSheetMap.keys()) - .sort() - .map((media) => { - const sheetMap = mediaSheetMap.get(media)! - return `${media}{${ - Array.from(sheetMap!.keys()) - .sort() - .map(key => `${key}{${sheetMap!.get(key)}}`) - .join('\n') - }}` - }), - ) + .map(key => `${key}{${sheetMap.get(key)}}${key.includes('{') ? '}' : ''}`) .join('\n') const prettified = prettier.format(css, {