markstream-angular 0.0.2-beta.10 → 0.0.2-beta.11
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.
- package/dist/index.css +1 -1
- package/dist/index.js +1555 -1315
- package/dist/types/markstream-angular/src/components/InlineCodeNode/InlineCodeNode.component.d.ts +2 -0
- package/dist/types/markstream-angular/src/components/NodeRenderer/NodeRenderer.component.d.ts +38 -0
- package/dist/types/markstream-angular/src/components/TextNode/TextNode.component.d.ts +2 -0
- package/dist/types/markstream-angular/src/components/TextNode/streamingTextState.d.ts +2 -11
- package/dist/types/markstream-angular/src/components/shared/node-helpers.d.ts +6 -0
- package/dist/types/markstream-angular/src/components/shared/smooth-streaming-scope.d.ts +5 -0
- package/dist/types/markstream-angular/src/index.d.ts +4 -0
- package/dist/types/markstream-angular/src/services/smooth-markdown-stream.service.d.ts +33 -0
- package/package.json +6 -4
package/dist/types/markstream-angular/src/components/InlineCodeNode/InlineCodeNode.component.d.ts
CHANGED
|
@@ -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
|
}
|
package/dist/types/markstream-angular/src/components/NodeRenderer/NodeRenderer.component.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { AfterViewInit, OnChanges, OnDestroy, OnInit, SimpleChanges, EventEmitter } from '@angular/core';
|
|
2
|
+
import { SmoothMarkdownStreamOptions } from '../../../../markstream-core/src/index.ts';
|
|
2
3
|
import { AngularRenderableNode, AngularRenderContext, CodeBlockPreviewPayload, NodeRendererProps } from '../shared/node-helpers';
|
|
3
4
|
interface VisibleNodeEntry {
|
|
4
5
|
node: AngularRenderableNode;
|
|
@@ -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;
|
|
@@ -37,7 +41,10 @@ export declare class NodeRendererComponent implements NodeRendererProps, OnChang
|
|
|
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,6 +55,8 @@ 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
61
|
handleArtifactClick: EventEmitter<CodeBlockPreviewPayload>;
|
|
53
62
|
click: 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
|
|
2
|
-
|
|
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,3 +1,4 @@
|
|
|
1
|
+
import { SmoothMarkdownStreamOptions } from '../../../../markstream-core/src/index.ts';
|
|
1
2
|
import { BaseNode, HtmlPolicy, MarkdownIt, ParsedNode, ParseOptions, getHtmlTagFromContent, hasCompleteHtmlTagContent, normalizeCustomHtmlTags, normalizeCustomHtmlTagName as normalizeTagName, stripCustomHtmlWrapper } from '../../../../markdown-parser/src/index.ts';
|
|
2
3
|
import { CustomComponentMap } from '../../customComponents';
|
|
3
4
|
import { CodeBlockMonacoOptions, CodeBlockMonacoTheme } from '../../types/monaco';
|
|
@@ -98,6 +99,8 @@ export interface NodeRendererProps {
|
|
|
98
99
|
customId?: string;
|
|
99
100
|
indexKey?: number | string;
|
|
100
101
|
typewriter?: boolean;
|
|
102
|
+
/** Enable/disable non-code-node enter and streamed-text fade animations. Default: true */
|
|
103
|
+
fade?: boolean;
|
|
101
104
|
batchRendering?: boolean;
|
|
102
105
|
initialRenderBatchSize?: number;
|
|
103
106
|
renderBatchSize?: number;
|
|
@@ -108,6 +111,8 @@ export interface NodeRendererProps {
|
|
|
108
111
|
maxLiveNodes?: number;
|
|
109
112
|
liveNodeBuffer?: number;
|
|
110
113
|
allowHtml?: boolean;
|
|
114
|
+
smoothStreaming?: boolean | 'auto';
|
|
115
|
+
smoothStreamingOptions?: SmoothMarkdownStreamOptions;
|
|
111
116
|
}
|
|
112
117
|
export interface AngularRenderContext {
|
|
113
118
|
customId?: string;
|
|
@@ -115,6 +120,7 @@ export interface AngularRenderContext {
|
|
|
115
120
|
indexKey?: string;
|
|
116
121
|
final?: boolean;
|
|
117
122
|
typewriter?: boolean;
|
|
123
|
+
fade?: boolean;
|
|
118
124
|
textStreamState?: Map<string, string>;
|
|
119
125
|
streamRenderVersion?: number;
|
|
120
126
|
showTooltips?: boolean;
|
|
@@ -36,6 +36,8 @@ export { ReferenceNodeComponent as ReferenceNode } from './components/ReferenceN
|
|
|
36
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';
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { OnDestroy } from '@angular/core';
|
|
2
|
+
import { SmoothMarkdownStreamOptions } from '../../../markstream-core/src/index.ts';
|
|
3
|
+
export type { SmoothMarkdownStreamOptions };
|
|
4
|
+
export declare class SmoothMarkdownStreamService implements OnDestroy {
|
|
5
|
+
private controller;
|
|
6
|
+
private snapshot;
|
|
7
|
+
private readonly listeners;
|
|
8
|
+
private unsubscribeFromController?;
|
|
9
|
+
init(options?: SmoothMarkdownStreamOptions): void;
|
|
10
|
+
ngOnDestroy(): void;
|
|
11
|
+
/**
|
|
12
|
+
* Subscribe to snapshot updates. Called when the controller's visible
|
|
13
|
+
* content advances during smooth streaming. The listener is invoked
|
|
14
|
+
* after each snapshot sync so that Angular components can trigger
|
|
15
|
+
* rebuild / markForCheck.
|
|
16
|
+
*/
|
|
17
|
+
subscribe(listener: () => void): () => void;
|
|
18
|
+
get source(): string;
|
|
19
|
+
get visible(): string;
|
|
20
|
+
get done(): boolean;
|
|
21
|
+
get caughtUp(): boolean;
|
|
22
|
+
get final(): boolean;
|
|
23
|
+
get pendingChars(): number;
|
|
24
|
+
enqueue(chunk: string): void;
|
|
25
|
+
finish(options?: {
|
|
26
|
+
flush?: boolean;
|
|
27
|
+
}): void;
|
|
28
|
+
flush(): void;
|
|
29
|
+
reset(initialMarkdown?: string): void;
|
|
30
|
+
pause(): void;
|
|
31
|
+
resume(): void;
|
|
32
|
+
private syncSnapshot;
|
|
33
|
+
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "markstream-angular",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.0.2-beta.
|
|
4
|
+
"version": "0.0.2-beta.11",
|
|
5
5
|
"description": "Experimental Angular Markdown renderer for Markstream, built on stream-markdown AST and a stable HTML baseline renderer.",
|
|
6
6
|
"author": "Simon He",
|
|
7
7
|
"license": "MIT",
|
|
@@ -68,7 +68,8 @@
|
|
|
68
68
|
},
|
|
69
69
|
"dependencies": {
|
|
70
70
|
"@floating-ui/dom": "^1.7.6",
|
|
71
|
-
"
|
|
71
|
+
"markstream-core": "0.0.1",
|
|
72
|
+
"stream-markdown-parser": "0.0.95"
|
|
72
73
|
},
|
|
73
74
|
"devDependencies": {
|
|
74
75
|
"@types/node": "^18.19.130",
|
|
@@ -78,10 +79,11 @@
|
|
|
78
79
|
"vite-plugin-dts": "^4.5.4"
|
|
79
80
|
},
|
|
80
81
|
"scripts": {
|
|
81
|
-
"build": "vite build --mode npm",
|
|
82
|
+
"build": "pnpm --dir ../markstream-core build && vite build --mode npm",
|
|
82
83
|
"dev": "vite dev",
|
|
83
84
|
"preview": "vite preview",
|
|
84
85
|
"typecheck": "tsc --noEmit",
|
|
85
|
-
"
|
|
86
|
+
"check:core-published": "node ../../scripts/check-core-published.mjs --package-json package.json --core-package-json ../markstream-core/package.json",
|
|
87
|
+
"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"
|
|
86
88
|
}
|
|
87
89
|
}
|