@youtyan/code-viewer 0.5.3 → 0.5.4
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/dist/code-viewer.js +37 -13
- package/package.json +1 -1
- package/web/app.js +674 -130
- package/web/style.css +467 -97
package/web/style.css
CHANGED
|
@@ -4916,6 +4916,11 @@ body.query-history-panel-open #content {
|
|
|
4916
4916
|
}
|
|
4917
4917
|
.db-history-pane-content {
|
|
4918
4918
|
flex: 1;
|
|
4919
|
+
/* min-height: 0 がないと、子の min-content size に引っ張られて親
|
|
4920
|
+
* (.db-history-pane の固定高さ) を超えて伸び、内側の overflow-y:auto
|
|
4921
|
+
* がスクロールバーを出さない (= 「クエリ履歴/ログ一覧がスクロールできない」
|
|
4922
|
+
* 既存バグの根本原因)。 */
|
|
4923
|
+
min-height: 0;
|
|
4919
4924
|
display: flex;
|
|
4920
4925
|
flex-direction: column;
|
|
4921
4926
|
overflow: hidden;
|
|
@@ -5820,6 +5825,11 @@ body[data-sidebar-font-size="xlarge"] .db-container {
|
|
|
5820
5825
|
overflow: hidden;
|
|
5821
5826
|
border-top: 1px solid var(--border);
|
|
5822
5827
|
background: var(--bg);
|
|
5828
|
+
/* flex container にしないと、子 (.db-history-pane-content) の flex:1 が
|
|
5829
|
+
* 効かず、子がコンテンツサイズに伸びて親の overflow:hidden が clip するだけ
|
|
5830
|
+
* の状態になる。結果、子内部の overflow-y:auto がスクロールバーを出さない。 */
|
|
5831
|
+
display: flex;
|
|
5832
|
+
flex-direction: column;
|
|
5823
5833
|
}
|
|
5824
5834
|
.db-history-pane[hidden] { display: none; }
|
|
5825
5835
|
.db-tools-section {
|
|
@@ -7721,14 +7731,22 @@ body.db-resizing {
|
|
|
7721
7731
|
/* --- Snapshot & Diff --- */
|
|
7722
7732
|
.db-snapshot-view {
|
|
7723
7733
|
padding: 12px;
|
|
7724
|
-
overflow-y: auto;
|
|
7725
7734
|
height: 100%;
|
|
7735
|
+
display: flex;
|
|
7736
|
+
flex-direction: column;
|
|
7737
|
+
min-height: 0;
|
|
7738
|
+
}
|
|
7739
|
+
/* hidden 属性は本来 display:none を当てるが、上の .db-snapshot-view の
|
|
7740
|
+
* display:flex に specificity で負けるので明示的に再宣言する。
|
|
7741
|
+
* (これを書かないと snapshot tab から離脱しても view が表示されたままになる) */
|
|
7742
|
+
.db-snapshot-view[hidden] {
|
|
7743
|
+
display: none;
|
|
7726
7744
|
}
|
|
7727
7745
|
.db-snapshot-guide {
|
|
7728
7746
|
border: 1px solid var(--border);
|
|
7729
7747
|
border-radius: 6px;
|
|
7730
7748
|
padding: 10px 12px;
|
|
7731
|
-
margin-bottom:
|
|
7749
|
+
margin-bottom: 8px;
|
|
7732
7750
|
background: var(--bg-soft);
|
|
7733
7751
|
}
|
|
7734
7752
|
.db-snapshot-guide-title {
|
|
@@ -7763,7 +7781,12 @@ body.db-resizing {
|
|
|
7763
7781
|
.db-snapshot-toolbar {
|
|
7764
7782
|
display: flex;
|
|
7765
7783
|
gap: 6px;
|
|
7766
|
-
margin-bottom:
|
|
7784
|
+
margin-bottom: 8px;
|
|
7785
|
+
}
|
|
7786
|
+
/* tableSelector が開いている時、上の Take snapshot ボタンの「もう一回押せそう感」を消す。 */
|
|
7787
|
+
.db-snapshot-create-btn.is-active-dialog {
|
|
7788
|
+
opacity: 0.5;
|
|
7789
|
+
cursor: not-allowed;
|
|
7767
7790
|
}
|
|
7768
7791
|
.db-snapshot-create-btn,
|
|
7769
7792
|
.db-snapshot-refresh-btn,
|
|
@@ -7781,38 +7804,431 @@ body.db-resizing {
|
|
|
7781
7804
|
.db-snapshot-job-cancel-btn:hover {
|
|
7782
7805
|
background: var(--bg-mute);
|
|
7783
7806
|
}
|
|
7784
|
-
.db-snapshot-
|
|
7807
|
+
.db-snapshot-progress-area {
|
|
7808
|
+
margin-bottom: 12px;
|
|
7809
|
+
display: flex;
|
|
7810
|
+
flex-direction: column;
|
|
7811
|
+
gap: 4px;
|
|
7812
|
+
}
|
|
7813
|
+
.db-snapshot-progress-row {
|
|
7814
|
+
display: flex;
|
|
7815
|
+
align-items: center;
|
|
7816
|
+
gap: 8px;
|
|
7817
|
+
padding: 6px 10px;
|
|
7785
7818
|
border: 1px solid var(--border);
|
|
7786
7819
|
border-radius: 6px;
|
|
7787
|
-
padding: 10px;
|
|
7788
|
-
margin-bottom: 12px;
|
|
7789
7820
|
background: var(--bg-soft);
|
|
7821
|
+
font-size: var(--db-font-base);
|
|
7822
|
+
}
|
|
7823
|
+
.db-snapshot-progress-row.running {
|
|
7824
|
+
border-color: color-mix(in srgb, var(--warning, #d29922) 40%, var(--border));
|
|
7825
|
+
background: color-mix(in srgb, var(--warning, #d29922) 8%, var(--bg-soft));
|
|
7826
|
+
}
|
|
7827
|
+
.db-snapshot-progress-row.error {
|
|
7828
|
+
border-color: color-mix(in srgb, var(--danger) 40%, var(--border));
|
|
7829
|
+
background: color-mix(in srgb, var(--danger) 8%, var(--bg-soft));
|
|
7830
|
+
}
|
|
7831
|
+
.db-snapshot-progress-row.aborted {
|
|
7832
|
+
color: var(--fg-muted);
|
|
7833
|
+
}
|
|
7834
|
+
.db-snapshot-progress-row.done {
|
|
7835
|
+
border-color: color-mix(in srgb, var(--success) 40%, var(--border));
|
|
7836
|
+
background: color-mix(in srgb, var(--success) 8%, var(--bg-soft));
|
|
7837
|
+
}
|
|
7838
|
+
.db-snapshot-progress-label {
|
|
7839
|
+
flex: 1;
|
|
7840
|
+
overflow: hidden;
|
|
7841
|
+
text-overflow: ellipsis;
|
|
7842
|
+
white-space: nowrap;
|
|
7843
|
+
}
|
|
7844
|
+
.db-snapshot-progress-row .db-snapshot-job-cancel-btn {
|
|
7845
|
+
padding: 2px 10px;
|
|
7846
|
+
font-size: calc(var(--db-font-base) - 1px);
|
|
7847
|
+
}
|
|
7848
|
+
.db-snapshot-error-message {
|
|
7849
|
+
color: var(--danger);
|
|
7850
|
+
font-size: calc(var(--db-font-base) - 1px);
|
|
7851
|
+
overflow: hidden;
|
|
7852
|
+
text-overflow: ellipsis;
|
|
7853
|
+
white-space: nowrap;
|
|
7854
|
+
max-width: 100%;
|
|
7855
|
+
}
|
|
7856
|
+
/* 左ペイン (snapshot 一覧 + sticky 比較プルダウン) / 右ペイン (diff) の 2 ペイン
|
|
7857
|
+
* 構成。snapshot が何百件あろうとプルダウンは左ペインの上に sticky で残り、
|
|
7858
|
+
* diff 結果は右ペインで独立してスクロールできる。 */
|
|
7859
|
+
.db-snapshot-main-area {
|
|
7860
|
+
flex: 1;
|
|
7861
|
+
min-height: 0;
|
|
7862
|
+
display: flex;
|
|
7863
|
+
flex-direction: column;
|
|
7864
|
+
overflow: hidden;
|
|
7865
|
+
}
|
|
7866
|
+
.db-snapshot-split {
|
|
7867
|
+
flex: 1;
|
|
7868
|
+
min-height: 0;
|
|
7869
|
+
display: flex;
|
|
7870
|
+
gap: 12px;
|
|
7871
|
+
align-items: stretch;
|
|
7872
|
+
}
|
|
7873
|
+
.db-snapshot-left-pane {
|
|
7874
|
+
flex: 0 0 380px;
|
|
7875
|
+
min-width: 280px;
|
|
7876
|
+
max-width: 50%;
|
|
7877
|
+
display: flex;
|
|
7878
|
+
flex-direction: column;
|
|
7879
|
+
overflow-y: auto;
|
|
7880
|
+
border: 1px solid var(--border);
|
|
7881
|
+
border-radius: 6px;
|
|
7882
|
+
background: var(--bg);
|
|
7883
|
+
}
|
|
7884
|
+
.db-snapshot-right-pane {
|
|
7885
|
+
flex: 1;
|
|
7886
|
+
min-width: 0;
|
|
7887
|
+
overflow-y: auto;
|
|
7888
|
+
border: 1px solid var(--border);
|
|
7889
|
+
border-radius: 6px;
|
|
7890
|
+
background: var(--bg);
|
|
7891
|
+
/* sticky な toc を pane の左右いっぱいに広げたいので、ここでは
|
|
7892
|
+
* left/right padding を取らず、内部の .db-snapshot-diff-inline 側で
|
|
7893
|
+
* inset を持たせる。toc だけ pane の端まで広がる。 */
|
|
7894
|
+
padding: 0;
|
|
7895
|
+
/* sticky な目次バーの高さぶん、scrollIntoView の停止位置を下げる。
|
|
7896
|
+
* これがないと chip クリック時に section が toc 裏に隠れて「中途半端な
|
|
7897
|
+
* 位置で止まる」状態になる。 */
|
|
7898
|
+
scroll-padding-top: 68px;
|
|
7899
|
+
}
|
|
7900
|
+
.db-snapshot-diff-inline {
|
|
7901
|
+
padding: 0 12px 12px;
|
|
7902
|
+
}
|
|
7903
|
+
.db-snapshot-right-pane:empty::before {
|
|
7904
|
+
content: attr(data-empty);
|
|
7905
|
+
display: block;
|
|
7906
|
+
color: var(--fg-muted);
|
|
7907
|
+
font-size: var(--db-font-base);
|
|
7908
|
+
padding: 16px;
|
|
7909
|
+
text-align: center;
|
|
7910
|
+
}
|
|
7911
|
+
.db-snapshot-sticky-header {
|
|
7912
|
+
position: sticky;
|
|
7913
|
+
top: 0;
|
|
7914
|
+
z-index: 1;
|
|
7915
|
+
background: var(--bg);
|
|
7916
|
+
padding: 8px 10px;
|
|
7917
|
+
border-bottom: 1px solid var(--border);
|
|
7918
|
+
}
|
|
7919
|
+
.db-snapshot-list-section {
|
|
7920
|
+
padding: 8px 10px 12px;
|
|
7921
|
+
}
|
|
7922
|
+
.db-snapshot-item.is-before {
|
|
7923
|
+
border-left: 3px solid var(--accent);
|
|
7924
|
+
background: color-mix(in srgb, var(--accent) 6%, transparent);
|
|
7925
|
+
}
|
|
7926
|
+
.db-snapshot-item.is-after {
|
|
7927
|
+
border-left: 3px solid var(--success);
|
|
7928
|
+
background: color-mix(in srgb, var(--success) 6%, transparent);
|
|
7929
|
+
}
|
|
7930
|
+
.db-snapshot-compare-badge {
|
|
7931
|
+
display: inline-block;
|
|
7932
|
+
padding: 1px 6px;
|
|
7933
|
+
margin-left: 4px;
|
|
7934
|
+
border-radius: 10px;
|
|
7935
|
+
font-size: calc(var(--db-font-base) - 1px);
|
|
7936
|
+
background: var(--bg-soft);
|
|
7937
|
+
color: var(--fg-muted);
|
|
7938
|
+
border: 1px solid var(--border);
|
|
7939
|
+
}
|
|
7940
|
+
.db-snapshot-item.is-before .db-snapshot-compare-badge {
|
|
7941
|
+
background: color-mix(in srgb, var(--accent) 15%, var(--bg));
|
|
7942
|
+
color: var(--accent);
|
|
7943
|
+
border-color: color-mix(in srgb, var(--accent) 40%, var(--border));
|
|
7944
|
+
}
|
|
7945
|
+
.db-snapshot-item.is-after .db-snapshot-compare-badge {
|
|
7946
|
+
background: color-mix(in srgb, var(--success) 15%, var(--bg));
|
|
7947
|
+
color: var(--success);
|
|
7948
|
+
border-color: color-mix(in srgb, var(--success) 40%, var(--border));
|
|
7949
|
+
}
|
|
7950
|
+
.db-snapshot-diff-header {
|
|
7951
|
+
font-weight: 600;
|
|
7952
|
+
font-size: var(--db-font-base);
|
|
7953
|
+
padding-bottom: 8px;
|
|
7954
|
+
margin-bottom: 8px;
|
|
7955
|
+
border-bottom: 1px solid var(--border);
|
|
7956
|
+
color: var(--fg);
|
|
7957
|
+
}
|
|
7958
|
+
/* 差分テーブル目次バー: 右ペイン上部に sticky 配置、横スクロールで多くの
|
|
7959
|
+
* テーブルにも対応。chip クリックで該当 section へジャンプ。
|
|
7960
|
+
* .db-snapshot-diff-inline の左右 padding (12px) を打ち消して、pane の
|
|
7961
|
+
* 左右端まで隙間なく広げる (sticky 時に下のテーブル行が透けない)。 */
|
|
7962
|
+
.db-snapshot-diff-toc {
|
|
7963
|
+
position: sticky;
|
|
7964
|
+
top: 0;
|
|
7965
|
+
z-index: 2;
|
|
7966
|
+
display: flex;
|
|
7967
|
+
gap: 6px;
|
|
7968
|
+
padding: 8px 12px;
|
|
7969
|
+
margin: 0 -12px 8px;
|
|
7970
|
+
background: var(--bg);
|
|
7971
|
+
border-bottom: 1px solid var(--border);
|
|
7972
|
+
box-shadow: 0 2px 4px color-mix(in srgb, var(--fg) 5%, transparent);
|
|
7973
|
+
overflow-x: auto;
|
|
7974
|
+
overflow-y: hidden;
|
|
7975
|
+
white-space: nowrap;
|
|
7976
|
+
scroll-padding: 0 12px;
|
|
7977
|
+
}
|
|
7978
|
+
.db-snapshot-diff-toc-chip {
|
|
7979
|
+
flex: 0 0 auto;
|
|
7980
|
+
display: inline-flex;
|
|
7981
|
+
align-items: center;
|
|
7982
|
+
gap: 6px;
|
|
7983
|
+
padding: 4px 10px;
|
|
7984
|
+
border: 1px solid var(--border);
|
|
7985
|
+
border-radius: 12px;
|
|
7986
|
+
background: var(--bg-soft);
|
|
7987
|
+
color: var(--fg);
|
|
7988
|
+
cursor: pointer;
|
|
7989
|
+
font-size: calc(var(--db-font-base) - 1px);
|
|
7990
|
+
font-family: inherit;
|
|
7991
|
+
}
|
|
7992
|
+
.db-snapshot-diff-toc-chip:hover {
|
|
7993
|
+
background: var(--bg-mute);
|
|
7994
|
+
}
|
|
7995
|
+
.db-snapshot-diff-toc-chip.active {
|
|
7996
|
+
border-color: color-mix(in srgb, var(--accent) 60%, var(--border));
|
|
7997
|
+
background: color-mix(in srgb, var(--accent) 12%, var(--bg));
|
|
7998
|
+
color: var(--accent);
|
|
7999
|
+
font-weight: 500;
|
|
8000
|
+
}
|
|
8001
|
+
.db-snapshot-diff-toc-chip-name {
|
|
8002
|
+
overflow: hidden;
|
|
8003
|
+
text-overflow: ellipsis;
|
|
8004
|
+
max-width: 200px;
|
|
8005
|
+
}
|
|
8006
|
+
.db-snapshot-diff-toc-chip-stats {
|
|
8007
|
+
display: inline-flex;
|
|
8008
|
+
gap: 4px;
|
|
8009
|
+
font-size: calc(var(--db-font-base) - 2px);
|
|
8010
|
+
}
|
|
8011
|
+
.db-snapshot-diff-table-stats {
|
|
8012
|
+
display: inline-flex;
|
|
8013
|
+
gap: 6px;
|
|
8014
|
+
}
|
|
8015
|
+
/* git diff 風の色: +N 緑 / ~N 黄 / -N 赤。chip 内でも table header 内でも
|
|
8016
|
+
* 同じ色を共有する。font-weight 500 で数値を読みやすく強調。 */
|
|
8017
|
+
.db-snapshot-diff-stat {
|
|
8018
|
+
font-weight: 500;
|
|
8019
|
+
font-variant-numeric: tabular-nums;
|
|
8020
|
+
}
|
|
8021
|
+
.db-snapshot-diff-stat.add {
|
|
8022
|
+
color: var(--success);
|
|
8023
|
+
}
|
|
8024
|
+
.db-snapshot-diff-stat.upd {
|
|
8025
|
+
color: var(--warning, #d29922);
|
|
8026
|
+
}
|
|
8027
|
+
.db-snapshot-diff-stat.del {
|
|
8028
|
+
color: var(--danger);
|
|
8029
|
+
}
|
|
8030
|
+
/* 比較対象として片側 snapshot にしか含まれていないテーブル用のラベル。
|
|
8031
|
+
* 「-N削除」と誤認させない、ニュートラル色 + 「未取得」テキスト。 */
|
|
8032
|
+
.db-snapshot-diff-coverage-badge {
|
|
8033
|
+
display: inline-block;
|
|
8034
|
+
padding: 1px 8px;
|
|
8035
|
+
border-radius: 10px;
|
|
8036
|
+
font-size: calc(var(--db-font-base) - 2px);
|
|
8037
|
+
font-weight: 500;
|
|
8038
|
+
border: 1px dashed var(--border);
|
|
8039
|
+
background: var(--bg-soft);
|
|
8040
|
+
color: var(--fg-muted);
|
|
8041
|
+
white-space: nowrap;
|
|
8042
|
+
}
|
|
8043
|
+
.db-snapshot-diff-coverage-note {
|
|
8044
|
+
padding: 12px 14px;
|
|
8045
|
+
color: var(--fg-muted);
|
|
8046
|
+
font-size: calc(var(--db-font-base) - 1px);
|
|
8047
|
+
background: var(--bg-soft);
|
|
8048
|
+
border-top: 1px dashed var(--border);
|
|
8049
|
+
line-height: 1.5;
|
|
8050
|
+
}
|
|
8051
|
+
.db-snapshot-diff-toc-chip.coverage-incomplete {
|
|
8052
|
+
border-style: dashed;
|
|
8053
|
+
}
|
|
8054
|
+
/* 比較プルダウン (left pane 上部 sticky エリア) */
|
|
8055
|
+
.db-snapshot-diff-create {
|
|
8056
|
+
display: flex;
|
|
8057
|
+
flex-direction: column;
|
|
8058
|
+
gap: 6px;
|
|
8059
|
+
}
|
|
8060
|
+
.db-snapshot-diff-row {
|
|
8061
|
+
display: flex;
|
|
8062
|
+
align-items: stretch;
|
|
8063
|
+
gap: 6px;
|
|
8064
|
+
/* min-width: 0 がないと、select の content が parent の幅を超えて押し広げる
|
|
8065
|
+
* (flex item の default min-width:auto の落とし穴)。 */
|
|
8066
|
+
min-width: 0;
|
|
8067
|
+
}
|
|
8068
|
+
.db-snapshot-diff-row-label {
|
|
8069
|
+
/* select と同じ高さに揃え、垂直中央寄せ。padding を select に合わせる
|
|
8070
|
+
* ことで微妙な「badge だけ浮いてる」ズレを消す。 */
|
|
8071
|
+
display: inline-flex;
|
|
8072
|
+
align-items: center;
|
|
8073
|
+
justify-content: center;
|
|
8074
|
+
min-width: 56px;
|
|
8075
|
+
padding: 0 8px;
|
|
8076
|
+
border-radius: 10px;
|
|
8077
|
+
font-size: calc(var(--db-font-base) - 1px);
|
|
8078
|
+
border: 1px solid var(--border);
|
|
8079
|
+
line-height: 1;
|
|
8080
|
+
}
|
|
8081
|
+
.db-snapshot-diff-row.is-before .db-snapshot-diff-row-label {
|
|
8082
|
+
background: color-mix(in srgb, var(--accent) 15%, var(--bg));
|
|
8083
|
+
color: var(--accent);
|
|
8084
|
+
border-color: color-mix(in srgb, var(--accent) 40%, var(--border));
|
|
8085
|
+
}
|
|
8086
|
+
.db-snapshot-diff-row.is-after .db-snapshot-diff-row-label {
|
|
8087
|
+
background: color-mix(in srgb, var(--success) 15%, var(--bg));
|
|
8088
|
+
color: var(--success);
|
|
8089
|
+
border-color: color-mix(in srgb, var(--success) 40%, var(--border));
|
|
8090
|
+
}
|
|
8091
|
+
.db-snapshot-diff-row .db-snapshot-diff-select {
|
|
8092
|
+
flex: 1 1 0;
|
|
8093
|
+
min-width: 0;
|
|
8094
|
+
max-width: 100%;
|
|
8095
|
+
box-sizing: border-box;
|
|
8096
|
+
}
|
|
8097
|
+
/* sticky header 自体も box-sizing で枠を超えないよう保証する。 */
|
|
8098
|
+
.db-snapshot-sticky-header {
|
|
8099
|
+
box-sizing: border-box;
|
|
8100
|
+
width: 100%;
|
|
8101
|
+
}
|
|
8102
|
+
.db-snapshot-diff-create {
|
|
8103
|
+
width: 100%;
|
|
8104
|
+
min-width: 0;
|
|
8105
|
+
}
|
|
8106
|
+
/* sticky header 内のすべての子に box-sizing と min-width:0 を強制し、
|
|
8107
|
+
* select の min-content による親の押し広げ、ボタンの stretch overflow を防ぐ。 */
|
|
8108
|
+
.db-snapshot-sticky-header *,
|
|
8109
|
+
.db-snapshot-sticky-header *::before,
|
|
8110
|
+
.db-snapshot-sticky-header *::after {
|
|
8111
|
+
box-sizing: border-box;
|
|
8112
|
+
}
|
|
8113
|
+
.db-snapshot-sticky-header .db-snapshot-diff-create > * {
|
|
8114
|
+
max-width: 100%;
|
|
8115
|
+
min-width: 0;
|
|
8116
|
+
}
|
|
8117
|
+
/* ボタンは「全幅にする」のをやめ、左寄せの自然幅にする。stretch すると
|
|
8118
|
+
* 親が押し広がった時に物理的にはみ出すリスクがある。 */
|
|
8119
|
+
.db-snapshot-diff-btn {
|
|
8120
|
+
align-self: flex-start;
|
|
8121
|
+
}
|
|
8122
|
+
.db-snapshot-table-selector {
|
|
8123
|
+
/* 取得ダイアログとして「いまここを操作している」感を出すため、上の toolbar
|
|
8124
|
+
* から少し離して、accent 色のボーダーで強調する。 */
|
|
8125
|
+
border: 1px solid color-mix(in srgb, var(--accent) 40%, var(--border));
|
|
8126
|
+
border-radius: 6px;
|
|
8127
|
+
padding: 12px;
|
|
8128
|
+
margin-bottom: 12px;
|
|
8129
|
+
background: color-mix(in srgb, var(--accent) 3%, var(--bg-soft));
|
|
8130
|
+
box-shadow: 0 1px 4px color-mix(in srgb, var(--accent) 8%, transparent);
|
|
7790
8131
|
}
|
|
7791
8132
|
.db-snapshot-table-selector-header {
|
|
8133
|
+
display: flex;
|
|
8134
|
+
justify-content: space-between;
|
|
8135
|
+
align-items: baseline;
|
|
7792
8136
|
font-weight: 600;
|
|
7793
8137
|
margin-bottom: 8px;
|
|
7794
8138
|
font-size: var(--db-font-base);
|
|
7795
8139
|
}
|
|
8140
|
+
.db-snapshot-table-counter {
|
|
8141
|
+
font-weight: 400;
|
|
8142
|
+
font-size: calc(var(--db-font-base) - 1px);
|
|
8143
|
+
color: var(--fg-muted);
|
|
8144
|
+
}
|
|
8145
|
+
.db-snapshot-table-filter {
|
|
8146
|
+
margin-bottom: 8px;
|
|
8147
|
+
}
|
|
8148
|
+
.db-snapshot-table-filter-input {
|
|
8149
|
+
width: 100%;
|
|
8150
|
+
padding: 6px 10px;
|
|
8151
|
+
border: 1px solid var(--border);
|
|
8152
|
+
border-radius: 4px;
|
|
8153
|
+
font-size: var(--db-font-base);
|
|
8154
|
+
background: var(--bg);
|
|
8155
|
+
color: var(--fg);
|
|
8156
|
+
box-sizing: border-box;
|
|
8157
|
+
}
|
|
7796
8158
|
.db-snapshot-table-checkboxes {
|
|
7797
8159
|
display: flex;
|
|
7798
|
-
flex-
|
|
7799
|
-
gap: 4px 12px;
|
|
8160
|
+
flex-direction: column;
|
|
7800
8161
|
margin-bottom: 8px;
|
|
7801
|
-
max-height:
|
|
8162
|
+
max-height: 280px;
|
|
7802
8163
|
overflow-y: auto;
|
|
8164
|
+
border: 1px solid var(--border);
|
|
8165
|
+
border-radius: 4px;
|
|
8166
|
+
background: var(--bg);
|
|
7803
8167
|
}
|
|
7804
|
-
.db-snapshot-table-
|
|
8168
|
+
.db-snapshot-table-row {
|
|
7805
8169
|
display: flex;
|
|
7806
8170
|
align-items: center;
|
|
7807
|
-
gap:
|
|
8171
|
+
gap: 8px;
|
|
8172
|
+
padding: 6px 10px;
|
|
7808
8173
|
font-size: var(--db-font-base);
|
|
7809
8174
|
cursor: pointer;
|
|
8175
|
+
border-bottom: 1px solid var(--border);
|
|
8176
|
+
}
|
|
8177
|
+
.db-snapshot-table-row:last-child {
|
|
8178
|
+
border-bottom: none;
|
|
8179
|
+
}
|
|
8180
|
+
.db-snapshot-table-row:hover {
|
|
8181
|
+
background: var(--bg-soft);
|
|
8182
|
+
}
|
|
8183
|
+
.db-snapshot-table-row-name {
|
|
8184
|
+
/* 件数を name の直後にくっつけたいので flex:1 で伸ばさない。
|
|
8185
|
+
* 長いテーブル名は ellipsis で詰めるが、count はその直後に密着する。 */
|
|
8186
|
+
flex: 0 1 auto;
|
|
8187
|
+
min-width: 0;
|
|
8188
|
+
overflow: hidden;
|
|
8189
|
+
text-overflow: ellipsis;
|
|
8190
|
+
white-space: nowrap;
|
|
8191
|
+
}
|
|
8192
|
+
.db-snapshot-table-row-count {
|
|
8193
|
+
color: var(--fg-muted);
|
|
8194
|
+
font-size: calc(var(--db-font-base) - 1px);
|
|
8195
|
+
flex: 0 0 auto;
|
|
8196
|
+
margin-right: auto;
|
|
8197
|
+
}
|
|
8198
|
+
.db-snapshot-table-row-empty {
|
|
8199
|
+
padding: 16px;
|
|
8200
|
+
text-align: center;
|
|
8201
|
+
color: var(--fg-muted);
|
|
8202
|
+
font-size: calc(var(--db-font-base) - 1px);
|
|
8203
|
+
}
|
|
8204
|
+
.db-snapshot-note-row {
|
|
8205
|
+
margin-bottom: 8px;
|
|
8206
|
+
}
|
|
8207
|
+
.db-snapshot-note-row .db-snapshot-note-field {
|
|
8208
|
+
display: flex;
|
|
8209
|
+
align-items: center;
|
|
8210
|
+
gap: 8px;
|
|
8211
|
+
width: 100%;
|
|
8212
|
+
}
|
|
8213
|
+
.db-snapshot-note-row .db-snapshot-note-input {
|
|
8214
|
+
flex: 1;
|
|
8215
|
+
min-width: 0;
|
|
8216
|
+
}
|
|
8217
|
+
.db-snapshot-action-row {
|
|
8218
|
+
display: flex;
|
|
8219
|
+
gap: 6px;
|
|
8220
|
+
align-items: center;
|
|
8221
|
+
}
|
|
8222
|
+
.db-snapshot-confirm-btn:disabled {
|
|
8223
|
+
opacity: 0.5;
|
|
8224
|
+
cursor: not-allowed;
|
|
7810
8225
|
}
|
|
7811
8226
|
.db-snapshot-select-actions {
|
|
7812
8227
|
display: flex;
|
|
7813
8228
|
gap: 6px;
|
|
7814
8229
|
align-items: center;
|
|
7815
8230
|
flex-wrap: wrap;
|
|
8231
|
+
margin-bottom: 8px;
|
|
7816
8232
|
}
|
|
7817
8233
|
.db-snapshot-select-actions button {
|
|
7818
8234
|
padding: 4px 10px;
|
|
@@ -7837,10 +8253,30 @@ body.db-resizing {
|
|
|
7837
8253
|
flex: 1;
|
|
7838
8254
|
min-width: 120px;
|
|
7839
8255
|
}
|
|
7840
|
-
|
|
7841
|
-
|
|
7842
|
-
|
|
7843
|
-
|
|
8256
|
+
/* primary action は「下線 + accent 文字」程度の subtle 強調にとどめ、
|
|
8257
|
+
* 既存の toolbar 系ボタン (Take snapshot / Refresh) と高さ・形を揃える。
|
|
8258
|
+
* 「独自の青塗りボタン」を避けて視覚的な統一感を出す。 */
|
|
8259
|
+
.db-snapshot-confirm-btn,
|
|
8260
|
+
.db-snapshot-cancel-btn,
|
|
8261
|
+
.db-snapshot-diff-btn {
|
|
8262
|
+
padding: 6px 14px;
|
|
8263
|
+
border: 1px solid var(--border);
|
|
8264
|
+
border-radius: 4px;
|
|
8265
|
+
background: var(--bg-soft);
|
|
8266
|
+
color: var(--fg);
|
|
8267
|
+
cursor: pointer;
|
|
8268
|
+
font-size: var(--db-font-base);
|
|
8269
|
+
}
|
|
8270
|
+
.db-snapshot-confirm-btn:not(:disabled),
|
|
8271
|
+
.db-snapshot-diff-btn:not(:disabled) {
|
|
8272
|
+
border-color: color-mix(in srgb, var(--accent) 40%, var(--border));
|
|
8273
|
+
color: var(--accent);
|
|
8274
|
+
font-weight: 500;
|
|
8275
|
+
}
|
|
8276
|
+
.db-snapshot-confirm-btn:hover:not(:disabled),
|
|
8277
|
+
.db-snapshot-cancel-btn:hover,
|
|
8278
|
+
.db-snapshot-diff-btn:hover:not(:disabled) {
|
|
8279
|
+
background: var(--bg-mute);
|
|
7844
8280
|
}
|
|
7845
8281
|
.db-snapshot-section-title {
|
|
7846
8282
|
font-size: calc(var(--db-font-base) + 1px);
|
|
@@ -7940,18 +8376,8 @@ body.db-resizing {
|
|
|
7940
8376
|
color: var(--fg);
|
|
7941
8377
|
font-size: var(--db-font-base);
|
|
7942
8378
|
}
|
|
7943
|
-
|
|
7944
|
-
|
|
7945
|
-
border: 1px solid var(--accent);
|
|
7946
|
-
border-radius: 4px;
|
|
7947
|
-
background: var(--accent);
|
|
7948
|
-
color: #fff;
|
|
7949
|
-
cursor: pointer;
|
|
7950
|
-
font-size: var(--db-font-base);
|
|
7951
|
-
}
|
|
7952
|
-
.db-snapshot-diff-btn:hover {
|
|
7953
|
-
opacity: 0.9;
|
|
7954
|
-
}
|
|
8379
|
+
/* diff-btn の旧独自青塗りは廃止。上の confirm/cancel と同じ neutral + accent
|
|
8380
|
+
* subtle スタイル (line 8119-) を共有する。 */
|
|
7955
8381
|
.db-snapshot-diff-section {
|
|
7956
8382
|
margin-top: 16px;
|
|
7957
8383
|
}
|
|
@@ -8072,77 +8498,21 @@ body.db-resizing {
|
|
|
8072
8498
|
color: var(--fg-muted);
|
|
8073
8499
|
}
|
|
8074
8500
|
.db-snapshot-diff-rows-container {
|
|
8075
|
-
|
|
8076
|
-
|
|
8077
|
-
|
|
8078
|
-
|
|
8079
|
-
|
|
8080
|
-
|
|
8081
|
-
font-size: var(--db-font-base);
|
|
8082
|
-
}
|
|
8083
|
-
.db-snapshot-diff-row:last-child {
|
|
8084
|
-
border-bottom: none;
|
|
8085
|
-
}
|
|
8086
|
-
.db-snapshot-diff-row.inserted {
|
|
8087
|
-
background: var(--diff-addition-bg, rgba(46, 160, 67, 0.05));
|
|
8088
|
-
}
|
|
8089
|
-
.db-snapshot-diff-row.deleted {
|
|
8090
|
-
background: var(--diff-deletion-bg, rgba(248, 81, 73, 0.05));
|
|
8091
|
-
}
|
|
8092
|
-
.db-snapshot-diff-row.updated {
|
|
8093
|
-
background: var(--diff-change-bg, rgba(210, 153, 34, 0.05));
|
|
8094
|
-
}
|
|
8095
|
-
.db-snapshot-diff-type {
|
|
8096
|
-
display: inline-block;
|
|
8097
|
-
padding: 1px 5px;
|
|
8098
|
-
border-radius: 3px;
|
|
8099
|
-
font-size: calc(var(--db-font-base) - 2px);
|
|
8100
|
-
font-weight: 600;
|
|
8101
|
-
margin-right: 6px;
|
|
8102
|
-
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
|
|
8103
|
-
}
|
|
8104
|
-
.db-snapshot-diff-type.inserted {
|
|
8105
|
-
background: color-mix(in srgb, var(--success) 15%, var(--bg));
|
|
8106
|
-
color: var(--success);
|
|
8107
|
-
}
|
|
8108
|
-
.db-snapshot-diff-type.deleted {
|
|
8109
|
-
background: color-mix(in srgb, var(--danger) 15%, var(--bg));
|
|
8110
|
-
color: var(--danger);
|
|
8111
|
-
}
|
|
8112
|
-
.db-snapshot-diff-type.updated {
|
|
8113
|
-
background: color-mix(in srgb, var(--warning, #d29922) 15%, var(--bg));
|
|
8114
|
-
color: var(--warning, #d29922);
|
|
8115
|
-
}
|
|
8116
|
-
.db-snapshot-diff-key {
|
|
8117
|
-
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
|
|
8118
|
-
color: var(--fg-muted);
|
|
8119
|
-
font-size: calc(var(--db-font-base) - 1px);
|
|
8120
|
-
}
|
|
8121
|
-
.db-snapshot-diff-changes,
|
|
8122
|
-
.db-snapshot-diff-values {
|
|
8123
|
-
margin-top: 4px;
|
|
8124
|
-
padding-left: 16px;
|
|
8125
|
-
}
|
|
8126
|
-
.db-snapshot-diff-change-row,
|
|
8127
|
-
.db-snapshot-diff-value-entry {
|
|
8128
|
-
margin-bottom: 2px;
|
|
8129
|
-
font-size: calc(var(--db-font-base) - 1px);
|
|
8130
|
-
display: block;
|
|
8131
|
-
}
|
|
8132
|
-
.db-snapshot-diff-change-row .col-name,
|
|
8133
|
-
.db-snapshot-diff-value-entry .col-name {
|
|
8134
|
-
color: var(--accent);
|
|
8135
|
-
font-weight: 500;
|
|
8136
|
-
}
|
|
8137
|
-
.db-snapshot-diff-change-row .old-val,
|
|
8138
|
-
.db-snapshot-diff-value-entry .old-val {
|
|
8139
|
-
color: var(--danger);
|
|
8140
|
-
text-decoration: line-through;
|
|
8141
|
-
}
|
|
8142
|
-
.db-snapshot-diff-change-row .new-val,
|
|
8143
|
-
.db-snapshot-diff-value-entry .new-val {
|
|
8144
|
-
color: var(--success);
|
|
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;
|
|
8145
8507
|
}
|
|
8508
|
+
/* (deleted) 旧 row-based diff レイアウトの dead CSS を削除した。
|
|
8509
|
+
* - .db-snapshot-diff-row / .db-snapshot-diff-type / .db-snapshot-diff-key
|
|
8510
|
+
* - .db-snapshot-diff-changes / .db-snapshot-diff-values
|
|
8511
|
+
* - .db-snapshot-diff-change-row / .db-snapshot-diff-value-entry
|
|
8512
|
+
* 現行は <table class="db-snap-diff-grid"> での grid 描画に移行済み。
|
|
8513
|
+
* 残しておくと .db-snapshot-diff-row が sticky 上部の before/after プルダウン行
|
|
8514
|
+
* (snapshot-view.ts の .db-snapshot-diff-row.is-before/.is-after) と
|
|
8515
|
+
* クラス名衝突して padding/border-bottom が漏れる。 */
|
|
8146
8516
|
.db-snapshot-diff-more {
|
|
8147
8517
|
padding: 6px 10px;
|
|
8148
8518
|
color: var(--fg-muted);
|