tailwind-typescript-plugin 1.4.0-beta.23 → 1.4.0-beta.25

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 (94) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/lib/core/interfaces.d.ts +17 -1
  3. package/lib/core/interfaces.d.ts.map +1 -1
  4. package/lib/extractors/BaseExtractor.d.ts +7 -1
  5. package/lib/extractors/BaseExtractor.d.ts.map +1 -1
  6. package/lib/extractors/BaseExtractor.js +10 -0
  7. package/lib/extractors/BaseExtractor.js.map +1 -1
  8. package/lib/extractors/BaseExtractor.spec.d.ts +2 -0
  9. package/lib/extractors/BaseExtractor.spec.d.ts.map +1 -0
  10. package/lib/extractors/BaseExtractor.spec.js +421 -0
  11. package/lib/extractors/BaseExtractor.spec.js.map +1 -0
  12. package/lib/extractors/CvaExtractor.spec.d.ts +2 -0
  13. package/lib/extractors/CvaExtractor.spec.d.ts.map +1 -0
  14. package/lib/extractors/CvaExtractor.spec.js +1177 -0
  15. package/lib/extractors/CvaExtractor.spec.js.map +1 -0
  16. package/lib/extractors/ExpressionExtractor.spec.d.ts +2 -0
  17. package/lib/extractors/ExpressionExtractor.spec.d.ts.map +1 -0
  18. package/lib/extractors/ExpressionExtractor.spec.js +316 -0
  19. package/lib/extractors/ExpressionExtractor.spec.js.map +1 -0
  20. package/lib/extractors/JsxAttributeExtractor.d.ts +5 -0
  21. package/lib/extractors/JsxAttributeExtractor.d.ts.map +1 -1
  22. package/lib/extractors/JsxAttributeExtractor.js +6 -0
  23. package/lib/extractors/JsxAttributeExtractor.js.map +1 -1
  24. package/lib/extractors/JsxAttributeExtractor.spec.d.ts +2 -0
  25. package/lib/extractors/JsxAttributeExtractor.spec.d.ts.map +1 -0
  26. package/lib/extractors/JsxAttributeExtractor.spec.js +430 -0
  27. package/lib/extractors/JsxAttributeExtractor.spec.js.map +1 -0
  28. package/lib/extractors/TailwindVariantsExtractor.spec.d.ts +2 -0
  29. package/lib/extractors/TailwindVariantsExtractor.spec.d.ts.map +1 -0
  30. package/lib/extractors/TailwindVariantsExtractor.spec.js +1407 -0
  31. package/lib/extractors/TailwindVariantsExtractor.spec.js.map +1 -0
  32. package/lib/extractors/TemplateExpressionExtractor.spec.d.ts +2 -0
  33. package/lib/extractors/TemplateExpressionExtractor.spec.d.ts.map +1 -0
  34. package/lib/extractors/TemplateExpressionExtractor.spec.js +240 -0
  35. package/lib/extractors/TemplateExpressionExtractor.spec.js.map +1 -0
  36. package/lib/extractors/VariableReferenceExtractor.spec.d.ts +2 -0
  37. package/lib/extractors/VariableReferenceExtractor.spec.d.ts.map +1 -0
  38. package/lib/extractors/VariableReferenceExtractor.spec.js +138 -0
  39. package/lib/extractors/VariableReferenceExtractor.spec.js.map +1 -0
  40. package/lib/extractors/VueAttributeExtractor.d.ts +6 -0
  41. package/lib/extractors/VueAttributeExtractor.d.ts.map +1 -1
  42. package/lib/extractors/VueAttributeExtractor.js +7 -0
  43. package/lib/extractors/VueAttributeExtractor.js.map +1 -1
  44. package/lib/plugin/TailwindTypescriptPlugin.d.ts +9 -0
  45. package/lib/plugin/TailwindTypescriptPlugin.d.ts.map +1 -1
  46. package/lib/plugin/TailwindTypescriptPlugin.js +36 -11
  47. package/lib/plugin/TailwindTypescriptPlugin.js.map +1 -1
  48. package/lib/services/ClassNameExtractionService.d.ts +8 -3
  49. package/lib/services/ClassNameExtractionService.d.ts.map +1 -1
  50. package/lib/services/ClassNameExtractionService.js +26 -25
  51. package/lib/services/ClassNameExtractionService.js.map +1 -1
  52. package/lib/services/ClassNameExtractionService.spec.js +0 -7
  53. package/lib/services/ClassNameExtractionService.spec.js.map +1 -1
  54. package/lib/services/ConfigSchemaValidator.d.ts +40 -0
  55. package/lib/services/ConfigSchemaValidator.d.ts.map +1 -0
  56. package/lib/services/ConfigSchemaValidator.js +139 -0
  57. package/lib/services/ConfigSchemaValidator.js.map +1 -0
  58. package/lib/services/ConfigSchemaValidator.spec.d.ts +2 -0
  59. package/lib/services/ConfigSchemaValidator.spec.d.ts.map +1 -0
  60. package/lib/services/ConfigSchemaValidator.spec.js +344 -0
  61. package/lib/services/ConfigSchemaValidator.spec.js.map +1 -0
  62. package/lib/services/ConflictClassDetection.spec.js +48 -0
  63. package/lib/services/ConflictClassDetection.spec.js.map +1 -1
  64. package/lib/services/DiagnosticService.spec.d.ts +2 -0
  65. package/lib/services/DiagnosticService.spec.d.ts.map +1 -0
  66. package/lib/services/DiagnosticService.spec.js +259 -0
  67. package/lib/services/DiagnosticService.spec.js.map +1 -0
  68. package/lib/services/FileDiagnosticCache.spec.d.ts +2 -0
  69. package/lib/services/FileDiagnosticCache.spec.d.ts.map +1 -0
  70. package/lib/services/FileDiagnosticCache.spec.js +213 -0
  71. package/lib/services/FileDiagnosticCache.spec.js.map +1 -0
  72. package/lib/services/PerformanceCache.spec.d.ts +2 -0
  73. package/lib/services/PerformanceCache.spec.d.ts.map +1 -0
  74. package/lib/services/PerformanceCache.spec.js +168 -0
  75. package/lib/services/PerformanceCache.spec.js.map +1 -0
  76. package/lib/services/PluginConfigService.d.ts +19 -0
  77. package/lib/services/PluginConfigService.d.ts.map +1 -1
  78. package/lib/services/PluginConfigService.js +29 -0
  79. package/lib/services/PluginConfigService.js.map +1 -1
  80. package/lib/services/ValidationService.spec.d.ts +2 -0
  81. package/lib/services/ValidationService.spec.d.ts.map +1 -0
  82. package/lib/services/ValidationService.spec.js +289 -0
  83. package/lib/services/ValidationService.spec.js.map +1 -0
  84. package/lib/utils/FrameworkDetector.d.ts +1 -2
  85. package/lib/utils/FrameworkDetector.d.ts.map +1 -1
  86. package/lib/utils/FrameworkDetector.js +0 -5
  87. package/lib/utils/FrameworkDetector.js.map +1 -1
  88. package/lib/utils/FrameworkDetector.spec.js +1 -9
  89. package/lib/utils/FrameworkDetector.spec.js.map +1 -1
  90. package/package.json +10 -3
  91. package/lib/extractors/SvelteAttributeExtractor.d.ts +0 -17
  92. package/lib/extractors/SvelteAttributeExtractor.d.ts.map +0 -1
  93. package/lib/extractors/SvelteAttributeExtractor.js +0 -27
  94. package/lib/extractors/SvelteAttributeExtractor.js.map +0 -1
