markstream-react 0.0.47 → 0.0.49

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/dist/Tooltip-DOyIMYde.js +204 -0
  2. package/dist/{index-DOjYeelM.js → index-DI8pPos8.js} +20 -20
  3. package/dist/index.css +1 -1
  4. package/dist/index.d.ts +3 -1
  5. package/dist/index.js +1 -1
  6. package/dist/index.px.css +1 -1
  7. package/dist/index.tailwind.css +1 -1
  8. package/dist/markstream-react.css +1 -1
  9. package/dist/next.d.ts +67 -34
  10. package/dist/next.js +1 -1
  11. package/dist/server.d.ts +56 -28
  12. package/dist/server.js +1 -1
  13. package/dist/tailwind.ts +1 -1
  14. package/dist/types/components/CodeBlockNode/HtmlPreviewFrame.d.ts +2 -0
  15. package/dist/types/components/D2BlockNode/d2.d.ts +13 -2
  16. package/dist/types/components/DefinitionListNode/DefinitionListNode.d.ts +2 -1
  17. package/dist/types/components/HtmlBlockNode/HtmlBlockNode.d.ts +4 -3
  18. package/dist/types/components/ListNode/ListNode.d.ts +2 -1
  19. package/dist/types/components/MermaidBlockNode/mermaid.d.ts +22 -1
  20. package/dist/types/components/TableNode/TableNode.d.ts +3 -2
  21. package/dist/types/context/smoothStreaming.d.ts +1 -0
  22. package/dist/types/context/streamState.d.ts +24 -0
  23. package/dist/types/customComponents.d.ts +4 -4
  24. package/dist/types/hooks/useSmoothMarkdownStream.d.ts +20 -0
  25. package/dist/types/index.d.ts +3 -1
  26. package/dist/types/next.d.ts +7 -13
  27. package/dist/types/server-renderer/index.d.ts +5 -5
  28. package/dist/types/types/component-props.d.ts +12 -4
  29. package/dist/types/types/node-component.d.ts +2 -0
  30. package/dist/types/types.d.ts +21 -4
  31. package/dist/types/utils/customHtmlTag.d.ts +1 -1
  32. package/dist/types/utils/htmlToReact.d.ts +6 -5
  33. package/dist/types/utils/streamingTextState.d.ts +2 -23
  34. package/package.json +6 -4
  35. package/dist/Tooltip-DQ6sUeEf.js +0 -205
@@ -1,6 +1,8 @@
1
1
  import { default as React } from 'react';
2
2
  import { BaseNode, HtmlPolicy, MarkdownIt, ParsedNode, ParseOptions } from 'stream-markdown-parser';
3
- import { CodeBlockMonacoOptions, CodeBlockMonacoTheme, CodeBlockNodeProps, D2BlockNodeProps, InfographicBlockNodeProps, MermaidBlockNodeProps } from './types/component-props';
3
+ import { CustomComponentMap } from './customComponents';
4
+ import { SmoothMarkdownStreamOptions } from './hooks/useSmoothMarkdownStream';
5
+ import { CodeBlockMonacoOptions, CodeBlockMonacoTheme, CodeBlockNodeProps, CodeBlockPreviewPayload, D2BlockNodeProps, InfographicBlockNodeProps, MermaidBlockNodeProps } from './types/component-props';
4
6
  export type NodeRendererCodeBlockProps = Partial<Omit<CodeBlockNodeProps, 'node'>> & Record<string, unknown>;
