@youtyan/code-viewer 0.2.11 → 0.3.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
@@ -98,19 +98,7 @@
98
98
  </div>
99
99
  </div>
100
100
 
101
- <aside id="history-panel" aria-label="Commit history" hidden>
102
- <div class="history-head">
103
- <span class="history-title">Commits</span>
104
- <span data-ref-selector-mount data-ref-id="history-ref" data-placeholder="ref..." data-title="history ref"></span>
105
- </div>
106
- <div class="history-filter-wrap">
107
- <input id="history-filter" type="search" placeholder="filter commits… (message, sha, author:name, path:file)" autocomplete="off" />
108
- </div>
109
- <div id="history-banner" class="history-banner" role="status" hidden></div>
110
- <ol id="history-list"></ol>
111
- <div id="history-sentinel" aria-hidden="true"></div>
112
- <div id="history-status" class="history-status" role="status" hidden></div>
113
- </aside>
101
+ <aside id="history-panel" hidden></aside>
114
102
  <div id="history-resizer" aria-hidden="true"></div>
115
103
  <aside id="sidebar">
116
104
  <div class="sb-head">
@@ -251,15 +239,7 @@
251
239
  </aside>
252
240
 
253
241
  <main id="content">
254
- <section id="history-commit-info" hidden aria-label="Selected commit">
255
- <div class="hci-head">
256
- <span id="hci-sha" class="hci-sha"></span>
257
- <span id="hci-author" class="hci-author"></span>
258
- <span id="hci-date" class="hci-date"></span>
259
- </div>
260
- <h2 id="hci-subject" class="hci-subject"></h2>
261
- <div id="hci-body" class="hci-body" hidden></div>
262
- </section>
242
+ <section id="history-commit-info" hidden></section>
263
243
  <div id="empty" class="empty hidden">
264
244
  <div class="emoji">✨</div>
265
245
  <h2>No changes</h2>
package/web/style.css CHANGED
@@ -1148,7 +1148,8 @@ body.gdp-history-page #topbar .ref-pickers {
1148
1148
  transform-origin: left center;
1149
1149
  pointer-events: none;
1150
1150
  }
1151
- #history-filter {
1151
+ #history-filter,
1152
+ .history-filter {
1152
1153
  box-sizing: border-box;
1153
1154
  width: 100%;
1154
1155
  height: 32px;
@@ -1163,16 +1164,19 @@ body.gdp-history-page #topbar .ref-pickers {
1163
1164
  outline: none;
1164
1165
  transition: border-color 0.12s ease, background-color 0.12s ease, box-shadow 0.12s ease;
1165
1166
  }
1166
- #history-filter:hover {
1167
+ #history-filter:hover,
1168
+ .history-filter:hover {
1167
1169
  border-color: var(--border);
1168
1170
  background: var(--bg);
1169
1171
  }
1170
- #history-filter:focus {
1172
+ #history-filter:focus,
1173
+ .history-filter:focus {
1171
1174
  border-color: var(--accent);
1172
1175
  background: var(--bg);
1173
1176
  box-shadow: 0 0 0 3px var(--accent-muted);
1174
1177
  }
1175
- #history-filter::placeholder {
1178
+ #history-filter::placeholder,
1179
+ .history-filter::placeholder {
1176
1180
  color: var(--fg-subtle);
1177
1181
  opacity: 1;
1178
1182
  }
@@ -1185,7 +1189,8 @@ body.gdp-history-page #topbar .ref-pickers {
1185
1189
  color: var(--fg-muted);
1186
1190
  font-size: 12px;
1187
1191
  }
1188
- #history-list { list-style: none; margin: 0; padding: 0 0 24px; }
1192
+ #history-list,
1193
+ .history-list { list-style: none; margin: 0; padding: 0 0 24px; }
1189
1194
  .history-group {
1190
1195
  display: flex;
1191
1196
  align-items: center;
@@ -1207,7 +1212,8 @@ body.gdp-history-page #topbar .ref-pickers {
1207
1212
  border-radius: 2px;
1208
1213
  background: var(--accent);
1209
1214
  }
