markstream-react 0.0.56-beta.4 → 0.1.0-beta.3

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/README.md +17 -20
  2. package/dist/Tooltip-Bs7FyYvs.js +189 -0
  3. package/dist/codeBlockExtraProps-C_3No_qp.js +8 -0
  4. package/dist/{index-BQgUvQrW.js → index-uI922Np4.js} +46 -44
  5. package/dist/index.css +1 -1
  6. package/dist/index.d.ts +1 -3
  7. package/dist/index.js +1 -1
  8. package/dist/index.px.css +1 -1
  9. package/dist/index.tailwind.css +1 -1
  10. package/dist/markstream-react.css +1 -1
  11. package/dist/next.d.ts +67 -126
  12. package/dist/next.js +1 -1
  13. package/dist/server.d.ts +66 -122
  14. package/dist/server.js +1 -1
  15. package/dist/tailwind.cjs +1 -1
  16. package/dist/tailwind.js +1 -1
  17. package/dist/types/components/CodeBlockNode/PreCodeNode.d.ts +1 -1
  18. package/dist/types/components/CodeBlockNode/codeTypography.d.ts +4 -3
  19. package/dist/types/components/CodeBlockNode/streamDiffs.d.ts +2 -0
  20. package/dist/types/components/NodeRenderer/preloadStreamDiffs.d.ts +1 -0
  21. package/dist/types/index.d.ts +1 -3
  22. package/dist/types/next.d.ts +0 -5
  23. package/dist/types/server-renderer/index.d.ts +0 -2
  24. package/dist/types/server.d.ts +0 -2
  25. package/dist/types/types/component-props.d.ts +53 -66
  26. package/dist/types/types.d.ts +13 -24
  27. package/dist/types/utils/languageIcon.d.ts +1 -1
  28. package/package.json +20 -30
  29. package/dist/Tooltip-DygdyBfV.js +0 -205
  30. package/dist/codeBlockExtraProps-B08PlQGP.js +0 -8
  31. package/dist/types/components/CodeBlockNode/monaco.d.ts +0 -1
  32. package/dist/types/components/CodeBlockNode/monacoThemeRegistry.d.ts +0 -7
  33. package/dist/types/components/CodeBlockNode/monacoThemeScheduler.d.ts +0 -4
  34. package/dist/types/components/MarkdownCodeBlockNode/MarkdownCodeBlockNode.d.ts +0 -34
  35. package/dist/types/components/NodeRenderer/preloadMonaco.d.ts +0 -1
@@ -1,28 +1,12 @@
1
1
  import { CSSProperties } from 'react';
2
2
  import { CodeBlockNode } from 'stream-markdown-parser';
3
- export interface CodeBlockMonacoThemeObject {
4
- name: string;
5
- base?: string;
6
- inherit?: boolean;
7
- colors?: Record<string, string>;
8
- rules?: Array<Record<string, unknown>>;
9
- [key: string]: unknown;
10
- }
11
- export type CodeBlockMonacoTheme = string | CodeBlockMonacoThemeObject;
12
- export type CodeBlockMonacoLanguage = string | ((...args: unknown[]) => unknown);
3
+ export type CodeBlockTheme = string;
4
+ export type CodeBlockThemes = readonly [dark: string, light: string];
13
5
  export interface CommonCodeBlockProps {
14
6
  showHeader?: boolean;
15
7
  showCopyButton?: boolean;
16
8
  showExpandButton?: boolean;
17
9
  }
