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/block-code-rest-props.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/calm-taxis-smile.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/clean-walls-agree.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/common-streets-unite.md

This file was deleted.

14 changes: 0 additions & 14 deletions .changeset/fix-animate-serial-timeline.md

This file was deleted.

17 changes: 0 additions & 17 deletions .changeset/fix-custom-tags-markdown.md

This file was deleted.

7 changes: 0 additions & 7 deletions .changeset/fix-footnote-double-user-content-prefix.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/fix-fullscreen-copy-download.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/fix-icons-aria-hidden.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/fix-incomplete-link-sanitize-protocol.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/fix-link-modal-portal.md

This file was deleted.

7 changes: 0 additions & 7 deletions .changeset/fix-lookbehind-safari-16-crash.md

This file was deleted.

13 changes: 0 additions & 13 deletions .changeset/fix-mermaid-aria-hidden.md

This file was deleted.

9 changes: 0 additions & 9 deletions .changeset/fix-mermaid-hard-dep.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/fix-remend-intraword-asterisks.md

This file was deleted.

11 changes: 0 additions & 11 deletions .changeset/fix-shiki-theme-priority.md

This file was deleted.

7 changes: 0 additions & 7 deletions .changeset/fix-shiki-type-declarations.md

This file was deleted.

11 changes: 0 additions & 11 deletions .changeset/gold-feet-strive.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/gold-onions-fly.md

This file was deleted.

9 changes: 0 additions & 9 deletions .changeset/image-controls.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/latex-math-emphasis.md

This file was deleted.

9 changes: 0 additions & 9 deletions .changeset/light-moose-travel.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/memo-render-equivalence.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/mermaid-fullscreen-download.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/quadratic-code-block-scan.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/scrollable-code-blocks.md

This file was deleted.

9 changes: 0 additions & 9 deletions .changeset/shaggy-terms-grin.md

This file was deleted.

8 changes: 0 additions & 8 deletions .changeset/three-squids-behave.md

This file was deleted.

7 changes: 0 additions & 7 deletions .changeset/upset-roses-lick.md

This file was deleted.

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

## 1.3.1

### Patch Changes

