crushdataai 1.2.6 → 1.2.8

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/assets/antigravity/data-analyst.md +8 -4
  2. package/assets/claude/SKILL.md +7 -2
  3. package/assets/copilot/data-analyst.prompt.md +8 -4
  4. package/assets/cursor/data-analyst.md +8 -4
  5. package/assets/kiro/data-analyst.md +8 -4
  6. package/assets/windsurf/data-analyst.md +8 -4
  7. package/dist/commands/schema.d.ts +1 -0
  8. package/dist/commands/schema.js +54 -0
  9. package/dist/connections.d.ts +3 -1
  10. package/dist/connections.js +125 -0
  11. package/dist/connectors/additional/index.d.ts +42 -0
  12. package/dist/connectors/additional/index.js +268 -0
  13. package/dist/connectors/cloud/index.d.ts +8 -3
  14. package/dist/connectors/cloud/index.js +321 -10
  15. package/dist/connectors/csv/index.d.ts +1 -0
  16. package/dist/connectors/csv/index.js +27 -7
  17. package/dist/connectors/custom/index.d.ts +10 -0
  18. package/dist/connectors/custom/index.js +61 -0
  19. package/dist/connectors/index.d.ts +6 -0
  20. package/dist/connectors/mysql/index.d.ts +1 -0
  21. package/dist/connectors/mysql/index.js +162 -9
  22. package/dist/connectors/postgresql/index.d.ts +2 -0
  23. package/dist/connectors/postgresql/index.js +140 -8
  24. package/dist/connectors/shopify/index.d.ts +1 -0
  25. package/dist/connectors/shopify/index.js +44 -5
  26. package/dist/index.js +7 -0
  27. package/dist/routes/connections.js +2 -0
  28. package/dist/server.js +8 -0
  29. package/package.json +8 -3
  30. package/ui/assets/index-Ba1mRihD.js +40 -0
  31. package/ui/assets/index-rlcHFDJB.css +1 -0
  32. package/ui/favicon.svg +4 -18
  33. package/ui/index.html +7 -331
  34. package/ui/favicon-32x32.png +0 -0
  35. package/ui/main.js +0 -542
  36. package/ui/styles.css +0 -680
