colx 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/README.md +111 -0
  2. package/dist/analyzer/color-parser.d.ts +18 -0
  3. package/dist/analyzer/color-parser.d.ts.map +1 -0
  4. package/dist/analyzer/color-parser.js +68 -0
  5. package/dist/analyzer/color-parser.js.map +1 -0
  6. package/dist/analyzer/consolidator.d.ts +13 -0
  7. package/dist/analyzer/consolidator.d.ts.map +1 -0
  8. package/dist/analyzer/consolidator.js +72 -0
  9. package/dist/analyzer/consolidator.js.map +1 -0
  10. package/dist/analyzer/similarity.d.ts +10 -0
  11. package/dist/analyzer/similarity.d.ts.map +1 -0
  12. package/dist/analyzer/similarity.js +72 -0
  13. package/dist/analyzer/similarity.js.map +1 -0
  14. package/dist/index.d.ts +3 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +104 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/scanner/color-extractor.d.ts +10 -0
  19. package/dist/scanner/color-extractor.d.ts.map +1 -0
  20. package/dist/scanner/color-extractor.js +98 -0
  21. package/dist/scanner/color-extractor.js.map +1 -0
  22. package/dist/scanner/file-walker.d.ts +2 -0
  23. package/dist/scanner/file-walker.d.ts.map +1 -0
  24. package/dist/scanner/file-walker.js +45 -0
  25. package/dist/scanner/file-walker.js.map +1 -0
  26. package/dist/server/api.d.ts +33 -0
  27. package/dist/server/api.d.ts.map +1 -0
  28. package/dist/server/api.js +72 -0
  29. package/dist/server/api.js.map +1 -0
  30. package/dist/server/server.d.ts +4 -0
  31. package/dist/server/server.d.ts.map +1 -0
  32. package/dist/server/server.js +41 -0
  33. package/dist/server/server.js.map +1 -0
  34. package/package.json +51 -0
  35. package/src/ui/app.jsx +277 -0
  36. package/src/ui/index.html +341 -0
