Move the support line from 0.1.7-alpha.1 to 0.1.7-rc.1 (peer floor `^0.1.7-rc.1`). 0.21.0-alpha.1 never reached npm, and once the code-card labels below are fixed the same build crashes on alpha.1 (its DiffBlock still reads the `labels.files` upstream deleted), so declaring only the host we verify against is the honest floor — and from rc.1 on the host enforces peers at boot anyway: a row whose `@deepseek-ai/dsh-*` peers do not satisfy the runtime is silently disabled. Dependencies: 28 devDependency pins and 14 peers move to 0.1.7-rc.1. rc.1 also raised the vendored runtime (cordis 4.0.4, schemastery 3.18.4, cordis-plugin-group 1.0.4, cordis-plugin-include 1.0.9) and publishes DSH cross-references as exact versions, so bumping schemastery/cordis alone left four unmet transitive peers — the three vendor packages are hoisted into devDependencies, which is what makes `pnpm peers check` clean again. One compile break: rc.1 added `CodeToolbarLabels` (codeLabel / wrapLabel / unwrapLabel, all required), made DiffBlockLabels / ReadBlockLabels extend it and deleted `DiffBlockLabels.files`. Fixing SideChatView then leaving markdown on the legacy banner would render two different code-card styles inside one side-chat view, so the plugin adopts the card everywhere: `markdownTextProps()` now passes `labels.code.toolbarLabels` with the host's own wording (codeBlock.title|wrap|unwrap, added to all 20 dictionaries; `sideChatBlockFiles` retires with the deleted footer). Adopting the card surfaced a silent regression the suite caught: the new toolbar shows `codeLabel` for languages the highlighter does not know, and mermaid has no shiki grammar, so the info string no longer reaches the DOM and the banner-text probe in mermaid.tsx matched nothing — mermaid fences stopped being swapped for diagrams. Detection now matches the FENCE BODY from the source that produced the render. `tests/market-manifest.spec.ts` pins every DSH peer as a floating caret range: an exact pin (the devDependency style) or a comparator without a prerelease would fail rc.1's preflight and silently stop the plugin from loading, and `pnpm peers check` cannot see that — it validates the resolved dev tree, not the range shape the host reads.
54 lines
2.2 KiB
TypeScript
54 lines
2.2 KiB
TypeScript
/**
|
|
* Chrome labels for DSH's shared `MarkdownText` (DSH
|
|
* 0.1.2-alpha contract): the renderer takes a REQUIRED nested `labels` prop
|
|
* — `labels.code.copyLabel` / `labels.code.copiedLabel` for the fence copy
|
|
* buttons plus a screen-reader-only `labels.footnotes` heading — and the
|
|
* MarkdownText/CodeBlock are cordis-free, falling back to HARDCODED Chinese
|
|
* when the labels are omitted, so every render site threads the plugin
|
|
* dictionary's localized pair through here (re-evaluated per render).
|
|
* `footnotes` is left empty (the heading is sr-only; give it a real string
|
|
* only if a locale key ever earns its place in all 19 dictionaries).
|
|
*
|
|
* DSH 0.1.7-rc.1 added `labels.code.toolbarLabels` (language name + wrap
|
|
* toggle + copy). Supplying it is what swaps the legacy info-string banner for
|
|
* the host's code card, and the three strings are REQUIRED once supplied, so
|
|
* every site that builds the flat pair has to carry them too — the code card
|
|
* must look the same in the transcript, the diff card and the editor preview as
|
|
* it does in DSH's own chat.
|
|
*/
|
|
import type { ComponentProps } from 'react'
|
|
import { MarkdownText } from '@deepseek-ai/dsh-client-ui-primitives'
|
|
|
|
/** The code-card chrome the plugin threads through its own props (e.g.
|
|
* MermaidMarkdownProps.codeLabels — the chunk contract carries the same
|
|
* fields). */
|
|
export interface MarkdownCopyLabels {
|
|
copyLabel: string
|
|
copiedLabel: string
|
|
/** Code-card title for an absent or unsupported language. */
|
|
codeLabel: string
|
|
/** Code-card action that enables wrapping. */
|
|
wrapLabel: string
|
|
/** Code-card action that preserves source columns with horizontal scrolling. */
|
|
unwrapLabel: string
|
|
}
|
|
|
|
/** MarkdownText props carrying the nested chrome labels. */
|
|
export function markdownTextProps(text: string, labels: MarkdownCopyLabels): ComponentProps<typeof MarkdownText> {
|
|
return {
|
|
text,
|
|
labels: {
|
|
code: {
|
|
copyLabel: labels.copyLabel,
|
|
copiedLabel: labels.copiedLabel,
|
|
toolbarLabels: {
|
|
codeLabel: labels.codeLabel,
|
|
wrapLabel: labels.wrapLabel,
|
|
unwrapLabel: labels.unwrapLabel,
|
|
},
|
|
},
|
|
footnotes: '',
|
|
},
|
|
}
|
|
}
|