Skip to content

postcss-preset-env : v8 #472

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 207 commits into from
Jan 24, 2023
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
207 commits
Select commit Hold shift + click to select a range
eb9c086
prefers color scheme (#436)
romainmenke Jun 13, 2022
5629794
Merge branch 'main' into postcss-preset-env--v8
Antonio-Laguna Jun 18, 2022
08c25af
update tests (#485)
romainmenke Jun 18, 2022
3a3d59e
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Jun 23, 2022
e8401fe
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Jun 25, 2022
9a0ab6c
css-has-pseudo (#473)
romainmenke Jun 25, 2022
68a1239
css-has-pseudo : make the experimental plugin a noop (#500)
romainmenke Jun 25, 2022
d58c1a2
CSS Blank Pseudo (#486)
Antonio-Laguna Jun 27, 2022
4982633
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Jun 27, 2022
1f54269
Updating package-lock
Antonio-Laguna Jun 27, 2022
1f48bd4
Updating lock again
Antonio-Laguna Jun 27, 2022
96b3c13
Updating CHANGELOG
Antonio-Laguna Jun 27, 2022
32b84c7
Merge branch 'main' into postcss-preset-env--v8
Antonio-Laguna Jun 30, 2022
0878904
Updating Focus Visible (#513)
Antonio-Laguna Jul 1, 2022
1597155
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Jul 2, 2022
900f867
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Jul 3, 2022
2350a29
case insensitive matching (#517)
romainmenke Jul 3, 2022
23c9a6f
Updating Focus Within (#516)
Antonio-Laguna Jul 3, 2022
30f114f
postcss-blank : browser compat (#519)
romainmenke Jul 3, 2022
a3f3fc7
postcss-focus-within : browser compat (#520)
romainmenke Jul 3, 2022
d12612a
Adding global class to CSS Blank (#524)
Antonio-Laguna Jul 7, 2022
35be577
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Jul 7, 2022
ff12c33
fmt
romainmenke Jul 7, 2022
446e3df
css has pseudo : pseudo element support and .js-has-pseudo class (#525)
romainmenke Jul 7, 2022
9dd08ac
fix
romainmenke Jul 7, 2022
911f1af
fix
romainmenke Jul 7, 2022
b41750a
css-has-pseudo: only test polyfill, we dont need to always test brows…
romainmenke Jul 7, 2022
724cb41
Merge branch 'main' into postcss-preset-env--v8
Antonio-Laguna Jul 8, 2022
9e9557b
flip enableClientSidePolyfills (#528)
romainmenke Jul 8, 2022
d5915fb
CSS Has Pseudo Experimental 0.6.0 (deprecated)
Antonio-Laguna Jul 8, 2022
6b25e40
CSS Blank Pseudo 4.0.0
Antonio-Laguna Jul 8, 2022
0a29ca0
CSS Has Pseudo 4.0.0
Antonio-Laguna Jul 8, 2022
0d936e1
Prefers Color Scheme 7.0.0
Antonio-Laguna Jul 8, 2022
f262521
PostCSS Focus Visible 7.0.0
Antonio-Laguna Jul 8, 2022
9825ab3
PostCSS Focus Within 6.0.0
Antonio-Laguna Jul 8, 2022
cf6faa1
PostCSS Preset Env 8 Alpha 0
Antonio-Laguna Jul 8, 2022
926a54e
update cli
romainmenke Jul 8, 2022
d124dd5
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Jul 18, 2022
2b27d1f
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Jul 28, 2022
658e036
add : disablePolyfillReadyClass (#558)
romainmenke Jul 30, 2022
7eca713
Extra space removal
Antonio-Laguna Jul 12, 2022
494b90d
CSS Blank Pseudo 4.1.0
Antonio-Laguna Jul 30, 2022
e18c674
PostCSS Focus Visible 7.1.0
Antonio-Laguna Jul 30, 2022
e526043
PostCSS Focus Within 6.1.0
Antonio-Laguna Jul 30, 2022
9c4a275
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Aug 7, 2022
c3e6532
Merge branch 'main' into postcss-preset-env--v8
romainmenke Aug 8, 2022
e5e0a76
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Aug 16, 2022
844e062
browser polyfills : use window or self for the global polyfill (#586)
romainmenke Aug 23, 2022
4c3a0df
Merge branch 'main' into postcss-preset-env--v8
Antonio-Laguna Aug 23, 2022
48f47ae
CSS Blank Pseudo 4.1.1
Antonio-Laguna Aug 23, 2022
2d5689c
CSS Has Pseudo 4.0.1
Antonio-Laguna Aug 23, 2022
4bd9b17
Prefers Color Scheme 7.0.1
Antonio-Laguna Aug 23, 2022
f194e9a
PostCSS Focus Within 6.1.1
Antonio-Laguna Aug 23, 2022
ef2339d
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Aug 31, 2022
e532661
bump postcss, node and npm versions (#599)
romainmenke Sep 1, 2022
582be63
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Sep 3, 2022
063fc13
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Sep 3, 2022
54736ad
add install instructions for es modules
romainmenke Sep 4, 2022
4d89ee5
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Sep 5, 2022
35ea2ed
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Sep 5, 2022
2cd2385
fix ci
romainmenke Sep 5, 2022
8291769
fix ci
romainmenke Sep 5, 2022
edb25ce
add support for postcss-html (#602)
romainmenke Sep 6, 2022
e709a66
refactor `postcss-custom-properties` and cleanup in `postcss-preset-e…
romainmenke Sep 6, 2022
8fa53dc
cleanup
romainmenke Sep 6, 2022
1b18bca
cleanup
romainmenke Sep 6, 2022
496872d
update gitignore for html document tests
romainmenke Sep 6, 2022
34a0e09
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Sep 7, 2022
398ef56
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Sep 12, 2022
e17bd96
refactor `postcss-custom-selectors` (#609)
romainmenke Sep 14, 2022
bba3462
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Sep 14, 2022
bc3512d
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Sep 15, 2022
8a2b55c
update dependencies
romainmenke Sep 18, 2022
b30473d
update TS targets
romainmenke Sep 18, 2022
68e479a
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Sep 25, 2022
05fd52a
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Sep 25, 2022
92ba3e1
update lock file
romainmenke Sep 25, 2022
f65baf8
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Sep 25, 2022
e686563
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Oct 4, 2022
0d792a9
lint
romainmenke Oct 4, 2022
482bfa7
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Oct 17, 2022
f804a59
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Oct 20, 2022
88d6505
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Oct 24, 2022
ebd7f92
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Nov 4, 2022
081aa5f
bring in changes from main
romainmenke Nov 4, 2022
551a72c
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Nov 7, 2022
b36d5ae
postcss-custom-media & css-tokenizer & media query parser (#627)
romainmenke Nov 7, 2022
7d287d1
cleanup
romainmenke Nov 7, 2022
d250423
cleanup
romainmenke Nov 7, 2022
4b2f469
Merge branch 'main' into postcss-preset-env--v8
romainmenke Nov 7, 2022
942f1dd
cascade-layers : execution order
romainmenke Nov 7, 2022
4a27335
update layer examples
romainmenke Nov 7, 2022
3f2154c
update docs
romainmenke Nov 7, 2022
6fab587
wording
romainmenke Nov 7, 2022
fa8f8f1
postcss-custom-media : update docs (#692)
romainmenke Nov 8, 2022
a0de360
update rollup (#694)
romainmenke Nov 8, 2022
d5ca08b
postcss-preset-env v8 : tweaks before next alpha (#695)
romainmenke Nov 8, 2022
8daaaa5
typo
romainmenke Nov 8, 2022
eaef573
Merge branch 'main' into postcss-preset-env--v8
romainmenke Nov 8, 2022
88c6327
Merge branch 'main' into postcss-preset-env--v8
romainmenke Nov 10, 2022
d2fd91f
fix
romainmenke Nov 10, 2022
0db9932
wrap calls to selector parser in try/catch (#698)
romainmenke Nov 10, 2022
d9cd1c5
update to PostCSS 8.4.19
romainmenke Nov 11, 2022
eb09782
add tokenizer benchmarks and make it ±20% faster
romainmenke Nov 12, 2022
d7a0476
remove spread operator
romainmenke Nov 12, 2022
a53a7e3
tune terser to have better runtime performance
romainmenke Nov 12, 2022
3034d9e
more terser config
romainmenke Nov 12, 2022
571c478
more specific terser config
romainmenke Nov 12, 2022
89dfad5
better benchmarks
romainmenke Nov 12, 2022
11c7d50
postcss-media-queries-aspect-ratio-number-values (#699)
romainmenke Nov 14, 2022
a897ee4
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Nov 14, 2022
3d28435
Merge branch 'postcss-preset-env--v8' of https://github.com/csstools/…
romainmenke Nov 14, 2022
8a3541f
merge
romainmenke Nov 14, 2022
3fe9b1f
PostCSS Media Queries Aspect-Ratio Number Values 1.0.0
Antonio-Laguna Nov 14, 2022
3ef58e2
Merge branch 'main' into postcss-preset-env--v8
Antonio-Laguna Nov 14, 2022
65cb694
CSS Tokenizer 1.0.0
Antonio-Laguna Nov 14, 2022
d8b8f43
CSS Parser Algorithms 1.0.0
Antonio-Laguna Nov 14, 2022
ea31855
Media Query List Parser 1.0.0
Antonio-Laguna Nov 14, 2022
587a0ba
PostCSS Custom Selectors 7.0.0
Antonio-Laguna Nov 14, 2022
0062474
PostCSS Custom Properties 13.0.0
Antonio-Laguna Nov 14, 2022
345df8f
PostCSS Custom Media 9.0.0
Antonio-Laguna Nov 14, 2022
4dbac7c
PostCSS Cascade Layers 2.0.0
Antonio-Laguna Nov 14, 2022
8d8ac8a
PostCSS Preset Env 8 Alpha 1
Antonio-Laguna Nov 14, 2022
33ea7c6
add postcss-parser-tests for css-tokenizer
romainmenke Nov 15, 2022
36e101f
switch to .mjs
romainmenke Nov 15, 2022
66a6d1e
add tslib as an explicit dependency
romainmenke Nov 16, 2022
0df29ab
few more tests
romainmenke Nov 16, 2022
263027c
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Nov 18, 2022
b7e36dc
postcss-custom-media: avoid complex generated CSS in more cases (#709)
romainmenke Nov 18, 2022
2f5b162
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Nov 18, 2022
8f6591b
more install instructions
romainmenke Nov 18, 2022
a38dd6f
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Nov 18, 2022
4315b12
PostCSS Custom Media 9.0.1
Antonio-Laguna Nov 19, 2022
bcedc18
Improving Browser Polyfills docs for Next.js (#716)
Antonio-Laguna Nov 19, 2022
6e009cc
shorter label name, max is 50 chars
romainmenke Nov 20, 2022
a73f129
Merge branch 'main' into postcss-preset-env--v8
romainmenke Nov 20, 2022
94512f7
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Nov 26, 2022
2002860
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Nov 28, 2022
750278d
design-tokens : add support for at rules (#717)
romainmenke Nov 29, 2022
57469f7
document how parallel builders can affect plugins (#724)
romainmenke Nov 29, 2022
1947286
Merge branch 'main' into postcss-preset-env--v8
Antonio-Laguna Nov 29, 2022
8bba42a
Removing warning on V8
Antonio-Laguna Nov 29, 2022
9413291
final typescript conversions (#712)
romainmenke Nov 30, 2022
2e3ee1d
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Nov 30, 2022
3202eda
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Dec 1, 2022
73f512e
changelog
romainmenke Dec 1, 2022
570b66f
improve clean commands and reduce impact of changes on the cli package
romainmenke Dec 3, 2022
5fa9dfb
lint
romainmenke Dec 3, 2022
829c70f
Merge branch 'main' into postcss-preset-env--v8
romainmenke Dec 3, 2022
067234a
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Dec 4, 2022
2700431
update has pseudo dependencies
romainmenke Dec 9, 2022
1d6ae9a
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Dec 10, 2022
2312065
Merge branch 'main' into postcss-preset-env--v8
romainmenke Dec 10, 2022
ddf132f
update dependencies
romainmenke Dec 11, 2022
18b90b5
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Dec 11, 2022
66d07b4
update dependencies
romainmenke Dec 12, 2022
23a85d9
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Dec 12, 2022
6a58ace
has pseudo : fix cleanup of rules in browsers with native support (#751)
romainmenke Dec 12, 2022
7c43a17
fix cascade layers in combination with nesting and name defining at r…
romainmenke Dec 13, 2022
3f55e18
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Dec 13, 2022
1c38a42
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Dec 18, 2022
298dcc8
build
romainmenke Dec 18, 2022
52720b8
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Dec 18, 2022
688f474
update dependencies
romainmenke Dec 18, 2022
1641d70
improve logging of enabled features
romainmenke Dec 18, 2022
41cd7b9
more tests
romainmenke Dec 21, 2022
873c8e3
cascade-layer-name-parser (#755)
romainmenke Dec 23, 2022
9045568
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Dec 23, 2022
6baba7d
rebuild
romainmenke Dec 23, 2022
825fd1e
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Dec 26, 2022
da7a94a
update dependencies
romainmenke Dec 26, 2022
302b32c
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Jan 7, 2023
5e66300
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Jan 7, 2023
a21bd58
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Jan 7, 2023
7c2126c
update dependencies
romainmenke Jan 7, 2023
c2bf401
Merge branch 'main' into postcss-preset-env--v8
romainmenke Jan 7, 2023
7f1c86f
css-tokenizer and parser-algorithms : fixes and performance improveme…
romainmenke Jan 9, 2023
2009c21
update dependencies
romainmenke Jan 9, 2023
17752ba
css-tokenizer : remove `commentsAreTokens` (#779)
romainmenke Jan 14, 2023
d66f02a
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Jan 14, 2023
81b49c1
remove dead code
romainmenke Jan 15, 2023
f8d2281
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Jan 16, 2023
a71db91
postcss-logical-viewport-units (#780)
romainmenke Jan 16, 2023
6c6325f
add test with a negative number in a range
romainmenke Jan 17, 2023
50a96df
code quality
romainmenke Jan 17, 2023
b9dcc09
one more fix
romainmenke Jan 17, 2023
db48a6f
simplify consume number
romainmenke Jan 17, 2023
f8c4df4
simplify further
romainmenke Jan 17, 2023
1f649f6
one more fix
romainmenke Jan 19, 2023
5efb700
CSS Tokenizer 2.0.0
Antonio-Laguna Jan 19, 2023
a101bc0
CSS Parser Algorithms 2.0.0
Antonio-Laguna Jan 19, 2023
456c630
Media Query List Parser 2.0.0
Antonio-Laguna Jan 19, 2023
7ae7161
Cascade Layer Name Parser 1.0.0
Antonio-Laguna Jan 19, 2023
8ebb6d6
Update lock
Antonio-Laguna Jan 19, 2023
a716050
Selector Specificity 2.1.0
Antonio-Laguna Jan 19, 2023
47a7273
post release patches (#793)
romainmenke Jan 20, 2023
80bcad4
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Jan 20, 2023
80baf77
rebuild
romainmenke Jan 20, 2023
8ff609f
remove outdated and obsolote docs
romainmenke Jan 21, 2023
88de686
remove deno support from postcss-nesting (#795)
romainmenke Jan 21, 2023
1694300
text-decoration : fix shorthand in Safari with single node values (#794)
romainmenke Jan 21, 2023
6d1c0a7
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Jan 22, 2023
544eb20
Merge remote-tracking branch 'origin/main' into postcss-preset-env--v8
romainmenke Jan 22, 2023
c96a57c
update cssdb
romainmenke Jan 22, 2023
6c708d9
PostCSS Logical revamp (#740)
Antonio-Laguna Jan 23, 2023
7af0ab2
housekeeping
Antonio-Laguna Jan 23, 2023
6d0fb46
last tweaks
romainmenke Jan 23, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
fix cascade layers in combination with nesting and name defining at r…
…ules (#739)

* fix cascade layers

* fix

* merge

* custom properties

* postcss-custom-selectors

* document issue

* fix

* cleanup
  • Loading branch information
romainmenke authored Dec 13, 2022
commit 7c43a1719308344fc2cdf0a409af8ab97812b323
2 changes: 1 addition & 1 deletion cli/csstools-cli/dist/cli.cjs

Large diffs are not rendered by default.

15 changes: 13 additions & 2 deletions plugin-packs/postcss-preset-env/.tape.mjs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import postcssTape from '../../packages/postcss-tape/dist/index.mjs';
import plugin from 'postcss-preset-env';
import postcssImport from 'postcss-import';

const orderDetectionPlugin = (prop, changeWhenMatches) => {
return {
Expand Down Expand Up @@ -172,7 +173,7 @@ postcssTape(plugin)({
stage: 0,
browsers: '> 0%'
},
warnings: 1
warnings: 0
},
'layers-basic:preserve:true': {
message: 'supports layers usage with { preserve: true }',
Expand All @@ -181,7 +182,7 @@ postcssTape(plugin)({
stage: 0,
browsers: '> 0%'
},
warnings: 1
warnings: 0
},
'client-side-polyfills:stage-1': {
message: 'stable client side polyfill behavior',
Expand Down Expand Up @@ -403,4 +404,14 @@ postcssTape(plugin)({
}
},
},
'postcss-import/styles': {
message: 'works well with "postcss-import"',
plugins: [
postcssImport(),
plugin({
stage: 0,
browsers: '> 0%'
})
]
}
});
2 changes: 1 addition & 1 deletion plugin-packs/postcss-preset-env/dist/index.cjs

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion plugin-packs/postcss-preset-env/dist/index.mjs

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
// ids ordered by required execution, then alphabetically
export default [
'cascade-layers',
'custom-media-queries',
'custom-properties',
'environment-variables', // run environment-variables here to access transpiled custom media params and properties
Expand Down Expand Up @@ -37,4 +36,5 @@ export default [
'system-ui-font-family',
'stepped-value-functions',
'trigonometric-functions',
'cascade-layers',
];
205 changes: 122 additions & 83 deletions plugin-packs/postcss-preset-env/test/layers-basic.expect.css

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
:--button {
color: var(--color-red);

@media (--dark) {
color: var(--color-blue);
}

@layer foo {
text-align: left;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
@custom-media --dark (prefers-color-scheme: dark);
@custom-media --light (prefers-color-scheme: light);
@custom-media --tablet (width >= 768px);

@custom-selector :--h h1, h2, h3, h4, h5, h6;
@custom-selector :--button button, input[type="submit"];

:root {
--color-red: red;
--color-blue: blue;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
@import url(./imports/extensions.css) layer(extensions);
@import url(./imports/components.css) layer(components);
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@


:root {
--color-red: red;
--color-blue: blue;
}
button:not(.does-not-exist):not(#\#) {
text-align: left;
}
input[type="submit"]:not(#\#) {
text-align: left;
}
button:not(.does-not-exist):not(#\#):not(#\#) {
color: red;
color: var(--color-red);
}
input[type="submit"]:not(#\#):not(#\#) {
color: red;
color: var(--color-red);
}
@media (prefers-color-scheme: dark) {
button:not(.does-not-exist):not(#\#):not(#\#) {
color: blue;
color: var(--color-blue);
}
input[type="submit"]:not(#\#):not(#\#) {
color: blue;
color: var(--color-blue);
}
}
7 changes: 7 additions & 0 deletions plugins/postcss-cascade-layers/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
# Changes to PostCSS Cascade Layers

### Unreleased

- Run `postcss-cascade-layers` late compared to other PostCSS plugins (breaking)

_This will be the last time we change this after several times back and forth.
We are sticking with this configuration now._

### 2.0.0 (November 14, 2022)

- Run `postcss-cascade-layers` early compared to other PostCSS plugins (breaking)
Expand Down
2 changes: 1 addition & 1 deletion plugins/postcss-cascade-layers/dist/index.cjs

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion plugins/postcss-cascade-layers/dist/index.mjs

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion plugins/postcss-cascade-layers/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ const creator: PluginCreator<pluginOptions> = (opts?: pluginOptions) => {

return {
postcssPlugin: 'postcss-cascade-layers',
Once(root: Container, { result }: { result: Result }) {
OnceExit(root: Container, { result }: { result: Result }) {

// Warnings
if (options.onRevertLayerKeyword) {
Expand Down
3 changes: 3 additions & 0 deletions plugins/postcss-custom-media/.tape.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ postcssTape(plugin)({
message: 'supports basic usage (old)',
warnings: 1,
},
'cascade-layers': {
message: 'supports cascade layers',
},
'examples/example': {
message: 'minimal example',
},
Expand Down
4 changes: 4 additions & 0 deletions plugins/postcss-custom-media/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# Changes to PostCSS Custom Media

### Unreleased

- Added: Support for Cascade Layers.

### 9.0.1 (November 19, 2022)

- Fixed: avoid complex generated CSS when `@custom-media` contains only a single simple media feature.
Expand Down
3 changes: 3 additions & 0 deletions plugins/postcss-custom-media/dist/cascade-layers.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import type { Node, Root } from 'postcss';
export declare function collectCascadeLayerOrder(root: Root): WeakMap<Node, number>;
export declare function cascadeLayerNumberForNode(node: Node, layers: WeakMap<Node, number>): number;
2 changes: 1 addition & 1 deletion plugins/postcss-custom-media/dist/index.cjs

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion plugins/postcss-custom-media/dist/index.mjs

Large diffs are not rendered by default.

180 changes: 180 additions & 0 deletions plugins/postcss-custom-media/src/cascade-layers.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,180 @@
import type { AtRule, Container, Document, Node, Root } from 'postcss';

export function collectCascadeLayerOrder(root: Root) {
const references: Map<Node, string> = new Map();
const referencesForLayerNames: Map<Node, string> = new Map();

const layers: Array<Array<string>> = [];
const anonLayerCounter = 1;

root.walkAtRules((node) => {
if (node.name.toLowerCase() !== 'layer') {
return;
}

{
// We do not want to process anything except for `@layer` rules
// and maybe `@layer` rules inside other `@later` rules.
//
// Traverse up the tree and abort when we find something unexpected
let parent: Container | Document = node.parent;
while (parent) {
if (parent.type === 'atrule' && (parent as AtRule).name.toLowerCase() === 'layer') {
parent = parent.parent;
continue;
}

if (parent === node.root()) {
break;
}

return;
}
}

let currentLayerNames = [];
if (node.nodes) { // @layer { .foo {} }
currentLayerNames.push(normalizeLayerName(node.params, anonLayerCounter));
} else if (node.params.trim()) { // @layer a, b;
currentLayerNames = node.params.split(',').map((layerName) => {
return layerName.trim();
});
} else { // @layer;
return;
}

{
// Stitch the layer names of the current node together with those of ancestors.
// @layer foo { @layer bar { .any {} } }
// -> "foo.bar"
let parent: Container | Document = node.parent;
while (parent && parent.type === 'atrule' && (parent as AtRule).name.toLowerCase() === 'layer') {
const parentLayerName = referencesForLayerNames.get(parent);
if (!parentLayerName) {
parent = parent.parent;
continue;
}

currentLayerNames = currentLayerNames.map((layerName) => {
return parentLayerName + '.' + layerName;
});

parent = parent.parent;
}
}

// Add the new layer names to "layers".
addLayerToModel(layers, currentLayerNames);

if (node.nodes) {
// Implicit layers have higher priority than nested layers.
// This requires some trickery.
//
// 1. connect the node to the real layer
// 2. connect the node to an implicit layer
// 3. use the real layer to resolve other real layer names
// 4. use the implicit layer later

const implicitLayerName = currentLayerNames[0] + '.' + 'csstools-implicit-layer';
references.set(node, implicitLayerName);
referencesForLayerNames.set(node, currentLayerNames[0]);
}
});

for (const layerName of references.values()) {
// Add the implicit layer names to "layers".
// By doing this after all the real layers we are sure that the implicit layers have the right order in "layers".
addLayerToModel(layers, [layerName]);
}

const finalLayers = layers.map((x) => x.join('.'));

const out: WeakMap<Node, number> = new WeakMap();
for (const [node, layerName] of references) {
out.set(node, finalLayers.indexOf(layerName));
}

return out;
}

// -1 : node was not found
// any number : node was found, higher numbers have higher priority
// Infinity : node wasn't layered, highest priority
export function cascadeLayerNumberForNode(node: Node, layers: WeakMap<Node, number>) {
if (node.parent && node.parent.type === 'atrule' && (node.parent as AtRule).name.toLowerCase() === 'layer') {
if (!layers.has(node.parent)) {
return -1;
}

return layers.get(node.parent);
}

return Infinity;
}

function normalizeLayerName(layerName, counter) {
return layerName.trim() || `csstools-anon-layer--${counter++}`;
}

// Insert new items after the most similar current item
//
// [["a", "b"]]
// insert "a.first"
// [["a", "a.first", "b"]]
//
// [["a", "a.first", "a.second", "b"]]
// insert "a.first.foo"
// [["a", "a.first", "a.first.foo", "a.second", "b"]]
//
// [["a", "b"]]
// insert "c"
// [["a", "b", "c"]]
function addLayerToModel(layers, currentLayerNames) {
currentLayerNames.forEach((layerName) => {
const allLayerNameParts = layerName.split('.');

ALL_LAYER_NAME_PARTS_LOOP: for (let x = 0; x < allLayerNameParts.length; x++) {
const layerNameParts = allLayerNameParts.slice(0, x + 1);

let layerWithMostEqualSegments = -1;
let mostEqualSegments = 0;

for (let i = 0; i < layers.length; i++) {
const existingLayerParts = layers[i];

let numberOfEqualSegments = 0;

LAYER_PARTS_LOOP: for (let j = 0; j < existingLayerParts.length; j++) {
const existingLayerPart = existingLayerParts[j];
const layerPart = layerNameParts[j];

if (layerPart === existingLayerPart && (j + 1) === layerNameParts.length) {
continue ALL_LAYER_NAME_PARTS_LOOP; // layer already exists in model
}

if (layerPart === existingLayerPart) {
numberOfEqualSegments++;
continue;
}

if (layerPart !== existingLayerPart) {
break LAYER_PARTS_LOOP;
}
}

if (numberOfEqualSegments >= mostEqualSegments) {
layerWithMostEqualSegments = i;
mostEqualSegments = numberOfEqualSegments;
}
}

if (layerWithMostEqualSegments === -1) {
layers.push(layerNameParts);
} else {
layers.splice(layerWithMostEqualSegments+1, 0, layerNameParts);
}
}
});

return layers;
}
20 changes: 15 additions & 5 deletions plugins/postcss-custom-media/src/custom-media-from-root.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { MediaQuery } from '@csstools/media-query-list-parser';
import type { ChildNode, Container, Document, Root as PostCSSRoot } from 'postcss';
import { collectCascadeLayerOrder, cascadeLayerNumberForNode } from './cascade-layers';
import { isProcessableCustomMediaRule } from './is-processable-custom-media-rule';
import { removeCyclicReferences } from './toposort';
import { parseCustomMedia } from './transform-at-media/custom-media';
Expand All @@ -8,8 +9,11 @@ import { parseCustomMedia } from './transform-at-media/custom-media';
export default function getCustomMedia(root: PostCSSRoot, result, opts: { preserve?: boolean }): Map<string, { truthy: Array<MediaQuery>, falsy: Array<MediaQuery> }> {
// initialize custom media
const customMedia: Map<string, { truthy: Array<MediaQuery>, falsy: Array<MediaQuery> }> = new Map();
const customMediaCascadeLayerMapping: Map<string, number> = new Map();
const customMediaGraph: Array<[string, string]> = [];

const cascadeLayersOrder = collectCascadeLayerOrder(root);

root.walkAtRules((atRule) => {
if (!isProcessableCustomMediaRule(atRule)) {
return;
Expand All @@ -24,12 +28,18 @@ export default function getCustomMedia(root: PostCSSRoot, result, opts: { preser
return;
}

customMedia.set(parsed.name, {
truthy: parsed.truthy,
falsy: parsed.falsy,
});
const thisCascadeLayer = cascadeLayerNumberForNode(atRule, cascadeLayersOrder);
const existingCascadeLayer = customMediaCascadeLayerMapping.get(parsed.name) ?? -1;

if (thisCascadeLayer >= existingCascadeLayer) {
customMediaCascadeLayerMapping.set(parsed.name, thisCascadeLayer);
customMedia.set(parsed.name, {
truthy: parsed.truthy,
falsy: parsed.falsy,
});

customMediaGraph.push(...parsed.dependsOn);
customMediaGraph.push(...parsed.dependsOn);
}

if (!opts.preserve) {
const parent = atRule.parent;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import type { AtRule, ChildNode, Container, Document } from 'postcss';

const allowedParentAtRules = new Set(['scope', 'container']);
const allowedParentAtRules = new Set(['scope', 'container', 'layer']);

export function isProcessableCustomMediaRule(atRule: AtRule): boolean {
if (atRule.name.toLowerCase() !== 'custom-media') {
Expand Down
Loading