css-to-tailwind-react 0.1.2 → 0.2.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/dist/cssParser.d.ts +16 -1
- package/dist/cssParser.js +161 -33
- package/dist/index.d.ts +3 -1
- package/dist/index.js +11 -2
- package/dist/jsxDescendantTransformer.d.ts +16 -0
- package/dist/jsxDescendantTransformer.js +335 -0
- package/dist/transformer.js +59 -21
- package/dist/utils/conflictResolver.d.ts +39 -0
- package/dist/utils/conflictResolver.js +140 -0
- package/dist/utils/descendantSelectorResolver.d.ts +20 -0
- package/dist/utils/descendantSelectorResolver.js +186 -0
- package/dist/utils/propertyMapper.d.ts +7 -0
- package/dist/utils/propertyMapper.js +277 -0
- package/dist/utils/specificityCalculator.d.ts +25 -0
- package/dist/utils/specificityCalculator.js +150 -0
- package/package.json +1 -1
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isHtmlElement = isHtmlElement;
|
|
4
|
+
exports.parseDescendantSelector = parseDescendantSelector;
|
|
5
|
+
exports.isDescendantSelector = isDescendantSelector;
|
|
6
|
+
exports.isSimpleSelector = isSimpleSelector;
|
|
7
|
+
exports.processDescendantSelector = processDescendantSelector;
|
|
8
|
+
const logger_1 = require("./logger");
|
|
9
|
+
const HTML_ELEMENTS = new Set([
|
|
10
|
+
'a', 'abbr', 'address', 'article', 'aside', 'audio',
|
|
11
|
+
'b', 'blockquote', 'body', 'br', 'button',
|
|
12
|
+
'canvas', 'caption', 'cite', 'code', 'col', 'colgroup',
|
|
13
|
+
'data', 'datalist', 'dd', 'del', 'details', 'dfn', 'dialog', 'div', 'dl', 'dt',
|
|
14
|
+
'em', 'embed',
|
|
15
|
+
'fieldset', 'figcaption', 'figure', 'footer', 'form',
|
|
16
|
+
'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html',
|
|
17
|
+
'i', 'iframe', 'img', 'input', 'ins',
|
|
18
|
+
'kbd',
|
|
19
|
+
'label', 'legend', 'li', 'link',
|
|
20
|
+
'main', 'map', 'mark', 'menu', 'meta', 'meter',
|
|
21
|
+
'nav', 'noscript',
|
|
22
|
+
'object', 'ol', 'optgroup', 'option', 'output',
|
|
23
|
+
'p', 'param', 'picture', 'pre', 'progress',
|
|
24
|
+
'q',
|
|
25
|
+
'rp', 'rt', 'ruby',
|
|
26
|
+
's', 'samp', 'script', 'search', 'section', 'select', 'slot', 'small', 'source', 'span', 'strong', 'style', 'sub', 'summary', 'sup', 'svg',
|
|
27
|
+
'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'title', 'tr', 'track',
|
|
28
|
+
'u', 'ul',
|
|
29
|
+
'var', 'video',
|
|
30
|
+
'wbr'
|
|
31
|
+
]);
|
|
32
|
+
function isHtmlElement(name) {
|
|
33
|
+
return HTML_ELEMENTS.has(name.toLowerCase());
|
|
34
|
+
}
|
|
35
|
+
function parseSelectorPart(part) {
|
|
36
|
+
const trimmed = part.trim();
|
|
37
|
+
if (!trimmed)
|
|
38
|
+
return null;
|
|
39
|
+
if (trimmed.startsWith('.')) {
|
|
40
|
+
const className = trimmed.slice(1);
|
|
41
|
+
if (!className || !/^[a-zA-Z_-][a-zA-Z0-9_-]*$/.test(className)) {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
return { type: 'class', name: className };
|
|
45
|
+
}
|
|
46
|
+
if (/^[a-zA-Z][a-zA-Z0-9]*$/.test(trimmed)) {
|
|
47
|
+
return { type: 'element', name: trimmed.toLowerCase() };
|
|
48
|
+
}
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
function parseDescendantSelector(selector) {
|
|
52
|
+
const trimmed = selector.trim();
|
|
53
|
+
if (trimmed.includes(',')) {
|
|
54
|
+
return {
|
|
55
|
+
parent: undefined,
|
|
56
|
+
target: { type: 'element', name: '' },
|
|
57
|
+
isComplex: true,
|
|
58
|
+
reason: `Skipped comma-separated selector (${selector})`
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
if (trimmed.includes('>')) {
|
|
62
|
+
return {
|
|
63
|
+
parent: undefined,
|
|
64
|
+
target: { type: 'element', name: '' },
|
|
65
|
+
isComplex: true,
|
|
66
|
+
reason: `Skipped child combinator selector (${selector})`
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
if (trimmed.includes('+')) {
|
|
70
|
+
return {
|
|
71
|
+
parent: undefined,
|
|
72
|
+
target: { type: 'element', name: '' },
|
|
73
|
+
isComplex: true,
|
|
74
|
+
reason: `Skipped adjacent sibling selector (${selector})`
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
if (trimmed.includes('~')) {
|
|
78
|
+
return {
|
|
79
|
+
parent: undefined,
|
|
80
|
+
target: { type: 'element', name: '' },
|
|
81
|
+
isComplex: true,
|
|
82
|
+
reason: `Skipped general sibling selector (${selector})`
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
if (trimmed.includes(':not') || trimmed.includes(':has') || trimmed.includes(':is') || trimmed.includes(':where')) {
|
|
86
|
+
return {
|
|
87
|
+
parent: undefined,
|
|
88
|
+
target: { type: 'element', name: '' },
|
|
89
|
+
isComplex: true,
|
|
90
|
+
reason: `Skipped pseudo-class with argument (${selector})`
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
if (trimmed.includes('[') && trimmed.includes(']')) {
|
|
94
|
+
return {
|
|
95
|
+
parent: undefined,
|
|
96
|
+
target: { type: 'element', name: '' },
|
|
97
|
+
isComplex: true,
|
|
98
|
+
reason: `Skipped attribute selector (${selector})`
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
if (trimmed.includes(':')) {
|
|
102
|
+
const colonCount = (trimmed.match(/:/g) || []).length;
|
|
103
|
+
if (colonCount > 2 || trimmed.includes('::before') || trimmed.includes('::after')) {
|
|
104
|
+
return {
|
|
105
|
+
parent: undefined,
|
|
106
|
+
target: { type: 'element', name: '' },
|
|
107
|
+
isComplex: true,
|
|
108
|
+
reason: `Skipped selector with pseudo (${selector})`
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
const parts = trimmed.split(/\s+/).filter(Boolean);
|
|
113
|
+
if (parts.length === 1) {
|
|
114
|
+
const part = parseSelectorPart(parts[0]);
|
|
115
|
+
if (!part) {
|
|
116
|
+
return {
|
|
117
|
+
parent: undefined,
|
|
118
|
+
target: { type: 'element', name: '' },
|
|
119
|
+
isComplex: true,
|
|
120
|
+
reason: `Invalid selector part (${parts[0]})`
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
return {
|
|
124
|
+
parent: undefined,
|
|
125
|
+
target: part,
|
|
126
|
+
isComplex: false
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
if (parts.length === 2) {
|
|
130
|
+
const parentPart = parseSelectorPart(parts[0]);
|
|
131
|
+
const targetPart = parseSelectorPart(parts[1]);
|
|
132
|
+
if (!parentPart || !targetPart) {
|
|
133
|
+
return {
|
|
134
|
+
parent: undefined,
|
|
135
|
+
target: { type: 'element', name: '' },
|
|
136
|
+
isComplex: true,
|
|
137
|
+
reason: `Invalid selector part in (${selector})`
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
return {
|
|
141
|
+
parent: parentPart,
|
|
142
|
+
target: targetPart,
|
|
143
|
+
isComplex: false
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
if (parts.length > 2) {
|
|
147
|
+
return {
|
|
148
|
+
parent: undefined,
|
|
149
|
+
target: { type: 'element', name: '' },
|
|
150
|
+
isComplex: true,
|
|
151
|
+
reason: `Skipped multi-level descendant selector (${selector})`
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
return {
|
|
155
|
+
parent: undefined,
|
|
156
|
+
target: { type: 'element', name: '' },
|
|
157
|
+
isComplex: true,
|
|
158
|
+
reason: `Unable to parse selector (${selector})`
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
function isDescendantSelector(selector) {
|
|
162
|
+
const parsed = parseDescendantSelector(selector);
|
|
163
|
+
return !parsed.isComplex && parsed.parent !== undefined;
|
|
164
|
+
}
|
|
165
|
+
function isSimpleSelector(selector) {
|
|
166
|
+
const parsed = parseDescendantSelector(selector);
|
|
167
|
+
return !parsed.isComplex && parsed.parent === undefined;
|
|
168
|
+
}
|
|
169
|
+
function processDescendantSelector(selector) {
|
|
170
|
+
const parsed = parseDescendantSelector(selector);
|
|
171
|
+
if (parsed.isComplex) {
|
|
172
|
+
logger_1.logger.verbose(parsed.reason || `Skipped complex selector: ${selector}`);
|
|
173
|
+
return { parsed: null, skipped: true, reason: parsed.reason };
|
|
174
|
+
}
|
|
175
|
+
if (parsed.parent) {
|
|
176
|
+
const parentDesc = parsed.parent.type === 'class'
|
|
177
|
+
? `.${parsed.parent.name}`
|
|
178
|
+
: parsed.parent.name;
|
|
179
|
+
const targetDesc = parsed.target.type === 'class'
|
|
180
|
+
? `.${parsed.target.name}`
|
|
181
|
+
: parsed.target.name;
|
|
182
|
+
logger_1.logger.verbose(`Parsed descendant selector: ${parentDesc} ${targetDesc}`);
|
|
183
|
+
}
|
|
184
|
+
return { parsed, skipped: false };
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzY2VuZGFudFNlbGVjdG9yUmVzb2x2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvZGVzY2VuZGFudFNlbGVjdG9yUmVzb2x2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUF3Q0Esc0NBRUM7QUFxQkQsMERBNEhDO0FBRUQsb0RBR0M7QUFFRCw0Q0FHQztBQUVELDhEQXVCQztBQTlORCxxQ0FBa0M7QUFnQmxDLE1BQU0sYUFBYSxHQUFHLElBQUksR0FBRyxDQUFDO0lBQzVCLEdBQUcsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTztJQUNuRCxHQUFHLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUTtJQUN6QyxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFVBQVU7SUFDdEQsTUFBTSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSTtJQUM5RSxJQUFJLEVBQUUsT0FBTztJQUNiLFVBQVUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNO0lBQ3BELElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNO0lBQzVFLEdBQUcsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLO0lBQ3BDLEtBQUs7SUFDTCxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNO0lBQy9CLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTztJQUM5QyxLQUFLLEVBQUUsVUFB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Q0FBQywrQkFBK0IsVUFBVSxJQUFJLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVELE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ3BDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuL2xvZ2dlcic7XG5cbmV4cG9ydCB0eXBlIFNlbGVjdG9yVHlwZSA9ICdjbGFzcycgfCAnZWxlbWVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0b3JQYXJ0IHtcbiAgdHlwZTogU2VsZWN0b3JUeXBlO1xuICBuYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVzY2VuZGFudFNlbGVjdG9yIHtcbiAgcGFyZW50PzogU2VsZWN0b3JQYXJ0O1xuICB0YXJnZXQ6IFNlbGVjdG9yUGFydDtcbiAgaXNDb21wbGV4OiBib29sZWFuO1xuICByZWFzb24/OiBzdHJpbmc7XG59XG5cbmNvbnN0IEhUTUxfRUxFTUVOVFMgPSBuZXcgU2V0KFtcbiAgJ2EnLCAnYWJicicsICdhZGRyZXNzJywgJ2FydGljbGUnLCAnYXNpZGUnLCAnYXVkaW8nLFxuICAnYicsICdibG9ja3F1b3RlJywgJ2JvZHknLCAnYnInLCAnYnV0dG9uJyxcbiAgJ2NhbnZhcycsICdjYXB0aW9uJywgJ2NpdGUnLCAnY29kZScsICdjb2wnLCAnY29sZ3JvdXAnLFxuICAnZGF0YScsICdkYXRhbGlzdCcsICdkZCcsICdkZWwnLCAnZGV0YWlscycsICdkZm4nLCAnZGlhbG9nJywgJ2RpdicsICdkbCcsICdkdCcsXG4gICdlbScsICdlbWJlZCcsXG4gICdmaWVsZHNldCcsICdmaWdjYXB0aW9uJywgJ2ZpZ3VyZScsICdmb290ZXInLCAnZm9ybScsXG4gICdoMScsICdoMicsICdoMycsICdoNCcsICdoNScsICdoNicsICdoZWFkJywgJ2hlYWRlcicsICdoZ3JvdXAnLCAnaHInLCAnaHRtbCcsXG4gICdpJywgJ2lmcmFtZScsICdpbWcnLCAnaW5wdXQnLCAnaW5zJyxcbiAgJ2tiZCcsXG4gICdsYWJlbCcsICdsZWdlbmQnLCAnbGknLCAnbGluaycsXG4gICdtYWluJywgJ21hcCcsICdtYXJrJywgJ21lbnUnLCAnbWV0YScsICdtZXRlcicsXG4gICduYXYnLCAnbm9zY3JpcHQnLFxuICAnb2JqZWN0JywgJ29sJywgJ29wdGdyb3VwJywgJ29wdGlvbicsICdvdXRwdXQnLFxuICAncCcsICdwYXJhbScsICdwaWN0dXJlJywgJ3ByZScsICdwcm9ncmVzcycsXG4gICdxJyxcbiAgJ3JwJywgJ3J0JywgJ3J1YnknLFxuICAncycsICdzYW1wJywgJ3NjcmlwdCcsICdzZWFyY2gnLCAnc2VjdGlvbicsICdzZWxlY3QnLCAnc2xvdCcsICdzbWFsbCcsICdzb3VyY2UnLCAnc3BhbicsICdzdHJvbmcnLCAnc3R5bGUnLCAnc3ViJywgJ3N1bW1hcnknLCAnc3VwJywgJ3N2ZycsXG4gICd0YWJsZScsICd0Ym9keScsICd0ZCcsICd0ZW1wbGF0ZScsICd0ZXh0YXJlYScsICd0Zm9vdCcsICd0aCcsICd0aGVhZCcsICd0aW1lJywgJ3RpdGxlJywgJ3RyJywgJ3RyYWNrJyxcbiAgJ3UnLCAndWwnLFxuICAndmFyJywgJ3ZpZGVvJyxcbiAgJ3dicidcbl0pO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNIdG1sRWxlbWVudChuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIEhUTUxfRUxFTUVOVFMuaGFzKG5hbWUudG9Mb3dlckNhc2UoKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlU2VsZWN0b3JQYXJ0KHBhcnQ6IHN0cmluZyk6IFNlbGVjdG9yUGFydCB8IG51bGwge1xuICBjb25zdCB0cmltbWVkID0gcGFydC50cmltKCk7XG4gIGlmICghdHJpbW1lZCkgcmV0dXJuIG51bGw7XG4gIFxuICBpZiAodHJpbW1lZC5zdGFydHNXaXRoKCcuJykpIHtcbiAgICBjb25zdCBjbGFzc05hbWUgPSB0cmltbWVkLnNsaWNlKDEpO1xuICAgIGlmICghY2xhc3NOYW1lIHx8ICEvXlthLXpBLVpfLV1bYS16QS1aMC05Xy1dKiQvLnRlc3QoY2xhc3NOYW1lKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB7IHR5cGU6ICdjbGFzcycsIG5hbWU6IGNsYXNzTmFtZSB9O1xuICB9XG4gIFxuICBpZiAoL15bYS16QS1aXVthLXpBLVowLTldKiQvLnRlc3QodHJpbW1lZCkpIHtcbiAgICByZXR1cm4geyB0eXBlOiAnZWxlbWVudCcsIG5hbWU6IHRyaW1tZWQudG9Mb3dlckNhc2UoKSB9O1xuICB9XG4gIFxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRGVzY2VuZGFudFNlbGVjdG9yKHNlbGVjdG9yOiBzdHJpbmcpOiBEZXNjZW5kYW50U2VsZWN0b3Ige1xuICBjb25zdCB0cmltbWVkID0gc2VsZWN0b3IudHJpbSgpO1xuICBcbiAgaWYgKHRyaW1tZWQuaW5jbHVkZXMoJywnKSkge1xuICAgIHJldHVybiB7XG4gICAgICBwYXJlbnQ6IHVuZGVmaW5lZCxcbiAgICAgIHRhcmdldDogeyB0eXBlOiAnZWxlbWVudCcsIG5hbWU6ICcnIH0sXG4gICAgICBpc0NvbXBsZXg6IHRydWUsXG4gICAgICByZWFzb246IGBTa2lwcGVkIGNvbW1hLXNlcGFyYXRlZCBzZWxlY3RvciAoJHtzZWxlY3Rvcn0pYFxuICAgIH07XG4gIH1cbiAgXG4gIGlmICh0cmltbWVkLmluY2x1ZGVzKCc+JykpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFyZW50OiB1bmRlZmluZWQsXG4gICAgICB0YXJnZXQ6IHsgdHlwZTogJ2VsZW1lbnQnLCBuYW1lOiAnJyB9LFxuICAgICAgaXNDb21wbGV4OiB0cnVlLFxuICAgICAgcmVhc29uOiBgU2tpcHBlZCBjaGlsZCBjb21iaW5hdG9yIHNlbGVjdG9yICgke3NlbGVjdG9yfSlgXG4gICAgfTtcbiAgfVxuICBcbiAgaWYgKHRyaW1tZWQuaW5jbHVkZXMoJysnKSkge1xuICAgIHJldHVybiB7XG4gICAgICBwYXJlbnQ6IHVuZGVmaW5lZCxcbiAgICAgIHRhcmdldDogeyB0eXBlOiAnZWxlbWVudCcsIG5hbWU6ICcnIH0sXG4gICAgICBpc0NvbXBsZXg6IHRydWUsXG4gICAgICByZWFzb246IGBTa2lwcGVkIGFkamFjZW50IHNpYmxpbmcgc2VsZWN0b3IgKCR7c2VsZWN0b3J9KWBcbiAgICB9O1xuICB9XG4gIFxuICBpZiAodHJpbW1lZC5pbmNsdWRlcygnficpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcmVudDogdW5kZWZpbmVkLFxuICAgICAgdGFyZ2V0OiB7IHR5cGU6ICdlbGVtZW50JywgbmFtZTogJycgfSxcbiAgICAgIGlzQ29tcGxleDogdHJ1ZSxcbiAgICAgIHJlYXNvbjogYFNraXBwZWQgZ2VuZXJhbCBzaWJsaW5nIHNlbGVjdG9yICgke3NlbGVjdG9yfSlgXG4gICAgfTtcbiAgfVxuICBcbiAgaWYgKHRyaW1tZWQuaW5jbHVkZXMoJzpub3QnKSB8fCB0cmltbWVkLmluY2x1ZGVzKCc6aGFzJykgfHwgdHJpbW1lZC5pbmNsdWRlcygnOmlzJykgfHwgdHJpbW1lZC5pbmNsdWRlcygnOndoZXJlJykpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFyZW50OiB1bmRlZmluZWQsXG4gICAgICB0YXJnZXQ6IHsgdHlwZTogJ2VsZW1lbnQnLCBuYW1lOiAnJyB9LFxuICAgICAgaXNDb21wbGV4OiB0cnVlLFxuICAgICAgcmVhc29uOiBgU2tpcHBlZCBwc2V1ZG8tY2xhc3Mgd2l0aCBhcmd1bWVudCAoJHtzZWxlY3Rvcn0pYFxuICAgIH07XG4gIH1cbiAgXG4gIGlmICh0cmltbWVkLmluY2x1ZGVzKCdbJykgJiYgdHJpbW1lZC5pbmNsdWRlcygnXScpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcmVudDogdW5kZWZpbmVkLFxuICAgICAgdGFyZ2V0OiB7IHR5cGU6ICdlbGVtZW50JywgbmFtZTogJycgfSxcbiAgICAgIGlzQ29tcGxleDogdHJ1ZSxcbiAgICAgIHJlYXNvbjogYFNraXBwZWQgYXR0cmlidXRlIHNlbGVjdG9yICgke3NlbGVjdG9yfSlgXG4gICAgfTtcbiAgfVxuICBcbiAgaWYgKHRyaW1tZWQuaW5jbHVkZXMoJzonKSkge1xuICAgIGNvbnN0IGNvbG9uQ291bnQgPSAodHJpbW1lZC5tYXRjaCgvOi9nKSB8fCBbXSkubGVuZ3RoO1xuICAgIGlmIChjb2xvbkNvdW50ID4gMiB8fCB0cmltbWVkLmluY2x1ZGVzKCc6OmJlZm9yZScpIHx8IHRyaW1tZWQuaW5jbHVkZXMoJzo6YWZ0ZXInKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGFyZW50OiB1bmRlZmluZWQsXG4gICAgICAgIHRhcmdldDogeyB0eXBlOiAnZWxlbWVudCcsIG5hbWU6ICcnIH0sXG4gICAgICAgIGlzQ29tcGxleDogdHJ1ZSxcbiAgICAgICAgcmVhc29uOiBgU2tpcHBlZCBzZWxlY3RvciB3aXRoIHBzZXVkbyAoJHtzZWxlY3Rvcn0pYFxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgXG4gIGNvbnN0IHBhcnRzID0gdHJpbW1lZC5zcGxpdCgvXFxzKy8pLmZpbHRlcihCb29sZWFuKTtcbiAgXG4gIGlmIChwYXJ0cy5sZW5ndGggPT09IDEpIHtcbiAgICBjb25zdCBwYXJ0ID0gcGFyc2VTZWxlY3RvclBhcnQocGFydHNbMF0pO1xuICAgIGlmICghcGFydCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGFyZW50OiB1bmRlZmluZWQsXG4gICAgICAgIHRhcmdldDogeyB0eXBlOiAnZWxlbWVudCcsIG5hbWU6ICcnIH0sXG4gICAgICAgIGlzQ29tcGxleDogdHJ1ZSxcbiAgICAgICAgcmVhc29uOiBgSW52YWxpZCBzZWxlY3RvciBwYXJ0ICgke3BhcnRzWzBdfSlgXG4gICAgICB9O1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4ge1xuICAgICAgcGFyZW50OiB1bmRlZmluZWQsXG4gICAgICB0YXJnZXQ6IHBhcnQsXG4gICAgICBpc0NvbXBsZXg6IGZhbHNlXG4gICAgfTtcbiAgfVxuICBcbiAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNvbnN0IHBhcmVudFBhcnQgPSBwYXJzZVNlbGVjdG9yUGFydChwYXJ0c1swXSk7XG4gICAgY29uc3QgdGFyZ2V0UGFydCA9IHBhcnNlU2VsZWN0b3JQYXJ0KHBhcnRzWzFdKTtcbiAgICBcbiAgICBpZiAoIXBhcmVudFBhcnQgfHwgIXRhcmdldFBhcnQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBhcmVudDogdW5kZWZpbmVkLFxuICAgICAgICB0YXJnZXQ6IHsgdHlwZTogJ2VsZW1lbnQnLCBuYW1lOiAnJyB9LFxuICAgICAgICBpc0NvbXBsZXg6IHRydWUsXG4gICAgICAgIHJlYXNvbjogYEludmFsaWQgc2VsZWN0b3IgcGFydCBpbiAoJHtzZWxlY3Rvcn0pYFxuICAgICAgfTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcmVudDogcGFyZW50UGFydCxcbiAgICAgIHRhcmdldDogdGFyZ2V0UGFydCxcbiAgICAgIGlzQ29tcGxleDogZmFsc2VcbiAgICB9O1xuICB9XG4gIFxuICBpZiAocGFydHMubGVuZ3RoID4gMikge1xuICAgIHJldHVybiB7XG4gICAgICBwYXJlbnQ6IHVuZGVmaW5lZCxcbiAgICAgIHRhcmdldDogeyB0eXBlOiAnZWxlbWVudCcsIG5hbWU6ICcnIH0sXG4gICAgICBpc0NvbXBsZXg6IHRydWUsXG4gICAgICByZWFzb246IGBTa2lwcGVkIG11bHRpLWxldmVsIGRlc2NlbmRhbnQgc2VsZWN0b3IgKCR7c2VsZWN0b3J9KWBcbiAgICB9O1xuICB9XG4gIFxuICByZXR1cm4ge1xuICAgIHBhcmVudDogdW5kZWZpbmVkLFxuICAgIHRhcmdldDogeyB0eXBlOiAnZWxlbWVudCcsIG5hbWU6ICcnIH0sXG4gICAgaXNDb21wbGV4OiB0cnVlLFxuICAgIHJlYXNvbjogYFVuYWJsZSB0byBwYXJzZSBzZWxlY3RvciAoJHtzZWxlY3Rvcn0pYFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEZXNjZW5kYW50U2VsZWN0b3Ioc2VsZWN0b3I6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZURlc2NlbmRhbnRTZWxlY3RvcihzZWxlY3Rvcik7XG4gIHJldHVybiAhcGFyc2VkLmlzQ29tcGxleCAmJiBwYXJzZWQucGFyZW50ICE9PSB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NpbXBsZVNlbGVjdG9yKHNlbGVjdG9yOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgcGFyc2VkID0gcGFyc2VEZXNjZW5kYW50U2VsZWN0b3Ioc2VsZWN0b3IpO1xuICByZXR1cm4gIXBhcnNlZC5pc0NvbXBsZXggJiYgcGFyc2VkLnBhcmVudCA9PT0gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0Rlc2NlbmRhbnRTZWxlY3RvcihzZWxlY3Rvcjogc3RyaW5nKToge1xuICBwYXJzZWQ6IERlc2NlbmRhbnRTZWxlY3RvciB8IG51bGw7XG4gIHNraXBwZWQ6IGJvb2xlYW47XG4gIHJlYXNvbj86IHN0cmluZztcbn0ge1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZURlc2NlbmRhbnRTZWxlY3RvcihzZWxlY3Rvcik7XG4gIFxuICBpZiAocGFyc2VkLmlzQ29tcGxleCkge1xuICAgIGxvZ2dlci52ZXJib3NlKHBhcnNlZC5yZWFzb24gfHwgYFNraXBwZWQgY29tcGxleCBzZWxlY3RvcjogJHtzZWxlY3Rvcn1gKTtcbiAgICByZXR1cm4geyBwYXJzZWQ6IG51bGwsIHNraXBwZWQ6IHRydWUsIHJlYXNvbjogcGFyc2VkLnJlYXNvbiB9O1xuICB9XG4gIFxuICBpZiAocGFyc2VkLnBhcmVudCkge1xuICAgIGNvbnN0IHBhcmVudERlc2MgPSBwYXJzZWQucGFyZW50LnR5cGUgPT09ICdjbGFzcycgXG4gICAgICA/IGAuJHtwYXJzZWQucGFyZW50Lm5hbWV9YCBcbiAgICAgIDogcGFyc2VkLnBhcmVudC5uYW1lO1xuICAgIGNvbnN0IHRhcmdldERlc2MgPSBwYXJzZWQudGFyZ2V0LnR5cGUgPT09ICdjbGFzcycgXG4gICAgICA/IGAuJHtwYXJzZWQudGFyZ2V0Lm5hbWV9YCBcbiAgICAgIDogcGFyc2VkLnRhcmdldC5uYW1lO1xuICAgIGxvZ2dlci52ZXJib3NlKGBQYXJzZWQgZGVzY2VuZGFudCBzZWxlY3RvcjogJHtwYXJlbnREZXNjfSAke3RhcmdldERlc2N9YCk7XG4gIH1cbiAgXG4gIHJldHVybiB7IHBhcnNlZCwgc2tpcHBlZDogZmFsc2UgfTtcbn0iXX0=
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare function getPropertyForUtility(utility: string): string;
|
|
2
|
+
export declare function isTextFontSizeUtility(utility: string): boolean;
|
|
3
|
+
export declare function isTextColorUtility(utility: string): boolean;
|
|
4
|
+
export declare function getPropertiesForUtilities(utilities: string[]): Map<string, string[]>;
|
|
5
|
+
export declare const PROPERTY_CONFLICT_GROUPS: Record<string, string[]>;
|
|
6
|
+
export declare function getConflictGroup(property: string): string | null;
|
|
7
|
+
export declare function propertiesConflict(prop1: string, prop2: string): boolean;
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PROPERTY_CONFLICT_GROUPS = void 0;
|
|
4
|
+
exports.getPropertyForUtility = getPropertyForUtility;
|
|
5
|
+
exports.isTextFontSizeUtility = isTextFontSizeUtility;
|
|
6
|
+
exports.isTextColorUtility = isTextColorUtility;
|
|
7
|
+
exports.getPropertiesForUtilities = getPropertiesForUtilities;
|
|
8
|
+
exports.getConflictGroup = getConflictGroup;
|
|
9
|
+
exports.propertiesConflict = propertiesConflict;
|
|
10
|
+
const PROPERTY_PREFIX_MAP = {
|
|
11
|
+
'color': ['text-'],
|
|
12
|
+
'background-color': ['bg-'],
|
|
13
|
+
'font-size': ['text-xs', 'text-sm', 'text-base', 'text-lg', 'text-xl', 'text-2xl', 'text-3xl', 'text-4xl', 'text-5xl', 'text-6xl', 'text-7xl', 'text-8xl', 'text-9xl', 'text-'],
|
|
14
|
+
'font-weight': ['font-thin', 'font-extralight', 'font-light', 'font-normal', 'font-medium', 'font-semibold', 'font-bold', 'font-extrabold', 'font-black'],
|
|
15
|
+
'display': ['block', 'inline-block', 'inline', 'flex', 'inline-flex', 'grid', 'inline-grid', 'hidden', 'contents', 'table', 'table-cell', 'table-row'],
|
|
16
|
+
'position': ['static', 'fixed', 'absolute', 'relative', 'sticky'],
|
|
17
|
+
'width': ['w-'],
|
|
18
|
+
'height': ['h-'],
|
|
19
|
+
'min-width': ['min-w-'],
|
|
20
|
+
'max-width': ['max-w-'],
|
|
21
|
+
'min-height': ['min-h-'],
|
|
22
|
+
'max-height': ['max-h-'],
|
|
23
|
+
'margin': ['m-'],
|
|
24
|
+
'margin-top': ['mt-'],
|
|
25
|
+
'margin-right': ['mr-'],
|
|
26
|
+
'margin-bottom': ['mb-'],
|
|
27
|
+
'margin-left': ['ml-'],
|
|
28
|
+
'margin-x': ['mx-'],
|
|
29
|
+
'margin-y': ['my-'],
|
|
30
|
+
'padding': ['p-'],
|
|
31
|
+
'padding-top': ['pt-'],
|
|
32
|
+
'padding-right': ['pr-'],
|
|
33
|
+
'padding-bottom': ['pb-'],
|
|
34
|
+
'padding-left': ['pl-'],
|
|
35
|
+
'padding-x': ['px-'],
|
|
36
|
+
'padding-y': ['py-'],
|
|
37
|
+
'gap': ['gap-'],
|
|
38
|
+
'border-radius': ['rounded-', 'rounded'],
|
|
39
|
+
'border-width': ['border-', 'border-t-', 'border-r-', 'border-b-', 'border-l-'],
|
|
40
|
+
'border-color': ['border-'],
|
|
41
|
+
'flex-direction': ['flex-row', 'flex-col', 'flex-row-reverse', 'flex-col-reverse'],
|
|
42
|
+
'flex-wrap': ['flex-wrap', 'flex-nowrap', 'flex-wrap-reverse'],
|
|
43
|
+
'justify-content': ['justify-'],
|
|
44
|
+
'align-items': ['items-'],
|
|
45
|
+
'align-content': ['content-'],
|
|
46
|
+
'align-self': ['self-'],
|
|
47
|
+
'text-align': ['text-left', 'text-center', 'text-right', 'text-justify', 'text-start', 'text-end'],
|
|
48
|
+
'overflow': ['overflow-'],
|
|
49
|
+
'overflow-x': ['overflow-x-'],
|
|
50
|
+
'overflow-y': ['overflow-y-'],
|
|
51
|
+
'z-index': ['z-'],
|
|
52
|
+
'opacity': ['opacity-'],
|
|
53
|
+
'cursor': ['cursor-'],
|
|
54
|
+
'pointer-events': ['pointer-events-'],
|
|
55
|
+
'user-select': ['select-'],
|
|
56
|
+
'box-shadow': ['shadow-'],
|
|
57
|
+
'transition': ['transition-'],
|
|
58
|
+
'transform': ['scale-', 'rotate-', 'translate-', 'skew-'],
|
|
59
|
+
'top': ['top-'],
|
|
60
|
+
'right': ['right-'],
|
|
61
|
+
'bottom': ['bottom-'],
|
|
62
|
+
'left': ['left-'],
|
|
63
|
+
'inset': ['inset-']
|
|
64
|
+
};
|
|
65
|
+
const UTILITY_TO_PROPERTY_MAP = {
|
|
66
|
+
'block': 'display',
|
|
67
|
+
'inline-block': 'display',
|
|
68
|
+
'inline': 'display',
|
|
69
|
+
'flex': 'display',
|
|
70
|
+
'inline-flex': 'display',
|
|
71
|
+
'grid': 'display',
|
|
72
|
+
'inline-grid': 'display',
|
|
73
|
+
'hidden': 'display',
|
|
74
|
+
'contents': 'display',
|
|
75
|
+
'static': 'position',
|
|
76
|
+
'fixed': 'position',
|
|
77
|
+
'absolute': 'position',
|
|
78
|
+
'relative': 'position',
|
|
79
|
+
'sticky': 'position',
|
|
80
|
+
'flex-row': 'flex-direction',
|
|
81
|
+
'flex-col': 'flex-direction',
|
|
82
|
+
'flex-row-reverse': 'flex-direction',
|
|
83
|
+
'flex-col-reverse': 'flex-direction',
|
|
84
|
+
'flex-wrap': 'flex-wrap',
|
|
85
|
+
'flex-nowrap': 'flex-wrap',
|
|
86
|
+
'flex-wrap-reverse': 'flex-wrap',
|
|
87
|
+
'text-left': 'text-align',
|
|
88
|
+
'text-center': 'text-align',
|
|
89
|
+
'text-right': 'text-align',
|
|
90
|
+
'text-justify': 'text-align',
|
|
91
|
+
'text-start': 'text-align',
|
|
92
|
+
'text-end': 'text-align',
|
|
93
|
+
'font-thin': 'font-weight',
|
|
94
|
+
'font-extralight': 'font-weight',
|
|
95
|
+
'font-light': 'font-weight',
|
|
96
|
+
'font-normal': 'font-weight',
|
|
97
|
+
'font-medium': 'font-weight',
|
|
98
|
+
'font-semibold': 'font-weight',
|
|
99
|
+
'font-bold': 'font-weight',
|
|
100
|
+
'font-extrabold': 'font-weight',
|
|
101
|
+
'font-black': 'font-weight',
|
|
102
|
+
'rounded': 'border-radius',
|
|
103
|
+
'rounded-none': 'border-radius',
|
|
104
|
+
'rounded-sm': 'border-radius',
|
|
105
|
+
'rounded-md': 'border-radius',
|
|
106
|
+
'rounded-lg': 'border-radius',
|
|
107
|
+
'rounded-xl': 'border-radius',
|
|
108
|
+
'rounded-2xl': 'border-radius',
|
|
109
|
+
'rounded-3xl': 'border-radius',
|
|
110
|
+
'rounded-full': 'border-radius'
|
|
111
|
+
};
|
|
112
|
+
const PREFIX_PROPERTY_MAP = {
|
|
113
|
+
'text-': 'color',
|
|
114
|
+
'bg-': 'background-color',
|
|
115
|
+
'w-': 'width',
|
|
116
|
+
'h-': 'height',
|
|
117
|
+
'min-w-': 'min-width',
|
|
118
|
+
'max-w-': 'max-width',
|
|
119
|
+
'min-h-': 'min-height',
|
|
120
|
+
'max-h-': 'max-height',
|
|
121
|
+
'm-': 'margin',
|
|
122
|
+
'mt-': 'margin-top',
|
|
123
|
+
'mr-': 'margin-right',
|
|
124
|
+
'mb-': 'margin-bottom',
|
|
125
|
+
'ml-': 'margin-left',
|
|
126
|
+
'mx-': 'margin-x',
|
|
127
|
+
'my-': 'margin-y',
|
|
128
|
+
'p-': 'padding',
|
|
129
|
+
'pt-': 'padding-top',
|
|
130
|
+
'pr-': 'padding-right',
|
|
131
|
+
'pb-': 'padding-bottom',
|
|
132
|
+
'pl-': 'padding-left',
|
|
133
|
+
'px-': 'padding-x',
|
|
134
|
+
'py-': 'padding-y',
|
|
135
|
+
'gap-': 'gap',
|
|
136
|
+
'rounded-': 'border-radius',
|
|
137
|
+
'justify-': 'justify-content',
|
|
138
|
+
'items-': 'align-items',
|
|
139
|
+
'content-': 'align-content',
|
|
140
|
+
'self-': 'align-self',
|
|
141
|
+
'overflow-': 'overflow',
|
|
142
|
+
'overflow-x-': 'overflow-x',
|
|
143
|
+
'overflow-y-': 'overflow-y',
|
|
144
|
+
'z-': 'z-index',
|
|
145
|
+
'opacity-': 'opacity',
|
|
146
|
+
'cursor-': 'cursor',
|
|
147
|
+
'shadow-': 'box-shadow',
|
|
148
|
+
'border-': 'border-width',
|
|
149
|
+
'border-t-': 'border-width',
|
|
150
|
+
'border-r-': 'border-width',
|
|
151
|
+
'border-b-': 'border-width',
|
|
152
|
+
'border-l-': 'border-width',
|
|
153
|
+
'top-': 'top',
|
|
154
|
+
'right-': 'right',
|
|
155
|
+
'bottom-': 'bottom',
|
|
156
|
+
'left-': 'left',
|
|
157
|
+
'inset-': 'inset'
|
|
158
|
+
};
|
|
159
|
+
const FONT_SIZE_UTILITIES = new Set([
|
|
160
|
+
'text-xs', 'text-sm', 'text-base', 'text-lg', 'text-xl',
|
|
161
|
+
'text-2xl', 'text-3xl', 'text-4xl', 'text-5xl', 'text-6xl',
|
|
162
|
+
'text-7xl', 'text-8xl', 'text-9xl'
|
|
163
|
+
]);
|
|
164
|
+
function getPropertyForUtility(utility) {
|
|
165
|
+
const strippedUtility = stripVariants(utility);
|
|
166
|
+
if (UTILITY_TO_PROPERTY_MAP[strippedUtility]) {
|
|
167
|
+
return UTILITY_TO_PROPERTY_MAP[strippedUtility];
|
|
168
|
+
}
|
|
169
|
+
if (FONT_SIZE_UTILITIES.has(strippedUtility)) {
|
|
170
|
+
return 'font-size';
|
|
171
|
+
}
|
|
172
|
+
if (strippedUtility.startsWith('text-') && !FONT_SIZE_UTILITIES.has(strippedUtility)) {
|
|
173
|
+
const value = strippedUtility.slice(5);
|
|
174
|
+
if (/^\d/.test(value) || value.startsWith('[')) {
|
|
175
|
+
return 'font-size';
|
|
176
|
+
}
|
|
177
|
+
return 'color';
|
|
178
|
+
}
|
|
179
|
+
const sortedPrefixes = Object.keys(PREFIX_PROPERTY_MAP).sort((a, b) => b.length - a.length);
|
|
180
|
+
for (const prefix of sortedPrefixes) {
|
|
181
|
+
if (strippedUtility.startsWith(prefix)) {
|
|
182
|
+
return PREFIX_PROPERTY_MAP[prefix];
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return 'unknown';
|
|
186
|
+
}
|
|
187
|
+
function stripVariants(utility) {
|
|
188
|
+
const parts = utility.split(':');
|
|
189
|
+
return parts[parts.length - 1];
|
|
190
|
+
}
|
|
191
|
+
function isTextFontSizeUtility(utility) {
|
|
192
|
+
const stripped = stripVariants(utility);
|
|
193
|
+
return FONT_SIZE_UTILITIES.has(stripped) || (stripped.startsWith('text-') && /^\d/.test(stripped.slice(5)));
|
|
194
|
+
}
|
|
195
|
+
function isTextColorUtility(utility) {
|
|
196
|
+
const stripped = stripVariants(utility);
|
|
197
|
+
if (FONT_SIZE_UTILITIES.has(stripped)) {
|
|
198
|
+
return false;
|
|
199
|
+
}
|
|
200
|
+
if (stripped.startsWith('text-')) {
|
|
201
|
+
const value = stripped.slice(5);
|
|
202
|
+
if (/^\d/.test(value) || value.startsWith('[')) {
|
|
203
|
+
return false;
|
|
204
|
+
}
|
|
205
|
+
return true;
|
|
206
|
+
}
|
|
207
|
+
return false;
|
|
208
|
+
}
|
|
209
|
+
function getPropertiesForUtilities(utilities) {
|
|
210
|
+
const propertyMap = new Map();
|
|
211
|
+
for (const utility of utilities) {
|
|
212
|
+
const property = getPropertyForUtility(utility);
|
|
213
|
+
if (!propertyMap.has(property)) {
|
|
214
|
+
propertyMap.set(property, []);
|
|
215
|
+
}
|
|
216
|
+
propertyMap.get(property).push(utility);
|
|
217
|
+
}
|
|
218
|
+
return propertyMap;
|
|
219
|
+
}
|
|
220
|
+
exports.PROPERTY_CONFLICT_GROUPS = {
|
|
221
|
+
'display': ['display'],
|
|
222
|
+
'position': ['position'],
|
|
223
|
+
'width': ['width', 'min-width', 'max-width'],
|
|
224
|
+
'height': ['height', 'min-height', 'max-height'],
|
|
225
|
+
'margin': ['margin', 'margin-top', 'margin-right', 'margin-bottom', 'margin-left', 'margin-x', 'margin-y'],
|
|
226
|
+
'padding': ['padding', 'padding-top', 'padding-right', 'padding-bottom', 'padding-left', 'padding-x', 'padding-y'],
|
|
227
|
+
'flex-direction': ['flex-direction'],
|
|
228
|
+
'flex-wrap': ['flex-wrap'],
|
|
229
|
+
'justify-content': ['justify-content'],
|
|
230
|
+
'align-items': ['align-items'],
|
|
231
|
+
'text-align': ['text-align'],
|
|
232
|
+
'font-size': ['font-size'],
|
|
233
|
+
'font-weight': ['font-weight'],
|
|
234
|
+
'color': ['color'],
|
|
235
|
+
'background-color': ['background-color'],
|
|
236
|
+
'border-radius': ['border-radius'],
|
|
237
|
+
'border-width': ['border-width', 'border-top-width', 'border-right-width', 'border-bottom-width', 'border-left-width'],
|
|
238
|
+
'overflow': ['overflow', 'overflow-x', 'overflow-y'],
|
|
239
|
+
'z-index': ['z-index'],
|
|
240
|
+
'opacity': ['opacity'],
|
|
241
|
+
'gap': ['gap'],
|
|
242
|
+
'inset': ['inset', 'top', 'right', 'bottom', 'left']
|
|
243
|
+
};
|
|
244
|
+
function getConflictGroup(property) {
|
|
245
|
+
for (const [groupName, properties] of Object.entries(exports.PROPERTY_CONFLICT_GROUPS)) {
|
|
246
|
+
if (properties.includes(property)) {
|
|
247
|
+
return groupName;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
return null;
|
|
251
|
+
}
|
|
252
|
+
function propertiesConflict(prop1, prop2) {
|
|
253
|
+
const group1 = getConflictGroup(prop1);
|
|
254
|
+
const group2 = getConflictGroup(prop2);
|
|
255
|
+
if (group1 && group2 && group1 === group2) {
|
|
256
|
+
if (prop1 === prop2) {
|
|
257
|
+
return true;
|
|
258
|
+
}
|
|
259
|
+
const group = exports.PROPERTY_CONFLICT_GROUPS[group1];
|
|
260
|
+
if (group.length === 1) {
|
|
261
|
+
return true;
|
|
262
|
+
}
|
|
263
|
+
if (group1 === 'margin' || group1 === 'padding') {
|
|
264
|
+
if (prop1 === group1 || prop2 === group1) {
|
|
265
|
+
return true;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
if (group1 === 'inset') {
|
|
269
|
+
if (prop1 === 'inset' || prop2 === 'inset') {
|
|
270
|
+
return true;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
return prop1 === prop2;
|
|
274
|
+
}
|
|
275
|
+
return prop1 === prop2;
|
|
276
|
+
}
|
|
277
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydHlNYXBwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvcHJvcGVydHlNYXBwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBOEpBLHNEQTRCQztBQU9ELHNEQUtDO0FBRUQsZ0RBZ0JDO0FBRUQsOERBY0M7QUEyQkQsNENBT0M7QUFFRCxnREErQkM7QUEzU0QsTUFBTSxtQkFBbUIsR0FBNkI7SUFDcEQsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDO0lBQ2xCLGtCQUFrQixFQUFFLENBQUMsS0FBSyxDQUFDO0lBQzNCLFdBQVcsRUFBRSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUM7SUFDL0ssYUFBYSxFQUFFLENBQUMsV0FBVyxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxDQUFDO0lBQ3pKLFNBQVMsRUFBRSxDQUFDLE9BQU8sRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxDQUFDO0lBQ3RKLFVBQVUsRUFBRSxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUM7SUFDakUsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDO0lBQ2YsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDO0lBQ2hCLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQztJQUN2QixXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUM7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QUFNLEVBQUUsQ0FBQztRQUMxQyxJQUFJLEtBQUssS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUNwQixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxNQUFNLEtBQUssR0FBRyxnQ0FBd0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUUvQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdkIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsSUFBSSxNQUFNLEtBQUssUUFBUSxJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNoRCxJQUFJLEtBQUssS0FBSyxNQUFNLElBQUksS0FBSyxLQUFLLE1BQU0sRUFBRSxDQUFDO2dCQUN6QyxPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxNQUFNLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDdkIsSUFBSSxLQUFLLEtBQUssT0FBTyxJQUFJLEtBQUssS0FBSyxPQUFPLEVBQUUsQ0FBQztnQkFDM0MsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sS0FBSyxLQUFLLEtBQUssQ0FBQztJQUN6QixDQUFDO0lBRUQsT0FBTyxLQUFLLEtBQUssS0FBSyxDQUFDO0FBQ3pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBQUk9QRVJUWV9QUkVGSVhfTUFQOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7XG4gICdjb2xvcic6IFsndGV4dC0nXSxcbiAgJ2JhY2tncm91bmQtY29sb3InOiBbJ2JnLSddLFxuICAnZm9udC1zaXplJzogWyd0ZXh0LXhzJywgJ3RleHQtc20nLCAndGV4dC1iYXNlJywgJ3RleHQtbGcnLCAndGV4dC14bCcsICd0ZXh0LTJ4bCcsICd0ZXh0LTN4bCcsICd0ZXh0LTR4bCcsICd0ZXh0LTV4bCcsICd0ZXh0LTZ4bCcsICd0ZXh0LTd4bCcsICd0ZXh0LTh4bCcsICd0ZXh0LTl4bCcsICd0ZXh0LSddLFxuICAnZm9udC13ZWlnaHQnOiBbJ2ZvbnQtdGhpbicsICdmb250LWV4dHJhbGlnaHQnLCAnZm9udC1saWdodCcsICdmb250LW5vcm1hbCcsICdmb250LW1lZGl1bScsICdmb250LXNlbWlib2xkJywgJ2ZvbnQtYm9sZCcsICdmb250LWV4dHJhYm9sZCcsICdmb250LWJsYWNrJ10sXG4gICdkaXNwbGF5JzogWydibG9jaycsICdpbmxpbmUtYmxvY2snLCAnaW5saW5lJywgJ2ZsZXgnLCAnaW5saW5lLWZsZXgnLCAnZ3JpZCcsICdpbmxpbmUtZ3JpZCcsICdoaWRkZW4nLCAnY29udGVudHMnLCAndGFibGUnLCAndGFibGUtY2VsbCcsICd0YWJsZS1yb3cnXSxcbiAgJ3Bvc2l0aW9uJzogWydzdGF0aWMnLCAnZml4ZWQnLCAnYWJzb2x1dGUnLCAncmVsYXRpdmUnLCAnc3RpY2t5J10sXG4gICd3aWR0aCc6IFsndy0nXSxcbiAgJ2hlaWdodCc6IFsnaC0nXSxcbiAgJ21pbi13aWR0aCc6IFsnbWluLXctJ10sXG4gICdtYXgtd2lkdGgnOiBbJ21heC13LSddLFxuICAnbWluLWhlaWdodCc6IFsnbWluLWgtJ10sXG4gICdtYXgtaGVpZ2h0JzogWydtYXgtaC0nXSxcbiAgJ21hcmdpbic6IFsnbS0nXSxcbiAgJ21hcmdpbi10b3AnOiBbJ210LSddLFxuICAnbWFyZ2luLXJpZ2h0JzogWydtci0nXSxcbiAgJ21hcmdpbi1ib3R0b20nOiBbJ21iLSddLFxuICAnbWFyZ2luLWxlZnQnOiBbJ21sLSddLFxuICAnbWFyZ2luLXgnOiBbJ214LSddLFxuICAnbWFyZ2luLXknOiBbJ215LSddLFxuICAncGFkZGluZyc6IFsncC0nXSxcbiAgJ3BhZGRpbmctdG9wJzogWydwdC0nXSxcbiAgJ3BhZGRpbmctcmlnaHQnOiBbJ3ByLSddLFxuICAncGFkZGluZy1ib3R0b20nOiBbJ3BiLSddLFxuICAncGFkZGluZy1sZWZ0JzogWydwbC0nXSxcbiAgJ3BhZGRpbmcteCc6IFsncHgtJ10sXG4gICdwYWRkaW5nLXknOiBbJ3B5LSddLFxuICAnZ2FwJzogWydnYXAtJ10sXG4gICdib3JkZXItcmFkaXVzJzogWydyb3VuZGVkLScsICdyb3VuZGVkJ10sXG4gICdib3JkZXItd2lkdGgnOiBbJ2JvcmRlci0nLCAnYm9yZGVyLXQtJywgJ2JvcmRlci1yLScsICdib3JkZXItYi0nLCAnYm9yZGVyLWwtJ10sXG4gICdib3JkZXItY29sb3InOiBbJ2JvcmRlci0nXSxcbiAgJ2ZsZXgtZGlyZWN0aW9uJzogWydmbGV4LXJvdycsICdmbGV4LWNvbCcsICdmbGV4LXJvdy1yZXZlcnNlJywgJ2ZsZXgtY29sLXJldmVyc2UnXSxcbiAgJ2ZsZXgtd3JhcCc6IFsnZmxleC13cmFwJywgJ2ZsZXgtbm93cmFwJywgJ2ZsZXgtd3JhcC1yZXZlcnNlJ10sXG4gICdqdXN0aWZ5LWNvbnRlbnQnOiBbJ2p1c3RpZnktJ10sXG4gICdhbGlnbi1pdGVtcyc6IFsnaXRlbXMtJ10sXG4gICdhbGlnbi1jb250ZW50JzogWydjb250ZW50LSddLFxuICAnYWxpZ24tc2VsZic6IFsnc2VsZi0nXSxcbiAgJ3RleHQtYWxpZ24nOiBbJ3RleHQtbGVmdCcsICd0ZXh0LWNlbnRlcicsICd0ZXh0LXJpZ2h0JywgJ3RleHQtanVzdGlmeScsICd0ZXh0LXN0YXJ0JywgJ3RleHQtZW5kJ10sXG4gICdvdmVyZmxvdyc6IFsnb3ZlcmZsb3ctJ10sXG4gICdvdmVyZmxvdy14JzogWydvdmVyZmxvdy14LSddLFxuICAnb3ZlcmZsb3cteSc6IFsnb3ZlcmZsb3cteS0nXSxcbiAgJ3otaW5kZXgnOiBbJ3otJ10sXG4gICdvcGFjaXR5JzogWydvcGFjaXR5LSddLFxuICAnY3Vyc29yJzogWydjdXJzb3ItJ10sXG4gICdwb2ludGVyLWV2ZW50cyc6IFsncG9pbnRlci1ldmVudHMtJ10sXG4gICd1c2VyLXNlbGVjdCc6IFsnc2VsZWN0LSddLFxuICAnYm94LXNoYWRvdyc6IFsnc2hhZG93LSddLFxuICAndHJhbnNpdGlvbic6IFsndHJhbnNpdGlvbi0nXSxcbiAgJ3RyYW5zZm9ybSc6IFsnc2NhbGUtJywgJ3JvdGF0ZS0nLCAndHJhbnNsYXRlLScsICdza2V3LSddLFxuICAndG9wJzogWyd0b3AtJ10sXG4gICdyaWdodCc6IFsncmlnaHQtJ10sXG4gICdib3R0b20nOiBbJ2JvdHRvbS0nXSxcbiAgJ2xlZnQnOiBbJ2xlZnQtJ10sXG4gICdpbnNldCc6IFsnaW5zZXQtJ11cbn07XG5cbmNvbnN0IFVUSUxJVFlfVE9fUFJPUEVSVFlfTUFQOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAnYmxvY2snOiAnZGlzcGxheScsXG4gICdpbmxpbmUtYmxvY2snOiAnZGlzcGxheScsXG4gICdpbmxpbmUnOiAnZGlzcGxheScsXG4gICdmbGV4JzogJ2Rpc3BsYXknLFxuICAnaW5saW5lLWZsZXgnOiAnZGlzcGxheScsXG4gICdncmlkJzogJ2Rpc3BsYXknLFxuICAnaW5saW5lLWdyaWQnOiAnZGlzcGxheScsXG4gICdoaWRkZW4nOiAnZGlzcGxheScsXG4gICdjb250ZW50cyc6ICdkaXNwbGF5JyxcbiAgJ3N0YXRpYyc6ICdwb3NpdGlvbicsXG4gICdmaXhlZCc6ICdwb3NpdGlvbicsXG4gICdhYnNvbHV0ZSc6ICdwb3NpdGlvbicsXG4gICdyZWxhdGl2ZSc6ICdwb3NpdGlvbicsXG4gICdzdGlja3knOiAncG9zaXRpb24nLFxuICAnZmxleC1yb3cnOiAnZmxleC1kaXJlY3Rpb24nLFxuICAnZmxleC1jb2wnOiAnZmxleC1kaXJlY3Rpb24nLFxuICAnZmxleC1yb3ctcmV2ZXJzZSc6ICdmbGV4LWRpcmVjdGlvbicsXG4gICdmbGV4LWNvbC1yZXZlcnNlJzogJ2ZsZXgtZGlyZWN0aW9uJyxcbiAgJ2ZsZXgtd3JhcCc6ICdmbGV4LXdyYXAnLFxuICAnZmxleC1ub3dyYXAnOiAnZmxleC13cmFwJyxcbiAgJ2ZsZXgtd3JhcC1yZXZlcnNlJzogJ2ZsZXgtd3JhcCcsXG4gICd0ZXh0LWxlZnQnOiAndGV4dC1hbGlnbicsXG4gICd0ZXh0LWNlbnRlcic6ICd0ZXh0LWFsaWduJyxcbiAgJ3RleHQtcmlnaHQnOiAndGV4dC1hbGlnbicsXG4gICd0ZXh0LWp1c3RpZnknOiAndGV4dC1hbGlnbicsXG4gICd0ZXh0LXN0YXJ0JzogJ3RleHQtYWxpZ24nLFxuICAndGV4dC1lbmQnOiAndGV4dC1hbGlnbicsXG4gICdmb250LXRoaW4nOiAnZm9udC13ZWlnaHQnLFxuICAnZm9udC1leHRyYWxpZ2h0JzogJ2ZvbnQtd2VpZ2h0JyxcbiAgJ2ZvbnQtbGlnaHQnOiAnZm9udC13ZWlnaHQnLFxuICAnZm9udC1ub3JtYWwnOiAnZm9udC13ZWlnaHQnLFxuICAnZm9udC1tZWRpdW0nOiAnZm9udC13ZWlnaHQnLFxuICAnZm9udC1zZW1pYm9sZCc6ICdmb250LXdlaWdodCcsXG4gICdmb250LWJvbGQnOiAnZm9udC13ZWlnaHQnLFxuICAnZm9udC1leHRyYWJvbGQnOiAnZm9udC13ZWlnaHQnLFxuICAnZm9udC1ibGFjayc6ICdmb250LXdlaWdodCcsXG4gICdyb3VuZGVkJzogJ2JvcmRlci1yYWRpdXMnLFxuICAncm91bmRlZC1ub25lJzogJ2JvcmRlci1yYWRpdXMnLFxuICAncm91bmRlZC1zbSc6ICdib3JkZXItcmFkaXVzJyxcbiAgJ3JvdW5kZWQtbWQnOiAnYm9yZGVyLXJhZGl1cycsXG4gICdyb3VuZGVkLWxnJzogJ2JvcmRlci1yYWRpdXMnLFxuICAncm91bmRlZC14bCc6ICdib3JkZXItcmFkaXVzJyxcbiAgJ3JvdW5kZWQtMnhsJzogJ2JvcmRlci1yYWRpdXMnLFxuICAncm91bmRlZC0zeGwnOiAnYm9yZGVyLXJhZGl1cycsXG4gICdyb3VuZGVkLWZ1bGwnOiAnYm9yZGVyLXJhZGl1cydcbn07XG5cbmNvbnN0IFBSRUZJWF9QUk9QRVJUWV9NQVA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICd0ZXh0LSc6ICdjb2xvcicsXG4gICdiZy0nOiAnYmFja2dyb3VuZC1jb2xvcicsXG4gICd3LSc6ICd3aWR0aCcsXG4gICdoLSc6ICdoZWlnaHQnLFxuICAnbWluLXctJzogJ21pbi13aWR0aCcsXG4gICdtYXgtdy0nOiAnbWF4LXdpZHRoJyxcbiAgJ21pbi1oLSc6ICdtaW4taGVpZ2h0JyxcbiAgJ21heC1oLSc6ICdtYXgtaGVpZ2h0JyxcbiAgJ20tJzogJ21hcmdpbicsXG4gICdtdC0nOiAnbWFyZ2luLXRvcCcsXG4gICdtci0nOiAnbWFyZ2luLXJpZ2h0JyxcbiAgJ21iLSc6ICdtYXJnaW4tYm90dG9tJyxcbiAgJ21sLSc6ICdtYXJnaW4tbGVmdCcsXG4gICdteC0nOiAnbWFyZ2luLXgnLFxuICAnbXktJzogJ21hcmdpbi15JyxcbiAgJ3AtJzogJ3BhZGRpbmcnLFxuICAncHQtJzogJ3BhZGRpbmctdG9wJyxcbiAgJ3ByLSc6ICdwYWRkaW5nLXJpZ2h0JyxcbiAgJ3BiLSc6ICdwYWRkaW5nLWJvdHRvbScsXG4gICdwbC0nOiAncGFkZGluZy1sZWZ0JyxcbiAgJ3B4LSc6ICdwYWRkaW5nLXgnLFxuICAncHktJzogJ3BhZGRpbmcteScsXG4gICdnYXAtJzogJ2dhcCcsXG4gICdyb3VuZGVkLSc6ICdib3JkZXItcmFkaXVzJyxcbiAgJ2p1c3RpZnktJzogJ2p1c3RpZnktY29udGVudCcsXG4gICdpdGVtcy0nOiAnYWxpZ24taXRlbXMnLFxuICAnY29udGVudC0nOiAnYWxpZ24tY29udGVudCcsXG4gICdzZWxmLSc6ICdhbGlnbi1zZWxmJyxcbiAgJ292ZXJmbG93LSc6ICdvdmVyZmxvdycsXG4gICdvdmVyZmxvdy14LSc6ICdvdmVyZmxvdy14JyxcbiAgJ292ZXJmbG93LXktJzogJ292ZXJmbG93LXknLFxuICAnei0nOiAnei1pbmRleCcsXG4gICdvcGFjaXR5LSc6ICdvcGFjaXR5JyxcbiAgJ2N1cnNvci0nOiAnY3Vyc29yJyxcbiAgJ3NoYWRvdy0nOiAnYm94LXNoYWRvdycsXG4gICdib3JkZXItJzogJ2JvcmRlci13aWR0aCcsXG4gICdib3JkZXItdC0nOiAnYm9yZGVyLXdpZHRoJyxcbiAgJ2JvcmRlci1yLSc6ICdib3JkZXItd2lkdGgnLFxuICAnYm9yZGVyLWItJzogJ2JvcmRlci13aWR0aCcsXG4gICdib3JkZXItbC0nOiAnYm9yZGVyLXdpZHRoJyxcbiAgJ3RvcC0nOiAndG9wJyxcbiAgJ3JpZ2h0LSc6ICdyaWdodCcsXG4gICdib3R0b20tJzogJ2JvdHRvbScsXG4gICdsZWZ0LSc6ICdsZWZ0JyxcbiAgJ2luc2V0LSc6ICdpbnNldCdcbn07XG5cbmNvbnN0IEZPTlRfU0laRV9VVElMSVRJRVMgPSBuZXcgU2V0KFtcbiAgJ3RleHQteHMnLCAndGV4dC1zbScsICd0ZXh0LWJhc2UnLCAndGV4dC1sZycsICd0ZXh0LXhsJyxcbiAgJ3RleHQtMnhsJywgJ3RleHQtM3hsJywgJ3RleHQtNHhsJywgJ3RleHQtNXhsJywgJ3RleHQtNnhsJyxcbiAgJ3RleHQtN3hsJywgJ3RleHQtOHhsJywgJ3RleHQtOXhsJ1xuXSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm9wZXJ0eUZvclV0aWxpdHkodXRpbGl0eTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgc3RyaXBwZWRVdGlsaXR5ID0gc3RyaXBWYXJpYW50cyh1dGlsaXR5KTtcbiAgXG4gIGlmIChVVElMSVRZX1RPX1BST1BFUlRZX01BUFtzdHJpcHBlZFV0aWxpdHldKSB7XG4gICAgcmV0dXJuIFVUSUxJVFlfVE9fUFJPUEVSVFlfTUFQW3N0cmlwcGVkVXRpbGl0eV07XG4gIH1cbiAgXG4gIGlmIChGT05UX1NJWkVfVVRJTElUSUVTLmhhcyhzdHJpcHBlZFV0aWxpdHkpKSB7XG4gICAgcmV0dXJuICdmb250LXNpemUnO1xuICB9XG4gIFxuICBpZiAoc3RyaXBwZWRVdGlsaXR5LnN0YXJ0c1dpdGgoJ3RleHQtJykgJiYgIUZPTlRfU0laRV9VVElMSVRJRVMuaGFzKHN0cmlwcGVkVXRpbGl0eSkpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHN0cmlwcGVkVXRpbGl0eS5zbGljZSg1KTtcbiAgICBpZiAoL15cXGQvLnRlc3QodmFsdWUpIHx8IHZhbHVlLnN0YXJ0c1dpdGgoJ1snKSkge1xuICAgICAgcmV0dXJuICdmb250LXNpemUnO1xuICAgIH1cbiAgICByZXR1cm4gJ2NvbG9yJztcbiAgfVxuICBcbiAgY29uc3Qgc29ydGVkUHJlZml4ZXMgPSBPYmplY3Qua2V5cyhQUkVGSVhfUFJPUEVSVFlfTUFQKS5zb3J0KChhLCBiKSA9PiBiLmxlbmd0aCAtIGEubGVuZ3RoKTtcbiAgXG4gIGZvciAoY29uc3QgcHJlZml4IG9mIHNvcnRlZFByZWZpeGVzKSB7XG4gICAgaWYgKHN0cmlwcGVkVXRpbGl0eS5zdGFydHNXaXRoKHByZWZpeCkpIHtcbiAgICAgIHJldHVybiBQUkVGSVhfUFJPUEVSVFlfTUFQW3ByZWZpeF07XG4gICAgfVxuICB9XG4gIFxuICByZXR1cm4gJ3Vua25vd24nO1xufVxuXG5mdW5jdGlvbiBzdHJpcFZhcmlhbnRzKHV0aWxpdHk6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHBhcnRzID0gdXRpbGl0eS5zcGxpdCgnOicpO1xuICByZXR1cm4gcGFydHNbcGFydHMubGVuZ3RoIC0gMV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1RleHRGb250U2l6ZVV0aWxpdHkodXRpbGl0eTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IHN0cmlwcGVkID0gc3RyaXBWYXJpYW50cyh1dGlsaXR5KTtcbiAgcmV0dXJuIEZPTlRfU0laRV9VVElMSVRJRVMuaGFzKHN0cmlwcGVkKSB8fCAoXG4gICAgc3RyaXBwZWQuc3RhcnRzV2l0aCgndGV4dC0nKSAmJiAvXlxcZC8udGVzdChzdHJpcHBlZC5zbGljZSg1KSlcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVGV4dENvbG9yVXRpbGl0eSh1dGlsaXR5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3Qgc3RyaXBwZWQgPSBzdHJpcFZhcmlhbnRzKHV0aWxpdHkpO1xuICBcbiAgaWYgKEZPTlRfU0laRV9VVElMSVRJRVMuaGFzKHN0cmlwcGVkKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBcbiAgaWYgKHN0cmlwcGVkLnN0YXJ0c1dpdGgoJ3RleHQtJykpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHN0cmlwcGVkLnNsaWNlKDUpO1xuICAgIGlmICgvXlxcZC8udGVzdCh2YWx1ZSkgfHwgdmFsdWUuc3RhcnRzV2l0aCgnWycpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIFxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm9wZXJ0aWVzRm9yVXRpbGl0aWVzKHV0aWxpdGllczogc3RyaW5nW10pOiBNYXA8c3RyaW5nLCBzdHJpbmdbXT4ge1xuICBjb25zdCBwcm9wZXJ0eU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmdbXT4oKTtcbiAgXG4gIGZvciAoY29uc3QgdXRpbGl0eSBvZiB1dGlsaXRpZXMpIHtcbiAgICBjb25zdCBwcm9wZXJ0eSA9IGdldFByb3BlcnR5Rm9yVXRpbGl0eSh1dGlsaXR5KTtcbiAgICBcbiAgICBpZiAoIXByb3BlcnR5TWFwLmhhcyhwcm9wZXJ0eSkpIHtcbiAgICAgIHByb3BlcnR5TWFwLnNldChwcm9wZXJ0eSwgW10pO1xuICAgIH1cbiAgICBcbiAgICBwcm9wZXJ0eU1hcC5nZXQocHJvcGVydHkpIS5wdXNoKHV0aWxpdHkpO1xuICB9XG4gIFxuICByZXR1cm4gcHJvcGVydHlNYXA7XG59XG5cbmV4cG9ydCBjb25zdCBQUk9QRVJUWV9DT05GTElDVF9HUk9VUFM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHtcbiAgJ2Rpc3BsYXknOiBbJ2Rpc3BsYXknXSxcbiAgJ3Bvc2l0aW9uJzogWydwb3NpdGlvbiddLFxuICAnd2lkdGgnOiBbJ3dpZHRoJywgJ21pbi13aWR0aCcsICdtYXgtd2lkdGgnXSxcbiAgJ2hlaWdodCc6IFsnaGVpZ2h0JywgJ21pbi1oZWlnaHQnLCAnbWF4LWhlaWdodCddLFxuICAnbWFyZ2luJzogWydtYXJnaW4nLCAnbWFyZ2luLXRvcCcsICdtYXJnaW4tcmlnaHQnLCAnbWFyZ2luLWJvdHRvbScsICdtYXJnaW4tbGVmdCcsICdtYXJnaW4teCcsICdtYXJnaW4teSddLFxuICAncGFkZGluZyc6IFsncGFkZGluZycsICdwYWRkaW5nLXRvcCcsICdwYWRkaW5nLXJpZ2h0JywgJ3BhZGRpbmctYm90dG9tJywgJ3BhZGRpbmctbGVmdCcsICdwYWRkaW5nLXgnLCAncGFkZGluZy15J10sXG4gICdmbGV4LWRpcmVjdGlvbic6IFsnZmxleC1kaXJlY3Rpb24nXSxcbiAgJ2ZsZXgtd3JhcCc6IFsnZmxleC13cmFwJ10sXG4gICdqdXN0aWZ5LWNvbnRlbnQnOiBbJ2p1c3RpZnktY29udGVudCddLFxuICAnYWxpZ24taXRlbXMnOiBbJ2FsaWduLWl0ZW1zJ10sXG4gICd0ZXh0LWFsaWduJzogWyd0ZXh0LWFsaWduJ10sXG4gICdmb250LXNpemUnOiBbJ2ZvbnQtc2l6ZSddLFxuICAnZm9udC13ZWlnaHQnOiBbJ2ZvbnQtd2VpZ2h0J10sXG4gICdjb2xvcic6IFsnY29sb3InXSxcbiAgJ2JhY2tncm91bmQtY29sb3InOiBbJ2JhY2tncm91bmQtY29sb3InXSxcbiAgJ2JvcmRlci1yYWRpdXMnOiBbJ2JvcmRlci1yYWRpdXMnXSxcbiAgJ2JvcmRlci13aWR0aCc6IFsnYm9yZGVyLXdpZHRoJywgJ2JvcmRlci10b3Atd2lkdGgnLCAnYm9yZGVyLXJpZ2h0LXdpZHRoJywgJ2JvcmRlci1ib3R0b20td2lkdGgnLCAnYm9yZGVyLWxlZnQtd2lkdGgnXSxcbiAgJ292ZXJmbG93JzogWydvdmVyZmxvdycsICdvdmVyZmxvdy14JywgJ292ZXJmbG93LXknXSxcbiAgJ3otaW5kZXgnOiBbJ3otaW5kZXgnXSxcbiAgJ29wYWNpdHknOiBbJ29wYWNpdHknXSxcbiAgJ2dhcCc6IFsnZ2FwJ10sXG4gICdpbnNldCc6IFsnaW5zZXQnLCAndG9wJywgJ3JpZ2h0JywgJ2JvdHRvbScsICdsZWZ0J11cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25mbGljdEdyb3VwKHByb3BlcnR5OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgZm9yIChjb25zdCBbZ3JvdXBOYW1lLCBwcm9wZXJ0aWVzXSBvZiBPYmplY3QuZW50cmllcyhQUk9QRVJUWV9DT05GTElDVF9HUk9VUFMpKSB7XG4gICAgaWYgKHByb3BlcnRpZXMuaW5jbHVkZXMocHJvcGVydHkpKSB7XG4gICAgICByZXR1cm4gZ3JvdXBOYW1lO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnRpZXNDb25mbGljdChwcm9wMTogc3RyaW5nLCBwcm9wMjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IGdyb3VwMSA9IGdldENvbmZsaWN0R3JvdXAocHJvcDEpO1xuICBjb25zdCBncm91cDIgPSBnZXRDb25mbGljdEdyb3VwKHByb3AyKTtcbiAgXG4gIGlmIChncm91cDEgJiYgZ3JvdXAyICYmIGdyb3VwMSA9PT0gZ3JvdXAyKSB7XG4gICAgaWYgKHByb3AxID09PSBwcm9wMikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IGdyb3VwID0gUFJPUEVSVFlfQ09ORkxJQ1RfR1JPVVBTW2dyb3VwMV07XG4gICAgXG4gICAgaWYgKGdyb3VwLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIFxuICAgIGlmIChncm91cDEgPT09ICdtYXJnaW4nIHx8IGdyb3VwMSA9PT0gJ3BhZGRpbmcnKSB7XG4gICAgICBpZiAocHJvcDEgPT09IGdyb3VwMSB8fCBwcm9wMiA9PT0gZ3JvdXAxKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBpZiAoZ3JvdXAxID09PSAnaW5zZXQnKSB7XG4gICAgICBpZiAocHJvcDEgPT09ICdpbnNldCcgfHwgcHJvcDIgPT09ICdpbnNldCcpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBwcm9wMSA9PT0gcHJvcDI7XG4gIH1cbiAgXG4gIHJldHVybiBwcm9wMSA9PT0gcHJvcDI7XG59Il19
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export interface Specificity {
|
|
2
|
+
inline: number;
|
|
3
|
+
id: number;
|
|
4
|
+
class: number;
|
|
5
|
+
element: number;
|
|
6
|
+
}
|
|
7
|
+
export declare const ZERO_SPECIFICITY: Specificity;
|
|
8
|
+
export declare function createSpecificity(inline?: number, id?: number, cls?: number, element?: number): Specificity;
|
|
9
|
+
export declare function addSpecificity(a: Specificity, b: Specificity): Specificity;
|
|
10
|
+
export declare function compareSpecificity(a: Specificity, b: Specificity): number;
|
|
11
|
+
export declare function specificityToString(spec: Specificity): string;
|
|
12
|
+
export declare function calculateSelectorSpecificity(selector: string): Specificity;
|
|
13
|
+
export declare function calculateDescendantSpecificity(parentType: 'class' | 'element', parentName: string, targetType: 'class' | 'element', targetName: string): Specificity;
|
|
14
|
+
export declare function calculateSelectorSpecificityFromParts(parts: {
|
|
15
|
+
hasClass: boolean;
|
|
16
|
+
hasElement: boolean;
|
|
17
|
+
hasPseudo: boolean;
|
|
18
|
+
pseudoCount?: number;
|
|
19
|
+
isDescendant?: boolean;
|
|
20
|
+
parentType?: 'class' | 'element';
|
|
21
|
+
targetType?: 'class' | 'element';
|
|
22
|
+
}): Specificity;
|
|
23
|
+
export declare function isHigherSpecificity(a: Specificity, b: Specificity): boolean;
|
|
24
|
+
export declare function isEqualSpecificity(a: Specificity, b: Specificity): boolean;
|
|
25
|
+
export declare function getHigherSpecificity(a: Specificity, b: Specificity): Specificity;
|