mirror of
https://github.com/deepseek-ai/deepseek-harness
synced 2026-08-15 21:04:50 +00:00
Bring the TUI diff footer onto the same terminator rule and distinct-path count the Web DiffBlock uses (a trailing newline terminates its line; two hunks in one file read as 1 file), so the two front ends' `+A -R · N file(s)` footers agree. Reserve space in the diff path header for the floating copy button so a long path no longer scrolls under it. Pass the tool's raw path to the injected openFile (which already resolves against cwd) instead of resolving twice. Rename the shared block-body CSS class to a card-neutral cardBody so a terminal-spacing tweak cannot silently move the diff card. Add a same-file two-hunk TUI unit test and an assembled built-boot assertion that the write turn renders +1 -0 · 1 file end to end.
108 lines
2.9 KiB
CSS
108 lines
2.9 KiB
CSS
/* Geometry mirrors CodeBlock/TerminalBlock (12px radius, code-block surface +
|
|
banner row, markdown code-block font) so a diff card reads as one family with
|
|
a fenced block and a terminal card. The deliberate divergence, shared with
|
|
TerminalBlock: the body keeps `white-space: pre` and scrolls horizontally,
|
|
because folding a source line destroys the indentation a diff is read by. */
|
|
|
|
.block {
|
|
--dsl-diff-radius: 12px;
|
|
--dsl-diff-line-height: 22px;
|
|
|
|
position: relative;
|
|
margin: 16px 0;
|
|
color: var(--dsw-alias-label-primary);
|
|
background: var(--dsw-alias-markdown-code-block);
|
|
border-radius: var(--dsl-diff-radius);
|
|
}
|
|
|
|
/* The copy control floats in the top-right corner over the body, so the card
|
|
has no empty banner row above its first diff line (the TUI diff card has no
|
|
banner either — only the footer). The block is position: relative, so this
|
|
anchors to the card. */
|
|
.copyButton {
|
|
position: absolute;
|
|
top: 8px;
|
|
right: 12px;
|
|
z-index: 1;
|
|
background-color: transparent;
|
|
border: none;
|
|
padding: 0;
|
|
margin: 0;
|
|
color: var(--dsw-alias-label-secondary);
|
|
cursor: pointer;
|
|
font: var(--dsw-font-xs-13);
|
|
}
|
|
|
|
.body {
|
|
padding: 12px 14px;
|
|
font: var(--dsw-font-markdown-code-block);
|
|
overflow-x: auto;
|
|
overflow-y: hidden;
|
|
}
|
|
|
|
/* No wrapping, no word-break: a diff is read by its indentation. */
|
|
.line {
|
|
min-height: var(--dsl-diff-line-height);
|
|
white-space: pre;
|
|
}
|
|
|
|
/* A file header: the path in the primary tone, set apart by weight. The copy
|
|
button floats over this first row's top-right corner, so reserve space at the
|
|
line's end for it — a long path scrolls under the button otherwise, and the
|
|
button's hit area would eat clicks on the path's tail. */
|
|
.path {
|
|
color: var(--dsw-alias-label-primary);
|
|
font-weight: 600;
|
|
padding-right: 56px;
|
|
}
|
|
|
|
/* A same-file second hunk's separator (a scattered edit), in the dim tone. */
|
|
.gap {
|
|
color: var(--dsw-alias-label-tertiary);
|
|
}
|
|
|
|
/* The diff's own meaning-carrying colors: removed on the error token, added on
|
|
the success token. A `- `/`+ ` prefix is drawn here so a copied line and the
|
|
shown line agree, and so the sign reads without relying on color alone. */
|
|
.del::before {
|
|
content: '- ';
|
|
color: var(--dsw-alias-state-error-primary);
|
|
}
|
|
|
|
.del {
|
|
color: var(--dsw-alias-state-error-primary);
|
|
}
|
|
|
|
.add::before {
|
|
content: '+ ';
|
|
color: var(--dsw-alias-state-success-primary);
|
|
}
|
|
|
|
.add {
|
|
color: var(--dsw-alias-state-success-primary);
|
|
}
|
|
|
|
.expand {
|
|
display: block;
|
|
width: 100%;
|
|
padding: 0;
|
|
border: none;
|
|
background-color: transparent;
|
|
color: var(--dsw-alias-label-tertiary);
|
|
cursor: pointer;
|
|
font: inherit;
|
|
text-align: left;
|
|
}
|
|
|
|
.expand:hover {
|
|
color: var(--dsw-alias-label-secondary);
|
|
}
|
|
|
|
/* The change summary, dim under the body: `└ +A -R · N file(s)`, the same
|
|
footer the TUI transcript's diff card draws. */
|
|
.footer {
|
|
padding: 0 14px 12px;
|
|
font: var(--dsw-font-markdown-code-block);
|
|
color: var(--dsw-alias-label-tertiary);
|
|
}
|