package/ui/styles.css DELETED
@@ -1,680 +0,0 @@
1
- :root {
2
- --primary: #8B5CF6;
3
- --primary-dark: #7C3AED;
4
- --primary-light: #A78BFA;
5
- --bg: #F8FAFC;
6
- --sidebar-bg: #FFFFFF;
7
- --card: #FFFFFF;
8
- --border: #E2E8F0;
9
- --border-light: #F1F5F9;
10
- --text: #1E293B;
11
- --text-muted: #64748B;
12
- --text-light: #94A3B8;
13
- --success: #10B981;
14
- --error: #EF4444;
15
- --warning: #F59E0B;
16
- }
17
-
18
- * {
19
- box-sizing: border-box;
20
- margin: 0;
21
- padding: 0;
22
- }
23
-
24
- body {
25
- font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
26
- background: var(--bg);
27
- color: var(--text);
28
- min-height: 100vh;
29
- display: flex;
30
- }
31
-
32
- /* Sidebar */
33
- .sidebar {
34
- width: 280px;
35
- background: var(--sidebar-bg);
36
- border-right: 1px solid var(--border);
37
- display: flex;
38
- flex-direction: column;
39
- height: 100vh;
40
- position: fixed;
41
- left: 0;
42
- top: 0;
43
- }
44
-
45
- .sidebar-header {
46
- padding: 1.25rem;
47
- border-bottom: 1px solid var(--border);
48
- }
49
-
50
- .logo {
51
- display: flex;
52
- align-items: center;
53
- gap: 0.75rem;
54
- }
55
-
56
- .logo-icon {
57
- width: 36px;
58
- height: 36px;
59
- background: linear-gradient(135deg, var(--primary), #EC4899);
60
- border-radius: 10px;
61
- display: flex;
62
- align-items: center;
63
- justify-content: center;
64
- }
65
-
66
- .logo-icon svg {
67
- width: 20px;
68
- height: 20px;
69
- fill: white;
70
- }
71
-
72
- .logo-text {
73
- font-size: 1.1rem;
74
- font-weight: 700;
75
- }
76
-
77
- .logo-text span {
78
- background: linear-gradient(135deg, var(--primary), #EC4899);
79
- -webkit-background-clip: text;
80
- background-clip: text;
81
- -webkit-text-fill-color: transparent;
82
- }
83
-
84
- .sidebar-section {
85
- padding: 1rem;
86
- flex: 1;
87
- overflow-y: auto;
88
- }
89
-
90
- .sidebar-title {
91
- font-size: 0.7rem;
92
- font-weight: 600;
93
- text-transform: uppercase;
94
- letter-spacing: 0.05em;
95
- color: var(--text-light);
96
- margin-bottom: 0.75rem;
97
- padding: 0 0.5rem;
98
- }
99
-
100
- .connection-list {
101
- list-style: none;
102
- }
103
-
104
- .connection-item {
105
- display: flex;
106
- align-items: center;
107
- gap: 0.75rem;
108
- padding: 0.625rem 0.75rem;
109
- border-radius: 8px;
110
- cursor: pointer;
111
- transition: all 0.15s;
112
- margin-bottom: 0.25rem;
113
- }
114
-
115
- .connection-item:hover {
116
- background: var(--border-light);
117
- }
118
-
119
- .connection-item.active {
120
- background: rgba(139, 92, 246, 0.1);
121
- color: var(--primary);
122
- }
123
-
124
- .connection-item .icon {
125
- font-size: 1.25rem;
126
- width: 32px;
127
- height: 32px;
128
- background: var(--border-light);
129
- border-radius: 6px;
130
- display: flex;
131
- align-items: center;
132
- justify-content: center;
133
- }
134
-
135
- .connection-item.active .icon {
136
- background: rgba(139, 92, 246, 0.15);
137
- }
138
-
139
- .connection-item .info {
140
- flex: 1;
141
- min-width: 0;
142
- }
143
-
144
- .connection-item .name {
145
- font-size: 0.875rem;
146
- font-weight: 500;
147
- white-space: nowrap;
148
- overflow: hidden;
149
- text-overflow: ellipsis;
150
- }
151
-
152
- .connection-item .type {
153
- font-size: 0.75rem;
154
- color: var(--text-muted);
155
- }
156
-
157
- .connection-item .status {
158
- width: 8px;
159
- height: 8px;
160
- border-radius: 50%;
161
- background: var(--success);
162
- }
163
-
164
- .add-connection-btn {
165
- display: flex;
166
- align-items: center;
167
- gap: 0.5rem;
168
- width: 100%;
169
- padding: 0.625rem 0.75rem;
170
- background: transparent;
171
- border: 1px dashed var(--border);
172
- border-radius: 8px;
173
- color: var(--text-muted);
174
- font-size: 0.875rem;
175
- cursor: pointer;
176
- transition: all 0.15s;
177
- margin-top: 0.5rem;
178
- }
179
-
180
- .add-connection-btn:hover {
181
- border-color: var(--primary);
182
- color: var(--primary);
183
- background: rgba(139, 92, 246, 0.05);
184
- }
185
-
186
- /* Main Content */
187
- .main {
188
- margin-left: 280px;
189
- flex: 1;
190
- padding: 1.5rem 2rem;
191
- height: 100vh;
192
- overflow: hidden;
193
- display: flex;
194
- flex-direction: column;
195
- min-width: 0;
196
- /* Prevents flex item from overflowing */
197
- }
198
-
199
- .main-header {
200
- display: flex;
201
- justify-content: space-between;
202
- align-items: center;
203
- margin-bottom: 1.5rem;
204
- }
205
-
206
- .main-title {
207
- font-size: 1.5rem;
208
- font-weight: 600;
209
- }
210
-
211
- .main-subtitle {
212
- font-size: 0.875rem;
213
- color: var(--text-muted);
214
- }
215
-
216
- /* Panels */
217
- .panel {
218
- background: var(--card);
219
- border: 1px solid var(--border);
220
- border-radius: 12px;
221
- margin-bottom: 1.5rem;
222
- }
223
-
224
- .panel-header {
225
- display: flex;
226
- justify-content: space-between;
227
- align-items: center;
228
- padding: 1rem 1.25rem;
229
- border-bottom: 1px solid var(--border);
230
- }
231
-
232
- .panel-title {
233
- font-size: 0.95rem;
234
- font-weight: 600;
235
- display: flex;
236
- align-items: center;
237
- gap: 0.5rem;
238
- }
239
-
240
- .panel-body {
241
- padding: 1.25rem;
242
- }
243
-
244
- /* Tables Grid */
245
- .tables-grid {
246
- display: grid;
247
- grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
248
- gap: 1rem;
249
- }
250
-
251
- .table-card {
252
- background: var(--border-light);
253
- border: 1px solid var(--border);
254
- border-radius: 10px;
255
- padding: 1rem;
256
- cursor: pointer;
257
- transition: all 0.2s;
258
- }
259
-
260
- .table-card:hover {
261
- border-color: var(--primary-light);
262
- transform: translateY(-2px);
263
- box-shadow: 0 4px 12px rgba(139, 92, 246, 0.1);
264
- }
265
-
266
- .table-card.selected {
267
- border-color: var(--primary);
268
- background: rgba(139, 92, 246, 0.05);
269
- }
270
-
271
- #connection-details {
272
- display: flex;
273
- flex-direction: column;
274
- height: 100%;
275
- overflow: hidden;
276
- }
277
-
278
- #table-data-panel {
279
- display: flex;
280
- flex-direction: column;
281
- flex: 1;
282
- overflow: hidden;
283
- margin-bottom: 0;
284
- }
285
-
286
- #table-data-panel .panel-body {
287
- flex: 1;
288
- overflow: auto;
289
- padding: 0;
290
- }
291
-
292
- #table-data-panel .panel-header,
293
- #table-data-panel .panel-footer {
294
- flex-shrink: 0;
295
- }
296
-
297
- .table-card .table-icon {
298
- width: 40px;
299
- height: 40px;
300
- background: white;
301
- border-radius: 8px;
302
- display: flex;
303
- align-items: center;
304
- justify-content: center;
305
- margin-bottom: 0.75rem;
306
- border: 1px solid var(--border);
307
- }
308
-
309
- .table-card .table-name {
310
- font-size: 0.875rem;
311
- font-weight: 600;
312
- margin-bottom: 0.25rem;
313
- }
314
-
315
- .table-card .table-rows {
316
- font-size: 0.75rem;
317
- color: var(--text-muted);
318
- }
319
-
320
- /* Empty State */
321
- .empty-state {
322
- text-align: center;
323
- padding: 3rem 2rem;
324
- color: var(--text-muted);
325
- }
326
-
327
- .empty-state svg {
328
- width: 64px;
329
- height: 64px;
330
- margin-bottom: 1rem;
331
- opacity: 0.4;
332
- }
333
-
334
- .empty-state h3 {
335
- font-size: 1rem;
336
- font-weight: 600;
337
- color: var(--text);
338
- margin-bottom: 0.5rem;
339
- }
340
-
341
- .empty-state p {
342
- font-size: 0.875rem;
343
- margin-bottom: 1.5rem;
344
- }
345
-
346
- /* Buttons */
347
- .btn {
348
- background: linear-gradient(135deg, var(--primary), var(--primary-dark));
349
- color: white;
350
- border: none;
351
- border-radius: 8px;
352
- padding: 0.625rem 1.25rem;
353
- font-size: 0.875rem;
354
- font-weight: 500;
355
- font-family: inherit;
356
- cursor: pointer;
357
- transition: all 0.2s;
358
- display: inline-flex;
359
- align-items: center;
360
- gap: 0.5rem;
361
- }
362
-
363
- .btn:hover {
364
- transform: translateY(-1px);
365
- box-shadow: 0 4px 12px rgba(139, 92, 246, 0.3);
366
- }
367
-
368
- .btn-secondary {
369
- background: white;
370
- border: 1px solid var(--border);
371
- color: var(--text);
372
- }
373
-
374
- .btn-secondary:hover {
375
- background: var(--border-light);
376
- box-shadow: none;
377
- transform: none;
378
- }
379
-
380
- .btn-sm {
381
- padding: 0.5rem 0.875rem;
382
- font-size: 0.8rem;
383
- }
384
-
385
- /* Modal */
386
- .modal-overlay {
387
- display: none;
388
- position: fixed;
389
- inset: 0;
390
- background: rgba(0, 0, 0, 0.5);
391
- z-index: 100;
392
- align-items: center;
393
- justify-content: center;
394
- }
395
-
396
- .modal-overlay.active {
397
- display: flex;
398
- }
399
-
400
- .modal {
401
- background: white;
402
- border-radius: 16px;
403
- width: 100%;
404
- max-width: 520px;
405
- max-height: 90vh;
406
- overflow-y: auto;
407
- box-shadow: 0 20px 60px rgba(0, 0, 0, 0.2);
408
- }
409
-
410
- .modal-header {
411
- display: flex;
412
- justify-content: space-between;
413
- align-items: center;
414
- padding: 1.25rem;
415
- border-bottom: 1px solid var(--border);
416
- }
417
-
418
- .modal-title {
419
- font-size: 1.1rem;
420
- font-weight: 600;
421
- }
422
-
423
- .modal-close {
424
- background: none;
425
- border: none;
426
- cursor: pointer;
427
- padding: 0.5rem;
428
- color: var(--text-muted);
429
- border-radius: 6px;
430
- }
431
-
432
- .modal-close:hover {
433
- background: var(--border-light);
434
- color: var(--text);
435
- }
436
-
437
- .modal-body {
438
- padding: 1.25rem;
439
- }
440
-
441
- /* Source Selection */
442
- .source-grid {
443
- display: grid;
444
- grid-template-columns: repeat(3, 1fr);
445
- gap: 0.75rem;
446
- margin-bottom: 1.5rem;
447
- }
448
-
449
- .source-btn-wrapper {
450
- position: relative;
451
- }
452
-
453
- .source-btn {
454
- background: white;
455
- border: 2px solid var(--border);
456
- border-radius: 10px;
457
- padding: 1rem 0.5rem;
458
- cursor: pointer;
459
- transition: all 0.2s;
460
- text-align: center;
461
- width: 100%;
462
- }
463
-
464
- .source-btn:hover {
465
- border-color: var(--primary-light);
466
- }
467
-
468
- .source-btn.selected {
469
- border-color: var(--primary);
470
- background: rgba(139, 92, 246, 0.05);
471
- }
472
-
473
- .source-btn .icon {
474
- font-size: 1.5rem;
475
- margin-bottom: 0.375rem;
476
- }
477
-
478
- .source-btn .name {
479
- font-size: 0.75rem;
480
- font-weight: 500;
481
- color: var(--text);
482
- }
483
-
484
- .help-btn {
485
- position: absolute;
486
- top: 4px;
487
- right: 4px;
488
- width: 18px;
489
- height: 18px;
490
- border-radius: 50%;
491
- background: var(--border);
492
- border: none;
493
- color: var(--text-muted);
494
- font-size: 0.7rem;
495
- font-weight: 600;
496
- cursor: pointer;
497
- transition: all 0.2s;
498
- display: flex;
499
- align-items: center;
500
- justify-content: center;
501
- }
502
-
503
- .help-btn:hover {
504
- background: var(--primary);
505
- color: white;
506
- }
507
-
508
- /* Form */
509
- .form-group {
510
- margin-bottom: 1rem;
511
- }
512
-
513
- label {
514
- display: block;
515
- font-size: 0.8rem;
516
- font-weight: 500;
517
- color: var(--text-muted);
518
- margin-bottom: 0.375rem;
519
- }
520
-
521
- input {
522
- width: 100%;
523
- background: white;
524
- border: 1px solid var(--border);
525
- border-radius: 8px;
526
- padding: 0.625rem 0.875rem;
527
- color: var(--text);
528
- font-size: 0.875rem;
529
- font-family: inherit;
530
- transition: all 0.2s;
531
- }
532
-
533
- input:focus {
534
- outline: none;
535
- border-color: var(--primary);
536
- box-shadow: 0 0 0 3px rgba(139, 92, 246, 0.1);
537
- }
538
-
539
- input::placeholder {
540
- color: var(--text-light);
541
- }
542
-
543
- .form-row {
544
- display: grid;
545
- grid-template-columns: 1fr 1fr;
546
- gap: 0.75rem;
547
- }
548
-
549
- .modal-footer {
550
- display: flex;
551
- justify-content: flex-end;
552
- gap: 0.75rem;
553
- padding: 1rem 1.25rem;
554
- border-top: 1px solid var(--border);
555
- background: var(--border-light);
556
- border-radius: 0 0 16px 16px;
557
- }
558
-
559
- .hidden {
560
- display: none !important;
561
- }
562
-
563
- /* Message */
564
- .message {
565
- padding: 0.75rem 1rem;
566
- border-radius: 8px;
567
- margin-top: 1rem;
568
- font-size: 0.875rem;
569
- }
570
-
571
- .message.success {
572
- background: rgba(16, 185, 129, 0.1);
573
- color: #059669;
574
- }
575
-
576
- .message.error {
577
- background: rgba(239, 68, 68, 0.1);
578
- color: #DC2626;
579
- }
580
-
581
- /* Data Table Preview */
582
- .preview-table {
583
- width: 100%;
584
- border-collapse: collapse;
585
- font-size: 0.8rem;
586
- }
587
-
588
- .preview-table th {
589
- background: var(--border-light);
590
- padding: 0.375rem 0.75rem;
591
- text-align: left;
592
- font-weight: 600;
593
- color: var(--text);
594
- border-bottom: 2px solid var(--border);
595
- white-space: nowrap;
596
- position: sticky;
597
- top: 0;
598
- z-index: 10;
599
- }
600
-
601
- .preview-table td {
602
- padding: 0.25rem 0.75rem;
603
- border-bottom: 1px solid var(--border);
604
- color: var(--text-muted);
605
- }
606
-
607
- .preview-table tr:hover td {
608
- background: var(--border-light);
609
- }
610
-
611
- .preview-header {
612
- display: flex;
613
- align-items: center;
614
- gap: 0.75rem;
615
- }
616
-
617
- .table-badge {
618
- background: rgba(139, 92, 246, 0.1);
619
- color: var(--primary);
620
- padding: 0.25rem 0.75rem;
621
- border-radius: 20px;
622
- font-size: 0.75rem;
623
- font-weight: 500;
624
- }
625
-
626
- .panel-footer {
627
- padding: 0.875rem 1.25rem;
628
- border-top: 1px solid var(--border);
629
- display: flex;
630
- justify-content: space-between;
631
- align-items: center;
632
- background: var(--border-light);
633
- border-radius: 0 0 12px 12px;
634
- }
635
-
636
- .pagination {
637
- display: flex;
638
- align-items: center;
639
- gap: 0.5rem;
640
- }
641
-
642
- .pagination .page-btn {
643
- background: white;
644
- border: 1px solid var(--border);
645
- border-radius: 6px;
646
- padding: 0.375rem 0.75rem;
647
- font-size: 0.8rem;
648
- cursor: pointer;
649
- transition: all 0.15s;
650
- }
651
-
652
- .pagination .page-btn:hover:not(:disabled) {
653
- border-color: var(--primary);
654
- color: var(--primary);
655
- }
656
-
657
- .pagination .page-btn:disabled {
658
- opacity: 0.5;
659
- cursor: not-allowed;
660
- }
661
-
662
- .pagination .page-info {
663
- font-size: 0.8rem;
664
- color: var(--text-muted);
665
- padding: 0 0.5rem;
666
- }
667
-
668
- .rows-per-page {
669
- display: flex;
670
- align-items: center;
671
- gap: 0.5rem;
672
- font-size: 0.8rem;
673
- color: var(--text-muted);
674
- }
675
-
676
- .rows-per-page select {
677
- width: auto;
678
- padding: 0.25rem 0.5rem;
679
- font-size: 0.8rem;
680
- }