markstream-octane 2.0.17 → 2.0.18

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.d.ts CHANGED
@@ -105,6 +105,8 @@ interface CodeBlockOptions {
105
105
  interface CodeBlockNodeProps extends CommonCodeBlockProps {
106
106
  node: CodeBlockNode$1;
107
107
  codeBlockOptions?: CodeBlockOptions;
108
+ /** Overrides browser clipboard writes. Copy feedback and events wait for completion. */
109
+ clipboardWriter?: (text: string) => void | Promise<void>;
108
110
  isDark?: boolean;
109
111
  loading?: boolean;
110
112
  stream?: boolean;
package/dist/server.d.ts CHANGED
@@ -126,6 +126,8 @@ interface CodeBlockOptions {
126
126
  interface CodeBlockNodeProps extends CommonCodeBlockProps {
127
127
  node: CodeBlockNode$1;
128
128
  codeBlockOptions?: CodeBlockOptions;
129
+ /** Overrides browser clipboard writes. Copy feedback and events wait for completion. */
130
+ clipboardWriter?: (text: string) => void | Promise<void>;
129
131
  isDark?: boolean;
130
132
  loading?: boolean;
131
133
  stream?: boolean;
package/dist/tailwind.cjs CHANGED
@@ -1,4 +1,4 @@
1
- const safeList = `octane class=\"checkbox-node\"><input error [mermaidWorkerClient] messageerror cleared worker instance inject via busy call timed out canParse findPrefix typeof [markstream-octane] htmlPreviewSandbox contains both allow-scripts and this only fully trusted content served an isolated string en utf-8 viewport content="width=device-width initial-scale=1 event.key html-preview-frame__header html-preview-frame__title html-preview-frame__dot html-preview-frame__label ×\n html-preview-frame__iframe no-referrer about:blank dependency is not install it to enable clsx name markstream-d2-root-svg number window.requestAnimationFrame d2InstanceRef.current instance.render throw new missing object render returned empty top d2-block my-4 rounded-lg border overflow-hidden shadow-sm border-gray-700/30 bg-gray-900 text-gray-100 border-gray-200 bg-white text-gray-900 d2-block-header flex justify-between items-center px-4 py-2.5 border-b border-gray-400/5 gap-x-2 text-sm font-medium font-mono gap-x-1 rounded-md mode-btn px-2 py-1 text-xs !showSource showSource d2-action-btn p-2 transition-colors hover:bg-[var(--vscode-editor-selectionBackground)] aria-label aria-hidden w-3 h-3 none currentColor round aria-pressed m9 d2-block-body d2-source py-4 d2-code d2-error mt-2 d2-render d2-svg pb-3 class=\"mb-4\"><dt class=\"definition-term font-semibold\"></dt><dd class=\"definition-desc definition data-index-key mb-4 dt definition-term font-semibold dd definition-desc ml-4 click class=\"footnote-anchor hover:underline cursor-pointer\">\n ↩︎\n $$click href smooth class=\"footnote-node leading-relaxed border-t border-[var(--footnote-border,#eaecef)] pt-2\"><div id class=\"footnote-reference\"><span>\n footnote-link cursor-pointer className ref html-block-node stream-markdown-parser safe escape html-block html-block-node__placeholder html-block-node__placeholder-bar w-4/5 w-2/3 auto heading-node class=\"list-item pl-1.5 value list-item list-node my-5 pl-[calc(13/8*1em)] list-decimal list-disc max-lg:my-[calc(4/3*1em)] max-lg:pl-[calc(14/9*1em)] list token.type block child ms-html text self_closing tag_open tag_close parse html-inline dynamic template html-inline-node html-inline-node--loading inline primary fallback failed image async ?? placeholder image-node__placeholder image-node__spinner image-node__placeholder-text image… image-node__error load markstream-core mermaid loose strict hidden viewBox gantt open-modal keydown fullscreen [data-mermaid-wrapper] mermaid-action-btn rounded text-gray-400 hover:bg-gray-700 hover:text-gray-200 text-gray-600 hover:bg-gray-200 hover:text-gray-700 toggle-mode preview touch relative absolute top-2 right-2 z-10 gap-2 backdrop-blur common.zoomIn common.zoomOut −\n common.resetZoom min-h-[360px] transition-[height] duration-150 data-mermaid-wrapper inset-0 w-full text-center justify-center min-h-full mermaid-loading mermaid-spinner diagram… mermaid-block-header bg-gray-800 bg-gray-50 space-x-2 icon-slot h-4 w-4 flex-shrink-0 space-x-1 px-2.5 bg-gray-600 text-gray-200 text-gray-700 text-gray-500 common.preview source common.source m16 opacity-50 common.export m7 m14 p-4 text-gray-300 whitespace-pre-wrap mermaid-error data-markstream-mermaid hasRenderedOnce markstream-octane mermaid-modal-overlay dialog aria-modal mermaid-modal-header mermaid-modal-title mermaid-modal-close common.close mermaid-modal-body mermaid-modal-content available abort library in rendered text-red-500 transform ease center data-markstream-infographic data-markstream-mode hasPreview cursor-not-allowed infographic-preview transition-all duration-100 overflow-auto text-left isDragging fixed z-50 bg-black/70 dialog-panel h-full max-w-full max-h-full shadow-lg top-6 right-6 inline-flex !isDragging class=\"inline-code text-[85%] px-1 py-0.5 bg-[hsl(var(--secondary))] whitespace-normal break-words text-node-stream-delta text-node-stream-delta--a text-node-stream-delta--b class=\"unknown-node italic\">\n node type:\n paragraph paragraph-node child.type renderNode ctx mouseenter mouseleave class=\"reference-node bg-[hsl(var(--muted))] px-1.5 mx-0.5 $$mouseenter $$mouseleave $$keydown class=\"table-node-wrapper\"><table><!><thead class=\"border-[var(--table-border,#cbd5e1)]\"><tr p-[calc(4/7*1em)] table-node__resize-handle rowIdx bodyRows.length aria-busy pointermove pointerup pointercancel my-8 isLoading table-node__loading status aria-live polite table-node__spinner sr-only animationend $$animationend text-node node.center zoom class=\"admonition-header\"><!><span note admonition-icon admonition-toggle aria-expanded aria-controls collapsed admonition-content aria-labelledby node.type next.maxHeight infographic language boolean code_block html_inline text_special heading list_item definition_list footnote footnote_reference footnote_anchor admonition hardbreak inline_code emphasis strikethrough highlight insert subscript superscript checkbox checkbox_input emoji thematic_break math_inline math_block reference html_block vmr_container label_open label_close class=\"hr-node dark window.matchMedia ms-tooltip z-[9999] inline-block text-base py-2 px-3 shadow-md whitespace-nowrap pointer-events-none tooltip-element text-white border-gray-700 is-dark tooltip javascript typescript go python ruby shell powershell d2 plain cpp csharp objectivec objectivecpp yaml markdown rust kotlin plaintext zsh objective-c objective-cpp diff java php sql cannot delete global clearGlobalCustomComponents was provided streamingComponents entry will be used parser-backed [katexWorkerClient] init cache-hit timeout waiting slot target rel infinite node.title link-loading items-baseline gap-1.5 link-text-wrapper leading-[normal] link-text link-loading-indicator noopener noreferrer class=\"math-block overflow-x-auto math-rendering globalThis.requestAnimationFrame globalThis.cancelAnimationFrame $$ math-inline__loading math-inline__spinner data-language data-markstream-line-numbers !options.preserveBlankKind added context markstream-pre__diff-pane--inline original markstream-pre__diff-pane--original modified markstream-pre__diff-pane--modified removed no markstream-pre__diff-code markstream-pre__diff-line markstream-pre__diff-rail markstream-pre__diff-number markstream-pre__diff-content markstream-pre__diff-content-inner markstream-pre__line-numbers markstream-pre__line-numbers-text markstream-pre__code class children key sequencediagram classdiagram kind statediagram erdiagram flowchart graph module did expected normalizedType document role aria-describedby thinking indexKey prototype constructor °C viteEnv.MODE development process markstream-octane-d2 class=\"code-editor-layer\"><div></div><div code-height-placeholder code-fallback-plain m-0 style.visibility theme themes themeType languages stream disableFileHeader onThemeChange renderCustomHeader renderHeaderMetadata renderHeaderPrefix wrap split line-info night moon black dracula mocha frappe macchiato palenight ocean poimandres monokai laserwave tokyo slack-dark rose-pine github-dark material-theme one-dark catppuccin-mocha catppuccin-frappe catppuccin-macchiato transparent visible max-height height onDidUpdateDiff onDidContentSizeChange onDidLayoutChange window.MutationObserver record.type resolvedOptions.padding vitesse-dark vitesse-light monospace unified fontSize lineHeight maxHeight paddingBottom paddingTop tabSize resolvedOptions.overflow fontFamily nextOptions.unsafeCSS [data-file] [data-diff] canonicalLanguage single window.cancelAnimationFrame clientX navigator.clipboard navigator.clipboard.writeText code-block-container code-block-header flex-1 truncate code-action-btn evenodd code-loading-placeholder loading-skeleton skeleton-line short next next.type window.requestIdleCallback [data-node-index] node-spacer data-custom-id node-slot data-node-index data-node-type fade-node node-placeholder typewriter-cursor [data-node-type="code_block"] [data-node-type="admonition"] [data-node-type="table"] [data-node-type="math_block"] [data-node-type="html_block"] [data-node-type="image"] performance [markstream-octane][perf] markdown-renderer katex value?.useMonaco stream-diffs/markstream stream-diffs runtime cite`;
1
+ const safeList = `octane class=\"checkbox-node\"><input error [mermaidWorkerClient] messageerror cleared worker instance inject via busy call timed out canParse findPrefix class=\"admonition-header\"><!><span data-index-key id typeof note admonition-icon admonition-toggle aria-expanded aria-controls collapsed admonition-content aria-labelledby [markstream-octane] htmlPreviewSandbox contains both allow-scripts and this only fully trusted content served an isolated string en utf-8 viewport content="width=device-width initial-scale=1 event.key html-preview-frame__header html-preview-frame__title html-preview-frame__dot html-preview-frame__label ×\n html-preview-frame__iframe no-referrer about:blank class=\"table-node-wrapper\"><table><!><thead class=\"border-[var(--table-border,#cbd5e1)]\"><tr font-semibold p-[calc(4/7*1em)] table-node__resize-handle aria-label rowIdx bodyRows.length auto aria-busy clsx text-left pointermove pointerup pointercancel my-8 text-sm isLoading table-node__loading status aria-live polite table-node__spinner sr-only dependency is not install it to enable heading-node object html-block-node ref className stream-markdown-parser safe escape html-block html-block-node__placeholder html-block-node__placeholder-bar w-4/5 w-2/3 class=\"inline-code inline text-[85%] px-1 py-0.5 rounded font-mono bg-[hsl(var(--secondary))] whitespace-normal break-words text-node-stream-delta text-node-stream-delta--a text-node-stream-delta--b markstream-core mermaid none loose strict hidden viewBox gantt top open-modal keydown fullscreen [data-mermaid-wrapper] mermaid-action-btn p-2 text-xs text-gray-400 hover:bg-gray-700 hover:text-gray-200 text-gray-600 hover:bg-gray-200 hover:text-gray-700 toggle-mode preview touch relative absolute top-2 right-2 z-10 rounded-lg flex items-center gap-2 backdrop-blur transition-colors common.zoomIn common.zoomOut −\n common.resetZoom min-h-[360px] overflow-hidden block transition-[height] duration-150 data-mermaid-wrapper inset-0 w-full text-center justify-center min-h-full mermaid-loading mermaid-spinner diagram… mermaid-block-header justify-between px-4 py-2.5 border-b bg-gray-800 border-gray-700/30 bg-gray-50 border-gray-200 space-x-2 icon-slot h-4 w-4 flex-shrink-0 font-medium space-x-1 rounded-md px-2.5 py-1 bg-gray-600 text-gray-200 shadow-sm bg-white text-gray-700 text-gray-500 common.preview aria-hidden w-3 h-3 currentColor round source common.source m16 aria-pressed m9 opacity-50 common.export m7 m14 p-4 bg-gray-900 text-gray-300 whitespace-pre-wrap mermaid-error data-markstream-mermaid showSource hasRenderedOnce my-4 border markstream-octane mermaid-modal-overlay dialog aria-modal mermaid-modal-header mermaid-modal-title mermaid-modal-close common.close mermaid-modal-body mermaid-modal-content available abort name markstream-d2-root-svg number window.requestAnimationFrame d2InstanceRef.current instance.render throw new missing render returned empty d2-block text-gray-100 text-gray-900 d2-block-header border-gray-400/5 gap-x-2 gap-x-1 mode-btn px-2 !showSource d2-action-btn hover:bg-[var(--vscode-editor-selectionBackground)] d2-block-body d2-source py-4 d2-code d2-error mt-2 d2-render d2-svg pb-3 class=\"mb-4\"><dt class=\"definition-term font-semibold\"></dt><dd class=\"definition-desc definition mb-4 dt definition-term dd definition-desc ml-4 token.type child value ms-html text self_closing tag_open tag_close parse html-inline dynamic template html-inline-node html-inline-node--loading class=\"unknown-node italic\">\n node type:\n class=\"list-item pl-1.5 list-item node.type next.maxHeight infographic language boolean code_block html_inline paragraph text_special heading list list_item definition_list footnote footnote_reference footnote_anchor admonition hardbreak image inline_code emphasis strikethrough highlight insert subscript superscript checkbox checkbox_input emoji thematic_break math_inline math_block reference html_block vmr_container label_open label_close ?? paragraph-node child.type renderNode ctx cannot delete global clearGlobalCustomComponents was provided in streamingComponents entry will be used parser-backed primary fallback failed async placeholder image-node__placeholder image-node__spinner image-node__placeholder-text image… image-node__error load list-node my-5 pl-[calc(13/8*1em)] list-decimal list-disc max-lg:my-[calc(4/3*1em)] max-lg:pl-[calc(14/9*1em)] click class=\"footnote-anchor hover:underline cursor-pointer\">\n ↩︎\n $$click href smooth mouseenter mouseleave class=\"reference-node cursor-pointer bg-[hsl(var(--muted))] px-1.5 mx-0.5 $$mouseenter $$mouseleave $$keydown class=\"footnote-node leading-relaxed border-t border-[var(--footnote-border,#eaecef)] pt-2\"><div library rendered text-red-500 transform ease center data-markstream-infographic data-markstream-mode hasPreview cursor-not-allowed infographic-preview transition-all duration-100 overflow-auto isDragging fixed z-50 bg-black/70 dialog-panel h-full max-w-full max-h-full shadow-lg top-6 right-6 inline-flex !isDragging class=\"footnote-reference\"><span>\n footnote-link animationend $$animationend text-node node.center zoom class=\"hr-node dark window.matchMedia ms-tooltip z-[9999] inline-block text-base py-2 px-3 shadow-md whitespace-nowrap pointer-events-none tooltip-element text-white border-gray-700 is-dark tooltip [katexWorkerClient] init cache-hit timeout waiting slot javascript typescript go python ruby shell powershell d2 plain cpp csharp objectivec objectivecpp yaml markdown rust kotlin plaintext zsh objective-c objective-cpp diff java php sql class=\"math-block overflow-x-auto math-rendering thinking document class children key module did expected normalizedType viteEnv.MODE development process markstream-octane-d2 role aria-describedby globalThis.requestAnimationFrame globalThis.cancelAnimationFrame sequencediagram classdiagram kind statediagram erdiagram flowchart graph data-language data-markstream-line-numbers !options.preserveBlankKind added context markstream-pre__diff-pane--inline original markstream-pre__diff-pane--original modified markstream-pre__diff-pane--modified removed no markstream-pre__diff-code markstream-pre__diff-line markstream-pre__diff-rail markstream-pre__diff-number markstream-pre__diff-content markstream-pre__diff-content-inner markstream-pre__line-numbers markstream-pre__line-numbers-text markstream-pre__code $$ math-inline__loading math-inline__spinner indexKey prototype constructor °C target rel infinite node.title link-loading items-baseline gap-1.5 link-text-wrapper leading-[normal] link-text link-loading-indicator noopener noreferrer next next.type window.requestIdleCallback [data-node-index] node-spacer data-custom-id node-slot data-node-index data-node-type fade-node node-placeholder typewriter-cursor [data-node-type="code_block"] [data-node-type="admonition"] [data-node-type="table"] [data-node-type="math_block"] [data-node-type="html_block"] [data-node-type="image"] performance [markstream-octane][perf] markdown-renderer katex class=\"code-editor-layer\"><div></div><div code-height-placeholder code-fallback-plain m-0 style.visibility theme themes themeType languages stream disableFileHeader onThemeChange renderCustomHeader renderHeaderMetadata renderHeaderPrefix wrap split line-info night moon black dracula mocha frappe macchiato palenight ocean poimandres monokai laserwave tokyo slack-dark rose-pine github-dark material-theme one-dark catppuccin-mocha catppuccin-frappe catppuccin-macchiato transparent visible max-height height onDidUpdateDiff onDidContentSizeChange onDidLayoutChange window.MutationObserver record.type resolvedOptions.padding vitesse-dark vitesse-light monospace unified fontSize lineHeight maxHeight paddingBottom paddingTop tabSize resolvedOptions.overflow fontFamily nextOptions.unsafeCSS [data-file] [data-diff] canonicalLanguage single window.cancelAnimationFrame clientX navigator.clipboard navigator.clipboard.writeText code-block-container code-block-header flex-1 truncate code-action-btn evenodd code-loading-placeholder loading-skeleton skeleton-line short value?.useMonaco stream-diffs/markstream stream-diffs runtime cite`;
2
2
  module.exports = safeList;
3
3
  module.exports.safeList = safeList;
4
4
  module.exports.default = safeList;
package/dist/tailwind.js CHANGED
@@ -1,2 +1,2 @@
1
- export const safeList = `octane class=\"checkbox-node\"><input error [mermaidWorkerClient] messageerror cleared worker instance inject via busy call timed out canParse findPrefix typeof [markstream-octane] htmlPreviewSandbox contains both allow-scripts and this only fully trusted content served an isolated string en utf-8 viewport content="width=device-width initial-scale=1 event.key html-preview-frame__header html-preview-frame__title html-preview-frame__dot html-preview-frame__label ×\n html-preview-frame__iframe no-referrer about:blank dependency is not install it to enable clsx name markstream-d2-root-svg number window.requestAnimationFrame d2InstanceRef.current instance.render throw new missing object render returned empty top d2-block my-4 rounded-lg border overflow-hidden shadow-sm border-gray-700/30 bg-gray-900 text-gray-100 border-gray-200 bg-white text-gray-900 d2-block-header flex justify-between items-center px-4 py-2.5 border-b border-gray-400/5 gap-x-2 text-sm font-medium font-mono gap-x-1 rounded-md mode-btn px-2 py-1 text-xs !showSource showSource d2-action-btn p-2 transition-colors hover:bg-[var(--vscode-editor-selectionBackground)] aria-label aria-hidden w-3 h-3 none currentColor round aria-pressed m9 d2-block-body d2-source py-4 d2-code d2-error mt-2 d2-render d2-svg pb-3 class=\"mb-4\"><dt class=\"definition-term font-semibold\"></dt><dd class=\"definition-desc definition data-index-key mb-4 dt definition-term font-semibold dd definition-desc ml-4 click class=\"footnote-anchor hover:underline cursor-pointer\">\n ↩︎\n $$click href smooth class=\"footnote-node leading-relaxed border-t border-[var(--footnote-border,#eaecef)] pt-2\"><div id class=\"footnote-reference\"><span>\n footnote-link cursor-pointer className ref html-block-node stream-markdown-parser safe escape html-block html-block-node__placeholder html-block-node__placeholder-bar w-4/5 w-2/3 auto heading-node class=\"list-item pl-1.5 value list-item list-node my-5 pl-[calc(13/8*1em)] list-decimal list-disc max-lg:my-[calc(4/3*1em)] max-lg:pl-[calc(14/9*1em)] list token.type block child ms-html text self_closing tag_open tag_close parse html-inline dynamic template html-inline-node html-inline-node--loading inline primary fallback failed image async ?? placeholder image-node__placeholder image-node__spinner image-node__placeholder-text image… image-node__error load markstream-core mermaid loose strict hidden viewBox gantt open-modal keydown fullscreen [data-mermaid-wrapper] mermaid-action-btn rounded text-gray-400 hover:bg-gray-700 hover:text-gray-200 text-gray-600 hover:bg-gray-200 hover:text-gray-700 toggle-mode preview touch relative absolute top-2 right-2 z-10 gap-2 backdrop-blur common.zoomIn common.zoomOut −\n common.resetZoom min-h-[360px] transition-[height] duration-150 data-mermaid-wrapper inset-0 w-full text-center justify-center min-h-full mermaid-loading mermaid-spinner diagram… mermaid-block-header bg-gray-800 bg-gray-50 space-x-2 icon-slot h-4 w-4 flex-shrink-0 space-x-1 px-2.5 bg-gray-600 text-gray-200 text-gray-700 text-gray-500 common.preview source common.source m16 opacity-50 common.export m7 m14 p-4 text-gray-300 whitespace-pre-wrap mermaid-error data-markstream-mermaid hasRenderedOnce markstream-octane mermaid-modal-overlay dialog aria-modal mermaid-modal-header mermaid-modal-title mermaid-modal-close common.close mermaid-modal-body mermaid-modal-content available abort library in rendered text-red-500 transform ease center data-markstream-infographic data-markstream-mode hasPreview cursor-not-allowed infographic-preview transition-all duration-100 overflow-auto text-left isDragging fixed z-50 bg-black/70 dialog-panel h-full max-w-full max-h-full shadow-lg top-6 right-6 inline-flex !isDragging class=\"inline-code text-[85%] px-1 py-0.5 bg-[hsl(var(--secondary))] whitespace-normal break-words text-node-stream-delta text-node-stream-delta--a text-node-stream-delta--b class=\"unknown-node italic\">\n node type:\n paragraph paragraph-node child.type renderNode ctx mouseenter mouseleave class=\"reference-node bg-[hsl(var(--muted))] px-1.5 mx-0.5 $$mouseenter $$mouseleave $$keydown class=\"table-node-wrapper\"><table><!><thead class=\"border-[var(--table-border,#cbd5e1)]\"><tr p-[calc(4/7*1em)] table-node__resize-handle rowIdx bodyRows.length aria-busy pointermove pointerup pointercancel my-8 isLoading table-node__loading status aria-live polite table-node__spinner sr-only animationend $$animationend text-node node.center zoom class=\"admonition-header\"><!><span note admonition-icon admonition-toggle aria-expanded aria-controls collapsed admonition-content aria-labelledby node.type next.maxHeight infographic language boolean code_block html_inline text_special heading list_item definition_list footnote footnote_reference footnote_anchor admonition hardbreak inline_code emphasis strikethrough highlight insert subscript superscript checkbox checkbox_input emoji thematic_break math_inline math_block reference html_block vmr_container label_open label_close class=\"hr-node dark window.matchMedia ms-tooltip z-[9999] inline-block text-base py-2 px-3 shadow-md whitespace-nowrap pointer-events-none tooltip-element text-white border-gray-700 is-dark tooltip javascript typescript go python ruby shell powershell d2 plain cpp csharp objectivec objectivecpp yaml markdown rust kotlin plaintext zsh objective-c objective-cpp diff java php sql cannot delete global clearGlobalCustomComponents was provided streamingComponents entry will be used parser-backed [katexWorkerClient] init cache-hit timeout waiting slot target rel infinite node.title link-loading items-baseline gap-1.5 link-text-wrapper leading-[normal] link-text link-loading-indicator noopener noreferrer class=\"math-block overflow-x-auto math-rendering globalThis.requestAnimationFrame globalThis.cancelAnimationFrame $$ math-inline__loading math-inline__spinner data-language data-markstream-line-numbers !options.preserveBlankKind added context markstream-pre__diff-pane--inline original markstream-pre__diff-pane--original modified markstream-pre__diff-pane--modified removed no markstream-pre__diff-code markstream-pre__diff-line markstream-pre__diff-rail markstream-pre__diff-number markstream-pre__diff-content markstream-pre__diff-content-inner markstream-pre__line-numbers markstream-pre__line-numbers-text markstream-pre__code class children key sequencediagram classdiagram kind statediagram erdiagram flowchart graph module did expected normalizedType document role aria-describedby thinking indexKey prototype constructor °C viteEnv.MODE development process markstream-octane-d2 class=\"code-editor-layer\"><div></div><div code-height-placeholder code-fallback-plain m-0 style.visibility theme themes themeType languages stream disableFileHeader onThemeChange renderCustomHeader renderHeaderMetadata renderHeaderPrefix wrap split line-info night moon black dracula mocha frappe macchiato palenight ocean poimandres monokai laserwave tokyo slack-dark rose-pine github-dark material-theme one-dark catppuccin-mocha catppuccin-frappe catppuccin-macchiato transparent visible max-height height onDidUpdateDiff onDidContentSizeChange onDidLayoutChange window.MutationObserver record.type resolvedOptions.padding vitesse-dark vitesse-light monospace unified fontSize lineHeight maxHeight paddingBottom paddingTop tabSize resolvedOptions.overflow fontFamily nextOptions.unsafeCSS [data-file] [data-diff] canonicalLanguage single window.cancelAnimationFrame clientX navigator.clipboard navigator.clipboard.writeText code-block-container code-block-header flex-1 truncate code-action-btn evenodd code-loading-placeholder loading-skeleton skeleton-line short next next.type window.requestIdleCallback [data-node-index] node-spacer data-custom-id node-slot data-node-index data-node-type fade-node node-placeholder typewriter-cursor [data-node-type="code_block"] [data-node-type="admonition"] [data-node-type="table"] [data-node-type="math_block"] [data-node-type="html_block"] [data-node-type="image"] performance [markstream-octane][perf] markdown-renderer katex value?.useMonaco stream-diffs/markstream stream-diffs runtime cite`;
1
+ export const safeList = `octane class=\"checkbox-node\"><input error [mermaidWorkerClient] messageerror cleared worker instance inject via busy call timed out canParse findPrefix class=\"admonition-header\"><!><span data-index-key id typeof note admonition-icon admonition-toggle aria-expanded aria-controls collapsed admonition-content aria-labelledby [markstream-octane] htmlPreviewSandbox contains both allow-scripts and this only fully trusted content served an isolated string en utf-8 viewport content="width=device-width initial-scale=1 event.key html-preview-frame__header html-preview-frame__title html-preview-frame__dot html-preview-frame__label ×\n html-preview-frame__iframe no-referrer about:blank class=\"table-node-wrapper\"><table><!><thead class=\"border-[var(--table-border,#cbd5e1)]\"><tr font-semibold p-[calc(4/7*1em)] table-node__resize-handle aria-label rowIdx bodyRows.length auto aria-busy clsx text-left pointermove pointerup pointercancel my-8 text-sm isLoading table-node__loading status aria-live polite table-node__spinner sr-only dependency is not install it to enable heading-node object html-block-node ref className stream-markdown-parser safe escape html-block html-block-node__placeholder html-block-node__placeholder-bar w-4/5 w-2/3 class=\"inline-code inline text-[85%] px-1 py-0.5 rounded font-mono bg-[hsl(var(--secondary))] whitespace-normal break-words text-node-stream-delta text-node-stream-delta--a text-node-stream-delta--b markstream-core mermaid none loose strict hidden viewBox gantt top open-modal keydown fullscreen [data-mermaid-wrapper] mermaid-action-btn p-2 text-xs text-gray-400 hover:bg-gray-700 hover:text-gray-200 text-gray-600 hover:bg-gray-200 hover:text-gray-700 toggle-mode preview touch relative absolute top-2 right-2 z-10 rounded-lg flex items-center gap-2 backdrop-blur transition-colors common.zoomIn common.zoomOut −\n common.resetZoom min-h-[360px] overflow-hidden block transition-[height] duration-150 data-mermaid-wrapper inset-0 w-full text-center justify-center min-h-full mermaid-loading mermaid-spinner diagram… mermaid-block-header justify-between px-4 py-2.5 border-b bg-gray-800 border-gray-700/30 bg-gray-50 border-gray-200 space-x-2 icon-slot h-4 w-4 flex-shrink-0 font-medium space-x-1 rounded-md px-2.5 py-1 bg-gray-600 text-gray-200 shadow-sm bg-white text-gray-700 text-gray-500 common.preview aria-hidden w-3 h-3 currentColor round source common.source m16 aria-pressed m9 opacity-50 common.export m7 m14 p-4 bg-gray-900 text-gray-300 whitespace-pre-wrap mermaid-error data-markstream-mermaid showSource hasRenderedOnce my-4 border markstream-octane mermaid-modal-overlay dialog aria-modal mermaid-modal-header mermaid-modal-title mermaid-modal-close common.close mermaid-modal-body mermaid-modal-content available abort name markstream-d2-root-svg number window.requestAnimationFrame d2InstanceRef.current instance.render throw new missing render returned empty d2-block text-gray-100 text-gray-900 d2-block-header border-gray-400/5 gap-x-2 gap-x-1 mode-btn px-2 !showSource d2-action-btn hover:bg-[var(--vscode-editor-selectionBackground)] d2-block-body d2-source py-4 d2-code d2-error mt-2 d2-render d2-svg pb-3 class=\"mb-4\"><dt class=\"definition-term font-semibold\"></dt><dd class=\"definition-desc definition mb-4 dt definition-term dd definition-desc ml-4 token.type child value ms-html text self_closing tag_open tag_close parse html-inline dynamic template html-inline-node html-inline-node--loading class=\"unknown-node italic\">\n node type:\n class=\"list-item pl-1.5 list-item node.type next.maxHeight infographic language boolean code_block html_inline paragraph text_special heading list list_item definition_list footnote footnote_reference footnote_anchor admonition hardbreak image inline_code emphasis strikethrough highlight insert subscript superscript checkbox checkbox_input emoji thematic_break math_inline math_block reference html_block vmr_container label_open label_close ?? paragraph-node child.type renderNode ctx cannot delete global clearGlobalCustomComponents was provided in streamingComponents entry will be used parser-backed primary fallback failed async placeholder image-node__placeholder image-node__spinner image-node__placeholder-text image… image-node__error load list-node my-5 pl-[calc(13/8*1em)] list-decimal list-disc max-lg:my-[calc(4/3*1em)] max-lg:pl-[calc(14/9*1em)] click class=\"footnote-anchor hover:underline cursor-pointer\">\n ↩︎\n $$click href smooth mouseenter mouseleave class=\"reference-node cursor-pointer bg-[hsl(var(--muted))] px-1.5 mx-0.5 $$mouseenter $$mouseleave $$keydown class=\"footnote-node leading-relaxed border-t border-[var(--footnote-border,#eaecef)] pt-2\"><div library rendered text-red-500 transform ease center data-markstream-infographic data-markstream-mode hasPreview cursor-not-allowed infographic-preview transition-all duration-100 overflow-auto isDragging fixed z-50 bg-black/70 dialog-panel h-full max-w-full max-h-full shadow-lg top-6 right-6 inline-flex !isDragging class=\"footnote-reference\"><span>\n footnote-link animationend $$animationend text-node node.center zoom class=\"hr-node dark window.matchMedia ms-tooltip z-[9999] inline-block text-base py-2 px-3 shadow-md whitespace-nowrap pointer-events-none tooltip-element text-white border-gray-700 is-dark tooltip [katexWorkerClient] init cache-hit timeout waiting slot javascript typescript go python ruby shell powershell d2 plain cpp csharp objectivec objectivecpp yaml markdown rust kotlin plaintext zsh objective-c objective-cpp diff java php sql class=\"math-block overflow-x-auto math-rendering thinking document class children key module did expected normalizedType viteEnv.MODE development process markstream-octane-d2 role aria-describedby globalThis.requestAnimationFrame globalThis.cancelAnimationFrame sequencediagram classdiagram kind statediagram erdiagram flowchart graph data-language data-markstream-line-numbers !options.preserveBlankKind added context markstream-pre__diff-pane--inline original markstream-pre__diff-pane--original modified markstream-pre__diff-pane--modified removed no markstream-pre__diff-code markstream-pre__diff-line markstream-pre__diff-rail markstream-pre__diff-number markstream-pre__diff-content markstream-pre__diff-content-inner markstream-pre__line-numbers markstream-pre__line-numbers-text markstream-pre__code $$ math-inline__loading math-inline__spinner indexKey prototype constructor °C target rel infinite node.title link-loading items-baseline gap-1.5 link-text-wrapper leading-[normal] link-text link-loading-indicator noopener noreferrer next next.type window.requestIdleCallback [data-node-index] node-spacer data-custom-id node-slot data-node-index data-node-type fade-node node-placeholder typewriter-cursor [data-node-type="code_block"] [data-node-type="admonition"] [data-node-type="table"] [data-node-type="math_block"] [data-node-type="html_block"] [data-node-type="image"] performance [markstream-octane][perf] markdown-renderer katex class=\"code-editor-layer\"><div></div><div code-height-placeholder code-fallback-plain m-0 style.visibility theme themes themeType languages stream disableFileHeader onThemeChange renderCustomHeader renderHeaderMetadata renderHeaderPrefix wrap split line-info night moon black dracula mocha frappe macchiato palenight ocean poimandres monokai laserwave tokyo slack-dark rose-pine github-dark material-theme one-dark catppuccin-mocha catppuccin-frappe catppuccin-macchiato transparent visible max-height height onDidUpdateDiff onDidContentSizeChange onDidLayoutChange window.MutationObserver record.type resolvedOptions.padding vitesse-dark vitesse-light monospace unified fontSize lineHeight maxHeight paddingBottom paddingTop tabSize resolvedOptions.overflow fontFamily nextOptions.unsafeCSS [data-file] [data-diff] canonicalLanguage single window.cancelAnimationFrame clientX navigator.clipboard navigator.clipboard.writeText code-block-container code-block-header flex-1 truncate code-action-btn evenodd code-loading-placeholder loading-skeleton skeleton-line short value?.useMonaco stream-diffs/markstream stream-diffs runtime cite`;
2
2
  export default safeList;
@@ -69,6 +69,8 @@ export interface CodeBlockOptions {
69
69
  export interface CodeBlockNodeProps extends CommonCodeBlockProps {
70
70
  node: CodeBlockNode;
71
71
  codeBlockOptions?: CodeBlockOptions;
72
+ /** Overrides browser clipboard writes. Copy feedback and events wait for completion. */
73
+ clipboardWriter?: (text: string) => void | Promise<void>;
72
74
  isDark?: boolean;
73
75
  loading?: boolean;
74
76
  stream?: boolean;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "markstream-octane",
3
3
  "type": "module",
4
- "version": "2.0.17",
4
+ "version": "2.0.18",
5
5
  "description": "Octane 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 Octane components.",
6
6
  "author": "Simon He",
7
7
  "license": "MIT",
@@ -104,7 +104,7 @@
104
104
  "dependencies": {
105
105
  "@floating-ui/dom": "^1.8.0",
106
106
  "clsx": "^2.1.1",
107
- "markstream-core": "2.0.17",
107
+ "markstream-core": "2.0.18",
108
108
  "stream-markdown-parser": "1.2.19"
109
109
  },
110
110
  "devDependencies": {