autoprefixer 10.5.0 → 10.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -51,6 +51,3 @@ Twitter account for news and releases: [@autoprefixer].
51
51
  [cult-img]: https://cultofmartians.com/assets/badges/badge.svg
52
52
  [PostCSS]: https://github.com/postcss/postcss
53
53
  [cult]: https://cultofmartians.com/tasks/autoprefixer-grid.html
54
-
55
- ## Docs
56
- Read full docs **[here](https://github.com/postcss/autoprefixer#readme)**.
@@ -358,6 +358,30 @@ function selectorsEqual(ruleA, ruleB) {
358
358
  })
359
359
  }
360
360
 
361
+ function selectorStartsWith(base, selector) {
362
+ if (!selector.startsWith(base)) {
363
+ return false
364
+ }
365
+
366
+ let next = selector[base.length]
367
+ return !next || /[\s.#[:>+~]/.test(next)
368
+ }
369
+
370
+ function selectorMayOverlap(previous, current) {
371
+ let base = previous.replace(/\s*\*\s*/g, ' ').replace(/\s+/g, ' ').trim()
372
+ let selector = current.replace(/\s+/g, ' ').trim()
373
+
374
+ return !base || selectorStartsWith(base, selector)
375
+ }
376
+
377
+ function selectorsMayOverlap(previous, current) {
378
+ return previous.some(previousSelector => {
379
+ return current.some(currentSelector => {
380
+ return selectorMayOverlap(previousSelector, currentSelector)
381
+ })
382
+ })
383
+ }
384
+
361
385
  /**
362
386
  * Parse data from all grid-template(-areas) declarations
363
387
  * @param {Root} css css root
@@ -483,6 +507,7 @@ function insertAreas(css, isDisabled) {
483
507
 
484
508
  // we need to store the rules that we will insert later
485
509
  let rulesToInsert = {}
510
+ let previousGridAreas = []
486
511
 
487
512
  css.walkDecls('grid-area', gridArea => {
488
513
  let gridAreaRule = gridArea.parent
@@ -515,6 +540,20 @@ function insertAreas(css, isDisabled) {
515
540
  return false
516
541
  }
517
542
 
543
+ function shouldResetSpan(rule, area, dimension) {
544
+ return previousGridAreas.some(previous => {
545
+ if (previous.data !== data) {
546
+ return false
547
+ }
548
+ if (!selectorsMayOverlap(previous.selectors, gridAreaRule.selectors)) {
549
+ return false
550
+ }
551
+
552
+ let previousArea = rule.areas[previous.value]
553
+ return previousArea && previousArea[dimension].span > area[dimension].span
554
+ })
555
+ }
556
+
518
557
  // create the empty object with the key as the last area name
519
558
  // e.g if we have templates with "a b c" values, "c" will be the last area
520
559
  if (!rulesToInsert[lastArea]) {
@@ -553,8 +592,10 @@ function insertAreas(css, isDisabled) {
553
592
 
554
593
  if ((!rule.hasDuplicates || !hasDuplicateName) && !rule.params) {
555
594
  // grid-template has no duplicates and not inside media rule
595
+ let addRowSpan = shouldResetSpan(rule, area, 'row')
596
+ let addColumnSpan = shouldResetSpan(rule, area, 'column')
556
597
 
557
- getMSDecls(area, false, false)
598
+ getMSDecls(area, addRowSpan, addColumnSpan)
558
599
  .reverse()
559
600
  .forEach(i =>
560
601
  gridAreaRule.prepend(
@@ -572,8 +613,11 @@ function insertAreas(css, isDisabled) {
572
613
  // grid-template has duplicates and not inside media rule
573
614
  let cloned = gridAreaRule.clone()
574
615
  cloned.removeAll()
616
+ let addRowSpan = area.row.updateSpan || shouldResetSpan(rule, area, 'row')
617
+ let addColumnSpan =
618
+ area.column.updateSpan || shouldResetSpan(rule, area, 'column')
575
619
 
576
- getMSDecls(area, area.row.updateSpan, area.column.updateSpan)
620
+ getMSDecls(area, addRowSpan, addColumnSpan)
577
621
  .reverse()
578
622
  .forEach(i =>
579
623
  cloned.prepend(
@@ -604,7 +648,11 @@ function insertAreas(css, isDisabled) {
604
648
  // grid-template has duplicates and not inside media rule
605
649
  // and the selector is complex
606
650
  gridAreaRule.walkDecls(/-ms-grid-(row|column)/, d => d.remove())
607
- getMSDecls(area, area.row.updateSpan, area.column.updateSpan)
651
+ let addRowSpan = area.row.updateSpan || shouldResetSpan(rule, area, 'row')
652
+ let addColumnSpan =
653
+ area.column.updateSpan || shouldResetSpan(rule, area, 'column')
654
+
655
+ getMSDecls(area, addRowSpan, addColumnSpan)
608
656
  .reverse()
609
657
  .forEach(i =>
610
658
  gridAreaRule.prepend(
@@ -622,8 +670,11 @@ function insertAreas(css, isDisabled) {
622
670
  // rules and merge them easily
623
671
  let cloned = gridAreaRule.clone()
624
672
  cloned.removeAll()
673
+ let addRowSpan = area.row.updateSpan || shouldResetSpan(rule, area, 'row')
674
+ let addColumnSpan =
675
+ area.column.updateSpan || shouldResetSpan(rule, area, 'column')
625
676
 
626
- getMSDecls(area, area.row.updateSpan, area.column.updateSpan)
677
+ getMSDecls(area, addRowSpan, addColumnSpan)
627
678
  .reverse()
628
679
  .forEach(i =>
629
680
  cloned.prepend(
@@ -661,6 +712,12 @@ function insertAreas(css, isDisabled) {
661
712
  }
662
713
  }
663
714
 
715
+ previousGridAreas.push({
716
+ data,
717
+ selectors: gridAreaRule.selectors,
718
+ value
719
+ })
720
+
664
721
  return undefined
665
722
  })
666
723
 
package/lib/supports.js CHANGED
@@ -211,7 +211,8 @@ class Supports {
211
211
  let browsers = new Browsers(
212
212
  this.all.browsers.data,
213
213
  filtered,
214
- this.all.options
214
+ this.all.options,
215
+ this.all.browsers.browserslistOpts
215
216
  )
216
217
  this.prefixerCache = new this.Prefixes(
217
218
  this.all.data,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "autoprefixer",
3
- "version": "10.5.0",
3
+ "version": "10.5.1",
4
4
  "description": "Parse CSS and add vendor prefixes to CSS rules using values from the Can I Use website",
5
5
  "keywords": [
6
6
  "autoprefixer",
@@ -33,8 +33,8 @@
33
33
  "main": "lib/autoprefixer.js",
34
34
  "types": "lib/autoprefixer.d.ts",
35
35
  "dependencies": {
36
- "browserslist": "^4.28.2",
37
- "caniuse-lite": "^1.0.30001787",
36
+ "browserslist": "^4.28.4",
37
+ "caniuse-lite": "^1.0.30001799",
38
38
  "fraction.js": "^5.3.4",
39
39
  "picocolors": "^1.1.1",
40
40
  "postcss-value-parser": "^4.2.0"