1210
- #history-list > .history-group:first-child { border-top: 0; }
1215
+ #history-list > .history-group:first-child,
1216
+ .history-list > .history-group:first-child { border-top: 0; }
1211
1217
  .history-item {
1212
1218
  padding: 8px 14px;
1213
1219
  cursor: pointer;
@@ -1247,8 +1253,10 @@ body.gdp-history-page #topbar .ref-pickers {
1247
1253
  color: var(--fg-muted);
1248
1254
  font-size: 12px;
1249
1255
  }
1250
- #history-sentinel { height: 1px; }
1251
- #history-commit-info {
1256
+ #history-sentinel,
1257
+ .history-sentinel { height: 1px; }
1258
+ #history-commit-info,
1259
+ .history-commit-info {
1252
1260
  display: none;
1253
1261
  margin: 0 0 16px;
1254
1262
  padding: 16px 20px 18px;
@@ -1256,8 +1264,10 @@ body.gdp-history-page #topbar .ref-pickers {
1256
1264
  border-radius: 8px;
1257
1265
  background: var(--bg-soft);
1258
1266
  }
1259
- body.gdp-history-page #history-commit-info:not([hidden]) { display: block; }
1260
- #history-commit-info .hci-head {
1267
+ body.gdp-history-page #history-commit-info:not([hidden]),
1268
+ .history-commit-info:not([hidden]) { display: block; }
1269
+ #history-commit-info .hci-head,
1270
+ .history-commit-info .hci-head {
1261
1271
  display: flex;
1262
1272
  flex-wrap: wrap;
1263
1273
  align-items: baseline;
@@ -1265,17 +1275,20 @@ body.gdp-history-page #history-commit-info:not([hidden]) { display: block; }
1265
1275
  color: var(--fg-muted);
1266
1276
  font-size: 12px;
1267
1277
  }
1268
- #history-commit-info .hci-sha {
1278
+ #history-commit-info .hci-sha,
1279
+ .history-commit-info .hci-sha {
1269
1280
  font-family: "Monaspace Neon", ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
1270
1281
  user-select: all;
1271
1282
  }
1272
- #history-commit-info .hci-subject {
1283
+ #history-commit-info .hci-subject,
1284
+ .history-commit-info .hci-subject {
1273
1285
  margin: 8px 0 0;
1274
1286
  font-size: 15px;
1275
1287
  line-height: 1.4;
1276
1288
  overflow-wrap: anywhere;
1277
1289
  }
1278
- #history-commit-info .hci-body {
1290
+ #history-commit-info .hci-body,
1291
+ .history-commit-info .hci-body {
1279
1292
  margin: 12px 0 0;
1280
1293
  padding: 0;
1281
1294
  background: transparent;
@@ -1286,20 +1299,88 @@ body.gdp-history-page #history-commit-info:not([hidden]) { display: block; }
1286
1299
  color: var(--fg-muted);
1287
1300
  overflow-wrap: anywhere;
1288
1301
  }
1289
- #history-commit-info .hci-body .gdp-markdown-preview {
1302
+ #history-commit-info .hci-body .gdp-markdown-preview,
1303
+ .history-commit-info .hci-body .gdp-markdown-preview {
1290
1304
  color: inherit;
1291
1305
  font-size: inherit;
1292
1306
  line-height: inherit;
1293
1307
  }
1294
- #history-commit-info .hci-body .gdp-markdown-preview > :first-child {
1308
+ #history-commit-info .hci-body .gdp-markdown-preview > :first-child,
1309
+ .history-commit-info .hci-body .gdp-markdown-preview > :first-child {
1295
1310
  margin-top: 0;
1296
1311
  }
1297
- #history-commit-info .hci-body .gdp-markdown-preview > :last-child {
1312
+ #history-commit-info .hci-body .gdp-markdown-preview > :last-child,
1313
+ .history-commit-info .hci-body .gdp-markdown-preview > :last-child {
1298
1314
  margin-bottom: 0;
1299
1315
  }
