markstream-angular 0.0.2-beta.9 → 0.0.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 (27) hide show
  1. package/dist/index.css +1 -1
  2. package/dist/index.js +2254 -2022
  3. package/dist/types/markstream-angular/src/components/CodeBlockNode/CodeBlockNode.component.d.ts +57 -4
  4. package/dist/types/markstream-angular/src/components/D2BlockNode/D2BlockNode.component.d.ts +8 -0
  5. package/dist/types/markstream-angular/src/components/InfographicBlockNode/InfographicBlockNode.component.d.ts +9 -0
  6. package/dist/types/markstream-angular/src/components/InlineCodeNode/InlineCodeNode.component.d.ts +2 -0
  7. package/dist/types/markstream-angular/src/components/LinkNode/LinkNode.component.d.ts +1 -0
  8. package/dist/types/markstream-angular/src/components/MermaidBlockNode/MermaidBlockNode.component.d.ts +18 -1
  9. package/dist/types/markstream-angular/src/components/NodeOutlet/NodeOutlet.component.d.ts +4 -2
  10. package/dist/types/markstream-angular/src/components/NodeRenderer/NodeRenderer.component.d.ts +47 -9
  11. package/dist/types/markstream-angular/src/components/TextNode/TextNode.component.d.ts +2 -0
  12. package/dist/types/markstream-angular/src/components/TextNode/streamingTextState.d.ts +2 -11
  13. package/dist/types/markstream-angular/src/components/shared/node-helpers.d.ts +82 -12
  14. package/dist/types/markstream-angular/src/components/shared/node-outlet-helpers.d.ts +3 -1
  15. package/dist/types/markstream-angular/src/components/shared/smooth-streaming-scope.d.ts +5 -0
  16. package/dist/types/markstream-angular/src/customComponents.d.ts +1 -1
  17. package/dist/types/markstream-angular/src/enhanceRenderedHtml.d.ts +7 -5
  18. package/dist/types/markstream-angular/src/index.d.ts +5 -1
  19. package/dist/types/markstream-angular/src/optional/d2.d.ts +13 -2
  20. package/dist/types/markstream-angular/src/optional/infographic.d.ts +13 -1
  21. package/dist/types/markstream-angular/src/optional/katex.d.ts +5 -2
  22. package/dist/types/markstream-angular/src/optional/mermaid.d.ts +23 -2
  23. package/dist/types/markstream-angular/src/optional/monaco.d.ts +18 -1
  24. package/dist/types/markstream-angular/src/parseNestedMarkdownToNodes.d.ts +6 -1
  25. package/dist/types/markstream-angular/src/services/smooth-markdown-stream.service.d.ts +33 -0
  26. package/dist/types/markstream-angular/src/types/monaco.d.ts +3 -3
  27. package/package.json +9 -6
@@ -1,4 +1,5 @@
1
1
  import { AfterViewInit, OnChanges, OnDestroy } from '@angular/core';
2
+ import { CodeBlockMonacoTheme } from '../../types/monaco';
2
3
  import { AngularRenderableNode, AngularRenderContext } from '../shared/node-helpers';
