From 9619658cb43396b8f289d76c2e1143a419ac8174 Mon Sep 17 00:00:00 2001 From: "shiwenhua.8" Date: Fri, 15 Aug 2025 17:31:55 +0800 Subject: [PATCH 1/3] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81tailwind4?= =?UTF-8?q?=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/sandbox/scoped_css.ts | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/src/sandbox/scoped_css.ts b/src/sandbox/scoped_css.ts index f4840ba9..390c40a5 100644 --- a/src/sandbox/scoped_css.ts +++ b/src/sandbox/scoped_css.ts @@ -45,6 +45,10 @@ class CSSParser { this.prefix = prefix this.baseURI = baseURI this.linkPath = linkPath || '' + + // @layer: {:root, :host {}} => @layer: { * {}} + this.preprocessLayerSelectors() + this.matchRules() return isFireFox() ? decodeURIComponent(this.result) : this.result } @@ -302,7 +306,15 @@ class CSSParser { private layerRule (): boolean | void { if (!this.commonMatch(/^@layer\s*([^{;]+)/)) return false - if (!this.matchOpenBrace()) return !!this.commonMatch(/^[;]+/) + // check if it ends with ; (declaration or single line) + if (this.cssText.charAt(0) === ';') { + this.commonMatch(/^;/) // delete ; + this.matchLeadingSpaces() + return true + } + + // check if it starts with { (block) + if (!this.matchOpenBrace()) return false this.matchComments() @@ -462,6 +474,22 @@ class CSSParser { parseError(msg, linkPath) } } + + // @layer: {:root, :host {}} => @layer: { * {}} + private preprocessLayerSelectors (): void { + this.cssText = this.cssText.replace( + /@layer\s+([^{]+)\s*\{([^}]*)\}/g, + (_, layerDeclaration, layerContent) => { + + const processedContent = layerContent.replace( + /(:root\s*,\s*:host|:host\s*,\s*:root)\s*\{/g, + ' * {' + ) + + return `@layer ${layerDeclaration} {${processedContent}}` + } + ) + } } /** From 68938f6af493dbbce2cb913e8418d454b67f622c Mon Sep 17 00:00:00 2001 From: "shiwenhua.8" Date: Mon, 2 Mar 2026 21:50:57 +0800 Subject: [PATCH 2/3] =?UTF-8?q?feat:=20=E4=BB=85=E4=BF=AE=E6=94=B9@layer?= =?UTF-8?q?=20xxx;=E5=8C=B9=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/sandbox/scoped_css.ts | 24 ++---------------------- yarn.lock | 19 ++----------------- 2 files changed, 4 insertions(+), 39 deletions(-) diff --git a/src/sandbox/scoped_css.ts b/src/sandbox/scoped_css.ts index 390c40a5..2f0f8df3 100644 --- a/src/sandbox/scoped_css.ts +++ b/src/sandbox/scoped_css.ts @@ -45,10 +45,7 @@ class CSSParser { this.prefix = prefix this.baseURI = baseURI this.linkPath = linkPath || '' - - // @layer: {:root, :host {}} => @layer: { * {}} - this.preprocessLayerSelectors() - + this.matchRules() return isFireFox() ? decodeURIComponent(this.result) : this.result } @@ -306,14 +303,13 @@ class CSSParser { private layerRule (): boolean | void { if (!this.commonMatch(/^@layer\s*([^{;]+)/)) return false - // check if it ends with ; (declaration or single line) + // @layer theme, base, components, utilities; — statement form (no braces) if (this.cssText.charAt(0) === ';') { this.commonMatch(/^;/) // delete ; this.matchLeadingSpaces() return true } - // check if it starts with { (block) if (!this.matchOpenBrace()) return false this.matchComments() @@ -474,22 +470,6 @@ class CSSParser { parseError(msg, linkPath) } } - - // @layer: {:root, :host {}} => @layer: { * {}} - private preprocessLayerSelectors (): void { - this.cssText = this.cssText.replace( - /@layer\s+([^{]+)\s*\{([^}]*)\}/g, - (_, layerDeclaration, layerContent) => { - - const processedContent = layerContent.replace( - /(:root\s*,\s*:host|:host\s*,\s*:root)\s*\{/g, - ' * {' - ) - - return `@layer ${layerDeclaration} {${processedContent}}` - } - ) - } } /** diff --git a/yarn.lock b/yarn.lock index 6377fbd4..8fd88bbf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5004,7 +5004,7 @@ jest@~26.6.0: import-local "^3.0.2" jest-cli "^26.6.3" -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: +js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== @@ -5370,13 +5370,6 @@ log-update@^4.0.0: slice-ansi "^4.0.0" wrap-ansi "^6.2.0" -loose-envify@^1.1.0: - version "1.4.0" - resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" @@ -5788,7 +5781,7 @@ oauth-sign@~0.9.0: resolved "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -object-assign@^4, object-assign@^4.1.1, object-assign@latest: +object-assign@^4, object-assign@latest: version "4.1.1" resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== @@ -6316,14 +6309,6 @@ react-is@^17.0.1: resolved "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== -react@~17.0.2: - version "17.0.2" - resolved "https://registry.npmjs.org/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" - integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - read-pkg-up@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" From fdb58b0757f3e135cfdddcef05bf0edb8626a3ff Mon Sep 17 00:00:00 2001 From: "shiwenhua.8" Date: Mon, 2 Mar 2026 21:53:35 +0800 Subject: [PATCH 3/3] feat: restore yarn.lock --- yarn.lock | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/yarn.lock b/yarn.lock index 8fd88bbf..6377fbd4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5004,7 +5004,7 @@ jest@~26.6.0: import-local "^3.0.2" jest-cli "^26.6.3" -js-tokens@^4.0.0: +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== @@ -5370,6 +5370,13 @@ log-update@^4.0.0: slice-ansi "^4.0.0" wrap-ansi "^6.2.0" +loose-envify@^1.1.0: + version "1.4.0" + resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" @@ -5781,7 +5788,7 @@ oauth-sign@~0.9.0: resolved "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -object-assign@^4, object-assign@latest: +object-assign@^4, object-assign@^4.1.1, object-assign@latest: version "4.1.1" resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== @@ -6309,6 +6316,14 @@ react-is@^17.0.1: resolved "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== +react@~17.0.2: + version "17.0.2" + resolved "https://registry.npmjs.org/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" + integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + read-pkg-up@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be"