- a99d675: Fix crash on iOS 16.0-16.2 / Safari < 16.3 by removing the lookbehind assertion from the single-tilde escape pattern (#519).

JSCore on those versions doesn't support lookbehind (`(?<=...)`) and throws a `SyntaxError` while the module is being evaluated, before any user code runs, so there is no way to catch it. The preceding word character is now captured and written back in the replacement instead.

- 9f96409: Preserve complete italic emphasis when a closing asterisk is followed by word text.
- 8093f2a: Treat LaTeX paren and bracket math as protected math contexts during emphasis completion.
- 57c3089: Fix quadratic code-block scanning. `isInsideCodeBlock` now builds a linear-time position lookup (cached per text) instead of rescanning the whole prefix on every call, so handlers that probe many positions no longer degrade quadratically. Repairing an unclosed, bracket-heavy 58k-character code block drops from ~915ms to ~0.4ms per call.

## 1.3.0

### Minor 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.0",
"version": "1.3.1",
"description": "Self-healing markdown. Intelligently parses and styles incomplete Markdown blocks.",
"homepage": "https://streamdown.ai/docs/termination",
"repository": {
Expand Down
116 changes: 116 additions & 0 deletions packages/streamdown/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,121 @@
# streamdown

## 2.6.0

### Minor Changes

- 49bd143: fix(animate): serialize streaming animation across blocks

Word stagger now runs on a shared wall-clock timeline so sibling sections no longer fade in on top of each other during streaming. Related cleanup: trailing spaces stay inside animated spans (no early link underlines), animate wrappers drop when streaming ends, already-seen text stays steady under StrictMode, and un-animated streaming is no longer deferred behind a starvable transition.

Inspired by #493, #531, and #536.

Fixes #482
Fixes #535
Fixes #550
Fixes #570

- 5faa6fa: Add `codeBlockMaxHeight` and `tableMaxHeight` props with streaming auto-scroll

### Patch Changes

- 725e390: Forward rest props through block code. The `code` component spread its rest props on the inline branch and dropped them on the block branch, so an attribute a consumer put on a fenced code element never reached the DOM. `CodeBlockBody` now takes part in that comparison, so a forwarded attribute updates instead of keeping the value it first rendered with.
- 7e82400: Fix `dir="auto"` in static mode to detect text direction per semantic block (instead of once for the whole document), keep code LTR, and use content-majority direction for mixed-script prose.
- fb5d7b9: Serialize Mermaid SVGs before download so HTML-style tags render as valid SVG markup.
- fe38e75: Added accessibility improvements for code block controls by adding aria labels to copy/download buttons and announcing copy success state for screen readers.
- b25dbdb: fix(custom-tags): render Markdown inside custom tags with multiline content

Adds a preprocessing step (`preprocessCustomTags`) that normalizes multiline
custom tags into a blank-line-sandwiched HTML block so CommonMark interrupts
the raw-HTML block and parses the nested content as Markdown, with
`parseMarkdownIntoBlocks` re-merging the interrupted open/content/close tokens
so streaming still treats the whole custom tag as one block. Previously, when a
custom tag contained multiline content (e.g. `<ai-thinking>
**bold**</ai-thinking>`), CommonMark treated the block as raw HTML, stripping
Markdown formatting. Tags listed in `literalTagContent` are excluded from
re-parsing.

Closes #478

- 26a8440: Fix doubled `user-content-` prefix on footnote ids

Footnote list items were rendered with `id="user-content-user-content-fn-1"` because both `remark-rehype` and `rehype-sanitize` default their `clobberPrefix` to `user-content-`, so the prefix was applied twice. Disabled `clobberPrefix` on `rehype-sanitize` so `remark-rehype` remains the single, consistent prefixer of both footnote ids and backref hrefs — restoring working footnote navigation.

- f7d1fb5: fix(table): add `data-streamdown="table-wrapper"` to fullscreen portal so copy/download dropdowns can find the table
- f0a726b: Add `aria-hidden="true"` to decorative SVG icon components so screen readers rely on parent button labels instead of unlabeled icons.
- 2ed2faa: Allow remend's `streamdown:` incomplete-link sentinel through the default sanitize schema so streamed incomplete links render as pending instead of harden `[blocked]`.
- 8fffa9d: Render the link safety modal through a portal to `document.body` so it is no longer nested inside the paragraph's `<p>` element. This fixes the React hydration error "In HTML, `<div>` cannot be a descendant of `<p>`" that occurred when a link with link safety enabled appeared inside a paragraph.
- 2733922: fix(mermaid): add aria-hidden to decorative SVG icons in mermaid toolbar buttons

Mermaid toolbar buttons (download, fullscreen, pan/zoom controls) already have
accessible titles/labels, but the inline SVG icons were exposed to the accessibility
tree causing "Content with images must be labeled" warnings. Added aria-hidden={true}
to all decorative icon elements in download-button, fullscreen-button, and pan-zoom
components.

Fixes #485

- 8d36719: fix(deps): remove `mermaid` as a hard runtime dependency

This patch replaces the type import with a local structural type for `MermaidConfig` so no type-level coupling to the `mermaid` package remains in the distributed typings. Users who want fully-typed mermaid config can still `import type { MermaidConfig } from 'mermaid'` themselves; the structural type is compatible.

Fixes #501

- ea02609: Fix: `shikiTheme` prop priority chain is now fully reachable.

Previously, `shikiTheme` had a default value in the props destructuring (`= defaultShikiTheme`), making the `plugins?.code?.getThemes()` fallback unreachable in both orderings. The fix removes the destructuring default and moves it to the end of the nullish coalescing chain, so all three levels are reachable:

1. Explicit `shikiTheme` prop (highest priority)
2. Code plugin's `getThemes()` (second priority)
3. Built-in `defaultShikiTheme` (final fallback)

- 9813dd6: Fix type declarations requiring a `shiki` install.

`BundledLanguage`, `BundledTheme`, and `ThemeRegistrationAny` are now defined locally and re-exported from `streamdown`, so consumers can type-check without installing `shiki`. Runtime highlighting remains in `@streamdown/code`, which still depends on `shiki`.

- d893759: Fix mermaid fullscreen overlay accessibility and add stable selector

- Add `data-streamdown="mermaid-fullscreen"` to fullscreen overlay for stable CSS targeting
- Update fullscreen overlay semantics to match table fullscreen behavior
- Change `role` from `button` to `dialog`
- Add `aria-modal="true"` for correct screen reader modal behavior
- Improve accessibility consistency between mermaid and table fullscreen overlays

- 79c8575: fix issue with list markers, task-list checkboxes, images, and hr animations
- a1a7142: feat: add image control options (`controls.image`) to disable hover overlay and download button on images

Add `image` to the `controls` prop, matching existing `code`, `table`, and `mermaid` patterns:

- `controls={{ image: false }}` hides the hover overlay and download button
- `controls={{ image: { download: false } }}` keeps the hover overlay but hides the download button

- b250038: Fix accessibility warnings for Mermaid toolbar icon buttons:

- Add `aria-hidden="true"` to all decorative SVG icons to hide them from screen readers
- Add `aria-label` attributes to all icon-only buttons for proper screen reader announcements
- Add translation keys (`zoomIn`, `zoomOut`, `resetView`) for zoom controls

- 89c6877: Re-render memoized markdown components when their rendered output changes. The comparators compared source position, so a replacement of the same length — occupying the same lines and columns — was treated as unchanged and the component kept rendering the previous text.
- e7bdf57: fix(mermaid): render the download and copy controls inside the Mermaid fullscreen portal so they're reachable when the diagram is expanded
- 8f02c09: Fix table copy and download actions not working in fullscreen mode.

- Support table lookup inside the fullscreen portal container.
- Restore copy and download functionality for fullscreen tables.
- Keep existing inline table controls behavior unchanged.

- f46cd3c: - Fixed table copy losing line breaks inside cells containing `<br>` elements.
- Preserved multiline content during table data extraction.
- Improved copied Markdown, CSV, and TSV output consistency for multiline cells.
- Added coverage for `<br>` handling in table extraction.
- dc3f1d2: - Fix code block line wrapping when line numbers are disabled.
- Ensure code block lines are rendered as block elements regardless of the `lineNumbers` setting.
- Prevent multiple code lines from collapsing into a single visual line when `lineNumbers={false}`.
- Updated dependencies [a99d675]
- Updated dependencies [9f96409]
- Updated dependencies [8093f2a]
- Updated dependencies [57c3089]
- remend@1.3.1

## 2.5.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.5.0",
"version": "2.6.0",
"description": "A drop-in replacement for react-markdown, designed for AI-powered streaming.",
"homepage": "https://streamdown.ai",
"repository": {
Expand Down