crushdataai 1.2.7 → 1.2.9

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