streamdown 1.4.0 → 1.5.0

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/README.md CHANGED
@@ -38,7 +38,7 @@ Make sure the path matches the location of the `node_modules` folder in your pro
38
38
 
39
39
  ## Usage
40
40
 
41
- ### Basic Example
41
+ You can use Streamdown in your React application like this:
42
42
 
43
43
  ```tsx
44
44
  import { Streamdown } from 'streamdown';
@@ -50,198 +50,4 @@ export default function Page() {
50
50
  }
51
51
  ```
52
52
 
53
- ### Mermaid Diagrams
54
-
55
- Streamdown supports Mermaid diagrams using the `mermaid` language identifier:
56
-
57
- ```tsx
58
- import { Streamdown } from 'streamdown';
59
- import type { MermaidConfig } from 'mermaid';
60
-
61
- export default function Page() {
62
- const markdown = `
63
- # Flowchart Example
64
-
65
- \`\`\`mermaid
66
- graph TD
67
- A[Start] --> B{Is it working?}
68
- B -->|Yes| C[Great!]
69
- B -->|No| D[Debug]
70
- D --> B
71
- \`\`\`
72
-
73
- # Sequence Diagram
74
-
75
- \`\`\`mermaid
76
- sequenceDiagram
77
- participant User
78
- participant API
79
- participant Database
80
-
81
- User->>API: Request data
82
- API->>Database: Query
83
- Database-->>API: Results
84
- API-->>User: Response
85
- \`\`\`
86
- `;
87
-
88
- // Optional: Customize Mermaid theme and colors
89
- const mermaidConfig: MermaidConfig = {
90
- theme: 'dark',
91
- themeVariables: {
92
- primaryColor: '#ff0000',
93
- primaryTextColor: '#fff'
94
- }
95
- };
96
-
97
- return (
98
- <Streamdown mermaidConfig={mermaidConfig}>
99
- {markdown}
100
- </Streamdown>
101
- );
102
- }
103
- ```
104
-
105
- ### With AI SDK
106
-
107
- ```tsx
108
- 'use client';
109
-
110
- import { useChat } from '@ai-sdk/react';
111
- import { useState } from 'react';
112
- import { Streamdown } from 'streamdown';
113
-
114
- export default function Page() {
115
- const { messages, sendMessage, status } = useChat();
116
- const [input, setInput] = useState('');
117
-
118
- return (
119
- <>
120
- {messages.map(message => (
121
- <div key={message.id}>
122
- {message.parts.filter(part => part.type === 'text').map((part, index) => (
123
- <Streamdown isAnimating={status === 'streaming'} key={index}>{part.text}</Streamdown>
124
- ))}
125
- </div>
126
- ))}
127
-
128
- <form
129
- onSubmit={e => {
130
- e.preventDefault();
131
- if (input.trim()) {
132
- sendMessage({ text: input });
133
- setInput('');
134
- }
135
- }}
136
- >
137
- <input
138
- value={input}
139
- onChange={e => setInput(e.target.value)}
140
- disabled={status !== 'ready'}
141
- placeholder="Say something..."
142
- />
143
- <button type="submit" disabled={status !== 'ready'}>
144
- Submit
145
- </button>
146
- </form>
147
- </>
148
- );
149
- }
150
- ```
151
-
152
- ### Customizing Plugins
153
-
154
- When you need to override the default plugins (e.g., to configure security settings), you can import the default plugin configurations and selectively modify them:
155
-
156
- ```tsx
157
- import { Streamdown, defaultRehypePlugins } from 'streamdown';
158
- import { harden } from 'rehype-harden';
159
-
160
- export default function Page() {
161
- const markdown = `
162
- [Safe link](https://example.com)
163
- [Unsafe link](https://malicious-site.com)
164
- `;
165
-
166
- return (
167
- <Streamdown
168
- rehypePlugins={[
169
- defaultRehypePlugins.raw,
170
- defaultRehypePlugins.katex,
171
- [
172
- harden,
173
- {
174
- defaultOrigin: 'https://example.com',
175
- allowedLinkPrefixes: ['https://example.com'],
176
- },
177
- ],
178
- ]}
179
- >
180
- {markdown}
181
- </Streamdown>
182
- );
183
- }
184
- ```
185
-
186
- The `defaultRehypePlugins` and `defaultRemarkPlugins` exports provide access to:
187
-
188
- **defaultRehypePlugins:**
189
- - `harden` - Security hardening with rehype-harden (configured with wildcard permissions by default)
190
- - `raw` - HTML support
191
- - `katex` - Math rendering with KaTeX
192
-
193
- **defaultRemarkPlugins:**
194
- - `gfm` - GitHub Flavored Markdown support
195
- - `math` - Math syntax support
196
-
197
- ## Props
198
-
199
- Streamdown accepts all the same props as react-markdown, plus additional streaming-specific options:
200
-
201
- | Prop | Type | Default | Description |
202
- |------|------|---------|-------------|
203
- | `children` | `string` | - | The Markdown content to render |
204
- | `parseIncompleteMarkdown` | `boolean` | `true` | Parse and style unterminated Markdown blocks |
205
- | `className` | `string` | - | CSS class for the container |
206
- | `components` | `object` | - | Custom component overrides |
207
- | `rehypePlugins` | `array` | `[[harden, { allowedImagePrefixes: ["*"], allowedLinkPrefixes: ["*"], defaultOrigin: undefined }], rehypeRaw, [rehypeKatex, { errorColor: "var(--color-muted-foreground)" }]]` | Rehype plugins to use. Includes rehype-harden for security, rehype-raw for HTML support, and rehype-katex for math rendering by default |
208
- | `remarkPlugins` | `array` | `[[remarkGfm, {}], [remarkMath, { singleDollarTextMath: false }]]` | Remark plugins to use. Includes GitHub Flavored Markdown and math support by default |
209
- | `shikiTheme` | `[BundledTheme, BundledTheme]` | `['github-light', 'github-dark']` | The light and dark themes to use for code blocks |
210
- | `mermaidConfig` | `MermaidConfig` | - | Custom configuration for Mermaid diagrams (theme, colors, etc.) |
211
- | `controls` | `boolean \| { table?: boolean, code?: boolean, mermaid?: boolean }` | `true` | Control visibility of copy/download buttons |
212
- | `isAnimating` | `boolean` | `false` | Whether the component is currently animating. This is used to disable the copy and download buttons when the component is animating. |
213
-
214
- ## Architecture
215
-
216
- Streamdown is built as a monorepo with:
217
-
218
- - **`packages/streamdown`** - The core React component library
219
- - **`apps/website`** - Documentation and demo site
220
-
221
- ## Development
222
-
223
- ```bash
224
- # Install dependencies
225
- pnpm install
226
-
227
- # Build the streamdown package
228
- pnpm --filter streamdown build
229
-
230
- # Run development server
231
- pnpm dev
232
-
233
- # Run tests
234
- pnpm test
235
-
236
- # Build packages
237
- pnpm build
238
- ```
239
-
240
- ## Requirements
241
-
242
- - Node.js >= 18
243
- - React >= 19.1.1
244
-
245
- ## Contributing
246
-
247
- Contributions are welcome! Please feel free to submit a Pull Request.
53
+ For more info, see the [documentation](https://streamdown.ai/docs).
package/dist/index.cjs CHANGED
@@ -1,15 +1,18 @@
1
- "use strict";"use client";var Ge=Object.create;var q=Object.defineProperty;var Ke=Object.getOwnPropertyDescriptor;var Qe=Object.getOwnPropertyNames;var Ye=Object.getPrototypeOf,Ze=Object.prototype.hasOwnProperty;var et=(e,t)=>{for(var o in t)q(e,o,{get:t[o],enumerable:!0})},K=(e,t,o,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Qe(t))!Ze.call(e,r)&&r!==o&&q(e,r,{get:()=>t[r],enumerable:!(n=Ke(t,r))||n.enumerable});return e};var x=(e,t,o)=>(o=e!=null?Ge(Ye(e)):{},K(t||!e||!e.__esModule?q(o,"default",{value:e,enumerable:!0}):o,e)),tt=e=>K(q({},"__esModule",{value:!0}),e);var Lt={};et(Lt,{ControlsContext:()=>D,MermaidConfigContext:()=>O,ShikiThemeContext:()=>E,Streamdown:()=>Ve,StreamdownRuntimeContext:()=>I,defaultRehypePlugins:()=>Xe,defaultRemarkPlugins:()=>Je});module.exports=tt(Lt);var M=require("react"),Ee=x(require("react-markdown"),1),_e=x(require("rehype-katex"),1),Oe=x(require("rehype-raw"),1),We=x(require("remark-gfm"),1),Ue=x(require("remark-math"),1),Qt=require("katex/dist/katex.min.css"),ze=require("rehype-harden");var g=require("react");var A=require("lucide-react"),y=require("react"),R=require("shiki"),ee=require("shiki/engine/javascript");var Q=require("clsx"),Y=require("tailwind-merge"),p=(...e)=>(0,Y.twMerge)((0,Q.clsx)(e)),H=(e,t,o)=>{let n=typeof t=="string"?new Blob([t],{type:o}):t,r=URL.createObjectURL(n),s=document.createElement("a");s.href=r,s.download=e,document.body.appendChild(s),s.click(),document.body.removeChild(s),URL.revokeObjectURL(r)};var w=require("react/jsx-runtime"),ot=/<pre(\s|>)/,X=(0,y.createContext)({code:""}),z=class{constructor(){this.lightHighlighter=null;this.darkHighlighter=null;this.lightTheme=null;this.darkTheme=null;this.loadedLanguages=new Set;this.initializationPromise=null}isLanguageSupported(t){return Object.hasOwn(R.bundledLanguages,t)}getFallbackLanguage(){return"text"}async ensureHighlightersInitialized(t,o){var c,u;let[n,r]=t,s=(0,ee.createJavaScriptRegexEngine)({forgiving:!0}),i=!this.lightHighlighter||this.lightTheme!==n,d=!this.darkHighlighter||this.darkTheme!==r;(i||d)&&this.loadedLanguages.clear();let a=this.isLanguageSupported(o),l=!this.loadedLanguages.has(o)&&a;if(i?(this.lightHighlighter=await(0,R.createHighlighter)({themes:[n],langs:a?[o]:[],engine:s}),this.lightTheme=n,a&&this.loadedLanguages.add(o)):l&&await((c=this.lightHighlighter)==null?void 0:c.loadLanguage(o)),d){let b=l?[...this.loadedLanguages].concat(a?[o]:[]):Array.from(this.loadedLanguages);this.darkHighlighter=await(0,R.createHighlighter)({themes:[r],langs:b.length>0?b:a?[o]:[],engine:s}),this.darkTheme=r}else l&&await((u=this.darkHighlighter)==null?void 0:u.loadLanguage(o));l&&this.loadedLanguages.add(o)}async highlightCode(t,o,n,r){var u,b;this.initializationPromise&&await this.initializationPromise,this.initializationPromise=this.ensureHighlightersInitialized(n,o),await this.initializationPromise,this.initializationPromise=null;let[s,i]=n,d=this.isLanguageSupported(o)?o:this.getFallbackLanguage(),a=(u=this.lightHighlighter)==null?void 0:u.codeToHtml(t,{lang:d,theme:s}),l=(b=this.darkHighlighter)==null?void 0:b.codeToHtml(t,{lang:d,theme:i}),c=f=>r?f.replace(ot,`<pre class="${r}"$1`):f;return[c(a),c(l)]}},nt=new z,te=({code:e,language:t,className:o,children:n,preClassName:r,...s})=>{let[i,d]=(0,y.useState)(""),[a,l]=(0,y.useState)(""),c=(0,y.useRef)(!1),[u,b]=(0,y.useContext)(E);return(0,y.useEffect)(()=>(c.current=!0,nt.highlightCode(e,t,[u,b],r).then(([f,h])=>{c.current&&(d(f),l(h))}),()=>{c.current=!1}),[e,t,u,b,r]),(0,w.jsx)(X.Provider,{value:{code:e},children:(0,w.jsxs)("div",{className:"my-4 w-full overflow-hidden rounded-xl border","data-code-block-container":!0,"data-language":t,children:[(0,w.jsxs)("div",{className:"flex items-center justify-between bg-muted/80 p-3 text-muted-foreground text-xs","data-code-block-header":!0,"data-language":t,children:[(0,w.jsx)("span",{className:"ml-1 font-mono lowercase",children:t}),(0,w.jsx)("div",{className:"flex items-center gap-2",children:n})]}),(0,w.jsx)("div",{className:"w-full",children:(0,w.jsxs)("div",{className:"min-w-full",children:[(0,w.jsx)("div",{className:p("overflow-x-auto dark:hidden",o),dangerouslySetInnerHTML:{__html:i},"data-code-block":!0,"data-language":t,...s}),(0,w.jsx)("div",{className:p("hidden overflow-x-auto dark:block",o),dangerouslySetInnerHTML:{__html:a},"data-code-block":!0,"data-language":t,...s})]})})]})})},Z={"1c":"1c","1c-query":"1cq",abap:"abap","actionscript-3":"as",ada:"ada",adoc:"adoc","angular-html":"html","angular-ts":"ts",apache:"conf",apex:"cls",apl:"apl",applescript:"applescript",ara:"ara",asciidoc:"adoc",asm:"asm",astro:"astro",awk:"awk",ballerina:"bal",bash:"sh",bat:"bat",batch:"bat",be:"be",beancount:"beancount",berry:"berry",bibtex:"bib",bicep:"bicep",blade:"blade.php",bsl:"bsl",c:"c","c#":"cs","c++":"cpp",cadence:"cdc",cairo:"cairo",cdc:"cdc",clarity:"clar",clj:"clj",clojure:"clj","closure-templates":"soy",cmake:"cmake",cmd:"cmd",cobol:"cob",codeowners:"CODEOWNERS",codeql:"ql",coffee:"coffee",coffeescript:"coffee","common-lisp":"lisp",console:"sh",coq:"v",cpp:"cpp",cql:"cql",crystal:"cr",cs:"cs",csharp:"cs",css:"css",csv:"csv",cue:"cue",cypher:"cql",d:"d",dart:"dart",dax:"dax",desktop:"desktop",diff:"diff",docker:"dockerfile",dockerfile:"dockerfile",dotenv:"env","dream-maker":"dm",edge:"edge",elisp:"el",elixir:"ex",elm:"elm","emacs-lisp":"el",erb:"erb",erl:"erl",erlang:"erl",f:"f","f#":"fs",f03:"f03",f08:"f08",f18:"f18",f77:"f77",f90:"f90",f95:"f95",fennel:"fnl",fish:"fish",fluent:"ftl",for:"for","fortran-fixed-form":"f","fortran-free-form":"f90",fs:"fs",fsharp:"fs",fsl:"fsl",ftl:"ftl",gdresource:"tres",gdscript:"gd",gdshader:"gdshader",genie:"gs",gherkin:"feature","git-commit":"gitcommit","git-rebase":"gitrebase",gjs:"js",gleam:"gleam","glimmer-js":"js","glimmer-ts":"ts",glsl:"glsl",gnuplot:"plt",go:"go",gql:"gql",graphql:"graphql",groovy:"groovy",gts:"gts",hack:"hack",haml:"haml",handlebars:"hbs",haskell:"hs",haxe:"hx",hbs:"hbs",hcl:"hcl",hjson:"hjson",hlsl:"hlsl",hs:"hs",html:"html","html-derivative":"html",http:"http",hxml:"hxml",hy:"hy",imba:"imba",ini:"ini",jade:"jade",java:"java",javascript:"js",jinja:"jinja",jison:"jison",jl:"jl",js:"js",json:"json",json5:"json5",jsonc:"jsonc",jsonl:"jsonl",jsonnet:"jsonnet",jssm:"jssm",jsx:"jsx",julia:"jl",kotlin:"kt",kql:"kql",kt:"kt",kts:"kts",kusto:"kql",latex:"tex",lean:"lean",lean4:"lean",less:"less",liquid:"liquid",lisp:"lisp",lit:"lit",llvm:"ll",log:"log",logo:"logo",lua:"lua",luau:"luau",make:"mak",makefile:"mak",markdown:"md",marko:"marko",matlab:"m",md:"md",mdc:"mdc",mdx:"mdx",mediawiki:"wiki",mermaid:"mmd",mips:"s",mipsasm:"s",mmd:"mmd",mojo:"mojo",move:"move",nar:"nar",narrat:"narrat",nextflow:"nf",nf:"nf",nginx:"conf",nim:"nim",nix:"nix",nu:"nu",nushell:"nu",objc:"m","objective-c":"m","objective-cpp":"mm",ocaml:"ml",pascal:"pas",perl:"pl",perl6:"p6",php:"php",plsql:"pls",po:"po",polar:"polar",postcss:"pcss",pot:"pot",potx:"potx",powerquery:"pq",powershell:"ps1",prisma:"prisma",prolog:"pl",properties:"properties",proto:"proto",protobuf:"proto",ps:"ps",ps1:"ps1",pug:"pug",puppet:"pp",purescript:"purs",py:"py",python:"py",ql:"ql",qml:"qml",qmldir:"qmldir",qss:"qss",r:"r",racket:"rkt",raku:"raku",razor:"cshtml",rb:"rb",reg:"reg",regex:"regex",regexp:"regexp",rel:"rel",riscv:"s",rs:"rs",rst:"rst",ruby:"rb",rust:"rs",sas:"sas",sass:"sass",scala:"scala",scheme:"scm",scss:"scss",sdbl:"sdbl",sh:"sh",shader:"shader",shaderlab:"shader",shell:"sh",shellscript:"sh",shellsession:"sh",smalltalk:"st",solidity:"sol",soy:"soy",sparql:"rq",spl:"spl",splunk:"spl",sql:"sql","ssh-config":"config",stata:"do",styl:"styl",stylus:"styl",svelte:"svelte",swift:"swift","system-verilog":"sv",systemd:"service",talon:"talon",talonscript:"talon",tasl:"tasl",tcl:"tcl",templ:"templ",terraform:"tf",tex:"tex",tf:"tf",tfvars:"tfvars",toml:"toml",ts:"ts","ts-tags":"ts",tsp:"tsp",tsv:"tsv",tsx:"tsx",turtle:"ttl",twig:"twig",typ:"typ",typescript:"ts",typespec:"tsp",typst:"typ",v:"v",vala:"vala",vb:"vb",verilog:"v",vhdl:"vhdl",vim:"vim",viml:"vim",vimscript:"vim",vue:"vue","vue-html":"html","vue-vine":"vine",vy:"vy",vyper:"vy",wasm:"wasm",wenyan:"wy",wgsl:"wgsl",wiki:"wiki",wikitext:"wiki",wit:"wit",wl:"wl",wolfram:"wl",xml:"xml",xsl:"xsl",yaml:"yaml",yml:"yml",zenscript:"zs",zig:"zig",zsh:"zsh",\u6587\u8A00:"wy"},J=({onDownload:e,onError:t,language:o,children:n,className:r,code:s,...i})=>{let{code:d}=(0,y.useContext)(X),{isAnimating:a}=(0,y.useContext)(I),l=s!=null?s:d,u=`file.${o&&o in Z?Z[o]:"txt"}`,b="text/plain",f=()=>{try{H(u,l,b),e==null||e()}catch(h){t==null||t(h)}};return(0,w.jsx)("button",{className:p("cursor-pointer p-1 text-muted-foreground transition-all hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50",r),disabled:a,onClick:f,title:"Download file",type:"button",...i,children:n!=null?n:(0,w.jsx)(A.DownloadIcon,{size:14})})},F=({onCopy:e,onError:t,timeout:o=2e3,children:n,className:r,code:s,...i})=>{let[d,a]=(0,y.useState)(!1),l=(0,y.useRef)(0),{code:c}=(0,y.useContext)(X),{isAnimating:u}=(0,y.useContext)(I),b=s!=null?s:c,f=async()=>{var T;if(typeof window=="undefined"||!((T=navigator==null?void 0:navigator.clipboard)!=null&&T.writeText)){t==null||t(new Error("Clipboard API not available"));return}try{d||(await navigator.clipboard.writeText(b),a(!0),e==null||e(),l.current=window.setTimeout(()=>a(!1),o))}catch(v){t==null||t(v)}};(0,y.useEffect)(()=>()=>{window.clearTimeout(l.current)},[]);let h=d?A.CheckIcon:A.CopyIcon;return(0,w.jsx)("button",{className:p("cursor-pointer p-1 text-muted-foreground transition-all hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50",r),disabled:u,onClick:f,type:"button",...i,children:n!=null?n:(0,w.jsx)(h,{size:14})})};var oe=require("lucide-react");var L=require("react/jsx-runtime"),ne=({node:e,className:t,src:o,alt:n,...r})=>{let s=async()=>{var i;if(o)try{let a=await(await fetch(o)).blob(),c=new URL(o,window.location.origin).pathname.split("/").pop()||"",u=c.includes(".")&&((i=c.split(".").pop())==null?void 0:i.length)<=4,b="";if(u)b=c;else{let f=a.type,h="png";f.includes("jpeg")||f.includes("jpg")?h="jpg":f.includes("png")?h="png":f.includes("svg")?h="svg":f.includes("gif")?h="gif":f.includes("webp")&&(h="webp"),b=`${(n||c||"image").replace(/\.[^/.]+$/,"")}.${h}`}H(b,a,a.type)}catch(d){console.error("Failed to download image:",d)}};return o?(0,L.jsxs)("div",{className:"group relative my-4 inline-block","data-streamdown":"image-wrapper",children:[(0,L.jsx)("img",{alt:n,className:p("max-w-full rounded-lg",t),"data-streamdown":"image",src:o,...r}),(0,L.jsx)("div",{className:"pointer-events-none absolute inset-0 hidden rounded-lg bg-black/10 group-hover:block"}),(0,L.jsx)("button",{className:p("absolute right-2 bottom-2 flex h-8 w-8 cursor-pointer items-center justify-center rounded-md border border-border bg-background/90 shadow-sm backdrop-blur-sm transition-all duration-200 hover:bg-background","opacity-0 group-hover:opacity-100"),onClick:s,title:"Download image",type:"button",children:(0,L.jsx)(oe.DownloadIcon,{size:14})})]}):null};var B=require("react");var C=require("react/jsx-runtime"),st=async e=>{let o={...{startOnLoad:!1,theme:"default",securityLevel:"strict",fontFamily:"monospace",suppressErrorRendering:!0},...e},r=(await import("mermaid")).default;return r.initialize(o),r},se=({chart:e,className:t,config:o})=>{let[n,r]=(0,B.useState)(null),[s,i]=(0,B.useState)(!0),[d,a]=(0,B.useState)(""),[l,c]=(0,B.useState)("");if((0,B.useEffect)(()=>{(async()=>{try{r(null),i(!0);let f=await st(o),h=e.split("").reduce(($,U)=>($<<5)-$+U.charCodeAt(0)|0,0),T=`mermaid-${Math.abs(h)}-${Date.now()}-${Math.random().toString(36).substring(2,9)}`,{svg:v}=await f.render(T,e);a(v),c(v)}catch(f){if(!(l||d)){let h=f instanceof Error?f.message:"Failed to render Mermaid chart";r(h)}}finally{i(!1)}})()},[e,o]),s&&!d&&!l)return(0,C.jsx)("div",{className:p("my-4 flex justify-center p-4",t),children:(0,C.jsxs)("div",{className:"flex items-center space-x-2 text-muted-foreground",children:[(0,C.jsx)("div",{className:"h-4 w-4 animate-spin rounded-full border-current border-b-2"}),(0,C.jsx)("span",{className:"text-sm",children:"Loading diagram..."})]})});if(n&&!d&&!l)return(0,C.jsxs)("div",{className:p("rounded-lg border border-red-200 bg-red-50 p-4",t),children:[(0,C.jsxs)("p",{className:"font-mono text-red-700 text-sm",children:["Mermaid Error: ",n]}),(0,C.jsxs)("details",{className:"mt-2",children:[(0,C.jsx)("summary",{className:"cursor-pointer text-red-600 text-xs",children:"Show Code"}),(0,C.jsx)("pre",{className:"mt-2 overflow-x-auto rounded bg-red-100 p-2 text-red-800 text-xs",children:e})]})]});let u=d||l;return(0,C.jsx)("div",{"aria-label":"Mermaid chart",className:p("my-4 flex justify-center",t),dangerouslySetInnerHTML:{__html:u},role:"img"})};var j=require("lucide-react"),P=require("react");var N=require("react/jsx-runtime");function re(e){var s,i;let t=[],o=[],n=e.querySelectorAll("thead th");for(let d of n)t.push(((s=d.textContent)==null?void 0:s.trim())||"");let r=e.querySelectorAll("tbody tr");for(let d of r){let a=[],l=d.querySelectorAll("td");for(let c of l)a.push(((i=c.textContent)==null?void 0:i.trim())||"");o.push(a)}return{headers:t,rows:o}}function ae(e){let{headers:t,rows:o}=e,n=s=>s.includes(",")||s.includes('"')||s.includes(`
2
- `)?`"${s.replace(/"/g,'""')}"`:s,r=[];t.length>0&&r.push(t.map(n).join(","));for(let s of o)r.push(s.map(n).join(","));return r.join(`
3
- `)}function ie(e){let{headers:t,rows:o}=e;if(t.length===0)return"";let n=[],r=t.map(s=>s.replace(/\|/g,"\\|"));n.push(`| ${r.join(" | ")} |`),n.push(`| ${t.map(()=>"---").join(" | ")} |`);for(let s of o){let i=[...s];for(;i.length<t.length;)i.push("");let d=i.map(a=>a.replace(/\|/g,"\\|"));n.push(`| ${d.join(" | ")} |`)}return n.join(`
4
- `)}var le=({children:e,className:t,onCopy:o,onError:n,timeout:r=2e3,format:s="markdown"})=>{let[i,d]=(0,P.useState)(!1),a=(0,P.useRef)(0),{isAnimating:l}=(0,P.useContext)(I),c=async b=>{var f;if(typeof window=="undefined"||!((f=navigator==null?void 0:navigator.clipboard)!=null&&f.write)){n==null||n(new Error("Clipboard API not available"));return}try{if(!i){let T=b.currentTarget.closest('[data-streamdown="table-wrapper"]'),v=T==null?void 0:T.querySelector("table");if(!v){n==null||n(new Error("Table not found"));return}let $=re(v),U=new ClipboardItem({"text/plain":s==="markdown"?ie($):ae($),"text/html":new Blob([v.outerHTML],{type:"text/html"})});await navigator.clipboard.write([U]),d(!0),o==null||o(),a.current=window.setTimeout(()=>d(!1),r)}}catch(h){n==null||n(h)}};(0,P.useEffect)(()=>()=>{window.clearTimeout(a.current)},[]);let u=i?j.CheckIcon:j.CopyIcon;return(0,N.jsx)("button",{className:p("cursor-pointer p-1 text-muted-foreground transition-all hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50",t),disabled:l,onClick:c,title:`Copy table as ${s}`,type:"button",children:e!=null?e:(0,N.jsx)(u,{size:14})})};var de=({children:e,className:t,onDownload:o,onError:n})=>{let[r,s]=(0,P.useState)(!1),i=(0,P.useRef)(null),{isAnimating:d}=(0,P.useContext)(I),a=l=>{var c;try{let u=(c=i.current)==null?void 0:c.closest('[data-streamdown="table-wrapper"]'),b=u==null?void 0:u.querySelector("table");if(!b){n==null||n(new Error("Table not found"));return}let f=re(b),h=l==="csv"?ae(f):ie(f);H(`table.${l==="csv"?"csv":"md"}`,h,l==="csv"?"text/csv":"text/markdown"),s(!1),o==null||o(l)}catch(u){n==null||n(u)}};return(0,P.useEffect)(()=>{let l=c=>{i.current&&!i.current.contains(c.target)&&s(!1)};return document.addEventListener("mousedown",l),()=>{document.removeEventListener("mousedown",l)}},[]),(0,N.jsxs)("div",{className:"relative",ref:i,children:[(0,N.jsx)("button",{className:p("cursor-pointer p-1 text-muted-foreground transition-all hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50",t),disabled:d,onClick:()=>s(!r),title:"Download table",type:"button",children:e!=null?e:(0,N.jsx)(j.DownloadIcon,{size:14})}),r&&(0,N.jsxs)("div",{className:"absolute top-full right-0 z-10 mt-1 min-w-[120px] rounded-md border border-border bg-background shadow-lg",children:[(0,N.jsx)("button",{className:"w-full px-3 py-2 text-left text-sm transition-colors hover:bg-muted/40",onClick:()=>a("csv"),type:"button",children:"CSV"}),(0,N.jsx)("button",{className:"w-full px-3 py-2 text-left text-sm transition-colors hover:bg-muted/40",onClick:()=>a("markdown"),type:"button",children:"Markdown"})]})]})};var m=require("react/jsx-runtime"),rt=/language-([^\s]+)/;function _(e,t){if(!(e!=null&&e.position||t!=null&&t.position))return!0;if(!(e!=null&&e.position&&(t!=null&&t.position)))return!1;let o=e.position.start,n=t.position.start,r=e.position.end,s=t.position.end;return(o==null?void 0:o.line)===(n==null?void 0:n.line)&&(o==null?void 0:o.column)===(n==null?void 0:n.column)&&(r==null?void 0:r.line)===(s==null?void 0:s.line)&&(r==null?void 0:r.column)===(s==null?void 0:s.column)}function k(e,t){return e.className===t.className&&_(e.node,t.node)}var V=(e,t)=>typeof e=="boolean"?e:e[t]!==!1,G=(0,g.memo)(({children:e,className:t,node:o,...n})=>(0,m.jsx)("ol",{className:p("ml-4 list-outside list-decimal whitespace-normal",t),"data-streamdown":"ordered-list",...n,children:e}),(e,t)=>k(e,t));G.displayName="MarkdownOl";var ce=(0,g.memo)(({children:e,className:t,node:o,...n})=>(0,m.jsx)("li",{className:p("py-1",t),"data-streamdown":"list-item",...n,children:e}),(e,t)=>e.className===t.className&&_(e.node,t.node));ce.displayName="MarkdownLi";var me=(0,g.memo)(({children:e,className:t,node:o,...n})=>(0,m.jsx)("ul",{className:p("ml-4 list-outside list-disc whitespace-normal",t),"data-streamdown":"unordered-list",...n,children:e}),(e,t)=>k(e,t));me.displayName="MarkdownUl";var pe=(0,g.memo)(({className:e,node:t,...o})=>(0,m.jsx)("hr",{className:p("my-6 border-border",e),"data-streamdown":"horizontal-rule",...o}),(e,t)=>k(e,t));pe.displayName="MarkdownHr";var ue=(0,g.memo)(({children:e,className:t,node:o,...n})=>(0,m.jsx)("span",{className:p("font-semibold",t),"data-streamdown":"strong",...n,children:e}),(e,t)=>k(e,t));ue.displayName="MarkdownStrong";var ge=(0,g.memo)(({children:e,className:t,href:o,node:n,...r})=>{let s=o==="streamdown:incomplete-link";return(0,m.jsx)("a",{className:p("wrap-anywhere font-medium text-primary underline",t),"data-incomplete":s,"data-streamdown":"link",href:o,rel:"noreferrer",target:"_blank",...r,children:e})},(e,t)=>k(e,t)&&e.href===t.href);ge.displayName="MarkdownA";var fe=(0,g.memo)(({children:e,className:t,node:o,...n})=>(0,m.jsx)("h1",{className:p("mt-6 mb-2 font-semibold text-3xl",t),"data-streamdown":"heading-1",...n,children:e}),(e,t)=>k(e,t));fe.displayName="MarkdownH1";var he=(0,g.memo)(({children:e,className:t,node:o,...n})=>(0,m.jsx)("h2",{className:p("mt-6 mb-2 font-semibold text-2xl",t),"data-streamdown":"heading-2",...n,children:e}),(e,t)=>k(e,t));he.displayName="MarkdownH2";var be=(0,g.memo)(({children:e,className:t,node:o,...n})=>(0,m.jsx)("h3",{className:p("mt-6 mb-2 font-semibold text-xl",t),"data-streamdown":"heading-3",...n,children:e}),(e,t)=>k(e,t));be.displayName="MarkdownH3";var ke=(0,g.memo)(({children:e,className:t,node:o,...n})=>(0,m.jsx)("h4",{className:p("mt-6 mb-2 font-semibold text-lg",t),"data-streamdown":"heading-4",...n,children:e}),(e,t)=>k(e,t));ke.displayName="MarkdownH4";var ye=(0,g.memo)(({children:e,className:t,node:o,...n})=>(0,m.jsx)("h5",{className:p("mt-6 mb-2 font-semibold text-base",t),"data-streamdown":"heading-5",...n,children:e}),(e,t)=>k(e,t));ye.displayName="MarkdownH5";var we=(0,g.memo)(({children:e,className:t,node:o,...n})=>(0,m.jsx)("h6",{className:p("mt-6 mb-2 font-semibold text-sm",t),"data-streamdown":"heading-6",...n,children:e}),(e,t)=>k(e,t));we.displayName="MarkdownH6";var ve=(0,g.memo)(({children:e,className:t,node:o,...n})=>{let r=(0,g.useContext)(D),s=V(r,"table");return(0,m.jsxs)("div",{className:"my-4 flex flex-col space-y-2","data-streamdown":"table-wrapper",children:[s&&(0,m.jsxs)("div",{className:"flex items-center justify-end gap-1",children:[(0,m.jsx)(le,{}),(0,m.jsx)(de,{})]}),(0,m.jsx)("div",{className:"overflow-x-auto",children:(0,m.jsx)("table",{className:p("w-full border-collapse border border-border",t),"data-streamdown":"table",...n,children:e})})]})},(e,t)=>k(e,t));ve.displayName="MarkdownTable";var Me=(0,g.memo)(({children:e,className:t,node:o,...n})=>(0,m.jsx)("thead",{className:p("bg-muted/80",t),"data-streamdown":"table-header",...n,children:e}),(e,t)=>k(e,t));Me.displayName="MarkdownThead";var Te=(0,g.memo)(({children:e,className:t,node:o,...n})=>(0,m.jsx)("tbody",{className:p("divide-y divide-border bg-muted/40",t),"data-streamdown":"table-body",...n,children:e}),(e,t)=>k(e,t));Te.displayName="MarkdownTbody";var Ce=(0,g.memo)(({children:e,className:t,node:o,...n})=>(0,m.jsx)("tr",{className:p("border-border border-b",t),"data-streamdown":"table-row",...n,children:e}),(e,t)=>k(e,t));Ce.displayName="MarkdownTr";var Pe=(0,g.memo)(({children:e,className:t,node:o,...n})=>(0,m.jsx)("th",{className:p("whitespace-nowrap px-4 py-2 text-left font-semibold text-sm",t),"data-streamdown":"table-header-cell",...n,children:e}),(e,t)=>k(e,t));Pe.displayName="MarkdownTh";var Ne=(0,g.memo)(({children:e,className:t,node:o,...n})=>(0,m.jsx)("td",{className:p("px-4 py-2 text-sm",t),"data-streamdown":"table-cell",...n,children:e}),(e,t)=>k(e,t));Ne.displayName="MarkdownTd";var Ie=(0,g.memo)(({children:e,className:t,node:o,...n})=>(0,m.jsx)("blockquote",{className:p("my-4 border-muted-foreground/30 border-l-4 pl-4 text-muted-foreground italic",t),"data-streamdown":"blockquote",...n,children:e}),(e,t)=>k(e,t));Ie.displayName="MarkdownBlockquote";var Se=(0,g.memo)(({children:e,className:t,node:o,...n})=>(0,m.jsx)("sup",{className:p("text-sm",t),"data-streamdown":"superscript",...n,children:e}),(e,t)=>k(e,t));Se.displayName="MarkdownSup";var Le=(0,g.memo)(({children:e,className:t,node:o,...n})=>(0,m.jsx)("sub",{className:p("text-sm",t),"data-streamdown":"subscript",...n,children:e}),(e,t)=>k(e,t));Le.displayName="MarkdownSub";var Be=(0,g.memo)(({children:e,className:t,node:o,...n})=>{if("data-footnotes"in n){let s=a=>{var b,f;if(!(0,g.isValidElement)(a))return!1;let l=Array.isArray(a.props.children)?a.props.children:[a.props.children],c=!1,u=!1;for(let h of l)if(h){if(typeof h=="string")h.trim()!==""&&(c=!0);else if((0,g.isValidElement)(h))if(((b=h.props)==null?void 0:b["data-footnote-backref"])!==void 0)u=!0;else{let T=Array.isArray(h.props.children)?h.props.children:[h.props.children];for(let v of T){if(typeof v=="string"&&v.trim()!==""){c=!0;break}if((0,g.isValidElement)(v)&&((f=v.props)==null?void 0:f["data-footnote-backref"])===void 0){c=!0;break}}}}return u&&!c},i=Array.isArray(e)?e.map(a=>{if(!(0,g.isValidElement)(a))return a;if(a.type===G){let c=(Array.isArray(a.props.children)?a.props.children:[a.props.children]).filter(u=>!s(u));return c.length===0?null:{...a,props:{...a.props,children:c}}}return a}):e;return(Array.isArray(i)?i.some(a=>a!==null):i!==null)?(0,m.jsx)("section",{className:t,...n,children:i}):null}return(0,m.jsx)("section",{className:t,...n,children:e})},(e,t)=>k(e,t));Be.displayName="MarkdownSection";var at=({node:e,className:t,children:o,...n})=>{var u,b,f;let r=((u=e==null?void 0:e.position)==null?void 0:u.start.line)===((b=e==null?void 0:e.position)==null?void 0:b.end.line),s=(0,g.useContext)(O),i=(0,g.useContext)(D);if(r)return(0,m.jsx)("code",{className:p("rounded bg-muted px-1.5 py-0.5 font-mono text-sm",t),"data-streamdown":"inline-code",...n,children:o});let d=t==null?void 0:t.match(rt),a=(f=d==null?void 0:d.at(1))!=null?f:"",l="";if((0,g.isValidElement)(o)&&o.props&&typeof o.props=="object"&&"children"in o.props&&typeof o.props.children=="string"?l=o.props.children:typeof o=="string"&&(l=o),a==="mermaid"){let h=V(i,"mermaid");return(0,m.jsxs)("div",{className:p("group relative my-4 h-auto rounded-xl border p-4",t),"data-streamdown":"mermaid-block",children:[h&&(0,m.jsxs)("div",{className:"flex items-center justify-end gap-2",children:[(0,m.jsx)(J,{code:l,language:a}),(0,m.jsx)(F,{code:l})]}),(0,m.jsx)(se,{chart:l,config:s})]})}let c=V(i,"code");return(0,m.jsx)(te,{className:p("overflow-x-auto border-t",t),code:l,"data-language":a,"data-streamdown":"code-block",language:a,preClassName:"overflow-x-auto font-mono text-xs p-4 bg-muted/40",children:c&&(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)(J,{code:l,language:a}),(0,m.jsx)(F,{})]})})},$e=(0,g.memo)(at,(e,t)=>e.className===t.className&&_(e.node,t.node));$e.displayName="MarkdownCode";var xe=(0,g.memo)(ne,(e,t)=>e.className===t.className&&_(e.node,t.node));xe.displayName="MarkdownImg";var He=(0,g.memo)(({children:e,className:t,node:o,...n})=>{var i;let s=(Array.isArray(e)?e:[e]).filter(d=>d!=null&&d!=="");return s.length===1&&(0,g.isValidElement)(s[0])&&((i=s[0].props.node)==null?void 0:i.tagName)==="img"?(0,m.jsx)(m.Fragment,{children:e}):(0,m.jsx)("p",{className:t,...n,children:e})},(e,t)=>k(e,t));He.displayName="MarkdownParagraph";var Ae={ol:G,li:ce,ul:me,hr:pe,strong:ue,a:ge,h1:fe,h2:he,h3:be,h4:ke,h5:ye,h6:we,table:ve,thead:Me,tbody:Te,tr:Ce,th:Pe,td:Ne,blockquote:Ie,code:$e,img:xe,pre:({children:e})=>e,sup:Se,sub:Le,p:He,section:Be};var je=require("marked"),Re=e=>{let t=/\[\^[^\]\s]{1,200}\](?!:)/.test(e),o=/\[\^[^\]\s]{1,200}\]:/.test(e);if(t||o)return[e];let n=je.Lexer.lex(e,{gfm:!0}),r=[],s=[];for(let i=0;i<n.length;i++){let d=n[i],a=d.raw;if(s.length>0){if(r[r.length-1]+=a,d.type==="html"){let l=a.match(/<\/(\w+)>/);if(l){let c=l[1];s[s.length-1]===c&&s.pop()}}continue}if(d.type==="html"&&d.block){let l=a.match(/<(\w+)[\s>]/);if(l){let c=l[1];a.includes(`</${c}>`)||s.push(c)}}if(a.trim()==="$$"&&r.length>0){let l=r.at(-1);if(!l){r.push(a);continue}let c=l.trimStart().startsWith("$$"),u=(l.match(/\$\$/g)||[]).length;if(c&&u%2===1){r[r.length-1]=l+a;continue}}if(r.length>0&&a.trimEnd().endsWith("$$")){let l=r.at(-1);if(!l){r.push(a);continue}let c=l.trimStart().startsWith("$$"),u=(l.match(/\$\$/g)||[]).length,b=(a.match(/\$\$/g)||[]).length;if(c&&u%2===1&&!a.trimStart().startsWith("$$")&&b===1){r[r.length-1]=l+a;continue}}r.push(a)}return r};var it=/(!?\[)([^\]]*?)$/,lt=/(\*\*)([^*]*?)$/,dt=/(__)([^_]*?)$/,ct=/(\*\*\*)([^*]*?)$/,mt=/(\*)([^*]*?)$/,pt=/(_)([^_]*?)$/,ut=/(`)([^`]*?)$/,gt=/(~~)([^~]*?)$/,W=e=>{let t=(e.match(/```/g)||[]).length;return t>0&&t%2===0&&e.includes(`
5
- `)},ft=e=>{let t=/(!?)\[([^\]]+)\]\(([^)]+)$/,o=e.match(t);if(o){let r=o[1]==="!",s=o[2],i=o[3],d=e.lastIndexOf(`${r?"!":""}[${s}](${i}`),a=e.substring(0,d);return r?a:`${a}[${s}](streamdown:incomplete-link)`}let n=e.match(it);if(n){if(n[1].startsWith("!")){let s=e.lastIndexOf(n[1]);return e.substring(0,s)}return`${e}](streamdown:incomplete-link)`}return e},ht=e=>{if(W(e))return e;let t=e.match(lt);if(t){let o=t[2];if(!o||/^[\s_~*`]*$/.test(o))return e;let n=e.lastIndexOf(t[1]),s=e.substring(0,n).lastIndexOf(`
6
- `),i=s===-1?0:s+1,d=e.substring(i,n);if(/^[\s]*[-*+][\s]+$/.test(d)&&o.includes(`
7
- `))return e;if((e.match(/\*\*/g)||[]).length%2===1)return`${e}**`}return e},bt=e=>{let t=e.match(dt);if(t){let o=t[2];if(!o||/^[\s_~*`]*$/.test(o))return e;let n=e.lastIndexOf(t[1]),s=e.substring(0,n).lastIndexOf(`
8
- `),i=s===-1?0:s+1,d=e.substring(i,n);if(/^[\s]*[-*+][\s]+$/.test(d)&&o.includes(`
9
- `))return e;if((e.match(/__/g)||[]).length%2===1)return`${e}__`}return e},kt=e=>e.split("").reduce((t,o,n)=>{if(o==="*"){let r=e[n-1],s=e[n+1];if(r==="\\")return t;let i=n;for(let a=n-1;a>=0;a--){if(e[a]===`
10
- `){i=a+1;break}if(a===0){i=0;break}}if(e.substring(i,n).trim()===""&&(s===" "||s===" "))return t;if(r!=="*"&&s!=="*")return t+1}return t},0),yt=e=>{if(W(e))return e;if(e.match(mt)){let o=-1;for(let s=0;s<e.length;s++)if(e[s]==="*"&&e[s-1]!=="*"&&e[s+1]!=="*"){o=s;break}if(o===-1)return e;let n=e.substring(o+1);if(!n||/^[\s_~*`]*$/.test(n))return e;if(kt(e)%2===1)return`${e}*`}return e},De=(e,t)=>{let o=!1,n=!1;for(let r=0;r<e.length&&r<t;r++){if(e[r]==="\\"&&e[r+1]==="$"){r++;continue}e[r]==="$"&&(e[r+1]==="$"?(n=!n,r++,o=!1):n||(o=!o))}return o||n},wt=e=>e.split("").reduce((t,o,n)=>{if(o==="_"){let r=e[n-1],s=e[n+1];if(r==="\\"||De(e,n)||r&&s&&/[\p{L}\p{N}_]/u.test(r)&&/[\p{L}\p{N}_]/u.test(s))return t;if(r!=="_"&&s!=="_")return t+1}return t},0),vt=e=>{if(W(e))return e;if(e.match(pt)){let o=-1;for(let s=0;s<e.length;s++)if(e[s]==="_"&&e[s-1]!=="_"&&e[s+1]!=="_"&&e[s-1]!=="\\"&&!De(e,s)){let i=s>0?e[s-1]:"",d=s<e.length-1?e[s+1]:"";if(i&&d&&/[\p{L}\p{N}_]/u.test(i)&&/[\p{L}\p{N}_]/u.test(d))continue;o=s;break}if(o===-1)return e;let n=e.substring(o+1);if(!n||/^[\s_~*`]*$/.test(n))return e;if(wt(e)%2===1){let s=e.match(/\n+$/);return s?`${e.slice(0,-s[0].length)}_${s[0]}`:`${e}_`}}return e},Mt=(e,t)=>{let o=e.substring(t,t+3)==="```",n=t>0&&e.substring(t-1,t+2)==="```",r=t>1&&e.substring(t-2,t+1)==="```";return o||n||r},Tt=e=>{let t=0;for(let o=0;o<e.length;o++)e[o]==="`"&&!Mt(e,o)&&t++;return t},Ct=e=>{if(e.match(/^```[^`\n]*```?$/)&&!e.includes(`
1
+ "use strict";"use client";var wt=Object.create;var G=Object.defineProperty;var yt=Object.getOwnPropertyDescriptor;var kt=Object.getOwnPropertyNames;var vt=Object.getPrototypeOf,Tt=Object.prototype.hasOwnProperty;var Ct=(e,t)=>{for(var o in t)G(e,o,{get:t[o],enumerable:!0})},fe=(e,t,o,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of kt(t))!Tt.call(e,s)&&s!==o&&G(e,s,{get:()=>t[s],enumerable:!(n=yt(t,s))||n.enumerable});return e};var B=(e,t,o)=>(o=e!=null?wt(vt(e)):{},fe(t||!e||!e.__esModule?G(o,"default",{value:e,enumerable:!0}):o,e)),Mt=e=>fe(G({},"__esModule",{value:!0}),e);var fo={};Ct(fo,{Block:()=>ge,ControlsContext:()=>X,MermaidConfigContext:()=>ee,ShikiThemeContext:()=>Q,Streamdown:()=>ut,StreamdownRuntimeContext:()=>H,defaultRehypePlugins:()=>dt,defaultRemarkPlugins:()=>mt,defaultUrlTransform:()=>pt.defaultUrlTransform,parseIncompleteMarkdown:()=>ne,parseMarkdownIntoBlocks:()=>te});module.exports=Mt(fo);var M=require("react"),nt=B(require("react-markdown"),1),rt=require("rehype-harden"),re=B(require("rehype-katex"),1),st=B(require("rehype-raw"),1),it=B(require("remark-cjk-friendly"),1),at=B(require("remark-cjk-friendly-gfm-strikethrough"),1),lt=B(require("remark-gfm"),1),ct=B(require("remark-math"),1);var g=require("react");var q=require("lucide-react"),b=require("react"),W=require("shiki"),ke=require("shiki/engine/javascript");var be=require("clsx"),we=require("tailwind-merge"),p=(...e)=>(0,we.twMerge)((0,be.clsx)(e)),E=(e,t,o)=>{let n=typeof t=="string"?new Blob([t],{type:o}):t,s=URL.createObjectURL(n),r=document.createElement("a");r.href=s,r.download=e,document.body.appendChild(r),r.click(),document.body.removeChild(r),URL.revokeObjectURL(s)};var P=require("react/jsx-runtime"),ae=(0,b.createContext)({code:""});function Pt(e,t=200,o=50){let[n,s]=(0,b.useState)(e),r=(0,b.useRef)(0),i=(0,b.useRef)(null);return(0,b.useEffect)(()=>{let a=Date.now(),l=a-r.current;return i.current&&window.clearTimeout(i.current),l>=t?(s(e),r.current=a):i.current=window.setTimeout(()=>{s(e),r.current=Date.now()},o),()=>{i.current&&window.clearTimeout(i.current)}},[e,t,o]),n}var Nt=e=>e<50?{minHighlightInterval:100,debounceMs:500}:e<150?{minHighlightInterval:500,debounceMs:800}:e<300?{minHighlightInterval:1500,debounceMs:1200}:{minHighlightInterval:Number.POSITIVE_INFINITY,debounceMs:1500},It=e=>e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;"),St=e=>{let t=e.lastIndexOf(`
2
+ `),o=t>=0?e.slice(0,t+1):"",n=t>=0?e.slice(t+1):e;return[o,n]},Lt=e=>e?[{pre(o){return this.addClassToHast(o,e),o}}]:[],ie=class{constructor(){this.lightHighlighter=null;this.darkHighlighter=null;this.lightTheme=null;this.darkTheme=null;this.loadedLanguages=new Set;this.initializationPromise=null;this.loadLanguagePromise=null;this.cache=new Map;this.cacheKeys=[];this.MAX_CACHE_SIZE=50;this.highlightQueue=new Map}isLanguageSupported(t){return Object.hasOwn(W.bundledLanguages,t)}getFallbackLanguage(){return"text"}getCacheKey(t,o,n){return`${o}::${n||""}::${t}`}addToCache(t,o){if(this.cache.size>=this.MAX_CACHE_SIZE){let n=this.cacheKeys.shift();n&&this.cache.delete(n)}this.cache.set(t,o),this.cacheKeys.push(t)}needsHighlightersInitialization(t){let[o,n]=t,s=!this.lightHighlighter||this.lightTheme!==o,r=!this.darkHighlighter||this.darkTheme!==n;return[s,r]}async ensureHighlightersInitialized(t,o){let[n,s]=o,[r,i]=t,a=(0,ke.createJavaScriptRegexEngine)({forgiving:!0});this.loadedLanguages.clear(),this.cache.clear(),this.cacheKeys=[],this.highlightQueue.clear(),n&&(this.lightHighlighter=await(0,W.createHighlighter)({themes:[r],langs:[],engine:a}),this.lightTheme=r),s&&(this.darkHighlighter=await(0,W.createHighlighter)({themes:[i],langs:[],engine:a}),this.darkTheme=i)}async loadLanguage(t){var o,n;await((o=this.darkHighlighter)==null?void 0:o.loadLanguage(t)),await((n=this.lightHighlighter)==null?void 0:n.loadLanguage(t)),this.loadedLanguages.add(t)}async initializeHighlighters(t){this.initializationPromise&&await this.initializationPromise;let o=this.needsHighlightersInitialization(t),[n,s]=o;(n||s)&&(this.initializationPromise=this.ensureHighlightersInitialized(t,o),await this.initializationPromise,this.initializationPromise=null)}performHighlights(t,o,n){let s=this.isLanguageSupported(o)?o:this.getFallbackLanguage();if(this.lightHighlighter===null||this.darkHighlighter===null||this.lightTheme===null||this.darkTheme===null)throw new Error("highlightCode must be called after initializeHighlighters.");let r=Lt(n),i=this.lightHighlighter.codeToHtml(t,{lang:s,theme:this.lightTheme,transformers:r}),a=this.darkHighlighter.codeToHtml(t,{lang:s,theme:this.darkTheme,transformers:r});return[i,a]}async highlightCode(t,o,n,s){let r=this.getCacheKey(t,o,n),i=this.cache.get(r);if(i)return this.cacheKeys=this.cacheKeys.filter(d=>d!==r),this.cacheKeys.push(r),i;let a=this.highlightQueue.get(r);if(a)return a;let l=()=>{if(s!=null&&s.aborted)throw new DOMException("Aborted","AbortError")},c=(async()=>{try{await new Promise(w=>setTimeout(w,0)),l(),this.initializationPromise&&await this.initializationPromise,l(),this.loadLanguagePromise&&await this.loadLanguagePromise,l(),!this.loadedLanguages.has(o)&&this.isLanguageSupported(o)&&(this.loadLanguagePromise=this.loadLanguage(o),await this.loadLanguagePromise,this.loadLanguagePromise=null),l();let h=this.performHighlights(t,o,n);return this.addToCache(r,h),h}finally{this.highlightQueue.delete(r)}})();return this.highlightQueue.set(r,c),c}},se=new ie,ve=({code:e,language:t,className:o,children:n,preClassName:s,...r})=>{let[i,a]=(0,b.useState)(""),[l,c]=(0,b.useState)(""),[d,h]=(0,b.useState)(""),[w,f]=(0,b.useState)(""),u=Pt(e),T=(0,b.useRef)(0),k=(0,b.useRef)(!1),y=(0,b.useRef)(null),L=(0,b.useRef)(0),[z,J]=(0,b.useContext)(Q);(0,b.useEffect)(()=>{se.initializeHighlighters([z,J])},[z,J]),(0,b.useEffect)(()=>{k.current=!0,y.current&&y.current.abort(),y.current=new AbortController;let _=y.current.signal;T.current&&clearTimeout(T.current);let[K,U]=St(u),gt=u.split(`
3
+ `).length,{minHighlightInterval:ht,debounceMs:ft}=Nt(gt);if(K&&K!==d){let x=Date.now();x-L.current>ht||!U?(L.current=x,se.highlightCode(K,t,s,_).then(([V,bt])=>{k.current&&!_.aborted&&(0,b.startTransition)(()=>{a(V),c(bt),h(K),f(U)})}).catch(V=>{if(V.name!=="AbortError")throw V})):f(U)}else f(U);return T.current=window.setTimeout(()=>{U&&u!==d&&!_.aborted&&se.highlightCode(u,t,s,_).then(([x,he])=>{k.current&&!_.aborted&&(0,b.startTransition)(()=>{a(x),c(he),h(u),f("")})}).catch(x=>{if(x.name!=="AbortError")throw x})},ft),()=>{var x;k.current=!1,(x=y.current)==null||x.abort()}},[u,t,s]);let D=w?`<span class="line"><span>${It(w)}</span></span>`:"";return(0,P.jsx)(ae.Provider,{value:{code:e},children:(0,P.jsxs)("div",{className:"my-4 w-full overflow-hidden rounded-xl border border-border","data-code-block-container":!0,"data-language":t,children:[(0,P.jsxs)("div",{className:"flex items-center justify-between bg-muted/80 p-3 text-muted-foreground text-xs","data-code-block-header":!0,"data-language":t,children:[(0,P.jsx)("span",{className:"ml-1 font-mono lowercase",children:t}),(0,P.jsx)("div",{className:"flex items-center gap-2",children:n})]}),(0,P.jsx)("div",{className:"w-full",children:(0,P.jsxs)("div",{className:"min-w-full",children:[(0,P.jsx)("div",{className:p("overflow-x-auto dark:hidden",o),dangerouslySetInnerHTML:{__html:D?i+D:i},"data-code-block":!0,"data-language":t,...r}),(0,P.jsx)("div",{className:p("hidden overflow-x-auto dark:block",o),dangerouslySetInnerHTML:{__html:D?l+D:l},"data-code-block":!0,"data-language":t,...r})]})})]})})},ye={"1c":"1c","1c-query":"1cq",abap:"abap","actionscript-3":"as",ada:"ada",adoc:"adoc","angular-html":"html","angular-ts":"ts",apache:"conf",apex:"cls",apl:"apl",applescript:"applescript",ara:"ara",asciidoc:"adoc",asm:"asm",astro:"astro",awk:"awk",ballerina:"bal",bash:"sh",bat:"bat",batch:"bat",be:"be",beancount:"beancount",berry:"berry",bibtex:"bib",bicep:"bicep",blade:"blade.php",bsl:"bsl",c:"c","c#":"cs","c++":"cpp",cadence:"cdc",cairo:"cairo",cdc:"cdc",clarity:"clar",clj:"clj",clojure:"clj","closure-templates":"soy",cmake:"cmake",cmd:"cmd",cobol:"cob",codeowners:"CODEOWNERS",codeql:"ql",coffee:"coffee",coffeescript:"coffee","common-lisp":"lisp",console:"sh",coq:"v",cpp:"cpp",cql:"cql",crystal:"cr",cs:"cs",csharp:"cs",css:"css",csv:"csv",cue:"cue",cypher:"cql",d:"d",dart:"dart",dax:"dax",desktop:"desktop",diff:"diff",docker:"dockerfile",dockerfile:"dockerfile",dotenv:"env","dream-maker":"dm",edge:"edge",elisp:"el",elixir:"ex",elm:"elm","emacs-lisp":"el",erb:"erb",erl:"erl",erlang:"erl",f:"f","f#":"fs",f03:"f03",f08:"f08",f18:"f18",f77:"f77",f90:"f90",f95:"f95",fennel:"fnl",fish:"fish",fluent:"ftl",for:"for","fortran-fixed-form":"f","fortran-free-form":"f90",fs:"fs",fsharp:"fs",fsl:"fsl",ftl:"ftl",gdresource:"tres",gdscript:"gd",gdshader:"gdshader",genie:"gs",gherkin:"feature","git-commit":"gitcommit","git-rebase":"gitrebase",gjs:"js",gleam:"gleam","glimmer-js":"js","glimmer-ts":"ts",glsl:"glsl",gnuplot:"plt",go:"go",gql:"gql",graphql:"graphql",groovy:"groovy",gts:"gts",hack:"hack",haml:"haml",handlebars:"hbs",haskell:"hs",haxe:"hx",hbs:"hbs",hcl:"hcl",hjson:"hjson",hlsl:"hlsl",hs:"hs",html:"html","html-derivative":"html",http:"http",hxml:"hxml",hy:"hy",imba:"imba",ini:"ini",jade:"jade",java:"java",javascript:"js",jinja:"jinja",jison:"jison",jl:"jl",js:"js",json:"json",json5:"json5",jsonc:"jsonc",jsonl:"jsonl",jsonnet:"jsonnet",jssm:"jssm",jsx:"jsx",julia:"jl",kotlin:"kt",kql:"kql",kt:"kt",kts:"kts",kusto:"kql",latex:"tex",lean:"lean",lean4:"lean",less:"less",liquid:"liquid",lisp:"lisp",lit:"lit",llvm:"ll",log:"log",logo:"logo",lua:"lua",luau:"luau",make:"mak",makefile:"mak",markdown:"md",marko:"marko",matlab:"m",md:"md",mdc:"mdc",mdx:"mdx",mediawiki:"wiki",mermaid:"mmd",mips:"s",mipsasm:"s",mmd:"mmd",mojo:"mojo",move:"move",nar:"nar",narrat:"narrat",nextflow:"nf",nf:"nf",nginx:"conf",nim:"nim",nix:"nix",nu:"nu",nushell:"nu",objc:"m","objective-c":"m","objective-cpp":"mm",ocaml:"ml",pascal:"pas",perl:"pl",perl6:"p6",php:"php",plsql:"pls",po:"po",polar:"polar",postcss:"pcss",pot:"pot",potx:"potx",powerquery:"pq",powershell:"ps1",prisma:"prisma",prolog:"pl",properties:"properties",proto:"proto",protobuf:"proto",ps:"ps",ps1:"ps1",pug:"pug",puppet:"pp",purescript:"purs",py:"py",python:"py",ql:"ql",qml:"qml",qmldir:"qmldir",qss:"qss",r:"r",racket:"rkt",raku:"raku",razor:"cshtml",rb:"rb",reg:"reg",regex:"regex",regexp:"regexp",rel:"rel",riscv:"s",rs:"rs",rst:"rst",ruby:"rb",rust:"rs",sas:"sas",sass:"sass",scala:"scala",scheme:"scm",scss:"scss",sdbl:"sdbl",sh:"sh",shader:"shader",shaderlab:"shader",shell:"sh",shellscript:"sh",shellsession:"sh",smalltalk:"st",solidity:"sol",soy:"soy",sparql:"rq",spl:"spl",splunk:"spl",sql:"sql","ssh-config":"config",stata:"do",styl:"styl",stylus:"styl",svelte:"svelte",swift:"swift","system-verilog":"sv",systemd:"service",talon:"talon",talonscript:"talon",tasl:"tasl",tcl:"tcl",templ:"templ",terraform:"tf",tex:"tex",tf:"tf",tfvars:"tfvars",toml:"toml",ts:"ts","ts-tags":"ts",tsp:"tsp",tsv:"tsv",tsx:"tsx",turtle:"ttl",twig:"twig",typ:"typ",typescript:"ts",typespec:"tsp",typst:"typ",v:"v",vala:"vala",vb:"vb",verilog:"v",vhdl:"vhdl",vim:"vim",viml:"vim",vimscript:"vim",vue:"vue","vue-html":"html","vue-vine":"vine",vy:"vy",vyper:"vy",wasm:"wasm",wenyan:"wy",wgsl:"wgsl",wiki:"wiki",wikitext:"wiki",wit:"wit",wl:"wl",wolfram:"wl",xml:"xml",xsl:"xsl",yaml:"yaml",yml:"yml",zenscript:"zs",zig:"zig",zsh:"zsh",\u6587\u8A00:"wy"},le=({onDownload:e,onError:t,language:o,children:n,className:s,code:r,...i})=>{let{code:a}=(0,b.useContext)(ae),{isAnimating:l}=(0,b.useContext)(H),c=r!=null?r:a,h=`file.${o&&o in ye?ye[o]:"txt"}`,w="text/plain",f=()=>{try{E(h,c,w),e==null||e()}catch(u){t==null||t(u)}};return(0,P.jsx)("button",{className:p("cursor-pointer p-1 text-muted-foreground transition-all hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50",s),disabled:l,onClick:f,title:"Download file",type:"button",...i,children:n!=null?n:(0,P.jsx)(q.DownloadIcon,{size:14})})},ce=({onCopy:e,onError:t,timeout:o=2e3,children:n,className:s,code:r,...i})=>{let[a,l]=(0,b.useState)(!1),c=(0,b.useRef)(0),{code:d}=(0,b.useContext)(ae),{isAnimating:h}=(0,b.useContext)(H),w=r!=null?r:d,f=async()=>{var T;if(typeof window=="undefined"||!((T=navigator==null?void 0:navigator.clipboard)!=null&&T.writeText)){t==null||t(new Error("Clipboard API not available"));return}try{a||(await navigator.clipboard.writeText(w),l(!0),e==null||e(),c.current=window.setTimeout(()=>l(!1),o))}catch(k){t==null||t(k)}};(0,b.useEffect)(()=>()=>{window.clearTimeout(c.current)},[]);let u=a?q.CheckIcon:q.CopyIcon;return(0,P.jsx)("button",{className:p("cursor-pointer p-1 text-muted-foreground transition-all hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50",s),disabled:h,onClick:f,type:"button",...i,children:n!=null?n:(0,P.jsx)(u,{size:14})})};var Te=require("lucide-react");var j=require("react/jsx-runtime"),xt=/\.[^/.]+$/,Ce=({node:e,className:t,src:o,alt:n,...s})=>{let r=async()=>{if(o)try{let a=await(await fetch(o)).blob(),c=new URL(o,window.location.origin).pathname.split("/").pop()||"",d=c.split(".").pop(),h=c.includes(".")&&d!==void 0&&d.length<=4,w="";if(h)w=c;else{let f=a.type,u="png";f.includes("jpeg")||f.includes("jpg")?u="jpg":f.includes("png")?u="png":f.includes("svg")?u="svg":f.includes("gif")?u="gif":f.includes("webp")&&(u="webp"),w=`${(n||c||"image").replace(xt,"")}.${u}`}E(w,a,a.type)}catch(i){console.error("Failed to download image:",i)}};return o?(0,j.jsxs)("div",{className:"group relative my-4 inline-block","data-streamdown":"image-wrapper",children:[(0,j.jsx)("img",{alt:n,className:p("max-w-full rounded-lg",t),"data-streamdown":"image",src:o,...s}),(0,j.jsx)("div",{className:"pointer-events-none absolute inset-0 hidden rounded-lg bg-black/10 group-hover:block"}),(0,j.jsx)("button",{className:p("absolute right-2 bottom-2 flex h-8 w-8 cursor-pointer items-center justify-center rounded-md border border-border bg-background/90 shadow-sm backdrop-blur-sm transition-all duration-200 hover:bg-background","opacity-0 group-hover:opacity-100"),onClick:r,title:"Download image",type:"button",children:(0,j.jsx)(Te.DownloadIcon,{size:14})})]}):null};var Z=require("lucide-react"),S=require("react");var v=require("react/jsx-runtime"),F=0,Ht=()=>{F+=1,F===1&&(document.body.style.overflow="hidden")},Bt=()=>{F=Math.max(0,F-1),F===0&&(document.body.style.overflow="")},At=async e=>{let o={...{startOnLoad:!1,theme:"default",securityLevel:"strict",fontFamily:"monospace",suppressErrorRendering:!0},...e},s=(await import("mermaid")).default;return s.initialize(o),s},Me=({chart:e,config:t,onFullscreen:o,onExit:n,className:s,...r})=>{let[i,a]=(0,S.useState)(!1),{isAnimating:l}=(0,S.useContext)(H),c=()=>{a(!i)};return(0,S.useEffect)(()=>{if(i){Ht();let d=h=>{h.key==="Escape"&&a(!1)};return document.addEventListener("keydown",d),()=>{document.removeEventListener("keydown",d),Bt()}}},[i]),(0,S.useEffect)(()=>{i?o==null||o():n&&n()},[i,o,n]),(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)("button",{className:p("cursor-pointer p-1 text-muted-foreground transition-all hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50",s),disabled:l,onClick:c,title:"View fullscreen",type:"button",...r,children:(0,v.jsx)(Z.Maximize2Icon,{size:14})}),i&&(0,v.jsxs)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-background/95 backdrop-blur-sm",onClick:c,onKeyDown:d=>{d.key==="Escape"&&c()},role:"button",tabIndex:0,children:[(0,v.jsx)("button",{className:"absolute top-4 right-4 z-10 rounded-md p-2 text-muted-foreground transition-all hover:bg-muted hover:text-foreground",onClick:c,title:"Exit fullscreen",type:"button",children:(0,v.jsx)(Z.XIcon,{size:20})}),(0,v.jsx)("div",{className:"flex h-full w-full items-center justify-center p-12",onClick:d=>d.stopPropagation(),onKeyDown:d=>d.stopPropagation(),role:"presentation",children:(0,v.jsx)("div",{className:"max-h-full max-w-full",children:(0,v.jsx)(de,{chart:e,className:"[&>div]:my-0 [&_svg]:h-auto [&_svg]:min-h-[60vh] [&_svg]:w-auto [&_svg]:min-w-[60vw]",config:t})})})]})]})},de=({chart:e,className:t,config:o})=>{let[n,s]=(0,S.useState)(null),[r,i]=(0,S.useState)(!0),[a,l]=(0,S.useState)(""),[c,d]=(0,S.useState)("");if((0,S.useEffect)(()=>{(async()=>{try{s(null),i(!0);let f=await At(o),u=e.split("").reduce((y,L)=>(y<<5)-y+L.charCodeAt(0)|0,0),T=`mermaid-${Math.abs(u)}-${Date.now()}-${Math.random().toString(36).substring(2,9)}`,{svg:k}=await f.render(T,e);l(k),d(k)}catch(f){if(!(c||a)){let u=f instanceof Error?f.message:"Failed to render Mermaid chart";s(u)}}finally{i(!1)}})()},[e,o]),r&&!a&&!c)return(0,v.jsx)("div",{className:p("my-4 flex justify-center p-4",t),children:(0,v.jsxs)("div",{className:"flex items-center space-x-2 text-muted-foreground",children:[(0,v.jsx)("div",{className:"h-4 w-4 animate-spin rounded-full border-current border-b-2"}),(0,v.jsx)("span",{className:"text-sm",children:"Loading diagram..."})]})});if(n&&!a&&!c)return(0,v.jsxs)("div",{className:p("rounded-lg border border-red-200 bg-red-50 p-4",t),children:[(0,v.jsxs)("p",{className:"font-mono text-red-700 text-sm",children:["Mermaid Error: ",n]}),(0,v.jsxs)("details",{className:"mt-2",children:[(0,v.jsx)("summary",{className:"cursor-pointer text-red-600 text-xs",children:"Show Code"}),(0,v.jsx)("pre",{className:"mt-2 overflow-x-auto rounded bg-red-100 p-2 text-red-800 text-xs",children:e})]})]});let h=a||c;return(0,v.jsx)("div",{"aria-label":"Mermaid chart",className:p("my-4 flex justify-center",t),dangerouslySetInnerHTML:{__html:h},role:"img"})};var O=require("lucide-react"),I=require("react");var N=require("react/jsx-runtime");function Pe(e){var r,i;let t=[],o=[],n=e.querySelectorAll("thead th");for(let a of n)t.push(((r=a.textContent)==null?void 0:r.trim())||"");let s=e.querySelectorAll("tbody tr");for(let a of s){let l=[],c=a.querySelectorAll("td");for(let d of c)l.push(((i=d.textContent)==null?void 0:i.trim())||"");o.push(l)}return{headers:t,rows:o}}function Ne(e){let{headers:t,rows:o}=e,n=r=>r.includes(",")||r.includes('"')||r.includes(`
4
+ `)?`"${r.replace(/"/g,'""')}"`:r,s=[];t.length>0&&s.push(t.map(n).join(","));for(let r of o)s.push(r.map(n).join(","));return s.join(`
5
+ `)}function $t(e){let{headers:t,rows:o}=e,n=r=>r.replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r"),s=[];t.length>0&&s.push(t.map(n).join(" "));for(let r of o)s.push(r.map(n).join(" "));return s.join(`
6
+ `)}function jt(e){let{headers:t,rows:o}=e;if(t.length===0)return"";let n=[],s=t.map(r=>r.replace(/\|/g,"\\|"));n.push(`| ${s.join(" | ")} |`),n.push(`| ${t.map(()=>"---").join(" | ")} |`);for(let r of o){let i=[...r];for(;i.length<t.length;)i.push("");let a=i.map(l=>l.replace(/\|/g,"\\|"));n.push(`| ${a.join(" | ")} |`)}return n.join(`
7
+ `)}var Ie=({children:e,className:t,onCopy:o,onError:n,timeout:s=2e3})=>{let[r,i]=(0,I.useState)(!1),[a,l]=(0,I.useState)(!1),c=(0,I.useRef)(null),d=(0,I.useRef)(0),{isAnimating:h}=(0,I.useContext)(H),w=async u=>{var T,k;if(typeof window=="undefined"||!((T=navigator==null?void 0:navigator.clipboard)!=null&&T.write)){n==null||n(new Error("Clipboard API not available"));return}try{let y=(k=c.current)==null?void 0:k.closest('[data-streamdown="table-wrapper"]'),L=y==null?void 0:y.querySelector("table");if(!L){n==null||n(new Error("Table not found"));return}let z=Pe(L),J=u==="csv"?Ne(z):$t(z),D=new ClipboardItem({"text/plain":new Blob([J],{type:"text/plain"}),"text/html":new Blob([L.outerHTML],{type:"text/html"})});await navigator.clipboard.write([D]),l(!0),i(!1),o==null||o(u),d.current=window.setTimeout(()=>l(!1),s)}catch(y){n==null||n(y)}};(0,I.useEffect)(()=>{let u=T=>{c.current&&!c.current.contains(T.target)&&i(!1)};return document.addEventListener("mousedown",u),()=>{document.removeEventListener("mousedown",u),window.clearTimeout(d.current)}},[]);let f=a?O.CheckIcon:O.CopyIcon;return(0,N.jsxs)("div",{className:"relative",ref:c,children:[(0,N.jsx)("button",{className:p("cursor-pointer p-1 text-muted-foreground transition-all hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50",t),disabled:h,onClick:()=>i(!r),title:"Copy table",type:"button",children:e!=null?e:(0,N.jsx)(f,{size:14})}),r&&(0,N.jsxs)("div",{className:"absolute top-full right-0 z-10 mt-1 min-w-[120px] overflow-hidden rounded-md border border-border bg-background shadow-lg",children:[(0,N.jsx)("button",{className:"w-full px-3 py-2 text-left text-sm transition-colors hover:bg-muted/40",onClick:()=>w("csv"),type:"button",children:"CSV"}),(0,N.jsx)("button",{className:"w-full px-3 py-2 text-left text-sm transition-colors hover:bg-muted/40",onClick:()=>w("tsv"),type:"button",children:"TSV"})]})]})};var Se=({children:e,className:t,onDownload:o,onError:n})=>{let[s,r]=(0,I.useState)(!1),i=(0,I.useRef)(null),{isAnimating:a}=(0,I.useContext)(H),l=c=>{var d;try{let h=(d=i.current)==null?void 0:d.closest('[data-streamdown="table-wrapper"]'),w=h==null?void 0:h.querySelector("table");if(!w){n==null||n(new Error("Table not found"));return}let f=Pe(w),u=c==="csv"?Ne(f):jt(f);E(`table.${c==="csv"?"csv":"md"}`,u,c==="csv"?"text/csv":"text/markdown"),r(!1),o==null||o(c)}catch(h){n==null||n(h)}};return(0,I.useEffect)(()=>{let c=d=>{i.current&&!i.current.contains(d.target)&&r(!1)};return document.addEventListener("mousedown",c),()=>{document.removeEventListener("mousedown",c)}},[]),(0,N.jsxs)("div",{className:"relative",ref:i,children:[(0,N.jsx)("button",{className:p("cursor-pointer p-1 text-muted-foreground transition-all hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50",t),disabled:a,onClick:()=>r(!s),title:"Download table",type:"button",children:e!=null?e:(0,N.jsx)(O.DownloadIcon,{size:14})}),s&&(0,N.jsxs)("div",{className:"absolute top-full right-0 z-10 mt-1 min-w-[120px] overflow-hidden rounded-md border border-border bg-background shadow-lg",children:[(0,N.jsx)("button",{className:"w-full px-3 py-2 text-left text-sm transition-colors hover:bg-muted/40",onClick:()=>l("csv"),type:"button",children:"CSV"}),(0,N.jsx)("button",{className:"w-full px-3 py-2 text-left text-sm transition-colors hover:bg-muted/40",onClick:()=>l("markdown"),type:"button",children:"Markdown"})]})]})};var m=require("react/jsx-runtime"),Rt=/language-([^\s]+)/;function Y(e,t){if(!(e!=null&&e.position||t!=null&&t.position))return!0;if(!(e!=null&&e.position&&(t!=null&&t.position)))return!1;let o=e.position.start,n=t.position.start,s=e.position.end,r=t.position.end;return(o==null?void 0:o.line)===(n==null?void 0:n.line)&&(o==null?void 0:o.column)===(n==null?void 0:n.column)&&(s==null?void 0:s.line)===(r==null?void 0:r.line)&&(s==null?void 0:s.column)===(r==null?void 0:r.column)}function C(e,t){return e.className===t.className&&Y(e.node,t.node)}var ue=(e,t)=>typeof e=="boolean"?e:e[t]!==!1,me=(e,t)=>{if(typeof e=="boolean")return e;let o=e.mermaid;return o===!1?!1:o===!0||o===void 0?!0:o[t]!==!1},pe=(0,g.memo)(({children:e,className:t,node:o,...n})=>(0,m.jsx)("ol",{className:p("ml-4 list-outside list-decimal whitespace-normal",t),"data-streamdown":"ordered-list",...n,children:e}),(e,t)=>C(e,t));pe.displayName="MarkdownOl";var Le=(0,g.memo)(({children:e,className:t,node:o,...n})=>(0,m.jsx)("li",{className:p("py-1",t),"data-streamdown":"list-item",...n,children:e}),(e,t)=>e.className===t.className&&Y(e.node,t.node));Le.displayName="MarkdownLi";var xe=(0,g.memo)(({children:e,className:t,node:o,...n})=>(0,m.jsx)("ul",{className:p("ml-4 list-outside list-disc whitespace-normal",t),"data-streamdown":"unordered-list",...n,children:e}),(e,t)=>C(e,t));xe.displayName="MarkdownUl";var He=(0,g.memo)(({className:e,node:t,...o})=>(0,m.jsx)("hr",{className:p("my-6 border-border",e),"data-streamdown":"horizontal-rule",...o}),(e,t)=>C(e,t));He.displayName="MarkdownHr";var Be=(0,g.memo)(({children:e,className:t,node:o,...n})=>(0,m.jsx)("span",{className:p("font-semibold",t),"data-streamdown":"strong",...n,children:e}),(e,t)=>C(e,t));Be.displayName="MarkdownStrong";var Ae=(0,g.memo)(({children:e,className:t,href:o,node:n,...s})=>{let r=o==="streamdown:incomplete-link";return(0,m.jsx)("a",{className:p("wrap-anywhere font-medium text-primary underline",t),"data-incomplete":r,"data-streamdown":"link",href:o,rel:"noreferrer",target:"_blank",...s,children:e})},(e,t)=>C(e,t)&&e.href===t.href);Ae.displayName="MarkdownA";var $e=(0,g.memo)(({children:e,className:t,node:o,...n})=>(0,m.jsx)("h1",{className:p("mt-6 mb-2 font-semibold text-3xl",t),"data-streamdown":"heading-1",...n,children:e}),(e,t)=>C(e,t));$e.displayName="MarkdownH1";var je=(0,g.memo)(({children:e,className:t,node:o,...n})=>(0,m.jsx)("h2",{className:p("mt-6 mb-2 font-semibold text-2xl",t),"data-streamdown":"heading-2",...n,children:e}),(e,t)=>C(e,t));je.displayName="MarkdownH2";var Re=(0,g.memo)(({children:e,className:t,node:o,...n})=>(0,m.jsx)("h3",{className:p("mt-6 mb-2 font-semibold text-xl",t),"data-streamdown":"heading-3",...n,children:e}),(e,t)=>C(e,t));Re.displayName="MarkdownH3";var De=(0,g.memo)(({children:e,className:t,node:o,...n})=>(0,m.jsx)("h4",{className:p("mt-6 mb-2 font-semibold text-lg",t),"data-streamdown":"heading-4",...n,children:e}),(e,t)=>C(e,t));De.displayName="MarkdownH4";var Ee=(0,g.memo)(({children:e,className:t,node:o,...n})=>(0,m.jsx)("h5",{className:p("mt-6 mb-2 font-semibold text-base",t),"data-streamdown":"heading-5",...n,children:e}),(e,t)=>C(e,t));Ee.displayName="MarkdownH5";var qe=(0,g.memo)(({children:e,className:t,node:o,...n})=>(0,m.jsx)("h6",{className:p("mt-6 mb-2 font-semibold text-sm",t),"data-streamdown":"heading-6",...n,children:e}),(e,t)=>C(e,t));qe.displayName="MarkdownH6";var Oe=(0,g.memo)(({children:e,className:t,node:o,...n})=>{let s=(0,g.useContext)(X),r=ue(s,"table");return(0,m.jsxs)("div",{className:"my-4 flex flex-col space-y-2","data-streamdown":"table-wrapper",children:[r&&(0,m.jsxs)("div",{className:"flex items-center justify-end gap-1",children:[(0,m.jsx)(Ie,{}),(0,m.jsx)(Se,{})]}),(0,m.jsx)("div",{className:"overflow-x-auto",children:(0,m.jsx)("table",{className:p("w-full border-collapse border border-border",t),"data-streamdown":"table",...n,children:e})})]})},(e,t)=>C(e,t));Oe.displayName="MarkdownTable";var ze=(0,g.memo)(({children:e,className:t,node:o,...n})=>(0,m.jsx)("thead",{className:p("bg-muted/80",t),"data-streamdown":"table-header",...n,children:e}),(e,t)=>C(e,t));ze.displayName="MarkdownThead";var _e=(0,g.memo)(({children:e,className:t,node:o,...n})=>(0,m.jsx)("tbody",{className:p("divide-y divide-border bg-muted/40",t),"data-streamdown":"table-body",...n,children:e}),(e,t)=>C(e,t));_e.displayName="MarkdownTbody";var Ue=(0,g.memo)(({children:e,className:t,node:o,...n})=>(0,m.jsx)("tr",{className:p("border-border border-b",t),"data-streamdown":"table-row",...n,children:e}),(e,t)=>C(e,t));Ue.displayName="MarkdownTr";var We=(0,g.memo)(({children:e,className:t,node:o,...n})=>(0,m.jsx)("th",{className:p("whitespace-nowrap px-4 py-2 text-left font-semibold text-sm",t),"data-streamdown":"table-header-cell",...n,children:e}),(e,t)=>C(e,t));We.displayName="MarkdownTh";var Fe=(0,g.memo)(({children:e,className:t,node:o,...n})=>(0,m.jsx)("td",{className:p("px-4 py-2 text-sm",t),"data-streamdown":"table-cell",...n,children:e}),(e,t)=>C(e,t));Fe.displayName="MarkdownTd";var Xe=(0,g.memo)(({children:e,className:t,node:o,...n})=>(0,m.jsx)("blockquote",{className:p("my-4 border-muted-foreground/30 border-l-4 pl-4 text-muted-foreground italic",t),"data-streamdown":"blockquote",...n,children:e}),(e,t)=>C(e,t));Xe.displayName="MarkdownBlockquote";var Je=(0,g.memo)(({children:e,className:t,node:o,...n})=>(0,m.jsx)("sup",{className:p("text-sm",t),"data-streamdown":"superscript",...n,children:e}),(e,t)=>C(e,t));Je.displayName="MarkdownSup";var Ke=(0,g.memo)(({children:e,className:t,node:o,...n})=>(0,m.jsx)("sub",{className:p("text-sm",t),"data-streamdown":"subscript",...n,children:e}),(e,t)=>C(e,t));Ke.displayName="MarkdownSub";var Ve=(0,g.memo)(({children:e,className:t,node:o,...n})=>{if("data-footnotes"in n){let r=l=>{var w,f;if(!(0,g.isValidElement)(l))return!1;let c=Array.isArray(l.props.children)?l.props.children:[l.props.children],d=!1,h=!1;for(let u of c)if(u){if(typeof u=="string")u.trim()!==""&&(d=!0);else if((0,g.isValidElement)(u))if(((w=u.props)==null?void 0:w["data-footnote-backref"])!==void 0)h=!0;else{let T=Array.isArray(u.props.children)?u.props.children:[u.props.children];for(let k of T){if(typeof k=="string"&&k.trim()!==""){d=!0;break}if((0,g.isValidElement)(k)&&((f=k.props)==null?void 0:f["data-footnote-backref"])===void 0){d=!0;break}}}}return h&&!d},i=Array.isArray(e)?e.map(l=>{if(!(0,g.isValidElement)(l))return l;if(l.type===pe){let d=(Array.isArray(l.props.children)?l.props.children:[l.props.children]).filter(h=>!r(h));return d.length===0?null:{...l,props:{...l.props,children:d}}}return l}):e;return(Array.isArray(i)?i.some(l=>l!==null):i!==null)?(0,m.jsx)("section",{className:t,...n,children:i}):null}return(0,m.jsx)("section",{className:t,...n,children:e})},(e,t)=>C(e,t));Ve.displayName="MarkdownSection";var Dt=({node:e,className:t,children:o,...n})=>{var h,w,f;let s=((h=e==null?void 0:e.position)==null?void 0:h.start.line)===((w=e==null?void 0:e.position)==null?void 0:w.end.line),r=(0,g.useContext)(ee),i=(0,g.useContext)(X);if(s)return(0,m.jsx)("code",{className:p("rounded bg-muted px-1.5 py-0.5 font-mono text-sm",t),"data-streamdown":"inline-code",...n,children:o});let a=t==null?void 0:t.match(Rt),l=(f=a==null?void 0:a.at(1))!=null?f:"",c="";if((0,g.isValidElement)(o)&&o.props&&typeof o.props=="object"&&"children"in o.props&&typeof o.props.children=="string"?c=o.props.children:typeof o=="string"&&(c=o),l==="mermaid"){let u=ue(i,"mermaid"),T=me(i,"download"),k=me(i,"copy"),y=me(i,"fullscreen");return(0,m.jsxs)("div",{className:p("group relative my-4 h-auto rounded-xl border p-4",t),"data-streamdown":"mermaid-block",children:[u&&(T||k||y)&&(0,m.jsxs)("div",{className:"flex items-center justify-end gap-2",children:[T&&(0,m.jsx)(le,{code:c,language:l}),k&&(0,m.jsx)(ce,{code:c}),y&&(0,m.jsx)(Me,{chart:c,config:r})]}),(0,m.jsx)(de,{chart:c,config:r})]})}let d=ue(i,"code");return(0,m.jsx)(ve,{className:p("overflow-x-auto border-border border-t",t),code:c,"data-language":l,"data-streamdown":"code-block",language:l,preClassName:"overflow-x-auto font-mono text-xs p-4 bg-muted/40",children:d&&(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)(le,{code:c,language:l}),(0,m.jsx)(ce,{})]})})},Ge=(0,g.memo)(Dt,(e,t)=>e.className===t.className&&Y(e.node,t.node));Ge.displayName="MarkdownCode";var Qe=(0,g.memo)(Ce,(e,t)=>e.className===t.className&&Y(e.node,t.node));Qe.displayName="MarkdownImg";var Ze=(0,g.memo)(({children:e,className:t,node:o,...n})=>{var i;let r=(Array.isArray(e)?e:[e]).filter(a=>a!=null&&a!=="");return r.length===1&&(0,g.isValidElement)(r[0])&&((i=r[0].props.node)==null?void 0:i.tagName)==="img"?(0,m.jsx)(m.Fragment,{children:e}):(0,m.jsx)("p",{className:t,...n,children:e})},(e,t)=>C(e,t));Ze.displayName="MarkdownParagraph";var Ye={ol:pe,li:Le,ul:xe,hr:He,strong:Be,a:Ae,h1:$e,h2:je,h3:Re,h4:De,h5:Ee,h6:qe,table:Oe,thead:ze,tbody:_e,tr:Ue,th:We,td:Fe,blockquote:Xe,code:Ge,img:Qe,pre:({children:e})=>e,sup:Je,sub:Ke,p:Ze,section:Ve};var et=require("marked"),Et=/\[\^[^\]\s]{1,200}\](?!:)/,qt=/\[\^[^\]\s]{1,200}\]:/,Ot=/<\/(\w+)>/,zt=/<(\w+)[\s>]/,te=e=>{let t=Et.test(e),o=qt.test(e);if(t||o)return[e];let n=et.Lexer.lex(e,{gfm:!0}),s=[],r=[];for(let i of n){let a=i.raw;if(r.length>0){if(s[s.length-1]+=a,i.type==="html"){let l=a.match(Ot);if(l){let c=l[1];r.at(-1)===c&&r.pop()}}continue}if(i.type==="html"&&i.block){let l=a.match(zt);if(l){let c=l[1];a.includes(`</${c}>`)||r.push(c)}}if(a.trim()==="$$"&&s.length>0){let l=s.at(-1);if(!l){s.push(a);continue}let c=l.trimStart().startsWith("$$"),d=(l.match(/\$\$/g)||[]).length;if(c&&d%2===1){s[s.length-1]=l+a;continue}}if(s.length>0&&a.trimEnd().endsWith("$$")){let l=s.at(-1);if(!l){s.push(a);continue}let c=l.trimStart().startsWith("$$"),d=(l.match(/\$\$/g)||[]).length,h=(a.match(/\$\$/g)||[]).length;if(c&&d%2===1&&!a.trimStart().startsWith("$$")&&h===1){s[s.length-1]=l+a;continue}}s.push(a)}return s};var _t=/(!?\[)([^\]]*?)$/,Ut=/(\*\*)([^*]*?)$/,Wt=/(__)([^_]*?)$/,Ft=/(\*\*\*)([^*]*?)$/,Xt=/(\*)([^*]*?)$/,Jt=/(_)([^_]*?)$/,Kt=/(`)([^`]*?)$/,Vt=/(~~)([^~]*?)$/,Gt=/(!?)\[([^\]]+)\]\(([^)]+)$/,R=/^[\s_~*`]*$/,tt=/^[\s]*[-*+][\s]+$/,A=/[\p{L}\p{N}_]/u,Qt=/\n+$/,Zt=/^```[^`\n]*```?$/,Yt=/^\*{4,}$/,oe=e=>{let t=(e.match(/```/g)||[]).length;return t>0&&t%2===0&&e.includes(`
8
+ `)},eo=e=>{let t=e.match(Gt);if(t){let n=t[1]==="!",s=t[2],r=t[3],i=e.lastIndexOf(`${n?"!":""}[${s}](${r}`),a=e.substring(0,i);return n?a:`${a}[${s}](streamdown:incomplete-link)`}let o=e.match(_t);if(o){if(o[1].startsWith("!")){let s=e.lastIndexOf(o[1]);return e.substring(0,s)}return`${e}](streamdown:incomplete-link)`}return e},to=e=>{if(oe(e))return e;let t=e.match(Ut);if(t){let o=t[2];if(!o||R.test(o))return e;let n=e.lastIndexOf(t[1]),r=e.substring(0,n).lastIndexOf(`
9
+ `),i=r===-1?0:r+1,a=e.substring(i,n);if(tt.test(a)&&o.includes(`
10
+ `))return e;if((e.match(/\*\*/g)||[]).length%2===1)return`${e}**`}return e},oo=e=>{let t=e.match(Wt);if(t){let o=t[2];if(!o||R.test(o))return e;let n=e.lastIndexOf(t[1]),r=e.substring(0,n).lastIndexOf(`
11
+ `),i=r===-1?0:r+1,a=e.substring(i,n);if(tt.test(a)&&o.includes(`
12
+ `))return e;if((e.match(/__/g)||[]).length%2===1)return`${e}__`}return e},no=e=>e.split("").reduce((t,o,n)=>{if(o==="*"){let s=e[n-1],r=e[n+1];if(s==="\\"||s&&r&&A.test(s)&&A.test(r))return t;let i=n;for(let l=n-1;l>=0;l--){if(e[l]===`
13
+ `){i=l+1;break}if(l===0){i=0;break}}if(e.substring(i,n).trim()===""&&(r===" "||r===" "))return t;if(s!=="*"&&r!=="*")return t+1}return t},0),ro=e=>{if(oe(e))return e;if(e.match(Xt)){let o=-1;for(let r=0;r<e.length;r++)if(e[r]==="*"&&e[r-1]!=="*"&&e[r+1]!=="*"&&e[r-1]!=="\\"){let i=r>0?e[r-1]:"",a=r<e.length-1?e[r+1]:"";if(i&&a&&A.test(i)&&A.test(a))continue;o=r;break}if(o===-1)return e;let n=e.substring(o+1);if(!n||R.test(n))return e;if(no(e)%2===1)return`${e}*`}return e},ot=(e,t)=>{let o=!1,n=!1;for(let s=0;s<e.length&&s<t;s+=1){if(e[s]==="\\"&&e[s+1]==="$"){s+=1;continue}e[s]==="$"&&(e[s+1]==="$"?(n=!n,s+=1,o=!1):n||(o=!o))}return o||n},so=e=>e.split("").reduce((t,o,n)=>{if(o==="_"){let s=e[n-1],r=e[n+1];if(s==="\\"||ot(e,n)||s&&r&&A.test(s)&&A.test(r))return t;if(s!=="_"&&r!=="_")return t+1}return t},0),io=e=>{if(oe(e))return e;if(e.match(Jt)){let o=-1;for(let r=0;r<e.length;r++)if(e[r]==="_"&&e[r-1]!=="_"&&e[r+1]!=="_"&&e[r-1]!=="\\"&&!ot(e,r)){let i=r>0?e[r-1]:"",a=r<e.length-1?e[r+1]:"";if(i&&a&&A.test(i)&&A.test(a))continue;o=r;break}if(o===-1)return e;let n=e.substring(o+1);if(!n||R.test(n))return e;if(so(e)%2===1){let r=e.match(Qt);return r?`${e.slice(0,-r[0].length)}_${r[0]}`:`${e}_`}}return e},ao=(e,t)=>{let o=e.substring(t,t+3)==="```",n=t>0&&e.substring(t-1,t+2)==="```",s=t>1&&e.substring(t-2,t+1)==="```";return o||n||s},lo=e=>{let t=0;for(let o=0;o<e.length;o+=1)e[o]==="`"&&!ao(e,o)&&(t+=1);return t},co=e=>{if(e.match(Zt)&&!e.includes(`
11
14
  `))return e.endsWith("``")&&!e.endsWith("```")?`${e}\``:e;let o=(e.match(/```/g)||[]).length,n=o%2===1;if(o>0&&o%2===0&&e.includes(`
12
- `)||(e.endsWith("```\n")||e.endsWith("```"))&&o%2===0)return e;let r=e.match(ut);if(r&&!n){let s=r[2];if(!s||/^[\s_~*`]*$/.test(s))return e;if(Tt(e)%2===1)return`${e}\``}return e},Pt=e=>{let t=e.match(gt);if(t){let o=t[2];if(!o||/^[\s_~*`]*$/.test(o))return e;if((e.match(/~~/g)||[]).length%2===1)return`${e}~~`}return e};var Nt=e=>{if((e.match(/\$\$/g)||[]).length%2===0)return e;let o=e.indexOf("$$");return o!==-1&&e.indexOf(`
15
+ `)||(e.endsWith("```\n")||e.endsWith("```"))&&o%2===0)return e;let s=e.match(Kt);if(s&&!n){let r=s[2];if(!r||R.test(r))return e;if(lo(e)%2===1)return`${e}\``}return e},mo=e=>{let t=e.match(Vt);if(t){let o=t[2];if(!o||R.test(o))return e;if((e.match(/~~/g)||[]).length%2===1)return`${e}~~`}return e};var uo=e=>{if((e.match(/\$\$/g)||[]).length%2===0)return e;let o=e.indexOf("$$");return o!==-1&&e.indexOf(`
13
16
  `,o)!==-1&&!e.endsWith(`
14
17
  `)?`${e}
15
- $$`:`${e}$$`},It=e=>{let t=0,o=e.match(/\*+/g)||[];for(let n of o){let r=n.length;r>=3&&(t+=Math.floor(r/3))}return t},St=e=>{if(W(e)||/^\*{4,}$/.test(e))return e;let t=e.match(ct);if(t){let o=t[2];if(!o||/^[\s_~*`]*$/.test(o))return e;if(It(e)%2===1)return`${e}***`}return e},qe=e=>{if(!e||typeof e!="string")return e;let t=e,o=ft(t);return o.endsWith("](streamdown:incomplete-link)")?o:(t=o,t=St(t),t=ht(t),t=bt(t),t=yt(t),t=vt(t),t=Ct(t),t=Pt(t),t=Nt(t),t)};var S=require("react/jsx-runtime"),Xe={harden:[ze.harden,{allowedImagePrefixes:["*"],allowedLinkPrefixes:["*"],defaultOrigin:void 0,allowDataImages:!0}],raw:Oe.default,katex:[_e.default,{errorColor:"var(--color-muted-foreground)"}]},Je={gfm:[We.default,{}],math:[Ue.default,{singleDollarTextMath:!1}]},E=(0,M.createContext)(["github-light","github-dark"]),O=(0,M.createContext)(void 0),D=(0,M.createContext)(!0),I=(0,M.createContext)({isAnimating:!1}),Fe=(0,M.memo)(({content:e,shouldParseIncompleteMarkdown:t,...o})=>{let n=(0,M.useMemo)(()=>typeof e=="string"&&t?qe(e.trim()):e,[e,t]);return(0,S.jsx)(Ee.default,{...o,children:n})},(e,t)=>e.content===t.content);Fe.displayName="Block";var Ve=(0,M.memo)(({children:e,parseIncompleteMarkdown:t=!0,components:o,rehypePlugins:n=Object.values(Xe),remarkPlugins:r=Object.values(Je),className:s,shikiTheme:i=["github-light","github-dark"],mermaidConfig:d,controls:a=!0,isAnimating:l=!1,...c})=>{let u=(0,M.useId)(),b=(0,M.useMemo)(()=>Re(typeof e=="string"?e:""),[e]);return(0,S.jsx)(E.Provider,{value:i,children:(0,S.jsx)(O.Provider,{value:d,children:(0,S.jsx)(D.Provider,{value:a,children:(0,S.jsx)(I.Provider,{value:{isAnimating:l},children:(0,S.jsx)("div",{className:p("space-y-4",s),children:b.map((f,h)=>(0,S.jsx)(Fe,{components:{...Ae,...o},content:f,rehypePlugins:n,remarkPlugins:r,shouldParseIncompleteMarkdown:t,...c},`${u}-block-${h}`))})})})})})},(e,t)=>e.children===t.children&&e.shikiTheme===t.shikiTheme&&e.isAnimating===t.isAnimating);Ve.displayName="Streamdown";0&&(module.exports={ControlsContext,MermaidConfigContext,ShikiThemeContext,Streamdown,StreamdownRuntimeContext,defaultRehypePlugins,defaultRemarkPlugins});
18
+ $$`:`${e}$$`},po=e=>{let t=0,o=e.match(/\*+/g)||[];for(let n of o){let s=n.length;s>=3&&(t+=Math.floor(s/3))}return t},go=e=>{if(oe(e)||Yt.test(e))return e;let t=e.match(Ft);if(t){let o=t[2];if(!o||R.test(o))return e;if(po(e)%2===1)return`${e}***`}return e},ne=e=>{if(!e||typeof e!="string")return e;let t=e,o=eo(t);return o.endsWith("](streamdown:incomplete-link)")?o:(t=o,t=go(t),t=to(t),t=oo(t),t=ro(t),t=io(t),t=co(t),t=mo(t),t=uo(t),t)};var pt=require("react-markdown"),$=require("react/jsx-runtime"),dt={harden:[rt.harden,{allowedImagePrefixes:["*"],allowedLinkPrefixes:["*"],defaultOrigin:void 0,allowDataImages:!0}],raw:st.default,katex:[re.default,{errorColor:"var(--color-muted-foreground)"}]},mt={gfm:[lt.default,{}],math:[ct.default,{singleDollarTextMath:!1}],cjkFriendly:[it.default,{}],cjkFriendlyGfmStrikethrough:[at.default,{}]},Q=(0,M.createContext)(["github-light","github-dark"]),ee=(0,M.createContext)(void 0),X=(0,M.createContext)(!0),H=(0,M.createContext)({isAnimating:!1}),ge=(0,M.memo)(({content:e,shouldParseIncompleteMarkdown:t,...o})=>{let n=(0,M.useMemo)(()=>typeof e=="string"&&t?ne(e.trim()):e,[e,t]);return(0,$.jsx)(nt.default,{...o,children:n})},(e,t)=>e.content===t.content);ge.displayName="Block";var ho=["github-light","github-dark"],ut=(0,M.memo)(({children:e,parseIncompleteMarkdown:t=!0,components:o,rehypePlugins:n=Object.values(dt),remarkPlugins:s=Object.values(mt),className:r,shikiTheme:i=ho,mermaidConfig:a,controls:l=!0,isAnimating:c=!1,urlTransform:d=u=>u,BlockComponent:h=ge,parseMarkdownIntoBlocksFn:w=te,...f})=>{let u=(0,M.useId)(),T=(0,M.useMemo)(()=>w(typeof e=="string"?e:""),[e,w]);(0,M.useEffect)(()=>{Array.isArray(n)&&n.some(y=>Array.isArray(y)?y[0]===re.default:y===re.default)&&import("katex/dist/katex.min.css")},[n]);let k=(0,M.useMemo)(()=>({isAnimating:c}),[c]);return(0,$.jsx)(Q.Provider,{value:i,children:(0,$.jsx)(ee.Provider,{value:a,children:(0,$.jsx)(X.Provider,{value:l,children:(0,$.jsx)(H.Provider,{value:k,children:(0,$.jsx)("div",{className:p("space-y-4",r),children:T.map((y,L)=>(0,$.jsx)(h,{components:{...Ye,...o},content:y,index:L,rehypePlugins:n,remarkPlugins:s,shouldParseIncompleteMarkdown:t,urlTransform:d,...f},`${u}-block-${L}`))})})})})})},(e,t)=>e.children===t.children&&e.shikiTheme===t.shikiTheme&&e.isAnimating===t.isAnimating);ut.displayName="Streamdown";0&&(module.exports={Block,ControlsContext,MermaidConfigContext,ShikiThemeContext,Streamdown,StreamdownRuntimeContext,defaultRehypePlugins,defaultRemarkPlugins,defaultUrlTransform,parseIncompleteMarkdown,parseMarkdownIntoBlocks});
package/dist/index.d.cts CHANGED
@@ -1,17 +1,28 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import * as react from 'react';
3
- import { Options } from 'react-markdown';
4
- import { BundledTheme } from 'shiki';
5
3
  import { MermaidConfig } from 'mermaid';
6
4
  export { MermaidConfig } from 'mermaid';
5
+ import { Options } from 'react-markdown';
6
+ export { defaultUrlTransform } from 'react-markdown';
7
+ import { BundledTheme } from 'shiki';
7
8
  import { Pluggable } from 'unified';
8
9
 
10
+ declare const parseMarkdownIntoBlocks: (markdown: string) => string[];
11
+
12
+ declare const parseIncompleteMarkdown: (text: string) => string;
13
+
9
14
  type ControlsConfig = boolean | {
10
15
  table?: boolean;
11
16
  code?: boolean;
12
- mermaid?: boolean;
17
+ mermaid?: boolean | {
18
+ download?: boolean;
19
+ copy?: boolean;
20
+ fullscreen?: boolean;
21
+ };
13
22
  };
14
23
  type StreamdownProps = Options & {
24
+ BlockComponent?: React.ComponentType<BlockProps>;
25
+ parseMarkdownIntoBlocksFn?: (markdown: string) => string[];
15
26
  parseIncompleteMarkdown?: boolean;
16
27
  className?: string;
17
28
  shikiTheme?: [BundledTheme, BundledTheme];
@@ -28,6 +39,12 @@ type StreamdownRuntimeContextType = {
28
39
  isAnimating: boolean;
29
40
  };
30
41
  declare const StreamdownRuntimeContext: react.Context<StreamdownRuntimeContextType>;
31
- declare const Streamdown: react.MemoExoticComponent<({ children, parseIncompleteMarkdown: shouldParseIncompleteMarkdown, components, rehypePlugins, remarkPlugins, className, shikiTheme, mermaidConfig, controls, isAnimating, ...props }: StreamdownProps) => react_jsx_runtime.JSX.Element>;
42
+ type BlockProps = Options & {
43
+ content: string;
44
+ shouldParseIncompleteMarkdown: boolean;
45
+ index: number;
46
+ };
47
+ declare const Block: react.MemoExoticComponent<({ content, shouldParseIncompleteMarkdown, ...props }: BlockProps) => react_jsx_runtime.JSX.Element>;
48
+ declare const Streamdown: react.MemoExoticComponent<({ children, parseIncompleteMarkdown: shouldParseIncompleteMarkdown, components, rehypePlugins, remarkPlugins, className, shikiTheme, mermaidConfig, controls, isAnimating, urlTransform, BlockComponent, parseMarkdownIntoBlocksFn, ...props }: StreamdownProps) => react_jsx_runtime.JSX.Element>;
32
49
 
33
- export { type ControlsConfig, ControlsContext, MermaidConfigContext, ShikiThemeContext, Streamdown, type StreamdownProps, StreamdownRuntimeContext, type StreamdownRuntimeContextType, defaultRehypePlugins, defaultRemarkPlugins };
50
+ export { Block, type ControlsConfig, ControlsContext, MermaidConfigContext, ShikiThemeContext, Streamdown, type StreamdownProps, StreamdownRuntimeContext, type StreamdownRuntimeContextType, defaultRehypePlugins, defaultRemarkPlugins, parseIncompleteMarkdown, parseMarkdownIntoBlocks };
package/dist/index.d.ts CHANGED
@@ -1,17 +1,28 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import * as react from 'react';
3
- import { Options } from 'react-markdown';
4
- import { BundledTheme } from 'shiki';
5
3
  import { MermaidConfig } from 'mermaid';
6
4
  export { MermaidConfig } from 'mermaid';
5
+ import { Options } from 'react-markdown';
6
+ export { defaultUrlTransform } from 'react-markdown';
7
+ import { BundledTheme } from 'shiki';
7
8
  import { Pluggable } from 'unified';
8
9
 
10
+ declare const parseMarkdownIntoBlocks: (markdown: string) => string[];
11
+
12
+ declare const parseIncompleteMarkdown: (text: string) => string;
13
+
9
14
  type ControlsConfig = boolean | {
10
15
  table?: boolean;
11
16
  code?: boolean;
12
- mermaid?: boolean;
17
+ mermaid?: boolean | {
18
+ download?: boolean;
19
+ copy?: boolean;
20
+ fullscreen?: boolean;
21
+ };
13
22
  };
14
23
  type StreamdownProps = Options & {
24
+ BlockComponent?: React.ComponentType<BlockProps>;
25
+ parseMarkdownIntoBlocksFn?: (markdown: string) => string[];
15
26
  parseIncompleteMarkdown?: boolean;
16
27
  className?: string;
17
28
  shikiTheme?: [BundledTheme, BundledTheme];
@@ -28,6 +39,12 @@ type StreamdownRuntimeContextType = {
28
39
  isAnimating: boolean;
29
40
  };
30
41
  declare const StreamdownRuntimeContext: react.Context<StreamdownRuntimeContextType>;
31
- declare const Streamdown: react.MemoExoticComponent<({ children, parseIncompleteMarkdown: shouldParseIncompleteMarkdown, components, rehypePlugins, remarkPlugins, className, shikiTheme, mermaidConfig, controls, isAnimating, ...props }: StreamdownProps) => react_jsx_runtime.JSX.Element>;
42
+ type BlockProps = Options & {
43
+ content: string;
44
+ shouldParseIncompleteMarkdown: boolean;
45
+ index: number;
46
+ };
47
+ declare const Block: react.MemoExoticComponent<({ content, shouldParseIncompleteMarkdown, ...props }: BlockProps) => react_jsx_runtime.JSX.Element>;
48
+ declare const Streamdown: react.MemoExoticComponent<({ children, parseIncompleteMarkdown: shouldParseIncompleteMarkdown, components, rehypePlugins, remarkPlugins, className, shikiTheme, mermaidConfig, controls, isAnimating, urlTransform, BlockComponent, parseMarkdownIntoBlocksFn, ...props }: StreamdownProps) => react_jsx_runtime.JSX.Element>;
32
49
 
33
- export { type ControlsConfig, ControlsContext, MermaidConfigContext, ShikiThemeContext, Streamdown, type StreamdownProps, StreamdownRuntimeContext, type StreamdownRuntimeContextType, defaultRehypePlugins, defaultRemarkPlugins };
50
+ export { Block, type ControlsConfig, ControlsContext, MermaidConfigContext, ShikiThemeContext, Streamdown, type StreamdownProps, StreamdownRuntimeContext, type StreamdownRuntimeContextType, defaultRehypePlugins, defaultRemarkPlugins, parseIncompleteMarkdown, parseMarkdownIntoBlocks };
package/dist/index.js CHANGED
@@ -1,15 +1,18 @@
1
- "use client";import{createContext as D,memo as We,useId as Ht,useMemo as Ue}from"react";import At from"react-markdown";import jt from"rehype-katex";import Rt from"rehype-raw";import Dt from"remark-gfm";import qt from"remark-math";import"katex/dist/katex.min.css";import{harden as Et}from"rehype-harden";import{isValidElement as S,memo as b,useContext as J}from"react";import{CheckIcon as Fe,CopyIcon as Ve,DownloadIcon as Ge}from"lucide-react";import{createContext as Ke,useContext as L,useEffect as Y,useRef as Z,useState as _}from"react";import{bundledLanguages as Qe,createHighlighter as K}from"shiki";import{createJavaScriptRegexEngine as Ye}from"shiki/engine/javascript";import{clsx as Xe}from"clsx";import{twMerge as Je}from"tailwind-merge";var m=(...e)=>Je(Xe(e)),P=(e,t,o)=>{let n=typeof t=="string"?new Blob([t],{type:o}):t,r=URL.createObjectURL(n),s=document.createElement("a");s.href=r,s.download=e,document.body.appendChild(s),s.click(),document.body.removeChild(s),URL.revokeObjectURL(r)};import{jsx as v,jsxs as E}from"react/jsx-runtime";var Ze=/<pre(\s|>)/,W=Ke({code:""}),O=class{constructor(){this.lightHighlighter=null;this.darkHighlighter=null;this.lightTheme=null;this.darkTheme=null;this.loadedLanguages=new Set;this.initializationPromise=null}isLanguageSupported(t){return Object.hasOwn(Qe,t)}getFallbackLanguage(){return"text"}async ensureHighlightersInitialized(t,o){var c,p;let[n,r]=t,s=Ye({forgiving:!0}),i=!this.lightHighlighter||this.lightTheme!==n,d=!this.darkHighlighter||this.darkTheme!==r;(i||d)&&this.loadedLanguages.clear();let a=this.isLanguageSupported(o),l=!this.loadedLanguages.has(o)&&a;if(i?(this.lightHighlighter=await K({themes:[n],langs:a?[o]:[],engine:s}),this.lightTheme=n,a&&this.loadedLanguages.add(o)):l&&await((c=this.lightHighlighter)==null?void 0:c.loadLanguage(o)),d){let h=l?[...this.loadedLanguages].concat(a?[o]:[]):Array.from(this.loadedLanguages);this.darkHighlighter=await K({themes:[r],langs:h.length>0?h:a?[o]:[],engine:s}),this.darkTheme=r}else l&&await((p=this.darkHighlighter)==null?void 0:p.loadLanguage(o));l&&this.loadedLanguages.add(o)}async highlightCode(t,o,n,r){var p,h;this.initializationPromise&&await this.initializationPromise,this.initializationPromise=this.ensureHighlightersInitialized(n,o),await this.initializationPromise,this.initializationPromise=null;let[s,i]=n,d=this.isLanguageSupported(o)?o:this.getFallbackLanguage(),a=(p=this.lightHighlighter)==null?void 0:p.codeToHtml(t,{lang:d,theme:s}),l=(h=this.darkHighlighter)==null?void 0:h.codeToHtml(t,{lang:d,theme:i}),c=g=>r?g.replace(Ze,`<pre class="${r}"$1`):g;return[c(a),c(l)]}},et=new O,ee=({code:e,language:t,className:o,children:n,preClassName:r,...s})=>{let[i,d]=_(""),[a,l]=_(""),c=Z(!1),[p,h]=L(X);return Y(()=>(c.current=!0,et.highlightCode(e,t,[p,h],r).then(([g,f])=>{c.current&&(d(g),l(f))}),()=>{c.current=!1}),[e,t,p,h,r]),v(W.Provider,{value:{code:e},children:E("div",{className:"my-4 w-full overflow-hidden rounded-xl border","data-code-block-container":!0,"data-language":t,children:[E("div",{className:"flex items-center justify-between bg-muted/80 p-3 text-muted-foreground text-xs","data-code-block-header":!0,"data-language":t,children:[v("span",{className:"ml-1 font-mono lowercase",children:t}),v("div",{className:"flex items-center gap-2",children:n})]}),v("div",{className:"w-full",children:E("div",{className:"min-w-full",children:[v("div",{className:m("overflow-x-auto dark:hidden",o),dangerouslySetInnerHTML:{__html:i},"data-code-block":!0,"data-language":t,...s}),v("div",{className:m("hidden overflow-x-auto dark:block",o),dangerouslySetInnerHTML:{__html:a},"data-code-block":!0,"data-language":t,...s})]})})]})})},Q={"1c":"1c","1c-query":"1cq",abap:"abap","actionscript-3":"as",ada:"ada",adoc:"adoc","angular-html":"html","angular-ts":"ts",apache:"conf",apex:"cls",apl:"apl",applescript:"applescript",ara:"ara",asciidoc:"adoc",asm:"asm",astro:"astro",awk:"awk",ballerina:"bal",bash:"sh",bat:"bat",batch:"bat",be:"be",beancount:"beancount",berry:"berry",bibtex:"bib",bicep:"bicep",blade:"blade.php",bsl:"bsl",c:"c","c#":"cs","c++":"cpp",cadence:"cdc",cairo:"cairo",cdc:"cdc",clarity:"clar",clj:"clj",clojure:"clj","closure-templates":"soy",cmake:"cmake",cmd:"cmd",cobol:"cob",codeowners:"CODEOWNERS",codeql:"ql",coffee:"coffee",coffeescript:"coffee","common-lisp":"lisp",console:"sh",coq:"v",cpp:"cpp",cql:"cql",crystal:"cr",cs:"cs",csharp:"cs",css:"css",csv:"csv",cue:"cue",cypher:"cql",d:"d",dart:"dart",dax:"dax",desktop:"desktop",diff:"diff",docker:"dockerfile",dockerfile:"dockerfile",dotenv:"env","dream-maker":"dm",edge:"edge",elisp:"el",elixir:"ex",elm:"elm","emacs-lisp":"el",erb:"erb",erl:"erl",erlang:"erl",f:"f","f#":"fs",f03:"f03",f08:"f08",f18:"f18",f77:"f77",f90:"f90",f95:"f95",fennel:"fnl",fish:"fish",fluent:"ftl",for:"for","fortran-fixed-form":"f","fortran-free-form":"f90",fs:"fs",fsharp:"fs",fsl:"fsl",ftl:"ftl",gdresource:"tres",gdscript:"gd",gdshader:"gdshader",genie:"gs",gherkin:"feature","git-commit":"gitcommit","git-rebase":"gitrebase",gjs:"js",gleam:"gleam","glimmer-js":"js","glimmer-ts":"ts",glsl:"glsl",gnuplot:"plt",go:"go",gql:"gql",graphql:"graphql",groovy:"groovy",gts:"gts",hack:"hack",haml:"haml",handlebars:"hbs",haskell:"hs",haxe:"hx",hbs:"hbs",hcl:"hcl",hjson:"hjson",hlsl:"hlsl",hs:"hs",html:"html","html-derivative":"html",http:"http",hxml:"hxml",hy:"hy",imba:"imba",ini:"ini",jade:"jade",java:"java",javascript:"js",jinja:"jinja",jison:"jison",jl:"jl",js:"js",json:"json",json5:"json5",jsonc:"jsonc",jsonl:"jsonl",jsonnet:"jsonnet",jssm:"jssm",jsx:"jsx",julia:"jl",kotlin:"kt",kql:"kql",kt:"kt",kts:"kts",kusto:"kql",latex:"tex",lean:"lean",lean4:"lean",less:"less",liquid:"liquid",lisp:"lisp",lit:"lit",llvm:"ll",log:"log",logo:"logo",lua:"lua",luau:"luau",make:"mak",makefile:"mak",markdown:"md",marko:"marko",matlab:"m",md:"md",mdc:"mdc",mdx:"mdx",mediawiki:"wiki",mermaid:"mmd",mips:"s",mipsasm:"s",mmd:"mmd",mojo:"mojo",move:"move",nar:"nar",narrat:"narrat",nextflow:"nf",nf:"nf",nginx:"conf",nim:"nim",nix:"nix",nu:"nu",nushell:"nu",objc:"m","objective-c":"m","objective-cpp":"mm",ocaml:"ml",pascal:"pas",perl:"pl",perl6:"p6",php:"php",plsql:"pls",po:"po",polar:"polar",postcss:"pcss",pot:"pot",potx:"potx",powerquery:"pq",powershell:"ps1",prisma:"prisma",prolog:"pl",properties:"properties",proto:"proto",protobuf:"proto",ps:"ps",ps1:"ps1",pug:"pug",puppet:"pp",purescript:"purs",py:"py",python:"py",ql:"ql",qml:"qml",qmldir:"qmldir",qss:"qss",r:"r",racket:"rkt",raku:"raku",razor:"cshtml",rb:"rb",reg:"reg",regex:"regex",regexp:"regexp",rel:"rel",riscv:"s",rs:"rs",rst:"rst",ruby:"rb",rust:"rs",sas:"sas",sass:"sass",scala:"scala",scheme:"scm",scss:"scss",sdbl:"sdbl",sh:"sh",shader:"shader",shaderlab:"shader",shell:"sh",shellscript:"sh",shellsession:"sh",smalltalk:"st",solidity:"sol",soy:"soy",sparql:"rq",spl:"spl",splunk:"spl",sql:"sql","ssh-config":"config",stata:"do",styl:"styl",stylus:"styl",svelte:"svelte",swift:"swift","system-verilog":"sv",systemd:"service",talon:"talon",talonscript:"talon",tasl:"tasl",tcl:"tcl",templ:"templ",terraform:"tf",tex:"tex",tf:"tf",tfvars:"tfvars",toml:"toml",ts:"ts","ts-tags":"ts",tsp:"tsp",tsv:"tsv",tsx:"tsx",turtle:"ttl",twig:"twig",typ:"typ",typescript:"ts",typespec:"tsp",typst:"typ",v:"v",vala:"vala",vb:"vb",verilog:"v",vhdl:"vhdl",vim:"vim",viml:"vim",vimscript:"vim",vue:"vue","vue-html":"html","vue-vine":"vine",vy:"vy",vyper:"vy",wasm:"wasm",wenyan:"wy",wgsl:"wgsl",wiki:"wiki",wikitext:"wiki",wit:"wit",wl:"wl",wolfram:"wl",xml:"xml",xsl:"xsl",yaml:"yaml",yml:"yml",zenscript:"zs",zig:"zig",zsh:"zsh",\u6587\u8A00:"wy"},U=({onDownload:e,onError:t,language:o,children:n,className:r,code:s,...i})=>{let{code:d}=L(W),{isAnimating:a}=L(M),l=s!=null?s:d,p=`file.${o&&o in Q?Q[o]:"txt"}`,h="text/plain",g=()=>{try{P(p,l,h),e==null||e()}catch(f){t==null||t(f)}};return v("button",{className:m("cursor-pointer p-1 text-muted-foreground transition-all hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50",r),disabled:a,onClick:g,title:"Download file",type:"button",...i,children:n!=null?n:v(Ge,{size:14})})},z=({onCopy:e,onError:t,timeout:o=2e3,children:n,className:r,code:s,...i})=>{let[d,a]=_(!1),l=Z(0),{code:c}=L(W),{isAnimating:p}=L(M),h=s!=null?s:c,g=async()=>{var w;if(typeof window=="undefined"||!((w=navigator==null?void 0:navigator.clipboard)!=null&&w.writeText)){t==null||t(new Error("Clipboard API not available"));return}try{d||(await navigator.clipboard.writeText(h),a(!0),e==null||e(),l.current=window.setTimeout(()=>a(!1),o))}catch(y){t==null||t(y)}};Y(()=>()=>{window.clearTimeout(l.current)},[]);let f=d?Fe:Ve;return v("button",{className:m("cursor-pointer p-1 text-muted-foreground transition-all hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50",r),disabled:p,onClick:g,type:"button",...i,children:n!=null?n:v(f,{size:14})})};import{DownloadIcon as tt}from"lucide-react";import{jsx as $,jsxs as ot}from"react/jsx-runtime";var te=({node:e,className:t,src:o,alt:n,...r})=>{let s=async()=>{var i;if(o)try{let a=await(await fetch(o)).blob(),c=new URL(o,window.location.origin).pathname.split("/").pop()||"",p=c.includes(".")&&((i=c.split(".").pop())==null?void 0:i.length)<=4,h="";if(p)h=c;else{let g=a.type,f="png";g.includes("jpeg")||g.includes("jpg")?f="jpg":g.includes("png")?f="png":g.includes("svg")?f="svg":g.includes("gif")?f="gif":g.includes("webp")&&(f="webp"),h=`${(n||c||"image").replace(/\.[^/.]+$/,"")}.${f}`}P(h,a,a.type)}catch(d){console.error("Failed to download image:",d)}};return o?ot("div",{className:"group relative my-4 inline-block","data-streamdown":"image-wrapper",children:[$("img",{alt:n,className:m("max-w-full rounded-lg",t),"data-streamdown":"image",src:o,...r}),$("div",{className:"pointer-events-none absolute inset-0 hidden rounded-lg bg-black/10 group-hover:block"}),$("button",{className:m("absolute right-2 bottom-2 flex h-8 w-8 cursor-pointer items-center justify-center rounded-md border border-border bg-background/90 shadow-sm backdrop-blur-sm transition-all duration-200 hover:bg-background","opacity-0 group-hover:opacity-100"),onClick:s,title:"Download image",type:"button",children:$(tt,{size:14})})]}):null};import{useEffect as nt,useState as x}from"react";import{jsx as N,jsxs as H}from"react/jsx-runtime";var st=async e=>{let o={...{startOnLoad:!1,theme:"default",securityLevel:"strict",fontFamily:"monospace",suppressErrorRendering:!0},...e},r=(await import("mermaid")).default;return r.initialize(o),r},oe=({chart:e,className:t,config:o})=>{let[n,r]=x(null),[s,i]=x(!0),[d,a]=x(""),[l,c]=x("");if(nt(()=>{(async()=>{try{r(null),i(!0);let g=await st(o),f=e.split("").reduce((C,q)=>(C<<5)-C+q.charCodeAt(0)|0,0),w=`mermaid-${Math.abs(f)}-${Date.now()}-${Math.random().toString(36).substring(2,9)}`,{svg:y}=await g.render(w,e);a(y),c(y)}catch(g){if(!(l||d)){let f=g instanceof Error?g.message:"Failed to render Mermaid chart";r(f)}}finally{i(!1)}})()},[e,o]),s&&!d&&!l)return N("div",{className:m("my-4 flex justify-center p-4",t),children:H("div",{className:"flex items-center space-x-2 text-muted-foreground",children:[N("div",{className:"h-4 w-4 animate-spin rounded-full border-current border-b-2"}),N("span",{className:"text-sm",children:"Loading diagram..."})]})});if(n&&!d&&!l)return H("div",{className:m("rounded-lg border border-red-200 bg-red-50 p-4",t),children:[H("p",{className:"font-mono text-red-700 text-sm",children:["Mermaid Error: ",n]}),H("details",{className:"mt-2",children:[N("summary",{className:"cursor-pointer text-red-600 text-xs",children:"Show Code"}),N("pre",{className:"mt-2 overflow-x-auto rounded bg-red-100 p-2 text-red-800 text-xs",children:e})]})]});let p=d||l;return N("div",{"aria-label":"Mermaid chart",className:m("my-4 flex justify-center",t),dangerouslySetInnerHTML:{__html:p},role:"img"})};import{CheckIcon as rt,CopyIcon as at,DownloadIcon as it}from"lucide-react";import{useContext as se,useEffect as re,useRef as ae,useState as ie}from"react";import{jsx as I,jsxs as ne}from"react/jsx-runtime";function le(e){var s,i;let t=[],o=[],n=e.querySelectorAll("thead th");for(let d of n)t.push(((s=d.textContent)==null?void 0:s.trim())||"");let r=e.querySelectorAll("tbody tr");for(let d of r){let a=[],l=d.querySelectorAll("td");for(let c of l)a.push(((i=c.textContent)==null?void 0:i.trim())||"");o.push(a)}return{headers:t,rows:o}}function de(e){let{headers:t,rows:o}=e,n=s=>s.includes(",")||s.includes('"')||s.includes(`
2
- `)?`"${s.replace(/"/g,'""')}"`:s,r=[];t.length>0&&r.push(t.map(n).join(","));for(let s of o)r.push(s.map(n).join(","));return r.join(`
3
- `)}function ce(e){let{headers:t,rows:o}=e;if(t.length===0)return"";let n=[],r=t.map(s=>s.replace(/\|/g,"\\|"));n.push(`| ${r.join(" | ")} |`),n.push(`| ${t.map(()=>"---").join(" | ")} |`);for(let s of o){let i=[...s];for(;i.length<t.length;)i.push("");let d=i.map(a=>a.replace(/\|/g,"\\|"));n.push(`| ${d.join(" | ")} |`)}return n.join(`
4
- `)}var me=({children:e,className:t,onCopy:o,onError:n,timeout:r=2e3,format:s="markdown"})=>{let[i,d]=ie(!1),a=ae(0),{isAnimating:l}=se(M),c=async h=>{var g;if(typeof window=="undefined"||!((g=navigator==null?void 0:navigator.clipboard)!=null&&g.write)){n==null||n(new Error("Clipboard API not available"));return}try{if(!i){let w=h.currentTarget.closest('[data-streamdown="table-wrapper"]'),y=w==null?void 0:w.querySelector("table");if(!y){n==null||n(new Error("Table not found"));return}let C=le(y),q=new ClipboardItem({"text/plain":s==="markdown"?ce(C):de(C),"text/html":new Blob([y.outerHTML],{type:"text/html"})});await navigator.clipboard.write([q]),d(!0),o==null||o(),a.current=window.setTimeout(()=>d(!1),r)}}catch(f){n==null||n(f)}};re(()=>()=>{window.clearTimeout(a.current)},[]);let p=i?rt:at;return I("button",{className:m("cursor-pointer p-1 text-muted-foreground transition-all hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50",t),disabled:l,onClick:c,title:`Copy table as ${s}`,type:"button",children:e!=null?e:I(p,{size:14})})};var pe=({children:e,className:t,onDownload:o,onError:n})=>{let[r,s]=ie(!1),i=ae(null),{isAnimating:d}=se(M),a=l=>{var c;try{let p=(c=i.current)==null?void 0:c.closest('[data-streamdown="table-wrapper"]'),h=p==null?void 0:p.querySelector("table");if(!h){n==null||n(new Error("Table not found"));return}let g=le(h),f=l==="csv"?de(g):ce(g);P(`table.${l==="csv"?"csv":"md"}`,f,l==="csv"?"text/csv":"text/markdown"),s(!1),o==null||o(l)}catch(p){n==null||n(p)}};return re(()=>{let l=c=>{i.current&&!i.current.contains(c.target)&&s(!1)};return document.addEventListener("mousedown",l),()=>{document.removeEventListener("mousedown",l)}},[]),ne("div",{className:"relative",ref:i,children:[I("button",{className:m("cursor-pointer p-1 text-muted-foreground transition-all hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50",t),disabled:d,onClick:()=>s(!r),title:"Download table",type:"button",children:e!=null?e:I(it,{size:14})}),r&&ne("div",{className:"absolute top-full right-0 z-10 mt-1 min-w-[120px] rounded-md border border-border bg-background shadow-lg",children:[I("button",{className:"w-full px-3 py-2 text-left text-sm transition-colors hover:bg-muted/40",onClick:()=>a("csv"),type:"button",children:"CSV"}),I("button",{className:"w-full px-3 py-2 text-left text-sm transition-colors hover:bg-muted/40",onClick:()=>a("markdown"),type:"button",children:"Markdown"})]})]})};import{Fragment as qe,jsx as u,jsxs as B}from"react/jsx-runtime";var lt=/language-([^\s]+)/;function A(e,t){if(!(e!=null&&e.position||t!=null&&t.position))return!0;if(!(e!=null&&e.position&&(t!=null&&t.position)))return!1;let o=e.position.start,n=t.position.start,r=e.position.end,s=t.position.end;return(o==null?void 0:o.line)===(n==null?void 0:n.line)&&(o==null?void 0:o.column)===(n==null?void 0:n.column)&&(r==null?void 0:r.line)===(s==null?void 0:s.line)&&(r==null?void 0:r.column)===(s==null?void 0:s.column)}function k(e,t){return e.className===t.className&&A(e.node,t.node)}var F=(e,t)=>typeof e=="boolean"?e:e[t]!==!1,V=b(({children:e,className:t,node:o,...n})=>u("ol",{className:m("ml-4 list-outside list-decimal whitespace-normal",t),"data-streamdown":"ordered-list",...n,children:e}),(e,t)=>k(e,t));V.displayName="MarkdownOl";var ue=b(({children:e,className:t,node:o,...n})=>u("li",{className:m("py-1",t),"data-streamdown":"list-item",...n,children:e}),(e,t)=>e.className===t.className&&A(e.node,t.node));ue.displayName="MarkdownLi";var ge=b(({children:e,className:t,node:o,...n})=>u("ul",{className:m("ml-4 list-outside list-disc whitespace-normal",t),"data-streamdown":"unordered-list",...n,children:e}),(e,t)=>k(e,t));ge.displayName="MarkdownUl";var fe=b(({className:e,node:t,...o})=>u("hr",{className:m("my-6 border-border",e),"data-streamdown":"horizontal-rule",...o}),(e,t)=>k(e,t));fe.displayName="MarkdownHr";var he=b(({children:e,className:t,node:o,...n})=>u("span",{className:m("font-semibold",t),"data-streamdown":"strong",...n,children:e}),(e,t)=>k(e,t));he.displayName="MarkdownStrong";var be=b(({children:e,className:t,href:o,node:n,...r})=>{let s=o==="streamdown:incomplete-link";return u("a",{className:m("wrap-anywhere font-medium text-primary underline",t),"data-incomplete":s,"data-streamdown":"link",href:o,rel:"noreferrer",target:"_blank",...r,children:e})},(e,t)=>k(e,t)&&e.href===t.href);be.displayName="MarkdownA";var ke=b(({children:e,className:t,node:o,...n})=>u("h1",{className:m("mt-6 mb-2 font-semibold text-3xl",t),"data-streamdown":"heading-1",...n,children:e}),(e,t)=>k(e,t));ke.displayName="MarkdownH1";var ye=b(({children:e,className:t,node:o,...n})=>u("h2",{className:m("mt-6 mb-2 font-semibold text-2xl",t),"data-streamdown":"heading-2",...n,children:e}),(e,t)=>k(e,t));ye.displayName="MarkdownH2";var we=b(({children:e,className:t,node:o,...n})=>u("h3",{className:m("mt-6 mb-2 font-semibold text-xl",t),"data-streamdown":"heading-3",...n,children:e}),(e,t)=>k(e,t));we.displayName="MarkdownH3";var ve=b(({children:e,className:t,node:o,...n})=>u("h4",{className:m("mt-6 mb-2 font-semibold text-lg",t),"data-streamdown":"heading-4",...n,children:e}),(e,t)=>k(e,t));ve.displayName="MarkdownH4";var Me=b(({children:e,className:t,node:o,...n})=>u("h5",{className:m("mt-6 mb-2 font-semibold text-base",t),"data-streamdown":"heading-5",...n,children:e}),(e,t)=>k(e,t));Me.displayName="MarkdownH5";var Te=b(({children:e,className:t,node:o,...n})=>u("h6",{className:m("mt-6 mb-2 font-semibold text-sm",t),"data-streamdown":"heading-6",...n,children:e}),(e,t)=>k(e,t));Te.displayName="MarkdownH6";var Ce=b(({children:e,className:t,node:o,...n})=>{let r=J(j),s=F(r,"table");return B("div",{className:"my-4 flex flex-col space-y-2","data-streamdown":"table-wrapper",children:[s&&B("div",{className:"flex items-center justify-end gap-1",children:[u(me,{}),u(pe,{})]}),u("div",{className:"overflow-x-auto",children:u("table",{className:m("w-full border-collapse border border-border",t),"data-streamdown":"table",...n,children:e})})]})},(e,t)=>k(e,t));Ce.displayName="MarkdownTable";var Pe=b(({children:e,className:t,node:o,...n})=>u("thead",{className:m("bg-muted/80",t),"data-streamdown":"table-header",...n,children:e}),(e,t)=>k(e,t));Pe.displayName="MarkdownThead";var Ne=b(({children:e,className:t,node:o,...n})=>u("tbody",{className:m("divide-y divide-border bg-muted/40",t),"data-streamdown":"table-body",...n,children:e}),(e,t)=>k(e,t));Ne.displayName="MarkdownTbody";var Ie=b(({children:e,className:t,node:o,...n})=>u("tr",{className:m("border-border border-b",t),"data-streamdown":"table-row",...n,children:e}),(e,t)=>k(e,t));Ie.displayName="MarkdownTr";var Se=b(({children:e,className:t,node:o,...n})=>u("th",{className:m("whitespace-nowrap px-4 py-2 text-left font-semibold text-sm",t),"data-streamdown":"table-header-cell",...n,children:e}),(e,t)=>k(e,t));Se.displayName="MarkdownTh";var Le=b(({children:e,className:t,node:o,...n})=>u("td",{className:m("px-4 py-2 text-sm",t),"data-streamdown":"table-cell",...n,children:e}),(e,t)=>k(e,t));Le.displayName="MarkdownTd";var Be=b(({children:e,className:t,node:o,...n})=>u("blockquote",{className:m("my-4 border-muted-foreground/30 border-l-4 pl-4 text-muted-foreground italic",t),"data-streamdown":"blockquote",...n,children:e}),(e,t)=>k(e,t));Be.displayName="MarkdownBlockquote";var $e=b(({children:e,className:t,node:o,...n})=>u("sup",{className:m("text-sm",t),"data-streamdown":"superscript",...n,children:e}),(e,t)=>k(e,t));$e.displayName="MarkdownSup";var xe=b(({children:e,className:t,node:o,...n})=>u("sub",{className:m("text-sm",t),"data-streamdown":"subscript",...n,children:e}),(e,t)=>k(e,t));xe.displayName="MarkdownSub";var He=b(({children:e,className:t,node:o,...n})=>{if("data-footnotes"in n){let s=a=>{var h,g;if(!S(a))return!1;let l=Array.isArray(a.props.children)?a.props.children:[a.props.children],c=!1,p=!1;for(let f of l)if(f){if(typeof f=="string")f.trim()!==""&&(c=!0);else if(S(f))if(((h=f.props)==null?void 0:h["data-footnote-backref"])!==void 0)p=!0;else{let w=Array.isArray(f.props.children)?f.props.children:[f.props.children];for(let y of w){if(typeof y=="string"&&y.trim()!==""){c=!0;break}if(S(y)&&((g=y.props)==null?void 0:g["data-footnote-backref"])===void 0){c=!0;break}}}}return p&&!c},i=Array.isArray(e)?e.map(a=>{if(!S(a))return a;if(a.type===V){let c=(Array.isArray(a.props.children)?a.props.children:[a.props.children]).filter(p=>!s(p));return c.length===0?null:{...a,props:{...a.props,children:c}}}return a}):e;return(Array.isArray(i)?i.some(a=>a!==null):i!==null)?u("section",{className:t,...n,children:i}):null}return u("section",{className:t,...n,children:e})},(e,t)=>k(e,t));He.displayName="MarkdownSection";var dt=({node:e,className:t,children:o,...n})=>{var p,h,g;let r=((p=e==null?void 0:e.position)==null?void 0:p.start.line)===((h=e==null?void 0:e.position)==null?void 0:h.end.line),s=J(G),i=J(j);if(r)return u("code",{className:m("rounded bg-muted px-1.5 py-0.5 font-mono text-sm",t),"data-streamdown":"inline-code",...n,children:o});let d=t==null?void 0:t.match(lt),a=(g=d==null?void 0:d.at(1))!=null?g:"",l="";if(S(o)&&o.props&&typeof o.props=="object"&&"children"in o.props&&typeof o.props.children=="string"?l=o.props.children:typeof o=="string"&&(l=o),a==="mermaid"){let f=F(i,"mermaid");return B("div",{className:m("group relative my-4 h-auto rounded-xl border p-4",t),"data-streamdown":"mermaid-block",children:[f&&B("div",{className:"flex items-center justify-end gap-2",children:[u(U,{code:l,language:a}),u(z,{code:l})]}),u(oe,{chart:l,config:s})]})}let c=F(i,"code");return u(ee,{className:m("overflow-x-auto border-t",t),code:l,"data-language":a,"data-streamdown":"code-block",language:a,preClassName:"overflow-x-auto font-mono text-xs p-4 bg-muted/40",children:c&&B(qe,{children:[u(U,{code:l,language:a}),u(z,{})]})})},Ae=b(dt,(e,t)=>e.className===t.className&&A(e.node,t.node));Ae.displayName="MarkdownCode";var je=b(te,(e,t)=>e.className===t.className&&A(e.node,t.node));je.displayName="MarkdownImg";var Re=b(({children:e,className:t,node:o,...n})=>{var i;let s=(Array.isArray(e)?e:[e]).filter(d=>d!=null&&d!=="");return s.length===1&&S(s[0])&&((i=s[0].props.node)==null?void 0:i.tagName)==="img"?u(qe,{children:e}):u("p",{className:t,...n,children:e})},(e,t)=>k(e,t));Re.displayName="MarkdownParagraph";var De={ol:V,li:ue,ul:ge,hr:fe,strong:he,a:be,h1:ke,h2:ye,h3:we,h4:ve,h5:Me,h6:Te,table:Ce,thead:Pe,tbody:Ne,tr:Ie,th:Se,td:Le,blockquote:Be,code:Ae,img:je,pre:({children:e})=>e,sup:$e,sub:xe,p:Re,section:He};import{Lexer as ct}from"marked";var Ee=e=>{let t=/\[\^[^\]\s]{1,200}\](?!:)/.test(e),o=/\[\^[^\]\s]{1,200}\]:/.test(e);if(t||o)return[e];let n=ct.lex(e,{gfm:!0}),r=[],s=[];for(let i=0;i<n.length;i++){let d=n[i],a=d.raw;if(s.length>0){if(r[r.length-1]+=a,d.type==="html"){let l=a.match(/<\/(\w+)>/);if(l){let c=l[1];s[s.length-1]===c&&s.pop()}}continue}if(d.type==="html"&&d.block){let l=a.match(/<(\w+)[\s>]/);if(l){let c=l[1];a.includes(`</${c}>`)||s.push(c)}}if(a.trim()==="$$"&&r.length>0){let l=r.at(-1);if(!l){r.push(a);continue}let c=l.trimStart().startsWith("$$"),p=(l.match(/\$\$/g)||[]).length;if(c&&p%2===1){r[r.length-1]=l+a;continue}}if(r.length>0&&a.trimEnd().endsWith("$$")){let l=r.at(-1);if(!l){r.push(a);continue}let c=l.trimStart().startsWith("$$"),p=(l.match(/\$\$/g)||[]).length,h=(a.match(/\$\$/g)||[]).length;if(c&&p%2===1&&!a.trimStart().startsWith("$$")&&h===1){r[r.length-1]=l+a;continue}}r.push(a)}return r};var mt=/(!?\[)([^\]]*?)$/,pt=/(\*\*)([^*]*?)$/,ut=/(__)([^_]*?)$/,gt=/(\*\*\*)([^*]*?)$/,ft=/(\*)([^*]*?)$/,ht=/(_)([^_]*?)$/,bt=/(`)([^`]*?)$/,kt=/(~~)([^~]*?)$/,R=e=>{let t=(e.match(/```/g)||[]).length;return t>0&&t%2===0&&e.includes(`
5
- `)},yt=e=>{let t=/(!?)\[([^\]]+)\]\(([^)]+)$/,o=e.match(t);if(o){let r=o[1]==="!",s=o[2],i=o[3],d=e.lastIndexOf(`${r?"!":""}[${s}](${i}`),a=e.substring(0,d);return r?a:`${a}[${s}](streamdown:incomplete-link)`}let n=e.match(mt);if(n){if(n[1].startsWith("!")){let s=e.lastIndexOf(n[1]);return e.substring(0,s)}return`${e}](streamdown:incomplete-link)`}return e},wt=e=>{if(R(e))return e;let t=e.match(pt);if(t){let o=t[2];if(!o||/^[\s_~*`]*$/.test(o))return e;let n=e.lastIndexOf(t[1]),s=e.substring(0,n).lastIndexOf(`
6
- `),i=s===-1?0:s+1,d=e.substring(i,n);if(/^[\s]*[-*+][\s]+$/.test(d)&&o.includes(`
7
- `))return e;if((e.match(/\*\*/g)||[]).length%2===1)return`${e}**`}return e},vt=e=>{let t=e.match(ut);if(t){let o=t[2];if(!o||/^[\s_~*`]*$/.test(o))return e;let n=e.lastIndexOf(t[1]),s=e.substring(0,n).lastIndexOf(`
8
- `),i=s===-1?0:s+1,d=e.substring(i,n);if(/^[\s]*[-*+][\s]+$/.test(d)&&o.includes(`
9
- `))return e;if((e.match(/__/g)||[]).length%2===1)return`${e}__`}return e},Mt=e=>e.split("").reduce((t,o,n)=>{if(o==="*"){let r=e[n-1],s=e[n+1];if(r==="\\")return t;let i=n;for(let a=n-1;a>=0;a--){if(e[a]===`
10
- `){i=a+1;break}if(a===0){i=0;break}}if(e.substring(i,n).trim()===""&&(s===" "||s===" "))return t;if(r!=="*"&&s!=="*")return t+1}return t},0),Tt=e=>{if(R(e))return e;if(e.match(ft)){let o=-1;for(let s=0;s<e.length;s++)if(e[s]==="*"&&e[s-1]!=="*"&&e[s+1]!=="*"){o=s;break}if(o===-1)return e;let n=e.substring(o+1);if(!n||/^[\s_~*`]*$/.test(n))return e;if(Mt(e)%2===1)return`${e}*`}return e},_e=(e,t)=>{let o=!1,n=!1;for(let r=0;r<e.length&&r<t;r++){if(e[r]==="\\"&&e[r+1]==="$"){r++;continue}e[r]==="$"&&(e[r+1]==="$"?(n=!n,r++,o=!1):n||(o=!o))}return o||n},Ct=e=>e.split("").reduce((t,o,n)=>{if(o==="_"){let r=e[n-1],s=e[n+1];if(r==="\\"||_e(e,n)||r&&s&&/[\p{L}\p{N}_]/u.test(r)&&/[\p{L}\p{N}_]/u.test(s))return t;if(r!=="_"&&s!=="_")return t+1}return t},0),Pt=e=>{if(R(e))return e;if(e.match(ht)){let o=-1;for(let s=0;s<e.length;s++)if(e[s]==="_"&&e[s-1]!=="_"&&e[s+1]!=="_"&&e[s-1]!=="\\"&&!_e(e,s)){let i=s>0?e[s-1]:"",d=s<e.length-1?e[s+1]:"";if(i&&d&&/[\p{L}\p{N}_]/u.test(i)&&/[\p{L}\p{N}_]/u.test(d))continue;o=s;break}if(o===-1)return e;let n=e.substring(o+1);if(!n||/^[\s_~*`]*$/.test(n))return e;if(Ct(e)%2===1){let s=e.match(/\n+$/);return s?`${e.slice(0,-s[0].length)}_${s[0]}`:`${e}_`}}return e},Nt=(e,t)=>{let o=e.substring(t,t+3)==="```",n=t>0&&e.substring(t-1,t+2)==="```",r=t>1&&e.substring(t-2,t+1)==="```";return o||n||r},It=e=>{let t=0;for(let o=0;o<e.length;o++)e[o]==="`"&&!Nt(e,o)&&t++;return t},St=e=>{if(e.match(/^```[^`\n]*```?$/)&&!e.includes(`
1
+ "use client";import{createContext as Y,memo as at,useEffect as vo,useId as To,useMemo as we}from"react";import Co from"react-markdown";import{harden as Mo}from"rehype-harden";import ye from"rehype-katex";import Po from"rehype-raw";import No from"remark-cjk-friendly";import Io from"remark-cjk-friendly-gfm-strikethrough";import So from"remark-gfm";import Lo from"remark-math";import{isValidElement as R,memo as b,useContext as ue}from"react";import{CheckIcon as ht,CopyIcon as ft,DownloadIcon as bt}from"lucide-react";import{createContext as wt,startTransition as ve,useContext as O,useEffect as J,useRef as L,useState as $}from"react";import{bundledLanguages as yt,createHighlighter as Te}from"shiki";import{createJavaScriptRegexEngine as kt}from"shiki/engine/javascript";import{clsx as pt}from"clsx";import{twMerge as gt}from"tailwind-merge";var u=(...e)=>gt(pt(e)),A=(e,t,o)=>{let n=typeof t=="string"?new Blob([t],{type:o}):t,s=URL.createObjectURL(n),r=document.createElement("a");r.href=s,r.download=e,document.body.appendChild(r),r.click(),document.body.removeChild(r),URL.revokeObjectURL(s)};import{jsx as P,jsxs as te}from"react/jsx-runtime";var ne=wt({code:""});function vt(e,t=200,o=50){let[n,s]=$(e),r=L(0),i=L(null);return J(()=>{let a=Date.now(),l=a-r.current;return i.current&&window.clearTimeout(i.current),l>=t?(s(e),r.current=a):i.current=window.setTimeout(()=>{s(e),r.current=Date.now()},o),()=>{i.current&&window.clearTimeout(i.current)}},[e,t,o]),n}var Tt=e=>e<50?{minHighlightInterval:100,debounceMs:500}:e<150?{minHighlightInterval:500,debounceMs:800}:e<300?{minHighlightInterval:1500,debounceMs:1200}:{minHighlightInterval:Number.POSITIVE_INFINITY,debounceMs:1500},Ct=e=>e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;"),Mt=e=>{let t=e.lastIndexOf(`
2
+ `),o=t>=0?e.slice(0,t+1):"",n=t>=0?e.slice(t+1):e;return[o,n]},Pt=e=>e?[{pre(o){return this.addClassToHast(o,e),o}}]:[],oe=class{constructor(){this.lightHighlighter=null;this.darkHighlighter=null;this.lightTheme=null;this.darkTheme=null;this.loadedLanguages=new Set;this.initializationPromise=null;this.loadLanguagePromise=null;this.cache=new Map;this.cacheKeys=[];this.MAX_CACHE_SIZE=50;this.highlightQueue=new Map}isLanguageSupported(t){return Object.hasOwn(yt,t)}getFallbackLanguage(){return"text"}getCacheKey(t,o,n){return`${o}::${n||""}::${t}`}addToCache(t,o){if(this.cache.size>=this.MAX_CACHE_SIZE){let n=this.cacheKeys.shift();n&&this.cache.delete(n)}this.cache.set(t,o),this.cacheKeys.push(t)}needsHighlightersInitialization(t){let[o,n]=t,s=!this.lightHighlighter||this.lightTheme!==o,r=!this.darkHighlighter||this.darkTheme!==n;return[s,r]}async ensureHighlightersInitialized(t,o){let[n,s]=o,[r,i]=t,a=kt({forgiving:!0});this.loadedLanguages.clear(),this.cache.clear(),this.cacheKeys=[],this.highlightQueue.clear(),n&&(this.lightHighlighter=await Te({themes:[r],langs:[],engine:a}),this.lightTheme=r),s&&(this.darkHighlighter=await Te({themes:[i],langs:[],engine:a}),this.darkTheme=i)}async loadLanguage(t){var o,n;await((o=this.darkHighlighter)==null?void 0:o.loadLanguage(t)),await((n=this.lightHighlighter)==null?void 0:n.loadLanguage(t)),this.loadedLanguages.add(t)}async initializeHighlighters(t){this.initializationPromise&&await this.initializationPromise;let o=this.needsHighlightersInitialization(t),[n,s]=o;(n||s)&&(this.initializationPromise=this.ensureHighlightersInitialized(t,o),await this.initializationPromise,this.initializationPromise=null)}performHighlights(t,o,n){let s=this.isLanguageSupported(o)?o:this.getFallbackLanguage();if(this.lightHighlighter===null||this.darkHighlighter===null||this.lightTheme===null||this.darkTheme===null)throw new Error("highlightCode must be called after initializeHighlighters.");let r=Pt(n),i=this.lightHighlighter.codeToHtml(t,{lang:s,theme:this.lightTheme,transformers:r}),a=this.darkHighlighter.codeToHtml(t,{lang:s,theme:this.darkTheme,transformers:r});return[i,a]}async highlightCode(t,o,n,s){let r=this.getCacheKey(t,o,n),i=this.cache.get(r);if(i)return this.cacheKeys=this.cacheKeys.filter(d=>d!==r),this.cacheKeys.push(r),i;let a=this.highlightQueue.get(r);if(a)return a;let l=()=>{if(s!=null&&s.aborted)throw new DOMException("Aborted","AbortError")},c=(async()=>{try{await new Promise(f=>setTimeout(f,0)),l(),this.initializationPromise&&await this.initializationPromise,l(),this.loadLanguagePromise&&await this.loadLanguagePromise,l(),!this.loadedLanguages.has(o)&&this.isLanguageSupported(o)&&(this.loadLanguagePromise=this.loadLanguage(o),await this.loadLanguagePromise,this.loadLanguagePromise=null),l();let g=this.performHighlights(t,o,n);return this.addToCache(r,g),g}finally{this.highlightQueue.delete(r)}})();return this.highlightQueue.set(r,c),c}},ee=new oe,Me=({code:e,language:t,className:o,children:n,preClassName:s,...r})=>{let[i,a]=$(""),[l,c]=$(""),[d,g]=$(""),[f,h]=$(""),m=vt(e),k=L(0),y=L(!1),w=L(null),C=L(0),[D,W]=O(ie);J(()=>{ee.initializeHighlighters([D,W])},[D,W]),J(()=>{y.current=!0,w.current&&w.current.abort(),w.current=new AbortController;let E=w.current.signal;k.current&&clearTimeout(k.current);let[F,q]=Mt(m),ct=m.split(`
3
+ `).length,{minHighlightInterval:dt,debounceMs:mt}=Tt(ct);if(F&&F!==d){let M=Date.now();M-C.current>dt||!q?(C.current=M,ee.highlightCode(F,t,s,E).then(([X,ut])=>{y.current&&!E.aborted&&ve(()=>{a(X),c(ut),g(F),h(q)})}).catch(X=>{if(X.name!=="AbortError")throw X})):h(q)}else h(q);return k.current=window.setTimeout(()=>{q&&m!==d&&!E.aborted&&ee.highlightCode(m,t,s,E).then(([M,ke])=>{y.current&&!E.aborted&&ve(()=>{a(M),c(ke),g(m),h("")})}).catch(M=>{if(M.name!=="AbortError")throw M})},mt),()=>{var M;y.current=!1,(M=w.current)==null||M.abort()}},[m,t,s]);let B=f?`<span class="line"><span>${Ct(f)}</span></span>`:"";return P(ne.Provider,{value:{code:e},children:te("div",{className:"my-4 w-full overflow-hidden rounded-xl border border-border","data-code-block-container":!0,"data-language":t,children:[te("div",{className:"flex items-center justify-between bg-muted/80 p-3 text-muted-foreground text-xs","data-code-block-header":!0,"data-language":t,children:[P("span",{className:"ml-1 font-mono lowercase",children:t}),P("div",{className:"flex items-center gap-2",children:n})]}),P("div",{className:"w-full",children:te("div",{className:"min-w-full",children:[P("div",{className:u("overflow-x-auto dark:hidden",o),dangerouslySetInnerHTML:{__html:B?i+B:i},"data-code-block":!0,"data-language":t,...r}),P("div",{className:u("hidden overflow-x-auto dark:block",o),dangerouslySetInnerHTML:{__html:B?l+B:l},"data-code-block":!0,"data-language":t,...r})]})})]})})},Ce={"1c":"1c","1c-query":"1cq",abap:"abap","actionscript-3":"as",ada:"ada",adoc:"adoc","angular-html":"html","angular-ts":"ts",apache:"conf",apex:"cls",apl:"apl",applescript:"applescript",ara:"ara",asciidoc:"adoc",asm:"asm",astro:"astro",awk:"awk",ballerina:"bal",bash:"sh",bat:"bat",batch:"bat",be:"be",beancount:"beancount",berry:"berry",bibtex:"bib",bicep:"bicep",blade:"blade.php",bsl:"bsl",c:"c","c#":"cs","c++":"cpp",cadence:"cdc",cairo:"cairo",cdc:"cdc",clarity:"clar",clj:"clj",clojure:"clj","closure-templates":"soy",cmake:"cmake",cmd:"cmd",cobol:"cob",codeowners:"CODEOWNERS",codeql:"ql",coffee:"coffee",coffeescript:"coffee","common-lisp":"lisp",console:"sh",coq:"v",cpp:"cpp",cql:"cql",crystal:"cr",cs:"cs",csharp:"cs",css:"css",csv:"csv",cue:"cue",cypher:"cql",d:"d",dart:"dart",dax:"dax",desktop:"desktop",diff:"diff",docker:"dockerfile",dockerfile:"dockerfile",dotenv:"env","dream-maker":"dm",edge:"edge",elisp:"el",elixir:"ex",elm:"elm","emacs-lisp":"el",erb:"erb",erl:"erl",erlang:"erl",f:"f","f#":"fs",f03:"f03",f08:"f08",f18:"f18",f77:"f77",f90:"f90",f95:"f95",fennel:"fnl",fish:"fish",fluent:"ftl",for:"for","fortran-fixed-form":"f","fortran-free-form":"f90",fs:"fs",fsharp:"fs",fsl:"fsl",ftl:"ftl",gdresource:"tres",gdscript:"gd",gdshader:"gdshader",genie:"gs",gherkin:"feature","git-commit":"gitcommit","git-rebase":"gitrebase",gjs:"js",gleam:"gleam","glimmer-js":"js","glimmer-ts":"ts",glsl:"glsl",gnuplot:"plt",go:"go",gql:"gql",graphql:"graphql",groovy:"groovy",gts:"gts",hack:"hack",haml:"haml",handlebars:"hbs",haskell:"hs",haxe:"hx",hbs:"hbs",hcl:"hcl",hjson:"hjson",hlsl:"hlsl",hs:"hs",html:"html","html-derivative":"html",http:"http",hxml:"hxml",hy:"hy",imba:"imba",ini:"ini",jade:"jade",java:"java",javascript:"js",jinja:"jinja",jison:"jison",jl:"jl",js:"js",json:"json",json5:"json5",jsonc:"jsonc",jsonl:"jsonl",jsonnet:"jsonnet",jssm:"jssm",jsx:"jsx",julia:"jl",kotlin:"kt",kql:"kql",kt:"kt",kts:"kts",kusto:"kql",latex:"tex",lean:"lean",lean4:"lean",less:"less",liquid:"liquid",lisp:"lisp",lit:"lit",llvm:"ll",log:"log",logo:"logo",lua:"lua",luau:"luau",make:"mak",makefile:"mak",markdown:"md",marko:"marko",matlab:"m",md:"md",mdc:"mdc",mdx:"mdx",mediawiki:"wiki",mermaid:"mmd",mips:"s",mipsasm:"s",mmd:"mmd",mojo:"mojo",move:"move",nar:"nar",narrat:"narrat",nextflow:"nf",nf:"nf",nginx:"conf",nim:"nim",nix:"nix",nu:"nu",nushell:"nu",objc:"m","objective-c":"m","objective-cpp":"mm",ocaml:"ml",pascal:"pas",perl:"pl",perl6:"p6",php:"php",plsql:"pls",po:"po",polar:"polar",postcss:"pcss",pot:"pot",potx:"potx",powerquery:"pq",powershell:"ps1",prisma:"prisma",prolog:"pl",properties:"properties",proto:"proto",protobuf:"proto",ps:"ps",ps1:"ps1",pug:"pug",puppet:"pp",purescript:"purs",py:"py",python:"py",ql:"ql",qml:"qml",qmldir:"qmldir",qss:"qss",r:"r",racket:"rkt",raku:"raku",razor:"cshtml",rb:"rb",reg:"reg",regex:"regex",regexp:"regexp",rel:"rel",riscv:"s",rs:"rs",rst:"rst",ruby:"rb",rust:"rs",sas:"sas",sass:"sass",scala:"scala",scheme:"scm",scss:"scss",sdbl:"sdbl",sh:"sh",shader:"shader",shaderlab:"shader",shell:"sh",shellscript:"sh",shellsession:"sh",smalltalk:"st",solidity:"sol",soy:"soy",sparql:"rq",spl:"spl",splunk:"spl",sql:"sql","ssh-config":"config",stata:"do",styl:"styl",stylus:"styl",svelte:"svelte",swift:"swift","system-verilog":"sv",systemd:"service",talon:"talon",talonscript:"talon",tasl:"tasl",tcl:"tcl",templ:"templ",terraform:"tf",tex:"tex",tf:"tf",tfvars:"tfvars",toml:"toml",ts:"ts","ts-tags":"ts",tsp:"tsp",tsv:"tsv",tsx:"tsx",turtle:"ttl",twig:"twig",typ:"typ",typescript:"ts",typespec:"tsp",typst:"typ",v:"v",vala:"vala",vb:"vb",verilog:"v",vhdl:"vhdl",vim:"vim",viml:"vim",vimscript:"vim",vue:"vue","vue-html":"html","vue-vine":"vine",vy:"vy",vyper:"vy",wasm:"wasm",wenyan:"wy",wgsl:"wgsl",wiki:"wiki",wikitext:"wiki",wit:"wit",wl:"wl",wolfram:"wl",xml:"xml",xsl:"xsl",yaml:"yaml",yml:"yml",zenscript:"zs",zig:"zig",zsh:"zsh",\u6587\u8A00:"wy"},re=({onDownload:e,onError:t,language:o,children:n,className:s,code:r,...i})=>{let{code:a}=O(ne),{isAnimating:l}=O(N),c=r!=null?r:a,g=`file.${o&&o in Ce?Ce[o]:"txt"}`,f="text/plain",h=()=>{try{A(g,c,f),e==null||e()}catch(m){t==null||t(m)}};return P("button",{className:u("cursor-pointer p-1 text-muted-foreground transition-all hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50",s),disabled:l,onClick:h,title:"Download file",type:"button",...i,children:n!=null?n:P(bt,{size:14})})},se=({onCopy:e,onError:t,timeout:o=2e3,children:n,className:s,code:r,...i})=>{let[a,l]=$(!1),c=L(0),{code:d}=O(ne),{isAnimating:g}=O(N),f=r!=null?r:d,h=async()=>{var k;if(typeof window=="undefined"||!((k=navigator==null?void 0:navigator.clipboard)!=null&&k.writeText)){t==null||t(new Error("Clipboard API not available"));return}try{a||(await navigator.clipboard.writeText(f),l(!0),e==null||e(),c.current=window.setTimeout(()=>l(!1),o))}catch(y){t==null||t(y)}};J(()=>()=>{window.clearTimeout(c.current)},[]);let m=a?ht:ft;return P("button",{className:u("cursor-pointer p-1 text-muted-foreground transition-all hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50",s),disabled:g,onClick:h,type:"button",...i,children:n!=null?n:P(m,{size:14})})};import{DownloadIcon as Nt}from"lucide-react";import{jsx as K,jsxs as St}from"react/jsx-runtime";var It=/\.[^/.]+$/,Pe=({node:e,className:t,src:o,alt:n,...s})=>{let r=async()=>{if(o)try{let a=await(await fetch(o)).blob(),c=new URL(o,window.location.origin).pathname.split("/").pop()||"",d=c.split(".").pop(),g=c.includes(".")&&d!==void 0&&d.length<=4,f="";if(g)f=c;else{let h=a.type,m="png";h.includes("jpeg")||h.includes("jpg")?m="jpg":h.includes("png")?m="png":h.includes("svg")?m="svg":h.includes("gif")?m="gif":h.includes("webp")&&(m="webp"),f=`${(n||c||"image").replace(It,"")}.${m}`}A(f,a,a.type)}catch(i){console.error("Failed to download image:",i)}};return o?St("div",{className:"group relative my-4 inline-block","data-streamdown":"image-wrapper",children:[K("img",{alt:n,className:u("max-w-full rounded-lg",t),"data-streamdown":"image",src:o,...s}),K("div",{className:"pointer-events-none absolute inset-0 hidden rounded-lg bg-black/10 group-hover:block"}),K("button",{className:u("absolute right-2 bottom-2 flex h-8 w-8 cursor-pointer items-center justify-center rounded-md border border-border bg-background/90 shadow-sm backdrop-blur-sm transition-all duration-200 hover:bg-background","opacity-0 group-hover:opacity-100"),onClick:r,title:"Download image",type:"button",children:K(Nt,{size:14})})]}):null};import{Maximize2Icon as Lt,XIcon as xt}from"lucide-react";import{useContext as Ht,useEffect as ae,useState as z}from"react";import{Fragment as jt,jsx as T,jsxs as j}from"react/jsx-runtime";var _=0,Bt=()=>{_+=1,_===1&&(document.body.style.overflow="hidden")},At=()=>{_=Math.max(0,_-1),_===0&&(document.body.style.overflow="")},$t=async e=>{let o={...{startOnLoad:!1,theme:"default",securityLevel:"strict",fontFamily:"monospace",suppressErrorRendering:!0},...e},s=(await import("mermaid")).default;return s.initialize(o),s},Ne=({chart:e,config:t,onFullscreen:o,onExit:n,className:s,...r})=>{let[i,a]=z(!1),{isAnimating:l}=Ht(N),c=()=>{a(!i)};return ae(()=>{if(i){Bt();let d=g=>{g.key==="Escape"&&a(!1)};return document.addEventListener("keydown",d),()=>{document.removeEventListener("keydown",d),At()}}},[i]),ae(()=>{i?o==null||o():n&&n()},[i,o,n]),j(jt,{children:[T("button",{className:u("cursor-pointer p-1 text-muted-foreground transition-all hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50",s),disabled:l,onClick:c,title:"View fullscreen",type:"button",...r,children:T(Lt,{size:14})}),i&&j("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-background/95 backdrop-blur-sm",onClick:c,onKeyDown:d=>{d.key==="Escape"&&c()},role:"button",tabIndex:0,children:[T("button",{className:"absolute top-4 right-4 z-10 rounded-md p-2 text-muted-foreground transition-all hover:bg-muted hover:text-foreground",onClick:c,title:"Exit fullscreen",type:"button",children:T(xt,{size:20})}),T("div",{className:"flex h-full w-full items-center justify-center p-12",onClick:d=>d.stopPropagation(),onKeyDown:d=>d.stopPropagation(),role:"presentation",children:T("div",{className:"max-h-full max-w-full",children:T(le,{chart:e,className:"[&>div]:my-0 [&_svg]:h-auto [&_svg]:min-h-[60vh] [&_svg]:w-auto [&_svg]:min-w-[60vw]",config:t})})})]})]})},le=({chart:e,className:t,config:o})=>{let[n,s]=z(null),[r,i]=z(!0),[a,l]=z(""),[c,d]=z("");if(ae(()=>{(async()=>{try{s(null),i(!0);let h=await $t(o),m=e.split("").reduce((w,C)=>(w<<5)-w+C.charCodeAt(0)|0,0),k=`mermaid-${Math.abs(m)}-${Date.now()}-${Math.random().toString(36).substring(2,9)}`,{svg:y}=await h.render(k,e);l(y),d(y)}catch(h){if(!(c||a)){let m=h instanceof Error?h.message:"Failed to render Mermaid chart";s(m)}}finally{i(!1)}})()},[e,o]),r&&!a&&!c)return T("div",{className:u("my-4 flex justify-center p-4",t),children:j("div",{className:"flex items-center space-x-2 text-muted-foreground",children:[T("div",{className:"h-4 w-4 animate-spin rounded-full border-current border-b-2"}),T("span",{className:"text-sm",children:"Loading diagram..."})]})});if(n&&!a&&!c)return j("div",{className:u("rounded-lg border border-red-200 bg-red-50 p-4",t),children:[j("p",{className:"font-mono text-red-700 text-sm",children:["Mermaid Error: ",n]}),j("details",{className:"mt-2",children:[T("summary",{className:"cursor-pointer text-red-600 text-xs",children:"Show Code"}),T("pre",{className:"mt-2 overflow-x-auto rounded bg-red-100 p-2 text-red-800 text-xs",children:e})]})]});let g=a||c;return T("div",{"aria-label":"Mermaid chart",className:u("my-4 flex justify-center",t),dangerouslySetInnerHTML:{__html:g},role:"img"})};import{CheckIcon as Rt,CopyIcon as Dt,DownloadIcon as Et}from"lucide-react";import{useContext as Ie,useEffect as Se,useRef as ce,useState as de}from"react";import{jsx as I,jsxs as V}from"react/jsx-runtime";function Le(e){var r,i;let t=[],o=[],n=e.querySelectorAll("thead th");for(let a of n)t.push(((r=a.textContent)==null?void 0:r.trim())||"");let s=e.querySelectorAll("tbody tr");for(let a of s){let l=[],c=a.querySelectorAll("td");for(let d of c)l.push(((i=d.textContent)==null?void 0:i.trim())||"");o.push(l)}return{headers:t,rows:o}}function xe(e){let{headers:t,rows:o}=e,n=r=>r.includes(",")||r.includes('"')||r.includes(`
4
+ `)?`"${r.replace(/"/g,'""')}"`:r,s=[];t.length>0&&s.push(t.map(n).join(","));for(let r of o)s.push(r.map(n).join(","));return s.join(`
5
+ `)}function qt(e){let{headers:t,rows:o}=e,n=r=>r.replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r"),s=[];t.length>0&&s.push(t.map(n).join(" "));for(let r of o)s.push(r.map(n).join(" "));return s.join(`
6
+ `)}function Ot(e){let{headers:t,rows:o}=e;if(t.length===0)return"";let n=[],s=t.map(r=>r.replace(/\|/g,"\\|"));n.push(`| ${s.join(" | ")} |`),n.push(`| ${t.map(()=>"---").join(" | ")} |`);for(let r of o){let i=[...r];for(;i.length<t.length;)i.push("");let a=i.map(l=>l.replace(/\|/g,"\\|"));n.push(`| ${a.join(" | ")} |`)}return n.join(`
7
+ `)}var He=({children:e,className:t,onCopy:o,onError:n,timeout:s=2e3})=>{let[r,i]=de(!1),[a,l]=de(!1),c=ce(null),d=ce(0),{isAnimating:g}=Ie(N),f=async m=>{var k,y;if(typeof window=="undefined"||!((k=navigator==null?void 0:navigator.clipboard)!=null&&k.write)){n==null||n(new Error("Clipboard API not available"));return}try{let w=(y=c.current)==null?void 0:y.closest('[data-streamdown="table-wrapper"]'),C=w==null?void 0:w.querySelector("table");if(!C){n==null||n(new Error("Table not found"));return}let D=Le(C),W=m==="csv"?xe(D):qt(D),B=new ClipboardItem({"text/plain":new Blob([W],{type:"text/plain"}),"text/html":new Blob([C.outerHTML],{type:"text/html"})});await navigator.clipboard.write([B]),l(!0),i(!1),o==null||o(m),d.current=window.setTimeout(()=>l(!1),s)}catch(w){n==null||n(w)}};Se(()=>{let m=k=>{c.current&&!c.current.contains(k.target)&&i(!1)};return document.addEventListener("mousedown",m),()=>{document.removeEventListener("mousedown",m),window.clearTimeout(d.current)}},[]);let h=a?Rt:Dt;return V("div",{className:"relative",ref:c,children:[I("button",{className:u("cursor-pointer p-1 text-muted-foreground transition-all hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50",t),disabled:g,onClick:()=>i(!r),title:"Copy table",type:"button",children:e!=null?e:I(h,{size:14})}),r&&V("div",{className:"absolute top-full right-0 z-10 mt-1 min-w-[120px] overflow-hidden rounded-md border border-border bg-background shadow-lg",children:[I("button",{className:"w-full px-3 py-2 text-left text-sm transition-colors hover:bg-muted/40",onClick:()=>f("csv"),type:"button",children:"CSV"}),I("button",{className:"w-full px-3 py-2 text-left text-sm transition-colors hover:bg-muted/40",onClick:()=>f("tsv"),type:"button",children:"TSV"})]})]})};var Be=({children:e,className:t,onDownload:o,onError:n})=>{let[s,r]=de(!1),i=ce(null),{isAnimating:a}=Ie(N),l=c=>{var d;try{let g=(d=i.current)==null?void 0:d.closest('[data-streamdown="table-wrapper"]'),f=g==null?void 0:g.querySelector("table");if(!f){n==null||n(new Error("Table not found"));return}let h=Le(f),m=c==="csv"?xe(h):Ot(h);A(`table.${c==="csv"?"csv":"md"}`,m,c==="csv"?"text/csv":"text/markdown"),r(!1),o==null||o(c)}catch(g){n==null||n(g)}};return Se(()=>{let c=d=>{i.current&&!i.current.contains(d.target)&&r(!1)};return document.addEventListener("mousedown",c),()=>{document.removeEventListener("mousedown",c)}},[]),V("div",{className:"relative",ref:i,children:[I("button",{className:u("cursor-pointer p-1 text-muted-foreground transition-all hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50",t),disabled:a,onClick:()=>r(!s),title:"Download table",type:"button",children:e!=null?e:I(Et,{size:14})}),s&&V("div",{className:"absolute top-full right-0 z-10 mt-1 min-w-[120px] overflow-hidden rounded-md border border-border bg-background shadow-lg",children:[I("button",{className:"w-full px-3 py-2 text-left text-sm transition-colors hover:bg-muted/40",onClick:()=>l("csv"),type:"button",children:"CSV"}),I("button",{className:"w-full px-3 py-2 text-left text-sm transition-colors hover:bg-muted/40",onClick:()=>l("markdown"),type:"button",children:"Markdown"})]})]})};import{Fragment as rt,jsx as p,jsxs as U}from"react/jsx-runtime";var zt=/language-([^\s]+)/;function G(e,t){if(!(e!=null&&e.position||t!=null&&t.position))return!0;if(!(e!=null&&e.position&&(t!=null&&t.position)))return!1;let o=e.position.start,n=t.position.start,s=e.position.end,r=t.position.end;return(o==null?void 0:o.line)===(n==null?void 0:n.line)&&(o==null?void 0:o.column)===(n==null?void 0:n.column)&&(s==null?void 0:s.line)===(r==null?void 0:r.line)&&(s==null?void 0:s.column)===(r==null?void 0:r.column)}function v(e,t){return e.className===t.className&&G(e.node,t.node)}var pe=(e,t)=>typeof e=="boolean"?e:e[t]!==!1,me=(e,t)=>{if(typeof e=="boolean")return e;let o=e.mermaid;return o===!1?!1:o===!0||o===void 0?!0:o[t]!==!1},ge=b(({children:e,className:t,node:o,...n})=>p("ol",{className:u("ml-4 list-outside list-decimal whitespace-normal",t),"data-streamdown":"ordered-list",...n,children:e}),(e,t)=>v(e,t));ge.displayName="MarkdownOl";var Ae=b(({children:e,className:t,node:o,...n})=>p("li",{className:u("py-1",t),"data-streamdown":"list-item",...n,children:e}),(e,t)=>e.className===t.className&&G(e.node,t.node));Ae.displayName="MarkdownLi";var $e=b(({children:e,className:t,node:o,...n})=>p("ul",{className:u("ml-4 list-outside list-disc whitespace-normal",t),"data-streamdown":"unordered-list",...n,children:e}),(e,t)=>v(e,t));$e.displayName="MarkdownUl";var je=b(({className:e,node:t,...o})=>p("hr",{className:u("my-6 border-border",e),"data-streamdown":"horizontal-rule",...o}),(e,t)=>v(e,t));je.displayName="MarkdownHr";var Re=b(({children:e,className:t,node:o,...n})=>p("span",{className:u("font-semibold",t),"data-streamdown":"strong",...n,children:e}),(e,t)=>v(e,t));Re.displayName="MarkdownStrong";var De=b(({children:e,className:t,href:o,node:n,...s})=>{let r=o==="streamdown:incomplete-link";return p("a",{className:u("wrap-anywhere font-medium text-primary underline",t),"data-incomplete":r,"data-streamdown":"link",href:o,rel:"noreferrer",target:"_blank",...s,children:e})},(e,t)=>v(e,t)&&e.href===t.href);De.displayName="MarkdownA";var Ee=b(({children:e,className:t,node:o,...n})=>p("h1",{className:u("mt-6 mb-2 font-semibold text-3xl",t),"data-streamdown":"heading-1",...n,children:e}),(e,t)=>v(e,t));Ee.displayName="MarkdownH1";var qe=b(({children:e,className:t,node:o,...n})=>p("h2",{className:u("mt-6 mb-2 font-semibold text-2xl",t),"data-streamdown":"heading-2",...n,children:e}),(e,t)=>v(e,t));qe.displayName="MarkdownH2";var Oe=b(({children:e,className:t,node:o,...n})=>p("h3",{className:u("mt-6 mb-2 font-semibold text-xl",t),"data-streamdown":"heading-3",...n,children:e}),(e,t)=>v(e,t));Oe.displayName="MarkdownH3";var ze=b(({children:e,className:t,node:o,...n})=>p("h4",{className:u("mt-6 mb-2 font-semibold text-lg",t),"data-streamdown":"heading-4",...n,children:e}),(e,t)=>v(e,t));ze.displayName="MarkdownH4";var _e=b(({children:e,className:t,node:o,...n})=>p("h5",{className:u("mt-6 mb-2 font-semibold text-base",t),"data-streamdown":"heading-5",...n,children:e}),(e,t)=>v(e,t));_e.displayName="MarkdownH5";var Ue=b(({children:e,className:t,node:o,...n})=>p("h6",{className:u("mt-6 mb-2 font-semibold text-sm",t),"data-streamdown":"heading-6",...n,children:e}),(e,t)=>v(e,t));Ue.displayName="MarkdownH6";var We=b(({children:e,className:t,node:o,...n})=>{let s=ue(Q),r=pe(s,"table");return U("div",{className:"my-4 flex flex-col space-y-2","data-streamdown":"table-wrapper",children:[r&&U("div",{className:"flex items-center justify-end gap-1",children:[p(He,{}),p(Be,{})]}),p("div",{className:"overflow-x-auto",children:p("table",{className:u("w-full border-collapse border border-border",t),"data-streamdown":"table",...n,children:e})})]})},(e,t)=>v(e,t));We.displayName="MarkdownTable";var Fe=b(({children:e,className:t,node:o,...n})=>p("thead",{className:u("bg-muted/80",t),"data-streamdown":"table-header",...n,children:e}),(e,t)=>v(e,t));Fe.displayName="MarkdownThead";var Xe=b(({children:e,className:t,node:o,...n})=>p("tbody",{className:u("divide-y divide-border bg-muted/40",t),"data-streamdown":"table-body",...n,children:e}),(e,t)=>v(e,t));Xe.displayName="MarkdownTbody";var Je=b(({children:e,className:t,node:o,...n})=>p("tr",{className:u("border-border border-b",t),"data-streamdown":"table-row",...n,children:e}),(e,t)=>v(e,t));Je.displayName="MarkdownTr";var Ke=b(({children:e,className:t,node:o,...n})=>p("th",{className:u("whitespace-nowrap px-4 py-2 text-left font-semibold text-sm",t),"data-streamdown":"table-header-cell",...n,children:e}),(e,t)=>v(e,t));Ke.displayName="MarkdownTh";var Ve=b(({children:e,className:t,node:o,...n})=>p("td",{className:u("px-4 py-2 text-sm",t),"data-streamdown":"table-cell",...n,children:e}),(e,t)=>v(e,t));Ve.displayName="MarkdownTd";var Ge=b(({children:e,className:t,node:o,...n})=>p("blockquote",{className:u("my-4 border-muted-foreground/30 border-l-4 pl-4 text-muted-foreground italic",t),"data-streamdown":"blockquote",...n,children:e}),(e,t)=>v(e,t));Ge.displayName="MarkdownBlockquote";var Qe=b(({children:e,className:t,node:o,...n})=>p("sup",{className:u("text-sm",t),"data-streamdown":"superscript",...n,children:e}),(e,t)=>v(e,t));Qe.displayName="MarkdownSup";var Ze=b(({children:e,className:t,node:o,...n})=>p("sub",{className:u("text-sm",t),"data-streamdown":"subscript",...n,children:e}),(e,t)=>v(e,t));Ze.displayName="MarkdownSub";var Ye=b(({children:e,className:t,node:o,...n})=>{if("data-footnotes"in n){let r=l=>{var f,h;if(!R(l))return!1;let c=Array.isArray(l.props.children)?l.props.children:[l.props.children],d=!1,g=!1;for(let m of c)if(m){if(typeof m=="string")m.trim()!==""&&(d=!0);else if(R(m))if(((f=m.props)==null?void 0:f["data-footnote-backref"])!==void 0)g=!0;else{let k=Array.isArray(m.props.children)?m.props.children:[m.props.children];for(let y of k){if(typeof y=="string"&&y.trim()!==""){d=!0;break}if(R(y)&&((h=y.props)==null?void 0:h["data-footnote-backref"])===void 0){d=!0;break}}}}return g&&!d},i=Array.isArray(e)?e.map(l=>{if(!R(l))return l;if(l.type===ge){let d=(Array.isArray(l.props.children)?l.props.children:[l.props.children]).filter(g=>!r(g));return d.length===0?null:{...l,props:{...l.props,children:d}}}return l}):e;return(Array.isArray(i)?i.some(l=>l!==null):i!==null)?p("section",{className:t,...n,children:i}):null}return p("section",{className:t,...n,children:e})},(e,t)=>v(e,t));Ye.displayName="MarkdownSection";var _t=({node:e,className:t,children:o,...n})=>{var g,f,h;let s=((g=e==null?void 0:e.position)==null?void 0:g.start.line)===((f=e==null?void 0:e.position)==null?void 0:f.end.line),r=ue(he),i=ue(Q);if(s)return p("code",{className:u("rounded bg-muted px-1.5 py-0.5 font-mono text-sm",t),"data-streamdown":"inline-code",...n,children:o});let a=t==null?void 0:t.match(zt),l=(h=a==null?void 0:a.at(1))!=null?h:"",c="";if(R(o)&&o.props&&typeof o.props=="object"&&"children"in o.props&&typeof o.props.children=="string"?c=o.props.children:typeof o=="string"&&(c=o),l==="mermaid"){let m=pe(i,"mermaid"),k=me(i,"download"),y=me(i,"copy"),w=me(i,"fullscreen");return U("div",{className:u("group relative my-4 h-auto rounded-xl border p-4",t),"data-streamdown":"mermaid-block",children:[m&&(k||y||w)&&U("div",{className:"flex items-center justify-end gap-2",children:[k&&p(re,{code:c,language:l}),y&&p(se,{code:c}),w&&p(Ne,{chart:c,config:r})]}),p(le,{chart:c,config:r})]})}let d=pe(i,"code");return p(Me,{className:u("overflow-x-auto border-border border-t",t),code:c,"data-language":l,"data-streamdown":"code-block",language:l,preClassName:"overflow-x-auto font-mono text-xs p-4 bg-muted/40",children:d&&U(rt,{children:[p(re,{code:c,language:l}),p(se,{})]})})},et=b(_t,(e,t)=>e.className===t.className&&G(e.node,t.node));et.displayName="MarkdownCode";var tt=b(Pe,(e,t)=>e.className===t.className&&G(e.node,t.node));tt.displayName="MarkdownImg";var ot=b(({children:e,className:t,node:o,...n})=>{var i;let r=(Array.isArray(e)?e:[e]).filter(a=>a!=null&&a!=="");return r.length===1&&R(r[0])&&((i=r[0].props.node)==null?void 0:i.tagName)==="img"?p(rt,{children:e}):p("p",{className:t,...n,children:e})},(e,t)=>v(e,t));ot.displayName="MarkdownParagraph";var nt={ol:ge,li:Ae,ul:$e,hr:je,strong:Re,a:De,h1:Ee,h2:qe,h3:Oe,h4:ze,h5:_e,h6:Ue,table:We,thead:Fe,tbody:Xe,tr:Je,th:Ke,td:Ve,blockquote:Ge,code:et,img:tt,pre:({children:e})=>e,sup:Qe,sub:Ze,p:ot,section:Ye};import{Lexer as Ut}from"marked";var Wt=/\[\^[^\]\s]{1,200}\](?!:)/,Ft=/\[\^[^\]\s]{1,200}\]:/,Xt=/<\/(\w+)>/,Jt=/<(\w+)[\s>]/,fe=e=>{let t=Wt.test(e),o=Ft.test(e);if(t||o)return[e];let n=Ut.lex(e,{gfm:!0}),s=[],r=[];for(let i of n){let a=i.raw;if(r.length>0){if(s[s.length-1]+=a,i.type==="html"){let l=a.match(Xt);if(l){let c=l[1];r.at(-1)===c&&r.pop()}}continue}if(i.type==="html"&&i.block){let l=a.match(Jt);if(l){let c=l[1];a.includes(`</${c}>`)||r.push(c)}}if(a.trim()==="$$"&&s.length>0){let l=s.at(-1);if(!l){s.push(a);continue}let c=l.trimStart().startsWith("$$"),d=(l.match(/\$\$/g)||[]).length;if(c&&d%2===1){s[s.length-1]=l+a;continue}}if(s.length>0&&a.trimEnd().endsWith("$$")){let l=s.at(-1);if(!l){s.push(a);continue}let c=l.trimStart().startsWith("$$"),d=(l.match(/\$\$/g)||[]).length,g=(a.match(/\$\$/g)||[]).length;if(c&&d%2===1&&!a.trimStart().startsWith("$$")&&g===1){s[s.length-1]=l+a;continue}}s.push(a)}return s};var Kt=/(!?\[)([^\]]*?)$/,Vt=/(\*\*)([^*]*?)$/,Gt=/(__)([^_]*?)$/,Qt=/(\*\*\*)([^*]*?)$/,Zt=/(\*)([^*]*?)$/,Yt=/(_)([^_]*?)$/,eo=/(`)([^`]*?)$/,to=/(~~)([^~]*?)$/,oo=/(!?)\[([^\]]+)\]\(([^)]+)$/,x=/^[\s_~*`]*$/,st=/^[\s]*[-*+][\s]+$/,S=/[\p{L}\p{N}_]/u,no=/\n+$/,ro=/^```[^`\n]*```?$/,so=/^\*{4,}$/,Z=e=>{let t=(e.match(/```/g)||[]).length;return t>0&&t%2===0&&e.includes(`
8
+ `)},io=e=>{let t=e.match(oo);if(t){let n=t[1]==="!",s=t[2],r=t[3],i=e.lastIndexOf(`${n?"!":""}[${s}](${r}`),a=e.substring(0,i);return n?a:`${a}[${s}](streamdown:incomplete-link)`}let o=e.match(Kt);if(o){if(o[1].startsWith("!")){let s=e.lastIndexOf(o[1]);return e.substring(0,s)}return`${e}](streamdown:incomplete-link)`}return e},ao=e=>{if(Z(e))return e;let t=e.match(Vt);if(t){let o=t[2];if(!o||x.test(o))return e;let n=e.lastIndexOf(t[1]),r=e.substring(0,n).lastIndexOf(`
9
+ `),i=r===-1?0:r+1,a=e.substring(i,n);if(st.test(a)&&o.includes(`
10
+ `))return e;if((e.match(/\*\*/g)||[]).length%2===1)return`${e}**`}return e},lo=e=>{let t=e.match(Gt);if(t){let o=t[2];if(!o||x.test(o))return e;let n=e.lastIndexOf(t[1]),r=e.substring(0,n).lastIndexOf(`
11
+ `),i=r===-1?0:r+1,a=e.substring(i,n);if(st.test(a)&&o.includes(`
12
+ `))return e;if((e.match(/__/g)||[]).length%2===1)return`${e}__`}return e},co=e=>e.split("").reduce((t,o,n)=>{if(o==="*"){let s=e[n-1],r=e[n+1];if(s==="\\"||s&&r&&S.test(s)&&S.test(r))return t;let i=n;for(let l=n-1;l>=0;l--){if(e[l]===`
13
+ `){i=l+1;break}if(l===0){i=0;break}}if(e.substring(i,n).trim()===""&&(r===" "||r===" "))return t;if(s!=="*"&&r!=="*")return t+1}return t},0),mo=e=>{if(Z(e))return e;if(e.match(Zt)){let o=-1;for(let r=0;r<e.length;r++)if(e[r]==="*"&&e[r-1]!=="*"&&e[r+1]!=="*"&&e[r-1]!=="\\"){let i=r>0?e[r-1]:"",a=r<e.length-1?e[r+1]:"";if(i&&a&&S.test(i)&&S.test(a))continue;o=r;break}if(o===-1)return e;let n=e.substring(o+1);if(!n||x.test(n))return e;if(co(e)%2===1)return`${e}*`}return e},it=(e,t)=>{let o=!1,n=!1;for(let s=0;s<e.length&&s<t;s+=1){if(e[s]==="\\"&&e[s+1]==="$"){s+=1;continue}e[s]==="$"&&(e[s+1]==="$"?(n=!n,s+=1,o=!1):n||(o=!o))}return o||n},uo=e=>e.split("").reduce((t,o,n)=>{if(o==="_"){let s=e[n-1],r=e[n+1];if(s==="\\"||it(e,n)||s&&r&&S.test(s)&&S.test(r))return t;if(s!=="_"&&r!=="_")return t+1}return t},0),po=e=>{if(Z(e))return e;if(e.match(Yt)){let o=-1;for(let r=0;r<e.length;r++)if(e[r]==="_"&&e[r-1]!=="_"&&e[r+1]!=="_"&&e[r-1]!=="\\"&&!it(e,r)){let i=r>0?e[r-1]:"",a=r<e.length-1?e[r+1]:"";if(i&&a&&S.test(i)&&S.test(a))continue;o=r;break}if(o===-1)return e;let n=e.substring(o+1);if(!n||x.test(n))return e;if(uo(e)%2===1){let r=e.match(no);return r?`${e.slice(0,-r[0].length)}_${r[0]}`:`${e}_`}}return e},go=(e,t)=>{let o=e.substring(t,t+3)==="```",n=t>0&&e.substring(t-1,t+2)==="```",s=t>1&&e.substring(t-2,t+1)==="```";return o||n||s},ho=e=>{let t=0;for(let o=0;o<e.length;o+=1)e[o]==="`"&&!go(e,o)&&(t+=1);return t},fo=e=>{if(e.match(ro)&&!e.includes(`
11
14
  `))return e.endsWith("``")&&!e.endsWith("```")?`${e}\``:e;let o=(e.match(/```/g)||[]).length,n=o%2===1;if(o>0&&o%2===0&&e.includes(`
12
- `)||(e.endsWith("```\n")||e.endsWith("```"))&&o%2===0)return e;let r=e.match(bt);if(r&&!n){let s=r[2];if(!s||/^[\s_~*`]*$/.test(s))return e;if(It(e)%2===1)return`${e}\``}return e},Lt=e=>{let t=e.match(kt);if(t){let o=t[2];if(!o||/^[\s_~*`]*$/.test(o))return e;if((e.match(/~~/g)||[]).length%2===1)return`${e}~~`}return e};var Bt=e=>{if((e.match(/\$\$/g)||[]).length%2===0)return e;let o=e.indexOf("$$");return o!==-1&&e.indexOf(`
15
+ `)||(e.endsWith("```\n")||e.endsWith("```"))&&o%2===0)return e;let s=e.match(eo);if(s&&!n){let r=s[2];if(!r||x.test(r))return e;if(ho(e)%2===1)return`${e}\``}return e},bo=e=>{let t=e.match(to);if(t){let o=t[2];if(!o||x.test(o))return e;if((e.match(/~~/g)||[]).length%2===1)return`${e}~~`}return e};var wo=e=>{if((e.match(/\$\$/g)||[]).length%2===0)return e;let o=e.indexOf("$$");return o!==-1&&e.indexOf(`
13
16
  `,o)!==-1&&!e.endsWith(`
14
17
  `)?`${e}
15
- $$`:`${e}$$`},$t=e=>{let t=0,o=e.match(/\*+/g)||[];for(let n of o){let r=n.length;r>=3&&(t+=Math.floor(r/3))}return t},xt=e=>{if(R(e)||/^\*{4,}$/.test(e))return e;let t=e.match(gt);if(t){let o=t[2];if(!o||/^[\s_~*`]*$/.test(o))return e;if($t(e)%2===1)return`${e}***`}return e},Oe=e=>{if(!e||typeof e!="string")return e;let t=e,o=yt(t);return o.endsWith("](streamdown:incomplete-link)")?o:(t=o,t=xt(t),t=wt(t),t=vt(t),t=Tt(t),t=Pt(t),t=St(t),t=Lt(t),t=Bt(t),t)};import{jsx as T}from"react/jsx-runtime";var _t={harden:[Et,{allowedImagePrefixes:["*"],allowedLinkPrefixes:["*"],defaultOrigin:void 0,allowDataImages:!0}],raw:Rt,katex:[jt,{errorColor:"var(--color-muted-foreground)"}]},Ot={gfm:[Dt,{}],math:[qt,{singleDollarTextMath:!1}]},X=D(["github-light","github-dark"]),G=D(void 0),j=D(!0),M=D({isAnimating:!1}),ze=We(({content:e,shouldParseIncompleteMarkdown:t,...o})=>{let n=Ue(()=>typeof e=="string"&&t?Oe(e.trim()):e,[e,t]);return T(At,{...o,children:n})},(e,t)=>e.content===t.content);ze.displayName="Block";var Wt=We(({children:e,parseIncompleteMarkdown:t=!0,components:o,rehypePlugins:n=Object.values(_t),remarkPlugins:r=Object.values(Ot),className:s,shikiTheme:i=["github-light","github-dark"],mermaidConfig:d,controls:a=!0,isAnimating:l=!1,...c})=>{let p=Ht(),h=Ue(()=>Ee(typeof e=="string"?e:""),[e]);return T(X.Provider,{value:i,children:T(G.Provider,{value:d,children:T(j.Provider,{value:a,children:T(M.Provider,{value:{isAnimating:l},children:T("div",{className:m("space-y-4",s),children:h.map((g,f)=>T(ze,{components:{...De,...o},content:g,rehypePlugins:n,remarkPlugins:r,shouldParseIncompleteMarkdown:t,...c},`${p}-block-${f}`))})})})})})},(e,t)=>e.children===t.children&&e.shikiTheme===t.shikiTheme&&e.isAnimating===t.isAnimating);Wt.displayName="Streamdown";export{j as ControlsContext,G as MermaidConfigContext,X as ShikiThemeContext,Wt as Streamdown,M as StreamdownRuntimeContext,_t as defaultRehypePlugins,Ot as defaultRemarkPlugins};
18
+ $$`:`${e}$$`},yo=e=>{let t=0,o=e.match(/\*+/g)||[];for(let n of o){let s=n.length;s>=3&&(t+=Math.floor(s/3))}return t},ko=e=>{if(Z(e)||so.test(e))return e;let t=e.match(Qt);if(t){let o=t[2];if(!o||x.test(o))return e;if(yo(e)%2===1)return`${e}***`}return e},be=e=>{if(!e||typeof e!="string")return e;let t=e,o=io(t);return o.endsWith("](streamdown:incomplete-link)")?o:(t=o,t=ko(t),t=ao(t),t=lo(t),t=mo(t),t=po(t),t=fo(t),t=bo(t),t=wo(t),t)};import{defaultUrlTransform as jn}from"react-markdown";import{jsx as H}from"react/jsx-runtime";var xo={harden:[Mo,{allowedImagePrefixes:["*"],allowedLinkPrefixes:["*"],defaultOrigin:void 0,allowDataImages:!0}],raw:Po,katex:[ye,{errorColor:"var(--color-muted-foreground)"}]},Ho={gfm:[So,{}],math:[Lo,{singleDollarTextMath:!1}],cjkFriendly:[No,{}],cjkFriendlyGfmStrikethrough:[Io,{}]},ie=Y(["github-light","github-dark"]),he=Y(void 0),Q=Y(!0),N=Y({isAnimating:!1}),lt=at(({content:e,shouldParseIncompleteMarkdown:t,...o})=>{let n=we(()=>typeof e=="string"&&t?be(e.trim()):e,[e,t]);return H(Co,{...o,children:n})},(e,t)=>e.content===t.content);lt.displayName="Block";var Bo=["github-light","github-dark"],Ao=at(({children:e,parseIncompleteMarkdown:t=!0,components:o,rehypePlugins:n=Object.values(xo),remarkPlugins:s=Object.values(Ho),className:r,shikiTheme:i=Bo,mermaidConfig:a,controls:l=!0,isAnimating:c=!1,urlTransform:d=m=>m,BlockComponent:g=lt,parseMarkdownIntoBlocksFn:f=fe,...h})=>{let m=To(),k=we(()=>f(typeof e=="string"?e:""),[e,f]);vo(()=>{Array.isArray(n)&&n.some(w=>Array.isArray(w)?w[0]===ye:w===ye)&&import("katex/dist/katex.min.css")},[n]);let y=we(()=>({isAnimating:c}),[c]);return H(ie.Provider,{value:i,children:H(he.Provider,{value:a,children:H(Q.Provider,{value:l,children:H(N.Provider,{value:y,children:H("div",{className:u("space-y-4",r),children:k.map((w,C)=>H(g,{components:{...nt,...o},content:w,index:C,rehypePlugins:n,remarkPlugins:s,shouldParseIncompleteMarkdown:t,urlTransform:d,...h},`${m}-block-${C}`))})})})})})},(e,t)=>e.children===t.children&&e.shikiTheme===t.shikiTheme&&e.isAnimating===t.isAnimating);Ao.displayName="Streamdown";export{lt as Block,Q as ControlsContext,he as MermaidConfigContext,ie as ShikiThemeContext,Ao as Streamdown,N as StreamdownRuntimeContext,xo as defaultRehypePlugins,Ho as defaultRemarkPlugins,jn as defaultUrlTransform,be as parseIncompleteMarkdown,fe as parseMarkdownIntoBlocks};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "streamdown",
3
- "version": "1.4.0",
3
+ "version": "1.5.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",
@@ -52,6 +52,8 @@
52
52
  "rehype-harden": "^1.1.5",
53
53
  "rehype-katex": "^7.0.1",
54
54
  "rehype-raw": "^7.0.0",
55
+ "remark-cjk-friendly": "^1.2.3",
56
+ "remark-cjk-friendly-gfm-strikethrough": "^1.2.3",
55
57
  "remark-gfm": "^4.0.1",
56
58
  "remark-math": "^6.0.0",
57
59
  "shiki": "^3.12.2",