3
4
  export declare class CodeBlockNodeComponent implements AfterViewInit, OnChanges, OnDestroy {
4
5
  private readonly cdr;
@@ -26,14 +27,66 @@ export declare class CodeBlockNodeComponent implements AfterViewInit, OnChanges,
26
27
  get t(): (key: string) => string;
27
28
  get mergedProps(): {
28
29
  [x: string]: any;
30
+ stream?: boolean;
31
+ darkTheme?: CodeBlockMonacoTheme;
32
+ lightTheme?: CodeBlockMonacoTheme;
33
+ themes?: CodeBlockMonacoTheme[];
34
+ monacoOptions?: import('../..').CodeBlockMonacoOptions;
35
+ minWidth?: string | number;
36
+ maxWidth?: string | number;
37
+ isShowPreview?: boolean;
38
+ enableFontSizeControl?: boolean;
39
+ showHeader?: boolean;
40
+ showCopyButton?: boolean;
41
+ showExpandButton?: boolean;
42
+ showPreviewButton?: boolean;
43
+ showCollapseButton?: boolean;
44
+ showFontSizeButtons?: boolean;
45
+ htmlPreviewAllowScripts?: boolean;
46
+ htmlPreviewSandbox?: string;
29
47
  };
30
48
  get resolvedLoading(): boolean;
31
49
  get resolvedStream(): boolean;
32
50
  get resolvedIsDark(): boolean;
33
- get resolvedDarkTheme(): any;
34
- get resolvedLightTheme(): any;
35
- get resolvedThemes(): any;
36
- get resolvedMonacoOptions(): any;
51
+ get resolvedDarkTheme(): CodeBlockMonacoTheme;
52
+ get resolvedLightTheme(): CodeBlockMonacoTheme;
53
+ get resolvedThemes(): CodeBlockMonacoTheme[];
54
+ get resolvedMonacoOptions(): {
55
+ [x: string]: unknown;
56
+ MAX_HEIGHT?: number | string;
57
+ fontSize?: number;
58
+ lineHeight?: number;
59
+ fontFamily?: string;
60
+ tabSize?: number;
61
+ readOnly?: boolean;
62
+ wordWrap?: "off" | "on" | "wordWrapColumn" | "bounded" | string;
63
+ wrappingIndent?: "none" | "same" | "indent" | "deepIndent" | string;
64
+ theme?: string;
65
+ themes?: CodeBlockMonacoTheme[];
66
+ languages?: import('../..').CodeBlockMonacoLanguage[];
67
+ renderSideBySide?: boolean;
68
+ useInlineViewWhenSpaceIsLimited?: boolean;
69
+ enableSplitViewResizing?: boolean;
70
+ ignoreTrimWhitespace?: boolean;
71
+ maxComputationTime?: number;
72
+ diffAlgorithm?: string;
73
+ renderIndicators?: boolean;
74
+ originalEditable?: boolean;
75
+ revealDebounceMs?: number;
76
+ revealStrategy?: "bottom" | "centerIfOutside" | "center";
77
+ revealBatchOnIdleMs?: number;
78
+ updateThrottleMs?: number;
79
+ diffUpdateThrottleMs?: number;
80
+ diffAutoScroll?: boolean;
81
+ diffHideUnchangedRegions?: import('../..').CodeBlockDiffHideUnchangedRegions;
82
+ diffLineStyle?: import('../..').CodeBlockDiffLineStyle;
83
+ diffAppearance?: import('../..').CodeBlockDiffAppearance;
84
+ diffUnchangedRegionStyle?: import('../..').CodeBlockDiffUnchangedRegionStyle;
85
+ diffHunkActionsOnHover?: boolean;
86
+ diffHunkHoverHideDelayMs?: number;
87
+ onDiffHunkAction?: (context: import('../..').CodeBlockDiffHunkActionContext) => void | boolean | Promise<void | boolean>;
88
+ scrollbar?: Record<string, unknown>;
89
+ };
37
90
  get resolvedEnableFontSizeControl(): boolean;
38
91
  get resolvedShowHeader(): boolean;
39
92
  get resolvedShowCopyButton(): boolean;
@@ -18,6 +18,14 @@ export declare class D2BlockNodeComponent implements AfterViewInit, OnChanges, O
18
18
  private copyTimer;
19
19
  get mergedProps(): {
20
20
  [x: string]: any;
21
+ maxHeight?: string | null;
22
+ themeId?: number | null;
23
+ darkThemeId?: number | null;
24
+ showHeader?: boolean;
25
+ showModeToggle?: boolean;
26
+ showCopyButton?: boolean;
27
+ showExportButton?: boolean;
28
+ showCollapseButton?: boolean;
21
29
  };
22
30
  get code(): string;
23
31
  get resolvedIsDark(): boolean;
@@ -23,6 +23,15 @@ export declare class InfographicBlockNodeComponent implements AfterViewInit, OnC
23
23
  private infographicInstance;
24
24
  get mergedProps(): {
25
25
  [x: string]: any;
26
+ maxHeight?: string | null;
27
+ estimatedPreviewHeightPx?: number;
28
+ showHeader?: boolean;
29
+ showModeToggle?: boolean;
30
+ showCopyButton?: boolean;
31
+ showCollapseButton?: boolean;
32
+ showExportButton?: boolean;
33
+ showFullscreenButton?: boolean;
34
+ showZoomControls?: boolean;
26
35
  };
27
36
  get code(): string;
28
37
  get resolvedIsDark(): boolean;
@@ -5,11 +5,13 @@ export declare class InlineCodeNodeComponent implements OnChanges {
5
5
  context?: AngularRenderContext;
6
6
  indexKey?: string;
7
7
  typewriter?: boolean;
8
+ fade?: boolean;
8
9
  settledCode: string;
9
10
  streamedDelta: string;
10
11
  private streamFadeVersion;
11
12
  ngOnChanges(): void;
12
13
  get streamedDeltaClass(): "markstream-angular-text__stream-delta--a" | "markstream-angular-text__stream-delta--b";
14
+ get fadeEnabled(): boolean;
13
15
  get typewriterEnabled(): boolean;
14
16
  settleStreamedDelta(): void;
15
17
  }
@@ -8,6 +8,7 @@ export declare class LinkNodeComponent implements AfterViewInit, OnChanges, OnDe
8
8
  private hovering;
9
9
  get href(): string;
10
10
  get title(): string;
11
+ get openInNewTab(): boolean;
11
12
  get loading(): boolean;
12
13
  get resolvedShowTooltip(): boolean;
13
14
  get children(): AngularRenderableNode[];
@@ -19,8 +19,25 @@ export declare class MermaidBlockNodeComponent implements AfterViewInit, OnChang
19
19
  private destroyed;
20
20
  private renderToken;
21
21
  private copyTimer;
22
+ private lastMermaidBindFunctions;
22
23
  get mergedProps(): {
23
24
  [x: string]: any;
25
+ maxHeight?: string | null;
26
+ estimatedPreviewHeightPx?: number;
27
+ workerTimeoutMs?: number;
28
+ parseTimeoutMs?: number;
29
+ renderTimeoutMs?: number;
30
+ fullRenderTimeoutMs?: number;
31
+ renderDebounceMs?: number;
32
+ showHeader?: boolean;
33
+ showModeToggle?: boolean;
34
+ showCopyButton?: boolean;
35
+ showExportButton?: boolean;
36
+ showFullscreenButton?: boolean;
37
+ showCollapseButton?: boolean;
38
+ showZoomControls?: boolean;
39
+ isStrict?: boolean;
40
+ enableMermaidInteractions?: boolean;
24
41
  };
25
42
  get code(): string;
26
43
  get resolvedIsDark(): boolean;
@@ -60,6 +77,7 @@ export declare class MermaidBlockNodeComponent implements AfterViewInit, OnChang
60
77
  handleModalWheel(event: WheelEvent): void;
61
78
  private renderDiagram;
62
79
  private syncSvgHosts;
80
+ private bindMermaidInteractions;
63
81
  private scheduleHostSync;
64
82
  private canParseWithFallback;
65
83
  private canParseOrPrefix;
@@ -69,6 +87,5 @@ export declare class MermaidBlockNodeComponent implements AfterViewInit, OnChang
69
87
  private isGanttTaskLine;
70
88
  private getSafeGanttPreviewCandidate;
71
89
  private getSafePrefixCandidate;
72
- private isBrokenMermaidSvg;
73
90
  private withTimeout;
74
91
  }
