bb3dc50a4b
One highlighter for the client: a synchronous fine-grained shiki core (JS regex engine, no WASM) in ui-primitives with an explicit grammar allowlist (typescript, shellscript, json — aliases resolve, unknown languages take a geometry-identical plain arm). The shared CodeBlock component owns both arms; markdown fences, the run_code expanded program body (typescript), and the details panel Input (json) all route through it. Token colors live in a new ui-theme shiki.css sheet as --shiki-* custom properties (light/dark blocks), wired through the shell's base.css chain — tokens-only styling holds; shiki's generated span tree is the sanctioned innerHTML path (static output, no user HTML). jsdom specs pin token spans, aliases, both fallbacks, and the fence route; the built-bundle snapshot asserts the highlighted program under the code row.
28 lines
663 B
CSS
28 lines
663 B
CSS
/* One code-block geometry for highlighted and plain arms: the shiki <pre>
|
|
and the fallback <pre> draw identically except for token colors. */
|
|
|
|
.block :where(pre) {
|
|
margin: 0;
|
|
padding: 8px 10px;
|
|
border-radius: 8px;
|
|
overflow-x: auto;
|
|
background: var(--dsw-alias-markdown-code-block);
|
|
font: var(--dsw-font-markdown-code-block);
|
|
}
|
|
|
|
/* Shiki inlines its theme background var; route it to the repo token. */
|
|
.block :where(pre.shiki) {
|
|
background: var(--dsw-alias-markdown-code-block) !important;
|
|
}
|
|
|
|
.block :where(pre) code {
|
|
font: inherit;
|
|
background: none;
|
|
padding: 0;
|
|
}
|
|
|
|
.plain {
|
|
color: var(--dsw-alias-label-primary);
|
|
white-space: pre;
|
|
}
|