Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 0 additions & 5 deletions .changeset/brave-shiki-four.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/code-copy-callbacks.md

This file was deleted.

27 changes: 0 additions & 27 deletions .changeset/feat-default-component-fallback.md

This file was deleted.

13 changes: 0 additions & 13 deletions .changeset/fix-code-block-buttons-absolute.md

This file was deleted.

6 changes: 0 additions & 6 deletions .changeset/incomplete-image-placeholder.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/preserve-markdown-table-literals.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/quick-blocks-stream.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/shared-overlay-portal.md

This file was deleted.

10 changes: 0 additions & 10 deletions .changeset/tidy-aliens-swim.md

This file was deleted.

9 changes: 0 additions & 9 deletions .changeset/unwrap-list-item-paragraphs.md

This file was deleted.

7 changes: 0 additions & 7 deletions .changeset/update-marked-v18.md

This file was deleted.

6 changes: 6 additions & 0 deletions packages/remend/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
# remend

## 1.3.2

### Patch Changes

- e0ce123: Incomplete images during streaming now render a loading placeholder instead of being removed entirely. Incomplete images (e.g. `![alt](https://exampl`) are replaced with `![alt](streamdown:incomplete-image)` by remend, and the streamdown `ImageComponent` renders an animated skeleton for this special URL. This mirrors the existing behavior for incomplete links (`streamdown:incomplete-link`). The `streamdown` protocol is allowlisted for `img[src]` in the default sanitize schema so the sentinel survives rehype-sanitize + rehype-harden.

## 1.3.1

### Patch Changes
Expand Down
2 changes: 1 addition & 1 deletion packages/remend/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "remend",
"version": "1.3.1",
"version": "1.3.2",
"description": "Self-healing markdown. Intelligently parses and styles incomplete Markdown blocks.",
"homepage": "https://streamdown.ai/docs/termination",
"repository": {
Expand Down
6 changes: 6 additions & 0 deletions packages/streamdown-code/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
# @streamdown/code

## 2.0.0

### Major Changes

- db6fefc: Upgrade Shiki to v4. Node.js 20 or newer is now required when using `@streamdown/code`.

## 1.1.1

### Patch Changes
Expand Down
2 changes: 1 addition & 1 deletion packages/streamdown-code/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@streamdown/code",
"version": "1.1.1",
"version": "2.0.0",
"description": "Shiki syntax highlighting plugin for Streamdown",
"repository": {
"type": "git",
Expand Down
64 changes: 64 additions & 0 deletions packages/streamdown/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,69 @@
# streamdown

## 2.7.0

### Minor Changes

- b1965bb: feat: add `fallbackComponent` prop for missing map entries / `allowedTags`

Adds a new `fallbackComponent` prop to `<Streamdown>`. When provided, it is
used as a fallback renderer for any HTML tag or allowed custom tag that does
not have an explicit entry in the `components` map:

```tsx
<Streamdown
allowedTags={{ mention: ["user_id"] }}
fallbackComponent={({ node, children, ...props }) =>
createElement(node!.tagName, props, children)
}
>
{markdown}
</Streamdown>
```

`fallbackComponent` applies to custom tags declared via `allowedTags` (with no
explicit component entry) and to standard HTML tags absent from the built-in
component set (e.g. `<span>`, `<em>`, `<div>`, `<br>`). Built-in and explicit
`components` entries always win — this is not a full unstyled mode.

Refs #543

### Patch Changes

- c971f42: Wire `onCopy` and `onError` through default code and Mermaid copy controls via `controls.code.copy` and `controls.mermaid.copy`.
- 163c63b: fix(code-block): use absolute positioning for action buttons to fix click events in nested scroll containers

Switches the code block action button wrapper from `position: sticky` to
`position: absolute` (with `position: relative` on the container) so that
hit-testing works correctly in layouts with multiple nested `overflow: auto`
scroll containers. Previously, the `sticky` + `pointer-events-none/auto`
pattern caused browsers to mis-route click events to the code block wrapper
rather than the buttons when the component was embedded in 2+ nested scroll
containers.

- e0ce123: Incomplete images during streaming now render a loading placeholder instead of being removed entirely. Incomplete images (e.g. `![alt](https://exampl`) are replaced with `![alt](streamdown:incomplete-image)` by remend, and the streamdown `ImageComponent` renders an animated skeleton for this special URL. This mirrors the existing behavior for incomplete links (`streamdown:incomplete-link`). The `streamdown` protocol is allowlisted for `img[src]` in the default sanitize schema so the sentinel survives rehype-sanitize + rehype-harden.
- 5504e50: Preserve literal HTML tags and character entities when copying or downloading tables as Markdown.
- 5b26c28: Speed up block parsing by lexing only block tokens and reusing already parsed blocks while a document streams.
- 18dcb20: Add a top-level `portal` prop for configuring the container used by Mermaid fullscreen, table fullscreen, and the built-in link safety modal.
- fdf4e33: Fix Mermaid diagrams so text is readable and diagrams auto-fit container.
- Normalize SVG to remove responsive shrinking
- Extract intrinsic size from viewBox
- Add width-and-height auto-fit in PanZoom
- Preserve user zoom/pan after initial fit
- Add tests for SVG utilities and auto-fit behavior
- 53812cf: fix: unwrap a single paragraph child inside list items

Loose list items from the markdown pipeline are often wrapped in a `<p>`. `MemoLi` now detects that sole paragraph child (including the memoized paragraph component) and renders its contents directly, so list items stay visually tight. Also updates the list animation retrigger test to match the unwrapped markup.

Fixes #475

- a155a9e: Update `marked` from `^17.0.1` to `^18.0.11`.

marked v18 no longer folds a block token's trailing blank line(s) into its own `raw`; that whitespace now surfaces as a separate `space` token immediately following the block (e.g. after `html`, `heading`, and `table` tokens). This changed the token stream shape that `parseMarkdownIntoBlocks` consumes, causing a dangling `space` token after a closed custom-tag HTML block to be emitted as its own standalone block. `parseMarkdownIntoBlocks` now folds a `space` token into the preceding block instead of pushing it as a new one, restoring v17-identical block boundaries and counts. The lossless `token.raw` concatenation invariant is preserved.

- Updated dependencies [e0ce123]
- remend@1.3.2

## 2.6.0

### Minor Changes
Expand Down
2 changes: 1 addition & 1 deletion packages/streamdown/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "streamdown",
"version": "2.6.0",
"version": "2.7.0",
"description": "A drop-in replacement for react-markdown, designed for AI-powered streaming.",
"homepage": "https://streamdown.ai",
"repository": {
Expand Down