1300
1316
  .hci-body-expandable {
1301
1317
  display: block;
1302
1318
  }
1319
+
1320
+ .gdp-standalone-file-history.gdp-file-shell {
1321
+ border: 0;
1322
+ border-radius: 0;
1323
+ box-shadow: none;
1324
+ background: transparent;
1325
+ content-visibility: visible;
1326
+ contain: none;
1327
+ contain-intrinsic-size: auto;
1328
+ }
1329
+ .gdp-file-history-body {
1330
+ padding: 0;
1331
+ }
1332
+ .gdp-file-history-embed {
1333
+ display: grid;
1334
+ grid-template-columns: minmax(260px, 320px) minmax(0, 1fr);
1335
+ min-height: calc(100vh - var(--global-header-h) - 92px);
1336
+ border-top: 1px solid var(--border);
1337
+ }
1338
+ .gdp-file-history-panel {
1339
+ min-width: 0;
1340
+ max-height: calc(100vh - var(--global-header-h) - 92px);
1341
+ overflow: auto;
1342
+ background: var(--bg-soft);
1343
+ border-right: 1px solid var(--border);
1344
+ }
1345
+ .gdp-file-history-diff-pane {
1346
+ min-width: 0;
1347
+ max-height: calc(100vh - var(--global-header-h) - 92px);
1348
+ overflow: auto;
1349
+ background: var(--bg);
1350
+ }
1351
+ .gdp-file-history-diff {
1352
+ min-width: 0;
1353
+ }
1354
+ .gdp-file-history-diff > .gdp-file-shell {
1355
+ margin: 0;
1356
+ border-left: 0;
1357
+ border-right: 0;
1358
+ border-radius: 0;
1359
+ }
1360
+ .gdp-file-history-diff .d2h-code-line,
1361
+ .gdp-file-history-diff .d2h-code-side-line,
1362
+ .gdp-file-history-diff .d2h-code-line-prefix,
1363
+ .gdp-file-history-diff .d2h-code-line-ctn,
1364
+ .gdp-file-history-diff .d2h-code-line-ctn *,
1365
+ .gdp-file-history-diff .d2h-code-linenumber,
1366
+ .gdp-file-history-diff .d2h-code-side-linenumber {
1367
+ font-size: var(--code-font-size) !important;
1368
+ }
1369
+ .gdp-file-history-empty {
1370
+ position: static;
1371
+ min-height: 280px;
1372
+ margin: 0;
1373
+ border: 0;
1374
+ border-radius: 0;
1375
+ box-shadow: none;
1376
+ }
1377
+ .gdp-file-history-commit-info {
1378
+ margin: 0;
1379
+ border-left: 0;
1380
+ border-right: 0;
1381
+ border-top: 0;
1382
+ border-radius: 0;
1383
+ }
1303
1384
  .hci-body-collapsible {
1304
1385
  position: relative;
1305
1386
  max-height: calc(10em * 1.6 + 8px);
@@ -3860,13 +3941,16 @@ body.gdp-repo-page:not(.gdp-sidebar-hidden) .gdp-repo-toolbar > .ref-selector,
3860
3941
  body.gdp-file-detail-page.gdp-repo-blob-page:not(.gdp-sidebar-hidden) .gdp-file-detail-header > .ref-selector {
3861
3942
  display: none;
3862
3943
  }
3863
- body.gdp-file-detail-page #diff > .gdp-file-shell:not(.gdp-standalone-source),
3944
+ body.gdp-file-detail-page
3945
+ #diff
3946
+ > .gdp-file-shell:not(.gdp-standalone-source):not(.gdp-standalone-blame):not(.gdp-standalone-file-history),
3864
3947
  body.gdp-file-detail-page #diff > .gdp-repo-shell,
3865
3948
  body.gdp-file-detail-page #empty {
3866
3949
  display: none !important;
3867
3950
  }
3868
3951
 