@@ -4,7 +4,7 @@ export declare class NodeOutletComponent {
4
4
  context?: AngularRenderContext;
5
5
  indexKey?: string;
6
6
  get resolvedType(): string;
7
- get customComponentMap(): Record<string, import('@angular/core').Type<any>>;
7
+ get customComponentMap(): import('../..').CustomComponentMap;
8
8
  get resolvedCustomComponent(): any;
9
9
  get customNode(): AngularRenderableNode;
10
10
  get codeMode(): import('../shared/node-outlet-helpers').CodeBlockMode;
@@ -25,5 +25,7 @@ export declare class NodeOutletComponent {
25
25
  get escapedTextNode(): AngularRenderableNode;
26
26
  get htmlRenderNode(): AngularRenderableNode;
27
27
  get fallbackNode(): AngularRenderableNode;
28
- get resolvedComponentInputs(): Record<string, any>;
28
+ get resolvedComponentInputs(): {
29
+ [x: string]: any;
30
+ };
29
31
  }
@@ -1,5 +1,6 @@
1
1
  import { AfterViewInit, OnChanges, OnDestroy, OnInit, SimpleChanges, EventEmitter } from '@angular/core';
2
- import { AngularRenderableNode, AngularRenderContext, NodeRendererProps } from '../shared/node-helpers';
2
+ import { SmoothMarkdownStreamOptions } from '../../../../markstream-core/src/index.ts';
3
+ import { AngularRenderableNode, AngularRenderContext, CodeBlockPreviewPayload, NodeRendererProps } from '../shared/node-helpers';
3
4
  interface VisibleNodeEntry {
4
5
  node: AngularRenderableNode;
5
6
  index: number;
@@ -10,7 +11,10 @@ interface VisibleNodeEntry {
10
11
  export declare class NodeRendererComponent implements NodeRendererProps, OnChanges, OnInit, AfterViewInit, OnDestroy {
11
12
  private readonly cdr;
12
13
  private readonly hostRef;
14
+ private readonly smoothStream;
15
+ private readonly parentSmoothStreamingScope;
13
16
  private rootRef?;
17
+ private typewriterCursorRef?;
14
18
  content: string;
15
19
  nodes?: readonly AngularRenderableNode[] | null;
16
20
  final?: boolean;
@@ -21,23 +25,26 @@ export declare class NodeRendererComponent implements NodeRendererProps, OnChang
21
25
  htmlPolicy: NodeRendererProps['htmlPolicy'];
22
26
  viewportPriority?: boolean;
23
27
  codeBlockStream: boolean;
24
- codeBlockDarkTheme?: any;
25
- codeBlockLightTheme?: any;
26
- codeBlockMonacoOptions?: Record<string, any>;
28
+ codeBlockDarkTheme?: NodeRendererProps['codeBlockDarkTheme'];
29
+ codeBlockLightTheme?: NodeRendererProps['codeBlockLightTheme'];
30
+ codeBlockMonacoOptions?: NodeRendererProps['codeBlockMonacoOptions'];
27
31
  renderCodeBlocksAsPre: boolean;
28
32
  codeBlockMinWidth?: string | number;
29
33
  codeBlockMaxWidth?: string | number;
30
- codeBlockProps?: Record<string, any>;
31
- mermaidProps?: Record<string, any>;
32
- d2Props?: Record<string, any>;
33
- infographicProps?: Record<string, any>;
34
+ codeBlockProps?: NodeRendererProps['codeBlockProps'];
35
+ mermaidProps?: NodeRendererProps['mermaidProps'];
36
+ d2Props?: NodeRendererProps['d2Props'];
37
+ infographicProps?: NodeRendererProps['infographicProps'];
34
38
  customComponents?: NodeRendererProps['customComponents'];
35
39
  showTooltips: boolean;
36
40
  themes?: string[];
37
41
  isDark: boolean;
38
42
  customId?: string;
39
43
  indexKey?: number | string;
44
+ /** Show a blinking typewriter cursor while streamed content grows. Default: false */
40
45
  typewriter: boolean;
46
+ /** Enable/disable non-code-node enter and streamed-text fade animations. Default: true */
47
+ fade: boolean;
41
48
  batchRendering: boolean;
42
49
  initialRenderBatchSize: number;
43
50
  renderBatchSize: number;
@@ -48,8 +55,10 @@ export declare class NodeRendererComponent implements NodeRendererProps, OnChang
48
55
  maxLiveNodes: number;
49
56
  liveNodeBuffer: number;
50
57
  allowHtml: boolean;
58
+ smoothStreaming: boolean | 'auto';
59
+ smoothStreamingOptions?: SmoothMarkdownStreamOptions;
51
60
  copy: EventEmitter<string>;
52
- handleArtifactClick: EventEmitter<any>;
61
+ handleArtifactClick: EventEmitter<CodeBlockPreviewPayload>;
53
62
  click: EventEmitter<MouseEvent>;
54
63
  mouseover: EventEmitter<MouseEvent>;
55
64
  mouseout: EventEmitter<MouseEvent>;
@@ -80,7 +89,26 @@ export declare class NodeRendererComponent implements NodeRendererProps, OnChang
80
89
  private enhancementHandle;
81
90
  private postRenderTimer;
82
91
  private unsubscribeCustomComponents?;
92
+ private isSyncingSmoothStream;
93
+ private hasMountedForSmoothStreaming;
94
+ private unsubscribeSmoothStream?;
95
+ private previousRenderContent;
96
+ private previousEffectiveFinal;
97
+ private previousRenderVersionSource;
98
+ showTypewriterCursor: boolean;
99
+ private typewriterCursorTimeout;
100
+ private lastTypewriterContentLength;
101
+ private static readonly TYPEWRITER_CURSOR_EXCLUDED_NODE_TYPES;
102
+ get hasNodes(): boolean;
103
+ get smoothStreamingEligible(): boolean;
104
+ get smoothStreamingEnabled(): boolean;
105
+ get renderContent(): string;
106
+ get rawContent(): string;
107
+ get smoothSourceSynced(): boolean;
108
+ get requestedFinal(): boolean | undefined;
109
+ get effectiveFinal(): boolean | undefined;
83
110
  get resolvedIndexPrefix(): string;
111
+ isSmoothStreamingEnabled(): boolean;
84
112
  get resolvedInitialBatchSize(): number;
85
113
  get resolvedRenderBatchSize(): number;
86
114
  get resolvedMaxLiveNodes(): number;
@@ -99,6 +127,8 @@ export declare class NodeRendererComponent implements NodeRendererProps, OnChang
99
127
  entryIndexKey(index: number): string;
100
128
  handleMouseOver(event: MouseEvent): void;
101
129
  handleMouseOut(event: MouseEvent): void;
130
+ private ensureSmoothStreamInitialized;
131
+ private syncSmoothStream;
102
132
  private rebuild;
103
133
  private cleanupTransientState;
104
134
  private trimMeasuredState;
@@ -119,5 +149,13 @@ export declare class NodeRendererComponent implements NodeRendererProps, OnChang
119
149
  private scheduleEnhancements;
120
150
  private applyEnhancements;
121
151
  private disposeEnhancements;
152
+ private shouldSkipTypewriterCursorForNode;
153
+ private shouldShowTypewriterCursorForCurrentNodes;
154
+ private getNodeTextLength;
155
+ private getTypewriterContentLength;
156
+ private clearTypewriterCursorTimeout;
157
+ private getLastTextNode;
158
+ private updateTypewriterCursorPosition;
159
+ private updateTypewriterCursorState;
122
160
  }
123
161
  export {};
@@ -5,6 +5,7 @@ export declare class TextNodeComponent implements OnChanges {
5
5
  context?: AngularRenderContext;
6
6
  indexKey?: string;
7
7
  typewriter?: boolean;
8
+ fade?: boolean;
8
9
  settledText: string;
9
10
  streamedDelta: string;
10
11
  private streamFadeVersion;
@@ -12,6 +13,7 @@ export declare class TextNodeComponent implements OnChanges {
12
13
  ngOnChanges(): void;
13
14
  get centered(): boolean;
14
15
  get streamedDeltaClass(): "markstream-angular-text__stream-delta--a" | "markstream-angular-text__stream-delta--b";
16
+ get fadeEnabled(): boolean;
15
17
  get typewriterEnabled(): boolean;
16
18
  settleStreamedDelta(): void;
17
19
  }
@@ -1,11 +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 declare function resolveStreamingTextState({ nextContent, previousContent, typewriterEnabled, }: ResolveStreamingTextStateOptions): StreamingTextStateResult;
1
+ export { resolveStreamingTextState } from '../../../../markstream-core/src/index.ts';
2
+ export type { ResolveStreamingTextStateOptions, StreamingTextStateResult } from '../../../../markstream-core/src/index.ts';
@@ -1,11 +1,76 @@
1
- import { Type } from '@angular/core';
1
+ import { SmoothMarkdownStreamOptions } from '../../../../markstream-core/src/index.ts';
2
2
  import { BaseNode, HtmlPolicy, MarkdownIt, ParsedNode, ParseOptions, getHtmlTagFromContent, hasCompleteHtmlTagContent, normalizeCustomHtmlTags, normalizeCustomHtmlTagName as normalizeTagName, stripCustomHtmlWrapper } from '../../../../markdown-parser/src/index.ts';
3
+ import { CustomComponentMap } from '../../customComponents';
3
4
  import { CodeBlockMonacoOptions, CodeBlockMonacoTheme } from '../../types/monaco';
4
5
  export { getHtmlTagFromContent, hasCompleteHtmlTagContent, normalizeCustomHtmlTags, normalizeTagName, stripCustomHtmlWrapper, };
5
6
  export type AngularRenderableNode = (ParsedNode | BaseNode) & Record<string, unknown>;
7
+ export interface CodeBlockPreviewPayload {
8
+ node: AngularRenderableNode;
9
+ artifactType: 'text/html' | 'image/svg+xml';
10
+ artifactTitle: string;
11
+ id: string;
12
+ }
13
+ export type NodeRendererCodeBlockProps = Partial<{
14
+ stream: boolean;
15
+ darkTheme: CodeBlockMonacoTheme;
16
+ lightTheme: CodeBlockMonacoTheme;
17
+ themes: CodeBlockMonacoTheme[];
18
+ monacoOptions: CodeBlockMonacoOptions;
19
+ minWidth: string | number;
20
+ maxWidth: string | number;
21
+ isShowPreview: boolean;
22
+ enableFontSizeControl: boolean;
23
+ showHeader: boolean;
24
+ showCopyButton: boolean;
25
+ showExpandButton: boolean;
26
+ showPreviewButton: boolean;
27
+ showCollapseButton: boolean;
28
+ showFontSizeButtons: boolean;
29
+ htmlPreviewAllowScripts: boolean;
30
+ htmlPreviewSandbox: string;
31
+ }> & Record<string, unknown>;
32
+ export type NodeRendererMermaidProps = Partial<{
33
+ maxHeight: string | null;
34
+ estimatedPreviewHeightPx: number;
35
+ workerTimeoutMs: number;
36
+ parseTimeoutMs: number;
37
+ renderTimeoutMs: number;
38
+ fullRenderTimeoutMs: number;
39
+ renderDebounceMs: number;
40
+ showHeader: boolean;
41
+ showModeToggle: boolean;
42
+ showCopyButton: boolean;
43
+ showExportButton: boolean;
44
+ showFullscreenButton: boolean;
45
+ showCollapseButton: boolean;
46
+ showZoomControls: boolean;
47
+ isStrict: boolean;
48
+ enableMermaidInteractions: boolean;
49
+ }> & Record<string, unknown>;
50
+ export type NodeRendererD2Props = Partial<{
51
+ maxHeight: string | null;
52
+ themeId: number | null;
53
+ darkThemeId: number | null;
54
+ showHeader: boolean;
55
+ showModeToggle: boolean;
56
+ showCopyButton: boolean;
57
+ showExportButton: boolean;
58
+ showCollapseButton: boolean;
59
+ }> & Record<string, unknown>;
60
+ export type NodeRendererInfographicProps = Partial<{
61
+ maxHeight: string | null;
62
+ estimatedPreviewHeightPx: number;
63
+ showHeader: boolean;
64
+ showModeToggle: boolean;
65
+ showCopyButton: boolean;
66
+ showCollapseButton: boolean;
67
+ showExportButton: boolean;
68
+ showFullscreenButton: boolean;
69
+ showZoomControls: boolean;
70
+ }> & Record<string, unknown>;
6
71
  export interface NodeRendererEvents {
7
72
  onCopy?: (code: string) => void;
8
- onHandleArtifactClick?: (payload: any) => void;
73
+ onHandleArtifactClick?: (payload: CodeBlockPreviewPayload) => void;
9
74
  }
10
75
  export interface NodeRendererProps {
11
76
  content?: string;
@@ -24,17 +89,19 @@ export interface NodeRendererProps {
24
89
  renderCodeBlocksAsPre?: boolean;
25
90
  codeBlockMinWidth?: string | number;
26
91
  codeBlockMaxWidth?: string | number;
27
- codeBlockProps?: Record<string, any>;
28
- mermaidProps?: Record<string, any>;
29
- d2Props?: Record<string, any>;
30
- infographicProps?: Record<string, any>;
31
- customComponents?: Record<string, Type<any>>;
92
+ codeBlockProps?: NodeRendererCodeBlockProps;
93
+ mermaidProps?: NodeRendererMermaidProps;
94
+ d2Props?: NodeRendererD2Props;
95
+ infographicProps?: NodeRendererInfographicProps;
96
+ customComponents?: CustomComponentMap;
32
97
  showTooltips?: boolean;
33
98
  themes?: CodeBlockMonacoTheme[];
34
99
  isDark?: boolean;
35
100
  customId?: string;
36
101
  indexKey?: number | string;
37
102
  typewriter?: boolean;
103
+ /** Enable/disable non-code-node enter and streamed-text fade animations. Default: true */
104
+ fade?: boolean;
38
105
  batchRendering?: boolean;
39
106
  initialRenderBatchSize?: number;
40
107
  renderBatchSize?: number;
@@ -45,6 +112,8 @@ export interface NodeRendererProps {
45
112
  maxLiveNodes?: number;
46
113
  liveNodeBuffer?: number;
47
114
  allowHtml?: boolean;
115
+ smoothStreaming?: boolean | 'auto';
116
+ smoothStreamingOptions?: SmoothMarkdownStreamOptions;
48
117
  }
49
118
  export interface AngularRenderContext {
50
119
  customId?: string;
@@ -52,6 +121,7 @@ export interface AngularRenderContext {
52
121
  indexKey?: string;
53
122
  final?: boolean;
54
123
  typewriter?: boolean;
124
+ fade?: boolean;
55
125
  textStreamState?: Map<string, string>;
56
126
  streamRenderVersion?: number;
57
127
  showTooltips?: boolean;
@@ -62,11 +132,11 @@ export interface AngularRenderContext {
62
132
  customHtmlTags?: readonly string[];
63
133
  parseOptions?: ParseOptions;
64
134
  customMarkdownIt?: (md: MarkdownIt) => MarkdownIt;
65
- codeBlockProps?: Record<string, any>;
66
- mermaidProps?: Record<string, any>;
67
- d2Props?: Record<string, any>;
68
- infographicProps?: Record<string, any>;
69
- customComponents?: Record<string, Type<any>>;
135
+ codeBlockProps?: NodeRendererCodeBlockProps;
136
+ mermaidProps?: NodeRendererMermaidProps;
137
+ d2Props?: NodeRendererD2Props;
138
+ infographicProps?: NodeRendererInfographicProps;
139
+ customComponents?: CustomComponentMap;
70
140
  codeBlockThemes?: {
71
141
  themes?: CodeBlockMonacoTheme[];
72
142
  darkTheme?: CodeBlockMonacoTheme;
@@ -4,5 +4,7 @@ export declare function resolveNodeOutletCodeMode(node: AngularRenderableNode, c
4
4
  export declare function resolveHtmlTag(node: AngularRenderableNode): string;
5
5
  export declare function coerceCustomHtmlNode(node: AngularRenderableNode): AngularRenderableNode;
6
6
  export declare function coerceBuiltinHtmlNode(node: AngularRenderableNode, resolvedType: string): AngularRenderableNode;
7
- export declare function resolveNodeOutletCustomInputs(node: AngularRenderableNode, context?: AngularRenderContext): Record<string, any>;
7
+ export declare function resolveNodeOutletCustomInputs(node: AngularRenderableNode, context?: AngularRenderContext): {
8
+ [x: string]: any;
9
+ };
8
10
  export declare function resolveNodeOutletCustomComponent(node: AngularRenderableNode, context?: AngularRenderContext, customComponents?: Record<string, any> | null): any;
@@ -0,0 +1,5 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ export interface SmoothStreamingScope {
3
+ isSmoothStreamingEnabled: () => boolean;
4
+ }
5
+ export declare const MARKSTREAM_SMOOTH_STREAMING_SCOPE: InjectionToken<SmoothStreamingScope>;
@@ -1,5 +1,5 @@
1
1
  import { Type } from '@angular/core';
2
- export type CustomComponentMap = Record<string, Type<any>>;
2
+ export type CustomComponentMap = Record<string, Type<unknown>>;
3
3
  export declare function subscribeCustomComponents(listener: () => void): () => void;
4
4
  export declare function getCustomComponentsRevision(): number;
5
5
  export declare function setCustomComponents(id: string, mapping: CustomComponentMap): void;
@@ -1,15 +1,17 @@
1
+ import { NodeRendererCodeBlockProps, NodeRendererD2Props, NodeRendererInfographicProps, NodeRendererMermaidProps } from './components/shared/node-helpers';
2
+ import { CodeBlockMonacoOptions } from './types/monaco';
1
3
  export interface EnhanceRenderedHtmlOptions {
2
4
  final?: boolean;
3
5
  isDark?: boolean;
4
6
  renderCodeBlocksAsPre?: boolean;
5
- monacoOptions?: Record<string, any>;
7
+ monacoOptions?: CodeBlockMonacoOptions;
6
8
  d2ThemeId?: number | null;
7
9
  d2DarkThemeId?: number | null;
8
10
  showTooltips?: boolean;
9
- codeBlockProps?: Record<string, any>;
10
- mermaidProps?: Record<string, any>;
11
- d2Props?: Record<string, any>;
12
- infographicProps?: Record<string, any>;
11
+ codeBlockProps?: NodeRendererCodeBlockProps;
12
+ mermaidProps?: NodeRendererMermaidProps;
13
+ d2Props?: NodeRendererD2Props;
14
+ infographicProps?: NodeRendererInfographicProps;
13
15
  onCopy?: (code: string) => void;
14
16
  isCancelled?: () => boolean;
15
17
  }
@@ -33,9 +33,11 @@ export { NodeRendererComponent as NodeRenderer } from './components/NodeRenderer
33
33
  export { ParagraphNodeComponent as ParagraphNode } from './components/ParagraphNode/ParagraphNode.component';
34
34
  export { PreCodeNodeComponent as PreCodeNode } from './components/PreCodeNode/PreCodeNode.component';
35
35
  export { ReferenceNodeComponent as ReferenceNode } from './components/ReferenceNode/ReferenceNode.component';
36
- export type { AngularRenderableNode, AngularRenderContext, NodeRendererEvents, NodeRendererProps, } from './components/shared/node-helpers';
36
+ export type { AngularRenderableNode, AngularRenderContext, CodeBlockPreviewPayload, NodeRendererCodeBlockProps, NodeRendererD2Props, NodeRendererEvents, NodeRendererInfographicProps, NodeRendererMermaidProps, NodeRendererProps, } from './components/shared/node-helpers';
37
37
  export { buildRenderContext, resolveParsedNodes, } from './components/shared/node-helpers';
38
38
  export { SafeAttrsDirective } from './components/shared/safe-attrs.directive';
39
+ export { MARKSTREAM_SMOOTH_STREAMING_SCOPE } from './components/shared/smooth-streaming-scope';
40
+ export type { SmoothStreamingScope } from './components/shared/smooth-streaming-scope';
39
41
  export { StrikethroughNodeComponent as StrikethroughNode } from './components/StrikethroughNode/StrikethroughNode.component';
40
42
  export { StrongNodeComponent as StrongNode } from './components/StrongNode/StrongNode.component';
41
43
  export { SubscriptNodeComponent as SubscriptNode } from './components/SubscriptNode/SubscriptNode.component';
@@ -64,6 +66,8 @@ export type { NestedMarkdownNodesInput, NestedMarkdownNodesOptions, } from './pa
64
66
  export { renderMarkdownNodesToHtml, renderMarkdownNodeToHtml, renderMarkdownToHtml, renderNestedMarkdownToHtml, } from './renderMarkdownHtml';
65
67
  export type { MarkstreamAngularRenderOptions, NestedMarkdownHtmlInput, NestedMarkdownHtmlOptions, RenderableMarkdownNode, } from './renderMarkdownHtml';
66
68
  export { sanitizeHtmlContent } from './sanitizeHtmlContent';
69
+ export { SmoothMarkdownStreamService } from './services/smooth-markdown-stream.service';
70
+ export type { SmoothMarkdownStreamOptions } from './services/smooth-markdown-stream.service';
67
71
  export type { CodeBlockDiffAppearance, CodeBlockDiffHideUnchangedRegions, CodeBlockDiffHideUnchangedRegionsOptions, CodeBlockDiffHunkActionContext, CodeBlockDiffHunkActionKind, CodeBlockDiffHunkSide, CodeBlockDiffLineStyle, CodeBlockDiffUnchangedRegionStyle, CodeBlockMonacoLanguage, CodeBlockMonacoOptions, CodeBlockMonacoTheme, CodeBlockMonacoThemeObject, } from './types/monaco';
68
72
  export { getLanguageIcon, languageMap, normalizeLanguageIdentifier, resolveMonacoLanguageId, setLanguageIconResolver, } from './utils/languageIcon';
69
73
  export type { LanguageIconResolver } from './utils/languageIcon';
@@ -1,6 +1,17 @@
1
- export type D2Loader = () => Promise<any> | any;
1
+ export interface D2Instance {
2
+ D2?: D2Constructor;
3
+ compile?: (source: string, options?: Record<string, unknown>) => Promise<unknown> | unknown;
4
+ render?: (input: unknown, options?: Record<string, unknown>) => Promise<unknown> | unknown;
5
+ }
6
+ export interface D2Constructor {
7
+ new (): D2Instance;
8
+ D2?: D2Constructor;
9
+ compile?: D2Instance['compile'];
10
+ }
11
+ export type D2Module = D2Constructor | D2Instance;
12
+ export type D2Loader = () => Promise<unknown> | unknown;
2
13
  export declare function setD2Loader(loader: D2Loader | null): void;
3
14
  export declare function enableD2(loader?: D2Loader): void;
4
15
  export declare function disableD2(): void;
5
16
  export declare function isD2Enabled(): boolean;
6
- export declare function getD2(): Promise<any>;
17
+ export declare function getD2(): Promise<D2Module | null>;
@@ -1 +1,13 @@
1
- export declare function getInfographic(): Promise<any>;
1
+ export interface InfographicInstance {
2
+ render: (source: string) => unknown;
3
+ destroy?: () => unknown;
4
+ on?: (event: string, handler: (payload: unknown) => void) => unknown;
5
+ }
6
+ export interface InfographicConstructor {
7
+ new (options: {
8
+ container: HTMLElement;
9
+ width?: string | number;
10
+ height?: string | number;
11
+ }): InfographicInstance;
12
+ }
13
+ export declare function getInfographic(): Promise<InfographicConstructor | null>;
@@ -1,6 +1,9 @@
1
- export type KatexLoader = () => Promise<any> | any;
1
+ export interface KatexModule {
2
+ renderToString: (content: string, options?: Record<string, unknown>) => string;
3
+ }
4
+ export type KatexLoader = () => Promise<unknown> | unknown;
2
5
  export declare function setKatexLoader(loader: KatexLoader | null): void;
3
6
  export declare function enableKatex(loader?: KatexLoader): void;
4
7
  export declare function disableKatex(): void;
5
8
  export declare function isKatexEnabled(): boolean;
6
- export declare function getKatex(): Promise<any>;
9
+ export declare function getKatex(): Promise<KatexModule | null>;
@@ -1,6 +1,27 @@
1
- export type MermaidLoader = () => Promise<any> | any;
1
+ export type MermaidLoader = () => Promise<unknown> | unknown;
2
+ export interface MermaidModule {
3
+ render: (id: string, source: string) => Promise<MermaidRenderResult> | MermaidRenderResult;
4
+ parse?: (source: string) => Promise<unknown> | unknown;
5
+ initialize?: (config?: Record<string, unknown>) => unknown;
6
+ mermaidAPI?: {
7
+ render?: MermaidModule['render'];
8
+ parse?: MermaidModule['parse'];
9
+ initialize?: MermaidModule['initialize'];
10
+ };
11
+ }
12
+ export type MermaidRenderResult = string | {
13
+ svg?: string;
14
+ bindFunctions?: (element: Element) => unknown;
15
+ };
16
+ interface MermaidInitConfig extends Record<string, unknown> {
17
+ securityLevel?: unknown;
18
+ flowchart?: {
19
+ htmlLabels?: unknown;
20
+ };
21
+ }
2
22
  export declare function setMermaidLoader(loader: MermaidLoader | null): void;
3
23
  export declare function enableMermaid(loader?: MermaidLoader): void;
4
24
  export declare function disableMermaid(): void;
5
25
  export declare function isMermaidEnabled(): boolean;
6
- export declare function getMermaid(initConfig?: Record<string, any>): Promise<any>;
26
+ export declare function getMermaid(initConfig?: MermaidInitConfig): Promise<MermaidModule | null>;
27
+ export {};
@@ -1 +1,18 @@
1
- export declare function getUseMonaco(): Promise<any>;
1
+ export interface MonacoRuntimeHelpers {
2
+ createEditor?: (container: HTMLElement, code: string, language: string) => Promise<unknown> | unknown;
3
+ createDiffEditor?: (container: HTMLElement, original: string, modified: string, language: string) => Promise<unknown> | unknown;
4
+ updateCode?: (code: string, language?: string) => Promise<unknown> | unknown;
5
+ updateDiff?: (original: string, modified: string, language?: string) => Promise<unknown> | unknown;
6
+ cleanupEditor?: () => unknown;
7
+ safeClean?: () => unknown;
8
+ setTheme?: (theme?: string | Record<string, unknown>) => Promise<unknown> | unknown;
9
+ getEditorView?: () => unknown;
10
+ getDiffEditorView?: () => unknown;
11
+ refreshDiffPresentation?: () => unknown;
12
+ }
13
+ export interface MonacoRuntimeModule {
14
+ useMonaco: (options?: Record<string, unknown>) => MonacoRuntimeHelpers;
15
+ preloadMonacoWorkers?: () => Promise<unknown> | unknown;
16
+ getOrCreateHighlighter?: (...args: unknown[]) => Promise<unknown> | unknown;
17
+ }
18
+ export declare function getUseMonaco(): Promise<MonacoRuntimeModule | null>;