@csszyx/unplugin 0.15.2 → 0.15.3

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.
@@ -9,6 +9,9 @@ const postcss__default = /*#__PURE__*/_interopDefaultCompat(postcss);
9
9
  const selectorParser__default = /*#__PURE__*/_interopDefaultCompat(selectorParser);
10
10
 
11
11
  const BACKSLASH = String.fromCodePoint(92);
12
+ function classAttributeSelectorKey(selector) {
13
+ return `${selector.operator}\0${selector.value}\0${selector.insensitive ? "i" : ""}`;
14
+ }
12
15
  function unescapeTailwindClass(escapedName) {
13
16
  let result = "";
14
17
  let i = 0;
@@ -73,8 +76,17 @@ function escapeCSSClassName(className) {
73
76
  }
74
77
  return result;
75
78
  }
76
- function createSelectorProcessor(mangleMap, mangledClasses, unmangledClasses) {
79
+ function createSelectorProcessor(mangleMap, mangledClasses, unmangledClasses, attributeSelectors = /* @__PURE__ */ new Map()) {
77
80
  return selectorParser__default((selectors) => {
81
+ selectors.walkAttributes((attribute) => {
82
+ if (attribute.namespace !== void 0) return;
83
+ if (attribute.attribute.toLowerCase() !== "class") return;
84
+ const { operator, value } = attribute;
85
+ if (operator === void 0 || value === void 0 || value.length === 0) return;
86
+ const selector = { operator, value, insensitive: attribute.insensitive === true };
87
+ const key = classAttributeSelectorKey(selector);
88
+ if (!attributeSelectors.has(key)) attributeSelectors.set(key, selector);
89
+ });
78
90
  selectors.walkClasses((classNode) => {
79
91
  const originalValue = classNode.value;
80
92
  const unescapedValue = unescapeTailwindClass(originalValue);
@@ -95,102 +107,88 @@ function createSelectorProcessor(mangleMap, mangledClasses, unmangledClasses) {
95
107
  });
96
108
  });
97
109
  }
98
- async function mangleCSS(css, mangleMap, options = {}) {
110
+ function createManglerSession(mangleMap, options) {
99
111
  const mangledClasses = /* @__PURE__ */ new Set();
100
112
  const unmangledClasses = /* @__PURE__ */ new Set();
101
- let transformedCount = 0;
102
- const selectorProcessor = createSelectorProcessor(mangleMap, mangledClasses, unmangledClasses);
103
- const csszyxManglerPlugin = {
104
- postcssPlugin: "csszyx-css-mangler",
105
- Rule(rule) {
113
+ const attributeSelectors = /* @__PURE__ */ new Map();
114
+ const selectorProcessor = createSelectorProcessor(
115
+ mangleMap,
116
+ mangledClasses,
117
+ unmangledClasses,
118
+ attributeSelectors
119
+ );
120
+ return {
121
+ mangleRule(rule) {
106
122
  try {
107
123
  const originalSelector = rule.selector;
108
124
  const newSelector = selectorProcessor.processSync(originalSelector);
109
- if (newSelector !== originalSelector) {
110
- rule.selector = newSelector;
111
- transformedCount++;
112
- }
125
+ if (newSelector === originalSelector) return false;
126
+ rule.selector = newSelector;
127
+ return true;
113
128
  } catch (error) {
114
129
  if (options.debug) {
115
130
  console.warn(`[csszyx] Failed to process selector: ${rule.selector}`, error);
116
131
  }
132
+ return false;
117
133
  }
134
+ },
135
+ result(css, transformedCount) {
136
+ if (options.debug) {
137
+ console.log(`[csszyx] CSS Mangler: ${transformedCount} selectors transformed`);
138
+ console.log(`[csszyx] Mangled classes: ${mangledClasses.size}`);
139
+ console.log(`[csszyx] Unmangled classes: ${unmangledClasses.size}`);
140
+ }
141
+ return {
142
+ css,
143
+ transformedCount,
144
+ mangledClasses: Array.from(mangledClasses),
145
+ unmangledClasses: Array.from(unmangledClasses),
146
+ classAttributeSelectors: Array.from(attributeSelectors.values())
147
+ };
148
+ }
149
+ };
150
+ }
151
+ async function mangleCSS(css, mangleMap, options = {}) {
152
+ const session = createManglerSession(mangleMap, options);
153
+ let transformedCount = 0;
154
+ const csszyxManglerPlugin = {
155
+ postcssPlugin: "csszyx-css-mangler",
156
+ Rule(rule) {
157
+ if (session.mangleRule(rule)) transformedCount++;
118
158
  }
119
159
  };
120
160
  const result = await postcss__default([csszyxManglerPlugin]).process(css, {
121
161
  from: options.from
122
162
  });
123
- if (options.debug) {
124
- console.log(`[csszyx] CSS Mangler: ${transformedCount} selectors transformed`);
125
- console.log(`[csszyx] Mangled classes: ${mangledClasses.size}`);
126
- console.log(`[csszyx] Unmangled classes: ${unmangledClasses.size}`);
127
- }
128
- return {
129
- css: result.css,
130
- transformedCount,
131
- mangledClasses: Array.from(mangledClasses),
132
- unmangledClasses: Array.from(unmangledClasses)
133
- };
163
+ return session.result(result.css, transformedCount);
134
164
  }
135
165
  function mangleCSSSync(css, mangleMap, options = {}) {
136
- const mangledClasses = /* @__PURE__ */ new Set();
137
- const unmangledClasses = /* @__PURE__ */ new Set();
166
+ const session = createManglerSession(mangleMap, options);
138
167
  let transformedCount = 0;
139
- const selectorProcessor = createSelectorProcessor(mangleMap, mangledClasses, unmangledClasses);
140
168
  const root = postcss__default.parse(css, { from: options.from });
141
169
  root.walkRules((rule) => {
142
- try {
143
- const originalSelector = rule.selector;
144
- const newSelector = selectorProcessor.processSync(originalSelector);
145
- if (newSelector !== originalSelector) {
146
- rule.selector = newSelector;
147
- transformedCount++;
148
- }
149
- } catch (error) {
150
- if (options.debug) {
151
- console.warn(`[csszyx] Failed to process selector: ${rule.selector}`, error);
152
- }
153
- }
170
+ if (session.mangleRule(rule)) transformedCount++;
154
171
  });
155
- if (options.debug) {
156
- console.log(`[csszyx] CSS Mangler: ${transformedCount} selectors transformed`);
157
- console.log(`[csszyx] Mangled classes: ${mangledClasses.size}`);
158
- console.log(`[csszyx] Unmangled classes: ${unmangledClasses.size}`);
159
- }
160
- return {
161
- css: root.toString(),
162
- transformedCount,
163
- mangledClasses: Array.from(mangledClasses),
164
- unmangledClasses: Array.from(unmangledClasses)
165
- };
172
+ return session.result(root.toString(), transformedCount);
166
173
  }
167
174
  function createPostCSSPlugin(mangleMap, options = {}) {
168
- const mangledClasses = /* @__PURE__ */ new Set();
169
- const unmangledClasses = /* @__PURE__ */ new Set();
170
- const selectorProcessor = createSelectorProcessor(mangleMap, mangledClasses, unmangledClasses);
175
+ const session = createManglerSession(mangleMap, options);
176
+ let transformedCount = 0;
171
177
  return {
172
178
  postcssPlugin: "csszyx-css-mangler",
173
179
  Rule(rule) {
174
- try {
175
- const originalSelector = rule.selector;
176
- const newSelector = selectorProcessor.processSync(originalSelector);
177
- if (newSelector !== originalSelector) {
178
- rule.selector = newSelector;
179
- }
180
- } catch (error) {
181
- if (options.debug) {
182
- console.warn(`[csszyx] Failed to process selector: ${rule.selector}`, error);
183
- }
184
- }
180
+ if (session.mangleRule(rule)) transformedCount++;
185
181
  },
186
182
  OnceExit() {
187
183
  if (options.debug) {
188
- console.log(`[csszyx] Mangled ${mangledClasses.size} unique classes`);
184
+ const { mangledClasses } = session.result("", transformedCount);
185
+ console.log(`[csszyx] Mangled ${mangledClasses.length} unique classes`);
189
186
  }
190
187
  }
191
188
  };
192
189
  }
193
190
 
191
+ exports.classAttributeSelectorKey = classAttributeSelectorKey;
194
192
  exports.createPostCSSPlugin = createPostCSSPlugin;
195
193
  exports.escapeCSSClassName = escapeCSSClassName;
196
194
  exports.mangleCSS = mangleCSS;
@@ -30,6 +30,30 @@ interface CSSManglerOptions {
30
30
  */
31
31
  from?: string;
32
32
  }
33
+ /**
34
+ * One `[class …]` attribute selector found while walking a stylesheet.
35
+ *
36
+ * Reported, never rewritten: such a selector matches the class attribute's
37
+ * text, and a mangled token carries no trace of the name it replaced, so no
38
+ * rewrite is correct. The build compares these against the mangle map to say
39
+ * which renamed classes the selector was matching by name.
40
+ */
41
+ interface ClassAttributeSelector {
42
+ /** The attribute operator: `=`, `~=`, `|=`, `^=`, `$=` or `*=`. */
43
+ operator: string;
44
+ /** The value as written, unescaped and unquoted. */
45
+ value: string;
46
+ /** True when the selector carries the `i` flag. */
47
+ insensitive: boolean;
48
+ }
49
+ /**
50
+ * The identity of an attribute selector, for de-duplication across rules,
51
+ * media queries and assets.
52
+ *
53
+ * @param selector - One collected selector.
54
+ * @returns A key equal for two selectors that compare the same way.
55
+ */
56
+ declare function classAttributeSelectorKey(selector: ClassAttributeSelector): string;
33
57
  /**
34
58
  * CSS Mangler result.
35
59
  */
@@ -38,6 +62,11 @@ interface CSSManglerResult {
38
62
  * The transformed CSS.
39
63
  */
40
64
  css: string;
65
+ /**
66
+ * Every distinct `[class …]` attribute selector the stylesheet contains,
67
+ * in first-seen order. See {@link ClassAttributeSelector}.
68
+ */
69
+ classAttributeSelectors: ClassAttributeSelector[];
41
70
  /**
42
71
  * Number of selectors transformed.
43
72
  */
@@ -120,5 +149,5 @@ declare function mangleCSSSync(css: string, mangleMap: MangleMap, options?: CSSM
120
149
  */
121
150
  declare function createPostCSSPlugin(mangleMap: MangleMap, options?: CSSManglerOptions): postcss.Plugin;
122
151
 
123
- export { createPostCSSPlugin, escapeCSSClassName, mangleCSS, mangleCSSSync, unescapeTailwindClass };
124
- export type { CSSManglerOptions, CSSManglerResult, MangleMap };
152
+ export { classAttributeSelectorKey, createPostCSSPlugin, escapeCSSClassName, mangleCSS, mangleCSSSync, unescapeTailwindClass };
153
+ export type { CSSManglerOptions, CSSManglerResult, ClassAttributeSelector, MangleMap };
@@ -30,6 +30,30 @@ interface CSSManglerOptions {
30
30
  */
31
31
  from?: string;
32
32
  }
33
+ /**
34
+ * One `[class …]` attribute selector found while walking a stylesheet.
35
+ *
36
+ * Reported, never rewritten: such a selector matches the class attribute's
37
+ * text, and a mangled token carries no trace of the name it replaced, so no
38
+ * rewrite is correct. The build compares these against the mangle map to say
39
+ * which renamed classes the selector was matching by name.
40
+ */
41
+ interface ClassAttributeSelector {
42
+ /** The attribute operator: `=`, `~=`, `|=`, `^=`, `$=` or `*=`. */
43
+ operator: string;
44
+ /** The value as written, unescaped and unquoted. */
45
+ value: string;
46
+ /** True when the selector carries the `i` flag. */
47
+ insensitive: boolean;
48
+ }
49
+ /**
50
+ * The identity of an attribute selector, for de-duplication across rules,
51
+ * media queries and assets.
52
+ *
53
+ * @param selector - One collected selector.
54
+ * @returns A key equal for two selectors that compare the same way.
55
+ */
56
+ declare function classAttributeSelectorKey(selector: ClassAttributeSelector): string;
33
57
  /**
34
58
  * CSS Mangler result.
35
59
  */
@@ -38,6 +62,11 @@ interface CSSManglerResult {
38
62
  * The transformed CSS.
39
63
  */
40
64
  css: string;
65
+ /**
66
+ * Every distinct `[class …]` attribute selector the stylesheet contains,
67
+ * in first-seen order. See {@link ClassAttributeSelector}.
68
+ */
69
+ classAttributeSelectors: ClassAttributeSelector[];
41
70
  /**
42
71
  * Number of selectors transformed.
43
72
  */
@@ -120,5 +149,5 @@ declare function mangleCSSSync(css: string, mangleMap: MangleMap, options?: CSSM
120
149
  */
121
150
  declare function createPostCSSPlugin(mangleMap: MangleMap, options?: CSSManglerOptions): postcss.Plugin;
122
151
 
123
- export { createPostCSSPlugin, escapeCSSClassName, mangleCSS, mangleCSSSync, unescapeTailwindClass };
124
- export type { CSSManglerOptions, CSSManglerResult, MangleMap };
152
+ export { classAttributeSelectorKey, createPostCSSPlugin, escapeCSSClassName, mangleCSS, mangleCSSSync, unescapeTailwindClass };
153
+ export type { CSSManglerOptions, CSSManglerResult, ClassAttributeSelector, MangleMap };
@@ -2,6 +2,9 @@ import postcss from 'postcss';
2
2
  import selectorParser from 'postcss-selector-parser';
3
3
 
4
4
  const BACKSLASH = String.fromCodePoint(92);
5
+ function classAttributeSelectorKey(selector) {
6
+ return `${selector.operator}\0${selector.value}\0${selector.insensitive ? "i" : ""}`;
7
+ }
5
8
  function unescapeTailwindClass(escapedName) {
6
9
  let result = "";
7
10
  let i = 0;
@@ -66,8 +69,17 @@ function escapeCSSClassName(className) {
66
69
  }
67
70
  return result;
68
71
  }
69
- function createSelectorProcessor(mangleMap, mangledClasses, unmangledClasses) {
72
+ function createSelectorProcessor(mangleMap, mangledClasses, unmangledClasses, attributeSelectors = /* @__PURE__ */ new Map()) {
70
73
  return selectorParser((selectors) => {
74
+ selectors.walkAttributes((attribute) => {
75
+ if (attribute.namespace !== void 0) return;
76
+ if (attribute.attribute.toLowerCase() !== "class") return;
77
+ const { operator, value } = attribute;
78
+ if (operator === void 0 || value === void 0 || value.length === 0) return;
79
+ const selector = { operator, value, insensitive: attribute.insensitive === true };
80
+ const key = classAttributeSelectorKey(selector);
81
+ if (!attributeSelectors.has(key)) attributeSelectors.set(key, selector);
82
+ });
71
83
  selectors.walkClasses((classNode) => {
72
84
  const originalValue = classNode.value;
73
85
  const unescapedValue = unescapeTailwindClass(originalValue);
@@ -88,100 +100,85 @@ function createSelectorProcessor(mangleMap, mangledClasses, unmangledClasses) {
88
100
  });
89
101
  });
90
102
  }
91
- async function mangleCSS(css, mangleMap, options = {}) {
103
+ function createManglerSession(mangleMap, options) {
92
104
  const mangledClasses = /* @__PURE__ */ new Set();
93
105
  const unmangledClasses = /* @__PURE__ */ new Set();
94
- let transformedCount = 0;
95
- const selectorProcessor = createSelectorProcessor(mangleMap, mangledClasses, unmangledClasses);
96
- const csszyxManglerPlugin = {
97
- postcssPlugin: "csszyx-css-mangler",
98
- Rule(rule) {
106
+ const attributeSelectors = /* @__PURE__ */ new Map();
107
+ const selectorProcessor = createSelectorProcessor(
108
+ mangleMap,
109
+ mangledClasses,
110
+ unmangledClasses,
111
+ attributeSelectors
112
+ );
113
+ return {
114
+ mangleRule(rule) {
99
115
  try {
100
116
  const originalSelector = rule.selector;
101
117
  const newSelector = selectorProcessor.processSync(originalSelector);
102
- if (newSelector !== originalSelector) {
103
- rule.selector = newSelector;
104
- transformedCount++;
105
- }
118
+ if (newSelector === originalSelector) return false;
119
+ rule.selector = newSelector;
120
+ return true;
106
121
  } catch (error) {
107
122
  if (options.debug) {
108
123
  console.warn(`[csszyx] Failed to process selector: ${rule.selector}`, error);
109
124
  }
125
+ return false;
110
126
  }
127
+ },
128
+ result(css, transformedCount) {
129
+ if (options.debug) {
130
+ console.log(`[csszyx] CSS Mangler: ${transformedCount} selectors transformed`);
131
+ console.log(`[csszyx] Mangled classes: ${mangledClasses.size}`);
132
+ console.log(`[csszyx] Unmangled classes: ${unmangledClasses.size}`);
133
+ }
134
+ return {
135
+ css,
136
+ transformedCount,
137
+ mangledClasses: Array.from(mangledClasses),
138
+ unmangledClasses: Array.from(unmangledClasses),
139
+ classAttributeSelectors: Array.from(attributeSelectors.values())
140
+ };
141
+ }
142
+ };
143
+ }
144
+ async function mangleCSS(css, mangleMap, options = {}) {
145
+ const session = createManglerSession(mangleMap, options);
146
+ let transformedCount = 0;
147
+ const csszyxManglerPlugin = {
148
+ postcssPlugin: "csszyx-css-mangler",
149
+ Rule(rule) {
150
+ if (session.mangleRule(rule)) transformedCount++;
111
151
  }
112
152
  };
113
153
  const result = await postcss([csszyxManglerPlugin]).process(css, {
114
154
  from: options.from
115
155
  });
116
- if (options.debug) {
117
- console.log(`[csszyx] CSS Mangler: ${transformedCount} selectors transformed`);
118
- console.log(`[csszyx] Mangled classes: ${mangledClasses.size}`);
119
- console.log(`[csszyx] Unmangled classes: ${unmangledClasses.size}`);
120
- }
121
- return {
122
- css: result.css,
123
- transformedCount,
124
- mangledClasses: Array.from(mangledClasses),
125
- unmangledClasses: Array.from(unmangledClasses)
126
- };
156
+ return session.result(result.css, transformedCount);
127
157
  }
128
158
  function mangleCSSSync(css, mangleMap, options = {}) {
129
- const mangledClasses = /* @__PURE__ */ new Set();
130
- const unmangledClasses = /* @__PURE__ */ new Set();
159
+ const session = createManglerSession(mangleMap, options);
131
160
  let transformedCount = 0;
132
- const selectorProcessor = createSelectorProcessor(mangleMap, mangledClasses, unmangledClasses);
133
161
  const root = postcss.parse(css, { from: options.from });
134
162
  root.walkRules((rule) => {
135
- try {
136
- const originalSelector = rule.selector;
137
- const newSelector = selectorProcessor.processSync(originalSelector);
138
- if (newSelector !== originalSelector) {
139
- rule.selector = newSelector;
140
- transformedCount++;
141
- }
142
- } catch (error) {
143
- if (options.debug) {
144
- console.warn(`[csszyx] Failed to process selector: ${rule.selector}`, error);
145
- }
146
- }
163
+ if (session.mangleRule(rule)) transformedCount++;
147
164
  });
148
- if (options.debug) {
149
- console.log(`[csszyx] CSS Mangler: ${transformedCount} selectors transformed`);
150
- console.log(`[csszyx] Mangled classes: ${mangledClasses.size}`);
151
- console.log(`[csszyx] Unmangled classes: ${unmangledClasses.size}`);
152
- }
153
- return {
154
- css: root.toString(),
155
- transformedCount,
156
- mangledClasses: Array.from(mangledClasses),
157
- unmangledClasses: Array.from(unmangledClasses)
158
- };
165
+ return session.result(root.toString(), transformedCount);
159
166
  }
160
167
  function createPostCSSPlugin(mangleMap, options = {}) {
161
- const mangledClasses = /* @__PURE__ */ new Set();
162
- const unmangledClasses = /* @__PURE__ */ new Set();
163
- const selectorProcessor = createSelectorProcessor(mangleMap, mangledClasses, unmangledClasses);
168
+ const session = createManglerSession(mangleMap, options);
169
+ let transformedCount = 0;
164
170
  return {
165
171
  postcssPlugin: "csszyx-css-mangler",
166
172
  Rule(rule) {
167
- try {
168
- const originalSelector = rule.selector;
169
- const newSelector = selectorProcessor.processSync(originalSelector);
170
- if (newSelector !== originalSelector) {
171
- rule.selector = newSelector;
172
- }
173
- } catch (error) {
174
- if (options.debug) {
175
- console.warn(`[csszyx] Failed to process selector: ${rule.selector}`, error);
176
- }
177
- }
173
+ if (session.mangleRule(rule)) transformedCount++;
178
174
  },
179
175
  OnceExit() {
180
176
  if (options.debug) {
181
- console.log(`[csszyx] Mangled ${mangledClasses.size} unique classes`);
177
+ const { mangledClasses } = session.result("", transformedCount);
178
+ console.log(`[csszyx] Mangled ${mangledClasses.length} unique classes`);
182
179
  }
183
180
  }
184
181
  };
185
182
  }
186
183
 
187
- export { createPostCSSPlugin, escapeCSSClassName, mangleCSS, mangleCSSSync, unescapeTailwindClass };
184
+ export { classAttributeSelectorKey, createPostCSSPlugin, escapeCSSClassName, mangleCSS, mangleCSSSync, unescapeTailwindClass };
package/dist/index.cjs CHANGED
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  const cssMangler = require('./css-mangler.cjs');
6
- const unplugin = require('./shared/unplugin.dz3AdzsO.cjs');
6
+ const unplugin = require('./shared/unplugin.ZqxgHk5F.cjs');
7
7
  const themeGroupsFile = require('./shared/unplugin.J6ue_lRJ.cjs');
8
8
  const types = require('@csszyx/types');
9
9
  const safelistSource = require('./shared/unplugin.DDSWQJYX.cjs');
@@ -27,6 +27,7 @@ require('postcss-value-parser');
27
27
 
28
28
 
29
29
 
30
+ exports.classAttributeSelectorKey = cssMangler.classAttributeSelectorKey;
30
31
  exports.createPostCSSPlugin = cssMangler.createPostCSSPlugin;
31
32
  exports.escapeCSSClassName = cssMangler.escapeCSSClassName;
32
33
  exports.mangleCSS = cssMangler.mangleCSS;
package/dist/index.d.cts CHANGED
@@ -1,9 +1,9 @@
1
- export { CSSManglerOptions, CSSManglerResult, MangleMap, createPostCSSPlugin, escapeCSSClassName, mangleCSS, mangleCSSSync, unescapeTailwindClass } from './css-mangler.cjs';
1
+ export { CSSManglerOptions, CSSManglerResult, ClassAttributeSelector, MangleMap, classAttributeSelectorKey, createPostCSSPlugin, escapeCSSClassName, mangleCSS, mangleCSSSync, unescapeTailwindClass } from './css-mangler.cjs';
2
2
  export { CSSZYX_GLOBAL_ALIAS_PREFIX, TAILWIND_RESERVED_PREFIXES } from '@csszyx/types';
3
- import { G as GlobalVarScanCacheKeyInput, C as CssVarScanResult, S as ScanGlobalVarCssOptions, P as PlanGlobalVarAliasesInput, a as GlobalVarAliasPlan, R as RewriteGlobalVarCssAliasesOptions, b as GlobalVarCssAliasRewriteResult, c as CreateGlobalVarAliasValidationOptionsInput, V as ValidateGlobalVarAliasInputsOptions, d as GlobalVarAliasValidationResult } from './shared/unplugin.BT7PqYuK.cjs';
3
+ import { G as GlobalVarScanCacheKeyInput, C as CssVarScanResult, S as ScanGlobalVarCssOptions, P as PlanGlobalVarAliasesInput, a as GlobalVarAliasPlan, R as RewriteGlobalVarCssAliasesOptions, b as GlobalVarCssAliasRewriteResult, c as CreateGlobalVarAliasValidationOptionsInput, V as ValidateGlobalVarAliasInputsOptions, d as GlobalVarAliasValidationResult } from './shared/unplugin.nvme_dSL.cjs';
4
4
  // @ts-ignore
5
5
  export = undefined;
6
- export { e as CssVarDefinition, f as CssVarLocation, g as CssVarReference, h as GlobalVarAliasDiagnostic, i as GlobalVarAliasDiagnosticSeverity, j as GlobalVarAliasEntry, k as GlobalVarCodeSource, l as GlobalVarCssAssetSource, m as GlobalVarCssSource, n as GlobalVarScanCacheEntry, M as MangleHybridHazards, o as ParsedTheme, p as ParsedUtilities, Q as QuietMode, q as RSCBoundaryViolation, r as RSCModuleRecord, s as allocateMangleTokens, t as assertNoRSCBoundaryViolation, u as assertNoRSCGraphViolation, v as collectMangleHybridHazards, w as createGlobalVarMapAssetSource, x as createRSCModuleRecord, y as cssHasContentScope, A as deleteRSCModuleRecord, B as emitMissingCssFallback, D as esbuildPlugin, E as extractGlobalVarAliasesForManifest, F as fileMayContainSafelistableSz, H as findLocalImportSources, I as findRSCBoundaryViolation, J as findRSCGraphViolation, K as hasInjectableTailwindCandidate, L as hasTokens, N as hasUseClientDirective, O as hasUseServerDirective, T as isAdvisoryDiagnostic, U as isCompileSourceOptedIn, W as isHardIgnoredPath, X as isMangleableCssId, Y as isMonorepoPackage, Z as isPackagesSkippedSource, _ as isRSCServerModule, $ as lateMangleCensusMessage, a0 as mangleCodeClassesSync, a1 as mangleEligibleClasses, a2 as mangleHybridHazardMessage, a3 as mergeThemes, a4 as missingTailwindEntryMessage, a5 as normalizeGlobalVarAliasesForCache, a6 as parseThemeBlocks, a7 as parseUtilityBlocks, a8 as realContentHashDisabledMessage, a9 as recordGlobalVarSourceFile, aa as resolveCompileSourceDirs, ab as resolveNativeCacheIdentity, ac as resolveQuietMode, ad as rollupPlugin, ae as scanCustomPropertyNames, af as shouldEmitMissingCssFallback, ag as shouldEmitWarning, ah as shouldTrackGlobalVarSources, ai as shouldWarnMissingTailwindEntry, aj as shouldWarnUnscopedMonorepo, ak as skippedSzFilesMessage, al as suppressedAdvisoryMessage, z as unplugin, am as unscopedMonorepoMessage, an as vitePlugin, ao as watchModeMangleMessage, ap as webpackPlugin } from './shared/unplugin.BT7PqYuK.cjs';
6
+ export { e as CssVarDefinition, f as CssVarLocation, g as CssVarReference, h as GlobalVarAliasDiagnostic, i as GlobalVarAliasDiagnosticSeverity, j as GlobalVarAliasEntry, k as GlobalVarCodeSource, l as GlobalVarCssAssetSource, m as GlobalVarCssSource, n as GlobalVarScanCacheEntry, M as MangleHybridHazards, o as MangleSelectorHazard, p as ParsedTheme, q as ParsedUtilities, Q as QuietMode, r as RSCBoundaryViolation, s as RSCModuleRecord, t as allocateMangleTokens, u as assertNoRSCBoundaryViolation, v as assertNoRSCGraphViolation, w as collectMangleHybridHazards, x as createGlobalVarMapAssetSource, y as createRSCModuleRecord, z as cssHasContentScope, B as deleteRSCModuleRecord, D as emitMissingCssFallback, E as esbuildPlugin, F as extractGlobalVarAliasesForManifest, H as fileMayContainSafelistableSz, I as findLocalImportSources, J as findRSCBoundaryViolation, K as findRSCGraphViolation, L as hasInjectableTailwindCandidate, N as hasTokens, O as hasUseClientDirective, T as hasUseServerDirective, U as isAdvisoryDiagnostic, W as isCompileSourceOptedIn, X as isHardIgnoredPath, Y as isMangleableCssId, Z as isMonorepoPackage, _ as isPackagesSkippedSource, $ as isRSCServerModule, a0 as lateMangleCensusMessage, a1 as mangleCodeClassesSync, a2 as mangleEligibleClasses, a3 as mangleHybridHazardMessage, a4 as mergeThemes, a5 as missingTailwindEntryMessage, a6 as normalizeGlobalVarAliasesForCache, a7 as parseThemeBlocks, a8 as parseUtilityBlocks, a9 as realContentHashDisabledMessage, aa as recordGlobalVarSourceFile, ab as resolveCompileSourceDirs, ac as resolveNativeCacheIdentity, ad as resolveQuietMode, ae as rollupPlugin, af as scanCustomPropertyNames, ag as shouldEmitMissingCssFallback, ah as shouldEmitWarning, ai as shouldTrackGlobalVarSources, aj as shouldWarnMissingTailwindEntry, ak as shouldWarnUnscopedMonorepo, al as skippedSzFilesMessage, am as suppressedAdvisoryMessage, A as unplugin, an as unscopedMonorepoMessage, ao as vitePlugin, ap as watchModeMangleMessage, aq as webpackPlugin } from './shared/unplugin.nvme_dSL.cjs';
7
7
  import 'postcss';
8
8
  import '@csszyx/compiler';
9
9
  import 'esbuild';
package/dist/index.d.mts CHANGED
@@ -1,7 +1,7 @@
1
- export { CSSManglerOptions, CSSManglerResult, MangleMap, createPostCSSPlugin, escapeCSSClassName, mangleCSS, mangleCSSSync, unescapeTailwindClass } from './css-mangler.mjs';
1
+ export { CSSManglerOptions, CSSManglerResult, ClassAttributeSelector, MangleMap, classAttributeSelectorKey, createPostCSSPlugin, escapeCSSClassName, mangleCSS, mangleCSSSync, unescapeTailwindClass } from './css-mangler.mjs';
2
2
  export { CSSZYX_GLOBAL_ALIAS_PREFIX, TAILWIND_RESERVED_PREFIXES } from '@csszyx/types';
3
- import { G as GlobalVarScanCacheKeyInput, C as CssVarScanResult, S as ScanGlobalVarCssOptions, P as PlanGlobalVarAliasesInput, a as GlobalVarAliasPlan, R as RewriteGlobalVarCssAliasesOptions, b as GlobalVarCssAliasRewriteResult, c as CreateGlobalVarAliasValidationOptionsInput, V as ValidateGlobalVarAliasInputsOptions, d as GlobalVarAliasValidationResult } from './shared/unplugin.BT7PqYuK.mjs';
4
- export { e as CssVarDefinition, f as CssVarLocation, g as CssVarReference, h as GlobalVarAliasDiagnostic, i as GlobalVarAliasDiagnosticSeverity, j as GlobalVarAliasEntry, k as GlobalVarCodeSource, l as GlobalVarCssAssetSource, m as GlobalVarCssSource, n as GlobalVarScanCacheEntry, M as MangleHybridHazards, o as ParsedTheme, p as ParsedUtilities, Q as QuietMode, q as RSCBoundaryViolation, r as RSCModuleRecord, s as allocateMangleTokens, t as assertNoRSCBoundaryViolation, u as assertNoRSCGraphViolation, v as collectMangleHybridHazards, w as createGlobalVarMapAssetSource, x as createRSCModuleRecord, y as cssHasContentScope, z as default, A as deleteRSCModuleRecord, B as emitMissingCssFallback, D as esbuildPlugin, E as extractGlobalVarAliasesForManifest, F as fileMayContainSafelistableSz, H as findLocalImportSources, I as findRSCBoundaryViolation, J as findRSCGraphViolation, K as hasInjectableTailwindCandidate, L as hasTokens, N as hasUseClientDirective, O as hasUseServerDirective, T as isAdvisoryDiagnostic, U as isCompileSourceOptedIn, W as isHardIgnoredPath, X as isMangleableCssId, Y as isMonorepoPackage, Z as isPackagesSkippedSource, _ as isRSCServerModule, $ as lateMangleCensusMessage, a0 as mangleCodeClassesSync, a1 as mangleEligibleClasses, a2 as mangleHybridHazardMessage, a3 as mergeThemes, a4 as missingTailwindEntryMessage, a5 as normalizeGlobalVarAliasesForCache, a6 as parseThemeBlocks, a7 as parseUtilityBlocks, a8 as realContentHashDisabledMessage, a9 as recordGlobalVarSourceFile, aa as resolveCompileSourceDirs, ab as resolveNativeCacheIdentity, ac as resolveQuietMode, ad as rollupPlugin, ae as scanCustomPropertyNames, af as shouldEmitMissingCssFallback, ag as shouldEmitWarning, ah as shouldTrackGlobalVarSources, ai as shouldWarnMissingTailwindEntry, aj as shouldWarnUnscopedMonorepo, ak as skippedSzFilesMessage, al as suppressedAdvisoryMessage, z as unplugin, am as unscopedMonorepoMessage, an as vitePlugin, ao as watchModeMangleMessage, ap as webpackPlugin } from './shared/unplugin.BT7PqYuK.mjs';
3
+ import { G as GlobalVarScanCacheKeyInput, C as CssVarScanResult, S as ScanGlobalVarCssOptions, P as PlanGlobalVarAliasesInput, a as GlobalVarAliasPlan, R as RewriteGlobalVarCssAliasesOptions, b as GlobalVarCssAliasRewriteResult, c as CreateGlobalVarAliasValidationOptionsInput, V as ValidateGlobalVarAliasInputsOptions, d as GlobalVarAliasValidationResult } from './shared/unplugin.CInSoHdQ.mjs';
4
+ export { e as CssVarDefinition, f as CssVarLocation, g as CssVarReference, h as GlobalVarAliasDiagnostic, i as GlobalVarAliasDiagnosticSeverity, j as GlobalVarAliasEntry, k as GlobalVarCodeSource, l as GlobalVarCssAssetSource, m as GlobalVarCssSource, n as GlobalVarScanCacheEntry, M as MangleHybridHazards, o as MangleSelectorHazard, p as ParsedTheme, q as ParsedUtilities, Q as QuietMode, r as RSCBoundaryViolation, s as RSCModuleRecord, t as allocateMangleTokens, u as assertNoRSCBoundaryViolation, v as assertNoRSCGraphViolation, w as collectMangleHybridHazards, x as createGlobalVarMapAssetSource, y as createRSCModuleRecord, z as cssHasContentScope, A as default, B as deleteRSCModuleRecord, D as emitMissingCssFallback, E as esbuildPlugin, F as extractGlobalVarAliasesForManifest, H as fileMayContainSafelistableSz, I as findLocalImportSources, J as findRSCBoundaryViolation, K as findRSCGraphViolation, L as hasInjectableTailwindCandidate, N as hasTokens, O as hasUseClientDirective, T as hasUseServerDirective, U as isAdvisoryDiagnostic, W as isCompileSourceOptedIn, X as isHardIgnoredPath, Y as isMangleableCssId, Z as isMonorepoPackage, _ as isPackagesSkippedSource, $ as isRSCServerModule, a0 as lateMangleCensusMessage, a1 as mangleCodeClassesSync, a2 as mangleEligibleClasses, a3 as mangleHybridHazardMessage, a4 as mergeThemes, a5 as missingTailwindEntryMessage, a6 as normalizeGlobalVarAliasesForCache, a7 as parseThemeBlocks, a8 as parseUtilityBlocks, a9 as realContentHashDisabledMessage, aa as recordGlobalVarSourceFile, ab as resolveCompileSourceDirs, ac as resolveNativeCacheIdentity, ad as resolveQuietMode, ae as rollupPlugin, af as scanCustomPropertyNames, ag as shouldEmitMissingCssFallback, ah as shouldEmitWarning, ai as shouldTrackGlobalVarSources, aj as shouldWarnMissingTailwindEntry, ak as shouldWarnUnscopedMonorepo, al as skippedSzFilesMessage, am as suppressedAdvisoryMessage, A as unplugin, an as unscopedMonorepoMessage, ao as vitePlugin, ap as watchModeMangleMessage, aq as webpackPlugin } from './shared/unplugin.CInSoHdQ.mjs';
5
5
  import 'postcss';
6
6
  import '@csszyx/compiler';
7
7
  import 'esbuild';
package/dist/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
- export { createPostCSSPlugin, escapeCSSClassName, mangleCSS, mangleCSSSync, unescapeTailwindClass } from './css-mangler.mjs';
2
- export { a as allocateMangleTokens, b as assertNoRSCBoundaryViolation, c as assertNoRSCGraphViolation, d as collectMangleHybridHazards, e as createGlobalVarAliasValidationOptions, f as createGlobalVarMapAssetSource, g as createGlobalVarScanCacheKey, h as createRSCModuleRecord, i as cssHasContentScope, u as default, j as deleteRSCModuleRecord, k as emitMissingCssFallback, l as esbuildPlugin, m as extractGlobalVarAliasesForManifest, n as fileMayContainSafelistableSz, o as findLocalImportSources, p as findRSCBoundaryViolation, q as findRSCGraphViolation, r as hasInjectableTailwindCandidate, s as hasUseClientDirective, t as hasUseServerDirective, v as isAdvisoryDiagnostic, w as isCompileSourceOptedIn, x as isHardIgnoredPath, y as isMangleableCssId, z as isMonorepoPackage, A as isPackagesSkippedSource, B as isRSCServerModule, C as isTailwindReservedGlobalVar, D as lateMangleCensusMessage, E as mangleCodeClassesSync, F as mangleEligibleClasses, G as mangleHybridHazardMessage, H as missingTailwindEntryMessage, I as normalizeGlobalVarAliasesForCache, J as planGlobalVarAliases, K as readGlobalVarScanCache, L as realContentHashDisabledMessage, M as recordGlobalVarSourceFile, N as resolveCompileSourceDirs, O as resolveGlobalVarScanCacheDir, P as resolveNativeCacheIdentity, Q as resolveQuietMode, R as rewriteGlobalVarCssAliases, S as rollupPlugin, T as scanGlobalVarCss, U as shouldEmitMissingCssFallback, V as shouldEmitWarning, W as shouldTrackGlobalVarSources, X as shouldWarnMissingTailwindEntry, Y as shouldWarnUnscopedMonorepo, Z as skippedSzFilesMessage, _ as suppressedAdvisoryMessage, u as unplugin, $ as unscopedMonorepoMessage, a0 as validateGlobalVarAliasInputs, a1 as vitePlugin, a2 as watchModeMangleMessage, a3 as webpackPlugin, a4 as writeGlobalVarScanCache } from './shared/unplugin.BxsTa17g.mjs';
3
- export { h as hasTokens, m as mergeThemes, p as parseThemeBlocks, a as parseUtilityBlocks, s as scanCustomPropertyNames } from './shared/unplugin.DK0b4fr7.mjs';
1
+ export { classAttributeSelectorKey, createPostCSSPlugin, escapeCSSClassName, mangleCSS, mangleCSSSync, unescapeTailwindClass } from './css-mangler.mjs';
2
+ export { a as allocateMangleTokens, b as assertNoRSCBoundaryViolation, c as assertNoRSCGraphViolation, d as collectMangleHybridHazards, e as createGlobalVarAliasValidationOptions, f as createGlobalVarMapAssetSource, g as createGlobalVarScanCacheKey, h as createRSCModuleRecord, i as cssHasContentScope, u as default, j as deleteRSCModuleRecord, k as emitMissingCssFallback, l as esbuildPlugin, m as extractGlobalVarAliasesForManifest, n as fileMayContainSafelistableSz, o as findLocalImportSources, p as findRSCBoundaryViolation, q as findRSCGraphViolation, r as hasInjectableTailwindCandidate, s as hasUseClientDirective, t as hasUseServerDirective, v as isAdvisoryDiagnostic, w as isCompileSourceOptedIn, x as isHardIgnoredPath, y as isMangleableCssId, z as isMonorepoPackage, A as isPackagesSkippedSource, B as isRSCServerModule, C as isTailwindReservedGlobalVar, D as lateMangleCensusMessage, E as mangleCodeClassesSync, F as mangleEligibleClasses, G as mangleHybridHazardMessage, H as missingTailwindEntryMessage, I as normalizeGlobalVarAliasesForCache, J as planGlobalVarAliases, K as readGlobalVarScanCache, L as realContentHashDisabledMessage, M as recordGlobalVarSourceFile, N as resolveCompileSourceDirs, O as resolveGlobalVarScanCacheDir, P as resolveNativeCacheIdentity, Q as resolveQuietMode, R as rewriteGlobalVarCssAliases, S as rollupPlugin, T as scanGlobalVarCss, U as shouldEmitMissingCssFallback, V as shouldEmitWarning, W as shouldTrackGlobalVarSources, X as shouldWarnMissingTailwindEntry, Y as shouldWarnUnscopedMonorepo, Z as skippedSzFilesMessage, _ as suppressedAdvisoryMessage, u as unplugin, $ as unscopedMonorepoMessage, a0 as validateGlobalVarAliasInputs, a1 as vitePlugin, a2 as watchModeMangleMessage, a3 as webpackPlugin, a4 as writeGlobalVarScanCache } from './shared/unplugin.CPo2xrEy.mjs';
3
+ export { h as hasTokens, m as mergeThemes, p as parseThemeBlocks, a as parseUtilityBlocks, s as scanCustomPropertyNames } from './shared/unplugin.Ceq-N4jI.mjs';
4
4
  export { CSSZYX_GLOBAL_ALIAS_PREFIX, TAILWIND_RESERVED_PREFIXES } from '@csszyx/types';
5
5
  export { S as SAFELIST_FILE, a as appendTailwindSourceDirective, c as computeSafelistRelPath, b as cssImportsTailwind } from './shared/unplugin.DH_ij6cf.mjs';
6
6
  import 'postcss';
@@ -17,6 +17,6 @@ import '@csszyx/core/native';
17
17
  import '@csszyx/svelte-adapter';
18
18
  import '@csszyx/vue-adapter';
19
19
  import 'unplugin';
20
- import './shared/unplugin.Bk9o8_RZ.mjs';
20
+ import './shared/unplugin.C-oQU1jl.mjs';
21
21
  import 'node:zlib';
22
22
  import 'postcss-value-parser';
@@ -1,10 +1,10 @@
1
1
  import { createHash } from 'node:crypto';
2
2
  import { existsSync, readFileSync } from 'node:fs';
3
3
  import * as path from 'node:path';
4
- import { r as readPackageVersion, c as configWithImportedStaticSz, a as resolveNextCrossModule, t as transformNextSource, w as withCrossModuleStatics, b as collectNextTransformMetadata, d as createNextSafelistShardFromMetadata } from './shared/unplugin.DAzgbtuZ.mjs';
4
+ import { r as readPackageVersion, c as configWithImportedStaticSz, a as resolveNextCrossModule, t as transformNextSource, w as withCrossModuleStatics, b as collectNextTransformMetadata, d as createNextSafelistShardFromMetadata } from './shared/unplugin.Vn9x8SBP.mjs';
5
5
  import { c as createNextStateContext, w as writeNextSafelistShard, r as runNextWatcherCycle } from './shared/unplugin.BLptVbUe.mjs';
6
6
  import { f as findPostcssConfigWithoutCsszyx, m as missingPostcssPluginMessage, n as normalizePathSeparators } from './shared/unplugin.DH_ij6cf.mjs';
7
- import { r as resolveTransformCacheDir } from './shared/unplugin.Bk9o8_RZ.mjs';
7
+ import { r as resolveTransformCacheDir } from './shared/unplugin.C-oQU1jl.mjs';
8
8
  import '@csszyx/compiler';
9
9
  import '@csszyx/types';
10
10
  import 'node:os';
@@ -1,10 +1,10 @@
1
1
  import { createHash } from 'node:crypto';
2
2
  import * as path from 'node:path';
3
- import { i as injectNextRuntimeImports, e as ensureThemeGroupsFile, b as insertAfterUseDirective, t as themeGroupsSpecifier } from './shared/unplugin.DK0b4fr7.mjs';
4
- import { r as readPackageVersion, c as configWithImportedStaticSz, a as resolveNextCrossModule, t as transformNextSource, w as withCrossModuleStatics, n as normalizeProviderPaths, b as collectNextTransformMetadata, d as createNextSafelistShardFromMetadata } from './shared/unplugin.DAzgbtuZ.mjs';
3
+ import { i as injectNextRuntimeImports, e as ensureThemeGroupsFile, b as insertAfterUseDirective, t as themeGroupsSpecifier } from './shared/unplugin.Ceq-N4jI.mjs';
4
+ import { r as readPackageVersion, c as configWithImportedStaticSz, a as resolveNextCrossModule, t as transformNextSource, w as withCrossModuleStatics, n as normalizeProviderPaths, b as collectNextTransformMetadata, d as createNextSafelistShardFromMetadata } from './shared/unplugin.Vn9x8SBP.mjs';
5
5
  import { c as createNextStateContext, w as writeNextSafelistShard, r as runNextWatcherCycle, N as NextSafelistStateLockedError, a as NEXT_WATCH_LOCK_COMMAND, v as validateNextGenerationManifest, b as readNextGenerationManifest } from './shared/unplugin.BLptVbUe.mjs';
6
6
  import { n as normalizePathSeparators } from './shared/unplugin.DH_ij6cf.mjs';
7
- import { r as resolveTransformCacheDir } from './shared/unplugin.Bk9o8_RZ.mjs';
7
+ import { r as resolveTransformCacheDir } from './shared/unplugin.C-oQU1jl.mjs';
8
8
  import 'node:fs';
9
9
  import '@csszyx/compiler';
10
10
  import '@csszyx/types';
@@ -545,4 +545,4 @@ function evictMemoryCacheToBudget(cache, totalCodeChars, maxEntries, maxCodeChar
545
545
  return total;
546
546
  }
547
547
 
548
- export { MAX_FORWARD_HOPS as M, resolveProviderPathWith as a, recordResolvedEntry as b, collectSpecifierAliases as c, isReadableProviderFile as d, createTransformCacheKey as e, forwardVisitKey as f, readTransformCache as g, evictOldTransformCacheEntries as h, importedSpecifiersIn as i, recordSzvRegistryFile as j, recordCrossModuleForwards as k, recordSzObjectRegistryFile as l, mayExportSzvFactories as m, resolveCrossModuleStaticsFor as n, resolveProviderPath as o, evictMemoryCacheToBudget as p, resolveTransformCacheDir as r, specifierBases as s, writeTransformCache as w };
548
+ export { MAX_FORWARD_HOPS as M, resolveProviderPathWith as a, recordResolvedEntry as b, collectSpecifierAliases as c, isReadableProviderFile as d, createTransformCacheKey as e, forwardVisitKey as f, readTransformCache as g, evictOldTransformCacheEntries as h, importedSpecifiersIn as i, recordSzvRegistryFile as j, recordCrossModuleForwards as k, recordSzObjectRegistryFile as l, mayExportSzvFactories as m, resolveProviderPath as n, resolveCrossModuleStaticsFor as o, evictMemoryCacheToBudget as p, resolveTransformCacheDir as r, specifierBases as s, writeTransformCache as w };