5
7
  export interface NodeRendererProps {
6
8
  content?: string;
@@ -37,7 +39,20 @@ export interface NodeRendererProps {
37
39
  isDark?: boolean;
38
40
  customId?: string;
39
41
  indexKey?: number | string;
42
+ /** Show a blinking typewriter cursor while streamed content grows. Default: false */
40
43
  typewriter?: boolean;
44
+ /** Enable/disable non-code-node enter and streamed-text fade animations. Default: true */
45
+ fade?: boolean;
46
+ /**
47
+ * Enable built-in smooth pacing for streaming `content` updates.
48
+ * - `true`: force-enable smooth streaming (content mode only)
49
+ * - `false`: force-disable smooth streaming
50
+ * - `'auto'` (default): enable only when typewriter/incremental mode is active
51
+ * Applies when rendering from `content` (not `nodes`).
52
+ */
53
+ smoothStreaming?: boolean | 'auto';
54
+ /** Options forwarded to the built-in smooth streaming controller. Read once when the renderer is created. */
55
+ smoothStreamingOptions?: SmoothMarkdownStreamOptions;
41
56
  batchRendering?: boolean;
42
57
  initialRenderBatchSize?: number;
43
58
  renderBatchSize?: number;
@@ -48,7 +63,7 @@ export interface NodeRendererProps {
48
63
  maxLiveNodes?: number;
49
64
  liveNodeBuffer?: number;
50
65
  onCopy?: (code: string) => void;
51
- onHandleArtifactClick?: (payload: any) => void;
66
+ onHandleArtifactClick?: (payload: CodeBlockPreviewPayload) => void;
52
67
  onClick?: (event: React.MouseEvent<HTMLDivElement>) => void;
53
68
  onMouseOver?: (event: React.MouseEvent<HTMLElement>) => void;
54
69
  onMouseOut?: (event: React.MouseEvent<HTMLElement>) => void;
@@ -58,9 +73,11 @@ export interface RenderContext {
58
73
  isDark?: boolean;
59
74
  indexKey?: string;
60
75
  typewriter?: boolean;
76
+ /** Enable/disable fade animations. Default: true */
77
+ fade?: boolean;
61
78
  textStreamState?: Map<string, string>;
62
79
  streamRenderVersion?: number;
63
- customComponents?: Record<string, React.ComponentType<any>>;
80
+ customComponents?: CustomComponentMap;
64
81
  customHtmlTags?: readonly string[];
65
82
  htmlPolicy?: HtmlPolicy;
66
83
  codeBlockProps?: NodeRendererCodeBlockProps;
@@ -80,7 +97,7 @@ export interface RenderContext {
80
97
  };
81
98
  events: {
82
99
  onCopy?: (code: string) => void;
83
- onHandleArtifactClick?: (payload: any) => void;
100
+ onHandleArtifactClick?: (payload: CodeBlockPreviewPayload) => void;
84
101
  };
85
102
  }
86
103
  export type RenderNodeFn = (node: ParsedNode, key: React.Key, ctx: RenderContext) => React.ReactNode;
@@ -3,7 +3,7 @@ import { CustomComponentDisplayMode, CustomComponentMap, MarkstreamCustomCompone
3
3
  export interface ResolvedCustomHtmlTag {
4
4
  tag: string;
5
5
  isWhitelisted: boolean;
6
- component: MarkstreamCustomComponent<any> | null;
6
+ component: MarkstreamCustomComponent | null;
7
7
  display: CustomComponentDisplayMode | undefined;
8
8
  }
9
9
  export declare function resolveCustomHtmlTag(node: Pick<ParsedNode, 'type'> & {
@@ -1,9 +1,10 @@
1
- import { ComponentType, ReactNode } from 'react';
1
+ import { ReactNode } from 'react';
2
2
  import { HtmlPolicy, sanitizeHtmlAttrs as sanitizeHtmlAttrsBase, tokenizeHtml as tokenizeHtmlBase } from 'stream-markdown-parser';
3
+ import { CustomComponentMap } from '../customComponents';
3
4
  export type { HtmlToken } from 'stream-markdown-parser';
4
- export declare function normalizeDomAttrs(attrs: Record<string, string>): Record<string, any>;
5
+ export declare function normalizeDomAttrs(attrs: Record<string, string>): Record<string, unknown>;
5
6
  export declare const tokenizeHtml: typeof tokenizeHtmlBase;
6
7
  export declare const sanitizeHtmlAttrs: typeof sanitizeHtmlAttrsBase;
7
- export declare function isCustomHtmlComponent(tagName: string, customComponents: Record<string, ComponentType<any>>): boolean;
8
- export declare function hasCustomHtmlComponents(content: string, customComponents: Record<string, ComponentType<any>>): boolean;
9
- export declare function parseHtmlToReactNodes(content: string, customComponents: Record<string, ComponentType<any>>, htmlPolicy?: HtmlPolicy): ReactNode[] | null;
8
+ export declare function isCustomHtmlComponent(tagName: string, customComponents: CustomComponentMap): boolean;
9
+ export declare function hasCustomHtmlComponents(content: string, customComponents: CustomComponentMap): boolean;
10
+ export declare function parseHtmlToReactNodes(content: string, customComponents: CustomComponentMap, htmlPolicy?: HtmlPolicy): ReactNode[] | null;
@@ -1,23 +1,2 @@
1
- export interface ResolveStreamingTextStateOptions {
2
- nextContent: string;
3
- previousContent: string;
4
- typewriterEnabled: boolean;
5
- }
6
- export interface StreamingTextStateResult {
7
- settledContent: string;
8
- streamedDelta: string;
9
- appended: boolean;
10
- }
11
- export interface StreamingRenderState {
12
- settledContent: string;
13
- streamedDelta: string;
14
- }
15
- export interface ResolveStreamingTextUpdateOptions {
16
- nextContent: string;
17
- persistedContent?: string;
18
- currentState: StreamingRenderState;
19
- typewriterEnabled: boolean;
20
- streamRenderVersionChanged?: boolean;
21
- }
22
- export declare function resolveStreamingTextState({ nextContent, previousContent, typewriterEnabled, }: ResolveStreamingTextStateOptions): StreamingTextStateResult;
23
- export declare function resolveStreamingTextUpdate({ nextContent, persistedContent, currentState, typewriterEnabled, streamRenderVersionChanged, }: ResolveStreamingTextUpdateOptions): StreamingTextStateResult;
1
+ export { resolveStreamingTextState, resolveStreamingTextUpdate } from 'markstream-core';
2
+ export type { ResolveStreamingTextStateOptions, ResolveStreamingTextUpdateOptions, StreamingRenderState, StreamingTextStateResult } from 'markstream-core';
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "markstream-react",
3
3
  "type": "module",
4
- "version": "0.0.47",
4
+ "version": "0.0.49",
5
5
  "description": "React Markdown renderer optimized for large documents with progressive Mermaid rendering, streaming diff code blocks, and fast real-time preview. Built on stream-markdown AST for consistent rendering across frameworks. Perfect for documentation sites, AI chat interfaces, and content management systems.",
6
6
  "author": "Simon He",
7
7
  "license": "MIT",
@@ -116,7 +116,8 @@
116
116
  "dependencies": {
117
117
  "@floating-ui/dom": "^1.7.6",
118
118
  "clsx": "^2.1.1",
119
- "stream-markdown-parser": "0.0.92"
119
+ "markstream-core": "0.0.1",
120
+ "stream-markdown-parser": "0.0.95"
120
121
  },
121
122
  "devDependencies": {
122
123
  "@types/react": "^18.3.28",
@@ -133,12 +134,13 @@
133
134
  },
134
135
  "scripts": {
135
136
  "dev": "vite dev",
136
- "build": "vite build --mode npm && vite build -c vite.config.tailwind.ts --mode npm && node ./scripts/copy-tailwind-css.mjs && node ../../scripts/generate-px-css.mjs && pnpm run build:dts && node ./scripts/ensure-next-client-directive.mjs",
137
+ "build": "pnpm --dir ../markstream-core build && vite build --mode npm && vite build -c vite.config.tailwind.ts --mode npm && node ./scripts/copy-tailwind-css.mjs && node ../../scripts/generate-px-css.mjs && pnpm run build:dts && node ./scripts/ensure-next-client-directive.mjs",
137
138
  "build:analyze": "ANALYZE=true pnpm build",
138
139
  "build:dts": "rollup -c ./scripts/rollup.dts.config.mjs && node ./scripts/clean-dts.cjs",
139
140
  "preview": "vite preview",
140
141
  "typecheck": "tsc --noEmit",
141
142
  "size:check": "node ../../scripts/check-package-size.mjs",
142
- "release": "bumpp --commit --no-tag --no-push && pnpm publish --access public && node ../../scripts/tag-package.mjs --package-json package.json --push"
143
+ "check:core-published": "node ../../scripts/check-core-published.mjs --package-json package.json --core-package-json ../markstream-core/package.json",
144
+ "release": "pnpm run check:core-published && bumpp --commit --no-tag --no-push && pnpm publish --access public && node ../../scripts/tag-package.mjs --package-json package.json --push"
143
145
  }
144
146
  }