@@ -0,0 +1,289 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const ts = __importStar(require("typescript/lib/tsserverlibrary"));
37
+ const ClassNameExtractionService_1 = require("./ClassNameExtractionService");
38
+ const DiagnosticService_1 = require("./DiagnosticService");
39
+ const PluginConfigService_1 = require("./PluginConfigService");
40
+ const ValidationService_1 = require("./ValidationService");
41
+ describe('ValidationService', () => {
42
+ let validationService;
43
+ let mockValidator;
44
+ let extractionService;
45
+ let diagnosticService;
46
+ let configService;
47
+ const createSourceFile = (code, fileName = 'test.tsx') => {
48
+ return ts.createSourceFile(fileName, code, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
49
+ };
50
+ beforeEach(() => {
51
+ // Create mock validator
52
+ mockValidator = {
53
+ isValidClass: jest.fn((className) => {
54
+ // Common valid Tailwind classes
55
+ const validClasses = [
56
+ 'flex',
57
+ 'items-center',
58
+ 'justify-center',
59
+ 'text-red-500',
60
+ 'text-blue-500',
61
+ 'bg-white',
62
+ 'p-4',
63
+ 'mt-4',
64
+ 'mt-8',
65
+ 'hidden',
66
+ 'block'
67
+ ];
68
+ return validClasses.includes(className);
69
+ }),
70
+ isInitialized: jest.fn(() => true),
71
+ setAllowedClasses: jest.fn()
72
+ };
73
+ // Create real services
74
+ extractionService = new ClassNameExtractionService_1.ClassNameExtractionService(false, false);
75
+ diagnosticService = new DiagnosticService_1.DiagnosticService();
76
+ configService = new PluginConfigService_1.PluginConfigService({});
77
+ validationService = new ValidationService_1.ValidationService(extractionService, diagnosticService, mockValidator, configService);
78
+ });
79
+ describe('validateFile', () => {
80
+ it('should return empty array when validator is not initialized', () => {
81
+ mockValidator.isInitialized.mockReturnValue(false);
82
+ const sourceFile = createSourceFile('<div className="flex">Hello</div>');
83
+ const diagnostics = validationService.validateFile(ts, sourceFile, []);
84
+ expect(diagnostics).toEqual([]);
85
+ });
86
+ it('should detect invalid Tailwind classes', () => {
87
+ const sourceFile = createSourceFile('<div className="invalid-class">Hello</div>');
88
+ const diagnostics = validationService.validateFile(ts, sourceFile, []);
89
+ expect(diagnostics.length).toBeGreaterThan(0);
90
+ expect(diagnostics[0].code).toBe(DiagnosticService_1.TAILWIND_DIAGNOSTIC_CODE);
91
+ expect(diagnostics[0].messageText).toContain('invalid-class');
92
+ });
93
+ it('should not report valid Tailwind classes', () => {
94
+ const sourceFile = createSourceFile('<div className="flex items-center">Hello</div>');
95
+ const diagnostics = validationService.validateFile(ts, sourceFile, []);
96
+ // Filter to only validation errors (not duplicate/conflict warnings)
97
+ const validationErrors = diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_DIAGNOSTIC_CODE);
98
+ expect(validationErrors).toHaveLength(0);
99
+ });
100
+ it('should detect multiple invalid classes', () => {
101
+ const sourceFile = createSourceFile('<div className="invalid1 flex invalid2">Hello</div>');
102
+ const diagnostics = validationService.validateFile(ts, sourceFile, []);
103
+ const validationErrors = diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_DIAGNOSTIC_CODE);
104
+ expect(validationErrors.length).toBe(2);
105
+ });
106
+ });
107
+ describe('duplicate class detection', () => {
108
+ it('should detect duplicate classes within same attribute', () => {
109
+ const sourceFile = createSourceFile('<div className="flex flex">Hello</div>');
110
+ const diagnostics = validationService.validateFile(ts, sourceFile, []);
111
+ const duplicateWarnings = diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_DUPLICATE_CODE);
112
+ expect(duplicateWarnings.length).toBeGreaterThan(0);
113
+ });
114
+ it('should not flag classes in different attributes as duplicates', () => {
115
+ const sourceFile = createSourceFile(`
116
+ <div className="flex">
117
+ <span className="flex">Hello</span>
118
+ </div>
119
+ `);
120
+ const diagnostics = validationService.validateFile(ts, sourceFile, []);
121
+ const duplicateWarnings = diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_DUPLICATE_CODE);
122
+ expect(duplicateWarnings).toHaveLength(0);
123
+ });
124
+ });
125
+ describe('validation configuration', () => {
126
+ it('should respect validation disabled config', () => {
127
+ const disabledConfigService = new PluginConfigService_1.PluginConfigService({
128
+ validation: { enabled: false }
129
+ });
130
+ const service = new ValidationService_1.ValidationService(extractionService, diagnosticService, mockValidator, disabledConfigService);
131
+ const sourceFile = createSourceFile('<div className="invalid-class">Hello</div>');
132
+ const diagnostics = service.validateFile(ts, sourceFile, []);
133
+ const validationErrors = diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_DIAGNOSTIC_CODE);
134
+ expect(validationErrors).toHaveLength(0);
135
+ });
136
+ it('should respect validation severity config', () => {
137
+ const warningConfigService = new PluginConfigService_1.PluginConfigService({
138
+ validation: { severity: 'warning' }
139
+ });
140
+ const service = new ValidationService_1.ValidationService(extractionService, diagnosticService, mockValidator, warningConfigService);
141
+ const sourceFile = createSourceFile('<div className="invalid-class">Hello</div>');
142
+ const diagnostics = service.validateFile(ts, sourceFile, []);
143
+ const validationErrors = diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_DIAGNOSTIC_CODE);
144
+ expect(validationErrors.length).toBeGreaterThan(0);
145
+ expect(validationErrors[0].category).toBe(ts.DiagnosticCategory.Warning);
146
+ });
147
+ it('should not report when severity is off', () => {
148
+ const offConfigService = new PluginConfigService_1.PluginConfigService({
149
+ validation: { severity: 'off' }
150
+ });
151
+ const service = new ValidationService_1.ValidationService(extractionService, diagnosticService, mockValidator, offConfigService);
152
+ const sourceFile = createSourceFile('<div className="invalid-class">Hello</div>');
153
+ const diagnostics = service.validateFile(ts, sourceFile, []);
154
+ const validationErrors = diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_DIAGNOSTIC_CODE);
155
+ expect(validationErrors).toHaveLength(0);
156
+ });
157
+ });
158
+ describe('lint configuration', () => {
159
+ it('should respect lint disabled config', () => {
160
+ const disabledLintConfigService = new PluginConfigService_1.PluginConfigService({
161
+ lint: { enabled: false }
162
+ });
163
+ const service = new ValidationService_1.ValidationService(extractionService, diagnosticService, mockValidator, disabledLintConfigService);
164
+ const sourceFile = createSourceFile('<div className="flex flex">Hello</div>');
165
+ const diagnostics = service.validateFile(ts, sourceFile, []);
166
+ const duplicateWarnings = diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_DUPLICATE_CODE);
167
+ expect(duplicateWarnings).toHaveLength(0);
168
+ });
169
+ it('should respect repeated classes disabled config', () => {
170
+ const configService = new PluginConfigService_1.PluginConfigService({
171
+ lint: {
172
+ enabled: true,
173
+ repeatedClasses: { enabled: false }
174
+ }
175
+ });
176
+ const service = new ValidationService_1.ValidationService(extractionService, diagnosticService, mockValidator, configService);
177
+ const sourceFile = createSourceFile('<div className="flex flex">Hello</div>');
178
+ const diagnostics = service.validateFile(ts, sourceFile, []);
179
+ const duplicateWarnings = diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_DUPLICATE_CODE);
180
+ expect(duplicateWarnings).toHaveLength(0);
181
+ });
182
+ it('should respect repeated classes severity config', () => {
183
+ const configService = new PluginConfigService_1.PluginConfigService({
184
+ lint: {
185
+ repeatedClasses: { severity: 'error' }
186
+ }
187
+ });
188
+ const service = new ValidationService_1.ValidationService(extractionService, diagnosticService, mockValidator, configService);
189
+ const sourceFile = createSourceFile('<div className="flex flex">Hello</div>');
190
+ const diagnostics = service.validateFile(ts, sourceFile, []);
191
+ const duplicateWarnings = diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_DUPLICATE_CODE);
192
+ expect(duplicateWarnings.length).toBeGreaterThan(0);
193
+ expect(duplicateWarnings[0].category).toBe(ts.DiagnosticCategory.Error);
194
+ });
195
+ });
196
+ describe('custom class attributes', () => {
197
+ it('should extract from custom class attributes', () => {
198
+ const customConfigService = new PluginConfigService_1.PluginConfigService({
199
+ classAttributes: ['colorStyles']
200
+ });
201
+ const service = new ValidationService_1.ValidationService(extractionService, diagnosticService, mockValidator, customConfigService);
202
+ const sourceFile = createSourceFile('<View colorStyles="invalid-custom-class">Hello</View>');
203
+ const diagnostics = service.validateFile(ts, sourceFile, []);
204
+ const validationErrors = diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_DIAGNOSTIC_CODE);
205
+ expect(validationErrors.length).toBeGreaterThan(0);
206
+ expect(validationErrors[0].messageText).toContain('invalid-custom-class');
207
+ });
208
+ it('should still extract from default attributes when custom ones are added', () => {
209
+ const customConfigService = new PluginConfigService_1.PluginConfigService({
210
+ classAttributes: ['customStyles']
211
+ });
212
+ const service = new ValidationService_1.ValidationService(extractionService, diagnosticService, mockValidator, customConfigService);
213
+ const sourceFile = createSourceFile('<div className="invalid-class">Hello</div>');
214
+ const diagnostics = service.validateFile(ts, sourceFile, []);
215
+ const validationErrors = diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_DIAGNOSTIC_CODE);
216
+ expect(validationErrors.length).toBeGreaterThan(0);
217
+ });
218
+ });
219
+ describe('JSX expressions', () => {
220
+ it('should validate classes in string literals', () => {
221
+ const sourceFile = createSourceFile("<div className={'invalid-expr'}>Hello</div>");
222
+ const diagnostics = validationService.validateFile(ts, sourceFile, []);
223
+ const validationErrors = diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_DIAGNOSTIC_CODE);
224
+ expect(validationErrors.length).toBeGreaterThan(0);
225
+ });
226
+ it('should validate classes in template literals', () => {
227
+ const sourceFile = createSourceFile('<div className={`flex invalid-template`}>Hello</div>');
228
+ const diagnostics = validationService.validateFile(ts, sourceFile, []);
229
+ const validationErrors = diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_DIAGNOSTIC_CODE);
230
+ expect(validationErrors.length).toBeGreaterThan(0);
231
+ expect(validationErrors[0].messageText).toContain('invalid-template');
232
+ });
233
+ it('should validate classes in ternary expressions', () => {
234
+ const sourceFile = createSourceFile("<div className={true ? 'flex' : 'invalid-ternary'}>Hello</div>");
235
+ const diagnostics = validationService.validateFile(ts, sourceFile, []);
236
+ const validationErrors = diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_DIAGNOSTIC_CODE);
237
+ expect(validationErrors.length).toBeGreaterThan(0);
238
+ expect(validationErrors[0].messageText).toContain('invalid-ternary');
239
+ });
240
+ });
241
+ describe('empty and edge cases', () => {
242
+ it('should handle empty className', () => {
243
+ const sourceFile = createSourceFile('<div className="">Hello</div>');
244
+ const diagnostics = validationService.validateFile(ts, sourceFile, []);
245
+ expect(diagnostics).toHaveLength(0);
246
+ });
247
+ it('should handle elements without className', () => {
248
+ const sourceFile = createSourceFile('<div>Hello</div>');
249
+ const diagnostics = validationService.validateFile(ts, sourceFile, []);
250
+ expect(diagnostics).toHaveLength(0);
251
+ });
252
+ it('should handle multiple elements', () => {
253
+ const sourceFile = createSourceFile(`
254
+ <div className="invalid1">
255
+ <span className="flex">
256
+ <p className="invalid2">Hello</p>
257
+ </span>
258
+ </div>
259
+ `);
260
+ const diagnostics = validationService.validateFile(ts, sourceFile, []);
261
+ const validationErrors = diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_DIAGNOSTIC_CODE);
262
+ expect(validationErrors.length).toBe(2);
263
+ });
264
+ it('should handle self-closing elements', () => {
265
+ const sourceFile = createSourceFile('<img className="invalid-self-closing" />');
266
+ const diagnostics = validationService.validateFile(ts, sourceFile, []);
267
+ const validationErrors = diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_DIAGNOSTIC_CODE);
268
+ expect(validationErrors.length).toBeGreaterThan(0);
269
+ });
270
+ });
271
+ describe('file type support', () => {
272
+ it('should validate TSX files', () => {
273
+ const sourceFile = createSourceFile('<div className="invalid-class">Hello</div>', 'Component.tsx');
274
+ const diagnostics = validationService.validateFile(ts, sourceFile, []);
275
+ expect(diagnostics.length).toBeGreaterThan(0);
276
+ });
277
+ it('should validate JSX files', () => {
278
+ const sourceFile = ts.createSourceFile('Component.jsx', '<div className="invalid-class">Hello</div>', ts.ScriptTarget.Latest, true, ts.ScriptKind.JSX);
279
+ const diagnostics = validationService.validateFile(ts, sourceFile, []);
280
+ expect(diagnostics.length).toBeGreaterThan(0);
281
+ });
282
+ it('should return empty for unsupported file types', () => {
283
+ const sourceFile = ts.createSourceFile('styles.css', '.class { color: red; }', ts.ScriptTarget.Latest, true);
284
+ const diagnostics = validationService.validateFile(ts, sourceFile, []);
285
+ expect(diagnostics).toHaveLength(0);
286
+ });
287
+ });
288
+ });
289
+ //# sourceMappingURL=ValidationService.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ValidationService.spec.js","sourceRoot":"","sources":["../../src/services/ValidationService.spec.ts"],"names":[],"mappings":"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"}
@@ -3,8 +3,7 @@
3
3
  */
