dsh-explorer 0.0.0-stage → 0.1.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,628 @@
1
+ .container {
2
+ display: flex;
3
+ flex-direction: column;
4
+ height: 100%;
5
+ width: 100%;
6
+ background-color: var(--dsh-bg-base, #181818);
7
+ color: var(--dsh-fg-base, #cccccc);
8
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
9
+ font-size: var(--dsh-font-size, 13px);
10
+ user-select: none;
11
+ overflow: hidden;
12
+ box-sizing: border-box;
13
+ position: relative;
14
+ }
15
+
16
+ .header {
17
+ display: flex;
18
+ align-items: center;
19
+ justify-content: space-between;
20
+ padding: 6px 12px;
21
+ font-size: 11px;
22
+ font-weight: 700;
23
+ text-transform: uppercase;
24
+ letter-spacing: 0.05em;
25
+ color: var(--dsh-fg-muted, #858585);
26
+ border-bottom: 1px solid var(--dsh-border, rgba(255, 255, 255, 0.08));
27
+ flex-shrink: 0;
28
+ }
29
+
30
+ .headerTitle {
31
+ overflow: hidden;
32
+ text-overflow: ellipsis;
33
+ white-space: nowrap;
34
+ }
35
+
36
+ .headerActions {
37
+ display: flex;
38
+ align-items: center;
39
+ gap: 4px;
40
+ }
41
+
42
+ .iconBtn {
43
+ display: flex;
44
+ align-items: center;
45
+ justify-content: center;
46
+ width: 22px;
47
+ height: 22px;
48
+ border-radius: 4px;
49
+ border: none;
50
+ background: transparent;
51
+ color: inherit;
52
+ cursor: pointer;
53
+ opacity: 0.75;
54
+ transition: opacity 0.15s cubic-bezier(0.2, 0, 0, 1), background-color 0.15s cubic-bezier(0.2, 0, 0, 1), transform 0.12s ease;
55
+ }
56
+
57
+ .iconBtn:hover {
58
+ opacity: 1;
59
+ background-color: var(--dsh-bg-hover, rgba(255, 255, 255, 0.1));
60
+ }
61
+
62
+ .iconBtn:active {
63
+ transform: scale(0.92);
64
+ }
65
+
66
+ .iconBtnActive {
67
+ background-color: var(--dsh-bg-active, rgba(255, 255, 255, 0.15));
68
+ opacity: 1;
69
+ }
70
+
71
+ .searchBar {
72
+ padding: 6px 10px;
73
+ border-bottom: 1px solid var(--dsh-border, rgba(255, 255, 255, 0.06));
74
+ background-color: var(--dsh-bg-subtle, rgba(0, 0, 0, 0.15));
75
+ display: flex;
76
+ align-items: center;
77
+ gap: 6px;
78
+ flex-shrink: 0;
79
+ animation: searchSlide 0.16s cubic-bezier(0, 0, 0.2, 1);
80
+ }
81
+
82
+ @keyframes searchSlide {
83
+ from {
84
+ opacity: 0;
85
+ transform: translateY(-6px);
86
+ }
87
+ to {
88
+ opacity: 1;
89
+ transform: translateY(0);
90
+ }
91
+ }
92
+
93
+ .searchInput {
94
+ flex: 1;
95
+ background: var(--dsh-input-bg, rgba(255, 255, 255, 0.06));
96
+ border: 1px solid var(--dsh-border, rgba(255, 255, 255, 0.12));
97
+ border-radius: 4px;
98
+ color: inherit;
99
+ padding: 4px 8px;
100
+ font-size: 12px;
101
+ outline: none;
102
+ transition: border-color 0.15s ease;
103
+ }
104
+
105
+ .searchInput:focus {
106
+ border-color: #007fd4;
107
+ }
108
+
109
+ .clearSearchBtn {
110
+ background: transparent;
111
+ border: none;
112
+ color: inherit;
113
+ cursor: pointer;
114
+ opacity: 0.6;
115
+ font-size: 11px;
116
+ transition: opacity 0.12s ease;
117
+ }
118
+
119
+ .clearSearchBtn:hover {
120
+ opacity: 1;
121
+ }
122
+
123
+ .treeBody {
124
+ flex: 1;
125
+ overflow-y: auto;
126
+ overflow-x: hidden;
127
+ padding: 4px 0;
128
+ outline: none;
129
+ }
130
+
131
+ .row {
132
+ display: flex;
133
+ align-items: center;
134
+ height: var(--dsh-row-height, 24px);
135
+ line-height: var(--dsh-row-height, 24px);
136
+ padding-right: 8px;
137
+ cursor: pointer;
138
+ position: relative;
139
+ transition: background-color 0.12s cubic-bezier(0.2, 0, 0, 1);
140
+ }
141
+
142
+ .row:hover {
143
+ background-color: var(--dsh-row-hover, rgba(255, 255, 255, 0.05));
144
+ }
145
+
146
+ .rowSelected {
147
+ background-color: var(--dsh-row-selected, rgba(0, 122, 204, 0.25)) !important;
148
+ }
149
+
150
+ .rowFocused {
151
+ outline: 1px solid #007fd4;
152
+ outline-offset: -1px;
153
+ }
154
+
155
+ .indentGuide {
156
+ position: absolute;
157
+ top: 0;
158
+ bottom: 0;
159
+ width: 1px;
160
+ background-color: rgba(255, 255, 255, 0.06);
161
+ }
162
+
163
+ .chevron {
164
+ display: inline-flex;
165
+ align-items: center;
166
+ justify-content: center;
167
+ width: var(--dsh-icon-size, 16px);
168
+ height: var(--dsh-icon-size, 16px);
169
+ margin-right: 2px;
170
+ color: inherit;
171
+ opacity: 0.6;
172
+ transition: transform 0.22s cubic-bezier(0.2, 0, 0, 1), opacity 0.15s ease;
173
+ flex-shrink: 0;
174
+ will-change: transform;
175
+ }
176
+
177
+ .chevronExpanded {
178
+ transform: rotate(90deg);
179
+ }
180
+
181
+ .chevronHidden {
182
+ visibility: hidden;
183
+ }
184
+
185
+ /* Motion Collapse: CSS Grid animation for silky smooth folder expanding & collapsing */
186
+ .folderGroup {
187
+ display: flex;
188
+ flex-direction: column;
189
+ }
190
+
191
+ .folderChildren {
192
+ display: grid;
193
+ grid-template-rows: 0fr;
194
+ transition: grid-template-rows 0.22s cubic-bezier(0.2, 0, 0, 1), opacity 0.18s ease;
195
+ opacity: 0;
196
+ overflow: hidden;
197
+ will-change: grid-template-rows, opacity;
198
+ }
199
+
200
+ .folderChildrenOpen {
201
+ grid-template-rows: 1fr;
202
+ opacity: 1;
203
+ }
204
+
205
+ .folderChildrenClosed {
206
+ grid-template-rows: 0fr;
207
+ opacity: 0;
208
+ pointer-events: none;
209
+ }
210
+
211
+ .folderChildrenInner {
212
+ overflow: hidden;
213
+ min-height: 0;
214
+ }
215
+
216
+ .iconWrap {
217
+ display: inline-flex;
218
+ align-items: center;
219
+ justify-content: center;
220
+ width: var(--dsh-icon-size, 18px);
221
+ height: var(--dsh-icon-size, 18px);
222
+ margin-right: 6px;
223
+ flex-shrink: 0;
224
+ }
225
+
226
+ .label {
227
+ flex: 1;
228
+ overflow: hidden;
229
+ text-overflow: ellipsis;
230
+ white-space: nowrap;
231
+ font-size: var(--dsh-font-size, 13px);
232
+ }
233
+
234
+ .labelDimmed {
235
+ opacity: 0.5;
236
+ }
237
+
238
+ .gitBadge {
239
+ font-size: 10px;
240
+ font-weight: 700;
241
+ margin-left: auto;
242
+ margin-right: 4px;
243
+ padding: 1px 5px;
244
+ border-radius: 3px;
245
+ line-height: 1;
246
+ display: inline-flex;
247
+ align-items: center;
248
+ justify-content: center;
249
+ flex-shrink: 0;
250
+ letter-spacing: 0.04em;
251
+ }
252
+
253
+ .gitModified {
254
+ color: #e2c08d !important;
255
+ }
256
+
257
+ .gitUntracked {
258
+ color: #73c991 !important;
259
+ }
260
+
261
+ .gitDeleted {
262
+ color: #e5534b !important;
263
+ }
264
+
265
+ .gitBadge.gitModified {
266
+ background-color: rgba(226, 192, 141, 0.18);
267
+ }
268
+
269
+ .gitBadge.gitUntracked {
270
+ background-color: rgba(115, 201, 145, 0.18);
271
+ }
272
+
273
+ .gitBadge.gitDeleted {
274
+ background-color: rgba(229, 83, 75, 0.18);
275
+ }
276
+
277
+ .hoverActions {
278
+ display: none;
279
+ align-items: center;
280
+ gap: 2px;
281
+ margin-left: 4px;
282
+ flex-shrink: 0;
283
+ animation: actionsFadeIn 0.12s ease;
284
+ }
285
+
286
+ @keyframes actionsFadeIn {
287
+ from {
288
+ opacity: 0;
289
+ transform: translateX(4px);
290
+ }
291
+ to {
292
+ opacity: 1;
293
+ transform: translateX(0);
294
+ }
295
+ }
296
+
297
+ .row:hover .hoverActions {
298
+ display: flex;
299
+ }
300
+
301
+ .actionBtn {
302
+ display: flex;
303
+ align-items: center;
304
+ justify-content: center;
305
+ width: 20px;
306
+ height: 20px;
307
+ border-radius: 3px;
308
+ border: none;
309
+ background: transparent;
310
+ color: inherit;
311
+ cursor: pointer;
312
+ opacity: 0.7;
313
+ padding: 0;
314
+ transition: opacity 0.12s ease, background-color 0.12s ease, transform 0.12s ease;
315
+ }
316
+
317
+ .actionBtn:hover {
318
+ opacity: 1;
319
+ background-color: rgba(255, 255, 255, 0.15);
320
+ transform: scale(1.08);
321
+ }
322
+
323
+ .actionBtn:active {
324
+ transform: scale(0.92);
325
+ }
326
+
327
+ .inlineInput {
328
+ flex: 1;
329
+ background: var(--dsh-input-bg, #252526);
330
+ border: 1px solid #007fd4;
331
+ border-radius: 2px;
332
+ color: inherit;
333
+ padding: 1px 4px;
334
+ font-size: 12px;
335
+ outline: none;
336
+ height: 20px;
337
+ }
338
+
339
+ .contextMenu {
340
+ position: fixed;
341
+ background: var(--dsh-menu-bg, #252526);
342
+ border: 1px solid var(--dsh-border, rgba(255, 255, 255, 0.1));
343
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.45);
344
+ border-radius: 6px;
345
+ padding: 4px 0;
346
+ z-index: 10000;
347
+ min-width: 180px;
348
+ font-size: 12px;
349
+ color: var(--dsh-fg-base, #cccccc);
350
+ animation: contextMenuPop 0.12s cubic-bezier(0, 0, 0.2, 1);
351
+ transform-origin: top left;
352
+ }
353
+
354
+ @keyframes contextMenuPop {
355
+ from {
356
+ opacity: 0;
357
+ transform: scale(0.96) translateY(-4px);
358
+ }
359
+ to {
360
+ opacity: 1;
361
+ transform: scale(1) translateY(0);
362
+ }
363
+ }
364
+
365
+ .menuItem {
366
+ display: flex;
367
+ align-items: center;
368
+ justify-content: space-between;
369
+ padding: 5px 12px;
370
+ cursor: pointer;
371
+ transition: background-color 0.1s ease;
372
+ }
373
+
374
+ .menuItem:hover {
375
+ background-color: var(--dsh-menu-hover, #094771);
376
+ color: #ffffff;
377
+ }
378
+
379
+ .menuDivider {
380
+ height: 1px;
381
+ background-color: var(--dsh-border, rgba(255, 255, 255, 0.08));
382
+ margin: 4px 0;
383
+ }
384
+
385
+ .menuShortcut {
386
+ font-size: 10px;
387
+ opacity: 0.6;
388
+ margin-left: 16px;
389
+ }
390
+
391
+ .emptyState {
392
+ padding: 24px 16px;
393
+ text-align: center;
394
+ opacity: 0.6;
395
+ font-size: 12px;
396
+ }
397
+
398
+ /* Motion disable override */
399
+ .noMotion,
400
+ .noMotion * {
401
+ transition: none !important;
402
+ animation: none !important;
403
+ }
404
+
405
+ .noMotion .chevron,
406
+ .noMotion .folderChildren,
407
+ .noMotion .actionBtn,
408
+ .noMotion .hoverActions,
409
+ .noMotion .optionsPopover,
410
+ .noMotion .contextMenu {
411
+ transition: none !important;
412
+ animation: none !important;
413
+ }
414
+
415
+ /* Options Popover */
416
+ .optionsPopover {
417
+ position: absolute;
418
+ top: 36px;
419
+ right: 8px;
420
+ width: 280px;
421
+ max-width: calc(100% - 16px);
422
+ max-height: calc(100% - 48px);
423
+ background-color: var(--dsh-bg-elevated, #202020);
424
+ border: 1px solid var(--dsh-border, rgba(255, 255, 255, 0.14));
425
+ border-radius: 6px;
426
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.6), 0 2px 8px rgba(0, 0, 0, 0.4);
427
+ display: flex;
428
+ flex-direction: column;
429
+ z-index: 1000;
430
+ overflow: hidden;
431
+ animation: popoverFadeIn 0.15s cubic-bezier(0, 0, 0.2, 1);
432
+ }
433
+
434
+ @keyframes popoverFadeIn {
435
+ from {
436
+ opacity: 0;
437
+ transform: translateY(-6px) scale(0.97);
438
+ }
439
+ to {
440
+ opacity: 1;
441
+ transform: translateY(0) scale(1);
442
+ }
443
+ }
444
+
445
+ .optionsHeader {
446
+ display: flex;
447
+ align-items: center;
448
+ justify-content: space-between;
449
+ padding: 8px 12px;
450
+ background-color: rgba(0, 0, 0, 0.25);
451
+ border-bottom: 1px solid var(--dsh-border, rgba(255, 255, 255, 0.08));
452
+ }
453
+
454
+ .optionsHeaderTitle {
455
+ display: flex;
456
+ align-items: center;
457
+ font-size: 11px;
458
+ font-weight: 700;
459
+ letter-spacing: 0.05em;
460
+ color: var(--dsh-fg-muted, #999999);
461
+ }
462
+
463
+ .optionsIconBtn {
464
+ background: transparent;
465
+ border: none;
466
+ color: inherit;
467
+ opacity: 0.7;
468
+ cursor: pointer;
469
+ display: flex;
470
+ align-items: center;
471
+ justify-content: center;
472
+ padding: 3px;
473
+ border-radius: 3px;
474
+ transition: opacity 0.15s ease, background-color 0.15s ease;
475
+ }
476
+
477
+ .optionsIconBtn:hover {
478
+ opacity: 1;
479
+ background-color: rgba(255, 255, 255, 0.1);
480
+ }
481
+
482
+ .optionsBody {
483
+ overflow-y: auto;
484
+ padding: 10px 12px;
485
+ display: flex;
486
+ flex-direction: column;
487
+ gap: 14px;
488
+ }
489
+
490
+ .optionsSection {
491
+ display: flex;
492
+ flex-direction: column;
493
+ gap: 6px;
494
+ }
495
+
496
+ .optionsSectionTitle {
497
+ font-size: 10.5px;
498
+ font-weight: 700;
499
+ text-transform: uppercase;
500
+ letter-spacing: 0.04em;
501
+ color: var(--dsh-fg-muted, #858585);
502
+ margin-bottom: 2px;
503
+ }
504
+
505
+ .optionsRow {
506
+ display: flex;
507
+ align-items: center;
508
+ justify-content: space-between;
509
+ gap: 8px;
510
+ }
511
+
512
+ .optionsLabelWrap {
513
+ display: flex;
514
+ flex-direction: column;
515
+ gap: 1px;
516
+ }
517
+
518
+ .optionsLabel {
519
+ font-size: 12px;
520
+ font-weight: 500;
521
+ color: var(--dsh-fg-base, #cccccc);
522
+ }
523
+
524
+ .optionsSubLabel {
525
+ font-size: 10.5px;
526
+ color: var(--dsh-fg-muted, #808080);
527
+ }
528
+
529
+ .optionsBadge {
530
+ font-size: 11px;
531
+ font-weight: 600;
532
+ padding: 1px 6px;
533
+ border-radius: 3px;
534
+ background-color: rgba(255, 255, 255, 0.08);
535
+ color: var(--dsh-fg-base, #cccccc);
536
+ font-family: monospace;
537
+ }
538
+
539
+ .optionsMiniBtn {
540
+ background: rgba(255, 255, 255, 0.08);
541
+ border: none;
542
+ color: inherit;
543
+ font-size: 10px;
544
+ padding: 1px 5px;
545
+ border-radius: 3px;
546
+ cursor: pointer;
547
+ opacity: 0.8;
548
+ transition: opacity 0.12s ease;
549
+ }
550
+
551
+ .optionsMiniBtn:hover {
552
+ opacity: 1;
553
+ background: rgba(255, 255, 255, 0.16);
554
+ }
555
+
556
+ .optionsSlider {
557
+ width: 100%;
558
+ accent-color: #007fd4;
559
+ cursor: pointer;
560
+ margin-top: 4px;
561
+ height: 4px;
562
+ }
563
+
564
+ .segmentGroup {
565
+ display: flex;
566
+ background: rgba(0, 0, 0, 0.25);
567
+ border-radius: 4px;
568
+ padding: 2px;
569
+ gap: 2px;
570
+ border: 1px solid rgba(255, 255, 255, 0.06);
571
+ }
572
+
573
+ .segmentBtn {
574
+ flex: 1;
575
+ border: none;
576
+ background: transparent;
577
+ color: inherit;
578
+ padding: 4px 6px;
579
+ font-size: 11px;
580
+ border-radius: 3px;
581
+ cursor: pointer;
582
+ text-align: center;
583
+ opacity: 0.75;
584
+ transition: all 0.15s ease;
585
+ }
586
+
587
+ .segmentBtn:hover {
588
+ opacity: 1;
589
+ background: rgba(255, 255, 255, 0.06);
590
+ }
591
+
592
+ .segmentBtnActive {
593
+ background: var(--dsh-bg-active, #007fd4) !important;
594
+ color: #ffffff !important;
595
+ opacity: 1;
596
+ font-weight: 600;
597
+ }
598
+
599
+ .switch {
600
+ position: relative;
601
+ width: 32px;
602
+ height: 18px;
603
+ border-radius: 9px;
604
+ background: rgba(255, 255, 255, 0.16);
605
+ cursor: pointer;
606
+ transition: background 0.2s ease;
607
+ flex-shrink: 0;
608
+ }
609
+
610
+ .switchActive {
611
+ background: #007fd4;
612
+ }
613
+
614
+ .switchKnob {
615
+ position: absolute;
616
+ top: 2px;
617
+ left: 2px;
618
+ width: 14px;
619
+ height: 14px;
620
+ border-radius: 50%;
621
+ background: #ffffff;
622
+ transition: transform 0.2s cubic-bezier(0.2, 0, 0, 1);
623
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4);
624
+ }
625
+
626
+ .switchKnobActive {
627
+ transform: translateX(14px);
628
+ }