gh-here 3.1.0 → 3.2.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,694 @@
1
+ /**
2
+ * Search Styles
3
+ * File search results, content search overlay, inline search
4
+ */
5
+
6
+ /* ========================================
7
+ Search Results Overlay (File Search)
8
+ ======================================== */
9
+
10
+ .search-results-overlay {
11
+ animation: slideDown 0.2s cubic-bezier(0.4, 0, 0.2, 1);
12
+ left: 0;
13
+ min-width: 400px;
14
+ position: absolute;
15
+ right: 0;
16
+ top: calc(100% + 10px);
17
+ z-index: 1000;
18
+ }
19
+
20
+ @keyframes slideDown {
21
+ from {
22
+ opacity: 0;
23
+ transform: translateY(-10px);
24
+ }
25
+ to {
26
+ opacity: 1;
27
+ transform: translateY(0);
28
+ }
29
+ }
30
+
31
+ .search-results-container {
32
+ backdrop-filter: blur(20px);
33
+ background: var(--bg-elevated);
34
+ background-color: rgba(28, 33, 40, 0.98);
35
+ border: 1px solid var(--border-primary);
36
+ border-radius: var(--radius-lg);
37
+ box-shadow: var(--shadow-xl);
38
+ display: flex;
39
+ flex-direction: column;
40
+ max-height: 400px;
41
+ overflow: hidden;
42
+ }
43
+
44
+ [data-theme="light"] .search-results-container {
45
+ background-color: rgba(255, 255, 255, 0.98);
46
+ }
47
+
48
+ .search-results-header {
49
+ background: var(--bg-secondary);
50
+ border-bottom: 1px solid var(--border-subtle);
51
+ color: var(--text-secondary);
52
+ font-size: 12px;
53
+ font-weight: 600;
54
+ letter-spacing: 0.01em;
55
+ padding: 10px 16px;
56
+ }
57
+
58
+ .search-results-count {
59
+ color: var(--text-secondary);
60
+ }
61
+
62
+ .search-results-list {
63
+ max-height: 350px;
64
+ overflow-y: auto;
65
+ }
66
+
67
+ .search-result-item {
68
+ align-items: center;
69
+ border-bottom: 1px solid var(--border-subtle);
70
+ color: var(--text-primary);
71
+ cursor: pointer;
72
+ display: flex;
73
+ gap: 12px;
74
+ padding: 10px 16px;
75
+ position: relative;
76
+ text-decoration: none;
77
+ transition: all var(--transition-base);
78
+ }
79
+
80
+ .search-result-item::before {
81
+ background: var(--link-color);
82
+ bottom: 0;
83
+ content: '';
84
+ left: 0;
85
+ opacity: 0;
86
+ position: absolute;
87
+ top: 0;
88
+ transition: opacity var(--transition-base);
89
+ width: 3px;
90
+ }
91
+
92
+ .search-result-item:last-child {
93
+ border-bottom: none;
94
+ }
95
+
96
+ .search-result-item:hover {
97
+ background: linear-gradient(90deg, var(--hover-bg) 0%, transparent 100%);
98
+ padding-left: 20px;
99
+ }
100
+
101
+ .search-result-item:hover::before {
102
+ opacity: 1;
103
+ }
104
+
105
+ .search-result-item .result-icon {
106
+ fill: var(--text-secondary);
107
+ flex-shrink: 0;
108
+ }
109
+
110
+ .search-result-item .result-icon.file-icon {
111
+ opacity: 0.7;
112
+ }
113
+
114
+ .search-result-content {
115
+ display: flex;
116
+ flex: 1;
117
+ flex-direction: column;
118
+ gap: 2px;
119
+ min-width: 0;
120
+ }
121
+
122
+ .search-result-path {
123
+ color: var(--text-primary);
124
+ font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
125
+ font-size: 13px;
126
+ overflow: hidden;
127
+ text-overflow: ellipsis;
128
+ white-space: nowrap;
129
+ }
130
+
131
+ .search-highlight {
132
+ background: linear-gradient(120deg, rgba(255, 200, 50, 0.35) 0%, rgba(255, 200, 50, 0.25) 100%);
133
+ border-radius: 3px;
134
+ box-shadow: 0 1px 2px rgba(255, 200, 50, 0.2);
135
+ color: var(--text-accent);
136
+ font-weight: 600;
137
+ padding: 1px 3px;
138
+ }
139
+
140
+ [data-theme="light"] .search-highlight {
141
+ background: linear-gradient(120deg, rgba(255, 200, 50, 0.45) 0%, rgba(255, 200, 50, 0.35) 100%);
142
+ box-shadow: 0 1px 2px rgba(255, 200, 50, 0.25);
143
+ }
144
+
145
+ /* ========================================
146
+ Inline Search (In-File Search)
147
+ ======================================== */
148
+
149
+ .inline-search-overlay {
150
+ -webkit-backdrop-filter: blur(24px) saturate(180%);
151
+ animation: slideInRight 0.25s cubic-bezier(0.4, 0, 0.2, 1);
152
+ backdrop-filter: blur(24px) saturate(180%);
153
+ background: linear-gradient(135deg, rgba(28, 33, 40, 0.98) 0%, rgba(22, 27, 34, 0.95) 100%);
154
+ border: 1px solid var(--border-primary);
155
+ border-radius: var(--radius-xl);
156
+ box-shadow: var(--shadow-2xl), var(--shadow-glow);
157
+ max-width: 520px;
158
+ min-width: 320px;
159
+ overflow: hidden;
160
+ position: fixed;
161
+ right: 24px;
162
+ top: 70px;
163
+ z-index: 1000;
164
+ }
165
+
166
+ [data-theme="light"] .inline-search-overlay {
167
+ background-color: rgba(255, 255, 255, 0.98);
168
+ box-shadow: var(--shadow-xl);
169
+ }
170
+
171
+ @keyframes slideInRight {
172
+ from {
173
+ opacity: 0;
174
+ transform: translateX(20px);
175
+ }
176
+ to {
177
+ opacity: 1;
178
+ transform: translateX(0);
179
+ }
180
+ }
181
+
182
+ .inline-search-container {
183
+ display: flex;
184
+ flex-direction: column;
185
+ }
186
+
187
+ .inline-search-input-wrapper {
188
+ align-items: center;
189
+ background: var(--bg-secondary);
190
+ border-bottom: 1px solid var(--border-subtle);
191
+ display: flex;
192
+ gap: 10px;
193
+ padding: 12px;
194
+ }
195
+
196
+ .inline-search-input {
197
+ background: var(--bg-primary);
198
+ border: 1px solid var(--border-primary);
199
+ border-radius: var(--radius-md);
200
+ box-shadow: var(--shadow-inner);
201
+ color: var(--text-primary);
202
+ flex: 1;
203
+ font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
204
+ font-size: 13px;
205
+ outline: none;
206
+ padding: 8px 14px;
207
+ transition: all var(--transition-base);
208
+ }
209
+
210
+ .inline-search-input:hover {
211
+ background: var(--bg-elevated);
212
+ border-color: var(--border-secondary);
213
+ }
214
+
215
+ .inline-search-input:focus {
216
+ background: var(--bg-primary);
217
+ border-color: var(--link-color);
218
+ box-shadow: 0 0 0 3px rgba(88, 166, 255, 0.15), var(--shadow-inner);
219
+ outline: none;
220
+ }
221
+
222
+ .inline-search-options {
223
+ display: flex;
224
+ gap: 4px;
225
+ }
226
+
227
+ .inline-search-option {
228
+ align-items: center;
229
+ background: var(--bg-primary);
230
+ border: 1px solid var(--border-primary);
231
+ border-radius: var(--radius-sm);
232
+ box-shadow: var(--shadow-sm);
233
+ color: var(--text-secondary);
234
+ cursor: pointer;
235
+ display: flex;
236
+ font-size: 11px;
237
+ font-weight: 500;
238
+ justify-content: center;
239
+ min-width: 32px;
240
+ padding: 6px 10px;
241
+ transition: all var(--transition-base);
242
+ }
243
+
244
+ .inline-search-option:hover {
245
+ background: var(--hover-bg);
246
+ border-color: var(--border-secondary);
247
+ box-shadow: var(--shadow-md);
248
+ color: var(--text-primary);
249
+ transform: translateY(-1px);
250
+ }
251
+
252
+ .inline-search-option.active {
253
+ background: var(--link-color);
254
+ border-color: var(--link-color);
255
+ box-shadow: 0 2px 4px rgba(88, 166, 255, 0.3);
256
+ color: white;
257
+ }
258
+
259
+ .inline-search-option.active:hover {
260
+ background: var(--link-hover);
261
+ border-color: var(--link-hover);
262
+ box-shadow: 0 4px 8px rgba(88, 166, 255, 0.4);
263
+ transform: translateY(-1px);
264
+ }
265
+
266
+ .inline-search-info {
267
+ align-items: center;
268
+ background: var(--bg-secondary);
269
+ border-top: 1px solid var(--border-subtle);
270
+ color: var(--text-secondary);
271
+ display: flex;
272
+ font-size: 12px;
273
+ justify-content: space-between;
274
+ padding: 10px 14px;
275
+ }
276
+
277
+ .inline-search-count {
278
+ flex: 1;
279
+ font-weight: 500;
280
+ letter-spacing: 0.01em;
281
+ }
282
+
283
+ .inline-search-count.error {
284
+ color: #ff7b72;
285
+ font-weight: 600;
286
+ }
287
+
288
+ .inline-search-close {
289
+ align-items: center;
290
+ background: none;
291
+ border: none;
292
+ border-radius: var(--radius-sm);
293
+ color: var(--text-secondary);
294
+ cursor: pointer;
295
+ display: flex;
296
+ font-size: 18px;
297
+ height: 28px;
298
+ justify-content: center;
299
+ line-height: 1;
300
+ opacity: 0.7;
301
+ padding: 0;
302
+ transition: all var(--transition-base);
303
+ width: 28px;
304
+ }
305
+
306
+ .inline-search-close:hover {
307
+ background: var(--hover-bg-strong);
308
+ color: var(--text-primary);
309
+ opacity: 1;
310
+ transform: scale(1.1);
311
+ }
312
+
313
+ .inline-search-close:active {
314
+ transform: scale(0.95);
315
+ }
316
+
317
+ /* Inline search match highlighting */
318
+ .inline-search-match {
319
+ background: linear-gradient(120deg, rgba(255, 235, 59, 0.25) 0%, rgba(255, 235, 59, 0.15) 100%);
320
+ border-radius: 3px;
321
+ box-shadow: 0 1px 2px rgba(255, 235, 59, 0.2);
322
+ font-weight: 500;
323
+ padding: 2px 2px;
324
+ transition: all var(--transition-base);
325
+ }
326
+
327
+ [data-theme="dark"] .inline-search-match {
328
+ background: linear-gradient(120deg, rgba(255, 235, 59, 0.2) 0%, rgba(255, 235, 59, 0.1) 100%);
329
+ box-shadow: 0 1px 2px rgba(255, 235, 59, 0.15);
330
+ }
331
+
332
+ .inline-search-match.active {
333
+ animation: pulse 1.5s ease-in-out infinite;
334
+ background: linear-gradient(120deg, rgba(255, 235, 59, 0.5) 0%, rgba(255, 235, 59, 0.35) 100%);
335
+ box-shadow: 0 2px 8px rgba(255, 235, 59, 0.4), 0 0 0 1px rgba(255, 235, 59, 0.2);
336
+ outline: 2px solid rgba(255, 235, 59, 0.9);
337
+ outline-offset: 2px;
338
+ }
339
+
340
+ [data-theme="dark"] .inline-search-match.active {
341
+ background: linear-gradient(120deg, rgba(255, 235, 59, 0.4) 0%, rgba(255, 235, 59, 0.25) 100%);
342
+ box-shadow: 0 2px 8px rgba(255, 235, 59, 0.3), 0 0 0 1px rgba(255, 235, 59, 0.15);
343
+ }
344
+
345
+ @keyframes pulse {
346
+ 0%, 100% {
347
+ box-shadow: 0 2px 8px rgba(255, 235, 59, 0.4), 0 0 0 1px rgba(255, 235, 59, 0.2);
348
+ }
349
+ 50% {
350
+ box-shadow: 0 2px 12px rgba(255, 235, 59, 0.5), 0 0 0 2px rgba(255, 235, 59, 0.3);
351
+ }
352
+ }
353
+
354
+ /* ========================================
355
+ Content Search Overlay
356
+ ======================================== */
357
+
358
+ .content-search-overlay {
359
+ -webkit-backdrop-filter: blur(24px) saturate(180%);
360
+ animation: modalSlideIn 0.3s cubic-bezier(0.4, 0, 0.2, 1);
361
+ backdrop-filter: blur(24px) saturate(180%);
362
+ background: linear-gradient(135deg, rgba(28, 33, 40, 0.98) 0%, rgba(22, 27, 34, 0.95) 100%);
363
+ border: 1px solid var(--border-primary);
364
+ border-radius: var(--radius-2xl);
365
+ box-shadow: var(--shadow-2xl), 0 0 0 1px rgba(0, 0, 0, 0.1), var(--shadow-glow);
366
+ display: flex;
367
+ flex-direction: column;
368
+ left: 50%;
369
+ max-height: 82vh;
370
+ max-width: 840px;
371
+ overflow: hidden;
372
+ position: fixed;
373
+ top: 50%;
374
+ transform: translate(-50%, -50%);
375
+ width: 90%;
376
+ z-index: 2000;
377
+ }
378
+
379
+ [data-theme="light"] .content-search-overlay {
380
+ background-color: rgba(255, 255, 255, 0.98);
381
+ box-shadow: var(--shadow-xl), 0 0 0 1px rgba(0, 0, 0, 0.05);
382
+ }
383
+
384
+ @keyframes modalSlideIn {
385
+ from {
386
+ opacity: 0;
387
+ transform: translate(-50%, -48%);
388
+ }
389
+ to {
390
+ opacity: 1;
391
+ transform: translate(-50%, -50%);
392
+ }
393
+ }
394
+
395
+ .content-search-container {
396
+ display: flex;
397
+ flex-direction: column;
398
+ height: 100%;
399
+ }
400
+
401
+ .content-search-header {
402
+ align-items: center;
403
+ background: var(--bg-secondary);
404
+ border-bottom: 1px solid var(--border-subtle);
405
+ display: flex;
406
+ justify-content: space-between;
407
+ padding: 20px 24px;
408
+ }
409
+
410
+ .content-search-header h3 {
411
+ color: var(--text-primary);
412
+ font-size: 17px;
413
+ font-weight: 600;
414
+ letter-spacing: -0.01em;
415
+ margin: 0;
416
+ }
417
+
418
+ .content-search-close {
419
+ align-items: center;
420
+ background: none;
421
+ border: none;
422
+ border-radius: var(--radius-md);
423
+ color: var(--text-secondary);
424
+ cursor: pointer;
425
+ display: flex;
426
+ font-size: 20px;
427
+ height: 32px;
428
+ justify-content: center;
429
+ line-height: 1;
430
+ opacity: 0.7;
431
+ padding: 0;
432
+ transition: all var(--transition-base);
433
+ width: 32px;
434
+ }
435
+
436
+ .content-search-close:hover {
437
+ background: var(--hover-bg-strong);
438
+ color: var(--text-primary);
439
+ opacity: 1;
440
+ transform: scale(1.1) rotate(90deg);
441
+ }
442
+
443
+ .content-search-close:active {
444
+ transform: scale(0.95) rotate(90deg);
445
+ }
446
+
447
+ .content-search-input-wrapper {
448
+ align-items: center;
449
+ background: var(--bg-secondary);
450
+ border-bottom: 1px solid var(--border-subtle);
451
+ display: flex;
452
+ gap: 12px;
453
+ padding: 18px 24px;
454
+ }
455
+
456
+ .content-search-input {
457
+ background: var(--bg-primary);
458
+ border: 1.5px solid var(--border-primary);
459
+ border-radius: var(--radius-md);
460
+ box-shadow: var(--shadow-inner);
461
+ color: var(--text-primary);
462
+ flex: 1;
463
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif;
464
+ font-size: 14px;
465
+ outline: none;
466
+ padding: 12px 16px;
467
+ transition: all var(--transition-base);
468
+ }
469
+
470
+ .content-search-input:hover {
471
+ background: var(--bg-elevated);
472
+ border-color: var(--border-secondary);
473
+ }
474
+
475
+ .content-search-input:focus {
476
+ background: var(--bg-primary);
477
+ border-color: var(--link-color);
478
+ box-shadow: 0 0 0 3px rgba(88, 166, 255, 0.15), var(--shadow-inner);
479
+ outline: none;
480
+ }
481
+
482
+ .content-search-options {
483
+ display: flex;
484
+ gap: 6px;
485
+ }
486
+
487
+ .content-search-option {
488
+ align-items: center;
489
+ background: var(--bg-primary);
490
+ border: 1px solid var(--border-primary);
491
+ border-radius: var(--radius-sm);
492
+ box-shadow: var(--shadow-sm);
493
+ color: var(--text-secondary);
494
+ cursor: pointer;
495
+ display: flex;
496
+ font-size: 11px;
497
+ font-weight: 500;
498
+ justify-content: center;
499
+ min-width: 36px;
500
+ padding: 8px 12px;
501
+ transition: all var(--transition-base);
502
+ }
503
+
504
+ .content-search-option:hover {
505
+ background: var(--hover-bg);
506
+ border-color: var(--border-secondary);
507
+ box-shadow: var(--shadow-md);
508
+ color: var(--text-primary);
509
+ transform: translateY(-1px);
510
+ }
511
+
512
+ .content-search-option.active {
513
+ background: var(--link-color);
514
+ border-color: var(--link-color);
515
+ box-shadow: 0 2px 4px rgba(88, 166, 255, 0.3);
516
+ color: white;
517
+ }
518
+
519
+ .content-search-option.active:hover {
520
+ background: var(--link-hover);
521
+ border-color: var(--link-hover);
522
+ box-shadow: 0 4px 8px rgba(88, 166, 255, 0.4);
523
+ transform: translateY(-1px);
524
+ }
525
+
526
+ .content-search-info {
527
+ background: var(--bg-secondary);
528
+ border-bottom: 1px solid var(--border-subtle);
529
+ color: var(--text-secondary);
530
+ font-size: 12px;
531
+ font-weight: 500;
532
+ letter-spacing: 0.01em;
533
+ padding: 14px 24px;
534
+ }
535
+
536
+ .content-search-status.error {
537
+ color: #ff7b72;
538
+ font-weight: 600;
539
+ }
540
+
541
+ .content-search-results {
542
+ flex: 1;
543
+ overflow-y: auto;
544
+ padding: 4px 0;
545
+ scrollbar-color: var(--border-primary) transparent;
546
+ scrollbar-width: thin;
547
+ }
548
+
549
+ .content-search-results::-webkit-scrollbar {
550
+ width: 8px;
551
+ }
552
+
553
+ .content-search-results::-webkit-scrollbar-track {
554
+ background: transparent;
555
+ }
556
+
557
+ .content-search-results::-webkit-scrollbar-thumb {
558
+ background: var(--border-primary);
559
+ border-radius: 4px;
560
+ }
561
+
562
+ .content-search-results::-webkit-scrollbar-thumb:hover {
563
+ background: var(--text-secondary);
564
+ }
565
+
566
+ .content-search-result {
567
+ border-bottom: 1px solid var(--border-subtle);
568
+ cursor: pointer;
569
+ padding: 14px 24px;
570
+ position: relative;
571
+ transition: all var(--transition-base);
572
+ }
573
+
574
+ .content-search-result::before {
575
+ background: var(--link-color);
576
+ bottom: 0;
577
+ content: '';
578
+ left: 0;
579
+ opacity: 0;
580
+ position: absolute;
581
+ top: 0;
582
+ transition: opacity var(--transition-base);
583
+ width: 3px;
584
+ }
585
+
586
+ .content-search-result:hover {
587
+ background: var(--hover-bg);
588
+ padding-left: 28px;
589
+ }
590
+
591
+ .content-search-result:hover::before {
592
+ opacity: 1;
593
+ }
594
+
595
+ .content-search-result-header {
596
+ align-items: center;
597
+ display: flex;
598
+ gap: 12px;
599
+ justify-content: space-between;
600
+ margin-bottom: 10px;
601
+ }
602
+
603
+ .result-path {
604
+ color: var(--link-color);
605
+ flex: 1;
606
+ font-size: 14px;
607
+ font-weight: 600;
608
+ min-width: 0;
609
+ overflow: hidden;
610
+ text-overflow: ellipsis;
611
+ transition: color var(--transition-base);
612
+ white-space: nowrap;
613
+ }
614
+
615
+ .content-search-result:hover .result-path {
616
+ color: var(--link-hover);
617
+ text-decoration: underline;
618
+ }
619
+
620
+ .result-count {
621
+ background: var(--bg-tertiary);
622
+ border-radius: 10px;
623
+ color: var(--text-secondary);
624
+ flex-shrink: 0;
625
+ font-size: 11px;
626
+ font-weight: 500;
627
+ padding: 2px 8px;
628
+ white-space: nowrap;
629
+ }
630
+
631
+ .content-search-matches {
632
+ display: flex;
633
+ flex-direction: column;
634
+ gap: 4px;
635
+ }
636
+
637
+ .content-search-match {
638
+ border-radius: var(--radius-sm);
639
+ display: flex;
640
+ font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
641
+ font-size: 12px;
642
+ gap: 14px;
643
+ padding: 3px 0;
644
+ transition: all var(--transition-base);
645
+ }
646
+
647
+ .content-search-match:hover {
648
+ background: var(--bg-tertiary);
649
+ padding-left: 4px;
650
+ }
651
+
652
+ .match-line-number {
653
+ color: var(--text-secondary);
654
+ font-weight: 500;
655
+ min-width: 44px;
656
+ opacity: 0.8;
657
+ text-align: right;
658
+ transition: all var(--transition-base);
659
+ user-select: none;
660
+ }
661
+
662
+ .content-search-match:hover .match-line-number {
663
+ color: var(--link-color);
664
+ opacity: 1;
665
+ }
666
+
667
+ .match-content {
668
+ color: var(--text-primary);
669
+ flex: 1;
670
+ font-weight: 400;
671
+ overflow: hidden;
672
+ text-overflow: ellipsis;
673
+ white-space: nowrap;
674
+ }
675
+
676
+ .content-search-more {
677
+ color: var(--text-secondary);
678
+ font-size: 11px;
679
+ font-style: italic;
680
+ margin-top: 4px;
681
+ }
682
+
683
+ .content-search-highlight {
684
+ background: linear-gradient(120deg, rgba(255, 235, 59, 0.3) 0%, rgba(255, 235, 59, 0.2) 100%);
685
+ border-radius: 3px;
686
+ box-shadow: 0 1px 2px rgba(255, 235, 59, 0.2);
687
+ font-weight: 500;
688
+ padding: 2px 3px;
689
+ }
690
+
691
+ [data-theme="dark"] .content-search-highlight {
692
+ background: linear-gradient(120deg, rgba(255, 235, 59, 0.25) 0%, rgba(255, 235, 59, 0.15) 100%);
693
+ box-shadow: 0 1px 2px rgba(255, 235, 59, 0.15);
694
+ }