pglens 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.
@@ -0,0 +1,801 @@
1
+ :root {
2
+ --color-primary: #2563eb;
3
+ --color-primary-hover: #1d4ed8;
4
+ --color-secondary: #64748b;
5
+ --color-success: #10b981;
6
+ --color-error: #ef4444;
7
+
8
+ --gray-50: #fafafa;
9
+ --gray-100: #f5f5f5;
10
+ --gray-200: #e5e5e5;
11
+ --gray-300: #d4d4d4;
12
+ --gray-600: #525252;
13
+ --gray-700: #404040;
14
+ --gray-900: #171717;
15
+
16
+ --bg-base: #ffffff;
17
+ --bg-elevated: var(--gray-50);
18
+ --bg-hover: var(--gray-100);
19
+ --bg-active: #eff6ff;
20
+
21
+ --text-primary: var(--gray-900);
22
+ --text-secondary: var(--gray-600);
23
+ --text-tertiary: var(--gray-300);
24
+
25
+ --border-subtle: var(--gray-200);
26
+ --border-default: var(--gray-300);
27
+
28
+ --space-1: 4px;
29
+ --space-2: 8px;
30
+ --space-3: 12px;
31
+ --space-4: 16px;
32
+ --space-5: 20px;
33
+ --space-6: 24px;
34
+ --space-8: 32px;
35
+ --space-10: 40px;
36
+
37
+ --font-size-xs: 12px;
38
+ --font-size-sm: 14px;
39
+ --font-size-base: 15px;
40
+ --font-size-lg: 18px;
41
+ --font-size-xl: 20px;
42
+ --font-size-2xl: 24px;
43
+
44
+ --font-weight-normal: 400;
45
+ --font-weight-medium: 500;
46
+ --font-weight-semibold: 600;
47
+ --font-weight-bold: 700;
48
+
49
+ --radius-sm: 6px;
50
+ --radius-md: 8px;
51
+ --radius-lg: 12px;
52
+ --radius-full: 9999px;
53
+
54
+ --transition-fast: 150ms ease;
55
+ --transition-base: 200ms ease;
56
+ }
57
+
58
+ [data-theme="dark"] {
59
+ --color-primary: #3b82f6;
60
+ --color-primary-hover: #60a5fa;
61
+ --color-secondary: #94a3b8;
62
+ --color-success: #34d399;
63
+ --color-error: #f87171;
64
+
65
+ --gray-50: #1a1a1a;
66
+ --gray-100: #262626;
67
+ --gray-200: #404040;
68
+ --gray-300: #525252;
69
+ --gray-600: #a3a3a3;
70
+ --gray-700: #d4d4d4;
71
+ --gray-900: #fafafa;
72
+
73
+ --bg-base: #0f0f0f;
74
+ --bg-elevated: var(--gray-50);
75
+ --bg-hover: var(--gray-100);
76
+ --bg-active: #1e3a5f;
77
+
78
+ --text-primary: var(--gray-900);
79
+ --text-secondary: var(--gray-600);
80
+ --text-tertiary: var(--gray-300);
81
+
82
+ --border-subtle: var(--gray-200);
83
+ --border-default: var(--gray-300);
84
+ }
85
+
86
+ * {
87
+ margin: 0;
88
+ padding: 0;
89
+ box-sizing: border-box;
90
+ }
91
+
92
+ body {
93
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Inter", "Roboto",
94
+ "Helvetica Neue", Arial, sans-serif;
95
+ font-size: var(--font-size-base);
96
+ font-weight: var(--font-weight-normal);
97
+ line-height: 1.5;
98
+ color: var(--text-primary);
99
+ background-color: var(--bg-elevated);
100
+ -webkit-font-smoothing: antialiased;
101
+ -moz-osx-font-smoothing: grayscale;
102
+ transition: background-color var(--transition-base),
103
+ color var(--transition-base);
104
+ }
105
+
106
+ code {
107
+ font-family: "SF Mono", Monaco, "Cascadia Code", "Roboto Mono", Consolas,
108
+ "Courier New", monospace;
109
+ }
110
+
111
+ .app {
112
+ display: flex;
113
+ height: 100vh;
114
+ overflow: hidden;
115
+ }
116
+
117
+ .main-content {
118
+ flex: 1;
119
+ display: flex;
120
+ flex-direction: column;
121
+ overflow: hidden;
122
+ position: relative;
123
+ background-color: var(--bg-base);
124
+ }
125
+
126
+ .sidebar {
127
+ width: 280px;
128
+ background-color: var(--bg-base);
129
+ border-right: 1px solid var(--border-subtle);
130
+ display: flex;
131
+ flex-direction: column;
132
+ height: 100vh;
133
+ overflow: hidden;
134
+ transition: width var(--transition-base);
135
+ }
136
+
137
+ .sidebar.minimized {
138
+ width: 60px;
139
+ }
140
+
141
+ .sidebar.minimized .sidebar-header-top h2,
142
+ .sidebar.minimized .sidebar-header-top .table-count,
143
+ .sidebar.minimized .sidebar-search-container,
144
+ .sidebar.minimized .sidebar-content {
145
+ display: none;
146
+ }
147
+
148
+ .sidebar.minimized .theme-selector {
149
+ display: none;
150
+ }
151
+
152
+ .sidebar.minimized .sidebar-header-top {
153
+ justify-content: center;
154
+ }
155
+
156
+ .sidebar.minimized .sidebar-toggle .toggle-icon {
157
+ transform: rotate(180deg);
158
+ }
159
+
160
+ .sidebar-header {
161
+ padding: var(--space-5);
162
+ border-bottom: 1px solid var(--border-subtle);
163
+ display: flex;
164
+ flex-direction: column;
165
+ gap: var(--space-3);
166
+ }
167
+
168
+ .sidebar-header-top {
169
+ display: flex;
170
+ justify-content: space-between;
171
+ align-items: center;
172
+ }
173
+
174
+ .sidebar-header-title {
175
+ display: flex;
176
+ align-items: center;
177
+ gap: var(--space-2);
178
+ }
179
+
180
+ .sidebar-header h2 {
181
+ font-size: var(--font-size-lg);
182
+ font-weight: var(--font-weight-semibold);
183
+ color: var(--text-primary);
184
+ margin: 0;
185
+ letter-spacing: -0.01em;
186
+ }
187
+
188
+ .sidebar-toggle {
189
+ background: none;
190
+ border: none;
191
+ cursor: pointer;
192
+ padding: var(--space-2);
193
+ border-radius: var(--radius-sm);
194
+ color: var(--text-secondary);
195
+ transition: all var(--transition-fast);
196
+ display: flex;
197
+ align-items: center;
198
+ justify-content: center;
199
+ width: 28px;
200
+ height: 28px;
201
+ }
202
+
203
+ .sidebar-toggle:hover:not(:disabled) {
204
+ background-color: var(--bg-hover);
205
+ color: var(--text-primary);
206
+ }
207
+
208
+ .sidebar-toggle:disabled,
209
+ .sidebar-toggle.disabled {
210
+ opacity: 0.4;
211
+ cursor: not-allowed;
212
+ pointer-events: none;
213
+ }
214
+
215
+ .toggle-icon {
216
+ font-size: 12px;
217
+ transition: transform var(--transition-base);
218
+ display: inline-block;
219
+ }
220
+
221
+ .sidebar-search-container {
222
+ width: 100%;
223
+ display: flex;
224
+ align-items: center;
225
+ gap: var(--space-2);
226
+ }
227
+
228
+ .sidebar-search {
229
+ flex: 1;
230
+ padding: var(--space-2) var(--space-3);
231
+ border: 1px solid var(--border-subtle);
232
+ border-radius: var(--radius-sm);
233
+ font-size: var(--font-size-sm);
234
+ outline: none;
235
+ transition: border-color var(--transition-fast);
236
+ background-color: var(--bg-elevated);
237
+ color: var(--text-primary);
238
+ }
239
+
240
+ .sidebar-search:focus {
241
+ border-color: var(--color-primary);
242
+ outline: 2px solid transparent;
243
+ outline-offset: 2px;
244
+ }
245
+
246
+ .table-count {
247
+ background-color: var(--bg-elevated);
248
+ color: var(--text-secondary);
249
+ padding: var(--space-1) var(--space-2);
250
+ border-radius: var(--radius-full);
251
+ font-size: var(--font-size-xs);
252
+ font-weight: var(--font-weight-medium);
253
+ }
254
+
255
+ .sidebar-content {
256
+ flex: 1;
257
+ overflow-y: auto;
258
+ padding: var(--space-2) 0;
259
+ }
260
+
261
+ .table-list {
262
+ list-style: none;
263
+ margin: 0;
264
+ padding: 0;
265
+ }
266
+
267
+ .table-list li {
268
+ padding: var(--space-2) var(--space-5);
269
+ cursor: pointer;
270
+ color: var(--text-primary);
271
+ font-size: var(--font-size-sm);
272
+ transition: background-color var(--transition-fast);
273
+ border-left: 3px solid transparent;
274
+ }
275
+
276
+ .table-list li:hover {
277
+ background-color: var(--bg-hover);
278
+ }
279
+
280
+ .table-list li.active {
281
+ background-color: var(--bg-active);
282
+ border-left-color: var(--color-primary);
283
+ font-weight: var(--font-weight-medium);
284
+ color: var(--color-primary);
285
+ }
286
+
287
+ .table-list li mark {
288
+ background-color: #fef3c7;
289
+ color: var(--text-primary);
290
+ padding: 0 2px;
291
+ border-radius: 2px;
292
+ }
293
+
294
+ [data-theme="dark"] .table-list li mark {
295
+ background-color: #78350f;
296
+ }
297
+
298
+ .table-list li.active mark {
299
+ background-color: #fde68a;
300
+ color: var(--color-primary);
301
+ }
302
+
303
+ [data-theme="dark"] .table-list li.active mark {
304
+ background-color: #92400e;
305
+ }
306
+
307
+ .tabs-container {
308
+ background-color: var(--bg-base);
309
+ border-bottom: 1px solid var(--border-subtle);
310
+ }
311
+
312
+ .tabs-bar {
313
+ display: flex;
314
+ overflow-x: auto;
315
+ overflow-y: hidden;
316
+ scrollbar-width: thin;
317
+ scrollbar-color: var(--border-default) transparent;
318
+ }
319
+
320
+ .tabs-bar::-webkit-scrollbar {
321
+ height: 4px;
322
+ }
323
+
324
+ .tabs-bar::-webkit-scrollbar-track {
325
+ background: transparent;
326
+ }
327
+
328
+ .tabs-bar::-webkit-scrollbar-thumb {
329
+ background-color: var(--border-default);
330
+ border-radius: var(--radius-full);
331
+ }
332
+
333
+ .close-all-button {
334
+ padding: var(--space-3) var(--space-4);
335
+ background-color: transparent;
336
+ border: none;
337
+ border-right: 1px solid var(--border-subtle);
338
+ cursor: pointer;
339
+ font-size: var(--font-size-sm);
340
+ font-weight: var(--font-weight-medium);
341
+ color: var(--text-secondary);
342
+ white-space: nowrap;
343
+ transition: all var(--transition-fast);
344
+ user-select: none;
345
+ flex-shrink: 0;
346
+ }
347
+
348
+ .close-all-button:hover {
349
+ background-color: var(--bg-hover);
350
+ color: var(--color-error);
351
+ }
352
+
353
+ .tab {
354
+ display: flex;
355
+ align-items: center;
356
+ gap: var(--space-2);
357
+ padding: var(--space-3) var(--space-4);
358
+ background-color: transparent;
359
+ border-right: 1px solid var(--border-subtle);
360
+ cursor: pointer;
361
+ white-space: nowrap;
362
+ transition: background-color var(--transition-fast);
363
+ user-select: none;
364
+ min-width: 100px;
365
+ max-width: 240px;
366
+ }
367
+
368
+ .tab:hover {
369
+ background-color: var(--bg-hover);
370
+ }
371
+
372
+ .tab.active {
373
+ background-color: var(--bg-base);
374
+ border-bottom: 2px solid var(--color-primary);
375
+ color: var(--color-primary);
376
+ font-weight: var(--font-weight-medium);
377
+ }
378
+
379
+ .tab-label {
380
+ flex: 1;
381
+ overflow: hidden;
382
+ text-overflow: ellipsis;
383
+ font-size: var(--font-size-sm);
384
+ }
385
+
386
+ .tab-close {
387
+ display: flex;
388
+ align-items: center;
389
+ justify-content: center;
390
+ width: 20px;
391
+ height: 20px;
392
+ border-radius: var(--radius-sm);
393
+ background-color: transparent;
394
+ border: none;
395
+ cursor: pointer;
396
+ padding: 0;
397
+ font-size: 16px;
398
+ line-height: 1;
399
+ color: var(--text-secondary);
400
+ transition: all var(--transition-fast);
401
+ flex-shrink: 0;
402
+ }
403
+
404
+ .tab-close:hover {
405
+ background-color: var(--bg-hover);
406
+ color: var(--text-primary);
407
+ }
408
+
409
+ .tab.active .tab-close {
410
+ color: var(--color-primary);
411
+ }
412
+
413
+ .table-view {
414
+ flex: 1;
415
+ display: flex;
416
+ flex-direction: column;
417
+ overflow: hidden;
418
+ background-color: var(--bg-base);
419
+ }
420
+
421
+ .table-header {
422
+ padding: var(--space-5) var(--space-6);
423
+ border-bottom: 1px solid var(--border-subtle);
424
+ display: flex;
425
+ justify-content: space-between;
426
+ align-items: center;
427
+ }
428
+
429
+ .table-header-left {
430
+ display: flex;
431
+ align-items: center;
432
+ gap: var(--space-3);
433
+ }
434
+
435
+ .table-header h2 {
436
+ font-size: var(--font-size-xl);
437
+ font-weight: var(--font-weight-semibold);
438
+ color: var(--text-primary);
439
+ margin: 0;
440
+ letter-spacing: -0.02em;
441
+ }
442
+
443
+ .refresh-button,
444
+ .column-button {
445
+ background: none;
446
+ border: none;
447
+ cursor: pointer;
448
+ padding: var(--space-2);
449
+ border-radius: var(--radius-sm);
450
+ color: var(--text-secondary);
451
+ transition: all var(--transition-fast);
452
+ display: flex;
453
+ align-items: center;
454
+ justify-content: center;
455
+ width: 32px;
456
+ height: 32px;
457
+ }
458
+
459
+ .refresh-button:hover,
460
+ .column-button:hover {
461
+ background-color: var(--bg-hover);
462
+ color: var(--text-primary);
463
+ }
464
+
465
+ .column-button {
466
+ padding: var(--space-2) var(--space-3);
467
+ width: auto;
468
+ height: auto;
469
+ }
470
+
471
+ .column-label {
472
+ font-size: var(--font-size-sm);
473
+ font-weight: var(--font-weight-medium);
474
+ }
475
+
476
+ .refresh-icon {
477
+ font-size: 16px;
478
+ line-height: 1;
479
+ display: inline-block;
480
+ transition: transform var(--transition-base);
481
+ }
482
+
483
+ .refresh-icon.spinning {
484
+ animation: spin 1s linear;
485
+ }
486
+
487
+ @keyframes spin {
488
+ from {
489
+ transform: rotate(0deg);
490
+ }
491
+ to {
492
+ transform: rotate(360deg);
493
+ }
494
+ }
495
+
496
+ .row-info {
497
+ color: var(--text-secondary);
498
+ font-size: var(--font-size-sm);
499
+ font-weight: var(--font-weight-normal);
500
+ }
501
+
502
+ .table-container {
503
+ flex: 1;
504
+ overflow: auto;
505
+ padding: var(--space-6);
506
+ }
507
+
508
+ table {
509
+ min-width: 100%;
510
+ width: auto;
511
+ border-collapse: collapse;
512
+ font-size: var(--font-size-sm);
513
+ table-layout: auto;
514
+ }
515
+
516
+ thead {
517
+ background-color: var(--bg-elevated);
518
+ position: sticky;
519
+ top: 0;
520
+ z-index: 10;
521
+ }
522
+
523
+ th {
524
+ padding: var(--space-3) var(--space-4);
525
+ text-align: left;
526
+ font-weight: var(--font-weight-semibold);
527
+ color: var(--text-primary);
528
+ border-bottom: 1px solid var(--border-subtle);
529
+ white-space: nowrap;
530
+ font-size: var(--font-size-xs);
531
+ text-transform: uppercase;
532
+ letter-spacing: 0.05em;
533
+ position: relative;
534
+ }
535
+
536
+ th.resizable {
537
+ min-width: 80px;
538
+ width: auto;
539
+ }
540
+
541
+ th.sortable {
542
+ cursor: pointer;
543
+ user-select: none;
544
+ transition: background-color var(--transition-fast);
545
+ }
546
+
547
+ th.sortable:hover {
548
+ background-color: var(--bg-hover);
549
+ }
550
+
551
+ th.sorted-asc,
552
+ th.sorted-desc {
553
+ background-color: var(--bg-active);
554
+ color: var(--color-primary);
555
+ }
556
+
557
+ /* Resize Handle */
558
+ .resize-handle {
559
+ position: absolute;
560
+ top: 0;
561
+ right: -2px;
562
+ width: 6px;
563
+ height: 100%;
564
+ cursor: col-resize;
565
+ background-color: transparent;
566
+ z-index: 10;
567
+ user-select: none;
568
+ transition: background-color var(--transition-fast);
569
+ }
570
+
571
+ .resize-handle:hover {
572
+ background-color: var(--color-primary);
573
+ opacity: 0.6;
574
+ }
575
+
576
+ th.resizable:hover .resize-handle {
577
+ background-color: var(--border-default);
578
+ }
579
+
580
+ th.resizable:hover .resize-handle:hover {
581
+ background-color: var(--color-primary);
582
+ opacity: 0.8;
583
+ }
584
+
585
+ .sort-indicator {
586
+ margin-left: var(--space-1);
587
+ font-weight: var(--font-weight-bold);
588
+ }
589
+
590
+ td {
591
+ padding: var(--space-3) var(--space-4);
592
+ border-bottom: 1px solid var(--border-subtle);
593
+ color: var(--text-primary);
594
+ word-break: break-word;
595
+ overflow: hidden;
596
+ text-overflow: ellipsis;
597
+ }
598
+
599
+ tr:hover {
600
+ background-color: var(--bg-hover);
601
+ }
602
+
603
+ .null-value {
604
+ color: var(--text-tertiary);
605
+ font-style: italic;
606
+ }
607
+
608
+ .column-selector {
609
+ position: relative;
610
+ }
611
+
612
+ .column-menu {
613
+ position: absolute;
614
+ top: 100%;
615
+ left: 0;
616
+ margin-top: var(--space-1);
617
+ background-color: var(--bg-base);
618
+ border: 1px solid var(--border-subtle);
619
+ border-radius: var(--radius-md);
620
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
621
+ z-index: 1000;
622
+ min-width: 200px;
623
+ max-width: 300px;
624
+ max-height: 400px;
625
+ overflow-y: auto;
626
+ }
627
+
628
+ .column-menu-header {
629
+ padding: var(--space-3) var(--space-4);
630
+ font-weight: var(--font-weight-semibold);
631
+ font-size: var(--font-size-sm);
632
+ color: var(--text-primary);
633
+ border-bottom: 1px solid var(--border-subtle);
634
+ background-color: var(--bg-elevated);
635
+ }
636
+
637
+ .column-menu-options {
638
+ padding: var(--space-2) 0;
639
+ }
640
+
641
+ .column-option {
642
+ display: flex;
643
+ align-items: center;
644
+ padding: var(--space-2) var(--space-4);
645
+ cursor: pointer;
646
+ transition: background-color var(--transition-fast);
647
+ font-size: var(--font-size-sm);
648
+ color: var(--text-primary);
649
+ }
650
+
651
+ .column-option:hover {
652
+ background-color: var(--bg-hover);
653
+ }
654
+
655
+ .column-option input[type="checkbox"] {
656
+ margin-right: var(--space-3);
657
+ cursor: pointer;
658
+ width: 16px;
659
+ height: 16px;
660
+ accent-color: var(--color-primary);
661
+ }
662
+
663
+ .column-option span {
664
+ flex: 1;
665
+ user-select: none;
666
+ }
667
+
668
+ .pagination {
669
+ display: flex;
670
+ justify-content: center;
671
+ align-items: center;
672
+ gap: var(--space-5);
673
+ padding: var(--space-5) var(--space-6);
674
+ border-top: 1px solid var(--border-subtle);
675
+ background-color: var(--bg-base);
676
+ }
677
+
678
+ .pagination-button {
679
+ padding: var(--space-2) var(--space-4);
680
+ font-size: var(--font-size-sm);
681
+ font-weight: var(--font-weight-medium);
682
+ color: var(--color-primary);
683
+ background-color: var(--bg-base);
684
+ border: 1px solid var(--border-subtle);
685
+ border-radius: var(--radius-sm);
686
+ cursor: pointer;
687
+ transition: all var(--transition-fast);
688
+ }
689
+
690
+ .pagination-button:hover:not(:disabled) {
691
+ background-color: var(--bg-hover);
692
+ border-color: var(--color-primary);
693
+ }
694
+
695
+ .pagination-button:disabled {
696
+ color: var(--text-tertiary);
697
+ border-color: var(--border-subtle);
698
+ cursor: not-allowed;
699
+ background-color: var(--bg-elevated);
700
+ opacity: 0.6;
701
+ }
702
+
703
+ .pagination-info {
704
+ color: var(--text-secondary);
705
+ font-size: var(--font-size-sm);
706
+ font-weight: var(--font-weight-normal);
707
+ }
708
+
709
+ .theme-selector {
710
+ position: relative;
711
+ }
712
+
713
+ .theme-button {
714
+ background: none;
715
+ border: none;
716
+ cursor: pointer;
717
+ padding: var(--space-2);
718
+ border-radius: var(--radius-sm);
719
+ color: var(--text-secondary);
720
+ transition: all var(--transition-fast);
721
+ display: flex;
722
+ align-items: center;
723
+ justify-content: center;
724
+ width: 32px;
725
+ height: 32px;
726
+ font-size: 16px;
727
+ }
728
+
729
+ .theme-button:hover {
730
+ background-color: var(--bg-hover);
731
+ color: var(--text-primary);
732
+ }
733
+
734
+ .theme-menu {
735
+ position: absolute;
736
+ top: 100%;
737
+ right: 0;
738
+ margin-top: var(--space-1);
739
+ background-color: var(--bg-base);
740
+ border: 1px solid var(--border-subtle);
741
+ border-radius: var(--radius-md);
742
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
743
+ z-index: 1000;
744
+ min-width: 140px;
745
+ overflow: hidden;
746
+ }
747
+
748
+ .theme-option {
749
+ display: block;
750
+ width: 100%;
751
+ padding: var(--space-2) var(--space-4);
752
+ background: none;
753
+ border: none;
754
+ text-align: left;
755
+ cursor: pointer;
756
+ font-size: var(--font-size-sm);
757
+ color: var(--text-primary);
758
+ transition: background-color var(--transition-fast);
759
+ }
760
+
761
+ .theme-option:hover {
762
+ background-color: var(--bg-hover);
763
+ }
764
+
765
+ .theme-option:first-child {
766
+ border-top-left-radius: var(--radius-md);
767
+ border-top-right-radius: var(--radius-md);
768
+ }
769
+
770
+ .theme-option:last-child {
771
+ border-bottom-left-radius: var(--radius-md);
772
+ border-bottom-right-radius: var(--radius-md);
773
+ }
774
+
775
+ .loading,
776
+ .error,
777
+ .empty {
778
+ padding: var(--space-6);
779
+ text-align: center;
780
+ color: var(--text-secondary);
781
+ font-size: var(--font-size-sm);
782
+ }
783
+
784
+ .error {
785
+ color: var(--color-error);
786
+ }
787
+
788
+ .empty-state,
789
+ .loading-state,
790
+ .error-state {
791
+ display: flex;
792
+ align-items: center;
793
+ justify-content: center;
794
+ height: 100%;
795
+ color: var(--text-secondary);
796
+ font-size: var(--font-size-base);
797
+ }
798
+
799
+ .error-state {
800
+ color: var(--color-error);
801
+ }