mirror of
https://github.com/vercel/streamdown.git
synced 2026-09-19 02:18:37 +08:00
57cd3b5a07
* feat: support custom starting line number in code blocks Add support for specifying a custom starting line number via the code fence meta string, e.g.: ```js startLine=10 const x = 1; ``` Implementation: - Add `remarkCodeMeta` remark plugin that forwards the fenced-code meta string to hast as the `metastring` property so it is available to the custom React code component. - Update the rehype-sanitize default schema to allow the `metastring` attribute on `code` elements. - Parse `startLine=N` from the meta string in `CodeComponent` and pass the value down as a `startLine` prop. - In `CodeBlockBody`, apply `counter-reset: line N-1` as an inline style when `startLine > 1`, which overrides the Tailwind counter-reset class and makes CSS counters begin from the specified number. - Pass `startLine` through the `CodeBlock` and `HighlightedCodeBlockBody` call chains. - Add 12 tests covering the remark plugin, CodeBlockBody prop, and CodeBlock integration. Closes: resolves #287 * fix: lint errors — use literal keys, hoist regex, sort imports * feat: allow customizing icons via icons prop Add an IconContext-based system that lets users override any of the built-in icons (CheckIcon, CopyIcon, DownloadIcon, etc.) by passing a Partial<IconMap> via the new `icons` prop on <Streamdown>. - Created lib/icon-context.tsx with IconMap type, IconProvider, and useIcons hook - Updated all sub-components to consume icons via useIcons() instead of direct imports - Added icons prop to StreamdownProps with IconProvider wrapper - Exported IconMap type from package entry Closes #412 * style: fix biome lint and formatting errors * Merge branch 'main' into feat/custom-icons * fix: review fixes for icons and startLine features - Add missing changeset for icons feature (minor) - Fix IconComponent type to include size prop matching actual usage - Fix IconProvider memoization: use shallow comparison instead of referential equality so inline icon objects don't cause re-renders - Move START_LINE_PATTERN constant below all imports - Add bounds checking for startLine (must be >= 1) - Convert dynamic imports to top-level imports in startLine tests - Add icon-context tests (5 tests) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Dmitrii Troitskii <jsleitor@gmail.com> Co-authored-by: Hayden Bleasel <hello@haydenbleasel.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>