@@ -0,0 +1,341 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Tailwind Color Visualizer</title>
7
+ <script crossorigin src="https://unpkg.com/react@18/umd/react.production.min.js"></script>
8
+ <script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.production.min.js"></script>
9
+ <script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
10
+ <style>
11
+ * {
12
+ margin: 0;
13
+ padding: 0;
14
+ box-sizing: border-box;
15
+ }
16
+
17
+ body {
18
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
19
+ 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
20
+ sans-serif;
21
+ -webkit-font-smoothing: antialiased;
22
+ -moz-osx-font-smoothing: grayscale;
23
+ background: #f5f5f5;
24
+ color: #333;
25
+ }
26
+
27
+ #root {
28
+ min-height: 100vh;
29
+ }
30
+
31
+ .container {
32
+ max-width: 1400px;
33
+ margin: 0 auto;
34
+ padding: 2rem;
35
+ }
36
+
37
+ .header {
38
+ background: white;
39
+ padding: 2rem;
40
+ border-radius: 8px;
41
+ box-shadow: 0 2px 4px rgba(0,0,0,0.1);
42
+ margin-bottom: 2rem;
43
+ }
44
+
45
+ .header h1 {
46
+ font-size: 2rem;
47
+ margin-bottom: 0.5rem;
48
+ color: #1a1a1a;
49
+ }
50
+
51
+ .header p {
52
+ color: #666;
53
+ }
54
+
55
+ .stats {
56
+ display: flex;
57
+ gap: 2rem;
58
+ flex-wrap: wrap;
59
+ margin-top: 1rem;
60
+ }
61
+
62
+ .stat {
63
+ display: flex;
64
+ flex-direction: column;
65
+ }
66
+
67
+ .stat-label {
68
+ font-size: 0.875rem;
69
+ color: #666;
70
+ margin-bottom: 0.25rem;
71
+ }
72
+
73
+ .stat-value {
74
+ font-size: 1.5rem;
75
+ font-weight: 600;
76
+ color: #1a1a1a;
77
+ }
78
+
79
+ .palette-grid {
80
+ display: grid;
81
+ grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
82
+ gap: 1rem;
83
+ margin-bottom: 2rem;
84
+ }
85
+
86
+ .color-card {
87
+ background: white;
88
+ border-radius: 8px;
89
+ overflow: hidden;
90
+ box-shadow: 0 2px 4px rgba(0,0,0,0.1);
91
+ cursor: pointer;
92
+ transition: transform 0.2s, box-shadow 0.2s;
93
+ }
94
+
95
+ .color-card:hover {
96
+ transform: translateY(-2px);
97
+ box-shadow: 0 4px 8px rgba(0,0,0,0.15);
98
+ }
99
+
100
+ .color-swatch {
101
+ width: 100%;
102
+ height: 120px;
103
+ position: relative;
104
+ }
105
+
106
+ .color-info {
107
+ padding: 1rem;
108
+ }
109
+
110
+ .color-hex {
111
+ font-family: 'Monaco', 'Courier New', monospace;
112
+ font-size: 0.875rem;
113
+ font-weight: 600;
114
+ margin-bottom: 0.5rem;
115
+ }
116
+
117
+ .color-format {
118
+ font-size: 0.75rem;
119
+ color: #666;
120
+ text-transform: uppercase;
121
+ }
122
+
123
+ .color-details {
124
+ background: white;
125
+ border-radius: 8px;
126
+ padding: 1.5rem;
127
+ box-shadow: 0 2px 4px rgba(0,0,0,0.1);
128
+ margin-bottom: 2rem;
129
+ display: none;
130
+ }
131
+
132
+ .color-details.active {
133
+ display: block;
134
+ }
135
+
136
+ .color-details-header {
137
+ display: flex;
138
+ align-items: center;
139
+ gap: 1rem;
140
+ margin-bottom: 1.5rem;
141
+ }
142
+
143
+ .color-details-swatch {
144
+ width: 80px;
145
+ height: 80px;
146
+ border-radius: 8px;
147
+ border: 2px solid #e0e0e0;
148
+ }
149
+
150
+ .color-details-info h3 {
151
+ font-size: 1.25rem;
152
+ margin-bottom: 0.25rem;
153
+ }
154
+
155
+ .occurrences-list {
156
+ list-style: none;
157
+ }
158
+
159
+ .occurrence-item {
160
+ padding: 0.75rem;
161
+ border-bottom: 1px solid #e0e0e0;
162
+ font-family: 'Monaco', 'Courier New', monospace;
163
+ font-size: 0.875rem;
164
+ }
165
+
166
+ .occurrence-item:last-child {
167
+ border-bottom: none;
168
+ }
169
+
170
+ .occurrence-file {
171
+ color: #666;
172
+ }
173
+
174
+ .occurrence-line {
175
+ color: #999;
176
+ margin-left: 0.5rem;
177
+ }
178
+
179
+ .suggestions {
180
+ background: white;
181
+ border-radius: 8px;
182
+ padding: 1.5rem;
183
+ box-shadow: 0 2px 4px rgba(0,0,0,0.1);
184
+ }
185
+
186
+ .suggestions h2 {
187
+ font-size: 1.5rem;
188
+ margin-bottom: 1.5rem;
189
+ }
190
+
191
+ .suggestion-section {
192
+ margin-bottom: 2rem;
193
+ }
194
+
195
+ .suggestion-section h3 {
196
+ font-size: 1.125rem;
197
+ margin-bottom: 1rem;
198
+ color: #666;
199
+ }
200
+
201
+ .css-variable-item {
202
+ padding: 1rem;
203
+ background: #f9f9f9;
204
+ border-radius: 6px;
205
+ margin-bottom: 0.75rem;
206
+ display: flex;
207
+ justify-content: space-between;
208
+ align-items: center;
209
+ }
210
+
211
+ .css-variable-code {
212
+ font-family: 'Monaco', 'Courier New', monospace;
213
+ font-size: 0.875rem;
214
+ flex: 1;
215
+ }
216
+
217
+ .css-variable-count {
218
+ color: #666;
219
+ font-size: 0.875rem;
220
+ margin-left: 1rem;
221
+ }
222
+
223
+ .copy-button {
224
+ background: #007bff;
225
+ color: white;
226
+ border: none;
227
+ padding: 0.5rem 1rem;
228
+ border-radius: 4px;
229
+ cursor: pointer;
230
+ font-size: 0.875rem;
231
+ margin-left: 1rem;
232
+ transition: background 0.2s;
233
+ }
234
+
235
+ .copy-button:hover {
236
+ background: #0056b3;
237
+ }
238
+
239
+ .merge-group {
240
+ padding: 1rem;
241
+ background: #f9f9f9;
242
+ border-radius: 6px;
243
+ margin-bottom: 0.75rem;
244
+ }
245
+
246
+ .merge-colors {
247
+ display: flex;
248
+ gap: 0.5rem;
249
+ margin: 0.75rem 0;
250
+ flex-wrap: wrap;
251
+ }
252
+
253
+ .merge-color-swatch {
254
+ width: 40px;
255
+ height: 40px;
256
+ border-radius: 4px;
257
+ border: 1px solid #e0e0e0;
258
+ cursor: pointer;
259
+ transition: transform 0.2s, box-shadow 0.2s;
260
+ }
261
+
262
+ .merge-color-swatch:hover {
263
+ transform: scale(1.1);
264
+ box-shadow: 0 2px 8px rgba(0,0,0,0.2);
265
+ z-index: 10;
266
+ position: relative;
267
+ }
268
+
269
+ .merge-suggested {
270
+ margin-top: 0.75rem;
271
+ padding-top: 0.75rem;
272
+ border-top: 1px solid #e0e0e0;
273
+ display: flex;
274
+ align-items: center;
275
+ gap: 0.5rem;
276
+ }
277
+
278
+ .loading {
279
+ text-align: center;
280
+ padding: 3rem;
281
+ color: #666;
282
+ }
283
+
284
+ .error {
285
+ background: #fee;
286
+ color: #c33;
287
+ padding: 1rem;
288
+ border-radius: 6px;
289
+ margin: 1rem 0;
290
+ }
291
+
292
+ .filter-container {
293
+ background: white;
294
+ padding: 1.5rem;
295
+ border-radius: 8px;
296
+ box-shadow: 0 2px 4px rgba(0,0,0,0.1);
297
+ margin-bottom: 2rem;
298
+ }
299
+
300
+ .filter-title {
301
+ font-size: 0.875rem;
302
+ color: #666;
303
+ text-transform: uppercase;
304
+ margin-bottom: 1rem;
305
+ font-weight: 600;
306
+ }
307
+
308
+ .filter-buttons {
309
+ display: flex;
310
+ flex-wrap: wrap;
311
+ gap: 0.5rem;
312
+ }
313
+
314
+ .filter-button {
315
+ padding: 0.5rem 1rem;
316
+ border: 2px solid #e0e0e0;
317
+ background: white;
318
+ border-radius: 6px;
319
+ cursor: pointer;
320
+ font-size: 0.875rem;
321
+ transition: all 0.2s;
322
+ font-weight: 500;
323
+ }
324
+
325
+ .filter-button:hover {
326
+ border-color: #007bff;
327
+ color: #007bff;
328
+ }
329
+
330
+ .filter-button.active {
331
+ background: #007bff;
332
+ color: white;
333
+ border-color: #007bff;
334
+ }
335
+ </style>
336
+ </head>
337
+ <body>
338
+ <div id="root"></div>
339
+ <script type="text/babel" src="app.jsx"></script>
340
+ </body>
341
+ </html>