tailwind-typescript-plugin 1.4.0-beta.1 → 1.4.0-beta.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.
- package/CHANGELOG.md +12 -0
- package/README.md +195 -0
- package/lib/core/types.d.ts +8 -0
- package/lib/core/types.d.ts.map +1 -1
- package/lib/extractors/CvaExtractor.d.ts.map +1 -1
- package/lib/extractors/CvaExtractor.js +6 -2
- package/lib/extractors/CvaExtractor.js.map +1 -1
- package/lib/extractors/TailwindVariantsExtractor.d.ts +2 -0
- package/lib/extractors/TailwindVariantsExtractor.d.ts.map +1 -1
- package/lib/extractors/TailwindVariantsExtractor.js +11 -3
- package/lib/extractors/TailwindVariantsExtractor.js.map +1 -1
- package/lib/infrastructure/TailwindConflictDetector.d.ts +73 -0
- package/lib/infrastructure/TailwindConflictDetector.d.ts.map +1 -0
- package/lib/infrastructure/TailwindConflictDetector.js +612 -0
- package/lib/infrastructure/TailwindConflictDetector.js.map +1 -0
- package/lib/infrastructure/TailwindValidator.spec.js +151 -0
- package/lib/infrastructure/TailwindValidator.spec.js.map +1 -1
- package/lib/plugin/TailwindTypescriptPlugin.d.ts +12 -0
- package/lib/plugin/TailwindTypescriptPlugin.d.ts.map +1 -1
- package/lib/plugin/TailwindTypescriptPlugin.js +105 -0
- package/lib/plugin/TailwindTypescriptPlugin.js.map +1 -1
- package/lib/services/ConflictClassDetection.spec.d.ts +2 -0
- package/lib/services/ConflictClassDetection.spec.d.ts.map +1 -0
- package/lib/services/ConflictClassDetection.spec.js +472 -0
- package/lib/services/ConflictClassDetection.spec.js.map +1 -0
- package/lib/services/DiagnosticService.d.ts +14 -0
- package/lib/services/DiagnosticService.d.ts.map +1 -1
- package/lib/services/DiagnosticService.js +32 -1
- package/lib/services/DiagnosticService.js.map +1 -1
- package/lib/services/ValidationService.d.ts +1 -0
- package/lib/services/ValidationService.d.ts.map +1 -1
- package/lib/services/ValidationService.js +12 -2
- package/lib/services/ValidationService.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,612 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TailwindConflictDetector = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Conflict groups define sets of Tailwind classes that affect the same CSS property.
|
|
6
|
+
* When multiple classes from the same group are used together, they conflict.
|
|
7
|
+
*/
|
|
8
|
+
const CONFLICT_GROUPS = {
|
|
9
|
+
// Text alignment
|
|
10
|
+
'text-align': [
|
|
11
|
+
'text-left',
|
|
12
|
+
'text-center',
|
|
13
|
+
'text-right',
|
|
14
|
+
'text-justify',
|
|
15
|
+
'text-start',
|
|
16
|
+
'text-end'
|
|
17
|
+
],
|
|
18
|
+
// Display
|
|
19
|
+
display: [
|
|
20
|
+
'block',
|
|
21
|
+
'inline-block',
|
|
22
|
+
'inline',
|
|
23
|
+
'flex',
|
|
24
|
+
'inline-flex',
|
|
25
|
+
'table',
|
|
26
|
+
'inline-table',
|
|
27
|
+
'table-caption',
|
|
28
|
+
'table-cell',
|
|
29
|
+
'table-column',
|
|
30
|
+
'table-column-group',
|
|
31
|
+
'table-footer-group',
|
|
32
|
+
'table-header-group',
|
|
33
|
+
'table-row-group',
|
|
34
|
+
'table-row',
|
|
35
|
+
'flow-root',
|
|
36
|
+
'grid',
|
|
37
|
+
'inline-grid',
|
|
38
|
+
'contents',
|
|
39
|
+
'list-item',
|
|
40
|
+
'hidden'
|
|
41
|
+
],
|
|
42
|
+
// Position
|
|
43
|
+
position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],
|
|
44
|
+
// Visibility
|
|
45
|
+
visibility: ['visible', 'invisible', 'collapse'],
|
|
46
|
+
// Flex direction
|
|
47
|
+
'flex-direction': ['flex-row', 'flex-row-reverse', 'flex-col', 'flex-col-reverse'],
|
|
48
|
+
// Flex wrap
|
|
49
|
+
'flex-wrap': ['flex-wrap', 'flex-wrap-reverse', 'flex-nowrap'],
|
|
50
|
+
// Justify content
|
|
51
|
+
'justify-content': [
|
|
52
|
+
'justify-normal',
|
|
53
|
+
'justify-start',
|
|
54
|
+
'justify-end',
|
|
55
|
+
'justify-center',
|
|
56
|
+
'justify-between',
|
|
57
|
+
'justify-around',
|
|
58
|
+
'justify-evenly',
|
|
59
|
+
'justify-stretch'
|
|
60
|
+
],
|
|
61
|
+
// Justify items
|
|
62
|
+
'justify-items': [
|
|
63
|
+
'justify-items-start',
|
|
64
|
+
'justify-items-end',
|
|
65
|
+
'justify-items-center',
|
|
66
|
+
'justify-items-stretch'
|
|
67
|
+
],
|
|
68
|
+
// Justify self
|
|
69
|
+
'justify-self': [
|
|
70
|
+
'justify-self-auto',
|
|
71
|
+
'justify-self-start',
|
|
72
|
+
'justify-self-end',
|
|
73
|
+
'justify-self-center',
|
|
74
|
+
'justify-self-stretch'
|
|
75
|
+
],
|
|
76
|
+
// Align content
|
|
77
|
+
'align-content': [
|
|
78
|
+
'content-normal',
|
|
79
|
+
'content-center',
|
|
80
|
+
'content-start',
|
|
81
|
+
'content-end',
|
|
82
|
+
'content-between',
|
|
83
|
+
'content-around',
|
|
84
|
+
'content-evenly',
|
|
85
|
+
'content-baseline',
|
|
86
|
+
'content-stretch'
|
|
87
|
+
],
|
|
88
|
+
// Align items
|
|
89
|
+
'align-items': ['items-start', 'items-end', 'items-center', 'items-baseline', 'items-stretch'],
|
|
90
|
+
// Align self
|
|
91
|
+
'align-self': [
|
|
92
|
+
'self-auto',
|
|
93
|
+
'self-start',
|
|
94
|
+
'self-end',
|
|
95
|
+
'self-center',
|
|
96
|
+
'self-stretch',
|
|
97
|
+
'self-baseline'
|
|
98
|
+
],
|
|
99
|
+
// Place content
|
|
100
|
+
'place-content': [
|
|
101
|
+
'place-content-center',
|
|
102
|
+
'place-content-start',
|
|
103
|
+
'place-content-end',
|
|
104
|
+
'place-content-between',
|
|
105
|
+
'place-content-around',
|
|
106
|
+
'place-content-evenly',
|
|
107
|
+
'place-content-baseline',
|
|
108
|
+
'place-content-stretch'
|
|
109
|
+
],
|
|
110
|
+
// Place items
|
|
111
|
+
'place-items': [
|
|
112
|
+
'place-items-start',
|
|
113
|
+
'place-items-end',
|
|
114
|
+
'place-items-center',
|
|
115
|
+
'place-items-baseline',
|
|
116
|
+
'place-items-stretch'
|
|
117
|
+
],
|
|
118
|
+
// Place self
|
|
119
|
+
'place-self': [
|
|
120
|
+
'place-self-auto',
|
|
121
|
+
'place-self-start',
|
|
122
|
+
'place-self-end',
|
|
123
|
+
'place-self-center',
|
|
124
|
+
'place-self-stretch'
|
|
125
|
+
],
|
|
126
|
+
// Float
|
|
127
|
+
float: ['float-start', 'float-end', 'float-right', 'float-left', 'float-none'],
|
|
128
|
+
// Clear
|
|
129
|
+
clear: ['clear-start', 'clear-end', 'clear-left', 'clear-right', 'clear-both', 'clear-none'],
|
|
130
|
+
// Object fit
|
|
131
|
+
'object-fit': [
|
|
132
|
+
'object-contain',
|
|
133
|
+
'object-cover',
|
|
134
|
+
'object-fill',
|
|
135
|
+
'object-none',
|
|
136
|
+
'object-scale-down'
|
|
137
|
+
],
|
|
138
|
+
// Overflow
|
|
139
|
+
overflow: [
|
|
140
|
+
'overflow-auto',
|
|
141
|
+
'overflow-hidden',
|
|
142
|
+
'overflow-clip',
|
|
143
|
+
'overflow-visible',
|
|
144
|
+
'overflow-scroll'
|
|
145
|
+
],
|
|
146
|
+
'overflow-x': [
|
|
147
|
+
'overflow-x-auto',
|
|
148
|
+
'overflow-x-hidden',
|
|
149
|
+
'overflow-x-clip',
|
|
150
|
+
'overflow-x-visible',
|
|
151
|
+
'overflow-x-scroll'
|
|
152
|
+
],
|
|
153
|
+
'overflow-y': [
|
|
154
|
+
'overflow-y-auto',
|
|
155
|
+
'overflow-y-hidden',
|
|
156
|
+
'overflow-y-clip',
|
|
157
|
+
'overflow-y-visible',
|
|
158
|
+
'overflow-y-scroll'
|
|
159
|
+
],
|
|
160
|
+
// Overscroll behavior
|
|
161
|
+
overscroll: ['overscroll-auto', 'overscroll-contain', 'overscroll-none'],
|
|
162
|
+
'overscroll-x': ['overscroll-x-auto', 'overscroll-x-contain', 'overscroll-x-none'],
|
|
163
|
+
'overscroll-y': ['overscroll-y-auto', 'overscroll-y-contain', 'overscroll-y-none'],
|
|
164
|
+
// Scroll behavior
|
|
165
|
+
'scroll-behavior': ['scroll-auto', 'scroll-smooth'],
|
|
166
|
+
// Text overflow
|
|
167
|
+
'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],
|
|
168
|
+
// Text wrap
|
|
169
|
+
'text-wrap': ['text-wrap', 'text-nowrap', 'text-balance', 'text-pretty'],
|
|
170
|
+
// Whitespace
|
|
171
|
+
whitespace: [
|
|
172
|
+
'whitespace-normal',
|
|
173
|
+
'whitespace-nowrap',
|
|
174
|
+
'whitespace-pre',
|
|
175
|
+
'whitespace-pre-line',
|
|
176
|
+
'whitespace-pre-wrap',
|
|
177
|
+
'whitespace-break-spaces'
|
|
178
|
+
],
|
|
179
|
+
// Word break
|
|
180
|
+
'word-break': ['break-normal', 'break-words', 'break-all', 'break-keep'],
|
|
181
|
+
// Hyphens
|
|
182
|
+
hyphens: ['hyphens-none', 'hyphens-manual', 'hyphens-auto'],
|
|
183
|
+
// List style position
|
|
184
|
+
'list-style-position': ['list-inside', 'list-outside'],
|
|
185
|
+
// Border collapse
|
|
186
|
+
'border-collapse': ['border-collapse', 'border-separate'],
|
|
187
|
+
// Table layout
|
|
188
|
+
'table-layout': ['table-auto', 'table-fixed'],
|
|
189
|
+
// Caption side
|
|
190
|
+
'caption-side': ['caption-top', 'caption-bottom'],
|
|
191
|
+
// Box decoration break
|
|
192
|
+
'box-decoration-break': ['box-decoration-clone', 'box-decoration-slice'],
|
|
193
|
+
// Box sizing
|
|
194
|
+
'box-sizing': ['box-border', 'box-content'],
|
|
195
|
+
// Isolation
|
|
196
|
+
isolation: ['isolate', 'isolation-auto'],
|
|
197
|
+
// Mix blend mode
|
|
198
|
+
'mix-blend-mode': [
|
|
199
|
+
'mix-blend-normal',
|
|
200
|
+
'mix-blend-multiply',
|
|
201
|
+
'mix-blend-screen',
|
|
202
|
+
'mix-blend-overlay',
|
|
203
|
+
'mix-blend-darken',
|
|
204
|
+
'mix-blend-lighten',
|
|
205
|
+
'mix-blend-color-dodge',
|
|
206
|
+
'mix-blend-color-burn',
|
|
207
|
+
'mix-blend-hard-light',
|
|
208
|
+
'mix-blend-soft-light',
|
|
209
|
+
'mix-blend-difference',
|
|
210
|
+
'mix-blend-exclusion',
|
|
211
|
+
'mix-blend-hue',
|
|
212
|
+
'mix-blend-saturation',
|
|
213
|
+
'mix-blend-color',
|
|
214
|
+
'mix-blend-luminosity',
|
|
215
|
+
'mix-blend-plus-darker',
|
|
216
|
+
'mix-blend-plus-lighter'
|
|
217
|
+
],
|
|
218
|
+
// Background blend mode
|
|
219
|
+
'background-blend-mode': [
|
|
220
|
+
'bg-blend-normal',
|
|
221
|
+
'bg-blend-multiply',
|
|
222
|
+
'bg-blend-screen',
|
|
223
|
+
'bg-blend-overlay',
|
|
224
|
+
'bg-blend-darken',
|
|
225
|
+
'bg-blend-lighten',
|
|
226
|
+
'bg-blend-color-dodge',
|
|
227
|
+
'bg-blend-color-burn',
|
|
228
|
+
'bg-blend-hard-light',
|
|
229
|
+
'bg-blend-soft-light',
|
|
230
|
+
'bg-blend-difference',
|
|
231
|
+
'bg-blend-exclusion',
|
|
232
|
+
'bg-blend-hue',
|
|
233
|
+
'bg-blend-saturation',
|
|
234
|
+
'bg-blend-color',
|
|
235
|
+
'bg-blend-luminosity'
|
|
236
|
+
],
|
|
237
|
+
// Background attachment
|
|
238
|
+
'background-attachment': ['bg-fixed', 'bg-local', 'bg-scroll'],
|
|
239
|
+
// Background clip
|
|
240
|
+
'background-clip': ['bg-clip-border', 'bg-clip-padding', 'bg-clip-content', 'bg-clip-text'],
|
|
241
|
+
// Background origin
|
|
242
|
+
'background-origin': ['bg-origin-border', 'bg-origin-padding', 'bg-origin-content'],
|
|
243
|
+
// Background repeat
|
|
244
|
+
'background-repeat': [
|
|
245
|
+
'bg-repeat',
|
|
246
|
+
'bg-no-repeat',
|
|
247
|
+
'bg-repeat-x',
|
|
248
|
+
'bg-repeat-y',
|
|
249
|
+
'bg-repeat-round',
|
|
250
|
+
'bg-repeat-space'
|
|
251
|
+
],
|
|
252
|
+
// Background size
|
|
253
|
+
'background-size': ['bg-auto', 'bg-cover', 'bg-contain'],
|
|
254
|
+
// Border style
|
|
255
|
+
'border-style': [
|
|
256
|
+
'border-solid',
|
|
257
|
+
'border-dashed',
|
|
258
|
+
'border-dotted',
|
|
259
|
+
'border-double',
|
|
260
|
+
'border-hidden',
|
|
261
|
+
'border-none'
|
|
262
|
+
],
|
|
263
|
+
// Outline style
|
|
264
|
+
'outline-style': [
|
|
265
|
+
'outline-none',
|
|
266
|
+
'outline',
|
|
267
|
+
'outline-dashed',
|
|
268
|
+
'outline-dotted',
|
|
269
|
+
'outline-double'
|
|
270
|
+
],
|
|
271
|
+
// Font style
|
|
272
|
+
'font-style': ['italic', 'not-italic'],
|
|
273
|
+
// Font variant numeric
|
|
274
|
+
'font-variant-numeric': [
|
|
275
|
+
'normal-nums',
|
|
276
|
+
'ordinal',
|
|
277
|
+
'slashed-zero',
|
|
278
|
+
'lining-nums',
|
|
279
|
+
'oldstyle-nums',
|
|
280
|
+
'proportional-nums',
|
|
281
|
+
'tabular-nums',
|
|
282
|
+
'diagonal-fractions',
|
|
283
|
+
'stacked-fractions'
|
|
284
|
+
],
|
|
285
|
+
// Text decoration line
|
|
286
|
+
'text-decoration-line': ['underline', 'overline', 'line-through', 'no-underline'],
|
|
287
|
+
// Text decoration style
|
|
288
|
+
'text-decoration-style': [
|
|
289
|
+
'decoration-solid',
|
|
290
|
+
'decoration-double',
|
|
291
|
+
'decoration-dotted',
|
|
292
|
+
'decoration-dashed',
|
|
293
|
+
'decoration-wavy'
|
|
294
|
+
],
|
|
295
|
+
// Text transform
|
|
296
|
+
'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],
|
|
297
|
+
// Vertical align
|
|
298
|
+
'vertical-align': [
|
|
299
|
+
'align-baseline',
|
|
300
|
+
'align-top',
|
|
301
|
+
'align-middle',
|
|
302
|
+
'align-bottom',
|
|
303
|
+
'align-text-top',
|
|
304
|
+
'align-text-bottom',
|
|
305
|
+
'align-sub',
|
|
306
|
+
'align-super'
|
|
307
|
+
],
|
|
308
|
+
// Resize
|
|
309
|
+
resize: ['resize-none', 'resize-y', 'resize-x', 'resize'],
|
|
310
|
+
// Scroll snap align
|
|
311
|
+
'scroll-snap-align': ['snap-start', 'snap-end', 'snap-center', 'snap-align-none'],
|
|
312
|
+
// Scroll snap stop
|
|
313
|
+
'scroll-snap-stop': ['snap-normal', 'snap-always'],
|
|
314
|
+
// Scroll snap type
|
|
315
|
+
'scroll-snap-type': ['snap-none', 'snap-x', 'snap-y', 'snap-both'],
|
|
316
|
+
// Scroll snap strictness (mandatory/proximity)
|
|
317
|
+
'scroll-snap-strictness': ['snap-mandatory', 'snap-proximity'],
|
|
318
|
+
// Touch action
|
|
319
|
+
'touch-action': [
|
|
320
|
+
'touch-auto',
|
|
321
|
+
'touch-none',
|
|
322
|
+
'touch-pan-x',
|
|
323
|
+
'touch-pan-left',
|
|
324
|
+
'touch-pan-right',
|
|
325
|
+
'touch-pan-y',
|
|
326
|
+
'touch-pan-up',
|
|
327
|
+
'touch-pan-down',
|
|
328
|
+
'touch-pinch-zoom',
|
|
329
|
+
'touch-manipulation'
|
|
330
|
+
],
|
|
331
|
+
// User select
|
|
332
|
+
'user-select': ['select-none', 'select-text', 'select-all', 'select-auto'],
|
|
333
|
+
// Pointer events
|
|
334
|
+
'pointer-events': ['pointer-events-none', 'pointer-events-auto'],
|
|
335
|
+
// Will change
|
|
336
|
+
'will-change': [
|
|
337
|
+
'will-change-auto',
|
|
338
|
+
'will-change-scroll',
|
|
339
|
+
'will-change-contents',
|
|
340
|
+
'will-change-transform'
|
|
341
|
+
],
|
|
342
|
+
// Appearance
|
|
343
|
+
appearance: ['appearance-none', 'appearance-auto'],
|
|
344
|
+
// Cursor
|
|
345
|
+
cursor: [
|
|
346
|
+
'cursor-auto',
|
|
347
|
+
'cursor-default',
|
|
348
|
+
'cursor-pointer',
|
|
349
|
+
'cursor-wait',
|
|
350
|
+
'cursor-text',
|
|
351
|
+
'cursor-move',
|
|
352
|
+
'cursor-help',
|
|
353
|
+
'cursor-not-allowed',
|
|
354
|
+
'cursor-none',
|
|
355
|
+
'cursor-context-menu',
|
|
356
|
+
'cursor-progress',
|
|
357
|
+
'cursor-cell',
|
|
358
|
+
'cursor-crosshair',
|
|
359
|
+
'cursor-vertical-text',
|
|
360
|
+
'cursor-alias',
|
|
361
|
+
'cursor-copy',
|
|
362
|
+
'cursor-no-drop',
|
|
363
|
+
'cursor-grab',
|
|
364
|
+
'cursor-grabbing',
|
|
365
|
+
'cursor-all-scroll',
|
|
366
|
+
'cursor-col-resize',
|
|
367
|
+
'cursor-row-resize',
|
|
368
|
+
'cursor-n-resize',
|
|
369
|
+
'cursor-e-resize',
|
|
370
|
+
'cursor-s-resize',
|
|
371
|
+
'cursor-w-resize',
|
|
372
|
+
'cursor-ne-resize',
|
|
373
|
+
'cursor-nw-resize',
|
|
374
|
+
'cursor-se-resize',
|
|
375
|
+
'cursor-sw-resize',
|
|
376
|
+
'cursor-ew-resize',
|
|
377
|
+
'cursor-ns-resize',
|
|
378
|
+
'cursor-nesw-resize',
|
|
379
|
+
'cursor-nwse-resize',
|
|
380
|
+
'cursor-zoom-in',
|
|
381
|
+
'cursor-zoom-out'
|
|
382
|
+
],
|
|
383
|
+
// Fill (SVG)
|
|
384
|
+
'fill-rule': ['fill-none'],
|
|
385
|
+
// Stroke linecap
|
|
386
|
+
'stroke-linecap': ['stroke-cap-auto', 'stroke-cap-square', 'stroke-cap-round'],
|
|
387
|
+
// Stroke linejoin
|
|
388
|
+
'stroke-linejoin': [
|
|
389
|
+
'stroke-join-auto',
|
|
390
|
+
'stroke-join-arcs',
|
|
391
|
+
'stroke-join-bevel',
|
|
392
|
+
'stroke-join-miter',
|
|
393
|
+
'stroke-join-miter-clip',
|
|
394
|
+
'stroke-join-round'
|
|
395
|
+
],
|
|
396
|
+
// Screen readers
|
|
397
|
+
'screen-reader': ['sr-only', 'not-sr-only'],
|
|
398
|
+
// Forced color adjust
|
|
399
|
+
'forced-color-adjust': ['forced-color-adjust-auto', 'forced-color-adjust-none']
|
|
400
|
+
};
|
|
401
|
+
/**
|
|
402
|
+
* Service for detecting conflicting Tailwind CSS utility classes.
|
|
403
|
+
* Conflicting classes are utilities that set the same CSS property to different values.
|
|
404
|
+
*/
|
|
405
|
+
class TailwindConflictDetector {
|
|
406
|
+
constructor() {
|
|
407
|
+
this.classToGroup = new Map();
|
|
408
|
+
this.groupToClasses = new Map();
|
|
409
|
+
// Build reverse lookup maps
|
|
410
|
+
for (const [group, classes] of Object.entries(CONFLICT_GROUPS)) {
|
|
411
|
+
const classSet = new Set(classes);
|
|
412
|
+
this.groupToClasses.set(group, classSet);
|
|
413
|
+
for (const className of classes) {
|
|
414
|
+
this.classToGroup.set(className, group);
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
/**
|
|
419
|
+
* Get the conflict group for a class name, if any.
|
|
420
|
+
* Returns the CSS property name that this class affects.
|
|
421
|
+
*/
|
|
422
|
+
getConflictGroup(className) {
|
|
423
|
+
// Handle responsive/state variants by extracting base class
|
|
424
|
+
// e.g., "md:text-left" -> "text-left", "hover:flex" -> "flex"
|
|
425
|
+
const baseClass = this.extractBaseClass(className);
|
|
426
|
+
return this.classToGroup.get(baseClass) ?? null;
|
|
427
|
+
}
|
|
428
|
+
/**
|
|
429
|
+
* Extract the prefix (variants) from a class name.
|
|
430
|
+
* e.g., "md:hover:text-left" -> "md:hover:"
|
|
431
|
+
*/
|
|
432
|
+
extractPrefix(className) {
|
|
433
|
+
const parts = className.split(':');
|
|
434
|
+
if (parts.length <= 1)
|
|
435
|
+
return '';
|
|
436
|
+
return parts.slice(0, -1).join(':') + ':';
|
|
437
|
+
}
|
|
438
|
+
/**
|
|
439
|
+
* Extract the base class from a potentially prefixed class name.
|
|
440
|
+
* Handles responsive variants (sm:, md:, lg:, xl:, 2xl:) and state variants (hover:, focus:, etc.)
|
|
441
|
+
*/
|
|
442
|
+
extractBaseClass(className) {
|
|
443
|
+
// Split by colon and take the last part (the actual utility)
|
|
444
|
+
const parts = className.split(':');
|
|
445
|
+
return parts[parts.length - 1];
|
|
446
|
+
}
|
|
447
|
+
/**
|
|
448
|
+
* Find all conflicting classes in a list of ClassNameInfo.
|
|
449
|
+
* Returns ConflictInfo for each class that conflicts with another.
|
|
450
|
+
*/
|
|
451
|
+
findConflicts(classNames) {
|
|
452
|
+
const conflicts = [];
|
|
453
|
+
// Group classes by attributeId (conflicts are only within same attribute)
|
|
454
|
+
const byAttribute = new Map();
|
|
455
|
+
for (const classInfo of classNames) {
|
|
456
|
+
const key = classInfo.attributeId || `${classInfo.absoluteStart}`;
|
|
457
|
+
if (!byAttribute.has(key)) {
|
|
458
|
+
byAttribute.set(key, []);
|
|
459
|
+
}
|
|
460
|
+
byAttribute.get(key).push(classInfo);
|
|
461
|
+
}
|
|
462
|
+
// For each attribute, find conflicts
|
|
463
|
+
for (const classes of byAttribute.values()) {
|
|
464
|
+
const attributeConflicts = this.findConflictsInAttribute(classes);
|
|
465
|
+
conflicts.push(...attributeConflicts);
|
|
466
|
+
}
|
|
467
|
+
return conflicts;
|
|
468
|
+
}
|
|
469
|
+
/**
|
|
470
|
+
* Find conflicts within a single attribute's classes.
|
|
471
|
+
* Handles conditional branches - classes in mutually exclusive branches don't conflict.
|
|
472
|
+
* Also handles base vs variant separation for tv()/cva() - variants are designed to override base.
|
|
473
|
+
*/
|
|
474
|
+
findConflictsInAttribute(classes) {
|
|
475
|
+
const conflicts = [];
|
|
476
|
+
// First, separate base classes from variant classes (for tv()/cva())
|
|
477
|
+
// Variant classes are designed to override base, so they don't conflict with base
|
|
478
|
+
const baseClasses = classes.filter(c => !c.isVariant);
|
|
479
|
+
const variantClasses = classes.filter(c => c.isVariant);
|
|
480
|
+
// Process base classes and variant classes separately
|
|
481
|
+
// They can conflict within themselves, but NOT with each other
|
|
482
|
+
conflicts.push(...this.findConflictsInClassGroup(baseClasses));
|
|
483
|
+
conflicts.push(...this.findConflictsInClassGroup(variantClasses));
|
|
484
|
+
return conflicts;
|
|
485
|
+
}
|
|
486
|
+
/**
|
|
487
|
+
* Find conflicts within a group of classes (either all base or all variant).
|
|
488
|
+
* Handles conditional branches - classes in mutually exclusive branches don't conflict.
|
|
489
|
+
*/
|
|
490
|
+
findConflictsInClassGroup(classes) {
|
|
491
|
+
const conflicts = [];
|
|
492
|
+
// Separate root classes from branch classes
|
|
493
|
+
const rootClasses = classes.filter(c => !c.conditionalBranchId);
|
|
494
|
+
const branchClasses = classes.filter(c => c.conditionalBranchId);
|
|
495
|
+
// 1. Find conflicts among root classes
|
|
496
|
+
const rootConflicts = this.findConflictsInList(rootClasses);
|
|
497
|
+
conflicts.push(...rootConflicts);
|
|
498
|
+
// 2. Find conflicts between root classes and branch classes
|
|
499
|
+
// (if a class is at root and conflicts with a class in ANY branch, that's a conflict)
|
|
500
|
+
for (const rootClass of rootClasses) {
|
|
501
|
+
const rootGroup = this.getConflictGroup(rootClass.className);
|
|
502
|
+
if (!rootGroup)
|
|
503
|
+
continue;
|
|
504
|
+
for (const branchClass of branchClasses) {
|
|
505
|
+
const branchGroup = this.getConflictGroup(branchClass.className);
|
|
506
|
+
if (branchGroup === rootGroup && rootClass.className !== branchClass.className) {
|
|
507
|
+
// Root and branch class conflict
|
|
508
|
+
conflicts.push({
|
|
509
|
+
classInfo: branchClass,
|
|
510
|
+
conflictsWith: [rootClass.className],
|
|
511
|
+
cssProperty: rootGroup
|
|
512
|
+
});
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
// 3. Find conflicts within the same branch
|
|
517
|
+
// Group branch classes by their branch ID
|
|
518
|
+
const byBranch = new Map();
|
|
519
|
+
for (const branchClass of branchClasses) {
|
|
520
|
+
const branchId = branchClass.conditionalBranchId;
|
|
521
|
+
if (!byBranch.has(branchId)) {
|
|
522
|
+
byBranch.set(branchId, []);
|
|
523
|
+
}
|
|
524
|
+
byBranch.get(branchId).push(branchClass);
|
|
525
|
+
}
|
|
526
|
+
for (const branchClassList of byBranch.values()) {
|
|
527
|
+
const branchConflicts = this.findConflictsInList(branchClassList);
|
|
528
|
+
conflicts.push(...branchConflicts);
|
|
529
|
+
}
|
|
530
|
+
// Note: We do NOT flag conflicts between true and false branches of a ternary
|
|
531
|
+
// because they are mutually exclusive at runtime
|
|
532
|
+
return conflicts;
|
|
533
|
+
}
|
|
534
|
+
/**
|
|
535
|
+
* Find conflicts in a flat list of classes (no branch handling).
|
|
536
|
+
* Used for root classes or classes within the same branch.
|
|
537
|
+
*
|
|
538
|
+
* Classes with different prefixes (e.g., sm:text-left vs md:text-center) do NOT conflict
|
|
539
|
+
* because they apply at different breakpoints/states.
|
|
540
|
+
*
|
|
541
|
+
* All classes involved in a conflict are flagged, not just subsequent ones.
|
|
542
|
+
*/
|
|
543
|
+
findConflictsInList(classes) {
|
|
544
|
+
const conflicts = [];
|
|
545
|
+
// Group classes by their conflict group AND prefix
|
|
546
|
+
// Key format: "group:prefix" (e.g., "text-align:" or "text-align:md:")
|
|
547
|
+
const byGroupAndPrefix = new Map();
|
|
548
|
+
for (const classInfo of classes) {
|
|
549
|
+
const group = this.getConflictGroup(classInfo.className);
|
|
550
|
+
if (!group)
|
|
551
|
+
continue;
|
|
552
|
+
const prefix = this.extractPrefix(classInfo.className);
|
|
553
|
+
const key = `${group}:${prefix}`;
|
|
554
|
+
if (!byGroupAndPrefix.has(key)) {
|
|
555
|
+
byGroupAndPrefix.set(key, []);
|
|
556
|
+
}
|
|
557
|
+
byGroupAndPrefix.get(key).push(classInfo);
|
|
558
|
+
}
|
|
559
|
+
// For each group+prefix with multiple classes, create conflict entries
|
|
560
|
+
for (const [key, groupClasses] of byGroupAndPrefix) {
|
|
561
|
+
if (groupClasses.length <= 1)
|
|
562
|
+
continue;
|
|
563
|
+
// Extract the group name from the key
|
|
564
|
+
const group = key.split(':')[0];
|
|
565
|
+
// Get unique base class names in this conflict (without prefix)
|
|
566
|
+
const uniqueBaseClassNames = [
|
|
567
|
+
...new Set(groupClasses.map(c => this.extractBaseClass(c.className)))
|
|
568
|
+
];
|
|
569
|
+
if (uniqueBaseClassNames.length <= 1)
|
|
570
|
+
continue; // Same class repeated, not a conflict (handled by duplicate detection)
|
|
571
|
+
// Mark ALL classes in the conflict group as conflicting
|
|
572
|
+
// Each class shows what other classes it conflicts with
|
|
573
|
+
for (const currentClass of groupClasses) {
|
|
574
|
+
const currentBaseClass = this.extractBaseClass(currentClass.className);
|
|
575
|
+
const conflictingClasses = groupClasses
|
|
576
|
+
.filter(c => this.extractBaseClass(c.className) !== currentBaseClass)
|
|
577
|
+
.map(c => c.className);
|
|
578
|
+
// Only add if it actually conflicts with a different class
|
|
579
|
+
if (conflictingClasses.length > 0) {
|
|
580
|
+
conflicts.push({
|
|
581
|
+
classInfo: currentClass,
|
|
582
|
+
conflictsWith: [...new Set(conflictingClasses)],
|
|
583
|
+
cssProperty: group
|
|
584
|
+
});
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
}
|
|
588
|
+
return conflicts;
|
|
589
|
+
}
|
|
590
|
+
/**
|
|
591
|
+
* Check if two class names conflict with each other.
|
|
592
|
+
*/
|
|
593
|
+
doClassesConflict(className1, className2) {
|
|
594
|
+
const group1 = this.getConflictGroup(className1);
|
|
595
|
+
const group2 = this.getConflictGroup(className2);
|
|
596
|
+
return group1 !== null && group1 === group2 && className1 !== className2;
|
|
597
|
+
}
|
|
598
|
+
/**
|
|
599
|
+
* Get all classes that would conflict with a given class.
|
|
600
|
+
*/
|
|
601
|
+
getConflictingClasses(className) {
|
|
602
|
+
const group = this.getConflictGroup(className);
|
|
603
|
+
if (!group)
|
|
604
|
+
return [];
|
|
605
|
+
const groupClasses = this.groupToClasses.get(group);
|
|
606
|
+
if (!groupClasses)
|
|
607
|
+
return [];
|
|
608
|
+
return [...groupClasses].filter(c => c !== this.extractBaseClass(className));
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
exports.TailwindConflictDetector = TailwindConflictDetector;
|
|
612
|
+
//# sourceMappingURL=TailwindConflictDetector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TailwindConflictDetector.js","sourceRoot":"","sources":["../../src/infrastructure/TailwindConflictDetector.ts"],"names":[],"mappings":"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"}
|