@youtyan/code-viewer 0.5.4 → 0.6.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.
- package/README.md +389 -13
- package/dist/code-viewer.js +15568 -9512
- package/package.json +1 -1
- package/skills/code-viewer-query/SKILL.md +159 -14
- package/skills/code-viewer-snapshot/SKILL.md +59 -2
- package/web/app.js +830 -169
- package/web/index.html +1 -1
- package/web/style.css +118 -26
package/web/index.html
CHANGED
|
@@ -116,7 +116,7 @@
|
|
|
116
116
|
</div>
|
|
117
117
|
</div>
|
|
118
118
|
<div class="sb-filter-wrap">
|
|
119
|
-
<input id="sb-filter" type="search" placeholder="filter files…
|
|
119
|
+
<input id="sb-filter" type="search" placeholder="filter files… / ⌘K" title="Use /pattern/ for regex. Press / to focus this field, Cmd/Ctrl+K for the full-file palette, Ctrl+G for grep, ? for help." autocomplete="off" />
|
|
120
120
|
</div>
|
|
121
121
|
<ul id="filelist"></ul>
|
|
122
122
|
<div id="sidebar-resizer" aria-hidden="true"></div>
|
package/web/style.css
CHANGED
|
@@ -528,6 +528,10 @@ body[data-code-font-size="xlarge"] { --code-font-size: 15px; }
|
|
|
528
528
|
cursor: pointer;
|
|
529
529
|
transition: border-color 0.12s, background 0.12s, box-shadow 0.12s;
|
|
530
530
|
}
|
|
531
|
+
.ref-selector[hidden],
|
|
532
|
+
#repo-target-wrap {
|
|
533
|
+
display: none !important;
|
|
534
|
+
}
|
|
531
535
|
[data-theme="dark"] .ref-selector {
|
|
532
536
|
border-color: var(--border);
|
|
533
537
|
background: var(--bg-soft);
|
|
@@ -573,6 +577,14 @@ body[data-code-font-size="xlarge"] { --code-font-size: 15px; }
|
|
|
573
577
|
border-color: transparent;
|
|
574
578
|
box-shadow: none;
|
|
575
579
|
}
|
|
580
|
+
body.gdp-repo-page #repo-target-wrap:not([hidden]),
|
|
581
|
+
body.gdp-file-detail-page.gdp-repo-blob-page #repo-target-wrap:not([hidden]) {
|
|
582
|
+
display: flex !important;
|
|
583
|
+
}
|
|
584
|
+
body.gdp-diff-page #repo-target-wrap:not([hidden]),
|
|
585
|
+
body.gdp-diff-page #repo-target-wrap {
|
|
586
|
+
display: none !important;
|
|
587
|
+
}
|
|
576
588
|
.ref-dots {
|
|
577
589
|
color: var(--fg-subtle);
|
|
578
590
|
font-size: 14px;
|
|
@@ -7885,6 +7897,11 @@ body.db-resizing {
|
|
|
7885
7897
|
flex: 1;
|
|
7886
7898
|
min-width: 0;
|
|
7887
7899
|
overflow-y: auto;
|
|
7900
|
+
/* 横スクロールはペインで受けない。各テーブルの .db-snapshot-diff-rows-viewport
|
|
7901
|
+
* (overflow-x:auto) が body 行だけを横スクロールする。ペインで両軸 scroll に
|
|
7902
|
+
* すると目次バー / テーブル名バー / 列ヘッダの sticky が横スクロールで全部
|
|
7903
|
+
* 流れて積層がぐちゃぐちゃになるので明示的に hidden にする。 */
|
|
7904
|
+
overflow-x: hidden;
|
|
7888
7905
|
border: 1px solid var(--border);
|
|
7889
7906
|
border-radius: 6px;
|
|
7890
7907
|
background: var(--bg);
|
|
@@ -7892,12 +7909,20 @@ body.db-resizing {
|
|
|
7892
7909
|
* left/right padding を取らず、内部の .db-snapshot-diff-inline 側で
|
|
7893
7910
|
* inset を持たせる。toc だけ pane の端まで広がる。 */
|
|
7894
7911
|
padding: 0;
|
|
7895
|
-
/* sticky
|
|
7896
|
-
*
|
|
7897
|
-
*
|
|
7898
|
-
scroll-padding-top:
|
|
7912
|
+
/* sticky 帯 (目次バー + テーブル名 + 列ヘッダ) ぶん、scrollIntoView の
|
|
7913
|
+
* 停止位置を下げる。chip クリック時に section が sticky 裏に隠れて
|
|
7914
|
+
* 「中途半端な位置で止まる」のを防ぐ。 */
|
|
7915
|
+
scroll-padding-top: calc(
|
|
7916
|
+
var(--snap-diff-toc-h) + var(--snap-diff-table-header-h) +
|
|
7917
|
+
var(--snap-diff-col-header-h)
|
|
7918
|
+
);
|
|
7899
7919
|
}
|
|
7900
7920
|
.db-snapshot-diff-inline {
|
|
7921
|
+
/* sticky 3 段 (目次 / テーブル名 / 列ヘッダ) の高さを CSS 変数で持ち、
|
|
7922
|
+
* top 計算と scroll-padding-top を一箇所で管理する。 */
|
|
7923
|
+
--snap-diff-toc-h: 40px;
|
|
7924
|
+
--snap-diff-table-header-h: 34px;
|
|
7925
|
+
--snap-diff-col-header-h: 30px;
|
|
7901
7926
|
padding: 0 12px 12px;
|
|
7902
7927
|
}
|
|
7903
7928
|
.db-snapshot-right-pane:empty::before {
|
|
@@ -7962,7 +7987,7 @@ body.db-resizing {
|
|
|
7962
7987
|
.db-snapshot-diff-toc {
|
|
7963
7988
|
position: sticky;
|
|
7964
7989
|
top: 0;
|
|
7965
|
-
z-index:
|
|
7990
|
+
z-index: 30;
|
|
7966
7991
|
display: flex;
|
|
7967
7992
|
gap: 6px;
|
|
7968
7993
|
padding: 8px 12px;
|
|
@@ -7974,6 +7999,8 @@ body.db-resizing {
|
|
|
7974
7999
|
overflow-y: hidden;
|
|
7975
8000
|
white-space: nowrap;
|
|
7976
8001
|
scroll-padding: 0 12px;
|
|
8002
|
+
height: var(--snap-diff-toc-h);
|
|
8003
|
+
box-sizing: border-box;
|
|
7977
8004
|
}
|
|
7978
8005
|
.db-snapshot-diff-toc-chip {
|
|
7979
8006
|
flex: 0 0 auto;
|
|
@@ -8474,10 +8501,12 @@ body.db-resizing {
|
|
|
8474
8501
|
font-size: var(--db-font-base);
|
|
8475
8502
|
}
|
|
8476
8503
|
.db-snapshot-diff-table {
|
|
8504
|
+
/* 各テーブルは「テーブル名 (sticky)」「列ヘッダ (sticky, scrollLeft 同期)」
|
|
8505
|
+
* 「rows-viewport (overflow-x:auto)」の 3 層構造。
|
|
8506
|
+
* overflow:hidden は付けない (内部 sticky を殺す)。 */
|
|
8477
8507
|
border: 1px solid var(--border);
|
|
8478
8508
|
border-radius: 6px;
|
|
8479
8509
|
margin-bottom: 8px;
|
|
8480
|
-
overflow: hidden;
|
|
8481
8510
|
}
|
|
8482
8511
|
.db-snapshot-diff-table-header {
|
|
8483
8512
|
display: flex;
|
|
@@ -8487,24 +8516,50 @@ body.db-resizing {
|
|
|
8487
8516
|
background: var(--bg-soft);
|
|
8488
8517
|
font-size: var(--db-font-base);
|
|
8489
8518
|
cursor: pointer;
|
|
8519
|
+
/* 目次バーのすぐ下に隙間ゼロで張り付く。 */
|
|
8520
|
+
position: sticky;
|
|
8521
|
+
top: var(--snap-diff-toc-h);
|
|
8522
|
+
z-index: 20;
|
|
8523
|
+
height: var(--snap-diff-table-header-h);
|
|
8524
|
+
box-sizing: border-box;
|
|
8525
|
+
border-top-left-radius: 6px;
|
|
8526
|
+
border-top-right-radius: 6px;
|
|
8490
8527
|
}
|
|
8491
8528
|
.db-snapshot-diff-table-header:hover {
|
|
8492
8529
|
background: var(--bg-mute);
|
|
8493
8530
|
}
|
|
8531
|
+
.db-snapshot-diff-col-header-wrap {
|
|
8532
|
+
/* 列ヘッダ専用 wrap。rows-viewport (overflow-x:auto) の scrollLeft を JS で
|
|
8533
|
+
* 同期して、横スクロール時もデータ列と列名の位置が揃うようにする。
|
|
8534
|
+
* 自身は overflow:hidden で内部 table が右にはみ出ても scrollbar を出さない。
|
|
8535
|
+
* 上端は table-header (背景同色 var(--bg-soft)) と地続きに見せたいので
|
|
8536
|
+
* border-top は持たない。下端 1px だけが列ヘッダと body の境界を描く。 */
|
|
8537
|
+
position: sticky;
|
|
8538
|
+
top: calc(
|
|
8539
|
+
var(--snap-diff-toc-h) + var(--snap-diff-table-header-h) - 1px
|
|
8540
|
+
);
|
|
8541
|
+
z-index: 15;
|
|
8542
|
+
height: var(--snap-diff-col-header-h);
|
|
8543
|
+
box-sizing: border-box;
|
|
8544
|
+
overflow: hidden;
|
|
8545
|
+
background: var(--bg-soft);
|
|
8546
|
+
border-bottom: 1px solid var(--border);
|
|
8547
|
+
}
|
|
8548
|
+
.db-snapshot-diff-rows-viewport {
|
|
8549
|
+
/* body 行だけが横スクロール対象。縦は親 (.db-snapshot-right-pane) が受ける。 */
|
|
8550
|
+
overflow-x: auto;
|
|
8551
|
+
overflow-y: visible;
|
|
8552
|
+
}
|
|
8494
8553
|
.db-snapshot-diff-table-name {
|
|
8495
8554
|
font-weight: 600;
|
|
8496
8555
|
}
|
|
8497
8556
|
.db-snapshot-diff-table-stats {
|
|
8498
8557
|
color: var(--fg-muted);
|
|
8499
8558
|
}
|
|
8500
|
-
.db-snapshot-diff-rows-container
|
|
8501
|
-
|
|
8502
|
-
|
|
8503
|
-
|
|
8504
|
-
* できない」操作不能の元だった (nested scroll trap)。
|
|
8505
|
-
* 横に広い diff grid のためにヨコだけ auto を残す。 */
|
|
8506
|
-
overflow-x: auto;
|
|
8507
|
-
}
|
|
8559
|
+
/* (旧) .db-snapshot-diff-rows-container は廃止。新構造では
|
|
8560
|
+
* .db-snapshot-diff-rows-viewport (overflow-x:auto) が body 行の横スクロールを
|
|
8561
|
+
* 担い、列ヘッダは .db-snapshot-diff-col-header-wrap に分離されて
|
|
8562
|
+
* scrollLeft 同期で追従する。 */
|
|
8508
8563
|
/* (deleted) 旧 row-based diff レイアウトの dead CSS を削除した。
|
|
8509
8564
|
* - .db-snapshot-diff-row / .db-snapshot-diff-type / .db-snapshot-diff-key
|
|
8510
8565
|
* - .db-snapshot-diff-changes / .db-snapshot-diff-values
|
|
@@ -8526,37 +8581,59 @@ body.db-resizing {
|
|
|
8526
8581
|
font-size: var(--db-font-base);
|
|
8527
8582
|
}
|
|
8528
8583
|
|
|
8529
|
-
/* Diff grid table
|
|
8584
|
+
/* Diff grid table
|
|
8585
|
+
* 構造: 各テーブルにつき 2 つの <table class="db-snap-diff-grid"> を作る。
|
|
8586
|
+
* - 列ヘッダ用 (thead のみ、.db-snapshot-diff-col-header-wrap 内)
|
|
8587
|
+
* - body 用 (tbody のみ、.db-snapshot-diff-rows-viewport 内)
|
|
8588
|
+
* 両 table に同じ <colgroup> を入れ、JS (ResizeObserver) で body 側の各 col
|
|
8589
|
+
* 実幅を測って header 側に同じ width を反映する。これで横スクロール時も
|
|
8590
|
+
* 列ヘッダとデータ列が完全に揃う。
|
|
8591
|
+
* border-collapse:separate にする理由: collapse だと隣接 border をセル側が
|
|
8592
|
+
* 描く仕様で、sticky 化やテーブル分割と相性が悪く subpixel 透けの原因になる。 */
|
|
8530
8593
|
.db-snap-diff-grid {
|
|
8531
|
-
width: 100%;
|
|
8532
|
-
|
|
8594
|
+
min-width: 100%;
|
|
8595
|
+
width: max-content;
|
|
8596
|
+
border-collapse: separate;
|
|
8597
|
+
border-spacing: 0;
|
|
8533
8598
|
font-size: var(--db-font-base);
|
|
8534
8599
|
table-layout: auto;
|
|
8535
8600
|
}
|
|
8536
8601
|
.db-snap-diff-grid th {
|
|
8537
|
-
|
|
8538
|
-
|
|
8602
|
+
/* 列ヘッダの下端は col-header-wrap.border-bottom が描くので th 側では持たない。
|
|
8603
|
+
* 縦罫線は持たない (gutter と data 列の境界は type-cell.border-right が担う)。 */
|
|
8539
8604
|
background: var(--bg-soft);
|
|
8540
|
-
border: 1px solid var(--border);
|
|
8541
8605
|
padding: 4px 8px;
|
|
8542
8606
|
font-weight: 600;
|
|
8543
8607
|
text-align: left;
|
|
8544
8608
|
white-space: nowrap;
|
|
8545
|
-
z-index: 1;
|
|
8546
8609
|
}
|
|
8547
8610
|
.db-snap-diff-grid td {
|
|
8548
|
-
|
|
8611
|
+
/* 縦罫線は持たない。横罫線のみで行を区切る (GitHub PR diff 同様)。
|
|
8612
|
+
* gutter と data 列の境界は type-cell.border-right が担う。 */
|
|
8613
|
+
border-bottom: 1px solid var(--border);
|
|
8549
8614
|
padding: 3px 8px;
|
|
8550
8615
|
max-width: 300px;
|
|
8551
8616
|
overflow: hidden;
|
|
8552
8617
|
text-overflow: ellipsis;
|
|
8553
8618
|
white-space: nowrap;
|
|
8554
8619
|
}
|
|
8555
|
-
.db-snap-diff-grid tr
|
|
8556
|
-
|
|
8620
|
+
.db-snap-diff-grid tbody tr:last-child td {
|
|
8621
|
+
border-bottom: 0;
|
|
8557
8622
|
}
|
|
8558
|
-
|
|
8559
|
-
|
|
8623
|
+
/* 1 レコード境界の視覚化:
|
|
8624
|
+
* - updated は trBefore(snap-diff-record-start) + trAfter(snap-diff-record-end) の 2 行
|
|
8625
|
+
* - inserted/deleted は 1 行に snap-diff-record-start snap-diff-record-end 両方
|
|
8626
|
+
* 行間の通常 border (1px var(--border)) よりはっきり濃く太くしないと、ペア内
|
|
8627
|
+
* の - と + の境目とレコード境界が区別できない。
|
|
8628
|
+
* - 横境界: 2px var(--fg-muted) (灰色の濃い線)
|
|
8629
|
+
* - gutter 縦印: inset 3px var(--fg-muted) で record の左に bracket 風
|
|
8630
|
+
* (実 border ではないので border-collapse / 列幅同期に影響しない) */
|
|
8631
|
+
.db-snap-diff-grid tr.snap-diff-record-end td {
|
|
8632
|
+
border-bottom: 2px solid var(--fg-muted);
|
|
8633
|
+
}
|
|
8634
|
+
.db-snap-diff-grid tr.snap-diff-record-start td:first-child,
|
|
8635
|
+
.db-snap-diff-grid tr.snap-diff-record-end td:first-child {
|
|
8636
|
+
box-shadow: inset 3px 0 0 var(--fg-muted);
|
|
8560
8637
|
}
|
|
8561
8638
|
.db-snap-diff-grid .snap-diff-type-cell {
|
|
8562
8639
|
font-weight: 600;
|
|
@@ -8565,10 +8642,25 @@ body.db-resizing {
|
|
|
8565
8642
|
background: var(--bg-soft);
|
|
8566
8643
|
text-align: center;
|
|
8567
8644
|
min-width: 50px;
|
|
8645
|
+
/* gutter と data 列の境界は唯一ここの border-right が描く。
|
|
8646
|
+
* 他のセルは縦罫線を持たない。 */
|
|
8647
|
+
border-right: 1px solid var(--border);
|
|
8648
|
+
}
|
|
8649
|
+
.db-snap-diff-grid tr.snap-diff-del .snap-diff-type-cell {
|
|
8650
|
+
color: var(--danger);
|
|
8651
|
+
}
|
|
8652
|
+
.db-snap-diff-grid tr.snap-diff-add .snap-diff-type-cell {
|
|
8653
|
+
color: var(--success);
|
|
8568
8654
|
}
|
|
8569
8655
|
.db-snap-diff-grid .snap-diff-changed-cell {
|
|
8570
8656
|
font-weight: 600;
|
|
8571
8657
|
}
|
|
8658
|
+
.db-snap-diff-grid tr.snap-diff-del .snap-diff-changed-cell {
|
|
8659
|
+
background: var(--diff-del-bg);
|
|
8660
|
+
}
|
|
8661
|
+
.db-snap-diff-grid tr.snap-diff-add .snap-diff-changed-cell {
|
|
8662
|
+
background: var(--diff-add-bg);
|
|
8663
|
+
}
|
|
8572
8664
|
|
|
8573
8665
|
/* Inline dialog (replaces confirm/prompt) */
|
|
8574
8666
|
.db-snapshot-inline-dialog {
|