18
- export interface ShikiCodeBlockProps extends CommonCodeBlockProps {
19
- themes?: readonly string[];
20
- /**
21
- * Shiki language preload request forwarded to stream-markdown's registerHighlight().
22
- * This is not a rendering allow-list; already available Shiki languages may still highlight.
23
- */
24
- langs?: readonly string[];
25
- }
26
10
  export interface CodeBlockDiffHideUnchangedRegionsOptions {
27
11
  enabled?: boolean;
28
12
  contextLineCount?: number;
@@ -30,67 +14,71 @@ export interface CodeBlockDiffHideUnchangedRegionsOptions {
30
14
  revealLineCount?: number;
31
15
  }
32
16
  export type CodeBlockDiffHideUnchangedRegions = boolean | CodeBlockDiffHideUnchangedRegionsOptions;
33
- export type CodeBlockDiffLineStyle = 'background' | 'bar';
34
- export type CodeBlockDiffAppearance = 'auto' | 'light' | 'dark';
35
- export type CodeBlockDiffUnchangedRegionStyle = 'line-info' | 'line-info-basic' | 'metadata' | 'simple';
36
- export type CodeBlockDiffHunkActionKind = 'revert' | 'stage';
37
- export type CodeBlockDiffHunkSide = 'upper' | 'lower';
38
- export interface CodeBlockDiffHunkActionContext {
39
- action: CodeBlockDiffHunkActionKind;
40
- side: CodeBlockDiffHunkSide;
41
- lineChange: unknown;
42
- originalModel: unknown;
43
- modifiedModel: unknown;
44
- }
45
- export interface CodeBlockMonacoOptions {
46
- MAX_HEIGHT?: number | string;
17
+ export interface CodeBlockOptions {
47
18
  fontSize?: number;
48
19
  lineHeight?: number;
49
20
  fontFamily?: string;
21
+ maxHeight?: number;
22
+ padding?: number;
50
23
  tabSize?: number;
51
- readOnly?: boolean;
52
- wordWrap?: 'off' | 'on' | 'wordWrapColumn' | 'bounded' | string;
53
- wrappingIndent?: 'none' | 'same' | 'indent' | 'deepIndent' | string;
54
- theme?: string;
55
- themes?: CodeBlockMonacoTheme[];
56
- languages?: CodeBlockMonacoLanguage[];
57
- renderSideBySide?: boolean;
58
- useInlineViewWhenSpaceIsLimited?: boolean;
59
- enableSplitViewResizing?: boolean;
60
- ignoreTrimWhitespace?: boolean;
61
- maxComputationTime?: number;
62
- diffAlgorithm?: string;
63
- renderIndicators?: boolean;
64
- originalEditable?: boolean;
65
- revealDebounceMs?: number;
66
- revealStrategy?: 'bottom' | 'centerIfOutside' | 'center';
67
- revealBatchOnIdleMs?: number;
68
- updateThrottleMs?: number;
69
- diffUpdateThrottleMs?: number;
70
- diffAutoScroll?: boolean;
71
- diffHideUnchangedRegions?: CodeBlockDiffHideUnchangedRegions;
72
- diffLineStyle?: CodeBlockDiffLineStyle;
73
- diffAppearance?: CodeBlockDiffAppearance;
74
- diffUnchangedRegionStyle?: CodeBlockDiffUnchangedRegionStyle;
75
- diffHunkActionsOnHover?: boolean;
76
- diffHunkHoverHideDelayMs?: number;
77
- onDiffHunkAction?: (context: CodeBlockDiffHunkActionContext) => void | boolean | Promise<void | boolean>;
78
- scrollbar?: Record<string, unknown>;
79
- [key: string]: unknown;
24
+ disableLineNumbers?: boolean;
25
+ overflow?: 'scroll' | 'wrap';
26
+ disableVirtualizationBuffers?: boolean;
27
+ preferredHighlighter?: 'shiki-js' | 'shiki-wasm';
28
+ useCSSClasses?: boolean;
29
+ useTokenTransformer?: boolean;
30
+ tokenizeMaxLineLength?: number;
31
+ tokenizeMaxLength?: number;
32
+ unsafeCSS?: string;
33
+ diffStyle?: 'unified' | 'split';
34
+ diffIndicators?: 'classic' | 'bars' | 'none';
35
+ disableBackground?: boolean;
36
+ hunkSeparators?: 'simple' | 'metadata' | 'line-info' | 'line-info-basic';
37
+ expandUnchanged?: boolean;
38
+ collapsedContextThreshold?: number;
39
+ lineDiffType?: 'word-alt' | 'word' | 'char' | 'none';
40
+ maxLineDiffLength?: number;
41
+ expansionLineCount?: number;
42
+ parseDiffOptions?: Record<string, unknown>;
43
+ lineHoverHighlight?: 'disabled' | 'both' | 'number' | 'line';
44
+ enableTokenInteractionsOnWhitespace?: boolean;
45
+ enableGutterUtility?: boolean;
46
+ enableLineSelection?: boolean;
47
+ controlledSelection?: boolean;
48
+ onGutterUtilityClick?: (...args: any[]) => unknown;
49
+ onLineClick?: (...args: any[]) => unknown;
50
+ onLineNumberClick?: (...args: any[]) => unknown;
51
+ onLineEnter?: (...args: any[]) => unknown;
52
+ onLineLeave?: (...args: any[]) => unknown;
53
+ onTokenClick?: (...args: any[]) => unknown;
54
+ onTokenEnter?: (...args: any[]) => unknown;
55
+ onTokenLeave?: (...args: any[]) => unknown;
56
+ onLineSelected?: (...args: any[]) => unknown;
57
+ onLineSelectionStart?: (...args: any[]) => unknown;
58
+ onLineSelectionChange?: (...args: any[]) => unknown;
59
+ onLineSelectionEnd?: (...args: any[]) => unknown;
60
+ getLineIndex?: (...args: any[]) => unknown;
61
+ renderAnnotation?: (...args: any[]) => unknown;
62
+ renderGutterUtility?: (...args: any[]) => unknown;
63
+ onPostRender?: (...args: any[]) => unknown;
64
+ mergeConflict?: boolean;
65
+ lineAnnotations?: unknown[];
66
+ onController?: (controller: any) => void;
67
+ workerManager?: unknown;
80
68
  }
81
69
  export interface CodeBlockNodeProps extends CommonCodeBlockProps {
82
70
  node: CodeBlockNode;
71
+ codeBlockOptions?: CodeBlockOptions;
83
72
  isDark?: boolean;
84
73
  loading?: boolean;
85
74
  stream?: boolean;
86
- darkTheme?: CodeBlockMonacoTheme;
87
- lightTheme?: CodeBlockMonacoTheme;
75
+ darkTheme?: CodeBlockTheme;
76
+ lightTheme?: CodeBlockTheme;
88
77
  isShowPreview?: boolean;
89
- monacoOptions?: CodeBlockMonacoOptions;
90
78
  enableFontSizeControl?: boolean;
91
79
  minWidth?: string | number;
92
80
  maxWidth?: string | number;
93
- themes?: CodeBlockMonacoTheme[];
81
+ themes?: CodeBlockThemes;
94
82
  showPreviewButton?: boolean;
95
83
  showCollapseButton?: boolean;
96
84
  showFontSizeButtons?: boolean;
@@ -144,7 +132,6 @@ export interface PreCodeNodeProps {
144
132
  style?: CSSProperties;
145
133
  showLineNumbers?: boolean;
146
134
  diffInline?: boolean;
147
- monacoOptions?: CodeBlockMonacoOptions;
148
135
  }
149
136
  export interface MermaidBlockNodeProps {
150
137
  node: CodeBlockNode;
@@ -2,10 +2,11 @@ import { default as React, ComponentType } from 'react';
2
2
  import { BaseNode, HtmlPolicy, MarkdownIt, ParsedNode, ParseOptions } from 'stream-markdown-parser';
3
3
  import { CustomComponentMap, HtmlComponentDefinitions, HtmlComponentMap, StreamingComponentDefinitions, StreamingComponentMap } from './customComponents';
4
4
  import { SmoothMarkdownStreamOptions } from './hooks/useSmoothMarkdownStream';
5
- import { CodeBlockMonacoOptions, CodeBlockMonacoTheme, CodeBlockNodeProps, CodeBlockPreviewPayload, D2BlockNodeProps, InfographicBlockNodeProps, MermaidBlockNodeProps, ShikiCodeBlockProps } from './types/component-props';
6
- type NodeRendererCodeBlockThemes = CodeBlockNodeProps['themes'] | ShikiCodeBlockProps['themes'];
7
- export type NodeRendererCodeBlockProps = Partial<Omit<CodeBlockNodeProps, 'node' | 'themes'>> & Partial<Omit<ShikiCodeBlockProps, 'themes'>> & {
5
+ import { CodeBlockNodeProps, CodeBlockOptions, CodeBlockPreviewPayload, CodeBlockTheme, CodeBlockThemes, D2BlockNodeProps, InfographicBlockNodeProps, MermaidBlockNodeProps } from './types/component-props';
6
+ type NodeRendererCodeBlockThemes = CodeBlockNodeProps['themes'];
7
+ export type NodeRendererCodeBlockProps = Partial<Omit<CodeBlockNodeProps, 'node' | 'themes' | 'codeBlockOptions'>> & {
8
8
  themes?: NodeRendererCodeBlockThemes;
9
+ codeBlockOptions?: never;
9
10
  } & Record<string, unknown>;
10
11
  export interface NodeRendererProps<TStreamingComponents extends Record<string, ComponentType<any>> = StreamingComponentMap, THtmlComponents extends Record<string, any> = HtmlComponentMap> {
11
12
  content?: string;
@@ -29,30 +30,19 @@ export interface NodeRendererProps<TStreamingComponents extends Record<string, C
29
30
  htmlPolicy?: HtmlPolicy;
30
31
  viewportPriority?: boolean;
31
32
  codeBlockStream?: boolean;
32
- codeBlockDarkTheme?: CodeBlockMonacoTheme;
33
- codeBlockLightTheme?: CodeBlockMonacoTheme;
34
- codeBlockMonacoOptions?: CodeBlockMonacoOptions;
33
+ codeBlockDarkTheme?: CodeBlockTheme;
34
+ codeBlockLightTheme?: CodeBlockTheme;
35
35
  renderCodeBlocksAsPre?: boolean;
36
36
  codeBlockMinWidth?: string | number;
37
37
  codeBlockMaxWidth?: string | number;
38
+ codeBlockOptions?: CodeBlockOptions;
38
39
  codeBlockProps?: NodeRendererCodeBlockProps;
39
40
  mermaidProps?: Partial<Omit<MermaidBlockNodeProps, 'node' | 'loading' | 'isDark'>>;
40
41
  d2Props?: Partial<Omit<D2BlockNodeProps, 'node' | 'loading' | 'isDark'>>;
41
42
  infographicProps?: Partial<Omit<InfographicBlockNodeProps, 'node' | 'loading' | 'isDark'>>;
42
43
  showTooltips?: boolean;
43
- /**
44
- * Theme names or theme objects preloaded for Monaco-backed code blocks.
45
- * When Shiki code blocks are used, only string theme names are forwarded to
46
- * MarkdownCodeBlockNode / stream-markdown; theme objects are ignored.
47
- */
48
- themes?: CodeBlockMonacoTheme[];
49
- /**
50
- * Shiki language preload list forwarded to MarkdownCodeBlockNode.
51
- *
52
- * The default React code block renderer is Monaco-backed. This prop is used
53
- * when a custom `code_block` or language renderer uses MarkdownCodeBlockNode.
54
- */
55
- langs?: readonly string[];
44
+ /** Dark/light theme names used by stream-diffs backed code blocks. */
45
+ themes?: CodeBlockThemes;
56
46
  isDark?: boolean;
57
47
  customId?: string;
58
48
  indexKey?: number | string;
@@ -100,6 +90,7 @@ export interface RenderContext {
100
90
  htmlComponents?: HtmlComponentMap;
101
91
  customHtmlTags?: readonly string[];
102
92
  htmlPolicy?: HtmlPolicy;
93
+ codeBlockOptions?: CodeBlockOptions;
103
94
  codeBlockProps?: NodeRendererCodeBlockProps;
104
95
  mermaidProps?: Partial<Omit<MermaidBlockNodeProps, 'node' | 'loading' | 'isDark'>>;
105
96
  d2Props?: Partial<Omit<D2BlockNodeProps, 'node' | 'loading' | 'isDark'>>;
@@ -108,13 +99,11 @@ export interface RenderContext {
108
99
  codeBlockStream?: boolean;
109
100
  renderCodeBlocksAsPre?: boolean;
110
101
  codeBlockThemes?: {
111
- themes?: CodeBlockMonacoTheme[];
112
- darkTheme?: CodeBlockMonacoTheme;
113
- lightTheme?: CodeBlockMonacoTheme;
114
- monacoOptions?: CodeBlockMonacoOptions;
102
+ themes?: CodeBlockThemes;
103
+ darkTheme?: CodeBlockTheme;
104
+ lightTheme?: CodeBlockTheme;
115
105
  minWidth?: string | number;
116
106
  maxWidth?: string | number;
117
- langs?: readonly string[];
118
107
  };
119
108
  events: {
120
109
  onCopy?: (code: string) => void;
@@ -1,7 +1,7 @@
1
1
  export type LanguageIconResolver = (lang: string) => string | undefined | null;
2
2
  export declare function setLanguageIconResolver(resolver?: LanguageIconResolver | null): void;
3
3
  export declare function normalizeLanguageIdentifier(lang?: string | null): string;
4
- export declare function resolveMonacoLanguageId(lang?: string | null): string;
4
+ export declare function resolveLanguageId(lang?: string | null): string;
5
5
  export declare function preloadExtendedLanguageIcons(): Promise<void>;
6
6
  export declare function subscribeLanguageIconsRevision(listener: () => void): () => void;
7
7
  export declare function getLanguageIcon(lang: string): string;
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "markstream-react",
3
3
  "type": "module",
4
- "version": "0.0.56-beta.4",
5
- "description": "React/Next.js streaming Markdown renderer for AI chat, LLM token streams, SSE/WebSocket output, incomplete Markdown, long documents, Mermaid, KaTeX, Shiki, Monaco, and custom React components.",
4
+ "version": "0.1.0-beta.3",
5
+ "description": "React/Next.js streaming Markdown renderer for AI chat, LLM token streams, SSE/WebSocket output, incomplete Markdown, long documents, Mermaid, KaTeX, stream-diffs powered code blocks, and custom React components.",
6
6
  "author": "Simon He",
7
7
  "license": "MIT",
8
8
  "homepage": "https://markstream.simonhe.me/frameworks/react",
@@ -39,9 +39,7 @@
39
39
  "streaming-mermaid",
40
40
  "katex",
41
41
  "streaming-katex",
42
- "shiki",
43
- "monaco",
44
- "monaco-editor",
42
+ "stream-diffs",
45
43
  "streaming-code-blocks",
46
44
  "large-documents",
47
45
  "safe-html",
@@ -81,6 +79,19 @@
81
79
  "files": [
82
80
  "dist"
83
81
  ],
82
+ "scripts": {
83
+ "dev": "vite dev",
84
+ "build": "pnpm --dir ../markdown-parser build && pnpm --dir ../markstream-core build && vite build --mode npm && node ../../scripts/cleanup-style-entry.mjs && node ./scripts/finalize-tailwind-export.mjs && 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",
85
+ "build:analyze": "ANALYZE=true pnpm build",
86
+ "build:dts": "rollup -c ./scripts/rollup.dts.config.mjs && node ./scripts/clean-dts.cjs",
87
+ "check:exports": "node ../../scripts/check-react-package-exports.mjs",
88
+ "preview": "vite preview",
89
+ "typecheck": "tsc --noEmit && tsc -p ../../test/react-local-component-maps-types.tsconfig.json --noEmit",
90
+ "size:check": "node ../../scripts/check-package-size.mjs",
91
+ "check:core-published": "node ../../scripts/check-core-published.mjs --package-json package.json --core-package-json ../markstream-core/package.json",
92
+ "check:workspace-deps-published": "node ../../scripts/check-workspace-deps-published.mjs --package-json package.json",
93
+ "release": "pnpm run check:workspace-deps-published && bumpp --all --commit --no-tag --no-push --execute 'pnpm --workspace-root run docs:llms:generate' && DIST_TAG=\"$(node ../../scripts/dist-tag.mjs)\" && pnpm publish --access public --tag \"${DIST_TAG}\" && node ../../scripts/tag-package.mjs --package-json package.json --push"
94
+ },
84
95
  "peerDependencies": {
85
96
  "@antv/infographic": "^0.2.3",
86
97
  "@terrastruct/d2": ">=0.1.33",
@@ -88,9 +99,7 @@
88
99
  "mermaid": ">=11",
89
100
  "react": ">=18",
90
101
  "react-dom": ">=18",
91
- "stream-diffs": ">=0.0.2",
92
- "stream-markdown": ">=0.0.16",
93
- "stream-monaco": ">=0.0.48"
102
+ "stream-diffs": ">=0.0.2"
94
103
  },
95
104
  "peerDependenciesMeta": {
96
105
  "@antv/infographic": {
@@ -107,19 +116,13 @@
107
116
  },
108
117
  "stream-diffs": {
109
118
  "optional": true
110
- },
111
- "stream-markdown": {
112
- "optional": true
113
- },
114
- "stream-monaco": {
115
- "optional": true
116
119
  }
117
120
  },
118
121
  "dependencies": {
119
122
  "@floating-ui/dom": "^1.8.0",
120
123
  "clsx": "^2.1.1",
121
- "stream-markdown-parser": "1.2.3",
122
- "markstream-core": "1.0.3"
124
+ "markstream-core": "1.1.0-beta.2",
125
+ "stream-markdown-parser": "1.2.6-beta.1"
123
126
  },
124
127
  "devDependencies": {
125
128
  "@types/react": "^18.3.31",
@@ -133,18 +136,5 @@
133
136
  "typescript": "^5.9.3",
134
137
  "vite": "^7.3.6",
135
138
  "vite-plugin-dts": "^4.5.4"
136
- },
137
- "scripts": {
138
- "dev": "vite dev",
139
- "build": "pnpm --dir ../markstream-core build && vite build --mode npm && node ../../scripts/cleanup-style-entry.mjs && node ./scripts/finalize-tailwind-export.mjs && 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",
140
- "build:analyze": "ANALYZE=true pnpm build",
141
- "build:dts": "rollup -c ./scripts/rollup.dts.config.mjs && node ./scripts/clean-dts.cjs",
142
- "check:exports": "node ../../scripts/check-react-package-exports.mjs",
143
- "preview": "vite preview",
144
- "typecheck": "tsc --noEmit && tsc -p ../../test/react-local-component-maps-types.tsconfig.json --noEmit",
145
- "size:check": "node ../../scripts/check-package-size.mjs",
146
- "check:core-published": "node ../../scripts/check-core-published.mjs --package-json package.json --core-package-json ../markstream-core/package.json",
147
- "check:workspace-deps-published": "node ../../scripts/check-workspace-deps-published.mjs --package-json package.json",
148
- "release": "pnpm run check:workspace-deps-published && bumpp --all --commit --no-tag --no-push --execute 'pnpm --workspace-root run docs:llms:generate' && pnpm publish --access public $(node ../../scripts/dist-tag.mjs) && node ../../scripts/tag-package.mjs --package-json package.json --push"
149
139
  }
150
- }
140
+ }