sqlite-hub 0.6.0 → 0.8.7

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 (44) hide show
  1. package/README.md +107 -0
  2. package/bin/sqlite-hub.js +285 -4
  3. package/changelog.md +21 -0
  4. package/docs/DESIGN_GUIDELINES.md +36 -0
  5. package/frontend/assets/mockups/sql_editor_croped.png +0 -0
  6. package/frontend/index.html +80 -0
  7. package/frontend/js/api.js +34 -0
  8. package/frontend/js/app.js +188 -10
  9. package/frontend/js/components/connectionCard.js +3 -4
  10. package/frontend/js/components/emptyState.js +4 -4
  11. package/frontend/js/components/modal.js +341 -24
  12. package/frontend/js/components/queryChartRenderer.js +125 -0
  13. package/frontend/js/components/queryEditor.js +33 -6
  14. package/frontend/js/components/queryHistoryDetail.js +16 -7
  15. package/frontend/js/components/queryHistoryPanel.js +18 -7
  16. package/frontend/js/components/rowEditorPanel.js +59 -54
  17. package/frontend/js/components/sidebar.js +32 -32
  18. package/frontend/js/components/structureGraph.js +54 -122
  19. package/frontend/js/components/tableDesignerEditor.js +9 -8
  20. package/frontend/js/components/tableDesignerSidebar.js +52 -48
  21. package/frontend/js/components/tableDesignerSqlPreview.js +60 -28
  22. package/frontend/js/lib/queryChartOptions.js +283 -0
  23. package/frontend/js/lib/queryCharts.js +560 -0
  24. package/frontend/js/router.js +8 -0
  25. package/frontend/js/store.js +641 -0
  26. package/frontend/js/views/charts.js +499 -0
  27. package/frontend/js/views/connections.js +5 -17
  28. package/frontend/js/views/data.js +40 -27
  29. package/frontend/js/views/editor.js +19 -13
  30. package/frontend/js/views/overview.js +149 -10
  31. package/frontend/js/views/settings.js +2 -2
  32. package/frontend/js/views/structure.js +105 -59
  33. package/frontend/js/views/tableDesigner.js +7 -2
  34. package/frontend/styles/base.css +62 -0
  35. package/frontend/styles/components.css +68 -118
  36. package/frontend/styles/structure-graph.css +19 -82
  37. package/frontend/styles/tokens.css +2 -0
  38. package/frontend/styles/views.css +293 -66
  39. package/package.json +2 -1
  40. package/server/routes/charts.js +153 -0
  41. package/server/server.js +6 -0
  42. package/server/services/sqlite/overviewService.js +68 -0
  43. package/server/services/storage/appStateStore.js +400 -1
  44. package/server/services/storage/queryHistoryChartUtils.js +145 -0
@@ -55,12 +55,13 @@
55
55
 
56
56
  .top-nav-icon {
57
57
  align-items: center;
58
+ box-sizing: border-box;
58
59
  color: var(--color-primary-container);
59
60
  display: inline-flex;
60
- height: 2rem;
61
+ height: var(--control-height);
61
62
  justify-content: center;
62
63
  transition: background-color var(--transition-fast);
63
- width: 2rem;
64
+ width: var(--control-height);
64
65
  }
65
66
 
