@happy-nut/monacori 0.1.21 → 0.1.23
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/app-main.js +95 -4
- package/dist/assets.js +8 -1
- package/dist/build.js +5 -1
- package/dist/git-log.d.ts +23 -0
- package/dist/git-log.js +60 -0
- package/dist/i18n.js +88 -12
- package/dist/preload.cjs +16 -0
- package/dist/render.d.ts +1 -0
- package/dist/render.js +91 -30
- package/dist/util.d.ts +5 -0
- package/dist/util.js +21 -0
- package/dist/viewer.client.js +633 -35
- package/dist/viewer.client.min.js +1 -0
- package/dist/viewer.css +208 -67
- package/package.json +2 -1
package/dist/viewer.css
CHANGED
|
@@ -69,8 +69,9 @@ html, body { margin: 0; min-height: 100%; }
|
|
|
69
69
|
/* Reserve the scrollbar gutter so collapsing/expanding a file does not shift the layout. */
|
|
70
70
|
html { scrollbar-gutter: stable; }
|
|
71
71
|
body {
|
|
72
|
+
--rail-width: 46px;
|
|
72
73
|
display: grid;
|
|
73
|
-
grid-template-columns: var(--sidebar-width, 280px) minmax(0, 1fr);
|
|
74
|
+
grid-template-columns: var(--rail-width) var(--sidebar-width, 280px) minmax(0, 1fr);
|
|
74
75
|
/* Row 1 = content, row 2 = the integrated terminal. The terminal is a real grid row (not a fixed
|
|
75
76
|
overlay), so content shrinks above it and the caret can never scroll behind it. When the terminal
|
|
76
77
|
is .hidden (display:none) the auto row collapses to 0 and content fills the viewport. */
|
|
@@ -82,6 +83,7 @@ body {
|
|
|
82
83
|
}
|
|
83
84
|
.sidebar {
|
|
84
85
|
grid-row: 1 / -1; /* full height, left of both the content and terminal rows */
|
|
86
|
+
grid-column: 2;
|
|
85
87
|
height: 100vh;
|
|
86
88
|
display: flex;
|
|
87
89
|
flex-direction: column;
|
|
@@ -98,7 +100,7 @@ body {
|
|
|
98
100
|
.sidebar-resizer {
|
|
99
101
|
position: fixed;
|
|
100
102
|
top: 0;
|
|
101
|
-
left: var(--sidebar-width, 280px);
|
|
103
|
+
left: calc(var(--rail-width, 46px) + var(--sidebar-width, 280px));
|
|
102
104
|
width: 9px;
|
|
103
105
|
height: 100vh;
|
|
104
106
|
margin-left: -5px;
|
|
@@ -150,9 +152,63 @@ body {
|
|
|
150
152
|
text-overflow: ellipsis;
|
|
151
153
|
}
|
|
152
154
|
.tabs { display: none; }
|
|
155
|
+
/* ===== IntelliJ-style activity rail: icon-per-view column, hover tooltip with the shortcut. ===== */
|
|
156
|
+
.activity-rail {
|
|
157
|
+
grid-row: 1 / -1;
|
|
158
|
+
grid-column: 1;
|
|
159
|
+
display: flex;
|
|
160
|
+
flex-direction: column;
|
|
161
|
+
align-items: center;
|
|
162
|
+
padding: 8px 0;
|
|
163
|
+
background: var(--sidebar);
|
|
164
|
+
border-right: 1px solid var(--border);
|
|
165
|
+
overflow: visible; /* let tooltips escape to the right, over the sidebar */
|
|
166
|
+
z-index: 32;
|
|
167
|
+
}
|
|
168
|
+
.rail-group { display: flex; flex-direction: column; align-items: center; gap: 2px; }
|
|
169
|
+
.rail-bottom { margin-top: auto; } /* pin terminal + settings to the bottom */
|
|
170
|
+
.rail-btn {
|
|
171
|
+
position: relative;
|
|
172
|
+
flex: none;
|
|
173
|
+
width: 34px; height: 34px;
|
|
174
|
+
display: flex; align-items: center; justify-content: center;
|
|
175
|
+
border: 0; border-radius: 7px;
|
|
176
|
+
background: transparent; color: var(--muted);
|
|
177
|
+
cursor: pointer; padding: 0;
|
|
178
|
+
}
|
|
179
|
+
.rail-btn:hover { color: var(--text); background: color-mix(in srgb, var(--active) 12%, transparent); }
|
|
180
|
+
.rail-btn.is-active { color: var(--active); background: color-mix(in srgb, var(--active) 16%, transparent); }
|
|
181
|
+
/* Left accent bar at the rail edge marks the active view (like IntelliJ). */
|
|
182
|
+
.rail-btn.is-active::before {
|
|
183
|
+
content: ""; position: absolute; left: -6px; top: 5px; bottom: 5px; width: 2px;
|
|
184
|
+
background: var(--active); border-radius: 0 2px 2px 0;
|
|
185
|
+
}
|
|
186
|
+
.rail-gear { font-size: 16px; line-height: 1; }
|
|
187
|
+
.rail-tip {
|
|
188
|
+
position: absolute; left: calc(100% + 10px); top: 50%; transform: translateY(-50%);
|
|
189
|
+
display: flex; align-items: center; gap: 12px; white-space: nowrap;
|
|
190
|
+
background: var(--panel); color: var(--text);
|
|
191
|
+
border: 1px solid var(--border); border-radius: 6px;
|
|
192
|
+
padding: 6px 8px 6px 11px; font-size: 12.5px;
|
|
193
|
+
box-shadow: 0 6px 18px rgba(0, 0, 0, 0.4);
|
|
194
|
+
opacity: 0; pointer-events: none; transition: opacity .12s ease;
|
|
195
|
+
z-index: 90;
|
|
196
|
+
}
|
|
197
|
+
.rail-btn:hover .rail-tip, .rail-btn:focus-visible .rail-tip { opacity: 1; }
|
|
198
|
+
.rail-tip kbd {
|
|
199
|
+
/* System font + letter-spacing so ⌘⇧N reads clearly and the glyphs aren't cramped together. */
|
|
200
|
+
font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;
|
|
201
|
+
font-size: 11.5px; font-weight: 500; letter-spacing: 1px;
|
|
202
|
+
color: var(--text); background: var(--bg);
|
|
203
|
+
border: 1px solid var(--border); border-radius: 4px; padding: 2px 6px;
|
|
204
|
+
}
|
|
205
|
+
/* Current branch chip under the project name in the sidebar header. */
|
|
206
|
+
.brand-branch { display: inline-flex; align-items: center; gap: 5px; margin-top: 3px; min-width: 0; color: var(--muted); font-size: 12px; }
|
|
207
|
+
.brand-branch-icon { flex: none; opacity: 0.8; }
|
|
208
|
+
.brand-branch-name { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; font-variant-numeric: tabular-nums; }
|
|
153
209
|
.tab, .plain-button {
|
|
154
210
|
border: 1px solid var(--border);
|
|
155
|
-
border-radius:
|
|
211
|
+
border-radius: 0;
|
|
156
212
|
padding: 6px 9px;
|
|
157
213
|
color: var(--text);
|
|
158
214
|
background: var(--panel);
|
|
@@ -186,7 +242,7 @@ body {
|
|
|
186
242
|
.settings-btn {
|
|
187
243
|
flex: none;
|
|
188
244
|
border: 1px solid transparent;
|
|
189
|
-
border-radius:
|
|
245
|
+
border-radius: 0;
|
|
190
246
|
background: transparent;
|
|
191
247
|
color: var(--muted);
|
|
192
248
|
font-size: 14px;
|
|
@@ -206,7 +262,7 @@ body {
|
|
|
206
262
|
overflow: auto;
|
|
207
263
|
padding: 12px;
|
|
208
264
|
border: 1px solid var(--border);
|
|
209
|
-
border-radius:
|
|
265
|
+
border-radius: 0;
|
|
210
266
|
background: var(--panel);
|
|
211
267
|
box-shadow: 0 8px 28px rgba(0, 0, 0, 0.5);
|
|
212
268
|
font-size: 12px;
|
|
@@ -231,7 +287,7 @@ body {
|
|
|
231
287
|
.settings-panel {
|
|
232
288
|
display: flex;
|
|
233
289
|
width: 980px; max-width: 90vw; height: 700px; max-height: 88vh;
|
|
234
|
-
background: var(--panel); border: 1px solid var(--border); border-radius:
|
|
290
|
+
background: var(--panel); border: 1px solid var(--border); border-radius: 0;
|
|
235
291
|
overflow: hidden; box-shadow: 0 12px 48px rgba(0, 0, 0, 0.55);
|
|
236
292
|
}
|
|
237
293
|
.settings-nav {
|
|
@@ -240,7 +296,7 @@ body {
|
|
|
240
296
|
display: flex; flex-direction: column; gap: 4px;
|
|
241
297
|
}
|
|
242
298
|
.settings-nav-title { font-size: 11px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--muted); padding: 4px 10px 8px; }
|
|
243
|
-
.settings-cat { text-align: left; border: 0; background: transparent; color: var(--text); padding: 7px 10px; border-radius:
|
|
299
|
+
.settings-cat { text-align: left; border: 0; background: transparent; color: var(--text); padding: 7px 10px; border-radius: 0; font-size: 13px; cursor: pointer; }
|
|
244
300
|
.settings-cat:hover { background: color-mix(in srgb, var(--active) 12%, transparent); }
|
|
245
301
|
.settings-cat.active { background: color-mix(in srgb, var(--active) 20%, transparent); color: var(--active); font-weight: 600; }
|
|
246
302
|
.settings-body { flex: 1 1 auto; min-width: 0; padding: 24px 28px; overflow: auto; }
|
|
@@ -251,14 +307,14 @@ body {
|
|
|
251
307
|
.settings-textarea {
|
|
252
308
|
width: 100%; box-sizing: border-box; resize: vertical; min-height: 70px;
|
|
253
309
|
background: var(--bg); color: var(--text);
|
|
254
|
-
border: 1px solid var(--border); border-radius:
|
|
310
|
+
border: 1px solid var(--border); border-radius: 0; padding: 10px 12px;
|
|
255
311
|
font: 12px/1.55 ui-sans-serif, system-ui, sans-serif;
|
|
256
312
|
}
|
|
257
313
|
.settings-textarea:focus { outline: none; border-color: var(--active); }
|
|
258
314
|
.settings-select {
|
|
259
315
|
width: auto; box-sizing: border-box;
|
|
260
316
|
background: var(--bg); color: var(--text);
|
|
261
|
-
border: 1px solid var(--border); border-radius:
|
|
317
|
+
border: 1px solid var(--border); border-radius: 0; padding: 8px 12px;
|
|
262
318
|
font: 12px/1.55 ui-sans-serif, system-ui, sans-serif;
|
|
263
319
|
}
|
|
264
320
|
.settings-select:focus { outline: none; border-color: var(--active); }
|
|
@@ -274,11 +330,18 @@ body {
|
|
|
274
330
|
.keys-grid { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 5px 10px; align-items: center; margin-bottom: 2px; }
|
|
275
331
|
.keys-grid kbd {
|
|
276
332
|
justify-self: start;
|
|
277
|
-
|
|
333
|
+
display: inline-block;
|
|
334
|
+
/* System font (NOT monospace): in monospace the ⌘/⇧/⌥ glyphs are squeezed into the cell and read tiny
|
|
335
|
+
next to letters, which is what made enlarging them look mismatched. The system font renders the
|
|
336
|
+
modifier glyphs at their natural size — like a macOS menu — so one uniform size looks right. */
|
|
337
|
+
font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;
|
|
338
|
+
font-size: 13px;
|
|
339
|
+
font-weight: 500;
|
|
340
|
+
line-height: 1.3;
|
|
278
341
|
background: var(--bg);
|
|
279
342
|
border: 1px solid var(--border);
|
|
280
|
-
border-radius:
|
|
281
|
-
padding:
|
|
343
|
+
border-radius: 0;
|
|
344
|
+
padding: 3px 8px;
|
|
282
345
|
color: var(--text);
|
|
283
346
|
white-space: nowrap;
|
|
284
347
|
}
|
|
@@ -308,7 +371,7 @@ body {
|
|
|
308
371
|
flex: none;
|
|
309
372
|
padding: 3px 10px;
|
|
310
373
|
border: 1px solid var(--border);
|
|
311
|
-
border-radius:
|
|
374
|
+
border-radius: 0;
|
|
312
375
|
color: var(--muted);
|
|
313
376
|
background: var(--panel);
|
|
314
377
|
font-size: 11px;
|
|
@@ -325,7 +388,7 @@ body {
|
|
|
325
388
|
width: 13px;
|
|
326
389
|
height: 13px;
|
|
327
390
|
border: 1px solid currentColor;
|
|
328
|
-
border-radius:
|
|
391
|
+
border-radius: 0;
|
|
329
392
|
opacity: 0.75;
|
|
330
393
|
}
|
|
331
394
|
.diff-viewed-toggle.is-viewed {
|
|
@@ -431,7 +494,7 @@ td.d2h-del:not(.d2h-code-side-linenumber) { color: #d8e0e8; }
|
|
|
431
494
|
.d2h-ins .d2h-change { background: var(--add-strong); }
|
|
432
495
|
.d2h-code-line-ctn ins, .d2h-code-line-ctn del {
|
|
433
496
|
text-decoration: none;
|
|
434
|
-
border-radius:
|
|
497
|
+
border-radius: 0;
|
|
435
498
|
padding: 0 1px;
|
|
436
499
|
box-decoration-break: clone;
|
|
437
500
|
-webkit-box-decoration-break: clone;
|
|
@@ -446,10 +509,10 @@ td.d2h-del:not(.d2h-code-side-linenumber) { color: #d8e0e8; }
|
|
|
446
509
|
}
|
|
447
510
|
.d2h-diff-table tr.diff-active-row td { background: rgba(74, 136, 199, 0.16) !important; }
|
|
448
511
|
.d2h-diff-table tr.diff-active-row td.d2h-code-side-linenumber { box-shadow: inset 2px 0 0 var(--active); }
|
|
449
|
-
.review-status .ws-ignored { color: var(--token-tag); border: 1px solid color-mix(in srgb, var(--token-tag) 45%, transparent); border-radius:
|
|
450
|
-
.index-progress { display: inline-flex; width: 54px; height: 4px; border-radius:
|
|
512
|
+
.review-status .ws-ignored { color: var(--token-tag); border: 1px solid color-mix(in srgb, var(--token-tag) 45%, transparent); border-radius: 0; padding: 0 7px; }
|
|
513
|
+
.index-progress { display: inline-flex; width: 54px; height: 4px; border-radius: 0; background: color-mix(in srgb, var(--muted) 30%, transparent); overflow: hidden; vertical-align: middle; }
|
|
451
514
|
.index-progress.hidden { display: none; }
|
|
452
|
-
.index-progress-bar { width: 0; height: 100%; background: var(--active); border-radius:
|
|
515
|
+
.index-progress-bar { width: 0; height: 100%; background: var(--active); border-radius: 0; transition: width 0.18s ease; }
|
|
453
516
|
.d2h-file-collapse {
|
|
454
517
|
display: inline-flex;
|
|
455
518
|
align-items: center;
|
|
@@ -457,7 +520,7 @@ td.d2h-del:not(.d2h-code-side-linenumber) { color: #d8e0e8; }
|
|
|
457
520
|
margin-left: 8px;
|
|
458
521
|
padding: 3px 10px;
|
|
459
522
|
border: 1px solid var(--border);
|
|
460
|
-
border-radius:
|
|
523
|
+
border-radius: 0;
|
|
461
524
|
color: var(--muted);
|
|
462
525
|
background: var(--panel);
|
|
463
526
|
font-size: 11px;
|
|
@@ -475,7 +538,7 @@ td.d2h-del:not(.d2h-code-side-linenumber) { color: #d8e0e8; }
|
|
|
475
538
|
width: 13px;
|
|
476
539
|
height: 13px;
|
|
477
540
|
border: 1px solid currentColor;
|
|
478
|
-
border-radius:
|
|
541
|
+
border-radius: 0;
|
|
479
542
|
opacity: 0.75;
|
|
480
543
|
}
|
|
481
544
|
.d2h-file-collapse-input { display: none; }
|
|
@@ -507,7 +570,7 @@ td.d2h-del:not(.d2h-code-side-linenumber) { color: #d8e0e8; }
|
|
|
507
570
|
min-height: 18px;
|
|
508
571
|
padding: 1px 5px 1px calc(7px + (var(--depth) * 14px));
|
|
509
572
|
color: var(--text);
|
|
510
|
-
border-radius:
|
|
573
|
+
border-radius: 0;
|
|
511
574
|
cursor: default;
|
|
512
575
|
list-style: none;
|
|
513
576
|
}
|
|
@@ -526,7 +589,7 @@ td.d2h-del:not(.d2h-code-side-linenumber) { color: #d8e0e8; }
|
|
|
526
589
|
.file-link.tree-file { padding-left: calc(8px + (var(--depth) * 14px)); }
|
|
527
590
|
/* Arrow-key focus in the tree (changes/files) matches the active-file highlight — a tinted fill + accent
|
|
528
591
|
border — so navigating the file tree reads the same as the diff-side selection (not a faint 1px outline). */
|
|
529
|
-
.tree-focus { background: color-mix(in srgb, var(--active) 20%, transparent); border-radius:
|
|
592
|
+
.tree-focus { background: color-mix(in srgb, var(--active) 20%, transparent); border-radius: 0; }
|
|
530
593
|
.file-link.tree-focus { border-color: var(--active); }
|
|
531
594
|
summary.tree-focus { background: color-mix(in srgb, var(--active) 20%, transparent); }
|
|
532
595
|
.file-link {
|
|
@@ -538,7 +601,7 @@ summary.tree-focus { background: color-mix(in srgb, var(--active) 20%, transpare
|
|
|
538
601
|
padding: 1px 6px;
|
|
539
602
|
color: var(--text);
|
|
540
603
|
text-decoration: none;
|
|
541
|
-
border-radius:
|
|
604
|
+
border-radius: 0;
|
|
542
605
|
border: 1px solid transparent;
|
|
543
606
|
background: transparent;
|
|
544
607
|
width: 100%;
|
|
@@ -565,7 +628,7 @@ summary.tree-focus { background: color-mix(in srgb, var(--active) 20%, transpare
|
|
|
565
628
|
justify-content: center;
|
|
566
629
|
min-width: 16px;
|
|
567
630
|
height: 16px;
|
|
568
|
-
border-radius:
|
|
631
|
+
border-radius: 0;
|
|
569
632
|
padding: 0 3px;
|
|
570
633
|
font-size: 9px;
|
|
571
634
|
font-weight: 700;
|
|
@@ -580,7 +643,7 @@ summary.tree-focus { background: color-mix(in srgb, var(--active) 20%, transpare
|
|
|
580
643
|
.status-deleted { background: var(--del); color: #cf222e; }
|
|
581
644
|
.status-renamed { background: #fff8c5; color: #9a6700; }
|
|
582
645
|
.status-source { background: var(--line); color: var(--muted); }
|
|
583
|
-
.content { min-width: 0; padding: 0; display: flex; flex-direction: column; min-height: 0; overflow: hidden; grid-column:
|
|
646
|
+
.content { min-width: 0; padding: 0; display: flex; flex-direction: column; min-height: 0; overflow: hidden; grid-column: 3; grid-row: 1; }
|
|
584
647
|
/* Pin the diff's horizontal scrollbar to the viewport bottom instead of letting it float
|
|
585
648
|
mid-screen when a file's diff is short: fill the content column vertically so the last
|
|
586
649
|
file's diff body extends all the way down. */
|
|
@@ -595,7 +658,7 @@ summary.tree-focus { background: color-mix(in srgb, var(--active) 20%, transpare
|
|
|
595
658
|
scrolls naturally inside .diff2html-container. */
|
|
596
659
|
/* Slimmer scrollbars — the default overlay bars read as chunky on the dark UI. */
|
|
597
660
|
::-webkit-scrollbar { width: 9px; height: 9px; }
|
|
598
|
-
::-webkit-scrollbar-thumb { background: color-mix(in srgb, var(--muted) 32%, transparent); border-radius:
|
|
661
|
+
::-webkit-scrollbar-thumb { background: color-mix(in srgb, var(--muted) 32%, transparent); border-radius: 0; }
|
|
599
662
|
::-webkit-scrollbar-thumb:hover { background: color-mix(in srgb, var(--muted) 52%, transparent); }
|
|
600
663
|
::-webkit-scrollbar-track { background: transparent; }
|
|
601
664
|
.toolbar {
|
|
@@ -638,7 +701,7 @@ h1 { margin: 0; font-size: 18px; }
|
|
|
638
701
|
.toolbar p { margin: 4px 0 0; color: var(--muted); font-size: 12px; }
|
|
639
702
|
.empty { padding: 24px; color: var(--muted); }
|
|
640
703
|
.source-viewer { min-height: 0; } /* grid sizes this; a 100vh min would overflow the content row */
|
|
641
|
-
.source-toolbar { margin-bottom: 0; }
|
|
704
|
+
.source-toolbar { flex: none; margin-bottom: 0; padding: 4px 12px; } /* flex:none (don't shrink, same crush as the tabs); compact: the file-meta row needs far less height than the diff toolbar */
|
|
642
705
|
.source-file-meta {
|
|
643
706
|
display: flex;
|
|
644
707
|
flex: 1;
|
|
@@ -665,12 +728,17 @@ h1 { margin: 0; font-size: 18px; }
|
|
|
665
728
|
/* Files-mode tabs: one row of tabs above the source toolbar (open files, click to switch, × to close). */
|
|
666
729
|
.source-tabs {
|
|
667
730
|
display: flex;
|
|
731
|
+
/* NEVER shrink: #source-viewer is a flex column whose source-body holds a tall (min-content) code
|
|
732
|
+
table, so a shrinkable header row got crushed (the bar collapsed to ~7px and clipped the tabs in
|
|
733
|
+
half). flex:none keeps the bar at its natural height; the body absorbs the overflow and scrolls. */
|
|
734
|
+
flex: none;
|
|
668
735
|
overflow-x: auto;
|
|
669
736
|
gap: 1px;
|
|
670
|
-
|
|
737
|
+
/* Breathing room from the window's top edge so the first row of tabs isn't flush against it. */
|
|
738
|
+
margin: 6px 8px 6px;
|
|
671
739
|
background: var(--sidebar);
|
|
672
740
|
border: 1px solid var(--border);
|
|
673
|
-
border-radius:
|
|
741
|
+
border-radius: 0;
|
|
674
742
|
scrollbar-width: thin;
|
|
675
743
|
}
|
|
676
744
|
.source-tab {
|
|
@@ -687,19 +755,21 @@ h1 { margin: 0; font-size: 18px; }
|
|
|
687
755
|
cursor: pointer;
|
|
688
756
|
white-space: nowrap;
|
|
689
757
|
}
|
|
690
|
-
.source-tab:first-child { border-top-left-radius:
|
|
758
|
+
.source-tab:first-child { border-top-left-radius: 0; border-bottom-left-radius: 0; }
|
|
691
759
|
.source-tab:hover { color: var(--text); }
|
|
692
760
|
.source-tab.active { color: var(--text); background: var(--bg); box-shadow: inset 0 -2px 0 var(--active); }
|
|
693
761
|
.source-tab-name { overflow: hidden; text-overflow: ellipsis; }
|
|
694
762
|
.source-tab-close {
|
|
695
763
|
flex: none; border: 0; background: transparent; color: var(--muted);
|
|
696
|
-
font-size: 14px; line-height: 1; padding: 0 3px; cursor: pointer; border-radius:
|
|
764
|
+
font-size: 14px; line-height: 1; padding: 0 3px; cursor: pointer; border-radius: 0;
|
|
697
765
|
}
|
|
698
766
|
.source-tab-close:hover { background: var(--line); color: var(--text); }
|
|
699
|
-
/* Scrolloff
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
767
|
+
/* Scrolloff for the sidebar tree only. NOTE: this is deliberately NOT on the source-body or the diff
|
|
768
|
+
container. Chromium insets the text-selection autoscroll region by scroll-padding, so a 35vh inset made
|
|
769
|
+
a drag-select rocket-scroll the moment the pointer left the middle band (runaway scroll + the selection
|
|
770
|
+
flying to the file end). Those two panes get their caret/F7 scroll-off from manual scrollTop math
|
|
771
|
+
(scheduleSourceReveal / scrolloffReveal), so they don't need — and must not have — scroll-padding. */
|
|
772
|
+
.sidebar-scroll { scroll-padding-block: 35vh; }
|
|
703
773
|
.source-body {
|
|
704
774
|
border: 1px solid var(--border);
|
|
705
775
|
overflow: auto;
|
|
@@ -815,7 +885,7 @@ h1 { margin: 0; font-size: 18px; }
|
|
|
815
885
|
.source-type-icon { display: inline-flex; align-items: center; flex: none; margin-right: 2px; }
|
|
816
886
|
.source-type-icon .ftype { width: 16px; height: 16px; display: block; }
|
|
817
887
|
.mc-file-badge { display: inline-flex; gap: 4px; align-items: center; }
|
|
818
|
-
.mc-fb { font-size: 10px; line-height: 1; padding: 1px 6px; border-radius:
|
|
888
|
+
.mc-fb { font-size: 10px; line-height: 1; padding: 1px 6px; border-radius: 0; font-weight: 700; font-variant-numeric: tabular-nums; border: 1px solid transparent; }
|
|
819
889
|
.mc-fb-q { color: var(--token-number); background: color-mix(in srgb, var(--token-number) 16%, transparent); border-color: color-mix(in srgb, var(--token-number) 38%, transparent); }
|
|
820
890
|
.mc-fb-c { color: var(--token-tag); background: color-mix(in srgb, var(--token-tag) 16%, transparent); border-color: color-mix(in srgb, var(--token-tag) 38%, transparent); }
|
|
821
891
|
/* Lines kept highlighted while composing a comment on a drag selection */
|
|
@@ -828,7 +898,7 @@ h1 { margin: 0; font-size: 18px; }
|
|
|
828
898
|
.source-table .mc-thread-cell { padding: 4px 12px 8px 66px; }
|
|
829
899
|
.mc-card {
|
|
830
900
|
border: 1px solid var(--border);
|
|
831
|
-
border-radius:
|
|
901
|
+
border-radius: 0; background: var(--panel); margin: 8px 0; max-width: 760px;
|
|
832
902
|
font: 12px/1.5 Monaco, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
|
|
833
903
|
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.28);
|
|
834
904
|
overflow: hidden;
|
|
@@ -851,12 +921,12 @@ body:has(.dock-panel:focus-within) .code-cursor,
|
|
|
851
921
|
body:has(#settings-modal:not(.hidden)) .code-cursor { display: none; }
|
|
852
922
|
.mc-kind {
|
|
853
923
|
font-weight: 700; font-size: 10px; letter-spacing: 0.05em; text-transform: uppercase;
|
|
854
|
-
padding: 2px 8px; border-radius:
|
|
924
|
+
padding: 2px 8px; border-radius: 0;
|
|
855
925
|
color: var(--muted); background: color-mix(in srgb, var(--muted) 16%, transparent);
|
|
856
926
|
}
|
|
857
927
|
.mc-card.mc-q .mc-kind { color: var(--token-number); background: color-mix(in srgb, var(--token-number) 18%, transparent); }
|
|
858
928
|
.mc-card.mc-c .mc-kind { color: var(--token-tag); background: color-mix(in srgb, var(--token-tag) 18%, transparent); }
|
|
859
|
-
.mc-del { margin-left: auto; background: transparent; border: 0; color: var(--muted); cursor: pointer; font-size: 15px; line-height: 1; padding: 1px 5px; border-radius:
|
|
929
|
+
.mc-del { margin-left: auto; background: transparent; border: 0; color: var(--muted); cursor: pointer; font-size: 15px; line-height: 1; padding: 1px 5px; border-radius: 0; }
|
|
860
930
|
.mc-del:hover { color: var(--del-strong); background: color-mix(in srgb, var(--del-strong) 16%, transparent); }
|
|
861
931
|
.mc-card-body { padding: 2px 12px 11px; color: var(--text); white-space: pre-wrap; overflow-wrap: anywhere; }
|
|
862
932
|
.mc-input {
|
|
@@ -867,15 +937,61 @@ body:has(#settings-modal:not(.hidden)) .code-cursor { display: none; }
|
|
|
867
937
|
view uses a fake .code-cursor). caret-color inherits, so restore it here — a focused textarea must show
|
|
868
938
|
its real caret. The single-caret rule hides the FILE caret while composing, not the textarea's own. */
|
|
869
939
|
caret-color: var(--text);
|
|
870
|
-
border: 1px solid var(--border); border-radius:
|
|
940
|
+
border: 1px solid var(--border); border-radius: 0; padding: 9px 11px;
|
|
871
941
|
font: 12px/1.55 Monaco, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
|
|
872
942
|
transition: border-color 120ms ease, box-shadow 120ms ease;
|
|
873
943
|
}
|
|
874
944
|
.mc-input:focus { outline: none; border-color: var(--active); box-shadow: 0 0 0 3px color-mix(in srgb, var(--active) 22%, transparent); }
|
|
875
945
|
.mc-actions { display: flex; align-items: center; gap: 8px; padding: 0 10px 9px; }
|
|
876
|
-
.mc-btn { background: var(--active); color: #fff; border: 0; border-radius:
|
|
946
|
+
.mc-btn { background: var(--active); color: #fff; border: 0; border-radius: 0; padding: 5px 12px; font-size: 12px; cursor: pointer; }
|
|
877
947
|
.mc-btn:hover { filter: brightness(1.1); }
|
|
878
948
|
.mc-btn.mc-ghost { background: transparent; border: 1px solid var(--border); color: var(--text); }
|
|
949
|
+
|
|
950
|
+
/* ===== Git history view (Cmd+9): full-screen overlay, commit list (graph lanes) | commit detail+diff. ===== */
|
|
951
|
+
.history-view { position: fixed; inset: 0; z-index: 75; display: flex; flex-direction: column; background: var(--bg); }
|
|
952
|
+
.history-view.hidden { display: none; }
|
|
953
|
+
.history-bar { flex: none; display: flex; align-items: center; gap: 12px; padding: 8px 12px; background: var(--sidebar); border-bottom: 1px solid var(--border); }
|
|
954
|
+
.history-title { font-weight: 650; font-size: 13px; letter-spacing: 0.02em; }
|
|
955
|
+
.history-search { flex: 1 1 auto; max-width: 440px; height: 28px; border: 1px solid var(--border); border-radius: 0; background: var(--bg); color: var(--text); padding: 0 10px; font-size: 13px; outline: none; }
|
|
956
|
+
.history-search:focus { border-color: var(--active); }
|
|
957
|
+
.history-bar .dock-btn { margin-left: auto; font-size: 16px; }
|
|
958
|
+
.history-body { flex: 1 1 auto; min-height: 0; display: flex; }
|
|
959
|
+
.history-list { flex: 1.3 1 0; min-width: 0; overflow: auto; padding: 4px 0; border-right: 1px solid var(--border); }
|
|
960
|
+
.history-detail { flex: 1 1 0; min-width: 0; overflow: auto; }
|
|
961
|
+
/* Rows are a fixed 24px so the per-row graph SVG (also 24px) tiles seamlessly and the lanes connect. */
|
|
962
|
+
.hrow { display: grid; grid-template-columns: var(--hgraph-w, 60px) minmax(0, 1fr) auto auto; align-items: center; gap: 10px; width: 100%; height: 24px; padding: 0 12px 0 0; border: 0; background: transparent; color: var(--text); text-align: left; cursor: pointer; font-size: 12.5px; }
|
|
963
|
+
.hrow:hover { background: color-mix(in srgb, var(--active) 8%, transparent); }
|
|
964
|
+
.hrow.active { background: color-mix(in srgb, var(--active) 16%, transparent); }
|
|
965
|
+
.hgraph-cell { height: 24px; line-height: 0; }
|
|
966
|
+
.hgraph { display: block; }
|
|
967
|
+
/* Filtering breaks the contiguous graph, so hide the lane column and show a flat list (IntelliJ does too). */
|
|
968
|
+
.history-list.filtering .hgraph-cell { display: none; }
|
|
969
|
+
.history-list.filtering .hrow { grid-template-columns: minmax(0, 1fr) auto auto; padding-left: 12px; }
|
|
970
|
+
.hmsg { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
971
|
+
.hauthor, .hdate { color: var(--muted); font-size: 12px; white-space: nowrap; }
|
|
972
|
+
.hdate { font-variant-numeric: tabular-nums; }
|
|
973
|
+
.href { display: inline-block; font-size: 10.5px; line-height: 1.5; padding: 0 5px; margin-right: 6px; border-radius: 8px; border: 1px solid var(--border); vertical-align: middle; }
|
|
974
|
+
.href-head { color: var(--active); border-color: var(--active); }
|
|
975
|
+
.href-branch { color: #7faf6b; border-color: #7faf6b; }
|
|
976
|
+
.href-remote { color: var(--muted); }
|
|
977
|
+
.href-tag { color: #d4a857; border-color: #d4a857; }
|
|
978
|
+
.history-detail-head { padding: 12px 14px; border-bottom: 1px solid var(--border); }
|
|
979
|
+
.hd-msg { font-size: 13px; line-height: 1.55; white-space: pre-wrap; word-break: break-word; margin-bottom: 8px; }
|
|
980
|
+
.hd-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; font-size: 12px; color: var(--muted); }
|
|
981
|
+
.hd-hash { font-family: Monaco, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; }
|
|
982
|
+
|
|
983
|
+
/* Go-to-line (Cmd/Ctrl+L): a small numeric prompt near the top, like a command palette. */
|
|
984
|
+
.goto-line {
|
|
985
|
+
position: fixed; top: 13vh; left: 50%; transform: translateX(-50%); z-index: 80;
|
|
986
|
+
background: var(--panel); border: 1px solid var(--border); border-radius: 6px;
|
|
987
|
+
box-shadow: 0 14px 44px rgba(0, 0, 0, 0.5); padding: 8px;
|
|
988
|
+
}
|
|
989
|
+
.goto-line-input {
|
|
990
|
+
width: 220px; height: 30px; border: 1px solid var(--border); border-radius: 0;
|
|
991
|
+
background: var(--bg); color: var(--text); padding: 0 10px;
|
|
992
|
+
font: 14px ui-sans-serif, -apple-system, system-ui, sans-serif; outline: none;
|
|
993
|
+
}
|
|
994
|
+
.goto-line-input:focus { border-color: var(--active); }
|
|
879
995
|
/* Terminal-send buttons in the merged modal: green to read as "send to the live session", with a clear
|
|
880
996
|
focus ring so arrow-key selection between split panes is visible. */
|
|
881
997
|
.mc-send-term { background: #2f8f46; }
|
|
@@ -883,18 +999,21 @@ body:has(#settings-modal:not(.hidden)) .code-cursor { display: none; }
|
|
|
883
999
|
.mc-hint { color: var(--muted); font-size: 11px; }
|
|
884
1000
|
.mc-modal { position: fixed; inset: 0; z-index: 60; display: grid; place-items: start center; padding-top: min(10vh, 80px); background: color-mix(in srgb, #000 32%, transparent); }
|
|
885
1001
|
.mc-modal.hidden { display: none; }
|
|
886
|
-
.mc-modal-panel { width: min(900px, calc(100vw - 40px)); height: 80vh; max-height: 80vh; display: grid; grid-template-rows: auto minmax(0, 1fr); border: 1px solid var(--border); border-radius:
|
|
1002
|
+
.mc-modal-panel { width: min(900px, calc(100vw - 40px)); height: 80vh; max-height: 80vh; display: grid; grid-template-rows: auto minmax(0, 1fr); border: 1px solid var(--border); border-radius: 0; background: var(--panel); overflow: hidden; }
|
|
887
1003
|
.mc-modal-head { display: flex; align-items: center; gap: 10px; padding: 10px 12px; border-bottom: 1px solid var(--border); color: var(--text); font-weight: 650; }
|
|
888
1004
|
.mc-modal-head span { margin-right: auto; }
|
|
889
1005
|
.mc-modal-text { width: 100%; height: 100%; box-sizing: border-box; resize: none; border: 0; padding: 12px; background: var(--bg); color: var(--text); caret-color: var(--text); font: 12px/1.55 Monaco, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; }
|
|
890
1006
|
.mc-modal-text:focus { outline: none; }
|
|
891
|
-
.mc-dropdown { position: fixed; z-index: 70; min-width: 0; background: var(--panel); border: 1px solid var(--border); border-radius:
|
|
892
|
-
.mc-dropdown-item { display: block; width: 100%; text-align: left; padding: 4px 10px; border: 0; background: transparent; color: var(--text); border-radius:
|
|
1007
|
+
.mc-dropdown { position: fixed; z-index: 70; min-width: 0; background: var(--panel); border: 1px solid var(--border); border-radius: 0; box-shadow: 0 6px 18px rgba(0, 0, 0, 0.4); padding: 3px; }
|
|
1008
|
+
.mc-dropdown-item { display: block; width: 100%; text-align: left; padding: 4px 10px; border: 0; background: transparent; color: var(--text); border-radius: 0; font-size: 12px; line-height: 1.5; cursor: pointer; white-space: nowrap; }
|
|
893
1009
|
.mc-dropdown-item.active, .mc-dropdown-item:hover { background: var(--active); color: #fff; }
|
|
894
1010
|
#mc-toasts { position: fixed; left: 16px; bottom: 16px; z-index: 80; display: flex; flex-direction: column; gap: 8px; max-width: 360px; pointer-events: none; }
|
|
895
|
-
.mc-toast { background: var(--panel); color: var(--text); border: 1px solid var(--border); border-left: 3px solid var(--active); border-radius:
|
|
1011
|
+
.mc-toast { background: var(--panel); color: var(--text); border: 1px solid var(--border); border-left: 3px solid var(--active); border-radius: 0; padding: 10px 14px; font-size: 13px; line-height: 1.45; box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4); opacity: 0; transform: translateY(8px); transition: opacity .25s ease, transform .25s ease; }
|
|
896
1012
|
.mc-toast.show { opacity: 1; transform: translateY(0); }
|
|
897
1013
|
.mc-toast.hide { opacity: 0; transform: translateY(8px); }
|
|
1014
|
+
/* Inline hint anchored just under the diff caret (F7 "last change" boundary announcement); fades on its own. */
|
|
1015
|
+
.mc-caret-hint { position: fixed; z-index: 75; max-width: 460px; background: var(--panel); color: var(--text); border: 1px solid var(--border); border-left: 3px solid var(--active); border-radius: 0; padding: 5px 10px; font-size: 12px; line-height: 1.4; box-shadow: 0 6px 18px rgba(0, 0, 0, 0.4); opacity: 0; transform: translateY(-4px); pointer-events: none; transition: opacity .16s ease, transform .16s ease; }
|
|
1016
|
+
.mc-caret-hint.show { opacity: 1; transform: translateY(0); }
|
|
898
1017
|
/* Prompt memo: split editor | live Markdown preview inside the standard modal shell. */
|
|
899
1018
|
.mc-memo-body { display: grid; grid-template-columns: 1fr 1fr; min-height: 0; height: 100%; }
|
|
900
1019
|
.mc-memo-edit { height: 100%; border-right: 1px solid var(--border); }
|
|
@@ -921,7 +1040,7 @@ body:has(#settings-modal:not(.hidden)) .code-cursor { display: none; }
|
|
|
921
1040
|
color: var(--text); font-weight: 650; font-size: 12px;
|
|
922
1041
|
}
|
|
923
1042
|
.dock-title { margin-right: auto; letter-spacing: 0.02em; }
|
|
924
|
-
.dock-btn { border: 0; background: transparent; color: var(--muted); cursor: pointer; padding: 2px 7px; border-radius:
|
|
1043
|
+
.dock-btn { border: 0; background: transparent; color: var(--muted); cursor: pointer; padding: 2px 7px; border-radius: 0; font: inherit; font-weight: 500; }
|
|
925
1044
|
.dock-btn:hover { color: var(--text); background: color-mix(in srgb, var(--muted) 22%, transparent); }
|
|
926
1045
|
.dock-max { font-size: 14px; line-height: 1; }
|
|
927
1046
|
.dock-body { flex: 1 1 auto; min-height: 0; display: flex; flex-direction: column; }
|
|
@@ -951,13 +1070,16 @@ body.dock-maximized .terminal-panel:not(.hidden) { grid-row: 1 / 3; height: auto
|
|
|
951
1070
|
padding-top: min(12vh, 96px);
|
|
952
1071
|
background: color-mix(in srgb, #000 24%, transparent);
|
|
953
1072
|
}
|
|
1073
|
+
/* Usages popup anchored under the caret: drop the dim backdrop and centering; JS sets panel left/top. */
|
|
1074
|
+
.quick-open.anchored { display: block; padding: 0; background: transparent; }
|
|
1075
|
+
.quick-open.anchored .quick-open-panel { position: absolute; max-height: none; }
|
|
954
1076
|
.quick-open-panel {
|
|
955
1077
|
width: min(720px, calc(100vw - 32px));
|
|
956
1078
|
max-height: min(680px, calc(100vh - 64px));
|
|
957
1079
|
display: grid;
|
|
958
1080
|
grid-template-rows: auto auto minmax(0, 1fr);
|
|
959
1081
|
border: 1px solid var(--border);
|
|
960
|
-
border-radius:
|
|
1082
|
+
border-radius: 0;
|
|
961
1083
|
background: var(--panel);
|
|
962
1084
|
box-shadow: 0 18px 60px rgba(0, 0, 0, 0.28);
|
|
963
1085
|
overflow: hidden;
|
|
@@ -972,6 +1094,13 @@ body.dock-maximized .terminal-panel:not(.hidden) { grid-row: 1 / 3; height: auto
|
|
|
972
1094
|
font-size: 12px;
|
|
973
1095
|
}
|
|
974
1096
|
.quick-open-hint { font-family: Monaco, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; }
|
|
1097
|
+
/* Recent files: no search box — typed letters filter the list (speed search). */
|
|
1098
|
+
.quick-open.quick-recent #quick-open-input { display: none; }
|
|
1099
|
+
.quick-open-filter { font-size: 12px; }
|
|
1100
|
+
.quick-open-filter.is-hint { color: var(--muted); opacity: 0.7; font-style: italic; }
|
|
1101
|
+
.quick-open-filter.has-filter { color: var(--active); font-family: Monaco, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; }
|
|
1102
|
+
.quick-open-filter.has-filter::after { content: "\258F"; opacity: 0.7; animation: mc-caret-blink 1.1s steps(1) infinite; }
|
|
1103
|
+
@keyframes mc-caret-blink { 50% { opacity: 0; } }
|
|
975
1104
|
#quick-open-input {
|
|
976
1105
|
width: 100%;
|
|
977
1106
|
border: 0;
|
|
@@ -983,7 +1112,9 @@ body.dock-maximized .terminal-panel:not(.hidden) { grid-row: 1 / 3; height: auto
|
|
|
983
1112
|
font: 15px Monaco, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
|
|
984
1113
|
}
|
|
985
1114
|
.quick-open-results { overflow: auto; padding: 6px; max-height: 232px; }
|
|
986
|
-
|
|
1115
|
+
/* Compound selector beats the later `.quick-open-item { display: grid }` (equal specificity, source order)
|
|
1116
|
+
that would otherwise drop the loc/code columns onto each other. */
|
|
1117
|
+
.quick-open-item.usage-item { display: flex; align-items: baseline; gap: 10px; }
|
|
987
1118
|
.usage-loc { flex: none; color: var(--active); font-variant-numeric: tabular-nums; white-space: nowrap; font-size: 12px; }
|
|
988
1119
|
.usage-code { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--text); font: 12px Monaco, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; }
|
|
989
1120
|
.quick-open-main { min-width: 0; display: flex; align-items: baseline; gap: 8px; }
|
|
@@ -1015,7 +1146,7 @@ body.dock-maximized .terminal-panel:not(.hidden) { grid-row: 1 / 3; height: auto
|
|
|
1015
1146
|
width: 100%;
|
|
1016
1147
|
min-height: 24px;
|
|
1017
1148
|
border: 1px solid transparent;
|
|
1018
|
-
border-radius:
|
|
1149
|
+
border-radius: 0;
|
|
1019
1150
|
padding: 2px 8px;
|
|
1020
1151
|
background: transparent;
|
|
1021
1152
|
color: var(--text);
|
|
@@ -1043,11 +1174,17 @@ body.dock-maximized .terminal-panel:not(.hidden) { grid-row: 1 / 3; height: auto
|
|
|
1043
1174
|
.quick-open-badge { align-self: center; color: var(--muted); font-size: 12px; }
|
|
1044
1175
|
.quick-open-empty { padding: 28px 14px; color: var(--muted); font-size: 13px; }
|
|
1045
1176
|
@media (max-width: 900px) {
|
|
1046
|
-
body { grid-template-columns: 1fr; grid-template-rows: auto minmax(0, 1fr) auto; }
|
|
1047
|
-
|
|
1048
|
-
.
|
|
1049
|
-
.
|
|
1050
|
-
.
|
|
1177
|
+
body { grid-template-columns: 1fr; grid-template-rows: auto auto minmax(0, 1fr) auto; }
|
|
1178
|
+
/* Rail becomes a horizontal strip at the top; tooltips drop below the icon. */
|
|
1179
|
+
.activity-rail { grid-row: 1; grid-column: 1; width: auto; height: auto; flex-direction: row; padding: 4px 8px; border-right: 0; border-bottom: 1px solid var(--border); }
|
|
1180
|
+
.activity-rail .rail-group { flex-direction: row; }
|
|
1181
|
+
.activity-rail .rail-bottom { margin-left: auto; margin-top: 0; }
|
|
1182
|
+
.rail-tip { left: 50%; top: calc(100% + 8px); transform: translateX(-50%); }
|
|
1183
|
+
.rail-btn.is-active::before { left: 5px; right: 5px; top: auto; bottom: -4px; width: auto; height: 2px; }
|
|
1184
|
+
.sidebar { grid-row: 2; grid-column: 1; height: auto; border-right: 0; border-bottom: 1px solid var(--border); }
|
|
1185
|
+
.content { grid-row: 3; grid-column: 1; padding: 16px; }
|
|
1186
|
+
.terminal-panel { grid-column: 1; grid-row: 4; }
|
|
1187
|
+
.dock-panel { grid-column: 1; grid-row: 4; }
|
|
1051
1188
|
.toolbar { margin: -16px -16px 16px; padding: 12px 16px; }
|
|
1052
1189
|
.d2h-files-diff { grid-template-columns: 1fr; }
|
|
1053
1190
|
.d2h-file-side-diff:first-child { border-right: 0; border-bottom: 1px solid var(--border); }
|
|
@@ -1057,7 +1194,7 @@ body.dock-maximized .terminal-panel:not(.hidden) { grid-row: 1 / 3; height: auto
|
|
|
1057
1194
|
background: var(--panel);
|
|
1058
1195
|
color: var(--fg);
|
|
1059
1196
|
border: 1px solid var(--border);
|
|
1060
|
-
border-radius:
|
|
1197
|
+
border-radius: 0;
|
|
1061
1198
|
padding: 3px 8px;
|
|
1062
1199
|
font-size: 12px;
|
|
1063
1200
|
}
|
|
@@ -1071,7 +1208,7 @@ body.dock-maximized .terminal-panel:not(.hidden) { grid-row: 1 / 3; height: auto
|
|
|
1071
1208
|
margin-right: 4px;
|
|
1072
1209
|
padding: 0;
|
|
1073
1210
|
border: 0;
|
|
1074
|
-
border-radius:
|
|
1211
|
+
border-radius: 0;
|
|
1075
1212
|
background: transparent;
|
|
1076
1213
|
color: #59a869;
|
|
1077
1214
|
font-size: 10px;
|
|
@@ -1083,14 +1220,14 @@ body.dock-maximized .terminal-panel:not(.hidden) { grid-row: 1 / 3; height: auto
|
|
|
1083
1220
|
.http-request-line .source-code { font-weight: 600; }
|
|
1084
1221
|
.http-method { color: var(--token-keyword); font-weight: 700; }
|
|
1085
1222
|
.http-sep { color: var(--muted); }
|
|
1086
|
-
.http-var { border-radius:
|
|
1223
|
+
.http-var { border-radius: 0; padding: 0 1px; }
|
|
1087
1224
|
.http-var.known { color: var(--token-string); background: color-mix(in srgb, var(--token-string) 15%, transparent); }
|
|
1088
1225
|
.http-var.unknown { color: #e06c75; background: color-mix(in srgb, #e06c75 16%, transparent); text-decoration: underline dotted; }
|
|
1089
1226
|
.http-response-row td { padding: 0 14px 0 0; border: 0; background: transparent; }
|
|
1090
1227
|
.http-response {
|
|
1091
1228
|
margin: 6px 0 12px;
|
|
1092
1229
|
border: 1px solid var(--border);
|
|
1093
|
-
border-radius:
|
|
1230
|
+
border-radius: 0;
|
|
1094
1231
|
background: color-mix(in srgb, var(--active) 5%, var(--panel));
|
|
1095
1232
|
overflow: hidden;
|
|
1096
1233
|
font-size: 12px;
|
|
@@ -1113,7 +1250,7 @@ body.dock-maximized .terminal-panel:not(.hidden) { grid-row: 1 / 3; height: auto
|
|
|
1113
1250
|
margin-left: auto;
|
|
1114
1251
|
background: transparent;
|
|
1115
1252
|
border: 1px solid var(--border);
|
|
1116
|
-
border-radius:
|
|
1253
|
+
border-radius: 0;
|
|
1117
1254
|
color: var(--fg);
|
|
1118
1255
|
padding: 2px 8px;
|
|
1119
1256
|
font-size: 11px;
|
|
@@ -1152,7 +1289,7 @@ body.dock-maximized .terminal-panel:not(.hidden) { grid-row: 1 / 3; height: auto
|
|
|
1152
1289
|
max-height: calc(100vh - 230px);
|
|
1153
1290
|
object-fit: contain;
|
|
1154
1291
|
border: 1px solid var(--border);
|
|
1155
|
-
border-radius:
|
|
1292
|
+
border-radius: 0;
|
|
1156
1293
|
background: repeating-conic-gradient(#3a3a3a 0% 25%, #2f2f2f 0% 50%) 50% / 20px 20px;
|
|
1157
1294
|
cursor: zoom-in;
|
|
1158
1295
|
}
|
|
@@ -1193,16 +1330,16 @@ body.dock-maximized .terminal-panel:not(.hidden) { grid-row: 1 / 3; height: auto
|
|
|
1193
1330
|
.md-cell del { color: var(--muted); }
|
|
1194
1331
|
.md-cell code {
|
|
1195
1332
|
font: 0.86em Monaco, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
|
|
1196
|
-
background: var(--line); border: 1px solid var(--border); border-radius:
|
|
1333
|
+
background: var(--line); border: 1px solid var(--border); border-radius: 0; padding: 0.1em 0.4em;
|
|
1197
1334
|
}
|
|
1198
|
-
.md-code { background: var(--panel); border: 1px solid var(--border); border-radius:
|
|
1335
|
+
.md-code { background: var(--panel); border: 1px solid var(--border); border-radius: 0; padding: 10px 12px; overflow: auto; margin: 0.3em 0; }
|
|
1199
1336
|
.md-code code { font: 12px/1.5 Monaco, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; background: none; border: 0; padding: 0; white-space: pre; }
|
|
1200
1337
|
.md-quote { margin: 0.3em 0; padding: 2px 14px; color: var(--muted); border-left: 3px solid var(--border); }
|
|
1201
1338
|
.md-quote p { margin: 0.3em 0; }
|
|
1202
1339
|
.md-list { margin: 0.2em 0; padding-left: 1.5em; }
|
|
1203
1340
|
.md-list li { margin: 0.15em 0; }
|
|
1204
1341
|
.md-hr { border: 0; border-top: 1px solid var(--border); margin: 0.5em 0; }
|
|
1205
|
-
.md-img { max-width: 100%; border-radius:
|
|
1342
|
+
.md-img { max-width: 100%; border-radius: 0; }
|
|
1206
1343
|
/* Embedded raw HTML in Markdown (README <div>/<img>/<table>/…). Minimal styling so it reads sanely. */
|
|
1207
1344
|
.md-html { overflow-x: auto; }
|
|
1208
1345
|
.md-html img { max-width: 100%; height: auto; }
|
|
@@ -1225,15 +1362,14 @@ body.dock-maximized .terminal-panel:not(.hidden) { grid-row: 1 / 3; height: auto
|
|
|
1225
1362
|
/* --- Integrated terminal panel (Electron only): fixed to the content column's bottom, height-resizable.
|
|
1226
1363
|
The active border-top marks it as the merged-prompt send target ("highlighted while it's open"). --- */
|
|
1227
1364
|
.terminal-panel {
|
|
1228
|
-
grid-column:
|
|
1365
|
+
grid-column: 3;
|
|
1229
1366
|
grid-row: 2;
|
|
1230
1367
|
min-height: 0;
|
|
1231
1368
|
height: var(--terminal-height, 320px);
|
|
1232
1369
|
display: flex;
|
|
1233
1370
|
flex-direction: column;
|
|
1234
1371
|
background: var(--bg);
|
|
1235
|
-
border-top:
|
|
1236
|
-
box-shadow: 0 -10px 28px rgba(0, 0, 0, 0.45);
|
|
1372
|
+
border-top: 1px solid var(--border);
|
|
1237
1373
|
}
|
|
1238
1374
|
.terminal-resizer { flex: none; height: 6px; margin-top: -3px; cursor: row-resize; }
|
|
1239
1375
|
.terminal-resizer:hover, .terminal-resizer.resizing { background: var(--active); }
|
|
@@ -1257,7 +1393,12 @@ body.dock-maximized .terminal-panel:not(.hidden) { grid-row: 1 / 3; height: auto
|
|
|
1257
1393
|
.terminal-pane-label:hover { color: var(--text); }
|
|
1258
1394
|
.terminal-pane-label[contenteditable="true"] { color: var(--text); background: var(--bg); outline: none; }
|
|
1259
1395
|
.terminal-pane.is-active .terminal-pane-label { color: var(--text); }
|
|
1260
|
-
.terminal-pane-host { flex: 1 1 auto; min-width: 0; min-height: 0; padding: 4px
|
|
1396
|
+
.terminal-pane-host { flex: 1 1 auto; min-width: 0; min-height: 0; padding: 4px 8px; } /* right padding too, so xterm's last column isn't clipped against the pane edge */
|
|
1397
|
+
/* Bell badge: a small dot on a pane's label when its TUI rang the bell while you were looking elsewhere. */
|
|
1398
|
+
.terminal-pane-label.has-bell::after { content: "\25CF"; margin-left: 6px; color: var(--active); font-size: 9px; vertical-align: middle; }
|
|
1399
|
+
/* Settings on/off row (terminal-bell notification toggle). */
|
|
1400
|
+
.settings-check { display: flex; align-items: center; gap: 8px; margin-top: 12px; color: var(--text); font-size: 13px; cursor: pointer; }
|
|
1401
|
+
.settings-check input { accent-color: var(--active); margin: 0; }
|
|
1261
1402
|
/* No border on the active pane — the inactive panes dim back instead, so the focused one stands out
|
|
1262
1403
|
cleanly without an outline. Only applies with 2+ panes (a lone pane is never dimmed; see setActive). */
|
|
1263
1404
|
.terminal-pane { transition: opacity 120ms ease; }
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@happy-nut/monacori",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.23",
|
|
4
4
|
"description": "Validation control plane for AI-generated code changes.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/app-main.js",
|
|
@@ -53,6 +53,7 @@
|
|
|
53
53
|
"@electron/packager": "^20.0.1",
|
|
54
54
|
"@types/node": "^22.15.21",
|
|
55
55
|
"jsdom": "^29.1.1",
|
|
56
|
+
"terser": "^5.48.0",
|
|
56
57
|
"typescript": "^5.8.3"
|
|
57
58
|
},
|
|
58
59
|
"engines": {
|