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

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 +8 -18
  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.3",
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.2",
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",
@@ -88,9 +86,7 @@
88
86
  "mermaid": ">=11",
89
87
  "react": ">=18",
90
88
  "react-dom": ">=18",
91
- "stream-diffs": ">=0.0.2",
92
- "stream-markdown": ">=0.0.16",
93
- "stream-monaco": ">=0.0.48"
89
+ "stream-diffs": ">=0.0.2"
94
90
  },
95
91
  "peerDependenciesMeta": {
96
92
  "@antv/infographic": {
@@ -107,19 +103,13 @@
107
103
  },
108
104
  "stream-diffs": {
109
105
  "optional": true
110
- },
111
- "stream-markdown": {
112
- "optional": true
113
- },
114
- "stream-monaco": {
115
- "optional": true
116
106
  }
117
107
  },
118
108
  "dependencies": {
119
109
  "@floating-ui/dom": "^1.8.0",
120
110
  "clsx": "^2.1.1",
121
- "markstream-core": "1.0.3",
122
- "stream-markdown-parser": "1.2.1"
111
+ "markstream-core": "1.1.0-beta.1",
112
+ "stream-markdown-parser": "1.2.5-beta.1"
123
113
  },
124
114
  "devDependencies": {
125
115
  "@types/react": "^18.3.31",
@@ -136,7 +126,7 @@
136
126
  },
137
127
  "scripts": {
138
128
  "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",
129
+ "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",
140
130
  "build:analyze": "ANALYZE=true pnpm build",
141
131
  "build:dts": "rollup -c ./scripts/rollup.dts.config.mjs && node ./scripts/clean-dts.cjs",
142
132
  "check:exports": "node ../../scripts/check-react-package-exports.mjs",
@@ -145,6 +135,6 @@
145
135
  "size:check": "node ../../scripts/check-package-size.mjs",
146
136
  "check:core-published": "node ../../scripts/check-core-published.mjs --package-json package.json --core-package-json ../markstream-core/package.json",
147
137
  "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"
138
+ "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"
149
139
  }
150
140
  }