@productivemark/snipcss 1.0.0

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.
Files changed (117) hide show
  1. package/.claude-plugin/marketplace.json +17 -0
  2. package/.claude-plugin/plugin.json +10 -0
  3. package/.mcp.json +8 -0
  4. package/dist/auth/config-manager.d.ts +13 -0
  5. package/dist/auth/config-manager.d.ts.map +1 -0
  6. package/dist/auth/config-manager.js +48 -0
  7. package/dist/auth/config-manager.js.map +1 -0
  8. package/dist/auth/usage-gate.d.ts +13 -0
  9. package/dist/auth/usage-gate.d.ts.map +1 -0
  10. package/dist/auth/usage-gate.js +69 -0
  11. package/dist/auth/usage-gate.js.map +1 -0
  12. package/dist/browser/browser-manager.d.ts +15 -0
  13. package/dist/browser/browser-manager.d.ts.map +1 -0
  14. package/dist/browser/browser-manager.js +61 -0
  15. package/dist/browser/browser-manager.js.map +1 -0
  16. package/dist/browser/viewport-manager.d.ts +8 -0
  17. package/dist/browser/viewport-manager.d.ts.map +1 -0
  18. package/dist/browser/viewport-manager.js +50 -0
  19. package/dist/browser/viewport-manager.js.map +1 -0
  20. package/dist/extraction/css-variable-resolver.d.ts +27 -0
  21. package/dist/extraction/css-variable-resolver.d.ts.map +1 -0
  22. package/dist/extraction/css-variable-resolver.js +105 -0
  23. package/dist/extraction/css-variable-resolver.js.map +1 -0
  24. package/dist/extraction/dom-labeler.d.ts +26 -0
  25. package/dist/extraction/dom-labeler.d.ts.map +1 -0
  26. package/dist/extraction/dom-labeler.js +124 -0
  27. package/dist/extraction/dom-labeler.js.map +1 -0
  28. package/dist/extraction/element-discovery.d.ts +59 -0
  29. package/dist/extraction/element-discovery.d.ts.map +1 -0
  30. package/dist/extraction/element-discovery.js +525 -0
  31. package/dist/extraction/element-discovery.js.map +1 -0
  32. package/dist/extraction/extraction-pipeline.d.ts +26 -0
  33. package/dist/extraction/extraction-pipeline.d.ts.map +1 -0
  34. package/dist/extraction/extraction-pipeline.js +200 -0
  35. package/dist/extraction/extraction-pipeline.js.map +1 -0
  36. package/dist/extraction/font-collector.d.ts +26 -0
  37. package/dist/extraction/font-collector.d.ts.map +1 -0
  38. package/dist/extraction/font-collector.js +160 -0
  39. package/dist/extraction/font-collector.js.map +1 -0
  40. package/dist/extraction/html-cleaner.d.ts +16 -0
  41. package/dist/extraction/html-cleaner.d.ts.map +1 -0
  42. package/dist/extraction/html-cleaner.js +149 -0
  43. package/dist/extraction/html-cleaner.js.map +1 -0
  44. package/dist/extraction/keyframe-collector.d.ts +16 -0
  45. package/dist/extraction/keyframe-collector.d.ts.map +1 -0
  46. package/dist/extraction/keyframe-collector.js +62 -0
  47. package/dist/extraction/keyframe-collector.js.map +1 -0
  48. package/dist/extraction/pseudo-state-handler.d.ts +36 -0
  49. package/dist/extraction/pseudo-state-handler.d.ts.map +1 -0
  50. package/dist/extraction/pseudo-state-handler.js +210 -0
  51. package/dist/extraction/pseudo-state-handler.js.map +1 -0
  52. package/dist/extraction/result-builder.d.ts +25 -0
  53. package/dist/extraction/result-builder.d.ts.map +1 -0
  54. package/dist/extraction/result-builder.js +136 -0
  55. package/dist/extraction/result-builder.js.map +1 -0
  56. package/dist/extraction/rule-deduplicator.d.ts +39 -0
  57. package/dist/extraction/rule-deduplicator.d.ts.map +1 -0
  58. package/dist/extraction/rule-deduplicator.js +107 -0
  59. package/dist/extraction/rule-deduplicator.js.map +1 -0
  60. package/dist/extraction/selector-fixer.d.ts +25 -0
  61. package/dist/extraction/selector-fixer.d.ts.map +1 -0
  62. package/dist/extraction/selector-fixer.js +111 -0
  63. package/dist/extraction/selector-fixer.js.map +1 -0
  64. package/dist/extraction/specificity.d.ts +17 -0
  65. package/dist/extraction/specificity.d.ts.map +1 -0
  66. package/dist/extraction/specificity.js +88 -0
  67. package/dist/extraction/specificity.js.map +1 -0
  68. package/dist/extraction/style-matcher.d.ts +33 -0
  69. package/dist/extraction/style-matcher.d.ts.map +1 -0
  70. package/dist/extraction/style-matcher.js +199 -0
  71. package/dist/extraction/style-matcher.js.map +1 -0
  72. package/dist/extraction/stylesheet-collector.d.ts +33 -0
  73. package/dist/extraction/stylesheet-collector.d.ts.map +1 -0
  74. package/dist/extraction/stylesheet-collector.js +71 -0
  75. package/dist/extraction/stylesheet-collector.js.map +1 -0
  76. package/dist/index.d.ts +3 -0
  77. package/dist/index.d.ts.map +1 -0
  78. package/dist/index.js +235 -0
  79. package/dist/index.js.map +1 -0
  80. package/dist/mcp-server.d.ts +3 -0
  81. package/dist/mcp-server.d.ts.map +1 -0
  82. package/dist/mcp-server.js +349 -0
  83. package/dist/mcp-server.js.map +1 -0
  84. package/dist/tailwind/css-to-tailwind.d.ts +17 -0
  85. package/dist/tailwind/css-to-tailwind.d.ts.map +1 -0
  86. package/dist/tailwind/css-to-tailwind.js +1583 -0
  87. package/dist/tailwind/css-to-tailwind.js.map +1 -0
  88. package/dist/tailwind/shorthand-expander.d.ts +27 -0
  89. package/dist/tailwind/shorthand-expander.d.ts.map +1 -0
  90. package/dist/tailwind/shorthand-expander.js +812 -0
  91. package/dist/tailwind/shorthand-expander.js.map +1 -0
  92. package/dist/tailwind/tailwind-converter.d.ts +35 -0
  93. package/dist/tailwind/tailwind-converter.d.ts.map +1 -0
  94. package/dist/tailwind/tailwind-converter.js +1223 -0
  95. package/dist/tailwind/tailwind-converter.js.map +1 -0
  96. package/dist/tailwind/tailwind-helpers.d.ts +95 -0
  97. package/dist/tailwind/tailwind-helpers.d.ts.map +1 -0
  98. package/dist/tailwind/tailwind-helpers.js +593 -0
  99. package/dist/tailwind/tailwind-helpers.js.map +1 -0
  100. package/dist/tailwind/tailwind-reducer.d.ts +36 -0
  101. package/dist/tailwind/tailwind-reducer.d.ts.map +1 -0
  102. package/dist/tailwind/tailwind-reducer.js +189 -0
  103. package/dist/tailwind/tailwind-reducer.js.map +1 -0
  104. package/dist/types/index.d.ts +239 -0
  105. package/dist/types/index.d.ts.map +1 -0
  106. package/dist/types/index.js +94 -0
  107. package/dist/types/index.js.map +1 -0
  108. package/dist/utils/helpers.d.ts +34 -0
  109. package/dist/utils/helpers.d.ts.map +1 -0
  110. package/dist/utils/helpers.js +120 -0
  111. package/dist/utils/helpers.js.map +1 -0
  112. package/dist/utils/parsel.d.ts +41 -0
  113. package/dist/utils/parsel.d.ts.map +1 -0
  114. package/dist/utils/parsel.js +314 -0
  115. package/dist/utils/parsel.js.map +1 -0
  116. package/package.json +41 -0
  117. package/skills/workflow/SKILL.md +95 -0