4
4
  export declare enum Framework {
5
5
  JSX = "jsx",
6
- VUE = "vue",
7
- SVELTE = "svelte"
6
+ VUE = "vue"
8
7
  }
9
8
  /**
10
9
  * Detects the framework based on file extension
@@ -1 +1 @@
1
- {"version":3,"file":"FrameworkDetector.d.ts","sourceRoot":"","sources":["../../src/utils/FrameworkDetector.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,oBAAY,SAAS;IACpB,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,MAAM,WAAW;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAwBlE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEzD"}
1
+ {"version":3,"file":"FrameworkDetector.d.ts","sourceRoot":"","sources":["../../src/utils/FrameworkDetector.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,oBAAY,SAAS;IACpB,GAAG,QAAQ;IACX,GAAG,QAAQ;CACX;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAmBlE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEzD"}
@@ -10,7 +10,6 @@ var Framework;
10
10
  (function (Framework) {
11
11
  Framework["JSX"] = "jsx";
12
12
  Framework["VUE"] = "vue";
13
- Framework["SVELTE"] = "svelte";
14
13
  })(Framework || (exports.Framework = Framework = {}));
15
14
  /**
16
15
  * Detects the framework based on file extension
@@ -24,10 +23,6 @@ function detectFramework(fileName) {
24
23
  if (fileName.endsWith('.vue') || fileName.includes('.vue.')) {
25
24
  return Framework.VUE;
26
25
  }
27
- // Svelte components (including virtual .svelte.ts files)
28
- if (fileName.endsWith('.svelte') || fileName.includes('.svelte.')) {
29
- return Framework.SVELTE;
30
- }
31
26
  // JSX/TSX files (React, Solid, etc.)
32
27
  if (fileName.endsWith('.tsx') || fileName.endsWith('.jsx')) {
33
28
  return Framework.JSX;
@@ -1 +1 @@
1
- {"version":3,"file":"FrameworkDetector.js","sourceRoot":"","sources":["../../src/utils/FrameworkDetector.ts"],"names":[],"mappings":";;;AAgBA,0CAwBC;AAQD,0CAEC;AAlDD;;GAEG;AACH,IAAY,SAIX;AAJD,WAAY,SAAS;IACpB,wBAAW,CAAA;IACX,wBAAW,CAAA;IACX,8BAAiB,CAAA;AAClB,CAAC,EAJW,SAAS,yBAAT,SAAS,QAIpB;AAED;;;;;;GAMG;AACH,SAAgB,eAAe,CAAC,QAAgB;IAC/C,0EAA0E;IAC1E,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7D,OAAO,SAAS,CAAC,GAAG,CAAC;IACtB,CAAC;IAED,yDAAyD;IACzD,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QACnE,OAAO,SAAS,CAAC,MAAM,CAAC;IACzB,CAAC;IAED,qCAAqC;IACrC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5D,OAAO,SAAS,CAAC,GAAG,CAAC;IACtB,CAAC;IAED,oDAAoD;IACpD,0CAA0C;IAC1C,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1D,OAAO,SAAS,CAAC,GAAG,CAAC;IACtB,CAAC;IAED,wBAAwB;IACxB,OAAO,IAAI,CAAC;AACb,CAAC;AAED;;;;;GAKG;AACH,SAAgB,eAAe,CAAC,QAAgB;IAC/C,OAAO,eAAe,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC;AAC3C,CAAC"}
1
+ {"version":3,"file":"FrameworkDetector.js","sourceRoot":"","sources":["../../src/utils/FrameworkDetector.ts"],"names":[],"mappings":";;;AAeA,0CAmBC;AAQD,0CAEC;AA5CD;;GAEG;AACH,IAAY,SAGX;AAHD,WAAY,SAAS;IACpB,wBAAW,CAAA;IACX,wBAAW,CAAA;AACZ,CAAC,EAHW,SAAS,yBAAT,SAAS,QAGpB;AAED;;;;;;GAMG;AACH,SAAgB,eAAe,CAAC,QAAgB;IAC/C,0EAA0E;IAC1E,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7D,OAAO,SAAS,CAAC,GAAG,CAAC;IACtB,CAAC;IAED,qCAAqC;IACrC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5D,OAAO,SAAS,CAAC,GAAG,CAAC;IACtB,CAAC;IAED,oDAAoD;IACpD,0CAA0C;IAC1C,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1D,OAAO,SAAS,CAAC,GAAG,CAAC;IACtB,CAAC;IAED,wBAAwB;IACxB,OAAO,IAAI,CAAC;AACb,CAAC;AAED;;;;;GAKG;AACH,SAAgB,eAAe,CAAC,QAAgB;IAC/C,OAAO,eAAe,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC;AAC3C,CAAC"}
@@ -23,10 +23,6 @@ describe('FrameworkDetector', () => {
23
23
  expect((0, FrameworkDetector_1.detectFramework)('App.vue')).toBe(FrameworkDetector_1.Framework.VUE);
24
24
  expect((0, FrameworkDetector_1.detectFramework)('/src/components/Button.vue')).toBe(FrameworkDetector_1.Framework.VUE);
25
25
  });
26
- it('should detect Svelte framework for .svelte files', () => {
27
- expect((0, FrameworkDetector_1.detectFramework)('App.svelte')).toBe(FrameworkDetector_1.Framework.SVELTE);
28
- expect((0, FrameworkDetector_1.detectFramework)('/src/components/Button.svelte')).toBe(FrameworkDetector_1.Framework.SVELTE);
29
- });
30
26
  it('should return null for unsupported file types', () => {
31
27
  expect((0, FrameworkDetector_1.detectFramework)('styles.css')).toBeNull();
32
28
  expect((0, FrameworkDetector_1.detectFramework)('index.html')).toBeNull();
@@ -41,7 +37,6 @@ describe('FrameworkDetector', () => {
41
37
  it('should handle absolute paths', () => {
42
38
  expect((0, FrameworkDetector_1.detectFramework)('/Users/dev/project/src/App.tsx')).toBe(FrameworkDetector_1.Framework.JSX);
43
39
  expect((0, FrameworkDetector_1.detectFramework)('/Users/dev/project/src/App.vue')).toBe(FrameworkDetector_1.Framework.VUE);
44
- expect((0, FrameworkDetector_1.detectFramework)('/Users/dev/project/src/App.svelte')).toBe(FrameworkDetector_1.Framework.SVELTE);
45
40
  });
46
41
  it('should handle Windows paths', () => {
47
42
  expect((0, FrameworkDetector_1.detectFramework)('C:\\Users\\dev\\project\\src\\App.tsx')).toBe(FrameworkDetector_1.Framework.JSX);
@@ -59,16 +54,13 @@ describe('FrameworkDetector', () => {
59
54
  expect((0, FrameworkDetector_1.isSupportedFile)('App.vue')).toBe(true);
60
55
  expect((0, FrameworkDetector_1.isSupportedFile)('/src/components/Button.vue')).toBe(true);
61
56
  });
62
- it('should return true for Svelte files', () => {
63
- expect((0, FrameworkDetector_1.isSupportedFile)('App.svelte')).toBe(true);
64
- expect((0, FrameworkDetector_1.isSupportedFile)('/src/components/Button.svelte')).toBe(true);
65
- });
66
57
  it('should return false for unsupported files', () => {
67
58
  expect((0, FrameworkDetector_1.isSupportedFile)('styles.css')).toBe(false);
68
59
  expect((0, FrameworkDetector_1.isSupportedFile)('index.html')).toBe(false);
69
60
  expect((0, FrameworkDetector_1.isSupportedFile)('config.json')).toBe(false);
70
61
  expect((0, FrameworkDetector_1.isSupportedFile)('README.md')).toBe(false);
71
62
  expect((0, FrameworkDetector_1.isSupportedFile)('image.png')).toBe(false);
63
+ expect((0, FrameworkDetector_1.isSupportedFile)('App.svelte')).toBe(false);
72
64
  });
73
65
  });
74
66
  });
@@ -1 +1 @@
1
- {"version":3,"file":"FrameworkDetector.spec.js","sourceRoot":"","sources":["../../src/utils/FrameworkDetector.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FrameworkDetector.spec.js","sourceRoot":"","sources":["../../src/utils/FrameworkDetector.spec.ts"],"names":[],"mappings":";;AAAA,2DAAkF;AAElF,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IAClC,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;QAChC,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACrD,MAAM,CAAC,IAAA,mCAAe,EAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,6BAAS,CAAC,GAAG,CAAC,CAAC;YACvD,MAAM,CAAC,IAAA,mCAAe,EAAC,4BAA4B,CAAC,CAAC,CAAC,IAAI,CAAC,6BAAS,CAAC,GAAG,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACrD,MAAM,CAAC,IAAA,mCAAe,EAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,6BAAS,CAAC,GAAG,CAAC,CAAC;YACvD,MAAM,CAAC,IAAA,mCAAe,EAAC,4BAA4B,CAAC,CAAC,CAAC,IAAI,CAAC,6BAAS,CAAC,GAAG,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACpD,MAAM,CAAC,IAAA,mCAAe,EAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,6BAAS,CAAC,GAAG,CAAC,CAAC;YACxD,MAAM,CAAC,IAAA,mCAAe,EAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAAC,6BAAS,CAAC,GAAG,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACpD,MAAM,CAAC,IAAA,mCAAe,EAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,6BAAS,CAAC,GAAG,CAAC,CAAC;YACxD,MAAM,CAAC,IAAA,mCAAe,EAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAAC,6BAAS,CAAC,GAAG,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACrD,MAAM,CAAC,IAAA,mCAAe,EAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,6BAAS,CAAC,GAAG,CAAC,CAAC;YACvD,MAAM,CAAC,IAAA,mCAAe,EAAC,4BAA4B,CAAC,CAAC,CAAC,IAAI,CAAC,6BAAS,CAAC,GAAG,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;YACxD,MAAM,CAAC,IAAA,mCAAe,EAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;YACjD,MAAM,CAAC,IAAA,mCAAe,EAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;YACjD,MAAM,CAAC,IAAA,mCAAe,EAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;YAClD,MAAM,CAAC,IAAA,mCAAe,EAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;YACzD,MAAM,CAAC,IAAA,mCAAe,EAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,6BAAS,CAAC,GAAG,CAAC,CAAC;YAC/D,MAAM,CAAC,IAAA,mCAAe,EAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,6BAAS,CAAC,GAAG,CAAC,CAAC;YAC/D,MAAM,CAAC,IAAA,mCAAe,EAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC,6BAAS,CAAC,GAAG,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;YACvC,MAAM,CAAC,IAAA,mCAAe,EAAC,gCAAgC,CAAC,CAAC,CAAC,IAAI,CAAC,6BAAS,CAAC,GAAG,CAAC,CAAC;YAC9E,MAAM,CAAC,IAAA,mCAAe,EAAC,gCAAgC,CAAC,CAAC,CAAC,IAAI,CAAC,6BAAS,CAAC,GAAG,CAAC,CAAC;QAC/E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;YACtC,MAAM,CAAC,IAAA,mCAAe,EAAC,uCAAuC,CAAC,CAAC,CAAC,IAAI,CAAC,6BAAS,CAAC,GAAG,CAAC,CAAC;YACrF,MAAM,CAAC,IAAA,mCAAe,EAAC,uCAAuC,CAAC,CAAC,CAAC,IAAI,CAAC,6BAAS,CAAC,GAAG,CAAC,CAAC;QACtF,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;QAChC,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YAC3C,MAAM,CAAC,IAAA,mCAAe,EAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9C,MAAM,CAAC,IAAA,mCAAe,EAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9C,MAAM,CAAC,IAAA,mCAAe,EAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/C,MAAM,CAAC,IAAA,mCAAe,EAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YAC3C,MAAM,CAAC,IAAA,mCAAe,EAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9C,MAAM,CAAC,IAAA,mCAAe,EAAC,4BAA4B,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACpD,MAAM,CAAC,IAAA,mCAAe,EAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClD,MAAM,CAAC,IAAA,mCAAe,EAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClD,MAAM,CAAC,IAAA,mCAAe,EAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnD,MAAM,CAAC,IAAA,mCAAe,EAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACjD,MAAM,CAAC,IAAA,mCAAe,EAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACjD,MAAM,CAAC,IAAA,mCAAe,EAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tailwind-typescript-plugin",
3
- "version": "1.4.0-beta.23",
3
+ "version": "1.4.0-beta.25",
4
4
  "description": "TypeScript Language Service plugin that validates Tailwind CSS class names in JSX/TSX files. Catches typos and invalid classes in real-time with support for tailwind-variants and class-variance-authority.",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",
@@ -14,6 +14,10 @@
14
14
  "build": "tsc",
15
15
  "watch": "tsc --watch",
16
16
  "test": "jest --testPathPattern=src/",
17
+ "test:integration": "cd e2e && npm test",
18
+ "test:integration:ui": "cd e2e && npm run test:ui",
19
+ "test:integration:headed": "cd e2e && npm run test:headed",
20
+ "test:all": "npm test && npm run test:integration",
17
21
  "lint": "eslint src --ext .ts,.tsx,.json --quiet --cache",
18
22
  "tsc": "tsc --noEmit",
19
23
  "prepare": "npm run build",
@@ -73,17 +77,20 @@
73
77
  "eslint-plugin-react-hooks": "^5.2.0",
74
78
  "eslint-plugin-storybook": "^9.0.16",
75
79
  "jest": "^29.7.0",
80
+ "postcss": "^8.5.6",
76
81
  "prettier": "^3.5.3",
77
82
  "semantic-release": "^24.2.9",
83
+ "tailwindcss": "^4.1.17",
78
84
  "ts-jest": "^29.4.5",
79
85
  "ts-node": "^10.9.2",
80
86
  "typescript": "^5.7.2"
81
87
  },
82
88
  "peerDependencies": {
89
+ "postcss": "^8.0.0",
90
+ "tailwindcss": "^4.0.0",
83
91
  "typescript": ">=4.0.0"
84
92
  },
85
93
  "dependencies": {
86
- "postcss": "^8.5.6",
87
- "tailwindcss": "^4.1.17"
94
+ "zod": "^3.25.76"
88
95
  }
89
96
  }
@@ -1,17 +0,0 @@
1
- import * as ts from 'typescript/lib/tsserverlibrary';
2
- import { ClassNameInfo, ExtractionContext } from '../core/types';
3
- import { BaseExtractor } from './BaseExtractor';
4
- /**
5
- * Extracts class names from Svelte template class attributes
6
- * Assumes proper Svelte language support is configured
7
- *
8
- * TODO: Implement Svelte-specific extraction logic
9
- * - Handle class static attributes
10
- * - Handle class:name={condition} directive syntax
11
- * - Handle {expression} dynamic bindings
12
- */
13
- export declare class SvelteAttributeExtractor extends BaseExtractor {
14
- canHandle(node: ts.Node, context: ExtractionContext): boolean;
15
- extract(node: ts.Node, context: ExtractionContext): ClassNameInfo[];
16
- }
17
- //# sourceMappingURL=SvelteAttributeExtractor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SvelteAttributeExtractor.d.ts","sourceRoot":"","sources":["../../src/extractors/SvelteAttributeExtractor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAErD,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD;;;;;;;;GAQG;AACH,qBAAa,wBAAyB,SAAQ,aAAa;IAC1D,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO;IAM7D,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,iBAAiB,GAAG,aAAa,EAAE;CAKnE"}
@@ -1,27 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SvelteAttributeExtractor = void 0;
4
- const BaseExtractor_1 = require("./BaseExtractor");
5
- /**
6
- * Extracts class names from Svelte template class attributes
7
- * Assumes proper Svelte language support is configured
8
- *
9
- * TODO: Implement Svelte-specific extraction logic
10
- * - Handle class static attributes
11
- * - Handle class:name={condition} directive syntax
12
- * - Handle {expression} dynamic bindings
13
- */
14
- class SvelteAttributeExtractor extends BaseExtractor_1.BaseExtractor {
15
- canHandle(node, context) {
16
- // TODO: Implement Svelte node detection
17
- // For now, return false as this is a stub
18
- return false;
19
- }
20
- extract(node, context) {
21
- // TODO: Implement Svelte class extraction
22
- // This is a placeholder that will be implemented in the next phase
23
- return [];
24
- }
25
- }
26
- exports.SvelteAttributeExtractor = SvelteAttributeExtractor;
27
- //# sourceMappingURL=SvelteAttributeExtractor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SvelteAttributeExtractor.js","sourceRoot":"","sources":["../../src/extractors/SvelteAttributeExtractor.ts"],"names":[],"mappings":";;;AAIA,mDAAgD;AAEhD;;;;;;;;GAQG;AACH,MAAa,wBAAyB,SAAQ,6BAAa;IAC1D,SAAS,CAAC,IAAa,EAAE,OAA0B;QAClD,wCAAwC;QACxC,0CAA0C;QAC1C,OAAO,KAAK,CAAC;IACd,CAAC;IAED,OAAO,CAAC,IAAa,EAAE,OAA0B;QAChD,0CAA0C;QAC1C,mEAAmE;QACnE,OAAO,EAAE,CAAC;IACX,CAAC;CACD;AAZD,4DAYC"}