@unocss/core 0.22.2 → 0.22.6

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/dist/index.cjs CHANGED
@@ -388,7 +388,7 @@ function resolveConfig(userConfig = {}, defaults = {}) {
388
388
  };
389
389
  }
390
390
 
391
- const version = "0.22.2";
391
+ const version = "0.22.6";
392
392
 
393
393
  class UnoGenerator {
394
394
  constructor(userConfig = {}, defaults = {}) {
@@ -517,10 +517,10 @@ class UnoGenerator {
517
517
  if (!sorted.length)
518
518
  return void 0;
519
519
  const rules = sorted.reverse().map(([selector, body, noMerge], idx) => {
520
- if (selector && this.config.mergeSelectors) {
520
+ if (!noMerge && selector && this.config.mergeSelectors) {
521
521
  for (let i = idx + 1; i < size; i++) {
522
522
  const current = sorted[i];
523
- if (!noMerge && current && current[0] && current[1] === body) {
523
+ if (current && !current[2] && current[0] && current[1] === body) {
524
524
  current[0].push(...selector);
525
525
  return null;
526
526
  }
@@ -690,18 +690,25 @@ class UnoGenerator {
690
690
  continue;
691
691
  const { selector, entries, parent: parent2 } = this.applyVariants(item, [...item[4], ...parentVariants], raw);
692
692
  const mapItem = selectorMap.getFallback(selector, parent2, [[], item[0]]);
693
- mapItem[0].push(entries);
693
+ mapItem[0].push([entries, !!item[3]?.noMerge]);
694
694
  }
695
695
  return selectorMap.map(([e2, index], selector, mediaQuery) => {
696
- const split = e2.filter((entries) => entries.some((entry) => entry[0] === CONTROL_SHORTCUT_NO_MERGE));
697
- const rest = e2.filter((entries) => entries.every((entry) => entry[0] !== CONTROL_SHORTCUT_NO_MERGE));
698
- return [...split, rest.flat(1)].map((entries) => {
696
+ const stringify = (noMerge) => (entries) => {
699
697
  const body = entriesToCss(entries);
700
698
  if (body)
701
- return [index, selector, body, mediaQuery, meta];
699
+ return [index, selector, body, mediaQuery, { ...meta, noMerge }];
702
700
  return void 0;
701
+ };
702
+ const merges = [
703
+ [e2.filter(([, noMerge]) => noMerge).map(([entries]) => entries), true],
704
+ [e2.filter(([, noMerge]) => !noMerge).map(([entries]) => entries), false]
705
+ ];
706
+ return merges.map(([e3, noMerge]) => {
707
+ const splits = e3.filter((entries) => entries.some((entry) => entry[0] === CONTROL_SHORTCUT_NO_MERGE));
708
+ const rests = e3.filter((entries) => entries.every((entry) => entry[0] !== CONTROL_SHORTCUT_NO_MERGE));
709
+ return [...splits.map(stringify(noMerge)), ...[rests.flat(1)].map(stringify(noMerge))];
703
710
  });
704
- }).flat(1).filter(Boolean);
711
+ }).flat(2).filter(Boolean);
705
712
  }
706
713
  isBlocked(raw) {
707
714
  return !raw || this.config.blocklist.some((e2) => typeof e2 === "string" ? e2 === raw : e2.test(raw));
@@ -720,7 +727,7 @@ function applyScope(css, scope) {
720
727
  }
721
728
  const attributifyRe = /^\[(.+?)(~?=)"(.*)"\]$/;
722
729
  function toEscapedSelector(raw) {
723
- if (raw.startsWith("[") && attributifyRe.test(raw))
730
+ if (attributifyRe.test(raw))
724
731
  return raw.replace(attributifyRe, (_, n, s, i) => `[${e(n)}${s}"${e(i)}"]`);
725
732
  return `.${e(raw)}`;
726
733
  }
package/dist/index.mjs CHANGED
@@ -384,7 +384,7 @@ function resolveConfig(userConfig = {}, defaults = {}) {
384
384
  };
385
385
  }
386
386
 
387
- const version = "0.22.2";
387
+ const version = "0.22.6";
388
388
 
389
389
  class UnoGenerator {
390
390
  constructor(userConfig = {}, defaults = {}) {
@@ -513,10 +513,10 @@ class UnoGenerator {
513
513
  if (!sorted.length)
514
514
  return void 0;
515
515
  const rules = sorted.reverse().map(([selector, body, noMerge], idx) => {
516
- if (selector && this.config.mergeSelectors) {
516
+ if (!noMerge && selector && this.config.mergeSelectors) {
517
517
  for (let i = idx + 1; i < size; i++) {
518
518
  const current = sorted[i];
519
- if (!noMerge && current && current[0] && current[1] === body) {
519
+ if (current && !current[2] && current[0] && current[1] === body) {
520
520
  current[0].push(...selector);
521
521
  return null;
522
522
  }
@@ -686,18 +686,25 @@ class UnoGenerator {
686
686
  continue;
687
687
  const { selector, entries, parent: parent2 } = this.applyVariants(item, [...item[4], ...parentVariants], raw);
688
688
  const mapItem = selectorMap.getFallback(selector, parent2, [[], item[0]]);
689
- mapItem[0].push(entries);
689
+ mapItem[0].push([entries, !!item[3]?.noMerge]);
690
690
  }
691
691
  return selectorMap.map(([e2, index], selector, mediaQuery) => {
692
- const split = e2.filter((entries) => entries.some((entry) => entry[0] === CONTROL_SHORTCUT_NO_MERGE));
693
- const rest = e2.filter((entries) => entries.every((entry) => entry[0] !== CONTROL_SHORTCUT_NO_MERGE));
694
- return [...split, rest.flat(1)].map((entries) => {
692
+ const stringify = (noMerge) => (entries) => {
695
693
  const body = entriesToCss(entries);
696
694
  if (body)
697
- return [index, selector, body, mediaQuery, meta];
695
+ return [index, selector, body, mediaQuery, { ...meta, noMerge }];
698
696
  return void 0;
697
+ };
698
+ const merges = [
699
+ [e2.filter(([, noMerge]) => noMerge).map(([entries]) => entries), true],
700
+ [e2.filter(([, noMerge]) => !noMerge).map(([entries]) => entries), false]
701
+ ];
702
+ return merges.map(([e3, noMerge]) => {
703
+ const splits = e3.filter((entries) => entries.some((entry) => entry[0] === CONTROL_SHORTCUT_NO_MERGE));
704
+ const rests = e3.filter((entries) => entries.every((entry) => entry[0] !== CONTROL_SHORTCUT_NO_MERGE));
705
+ return [...splits.map(stringify(noMerge)), ...[rests.flat(1)].map(stringify(noMerge))];
699
706
  });
700
- }).flat(1).filter(Boolean);
707
+ }).flat(2).filter(Boolean);
701
708
  }
702
709
  isBlocked(raw) {
703
710
  return !raw || this.config.blocklist.some((e2) => typeof e2 === "string" ? e2 === raw : e2.test(raw));
@@ -716,7 +723,7 @@ function applyScope(css, scope) {
716
723
  }
717
724
  const attributifyRe = /^\[(.+?)(~?=)"(.*)"\]$/;
718
725
  function toEscapedSelector(raw) {
719
- if (raw.startsWith("[") && attributifyRe.test(raw))
726
+ if (attributifyRe.test(raw))
720
727
  return raw.replace(attributifyRe, (_, n, s, i) => `[${e(n)}${s}"${e(i)}"]`);
721
728
  return `.${e(raw)}`;
722
729
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unocss/core",
3
- "version": "0.22.2",
3
+ "version": "0.22.6",
4
4
  "description": "The instant on-demand Atomic CSS engine.",
5
5
  "keywords": [
6
6
  "unocss",