@@ -0,0 +1,593 @@
1
+ /**
2
+ * Tailwind helper utilities.
3
+ * Port of tailwind_helper.js (997 lines)
4
+ */
5
+ // Cache for parsed media queries
6
+ const existingQueryRanges = {};
7
+ /** All known pseudo-classes and pseudo-elements */
8
+ export const allPseudos = [
9
+ 'active', 'any-link', 'checked', 'default', 'defined', 'disabled', 'empty', 'enabled',
10
+ 'first', 'first-child', 'first-of-type', 'focus', 'focus-visible', 'focus-within',
11
+ 'fullscreen', 'future', 'hover', 'indeterminate', 'in-range', 'invalid', 'last-child',
12
+ 'last-of-type', 'link', 'not', 'nth-child', 'nth-last-child', 'nth-last-of-type',
13
+ 'nth-of-type', 'only-child', 'only-of-type', 'optional', 'out-of-range', 'past',
14
+ 'placeholder-shown', 'read-only', 'read-write', 'required', 'root', 'scope', 'target',
15
+ 'valid', 'visited',
16
+ // Pseudo-elements
17
+ 'after', 'before', 'cue', 'first-letter', 'first-line', 'grammar-error', 'marker',
18
+ 'placeholder', 'selection', 'backdrop',
19
+ // Vendor-prefixed
20
+ '-webkit-scrollbar', '-webkit-scrollbar-corner', '-webkit-scrollbar-thumb',
21
+ '-webkit-scrollbar-track', '-webkit-scrollbar-track-hover', '-webkit-scrollbar-hover',
22
+ '-webkit-details-marker', '-webkit-autofill', '-webkit-file-upload-button',
23
+ '-webkit-inner-spin-button', '-webkit-outer-spin-button', '-webkit-resizer',
24
+ '-webkit-calendar-picker-indicator', '-webkit-full-screen',
25
+ ];
26
+ const tailwindBreakpoints = [640, 768, 1024, 1280, 1536];
27
+ function deepCopy(obj) {
28
+ return JSON.parse(JSON.stringify(obj));
29
+ }
30
+ /**
31
+ * Merge ranges with overlapping media queries, keeping highest-precedence rules.
32
+ */
33
+ export function mergeRanges(existingRanges, newRange) {
34
+ if (!existingRanges || existingRanges.length === 0) {
35
+ return [newRange];
36
+ }
37
+ const allRanges = existingRanges.concat([newRange]);
38
+ // Collect all unique boundary points
39
+ const boundaries = new Set();
40
+ allRanges.forEach(range => {
41
+ boundaries.add(range.media_min);
42
+ boundaries.add(range.media_max);
43
+ });
44
+ const boundaryArray = Array.from(boundaries).sort((a, b) => a - b);
45
+ // Create intervals between boundary points
46
+ const intervals = [];
47
+ for (let i = 0; i < boundaryArray.length - 1; i++) {
48
+ intervals.push({ media_min: boundaryArray[i], media_max: boundaryArray[i + 1] });
49
+ }
50
+ // Determine the applicable range for each interval
51
+ const intervalRanges = intervals.map(interval => {
52
+ const coveringRanges = allRanges.filter(range => range.media_min < interval.media_max && range.media_max > interval.media_min);
53
+ if (coveringRanges.length === 0)
54
+ return null;
55
+ coveringRanges.sort((a, b) => {
56
+ if (a.score !== b.score)
57
+ return b.score - a.score;
58
+ return b.ruleIndex - a.ruleIndex;
59
+ });
60
+ const topRange = coveringRanges[0];
61
+ return { ...topRange, media_min: interval.media_min, media_max: interval.media_max };
62
+ }).filter((range) => range !== null);
63
+ // Merge adjacent intervals with same properties
64
+ const mergedRanges = [];
65
+ for (const range of intervalRanges) {
66
+ const lastRange = mergedRanges[mergedRanges.length - 1];
67
+ if (lastRange &&
68
+ lastRange.tailwind_classes.join(' ') === range.tailwind_classes.join(' ') &&
69
+ lastRange.score === range.score &&
70
+ lastRange.ruleIndex === range.ruleIndex &&
71
+ lastRange.prop === range.prop) {
72
+ lastRange.media_max = range.media_max;
73
+ }
74
+ else {
75
+ mergedRanges.push(range);
76
+ }
77
+ }
78
+ return mergedRanges;
79
+ }
80
+ /**
81
+ * Get Tailwind media prefix from min/max width values.
82
+ */
83
+ export function getMediaPrefix(media_min, media_max) {
84
+ media_min = Number(media_min);
85
+ media_max = Number(media_max);
86
+ const breakpoints = [
87
+ { name: 'sm', min: 640 },
88
+ { name: 'md', min: 768 },
89
+ { name: 'lg', min: 1024 },
90
+ { name: 'xl', min: 1280 },
91
+ { name: '2xl', min: 1536 },
92
+ ];
93
+ const findByExactMin = (value) => breakpoints.find(bp => bp.min === value);
94
+ const findByExactMax = (value) => breakpoints.find(bp => bp.min - 0.02 === value);
95
+ const minBp = findByExactMin(media_min);
96
+ const maxBp = findByExactMax(media_max);
97
+ if (minBp && !maxBp && media_max >= 9999)
98
+ return minBp.name;
99
+ if (!minBp && maxBp && media_min <= -1)
100
+ return `max-${maxBp.name}`;
101
+ if (minBp && maxBp)
102
+ return `${minBp.name}:max-${maxBp.name}`;
103
+ if (media_min > -1 && media_max < 9999)
104
+ return `min-[${media_min}px]:max-[${media_max}px]`;
105
+ if (media_min > -1 && media_max >= 9999)
106
+ return `min-[${media_min}px]`;
107
+ if (media_min <= -1 && media_max < 9999)
108
+ return `max-[${media_max}px]`;
109
+ return '';
110
+ }
111
+ /**
112
+ * Get the closest Tailwind breakpoint to a given pixel value.
113
+ */
114
+ export function getClosestTailwindBreakpoint(value, isMinWidth) {
115
+ if (isMinWidth) {
116
+ const bp = tailwindBreakpoints.find(b => b >= value);
117
+ return bp !== undefined ? bp : value;
118
+ }
119
+ else {
120
+ const bp = [...tailwindBreakpoints].reverse().find(b => b <= value);
121
+ return bp !== undefined ? bp : value;
122
+ }
123
+ }
124
+ /**
125
+ * Convert a unit value to pixels. Returns null if conversion fails.
126
+ */
127
+ function convertToPx(value, unit) {
128
+ if (value === undefined || value === null)
129
+ return null;
130
+ const numVal = typeof value === 'string' ? parseFloat(value) : value;
131
+ if (isNaN(numVal))
132
+ return null;
133
+ if (!unit)
134
+ return numVal;
135
+ if (unit === 'px')
136
+ return numVal;
137
+ if (unit === 'rem' || unit === 'em')
138
+ return numVal * 16;
139
+ return null;
140
+ }
141
+ /**
142
+ * Parse a CSS media query string into Tailwind-compatible ranges.
143
+ * Simplified parser that handles common patterns without external MediaQueryParser dependency.
144
+ */
145
+ export function parseMediaQueryToTailwind(mediaQueryString, useTailwindBreakpoints = false) {
146
+ if (!mediaQueryString || mediaQueryString.trim() === '') {
147
+ return deepCopy([{ tailwind_classes: [], media_min: -1, media_max: 9999 }]);
148
+ }
149
+ let query = mediaQueryString;
150
+ if (query.startsWith('@media')) {
151
+ query = query.replace(/^@media\s+/i, '').trim();
152
+ }
153
+ // Check cache
154
+ if (!existingQueryRanges[query]) {
155
+ existingQueryRanges[query] = {};
156
+ }
157
+ const cacheKey = String(useTailwindBreakpoints);
158
+ if (existingQueryRanges[query][cacheKey]) {
159
+ return deepCopy(existingQueryRanges[query][cacheKey]);
160
+ }
161
+ const tailwindClasses = [];
162
+ let media_min = null;
163
+ let media_max = null;
164
+ let isNot = false;
165
+ // Check for 'not' prefix
166
+ if (query.startsWith('not ')) {
167
+ isNot = true;
168
+ query = query.substring(4).trim();
169
+ }
170
+ // Check for print media type
171
+ if (query.includes('print')) {
172
+ tailwindClasses.push('print');
173
+ }
174
+ // Feature-to-Tailwind class mappings
175
+ const featureMap = {
176
+ 'prefers-color-scheme': { 'dark': 'dark' },
177
+ 'prefers-reduced-motion': { 'no-preference': 'motion-safe', 'reduce': 'motion-reduce' },
178
+ 'prefers-contrast': { 'more': 'contrast-more', 'less': 'contrast-less' },
179
+ 'orientation': { 'portrait': 'portrait', 'landscape': 'landscape' },
180
+ };
181
+ // Parse min-width and max-width from the query using regex
182
+ const minWidthMatch = query.match(/\(\s*min-(?:device-)?width\s*:\s*([\d.]+)(px|rem|em)\s*\)/i);
183
+ if (minWidthMatch) {
184
+ const val = convertToPx(minWidthMatch[1], minWidthMatch[2]);
185
+ if (val !== null) {
186
+ media_min = media_min !== null ? Math.max(media_min, val) : val;
187
+ }
188
+ }
189
+ const maxWidthMatch = query.match(/\(\s*max-(?:device-)?width\s*:\s*([\d.]+)(px|rem|em)\s*\)/i);
190
+ if (maxWidthMatch) {
191
+ const val = convertToPx(maxWidthMatch[1], maxWidthMatch[2]);
192
+ if (val !== null) {
193
+ media_max = media_max !== null ? Math.min(media_max, val) : val;
194
+ }
195
+ }
196
+ // Handle range syntax: (width >= 768px), (width <= 1024px), (width > 768px), (width < 1024px)
197
+ const rangeMatches = Array.from(query.matchAll(/\(\s*width\s*([><=]+)\s*([\d.]+)(px|rem|em)\s*\)/gi));
198
+ for (const match of rangeMatches) {
199
+ const op = match[1];
200
+ const val = convertToPx(match[2], match[3]);
201
+ if (val === null)
202
+ continue;
203
+ if (op === '>=' || op === '=>') {
204
+ const v = val <= 200 ? null : val;
205
+ if (v !== null)
206
+ media_min = media_min !== null ? Math.max(media_min, v) : v;
207
+ }
208
+ else if (op === '<=') {
209
+ media_max = media_max !== null ? Math.min(media_max, val) : val;
210
+ }
211
+ else if (op === '>') {
212
+ const v = val + 1 <= 200 ? null : val + 1;
213
+ if (v !== null)
214
+ media_min = media_min !== null ? Math.max(media_min, v) : v;
215
+ }
216
+ else if (op === '<') {
217
+ media_max = media_max !== null ? Math.min(media_max, val - 1) : val - 1;
218
+ }
219
+ }
220
+ // Parse feature-value pairs
221
+ for (const [feature, valueMap] of Object.entries(featureMap)) {
222
+ const featureMatch = query.match(new RegExp(`\\(\\s*${feature}\\s*:\\s*(\\w[\\w-]*)\\s*\\)`, 'i'));
223
+ if (featureMatch) {
224
+ const twClass = valueMap[featureMatch[1]];
225
+ if (twClass)
226
+ tailwindClasses.push(twClass);
227
+ }
228
+ }
229
+ // Adjust to closest Tailwind breakpoints if requested
230
+ if (useTailwindBreakpoints) {
231
+ if (media_min !== null)
232
+ media_min = getClosestTailwindBreakpoint(media_min, true);
233
+ if (media_max !== null)
234
+ media_max = getClosestTailwindBreakpoint(media_max, false);
235
+ }
236
+ if (media_min === null)
237
+ media_min = -1;
238
+ if (media_max === null)
239
+ media_max = 9999;
240
+ let result;
241
+ if (isNot) {
242
+ result = [];
243
+ if (media_min > -1) {
244
+ result.push({ tailwind_classes: tailwindClasses, media_min: -1, media_max: media_min - 1 });
245
+ }
246
+ if (media_max < 9999) {
247
+ result.push({ tailwind_classes: tailwindClasses, media_min: media_max + 1, media_max: 9999 });
248
+ }
249
+ }
250
+ else {
251
+ result = [{ tailwind_classes: tailwindClasses, media_min, media_max }];
252
+ }
253
+ existingQueryRanges[query][cacheKey] = deepCopy(result);
254
+ return deepCopy(result);
255
+ }
256
+ /**
257
+ * Resolve a CSS variable's value, considering element scope and media queries.
258
+ */
259
+ export function resolveCssVariableValue(varName, elementLabels, cssvarDefinedArr, cssVarMap, seenVars = new Set(), depth = 0) {
260
+ const fullVarName = varName.startsWith('--') ? varName : '--' + varName;
261
+ if (seenVars.has(fullVarName))
262
+ return [];
263
+ seenVars.add(fullVarName);
264
+ const definitions = cssvarDefinedArr[fullVarName];
265
+ if (!definitions || definitions.length === 0)
266
+ return [];
267
+ // Build specificity map from element ancestry
268
+ const specificityMap = {};
269
+ elementLabels.forEach((label, index) => {
270
+ specificityMap[label] = elementLabels.length - index;
271
+ });
272
+ specificityMap['__global__'] = 0.5;
273
+ specificityMap['html'] = 0;
274
+ specificityMap['body'] = 0;
275
+ specificityMap[':root'] = 0;
276
+ let ranges = [];
277
+ definitions.forEach((def, ruleIndex) => {
278
+ const { label, value, media, selector } = def;
279
+ let specificity = (typeof specificityMap[label] !== 'undefined') ? specificityMap[label] : -1;
280
+ if (label === '__global__' && selector) {
281
+ if (selector === ':root' || selector.indexOf(':root') >= 0)
282
+ specificity = 0.5;
283
+ else if (selector === '*')
284
+ specificity = 0.1;
285
+ else
286
+ specificity = 0.5;
287
+ }
288
+ if (specificity === -1)
289
+ return;
290
+ const mediaRanges = parseMediaQueryToTailwind(media);
291
+ mediaRanges.forEach(mediaRange => {
292
+ ranges.push({
293
+ value,
294
+ media_min: mediaRange.media_min,
295
+ media_max: mediaRange.media_max,
296
+ specificity,
297
+ ruleIndex,
298
+ });
299
+ });
300
+ });
301
+ if (ranges.length === 0)
302
+ return [];
303
+ ranges.sort((a, b) => {
304
+ if (a.specificity !== b.specificity)
305
+ return b.specificity - a.specificity;
306
+ if (a.ruleIndex !== b.ruleIndex)
307
+ return b.ruleIndex - a.ruleIndex;
308
+ return 0;
309
+ });
310
+ let resolvedRanges = [];
311
+ for (const range of ranges) {
312
+ const resolvedValue = resolveValue(range.value, elementLabels, cssvarDefinedArr, cssVarMap, seenVars, depth + 1);
313
+ resolvedRanges = mergeRangesVariables(resolvedRanges, {
314
+ concrete_value: resolvedValue,
315
+ media_min: range.media_min,
316
+ media_max: range.media_max,
317
+ specificity: range.specificity,
318
+ ruleIndex: range.ruleIndex,
319
+ });
320
+ }
321
+ seenVars.delete(fullVarName);
322
+ return resolvedRanges;
323
+ }
324
+ /**
325
+ * Parse a var() function call with proper parenthesis matching.
326
+ */
327
+ export function parseVarFunctionHelper(str, startIndex) {
328
+ if (!str.substring(startIndex).startsWith('var('))
329
+ return null;
330
+ let i = startIndex + 4;
331
+ let parenCount = 1;
332
+ let varName = '';
333
+ let defaultValue = null;
334
+ let inVarName = true;
335
+ let buffer = '';
336
+ while (i < str.length && parenCount > 0) {
337
+ const char = str[i];
338
+ if (char === '(') {
339
+ parenCount++;
340
+ buffer += char;
341
+ }
342
+ else if (char === ')') {
343
+ parenCount--;
344
+ if (parenCount > 0)
345
+ buffer += char;
346
+ }
347
+ else if (char === ',' && parenCount === 1 && inVarName) {
348
+ varName = buffer.trim();
349
+ buffer = '';
350
+ inVarName = false;
351
+ }
352
+ else {
353
+ buffer += char;
354
+ }
355
+ i++;
356
+ }
357
+ if (parenCount === 0) {
358
+ if (inVarName)
359
+ varName = buffer.trim();
360
+ else
361
+ defaultValue = buffer.trim();
362
+ if (!varName.startsWith('--'))
363
+ return null;
364
+ return {
365
+ varName,
366
+ defaultValue,
367
+ endIndex: i,
368
+ fullMatch: str.substring(startIndex, i),
369
+ };
370
+ }
371
+ return null;
372
+ }
373
+ /**
374
+ * Resolve all var() references in a CSS value string.
375
+ */
376
+ export function resolveValue(value, elementLabels, cssvarDefinedArr, cssVarMap, seenVars, depth) {
377
+ let result = value;
378
+ let i = 0;
379
+ const replacements = [];
380
+ while (i < result.length) {
381
+ const varIndex = result.indexOf('var(', i);
382
+ if (varIndex === -1)
383
+ break;
384
+ const parsed = parseVarFunctionHelper(result, varIndex);
385
+ if (!parsed) {
386
+ i = varIndex + 4;
387
+ continue;
388
+ }
389
+ const { varName, defaultValue, endIndex } = parsed;
390
+ const innerVarName = varName.startsWith('--') ? varName.substring(2) : varName;
391
+ const resolvedRanges = resolveCssVariableValue(innerVarName, elementLabels, cssvarDefinedArr, cssVarMap, seenVars, depth);
392
+ let resolvedVal = rangesToValue(resolvedRanges);
393
+ if (resolvedVal === '' && defaultValue !== null) {
394
+ resolvedVal = resolveValue(defaultValue, elementLabels, cssvarDefinedArr, cssVarMap, seenVars, depth);
395
+ }
396
+ replacements.push({ start: varIndex, end: endIndex, replacement: resolvedVal });
397
+ i = endIndex;
398
+ }
399
+ // Apply replacements in reverse order
400
+ for (let j = replacements.length - 1; j >= 0; j--) {
401
+ const { start, end, replacement } = replacements[j];
402
+ result = result.substring(0, start) + replacement + result.substring(end);
403
+ }
404
+ return result;
405
+ }
406
+ /**
407
+ * Select the best concrete value from a set of variable ranges.
408
+ */
409
+ export function rangesToValue(ranges) {
410
+ if (ranges.length === 0)
411
+ return '';
412
+ if (ranges.length === 1)
413
+ return ranges[0].concrete_value;
414
+ let applicableRanges = ranges.filter(r => r.media_min <= -1 && r.media_max >= 9999);
415
+ if (applicableRanges.length === 0) {
416
+ const maxRange = Math.max(...ranges.map(r => r.media_max - r.media_min));
417
+ applicableRanges = ranges.filter(r => (r.media_max - r.media_min) === maxRange);
418
+ }
419
+ applicableRanges.sort((a, b) => {
420
+ if (a.specificity !== b.specificity)
421
+ return b.specificity - a.specificity;
422
+ if (a.ruleIndex !== b.ruleIndex)
423
+ return b.ruleIndex - a.ruleIndex;
424
+ return 0;
425
+ });
426
+ return applicableRanges[0].concrete_value;
427
+ }
428
+ /**
429
+ * Merge variable ranges, combining overlapping ranges with same concrete value.
430
+ */
431
+ export function mergeRangesVariables(existingRanges, newRange) {
432
+ existingRanges.push(newRange);
433
+ existingRanges.sort((a, b) => a.media_min - b.media_min);
434
+ const merged = [];
435
+ for (const range of existingRanges) {
436
+ if (merged.length === 0) {
437
+ merged.push(range);
438
+ }
439
+ else {
440
+ const last = merged[merged.length - 1];
441
+ if (last.concrete_value === range.concrete_value && last.media_max >= range.media_min) {
442
+ last.media_max = Math.max(last.media_max, range.media_max);
443
+ }
444
+ else {
445
+ merged.push(range);
446
+ }
447
+ }
448
+ }
449
+ return merged;
450
+ }
451
+ /** Valid Tailwind pseudo-selectors */
452
+ const validPseudos = [
453
+ 'hover', 'focus', 'focus-within', 'focus-visible', 'active',
454
+ 'visited', 'target', 'first', 'last', 'only', 'odd', 'even',
455
+ 'first-of-type', 'last-of-type', 'only-of-type', 'empty',
456
+ 'disabled', 'enabled', 'checked', 'indeterminate', 'default',
457
+ 'required', 'valid', 'invalid', 'in-range', 'out-of-range',
458
+ 'placeholder-shown', 'autofill', 'read-only', 'before', 'after',
459
+ 'placeholder', 'file', 'marker', 'selection', 'first-line',
460
+ 'first-letter', 'dark', 'print', 'portrait', 'landscape',
461
+ ];
462
+ /**
463
+ * Extract valid Tailwind pseudo-selectors from a CSS selector.
464
+ * Simplified version that doesn't require parsel AST parsing.
465
+ */
466
+ export function getPseudos(cssSelector) {
467
+ const pseudos = [];
468
+ // Extract pseudo-classes and pseudo-elements from the selector
469
+ const pseudoMatches = Array.from(cssSelector.matchAll(/::?([a-zA-Z][\w-]*)/g));
470
+ for (const match of pseudoMatches) {
471
+ const name = match[1];
472
+ if (validPseudos.includes(name)) {
473
+ pseudos.push(name);
474
+ }
475
+ }
476
+ // Check if hover exists anywhere in the selector
477
+ const hoverExists = cssSelector.includes(':hover');
478
+ if (hoverExists && !pseudos.includes('hover')) {
479
+ pseudos.push('hover');
480
+ }
481
+ // Deduplicate and sort
482
+ const unique = Array.from(new Set(pseudos));
483
+ unique.sort((a, b) => a.localeCompare(b));
484
+ return unique;
485
+ }
486
+ /**
487
+ * Check if a CSS selector contains any known pseudo-selectors.
488
+ */
489
+ export function containsPseudo(selector) {
490
+ if (!selector.includes(':'))
491
+ return false;
492
+ for (const pseudo of allPseudos) {
493
+ const singleColon = `:${pseudo}`;
494
+ const doubleColon = `::${pseudo}`;
495
+ let pos = selector.indexOf(singleColon);
496
+ while (pos !== -1) {
497
+ if (pos === 0 || selector[pos - 1] !== '\\')
498
+ return true;
499
+ pos = selector.indexOf(singleColon, pos + 1);
500
+ }
501
+ pos = selector.indexOf(doubleColon);
502
+ while (pos !== -1) {
503
+ if (pos === 0 || selector[pos - 1] !== '\\')
504
+ return true;
505
+ pos = selector.indexOf(doubleColon, pos + 1);
506
+ }
507
+ }
508
+ return false;
509
+ }
510
+ /**
511
+ * Check if a selector contains invalid/unsupported pseudo-selectors.
512
+ */
513
+ export function hasInvalidPseudos(selector) {
514
+ const invalidPseudos = [
515
+ 'backdrop', '-webkit-scrollbar', 'selection', '-webkit-scrollbar-thumb',
516
+ '-webkit-scrollbar-track', '-webkit-scrollbar:hover', '-webkit-scrollbar-track:hover',
517
+ 'placeholder', 'marker', 'spelling-error', '::grammar-error',
518
+ '-webkit-file-upload-button', '-webkit-inner-spin-button', '-webkit-outer-spin-button',
519
+ '-webkit-resizer', '-webkit-calendar-picker-indicator', '-webkit-details-marker',
520
+ '-webkit-scrollbar-corner', 'cue', '-webkit-autofill', '-webkit-full-screen',
521
+ ];
522
+ for (const pseudo of invalidPseudos) {
523
+ const singleColon = `:${pseudo}`;
524
+ const doubleColon = `::${pseudo}`;
525
+ let pos = selector.indexOf(singleColon);
526
+ while (pos !== -1) {
527
+ if (pos === 0 || selector[pos - 1] !== '\\')
528
+ return true;
529
+ pos = selector.indexOf(singleColon, pos + 1);
530
+ }
531
+ pos = selector.indexOf(doubleColon);
532
+ while (pos !== -1) {
533
+ if (pos === 0 || selector[pos - 1] !== '\\')
534
+ return true;
535
+ pos = selector.indexOf(doubleColon, pos + 1);
536
+ }
537
+ }
538
+ return false;
539
+ }
540
+ /**
541
+ * Strip pseudo-classes and pseudo-elements from a CSS selector.
542
+ */
543
+ export function stripPseudos(cssSelector) {
544
+ // Remove ::pseudo-element and :pseudo-class from selector
545
+ return cssSelector
546
+ .replace(/::[a-zA-Z][\w-]*/g, '')
547
+ .replace(/:(?!not\(|where\(|is\(|has\()[a-zA-Z][\w-]*(\([^)]*\))?/g, '')
548
+ .trim();
549
+ }
550
+ /**
551
+ * Parse a CSS style attribute string into property-value pairs.
552
+ */
553
+ export function parseStyleAttribute(styleAttr) {
554
+ const declarations = [];
555
+ let buffer = '';
556
+ let inQuotes = false;
557
+ let quoteChar = '';
558
+ let prop = '';
559
+ let expecting = 'property';
560
+ for (let i = 0; i < styleAttr.length; i++) {
561
+ const char = styleAttr[i];
562
+ if (inQuotes) {
563
+ if (char === quoteChar)
564
+ inQuotes = false;
565
+ buffer += char;
566
+ }
567
+ else {
568
+ if (char === '"' || char === "'") {
569
+ inQuotes = true;
570
+ quoteChar = char;
571
+ buffer += char;
572
+ }
573
+ else if (char === ':' && expecting === 'property') {
574
+ prop = buffer.trim();
575
+ buffer = '';
576
+ expecting = 'value';
577
+ }
578
+ else if (char === ';' && expecting === 'value') {
579
+ declarations.push({ property: prop, value: buffer.trim() });
580
+ buffer = '';
581
+ expecting = 'property';
582
+ }
583
+ else {
584
+ buffer += char;
585
+ }
586
+ }
587
+ }
588
+ if (buffer.trim() !== '') {
589
+ declarations.push({ property: prop, value: buffer.trim() });
590
+ }
591
+ return declarations;
592
+ }
593
+ //# sourceMappingURL=tailwind-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tailwind-helpers.js","sourceRoot":"","sources":["../../src/tailwind/tailwind-helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Tailwind class reduction and optimization.
3
+ * Port of tailwind_reduce.js (210 lines)
4
+ */
5
+ export interface TailwindRange {
6
+ media_min: number;
7
+ media_max: number;
8
+ tailwind_classes: string[];
9
+ score: number;
10
+ ruleIndex: number;
11
+ prop: string;
12
+ }
13
+ export interface PropSpecifityMap {
14
+ [property: string]: TailwindRange[];
15
+ }
16
+ /**
17
+ * Reduce tailwind ranges to final class list with media prefixes.
18
+ * Sort by specificity, ruleIndex, and media_min ascending.
19
+ */
20
+ export declare function reduceTailwindClasses(ranges: TailwindRange[]): string[];
21
+ /**
22
+ * Map pixel min-width to Tailwind breakpoint prefix.
23
+ */
24
+ export declare function getMediaPrefixForMin(media_min: number): string;
25
+ /**
26
+ * Group styles by their media range (min-max pair).
27
+ */
28
+ export declare function groupStylesByMediaRange(propSpecifityWithMediaVals: PropSpecifityMap): Record<string, Array<TailwindRange & {
29
+ prop: string;
30
+ }>>;
31
+ /**
32
+ * Merge padding-left/right into padding-x, padding-top/bottom into padding-y,
33
+ * and same for margins, when the values match.
34
+ */
35
+ export declare function updatePropSpecifityWithMergedProperties(propSpecifityWithMediaVals: PropSpecifityMap): PropSpecifityMap;
36
+ //# sourceMappingURL=tailwind-reducer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tailwind-reducer.d.ts","sourceRoot":"","sources":["../../src/tailwind/tailwind-reducer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,EAAE,CAAC;CACrC;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,EAAE,CAiCvE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAe9D;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,0BAA0B,EAAE,gBAAgB,GAC3C,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,aAAa,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAczD;AAED;;;GAGG;AACH,wBAAgB,uCAAuC,CACrD,0BAA0B,EAAE,gBAAgB,GAC3C,gBAAgB,CAiBlB"}