@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/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… (/)" title="Use /pattern/ for regex. Cmd/Ctrl+K focuses this field." autocomplete="off" />
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 な目次バーの高さぶん、scrollIntoView の停止位置を下げる。
7896
- * これがないと chip クリック時に section が toc 裏に隠れて「中途半端な
7897
- * 位置で止まる」状態になる。 */
7898
- scroll-padding-top: 68px;
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: 2;
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
- /* (.db-snapshot-right-pane) が縦スクロール責務を一手に持つので、
8502
- * ここでは縦方向は visible のまま。max-height + overflow-y を持っていた
8503
- * 旧実装は、マウスホイールが grid に乗ると親に伝播せず「親スクロール
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
- border-collapse: collapse;
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
- position: sticky;
8538
- top: 0;
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
- border: 1px solid var(--border);
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.snap-diff-add {
8556
- background: var(--diff-add-bg);
8620
+ .db-snap-diff-grid tbody tr:last-child td {
8621
+ border-bottom: 0;
8557
8622
  }
8558
- .db-snap-diff-grid tr.snap-diff-del {
8559
- background: var(--diff-del-bg);
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 {