import type { Component, Snippet } from 'svelte'; import type { MermaidConfig } from 'mermaid'; import type { KatexOptions } from 'katex'; import type { ThemeRegistration } from 'shiki'; import type { Tokens } from 'marked'; import type { DeepPartialTheme, Theme } from '../theme.js'; import type { LanguageInfo } from '../utils/bundledLanguages.js'; import type { StreamdownTranslations } from '../translations.js'; import type { AllowedTags } from '../security/types.js'; import { carets } from '../streaming.js'; import type { PluginConfig, ThemeInput } from '../plugins.js'; import type { AllowElement, UrlTransform } from '../markdown.js'; import type { RemendOptions } from '@streamdown-svelte/remend'; import type { AlertToken, CitationToken, Extension, GenericToken, MathToken, MdxToken, SubSupToken, TableToken, TBody, TD, TFoot, TH, THead, THeadRow, TRow } from '../marked/index.js'; import type { ListItemToken, ListToken } from '../marked/marked-list.js'; import type { Footnote, FootnoteRef, FootnoteToken } from '../marked/marked-footnotes.js'; import type { DescriptionDetailToken, DescriptionListToken, DescriptionTermToken, DescriptionToken } from '../marked/marked-dl.js'; export interface AnimateOptions { animation?: 'fadeIn' | 'blurIn' | 'slideUp' | (string & {}); duration?: number; easing?: string; sep?: 'word' | 'char'; stagger?: number; } export interface LinkSafetyModalProps { url: string; isOpen: boolean; onClose: () => void; onConfirm: () => void; } export interface LinkSafetyConfig { enabled?: boolean; onLinkCheck?: (href: string) => boolean | Promise; renderModal?: (props: LinkSafetyModalProps) => unknown; } export type { AllowedTags } from '../security/types.js'; export type BlockProps = { content: string; shouldParseIncompleteMarkdown: boolean; shouldNormalizeHtmlIndentation: boolean; index: number; isIncomplete: boolean; dir?: 'ltr' | 'rtl'; children?: Snippet; }; export interface ResolvedAnimationConfig { enabled: boolean; animateOnMount?: boolean; type?: string; duration?: number; timingFunction?: string; tokenize?: 'word' | 'char'; stagger?: number; } export type TableControlsConfig = boolean | { copy?: boolean; download?: boolean; fullscreen?: boolean; }; export type CodeControlsConfig = boolean | { copy?: boolean; download?: boolean; }; export type MermaidControls = boolean | { download?: boolean; fullscreen?: boolean; panZoom?: boolean; mouseWheelZoom?: boolean; }; export type StreamdownControlsConfig = boolean | { code?: CodeControlsConfig; mermaid?: MermaidControls; table?: TableControlsConfig; }; export type ControlsConfig = StreamdownControlsConfig; export type NormalizedMermaidControls = { enabled: boolean; download: boolean; fullscreen: boolean; panZoom: boolean; mouseWheelZoom: boolean; }; export type MermaidErrorComponentProps = { chart: string; error: string; id: string; retry: () => void; }; export interface MermaidOptions { config?: MermaidConfig; errorComponent?: Component; } export interface IconMap { CheckIcon?: Snippet<[]>; CopyIcon?: Snippet<[]>; DownloadIcon?: Snippet<[]>; ExternalLinkIcon?: Snippet<[]>; Loader2Icon?: Snippet<[]>; Maximize2Icon?: Snippet<[]>; RotateCcwIcon?: Snippet<[]>; XIcon?: Snippet<[]>; ZoomInIcon?: Snippet<[]>; ZoomOutIcon?: Snippet<[]>; check?: Snippet<[]>; copy?: Snippet<[]>; download?: Snippet<[]>; fullscreen?: Snippet<[]>; zoomIn?: Snippet<[]>; zoomOut?: Snippet<[]>; fitView?: Snippet<[]>; note?: Snippet<[]>; tip?: Snippet<[]>; warning?: Snippet<[]>; caution?: Snippet<[]>; important?: Snippet<[]>; chevronLeft?: Snippet<[]>; chevronRight?: Snippet<[]>; } type TokenSnippet = { heading: Tokens.Heading; paragraph: Tokens.Paragraph; blockquote: Tokens.Blockquote; code: Tokens.Code; codespan: Tokens.Codespan; ul: ListToken; ol: ListToken; li: ListItemToken; table: TableToken; thead: THead; tbody: TBody; tfoot: TFoot; tr: THeadRow | TRow; td: TD; th: TH; image: Tokens.Image; link: Tokens.Link; strong: Tokens.Strong; em: Tokens.Em; del: Tokens.Del; hr: Tokens.Hr; br: Tokens.Br; math: MathToken; alert: AlertToken; mermaid: Tokens.Code; footnoteRef: FootnoteRef; footnotePopover: FootnoteToken; sup: SubSupToken; sub: SubSupToken; descriptionList: DescriptionListToken; description: DescriptionToken; descriptionTerm: DescriptionTermToken; descriptionDetail: DescriptionDetailToken; inlineCitation: CitationToken; inlineCitationPopover: CitationToken; inlineCitationContent: CitationToken; inlineCitationPreview: CitationToken; mdx: MdxToken; }; type PredefinedElements = keyof TokenSnippet; export type Snippets = Record> = { [K in PredefinedElements]?: Snippet<[ { children: Snippet; token: TokenSnippet[K]; } & (K extends 'inlineCitationContent' ? { source: Source; key: string; } : K extends 'mdx' ? { props: Record; } : {}) ]>; }; export type CompatSnippetKeys = Record> = keyof Omit, 'mermaid'>; type ComponentOverrideProps = { children?: Snippet; token: Token; class?: string; style?: string; }; type HeadingComponentProps = ComponentOverrideProps; type ParagraphComponentProps = ComponentOverrideProps; type LinkComponentProps = ComponentOverrideProps & { href?: string; target?: string; rel?: string; title?: string | null; }; type ImageComponentProps = ComponentOverrideProps & { src?: string | null; alt?: string; onload?: () => void; onerror?: () => void; }; type BlockquoteComponentProps = ComponentOverrideProps; type ListComponentProps = ComponentOverrideProps; type ListItemComponentProps = ComponentOverrideProps; type TableComponentProps = ComponentOverrideProps; type TableHeadComponentProps = ComponentOverrideProps; type TableBodyComponentProps = ComponentOverrideProps; type TableFootComponentProps = ComponentOverrideProps; type TableRowComponentProps = ComponentOverrideProps; type TableCellComponentProps = ComponentOverrideProps; type TableHeaderCellComponentProps = ComponentOverrideProps; type InlineCodeComponentProps = ComponentOverrideProps; type StrongComponentProps = ComponentOverrideProps; type EmphasisComponentProps = ComponentOverrideProps; type DeleteComponentProps = ComponentOverrideProps; type HrComponentProps = ComponentOverrideProps; type BrComponentProps = ComponentOverrideProps; type SubSupComponentProps = ComponentOverrideProps; export type Components = { h1?: Component; h2?: Component; h3?: Component; h4?: Component; h5?: Component; h6?: Component; p?: Component; blockquote?: Component; a?: Component; img?: Component; ul?: Component; ol?: Component; li?: Component; table?: Component; thead?: Component; tbody?: Component; tfoot?: Component; tr?: Component; td?: Component; th?: Component; inlineCode?: Component; strong?: Component; em?: Component; del?: Component; hr?: Component; br?: Component; sub?: Component; sup?: Component; code?: Component<{ token: Tokens.Code; id: string; }, any, any>; mermaid?: Component<{ token: Tokens.Code; id: string; }, any, any>; mermaidError?: Component; math?: Component<{ token: MathToken; id: string; }, any, any>; }; export type StreamdownComponents = Components; export type StreamdownProps = Record> = { streamdown?: StreamdownContext; static?: boolean; mode?: 'static' | 'streaming'; isAnimating?: boolean; animated?: boolean | AnimateOptions; caret?: keyof typeof carets; onAnimationStart?: () => void; onAnimationEnd?: () => void; BlockComponent?: Component; parseMarkdownIntoBlocksFn?: (markdown: string) => string[]; dir?: 'auto' | 'ltr' | 'rtl'; sources?: { [key: string]: Source; }; inlineCitationsMode?: 'list' | 'carousel'; element?: HTMLElement; content: string; class?: string; className?: string; parseIncompleteMarkdown?: boolean; remend?: RemendOptions; defaultOrigin?: string; allowedLinkPrefixes?: string[]; allowedImagePrefixes?: string[]; linkSafety?: LinkSafetyConfig; allowedTags?: AllowedTags; allowedElements?: readonly string[]; allowElement?: AllowElement; disallowedElements?: readonly string[]; literalTagContent?: string[]; normalizeHtmlIndentation?: boolean; skipHtml?: boolean; unwrapDisallowed?: boolean; urlTransform?: UrlTransform; prefix?: string; lineNumbers?: boolean; theme?: DeepPartialTheme; baseTheme?: 'tailwind' | 'shadcn'; mergeTheme?: boolean; shikiTheme?: ThemeInput | [ThemeInput, ThemeInput]; shikiLanguages?: LanguageInfo[]; shikiThemes?: Record; mermaid?: MermaidOptions; mermaidConfig?: MermaidConfig; katexConfig?: KatexOptions | ((inline: boolean) => KatexOptions); plugins?: PluginConfig; translations?: Partial; controls?: ControlsConfig; renderHtml?: boolean | ((token: Tokens.HTML | Tokens.Tag) => string); animation?: { animateOnMount?: boolean; enabled?: boolean; type?: 'fade' | 'blur' | 'slideUp' | 'slideDown'; duration?: number; timingFunction?: 'ease' | 'ease-in' | 'ease-out' | 'ease-in-out' | 'linear'; tokenize?: 'word' | 'char'; stagger?: number; }; icons?: Partial; extensions?: Extension[]; children?: Snippet<[ { streamdown: StreamdownContext; token: GenericToken; children: Snippet; } ]>; mdxComponents?: Record>; components?: Components; } & Partial, 'mermaid'>>; export interface StreamdownContext = Record> extends Omit, CompatSnippetKeys | 'animation' | 'class' | 'theme' | 'shikiTheme' | 'inlineCitationsMode' | 'translations'> { snippets: Snippets; shikiTheme: string; theme: Theme; translations: StreamdownTranslations; lineNumbers: boolean; isAnimating: boolean; controls: { code: boolean; mermaid: NormalizedMermaidControls; table: TableControlsConfig; }; plugins?: PluginConfig; codeControls: { copy: boolean; download: boolean; }; inlineCitationsMode: 'list' | 'carousel'; mode: 'static' | 'streaming'; animation: ResolvedAnimationConfig; footnotes: { refs: Map; footnotes: Map; }; } export type StreamdownContextInit = Record> = Omit, CompatSnippetKeys | 'animation' | 'class' | 'theme' | 'shikiTheme' | 'inlineCitationsMode' | 'translations'> & { snippets: Snippets; shikiTheme: string; theme: Theme | DeepPartialTheme | undefined; translations: StreamdownTranslations; lineNumbers: boolean; isAnimating: boolean; controls: { code: boolean; mermaid: NormalizedMermaidControls; table: TableControlsConfig; }; codeControls: { copy: boolean; download: boolean; }; inlineCitationsMode: 'list' | 'carousel'; animation: ResolvedAnimationConfig; }; export declare const normalizeMermaidControls: (controls: MermaidControls | undefined) => NormalizedMermaidControls;