3869
- .gdp-repo-blob-layout .gdp-standalone-source {
3952
+ .gdp-repo-blob-layout .gdp-standalone-source,
3953
+ .gdp-repo-blob-layout .gdp-standalone-file-history {
3870
3954
  min-width: 0;
3871
3955
  }
3872
3956
 
@@ -5851,36 +5935,113 @@ body[data-sidebar-font-size="xlarge"] .db-container {
5851
5935
  font-weight: 500;
5852
5936
  }
5853
5937
  .db-table-children {
5854
- padding-left: 20px;
5938
+ position: relative;
5939
+ margin: 1px 8px 6px 30px;
5940
+ padding: 2px 0 2px 10px;
5941
+ border-left: 1px solid color-mix(in srgb, var(--border) 82%, transparent);
5942
+ background: transparent;
5855
5943
  }
5856
5944
  .db-table-children[hidden] { display: none; }
5857
5945
  .db-table-col-item {
5858
- display: flex;
5859
- align-items: center;
5860
- gap: 6px;
5861
- padding: 2px 8px;
5946
+ display: block;
5947
+ padding: 5px 2px 6px 0;
5948
+ border-radius: 0;
5862
5949
  font-size: var(--db-font-sm);
5863
5950
  color: var(--fg-muted);
5951
+ transition: background 0.12s ease;
5952
+ }
5953
+ .db-table-col-item + .db-table-col-item {
5954
+ border-top: 1px solid color-mix(in srgb, var(--border) 58%, transparent);
5955
+ }
5956
+ .db-table-col-item:hover {
5957
+ background: color-mix(in srgb, var(--bg-soft) 72%, transparent);
5864
5958
  }
5865
5959
  .db-table-col-item.pk {
5866
5960
  color: var(--fg);
5867
5961
  font-weight: 500;
5868
5962
  }
5869
- .db-table-col-item.pk .db-table-col-name::before {
5870
- content: "🔑 ";
5963
+ .db-table-col-main {
5964
+ display: grid;
5965
+ grid-template-columns: minmax(0, 1fr) auto;
5966
+ align-items: center;
5967
+ gap: 8px;
5968
+ min-width: 0;
5969
+ }
5970
+ .db-table-col-name-wrap {
5971
+ display: inline-flex;
5972
+ align-items: center;
5973
+ gap: 4px;
5974
+ min-width: 0;
5975
+ }
5976
+ .db-table-col-key {
5977
+ flex: 0 0 auto;
5978
+ padding: 0 3px;
5979
+ border-radius: 3px;
5980
+ border: 1px solid color-mix(in srgb, var(--scope-accent) 55%, var(--border));
5981
+ color: var(--scope-accent);
5871
5982
  font-size: 9px;
5983
+ font-weight: 700;
5984
+ line-height: 1.3;
5872
5985
  }
5873
5986
  .db-table-col-name {
5874
- flex: 1;
5987
+ min-width: 0;
5875
5988
  overflow: hidden;
5876
5989
  text-overflow: ellipsis;
5877
5990
  white-space: nowrap;
5991
+ color: var(--fg);
5992
+ font-weight: 600;
5993
+ }
5994
+ .db-table-col-copy {
5995
+ flex: 0 0 18px;
5996
+ width: 18px;
5997
+ height: 18px;
5998
+ border-radius: 4px;
5999
+ opacity: 0.48;
6000
+ color: var(--fg-subtle);
6001
+ transition: background-color 0.12s, color 0.12s, opacity 0.12s;
6002
+ }
6003
+ .db-table-col-copy svg {
6004
+ width: 12px;
6005
+ height: 12px;
6006
+ }
6007
+ .db-table-col-item:hover .db-table-col-copy,
6008
+ .db-table-col-copy:focus-visible {
6009
+ opacity: 1;
6010
+ }
6011
+ .db-table-col-copy:hover {
6012
+ color: var(--accent);
6013
+ }
6014
+ .db-table-col-copy.copied {
6015
+ opacity: 1;
6016
+ color: var(--success);
6017
+ }
6018
+ .db-table-col-copy.failed {
6019
+ opacity: 1;
6020
+ color: var(--danger);
5878
6021
  }
5879
6022
  .db-table-col-type {
5880
- flex-shrink: 0;
6023
+ justify-self: end;
6024
+ max-width: 96px;
6025
+ padding: 1px 5px;
6026
+ border-radius: 999px;
6027
+ background: color-mix(in srgb, var(--bg-soft) 70%, transparent);
5881
6028
  font-size: var(--db-font-sm);
5882
6029
  color: var(--fg-subtle);
5883
6030
  font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;
6031
+ overflow: hidden;
6032
+ text-overflow: ellipsis;
6033
+ white-space: nowrap;
6034
+ }
6035
+ .db-table-col-comment {
6036
+ display: -webkit-box;
6037
+ margin-top: 3px;
6038
+ color: var(--fg-muted);
6039
+ font-size: var(--db-font-sm);
6040
+ font-weight: 400;
6041
+ line-height: 1.4;
6042
+ -webkit-line-clamp: 2;
6043
+ -webkit-box-orient: vertical;
6044
+ overflow: hidden;
5884
6045
  }
5885
6046
 
5886
6047
  .db-table-icon {
@@ -6385,6 +6546,13 @@ html[data-theme="dark"] .db-query-highlight span[style] {
6385
6546
  color: var(--fg-subtle);
6386
6547
  font-size: var(--db-font-base);
6387
6548
  }
6549
+ .db-schema-comment {
6550
+ color: var(--fg-muted);
6551
+ line-height: 1.35;
6552
+ min-width: 180px;
6553
+ max-width: 420px;
6554
+ white-space: normal;
6555
+ }
6388
6556
 
6389
6557
  /* ---------- Data Grid: Filter Bar ---------- */
6390
6558
  .db-grid-filter-bar {
@@ -8901,4 +9069,149 @@ body.db-resizing {
8901
9069
  .db-tab-host > .db-container[hidden] {
8902
9070
  display: none;
8903
9071
  }
8904
-
9072
+
9073
+ /* ---------- Blame view (web-src/views/blame-view.ts) ---------- */
9074
+ .gdp-standalone-blame.gdp-file-shell {
9075
+ --blame-bin-0: #ffeedf;
9076
+ --blame-bin-1: #ffd9b8;
9077
+ --blame-bin-2: #ffb47a;
9078
+ --blame-bin-3: #ff8c3b;
9079
+ --blame-bin-4: #d9590a;
9080
+ --blame-uncommitted: #ffa50066;
9081
+ content-visibility: visible;
9082
+ contain: none;
9083
+ contain-intrinsic-size: auto;
9084
+ }
9085
+ :root.dark .gdp-standalone-blame,
9086
+ .gdp-standalone-blame.dark {
9087
+ --blame-bin-0: #4a2f1c;
9088
+ --blame-bin-1: #6b3e1d;
9089
+ --blame-bin-2: #8a4d1f;
9090
+ --blame-bin-3: #b95f1f;
9091
+ --blame-bin-4: #f08a3a;
9092
+ }
9093
+ .gdp-blame-legend {
9094
+ display: inline-flex;
9095
+ align-items: center;
9096
+ gap: 6px;
9097
+ padding: 4px 12px 8px;
9098
+ font-size: 12px;
9099
+ color: var(--fg-muted);
9100
+ }
9101
+ .gdp-blame-legend-stops {
9102
+ display: inline-flex;
9103
+ gap: 2px;
9104
+ }
9105
+ .gdp-blame-legend-stop {
9106
+ width: 14px;
9107
+ height: 10px;
9108
+ border-radius: 2px;
9109
+ background: var(--blame-bin-0);
9110
+ }
9111
+ .gdp-blame-legend-stop[data-bin="1"] {
9112
+ background: var(--blame-bin-1);
9113
+ }
9114
+ .gdp-blame-legend-stop[data-bin="2"] {
9115
+ background: var(--blame-bin-2);
9116
+ }
9117
+ .gdp-blame-legend-stop[data-bin="3"] {
9118
+ background: var(--blame-bin-3);
9119
+ }
9120
+ .gdp-blame-legend-stop[data-bin="4"] {
9121
+ background: var(--blame-bin-4);
9122
+ }
9123
+ .gdp-blame-body {
9124
+ overflow: auto;
9125
+ }
9126
+ .gdp-blame-table {
9127
+ min-width: 100%;
9128
+ }
9129
+ .gdp-standalone-blame .gdp-source-table,
9130
+ .gdp-standalone-blame .gdp-source-line-number,
9131
+ .gdp-standalone-blame .gdp-source-line-code,
9132
+ .gdp-standalone-blame .gdp-source-line-code code,
9133
+ .gdp-standalone-blame .gdp-source-line-code span {
9134
+ font-size: var(--code-font-size) !important;
9135
+ }
9136
+ .gdp-blame-row {
9137
+ vertical-align: top;
9138
+ }
9139
+ .gdp-blame-row:hover .gdp-source-line-code {
9140
+ background: var(--bg-soft);
9141
+ }
9142
+ .gdp-blame-info {
9143
+ width: 240px;
9144
+ min-width: 240px;
9145
+ max-width: 320px;
9146
+ padding: 4px 8px 4px 0;
9147
+ border-top: 1px solid var(--border);
9148
+ border-right: 1px solid var(--border);
9149
+ position: relative;
9150
+ background: var(--bg);
9151
+ }
9152
+ .gdp-blame-bar {
9153
+ position: absolute;
9154
+ left: 0;
9155
+ top: 0;
9156
+ bottom: 0;
9157
+ width: 4px;
9158
+ background: var(--blame-bin-0);
9159
+ }
9160
+ .gdp-blame-bar[data-bin="1"] {
9161
+ background: var(--blame-bin-1);
9162
+ }
9163
+ .gdp-blame-bar[data-bin="2"] {
9164
+ background: var(--blame-bin-2);
9165
+ }
9166
+ .gdp-blame-bar[data-bin="3"] {
9167
+ background: var(--blame-bin-3);
9168
+ }
9169
+ .gdp-blame-bar[data-bin="4"] {
9170
+ background: var(--blame-bin-4);
9171
+ }
9172
+ .gdp-blame-bar.uncommitted {
9173
+ background: var(--blame-uncommitted);
9174
+ }
9175
+ .gdp-blame-info > .gdp-blame-meta,
9176
+ .gdp-blame-info > .gdp-blame-summary {
9177
+ padding-left: 10px;
9178
+ }
9179
+ .gdp-blame-meta {
9180
+ display: flex;
9181
+ gap: 8px;
9182
+ align-items: baseline;
9183
+ color: var(--fg-muted);
9184
+ font-size: 11px;
9185
+ }
9186
+ .gdp-blame-time {
9187
+ color: var(--fg);
9188
+ font-weight: 500;
9189
+ }
9190
+ .gdp-blame-author {
9191
+ white-space: nowrap;
9192
+ overflow: hidden;
9193
+ text-overflow: ellipsis;
9194
+ max-width: 96px;
9195
+ }
9196
+ .gdp-blame-sha {
9197
+ margin-left: auto;
9198
+ font-family: var(--monospace, ui-monospace, SFMono-Regular, monospace);
9199
+ color: var(--fg-muted);
9200
+ }
9201
+ .gdp-blame-summary {
9202
+ color: var(--fg);
9203
+ font-size: 12px;
9204
+ white-space: nowrap;
9205
+ overflow: hidden;
9206
+ text-overflow: ellipsis;
9207
+ margin-top: 2px;
9208
+ }
9209
+ .gdp-blame-loading,
9210
+ .gdp-blame-error {
9211
+ padding: 16px;
9212
+ color: var(--fg-muted);
9213
+ font-size: 13px;
9214
+ }
9215
+ .gdp-blame-error {
9216
+ color: var(--danger, #c33);
9217
+ }