66
67
  .top-nav-icon:hover {
@@ -189,9 +190,14 @@
189
190
 
190
191
  .toolbar-button {
191
192
  align-items: center;
193
+ box-sizing: border-box;
192
194
  display: inline-flex;
193
195
  gap: var(--spacing-2);
196
+ height: var(--control-height);
194
197
  justify-content: center;
198
+ line-height: 1;
199
+ min-height: var(--control-height);
200
+ padding: 0 var(--control-padding-inline);
195
201
  text-transform: uppercase;
196
202
  transition:
197
203
  background-color var(--transition-fast),
@@ -199,10 +205,6 @@
199
205
  color var(--transition-fast);
200
206
  }
201
207
 
202
- .toolbar-button--primary:hover {
203
- box-shadow: var(--shadow-subtle-glow);
204
- }
205
-
206
208
  .metric-card {
207
209
  background: var(--color-surface-low);
208
210
  display: flex;
@@ -338,10 +340,10 @@
338
340
  display: flex;
339
341
  flex: 0 0 18rem;
340
342
  flex-direction: column;
341
- max-width: 18rem;
343
+ max-width: 18.2rem;
342
344
  min-height: 0;
343
- min-width: 18rem;
344
- width: 18rem;
345
+ min-width: 18.2rem;
346
+ width: 18.2rem;
345
347
  }
346
348
 
347
349
  .table-designer-sidebar__header {
@@ -371,7 +373,6 @@
371
373
  text-transform: uppercase;
372
374
  }
373
375
 
374
- .table-designer-sidebar__title,
375
376
  .table-designer-preview__title,
376
377
  .table-designer-main__section-title {
377
378
  color: var(--color-on-surface);
@@ -393,75 +394,21 @@
393
394
  text-transform: uppercase;
394
395
  }
395
396
 
396
- .table-designer-sidebar__new-button,
397
- .table-designer-sidebar__import-button,
398
- .table-designer-preview__copy,
399
- .table-designer-main__secondary,
400
- .table-designer-main__primary {
401
- align-items: center;
402
- border: 1px solid rgba(75, 71, 50, 0.2);
403
- display: inline-flex;
404
- font-family: var(--font-family-headline);
405
- font-size: 0.75rem;
406
- font-weight: 700;
407
- justify-content: center;
408
- letter-spacing: 0.12em;
409
- min-height: 42px;
410
- padding: 0 1rem;
411
- text-transform: uppercase;
412
- transition:
413
- background-color var(--transition-fast),
414
- border-color var(--transition-fast),
415
- color var(--transition-fast),
416
- opacity var(--transition-fast);
417
- }
418
-
419
- .table-designer-sidebar__new-button,
420
- .table-designer-main__primary {
421
- background: var(--color-primary-container);
422
- border-color: rgba(252, 227, 0, 0.35);
423
- color: var(--color-on-primary);
424
- }
425
-
426
- .table-designer-preview__copy,
427
- .table-designer-sidebar__import-button,
428
- .table-designer-main__secondary {
429
- background: var(--color-surface-container-lowest);
430
- color: var(--color-on-surface);
431
- }
432
-
433
- .table-designer-sidebar__new-button:hover,
434
- .table-designer-main__primary:hover {
435
- filter: brightness(1.04);
436
- }
437
-
438
- .table-designer-preview__copy:hover,
439
- .table-designer-sidebar__import-button:hover,
440
- .table-designer-main__secondary:hover {
441
- background: var(--color-surface-highest);
442
- border-color: rgba(252, 227, 0, 0.24);
443
- color: var(--color-primary-container);
444
- }
445
-
446
397
  .table-designer-sidebar__file-input {
447
398
  display: none;
448
399
  }
449
400
 
450
- .table-designer-main__primary.is-disabled,
451
- .table-designer-main__primary:disabled {
452
- cursor: not-allowed;
453
- opacity: 0.45;
454
- }
455
-
456
401
  .table-designer-sidebar__search {
457
402
  align-items: center;
458
403
  background: var(--color-surface-container-lowest);
459
404
  border: 1px solid rgba(75, 71, 50, 0.18);
460
- margin: var(--spacing-4) var(--spacing-5) 0;
405
+ box-sizing: border-box;
406
+ min-height: var(--control-height);
407
+ margin: var(--spacing-4) var(--spacing-3) 0;
461
408
  border-bottom: 1px solid rgba(75, 71, 50, 0.18);
462
409
  display: flex;
463
410
  gap: var(--spacing-3);
464
- padding: 0 var(--spacing-4);
411
+ padding: 0 var(--control-padding-inline);
465
412
  }
466
413
 
467
414
  .table-designer-sidebar__search-input,
@@ -502,7 +449,7 @@ select.table-designer-field {
502
449
  color: var(--color-on-surface);
503
450
  flex: 1;
504
451
  font-size: 0.875rem;
505
- height: 48px;
452
+ height: calc(var(--control-height) - 2px);
506
453
  padding: 0;
507
454
  }
508
455
 
@@ -514,26 +461,19 @@ select.table-designer-field {
514
461
  }
515
462
 
516
463
  .table-designer-sidebar__item {
517
- background: var(--color-surface-container-lowest);
518
- border: 1px solid rgba(75, 71, 50, 0.14);
519
464
  display: block;
520
465
  margin-bottom: var(--spacing-2);
521
- padding: var(--spacing-4);
522
- text-align: left;
523
466
  transition:
524
467
  background-color var(--transition-fast),
525
468
  border-color var(--transition-fast);
526
- width: 100%;
527
469
  }
528
470
 
529
471
  .table-designer-sidebar__item:hover {
530
- background: var(--color-surface-container);
531
- border-color: rgba(252, 227, 0, 0.22);
472
+ border-color: rgba(75, 71, 50, 0.1);
532
473
  }
533
474
 
534
475
  .table-designer-sidebar__item.is-active {
535
- background: var(--color-surface-container-high);
536
- border-color: rgba(252, 227, 0, 0.32);
476
+ border-color: rgba(252, 227, 0, 0.3);
537
477
  }
538
478
 
539
479
  .table-designer-sidebar__item-name {
@@ -545,12 +485,12 @@ select.table-designer-field {
545
485
  text-overflow: ellipsis;
546
486
  }
547
487
 
548
- .table-designer-sidebar__item.is-active .table-designer-sidebar__item-name {
488
+ .table-designer-sidebar__item-name.is-active {
549
489
  color: var(--color-primary-container);
550
490
  }
551
491
 
552
492
  .table-designer-sidebar__item-meta {
553
- color: rgba(205, 199, 171, 0.48);
493
+ color: rgba(229, 226, 225, 0.45);
554
494
  font-family: var(--font-family-mono);
555
495
  font-size: var(--font-size-status);
556
496
  letter-spacing: 0.12em;
@@ -607,6 +547,14 @@ select.table-designer-field {
607
547
  padding: var(--spacing-5);
608
548
  }
609
549
 
550
+ .table-designer-preview.is-collapsed .table-designer-preview__header {
551
+ border-bottom: none;
552
+ }
553
+
554
+ .table-designer-preview.is-collapsed {
555
+ height: auto;
556
+ }
557
+
610
558
  .table-designer-main__title-row {
611
559
  align-items: center;
612
560
  display: flex;
@@ -634,18 +582,18 @@ select.table-designer-field {
634
582
  gap: var(--spacing-3);
635
583
  }
636
584
 
637
- .table-designer-fill-toggle {
585
+ .table-designer-preview__actions {
638
586
  align-items: center;
587
+ display: flex;
588
+ flex-wrap: wrap;
589
+ gap: var(--spacing-3);
590
+ }
591
+
592
+ .table-designer-fill-toggle {
593
+ background: var(--color-surface-container);
639
594
  border: 1px solid rgba(75, 71, 50, 0.18);
640
595
  color: var(--color-on-surface);
641
- display: inline-flex;
642
596
  gap: 0.75rem;
643
- min-height: 42px;
644
- padding: 0 0.875rem;
645
- }
646
-
647
- .table-designer-fill-toggle input {
648
- accent-color: var(--color-primary-container);
649
597
  }
650
598
 
651
599
  .table-designer-fill-toggle.is-disabled {
@@ -766,14 +714,14 @@ select.table-designer-field {
766
714
  grid-template-columns:
767
715
  minmax(12rem, 1.5fr)
768
716
  minmax(8rem, 0.9fr)
769
- minmax(5.5rem, 0.7fr)
770
- minmax(5.5rem, 0.7fr)
717
+ minmax(6.5rem, 0.9fr)
718
+ minmax(5.5rem, 0.9fr)
771
719
  minmax(6rem, 0.7fr)
772
720
  minmax(10rem, 1fr)
773
721
  minmax(10rem, 1fr)
774
722
  minmax(10rem, 1fr)
775
- 44px;
776
- min-width: 76rem;
723
+ minmax(7rem, max-content);
724
+ min-width: 82rem;
777
725
  padding: var(--spacing-3);
778
726
  }
779
727
 
@@ -796,42 +744,39 @@ select.table-designer-field {
796
744
  }
797
745
 
798
746
  .table-designer-field {
799
- min-height: 42px;
747
+ height: var(--control-height);
748
+ min-height: var(--control-height);
800
749
  padding: 0 0.75rem;
801
750
  }
802
751
 
803
752
  .table-designer-check {
804
- align-items: center;
753
+ background: var(--color-surface-container);
754
+ border: 1px solid rgba(75, 71, 50, 0.18);
805
755
  color: rgba(229, 226, 225, 0.75);
806
- display: inline-flex;
807
756
  font-size: 0.75rem;
808
757
  gap: 0.5rem;
809
- min-height: 42px;
810
758
  }
811
759
 
812
- .table-designer-check input {
813
- accent-color: var(--color-primary-container);
760
+ .table-designer-checkbox-override {
761
+ background: var(--color-surface-container-lowest) !important;
762
+ background-color: var(--color-surface-container-lowest) !important;
763
+ background-image: none !important;
764
+ border: 1px solid rgba(75, 71, 50, 0.18) !important;
814
765
  }
815
766
 
816
- .table-designer-delete {
817
- align-items: center;
818
- background: transparent;
819
- border: 1px solid rgba(75, 71, 50, 0.18);
820
- color: rgba(229, 226, 225, 0.65);
821
- display: inline-flex;
822
- height: 42px;
823
- justify-content: center;
824
- transition:
825
- border-color var(--transition-fast),
826
- color var(--transition-fast),
827
- background-color var(--transition-fast);
828
- width: 42px;
767
+ .table-designer-check input[type="checkbox"]:not(:checked),
768
+ .table-designer-fill-toggle input[type="checkbox"]:not(:checked),
769
+ .table-designer-checkbox-override input[type="checkbox"]:not(:checked) {
770
+ background: transparent !important;
771
+ background-color: transparent !important;
772
+ background-image: none !important;
829
773
  }
830
774
 
831
- .table-designer-delete:hover {
832
- background: rgba(147, 0, 10, 0.18);
833
- border-color: rgba(255, 180, 171, 0.2);
834
- color: var(--color-error);
775
+ .table-designer-check input[type="checkbox"]:checked,
776
+ .table-designer-fill-toggle input[type="checkbox"]:checked,
777
+ .table-designer-checkbox-override input[type="checkbox"]:checked {
778
+ background-color: var(--color-primary-container) !important;
779
+ border-color: var(--color-primary-container) !important;
835
780
  }
836
781
 
837
782
  .table-designer-preview__body {
@@ -902,14 +847,15 @@ select.table-designer-field {
902
847
  align-items: center;
903
848
  background: transparent;
904
849
  border: 0;
850
+ box-sizing: border-box;
905
851
  color: rgba(229, 226, 225, 0.6);
906
852
  display: inline-flex;
907
- height: 2rem;
853
+ height: var(--control-height);
908
854
  justify-content: center;
909
855
  transition:
910
856
  color var(--transition-fast),
911
857
  background-color var(--transition-fast);
912
- width: 2rem;
858
+ width: var(--control-height);
913
859
  }
914
860
 
915
861
  .query-history-icon-button:hover,
@@ -919,14 +865,18 @@ select.table-designer-field {
919
865
  }
920
866
 
921
867
  .query-history-tab {
868
+ align-items: center;
922
869
  background: transparent;
923
870
  border: 0;
924
871
  border-bottom: 1px solid transparent;
925
872
  color: rgba(205, 199, 171, 0.45);
873
+ display: inline-flex;
926
874
  font-family: var(--font-family-mono);
927
875
  font-size: var(--font-size-status);
876
+ height: var(--control-height);
877
+ justify-content: center;
928
878
  letter-spacing: 0.16em;
929
- padding: 0.35rem 0;
879
+ padding: 0 var(--spacing-1);
930
880
  text-transform: uppercase;
931
881
  transition:
932
882
  border-color var(--transition-fast),
@@ -41,99 +41,29 @@
41
41
  justify-content: flex-end;
42
42
  }
43
43
 
44
- .structure-graph__search {
44
+ .structure-graph__toolbar .standard-button,
45
+ .structure-graph__section-header .standard-button {
45
46
  align-items: center;
46
- background: rgba(12, 12, 10, 0.98);
47
- border: 1px solid rgba(138, 123, 52, 0.34);
48
- display: inline-flex;
49
- gap: 0.625rem;
50
- height: 2.75rem;
51
- min-width: min(100%, 22rem);
52
- padding: 0 0.875rem;
53
- transition: border-color var(--transition-fast), box-shadow var(--transition-fast);
54
- }
55
-
56
- .structure-graph__search:focus-within {
57
- border-color: rgba(252, 227, 0, 0.56);
58
- box-shadow: 0 0 0 1px rgba(252, 227, 0, 0.18);
59
- }
60
-
61
- .structure-graph__search.is-miss {
62
- border-color: rgba(255, 180, 171, 0.3);
63
- box-shadow: 0 0 0 1px rgba(255, 180, 171, 0.1);
64
- }
65
-
66
- .structure-graph__search-icon {
67
- color: rgba(244, 239, 232, 0.56);
68
- font-size: 1rem;
69
- }
70
-
71
- .structure-graph__search-input {
72
- -webkit-appearance: none;
73
- appearance: none;
74
- background: transparent;
75
- background-color: transparent !important;
76
- background-image: none !important;
77
- border: 0;
78
- border-color: transparent;
79
- border-radius: 0;
80
- box-shadow: none !important;
81
- color: var(--color-on-surface);
82
- flex: 1;
83
- font-family: var(--font-family-mono);
84
- font-size: 0.75rem;
85
- letter-spacing: 0.12em;
86
- min-width: 0;
87
- outline: 0;
88
- padding: 0;
89
- text-transform: uppercase;
90
- }
91
-
92
- .structure-graph__search-input::placeholder {
93
- color: rgba(231, 223, 189, 0.38);
94
- }
95
-
96
- .structure-graph__search-input::-webkit-search-decoration,
97
- .structure-graph__search-input::-webkit-search-cancel-button,
98
- .structure-graph__search-input::-webkit-search-results-button,
99
- .structure-graph__search-input::-webkit-search-results-decoration {
100
- -webkit-appearance: none;
101
- appearance: none;
102
- }
103
-
104
- .structure-graph__button {
105
- align-items: center;
106
- background: rgba(17, 17, 15, 0.94);
107
- border: 1px solid rgba(138, 123, 52, 0.24);
108
- color: rgba(244, 239, 232, 0.9);
109
47
  display: inline-flex;
48
+ flex-shrink: 0;
110
49
  gap: 0.5rem;
111
- height: 2.75rem;
112
50
  justify-content: center;
113
- padding: 0 0.875rem;
114
- text-transform: uppercase;
115
- transition: background-color var(--transition-fast), color var(--transition-fast),
116
- border-color var(--transition-fast);
117
51
  }
118
52
 
119
- .structure-graph__button:hover {
120
- background: rgba(44, 42, 35, 0.96);
121
- border-color: rgba(252, 227, 0, 0.34);
122
- color: #fff6ae;
53
+ .structure-graph__toolbar .standard-button:hover {
54
+ background: var(--color-surface-container-highest);
123
55
  }
124
56
 
125
- .structure-graph__button.is-active {
126
- background: rgba(252, 227, 0, 0.16);
127
- border-color: rgba(252, 227, 0, 0.4);
128
- color: #fff6ae;
57
+ .structure-graph__toolbar .standard-button.is-active {
58
+ background: rgba(252, 227, 0, 0.12);
59
+ border-color: rgba(252, 227, 0, 0.38);
60
+ color: var(--color-primary-container);
129
61
  }
130
62
 
131
- .structure-graph__button.is-disabled,
132
- .structure-graph__button:disabled {
133
- border-color: rgba(138, 123, 52, 0.16);
63
+ .structure-graph__toolbar .standard-button:disabled,
64
+ .structure-graph__section-header .standard-button:disabled {
65
+ border-color: rgba(75, 71, 50, 0.18);
134
66
  color: rgba(231, 223, 189, 0.34);
135
- cursor: default;
136
- opacity: 0.72;
137
67
  }
138
68
 
139
69
  .structure-graph__workspace {
@@ -290,6 +220,13 @@
290
220
  text-transform: uppercase;
291
221
  }
292
222
 
223
+ .structure-graph__section-header {
224
+ align-items: center;
225
+ display: flex;
226
+ gap: 0.75rem;
227
+ justify-content: space-between;
228
+ }
229
+
293
230
  .structure-graph__column-list {
294
231
  display: flex;
295
232
  flex-direction: column;
@@ -25,6 +25,8 @@
25
25
  --font-size-micro: 9px;
26
26
  --font-size-label: 11px;
27
27
  --font-size-icon: 18px;
28
+ --control-height: 36px;
29
+ --control-padding-inline: 12px;
28
30
  --spacing-1: 4px;
29
31
  --spacing-2: 8px;
30
32
  --spacing-3: 12px;